From c4b32460de133e62f237920b360620fbe4d60c2e Mon Sep 17 00:00:00 2001 From: svsp Date: Sat, 31 Jan 2026 08:58:40 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D1=81=D0=BB=D0=B5=20=D1=82=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=BE=D0=B2=20=D0=BF=D1=80=D0=B8=D1=88=D0=BB=D0=BE?= =?UTF-8?q?=D1=81=D1=8C=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82=D1=8C?= =?UTF-8?q?=20Autoconf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- automake-1.15.1/.git-log-fix | 13 + automake-1.15.1/AUTHORS | 27 + automake-1.15.1/COPYING | 339 + automake-1.15.1/ChangeLog | 21997 ++++++++++++++++ automake-1.15.1/GNUmakefile | 88 + automake-1.15.1/HACKING | 404 + automake-1.15.1/INSTALL | 370 + automake-1.15.1/Makefile.am | 135 + automake-1.15.1/Makefile.in | 4201 +++ automake-1.15.1/NEWS | 2952 +++ automake-1.15.1/PLANS/README | 25 + .../obsolete-removed/am-prog-mkdir-p.txt | 62 + .../PLANS/obsolete-removed/configure.in.txt | 28 + automake-1.15.1/PLANS/rm-f-without-args.txt | 40 + automake-1.15.1/PLANS/subdir-objects.txt | 71 + .../PLANS/texi/drop-split-info-files.txt | 27 + ...warnings-for-automake-ng-compatibility.txt | 21 + automake-1.15.1/README | 68 + automake-1.15.1/THANKS | 440 + automake-1.15.1/aclocal.m4 | 37 + automake-1.15.1/bin/Makefile.inc | 71 + automake-1.15.1/bin/aclocal.in | 1214 + automake-1.15.1/bin/automake.in | 8247 ++++++ automake-1.15.1/bin/gen-perl-protos | 36 + automake-1.15.1/bootstrap | 127 + automake-1.15.1/configure | 7781 ++++++ automake-1.15.1/configure.ac | 616 + automake-1.15.1/contrib/README | 26 + automake-1.15.1/contrib/check-html.am | 57 + automake-1.15.1/contrib/multilib/README | 9 + automake-1.15.1/contrib/multilib/config-ml.in | 876 + automake-1.15.1/contrib/multilib/multi.m4 | 64 + automake-1.15.1/contrib/multilib/multilib.am | 45 + automake-1.15.1/contrib/multilib/symlink-tree | 78 + automake-1.15.1/contrib/t/Makefile.inc | 26 + automake-1.15.1/contrib/t/help-multilib.sh | 32 + automake-1.15.1/contrib/t/multilib.sh | 160 + .../t/parallel-tests-html-recursive.sh | 163 + .../contrib/t/parallel-tests-html.sh | 144 + automake-1.15.1/contrib/tap-driver.pl | 563 + automake-1.15.1/doc/Makefile.inc | 116 + automake-1.15.1/doc/amhello-1.0.tar.gz | Bin 0 -> 81098 bytes automake-1.15.1/doc/amhello/Makefile.am | 6 + automake-1.15.1/doc/amhello/README | 2 + automake-1.15.1/doc/amhello/configure.ac | 13 + automake-1.15.1/doc/amhello/src/Makefile.am | 6 + automake-1.15.1/doc/amhello/src/main.c | 14 + automake-1.15.1/doc/automake-history.info | 1678 ++ automake-1.15.1/doc/automake-history.texi | 1214 + automake-1.15.1/doc/automake.info | 246 + automake-1.15.1/doc/automake.info-1 | 6916 +++++ automake-1.15.1/doc/automake.info-2 | 6185 +++++ automake-1.15.1/doc/automake.texi | 13215 ++++++++++ automake-1.15.1/doc/fdl.texi | 506 + automake-1.15.1/doc/help2man | 669 + automake-1.15.1/doc/stamp-vti | 4 + automake-1.15.1/doc/version.texi | 4 + automake-1.15.1/gen-testsuite-part | 420 + automake-1.15.1/lib/Automake/ChannelDefs.pm | 444 + automake-1.15.1/lib/Automake/Channels.pm | 836 + automake-1.15.1/lib/Automake/Condition.pm | 657 + automake-1.15.1/lib/Automake/Config.in | 62 + automake-1.15.1/lib/Automake/Configure_ac.pm | 128 + .../lib/Automake/DisjConditions.pm | 557 + automake-1.15.1/lib/Automake/FileUtils.pm | 425 + automake-1.15.1/lib/Automake/General.pm | 87 + automake-1.15.1/lib/Automake/Getopt.pm | 115 + automake-1.15.1/lib/Automake/Item.pm | 206 + automake-1.15.1/lib/Automake/ItemDef.pm | 113 + automake-1.15.1/lib/Automake/Language.pm | 122 + automake-1.15.1/lib/Automake/Location.pm | 279 + automake-1.15.1/lib/Automake/Makefile.inc | 57 + automake-1.15.1/lib/Automake/Options.pm | 476 + automake-1.15.1/lib/Automake/Rule.pm | 879 + automake-1.15.1/lib/Automake/RuleDef.pm | 129 + automake-1.15.1/lib/Automake/VarDef.pm | 349 + automake-1.15.1/lib/Automake/Variable.pm | 1693 ++ automake-1.15.1/lib/Automake/Version.pm | 159 + automake-1.15.1/lib/Automake/Wrap.pm | 166 + automake-1.15.1/lib/Automake/XFile.pm | 324 + automake-1.15.1/lib/COPYING | 674 + automake-1.15.1/lib/INSTALL | 368 + automake-1.15.1/lib/Makefile.inc | 67 + automake-1.15.1/lib/am/Makefile.inc | 65 + automake-1.15.1/lib/am/check.am | 573 + automake-1.15.1/lib/am/check2.am | 60 + automake-1.15.1/lib/am/clean-hdr.am | 20 + automake-1.15.1/lib/am/clean.am | 62 + automake-1.15.1/lib/am/compile.am | 29 + automake-1.15.1/lib/am/configure.am | 166 + automake-1.15.1/lib/am/data.am | 100 + automake-1.15.1/lib/am/dejagnu.am | 93 + automake-1.15.1/lib/am/depend.am | 27 + automake-1.15.1/lib/am/depend2.am | 114 + automake-1.15.1/lib/am/distdir.am | 561 + automake-1.15.1/lib/am/footer.am | 19 + automake-1.15.1/lib/am/header-vars.am | 168 + automake-1.15.1/lib/am/header.am | 19 + automake-1.15.1/lib/am/inst-vars.am | 73 + automake-1.15.1/lib/am/install.am | 105 + automake-1.15.1/lib/am/java.am | 92 + automake-1.15.1/lib/am/lang-compile.am | 39 + automake-1.15.1/lib/am/lex.am | 30 + automake-1.15.1/lib/am/library.am | 20 + automake-1.15.1/lib/am/libs.am | 106 + automake-1.15.1/lib/am/libtool.am | 28 + automake-1.15.1/lib/am/lisp.am | 124 + automake-1.15.1/lib/am/ltlib.am | 123 + automake-1.15.1/lib/am/ltlibrary.am | 18 + automake-1.15.1/lib/am/mans-vars.am | 20 + automake-1.15.1/lib/am/mans.am | 154 + automake-1.15.1/lib/am/program.am | 24 + automake-1.15.1/lib/am/progs.am | 152 + automake-1.15.1/lib/am/python.am | 148 + automake-1.15.1/lib/am/remake-hdr.am | 71 + automake-1.15.1/lib/am/scripts.am | 127 + automake-1.15.1/lib/am/subdirs.am | 76 + automake-1.15.1/lib/am/tags.am | 182 + automake-1.15.1/lib/am/texi-vers.am | 58 + automake-1.15.1/lib/am/texibuild.am | 128 + automake-1.15.1/lib/am/texinfos.am | 411 + automake-1.15.1/lib/am/vala.am | 17 + automake-1.15.1/lib/am/yacc.am | 50 + automake-1.15.1/lib/ar-lib | 270 + automake-1.15.1/lib/compile | 348 + automake-1.15.1/lib/config.guess | 1473 ++ automake-1.15.1/lib/config.sub | 1836 ++ automake-1.15.1/lib/depcomp | 791 + automake-1.15.1/lib/gendocs.sh | 504 + automake-1.15.1/lib/gendocs_template | 91 + automake-1.15.1/lib/gitlog-to-changelog | 499 + automake-1.15.1/lib/gnupload | 440 + automake-1.15.1/lib/install-sh | 501 + automake-1.15.1/lib/mdate-sh | 224 + automake-1.15.1/lib/missing | 215 + automake-1.15.1/lib/mkinstalldirs | 162 + automake-1.15.1/lib/py-compile | 170 + automake-1.15.1/lib/tap-driver.sh | 651 + automake-1.15.1/lib/test-driver | 148 + automake-1.15.1/lib/texinfo.tex | 11685 ++++++++ automake-1.15.1/lib/update-copyright | 274 + automake-1.15.1/lib/ylwrap | 247 + automake-1.15.1/m4/Makefile.inc | 79 + automake-1.15.1/m4/acdir/README | 9 + automake-1.15.1/m4/amversion.in | 37 + automake-1.15.1/m4/amversion.m4 | 37 + automake-1.15.1/m4/ar-lib.m4 | 60 + automake-1.15.1/m4/as.m4 | 19 + automake-1.15.1/m4/auxdir.m4 | 51 + automake-1.15.1/m4/cond-if.m4 | 36 + automake-1.15.1/m4/cond.m4 | 32 + automake-1.15.1/m4/depend.m4 | 189 + automake-1.15.1/m4/depout.m4 | 75 + automake-1.15.1/m4/dmalloc.m4 | 26 + automake-1.15.1/m4/extra-recurs.m4 | 16 + automake-1.15.1/m4/gcj.m4 | 18 + automake-1.15.1/m4/init.m4 | 198 + automake-1.15.1/m4/install-sh.m4 | 21 + .../m4/internal/ac-config-macro-dirs.m4 | 15 + automake-1.15.1/m4/lead-dot.m4 | 19 + automake-1.15.1/m4/lex.m4 | 19 + automake-1.15.1/m4/lispdir.m4 | 51 + automake-1.15.1/m4/maintainer.m4 | 35 + automake-1.15.1/m4/make.m4 | 49 + automake-1.15.1/m4/missing.m4 | 38 + automake-1.15.1/m4/mkdirp.m4 | 32 + automake-1.15.1/m4/obsolete.m4 | 28 + automake-1.15.1/m4/options.m4 | 30 + automake-1.15.1/m4/prog-cc-c-o.m4 | 47 + automake-1.15.1/m4/python.m4 | 240 + automake-1.15.1/m4/runlog.m4 | 17 + automake-1.15.1/m4/sanity.m4 | 82 + automake-1.15.1/m4/silent.m4 | 60 + automake-1.15.1/m4/strip.m4 | 28 + automake-1.15.1/m4/substnot.m4 | 17 + automake-1.15.1/m4/tar.m4 | 132 + automake-1.15.1/m4/upc.m4 | 20 + automake-1.15.1/m4/vala.m4 | 37 + automake-1.15.1/maintainer/am-ft | 131 + automake-1.15.1/maintainer/am-xft | 18 + automake-1.15.1/maintainer/maint.mk | 658 + automake-1.15.1/maintainer/rename-tests | 75 + automake-1.15.1/maintainer/syntax-checks.mk | 541 + automake-1.15.1/old/ChangeLog-tests | 1448 + automake-1.15.1/old/ChangeLog.00 | 2211 ++ automake-1.15.1/old/ChangeLog.01 | 4937 ++++ automake-1.15.1/old/ChangeLog.02 | 3225 +++ automake-1.15.1/old/ChangeLog.03 | 2971 +++ automake-1.15.1/old/ChangeLog.04 | 1623 ++ automake-1.15.1/old/ChangeLog.09 | 5767 ++++ automake-1.15.1/old/ChangeLog.11 | 13107 +++++++++ automake-1.15.1/old/ChangeLog.96 | 3685 +++ automake-1.15.1/old/ChangeLog.98 | 2191 ++ automake-1.15.1/old/TODO | 504 + automake-1.15.1/t/CheckListOfTests.am | 68 + automake-1.15.1/t/Makefile.inc | 272 + automake-1.15.1/t/README | 303 + automake-1.15.1/t/ac-output-old.tap | 177 + automake-1.15.1/t/aclocal-I-and-install.sh | 100 + automake-1.15.1/t/aclocal-I-order-1.sh | 49 + automake-1.15.1/t/aclocal-I-order-2.sh | 46 + automake-1.15.1/t/aclocal-I-order-3.sh | 46 + automake-1.15.1/t/aclocal-acdir.sh | 78 + automake-1.15.1/t/aclocal-amflags.sh | 68 + .../t/aclocal-autoconf-version-check.sh | 50 + .../t/aclocal-comments-respected.sh | 31 + .../aclocal-deleted-header-aclocal-amflags.sh | 60 + automake-1.15.1/t/aclocal-deleted-header.sh | 57 + automake-1.15.1/t/aclocal-deps-subdir.sh | 69 + automake-1.15.1/t/aclocal-deps.sh | 75 + automake-1.15.1/t/aclocal-dirlist-abspath.sh | 42 + automake-1.15.1/t/aclocal-dirlist-globbing.sh | 55 + automake-1.15.1/t/aclocal-dirlist.sh | 56 + automake-1.15.1/t/aclocal-install-absdir.sh | 33 + automake-1.15.1/t/aclocal-install-fail.sh | 63 + automake-1.15.1/t/aclocal-install-mkdir.sh | 70 + ...-m4-include-are-scanned-aclocal-amflags.sh | 108 + .../t/aclocal-m4-include-are-scanned.sh | 108 + automake-1.15.1/t/aclocal-m4-sinclude.sh | 73 + automake-1.15.1/t/aclocal-macrodir.tap | 239 + automake-1.15.1/t/aclocal-macrodirs.tap | 445 + automake-1.15.1/t/aclocal-missing-macros.sh | 41 + automake-1.15.1/t/aclocal-no-extra-scan.sh | 37 + automake-1.15.1/t/aclocal-no-force.sh | 117 + .../t/aclocal-no-install-no-mkdir.sh | 36 + .../t/aclocal-no-symlinked-overwrite.sh | 41 + .../t/aclocal-no-unused-required.sh | 42 + .../t/aclocal-path-install-serial.sh | 86 + automake-1.15.1/t/aclocal-path-install.sh | 53 + automake-1.15.1/t/aclocal-path-nonexistent.sh | 34 + automake-1.15.1/t/aclocal-path-precedence.sh | 91 + automake-1.15.1/t/aclocal-path.sh | 56 + automake-1.15.1/t/aclocal-pr450.sh | 49 + automake-1.15.1/t/aclocal-print-acdir.sh | 31 + automake-1.15.1/t/aclocal-remake-misc.sh | 74 + automake-1.15.1/t/aclocal-req.sh | 34 + .../t/aclocal-scan-configure-ac-pr319.sh | 47 + automake-1.15.1/t/aclocal-serial.sh | 137 + .../t/aclocal-underquoted-defun.sh | 37 + automake-1.15.1/t/aclocal-verbose-install.sh | 52 + automake-1.15.1/t/aclocal.sh | 49 + automake-1.15.1/t/acsilent.sh | 36 + automake-1.15.1/t/acsubst.sh | 31 + automake-1.15.1/t/acsubst2.sh | 31 + automake-1.15.1/t/add-missing-install-sh.sh | 41 + automake-1.15.1/t/add-missing-multiple.sh | 47 + automake-1.15.1/t/add-missing.tap | 382 + automake-1.15.1/t/all.sh | 33 + automake-1.15.1/t/all2.sh | 32 + automake-1.15.1/t/alloca.sh | 40 + automake-1.15.1/t/alloca2.sh | 40 + automake-1.15.1/t/alpha.sh | 71 + automake-1.15.1/t/alpha2.sh | 59 + automake-1.15.1/t/am-config-header.sh | 50 + automake-1.15.1/t/am-default-source-ext.sh | 87 + .../am-include-only-one-generated-fragment.sh | 48 + automake-1.15.1/t/am-macro-not-found.sh | 25 + automake-1.15.1/t/am-missing-prog.sh | 97 + automake-1.15.1/t/am-prog-cc-c-o.sh | 126 + automake-1.15.1/t/am-prog-cc-stdc.sh | 44 + automake-1.15.1/t/am-tests-environment.sh | 90 + automake-1.15.1/t/amassign.sh | 28 + automake-1.15.1/t/amhello-binpkg.sh | 51 + automake-1.15.1/t/amhello-cflags.sh | 50 + automake-1.15.1/t/amhello-cross-compile.sh | 53 + .../t/aminit-moreargs-deprecation.sh | 51 + .../t/aminit-trailing-dnl-comment-pr16841.sh | 44 + automake-1.15.1/t/amopt.sh | 38 + automake-1.15.1/t/amopts-location.sh | 83 + .../t/amopts-variable-expansion.sh | 52 + automake-1.15.1/t/amsubst.sh | 39 + automake-1.15.1/t/ansi2knr-no-more.sh | 56 + automake-1.15.1/t/ar-lib-w.sh | 15 + automake-1.15.1/t/ar-lib.sh | 113 + automake-1.15.1/t/ar-lib2.sh | 38 + automake-1.15.1/t/ar-lib3.sh | 44 + automake-1.15.1/t/ar-lib4.sh | 57 + automake-1.15.1/t/ar-lib5a.sh | 71 + automake-1.15.1/t/ar-lib5b.sh | 97 + automake-1.15.1/t/ar-lib6a.sh | 37 + automake-1.15.1/t/ar-lib6b.sh | 37 + automake-1.15.1/t/ar-lib7.sh | 34 + automake-1.15.1/t/ar.sh | 44 + automake-1.15.1/t/ar2.sh | 38 + automake-1.15.1/t/ar3.sh | 41 + automake-1.15.1/t/ar4.sh | 37 + automake-1.15.1/t/ar5.sh | 40 + automake-1.15.1/t/asm.sh | 100 + automake-1.15.1/t/asm2.sh | 116 + automake-1.15.1/t/asm3.sh | 116 + .../t/autodist-acconfig-no-subdir.sh | 56 + automake-1.15.1/t/autodist-acconfig.sh | 44 + automake-1.15.1/t/autodist-aclocal-m4.sh | 53 + automake-1.15.1/t/autodist-config-headers.sh | 59 + .../t/autodist-configure-no-subdir.sh | 70 + automake-1.15.1/t/autodist-no-duplicate.sh | 50 + automake-1.15.1/t/autodist-stamp-vti.sh | 58 + automake-1.15.1/t/autodist-subdir.sh | 120 + automake-1.15.1/t/autodist.sh | 103 + automake-1.15.1/t/autohdr-subdir-pr12495.sh | 83 + automake-1.15.1/t/autohdr.sh | 30 + automake-1.15.1/t/autohdr3.sh | 53 + automake-1.15.1/t/autohdr4.sh | 80 + automake-1.15.1/t/autohdrdry.sh | 42 + automake-1.15.1/t/automake-cmdline.tap | 63 + automake-1.15.1/t/auxdir-autodetect.sh | 130 + automake-1.15.1/t/auxdir-cc-pr15981.sh | 57 + automake-1.15.1/t/auxdir-computed.tap | 39 + automake-1.15.1/t/auxdir-misplaced.sh | 31 + automake-1.15.1/t/auxdir-nonexistent.sh | 34 + automake-1.15.1/t/auxdir-pr15981.sh | 39 + automake-1.15.1/t/auxdir-pr19311.sh | 45 + automake-1.15.1/t/auxdir-unportable.tap | 51 + automake-1.15.1/t/auxdir.sh | 42 + automake-1.15.1/t/auxdir6.sh | 50 + automake-1.15.1/t/auxdir7.sh | 47 + automake-1.15.1/t/auxdir8.sh | 46 + automake-1.15.1/t/ax/am-test-lib.sh | 1063 + automake-1.15.1/t/ax/cc-no-c-o.in | 41 + automake-1.15.1/t/ax/deltree.pl | 34 + automake-1.15.1/t/ax/depcomp.sh | 417 + automake-1.15.1/t/ax/distcheck-hook-m4.am | 30 + .../t/ax/extract-testsuite-summary.pl | 30 + automake-1.15.1/t/ax/is | 57 + automake-1.15.1/t/ax/is_newest | 42 + automake-1.15.1/t/ax/runtest.in | 130 + automake-1.15.1/t/ax/shell-no-trail-bslash.in | 85 + automake-1.15.1/t/ax/tap-functions.sh | 231 + automake-1.15.1/t/ax/tap-setup.sh | 47 + automake-1.15.1/t/ax/tap-summary-aux.sh | 357 + automake-1.15.1/t/ax/test-defs.in | 201 + automake-1.15.1/t/ax/test-init.sh | 29 + automake-1.15.1/t/ax/test-lib.sh | 317 + .../t/ax/testsuite-summary-checks.sh | 102 + automake-1.15.1/t/ax/trivial-test-driver | 102 + automake-1.15.1/t/backcompat-acout.sh | 66 + automake-1.15.1/t/backcompat.sh | 64 + automake-1.15.1/t/backcompat2.sh | 73 + automake-1.15.1/t/backcompat3.sh | 147 + automake-1.15.1/t/backcompat6.sh | 105 + .../t/backslash-before-trailing-whitespace.sh | 45 + automake-1.15.1/t/backslash-issues.sh | 47 + automake-1.15.1/t/badline.sh | 33 + automake-1.15.1/t/badopt.sh | 25 + automake-1.15.1/t/badprog.sh | 32 + automake-1.15.1/t/built-sources-check-w.sh | 15 + automake-1.15.1/t/built-sources-check.sh | 67 + automake-1.15.1/t/built-sources-cond.sh | 91 + automake-1.15.1/t/built-sources-fork-bomb.sh | 67 + automake-1.15.1/t/built-sources-install.sh | 69 + automake-1.15.1/t/built-sources-subdir.sh | 62 + automake-1.15.1/t/built-sources.sh | 68 + automake-1.15.1/t/c-demo.sh | 178 + automake-1.15.1/t/candist.sh | 32 + automake-1.15.1/t/canon-name.sh | 38 + automake-1.15.1/t/canon.sh | 35 + automake-1.15.1/t/canon2.sh | 35 + automake-1.15.1/t/canon3.sh | 36 + automake-1.15.1/t/canon4.sh | 40 + automake-1.15.1/t/canon5.sh | 58 + automake-1.15.1/t/canon6.sh | 42 + automake-1.15.1/t/canon7.sh | 101 + automake-1.15.1/t/canon8.sh | 37 + automake-1.15.1/t/ccnoco-deps.sh | 82 + automake-1.15.1/t/ccnoco-lib.sh | 73 + automake-1.15.1/t/ccnoco-lt.sh | 76 + automake-1.15.1/t/ccnoco.sh | 72 + automake-1.15.1/t/ccnoco3.sh | 59 + automake-1.15.1/t/ccnoco4.sh | 53 + .../t/check-concurrency-bug9245.sh | 57 + automake-1.15.1/t/check-exported-srcdir-w.sh | 15 + automake-1.15.1/t/check-exported-srcdir.sh | 64 + automake-1.15.1/t/check-fd-redirect-w.sh | 15 + automake-1.15.1/t/check-fd-redirect.sh | 108 + automake-1.15.1/t/check-no-test-driver.sh | 37 + automake-1.15.1/t/check-subst-prog-w.sh | 15 + automake-1.15.1/t/check-subst-prog.sh | 82 + automake-1.15.1/t/check-subst-w.sh | 15 + automake-1.15.1/t/check-subst.sh | 88 + .../t/check-tests-in-builddir-w.sh | 15 + automake-1.15.1/t/check-tests-in-builddir.sh | 91 + automake-1.15.1/t/check-w.sh | 15 + automake-1.15.1/t/check.sh | 41 + automake-1.15.1/t/check10.sh | 82 + automake-1.15.1/t/check11-w.sh | 15 + automake-1.15.1/t/check11.sh | 59 + automake-1.15.1/t/check12-w.sh | 15 + automake-1.15.1/t/check12.sh | 212 + automake-1.15.1/t/check2-w.sh | 15 + automake-1.15.1/t/check2.sh | 68 + automake-1.15.1/t/check4-w.sh | 15 + automake-1.15.1/t/check4.sh | 80 + automake-1.15.1/t/check5-w.sh | 15 + automake-1.15.1/t/check5.sh | 60 + automake-1.15.1/t/check6-w.sh | 15 + automake-1.15.1/t/check6.sh | 54 + automake-1.15.1/t/check7-w.sh | 15 + automake-1.15.1/t/check7.sh | 67 + automake-1.15.1/t/check8-w.sh | 15 + automake-1.15.1/t/check8.sh | 95 + automake-1.15.1/t/checkall.sh | 31 + automake-1.15.1/t/clean.sh | 26 + automake-1.15.1/t/colneq.sh | 32 + automake-1.15.1/t/colneq2.sh | 40 + automake-1.15.1/t/colneq3.sh | 44 + automake-1.15.1/t/colon.sh | 46 + automake-1.15.1/t/colon2.sh | 79 + automake-1.15.1/t/colon3.sh | 91 + automake-1.15.1/t/colon4.sh | 39 + automake-1.15.1/t/colon5.sh | 71 + automake-1.15.1/t/colon6.sh | 102 + automake-1.15.1/t/colon7.sh | 54 + automake-1.15.1/t/color-tests-opt.sh | 39 + automake-1.15.1/t/color-tests-w.sh | 15 + automake-1.15.1/t/color-tests.sh | 150 + automake-1.15.1/t/color-tests2-w.sh | 15 + automake-1.15.1/t/color-tests2.sh | 201 + automake-1.15.1/t/commen10.sh | 32 + automake-1.15.1/t/commen11.sh | 41 + automake-1.15.1/t/comment-block.sh | 34 + automake-1.15.1/t/comment.sh | 27 + automake-1.15.1/t/comment2.sh | 34 + automake-1.15.1/t/comment3.sh | 31 + automake-1.15.1/t/comment4.sh | 41 + automake-1.15.1/t/comment5.sh | 85 + automake-1.15.1/t/comment6.sh | 68 + automake-1.15.1/t/comment7.sh | 57 + automake-1.15.1/t/comment8.sh | 48 + automake-1.15.1/t/comment9.sh | 53 + automake-1.15.1/t/comments-in-var-def.sh | 56 + automake-1.15.1/t/compile-w.sh | 15 + automake-1.15.1/t/compile.sh | 45 + automake-1.15.1/t/compile2-w.sh | 15 + automake-1.15.1/t/compile2.sh | 84 + automake-1.15.1/t/compile3-w.sh | 15 + automake-1.15.1/t/compile3.sh | 62 + automake-1.15.1/t/compile4-w.sh | 15 + automake-1.15.1/t/compile4.sh | 82 + automake-1.15.1/t/compile5-w.sh | 15 + automake-1.15.1/t/compile5.sh | 80 + automake-1.15.1/t/compile6-w.sh | 15 + automake-1.15.1/t/compile6.sh | 115 + automake-1.15.1/t/compile7-w.sh | 15 + automake-1.15.1/t/compile7.sh | 82 + automake-1.15.1/t/compile_f90_c_cxx.sh | 43 + automake-1.15.1/t/compile_f_c_cxx.sh | 46 + automake-1.15.1/t/cond-basic.sh | 42 + automake-1.15.1/t/cond.sh | 42 + automake-1.15.1/t/cond10.sh | 47 + automake-1.15.1/t/cond11.sh | 61 + automake-1.15.1/t/cond13.sh | 58 + automake-1.15.1/t/cond14.sh | 51 + automake-1.15.1/t/cond15.sh | 61 + automake-1.15.1/t/cond16.sh | 55 + automake-1.15.1/t/cond17.sh | 42 + automake-1.15.1/t/cond18.sh | 63 + automake-1.15.1/t/cond19.sh | 69 + automake-1.15.1/t/cond20.sh | 46 + automake-1.15.1/t/cond21.sh | 76 + automake-1.15.1/t/cond22.sh | 69 + automake-1.15.1/t/cond23.sh | 37 + automake-1.15.1/t/cond24.sh | 39 + automake-1.15.1/t/cond25.sh | 39 + automake-1.15.1/t/cond26.sh | 38 + automake-1.15.1/t/cond27.sh | 38 + automake-1.15.1/t/cond28.sh | 38 + automake-1.15.1/t/cond3.sh | 79 + automake-1.15.1/t/cond30.sh | 59 + automake-1.15.1/t/cond31.sh | 56 + automake-1.15.1/t/cond32.sh | 71 + automake-1.15.1/t/cond33.sh | 79 + automake-1.15.1/t/cond34.sh | 71 + automake-1.15.1/t/cond35.sh | 100 + automake-1.15.1/t/cond36.sh | 61 + automake-1.15.1/t/cond37.sh | 53 + automake-1.15.1/t/cond38.sh | 67 + automake-1.15.1/t/cond39.sh | 105 + automake-1.15.1/t/cond4.sh | 65 + automake-1.15.1/t/cond40.sh | 83 + automake-1.15.1/t/cond41.sh | 30 + automake-1.15.1/t/cond42.sh | 60 + automake-1.15.1/t/cond43.sh | 44 + automake-1.15.1/t/cond44.sh | 38 + automake-1.15.1/t/cond45.sh | 39 + automake-1.15.1/t/cond46.sh | 112 + automake-1.15.1/t/cond5.sh | 69 + automake-1.15.1/t/cond6.sh | 69 + automake-1.15.1/t/cond7.sh | 39 + automake-1.15.1/t/cond8.sh | 77 + automake-1.15.1/t/cond9.sh | 44 + automake-1.15.1/t/condd.sh | 73 + automake-1.15.1/t/condhook.sh | 48 + automake-1.15.1/t/condhook2.sh | 47 + automake-1.15.1/t/condinc.sh | 42 + automake-1.15.1/t/condinc2.sh | 59 + automake-1.15.1/t/condlib.sh | 44 + automake-1.15.1/t/condman2.sh | 33 + automake-1.15.1/t/condman3.sh | 74 + automake-1.15.1/t/confdeps.sh | 37 + automake-1.15.1/t/conff.sh | 88 + automake-1.15.1/t/conff2.sh | 36 + automake-1.15.1/t/conffile-leading-dot.sh | 60 + automake-1.15.1/t/confh-subdir-clean.sh | 40 + automake-1.15.1/t/confh.sh | 63 + automake-1.15.1/t/confh4.sh | 47 + automake-1.15.1/t/confh5.sh | 58 + automake-1.15.1/t/confh6.sh | 45 + automake-1.15.1/t/confh7.sh | 44 + automake-1.15.1/t/confh8.sh | 66 + automake-1.15.1/t/configure.sh | 59 + automake-1.15.1/t/confincl.sh | 36 + automake-1.15.1/t/conflnk.sh | 70 + automake-1.15.1/t/conflnk2.sh | 57 + automake-1.15.1/t/conflnk3.sh | 86 + automake-1.15.1/t/conflnk4.sh | 93 + automake-1.15.1/t/confsub.sh | 57 + automake-1.15.1/t/confvar.sh | 32 + automake-1.15.1/t/confvar2.sh | 34 + automake-1.15.1/t/copy.sh | 101 + automake-1.15.1/t/cscope.tap | 170 + automake-1.15.1/t/cscope2.sh | 34 + automake-1.15.1/t/cscope3.sh | 39 + automake-1.15.1/t/cxx-demo.sh | 182 + automake-1.15.1/t/cxx-lt-demo.sh | 134 + automake-1.15.1/t/cxx.sh | 34 + automake-1.15.1/t/cxx2.sh | 30 + automake-1.15.1/t/cxxcpp.sh | 32 + automake-1.15.1/t/cxxlibobj.sh | 40 + automake-1.15.1/t/cxxlink.sh | 39 + automake-1.15.1/t/cxxnoc.sh | 37 + automake-1.15.1/t/cygnus-no-more.sh | 46 + automake-1.15.1/t/cygwin32.sh | 38 + automake-1.15.1/t/dash.sh | 29 + automake-1.15.1/t/defun.sh | 35 + automake-1.15.1/t/defun2.sh | 40 + .../t/dejagnu-absolute-builddir.sh | 60 + automake-1.15.1/t/dejagnu-relative-srcdir.sh | 84 + automake-1.15.1/t/dejagnu-siteexp-append.sh | 70 + automake-1.15.1/t/dejagnu-siteexp-extend.sh | 159 + automake-1.15.1/t/dejagnu-siteexp-useredit.sh | 67 + automake-1.15.1/t/dejagnu.sh | 35 + automake-1.15.1/t/dejagnu2.sh | 46 + automake-1.15.1/t/dejagnu3.sh | 69 + automake-1.15.1/t/dejagnu4.sh | 102 + automake-1.15.1/t/dejagnu5.sh | 63 + automake-1.15.1/t/dejagnu6.sh | 58 + automake-1.15.1/t/dejagnu7.sh | 62 + automake-1.15.1/t/deleted-am.sh | 57 + automake-1.15.1/t/deleted-m4.sh | 63 + automake-1.15.1/t/depacl2.sh | 27 + automake-1.15.1/t/depcomp-auto.tap | 8 + automake-1.15.1/t/depcomp-cpp.tap | 8 + automake-1.15.1/t/depcomp-dashmstdout.tap | 8 + automake-1.15.1/t/depcomp-disabled.tap | 8 + automake-1.15.1/t/depcomp-gcc.tap | 8 + automake-1.15.1/t/depcomp-implicit-auxdir.sh | 70 + automake-1.15.1/t/depcomp-lt-auto.tap | 8 + automake-1.15.1/t/depcomp-lt-cpp.tap | 8 + automake-1.15.1/t/depcomp-lt-dashmstdout.tap | 8 + automake-1.15.1/t/depcomp-lt-disabled.tap | 8 + automake-1.15.1/t/depcomp-lt-gcc.tap | 8 + automake-1.15.1/t/depcomp-lt-makedepend.tap | 8 + automake-1.15.1/t/depcomp-lt-msvcmsys.tap | 8 + automake-1.15.1/t/depcomp-lt-msvisualcpp.tap | 8 + automake-1.15.1/t/depcomp-makedepend.tap | 8 + automake-1.15.1/t/depcomp-msvcmsys.tap | 8 + automake-1.15.1/t/depcomp-msvisualcpp.tap | 8 + automake-1.15.1/t/depcomp.sh | 48 + automake-1.15.1/t/depcomp2.sh | 53 + automake-1.15.1/t/depcomp8a.sh | 83 + automake-1.15.1/t/depcomp8b.sh | 78 + automake-1.15.1/t/depdist.sh | 74 + automake-1.15.1/t/depend.sh | 36 + automake-1.15.1/t/depend3.sh | 46 + automake-1.15.1/t/depend4.sh | 36 + automake-1.15.1/t/depend5.sh | 77 + automake-1.15.1/t/depend6.sh | 46 + automake-1.15.1/t/deprecated-acinit.sh | 52 + automake-1.15.1/t/destdir.sh | 50 + automake-1.15.1/t/dir-named-obj-is-bad.sh | 61 + automake-1.15.1/t/discover.sh | 43 + automake-1.15.1/t/dist-auxdir-many-subdirs.sh | 137 + automake-1.15.1/t/dist-auxfile-2.sh | 60 + automake-1.15.1/t/dist-auxfile.sh | 95 + automake-1.15.1/t/dist-formats.tap | 469 + automake-1.15.1/t/dist-included-parent-dir.sh | 51 + automake-1.15.1/t/dist-install-sh.sh | 40 + automake-1.15.1/t/dist-lzma.sh | 41 + automake-1.15.1/t/dist-missing-am.sh | 65 + automake-1.15.1/t/dist-missing-included-m4.sh | 67 + automake-1.15.1/t/dist-missing-m4.sh | 69 + automake-1.15.1/t/dist-pr109765.sh | 42 + automake-1.15.1/t/dist-readonly.sh | 62 + automake-1.15.1/t/dist-repeated.sh | 102 + automake-1.15.1/t/dist-shar.sh | 47 + automake-1.15.1/t/dist-tarZ.sh | 59 + .../t/dist-with-unreadable-makefile-fails.sh | 52 + .../t/distcheck-configure-flags-am.sh | 67 + .../t/distcheck-configure-flags-subpkg.sh | 80 + .../t/distcheck-configure-flags.sh | 53 + automake-1.15.1/t/distcheck-hook.sh | 51 + automake-1.15.1/t/distcheck-hook2.sh | 79 + automake-1.15.1/t/distcheck-missing-m4.sh | 116 + .../distcheck-no-prefix-or-srcdir-override.sh | 60 + automake-1.15.1/t/distcheck-outdated-m4.sh | 134 + .../t/distcheck-override-infodir.sh | 78 + automake-1.15.1/t/distcheck-pr10470.sh | 57 + automake-1.15.1/t/distcheck-pr18286.sh | 70 + automake-1.15.1/t/distcheck-pr9579.sh | 92 + .../t/distcheck-writable-srcdir.sh | 48 + automake-1.15.1/t/distcleancheck.sh | 69 + automake-1.15.1/t/distcom-subdir.sh | 76 + automake-1.15.1/t/distcom2.sh | 79 + automake-1.15.1/t/distcom3.sh | 55 + automake-1.15.1/t/distcom4.sh | 62 + automake-1.15.1/t/distcom5.sh | 72 + automake-1.15.1/t/distdir.sh | 81 + automake-1.15.1/t/disthook.sh | 86 + automake-1.15.1/t/distlinks.sh | 72 + automake-1.15.1/t/distlinksbrk.sh | 67 + automake-1.15.1/t/distname.sh | 47 + automake-1.15.1/t/dmalloc.sh | 59 + .../t/doc-parsing-buglets-colneq-subst.sh | 37 + automake-1.15.1/t/doc-parsing-buglets-tabs.sh | 59 + automake-1.15.1/t/dollar.sh | 46 + automake-1.15.1/t/dollarvar.sh | 56 + automake-1.15.1/t/dollarvar2.sh | 86 + automake-1.15.1/t/double.sh | 29 + automake-1.15.1/t/dup2.sh | 29 + automake-1.15.1/t/else.sh | 38 + automake-1.15.1/t/empty-data-primary.sh | 31 + automake-1.15.1/t/empty-sources-primary.tap | 49 + automake-1.15.1/t/exdir.sh | 30 + automake-1.15.1/t/exdir2.sh | 29 + automake-1.15.1/t/exdir3.sh | 35 + automake-1.15.1/t/exeext.sh | 83 + automake-1.15.1/t/exeext2.sh | 43 + automake-1.15.1/t/exeext3.sh | 43 + automake-1.15.1/t/exeext4-w.sh | 15 + automake-1.15.1/t/exeext4.sh | 70 + automake-1.15.1/t/ext.sh | 43 + automake-1.15.1/t/ext2.sh | 67 + automake-1.15.1/t/ext3.sh | 39 + automake-1.15.1/t/extra-data.sh | 33 + automake-1.15.1/t/extra-deps-lt.sh | 86 + automake-1.15.1/t/extra-deps.sh | 104 + .../t/extra-dist-dirs-and-subdirs.sh | 57 + .../t/extra-dist-vpath-dir-merge.sh | 66 + automake-1.15.1/t/extra-dist-vpath-dir.sh | 40 + automake-1.15.1/t/extra-dist-wildcards-gnu.sh | 93 + .../t/extra-dist-wildcards-vpath.sh | 53 + automake-1.15.1/t/extra-dist-wildcards.sh | 50 + automake-1.15.1/t/extra-portability.sh | 95 + automake-1.15.1/t/extra-portability2.sh | 50 + automake-1.15.1/t/extra-portability3.sh | 60 + automake-1.15.1/t/extra-programs-and-libs.sh | 43 + automake-1.15.1/t/extra-programs-empty.sh | 53 + automake-1.15.1/t/extra-programs-misc.sh | 36 + .../t/extra-sources-no-spurious.sh | 34 + automake-1.15.1/t/extra-sources.sh | 36 + automake-1.15.1/t/extra.sh | 41 + automake-1.15.1/t/f90only.sh | 34 + automake-1.15.1/t/flavor.sh | 60 + automake-1.15.1/t/flibs.sh | 54 + automake-1.15.1/t/fn99.sh | 50 + automake-1.15.1/t/fn99subdir.sh | 80 + automake-1.15.1/t/fnoc.sh | 39 + automake-1.15.1/t/fonly.sh | 34 + automake-1.15.1/t/forcemiss.sh | 34 + automake-1.15.1/t/forcemiss2.sh | 40 + automake-1.15.1/t/fort1.sh | 30 + automake-1.15.1/t/fort2.sh | 92 + automake-1.15.1/t/fort4.sh | 94 + automake-1.15.1/t/fort5.sh | 109 + automake-1.15.1/t/fortdep.sh | 39 + automake-1.15.1/t/gcj.sh | 36 + automake-1.15.1/t/gcj2.sh | 33 + automake-1.15.1/t/gcj3.sh | 36 + automake-1.15.1/t/gcj4.sh | 49 + automake-1.15.1/t/gcj5.sh | 32 + automake-1.15.1/t/gcj6.sh | 51 + automake-1.15.1/t/get-sysconf.sh | 70 + automake-1.15.1/t/gettext-basics.sh | 58 + automake-1.15.1/t/gettext-config-rpath.sh | 45 + automake-1.15.1/t/gettext-external-pr338.sh | 65 + automake-1.15.1/t/gettext-intl-subdir.sh | 49 + automake-1.15.1/t/gettext-macros.sh | 96 + automake-1.15.1/t/gettext-pr381.sh | 45 + automake-1.15.1/t/gnits.sh | 42 + automake-1.15.1/t/gnits2.sh | 115 + automake-1.15.1/t/gnits3.sh | 105 + automake-1.15.1/t/gnumake.sh | 43 + automake-1.15.1/t/gnuwarn.sh | 54 + automake-1.15.1/t/gnuwarn2.sh | 42 + automake-1.15.1/t/hdr-vars-defined-once.sh | 46 + automake-1.15.1/t/header.sh | 45 + automake-1.15.1/t/help-depend.sh | 37 + automake-1.15.1/t/help-depend2.sh | 38 + automake-1.15.1/t/help-dmalloc.sh | 32 + automake-1.15.1/t/help-init.sh | 37 + automake-1.15.1/t/help-lispdir.sh | 37 + automake-1.15.1/t/help-python.sh | 32 + automake-1.15.1/t/help-silent.sh | 38 + automake-1.15.1/t/help-upc.sh | 33 + automake-1.15.1/t/help.sh | 44 + automake-1.15.1/t/help2.sh | 52 + automake-1.15.1/t/help3.sh | 60 + automake-1.15.1/t/help4.sh | 54 + automake-1.15.1/t/hfs.sh | 33 + automake-1.15.1/t/implicit.sh | 35 + automake-1.15.1/t/init.sh | 38 + automake-1.15.1/t/init2.sh | 30 + automake-1.15.1/t/install-info-dir.sh | 190 + automake-1.15.1/t/install-sh-option-C-w.sh | 15 + automake-1.15.1/t/install-sh-option-C.sh | 45 + automake-1.15.1/t/install-sh-unittests-w.sh | 15 + automake-1.15.1/t/install-sh-unittests.sh | 152 + automake-1.15.1/t/installdir.sh | 64 + automake-1.15.1/t/instdat.sh | 33 + automake-1.15.1/t/instdat2.sh | 88 + automake-1.15.1/t/instdir-cond.sh | 48 + automake-1.15.1/t/instdir-cond2.sh | 51 + automake-1.15.1/t/instdir-java.sh | 51 + automake-1.15.1/t/instdir-lisp.sh | 48 + automake-1.15.1/t/instdir-ltlib.sh | 73 + automake-1.15.1/t/instdir-no-empty.sh | 122 + automake-1.15.1/t/instdir-prog.sh | 72 + automake-1.15.1/t/instdir-python.sh | 52 + automake-1.15.1/t/instdir-texi.sh | 62 + automake-1.15.1/t/instdir.sh | 61 + automake-1.15.1/t/instdir2.sh | 83 + automake-1.15.1/t/instexec.sh | 27 + automake-1.15.1/t/instfail-info.sh | 63 + automake-1.15.1/t/instfail-java.sh | 57 + automake-1.15.1/t/instfail-libtool.sh | 81 + automake-1.15.1/t/instfail.sh | 94 + automake-1.15.1/t/insthook.sh | 77 + automake-1.15.1/t/instman.sh | 36 + automake-1.15.1/t/instman2.sh | 33 + automake-1.15.1/t/instmany-mans.sh | 168 + automake-1.15.1/t/instmany-python.sh | 157 + automake-1.15.1/t/instmany.sh | 212 + automake-1.15.1/t/instspc.tap | 341 + automake-1.15.1/t/interp.sh | 38 + automake-1.15.1/t/interp2.sh | 37 + automake-1.15.1/t/java-check.sh | 64 + automake-1.15.1/t/java-clean.sh | 66 + automake-1.15.1/t/java-compile-install.sh | 97 + automake-1.15.1/t/java-compile-run-flat.sh | 241 + automake-1.15.1/t/java-compile-run-nested.sh | 250 + automake-1.15.1/t/java-empty-classpath.sh | 88 + automake-1.15.1/t/java-extra.sh | 73 + automake-1.15.1/t/java-mix.sh | 68 + automake-1.15.1/t/java-no-duplicate.sh | 45 + automake-1.15.1/t/java-nobase.sh | 65 + automake-1.15.1/t/java-noinst.sh | 55 + automake-1.15.1/t/java-rebuild.sh | 124 + automake-1.15.1/t/java-sources.sh | 65 + automake-1.15.1/t/java-uninstall.sh | 97 + automake-1.15.1/t/java.sh | 45 + automake-1.15.1/t/java2.sh | 47 + automake-1.15.1/t/java3.sh | 56 + automake-1.15.1/t/javadir-undefined.sh | 35 + automake-1.15.1/t/javaflags.sh | 56 + automake-1.15.1/t/javaprim.sh | 36 + automake-1.15.1/t/javasubst.sh | 36 + automake-1.15.1/t/ldadd.sh | 46 + automake-1.15.1/t/ldflags.sh | 50 + automake-1.15.1/t/lex-clean-cxx.sh | 126 + automake-1.15.1/t/lex-clean.sh | 114 + automake-1.15.1/t/lex-depend-cxx.sh | 92 + automake-1.15.1/t/lex-depend-grep.sh | 46 + automake-1.15.1/t/lex-depend.sh | 93 + automake-1.15.1/t/lex-header.sh | 93 + automake-1.15.1/t/lex-lib-external.sh | 79 + automake-1.15.1/t/lex-lib.sh | 72 + automake-1.15.1/t/lex-libobj.sh | 83 + automake-1.15.1/t/lex-line.sh | 135 + automake-1.15.1/t/lex-multiple.sh | 107 + automake-1.15.1/t/lex-nodist.sh | 90 + automake-1.15.1/t/lex-noyywrap.sh | 76 + automake-1.15.1/t/lex-pr204.sh | 88 + automake-1.15.1/t/lex-subobj-nodep.sh | 73 + automake-1.15.1/t/lex.sh | 40 + automake-1.15.1/t/lex2.sh | 35 + automake-1.15.1/t/lex3.sh | 91 + automake-1.15.1/t/lex5.sh | 97 + automake-1.15.1/t/lexcpp.sh | 44 + automake-1.15.1/t/lexvpath.sh | 128 + automake-1.15.1/t/lflags-cxx.sh | 70 + automake-1.15.1/t/lflags.sh | 71 + automake-1.15.1/t/libexec.sh | 35 + automake-1.15.1/t/libobj-basic.sh | 112 + automake-1.15.1/t/libobj10.sh | 56 + automake-1.15.1/t/libobj12.sh | 77 + automake-1.15.1/t/libobj13.sh | 51 + automake-1.15.1/t/libobj14.sh | 44 + automake-1.15.1/t/libobj15a.sh | 40 + automake-1.15.1/t/libobj15b.sh | 43 + automake-1.15.1/t/libobj15c.sh | 50 + automake-1.15.1/t/libobj16a.sh | 139 + automake-1.15.1/t/libobj16b.sh | 140 + automake-1.15.1/t/libobj17.sh | 72 + automake-1.15.1/t/libobj18.sh | 45 + automake-1.15.1/t/libobj19.sh | 94 + automake-1.15.1/t/libobj2.sh | 68 + automake-1.15.1/t/libobj20a.sh | 45 + automake-1.15.1/t/libobj20b.sh | 57 + automake-1.15.1/t/libobj20c.sh | 54 + automake-1.15.1/t/libobj3.sh | 39 + automake-1.15.1/t/libobj4.sh | 34 + automake-1.15.1/t/libobj5.sh | 39 + automake-1.15.1/t/libobj7.sh | 72 + automake-1.15.1/t/library.sh | 36 + automake-1.15.1/t/library2.sh | 31 + automake-1.15.1/t/library3.sh | 54 + automake-1.15.1/t/libtoo10.sh | 62 + automake-1.15.1/t/libtoo11.sh | 38 + automake-1.15.1/t/libtool-macros.sh | 60 + automake-1.15.1/t/libtool.sh | 41 + automake-1.15.1/t/libtool2.sh | 49 + automake-1.15.1/t/libtool3.sh | 94 + automake-1.15.1/t/libtool4.sh | 37 + automake-1.15.1/t/libtool5.sh | 44 + automake-1.15.1/t/libtool6.sh | 47 + automake-1.15.1/t/libtool7.sh | 98 + automake-1.15.1/t/libtool8.sh | 53 + automake-1.15.1/t/libtool9.sh | 106 + automake-1.15.1/t/license.sh | 61 + automake-1.15.1/t/license2.sh | 39 + automake-1.15.1/t/link_c_cxx.sh | 45 + automake-1.15.1/t/link_cond.sh | 88 + automake-1.15.1/t/link_dist.sh | 47 + automake-1.15.1/t/link_f90_only.sh | 44 + automake-1.15.1/t/link_f_only.sh | 44 + automake-1.15.1/t/link_fc.sh | 46 + automake-1.15.1/t/link_fccxx.sh | 46 + automake-1.15.1/t/link_fcxx.sh | 45 + automake-1.15.1/t/link_override.sh | 44 + automake-1.15.1/t/lisp-flags.sh | 41 + automake-1.15.1/t/lisp-loadpath.sh | 67 + automake-1.15.1/t/lisp-pr11806.sh | 51 + automake-1.15.1/t/lisp-subdir-mix.sh | 96 + automake-1.15.1/t/lisp-subdir.sh | 80 + automake-1.15.1/t/lisp-subdir2.sh | 78 + automake-1.15.1/t/lisp2.sh | 75 + automake-1.15.1/t/lisp3.sh | 84 + automake-1.15.1/t/lisp4.sh | 81 + automake-1.15.1/t/lisp5.sh | 80 + automake-1.15.1/t/lisp6.sh | 105 + automake-1.15.1/t/lisp7.sh | 47 + automake-1.15.1/t/lisp8.sh | 55 + automake-1.15.1/t/lispdry.sh | 56 + automake-1.15.1/t/list-of-tests.mk | 1322 + automake-1.15.1/t/listval.sh | 46 + automake-1.15.1/t/location.sh | 97 + automake-1.15.1/t/longlin2.sh | 48 + automake-1.15.1/t/longline.sh | 32 + automake-1.15.1/t/ltcond.sh | 106 + automake-1.15.1/t/ltcond2.sh | 91 + automake-1.15.1/t/ltconv.sh | 158 + automake-1.15.1/t/ltdeps.sh | 61 + automake-1.15.1/t/ltinit.sh | 66 + automake-1.15.1/t/ltinstloc.sh | 69 + automake-1.15.1/t/ltlibobjs.sh | 43 + automake-1.15.1/t/ltlibsrc.sh | 76 + automake-1.15.1/t/ltorder.sh | 62 + automake-1.15.1/t/m4-inclusion.sh | 56 + automake-1.15.1/t/maintclean-vpath.sh | 104 + automake-1.15.1/t/maintclean.sh | 96 + automake-1.15.1/t/maintmode-configure-msg.sh | 72 + automake-1.15.1/t/make-dryrun.tap | 147 + automake-1.15.1/t/make-is-gnu.sh | 65 + automake-1.15.1/t/make-keepgoing.tap | 137 + automake-1.15.1/t/make.sh | 52 + automake-1.15.1/t/makefile-deps.sh | 29 + automake-1.15.1/t/makej.sh | 53 + automake-1.15.1/t/makej2.sh | 44 + automake-1.15.1/t/maken.sh | 62 + automake-1.15.1/t/maken3-w.sh | 15 + automake-1.15.1/t/maken3.sh | 188 + automake-1.15.1/t/makevars.sh | 33 + automake-1.15.1/t/man.sh | 33 + automake-1.15.1/t/man2.sh | 55 + automake-1.15.1/t/man3.sh | 44 + automake-1.15.1/t/man5.sh | 69 + automake-1.15.1/t/man6.sh | 101 + automake-1.15.1/t/man7.sh | 59 + automake-1.15.1/t/man8.sh | 61 + automake-1.15.1/t/mdate.sh | 37 + automake-1.15.1/t/mdate2.sh | 40 + automake-1.15.1/t/mdate3.sh | 49 + automake-1.15.1/t/mdate4.sh | 46 + automake-1.15.1/t/mdate5-w.sh | 15 + automake-1.15.1/t/mdate5.sh | 45 + automake-1.15.1/t/mdate6-w.sh | 15 + automake-1.15.1/t/mdate6.sh | 36 + ...issing-auxfile-stops-makefiles-creation.sh | 65 + .../t/missing-version-mismatch-w.sh | 15 + automake-1.15.1/t/missing-version-mismatch.sh | 50 + automake-1.15.1/t/missing3-w.sh | 15 + automake-1.15.1/t/missing3.sh | 55 + automake-1.15.1/t/mkdir_p.sh | 55 + automake-1.15.1/t/mkdirp-deprecation.sh | 48 + automake-1.15.1/t/mkinst2.sh | 40 + automake-1.15.1/t/mkinst3-w.sh | 15 + automake-1.15.1/t/mkinst3.sh | 68 + automake-1.15.1/t/mkinstall.sh | 31 + automake-1.15.1/t/mmode.sh | 64 + automake-1.15.1/t/mmodely.sh | 94 + automake-1.15.1/t/no-extra-c-stuff.sh | 74 + automake-1.15.1/t/no-extra-makefile-code.sh | 41 + .../t/no-spurious-install-recursive.sh | 32 + automake-1.15.1/t/nobase-libtool.sh | 94 + automake-1.15.1/t/nobase-nodist.sh | 60 + automake-1.15.1/t/nobase-python.sh | 84 + automake-1.15.1/t/nobase.sh | 147 + automake-1.15.1/t/nodef.sh | 58 + automake-1.15.1/t/nodef2.sh | 54 + automake-1.15.1/t/nodep.sh | 42 + automake-1.15.1/t/nodep2.sh | 45 + automake-1.15.1/t/nodepcomp.sh | 26 + automake-1.15.1/t/nodist.sh | 40 + automake-1.15.1/t/nodist2.sh | 38 + automake-1.15.1/t/nodist3.sh | 37 + automake-1.15.1/t/noinst.sh | 32 + automake-1.15.1/t/noinstdir.sh | 70 + automake-1.15.1/t/nolink.sh | 36 + automake-1.15.1/t/nostdinc.sh | 56 + automake-1.15.1/t/notrans.sh | 135 + automake-1.15.1/t/number.sh | 36 + automake-1.15.1/t/objc-basic.sh | 38 + automake-1.15.1/t/objc-deps.sh | 72 + automake-1.15.1/t/objc-flags.sh | 62 + automake-1.15.1/t/objc-megademo.sh | 340 + automake-1.15.1/t/objc-minidemo.sh | 76 + automake-1.15.1/t/objcxx-basic.sh | 40 + automake-1.15.1/t/objcxx-deps.sh | 72 + automake-1.15.1/t/objcxx-flags.sh | 63 + automake-1.15.1/t/objcxx-minidemo.sh | 68 + automake-1.15.1/t/objext-pr10128.sh | 58 + automake-1.15.1/t/oldvars.sh | 37 + automake-1.15.1/t/order.sh | 32 + automake-1.15.1/t/output-order.sh | 53 + automake-1.15.1/t/output.sh | 35 + automake-1.15.1/t/output10.sh | 61 + automake-1.15.1/t/output11.sh | 63 + automake-1.15.1/t/output12.sh | 60 + automake-1.15.1/t/output13.sh | 50 + automake-1.15.1/t/output2.sh | 38 + automake-1.15.1/t/output3.sh | 38 + automake-1.15.1/t/output4.sh | 35 + automake-1.15.1/t/output5.sh | 31 + automake-1.15.1/t/output6.sh | 72 + automake-1.15.1/t/output7.sh | 71 + automake-1.15.1/t/output8.sh | 54 + automake-1.15.1/t/output9.sh | 52 + automake-1.15.1/t/override-conditional-1.sh | 53 + automake-1.15.1/t/override-conditional-2.sh | 39 + .../t/override-conditional-pr13940.sh | 44 + automake-1.15.1/t/override-html.sh | 33 + automake-1.15.1/t/override-suggest-local.sh | 44 + automake-1.15.1/t/parallel-am.sh | 103 + automake-1.15.1/t/parallel-am2.sh | 77 + automake-1.15.1/t/parallel-am3.sh | 74 + automake-1.15.1/t/parallel-tests-basics.sh | 144 + .../t/parallel-tests-cmdline-override.sh | 82 + .../t/parallel-tests-concurrency-2.sh | 65 + .../t/parallel-tests-concurrency.sh | 120 + .../t/parallel-tests-console-output.sh | 102 + .../t/parallel-tests-driver-install.sh | 53 + automake-1.15.1/t/parallel-tests-dry-run-1.sh | 92 + automake-1.15.1/t/parallel-tests-dry-run-2.sh | 110 + .../t/parallel-tests-empty-testlogs.sh | 94 + automake-1.15.1/t/parallel-tests-empty.sh | 42 + automake-1.15.1/t/parallel-tests-exeext.sh | 66 + .../t/parallel-tests-exit-status-reported.sh | 68 + .../t/parallel-tests-exit-statuses.sh | 91 + .../t/parallel-tests-extra-programs.sh | 176 + .../t/parallel-tests-fd-redirect-exeext.sh | 115 + .../t/parallel-tests-fd-redirect.sh | 68 + automake-1.15.1/t/parallel-tests-fork-bomb.sh | 146 + ...arallel-tests-generated-and-distributed.sh | 74 + automake-1.15.1/t/parallel-tests-harderror.sh | 94 + .../t/parallel-tests-interrupt.tap | 116 + .../t/parallel-tests-log-compiler-1.sh | 125 + .../t/parallel-tests-log-compiler-2.sh | 95 + .../t/parallel-tests-log-compiler-example.sh | 68 + .../t/parallel-tests-log-override-1.sh | 109 + .../t/parallel-tests-log-override-2.sh | 82 + .../t/parallel-tests-log-override-recheck.sh | 97 + .../t/parallel-tests-no-color-in-log.sh | 53 + .../t/parallel-tests-no-spurious-summary.sh | 65 + automake-1.15.1/t/parallel-tests-once.sh | 47 + .../parallel-tests-recheck-depends-on-all.sh | 89 + .../t/parallel-tests-recheck-pr11791.sh | 85 + automake-1.15.1/t/parallel-tests-recheck.sh | 82 + .../t/parallel-tests-reset-term.sh | 62 + automake-1.15.1/t/parallel-tests-subdir.sh | 50 + .../t/parallel-tests-suffix-prog.sh | 77 + automake-1.15.1/t/parallel-tests-suffix.sh | 62 + .../t/parallel-tests-trailing-whitespace.sh | 46 + .../t/parallel-tests-unreadable.sh | 75 + automake-1.15.1/t/parse.sh | 36 + automake-1.15.1/t/per-target-flags.sh | 92 + automake-1.15.1/t/percent.sh | 36 + automake-1.15.1/t/percent2.sh | 39 + automake-1.15.1/t/perf/cond.sh | 56 + automake-1.15.1/t/perf/testsuite-recheck.sh | 98 + automake-1.15.1/t/perf/testsuite-summary.sh | 75 + automake-1.15.1/t/phony.sh | 32 + automake-1.15.1/t/pkg-config-macros.sh | 95 + automake-1.15.1/t/pluseq.sh | 30 + automake-1.15.1/t/pluseq10.sh | 52 + automake-1.15.1/t/pluseq11.sh | 52 + automake-1.15.1/t/pluseq2.sh | 46 + automake-1.15.1/t/pluseq3.sh | 50 + automake-1.15.1/t/pluseq4.sh | 34 + automake-1.15.1/t/pluseq5.sh | 60 + automake-1.15.1/t/pluseq6.sh | 38 + automake-1.15.1/t/pluseq7.sh | 37 + automake-1.15.1/t/pluseq8.sh | 43 + automake-1.15.1/t/pluseq9.sh | 71 + automake-1.15.1/t/pm/Cond2.pl | 22 + automake-1.15.1/t/pm/Cond3.pl | 22 + automake-1.15.1/t/pm/Condition-t.pl | 327 + automake-1.15.1/t/pm/Condition.pl | 277 + automake-1.15.1/t/pm/DisjCon2.pl | 24 + automake-1.15.1/t/pm/DisjCon3.pl | 23 + automake-1.15.1/t/pm/DisjConditions-t.pl | 461 + automake-1.15.1/t/pm/DisjConditions.pl | 404 + automake-1.15.1/t/pm/Version.pl | 129 + automake-1.15.1/t/pm/Version2.pl | 20 + automake-1.15.1/t/pm/Version3.pl | 20 + automake-1.15.1/t/pm/Wrap.pl | 112 + automake-1.15.1/t/posixsubst-data.sh | 74 + automake-1.15.1/t/posixsubst-extradist.sh | 54 + automake-1.15.1/t/posixsubst-ldadd.sh | 78 + automake-1.15.1/t/posixsubst-libraries.sh | 65 + automake-1.15.1/t/posixsubst-ltlibraries.sh | 66 + automake-1.15.1/t/posixsubst-programs.sh | 63 + automake-1.15.1/t/posixsubst-scripts.sh | 99 + automake-1.15.1/t/posixsubst-sources.sh | 81 + automake-1.15.1/t/posixsubst-tests-w.sh | 15 + automake-1.15.1/t/posixsubst-tests.sh | 68 + automake-1.15.1/t/postproc.sh | 48 + automake-1.15.1/t/ppf77.sh | 34 + automake-1.15.1/t/pr2.sh | 48 + automake-1.15.1/t/pr211.sh | 51 + automake-1.15.1/t/pr220.sh | 58 + automake-1.15.1/t/pr224.sh | 63 + automake-1.15.1/t/pr229.sh | 35 + automake-1.15.1/t/pr243.sh | 57 + automake-1.15.1/t/pr266.sh | 46 + automake-1.15.1/t/pr279-2.sh | 51 + automake-1.15.1/t/pr279.sh | 50 + automake-1.15.1/t/pr287.sh | 47 + automake-1.15.1/t/pr300-lib.sh | 76 + automake-1.15.1/t/pr300-ltlib.sh | 82 + automake-1.15.1/t/pr300-prog.sh | 72 + automake-1.15.1/t/pr307.sh | 93 + automake-1.15.1/t/pr401.sh | 187 + automake-1.15.1/t/pr401b.sh | 187 + automake-1.15.1/t/pr401c.sh | 189 + automake-1.15.1/t/pr72.sh | 44 + automake-1.15.1/t/pr87.sh | 75 + automake-1.15.1/t/pr9.sh | 58 + automake-1.15.1/t/precious.sh | 32 + automake-1.15.1/t/prefix.sh | 33 + automake-1.15.1/t/preproc-basics.sh | 106 + automake-1.15.1/t/preproc-c-compile.sh | 118 + automake-1.15.1/t/preproc-demo.sh | 230 + automake-1.15.1/t/preproc-errmsg.sh | 78 + ...primary-prefix-couples-documented-valid.sh | 87 + .../t/primary-prefix-couples-force-valid.sh | 92 + .../t/primary-prefix-invalid-couples.tap | 193 + .../t/primary-prefix-valid-couples.sh | 87 + automake-1.15.1/t/primary.sh | 30 + automake-1.15.1/t/primary2.sh | 32 + automake-1.15.1/t/primary3.sh | 43 + automake-1.15.1/t/print-libdir.sh | 46 + automake-1.15.1/t/proginst.sh | 29 + .../t/programs-primary-rewritten.sh | 61 + automake-1.15.1/t/py-compile-basedir.sh | 54 + automake-1.15.1/t/py-compile-basic.sh | 70 + automake-1.15.1/t/py-compile-destdir.sh | 47 + automake-1.15.1/t/py-compile-env.sh | 59 + .../t/py-compile-option-terminate.sh | 43 + automake-1.15.1/t/py-compile-usage.sh | 75 + automake-1.15.1/t/python-am-path-iftrue.sh | 55 + automake-1.15.1/t/python-dist.sh | 78 + automake-1.15.1/t/python-missing.sh | 82 + automake-1.15.1/t/python-pr10995.sh | 56 + automake-1.15.1/t/python-too-old.sh | 61 + automake-1.15.1/t/python-vars.sh | 105 + automake-1.15.1/t/python-virtualenv.sh | 201 + automake-1.15.1/t/python.sh | 60 + automake-1.15.1/t/python10.sh | 87 + automake-1.15.1/t/python11.sh | 58 + automake-1.15.1/t/python12.sh | 54 + automake-1.15.1/t/python2.sh | 106 + automake-1.15.1/t/python3.sh | 47 + .../t/recurs-user-deeply-nested.sh | 97 + automake-1.15.1/t/recurs-user-indir.sh | 99 + automake-1.15.1/t/recurs-user-keep-going.sh | 95 + automake-1.15.1/t/recurs-user-many.sh | 73 + automake-1.15.1/t/recurs-user-no-subdirs.sh | 52 + automake-1.15.1/t/recurs-user-no-top-level.sh | 50 + automake-1.15.1/t/recurs-user-override.sh | 68 + automake-1.15.1/t/recurs-user-phony.sh | 64 + automake-1.15.1/t/recurs-user-wrap.sh | 59 + automake-1.15.1/t/recurs-user.sh | 81 + automake-1.15.1/t/recurs-user2.sh | 103 + automake-1.15.1/t/relativize.tap | 96 + .../t/remake-aclocal-version-mismatch.sh | 45 + .../t/remake-after-acinclude-m4.sh | 112 + automake-1.15.1/t/remake-after-aclocal-m4.sh | 112 + .../t/remake-after-configure-ac.sh | 109 + automake-1.15.1/t/remake-after-makefile-am.sh | 111 + automake-1.15.1/t/remake-all-1.sh | 67 + automake-1.15.1/t/remake-all-2.sh | 75 + automake-1.15.1/t/remake-am-pr10111.sh | 62 + .../t/remake-config-status-dependencies.sh | 70 + .../t/remake-configure-dependencies.sh | 83 + automake-1.15.1/t/remake-deeply-nested.sh | 83 + automake-1.15.1/t/remake-deleted-am-2.sh | 75 + automake-1.15.1/t/remake-deleted-am-subdir.sh | 77 + automake-1.15.1/t/remake-deleted-am.sh | 67 + automake-1.15.1/t/remake-deleted-m4-file.sh | 74 + automake-1.15.1/t/remake-fail.sh | 69 + .../t/remake-gnulib-add-acsubst.sh | 133 + automake-1.15.1/t/remake-gnulib-add-header.sh | 109 + .../t/remake-gnulib-remove-header.sh | 136 + automake-1.15.1/t/remake-include-aclocal.sh | 115 + automake-1.15.1/t/remake-include-configure.sh | 112 + automake-1.15.1/t/remake-include-makefile.sh | 112 + automake-1.15.1/t/remake-m4-pr10111.sh | 60 + automake-1.15.1/t/remake-macrodir.sh | 83 + automake-1.15.1/t/remake-maintainer-mode.sh | 80 + automake-1.15.1/t/remake-makefile-intree.sh | 190 + automake-1.15.1/t/remake-makefile-vpath.sh | 192 + automake-1.15.1/t/remake-mild-stress.sh | 146 + automake-1.15.1/t/remake-moved-m4-file.sh | 76 + .../t/remake-not-after-make-dist.sh | 56 + automake-1.15.1/t/remake-recurs-user.sh | 89 + automake-1.15.1/t/remake-renamed-am.sh | 58 + automake-1.15.1/t/remake-renamed-m4-file.sh | 83 + .../t/remake-renamed-m4-macro-and-file.sh | 86 + automake-1.15.1/t/remake-renamed-m4-macro.sh | 72 + .../t/remake-subdir-from-subdir.sh | 56 + automake-1.15.1/t/remake-subdir-gnu.sh | 80 + automake-1.15.1/t/remake-subdir-grepping.sh | 39 + automake-1.15.1/t/remake-subdir-long-time.sh | 114 + .../t/remake-subdir-no-makefile.sh | 72 + automake-1.15.1/t/remake-subdir-only.sh | 55 + automake-1.15.1/t/remake-subdir.sh | 81 + automake-1.15.1/t/remake-subdir2.sh | 82 + automake-1.15.1/t/remake-subdir3.sh | 62 + automake-1.15.1/t/remake-timing-bug-pr8365.sh | 106 + automake-1.15.1/t/repeated-options.sh | 81 + automake-1.15.1/t/reqd2.sh | 57 + automake-1.15.1/t/rm-f-probe.sh | 74 + automake-1.15.1/t/rulepat.sh | 30 + automake-1.15.1/t/sanity.sh | 43 + automake-1.15.1/t/seenc.sh | 43 + automake-1.15.1/t/self-check-cc-no-c-o.sh | 35 + .../t/self-check-configure-help.sh | 274 + automake-1.15.1/t/self-check-dir.tap | 71 + automake-1.15.1/t/self-check-exit.tap | 82 + .../t/self-check-explicit-skips.sh | 54 + .../t/self-check-is-blocked-signal.tap | 29 + automake-1.15.1/t/self-check-is_newest.tap | 90 + automake-1.15.1/t/self-check-me.tap | 67 + automake-1.15.1/t/self-check-report.sh | 54 + automake-1.15.1/t/self-check-seq.tap | 75 + .../t/self-check-shell-no-trail-bslash.sh | 81 + automake-1.15.1/t/self-check-unindent.tap | 255 + automake-1.15.1/t/serial-tests.sh | 84 + automake-1.15.1/t/silent-c.sh | 88 + automake-1.15.1/t/silent-configsite.sh | 86 + automake-1.15.1/t/silent-custom.sh | 110 + automake-1.15.1/t/silent-cxx.sh | 107 + automake-1.15.1/t/silent-f77.sh | 89 + automake-1.15.1/t/silent-f90.sh | 89 + automake-1.15.1/t/silent-gen.sh | 82 + automake-1.15.1/t/silent-lex.sh | 133 + automake-1.15.1/t/silent-lt.sh | 93 + automake-1.15.1/t/silent-many-languages.sh | 253 + automake-1.15.1/t/silent-nested-vars.sh | 144 + automake-1.15.1/t/silent-texi.sh | 82 + automake-1.15.1/t/silent-yacc-headers.sh | 164 + automake-1.15.1/t/silent-yacc.sh | 130 + automake-1.15.1/t/sourcefile-in-subdir.sh | 36 + automake-1.15.1/t/space.sh | 29 + automake-1.15.1/t/specflg-dummy.sh | 246 + automake-1.15.1/t/specflg6.sh | 53 + automake-1.15.1/t/specflg7.sh | 64 + automake-1.15.1/t/specflg8.sh | 63 + automake-1.15.1/t/specflg9.sh | 45 + automake-1.15.1/t/spell.sh | 29 + automake-1.15.1/t/spell2.sh | 31 + automake-1.15.1/t/spell3.sh | 31 + automake-1.15.1/t/spelling.sh | 30 + automake-1.15.1/t/spy-double-colon.sh | 106 + automake-1.15.1/t/spy-rm.tap | 48 + automake-1.15.1/t/src-acsubst.sh | 44 + automake-1.15.1/t/stamph2.sh | 68 + automake-1.15.1/t/stdinc.sh | 62 + automake-1.15.1/t/stdlib.sh | 51 + automake-1.15.1/t/stdlib2.sh | 94 + automake-1.15.1/t/strictness-override.sh | 123 + automake-1.15.1/t/strictness-precedence.sh | 77 + automake-1.15.1/t/strip.sh | 50 + automake-1.15.1/t/strip2.sh | 46 + automake-1.15.1/t/strip3.sh | 48 + automake-1.15.1/t/subdir-ac-subst.sh | 94 + automake-1.15.1/t/subdir-add-pr46.sh | 96 + automake-1.15.1/t/subdir-add2-pr46.sh | 97 + automake-1.15.1/t/subdir-am-cond.sh | 93 + automake-1.15.1/t/subdir-cond-err.sh | 40 + automake-1.15.1/t/subdir-cond-gettext.sh | 44 + automake-1.15.1/t/subdir-distclean.sh | 103 + automake-1.15.1/t/subdir-env-interference.sh | 37 + .../t/subdir-keep-going-pr12554.sh | 70 + automake-1.15.1/t/subdir-order.sh | 159 + automake-1.15.1/t/subdir-subsub.sh | 59 + automake-1.15.1/t/subdir-with-slash.sh | 55 + automake-1.15.1/t/subdir.sh | 40 + automake-1.15.1/t/subobj-clean-lt-pr10697.sh | 168 + automake-1.15.1/t/subobj-clean-pr10697.sh | 163 + automake-1.15.1/t/subobj-indir-pr13928.sh | 49 + automake-1.15.1/t/subobj-vpath-pr13928.sh | 60 + automake-1.15.1/t/subobj.sh | 91 + automake-1.15.1/t/subobj10.sh | 55 + automake-1.15.1/t/subobj11a.sh | 80 + automake-1.15.1/t/subobj11b.sh | 82 + automake-1.15.1/t/subobj11c.sh | 48 + automake-1.15.1/t/subobj2.sh | 38 + automake-1.15.1/t/subobj4.sh | 50 + automake-1.15.1/t/subobj5.sh | 69 + automake-1.15.1/t/subobj6.sh | 85 + automake-1.15.1/t/subobj7.sh | 38 + automake-1.15.1/t/subobj8.sh | 46 + automake-1.15.1/t/subobj9.sh | 87 + automake-1.15.1/t/subobjname.sh | 72 + automake-1.15.1/t/subpkg-macrodir.sh | 85 + automake-1.15.1/t/subpkg-yacc.sh | 129 + automake-1.15.1/t/subpkg.sh | 111 + automake-1.15.1/t/subpkg2.sh | 70 + automake-1.15.1/t/subpkg3.sh | 55 + automake-1.15.1/t/subpkg4.sh | 71 + .../t/subst-no-trailing-empty-line.sh | 93 + automake-1.15.1/t/subst.sh | 39 + automake-1.15.1/t/subst3.sh | 178 + automake-1.15.1/t/subst4.sh | 44 + automake-1.15.1/t/subst5.sh | 40 + automake-1.15.1/t/substre2.sh | 50 + automake-1.15.1/t/substref.sh | 54 + automake-1.15.1/t/substtarg.sh | 51 + automake-1.15.1/t/suffix-chain.tap | 64 + automake-1.15.1/t/suffix-custom-pr14441.sh | 56 + .../t/suffix-custom-subobj-and-specflg.sh | 62 + automake-1.15.1/t/suffix-custom-subobj.sh | 59 + .../t/suffix-extra-c-stuff-pr14560.sh | 37 + automake-1.15.1/t/suffix.sh | 59 + automake-1.15.1/t/suffix10.tap | 82 + automake-1.15.1/t/suffix11.tap | 82 + automake-1.15.1/t/suffix2.sh | 54 + automake-1.15.1/t/suffix3.tap | 82 + automake-1.15.1/t/suffix4.sh | 39 + automake-1.15.1/t/suffix5.sh | 66 + automake-1.15.1/t/suffix6.sh | 63 + automake-1.15.1/t/suffix6b.sh | 75 + automake-1.15.1/t/suffix6c.sh | 92 + automake-1.15.1/t/suffix7.sh | 37 + automake-1.15.1/t/suffix8.tap | 105 + automake-1.15.1/t/suffix9.sh | 64 + automake-1.15.1/t/symlink.sh | 40 + automake-1.15.1/t/symlink2.sh | 32 + automake-1.15.1/t/syntax.sh | 31 + automake-1.15.1/t/tags-pr12372.sh | 85 + automake-1.15.1/t/tags.sh | 29 + automake-1.15.1/t/tags2.sh | 42 + automake-1.15.1/t/tagsub.sh | 48 + automake-1.15.1/t/tap-ambiguous-directive.sh | 53 + automake-1.15.1/t/tap-autonumber.sh | 73 + automake-1.15.1/t/tap-bad-prog.tap | 85 + automake-1.15.1/t/tap-bailout-and-logging.sh | 48 + .../t/tap-bailout-leading-space.sh | 63 + .../t/tap-bailout-suppress-badexit.sh | 63 + .../tap-bailout-suppress-later-diagnostic.sh | 40 + .../t/tap-bailout-suppress-later-errors.sh | 70 + automake-1.15.1/t/tap-bailout.sh | 134 + automake-1.15.1/t/tap-basic.sh | 168 + automake-1.15.1/t/tap-color.sh | 163 + automake-1.15.1/t/tap-common-setup.sh | 42 + automake-1.15.1/t/tap-deps.sh | 84 + automake-1.15.1/t/tap-diagnostic-custom.sh | 91 + automake-1.15.1/t/tap-diagnostic.sh | 117 + automake-1.15.1/t/tap-doc.sh | 96 + automake-1.15.1/t/tap-doc2.sh | 138 + automake-1.15.1/t/tap-driver-stderr.sh | 49 + automake-1.15.1/t/tap-empty-diagnostic.sh | 39 + automake-1.15.1/t/tap-empty.sh | 53 + automake-1.15.1/t/tap-escape-directive-2.sh | 52 + automake-1.15.1/t/tap-escape-directive.sh | 36 + automake-1.15.1/t/tap-exit.sh | 51 + automake-1.15.1/t/tap-fancy.sh | 127 + automake-1.15.1/t/tap-fancy2.sh | 136 + automake-1.15.1/t/tap-global-log.sh | 122 + automake-1.15.1/t/tap-global-result.sh | 185 + automake-1.15.1/t/tap-log.sh | 162 + automake-1.15.1/t/tap-merge-stdout-stderr.sh | 63 + .../t/tap-missing-plan-and-bad-exit.sh | 41 + automake-1.15.1/t/tap-more.sh | 159 + automake-1.15.1/t/tap-more2.sh | 89 + automake-1.15.1/t/tap-msg0-bailout.sh | 35 + automake-1.15.1/t/tap-msg0-directive.sh | 38 + automake-1.15.1/t/tap-msg0-misc.sh | 79 + automake-1.15.1/t/tap-msg0-planskip.sh | 34 + automake-1.15.1/t/tap-msg0-result.sh | 60 + automake-1.15.1/t/tap-negative-numbers.sh | 55 + .../t/tap-no-disable-hard-error.sh | 47 + .../t/tap-no-merge-stdout-stderr.sh | 51 + automake-1.15.1/t/tap-no-spurious-numbers.sh | 98 + automake-1.15.1/t/tap-no-spurious-summary.sh | 44 + automake-1.15.1/t/tap-no-spurious.sh | 111 + automake-1.15.1/t/tap-not-ok-skip.sh | 36 + automake-1.15.1/t/tap-number-wordboundary.sh | 105 + automake-1.15.1/t/tap-numbers-leading-zero.sh | 107 + automake-1.15.1/t/tap-numeric-description.sh | 66 + automake-1.15.1/t/tap-out-of-order.sh | 77 + automake-1.15.1/t/tap-passthrough-exit.sh | 58 + automake-1.15.1/t/tap-passthrough.sh | 165 + automake-1.15.1/t/tap-plan-corner.sh | 189 + automake-1.15.1/t/tap-plan-errors.sh | 112 + automake-1.15.1/t/tap-plan-leading-zero.sh | 53 + automake-1.15.1/t/tap-plan-malformed.sh | 57 + automake-1.15.1/t/tap-plan-middle.sh | 80 + automake-1.15.1/t/tap-plan-whitespace.sh | 38 + automake-1.15.1/t/tap-plan.sh | 51 + automake-1.15.1/t/tap-planskip-and-logging.sh | 70 + automake-1.15.1/t/tap-planskip-badexit.sh | 50 + automake-1.15.1/t/tap-planskip-bailout.sh | 34 + .../t/tap-planskip-case-insensitive.sh | 42 + automake-1.15.1/t/tap-planskip-late.sh | 42 + .../t/tap-planskip-later-errors.sh | 37 + .../t/tap-planskip-unplanned-corner.sh | 45 + automake-1.15.1/t/tap-planskip-unplanned.sh | 68 + automake-1.15.1/t/tap-planskip-whitespace.sh | 44 + automake-1.15.1/t/tap-planskip.sh | 75 + automake-1.15.1/t/tap-recheck-logs.sh | 113 + automake-1.15.1/t/tap-recheck.sh | 220 + automake-1.15.1/t/tap-result-comment.sh | 51 + automake-1.15.1/t/tap-signal.tap | 133 + automake-1.15.1/t/tap-summary-color.sh | 23 + automake-1.15.1/t/tap-summary.sh | 23 + automake-1.15.1/t/tap-test-number-0.sh | 58 + automake-1.15.1/t/tap-todo-skip-together.sh | 37 + automake-1.15.1/t/tap-todo-skip-whitespace.sh | 99 + automake-1.15.1/t/tap-todo-skip.sh | 86 + automake-1.15.1/t/tap-unplanned.sh | 153 + .../t/tap-whitespace-normalization.sh | 163 + .../t/tap-with-and-without-number.sh | 48 + automake-1.15.1/t/tap-xfail-tests.sh | 63 + automake-1.15.1/t/tar-opts-errors.sh | 52 + automake-1.15.1/t/tar-override.sh | 68 + automake-1.15.1/t/tar-pax.sh | 43 + automake-1.15.1/t/tar-ustar-id-too-high.sh | 88 + automake-1.15.1/t/tar-ustar.sh | 43 + automake-1.15.1/t/target-cflags.sh | 75 + automake-1.15.1/t/targetclash.sh | 33 + automake-1.15.1/t/test-driver-acsubst.sh | 86 + automake-1.15.1/t/test-driver-cond.sh | 116 + .../t/test-driver-create-log-dir.sh | 82 + .../t/test-driver-custom-multitest-recheck.sh | 220 + .../test-driver-custom-multitest-recheck2.sh | 176 + .../t/test-driver-custom-multitest.sh | 168 + .../t/test-driver-custom-no-extra-driver.sh | 63 + .../t/test-driver-custom-xfail-tests.sh | 163 + automake-1.15.1/t/test-driver-custom.sh | 143 + automake-1.15.1/t/test-driver-fail.sh | 64 + .../t/test-driver-is-distributed.sh | 83 + automake-1.15.1/t/test-driver-strip-vpath.sh | 97 + .../t/test-driver-trs-suffix-registered.sh | 57 + automake-1.15.1/t/test-extensions-cond.sh | 69 + automake-1.15.1/t/test-extensions.sh | 71 + .../t/test-harness-vpath-rewrite.sh | 57 + automake-1.15.1/t/test-log.sh | 176 + automake-1.15.1/t/test-logs-repeated.sh | 44 + automake-1.15.1/t/test-metadata-global-log.sh | 146 + .../t/test-metadata-global-result.sh | 195 + automake-1.15.1/t/test-metadata-recheck.sh | 164 + automake-1.15.1/t/test-metadata-results.sh | 177 + automake-1.15.1/t/test-missing.sh | 65 + automake-1.15.1/t/test-missing2.sh | 52 + automake-1.15.1/t/test-trs-basic.sh | 157 + automake-1.15.1/t/test-trs-recover.sh | 161 + automake-1.15.1/t/test-trs-recover2.sh | 118 + .../t/tests-environment-and-log-compiler.sh | 74 + .../t/tests-environment-backcompat.sh | 59 + .../t/tests-environment-fd-redirect.sh | 92 + automake-1.15.1/t/tests-environment.sh | 46 + automake-1.15.1/t/testsuite-part.am | 525 + automake-1.15.1/t/testsuite-summary-color.sh | 197 + .../t/testsuite-summary-count-many.sh | 102 + automake-1.15.1/t/testsuite-summary-count.sh | 159 + .../t/testsuite-summary-reference-log.sh | 82 + automake-1.15.1/t/transform.sh | 68 + automake-1.15.1/t/transform2.sh | 99 + automake-1.15.1/t/transform3.sh | 92 + .../t/txinfo-absolute-srcdir-pr408.sh | 70 + .../t/txinfo-add-missing-and-dist.sh | 62 + automake-1.15.1/t/txinfo-bsd-make-recurs.sh | 40 + automake-1.15.1/t/txinfo-builddir.sh | 131 + automake-1.15.1/t/txinfo-clean.sh | 126 + automake-1.15.1/t/txinfo-dvi-recurs.sh | 39 + automake-1.15.1/t/txinfo-include.sh | 164 + automake-1.15.1/t/txinfo-info-in-srcdir.sh | 91 + .../t/txinfo-makeinfo-error-no-clobber.sh | 78 + .../t/txinfo-many-output-formats-vpath.sh | 206 + .../t/txinfo-many-output-formats.sh | 206 + automake-1.15.1/t/txinfo-no-clutter.sh | 146 + automake-1.15.1/t/txinfo-no-extra-dist.sh | 59 + automake-1.15.1/t/txinfo-no-installinfo.sh | 48 + .../t/txinfo-no-repeated-targets.sh | 41 + automake-1.15.1/t/txinfo-nodist-info.sh | 66 + automake-1.15.1/t/txinfo-other-suffixes.sh | 41 + automake-1.15.1/t/txinfo-override-infodeps.sh | 62 + .../t/txinfo-override-texinfo-tex.sh | 68 + .../t/txinfo-setfilename-repeated.sh | 41 + .../t/txinfo-setfilename-suffix-strip.sh | 33 + automake-1.15.1/t/txinfo-subdir-pr343.sh | 60 + automake-1.15.1/t/txinfo-tex-dist.sh | 47 + .../t/txinfo-unrecognized-extension.sh | 38 + .../t/txinfo-unrecognized-info-suffix.sh | 32 + automake-1.15.1/t/txinfo-vtexi.sh | 62 + automake-1.15.1/t/txinfo-vtexi2.sh | 42 + automake-1.15.1/t/txinfo-vtexi3.sh | 124 + automake-1.15.1/t/txinfo-vtexi4.sh | 106 + .../t/txinfo-without-info-suffix.sh | 57 + automake-1.15.1/t/txinfo19.sh | 72 + automake-1.15.1/t/txinfo23.sh | 69 + automake-1.15.1/t/txinfo24.sh | 83 + automake-1.15.1/t/txinfo25.sh | 116 + automake-1.15.1/t/txinfo28.sh | 89 + automake-1.15.1/t/uninstall-fail.sh | 101 + automake-1.15.1/t/uninstall-pr9578.sh | 67 + automake-1.15.1/t/unused.sh | 35 + automake-1.15.1/t/upc.sh | 50 + automake-1.15.1/t/upc2.sh | 31 + automake-1.15.1/t/upc3.sh | 65 + automake-1.15.1/t/vala-configure.sh | 118 + automake-1.15.1/t/vala-grepping.sh | 86 + automake-1.15.1/t/vala-headers.sh | 85 + automake-1.15.1/t/vala-libs.sh | 100 + automake-1.15.1/t/vala-mix.sh | 125 + automake-1.15.1/t/vala-mix2.sh | 122 + automake-1.15.1/t/vala-non-recursive-setup.sh | 96 + automake-1.15.1/t/vala-parallel.sh | 76 + automake-1.15.1/t/vala-per-target-flags.sh | 100 + automake-1.15.1/t/vala-recursive-setup.sh | 107 + automake-1.15.1/t/vala-vapi.sh | 95 + automake-1.15.1/t/vala-vpath.sh | 93 + automake-1.15.1/t/var-recurs.sh | 34 + automake-1.15.1/t/var-recurs2.sh | 31 + automake-1.15.1/t/vars.sh | 36 + automake-1.15.1/t/vars3.sh | 72 + automake-1.15.1/t/vartar.sh | 39 + automake-1.15.1/t/vartypo2.sh | 69 + automake-1.15.1/t/vartypos.sh | 89 + automake-1.15.1/t/version3.sh | 27 + automake-1.15.1/t/version4.sh | 26 + automake-1.15.1/t/version6.sh | 36 + automake-1.15.1/t/version7.sh | 67 + automake-1.15.1/t/version8.sh | 24 + automake-1.15.1/t/vpath.sh | 33 + .../t/warning-groups-win-over-strictness.sh | 64 + .../t/warnings-obsolete-default.sh | 39 + automake-1.15.1/t/warnings-override.sh | 111 + automake-1.15.1/t/warnings-precedence.sh | 77 + .../t/warnings-strictness-interactions.sh | 59 + automake-1.15.1/t/warnings-unknown.sh | 44 + .../t/warnings-win-over-strictness.sh | 90 + automake-1.15.1/t/warnopts.sh | 75 + automake-1.15.1/t/werror.sh | 26 + automake-1.15.1/t/werror2.sh | 48 + automake-1.15.1/t/werror3.sh | 48 + automake-1.15.1/t/werror4.sh | 66 + automake-1.15.1/t/whoami.sh | 27 + automake-1.15.1/t/wrap/aclocal.in | 29 + automake-1.15.1/t/wrap/automake.in | 27 + automake-1.15.1/t/xsource.sh | 38 + automake-1.15.1/t/yacc-auxdir.sh | 56 + automake-1.15.1/t/yacc-basic.sh | 108 + automake-1.15.1/t/yacc-bison-skeleton-cxx.sh | 102 + automake-1.15.1/t/yacc-bison-skeleton.sh | 77 + automake-1.15.1/t/yacc-clean-cxx.sh | 161 + automake-1.15.1/t/yacc-clean.sh | 147 + automake-1.15.1/t/yacc-cxx-grepping.sh | 81 + automake-1.15.1/t/yacc-cxx.sh | 140 + automake-1.15.1/t/yacc-d-basic.sh | 163 + automake-1.15.1/t/yacc-d-cxx.sh | 232 + automake-1.15.1/t/yacc-d-vpath.sh | 108 + automake-1.15.1/t/yacc-deleted-headers.sh | 163 + automake-1.15.1/t/yacc-depend.sh | 82 + automake-1.15.1/t/yacc-depend2.sh | 81 + automake-1.15.1/t/yacc-dist-nobuild-subdir.sh | 92 + automake-1.15.1/t/yacc-dist-nobuild.sh | 89 + automake-1.15.1/t/yacc-dry.sh | 58 + automake-1.15.1/t/yacc-grepping.sh | 80 + automake-1.15.1/t/yacc-grepping2.sh | 81 + .../t/yacc-headers-and-dist-pr47.sh | 89 + automake-1.15.1/t/yacc-line.sh | 126 + automake-1.15.1/t/yacc-misc.sh | 86 + automake-1.15.1/t/yacc-mix-c-cxx.sh | 206 + automake-1.15.1/t/yacc-nodist.sh | 101 + automake-1.15.1/t/yacc-pr204.sh | 83 + automake-1.15.1/t/yacc-subdir.sh | 106 + automake-1.15.1/t/yacc-vpath.sh | 97 + automake-1.15.1/t/yacc-weirdnames.sh | 54 + automake-1.15.1/t/yflags-cmdline-override.sh | 87 + automake-1.15.1/t/yflags-conditional.sh | 143 + automake-1.15.1/t/yflags-cxx.sh | 68 + automake-1.15.1/t/yflags-d-false-positives.sh | 41 + automake-1.15.1/t/yflags-force-conditional.sh | 85 + automake-1.15.1/t/yflags-force-override.sh | 62 + automake-1.15.1/t/yflags-var-expand.sh | 61 + automake-1.15.1/t/yflags.sh | 68 + build | 8 +- .../All/Hashed/autoconf-2.72_1~1dee3a0d04.pkg | Bin 0 -> 597235 bytes .../autoconf-switch-20220527~715e31738d.pkg | Bin 0 -> 1472 bytes .../All/All/Hashed/m4-1.4.20,1~954438dd5f.pkg | Bin 0 -> 332151 bytes packages/data.pkg | Bin 14259 -> 15498 bytes packages/packagesite.pkg | Bin 14239 -> 15476 bytes xorg-server-1.18.4.tar.gz | Bin 8346449 -> 0 bytes 1536 files changed, 260539 insertions(+), 1 deletion(-) create mode 100644 automake-1.15.1/.git-log-fix create mode 100644 automake-1.15.1/AUTHORS create mode 100644 automake-1.15.1/COPYING create mode 100644 automake-1.15.1/ChangeLog create mode 100644 automake-1.15.1/GNUmakefile create mode 100644 automake-1.15.1/HACKING create mode 100644 automake-1.15.1/INSTALL create mode 100644 automake-1.15.1/Makefile.am create mode 100644 automake-1.15.1/Makefile.in create mode 100644 automake-1.15.1/NEWS create mode 100644 automake-1.15.1/PLANS/README create mode 100644 automake-1.15.1/PLANS/obsolete-removed/am-prog-mkdir-p.txt create mode 100644 automake-1.15.1/PLANS/obsolete-removed/configure.in.txt create mode 100644 automake-1.15.1/PLANS/rm-f-without-args.txt create mode 100644 automake-1.15.1/PLANS/subdir-objects.txt create mode 100644 automake-1.15.1/PLANS/texi/drop-split-info-files.txt create mode 100644 automake-1.15.1/PLANS/texi/warnings-for-automake-ng-compatibility.txt create mode 100644 automake-1.15.1/README create mode 100644 automake-1.15.1/THANKS create mode 100644 automake-1.15.1/aclocal.m4 create mode 100644 automake-1.15.1/bin/Makefile.inc create mode 100644 automake-1.15.1/bin/aclocal.in create mode 100644 automake-1.15.1/bin/automake.in create mode 100755 automake-1.15.1/bin/gen-perl-protos create mode 100755 automake-1.15.1/bootstrap create mode 100755 automake-1.15.1/configure create mode 100644 automake-1.15.1/configure.ac create mode 100644 automake-1.15.1/contrib/README create mode 100644 automake-1.15.1/contrib/check-html.am create mode 100644 automake-1.15.1/contrib/multilib/README create mode 100644 automake-1.15.1/contrib/multilib/config-ml.in create mode 100644 automake-1.15.1/contrib/multilib/multi.m4 create mode 100644 automake-1.15.1/contrib/multilib/multilib.am create mode 100755 automake-1.15.1/contrib/multilib/symlink-tree create mode 100644 automake-1.15.1/contrib/t/Makefile.inc create mode 100755 automake-1.15.1/contrib/t/help-multilib.sh create mode 100755 automake-1.15.1/contrib/t/multilib.sh create mode 100755 automake-1.15.1/contrib/t/parallel-tests-html-recursive.sh create mode 100755 automake-1.15.1/contrib/t/parallel-tests-html.sh create mode 100755 automake-1.15.1/contrib/tap-driver.pl create mode 100644 automake-1.15.1/doc/Makefile.inc create mode 100644 automake-1.15.1/doc/amhello-1.0.tar.gz create mode 100644 automake-1.15.1/doc/amhello/Makefile.am create mode 100644 automake-1.15.1/doc/amhello/README create mode 100644 automake-1.15.1/doc/amhello/configure.ac create mode 100644 automake-1.15.1/doc/amhello/src/Makefile.am create mode 100644 automake-1.15.1/doc/amhello/src/main.c create mode 100644 automake-1.15.1/doc/automake-history.info create mode 100644 automake-1.15.1/doc/automake-history.texi create mode 100644 automake-1.15.1/doc/automake.info create mode 100644 automake-1.15.1/doc/automake.info-1 create mode 100644 automake-1.15.1/doc/automake.info-2 create mode 100644 automake-1.15.1/doc/automake.texi create mode 100644 automake-1.15.1/doc/fdl.texi create mode 100755 automake-1.15.1/doc/help2man create mode 100644 automake-1.15.1/doc/stamp-vti create mode 100644 automake-1.15.1/doc/version.texi create mode 100755 automake-1.15.1/gen-testsuite-part create mode 100644 automake-1.15.1/lib/Automake/ChannelDefs.pm create mode 100644 automake-1.15.1/lib/Automake/Channels.pm create mode 100644 automake-1.15.1/lib/Automake/Condition.pm create mode 100644 automake-1.15.1/lib/Automake/Config.in create mode 100644 automake-1.15.1/lib/Automake/Configure_ac.pm create mode 100644 automake-1.15.1/lib/Automake/DisjConditions.pm create mode 100644 automake-1.15.1/lib/Automake/FileUtils.pm create mode 100644 automake-1.15.1/lib/Automake/General.pm create mode 100644 automake-1.15.1/lib/Automake/Getopt.pm create mode 100644 automake-1.15.1/lib/Automake/Item.pm create mode 100644 automake-1.15.1/lib/Automake/ItemDef.pm create mode 100644 automake-1.15.1/lib/Automake/Language.pm create mode 100644 automake-1.15.1/lib/Automake/Location.pm create mode 100644 automake-1.15.1/lib/Automake/Makefile.inc create mode 100644 automake-1.15.1/lib/Automake/Options.pm create mode 100644 automake-1.15.1/lib/Automake/Rule.pm create mode 100644 automake-1.15.1/lib/Automake/RuleDef.pm create mode 100644 automake-1.15.1/lib/Automake/VarDef.pm create mode 100644 automake-1.15.1/lib/Automake/Variable.pm create mode 100644 automake-1.15.1/lib/Automake/Version.pm create mode 100644 automake-1.15.1/lib/Automake/Wrap.pm create mode 100644 automake-1.15.1/lib/Automake/XFile.pm create mode 100644 automake-1.15.1/lib/COPYING create mode 100644 automake-1.15.1/lib/INSTALL create mode 100644 automake-1.15.1/lib/Makefile.inc create mode 100644 automake-1.15.1/lib/am/Makefile.inc create mode 100644 automake-1.15.1/lib/am/check.am create mode 100644 automake-1.15.1/lib/am/check2.am create mode 100644 automake-1.15.1/lib/am/clean-hdr.am create mode 100644 automake-1.15.1/lib/am/clean.am create mode 100644 automake-1.15.1/lib/am/compile.am create mode 100644 automake-1.15.1/lib/am/configure.am create mode 100644 automake-1.15.1/lib/am/data.am create mode 100644 automake-1.15.1/lib/am/dejagnu.am create mode 100644 automake-1.15.1/lib/am/depend.am create mode 100644 automake-1.15.1/lib/am/depend2.am create mode 100644 automake-1.15.1/lib/am/distdir.am create mode 100644 automake-1.15.1/lib/am/footer.am create mode 100644 automake-1.15.1/lib/am/header-vars.am create mode 100644 automake-1.15.1/lib/am/header.am create mode 100644 automake-1.15.1/lib/am/inst-vars.am create mode 100644 automake-1.15.1/lib/am/install.am create mode 100644 automake-1.15.1/lib/am/java.am create mode 100644 automake-1.15.1/lib/am/lang-compile.am create mode 100644 automake-1.15.1/lib/am/lex.am create mode 100644 automake-1.15.1/lib/am/library.am create mode 100644 automake-1.15.1/lib/am/libs.am create mode 100644 automake-1.15.1/lib/am/libtool.am create mode 100644 automake-1.15.1/lib/am/lisp.am create mode 100644 automake-1.15.1/lib/am/ltlib.am create mode 100644 automake-1.15.1/lib/am/ltlibrary.am create mode 100644 automake-1.15.1/lib/am/mans-vars.am create mode 100644 automake-1.15.1/lib/am/mans.am create mode 100644 automake-1.15.1/lib/am/program.am create mode 100644 automake-1.15.1/lib/am/progs.am create mode 100644 automake-1.15.1/lib/am/python.am create mode 100644 automake-1.15.1/lib/am/remake-hdr.am create mode 100644 automake-1.15.1/lib/am/scripts.am create mode 100644 automake-1.15.1/lib/am/subdirs.am create mode 100644 automake-1.15.1/lib/am/tags.am create mode 100644 automake-1.15.1/lib/am/texi-vers.am create mode 100644 automake-1.15.1/lib/am/texibuild.am create mode 100644 automake-1.15.1/lib/am/texinfos.am create mode 100644 automake-1.15.1/lib/am/vala.am create mode 100644 automake-1.15.1/lib/am/yacc.am create mode 100755 automake-1.15.1/lib/ar-lib create mode 100755 automake-1.15.1/lib/compile create mode 100755 automake-1.15.1/lib/config.guess create mode 100755 automake-1.15.1/lib/config.sub create mode 100755 automake-1.15.1/lib/depcomp create mode 100755 automake-1.15.1/lib/gendocs.sh create mode 100644 automake-1.15.1/lib/gendocs_template create mode 100755 automake-1.15.1/lib/gitlog-to-changelog create mode 100755 automake-1.15.1/lib/gnupload create mode 100755 automake-1.15.1/lib/install-sh create mode 100755 automake-1.15.1/lib/mdate-sh create mode 100755 automake-1.15.1/lib/missing create mode 100755 automake-1.15.1/lib/mkinstalldirs create mode 100755 automake-1.15.1/lib/py-compile create mode 100755 automake-1.15.1/lib/tap-driver.sh create mode 100755 automake-1.15.1/lib/test-driver create mode 100644 automake-1.15.1/lib/texinfo.tex create mode 100755 automake-1.15.1/lib/update-copyright create mode 100755 automake-1.15.1/lib/ylwrap create mode 100644 automake-1.15.1/m4/Makefile.inc create mode 100644 automake-1.15.1/m4/acdir/README create mode 100644 automake-1.15.1/m4/amversion.in create mode 100644 automake-1.15.1/m4/amversion.m4 create mode 100644 automake-1.15.1/m4/ar-lib.m4 create mode 100644 automake-1.15.1/m4/as.m4 create mode 100644 automake-1.15.1/m4/auxdir.m4 create mode 100644 automake-1.15.1/m4/cond-if.m4 create mode 100644 automake-1.15.1/m4/cond.m4 create mode 100644 automake-1.15.1/m4/depend.m4 create mode 100644 automake-1.15.1/m4/depout.m4 create mode 100644 automake-1.15.1/m4/dmalloc.m4 create mode 100644 automake-1.15.1/m4/extra-recurs.m4 create mode 100644 automake-1.15.1/m4/gcj.m4 create mode 100644 automake-1.15.1/m4/init.m4 create mode 100644 automake-1.15.1/m4/install-sh.m4 create mode 100644 automake-1.15.1/m4/internal/ac-config-macro-dirs.m4 create mode 100644 automake-1.15.1/m4/lead-dot.m4 create mode 100644 automake-1.15.1/m4/lex.m4 create mode 100644 automake-1.15.1/m4/lispdir.m4 create mode 100644 automake-1.15.1/m4/maintainer.m4 create mode 100644 automake-1.15.1/m4/make.m4 create mode 100644 automake-1.15.1/m4/missing.m4 create mode 100644 automake-1.15.1/m4/mkdirp.m4 create mode 100644 automake-1.15.1/m4/obsolete.m4 create mode 100644 automake-1.15.1/m4/options.m4 create mode 100644 automake-1.15.1/m4/prog-cc-c-o.m4 create mode 100644 automake-1.15.1/m4/python.m4 create mode 100644 automake-1.15.1/m4/runlog.m4 create mode 100644 automake-1.15.1/m4/sanity.m4 create mode 100644 automake-1.15.1/m4/silent.m4 create mode 100644 automake-1.15.1/m4/strip.m4 create mode 100644 automake-1.15.1/m4/substnot.m4 create mode 100644 automake-1.15.1/m4/tar.m4 create mode 100644 automake-1.15.1/m4/upc.m4 create mode 100644 automake-1.15.1/m4/vala.m4 create mode 100755 automake-1.15.1/maintainer/am-ft create mode 100755 automake-1.15.1/maintainer/am-xft create mode 100644 automake-1.15.1/maintainer/maint.mk create mode 100755 automake-1.15.1/maintainer/rename-tests create mode 100644 automake-1.15.1/maintainer/syntax-checks.mk create mode 100644 automake-1.15.1/old/ChangeLog-tests create mode 100644 automake-1.15.1/old/ChangeLog.00 create mode 100644 automake-1.15.1/old/ChangeLog.01 create mode 100644 automake-1.15.1/old/ChangeLog.02 create mode 100644 automake-1.15.1/old/ChangeLog.03 create mode 100644 automake-1.15.1/old/ChangeLog.04 create mode 100644 automake-1.15.1/old/ChangeLog.09 create mode 100644 automake-1.15.1/old/ChangeLog.11 create mode 100644 automake-1.15.1/old/ChangeLog.96 create mode 100644 automake-1.15.1/old/ChangeLog.98 create mode 100644 automake-1.15.1/old/TODO create mode 100644 automake-1.15.1/t/CheckListOfTests.am create mode 100644 automake-1.15.1/t/Makefile.inc create mode 100644 automake-1.15.1/t/README create mode 100644 automake-1.15.1/t/ac-output-old.tap create mode 100644 automake-1.15.1/t/aclocal-I-and-install.sh create mode 100644 automake-1.15.1/t/aclocal-I-order-1.sh create mode 100644 automake-1.15.1/t/aclocal-I-order-2.sh create mode 100644 automake-1.15.1/t/aclocal-I-order-3.sh create mode 100644 automake-1.15.1/t/aclocal-acdir.sh create mode 100644 automake-1.15.1/t/aclocal-amflags.sh create mode 100644 automake-1.15.1/t/aclocal-autoconf-version-check.sh create mode 100644 automake-1.15.1/t/aclocal-comments-respected.sh create mode 100644 automake-1.15.1/t/aclocal-deleted-header-aclocal-amflags.sh create mode 100644 automake-1.15.1/t/aclocal-deleted-header.sh create mode 100644 automake-1.15.1/t/aclocal-deps-subdir.sh create mode 100644 automake-1.15.1/t/aclocal-deps.sh create mode 100644 automake-1.15.1/t/aclocal-dirlist-abspath.sh create mode 100644 automake-1.15.1/t/aclocal-dirlist-globbing.sh create mode 100644 automake-1.15.1/t/aclocal-dirlist.sh create mode 100644 automake-1.15.1/t/aclocal-install-absdir.sh create mode 100644 automake-1.15.1/t/aclocal-install-fail.sh create mode 100644 automake-1.15.1/t/aclocal-install-mkdir.sh create mode 100644 automake-1.15.1/t/aclocal-m4-include-are-scanned-aclocal-amflags.sh create mode 100644 automake-1.15.1/t/aclocal-m4-include-are-scanned.sh create mode 100644 automake-1.15.1/t/aclocal-m4-sinclude.sh create mode 100644 automake-1.15.1/t/aclocal-macrodir.tap create mode 100644 automake-1.15.1/t/aclocal-macrodirs.tap create mode 100644 automake-1.15.1/t/aclocal-missing-macros.sh create mode 100644 automake-1.15.1/t/aclocal-no-extra-scan.sh create mode 100644 automake-1.15.1/t/aclocal-no-force.sh create mode 100644 automake-1.15.1/t/aclocal-no-install-no-mkdir.sh create mode 100644 automake-1.15.1/t/aclocal-no-symlinked-overwrite.sh create mode 100644 automake-1.15.1/t/aclocal-no-unused-required.sh create mode 100644 automake-1.15.1/t/aclocal-path-install-serial.sh create mode 100644 automake-1.15.1/t/aclocal-path-install.sh create mode 100644 automake-1.15.1/t/aclocal-path-nonexistent.sh create mode 100644 automake-1.15.1/t/aclocal-path-precedence.sh create mode 100644 automake-1.15.1/t/aclocal-path.sh create mode 100644 automake-1.15.1/t/aclocal-pr450.sh create mode 100644 automake-1.15.1/t/aclocal-print-acdir.sh create mode 100644 automake-1.15.1/t/aclocal-remake-misc.sh create mode 100644 automake-1.15.1/t/aclocal-req.sh create mode 100644 automake-1.15.1/t/aclocal-scan-configure-ac-pr319.sh create mode 100644 automake-1.15.1/t/aclocal-serial.sh create mode 100644 automake-1.15.1/t/aclocal-underquoted-defun.sh create mode 100644 automake-1.15.1/t/aclocal-verbose-install.sh create mode 100644 automake-1.15.1/t/aclocal.sh create mode 100644 automake-1.15.1/t/acsilent.sh create mode 100644 automake-1.15.1/t/acsubst.sh create mode 100644 automake-1.15.1/t/acsubst2.sh create mode 100644 automake-1.15.1/t/add-missing-install-sh.sh create mode 100644 automake-1.15.1/t/add-missing-multiple.sh create mode 100644 automake-1.15.1/t/add-missing.tap create mode 100644 automake-1.15.1/t/all.sh create mode 100644 automake-1.15.1/t/all2.sh create mode 100644 automake-1.15.1/t/alloca.sh create mode 100644 automake-1.15.1/t/alloca2.sh create mode 100644 automake-1.15.1/t/alpha.sh create mode 100644 automake-1.15.1/t/alpha2.sh create mode 100644 automake-1.15.1/t/am-config-header.sh create mode 100644 automake-1.15.1/t/am-default-source-ext.sh create mode 100644 automake-1.15.1/t/am-include-only-one-generated-fragment.sh create mode 100644 automake-1.15.1/t/am-macro-not-found.sh create mode 100644 automake-1.15.1/t/am-missing-prog.sh create mode 100644 automake-1.15.1/t/am-prog-cc-c-o.sh create mode 100644 automake-1.15.1/t/am-prog-cc-stdc.sh create mode 100644 automake-1.15.1/t/am-tests-environment.sh create mode 100644 automake-1.15.1/t/amassign.sh create mode 100644 automake-1.15.1/t/amhello-binpkg.sh create mode 100644 automake-1.15.1/t/amhello-cflags.sh create mode 100644 automake-1.15.1/t/amhello-cross-compile.sh create mode 100644 automake-1.15.1/t/aminit-moreargs-deprecation.sh create mode 100644 automake-1.15.1/t/aminit-trailing-dnl-comment-pr16841.sh create mode 100644 automake-1.15.1/t/amopt.sh create mode 100644 automake-1.15.1/t/amopts-location.sh create mode 100644 automake-1.15.1/t/amopts-variable-expansion.sh create mode 100644 automake-1.15.1/t/amsubst.sh create mode 100644 automake-1.15.1/t/ansi2knr-no-more.sh create mode 100644 automake-1.15.1/t/ar-lib-w.sh create mode 100644 automake-1.15.1/t/ar-lib.sh create mode 100644 automake-1.15.1/t/ar-lib2.sh create mode 100644 automake-1.15.1/t/ar-lib3.sh create mode 100644 automake-1.15.1/t/ar-lib4.sh create mode 100644 automake-1.15.1/t/ar-lib5a.sh create mode 100644 automake-1.15.1/t/ar-lib5b.sh create mode 100644 automake-1.15.1/t/ar-lib6a.sh create mode 100644 automake-1.15.1/t/ar-lib6b.sh create mode 100644 automake-1.15.1/t/ar-lib7.sh create mode 100644 automake-1.15.1/t/ar.sh create mode 100644 automake-1.15.1/t/ar2.sh create mode 100644 automake-1.15.1/t/ar3.sh create mode 100644 automake-1.15.1/t/ar4.sh create mode 100644 automake-1.15.1/t/ar5.sh create mode 100644 automake-1.15.1/t/asm.sh create mode 100644 automake-1.15.1/t/asm2.sh create mode 100644 automake-1.15.1/t/asm3.sh create mode 100644 automake-1.15.1/t/autodist-acconfig-no-subdir.sh create mode 100644 automake-1.15.1/t/autodist-acconfig.sh create mode 100644 automake-1.15.1/t/autodist-aclocal-m4.sh create mode 100644 automake-1.15.1/t/autodist-config-headers.sh create mode 100644 automake-1.15.1/t/autodist-configure-no-subdir.sh create mode 100644 automake-1.15.1/t/autodist-no-duplicate.sh create mode 100644 automake-1.15.1/t/autodist-stamp-vti.sh create mode 100644 automake-1.15.1/t/autodist-subdir.sh create mode 100644 automake-1.15.1/t/autodist.sh create mode 100644 automake-1.15.1/t/autohdr-subdir-pr12495.sh create mode 100644 automake-1.15.1/t/autohdr.sh create mode 100644 automake-1.15.1/t/autohdr3.sh create mode 100644 automake-1.15.1/t/autohdr4.sh create mode 100644 automake-1.15.1/t/autohdrdry.sh create mode 100644 automake-1.15.1/t/automake-cmdline.tap create mode 100644 automake-1.15.1/t/auxdir-autodetect.sh create mode 100644 automake-1.15.1/t/auxdir-cc-pr15981.sh create mode 100644 automake-1.15.1/t/auxdir-computed.tap create mode 100644 automake-1.15.1/t/auxdir-misplaced.sh create mode 100644 automake-1.15.1/t/auxdir-nonexistent.sh create mode 100644 automake-1.15.1/t/auxdir-pr15981.sh create mode 100644 automake-1.15.1/t/auxdir-pr19311.sh create mode 100644 automake-1.15.1/t/auxdir-unportable.tap create mode 100644 automake-1.15.1/t/auxdir.sh create mode 100644 automake-1.15.1/t/auxdir6.sh create mode 100644 automake-1.15.1/t/auxdir7.sh create mode 100644 automake-1.15.1/t/auxdir8.sh create mode 100644 automake-1.15.1/t/ax/am-test-lib.sh create mode 100644 automake-1.15.1/t/ax/cc-no-c-o.in create mode 100644 automake-1.15.1/t/ax/deltree.pl create mode 100644 automake-1.15.1/t/ax/depcomp.sh create mode 100644 automake-1.15.1/t/ax/distcheck-hook-m4.am create mode 100644 automake-1.15.1/t/ax/extract-testsuite-summary.pl create mode 100755 automake-1.15.1/t/ax/is create mode 100755 automake-1.15.1/t/ax/is_newest create mode 100644 automake-1.15.1/t/ax/runtest.in create mode 100644 automake-1.15.1/t/ax/shell-no-trail-bslash.in create mode 100644 automake-1.15.1/t/ax/tap-functions.sh create mode 100644 automake-1.15.1/t/ax/tap-setup.sh create mode 100644 automake-1.15.1/t/ax/tap-summary-aux.sh create mode 100644 automake-1.15.1/t/ax/test-defs.in create mode 100644 automake-1.15.1/t/ax/test-init.sh create mode 100644 automake-1.15.1/t/ax/test-lib.sh create mode 100644 automake-1.15.1/t/ax/testsuite-summary-checks.sh create mode 100644 automake-1.15.1/t/ax/trivial-test-driver create mode 100644 automake-1.15.1/t/backcompat-acout.sh create mode 100644 automake-1.15.1/t/backcompat.sh create mode 100644 automake-1.15.1/t/backcompat2.sh create mode 100644 automake-1.15.1/t/backcompat3.sh create mode 100644 automake-1.15.1/t/backcompat6.sh create mode 100644 automake-1.15.1/t/backslash-before-trailing-whitespace.sh create mode 100644 automake-1.15.1/t/backslash-issues.sh create mode 100644 automake-1.15.1/t/badline.sh create mode 100644 automake-1.15.1/t/badopt.sh create mode 100644 automake-1.15.1/t/badprog.sh create mode 100644 automake-1.15.1/t/built-sources-check-w.sh create mode 100644 automake-1.15.1/t/built-sources-check.sh create mode 100644 automake-1.15.1/t/built-sources-cond.sh create mode 100644 automake-1.15.1/t/built-sources-fork-bomb.sh create mode 100644 automake-1.15.1/t/built-sources-install.sh create mode 100644 automake-1.15.1/t/built-sources-subdir.sh create mode 100644 automake-1.15.1/t/built-sources.sh create mode 100644 automake-1.15.1/t/c-demo.sh create mode 100644 automake-1.15.1/t/candist.sh create mode 100644 automake-1.15.1/t/canon-name.sh create mode 100644 automake-1.15.1/t/canon.sh create mode 100644 automake-1.15.1/t/canon2.sh create mode 100644 automake-1.15.1/t/canon3.sh create mode 100644 automake-1.15.1/t/canon4.sh create mode 100644 automake-1.15.1/t/canon5.sh create mode 100644 automake-1.15.1/t/canon6.sh create mode 100644 automake-1.15.1/t/canon7.sh create mode 100644 automake-1.15.1/t/canon8.sh create mode 100755 automake-1.15.1/t/ccnoco-deps.sh create mode 100755 automake-1.15.1/t/ccnoco-lib.sh create mode 100755 automake-1.15.1/t/ccnoco-lt.sh create mode 100644 automake-1.15.1/t/ccnoco.sh create mode 100644 automake-1.15.1/t/ccnoco3.sh create mode 100644 automake-1.15.1/t/ccnoco4.sh create mode 100644 automake-1.15.1/t/check-concurrency-bug9245.sh create mode 100644 automake-1.15.1/t/check-exported-srcdir-w.sh create mode 100644 automake-1.15.1/t/check-exported-srcdir.sh create mode 100644 automake-1.15.1/t/check-fd-redirect-w.sh create mode 100644 automake-1.15.1/t/check-fd-redirect.sh create mode 100644 automake-1.15.1/t/check-no-test-driver.sh create mode 100644 automake-1.15.1/t/check-subst-prog-w.sh create mode 100644 automake-1.15.1/t/check-subst-prog.sh create mode 100644 automake-1.15.1/t/check-subst-w.sh create mode 100644 automake-1.15.1/t/check-subst.sh create mode 100644 automake-1.15.1/t/check-tests-in-builddir-w.sh create mode 100644 automake-1.15.1/t/check-tests-in-builddir.sh create mode 100644 automake-1.15.1/t/check-w.sh create mode 100644 automake-1.15.1/t/check.sh create mode 100644 automake-1.15.1/t/check10.sh create mode 100644 automake-1.15.1/t/check11-w.sh create mode 100644 automake-1.15.1/t/check11.sh create mode 100644 automake-1.15.1/t/check12-w.sh create mode 100644 automake-1.15.1/t/check12.sh create mode 100644 automake-1.15.1/t/check2-w.sh create mode 100644 automake-1.15.1/t/check2.sh create mode 100644 automake-1.15.1/t/check4-w.sh create mode 100644 automake-1.15.1/t/check4.sh create mode 100644 automake-1.15.1/t/check5-w.sh create mode 100644 automake-1.15.1/t/check5.sh create mode 100644 automake-1.15.1/t/check6-w.sh create mode 100644 automake-1.15.1/t/check6.sh create mode 100644 automake-1.15.1/t/check7-w.sh create mode 100644 automake-1.15.1/t/check7.sh create mode 100644 automake-1.15.1/t/check8-w.sh create mode 100644 automake-1.15.1/t/check8.sh create mode 100644 automake-1.15.1/t/checkall.sh create mode 100644 automake-1.15.1/t/clean.sh create mode 100644 automake-1.15.1/t/colneq.sh create mode 100644 automake-1.15.1/t/colneq2.sh create mode 100644 automake-1.15.1/t/colneq3.sh create mode 100644 automake-1.15.1/t/colon.sh create mode 100644 automake-1.15.1/t/colon2.sh create mode 100644 automake-1.15.1/t/colon3.sh create mode 100644 automake-1.15.1/t/colon4.sh create mode 100644 automake-1.15.1/t/colon5.sh create mode 100644 automake-1.15.1/t/colon6.sh create mode 100644 automake-1.15.1/t/colon7.sh create mode 100644 automake-1.15.1/t/color-tests-opt.sh create mode 100644 automake-1.15.1/t/color-tests-w.sh create mode 100644 automake-1.15.1/t/color-tests.sh create mode 100644 automake-1.15.1/t/color-tests2-w.sh create mode 100644 automake-1.15.1/t/color-tests2.sh create mode 100644 automake-1.15.1/t/commen10.sh create mode 100644 automake-1.15.1/t/commen11.sh create mode 100644 automake-1.15.1/t/comment-block.sh create mode 100644 automake-1.15.1/t/comment.sh create mode 100644 automake-1.15.1/t/comment2.sh create mode 100644 automake-1.15.1/t/comment3.sh create mode 100644 automake-1.15.1/t/comment4.sh create mode 100644 automake-1.15.1/t/comment5.sh create mode 100644 automake-1.15.1/t/comment6.sh create mode 100644 automake-1.15.1/t/comment7.sh create mode 100644 automake-1.15.1/t/comment8.sh create mode 100644 automake-1.15.1/t/comment9.sh create mode 100644 automake-1.15.1/t/comments-in-var-def.sh create mode 100644 automake-1.15.1/t/compile-w.sh create mode 100644 automake-1.15.1/t/compile.sh create mode 100644 automake-1.15.1/t/compile2-w.sh create mode 100644 automake-1.15.1/t/compile2.sh create mode 100644 automake-1.15.1/t/compile3-w.sh create mode 100644 automake-1.15.1/t/compile3.sh create mode 100644 automake-1.15.1/t/compile4-w.sh create mode 100644 automake-1.15.1/t/compile4.sh create mode 100644 automake-1.15.1/t/compile5-w.sh create mode 100644 automake-1.15.1/t/compile5.sh create mode 100644 automake-1.15.1/t/compile6-w.sh create mode 100644 automake-1.15.1/t/compile6.sh create mode 100644 automake-1.15.1/t/compile7-w.sh create mode 100644 automake-1.15.1/t/compile7.sh create mode 100644 automake-1.15.1/t/compile_f90_c_cxx.sh create mode 100644 automake-1.15.1/t/compile_f_c_cxx.sh create mode 100644 automake-1.15.1/t/cond-basic.sh create mode 100644 automake-1.15.1/t/cond.sh create mode 100644 automake-1.15.1/t/cond10.sh create mode 100644 automake-1.15.1/t/cond11.sh create mode 100644 automake-1.15.1/t/cond13.sh create mode 100644 automake-1.15.1/t/cond14.sh create mode 100644 automake-1.15.1/t/cond15.sh create mode 100644 automake-1.15.1/t/cond16.sh create mode 100644 automake-1.15.1/t/cond17.sh create mode 100644 automake-1.15.1/t/cond18.sh create mode 100644 automake-1.15.1/t/cond19.sh create mode 100644 automake-1.15.1/t/cond20.sh create mode 100644 automake-1.15.1/t/cond21.sh create mode 100644 automake-1.15.1/t/cond22.sh create mode 100644 automake-1.15.1/t/cond23.sh create mode 100644 automake-1.15.1/t/cond24.sh create mode 100644 automake-1.15.1/t/cond25.sh create mode 100644 automake-1.15.1/t/cond26.sh create mode 100644 automake-1.15.1/t/cond27.sh create mode 100644 automake-1.15.1/t/cond28.sh create mode 100644 automake-1.15.1/t/cond3.sh create mode 100644 automake-1.15.1/t/cond30.sh create mode 100644 automake-1.15.1/t/cond31.sh create mode 100644 automake-1.15.1/t/cond32.sh create mode 100644 automake-1.15.1/t/cond33.sh create mode 100644 automake-1.15.1/t/cond34.sh create mode 100644 automake-1.15.1/t/cond35.sh create mode 100644 automake-1.15.1/t/cond36.sh create mode 100644 automake-1.15.1/t/cond37.sh create mode 100644 automake-1.15.1/t/cond38.sh create mode 100644 automake-1.15.1/t/cond39.sh create mode 100644 automake-1.15.1/t/cond4.sh create mode 100644 automake-1.15.1/t/cond40.sh create mode 100644 automake-1.15.1/t/cond41.sh create mode 100644 automake-1.15.1/t/cond42.sh create mode 100644 automake-1.15.1/t/cond43.sh create mode 100644 automake-1.15.1/t/cond44.sh create mode 100644 automake-1.15.1/t/cond45.sh create mode 100644 automake-1.15.1/t/cond46.sh create mode 100644 automake-1.15.1/t/cond5.sh create mode 100644 automake-1.15.1/t/cond6.sh create mode 100644 automake-1.15.1/t/cond7.sh create mode 100644 automake-1.15.1/t/cond8.sh create mode 100644 automake-1.15.1/t/cond9.sh create mode 100644 automake-1.15.1/t/condd.sh create mode 100644 automake-1.15.1/t/condhook.sh create mode 100644 automake-1.15.1/t/condhook2.sh create mode 100644 automake-1.15.1/t/condinc.sh create mode 100644 automake-1.15.1/t/condinc2.sh create mode 100644 automake-1.15.1/t/condlib.sh create mode 100644 automake-1.15.1/t/condman2.sh create mode 100644 automake-1.15.1/t/condman3.sh create mode 100644 automake-1.15.1/t/confdeps.sh create mode 100644 automake-1.15.1/t/conff.sh create mode 100644 automake-1.15.1/t/conff2.sh create mode 100644 automake-1.15.1/t/conffile-leading-dot.sh create mode 100644 automake-1.15.1/t/confh-subdir-clean.sh create mode 100644 automake-1.15.1/t/confh.sh create mode 100644 automake-1.15.1/t/confh4.sh create mode 100644 automake-1.15.1/t/confh5.sh create mode 100644 automake-1.15.1/t/confh6.sh create mode 100644 automake-1.15.1/t/confh7.sh create mode 100644 automake-1.15.1/t/confh8.sh create mode 100644 automake-1.15.1/t/configure.sh create mode 100644 automake-1.15.1/t/confincl.sh create mode 100644 automake-1.15.1/t/conflnk.sh create mode 100644 automake-1.15.1/t/conflnk2.sh create mode 100644 automake-1.15.1/t/conflnk3.sh create mode 100644 automake-1.15.1/t/conflnk4.sh create mode 100644 automake-1.15.1/t/confsub.sh create mode 100644 automake-1.15.1/t/confvar.sh create mode 100644 automake-1.15.1/t/confvar2.sh create mode 100644 automake-1.15.1/t/copy.sh create mode 100644 automake-1.15.1/t/cscope.tap create mode 100644 automake-1.15.1/t/cscope2.sh create mode 100644 automake-1.15.1/t/cscope3.sh create mode 100644 automake-1.15.1/t/cxx-demo.sh create mode 100644 automake-1.15.1/t/cxx-lt-demo.sh create mode 100644 automake-1.15.1/t/cxx.sh create mode 100644 automake-1.15.1/t/cxx2.sh create mode 100644 automake-1.15.1/t/cxxcpp.sh create mode 100644 automake-1.15.1/t/cxxlibobj.sh create mode 100644 automake-1.15.1/t/cxxlink.sh create mode 100644 automake-1.15.1/t/cxxnoc.sh create mode 100644 automake-1.15.1/t/cygnus-no-more.sh create mode 100644 automake-1.15.1/t/cygwin32.sh create mode 100644 automake-1.15.1/t/dash.sh create mode 100644 automake-1.15.1/t/defun.sh create mode 100644 automake-1.15.1/t/defun2.sh create mode 100644 automake-1.15.1/t/dejagnu-absolute-builddir.sh create mode 100644 automake-1.15.1/t/dejagnu-relative-srcdir.sh create mode 100644 automake-1.15.1/t/dejagnu-siteexp-append.sh create mode 100644 automake-1.15.1/t/dejagnu-siteexp-extend.sh create mode 100644 automake-1.15.1/t/dejagnu-siteexp-useredit.sh create mode 100644 automake-1.15.1/t/dejagnu.sh create mode 100644 automake-1.15.1/t/dejagnu2.sh create mode 100644 automake-1.15.1/t/dejagnu3.sh create mode 100644 automake-1.15.1/t/dejagnu4.sh create mode 100644 automake-1.15.1/t/dejagnu5.sh create mode 100644 automake-1.15.1/t/dejagnu6.sh create mode 100644 automake-1.15.1/t/dejagnu7.sh create mode 100644 automake-1.15.1/t/deleted-am.sh create mode 100644 automake-1.15.1/t/deleted-m4.sh create mode 100644 automake-1.15.1/t/depacl2.sh create mode 100644 automake-1.15.1/t/depcomp-auto.tap create mode 100644 automake-1.15.1/t/depcomp-cpp.tap create mode 100644 automake-1.15.1/t/depcomp-dashmstdout.tap create mode 100644 automake-1.15.1/t/depcomp-disabled.tap create mode 100644 automake-1.15.1/t/depcomp-gcc.tap create mode 100644 automake-1.15.1/t/depcomp-implicit-auxdir.sh create mode 100644 automake-1.15.1/t/depcomp-lt-auto.tap create mode 100644 automake-1.15.1/t/depcomp-lt-cpp.tap create mode 100644 automake-1.15.1/t/depcomp-lt-dashmstdout.tap create mode 100644 automake-1.15.1/t/depcomp-lt-disabled.tap create mode 100644 automake-1.15.1/t/depcomp-lt-gcc.tap create mode 100644 automake-1.15.1/t/depcomp-lt-makedepend.tap create mode 100644 automake-1.15.1/t/depcomp-lt-msvcmsys.tap create mode 100644 automake-1.15.1/t/depcomp-lt-msvisualcpp.tap create mode 100644 automake-1.15.1/t/depcomp-makedepend.tap create mode 100644 automake-1.15.1/t/depcomp-msvcmsys.tap create mode 100644 automake-1.15.1/t/depcomp-msvisualcpp.tap create mode 100644 automake-1.15.1/t/depcomp.sh create mode 100644 automake-1.15.1/t/depcomp2.sh create mode 100644 automake-1.15.1/t/depcomp8a.sh create mode 100644 automake-1.15.1/t/depcomp8b.sh create mode 100644 automake-1.15.1/t/depdist.sh create mode 100644 automake-1.15.1/t/depend.sh create mode 100644 automake-1.15.1/t/depend3.sh create mode 100644 automake-1.15.1/t/depend4.sh create mode 100644 automake-1.15.1/t/depend5.sh create mode 100644 automake-1.15.1/t/depend6.sh create mode 100644 automake-1.15.1/t/deprecated-acinit.sh create mode 100644 automake-1.15.1/t/destdir.sh create mode 100644 automake-1.15.1/t/dir-named-obj-is-bad.sh create mode 100644 automake-1.15.1/t/discover.sh create mode 100644 automake-1.15.1/t/dist-auxdir-many-subdirs.sh create mode 100644 automake-1.15.1/t/dist-auxfile-2.sh create mode 100644 automake-1.15.1/t/dist-auxfile.sh create mode 100644 automake-1.15.1/t/dist-formats.tap create mode 100644 automake-1.15.1/t/dist-included-parent-dir.sh create mode 100644 automake-1.15.1/t/dist-install-sh.sh create mode 100644 automake-1.15.1/t/dist-lzma.sh create mode 100644 automake-1.15.1/t/dist-missing-am.sh create mode 100644 automake-1.15.1/t/dist-missing-included-m4.sh create mode 100644 automake-1.15.1/t/dist-missing-m4.sh create mode 100644 automake-1.15.1/t/dist-pr109765.sh create mode 100644 automake-1.15.1/t/dist-readonly.sh create mode 100644 automake-1.15.1/t/dist-repeated.sh create mode 100644 automake-1.15.1/t/dist-shar.sh create mode 100644 automake-1.15.1/t/dist-tarZ.sh create mode 100644 automake-1.15.1/t/dist-with-unreadable-makefile-fails.sh create mode 100644 automake-1.15.1/t/distcheck-configure-flags-am.sh create mode 100644 automake-1.15.1/t/distcheck-configure-flags-subpkg.sh create mode 100644 automake-1.15.1/t/distcheck-configure-flags.sh create mode 100644 automake-1.15.1/t/distcheck-hook.sh create mode 100644 automake-1.15.1/t/distcheck-hook2.sh create mode 100644 automake-1.15.1/t/distcheck-missing-m4.sh create mode 100644 automake-1.15.1/t/distcheck-no-prefix-or-srcdir-override.sh create mode 100644 automake-1.15.1/t/distcheck-outdated-m4.sh create mode 100644 automake-1.15.1/t/distcheck-override-infodir.sh create mode 100644 automake-1.15.1/t/distcheck-pr10470.sh create mode 100644 automake-1.15.1/t/distcheck-pr18286.sh create mode 100644 automake-1.15.1/t/distcheck-pr9579.sh create mode 100644 automake-1.15.1/t/distcheck-writable-srcdir.sh create mode 100644 automake-1.15.1/t/distcleancheck.sh create mode 100644 automake-1.15.1/t/distcom-subdir.sh create mode 100644 automake-1.15.1/t/distcom2.sh create mode 100644 automake-1.15.1/t/distcom3.sh create mode 100644 automake-1.15.1/t/distcom4.sh create mode 100644 automake-1.15.1/t/distcom5.sh create mode 100644 automake-1.15.1/t/distdir.sh create mode 100644 automake-1.15.1/t/disthook.sh create mode 100644 automake-1.15.1/t/distlinks.sh create mode 100644 automake-1.15.1/t/distlinksbrk.sh create mode 100644 automake-1.15.1/t/distname.sh create mode 100644 automake-1.15.1/t/dmalloc.sh create mode 100644 automake-1.15.1/t/doc-parsing-buglets-colneq-subst.sh create mode 100644 automake-1.15.1/t/doc-parsing-buglets-tabs.sh create mode 100644 automake-1.15.1/t/dollar.sh create mode 100644 automake-1.15.1/t/dollarvar.sh create mode 100644 automake-1.15.1/t/dollarvar2.sh create mode 100644 automake-1.15.1/t/double.sh create mode 100644 automake-1.15.1/t/dup2.sh create mode 100644 automake-1.15.1/t/else.sh create mode 100644 automake-1.15.1/t/empty-data-primary.sh create mode 100644 automake-1.15.1/t/empty-sources-primary.tap create mode 100644 automake-1.15.1/t/exdir.sh create mode 100644 automake-1.15.1/t/exdir2.sh create mode 100644 automake-1.15.1/t/exdir3.sh create mode 100644 automake-1.15.1/t/exeext.sh create mode 100644 automake-1.15.1/t/exeext2.sh create mode 100644 automake-1.15.1/t/exeext3.sh create mode 100644 automake-1.15.1/t/exeext4-w.sh create mode 100644 automake-1.15.1/t/exeext4.sh create mode 100644 automake-1.15.1/t/ext.sh create mode 100644 automake-1.15.1/t/ext2.sh create mode 100644 automake-1.15.1/t/ext3.sh create mode 100644 automake-1.15.1/t/extra-data.sh create mode 100644 automake-1.15.1/t/extra-deps-lt.sh create mode 100644 automake-1.15.1/t/extra-deps.sh create mode 100644 automake-1.15.1/t/extra-dist-dirs-and-subdirs.sh create mode 100644 automake-1.15.1/t/extra-dist-vpath-dir-merge.sh create mode 100644 automake-1.15.1/t/extra-dist-vpath-dir.sh create mode 100644 automake-1.15.1/t/extra-dist-wildcards-gnu.sh create mode 100644 automake-1.15.1/t/extra-dist-wildcards-vpath.sh create mode 100644 automake-1.15.1/t/extra-dist-wildcards.sh create mode 100644 automake-1.15.1/t/extra-portability.sh create mode 100644 automake-1.15.1/t/extra-portability2.sh create mode 100644 automake-1.15.1/t/extra-portability3.sh create mode 100644 automake-1.15.1/t/extra-programs-and-libs.sh create mode 100644 automake-1.15.1/t/extra-programs-empty.sh create mode 100644 automake-1.15.1/t/extra-programs-misc.sh create mode 100644 automake-1.15.1/t/extra-sources-no-spurious.sh create mode 100644 automake-1.15.1/t/extra-sources.sh create mode 100644 automake-1.15.1/t/extra.sh create mode 100644 automake-1.15.1/t/f90only.sh create mode 100644 automake-1.15.1/t/flavor.sh create mode 100644 automake-1.15.1/t/flibs.sh create mode 100644 automake-1.15.1/t/fn99.sh create mode 100644 automake-1.15.1/t/fn99subdir.sh create mode 100644 automake-1.15.1/t/fnoc.sh create mode 100644 automake-1.15.1/t/fonly.sh create mode 100644 automake-1.15.1/t/forcemiss.sh create mode 100644 automake-1.15.1/t/forcemiss2.sh create mode 100644 automake-1.15.1/t/fort1.sh create mode 100644 automake-1.15.1/t/fort2.sh create mode 100644 automake-1.15.1/t/fort4.sh create mode 100644 automake-1.15.1/t/fort5.sh create mode 100644 automake-1.15.1/t/fortdep.sh create mode 100644 automake-1.15.1/t/gcj.sh create mode 100644 automake-1.15.1/t/gcj2.sh create mode 100644 automake-1.15.1/t/gcj3.sh create mode 100644 automake-1.15.1/t/gcj4.sh create mode 100644 automake-1.15.1/t/gcj5.sh create mode 100644 automake-1.15.1/t/gcj6.sh create mode 100644 automake-1.15.1/t/get-sysconf.sh create mode 100644 automake-1.15.1/t/gettext-basics.sh create mode 100644 automake-1.15.1/t/gettext-config-rpath.sh create mode 100644 automake-1.15.1/t/gettext-external-pr338.sh create mode 100644 automake-1.15.1/t/gettext-intl-subdir.sh create mode 100644 automake-1.15.1/t/gettext-macros.sh create mode 100644 automake-1.15.1/t/gettext-pr381.sh create mode 100644 automake-1.15.1/t/gnits.sh create mode 100644 automake-1.15.1/t/gnits2.sh create mode 100644 automake-1.15.1/t/gnits3.sh create mode 100644 automake-1.15.1/t/gnumake.sh create mode 100644 automake-1.15.1/t/gnuwarn.sh create mode 100644 automake-1.15.1/t/gnuwarn2.sh create mode 100644 automake-1.15.1/t/hdr-vars-defined-once.sh create mode 100644 automake-1.15.1/t/header.sh create mode 100644 automake-1.15.1/t/help-depend.sh create mode 100644 automake-1.15.1/t/help-depend2.sh create mode 100644 automake-1.15.1/t/help-dmalloc.sh create mode 100644 automake-1.15.1/t/help-init.sh create mode 100644 automake-1.15.1/t/help-lispdir.sh create mode 100644 automake-1.15.1/t/help-python.sh create mode 100644 automake-1.15.1/t/help-silent.sh create mode 100644 automake-1.15.1/t/help-upc.sh create mode 100644 automake-1.15.1/t/help.sh create mode 100644 automake-1.15.1/t/help2.sh create mode 100644 automake-1.15.1/t/help3.sh create mode 100644 automake-1.15.1/t/help4.sh create mode 100644 automake-1.15.1/t/hfs.sh create mode 100644 automake-1.15.1/t/implicit.sh create mode 100644 automake-1.15.1/t/init.sh create mode 100644 automake-1.15.1/t/init2.sh create mode 100644 automake-1.15.1/t/install-info-dir.sh create mode 100644 automake-1.15.1/t/install-sh-option-C-w.sh create mode 100644 automake-1.15.1/t/install-sh-option-C.sh create mode 100644 automake-1.15.1/t/install-sh-unittests-w.sh create mode 100644 automake-1.15.1/t/install-sh-unittests.sh create mode 100644 automake-1.15.1/t/installdir.sh create mode 100644 automake-1.15.1/t/instdat.sh create mode 100644 automake-1.15.1/t/instdat2.sh create mode 100644 automake-1.15.1/t/instdir-cond.sh create mode 100644 automake-1.15.1/t/instdir-cond2.sh create mode 100644 automake-1.15.1/t/instdir-java.sh create mode 100644 automake-1.15.1/t/instdir-lisp.sh create mode 100644 automake-1.15.1/t/instdir-ltlib.sh create mode 100644 automake-1.15.1/t/instdir-no-empty.sh create mode 100644 automake-1.15.1/t/instdir-prog.sh create mode 100644 automake-1.15.1/t/instdir-python.sh create mode 100644 automake-1.15.1/t/instdir-texi.sh create mode 100644 automake-1.15.1/t/instdir.sh create mode 100644 automake-1.15.1/t/instdir2.sh create mode 100644 automake-1.15.1/t/instexec.sh create mode 100644 automake-1.15.1/t/instfail-info.sh create mode 100644 automake-1.15.1/t/instfail-java.sh create mode 100644 automake-1.15.1/t/instfail-libtool.sh create mode 100644 automake-1.15.1/t/instfail.sh create mode 100644 automake-1.15.1/t/insthook.sh create mode 100644 automake-1.15.1/t/instman.sh create mode 100644 automake-1.15.1/t/instman2.sh create mode 100644 automake-1.15.1/t/instmany-mans.sh create mode 100644 automake-1.15.1/t/instmany-python.sh create mode 100644 automake-1.15.1/t/instmany.sh create mode 100644 automake-1.15.1/t/instspc.tap create mode 100644 automake-1.15.1/t/interp.sh create mode 100644 automake-1.15.1/t/interp2.sh create mode 100644 automake-1.15.1/t/java-check.sh create mode 100644 automake-1.15.1/t/java-clean.sh create mode 100644 automake-1.15.1/t/java-compile-install.sh create mode 100644 automake-1.15.1/t/java-compile-run-flat.sh create mode 100644 automake-1.15.1/t/java-compile-run-nested.sh create mode 100644 automake-1.15.1/t/java-empty-classpath.sh create mode 100644 automake-1.15.1/t/java-extra.sh create mode 100644 automake-1.15.1/t/java-mix.sh create mode 100644 automake-1.15.1/t/java-no-duplicate.sh create mode 100644 automake-1.15.1/t/java-nobase.sh create mode 100644 automake-1.15.1/t/java-noinst.sh create mode 100644 automake-1.15.1/t/java-rebuild.sh create mode 100644 automake-1.15.1/t/java-sources.sh create mode 100644 automake-1.15.1/t/java-uninstall.sh create mode 100644 automake-1.15.1/t/java.sh create mode 100644 automake-1.15.1/t/java2.sh create mode 100644 automake-1.15.1/t/java3.sh create mode 100644 automake-1.15.1/t/javadir-undefined.sh create mode 100644 automake-1.15.1/t/javaflags.sh create mode 100644 automake-1.15.1/t/javaprim.sh create mode 100644 automake-1.15.1/t/javasubst.sh create mode 100644 automake-1.15.1/t/ldadd.sh create mode 100644 automake-1.15.1/t/ldflags.sh create mode 100644 automake-1.15.1/t/lex-clean-cxx.sh create mode 100644 automake-1.15.1/t/lex-clean.sh create mode 100644 automake-1.15.1/t/lex-depend-cxx.sh create mode 100644 automake-1.15.1/t/lex-depend-grep.sh create mode 100644 automake-1.15.1/t/lex-depend.sh create mode 100644 automake-1.15.1/t/lex-header.sh create mode 100644 automake-1.15.1/t/lex-lib-external.sh create mode 100644 automake-1.15.1/t/lex-lib.sh create mode 100644 automake-1.15.1/t/lex-libobj.sh create mode 100644 automake-1.15.1/t/lex-line.sh create mode 100644 automake-1.15.1/t/lex-multiple.sh create mode 100644 automake-1.15.1/t/lex-nodist.sh create mode 100644 automake-1.15.1/t/lex-noyywrap.sh create mode 100644 automake-1.15.1/t/lex-pr204.sh create mode 100644 automake-1.15.1/t/lex-subobj-nodep.sh create mode 100644 automake-1.15.1/t/lex.sh create mode 100644 automake-1.15.1/t/lex2.sh create mode 100644 automake-1.15.1/t/lex3.sh create mode 100644 automake-1.15.1/t/lex5.sh create mode 100644 automake-1.15.1/t/lexcpp.sh create mode 100644 automake-1.15.1/t/lexvpath.sh create mode 100644 automake-1.15.1/t/lflags-cxx.sh create mode 100644 automake-1.15.1/t/lflags.sh create mode 100644 automake-1.15.1/t/libexec.sh create mode 100644 automake-1.15.1/t/libobj-basic.sh create mode 100644 automake-1.15.1/t/libobj10.sh create mode 100644 automake-1.15.1/t/libobj12.sh create mode 100644 automake-1.15.1/t/libobj13.sh create mode 100644 automake-1.15.1/t/libobj14.sh create mode 100644 automake-1.15.1/t/libobj15a.sh create mode 100644 automake-1.15.1/t/libobj15b.sh create mode 100644 automake-1.15.1/t/libobj15c.sh create mode 100644 automake-1.15.1/t/libobj16a.sh create mode 100644 automake-1.15.1/t/libobj16b.sh create mode 100644 automake-1.15.1/t/libobj17.sh create mode 100644 automake-1.15.1/t/libobj18.sh create mode 100644 automake-1.15.1/t/libobj19.sh create mode 100644 automake-1.15.1/t/libobj2.sh create mode 100644 automake-1.15.1/t/libobj20a.sh create mode 100644 automake-1.15.1/t/libobj20b.sh create mode 100644 automake-1.15.1/t/libobj20c.sh create mode 100644 automake-1.15.1/t/libobj3.sh create mode 100644 automake-1.15.1/t/libobj4.sh create mode 100644 automake-1.15.1/t/libobj5.sh create mode 100644 automake-1.15.1/t/libobj7.sh create mode 100644 automake-1.15.1/t/library.sh create mode 100644 automake-1.15.1/t/library2.sh create mode 100644 automake-1.15.1/t/library3.sh create mode 100644 automake-1.15.1/t/libtoo10.sh create mode 100644 automake-1.15.1/t/libtoo11.sh create mode 100644 automake-1.15.1/t/libtool-macros.sh create mode 100644 automake-1.15.1/t/libtool.sh create mode 100644 automake-1.15.1/t/libtool2.sh create mode 100644 automake-1.15.1/t/libtool3.sh create mode 100644 automake-1.15.1/t/libtool4.sh create mode 100644 automake-1.15.1/t/libtool5.sh create mode 100644 automake-1.15.1/t/libtool6.sh create mode 100644 automake-1.15.1/t/libtool7.sh create mode 100644 automake-1.15.1/t/libtool8.sh create mode 100644 automake-1.15.1/t/libtool9.sh create mode 100644 automake-1.15.1/t/license.sh create mode 100644 automake-1.15.1/t/license2.sh create mode 100644 automake-1.15.1/t/link_c_cxx.sh create mode 100644 automake-1.15.1/t/link_cond.sh create mode 100644 automake-1.15.1/t/link_dist.sh create mode 100644 automake-1.15.1/t/link_f90_only.sh create mode 100644 automake-1.15.1/t/link_f_only.sh create mode 100644 automake-1.15.1/t/link_fc.sh create mode 100644 automake-1.15.1/t/link_fccxx.sh create mode 100644 automake-1.15.1/t/link_fcxx.sh create mode 100644 automake-1.15.1/t/link_override.sh create mode 100644 automake-1.15.1/t/lisp-flags.sh create mode 100644 automake-1.15.1/t/lisp-loadpath.sh create mode 100644 automake-1.15.1/t/lisp-pr11806.sh create mode 100644 automake-1.15.1/t/lisp-subdir-mix.sh create mode 100644 automake-1.15.1/t/lisp-subdir.sh create mode 100644 automake-1.15.1/t/lisp-subdir2.sh create mode 100644 automake-1.15.1/t/lisp2.sh create mode 100644 automake-1.15.1/t/lisp3.sh create mode 100644 automake-1.15.1/t/lisp4.sh create mode 100644 automake-1.15.1/t/lisp5.sh create mode 100644 automake-1.15.1/t/lisp6.sh create mode 100644 automake-1.15.1/t/lisp7.sh create mode 100644 automake-1.15.1/t/lisp8.sh create mode 100644 automake-1.15.1/t/lispdry.sh create mode 100644 automake-1.15.1/t/list-of-tests.mk create mode 100644 automake-1.15.1/t/listval.sh create mode 100644 automake-1.15.1/t/location.sh create mode 100644 automake-1.15.1/t/longlin2.sh create mode 100644 automake-1.15.1/t/longline.sh create mode 100644 automake-1.15.1/t/ltcond.sh create mode 100644 automake-1.15.1/t/ltcond2.sh create mode 100644 automake-1.15.1/t/ltconv.sh create mode 100644 automake-1.15.1/t/ltdeps.sh create mode 100644 automake-1.15.1/t/ltinit.sh create mode 100644 automake-1.15.1/t/ltinstloc.sh create mode 100644 automake-1.15.1/t/ltlibobjs.sh create mode 100644 automake-1.15.1/t/ltlibsrc.sh create mode 100644 automake-1.15.1/t/ltorder.sh create mode 100644 automake-1.15.1/t/m4-inclusion.sh create mode 100644 automake-1.15.1/t/maintclean-vpath.sh create mode 100644 automake-1.15.1/t/maintclean.sh create mode 100644 automake-1.15.1/t/maintmode-configure-msg.sh create mode 100644 automake-1.15.1/t/make-dryrun.tap create mode 100644 automake-1.15.1/t/make-is-gnu.sh create mode 100644 automake-1.15.1/t/make-keepgoing.tap create mode 100644 automake-1.15.1/t/make.sh create mode 100644 automake-1.15.1/t/makefile-deps.sh create mode 100644 automake-1.15.1/t/makej.sh create mode 100644 automake-1.15.1/t/makej2.sh create mode 100644 automake-1.15.1/t/maken.sh create mode 100644 automake-1.15.1/t/maken3-w.sh create mode 100644 automake-1.15.1/t/maken3.sh create mode 100644 automake-1.15.1/t/makevars.sh create mode 100644 automake-1.15.1/t/man.sh create mode 100644 automake-1.15.1/t/man2.sh create mode 100644 automake-1.15.1/t/man3.sh create mode 100644 automake-1.15.1/t/man5.sh create mode 100644 automake-1.15.1/t/man6.sh create mode 100644 automake-1.15.1/t/man7.sh create mode 100644 automake-1.15.1/t/man8.sh create mode 100644 automake-1.15.1/t/mdate.sh create mode 100644 automake-1.15.1/t/mdate2.sh create mode 100644 automake-1.15.1/t/mdate3.sh create mode 100644 automake-1.15.1/t/mdate4.sh create mode 100644 automake-1.15.1/t/mdate5-w.sh create mode 100644 automake-1.15.1/t/mdate5.sh create mode 100644 automake-1.15.1/t/mdate6-w.sh create mode 100644 automake-1.15.1/t/mdate6.sh create mode 100644 automake-1.15.1/t/missing-auxfile-stops-makefiles-creation.sh create mode 100644 automake-1.15.1/t/missing-version-mismatch-w.sh create mode 100644 automake-1.15.1/t/missing-version-mismatch.sh create mode 100644 automake-1.15.1/t/missing3-w.sh create mode 100644 automake-1.15.1/t/missing3.sh create mode 100644 automake-1.15.1/t/mkdir_p.sh create mode 100644 automake-1.15.1/t/mkdirp-deprecation.sh create mode 100644 automake-1.15.1/t/mkinst2.sh create mode 100644 automake-1.15.1/t/mkinst3-w.sh create mode 100644 automake-1.15.1/t/mkinst3.sh create mode 100644 automake-1.15.1/t/mkinstall.sh create mode 100644 automake-1.15.1/t/mmode.sh create mode 100644 automake-1.15.1/t/mmodely.sh create mode 100644 automake-1.15.1/t/no-extra-c-stuff.sh create mode 100644 automake-1.15.1/t/no-extra-makefile-code.sh create mode 100644 automake-1.15.1/t/no-spurious-install-recursive.sh create mode 100644 automake-1.15.1/t/nobase-libtool.sh create mode 100644 automake-1.15.1/t/nobase-nodist.sh create mode 100644 automake-1.15.1/t/nobase-python.sh create mode 100644 automake-1.15.1/t/nobase.sh create mode 100644 automake-1.15.1/t/nodef.sh create mode 100644 automake-1.15.1/t/nodef2.sh create mode 100644 automake-1.15.1/t/nodep.sh create mode 100644 automake-1.15.1/t/nodep2.sh create mode 100644 automake-1.15.1/t/nodepcomp.sh create mode 100644 automake-1.15.1/t/nodist.sh create mode 100644 automake-1.15.1/t/nodist2.sh create mode 100644 automake-1.15.1/t/nodist3.sh create mode 100644 automake-1.15.1/t/noinst.sh create mode 100644 automake-1.15.1/t/noinstdir.sh create mode 100644 automake-1.15.1/t/nolink.sh create mode 100644 automake-1.15.1/t/nostdinc.sh create mode 100644 automake-1.15.1/t/notrans.sh create mode 100644 automake-1.15.1/t/number.sh create mode 100644 automake-1.15.1/t/objc-basic.sh create mode 100644 automake-1.15.1/t/objc-deps.sh create mode 100644 automake-1.15.1/t/objc-flags.sh create mode 100644 automake-1.15.1/t/objc-megademo.sh create mode 100644 automake-1.15.1/t/objc-minidemo.sh create mode 100644 automake-1.15.1/t/objcxx-basic.sh create mode 100644 automake-1.15.1/t/objcxx-deps.sh create mode 100644 automake-1.15.1/t/objcxx-flags.sh create mode 100644 automake-1.15.1/t/objcxx-minidemo.sh create mode 100644 automake-1.15.1/t/objext-pr10128.sh create mode 100644 automake-1.15.1/t/oldvars.sh create mode 100644 automake-1.15.1/t/order.sh create mode 100644 automake-1.15.1/t/output-order.sh create mode 100644 automake-1.15.1/t/output.sh create mode 100644 automake-1.15.1/t/output10.sh create mode 100644 automake-1.15.1/t/output11.sh create mode 100644 automake-1.15.1/t/output12.sh create mode 100644 automake-1.15.1/t/output13.sh create mode 100644 automake-1.15.1/t/output2.sh create mode 100644 automake-1.15.1/t/output3.sh create mode 100644 automake-1.15.1/t/output4.sh create mode 100644 automake-1.15.1/t/output5.sh create mode 100644 automake-1.15.1/t/output6.sh create mode 100644 automake-1.15.1/t/output7.sh create mode 100644 automake-1.15.1/t/output8.sh create mode 100644 automake-1.15.1/t/output9.sh create mode 100644 automake-1.15.1/t/override-conditional-1.sh create mode 100644 automake-1.15.1/t/override-conditional-2.sh create mode 100644 automake-1.15.1/t/override-conditional-pr13940.sh create mode 100644 automake-1.15.1/t/override-html.sh create mode 100644 automake-1.15.1/t/override-suggest-local.sh create mode 100644 automake-1.15.1/t/parallel-am.sh create mode 100644 automake-1.15.1/t/parallel-am2.sh create mode 100644 automake-1.15.1/t/parallel-am3.sh create mode 100644 automake-1.15.1/t/parallel-tests-basics.sh create mode 100644 automake-1.15.1/t/parallel-tests-cmdline-override.sh create mode 100644 automake-1.15.1/t/parallel-tests-concurrency-2.sh create mode 100644 automake-1.15.1/t/parallel-tests-concurrency.sh create mode 100644 automake-1.15.1/t/parallel-tests-console-output.sh create mode 100644 automake-1.15.1/t/parallel-tests-driver-install.sh create mode 100644 automake-1.15.1/t/parallel-tests-dry-run-1.sh create mode 100644 automake-1.15.1/t/parallel-tests-dry-run-2.sh create mode 100644 automake-1.15.1/t/parallel-tests-empty-testlogs.sh create mode 100644 automake-1.15.1/t/parallel-tests-empty.sh create mode 100644 automake-1.15.1/t/parallel-tests-exeext.sh create mode 100644 automake-1.15.1/t/parallel-tests-exit-status-reported.sh create mode 100644 automake-1.15.1/t/parallel-tests-exit-statuses.sh create mode 100644 automake-1.15.1/t/parallel-tests-extra-programs.sh create mode 100644 automake-1.15.1/t/parallel-tests-fd-redirect-exeext.sh create mode 100644 automake-1.15.1/t/parallel-tests-fd-redirect.sh create mode 100644 automake-1.15.1/t/parallel-tests-fork-bomb.sh create mode 100644 automake-1.15.1/t/parallel-tests-generated-and-distributed.sh create mode 100644 automake-1.15.1/t/parallel-tests-harderror.sh create mode 100644 automake-1.15.1/t/parallel-tests-interrupt.tap create mode 100644 automake-1.15.1/t/parallel-tests-log-compiler-1.sh create mode 100644 automake-1.15.1/t/parallel-tests-log-compiler-2.sh create mode 100644 automake-1.15.1/t/parallel-tests-log-compiler-example.sh create mode 100644 automake-1.15.1/t/parallel-tests-log-override-1.sh create mode 100644 automake-1.15.1/t/parallel-tests-log-override-2.sh create mode 100644 automake-1.15.1/t/parallel-tests-log-override-recheck.sh create mode 100644 automake-1.15.1/t/parallel-tests-no-color-in-log.sh create mode 100644 automake-1.15.1/t/parallel-tests-no-spurious-summary.sh create mode 100644 automake-1.15.1/t/parallel-tests-once.sh create mode 100644 automake-1.15.1/t/parallel-tests-recheck-depends-on-all.sh create mode 100644 automake-1.15.1/t/parallel-tests-recheck-pr11791.sh create mode 100644 automake-1.15.1/t/parallel-tests-recheck.sh create mode 100644 automake-1.15.1/t/parallel-tests-reset-term.sh create mode 100644 automake-1.15.1/t/parallel-tests-subdir.sh create mode 100644 automake-1.15.1/t/parallel-tests-suffix-prog.sh create mode 100644 automake-1.15.1/t/parallel-tests-suffix.sh create mode 100644 automake-1.15.1/t/parallel-tests-trailing-whitespace.sh create mode 100644 automake-1.15.1/t/parallel-tests-unreadable.sh create mode 100644 automake-1.15.1/t/parse.sh create mode 100644 automake-1.15.1/t/per-target-flags.sh create mode 100644 automake-1.15.1/t/percent.sh create mode 100644 automake-1.15.1/t/percent2.sh create mode 100755 automake-1.15.1/t/perf/cond.sh create mode 100755 automake-1.15.1/t/perf/testsuite-recheck.sh create mode 100755 automake-1.15.1/t/perf/testsuite-summary.sh create mode 100644 automake-1.15.1/t/phony.sh create mode 100644 automake-1.15.1/t/pkg-config-macros.sh create mode 100644 automake-1.15.1/t/pluseq.sh create mode 100644 automake-1.15.1/t/pluseq10.sh create mode 100644 automake-1.15.1/t/pluseq11.sh create mode 100644 automake-1.15.1/t/pluseq2.sh create mode 100644 automake-1.15.1/t/pluseq3.sh create mode 100644 automake-1.15.1/t/pluseq4.sh create mode 100644 automake-1.15.1/t/pluseq5.sh create mode 100644 automake-1.15.1/t/pluseq6.sh create mode 100644 automake-1.15.1/t/pluseq7.sh create mode 100644 automake-1.15.1/t/pluseq8.sh create mode 100644 automake-1.15.1/t/pluseq9.sh create mode 100644 automake-1.15.1/t/pm/Cond2.pl create mode 100644 automake-1.15.1/t/pm/Cond3.pl create mode 100644 automake-1.15.1/t/pm/Condition-t.pl create mode 100644 automake-1.15.1/t/pm/Condition.pl create mode 100644 automake-1.15.1/t/pm/DisjCon2.pl create mode 100644 automake-1.15.1/t/pm/DisjCon3.pl create mode 100644 automake-1.15.1/t/pm/DisjConditions-t.pl create mode 100644 automake-1.15.1/t/pm/DisjConditions.pl create mode 100644 automake-1.15.1/t/pm/Version.pl create mode 100644 automake-1.15.1/t/pm/Version2.pl create mode 100644 automake-1.15.1/t/pm/Version3.pl create mode 100644 automake-1.15.1/t/pm/Wrap.pl create mode 100644 automake-1.15.1/t/posixsubst-data.sh create mode 100644 automake-1.15.1/t/posixsubst-extradist.sh create mode 100644 automake-1.15.1/t/posixsubst-ldadd.sh create mode 100644 automake-1.15.1/t/posixsubst-libraries.sh create mode 100644 automake-1.15.1/t/posixsubst-ltlibraries.sh create mode 100644 automake-1.15.1/t/posixsubst-programs.sh create mode 100644 automake-1.15.1/t/posixsubst-scripts.sh create mode 100644 automake-1.15.1/t/posixsubst-sources.sh create mode 100644 automake-1.15.1/t/posixsubst-tests-w.sh create mode 100644 automake-1.15.1/t/posixsubst-tests.sh create mode 100644 automake-1.15.1/t/postproc.sh create mode 100644 automake-1.15.1/t/ppf77.sh create mode 100644 automake-1.15.1/t/pr2.sh create mode 100644 automake-1.15.1/t/pr211.sh create mode 100644 automake-1.15.1/t/pr220.sh create mode 100644 automake-1.15.1/t/pr224.sh create mode 100644 automake-1.15.1/t/pr229.sh create mode 100644 automake-1.15.1/t/pr243.sh create mode 100644 automake-1.15.1/t/pr266.sh create mode 100644 automake-1.15.1/t/pr279-2.sh create mode 100644 automake-1.15.1/t/pr279.sh create mode 100644 automake-1.15.1/t/pr287.sh create mode 100644 automake-1.15.1/t/pr300-lib.sh create mode 100644 automake-1.15.1/t/pr300-ltlib.sh create mode 100644 automake-1.15.1/t/pr300-prog.sh create mode 100644 automake-1.15.1/t/pr307.sh create mode 100644 automake-1.15.1/t/pr401.sh create mode 100644 automake-1.15.1/t/pr401b.sh create mode 100644 automake-1.15.1/t/pr401c.sh create mode 100644 automake-1.15.1/t/pr72.sh create mode 100644 automake-1.15.1/t/pr87.sh create mode 100644 automake-1.15.1/t/pr9.sh create mode 100644 automake-1.15.1/t/precious.sh create mode 100644 automake-1.15.1/t/prefix.sh create mode 100644 automake-1.15.1/t/preproc-basics.sh create mode 100644 automake-1.15.1/t/preproc-c-compile.sh create mode 100644 automake-1.15.1/t/preproc-demo.sh create mode 100644 automake-1.15.1/t/preproc-errmsg.sh create mode 100644 automake-1.15.1/t/primary-prefix-couples-documented-valid.sh create mode 100644 automake-1.15.1/t/primary-prefix-couples-force-valid.sh create mode 100644 automake-1.15.1/t/primary-prefix-invalid-couples.tap create mode 100644 automake-1.15.1/t/primary-prefix-valid-couples.sh create mode 100644 automake-1.15.1/t/primary.sh create mode 100644 automake-1.15.1/t/primary2.sh create mode 100644 automake-1.15.1/t/primary3.sh create mode 100644 automake-1.15.1/t/print-libdir.sh create mode 100644 automake-1.15.1/t/proginst.sh create mode 100644 automake-1.15.1/t/programs-primary-rewritten.sh create mode 100644 automake-1.15.1/t/py-compile-basedir.sh create mode 100644 automake-1.15.1/t/py-compile-basic.sh create mode 100644 automake-1.15.1/t/py-compile-destdir.sh create mode 100644 automake-1.15.1/t/py-compile-env.sh create mode 100644 automake-1.15.1/t/py-compile-option-terminate.sh create mode 100644 automake-1.15.1/t/py-compile-usage.sh create mode 100644 automake-1.15.1/t/python-am-path-iftrue.sh create mode 100644 automake-1.15.1/t/python-dist.sh create mode 100644 automake-1.15.1/t/python-missing.sh create mode 100644 automake-1.15.1/t/python-pr10995.sh create mode 100644 automake-1.15.1/t/python-too-old.sh create mode 100644 automake-1.15.1/t/python-vars.sh create mode 100644 automake-1.15.1/t/python-virtualenv.sh create mode 100644 automake-1.15.1/t/python.sh create mode 100644 automake-1.15.1/t/python10.sh create mode 100644 automake-1.15.1/t/python11.sh create mode 100644 automake-1.15.1/t/python12.sh create mode 100644 automake-1.15.1/t/python2.sh create mode 100644 automake-1.15.1/t/python3.sh create mode 100644 automake-1.15.1/t/recurs-user-deeply-nested.sh create mode 100644 automake-1.15.1/t/recurs-user-indir.sh create mode 100644 automake-1.15.1/t/recurs-user-keep-going.sh create mode 100644 automake-1.15.1/t/recurs-user-many.sh create mode 100644 automake-1.15.1/t/recurs-user-no-subdirs.sh create mode 100644 automake-1.15.1/t/recurs-user-no-top-level.sh create mode 100644 automake-1.15.1/t/recurs-user-override.sh create mode 100644 automake-1.15.1/t/recurs-user-phony.sh create mode 100644 automake-1.15.1/t/recurs-user-wrap.sh create mode 100644 automake-1.15.1/t/recurs-user.sh create mode 100644 automake-1.15.1/t/recurs-user2.sh create mode 100644 automake-1.15.1/t/relativize.tap create mode 100644 automake-1.15.1/t/remake-aclocal-version-mismatch.sh create mode 100644 automake-1.15.1/t/remake-after-acinclude-m4.sh create mode 100644 automake-1.15.1/t/remake-after-aclocal-m4.sh create mode 100644 automake-1.15.1/t/remake-after-configure-ac.sh create mode 100644 automake-1.15.1/t/remake-after-makefile-am.sh create mode 100644 automake-1.15.1/t/remake-all-1.sh create mode 100644 automake-1.15.1/t/remake-all-2.sh create mode 100644 automake-1.15.1/t/remake-am-pr10111.sh create mode 100644 automake-1.15.1/t/remake-config-status-dependencies.sh create mode 100644 automake-1.15.1/t/remake-configure-dependencies.sh create mode 100644 automake-1.15.1/t/remake-deeply-nested.sh create mode 100644 automake-1.15.1/t/remake-deleted-am-2.sh create mode 100644 automake-1.15.1/t/remake-deleted-am-subdir.sh create mode 100644 automake-1.15.1/t/remake-deleted-am.sh create mode 100644 automake-1.15.1/t/remake-deleted-m4-file.sh create mode 100644 automake-1.15.1/t/remake-fail.sh create mode 100644 automake-1.15.1/t/remake-gnulib-add-acsubst.sh create mode 100644 automake-1.15.1/t/remake-gnulib-add-header.sh create mode 100644 automake-1.15.1/t/remake-gnulib-remove-header.sh create mode 100644 automake-1.15.1/t/remake-include-aclocal.sh create mode 100644 automake-1.15.1/t/remake-include-configure.sh create mode 100644 automake-1.15.1/t/remake-include-makefile.sh create mode 100644 automake-1.15.1/t/remake-m4-pr10111.sh create mode 100644 automake-1.15.1/t/remake-macrodir.sh create mode 100644 automake-1.15.1/t/remake-maintainer-mode.sh create mode 100644 automake-1.15.1/t/remake-makefile-intree.sh create mode 100644 automake-1.15.1/t/remake-makefile-vpath.sh create mode 100644 automake-1.15.1/t/remake-mild-stress.sh create mode 100644 automake-1.15.1/t/remake-moved-m4-file.sh create mode 100644 automake-1.15.1/t/remake-not-after-make-dist.sh create mode 100644 automake-1.15.1/t/remake-recurs-user.sh create mode 100644 automake-1.15.1/t/remake-renamed-am.sh create mode 100644 automake-1.15.1/t/remake-renamed-m4-file.sh create mode 100644 automake-1.15.1/t/remake-renamed-m4-macro-and-file.sh create mode 100644 automake-1.15.1/t/remake-renamed-m4-macro.sh create mode 100644 automake-1.15.1/t/remake-subdir-from-subdir.sh create mode 100644 automake-1.15.1/t/remake-subdir-gnu.sh create mode 100644 automake-1.15.1/t/remake-subdir-grepping.sh create mode 100644 automake-1.15.1/t/remake-subdir-long-time.sh create mode 100644 automake-1.15.1/t/remake-subdir-no-makefile.sh create mode 100644 automake-1.15.1/t/remake-subdir-only.sh create mode 100644 automake-1.15.1/t/remake-subdir.sh create mode 100644 automake-1.15.1/t/remake-subdir2.sh create mode 100644 automake-1.15.1/t/remake-subdir3.sh create mode 100644 automake-1.15.1/t/remake-timing-bug-pr8365.sh create mode 100644 automake-1.15.1/t/repeated-options.sh create mode 100644 automake-1.15.1/t/reqd2.sh create mode 100644 automake-1.15.1/t/rm-f-probe.sh create mode 100644 automake-1.15.1/t/rulepat.sh create mode 100644 automake-1.15.1/t/sanity.sh create mode 100644 automake-1.15.1/t/seenc.sh create mode 100644 automake-1.15.1/t/self-check-cc-no-c-o.sh create mode 100644 automake-1.15.1/t/self-check-configure-help.sh create mode 100644 automake-1.15.1/t/self-check-dir.tap create mode 100644 automake-1.15.1/t/self-check-exit.tap create mode 100644 automake-1.15.1/t/self-check-explicit-skips.sh create mode 100644 automake-1.15.1/t/self-check-is-blocked-signal.tap create mode 100644 automake-1.15.1/t/self-check-is_newest.tap create mode 100644 automake-1.15.1/t/self-check-me.tap create mode 100644 automake-1.15.1/t/self-check-report.sh create mode 100644 automake-1.15.1/t/self-check-seq.tap create mode 100644 automake-1.15.1/t/self-check-shell-no-trail-bslash.sh create mode 100644 automake-1.15.1/t/self-check-unindent.tap create mode 100644 automake-1.15.1/t/serial-tests.sh create mode 100644 automake-1.15.1/t/silent-c.sh create mode 100644 automake-1.15.1/t/silent-configsite.sh create mode 100644 automake-1.15.1/t/silent-custom.sh create mode 100644 automake-1.15.1/t/silent-cxx.sh create mode 100644 automake-1.15.1/t/silent-f77.sh create mode 100644 automake-1.15.1/t/silent-f90.sh create mode 100644 automake-1.15.1/t/silent-gen.sh create mode 100644 automake-1.15.1/t/silent-lex.sh create mode 100644 automake-1.15.1/t/silent-lt.sh create mode 100644 automake-1.15.1/t/silent-many-languages.sh create mode 100644 automake-1.15.1/t/silent-nested-vars.sh create mode 100644 automake-1.15.1/t/silent-texi.sh create mode 100644 automake-1.15.1/t/silent-yacc-headers.sh create mode 100644 automake-1.15.1/t/silent-yacc.sh create mode 100644 automake-1.15.1/t/sourcefile-in-subdir.sh create mode 100644 automake-1.15.1/t/space.sh create mode 100644 automake-1.15.1/t/specflg-dummy.sh create mode 100644 automake-1.15.1/t/specflg6.sh create mode 100644 automake-1.15.1/t/specflg7.sh create mode 100644 automake-1.15.1/t/specflg8.sh create mode 100644 automake-1.15.1/t/specflg9.sh create mode 100644 automake-1.15.1/t/spell.sh create mode 100644 automake-1.15.1/t/spell2.sh create mode 100644 automake-1.15.1/t/spell3.sh create mode 100644 automake-1.15.1/t/spelling.sh create mode 100644 automake-1.15.1/t/spy-double-colon.sh create mode 100644 automake-1.15.1/t/spy-rm.tap create mode 100644 automake-1.15.1/t/src-acsubst.sh create mode 100644 automake-1.15.1/t/stamph2.sh create mode 100644 automake-1.15.1/t/stdinc.sh create mode 100644 automake-1.15.1/t/stdlib.sh create mode 100644 automake-1.15.1/t/stdlib2.sh create mode 100644 automake-1.15.1/t/strictness-override.sh create mode 100644 automake-1.15.1/t/strictness-precedence.sh create mode 100644 automake-1.15.1/t/strip.sh create mode 100644 automake-1.15.1/t/strip2.sh create mode 100644 automake-1.15.1/t/strip3.sh create mode 100644 automake-1.15.1/t/subdir-ac-subst.sh create mode 100644 automake-1.15.1/t/subdir-add-pr46.sh create mode 100644 automake-1.15.1/t/subdir-add2-pr46.sh create mode 100644 automake-1.15.1/t/subdir-am-cond.sh create mode 100644 automake-1.15.1/t/subdir-cond-err.sh create mode 100644 automake-1.15.1/t/subdir-cond-gettext.sh create mode 100644 automake-1.15.1/t/subdir-distclean.sh create mode 100644 automake-1.15.1/t/subdir-env-interference.sh create mode 100644 automake-1.15.1/t/subdir-keep-going-pr12554.sh create mode 100644 automake-1.15.1/t/subdir-order.sh create mode 100644 automake-1.15.1/t/subdir-subsub.sh create mode 100644 automake-1.15.1/t/subdir-with-slash.sh create mode 100644 automake-1.15.1/t/subdir.sh create mode 100644 automake-1.15.1/t/subobj-clean-lt-pr10697.sh create mode 100644 automake-1.15.1/t/subobj-clean-pr10697.sh create mode 100644 automake-1.15.1/t/subobj-indir-pr13928.sh create mode 100644 automake-1.15.1/t/subobj-vpath-pr13928.sh create mode 100644 automake-1.15.1/t/subobj.sh create mode 100644 automake-1.15.1/t/subobj10.sh create mode 100644 automake-1.15.1/t/subobj11a.sh create mode 100644 automake-1.15.1/t/subobj11b.sh create mode 100644 automake-1.15.1/t/subobj11c.sh create mode 100644 automake-1.15.1/t/subobj2.sh create mode 100644 automake-1.15.1/t/subobj4.sh create mode 100644 automake-1.15.1/t/subobj5.sh create mode 100644 automake-1.15.1/t/subobj6.sh create mode 100644 automake-1.15.1/t/subobj7.sh create mode 100644 automake-1.15.1/t/subobj8.sh create mode 100644 automake-1.15.1/t/subobj9.sh create mode 100644 automake-1.15.1/t/subobjname.sh create mode 100644 automake-1.15.1/t/subpkg-macrodir.sh create mode 100644 automake-1.15.1/t/subpkg-yacc.sh create mode 100644 automake-1.15.1/t/subpkg.sh create mode 100644 automake-1.15.1/t/subpkg2.sh create mode 100644 automake-1.15.1/t/subpkg3.sh create mode 100644 automake-1.15.1/t/subpkg4.sh create mode 100644 automake-1.15.1/t/subst-no-trailing-empty-line.sh create mode 100644 automake-1.15.1/t/subst.sh create mode 100644 automake-1.15.1/t/subst3.sh create mode 100644 automake-1.15.1/t/subst4.sh create mode 100644 automake-1.15.1/t/subst5.sh create mode 100644 automake-1.15.1/t/substre2.sh create mode 100644 automake-1.15.1/t/substref.sh create mode 100644 automake-1.15.1/t/substtarg.sh create mode 100644 automake-1.15.1/t/suffix-chain.tap create mode 100644 automake-1.15.1/t/suffix-custom-pr14441.sh create mode 100644 automake-1.15.1/t/suffix-custom-subobj-and-specflg.sh create mode 100644 automake-1.15.1/t/suffix-custom-subobj.sh create mode 100644 automake-1.15.1/t/suffix-extra-c-stuff-pr14560.sh create mode 100644 automake-1.15.1/t/suffix.sh create mode 100644 automake-1.15.1/t/suffix10.tap create mode 100644 automake-1.15.1/t/suffix11.tap create mode 100644 automake-1.15.1/t/suffix2.sh create mode 100644 automake-1.15.1/t/suffix3.tap create mode 100644 automake-1.15.1/t/suffix4.sh create mode 100644 automake-1.15.1/t/suffix5.sh create mode 100644 automake-1.15.1/t/suffix6.sh create mode 100644 automake-1.15.1/t/suffix6b.sh create mode 100644 automake-1.15.1/t/suffix6c.sh create mode 100644 automake-1.15.1/t/suffix7.sh create mode 100644 automake-1.15.1/t/suffix8.tap create mode 100644 automake-1.15.1/t/suffix9.sh create mode 100644 automake-1.15.1/t/symlink.sh create mode 100644 automake-1.15.1/t/symlink2.sh create mode 100644 automake-1.15.1/t/syntax.sh create mode 100644 automake-1.15.1/t/tags-pr12372.sh create mode 100644 automake-1.15.1/t/tags.sh create mode 100644 automake-1.15.1/t/tags2.sh create mode 100644 automake-1.15.1/t/tagsub.sh create mode 100644 automake-1.15.1/t/tap-ambiguous-directive.sh create mode 100644 automake-1.15.1/t/tap-autonumber.sh create mode 100644 automake-1.15.1/t/tap-bad-prog.tap create mode 100644 automake-1.15.1/t/tap-bailout-and-logging.sh create mode 100644 automake-1.15.1/t/tap-bailout-leading-space.sh create mode 100644 automake-1.15.1/t/tap-bailout-suppress-badexit.sh create mode 100644 automake-1.15.1/t/tap-bailout-suppress-later-diagnostic.sh create mode 100644 automake-1.15.1/t/tap-bailout-suppress-later-errors.sh create mode 100644 automake-1.15.1/t/tap-bailout.sh create mode 100644 automake-1.15.1/t/tap-basic.sh create mode 100644 automake-1.15.1/t/tap-color.sh create mode 100644 automake-1.15.1/t/tap-common-setup.sh create mode 100644 automake-1.15.1/t/tap-deps.sh create mode 100644 automake-1.15.1/t/tap-diagnostic-custom.sh create mode 100644 automake-1.15.1/t/tap-diagnostic.sh create mode 100644 automake-1.15.1/t/tap-doc.sh create mode 100644 automake-1.15.1/t/tap-doc2.sh create mode 100644 automake-1.15.1/t/tap-driver-stderr.sh create mode 100644 automake-1.15.1/t/tap-empty-diagnostic.sh create mode 100644 automake-1.15.1/t/tap-empty.sh create mode 100644 automake-1.15.1/t/tap-escape-directive-2.sh create mode 100644 automake-1.15.1/t/tap-escape-directive.sh create mode 100644 automake-1.15.1/t/tap-exit.sh create mode 100644 automake-1.15.1/t/tap-fancy.sh create mode 100644 automake-1.15.1/t/tap-fancy2.sh create mode 100644 automake-1.15.1/t/tap-global-log.sh create mode 100644 automake-1.15.1/t/tap-global-result.sh create mode 100644 automake-1.15.1/t/tap-log.sh create mode 100644 automake-1.15.1/t/tap-merge-stdout-stderr.sh create mode 100644 automake-1.15.1/t/tap-missing-plan-and-bad-exit.sh create mode 100644 automake-1.15.1/t/tap-more.sh create mode 100644 automake-1.15.1/t/tap-more2.sh create mode 100644 automake-1.15.1/t/tap-msg0-bailout.sh create mode 100644 automake-1.15.1/t/tap-msg0-directive.sh create mode 100644 automake-1.15.1/t/tap-msg0-misc.sh create mode 100644 automake-1.15.1/t/tap-msg0-planskip.sh create mode 100644 automake-1.15.1/t/tap-msg0-result.sh create mode 100644 automake-1.15.1/t/tap-negative-numbers.sh create mode 100644 automake-1.15.1/t/tap-no-disable-hard-error.sh create mode 100644 automake-1.15.1/t/tap-no-merge-stdout-stderr.sh create mode 100644 automake-1.15.1/t/tap-no-spurious-numbers.sh create mode 100644 automake-1.15.1/t/tap-no-spurious-summary.sh create mode 100644 automake-1.15.1/t/tap-no-spurious.sh create mode 100644 automake-1.15.1/t/tap-not-ok-skip.sh create mode 100644 automake-1.15.1/t/tap-number-wordboundary.sh create mode 100644 automake-1.15.1/t/tap-numbers-leading-zero.sh create mode 100644 automake-1.15.1/t/tap-numeric-description.sh create mode 100644 automake-1.15.1/t/tap-out-of-order.sh create mode 100644 automake-1.15.1/t/tap-passthrough-exit.sh create mode 100644 automake-1.15.1/t/tap-passthrough.sh create mode 100644 automake-1.15.1/t/tap-plan-corner.sh create mode 100644 automake-1.15.1/t/tap-plan-errors.sh create mode 100644 automake-1.15.1/t/tap-plan-leading-zero.sh create mode 100644 automake-1.15.1/t/tap-plan-malformed.sh create mode 100644 automake-1.15.1/t/tap-plan-middle.sh create mode 100644 automake-1.15.1/t/tap-plan-whitespace.sh create mode 100644 automake-1.15.1/t/tap-plan.sh create mode 100644 automake-1.15.1/t/tap-planskip-and-logging.sh create mode 100644 automake-1.15.1/t/tap-planskip-badexit.sh create mode 100644 automake-1.15.1/t/tap-planskip-bailout.sh create mode 100644 automake-1.15.1/t/tap-planskip-case-insensitive.sh create mode 100644 automake-1.15.1/t/tap-planskip-late.sh create mode 100644 automake-1.15.1/t/tap-planskip-later-errors.sh create mode 100644 automake-1.15.1/t/tap-planskip-unplanned-corner.sh create mode 100644 automake-1.15.1/t/tap-planskip-unplanned.sh create mode 100644 automake-1.15.1/t/tap-planskip-whitespace.sh create mode 100644 automake-1.15.1/t/tap-planskip.sh create mode 100644 automake-1.15.1/t/tap-recheck-logs.sh create mode 100644 automake-1.15.1/t/tap-recheck.sh create mode 100644 automake-1.15.1/t/tap-result-comment.sh create mode 100644 automake-1.15.1/t/tap-signal.tap create mode 100644 automake-1.15.1/t/tap-summary-color.sh create mode 100644 automake-1.15.1/t/tap-summary.sh create mode 100644 automake-1.15.1/t/tap-test-number-0.sh create mode 100644 automake-1.15.1/t/tap-todo-skip-together.sh create mode 100644 automake-1.15.1/t/tap-todo-skip-whitespace.sh create mode 100644 automake-1.15.1/t/tap-todo-skip.sh create mode 100644 automake-1.15.1/t/tap-unplanned.sh create mode 100644 automake-1.15.1/t/tap-whitespace-normalization.sh create mode 100644 automake-1.15.1/t/tap-with-and-without-number.sh create mode 100644 automake-1.15.1/t/tap-xfail-tests.sh create mode 100644 automake-1.15.1/t/tar-opts-errors.sh create mode 100644 automake-1.15.1/t/tar-override.sh create mode 100644 automake-1.15.1/t/tar-pax.sh create mode 100644 automake-1.15.1/t/tar-ustar-id-too-high.sh create mode 100644 automake-1.15.1/t/tar-ustar.sh create mode 100644 automake-1.15.1/t/target-cflags.sh create mode 100644 automake-1.15.1/t/targetclash.sh create mode 100644 automake-1.15.1/t/test-driver-acsubst.sh create mode 100644 automake-1.15.1/t/test-driver-cond.sh create mode 100644 automake-1.15.1/t/test-driver-create-log-dir.sh create mode 100644 automake-1.15.1/t/test-driver-custom-multitest-recheck.sh create mode 100644 automake-1.15.1/t/test-driver-custom-multitest-recheck2.sh create mode 100644 automake-1.15.1/t/test-driver-custom-multitest.sh create mode 100644 automake-1.15.1/t/test-driver-custom-no-extra-driver.sh create mode 100644 automake-1.15.1/t/test-driver-custom-xfail-tests.sh create mode 100644 automake-1.15.1/t/test-driver-custom.sh create mode 100644 automake-1.15.1/t/test-driver-fail.sh create mode 100644 automake-1.15.1/t/test-driver-is-distributed.sh create mode 100644 automake-1.15.1/t/test-driver-strip-vpath.sh create mode 100644 automake-1.15.1/t/test-driver-trs-suffix-registered.sh create mode 100644 automake-1.15.1/t/test-extensions-cond.sh create mode 100644 automake-1.15.1/t/test-extensions.sh create mode 100644 automake-1.15.1/t/test-harness-vpath-rewrite.sh create mode 100644 automake-1.15.1/t/test-log.sh create mode 100644 automake-1.15.1/t/test-logs-repeated.sh create mode 100644 automake-1.15.1/t/test-metadata-global-log.sh create mode 100644 automake-1.15.1/t/test-metadata-global-result.sh create mode 100644 automake-1.15.1/t/test-metadata-recheck.sh create mode 100644 automake-1.15.1/t/test-metadata-results.sh create mode 100644 automake-1.15.1/t/test-missing.sh create mode 100644 automake-1.15.1/t/test-missing2.sh create mode 100644 automake-1.15.1/t/test-trs-basic.sh create mode 100644 automake-1.15.1/t/test-trs-recover.sh create mode 100644 automake-1.15.1/t/test-trs-recover2.sh create mode 100644 automake-1.15.1/t/tests-environment-and-log-compiler.sh create mode 100644 automake-1.15.1/t/tests-environment-backcompat.sh create mode 100644 automake-1.15.1/t/tests-environment-fd-redirect.sh create mode 100644 automake-1.15.1/t/tests-environment.sh create mode 100644 automake-1.15.1/t/testsuite-part.am create mode 100644 automake-1.15.1/t/testsuite-summary-color.sh create mode 100644 automake-1.15.1/t/testsuite-summary-count-many.sh create mode 100644 automake-1.15.1/t/testsuite-summary-count.sh create mode 100644 automake-1.15.1/t/testsuite-summary-reference-log.sh create mode 100644 automake-1.15.1/t/transform.sh create mode 100644 automake-1.15.1/t/transform2.sh create mode 100644 automake-1.15.1/t/transform3.sh create mode 100644 automake-1.15.1/t/txinfo-absolute-srcdir-pr408.sh create mode 100644 automake-1.15.1/t/txinfo-add-missing-and-dist.sh create mode 100644 automake-1.15.1/t/txinfo-bsd-make-recurs.sh create mode 100644 automake-1.15.1/t/txinfo-builddir.sh create mode 100644 automake-1.15.1/t/txinfo-clean.sh create mode 100644 automake-1.15.1/t/txinfo-dvi-recurs.sh create mode 100644 automake-1.15.1/t/txinfo-include.sh create mode 100644 automake-1.15.1/t/txinfo-info-in-srcdir.sh create mode 100644 automake-1.15.1/t/txinfo-makeinfo-error-no-clobber.sh create mode 100644 automake-1.15.1/t/txinfo-many-output-formats-vpath.sh create mode 100644 automake-1.15.1/t/txinfo-many-output-formats.sh create mode 100644 automake-1.15.1/t/txinfo-no-clutter.sh create mode 100644 automake-1.15.1/t/txinfo-no-extra-dist.sh create mode 100644 automake-1.15.1/t/txinfo-no-installinfo.sh create mode 100644 automake-1.15.1/t/txinfo-no-repeated-targets.sh create mode 100644 automake-1.15.1/t/txinfo-nodist-info.sh create mode 100644 automake-1.15.1/t/txinfo-other-suffixes.sh create mode 100644 automake-1.15.1/t/txinfo-override-infodeps.sh create mode 100644 automake-1.15.1/t/txinfo-override-texinfo-tex.sh create mode 100644 automake-1.15.1/t/txinfo-setfilename-repeated.sh create mode 100644 automake-1.15.1/t/txinfo-setfilename-suffix-strip.sh create mode 100644 automake-1.15.1/t/txinfo-subdir-pr343.sh create mode 100644 automake-1.15.1/t/txinfo-tex-dist.sh create mode 100644 automake-1.15.1/t/txinfo-unrecognized-extension.sh create mode 100644 automake-1.15.1/t/txinfo-unrecognized-info-suffix.sh create mode 100644 automake-1.15.1/t/txinfo-vtexi.sh create mode 100644 automake-1.15.1/t/txinfo-vtexi2.sh create mode 100644 automake-1.15.1/t/txinfo-vtexi3.sh create mode 100644 automake-1.15.1/t/txinfo-vtexi4.sh create mode 100644 automake-1.15.1/t/txinfo-without-info-suffix.sh create mode 100644 automake-1.15.1/t/txinfo19.sh create mode 100644 automake-1.15.1/t/txinfo23.sh create mode 100644 automake-1.15.1/t/txinfo24.sh create mode 100644 automake-1.15.1/t/txinfo25.sh create mode 100644 automake-1.15.1/t/txinfo28.sh create mode 100644 automake-1.15.1/t/uninstall-fail.sh create mode 100644 automake-1.15.1/t/uninstall-pr9578.sh create mode 100644 automake-1.15.1/t/unused.sh create mode 100644 automake-1.15.1/t/upc.sh create mode 100644 automake-1.15.1/t/upc2.sh create mode 100644 automake-1.15.1/t/upc3.sh create mode 100644 automake-1.15.1/t/vala-configure.sh create mode 100644 automake-1.15.1/t/vala-grepping.sh create mode 100644 automake-1.15.1/t/vala-headers.sh create mode 100644 automake-1.15.1/t/vala-libs.sh create mode 100644 automake-1.15.1/t/vala-mix.sh create mode 100644 automake-1.15.1/t/vala-mix2.sh create mode 100644 automake-1.15.1/t/vala-non-recursive-setup.sh create mode 100644 automake-1.15.1/t/vala-parallel.sh create mode 100644 automake-1.15.1/t/vala-per-target-flags.sh create mode 100644 automake-1.15.1/t/vala-recursive-setup.sh create mode 100644 automake-1.15.1/t/vala-vapi.sh create mode 100644 automake-1.15.1/t/vala-vpath.sh create mode 100644 automake-1.15.1/t/var-recurs.sh create mode 100644 automake-1.15.1/t/var-recurs2.sh create mode 100644 automake-1.15.1/t/vars.sh create mode 100644 automake-1.15.1/t/vars3.sh create mode 100644 automake-1.15.1/t/vartar.sh create mode 100644 automake-1.15.1/t/vartypo2.sh create mode 100644 automake-1.15.1/t/vartypos.sh create mode 100644 automake-1.15.1/t/version3.sh create mode 100644 automake-1.15.1/t/version4.sh create mode 100644 automake-1.15.1/t/version6.sh create mode 100644 automake-1.15.1/t/version7.sh create mode 100644 automake-1.15.1/t/version8.sh create mode 100644 automake-1.15.1/t/vpath.sh create mode 100644 automake-1.15.1/t/warning-groups-win-over-strictness.sh create mode 100644 automake-1.15.1/t/warnings-obsolete-default.sh create mode 100644 automake-1.15.1/t/warnings-override.sh create mode 100644 automake-1.15.1/t/warnings-precedence.sh create mode 100644 automake-1.15.1/t/warnings-strictness-interactions.sh create mode 100644 automake-1.15.1/t/warnings-unknown.sh create mode 100644 automake-1.15.1/t/warnings-win-over-strictness.sh create mode 100644 automake-1.15.1/t/warnopts.sh create mode 100644 automake-1.15.1/t/werror.sh create mode 100644 automake-1.15.1/t/werror2.sh create mode 100644 automake-1.15.1/t/werror3.sh create mode 100644 automake-1.15.1/t/werror4.sh create mode 100644 automake-1.15.1/t/whoami.sh create mode 100644 automake-1.15.1/t/wrap/aclocal.in create mode 100644 automake-1.15.1/t/wrap/automake.in create mode 100644 automake-1.15.1/t/xsource.sh create mode 100644 automake-1.15.1/t/yacc-auxdir.sh create mode 100644 automake-1.15.1/t/yacc-basic.sh create mode 100644 automake-1.15.1/t/yacc-bison-skeleton-cxx.sh create mode 100644 automake-1.15.1/t/yacc-bison-skeleton.sh create mode 100644 automake-1.15.1/t/yacc-clean-cxx.sh create mode 100644 automake-1.15.1/t/yacc-clean.sh create mode 100644 automake-1.15.1/t/yacc-cxx-grepping.sh create mode 100644 automake-1.15.1/t/yacc-cxx.sh create mode 100644 automake-1.15.1/t/yacc-d-basic.sh create mode 100644 automake-1.15.1/t/yacc-d-cxx.sh create mode 100644 automake-1.15.1/t/yacc-d-vpath.sh create mode 100644 automake-1.15.1/t/yacc-deleted-headers.sh create mode 100644 automake-1.15.1/t/yacc-depend.sh create mode 100644 automake-1.15.1/t/yacc-depend2.sh create mode 100644 automake-1.15.1/t/yacc-dist-nobuild-subdir.sh create mode 100644 automake-1.15.1/t/yacc-dist-nobuild.sh create mode 100644 automake-1.15.1/t/yacc-dry.sh create mode 100644 automake-1.15.1/t/yacc-grepping.sh create mode 100644 automake-1.15.1/t/yacc-grepping2.sh create mode 100644 automake-1.15.1/t/yacc-headers-and-dist-pr47.sh create mode 100644 automake-1.15.1/t/yacc-line.sh create mode 100644 automake-1.15.1/t/yacc-misc.sh create mode 100644 automake-1.15.1/t/yacc-mix-c-cxx.sh create mode 100644 automake-1.15.1/t/yacc-nodist.sh create mode 100644 automake-1.15.1/t/yacc-pr204.sh create mode 100644 automake-1.15.1/t/yacc-subdir.sh create mode 100644 automake-1.15.1/t/yacc-vpath.sh create mode 100644 automake-1.15.1/t/yacc-weirdnames.sh create mode 100644 automake-1.15.1/t/yflags-cmdline-override.sh create mode 100644 automake-1.15.1/t/yflags-conditional.sh create mode 100644 automake-1.15.1/t/yflags-cxx.sh create mode 100644 automake-1.15.1/t/yflags-d-false-positives.sh create mode 100644 automake-1.15.1/t/yflags-force-conditional.sh create mode 100644 automake-1.15.1/t/yflags-force-override.sh create mode 100644 automake-1.15.1/t/yflags-var-expand.sh create mode 100644 automake-1.15.1/t/yflags.sh create mode 100644 packages/All/All/Hashed/autoconf-2.72_1~1dee3a0d04.pkg create mode 100644 packages/All/All/Hashed/autoconf-switch-20220527~715e31738d.pkg create mode 100644 packages/All/All/Hashed/m4-1.4.20,1~954438dd5f.pkg delete mode 100644 xorg-server-1.18.4.tar.gz diff --git a/automake-1.15.1/.git-log-fix b/automake-1.15.1/.git-log-fix new file mode 100644 index 0000000..d87a0ec --- /dev/null +++ b/automake-1.15.1/.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/automake-1.15.1/AUTHORS b/automake-1.15.1/AUTHORS new file mode 100644 index 0000000..a3c5c01 --- /dev/null +++ b/automake-1.15.1/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/automake-1.15.1/COPYING b/automake-1.15.1/COPYING new file mode 100644 index 0000000..d511905 --- /dev/null +++ b/automake-1.15.1/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. + + + Copyright (C) + + This program is free software; you can redistribute 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. + + , 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/automake-1.15.1/ChangeLog b/automake-1.15.1/ChangeLog new file mode 100644 index 0000000..82a11a9 --- /dev/null +++ b/automake-1.15.1/ChangeLog @@ -0,0 +1,21997 @@ +2017-06-18 Mathieu Lirzin + + version 1.15.1 + + * configure.ac (AC_INIT): Bump version number to 1.15.1. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2017-06-18 Mathieu Lirzin + + maint: Update 'git-tag-release' rule + + * maintainer/maint.mk (git-tag-release): Use a Git tag message similar + to what the 'do-release-commit-and-tag' script from Gnulib do. + +2017-06-18 Mathieu Lirzin + + maint: Update files from upstream with 'make fetch' + + * lib/config.guess: Update. + * lib/config.sub: Likewise. + * lib/texinfo.tex: Likewise. + +2017-06-18 Mathieu Lirzin + + maint: Update NEWS + + * NEWS: Announce important bug fixes. + +2017-05-20 Mathieu Lirzin + + bootstrap: Add a rationale for the bootstrap process. + + * bootstrap: Explain why we can't simply run 'autoreconf -i'. + +2017-05-20 Mathieu Lirzin + + bootstrap: Rename 'bootstrap.sh' to 'bootstrap'. + + Follow Gnulib's convention of using either "bootstrap" or "autogen.sh" + file names for development bootstrap scripts. + + * bootstrap.sh: Rename to ... + * bootstrap: ... this. + * GNUmakefile (bootstrap): Adapt. + * HACKING: Likewise. + * Makefile.am (EXTRA_DIST): Likewise. + * doc/automake.texi (Future of aclocal) + (Error required file ltmain.sh not found): Likewise. + * maintainer/maint.mk (autodiffs, update-copyright): Likewise. + +2017-05-20 Mathieu Lirzin + + automake: Update 'read_am_file' docstring. + + * bin/automake.in (read_am_file): Update docstring which was referring + to a non existent '%contents' variable. + +2017-04-16 Bruno Haible + + tests: Never invoke gettextize. + + This change fixes automake bug#26514. + + * t/gettext-macros.sh: Never invoke gettextize. + +2017-04-13 Mathieu Lirzin + + tests: Update "t/txinfo-no-clutter.sh". + + This is workaround to a regression introduced by + 48107579abadbe857c8299c38d2ca0a3f8f354c8. With current + "lib/texinfo.tex", 'texi2dvi' is not able to produce a valid output + for a Texinfo document containing a @synindex command. As a + consequence the test "t/txinfo-no-clutter.sh" was failing. + + * t/txinfo-no-clutter.sh: Remove use of @synindex command. + +2017-03-05 Mathieu Lirzin + + maint: Update "lib/texinfo.tex". + + This fixes a regression in 48107579abadbe857c8299c38d2ca0a3f8f354c8 + where 'texi2dvi' was not able to produce a valid output for a Texinfo + document without text. As a consequence the test "t/silent-texi.sh" + was failing. + + * lib/texinfo.tex: Update to 2017-03-05.09. + +2017-03-02 Mathieu Lirzin + + maint: Update copyright years to 2017. + + This update has been made with 'make update-copyright'. + +2017-03-02 Mathieu Lirzin + + maint: Update files from upstream with 'make fetch'. + + * lib/INSTALL: Update. + * lib/config.guess: Likewise. + * lib/config.sub: Likewise. + * lib/gendocs.sh: Likewise. + * lib/gendocs_template: Likewise. + * lib/gitlog-to-changelog: Likewise. + * lib/gnupload: Likewise. + * lib/texinfo.tex: Likewise. + * lib/update-copyright: Likewise. + +2017-03-02 Mathieu Lirzin + + maint: Update fetch URLs. + + * maintainer/maint.mk (SV_CVS, SV_GIT_AC): Remove. + (SV_GIT_CF, SV_GIT_GL): Use https for Savannah Git repositories. + (FETCHFILES): Use Gnulib repository as the source of "texinfo.tex", + "gendocs.sh", and "gendocs_template" files. + +2017-02-23 Mathieu Lirzin + + doc: fix typo "requited" => "required" + + This change fixes automake bug#25413. + + * doc/automake.texi (Serial Test Harness): Fix typo. + +2016-09-09 Jim Meyering + + automake: do not emit rule with two dependents + + On a system using our replacement alloca, make would emit + this warning: + target '.deps/alloca.Po' given more than once in the same rule + That arose because automake would emit a rule depending on both + ./.deps/alloca.Po and .deps/alloca.Po. Normally, duplicate + dependents are avoided by virtue of their names being keys in + the %dep_files hash, but in this case, that particular file + was specified in two different ways. + * bin/automake.in (handle_ALLOCA): When the $dir prefix is empty, + make it './', to ensure that when we add ./.deps/alloca.Po + it is deduped. + See: http://bugs/gnu/org/22702 + +2016-04-21 Paul Eggert + + python: add python3.5, python3.4 + + * m4/python.m4 (AM_PATH_PYTHON): Add python3.5, python3.4. + +2016-04-01 Paul Eggert + + automake: port to Perl 5.22 and later + + Without this change, Perl 5.22 complains "Unescaped left brace in + regex is deprecated" and this is planned to become a hard error in + Perl 5.26. See: + http://search.cpan.org/dist/perl-5.22.0/pod/perldelta.pod#A_literal_%22{%22_should_now_be_escaped_in_a_pattern + * bin/automake.in (substitute_ac_subst_variables): Escape left brace. + +2016-03-29 Paul Eggert + + automake: port better to future gzip + + * lib/am/distdir.am (dist-gzip, dist-shar, distcheck): + Port better to future versions of gzip, which are planned to + deprecate the GZIP environment variable (Bug#20132). + +2016-01-12 Paul Eggert + + maint: port time-stamp-time-zone to strict POSIX + + Set time-stamp-time-zone to "UTC0", not to "UTC", as POSIX defines + TZ="UTC0" not TZ="UTC". + +2015-11-24 Jonathan L Peyton (tiny change) + + compile: add icl to compile wrapper script + + * lib/compile: Have icl be treated similarly to cl + (scriptversion): Update. + * t/ax/am-test-lib.sh (require_tool): Handle icl. + * t/compile7.sh: Add new test file for icl... + * t/list-of-tests.mk (handwritten_TESTS): ...and use it. + * NEWS: Update. + * THANKS: Update. + +2015-01-06 Stefano Lattarini + + tests: fix a typo-induced bug + + * t/subobj-vpath-pr13928.sh: Here; we were using $FGREP instead of + $EGREP, oops. + +2015-01-06 Stefano Lattarini + + NEWS: fix a typo + +2015-01-05 Stefano Lattarini + + maint: update copyright years to 2015 (branch 'micro') + +2015-01-05 Stefano Lattarini + + sync: update third-part files from upstream + + * lib/config.sub: This. + * lib/INSTALL, lib/config.guess, lib/gitlog-to-changelog, lib/gnupload, + lib/update-copyright: And this (but only for copyright year update, no + real semantic change) + +2015-01-05 Stefano Lattarini + + maint: fix typo in error message of a maintainer-only rule + + * maintainer/maint.mk (web-manual-update): Here. + +2015-01-05 Stefano Lattarini + + Merge branch 'minor' into micro after 1.15 release + + And bump version number: 1.15 -> 1.15.0a + + * minor: + release: stable minor release 1.15 + NEWS: minor improvements and fixed some typos and grammaros + docs: "make distcheck" implementation details are not to be abused + NEWS: improve and adjust in light of the oncoming 1.15 release + Fix dumb logic error preventing $install_sh from being be overridden + Expose automake bug#19311 + build: fix race in parallel builds + init: ensure $ac_aux_dir is defined before being used + plans: enabling subdir-object by default is blocked on bug#13928 + maint: update copyright years + maint: sync files from upstream ("make fetch") + Typofixes in warning messages and manual + NEWS: a typofix, and better word wrapping + parallel-tests: avoid possible implicit "make all" in test-suite.log rule + Allow user to extend .PRECIOUS target + cosmetics: remove a couple of extra trailing white spaces + tests: fix a spurious failure on Mac OS X + docs: make clear the JAVA primary is frozen + install-sh: a slightly better diagnostic, and tests enhancements + install-sh: be stricter in catching invalid usages + tests: more significant names for some tests + tests: some cosmetic fixes + tests: more significant names for a test + docs: drop a few obsolescent FIXME/TODO comments, and associated text + testsuite harness: report test exit status in log file + TAP driver: no need to invoke AC_PROG_AWK directly + TAP driver: remove perl implementation (move it into contrib/) + NEWS: stop reporting "new" Automake versioning scheme + cosmetics: untabify the install-sh script + install-sh: assume that "set -f" and "set +f" work... + install-sh: assume ${var:-value} works as expected + install-sh: assume 'dirname' is available and working correctly + post-release: micro version bump (1.14a) + +2014-12-31 Stefano Lattarini + + release: stable minor release 1.15 + + * configure.ac (AC_INIT): Bump version number to 1.15. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2014-12-31 Stefano Lattarini + + NEWS: minor improvements and fixed some typos and grammaros + +2014-12-30 Stefano Lattarini + + docs: "make distcheck" implementation details are not to be abused + + * doc/automake.texi: State explicitly and in detail that the exact location + and the exact structure of the subdirectory used by "make distcheck" is to + be considered an implementation detail, which can change at any time. + +2014-12-30 Stefano Lattarini + + NEWS: improve and adjust in light of the oncoming 1.15 release + +2014-12-30 Stefano Lattarini + + Merge branch 'micro' into minor + + * micro: + shell-no-trail-bslash: improve diagnostic in case of failure + +2014-12-30 Stefano Lattarini + + shell-no-trail-bslash: improve diagnostic in case of failure + + * t/ax/shell-no-trail-bslash.in: Here, by fixing a typo in a + variable name and a logic error. + * t/self-check-shell-no-trail-bslash.sh: Enhance to catch the + issue. + +2014-12-28 Stefano Lattarini + + Merge branch 'micro' into minor + + * micro: + tests: make script 'shell-no-trail-bslash' simpler and more robust + +2014-12-28 Stefano Lattarini + + tests: make script 'shell-no-trail-bslash' simpler and more robust + + This solves spurious failure in the 'check-no-trailing-backslash-in-recipes' + target for Automake-NG. + + This is basically a backport of Automake-NG commit v1.14.1-1010-g85aae58; + the point is to minimize the amount of spurious diffs between the mainline + Automake and the Automake-NG source trees. + + * t/ax/shell-no-trail-bslash.in: Simplify and fortify. + * t/self-check-shell-no-trail-bslash.sh: Enhance. + +2014-12-27 Stefano Lattarini + + Merge branch 'micro' into minor + + * micro: + tests: fix spurious failure in test on TEXINFO_TEX overriding + tests: avoid some spurious failures on AIX 7.1 + +2014-12-27 Stefano Lattarini + + tests: fix spurious failure in test on TEXINFO_TEX overriding + + * t/txinfo-override-texinfo-tex.sh: Here. The issue was pre-existing, but + has been only recently exposed by the fix for automake bug#18286 "distcheck + fails to detect missing files" (see commit v1.14.1-4-g01a7a4a) and by the + BSD make semantics. To convince yourself this change actually makes sense + semantically, see https://sourceware.org/ml/binutils/2012-06/msg00004.html + +2014-12-27 Stefano Lattarini + + Merge branch 'aix-testsuite-failures' into micro + + * aix-testsuite-failures: + tests: avoid some spurious failures on AIX 7.1 + +2014-12-27 Stefano Lattarini + + tests: avoid some spurious failures on AIX 7.1 + + * t/lex-noyywrap.sh: Here. + * t/instmany-mans.sh: And here. + * t/instmany-python.sh: And here. + * t/instmany.sh: And here. + * t/parallel-tests-concurrency.sh: And here. + +2014-12-23 Stefano Lattarini + + Merge branch 'micro' into minor + + * micro: + dist: fix bug#18286 "distcheck fails to detect missing files" + tests: expose automake bug#18286 "distcheck fails to detect missing files" + include: fix bug in handling of user-defined makefile fragments generation + tests: expose bug in handling of user-defined makefile fragments generation + +2014-12-23 Stefano Lattarini + + Merge branch 'distcheck-pr18286' into micro + + * distcheck-pr18286: + dist: fix bug#18286 "distcheck fails to detect missing files" + tests: expose automake bug#18286 "distcheck fails to detect missing files" + +2014-12-23 Stefano Lattarini + + dist: fix bug#18286 "distcheck fails to detect missing files" + + BTW, this issue had been already reported in the past: + http://lists.gnu.org/archive/html/automake/2006-09/msg00008.html + http://lists.gnu.org/archive/html/automake/2013-01/msg00049.html + + "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). An important + example of this are *generated* makefile fragments included at Automake + time in Makefile.am. A basic example: + + # -*- Makefile.am -*- + + $(srcdir)/fragment.am: $(srcdir)/data.txt $(srcdir)/preproc.sh + cd $(srcdir) && $(SHELL) preproc.sh 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! + + The reason is that, while $(srcdir)/data.txt does not exist, make also + looks in $(srcdir)/$(srcdir)/data.txt, and in the distcheck-issued + VPATH build where $(srcdir) is '..', that file exists, as it is + part of the original development directory. + + * t/distdir.am (distcheck): Adjust to have the build directory be + '$(distdir)/_build/sub' rather than just '$(distdir)/_build'. Thanks + Nicola Fontana for the suggestion. + * t/distcheck-pr18286.sh: Enhance and tighten a little. + * t/list-of-tests.mk (XFAIL_TESTS): Remove 't/distcheck-pr18286.sh', + as it's now passing. + * t/subdir-am-cond.sh: Adjust to avoid a fully spurious failure due + to the new distcheck semantics. + * t/subdir-ac-subst.sh: Likewise. + * t/dejagnu-relative-srcdir.sh: Likewise. + * t/txinfo-builddir.sh: Likewise. + * NEWS: Update. + + Helped-by: Nicola Fontana + Helped-by: Peter Johansson + +2014-12-23 Stefano Lattarini + + tests: expose automake bug#18286 "distcheck fails to detect missing files" + + * t/distcheck-pr18286.sh: New test, still XFAILing. + * t/list-of-tests.mk: Add it. + +2014-12-23 Stefano Lattarini + + Merge branch 'am-deps' into micro + + * am-deps: + include: fix bug in handling of user-defined makefile fragments generation + tests: expose bug in handling of user-defined makefile fragments generation + +2014-12-23 Stefano Lattarini + + include: fix bug in handling of user-defined makefile fragments generation + + If a user defined one single Makefile fragment to be included (via Automake + includes) in his main Makefile.am, and gave a rule to generate that file + from other data, Automake used to spuriously complain about with something + like "overrides Automake target '$(srcdir)/foo.am". This change remove that + spurious error (via a simple hack rather than a systematic change, but oh + well). + + * lib/am/configure.am (%MAKEFILE-IN-DEPS%) [?HAVE-MAKEFILE-IN-DEPS?]: Add + a trailing "$(am__empty)" to the list of targets, which is enough to trick + Automake into not 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. + * t/list-of-tests.mk (XFAIL_TESTS): Remove now-passing test + 't/am-include-only-one-generated-fragment.sh'. + * NEWS: Update. + +2014-12-23 Stefano Lattarini + + tests: expose bug in handling of user-defined makefile fragments generation + + If a user defines one single Makefile fragment to be included (via Automake + includes) in his main Makefile.am, and givse a rule to generate that file + from other data, Automake will spuriously complain about with something + like "overrides Automake target '$(srcdir)/foo.am". + + * t/am-include-only-one-generated-fragment.sh: Expose the bug (this test + is still XFAILing). + * t/list-of-tests.mk: Add the new test. + +2014-12-22 Stefano Lattarini + + Merge branch 'micro' into minor + + * micro: + cleanup: refactor code to initialize DIST_COMMON + dist: ordering of files in DIST_COMMON is deterministic now + tests: refactor some tests on DIST_COMMON + maint: make output of 'gen-testsuite-part' deterministic + When computing lispdir, don't load emacs site wide init file. + PATH: quote $(PATH_SEPARATOR) as well + Improve detection of GNU make, avoiding "Arg list too long" errors. + +2014-12-22 Stefano Lattarini + + cleanup: refactor code to initialize DIST_COMMON + + There is not need to make that an Automake variable early, + only to later get and munge its contents, and use the new + content to redefine the variable. + + * bin/automake.in (@dist_common): New global variable. + (push_dist_common, handle_dist): Use it. + (handle_dist): Define am__DIST_COMMON instead of DIST_COMMON + directly. + (initialize_per_input): Reset it to empty. + ($configure_dist_common): Turn this scalar variable ... + (@configure_dist_common): ... into this array variable. + (handle_dist): Adjust. + (required_file_check_or_copy): Update and wrap some comments. + * lib/am/distdir.am (DIST_COMMON): Append $(am__DIST_COMMON). + * t/distcom2.sh: Tighten a little. + +2014-12-22 Stefano Lattarini + + dist: ordering of files in DIST_COMMON is deterministic now + + It had likely stopped being deterministic due to the new perl behavior + of having non-deterministic order of numerating hash keys: + + + See also similar commit v1.14-19-g52e6404, albeit in this case the issue + is likely coming from autom4te/autoconf, not from automake itself. + + Fixes automake bug http://debbugs.gnu.org/17908 + + * bin/automake.in (handle_dist): Sort @dist_common. + (print_autodist_files): Swap invocations of 'sort' and 'uniq', for + consistency with the new code in 'handle_dist' and to get rid of a + minor hack. + * NEWS: Update. + +2014-12-22 Stefano Lattarini + + tests: refactor some tests on DIST_COMMON + + So that they prefer checking the semantics of the generated Makefiles, + rather than grepping their content. This will be useful in an upcoming + refactoring. + + * t/distcom-subdir.sh: Adjust this test. + * t/distcom2.sh: And this. + * t/distcom3.sh: And this. + * t/distcom4.sh: And this. + * t/distcom5.sh: And this. + +2014-12-22 Stefano Lattarini + + maint: make output of 'gen-testsuite-part' deterministic + + So that diffs displayed by the 'compare-autodiffs' target are + less spurious and more useful. + + * gen-testsuite-part: Sort keys of %deps_extractor, %wrapper_setups + and %depmodes before iterating on them. + +2014-12-19 Andrew Burgess (tiny change) + + When computing lispdir, don't load emacs site wide init file. + + When computing the lispdir emacs was previously invoked with the '-q' + option to avoid loading the users initialisation files, however, the + site wide initialisation file was still loaded, in some cases this can + cause emacs to hang, with the result that a configure can also hang. + + The lisp code that aclocal causes to be executed reduces the load-path + list (in emacs) to empty. The load-path is used by emacs to find + packages which it wants to load. Currently, if emacs tries to auto + load a package during shut down, and the package is not found, then + emacs will hang. This does seem like an emacs bug, but protecting + against this in aclocal is simply a case of not loading the site wide + initialisation file. + + In this patch then the '-q' option to emacs is replaced with '-Q', + this has the same, the '-Q' option is similar to '-q --no-site-file + --no-splash'. + + * doc/automake.texi (Hard-Coded Install Paths): Update explanation of + emacs code used to get lispdir. + * m4/lispdir.m4 (AM_PATH_LISPDIR): Update emacs flags. + +2014-12-19 KO Myung-Hun (tiny change) + + PATH: quote $(PATH_SEPARATOR) as well + + On OS/2, $(PATH_SEPARATOR) is ';'. Without quote, it is recognized as + a mark of end of sentence. + + * Makefile.am: quote $(PATH_SEPARATOR) as well. + * t/Makefile.inc: Likewise. + +2014-12-19 Stefano Lattarini + + Improve detection of GNU make, avoiding "Arg list too long" errors. + + Such errors could take place when the main makefile included too many + sub-makefiles, making $(MAKEFILE_LIST) too long and causing the + recipes $(am__is_gnu_make) to exceed the shell's command-line length + limits. This is not a theoretical issue: it could happen for projects + having lots of C/C++ sources and using automatic dependency tracking, + which created an included .Po sub-makefile for each of such sources. + + Fixes http://debbugs.gnu.org/18744 + + * lib/am/header-vars.am (am__is_gnu_make): Fix the logic to avoid + the use of $(MAKEFILE_LIST). + * NEWS: Update. + +2014-12-19 Stefano Lattarini + + Merge branch 'micro' into minor + + * micro: + Fix stupid typo in test, causing spurious failure + +2014-12-19 Stefano Lattarini + + Fix stupid typo in test, causing spurious failure + + * t/aminit-trailing-dnl-comment-pr16841.sh: s/greop/grep/ + +2014-12-19 Stefano Lattarini + + Merge branch 'micro' into minor + + * micro: + sync: update third-part files from upstream + Make sure AM_INIT_AUTOMAKE has a trailing newline + dist: adjust warning messages about shar and tarZ deprecation + docs: improve description of ${PACKAGE}, ${VERSION}, and similar variables + +2014-12-19 Stefano Lattarini + + Merge branch 'pr16841' into micro + + * pr16841: + Make sure AM_INIT_AUTOMAKE has a trailing newline + +2014-12-19 Stefano Lattarini + + sync: update third-part files from upstream + + * lib/config.guess: This. + * lib/config.sub: And this. + * lib/gitlog-to-changelog: And this. + * lib/gnupload: And this. + * lib/update-copyright: And this. + +2014-12-19 Stefano Lattarini + + Make sure AM_INIT_AUTOMAKE has a trailing newline + + This used to be the case until Automke 1.13, but we broke it in + Automake 1.14 (see commit v1.13.1-71-gf78b0f0). This caused + issues like http://debbugs.gnu.org/16841 + + * m4/init.m4 (AM_INIT_AUTOMAKE): Adjust. + * t/aminit-trailing-dnl-comment-pr16841.sh: New test. + * t/list-of-tests.mk: Add it. + * NEWS, THANKS: Update. + +2014-12-19 Stefano Lattarini + + Merge branches 'dist-warn-pr19108' and 'docs-pr16623' into micro + + * dist-warn-pr19108: + dist: adjust warning messages about shar and tarZ deprecation + + * docs-pr16623: + docs: improve description of ${PACKAGE}, ${VERSION}, and similar variables + +2014-12-19 Aharon Robbins + + dist: adjust warning messages about shar and tarZ deprecation + + They were swapped. Reported in http://debbugs.gnu.org/19108. + +2014-12-18 Stefano Lattarini + + docs: improve description of ${PACKAGE}, ${VERSION}, and similar variables + + In particular, suggesting that $PACKAGE and $VERSION should be aliases of + the $PACKAGE_TARNAME and $PACKAGE_VERSION definitions coming from AC_INIT, + and not be defined via an obsolete 2-argument invocation of AM_INIT_AUTOMAKE; + and why that is the best default, given all our historical baggage. + + See discussion in http://debbugs.gnu.org/16623 for more information and + background. + + * doc/automake.texi: Adjust. + * THANKS: Update. + +2014-12-17 Thomas Jahns + + Fix dumb logic error preventing $install_sh from being be overridden + + * m4/install-sh.m4: Here. + * THANKS: Update. + +2014-12-17 Stefano Lattarini + + Merge branches 'pr19311' and 'micro' into minor + + * pr19311: + Expose automake bug#19311 + build: fix race in parallel builds + + * micro: + Automake docs: fix typos and use of British English + build: fix race in parallel builds + +2014-12-17 Karl Berry + + Automake docs: fix typos and use of British English + + * doc/automake.texi: Here. + +2014-12-17 Stefano Lattarini + + Expose automake bug#19311 + + AC_PROG_CC called before AC_CONFIG_AUX_DIR can silently force wrong + $ac_aux_dir definition. + + * t/auxdir-pr19311.sh: New. + * t/list-of-tests.mk: Add it as an XFAIL test. + +2014-12-17 Paul Eggert + + build: fix race in parallel builds + + Reported by Friedrich Beckmann in: http://bugs.gnu.org/18301 + * lib/am/texi-vers.am (?DIRSTAMP?): Put the process-ID into the + temporary file name. Use a similar temporary in the source dir. + +2014-08-23 Paul Eggert + + build: fix race in parallel builds + + Reported by Friedrich Beckmann in: http://bugs.gnu.org/18301 + * lib/am/texi-vers.am (?DIRSTAMP?): Put the process-ID into the + temporary file name. Use a similar temporary in the source dir. + +2014-04-22 Stefano Lattarini + + init: ensure $ac_aux_dir is defined before being used + + Since we use '$ac_aux_dir' to define '$am_aux_dir', we need + to ensure the former has been initialized before we try to + define the latter, otherwise the definition: + + am_aux_dir=`cd $ac_aux_dir && pwd` + + will set '$am_aux_dir' to '$HOME', likely causing weird and + unexpected behaviours. + + This change fixes automake bug#15981. + + * m4/auxdir.m4 (AM_AUX_DIR_EXPAND): AC_REQUIRE expansion + of 'AC_CONFIG_AUX_DIR_DEFAULT'. Fix redundant comment and + AC_PREREQ, add extra quoting around '$ac_aux_dir'. + * t/auxdir-pr15981.sh: New test. + * t/auxdir-cc-pr15981.sh: Likewise. + * t/list-of-tests.mk (handwritten_TESTS): Add them. + * THANKS, NEWS: Update. + * bin/automake.in: Fix a harmless typo in comments, that + I happened to notice while writing this patch. + +2014-04-21 Stefano Lattarini + + plans: enabling subdir-object by default is blocked on bug#13928 + +2014-04-21 Stefano Lattarini + + maint: update copyright years + + We've been in 2014 already for few months now... + +2014-04-21 Stefano Lattarini + + maint: sync files from upstream ("make fetch") + +2014-04-21 Stefano Lattarini + + Typofixes in warning messages and manual + + Fixes automake bug#16827 and bug#16997. + +2014-04-21 Stefano Lattarini + + Merge branch 'micro' into minor + + * micro: + doc: fix encoding error with UTF-8 characters + +2014-01-04 Paul Eggert + + doc: fix encoding error with UTF-8 characters + + * doc/automake.texi: Specify @documentencoding and + @documentlanguage, to prevent encoding errors for parts of this + input file that are UTF-8. This also causes the .info output to + use curly quotes, which is easier to read though it does assume + UTF-8 support. + +2013-12-31 Stefano Lattarini + + NEWS: a typofix, and better word wrapping + +2013-12-30 Stefano Lattarini + + parallel-tests: avoid possible implicit "make all" in test-suite.log rule + + This change fixes automake bug#16302. + + * lib/am/check.am ($(TEST_SUITE_LOG)): Avoid running "make $redo_logs" + when $redo_logs expands to empty, since in that case we are actually + ending up invoking a full "make all". That shouldn't be required, and + can cause slowdowns for people implementing their extra "laziness + wrappers" around check-TESTS (automake bug#16302). + * NEWS: Update. + +2013-12-26 Stefano Lattarini + + Allow user to extend .PRECIOUS target + + References: + + + + * bin/automake.in: Adjust to ensure we handle '.PRECIOUS' the same way + we do for '.PHONY' and '.MAKE'. + * lib/Automake/Rule.pm: Likewise. + * t/precious.sh: New test. + * t/list-of-tests.mk: Add it. + * t/phony.sh: Enhance a little while at it. + * NEWS: Update. + * THANKS: Likewise. + + Reported-by: Holger Hans Peter Freyther + +2013-12-26 Stefano Lattarini + + cosmetics: remove a couple of extra trailing white spaces + +2013-12-26 Stefano Lattarini + + tests: fix a spurious failure on Mac OS X + + This change fixes bug#14706. + + * lib/depcomp2.sh: Also cater to spurious diagnostic from GNU rm, + not only from Apple's rm. + +2013-12-26 Stefano Lattarini + + docs: make clear the JAVA primary is frozen + + * doc/automake.texi: Here. The JAVA primary is broken in several ways, + and will no longer be developed, not even for bug fixes. + + See also automake bugs #9088, #8662 and #8540. + +2013-12-26 Stefano Lattarini + + Merge branch 'install-sh-improvements' into minor + + * install-sh-improvements: + install-sh: a slightly better diagnostic, and tests enhancements + install-sh: be stricter in catching invalid usages + +2013-12-26 Stefano Lattarini + + install-sh: a slightly better diagnostic, and tests enhancements + + * lib/install-sh: When called with no non-option arguments and the '-t' + option with an argument that is not an existing directory, have the + diagnostic output complain about the lack of required arguments rather + than about the bad argument passed to '-t'. + * t/install-sh-unittests.sh: Enhance to also check diagnostic printed + in cases of expected failure. + +2013-12-26 Stefano Lattarini + + install-sh: be stricter in catching invalid usages + + Such usages (which are rejected by GNU install as well) are: + + - options -d and -t used together; + + - argument passed to option -t must be a directory; + + - if there are two or more SOURCEFILE arguments, the + DESTINATION argument must be a directory. + + Note that we still allow the use of options -d and -T together, by + making -d take the precedence; this is for compatibility with GNU + install. + + This change fixes, among other things, automake bug#15376. + + * lib/install-sh: Adjust. + * t/install-sh-unittests.sh: Enhance. + * NEWS: Update. + * THANKS: Add reporter of bug#15376. + + Helped-by: Tobias Hansen + +2013-12-25 Stefano Lattarini + + tests: more significant names for some tests + + * t/insh2.sh: Rename... + * t/dist-install-sh.sh: ... like this. + * t/instsh.sh: Rename... + * t/add-missing-install-sh.sh: ... like this. + * t/instsh2.sh: Rename... + * t/install-sh-unittests.sh: ... like this. + * t/instsh3.sh: Rename... + * t/install-sh-option-C.sh: ... like this. + * t/list-of-tests.mk: Adjust. + +2013-12-25 Stefano Lattarini + + tests: some cosmetic fixes + + * t/instdat.sh: Here. + * t/instdat2.sh: And here. + * t/instsh.sh: And here. + * t/instsh3.sh: And here. + +2013-12-25 Stefano Lattarini + + tests: more significant names for a test + + * t/install2.sh: Rename... + * t/dist-with-unreadable-makefile-fails.sh: ... like this. + * t/list-of-tests.mk: Adjust. + +2013-12-25 Stefano Lattarini + + Merge branches 'fix-pr11814' and 'drop-perl-tap-driver' into minor + + * fix-pr11814: + docs: drop a few obsolescent FIXME/TODO comments, and associated text + testsuite harness: report test exit status in log file + + * drop-perl-tap-driver: + TAP driver: remove perl implementation (move it into contrib/) + +2013-12-24 Stefano Lattarini + + docs: drop a few obsolescent FIXME/TODO comments, and associated text + +2013-12-24 Stefano Lattarini + + testsuite harness: report test exit status in log file + + 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. + + This fixes automake bug#11814. + + * lib/test-driver: Also report the test script exit status in the + test log (as the last line). + * t/check-exit-status-reported.sh: Test this new behaviour. + * t/list-of-tests.mk: Add the new test. + * t/ax/test-lib.sh( am_exit_trap): No longer log the test exit status; + this has been made redundant by the change to 'test-driver'. While at + it, fix an imperfect quoting. + +2013-12-24 Stefano Lattarini + + TAP driver: no need to invoke AC_PROG_AWK directly + + It is already required by AM_INIT_AUTOMAKE anyway. + + * doc/automake.texi: Adjust examples. + * t/tap-doc2.sh: Adjust documentation-tracking test. + * m4/init.m4 (AM_INIT_AUTOMAKE): Explicitly tell that the AC_PROG_AWK + requirement is also needed whenever the TAP driver is used. + +2013-12-24 Stefano Lattarini + + TAP driver: remove perl implementation (move it into contrib/) + + That implementation was only meant as a standard against which the + portable awk+shell implementation was to be measured. Now, since + Automake 1.12, the latter implementation is fully functional and + already used in the wild, and in fact feature-par with the perl + implementation. So the perl implementation is now just slowing + down and complicating our testsuite. Let's move it to 'contrib/' + (we don't want to remove it, in case someone is actually using it + in the wild). + + * lib/tap-driver.pl: Move it ... + * contrib/tap-driver.pl: ... here. While at it, convert quoting + `like this' to quoting 'like this', and remove an obsolescent FIXME + comment. + * lib/Makefile.inc (dist_script_DATA): Drop '%D%/tap-driver.pl'. + * Makefile.am (EXTRA_DIST): Add 'contrib/tap-driver.pl'. + * doc/automake.texi: Remove one stray reference to 'tap-driver.pl', + and reference 'tap-driver.sh' instead, as intended. + * t/ax/am-test-lib.sh ($am_tap_implementation): Delete definition and + uses. + (fetch_tap_driver): Simplify to unconditionally assume the shell+awk + implementation of the TAP driver is used. + (get_shell_script): Make more flexible so that it can cater to the + needs of 'fetch_tap_driver()'. + * t/tap-bad-prog.tap: Likewise. + * t/tap-bailout-leading-space.sh: Likewise. + * t/tap-signal.tap: Likewise. + * t/tap-test-number-0.sh: Likewise. + * t/test-driver-cond.sh: Use 'tap-driver.sh' instead of 'tap-driver.pl'. + * gen-testsuite-part (%test_generators): Do not generate sister tests + that use the perl TAP driver rather than the shell+awk one. + * NEWS: Update. + +2013-12-24 Stefano Lattarini + + NEWS: stop reporting "new" Automake versioning scheme + + It's actually old news by now. + +2013-12-24 Stefano Lattarini + + Merge branch 'micro' into minor + + * micro: + post-release: micro version bump to 1.14.1a devel version + release: stable micro release 1.14.1 + HACKING: minor clarification + tests: make install-info-dir.sh print more debugging info + tests: remove too-brittle test tap-realtime.sh + maintainer: am-ft: add option to cater to clock skews + sync: update INSTALL, config.guess and config.sub from upstream + TAP driver: cosmetic fixes + +2013-12-24 Stefano Lattarini + + post-release: micro version bump to 1.14.1a devel version + + * configure.ac (AC_INIT): Bump version number to 1.14.1a. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2013-12-24 Stefano Lattarini + + release: stable micro release 1.14.1 + + * configure.ac (AC_INIT): Bump version number to 1.14.1. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2013-12-24 Stefano Lattarini + + HACKING: minor clarification + +2013-12-23 Stefano Lattarini + + tests: make install-info-dir.sh print more debugging info + + With the hope that this will shed more light on bug#14601 + +2013-12-23 Stefano Lattarini + + tests: remove too-brittle test tap-realtime.sh + + * t/tap-realtime.sh: Delete. It has always been brittle, but now + it's also causing spurious failures when mawk is used as the awk + implementation in tap-driver.sh (see bug#14601). + * t/list-of-tests.mk: Adjust. + +2013-12-23 Stefano Lattarini + + maintainer: am-ft: add option to cater to clock skews + + * maintainer/am-ft: Add option '-S', giving a number of seconds to sleep + after copying the tarball to the remote system and before unpacking, + building and testing it. This is to cater to situations where the clock + of the remote system is skewed (in the past) w.r.t. the clock the local + system the tarball has been built on. + +2013-12-23 Stefano Lattarini + + sync: update INSTALL, config.guess and config.sub from upstream + +2013-12-23 Stefano Lattarini + + TAP driver: cosmetic fixes + + * lib/tap-driver.sh: Quote 'like this', not `like this'. Remove an + obsolete FIXME. Correctly mark another comment as a TODO rather + than as a FIXME. + +2013-11-02 Stefano Lattarini + + Merge branch 'modernize-install-sh' into minor + + * modernize-install-sh: + cosmetics: untabify the install-sh script + install-sh: assume that "set -f" and "set +f" work... + install-sh: assume ${var:-value} works as expected + install-sh: assume 'dirname' is available and working correctly + +2013-11-02 Stefano Lattarini + + Merge branch 'micro' into minor + + * micro: + cosmetics: fix typo in a user-facing message in tests + automake: account for perl hash order randomization + tests: avoid use of intervals to capitalize letters + distcheck: don't allow overriding of --prefix and --srcdir by the user + tests: expose bug#14991 (relates to 'distcheck') + +2013-11-02 Stefano Lattarini + + cosmetics: fix typo in a user-facing message in tests + + * t/lex-header.sh: A "skip" message in this test, precisely. + +2013-11-01 Stefano Lattarini + + Merge branches 'fix-pr14991' and 'fix-pr14891' into micro + + * fix-pr14991: + distcheck: don't allow overriding of --prefix and --srcdir by the user + tests: expose bug#14991 (relates to 'distcheck') + + * fix-pr14891: + automake: account for perl hash order randomization + tests: avoid use of intervals to capitalize letters + +2013-10-31 Stefano Lattarini + + automake: account for perl hash order randomization + + Try to explicitly order the keys of some perl hashes when looping + on them to do sanity/correctness checks and possibly display warning + messages; this should ensure a more reproducible output. Not really + a big deal, but I prefer to keep the order of such output reproducible + if possible. + + Issue revealed by spurious testsuite failures with perl 5.18, as + reported in automake bug#14891. See also: + + + + * lib/Automake/Variable.pm (variables): Explicitly order the values of + the returned Automake::Variable instances. + (variables_dump): Simplify, using the knowledge that 'variables()' now + sorts its output. + * t/preproc-errmsg.sh: Adjust. + +2013-10-31 Stefano Lattarini + + tests: avoid use of intervals to capitalize letters + + It was causing spurious failures with with Solaris 8 'tr'. + See automake bug#14891. + + * t/test-extensions.sh: Adjust. + +2013-10-31 Stefano Lattarini + + cosmetics: untabify the install-sh script + + * lib/install-sh: Here, plus a couple of related formatting tweaks. + +2013-10-31 Stefano Lattarini + + install-sh: assume that "set -f" and "set +f" work... + + ... and disable/enable shell globbing, respectively. This is + mandated by POSIX, and supported even by Solaris 9 /bin/sh (one + of the most braindead shells we still support). + + * lib/install.sh: Adjust. + * NEWS: Update. + +2013-10-30 Stefano Lattarini + + install-sh: assume ${var:-value} works as expected + + The Autoconf manual says it is OK these days. + + * lib/install.sh: Adjust. + * NEWS: Update. + +2013-10-30 Stefano Lattarini + + install-sh: assume 'dirname' is available and working correctly + + Really, we no longer care about hosts so outdated/broken to miss + fundamental utilities like basename or dirname. + + * lib/install.sh: Adjust. + * NEWS, THANKS: Update. + + Suggested-by: Philipp A. Hartmann + +2013-10-30 Stefano Lattarini + + distcheck: don't allow overriding of --prefix and --srcdir by the user + + Not through AM_DISTCHECK_FLAGS, nor through DISTCHECK_FLAGS. Apparently, + some packages got in the habit of relaying all the options passed to the + original ./configure invocation through to the configure invocations + in "make distcheck". This was causing problems, because it also passed + through the original --srcdir and --prefix options. + + Fixes: expose bug#14991 (relates to 'distcheck') + + * lib/am/distdir.am (distcheck): Pass the hard-coded --srcdir and + --prefix options *after* both the developer-defined options in + $(AM_DISTCHECK_FLAGS) and the user-defined options in $(DISTCHECK_FLAGS). + * t/list-of-tests.mk (XFAIL_TESTS): Remove the now-passing test + 'distcheck-no-destdist-or-srcdir-override.sh'. + * doc/automake.texi (Checking the Distribution): Update. + * NEWS: Likewise. + +2013-10-30 Stefano Lattarini + + tests: expose bug#14991 (relates to 'distcheck') + + * t/distcheck-no-prefix-or-srcdir-override.sh: New, expose the bug. + * t/list-of-tests.mk (handwritten_TESTS, XFAIL_TESTS): Add it. + +2013-10-30 Stefano Lattarini + + Merge branch 'micro' into minor + + * micro: + tests: fix spurious failure when zip is present but unzip is not + tests: fix spurious failure due to localization issues + NEWS: update with the changes since v1.14 + docs: correct typos in the fix-timestamp.sh script + python: byte-compile nobase_*_PYTHON files only once + cosmetics: typofix in the 'missing' script + test: avoid false positives in 'cc-no-c-o' script + test harness: improve catching of usage errors in script 'test-driver' + tests: fix a spurious failure on NetBSD-current + am-ft: make the environment available earlier + NEWS: post-release tweaks (for 1.14.x series) + tests: avoid a spurious failure on MacOS X 10.6.8 + tests: don't risk hanging on the 'cl' requirement + +2013-10-30 Stefano Lattarini + + tests: fix spurious failure when zip is present but unzip is not + + Fixes automake bug#15181. + + * t/dist-formats.tap (have_compressor): When checking that zip(1), also + check for unzip(1), otherwise "make distcheck" will be unable to extract + the zip tarball it creates, which will cause spurious failures. While + at it, reorganize the existing code a bit. + * THANKS, NEWS: Update. + +2013-10-30 Stefano Lattarini + + tests: fix spurious failure due to localization issues + + Fixes automake bug#15237. + + * t/autohdr-subdir-pr12495.sh: Ensure make is run in the C locale, so that + we can expect error messages in English when grepping its output. + * THANKS, NEWS: Update. + +2013-10-30 Stefano Lattarini + + NEWS: update with the changes since v1.14 + +2013-10-29 Peter Breitenlohner (tiny change) + + docs: correct typos in the fix-timestamp.sh script + + * doc/automake.texi: Here. The original version of this example script + makes no sense at all, using 'configure' instead of the intended 'touch' + in few key places. + +2013-10-28 Benoit Sigoure (tiny change) + + python: byte-compile nobase_*_PYTHON files only once + + * lib/am/python.am: Here. Byte-compiling was occurring inside of + a loop, causing an O(n^2) number of byte-compilations instead of + O(n). + +2013-10-28 Václav Zeman (tiny change) + + cosmetics: typofix in the 'missing' script + + * lib/missing: Here, in a message printed to the user. + * THANKS: Update. + +2013-07-23 Stefano Lattarini + + Merge branch 'fix-pr14911' into micro + + * fix-pr14911: + test: avoid false positives in 'cc-no-c-o' script + +2013-07-23 Stefano Lattarini + + Merge branch 'fix-half-pr14760' into micro + + * fix-half-pr14760: + tests: fix a spurious failure on NetBSD-current + +2013-07-23 Stefano Lattarini + + test: avoid false positives in 'cc-no-c-o' script + + Fixes automake bug#14911. + + * t/ax/cc-no-c-o.in: Be more careful in determining whether both the + '-c' and '-o' options have been passed on the command line to the + compiler. In particular, do not spuriously complain in the face of + options like '-compatibility_version' or '-current_version' (seen on + Mac OS X 10.7). + * THANKS: Update. + +2013-07-21 Stefano Lattarini + + test harness: improve catching of usage errors in script 'test-driver' + + Fixes automake bug#14840. + + * lib/test-driver: Catch and report usage errors where the caller has + forgotten to specify one of the mandatory options (--test-name, + --log-file, --trs-file) or has not passed any non-option argument. + Also, be sure to work correctly even when no '--' special argument + is passed to separate option from non-options arguments. + * THANKS: Update. + +2013-07-07 Stefano Lattarini + + tests: fix a spurious failure on NetBSD-current + + Reported in automake bug#14760. + + * tests/silent-custom.sh: Be prepared to handle creative + quoting in the output of the shell run for the make recipes + when the shell traces are active ("set -x"). + +2013-06-28 Stefano Lattarini + + am-ft: make the environment available earlier + + So that, with a PATH that is updated earlier, we can find the 'xz' + program even on systems where it isn't in the default PATH. + + * maintainer/am-ft: Adjust accordingly. + +2013-06-27 Stefano Lattarini + + NEWS: post-release tweaks (for 1.14.x series) + +2013-06-27 Stefano Lattarini + + tests: avoid a spurious failure on MacOS X 10.6.8 + + Fixes automake bug#14706. + + * t/depcomp2.sh: Strip, from the redirected ./configure stderr, the + possible error message "rm: conftest.dSYM: is a directory", generated + by cleanup code that doesn't cater to the existence of *.dSYM + directories sometimes created by the compiler on MacOS X. This + "massaging" of ./configure stderr is legitimate, since the spurious + error message is due not to automake-related code, but to a know + buglet/limitation of either Autoconf or Mac OS X bundles gcc: + + Actually, from that link it appears that the original Autoconf issue + had been fixed, but it must have been re-introduced in the meantime :-( + +2013-06-27 Stefano Lattarini + + tests: don't risk hanging on the 'cl' requirement + + On the GNU/Linux boxes of some users that run our testsuite there + is a '/usr/local/bin/cl' executable, from the IRAF package: + + + + The test 'compile4.sh' (and other tests) try to invoke the 'cl' + command to check whether it's a Microsoft compiler; the IRAF cl + is an interactive program, so it hangs on such invocation. In + conclusion, the testsuite hangs for those users which have the + IRAF cl early in PATH. + + Fix the issue by redirecting the input of cl from /dev/null when + invoking it, which is enough to prevent the cl program from IRAF + from hanging, and should have no effect on the behaviour of the + Microsoft compiler. + + This change fixes automake bug#14707. + + * t/ax/am-test-lib.sh (require_tool): Adjust the handling of + the 'cl' requirement. + +2013-06-21 Stefano Lattarini + + Merge branch 'micro' into minor + + * micro: + post-release: micro version bump (1.14.0a) + +2013-06-21 Stefano Lattarini + + post-release: micro version bump (1.14a) + + * configure.ac: Bump version: 1.14 -> 1.14a + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2013-06-21 Stefano Lattarini + + post-release: micro version bump (1.14.0a) + + * configure.ac: Bump version: 1.14 -> 1.14.0a + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2013-06-21 Stefano Lattarini + + Merge branch 'maint' into micro + + * maint: + release: stable minor release 1.14 + NEWS: one more minor fixlet + maint: port check-minimal-autoconf to VPATH builds + tests: avoid spurious failures in Linux -> MinGW cross-compilation mode + tests: simplify checks for some expected variables values in Makefiles + NEWS: improve and update wording + tests: fix/improve few heading comments + coverage: new test on Texinfo @include support + tests: tighten a grepping check + tests: more significant names for some tests + rename-tests: rework some code for clarity and safety + tests: cosmetic changes in t/extra-sources.sh + rename-tests: inform the user about the pre-filled commit msg + typofix: in comments in 'maintainer/rename-tests' + rename-tests: also "git add" list-of-tests.mk + tests: rename t/exsource.sh -> t/extra-sources.sh + tests: some improvements to Gettext tests + maint: version bump after beta release 1.13b + release: beta release 1.13b (will become 1.14) + automake: assume we can always pass '-o' to the C compiler + NEWS: fix typo + NEWS: on assuming "rm -f" without arguments work + docs: AM_PROG_CC_C_O: correct imprecise statements about it + NEWS: document deprecation of 'shar' and 'compress' dist formats + m4: rename minuso.m4 -> prog-cc-c-o.m4 + tests: some tests make no sense if "$CC -c -o" doesn't work + AM_PROG_CC_C_O: don't rely on AC_PROG_CC_C_O, re-implement similar logic + compile: rewrite AC_PROG_CC with AM_PROG_CC_C_O contents + tests: avoid few lingering $MAKE redirections + tests: fix a spurious failure on NetBSD 5.1 + texi: build version.texi and stamp-vti in srcdir + tests: fix a botched heading comment + tests: fix another spurious with FreeBSD make + tests: fix a spurious failure with FreeBSD make + tests: remove remaining exec bits ('maint' branch) + PLANS: subdir-objects: various updates + THANKS: update Akim's e-mail address + tests: less uses of "make -e"; avoid spurious failures in 'check-cc-no-c-o' + build: be more respectful of user-specified verbosity + check-cc-no-c-o: unify initializations in a single place + check-cc-no-c-o: avoid a spurious failure + build: fixup for building in a VPATH setup + Use AC_DEFUN_ONCE to define AM_PROG_CC_C_O + compile: avoid AC_PROG_CC messy rewrite + options: tiny simplification in dealing with incompatible versions + options: try to report as much errors as possible + refactor: fix few "inverted boolean" usages + options: better name for an internal function + options: more consistency in use of return statuses to report errors + options: tiny simplification in dealing with erroneous opts + options: consistently use return statuses to report errors + options: re-enable some sanity checks + THANKS: update Eric Blake's e-mail address + NEWS: typofix + news: document new 'subdir-objects' warning + PLANS: one minor fixlet (mostly cosmetic) + PLANS: we have already dropped support for split info files in master + NEWS: fix a reference to Automake 1.14 where Automake 2.0 was intended + PLANS: fix reference to non-existent 'next' branch + PLANS: fix botched version reference + maintcheck: fix two references to old location of aclocal and automake + dist: deprecated shar and tar+compress formats + am: prefer a shorter idiom where possible + maint: re-run "make update-copyright" ... + tests: avoid spurious failure with older flex (2.5.4) + build: move automake and aclocal in 'bin' subdir + build: break up monolithic Makefile.am in subdir-specific fragments + maint branch: we are going to become Automake 1.14 + tests: typofixes in comments in t/preproc-c-compile.sh + tests: remove bashism from a test + tests: rename some with more descriptive names + typofix: in comments in t/extra2.sh + tests: fix botched cross-reference in a heading comment + automake: refactoring: factor out common cpp-like flags + NEWS (mint): reflect new Automake versioning scheme + maintcheck: avoid spurious failure + perl: perl subroutine prototypes are problematic, don't use them + maint: more adjustments to the new versioning scheme + cosmetics: fix some "docstring-like" comments in automake + style: call perl functions 'like_this()', not '&like_this()' + preproc: enhance and extend tests + preproc: add support for relative names in included fragments + maint: use more perl subroutines prototypes in the automake script + build: auto-generate perl subroutines prototypes for automake and aclocal + refactor: rip module Automake::Language out of automake script + tests: more information about Lex and Yacc programs + lint: fix spurious failure for 'sc_rm_minus_f' syntax check + maint: bump version 1.13.1a -> 1.13.2a + plans: we are not going to remove AM_PROG_MKDIR_P in Automake 1.14 + init.m4: add probe to check "rm -f" without args work + subdir-objects: complain if it isn't enabled + plans: update w.r.t. latest changes + ywrap: remove an obsolete FIXME comment + ywrap: style fixes (no semantic change intended) + convenience: "make lint" as an alias for "make maintainer-check" + docs: typofix in manual + coverage: using multiple lexers in a single program + tests: remove most uses of the AM_PROG_CC_C_O obsolete macro + coverage: obsolete macro AM_PROG_CC_C_O should cause no warning nor errors + INSTALL: update copyright years + ithreads: use runtime (not configure time) detection of perl threads + copyright: add few missing copyright notices + maint: files in PLANS are to be exempted from copyright notice + maint: consistently honor the UPDATE_COPYRIGHT_YEAR environment variable + copyright: update some copyright years + compile: use 'compile' script when "-c -o" is used with losing compilers + HACKING: suggest more checks before releasing + tests: can fake a compiler not grasping "-c -o" -- globally in all tests + sync: update files from upstream with "make fetch" + typofix: in comments in GNUmakefile + Rename 'maint/' -> 'maintainer/', for Git's sake + HACKING: minor typofix + HACKING: bug-tracker, the PLANS directory, and how to plan "big" changes + HACKING: rewindable branches should live in the 'experimental/*' namespace + HACKING: fixlets about git branch rewinding policy + HACKING: commit messages are not to follow GCS ChangeLog rules too strongly + HACKING: "detailed explanation" in commit messages is almost mandatory + HACKING: we use "merge --log" even when merging master + HACKING: typofix + depend2.am: fix comments on verbosity of compilation rules + depend2.am: improve comments a little + plans: automake 1.14 is to assume "rm -f" with no args is OK + plans: we want to active subdir-objects unconditionally in automake 1.14 + tests: adjust stale references to old test names + tests: rename the last aclocal test with dumb name + tests: fix an old botched change to an aclocal test + tests: fix some botched inter-test references in heading comments + coverage: compile rules used "-c -o" also with losing compilers + texi: remove extra verbosity in creation of dirstamp directory + coverage: user can avoid distributing '.info' pages + plans: add some on-going plans (already registered on the bug tracker) + docs: mention dist-hook help for EXTRA_DIST + texi: remove workaround for older Texinfo (4.1) + NEWS: improve wordings in entry deprecating suffix-less info files + build: don't enable 'color-tests' automake option explicitly + build: enable all warnings as fatal in our own build system + texi: Texinfo sources and CLEANFILES definition should co-exist peacefully + tests: make two new test executable + runtest: better command line API + tests: move runtest.in away from the top-lever directory + maint: move more maintainer files in the 'maint/' subdir + plans: add the "PLANS" directory + tests: more significant names for some tests + maint: add some of my maintainer-specific scripts + texi: deprecate hack about info files in CLEANFILES variables + texi: info files can be generated in the builddir + +2013-06-20 Stefano Lattarini + + release: stable minor release 1.14 + + * configure.ac (AC_INIT): Bump version number to 1.14. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2013-06-20 Stefano Lattarini + + NEWS: one more minor fixlet + +2013-06-19 Stefano Lattarini + + maint: port check-minimal-autoconf to VPATH builds + + * maintainer/maint.mk (check-minimal-autoconf): Here. + +2013-06-19 Stefano Lattarini + + tests: avoid spurious failures in Linux -> MinGW cross-compilation mode + + * t/ccnoc-deps.sh: Here. + * t/preproc-demo.sh: And here. + +2013-06-19 Stefano Lattarini + + tests: simplify checks for some expected variables values in Makefiles + + Do so by using our custom 'is' auxiliary script rather than grepping + the output from make. This is more natural, more robust, and often + shorter to write. + + Unfortunately, we can't do that in all cases: sometimes we really need + to match the content of a variable against a regular expressions, and + we can't know nor are interested in its exact value. + + This is basically a follow-up on commit v1.11-1830-g96401cb of + 2012-02-08 (tests: better way to compare lists in Makefile rules). + + * t/subst-no-trailing-empty-line.sh: Adjust. + * t/pluseq10.sh: Likewise. + * t/check5.sh: Likewise, and enhance a little while at it. + * t/check7.sh: Likewise. + * t/exeext.sh: Likewise. + +2013-06-19 Stefano Lattarini + + NEWS: improve and update wording + +2013-06-19 Stefano Lattarini + + tests: fix/improve few heading comments + + * t/lflags.sh: Here. + * t/lflags-cxx.sh: And here. + * t/yflags.sh: And here. + * t/yflags-cxx.sh: And here. + +2013-06-19 Stefano Lattarini + + coverage: new test on Texinfo @include support + + Backported from the Automake-NG testsuite. + + * t/txinfo-include.sh: New test. + * t/list-of-tests.mk: Add it. + +2013-06-19 Stefano Lattarini + + tests: tighten a grepping check + + * t/yflags-force-override.sh: Here, by being sure to correctly + match an expected literal dot. + +2013-06-19 Stefano Lattarini + + tests: more significant names for some tests + + * t/extra2.sh: Rename... + * t/extra-sources-no-spurious.sh: ... like this. + * t/yflags2.sh: Rename... + * t/yflags-cxx.sh: ... like this. + * t/lflags2.sh: Rename... + * t/lflags-cxx.sh: ... like this. + +2013-06-19 Stefano Lattarini + + rename-tests: rework some code for clarity and safety + +2013-06-19 Stefano Lattarini + + tests: cosmetic changes in t/extra-sources.sh + + * t/extra-sources.sh: Do not create unneeded C sources. Add + trailing ':' command. + +2013-06-19 Stefano Lattarini + + rename-tests: inform the user about the pre-filled commit msg + +2013-06-19 Stefano Lattarini + + typofix: in comments in 'maintainer/rename-tests' + +2013-06-19 Stefano Lattarini + + rename-tests: also "git add" list-of-tests.mk + +2013-06-19 Stefano Lattarini + + tests: rename t/exsource.sh -> t/extra-sources.sh + + * t/exsource.sh: Rename ... + * t/extra-sources.sh: ... like this. + * t/list-of-tests.mk: Adjust. + +2013-06-16 Stefano Lattarini + + Merge branch 'gettext-tests' into maint + + * gettext-tests: + tests: some improvements to Gettext tests + +2013-06-16 Stefano Lattarini + + tests: some improvements to Gettext tests + + Mostly to bring them more in sync with the ones in Automake-NG. + See also commit v1.12.2-824-g5468d52 of 2012-08-10([ng] tests: + reorganize gettext tests a bit) in Automake-NG. + + * t/gettext.sh: Rename ... + * t/gettext-basics.sh: ... like this, enhance a little, and + move checks on requirement of 'config.rpath' out into ... + * t/gettext-config-rpath.sh: ... into this new test, and move + checks about PR/381... + * t/gettext-pr381.sh: ... into this new test. + * t/gettext2.sh: Rename ... + * t/gettext-external-pr338.sh: ... like this, and enhance a + little. + * t/gettext3.sh: Rename ... + * t/gettext-intl-subdir.sh: ... like this, and add trailing + ':' command. + +2013-06-14 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + post-release: micro version bump (1.13.4a) + release: stable micro release 1.13.4 + sync: update config.guess + +2013-06-14 Stefano Lattarini + + post-release: micro version bump (1.13.4a) + + * configure.ac: Bump version: 1.13.4 -> 1.13.4a + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2013-06-14 Stefano Lattarini + + release: stable micro release 1.13.4 + + * configure.ac (AC_INIT): Bump version number to 1.13.4. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2013-06-14 Stefano Lattarini + + sync: update config.guess + + * lib/config.guess: This. Actually, only the timestamp has been + updated (apparently, it was mistakenly not updated in the previous + real change to the script). + +2013-06-12 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + THANKS: update e-mall address for Ralf Corsepius + lang, suffix rules: don't require C stuff needlessly + tests: expose automake bug#14560 + +2013-06-12 Stefano Lattarini + + Merge branch 'fix-pr14560' into micro + + * fix-pr14560: + lang, suffix rules: don't require C stuff needlessly + tests: expose automake bug#14560 + +2013-06-12 Stefano Lattarini + + THANKS: update e-mall address for Ralf Corsepius + +2013-06-12 Stefano Lattarini + + lang, suffix rules: don't require C stuff needlessly + + This change fixes automake bug#14560: 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. + + * automake.in (handle_languages): Fix logic to decide whether or not to + include definitions of C compilation related variables in the generated + Makefile.in: instead of doing so when two or more user-defined suffix + rules are seen (which is a completely bogus criterion), do so when two + or more compiled languages are used. + * lib/Automake/Rule.pm (suffix_rules_count): Remove as no longer used. + (@EXPORT): Adjust. + * t/list-of-tests.mk (XFAIL_TESTS): No longer list the test script + 'suffix-extra-c-stuff-pr14560.sh', which now passes. + * NEWS: Update. + +2013-06-12 Stefano Lattarini + + tests: expose automake bug#14560 + + Automake needlessly generates definition of make variables related + to C compilation when two or more user-defined suffix rules are + present in a single Makefile.am. + + * t/suffix-extra-c-stuff-pr14560.sh: New test, exposing the bug. + This test is still xfailing. + * t/no-extra-c-stuff.sh: New test, check for a potential related + regression. This regression is not actually present here (so this + test passes), but it still took place in our first attempt at + fixing bug#14560 -- so this test has proven to be actually useful. + * t/no-extra-makefile-code.sh: Improve comments, and tighten the + grepping checks a little. + * t/list-of-tests.mk (handwritten_TESTS): Add the new tests. + (XFAIL_TESTS): Add the new xfailing test. + +2013-06-09 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + maint: add a missing copyright notice + sync: update config.guess from upstream + tests: expose automake bug#13928 + comments: fix some out-of-sync refs to test scripts + tests: expose automake bug#13940 + +2013-06-09 Stefano Lattarini + + maint: add a missing copyright notice + + * t/ax/deltree.pl: Here. Issue revealed by "make update-copyright". + +2013-06-09 Stefano Lattarini + + sync: update config.guess from upstream + + * lib/config.guess: Here. + +2013-06-08 Stefano Lattarini + + tests: expose automake bug#13928 + + * t/subobj-indir-pr13928.sh: New test, still xfailing. + * t/subobj-vpath-pr13928.sh: Likewise. + * t/list-of-tests.mk (XFAIL_TESTS, handwritten_TESTS): Update. + +2013-06-08 Stefano Lattarini + + comments: fix some out-of-sync refs to test scripts + + Those script has been renamed since those comments where written. + + * lib/Automake/Rule.pm: Adjust. + * lib/am/distdir.am: Likewise. + +2013-06-08 Stefano Lattarini + + tests: expose automake bug#13940 + + * t/override-conditional-pr13940.sh: New test, still xfailing. + * t/list-of-tests.mk (XFAIL_TESTS, handwritten_TESTS): Add it. + +2013-06-03 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + configure: remove an obsolete TODO comment + post-release: micro version bump (1.13.3a) + release: stable micro release 1.13.3 + typofix: fix grammaro in comments in t/tags-pr12372.sh + +2013-06-03 Stefano Lattarini + + configure: remove an obsolete TODO comment + + * configure.ac: Here. + +2013-06-03 Stefano Lattarini + + post-release: micro version bump (1.13.3a) + + * configure.ac: Bump version: 1.13.3 -> 1.13.3a + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2013-06-03 Stefano Lattarini + + release: stable micro release 1.13.3 + + * configure.ac (AC_INIT): Bump version number to 1.13.3. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2013-06-03 Peter Rosin + + typofix: fix grammaro in comments in t/tags-pr12372.sh + +2013-06-03 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + NEWS: minor fixlets, re-wording, and better text wrapping + tests: slightly stricter checks in t/cxx-demo.sh + tests: fix spurious failure when 'etags' program is Exuberant Ctags + tests: fix spurious failure due to missing sleeps + +2013-06-03 Stefano Lattarini + + NEWS: minor fixlets, re-wording, and better text wrapping + +2013-06-03 Stefano Lattarini + + tests: slightly stricter checks in t/cxx-demo.sh + + This is a follow-up to the commit fixing automake bug#14493. + + * t/cxx-demo.sh: Also check that the built program returns the + correct (i.e., zero) exit status when run. And improve comments + a little while at it. + +2013-06-03 Stefano Lattarini + + tests: fix spurious failure when 'etags' program is Exuberant Ctags + + Fixes automake bug#14517. + + * t/tags-pr12372.sh: If the 'etags' program in use supports the + '--langmap' option, use it. That is required to avoid spurious + failures with Exuberant Ctags (at least version 5.8), which by + default do not generate any tags for file extensions it doesn't + recognize. + +2013-06-03 Stefano Lattarini + + tests: fix spurious failure due to missing sleeps + + Fixes automake bug#14528. + + * THANKS: Give credit to that bug's original reporter. + + * t/remake-configure-dependencies.sh: Add few missing '$sleep' + invocations. I thought that the sleeps implicit in the configure + invocation were enough, but they were not, actually. Here is what + can happen: + + 1. The config.status script is generated by a configure run. + 2. ./config.status and make are run. + 3. The 'print-version' script is modified. + 4. Since that script is listed in $(CONFIGURE_DEPENDENCIES), + autoconf is re-run. + 5. On a fast-enough machine, the three steps 2-4 above, even + combined, might have taken less than a second to run; + 6. If the filesystem doesn't have a sub-second timestamp + resolution, that means the newly-generated configure has + the same timestamp of the old config.status; + 7. So, config.status is not re-run, and the Makefiles are + not updated. + 8. Spurious failure! + + So we really need more explicit sleeps. + +2013-05-31 Stefano Lattarini + + maint: version bump after beta release 1.13b + + * configure.ac (AC_INIT): Bump version number to 1.13c. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2013-05-31 Stefano Lattarini + + release: beta release 1.13b (will become 1.14) + + * configure.ac (AC_INIT): Bump version number to 1.13b. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2013-05-30 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + maint: support new Automake versioning scheme in tagging/uploading rules + announcement: can be generated from development snapshots as well + announcement: can be generated from development snapshots as well + announcement: be less strict in the paring of NEWS + maint: version bump after beta release 1.13.2b + release: beta release 1.13.2b (will become 1.13.3) + sync: update config.guess from upstream + +2013-05-30 Stefano Lattarini + + maint: support new Automake versioning scheme in tagging/uploading rules + + * maint.mk (base_version_rx: Drop. + (rx-0, rx-1): New. + (stable_major_version_rx, stable_minor_version_rx, beta_version_rx): + Update. + (stable_micro_version_rx, alpha_version_rx: New. + (determine_release_type): Adjust. + (web-manual-update): Likewise. + +2013-05-30 Stefano Lattarini + + announcement: can be generated from development snapshots as well + + And not only from checkouts corresponding exactly from a beta + or stable release. That was only getting in the way of proper + testing for the 'announcement' recipe. + + * maint.mk (determine_release_type): If the make variable + DEVEL_SNAPSHOT is set, do not error out if the current version + denotes a development snapshot (e.g., "1.13.2c" or "1.99a"). + (announcement): Relax, by also accepting to run from development + snapshots, not only stable or beta releases. Do so by defining + the target-specific variable DEVEL_SNAPSHOT to "yes". + (print-release-type): Micro enhancement while at it. + +2013-05-30 Stefano Lattarini + + announcement: can be generated from development snapshots as well + + And not only from checkouts corresponding exactly from a beta + or stable release. That was only getting in the way of proper + testing for the 'announcement' recipe. + + * maint.mk (determine_release_type): If the make variable + DEVEL_SNAPSHOT is set, do not error out if the current version + denotes a development snapshot (e.g., "1.13.2c" or "1.99a"). + (announcement): Relax, by also accepting to run from development + snapshots, not only stable or beta releases. Do so by defining + the target-specific variable DEVEL_SNAPSHOT to "yes". + +2013-05-30 Stefano Lattarini + + announcement: be less strict in the paring of NEWS + + So that the file generated by "make announcement" is correct also + for beta releases. + + * maint.mk (announcement): Relax the awk program processing NEWS a + little. + +2013-05-30 Stefano Lattarini + + maint: version bump after beta release 1.13.2b + + * configure.ac (AC_INIT): Bump version number to 1.13.2c. + * m4/amversion.m4: Likewise (autoupdated by "make bootstrap"). + +2013-05-30 Stefano Lattarini + + release: beta release 1.13.2b (will become 1.13.3) + + * configure.ac (AC_INIT): Bump version number to 1.13.2b. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2013-05-30 Stefano Lattarini + + sync: update config.guess from upstream + +2013-05-30 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + NEWS: document recent testsuite fixes (MinGW/MSYS related) + depcomp: avoid trailing backslash in depfile for depmode=msvc7 + tests: prune some weed in a non-POSIX test + tests: avoid a spurious failure on MSYS + +2013-05-30 Peter Rosin + + automake: assume we can always pass '-o' to the C compiler + + It is assumed that we can pass -c -o to the C compiler, so remove + some special casing and always do that. + + This change is similar in spirit to v1.13.1d-217-g7299c4d "depend: assume + we can always pass '-o' to the C compiler" + + This change also happen to fix a testsuite failure + (t/silent-many-languages.sh) when mixing MSVC and GNU fortran, which + have different default object file extensions (.obj vs. .o). This + difference in object file extension is not handled well and caused + Automake to look for MSVC objects with .o extension. Always using -o + makes MSVC create .o object files and linking succeeds. Not that + anybody recommends mixing toolchains or anything. + + * bin/automake.in (handle_languages): Remove conditional modification + of 'output_flag' entry for 'c'. + (register_language ('name' => 'c')): Add 'output_flag' entry set to '-o'. + +2013-05-30 Stefano Lattarini + + NEWS: document recent testsuite fixes (MinGW/MSYS related) + +2013-05-30 Peter Rosin + + depcomp: avoid trailing backslash in depfile for depmode=msvc7 + + When compiling a file without any dependencies (no #includes), the + msvc7 depmode (and consequently msvc7msys) generates a depfile + Makefile fragment with the last line ending with a backslash. This + is less robust than needed. + + Fixes automake bug#14501. + + * lib/depcomp (msvc7): Finish off the depfile Makefile fragment with + an empty line. + (scriptversion): Update. + +2013-05-29 Peter Rosin + Stefano Lattarini + + tests: prune some weed in a non-POSIX test + + Fixes automake bug#14494. + + * t/distcheck-pr10470.sh: Make sure the test-driver is installed. Adjust + to run_make changes. Adjust grep pattern to match new output. + +2013-05-29 Peter Rosin + + tests: avoid a spurious failure on MSYS + + Fixes automake bug#14493. + + * t/cxx-demo.sh: Strip CR characters from the program output. + +2013-05-29 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + t/README: document "run_make", discourage "make -e" + cosmetics: tiny whitespace fixlets + tests: avoid a spurious failure with MSVC + tests: avoid a spurious failure on non-POSIX systems + +2013-05-29 Stefano Lattarini + + t/README: document "run_make", discourage "make -e" + +2013-05-29 Stefano Lattarini + + cosmetics: tiny whitespace fixlets + +2013-05-29 Peter Rosin + + tests: avoid a spurious failure with MSVC + + Fixes automake bug#14498. + + * t/yacc-bison-skeleton.sh: inline was not standardized prior to C99. + +2013-05-29 Peter Rosin + + tests: avoid a spurious failure on non-POSIX systems + + Fixes automake bug#14495. + + * t/lex-header.sh: Make sure unistd.h isn't included. + +2013-05-29 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + NEWS: fix typos and grammaros + NEWS: document fix for bug#14441 + Automake::Rule: consistently prepend underscore to private variables + Automake::Rule: rename: suffix_rule() -> next_in_suffix_chain() + Automake::Rule: adjust comments and POD according to previous changes + Automake::Rule: make private variables lexically scoped + suffix rules: better distinction between builtin and user-derived + Automake::Rule: expose suffix rules as a function, not a scalar + tests: expose automake bug#14441 + +2013-05-29 Stefano Lattarini + + NEWS: fix typos and grammaros + + Reported-by: Peter Rosin + +2013-05-28 Stefano Lattarini + + Merge branch 'suffix-rules-work' into micro + + * suffix-rules-work: + NEWS: document fix for bug#14441 + Automake::Rule: consistently prepend underscore to private variables + Automake::Rule: rename: suffix_rule() -> next_in_suffix_chain() + Automake::Rule: adjust comments and POD according to previous changes + Automake::Rule: make private variables lexically scoped + suffix rules: better distinction between builtin and user-derived + Automake::Rule: expose suffix rules as a function, not a scalar + tests: expose automake bug#14441 + +2013-05-28 Stefano Lattarini + + NEWS: fix typo + + Reported-by: Peter Rosin + +2013-05-28 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + NEWS: report recent documentation fix about AM_PROG_MKDIR_P + NEWS: Automake 2.0 will assume "rm -f" without args work + NEWS: fix a couple of typos in older entries + +2013-05-28 Stefano Lattarini + + NEWS: report recent documentation fix about AM_PROG_MKDIR_P + +2013-05-28 Stefano Lattarini + + NEWS: Automake 2.0 will assume "rm -f" without args work + +2013-05-28 Stefano Lattarini + + NEWS: on assuming "rm -f" without arguments work + +2013-05-28 Stefano Lattarini + + NEWS: fix a couple of typos in older entries + +2013-05-28 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + docs: AM_PROG_MKDIR_P: will not be removed in 2.0 release of Automake + maint: sanity checks in 'check-minimal-autoconf' convenience target + maint: test minimal supported autoconf through convenience target + maint: install minimal supported autoconf through convenience targets + test-lib: typofix in comments + +2013-05-28 Stefano Lattarini + + docs: AM_PROG_MKDIR_P: will not be removed in 2.0 release of Automake + + See the 'PLANS/obsolete-removed/am-prog-mkdir-p.txt' file in the 'maint' + branch (as of commit v1.13.2-201-gd99e3f3) for details. + + * doc/automake.texi: Adjust. + +2013-05-28 Stefano Lattarini + + docs: AM_PROG_CC_C_O: correct imprecise statements about it + + * doc/automake.texi: Here. + +2013-05-28 Stefano Lattarini + + maint: sanity checks in 'check-minimal-autoconf' convenience target + + * maint.mk (check-minimal-autoconf): Here, check that autoconf seems + to be locally installed, and that such local install refers to the + correct expected minimal version. + +2013-05-28 Stefano Lattarini + + maint: test minimal supported autoconf through convenience target + + * maint.mk (check-minimal-autoconf): New convenience target. + +2013-05-28 Stefano Lattarini + + maint: install minimal supported autoconf through convenience targets + + To make testing of Automake in conjunction with it easier and more + reproducible. It might be nice to also have convenience targets to + actually automatically run the Automake testsuite with such autoconf + version, but that is left to later patches. + + * configure.ac: AC_SUBST the definition of $required_autoconf_version. + * maint.mk (WGET): Move definition earlier. + (gnu-ftp, ac-v, ac-n, ac-p, ac-t, ac-l, ac-d): New auxiliary variables. + (fetch-minimal-autoconf, build-minimal-autoconf): New convenience + targets. + * .gitignore: Update. + +2013-05-28 Stefano Lattarini + + NEWS: document fix for bug#14441 + +2013-05-28 Stefano Lattarini + + Automake::Rule: consistently prepend underscore to private variables + + * lib/Automake/Rule.pm (%suffix_rules): Rename ... + (%_suffix_rules): ... like this. + (%suffix_rules_builtin): Rename ... + (%_suffix_rules_builtin): ... like this. + (reset, next_in_suffix_chain, register_suffix_rule, suffix_rules_count): + Adjust. + +2013-05-28 Stefano Lattarini + + Automake::Rule: rename: suffix_rule() -> next_in_suffix_chain() + + * lib/Automake/Rule.pm (suffix_rule): Rename ... + (next_in_suffix_chain): ... like this. + (%suffix_rules): Adjust comments. + (@EXPORT): Adjust. + * automake.in (derive_suffix): Likewise. + +2013-05-28 Stefano Lattarini + + Automake::Rule: adjust comments and POD according to previous changes + + * lib/Automake/Rule.pm: Here, in several places. + * automake.in (register_language): And a tiny adjustment here as well. + +2013-05-28 Stefano Lattarini + + Automake::Rule: make private variables lexically scoped + + * lib/Automake/Rule.pm (@_known_extensions_list): This one. + (@_suffixes): And this one. + (%_rule_dict): And this one. + +2013-05-28 Stefano Lattarini + + suffix rules: better distinction between builtin and user-derived + + Fixes automake bug#14441. + + * lib/Automake/Rule.pm ($_suffix_rules_default): Remove, superseded by ... + (%suffix_rules_builtin): ... this lexical variable. + ($suffix_rules): Remove, superseded by ... + (%suffix_rules): ... this lexical variable. + (suffix_rules, suffix_rules_count): Adjust. + (register_suffix_rule): Update '%suffix_rules_builtin' rather than + '%suffix_rules' if the location (as passed by the '$where' argument) + is an "internal" one (doesn't come from user-provided Makefile.am). + (reset): Simplify resetting of '%suffix_rules' to the default ones + accordingly. + * t/list-of-tests.mk (XFAIL_TESTS): Drop test 'suffix-custom-pr14441.sh'. + +2013-05-28 Stefano Lattarini + + Automake::Rule: expose suffix rules as a function, not a scalar + + This is just a preparatory refactoring in view of future patches. + No semantic change is intended. + + * lib/Automake/Rule.pm ($suffix_rules): Turn from a package-level + variable to a lexical variable. + (suffix_rule): New function, expose the details of $suffix_rules + that are actually required by code outside thus modules --- and + only those details, no more. + (@EXPORT): Adjust. + * automake.in (derive_suffix): Likewise. + +2013-05-27 Stefano Lattarini + + tests: expose automake bug#14441 + + * t/suffix-custom-pr14441.sh: New test, still failing. + * t/list-of-tests.mk (handwritten_TESTS, XFAIL_TESTS): Add it. + + Helped-by: Felix Salfelder + +2013-05-26 Stefano Lattarini + + test-lib: typofix in comments + + * t/ax/am-test-lib.sh: In here. + +2013-05-26 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + tests: remove an "unworthy" FIXME comment + tests: remove one obsolete workaround for long-lifted limitations + tests: couple of minor tweaks in demo tests in C++ and Libtool + +2013-05-26 Stefano Lattarini + + tests: remove an "unworthy" FIXME comment + + * t/location.sh: Here. + +2013-05-26 Stefano Lattarini + + tests: remove one obsolete workaround for long-lifted limitations + + * t/silent-many-languages.sh: Here. + +2013-05-26 Stefano Lattarini + + tests: couple of minor tweaks in demo tests in C++ and Libtool + + * t/cxx-lt-demo.sh: Here. + +2013-05-26 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + tests: adjust or remove some obsolete comments + tests: remove some useless 'unset' of variables + +2013-05-26 Stefano Lattarini + + NEWS: document deprecation of 'shar' and 'compress' dist formats + +2013-05-26 Stefano Lattarini + + Merge branch 'prog-cc-c-o-work' into maint + + * prog-cc-c-o-work: + tests: some tests make no sense if "$CC -c -o" doesn't work + AM_PROG_CC_C_O: don't rely on AC_PROG_CC_C_O, re-implement similar logic + compile: rewrite AC_PROG_CC with AM_PROG_CC_C_O contents + +2013-05-26 Stefano Lattarini + + m4: rename minuso.m4 -> prog-cc-c-o.m4 + + The new name is much clearer. + + * m4/minuso.m4: Rename ... + * m4/prog-cc-c-o.m4: ... like this. + * m4/Makefile.in (dist_automake_DATA): Adjust. + +2013-05-26 Stefano Lattarini + + tests: adjust or remove some obsolete comments + + * t/ax/am-test-lib.sh: Here. + * t/distcheck-configure-flags.sh: And here. + +2013-05-26 Stefano Lattarini + + tests: remove some useless 'unset' of variables + + They are redundant, now that we no longer call "make -e". + + * t/javaflags.sh: Don't unset JAVAC. + * t/lflags.sh: Don't unset LEX. + * t/lflags2.sh: Likewise. + +2013-05-26 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + tests: avoid a couple of extra sleep with GNU make + NEWS: document testsuite work for 1.13.3 + lint: remove a couple of obsolete syntax checks + lint: cosmetics: use #-comments, not ##-comments + lint: cosmetics: some reordering + lint: recipes of syntax check require GNU grep; ensure it is used + lint: better name for a syntax check + tests: rename $am_make_rc_got -> $am_make_rc + tests: ensure $required is not set too late + +2013-05-26 Stefano Lattarini + + tests: avoid a couple of extra sleep with GNU make + + They are only required by BSD make in order to avoid spurious failures. + + * t/deleted-am.sh: Here. + * t/parallel-tests-recheck-pr11791.sh: And here. + +2013-05-26 Stefano Lattarini + + NEWS: document testsuite work for 1.13.3 + +2013-05-25 Stefano Lattarini + + lint: remove a couple of obsolete syntax checks + + * syntax-checks.mk (sc_obsolete_requirements_rules): Remove + definition of this variable. + (modern-requirement.texi2dvi-o): Likewise. + (modern-requirement.makeinfo-html): Likewise. + ($(sc_obsolete_requirements_rules)): Remove these obsolete + syntax checks. + +2013-05-25 Stefano Lattarini + + lint: cosmetics: use #-comments, not ##-comments + + * syntax-checks.mk: Here. This makes sense because this file is + not meant to be processed by Automake, so the ##-comments are not + treated specially. + +2013-05-25 Stefano Lattarini + + lint: cosmetics: some reordering + + * syntax-checks.mk: Here. + +2013-05-25 Stefano Lattarini + + lint: recipes of syntax check require GNU grep; ensure it is used + + * syntax-checks.mk (sc_sanity_gnu_grep): New. + ($(syntax_check_rules)): Depend on it. + +2013-05-25 Stefano Lattarini + + lint: better name for a syntax check + + * syntax-checks.mk (sc_tests_make_without_am_makeflags): Rename ... + (sc_make_without_am_makeflags): ... like this. + (syntax_check_rules): Adjust. + +2013-05-24 Stefano Lattarini + + tests: rename $am_make_rc_got -> $am_make_rc + + The latter is more natural More importantly, I keep misspelling + the former over and over. + + * t/ax/am-test-lib.sh (run_make): Update. + * t/ax/tap-summary-aux.sh: Adjust. + * t/ax/testsuite-summary-checks.sh: Likewise. + * t/parallel-tests-exit-statuses.sh: Likewise. + * t/parallel-tests-extra-programs.sh: Likewise. + * t/parallel-tests-fd-redirect-exeext.sh: Likewise. + * t/parallel-tests-fd-redirect.sh: Likewise. + * t/parallel-tests-fork-bomb.sh: Likewise. + * t/parallel-tests-no-spurious-summary.sh: Likewise. + * t/parallel-tests-recheck-pr11791.sh: Likewise. + * t/parallel-tests-reset-term.sh: Likewise. + * t/tap-signal.tap: Likewise. + * t/test-driver-acsubst.sh: Likewise. + * t/test-driver-cond.sh: Likewise. + +2013-05-24 Stefano Lattarini + + tests: some tests make no sense if "$CC -c -o" doesn't work + + So just skip them, to avoid spurious failures when running + "make check-no-cc-c-o". + + * t/ax/am-test-lib.sh (require_tool): New requirement '-c-o'. + * t/subobj10.sh ($required): Add it. + * gen-testsuite-part (%depmodes): Adjust so that tests that + use 'makedepend' will be skipped if the compiler is being + forced not to grasp "-c -o". + +2013-05-24 Stefano Lattarini + + AM_PROG_CC_C_O: don't rely on AC_PROG_CC_C_O, re-implement similar logic + + ** Theoretical problems of AC_PROG_CC_C_O: + + Both cc and $CC are checked to see if they support the '-c' and '-o' + options together. + This behaviour is highly inconsistent with that of the other macros + related to C compiler checks -- which test only $CC. + It can also cause unwarranted uses of the 'compile' script on systems + where the default 'cc' is inferior, but the user is compiling with a + proper, different compiler (e.g., gcc). + + ** Practical problems with our previous implementation of C support m4 + macros in Automake: + + - AM_PROG_AR must now be called *before* AC_PROG_CC; this wasn't the + case before, and it turns out there are packages in the wild that + relied on the old behaviour. + + - The cross-referenced requirements and macro rewrites juggled among + AC_PROG_CC, AC_PROG_CC_C_O and AM_PROG_CC_C_O caused warnings in + autoconf; for example, in our test 't/libobj3.sh', we could see + warnings like these (here slightly tweaked for legibility): + + configure.ac:5: AC_REQUIRE: `AC_PROG_CC' expanded before required + autoconf/c.m4:567: AC_PROG_CC_C_O is expanded from... + autoconf/c.m4:429: AC_LANG_COMPILER(C) is expanded from... + autoconf/lang.m4:329: AC_LANG_COMPILER_REQUIRE is expanded from... + autoconf/general.m4:2606: AC_COMPILE_IFELSE is expanded from... + m4sugar/m4sh.m4:639: AS_IF is expanded from... + autoconf/general.m4:2031: AC_CACHE_VAL is expanded from... + autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from... + aclocal.m4:70: AM_PROG_AR is expanded from... + configure.ac:5: the top level + + ** Fix all of that: + + We fix all of the described issues with a new internal m4 macro + _AM_PROG_CC_C_O (inspired to, but not based on, AC_PROG_CC_C_O) that + gets tacked on to AC_PROG_CC automatically (this is done in the + Automake-generated aclocal.m4) and that takes care of checking and + adjusting '$CC' for "-c -o" support. + + The macro AM_PROG_CC_C_O is still present, but is now just a thin + wrapper around such Automake-enhanced AC_PROG_CC. + + It is worth noting that the present patch causes three slight + *backward-incompatibilities*: + + 1. The name cache variable used by AM_PROG_CC_C_O is no longer + computed (at configure runtime!) from the content of '$CC', + but is statically defined as 'am_cv_prog_cc_c_o'. + + 2. 'cc' is no longer checked by AM_PROG_CC_C_O, only '$CC' is. + + 3. AM_PROG_CC_C_O no longer AC_DEFINE the C preprocessor symbol + 'NO_MINUS_C_MINUS_O'. + + Given however that the third change can easily be worked around, that + the first two changes can be legitimately seen as bug fixes, and that + the new semantics introduced by such changes will simplify the transition + to Automake 2.0 (when the 'subdir-objects' will always be enabled + unconditionally), we believe they are acceptable to be shipped with + Automake 1.14. + + With this patch, we also revert some of the testsuite adjustments done + in previous commit v1.13.2-178-g9877109 of 2013-05-24 (compile: rewrite + AC_PROG_CC with AM_PROG_CC_C_O contents). Such adjustments are no longer + needed. + + * m4/minuso.m4 (_AM_PROG_CC_C_O): New internal macro, basically and + adjusted version of a merge between Autoconf-provided AC_PROG_CC_C_O + and our old implementation of AM_PROG_CC_C_O. + (AM_PROG_CC_C_O): Redefine as a simple wrapper around AC_PROG_CC. + * m4/init.m4 (AC_PROG_CC): Append _AM_PROG_CC_C_O, not AM_PROG_CC_C_O, + to the pre-existing expansion of this macro. + * m4/ar-lib.m4 (AM_PROG_AR): No longer require it to be expanded after + AC_PROG_CC. + * t/aclocal-deps.sh: Move AC_PROG_CC invocation after AC_PROG_RANLIB + and AM_PROG_AR invocations. Things should work this way too (as they + used to). + * t/subobj-clean-lt-pr10697.sh: Likewise. + * t/alloca.sh: Move AC_PROG_CC invocation after AM_PROG_AR invocation. + * t/condlib.sh: Likewise. + * t/aclocal-deps.sh: Move AC_PROG_CC invocation after LT_INIT and + AM_PROG_AR invocations. Make autoconf and autoheader warnings fatal. + * t/am-prog-cc-c-o.sh: Adjust to the new semantics, enhance a little, + and reduce code duplication. + * t/ccnoco.sh: Make autoconf warnings fatal. + * t/subpkg.sh: Likewise. + * t/ccnoco-lib.sh: Likewise, and fix a comment. + * t/link_cond.sh: Enhance a couple of error messages. + * configure.ac: Drop "nullification" of AM_PROG_CC_C_O. + * NEWS: Adjust. + +2013-05-24 Stefano Lattarini + + compile: rewrite AC_PROG_CC with AM_PROG_CC_C_O contents + + This is a much simpler rewrite than the one we attempted in the past, + and that was later removed by commit 'v1.13.1d-137-g32eb770' of + 2013-05-11 (compile: avoid AC_PROG_CC messy rewrite). + + Not only this change simplifies the code a little, but has the welcome + collateral effect of making automatic dependency tracking work better + with compilers that doesn't grasp the '-c' and '-o' options together. + Issues in that setup have been caught by several failures in the target + 'check-no-cc-c-o'. + + Unfortunately, this change has less welcome collateral effects: + + 1. AM_PROG_AR must now be called *after* AC_PROG_CC; + + 2. Autoconf emits extra warnings when used with Automake-generated + aclocal.m4. + + These are unacceptable regressions for a release, but since we are + going to fix them soon enough in a follow-up patch (surely to be + applied before Automake 1.14 is released) we don't worry too much. + + * m4/init.m4: Redefine AC_PROG_CC early, to automatically invoke + AM_PROG_CC_C_O as well. Accordingly, drop now-unneeded "automagical" + AM_PROG_CC_C_O expansion at later time (which took place thanks to + a AC_CONFIG_COMMANDS_PRE call). + * m4/minuso.m4 (AM_PROG_CC_C_O): Ensure the expansion of the body + of this macro takes place with C as "current Autoconf language" (use + AC_LANG_PUSH/AC_LANG_POP). + * m4/ar-lib.m4 (AM_PROG_AR): Likewise. Also, require this macro to + be expanded *after* AC_PROG_CC (so that any rewrite of $CC, if required, + has already taken place). + * t/add-missing.tap: Adjust to avoid spurious failures. + * t/aclocal-deps.sh: Likewise, by having AM_PROG_AR called *after* + AC_PROG_CC. + * t/subobj-clean-lt-pr10697.sh: Likewise. + * t/alloca.sh: Likewise. + * t/condlib.sh: Likewise. + * t/discover.sh: Likewise. + * t/objc-megademo.sh: Likewise. + * t/ccnoco.sh: Extend a little. + * t/ccnoco-deps.sh: New test. + * t/ccnoco-lib.sh: Likewise. + * t/ccnoco-lt.sh: Likewise. + * t/list-of-tests.mk: Add them. + +2013-05-24 Stefano Lattarini + + tests: ensure $required is not set too late + + And do so in a safer way, with a runtime check rather than a brittle + static maintainer check. + + * t/ax/test-init.sh: Set the 'required' variable to readonly. + * syntax-checks.mk (sc_tests_required_after_defs): Remove. + (syntax_check_rules): No longer list it. + +2013-05-24 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + tests: use append mode to capture parallel make output + tests: new convenience target 'check-parallel' + +2013-05-24 Stefano Lattarini + + tests: use append mode to capture parallel make output + + This will allow us to run the Automake testsuite forcing all the make + invocations in the test cases to run in parallel mode [1], but without + hitting the spurious failure reported in automake bug#11413. + + See also: + + + The make invocations in the test cases can be forced to run in parallel + mode by, e.g., invoking "make check" like this: + + make check AM_TESTSUITE_MAKE="make -j16" + + The possible spurious failures hinted above are due to the fact that + the redirected output of parallel make can racily lose lines. For + example, if GNU make (3.82) is run with -j10 on a Makefile like this: + + all = 0 1 2 3 4 5 6 7 8 9 + default: $(all) + $(all): + @sleep 0.$$(($RANDOM % 10)); echo $@ + + and has its standard output redirected in overwrite-mode to a regular + file, it looses a line of that output every 15 runs or so on a Fedora + 17 system with 64 ppc64 cores. Redirection in append mode does not + suffer of this problem, as explained here: + + + See also previous commits v1.12-63-g45c1fcd of 2012-05-05 (tests: use + append mode to capture parallel make output) and Release-1-10-280-g6426999 + of 2009-03-10 (Use append mode to capture parallel test output). + + * t/ax/am-test-lib.sh (run_make): Adjust and enhance. + * t/lisp8.sh: Take advantage of the enhancement, nd stop doing output + redirection for $MAKE by hand. + * t/tap-more.sh: Likewise. + * t/parallel-tests-concurrency.sh: Likewise. + +2013-05-24 Stefano Lattarini + + tests: new convenience target 'check-parallel' + + To force the test scripts to invoke make in parallel mode. This should + enhance coverage of use cases (make concurrency) that are becoming more + and more important with today multicore fast machines. + + * Makefile.am (check-parallel): New .PHONY target. + +2013-05-23 Stefano Lattarini + + tests: avoid few lingering $MAKE redirections + + These were present in the 'maint' branch, but not in the 'micro' branch. + Their occurrences has been found by the 'sc_tests_no_run_make_redirect' + maintainer check. + + * t/fort2.sh: Adjust. + * t/preproc-demo.sh: Likewise. + +2013-05-23 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + tests: avoid '$MAKE' redirections, use 'run_make' instead + tests: avoid use of redirected 'run_make' invocations + lint: warn against redirected 'run_make' invocations + comments: next GNU make release 4.0, not 3.83 + tests: fix a potential spurious failure due to global config.site + HACKING: it's OK to do testsuite refactoring in a micro version + +2013-05-23 Stefano Lattarini + + tests: avoid '$MAKE' redirections, use 'run_make' instead + + The use 'run_make' with the -E, -O and -M option, it is more + idiomatic now. Also, this way, centralized fixes and improvements + done in 'run_make' will automatically propagate through most of + the testsuite. + + * syntax-checks.mk (sc_tests_no_run_make_redirect): Also check against + '$MAKE' invocations that uses output redirections (and not only against + 'run_make' invocation that do so). + * Several tests: Adjust (and few minor cosmetic changes as well, while + at it). + +2013-05-22 Stefano Lattarini + + tests: avoid use of redirected 'run_make' invocations + + Instead, properly use the -E, -O, or -M options of run_make. + The occurrences of the 'run_make' invocations using output + redirection has been found by the recently-introduced maintainer + check 'sc_tests_no_run_make_redirect'. + + * t/ax/tap-summary-aux.sh: Adjust. + * t/ax/testsuite-summary-checks.sh: Likewise. + * Several other tests: Likewise. + +2013-05-22 Stefano Lattarini + + lint: warn against redirected 'run_make' invocations + + The testsuite shell function 'run_make()' has the three options + -E, -O and -M to perform the various kind of output redirections, + so the test scripts should use them instead of redirecting the + output "by hand": + + run_make ARGS >stdout => run_make -O ARGS + run_make ARGS >stderr => run_make -E ARGS + run_make ARGS >stdout 2>stderr => run_make -O -E ARGS + run_make ARGS >output 2>&1 => run_make -M ARGS + + See the commit message of v1.13.2-13-gc7cfa09, 2013-05-22 + (tests: run_make: options to do command redirection) for an + explanation of why this is a good idea. + + It's worth noting that the present patch only introduced a new + static maintainer check looking against the undesired idioms, + but doesn't yet remove usages of such idioms from the testsuite. + That will be done by follow-up patch(es). + + * syntax-checks.mk (sc_tests_no_run_make_redirect): New check. + (syntax_check_rules): List it. + +2013-05-22 Stefano Lattarini + + comments: next GNU make release 4.0, not 3.83 + + See: + + * lib/am/header-vars.am (am__make_running_with_option): Adjust + comments. + +2013-05-22 Stefano Lattarini + + tests: fix a potential spurious failure due to global config.site + + * t/instdir-no-empty.sh: Here. + +2013-05-22 Stefano Lattarini + + HACKING: it's OK to do testsuite refactoring in a micro version + + Reported-by: Peter Rosin + +2013-05-22 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + tests: remove some code duplication + cosmetics: remove a couple of extra whitespaces in tests + tests: two minor fixups + +2013-05-22 Stefano Lattarini + + tests: remove some code duplication + + * t/ax/am-test-lib (null_install): New function. + * t/instdir-java.sh: Use it instead of copied & pasted code. + * t/instdir-lisp.sh: Likewise. + * t/instdir-ltlib.sh: Likewise. + * t/instdir-prog.sh: Likewise. + * t/instdir-python.sh: Likewise. + * t/instdir-texi.sh: Likewise. + * t/instdir.sh: Likewise. + * t/instdir2.sh: Likewise. + +2013-05-22 Stefano Lattarini + + cosmetics: remove a couple of extra whitespaces in tests + + * t/instdir.sh: Here. + * t/instdir2.sh: And here. + +2013-05-22 Stefano Lattarini + + tests: two minor fixups + + * t/make-keepgoing.tap: Here. + * t/parallel-tests-exit-statuses.sh: And here. + +2013-05-22 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + tests: run_make: options to do command redirection + tests: only activate 'unset' alias if required + tests: better idiom to override make macro defs on the cmdline + test-lib: minor style changes + test-lib: fix botched function name in an error message + +2013-05-22 Stefano Lattarini + + tests: run_make: options to do command redirection + + Let's improve the API of the 'run_make()' helper shell function by + adding three new 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 new API has two main advantages. + + 1. Its use will allow us to get rid of more cumbersome idioms + like, e.g., + + $MAKE check >stdout && { cat stdout; exit 1; } + cat stdout + + That can now be substituted with a simpler one: + + run_make -e FAIL -O check + + 2. More importantly, using the new API we will prevent any extra output + from the shell traces of the code in run_make to be redirected along + with the make stderr (where that was redirected). This problem was + present in usages like, e.g., + + run_make TESTS=foo.test check 2>stderr && exit 1 + grep 'expected error message' stderr + + Such usages are now to be rewritten as follows: + + run_make -e FAIL -E TESTS=foo.test check + grep 'expected error message' stderr + + ensuring that 'stderr' won't end up containing unrelated stuff. + + Note that we do not convert in bulk the old idioms and the use of + redirected 'run_make' invocations with this patch. We only convert + some occurrences, to ensure that the new implementation of 'run_make' + is sound enough. More sweeping conversions will likely be done in + follow-up patches. + + * t/ax/am-test-lib.sh (run_make): Enhance and implement the extended API. + * t/tap-xfail-tests.sh: Use the new 'run_make' API. + * t/test-driver-cond.sh: Likewise. + * t/tests-environment-fd-redirect.sh: Likewise. + * t/uninstall-fail.sh: Likewise. + * t/yacc-dist-nobuild.sh: Likewise. + +2013-05-22 Stefano Lattarini + + tests: only activate 'unset' alias if required + + This makes the test logs easier to read for most shells (which do not + actually require that alias). This is especially important now that + 'unset' is used in the new 'run_make()' function, and that function is + likely going to be used more and more in the future. + + * t/ax/test-lib.sh (_am_unset, unset): Only define this function and + alias if "unset VAR" returns a non-zero exit status when VAR is already + unset. + +2013-05-22 Stefano Lattarini + + tests: better idiom to override make macro defs on the cmdline + + We now do so with a new wrapper shell function 'run_make()', which + relies on the use of AM_MAKEFLAGS, avoiding the use of the '-e' make + option. The use of that option (that causes the environment variables + to take precedence over the macro definitions in the Makefile) has + proved to be quite brittle in the past, causing annoying and sometimes + problematic spurious failures. This has worsened in some still + unpublished work going on in development branches. It's time to solve + the issue once and for all. + + Note that we do not convert all uses of $MAKE in the testsuite right + away; we might do so in follow-up changes, with leisure, to avoid a + "patch bomb" effect (this commit is already too much of a bomb itself). + What we do in this commit is to get rid of all "$MAKE -e" invocations. + + We admit that the implementation and feature-set of 'run_make()' are + far from perfect, but good enough for our current purposes. We'll + improve 'run_make()' if and when the need arises. + + * syntax-checks.mk (sc_tests_no_make_e): New syntax check, guard against + the use of "$MAKE -e". + (syntax_check_rules): Add it. + (sc_tests_overriding_macros_on_cmdline): Adjust. + (lint): New, alias for 'maintainer-check', for lazy typists. Idea + backported from the 'maint' branch (Automake 1.13a). + * t/ax/am-test-lib.sh (run_make): New function. Run $MAKE with the + given command-line arguments, handling command-line override of variable + definitions in a smart way (using AM_MAKEFLAGS if a non-GNU make + implementation is detected to be in use). + (useless_vpath_rebuild): Adjust to use 'run_make', to avoid a spurious + maintainer check failure. + (yl_distcheck): Use 'run_make' rather than bare '$MAKE'. + (single_quote, append_single_quoted, is_valid_varname): New auxiliary + function, used, directly or indirectly, by it. + * Many tests: Adjust to avoid the use of "$MAKE -e", and prefer the + use of 'run_make' in few other contexts as well, where it makes sense. + Other minor fixlets while at it. + +2013-05-20 Stefano Lattarini + + test-lib: minor style changes + + * t/ax/am-test-lib.sh (require_tool): Here. + +2013-05-20 Stefano Lattarini + + test-lib: fix botched function name in an error message + + * t/ax/am-test-lib.sh (useless_vpath_rebuild): Here. + +2013-05-20 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + maintcheck: minor tweaks and fixlets + +2013-05-20 Stefano Lattarini + + maintcheck: minor tweaks and fixlets + + * syntax-checks.mk: Here. + +2013-05-19 Stefano Lattarini + + tests: fix a spurious failure on NetBSD 5.1 + + * t/dist-shar.sh ($required): Also require the 'unshar' program. + Apparently, NetBSD has a 'shar' program but not the corresponding + 'unshar' one. + +2013-05-19 Stefano Lattarini + + texi: build version.texi and stamp-vti in srcdir + + Do so even when the 'info-in-builddir' option is present, or when + the corresponding '*.info' files are listed in $(CLEANFILES) or in + $(DISTCLEANFILES). + + This fixes failures in the following tests, when they are run with + $MAKE pointing to FreeBSD make: + + - txinfo-nodist-info.sh + - txinfo23.sh + - txinfo24.sh + - txinfo28.sh + - txinfo25.sh + + BTW, notice that the test 'txinfo-builddir.sh' fails with FreeBSD make + as well, but that is due to a known FreeBSD make VPATH issue (the same + described in automake bug#7884). But that is not a regression, since + the 'info-in-builddir' option will be new in Automake 1.14. Moreover, + we already warn in the manual that the use of that option can indeed + cause problems with VPATH builds done by non-GNU make. + + * bin/automake.in (handle_texinfo_helper): New local variable + '$soutdir'. Use it instead of '$outdir' where appropriate (in + particular, in the transform used on file 'texi-vers.am'. + * t/txinfo-builddir.sh: Adjust to avoid spurious failures. + +2013-05-19 Stefano Lattarini + + tests: fix a botched heading comment + + * t/parallel-tests-recheck-pr11791.sh: Here. + +2013-05-19 Stefano Lattarini + + tests: fix another spurious with FreeBSD make + + * t/parallel-tests-recheck-pr11791.sh: Here. + +2013-05-19 Stefano Lattarini + + tests: fix a spurious failure with FreeBSD make + + Failures due to known VPATH support issues in that make implementation + (the same issues that have been causing the long-standing bug#7884). + + * t/lex-multiple.sh: Adjust. + +2013-05-18 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + lisp: fix a failure with Solaris /usr/xpg4/bin/sh + tests: sanitize 'unset' usages + tests: fix some botched/outdated comments + tests: use perl, not find+rm, to remove temporary directories + +2013-05-18 Stefano Lattarini + + lisp: fix a failure with Solaris /usr/xpg4/bin/sh + + * lib/am/lisp.am (.el.elc): By initializing the 'am__dir' properly + here. For most shells, the lacking initialization, while technically + incorrect, didn't cause any issue in practice, because in those shells + "test -d" returns an exit status of 0. But with /usr/xpg4/bin/sh, the + shell complains like this: "test: argument expected", and returns a + non-zero exit status. This caused testsuite failures in several lisp + tests. + Also, while we are at it, use more proper quoting in the recipe, to + ensure a missing initialization to now be caught by more forgiving + shells as well. + * NEWS: Update. + +2013-05-17 Stefano Lattarini + + tests: sanitize 'unset' usages + + 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. So far, we've avoided spurious failures + by either explicitly ignoring the exit status from unset: + + unset VAR || : + + or explicitly ensuring that a variable is set, before trying to + unset it: + + VAR=; unset VAR + + But we can do better, by aliasing the 'unset' command to a custom + function that will take care of these details for us. This will + avoid us annoying spurious failures in the future, failures that + have already bitten us too much times. For an example, refer to + commit 'v1.12.2-88-g5b1dae5' of 2012-08-05 (tests: avoid tons of + spurious failures on NetBSD). + + * t/ax/test-lib.sh (_am_unset): New function. + (unset): New alias to it. + (_am_exit): Adjust comments. + * t/ax/am-test-lib.sh: No need to temporary disable the 'errexit' + shell flag when unsetting variables that are potentially already + unset. + (am_process_requirements): Adjust to remove a now-useless + workaround related to unset. + * t/aclocal-macrodir.tap: Likewise. + * t/aclocal-macrodirs.tap: Likewise. + * t/auxdir-autodetect.sh: Likewise. + * t/ax/am-test-lib.sh: Likewise. + * t/ax/test-lib.sh: Likewise. + * t/check-tests-in-builddir.sh: Likewise. + * t/dist-formats.tap: Likewise. + * t/distcheck-configure-flags-am.sh: Likewise. + * t/distcheck-configure-flags.sh: Likewise. + * t/java-empty-classpath.sh: Likewise. + * t/javaflags.sh: Likewise. + * t/lflags.sh: Likewise. + * t/lflags2.sh: Likewise. + * t/lisp-flags.sh: Likewise. + * t/lisp6.sh: Likewise. + * t/missing-auxfile-stops-makefiles-creation.sh: Likewise. + * t/parallel-am.sh: Likewise. + * t/parallel-am2.sh: Likewise. + * t/parallel-am3.sh: Likewise. + * t/parallel-tests-log-override-recheck.sh: Likewise. + * t/pkg-config-macros.sh: Likewise. + * t/python-missing.sh: Likewise. + * t/python-too-old.sh: Likewise. + * t/python11.sh: Likewise. + * t/self-check-dir.tap: Likewise. + * t/self-check-report.sh: Likewise. + * t/self-check-seq.tap: Likewise. + * t/silent-configsite.sh: Likewise. + * t/suffix6c.sh: Likewise. + * t/tar-override.sh: Likewise. + * t/tests-environment-and-log-compiler.sh: Likewise. + * t/vala-configure.sh: Likewise. + * t/werror3.sh: Likewise. + * t/yflags-cmdline-override.sh: Likewise. + * t/yflags.sh: Likewise. + * t/yflags2.sh: Likewise. + +2013-05-17 Stefano Lattarini + + tests: fix some botched/outdated comments + + * t/ax/test-defs.in: Here. Also, fix a couple of grammaros while at it. + +2013-05-16 Stefano Lattarini + + tests: use perl, not find+rm, to remove temporary directories + + The File::Path::rmtree function from perl, if used right, is + more reliable and more portable of our past idiom: + + find $dirs -type d ! -perm -700 -exec chmod u+rwx {} ';'; + rm -rf $$dirs || exit 1 + + at least of the face of unreadable dirs/files and other similar + permission issues (and we have those in our test directories). + + In fact, this change fixes some spurious failures seen in + "make distcheck" on Solaris 10. + + * t/ax/deltree.pl: New. + * Makefile.am (EXTRA_DIST): Add it. + (clean-local-check): Use it. + * t/ax/test-lib.sh (rm_rf_): Use it. + +2013-05-16 Stefano Lattarini + + tests: remove remaining exec bits ('maint' branch) + + The executable bit gives the impression that the tests are directly + runnable, as with "./t/foo.sh", but it has been a while since that + was the case. Today, tests are runnable only through "make check" + or "./runtest". + + This change is for the 'maint' branch (automake 1.13a), and is a + follow-up to commit 'v1.13.2-3-g74017b5', done on the 'micro' branch + (automake 1.13.2a). It will soon be followed by a similar patch + for the 'master' branch (automake 1.99a). + + * t/am-prog-cc-c-o.sh: Remove executable bit. + * t/ccnoco4.sh: Likewise. + * t/dist-shar.sh: Likewise. + * t/dist-tarZ.sh: Likewise. + * t/lex-multiple.sh: Likewise. + * t/preproc-basics.sh: Likewise. + * t/preproc-c-compile.sh: Likewise. + * t/preproc-demo.sh: Likewise. + * t/preproc-errmsg.sh: Likewise. + * t/rm-f-probe.sh: Likewise. + * t/self-check-cc-no-c-o.sh: Likewise. + * t/txinfo-builddir.sh: Likewise. + * t/txinfo-nodist-info.sh: Likewise. + +2013-05-16 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + tests: remove exec bit from all of them ('micro' branch) + maint: tests no longer need to have executable bit set + +2013-05-16 Stefano Lattarini + + tests: remove exec bit from all of them ('micro' branch) + + It gives the impression that they are directly runnable, as with + "./t/foo.sh", but it has been a while since that was the case. Today, + tests are runnable only through "make check" or "./runtest". + + This change is for the 'micro' branch (automake 1.13.2a). It will + soon be followed by similar patches for the 'maint' branch (automake + 1.13a) and the 'master' branch (automake 1.99a). + + * t/*.sh, t/*.tap: Remove executable bit. + * maint.mk (sc_tests_executable): Remove. + (syntax_check_rules): Adjust. + * gen-testsuite-part: Set permissions of generated tests to + '444' (-r--r--r--), rather than 555 (-r-xr-xr-x). + +2013-05-16 Stefano Lattarini + + maint: tests no longer need to have executable bit set + + It has been a while since they are runnable only through "make check" + or "./runtest", and not directly. + + * HACKING: Adjust. + * t/README: Likewise, and updated the surrounding text to get rid of + obsolete statements and advices. + +2013-05-16 Stefano Lattarini + + PLANS: subdir-objects: various updates + +2013-05-15 Stefano Lattarini + + Merge branch 'micro' into maint + + * micro: + post-release: micro version bump (1.13.2a) + release: stable micro release 1.13.2 + vala tests: skip in a cross compiler setup + HACKING: miscellaneous fixes, updates and enhancements + NEWS: minor improvements to wording (about new versioning scheme) + +2013-05-15 Stefano Lattarini + + post-release: micro version bump (1.13.2a) + + * configure.ac, m4/amversion.m4: Bump version: 1.13.2 -> 1.13.2a + +2013-05-15 Stefano Lattarini + + release: stable micro release 1.13.2 + + * configure.ac (AC_INIT): Bump version number to 1.13.2. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2013-05-15 Stefano Lattarini + + vala tests: skip in a cross compiler setup + + The "vala + pkg-config" doesn't interact well with cross-compilation: + + + That is causing annoying failures in our testsuite when it's run in + cross-compilation mode. It's not worth trying too be overly smart and + work around these problems; just skip the affected tests instead. + + * t/ax/am-test-lib.sh (require_tool): A new requirement 'valac', telling + that the test needs to compile Vala-generated C files. In particular, + this causes the test to be skipped when using a cross-compiler. + +2013-05-15 Stefano Lattarini + + HACKING: miscellaneous fixes, updates and enhancements + +2013-05-15 Stefano Lattarini + + NEWS: minor improvements to wording (about new versioning scheme) + +2013-05-15 Stefano Lattarini + + THANKS: update Akim's e-mail address + +2013-05-15 Stefano Lattarini + + tests: less uses of "make -e"; avoid spurious failures in 'check-cc-no-c-o' + + That is, when the testsuite is run using a fake C compiler that doesn't + grasp the '-c' and '-o' options together. + + * t/instdir-prog.sh: Adjust. + * t/instdir-ltlib.sh: Likewise. + * t/python-virtualenv.sh: Likewise. + +2013-05-14 Stefano Lattarini + + build: be more respectful of user-specified verbosity + + * t/Makefile.in (check-cc-no-c-o, check-no-trailing-backslash-in-recipes, + installcheck-testsuite, perf): Here. + +2013-05-14 Stefano Lattarini + + check-cc-no-c-o: unify initializations in a single place + + * t/ax/test-defs.in: That is, by setting CC and GNU_CC here, in accord + with the value of the variable 'AM_TESTSUITE_SIMULATING_NO_CC_C_O'. + * t/Makefile.in (check-cc-no-c-o) : No need to reset CC and GNU_CC any + longer in the recursive "make check" invocation. + +2013-05-14 Stefano Lattarini + + check-cc-no-c-o: avoid a spurious failure + + * t/am-prog-cc-c-o.sh: In this test, by relying on the knowledge + that we are running under the aegis of the 'check-cc-no-c-o' + maintainer-specific target, knowledge given us by ... + * t/Makefile.in (check-cc-no-c-o) : ... the new environment + variable 'AM_TESTSUITE_SIMULATING_NO_CC_C_O', set to a value + of "yes" by this rule. + * t/ax/test-defs.in: Initialize the new variable to "no" by + default, and add an explanatory comment. + +2013-05-14 Stefano Lattarini + + build: fixup for building in a VPATH setup + + * bin/Makefile.inc (%D%/automake, %D%/aclocal): Make sure that the + directory where the targets scripts are going to be built exists, + before trying to create said scripts. + +2013-05-11 Nick Bowler (tiny change) + + Use AC_DEFUN_ONCE to define AM_PROG_CC_C_O + + If AM_PROG_CC_C_O is expanded multiple times, and the compiler does not + support -c and -o together, each expansion of the macro will prepend + the compile script to CC. This can result in the compile script + invoking the compile script, which at best pointless and silly. + Fortunately, there does not appear to be any serious problems as the + first compile invocation strips out -o options, causing subsequent + invocations of the script to merely exec their arguments. + + Other than fixing the above, this should not normally cause any changes + to the resulting configure script, except in the (hopefully rare) case + where AM_PROG_CC_C_O is directly expanded (i.e., *not* using AC_REQUIRE) + in the body of a macro defined with AC_DEFUN. In that case, the use of + AC_DEFUN_ONCE may cause the expansion of AM_PROG_CC_C_O to appear + earlier in the configure script. + + * m4/minuso.m4: Change the definition of AM_PROG_CC_C_O to use + AC_DEFUN_ONCE, avoiding problems caused by multiple expansions. + +2013-05-11 Stefano Lattarini + + compile: avoid AC_PROG_CC messy rewrite + + Instead, add an hook to AC_OUTPUT to have AM_PROG_CC_C_O invoked + automatically. + + See also the long-winded discussion about automake bug#13378. + + * m4/minuso.m4 (AM_PROG_CC_C_O): Bring back the old implementation, + from commit v1.13.1-55-g1ab8fb6. + * m4/init.m4 (AC_PROG_CC): Remove this horrible, hacky re-write. + * (AM_INIT_AUTOMAKE): Arrange for AM_PROG_CC_C_O to be called if + necessary. + * t/am-prog-cc-c-o.sh: Adjust to avoid spurious failure. + * t/subobj.sh: Likewise. + + Suggested-by: Nick Bowler + +2013-05-11 Stefano Lattarini + + options: tiny simplification in dealing with incompatible versions + + * lib/Automake/Options.pm (_process_option_list): Here, when an + incompatible version number option is detected, there's no need + to call error() with the "uniq_scope => US_GLOBAL" switch. + In fact, if the same incompatible version number is specified in + AUTOMAKE_OPTIONS in both (say) 'Makefile.am' and 'sub/Makefile.am', + we want each such erroneous usage reported separately, rather than + just the first time it is encountered (as we'd expect to happen + when "uniq_scope => US_GLOBAL" is used). + Ideally, this change should have been folded into the similar + commit 'v1.13.1d-129-gf7ef16f', but we noticed that too late. + Oh well. + +2013-05-11 Stefano Lattarini + + options: try to report as much errors as possible + + For example, if two invalid options are used in AUTOMAKE_OPTIONS, don't + report just the first one, but both of them. + + * lib/Automake/Options.pm (_process_option_list): Do so by avoiding + early returns in here. + +2013-05-11 Stefano Lattarini + + Merge branch 'branch-1.13.2' into maint + + * branch-1.13.2: + warns: don't tell AM_PROG_MKDIR_P is going to be removed + +2013-05-10 Stefano Lattarini + + warns: don't tell AM_PROG_MKDIR_P is going to be removed + + That is no longer true. For a more extended rationale, see file + 'PLANS/obsolete-removed/am-prog-mkdir-p.txt' in the maint branch + (as of commit v1.13.1d-132-g90ec3fe). + + * automake.in (scan_autoconf_traces): So adjust the warning message + here. + +2013-05-10 Stefano Lattarini + + refactor: fix few "inverted boolean" usages + + In some subroutines, we used a return value of 0 to indicate success, + and a return status of 1 to indicate failure. That was not very + consistent with the perl interpretation of 0 as a false value and 1 as + a true value. So we now invert the meaning of the exit statuses. + + * lib/Automake/Options.pm (_process_option_list): Here. + (process_global_option_list, process_option_list): And by reflex, + here as well. + * bin/automake.in (handle_options): And here. + (generate_makefile, scan_autoconf_traces): Adjust. + +2013-05-10 Stefano Lattarini + + options: better name for an internal function + + * lib/Automake/Options.pm (_option_must_be_from_configure): Rename ... + (_option_is_from_configure): ... like this. + +2013-05-10 Stefano Lattarini + + options: more consistency in use of return statuses to report errors + + * lib/Automake/Options.pm (_option_must_be_from_configure): By giving + a proper return status here. + (_process_option_list): And using it here. + +2013-05-10 Stefano Lattarini + + options: tiny simplification in dealing with erroneous opts + + * lib/Automake/Options.pm (_process_option_list): Here, when an + invalid option is detected, there's no need to call &error with + the "uniq_scope => US_GLOBAL" switch. In fact, if the same + erroneous option is specified in AUTOMAKE_OPTIONS in both (say) + 'Makefile.am' and 'sub/Makefile.am', we want each such erroneous + usage reported separately, rather than just the first time it is + encountered (as happens when "uniq_scope => US_GLOBAL" is used). + +2013-05-10 Stefano Lattarini + + options: consistently use return statuses to report errors + + * lib/Automake/Options.pm (_process_option_list): Here. + (process_option_list, process_global_option_list): Remove + redundant use of 'return'. + +2013-05-10 Stefano Lattarini + + options: re-enable some sanity checks + + They had been unwittingly disabled by a slightly incorrect + code ordering. + + * lib/Automake/Options.pm (process_option_list): Here. + (process_global_option_list): And here. + +2013-05-10 Stefano Lattarini + + THANKS: update Eric Blake's e-mail address + +2013-05-10 Stefano Lattarini + + NEWS: typofix + + Reported-by: Eric Blake + +2013-05-10 Stefano Lattarini + + news: document new 'subdir-objects' warning + + * NEWS: Automake 1.14 will warn if a subdir source file is + specified but the 'subdir-objects' option is not given. This + is done to smooth the transition to Automake 2.0, which will + unconditionally assume the behaviour now given only with the + 'subdir-objects' option. + +2013-05-10 Stefano Lattarini + + PLANS: one minor fixlet (mostly cosmetic) + +2013-05-10 Stefano Lattarini + + PLANS: we have already dropped support for split info files in master + +2013-05-10 Stefano Lattarini + + NEWS: fix a reference to Automake 1.14 where Automake 2.0 was intended + +2013-05-10 Stefano Lattarini + + PLANS: fix reference to non-existent 'next' branch + + * PLANS/obsolete-removed/configure.in.txt: Here. We should refer + to the 'master' branch instead. + +2013-05-10 Stefano Lattarini + + PLANS: fix botched version reference + + * PLANS/rm-f-without-args.txt: Here. The probe checking that "rm -f" + without arguments works will be introduced in Automake 1.14, not in + Automake 1.13.2. + +2013-05-10 Stefano Lattarini + + maintcheck: fix two references to old location of aclocal and automake + + * maintainer/syntax-checks.mk (sc_perl_at_substs): Here: it should + refer to 'bin/automake' and 'bin/aclocal', not 'automake' and + 'alocal'. + +2013-05-10 Stefano Lattarini + + dist: deprecated shar and tar+compress formats + + See also discussion about automake wishlist bug#13324. + + * lib/Automake/Options.pm: Give proper warnings in the 'obsolete' + category if the 'dist-shar' or 'dist-tarZ' options are used. + * lib/distdir.am: When the 'dist-tarZ' or 'dist-shar' targets are + invoked, make them give a non-fatal warning. + * doc/automake.texi: Report the new deprecations. + * t/dist-shar.sh: New test. + * t/dist-tarZ.sh: Likewise. + * t/lzma.sh: While at it, rename ... + * t/dist-lzma.sh: ... like this, and tweak it to keep more in + sync with the new tests. + * t/dist-formats.tap: Remove references to deprecated formats. + * t/list-of-tests.mk: Adjust. + +2013-05-10 Stefano Lattarini + + Merge branch 'dog-feeding' into maint + + * dog-feeding: + build: move automake and aclocal in 'bin' subdir + build: break up monolithic Makefile.am in subdir-specific fragments + +2013-05-10 Stefano Lattarini + + Merge branch 'branch-1.13.2' into maint + + * branch-1.13.2: + automake: typofix in comments: s/AC_CONFIG_HEADER/AC_CONFIG_HEADERS/ + +2013-05-10 Stefano Lattarini + + automake: typofix in comments: s/AC_CONFIG_HEADER/AC_CONFIG_HEADERS/ + +2013-05-10 Stefano Lattarini + + am: prefer a shorter idiom where possible + + That is, prefer: + + test -f FILE || do_action + + over: + + if test ! -f FILE; then do_action; else :; fi + + * lib/am/remake-hdr.am (%CONFIG_H%): Here. + +2013-05-10 Stefano Lattarini + + Merge branch 'branch-1.13.2' into maint + + * branch-1.13.2: + cosmetics: fix few typos, grammaros and missing whitespace + fixup: remove an obsolete comment + docs: we still don't have the promised better Java interface + +2013-05-10 Stefano Lattarini + + cosmetics: fix few typos, grammaros and missing whitespace + + * lib/am/*.am: In comments in some of these files. + +2013-05-10 Stefano Lattarini + + fixup: remove an obsolete comment + + * lib/am/header-vars.am (am__make_running_with_option): Here. + +2013-05-09 Stefano Lattarini + + docs: we still don't have the promised better Java interface + + Reported by Michael Zucchi: + + + See also automake bug#9088. + + * doc/automake.texi (Java): Adjust and clarify. + * THANKS: Update. + + Reported-by: Michael Zucchi + +2013-05-09 Stefano Lattarini + + maint: re-run "make update-copyright" ... + + * t/lex-multiple.sh: ... which updates the copyright years + of this test (they were somehow not bumped in the past). + +2013-05-09 Stefano Lattarini + + tests: avoid spurious failure with older flex (2.5.4) + + That old version is unfortunately still relevant, being the one + installed on NetBSD 5.1. + + * t/lex-multiple.sh: Use the '-o' option rather than the longer + equivalent '--outfile'. The latter is not supported by older + versions of flex (e.g., flex 2.5.4). + +2013-05-09 Stefano Lattarini + + Merge branch 'branch-1.13.2' into maint + + * branch-1.13.2: + announcement: cater to more flexible NEWS format + +2013-05-09 Stefano Lattarini + + announcement: cater to more flexible NEWS format + + * maint.mk (announcement): Here, be prepared to handle the case + in which the first section of the NEWS file is dedicated to report + future backward-incompatibilities and/or other warnings. + +2013-05-09 Stefano Lattarini + + build: move automake and aclocal in 'bin' subdir + + * automake.in: Rename ... + * bin/automake.in: ... like this. + * aclocal.in: Rename ... + * bin/aclocal.in: ... like this. + * Makefile.am: Move parts that dealt with the building/distribution + of aclocal and Automake .. + * bin/Makefile.inc): ... in this new included fragment. Adjust as + needed, and make deliberate use of the '%D%' substitution. + * lib/gen-perl-protos: Move ... + * bin/gen-perl-protos: ... here. + * bootstrap.sh, configure.ac, maintainer/rename-tests, + t/wrap/aclocal.in, t/wrap/automake.in, doc/Makefile.inc, + t/ax/tap-setup.sh, .gitignore: Adjust. + * maintainer/syntax-checks.mk: Likewise, and enhance a little. + +2013-05-09 Stefano Lattarini + + build: break up monolithic Makefile.am in subdir-specific fragments + + This is convenient to do, now that we have improved "relative directory" + support with the '%reladir%' (a.k.a. '%D%') and '%canon_reladir%' (a.k.a. + '%C%') Automake-time substitutions for included makefile fragments. + + This move also satisfy our philosophy of using new Automake features in + our own build system, as a way of facilitating early discovery of possible + bugs or interface warts. + + * Makefile.am: Break up ... + * doc/Makefile.inc, lib/Automake/Makefile.inc, lib/Makefile.inc, + lib/am/Makefile.inc, m4/Makefile.inc, t/Makefile.inc): ... in this + new included fragments. Adjust as needed, and make deliberate use + of the '%D%' substitution. + * contrib/t/local.am: Rename ... + * contrib/t/Makefile.inc: ... like this. + +2013-05-05 Stefano Lattarini + + maint branch: we are going to become Automake 1.14 + + * configure.ac (AC_INIT): So adjust beta version in here, from + 1.13.2a to 1.13a. + * m4/amversion.m4: Regenerate. + +2013-05-05 Stefano Lattarini + + Merge branch 'branch-1.13.2' into maint + + * branch-1.13.2: + maint: version bump after beta release 1.13.1d + release: beta release 1.13.1d (will become 1.13.2) + NEWS: document more robust handling/recognition of make options + +2013-05-05 Stefano Lattarini + + maint: version bump after beta release 1.13.1d + + * configure.ac (AC_INIT): Bump version number to 1.13.1e. + * m4/amversion.m4: Likewise (autoupdated by "make bootstrap"). + +2013-05-04 Stefano Lattarini + + release: beta release 1.13.1d (will become 1.13.2) + + * configure.ac (AC_INIT): Bump version number to 1.13.1d. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2013-05-04 Stefano Lattarini + + NEWS: document more robust handling/recognition of make options + +2013-05-04 Stefano Lattarini + + tests: typofixes in comments in t/preproc-c-compile.sh + +2013-05-04 Stefano Lattarini + + tests: remove bashism from a test + + * t/preproc-c-compile.sh (Makefile.am): Use "test foo = bar", not the + bash-specific "test foo == bar". + +2013-05-04 Stefano Lattarini + + Merge branch 'branch-1.13.2' into maint + + * branch-1.13.2: + maint: targets and recipes to simplify testing on real-world packages + build: preparatory refactoring + build: tiny reduction in code duplication + make flags analysis: handle more options with args + make flags analysis: use simpler variable names + make flags analysis: whitespace changes + make flags analysis: embed in a subshell + make flags analysis: be more robust + make flags analysis: cater to GNU make 3.83 (still unreleased as of now) + tests: expose weaknesses in make flags analysis + tests: improve debugging output in checks on make flags analysis + make flags analysis: refactor, to reduce code duplication + tests: avoid one tricky use of "make -e" + tests: avoid a spurious error with Solaris make + subdirs: don't return false positives for the '-k' option's presence + header-vars: recognize more make flags ('-k' in particular) + header-vars: simplify how make flags are determined + tests: remove dead code from t/make-dryrun.tap + header-vars: new variable $(am__running_with_option) + tests: expose bug#12554 (false positives for presence of '-k' make option) + +2013-05-04 Stefano Lattarini + + Merge 'better-makeflags-recognition' and 'testing-work' into branch-1.13.2 + + * better-makeflags-recognition: + make flags analysis: handle more options with args + make flags analysis: use simpler variable names + make flags analysis: whitespace changes + make flags analysis: embed in a subshell + make flags analysis: be more robust + make flags analysis: cater to GNU make 3.83 (still unreleased as of now) + tests: expose weaknesses in make flags analysis + tests: improve debugging output in checks on make flags analysis + make flags analysis: refactor, to reduce code duplication + + * testing-work: + maint: targets and recipes to simplify testing on real-world packages + build: preparatory refactoring + build: tiny reduction in code duplication + +2013-05-04 Stefano Lattarini + + maint: targets and recipes to simplify testing on real-world packages + + We introduce a new section in the maintainer-specific makefile that + contains recipes to test the build system of some well-known GNU + packages with the current development version of Automake. Not the + cleanest way to do so, but good enough for the moment. We'll revisit + the matter after the 1.13.2 release (which we now hope will happen + soon). + + * maint.mk (git-sv-host): New. + (SV_GIT_CF, SV_GIT_AC, SV_GIT_GL): Use it to reduce code duplication. + (ALL_PACKAGES, FEW_PACKAGES): New, lists of GNU packages to try out. + (ttp-check, ttp-check-all): New targets, do the checking with said + packages. + (ttp): New, alias for 'ttp-check'. + (ttp-all): New, alias for 'ttp-check-all'. + +2013-05-03 Stefano Lattarini + + build: preparatory refactoring + + No semantic change intended. This change will be required + by a later patch. + + * Makefile.am (setup_autotools_paths): New. + ($(srcdir)/doc/amhello-1.0.tar.gz): Use it. + +2013-05-03 Stefano Lattarini + + build: tiny reduction in code duplication + + The code was only duplicated two times, but we are soon going to + need a third occurrence, and that would be one to much. + + * Makefile.am (extend_path): New. + (update_mans): Use it instead of copying & pasting its contents. + ($(srcdir)/doc/amhello-1.0.tar.gz): Likewise, and minor related + adjustments. + +2013-05-03 Stefano Lattarini + + make flags analysis: handle more options with args + + That is, not only -I, but also -O (for upcoming GNU make 3.83), + -l (GNU make), -d, -E, -D, -m (BSD make), -J, -T (NetBSD make). + + * lib/am/header-vars.am (am__make_running_with_option): Extend + and adjust, both code and comments. + +2013-05-03 Stefano Lattarini + + make flags analysis: use simpler variable names + + * lib/am/header-vars.am (am__make_running_with_option): Here. Now + that we expect to be run in a subshell, we don't have to worry about + being namespace-safe. And '$foo' is much more pleasant to read than + '$am__foo' -- and pleasant code tends to be more correct. + (am__make_dryrun, am__make_keepgoing): Adjust. + +2013-05-03 Stefano Lattarini + + make flags analysis: whitespace changes + + * lib/am/header-vars.am (am__make_running_with_option): Here. + No semantic change is intended. + +2013-05-03 Stefano Lattarini + + make flags analysis: embed in a subshell + + So that we won't have to worry about leaking temporary variables, + and similar stuff. + + * lib/am/header-vars.am (am__make_dryrun, am__make_keepgoing): Here. + (am__make_running_with_option): Minor adjustments. + +2013-05-02 Stefano Lattarini + + make flags analysis: be more robust + + In particular, catering to option-with-argument bundled together + with options-without-arguments, as in: + + # With GNU make 3.82: + $ make -f- <<<'all:; echo "$$MFLAGS"' -s -k -I none + -skiI none + + # With development version of GNU make (Git commit b5ea49b): + $ make -f- <<<'all:; @echo "$$MFLAGS"' -I none + -skiI none + + This fixes some lingering failures in the testsuite; precisely, in + tests 'make-dryrun.tap' and 'make-keepgoing.tap'. + + * t/header-vars.am (am__make_running_with_option): Enhance. + +2013-05-02 Stefano Lattarini + + make flags analysis: cater to GNU make 3.83 (still unreleased as of now) + + The current development version of GNU make (that is planned to become + GNU make 3.83, sooner or later) has changed the format its $(MFLAGS) + variable slightly, removing the space between an option and its argument: + + # With GNU make 3.82, compiled from official tarball: + $ make -f- <<<'all:; @echo "$$MFLAGS"' -I none + -I none + + # With development version of GNU make (Git commit b5ea49b): + $ make -f- <<<'all:; @echo "$$MFLAGS"' -I none + -Inone + + This was done on purpose, in order to support more easily the new + option '-O', which takes an optional argument; see: + + + + So Just adapt to the new format as well. + + * t/header-vars.am (am__make_running_with_option): Adjust to cater + to the new GNU make behaviour. + +2013-05-02 Stefano Lattarini + + tests: expose weaknesses in make flags analysis + + This introduces some failures in the testsuite, that will be fixed + soon enough by follow-up patches. + + * t/make-dryrun.tap: Enhance and extend. + * t/make-keepgoing.tap: Likewise. + +2013-05-02 Stefano Lattarini + + tests: improve debugging output in checks on make flags analysis + + * t/make-dryrun.tap: Here. + * t/make-keepgoing.tap: And here. + +2013-05-01 Stefano Lattarini + + make flags analysis: refactor, to reduce code duplication + + And make it a little more reliable. + + * t/header-vars.am (am__make_running_with_option): Here. + +2013-05-01 Stefano Lattarini + + tests: avoid one tricky use of "make -e" + + Which was causing a spurious failure on FreeBSD. Not particularly + surprising, given how brittle "make -e" is in general ... + + * t/cxx-lt-demo.sh: Instead of forcing $(CC) to be 'false' by + exporting "CC=false" in the environment and then passing the '-e' + option to make, do so by passing "CC=false" on the make command + line, both directly and using AM_MAKEFLAGS. + +2013-04-30 Stefano Lattarini + + Merge branch 'fix-pr12554' into branch-1.13.2 + + * fix-pr12554: + tests: avoid a spurious error with Solaris make + subdirs: don't return false positives for the '-k' option's presence + header-vars: recognize more make flags ('-k' in particular) + header-vars: simplify how make flags are determined + tests: remove dead code from t/make-dryrun.tap + header-vars: new variable $(am__running_with_option) + tests: expose bug#12554 (false positives for presence of '-k' make option) + +2013-04-30 Stefano Lattarini + + Merge branch 'branch-1.13.2' into maint + + * branch-1.13.2: + cosmetics: remove few trailing whitespace occurrences + typofix: in NEWS (extra whitespace) + +2013-04-30 Stefano Lattarini + + cosmetics: remove few trailing whitespace occurrences + +2013-04-30 Stefano Lattarini + + typofix: in NEWS (extra whitespace) + +2013-04-30 Stefano Lattarini + + Merge branch 'branch-1.13.2' into maint + + * branch-1.13.2: + sync: update files from upstream with "make fetch" + maintcheck: remove outdated whitelisting + tar: format 'ustar' cannot support UID/GID longer than 21 bits + +2013-04-30 Stefano Lattarini + + Merge branch 'fix-pr13588-pax-hangs' into branch-1.13.2 + + * fix-pr13588-pax-hangs: + tar: format 'ustar' cannot support UID/GID longer than 21 bits + +2013-04-29 Stefano Lattarini + + tests: avoid a spurious error with Solaris make + + * t/make-keepgoing.tap (Makefile.am): Here. + +2013-04-29 Stefano Lattarini + + subdirs: don't return false positives for the '-k' option's presence + + This change fixes automake bug#12554. + + The old implementation of the code descending into $(SUBDIRS) + entries used the following snippet to decide whether make is running + with the '-k' a.k.a. '--keep-going' option, and thus whether a failure + in a subdirectory should prevent the descent in the following ones: + + fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done + + It's clear that the second pattern in the 'case' construct could possibly + match false positives, for examples in these two cases: + + make check TESTS="x.test k.test" + make -I /usr/local/kool-fragments + + which are somewhat unusual, but not invalid. So we need a more resilient + implementation, as we did for the detection of the '-n' flag. + + This implementation is now provided by the new private macro + '$(am__make_keepgoing)' (introduced in recent commits); so we can + just us that to fix the bug. + + * lib/am/subdirs.am ($(am__recursive_targets)): Use '$(am__make_keepgoing)' + instead of ad-hoc and more brittle checks. + * t/list-of-tests.mk (XFAIL_TESTS): Remove the now-passing test case + 't/subdir-keep-going-pr12554.sh'. + + Reported-by: Michael Daniels + +2013-04-29 Stefano Lattarini + + header-vars: recognize more make flags ('-k' in particular) + + * lib/am/header-vars.am (am__running_with_option): Here. + Few improvements to comments, while at it. + (am__make_keepgoing): New, tell whther make is being runt with + the '-k' option. + * t/make-keepgoing.tap: New test. + * t/list-of-tests.mk: Add it. + * t/make-dryrun.tap: Minor edits to keep it more in sync with + the new test. + +2013-04-29 Stefano Lattarini + + sync: update files from upstream with "make fetch" + + * lib/config.guess: Likewise. + * lib/config.sub: Likewise. + +2013-04-29 Stefano Lattarini + + maintcheck: remove outdated whitelisting + + * syntax-checks.mk (sc_tests_overriding_macros_on_cmdline): Here. + The test 'make-dryrun.sh' has been since long rewritten as the TAP + test 'make-dryrun.tap', and no longer spuriously triggers this + maintainer check. + +2013-04-29 Stefano Lattarini + + header-vars: simplify how make flags are determined + + Actually, son far only the '-n' option ("dry mode") was detected, + but this change will allow us to soon detect more options. + + * lib/am/header-vars.am (am__running_with_option): Even when $MAKEFLAGS + appears to contain definition of variables with embedded whitespace, + use simple textual pre-processing over $MAKEFLAGS rather than tricky + recursive invocations of make to determine whether the '-n' option was + given. This is enough to correctly handle all the tricky usages covered + in the testsuite. + * t/nodep.sh: Adjust to avoid a spurious failure. + +2013-04-29 Stefano Lattarini + + tests: remove dead code from t/make-dryrun.tap + +2013-04-29 Stefano Lattarini + + header-vars: new variable $(am__running_with_option) + + This is a preparatory refactoring, needed by later patches. + No semantic change is intended. + + * lib/am/header-vars.am (am__running_with_option): New, contains + 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. Actually, the only supported option at the moment + is '-n' (support for '-k' will be added soon). + (am__make_dryrun): Rewrite as a thin wrapper around + '$(am__make_running_with_option)'. + +2013-04-29 Stefano Lattarini + + tests: expose bug#12554 (false positives for presence of '-k' make option) + + The current implementation of the code descending into $(SUBDIRS) + entries uses the following snippet to decide whether make is running + with the '-k' a.k.a. '--keep-going' option, and thus whether a failure + in a subdirectory should prevent the descent in the following ones: + + fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done + + It's clear that the second pattern in the 'case' construct can possibly + match false positives, for examples in these two cases: + + make check TESTS="x.test k.test" + make -I /usr/local/kool-fragments + + which are somewhat unusual, but not invalid. So we need a more resilient + implementation, as we did for the detection of the '-n' flag. + + But alas, such an implementation seems quite tricky to obtain in portable + make. So for the moment we content ourselves with exposing the bug, with + the hope of being able to fix soon enough. + + * t/subdir-keep-going-pr12554.sh: New test. + * t/list-of-tests.mk (handwritten_TESTS, XFAIL_TESTS): Add it. + * THANKS: Update + + Reported-by: Michael Daniels + +2013-04-28 Stefano Lattarini + + tar: format 'ustar' cannot support UID/GID longer than 21 bits + + See automake bug#8343 and bug#13588. + + POSIX 1988 'ustar' format is defined with *fixed-size* fields. There + is notably a 21 bits limit (2097151) for the UID and the GID. + + Tom Rini tom_rini@mentor.com says (in bug#8343): + + When the user has a UID or GID that is larger than the ustar format + supports, pax does not error out gracefully in some cases (FC13). + + Marc Herbert adds (in bug#8343): + + When "configure" is run by a user with an UID bigger than 21 bits, + BSD pax 3.4 aborts when trying to create the 'conftest.tar' test + archive and leaves an empty or corrupted conftest.tar file behind. + In the next step, pax tries to extract this incomplete or corrupted + archive and this *** hangs the whole ./configure script ***. + + Note: GNU cpio 2.9 pretends to pass the test but it is a LIE: it + silently truncates any big UID to its lower 21 bits. I don't know + what can be the consequences of this lie. + + I think there is currently a design issue in automake/m4/tar.m4 + considering that a ustar archive should should *never* succeed when + ./configure is run from a big user ID. + + Months later, Petr Hracek reports a similar issue + (in bug#13588) for Fedora 17: + + I am trying to solve problem in case a user is created with big + UID and during configuration pax hangs with message + + ATTENTION! pax archive volume change required. + Ready for archive volume: 1 + Input archive name or "." to quit pax. + Archive name > + + and needs user interaction. + + Reference: + + Time to fix this issue, on the line of a preliminary patch provided by + Petr Hracek in bug#13588. The final patch ended up being remarkably + different from that original proposition, though. + + * m4/tar.m4 (_AM_PROG_TAR): If the UID or GID of the current user is + too high (> 2097151), the 'ustar' format cannot work. Adjust checks + accordingly. Some related code reordering and clean-up. + * t/tar-ustar-id-too-high.sh: New test. + * t/list-of-tests.mk: Add it. + * t/tar.sh: While at it, tweak and enhance a little. + * t/tar2.sh: Likewise. + * t/tar3.sh: Likewise. + * t/tar-override.sh: Likewise. + * NEWS: Update. + * THANKS: Likewise. + + Helped-by: Pavel Raiskup + Helped-by: Petr Hracek + Helped-by: Marc Herbert + Helped-by: Tom Rini + +2013-04-26 Stefano Lattarini + + Merge branch 'branch-1.13.2' into maint + + * branch-1.13.2: + docs: issues with configure substitutions in TESTS + tests: avoid possible autotools caching issues (automake bug#13832) + docs: add myself and Ralf Wildenhues as authors + authors: add myself + dry-run: don't get confused by '-I' option + tests: avoid a spurious failure with the Korn Shell + dry-run: with GNU make, prefer $(MFLAGS) over $(MAKEFLAGS) + header vars: can determine whether we are running under GNU make + NEWS: improve wording for automake bug#13514 fix + NEWS: document fix for automake bug#13514 + +2013-04-26 Stefano Lattarini + + Merge few bug-fixing branches into branch-1.13.2 + + * fix-part-pr13832: + tests: avoid possible autotools caching issues (automake bug#13832) + + * fix-pr13760: + dry-run: don't get confused by '-I' option + dry-run: with GNU make, prefer $(MFLAGS) over $(MAKEFLAGS) + header vars: can determine whether we are running under GNU make + + * fix-doc-pr14019: + docs: issues with configure substitutions in TESTS + + * news-wording-improve: + NEWS: improve wording for automake bug#13514 fix + +2013-04-26 Stefano Lattarini + + docs: issues with configure substitutions in TESTS + + Motivated by automake bug#14019. + + * doc/automake.texi: Currently, when the parallel test harness is in use, + configure substitutions in TESTS definitions can only work if they expand + to tests that ends with a suffix listed in TEST_EXTENSIONS. Document this + limitation. + +2013-04-26 Stefano Lattarini + + tests: avoid possible autotools caching issues (automake bug#13832) + + * t/ar-lib4.sh: Here, by removing the autom4te cache before editing + configure.ac and re-running the autotools. + +2013-04-25 Stefano Lattarini + + tests: rename some with more descriptive names + + * t/tar3.sh: Rename ... + * t/tar-opts-errors.sh: ... like this. + * t/tar2.sh: Rename... + * t/tar-pax.sh: ... like this. + * t/tar.sh: Rename ... + * t/tar-ustar.sh: ... like this. + * t/list-of-tests.mk: Adjust. + +2013-04-25 Stefano Lattarini + + docs: add myself and Ralf Wildenhues as authors + + * doc/automake.texi: Here. + +2013-04-25 Stefano Lattarini + + authors: add myself + +2013-04-23 Stefano Lattarini + + dry-run: don't get confused by '-I' option + + Fixes automake bug#13760 for non-GNU make implementations that still + support the option '-I'. So far, the only such make implementation + are FreeBSD (8.x) make and NetBSD (5.x) make. + + * lib/am/header-vars.am (am__make_dryrun): If a non-GNU make is being + used, try to handle the '-I' option in $MAKEFLAGS correctly. For GNU + make, that is already done by the proper use of the $MFLAGS variable. + +2013-04-22 Stefano Lattarini + + tests: avoid a spurious failure with the Korn Shell + + * t/list-flags.sh: Ensure the EMACS variable is set before unsetting it. + +2013-04-22 Stefano Lattarini + + dry-run: with GNU make, prefer $(MFLAGS) over $(MAKEFLAGS) + + Fixes automake bug#13760 for GNU make. + + * lib/am/header-vars.am (am__make_dryrun): If GNU make is being used, rely + on the contents of the $(MFLAGS) variable rather than of the $(MAKEFLAGS) + to decide whther make is being executed in "dry run" mode. Not only this + makes the code possibly faster and less brittle, but also fixes automake + bug#13760 (at least when GNU make is in use). + * t/make-dryrun.tap: Adjust: some tests that were xfailing now pass. + +2013-04-22 Stefano Lattarini + + header vars: can determine whether we are running under GNU make + + This is mostly a preparatory patch in view of future changes. + + * lib/am/header-vars.am (am__is_gnu_make): New, contains shell code that + determines whether we are running under GNU make. + * t/make-is-gnu.sh: New test. + * t/list-of-tests.mk: Add it. + +2013-04-22 Stefano Lattarini + + NEWS: improve wording for automake bug#13514 fix + + Helped-by: Jack Kelly + +2013-04-21 Stefano Lattarini + + NEWS: document fix for automake bug#13514 + + It was fixed by commit v1.13.1b-5-g7a3d7ce. + +2013-04-20 Stefano Lattarini + + Merge branch 'branch-1.13.2' into maint + + * branch-1.13.2: + INSTALL: regen + sync: update files from upstream with "make fetch" + tests: tweaks and minimal improvements to t/insthook.sh + +2013-04-20 Stefano Lattarini + + INSTALL: regen + +2013-04-20 Stefano Lattarini + + sync: update files from upstream with "make fetch" + + * lib/INSTALL: Update. + * lib/config.guess: Likewise. + * lib/config.sub: Likewise. + * lib/gendocs.sh: Likewise. + * lib/gendocs_template: Likewise. + * lib/gitlog-to-changelog: Likewise. + * lib/gnupload: Likewise. + * lib/texinfo.tex: Likewise. + * lib/update-copyright: Likewise. + +2013-04-20 Stefano Lattarini + + tests: tweaks and minimal improvements to t/insthook.sh + +2013-04-20 Stefano Lattarini + + typofix: in comments in t/extra2.sh + +2013-04-20 Stefano Lattarini + + tests: fix botched cross-reference in a heading comment + + * t/extra-dist-wildcards.sh: Here. + +2013-04-19 Stefano Lattarini + + automake: refactoring: factor out common cpp-like flags + + * automake.in (@cpplike_flags): In this new variable... + (C, C++, Objective C, Objective C++, Unified Parallel C, Preprocessed + Assembler, Preprocessed Fortran, Preprocessed Fortran 77): ... to be + used by registration (with the 'register_language' subroutine) of these + languages. + + This is a refactoring meant to simplify future changes; no semantic + change is intended. + +2013-04-19 Stefano Lattarini + + NEWS (mint): reflect new Automake versioning scheme + + The next minor Automake version will be 1.14, and *not* 1.13.2 -- that + will be the next bug-fixing version. + +2013-04-19 Stefano Lattarini + + Merge branch 'branch-1.13.2' into maint + + * branch-1.13.2: + Add missing '$' for variable expansion in depout.m4 + fixup: one stray reference to older versioning scheme + +2013-04-19 Gavin Smith (tiny change) + + Add missing '$' for variable expansion in depout.m4 + + * m4/depout.m4: "am__include" appeared where "$am__include" was meant. + + Reference: + + +2013-04-19 Stefano Lattarini + + Merge branch 'preproc' into maint + + * preproc: + maintcheck: avoid spurious failure + +2013-04-19 Stefano Lattarini + + maintcheck: avoid spurious failure + + * t/preproc-errmsg.sh: Here, breaking up a sed command to avoid spuriously + triggering a failure in the 'sc_tests_logs_duplicate_prefixes' maintainer + check. + +2013-04-19 Stefano Lattarini + + Merge branch 'no-perl-protos' into maint + + * no-perl-protos: + perl: perl subroutine prototypes are problematic, don't use them + +2013-04-19 Stefano Lattarini + + perl: perl subroutine prototypes are problematic, don't use them + + Basically, in perl, "subroutine prototypes" are not prototypes at all; + rather, they are a trick to allow user-defined subroutines that behave + like perl built-in functions. For example, prototyped subroutines can + be called without parentheses, and can impose context on their arguments. + + Such semantics can be useful in some selected situations, but might also + easily cause unexpected and harmful behaviours and side effects if we + try to use perl prototypes as we would use C prototypes. + + See the excellent article "Far More than Everything You've Ever Wanted + to Know about Prototypes in Perl" by Tom Christiansen for more detailed + information: + + + + + It is important to note that modern perl allows a non-predeclared + subroutine to be called without the '&' character, as long as its + call uses proper parentheses: + + foo 'str', 2; # will trigger errors if foo is not predeclared + foo('str', 2); # ok even if foo is not predeclared + &foo('str', 2); # ditto; but the '&' is old-style and redundant + + Note also that the prototype indicating "no argument": + + sub func() { ... } + + can actually be useful, and has no discernible downsides, so we'll + keep using it where it makes sense. + + Also, in few, selected cases, we *want* to have subroutines behave like + perl builtins (e.g., we want the 'append_exeext' function to be able + to take a code block as first argument). In such cases, we will of + course continue to make use of perl subroutine prototypes. + + Let's finally see an example that might clarify the kind of problems the + use of subroutine prototypes in perl can cause. This is just scratching + the surface; there are several other aspects, typically subtler and more + dangerous, that are not touched here. + + If you have the prototyped subroutine definition: + + sub foo ($@) + { + my $s = shift; + print "SCALAR: $s\n"; + print "ARRAY: @_\n"; + } + + and call 'foo' in code like: + + @list = (-1, 0, 1); + foo(@list); + + you won't get a compile-time nor a runtime error (as a naive interpretation + of the "prototype" characterization would let you think). Rather, the + prototype will cause the array '@list' will be coerced into scalar context + before being passed too 'foo', which means that its *length* (3) will be + passed to 'foo' as first argument; and since no further arguments are + present after '@list', that *void* will be coerced to an empty list before + being passed to 'foo'. + + So code above will have the result of printing: + + SCALAR: 3 + ARRAY: + + Quite tricky, and definitely a behaviour we don't want to rely on. + + * automake.in: Delete most subroutine prototypes. Fix few of the + remaining ones. Related minor simplifications and adjustments. + * lib/gen-perl-protos: Adjust. + +2013-03-05 Stefano Lattarini + + Merge branch 'preproc' into maint + + * preproc: + preproc: enhance and extend tests + preproc: add support for relative names in included fragments + +2013-02-21 Stefano Lattarini + + fixup: one stray reference to older versioning scheme + + * lib/Automake/Options.pm: Here, in a FIXME comment: reference + "Automake 3.0" rather than "Automake 1.15". + +2013-02-21 Stefano Lattarini + + Merge branch 'branch-1.13.2' into maint + + * branch-1.13.2: + aclocal: fix for more-than-once specified directories + aclocal: just warn if the primary local m4 dir doesn't exist (don't error) + +2013-02-21 Stefano Lattarini + + maint: more adjustments to the new versioning scheme + + This is a follow-up to commit 'v1.13.1b-11-g97aaf12'. + + * automake.in: Adjust a comment. + * PLANS: Adjust several files in here. + +2013-02-21 Stefano Lattarini + + Merge branch 'fix-pr13514' into branch-1.13.2 + + * fix-pr13514: + aclocal: fix for more-than-once specified directories + aclocal: just warn if the primary local m4 dir doesn't exist (don't error) + +2013-02-21 Pavel Raiskup + + aclocal: fix for more-than-once specified directories + + Related to automake bug#13514. + + Do not consider directories for extra m4 files multiple times in + 'aclocal'. Doing so caused problems on older packages that specify + + configure.ac: AC_CONFIG_MACRO_DIRS([m4]) + Makefile.am: ACLOCAL_AMFLAGS = -I m4 + + if the 'm4' directory does not exist when aclocal is called the first + time by autoreconf. + + See: + + + * aclocal.in (scan_m4_files): Remove duplicates in @user_includes. + * t/aclocal-macrodir.tap: Extend. + * t/aclocal-macrodirs.tap: Likewise. + +2013-02-20 Stefano Lattarini + + Merge branch 'docstrings-tweaks' into maint + + * docstrings-tweaks: + cosmetics: fix some "docstring-like" comments in automake + +2013-02-20 Stefano Lattarini + + Merge branch 'branch-1.13.2' into maint + + * branch-1.13.2: + coverage: expose automake bug#13760 + tests: refactor/enhance tests about make dry-run mode + maint: describe new versioning and branching scheme, and adjust to it + +2013-02-20 Stefano Lattarini + + Merge branch 'new-versioning-scheme' into branch-1.13.2 + + * new-versioning-scheme: + maint: describe new versioning and branching scheme, and adjust to it + +2013-02-20 Pavel Raiskup + + aclocal: just warn if the primary local m4 dir doesn't exist (don't error) + + Related to automake bug#13514. + + Every package which does not need to have the local m4 macro + directory pre-existing in the version control system (because + e.g., it does not have nor need any private m4 macros) would + fail during the "autoreconf -vfi" phase if AC_CONFIG_MACRO_DIRS([m4]) + is specified in configure.ac (it could be to instruct tools like + 'autopoint' and 'libtoolize' to use 'm4' as the local directory + where to install definitions of their m4 macros, and to instruct + aclocal to look into it). The failure would go like this: + + autoreconf: Entering directory `.' + autoreconf: running: aclocal --force + aclocal: error: couldn't open directory 'm4': No such file or directory + autoreconf: aclocal failed with exit status: 1 + + The problem is that when 'aclocal' is run for the first time during + 'autoreconf', the directory 'm4' does not exist yet. It will be + created by e.g., 'libtoolize' or 'autopoint' later on. During the + second 'aclocal' run, the 'm4' directory exists and aclocal does not + complain. + + To work around this issue, we degrade the error to a simple warning. + The warning is still quite useful when aclocal is run by hand - so + we are not removing completely. + + See also: + + + + + + * aclocal.in (SCAN_M4_DIRS_SILENT, SCAN_M4_DIRS_WARN) + (SCAN_M4_DIRS_ERROR): New constants. + (scan_m4_dirs): Change the second parameter name to $ERR_LEVEL to + better reflect new semantic. Use new constants. + (scan_m4_files): Adjust to reflect the new 'scan_m4_dirs' semantics. + * t/aclocal-macrodir.tap: Adjust. + * t/aclocal-macrodirs.tap: Likewise. + * THANKS: Update. + * NEWS: Likewise. + + Suggested-by: Ben Pfaff + +2013-02-20 Stefano Lattarini + + coverage: expose automake bug#13760 + + * t/make-dryrun.tap: Here. + * THANKS: Update with the name of the bug reporter. + +2013-02-20 Stefano Lattarini + + tests: refactor/enhance tests about make dry-run mode + + * t/make-dryrun.tap: Here. + +2013-02-17 Stefano Lattarini + + maint: describe new versioning and branching scheme, and adjust to it + + See discussion about automake bug#13578 for more details and background. + + Basically, for the versioning scheme: + + - micro versions only for bug and regression fixing; + - minor versions for new backward-compatible features, and new + non-fatal deprecations; + - major versions for backward-incompatibilities, complex new + features, and major refactoring. + + And for the git branching scheme: + + + branch 'next' is for the upcoming major version; + + branch 'master' is now for the upcoming minor version; + + branch 'maint' is for the upcoming micro (bug-fixing) version; + + the merging hierarchy is: 'maint' -> 'master' -> 'next'. + + * HACKING (Automake versioning and compatibility scheme): New. + (Working with git): Adjust. + * NEWS: Update and fix. + * aclocal.in: Adjust some "FIXME" messages. + * automake.in: Likewise. + * m4/mkdirp.m4: Likewise. + * t/aclocal-acdir.sh: Likewise. + * t/aclocal-macrodir.tap: Likewise. + * t/aclocal-macrodirs.tap: Likewise. + * lib/Automake/Options.pm: Likewise. + * m4/internal/ac-config-macro-dirs.m4: Likewise. + +2013-02-17 Stefano Lattarini + + cosmetics: fix some "docstring-like" comments in automake + + * automake.in: Here. And remove some redundant ones. + +2013-02-16 Stefano Lattarini + + Merge branch 'perl-sub-protos' into maint + + * perl-sub-protos: + style: call perl functions 'like_this()', not '&like_this()' + maint: use more perl subroutines prototypes in the automake script + build: auto-generate perl subroutines prototypes for automake and aclocal + refactor: rip module Automake::Language out of automake script + +2013-02-15 Stefano Lattarini + + Merge branch 'branch-1.13.2' into maint + + * branch-1.13.2: + typofix: in comments in 't/ax/test-lib.sh' + tests on TAP: don't run the driver with perl unconditionally + typofix: in comments in 'automake.in' + tests: remove obsolete (and now wrong) comment + typofix: in diagnostic in test 't/tap-realtime.sh' + automake: fix reference to relevant tests in comments + NEWS: we no longer plan to drop $(INCLUDES) support in next major version + +2013-02-15 Stefano Lattarini + + typofix: in comments in 't/ax/test-lib.sh' + +2013-02-14 Stefano Lattarini + + style: call perl functions 'like_this()', not '&like_this()' + + We can do so now that our build rules auto-generate a list of + prototypes for all functions ins our scripts. + + * automake.in: Adjust throughout. + * HACKING: Adjust advises. + +2013-02-14 Stefano Lattarini + + preproc: enhance and extend tests + + * t/preproc-demo.sh: New test, a "demo" of how the new pre-processing + feature could be used in a real-world package. + * t/preproc-errmsg.sh: New test, check that error messages remain + useful when the new pre-processing features are involved. + * t/preproc-reldir.sh: Split up ... + * t/preproc-basics.sh, t/preproc-c-compile.sh: ... into these two + tests, with some refactorings, clean-up and enhancements. + * t/list-of-tests.mk: Adjust. + +2013-02-14 Peter Rosin + Stefano Lattarini + + preproc: add support for relative names in included fragments + + The rationale for this change is that it is annoying to have + to repeat the directory name when including a Makefile fragment. + For deep directory structures these repeats can generate a lot + of bloat. It also hinders reuse and easy directory restructuring + if all Makefile fragments have to know exactly where they live. + + Suggested by Bob Friesenhahn, and later discussed in bug#13524. + + In the course of discussion, the following notations were rejected: + &{reldir}& - to hard to type, {reldir} - interferes with ${reldir}, + {am_reldir} - short form {D} interferes with ${D}, @am_reldir@ - short + form @D@ interferes with AC_SUBST([D]) as well as invading the + config.status turf. Other notations were also suggested... + + * automake.in (read_am_file): Add third argument specifying the + relative directory of this Makefile fragment compared to the + main Makefile. Replace %reldir% and %canon_reldir% in the + fragment with this relative directory (with slashes etc, or + canonicalized). + (read_main_am_file): Adjust. + * t/preproc-reldir.sh: New test. + * t/list-of-tests.mk: Augment. + * doc/automake.texi (Include): Document the new feature. + NEWS: Add new feature. + +2013-02-14 Stefano Lattarini + + tests on TAP: don't run the driver with perl unconditionally + + * t/ax/tap-setup.sh: When a 'Makefile.am' was pre-existent in the + test directory at the moment the client test script sourced this + file, said 'Makefile.am' was tweaked to provide it with a proper + definition of TEST_LOG_DRIVER. However, there was an error in this + automatic definition, since it caused the TAP test driver to be + unconditionally invoked with perl. This wasn't an issue in most + situations, since perl is smart enough to re-execute a given script + with the proper interpreter if it sees a she-bang line that doesn't + seem to point to perl itself. Still, there is no reason to do + something blatantly wrong even if our tools correct the dumb mistake + for us. So fix the TEST_LOG_DRIVER definition. + +2013-02-14 Stefano Lattarini + + typofix: in comments in 'automake.in' + +2013-02-14 Stefano Lattarini + + tests: remove obsolete (and now wrong) comment + + * t/ax/am-test-lib.sh: Here. + +2013-02-14 Stefano Lattarini + + typofix: in diagnostic in test 't/tap-realtime.sh' + +2013-02-13 Stefano Lattarini + + maint: use more perl subroutines prototypes in the automake script + + * automake.in: Throughout this file. Note that these new prototypes + are not much useful, since many subroutine calls still use the old + '&foo' form; but we'll take care of that in later patches. + * lib/Automake/Language.pm (target_hook): Call the '_target_hook' + of the given language in a more modern form, avoiding '&'. + +2013-02-13 Stefano Lattarini + + build: auto-generate perl subroutines prototypes for automake and aclocal + + This will allow us to avoid either using the '&foo' invocation form when + invoking a subroutine before its definition, or having to maintain the + list of prototypes by hand (with the risk of having it become incomplete + or fall out-of-sync when future edits to the automake and aclocal scripts + are done). + + * Makefile.am (automake, aclocal): Automatically generate a list of + prototypes by looking at the subroutines definitions. + * bootstrap.sh: Likewise, when generating the temporary automake and + aclocal scripts used for bootstrapping. + * automake.in: Add a placeholder that will be tracked by the new recipes + and substituted with the computed prototypes. Remove existing prototypes, + that are now superfluous. Some adjustments required by the new, more + comprehensive prototypes declarations. + * aclocal.in: Likewise. + * maintainer/syntax-checks.mk (sc_diff_automake, sc_diff_aclocal): Adjust. + +2013-02-04 Stefano Lattarini + + refactor: rip module Automake::Language out of automake script + + This is just a preparatory patch in view of future changes. + + * lib/Automake/Language.pm: New module, ripped out from ... + * automake.in: ... here. Related adjustments. + * Makefile.am (dist_perllib_DATA): List the new module. + +2013-02-03 Stefano Lattarini + + automake: fix reference to relevant tests in comments + + Some of those tests had been renamed in recent or less-recent changes. + +2013-02-03 Stefano Lattarini + + NEWS: we no longer plan to drop $(INCLUDES) support in next major version + + For a rationale and related discussion, see: + + + And note that support for INCLUDES has not been re-introduced in the + master branch yet, at the moment of writing; but we plan to definitely + do so before the next major release. + +2013-01-28 Stefano Lattarini + + Merge branch 'branch-1.13.2' into maint + + * branch-1.13.2: + NEWS: IRIX is still supported; only SGI C compiler depcomp no longer is + maint: version bump after beta release 1.13.1b + NEWS: typofix + release: beta release 1.13.1b (will become 1.13.2) + +2013-01-28 Stefano Lattarini + + NEWS: IRIX is still supported; only SGI C compiler depcomp no longer is + + This change is for the maint branch. + + The only IRIX-specific support that is going to actually be removed in + the next major Automake versions is the depcomp support for the SGI + compiler. That means that automatic dependency tracking will no + longer work with that compiler, but "normal" compilation should still + work, at least until the compiler is supported by Autoconf. + + So there is no point in alarming our users by stating in the NEWS file + that "support for IRIX and the SGI compilers is going to be removed"; + after all, while we don't test on nor particularly care about IRIX + anymore, that doesn't mean we are deliberately breaking it, and the + likelihood of an intended breakage there is very low. + + See: + + + + * NEWS (Future backward-incompatibilities: Adjust. Improve explanation + of our rationale for dropping SGI support. Fix an unrelated typo while + at it. + + Suggested-by: Peter Rosin + +2013-01-23 Stefano Lattarini + + maint: version bump after beta release 1.13.1b + + * configure.ac (AC_INIT): Bump version number to 1.13.1c. + * m4/amversion.m4: Likewise (autoupdated by "make bootstrap"). + +2013-01-23 Stefano Lattarini + + NEWS: typofix + +2013-01-23 Stefano Lattarini + + release: beta release 1.13.1b (will become 1.13.2) + + * configure.ac (AC_INIT): Bump version number to 1.13.1b. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2013-01-22 Stefano Lattarini + + Merge branch 'branch-1.13.2' into maint + + * branch-1.13.2: + docs: '.txi' and '.texinfo' extensions are deprecated + NEWS: document recent documentation improvements + docs: more precise cross reference + docs: 'dist-shar' and 'dist-tarZ' are obsolescent today + docs: improve documentation of 'dist-*' targets slightly + docs: make even clearer 'dist-gzip' is the default. + docs: document 'dist-xz' together with the other 'dist-*' options + docs: 'no-define' option and AM_INIT_AUTOMAKE three-args usage: fixlets + warn: correct broken hyperlink in warning message + +2013-01-22 Stefano Lattarini + + docs: '.txi' and '.texinfo' extensions are deprecated + + And Automake will warn about them (since commit 'v1.13.1-6-ge1ed314'). + + * doc/automake.texi (Texinfo): Adjust. + +2013-01-22 Stefano Lattarini + + NEWS: document recent documentation improvements + +2013-01-22 Stefano Lattarini + + docs: more precise cross reference + + See automake bug#13520. + + * doc/automake.texi (The Types of Distributions): Here, + cross-reference "List of Automake options" rather then + the more generic node "Options". Improve wording while + at it. + +2013-01-22 Stefano Lattarini + + docs: 'dist-shar' and 'dist-tarZ' are obsolescent today + + Both the options and the formats; and they might be deprecated + and removed in future automake versions (see discussion on + automake bug#13324). + + In any case, it's better if the documentation starts advising + against their use right now. + + * doc/automake.texi (The Types of Distributions): Here. + (List of Automake options): And here. + +2013-01-22 Stefano Lattarini + + docs: improve documentation of 'dist-*' targets slightly + + * doc/automake.texi (The Types of Distributions): Here. + +2013-01-22 Stefano Lattarini + + docs: make even clearer 'dist-gzip' is the default. + + See automake bug#13520. + + * doc/automake.texi (The Types of Distributions): Here. + +2013-01-22 Stefano Lattarini + + docs: document 'dist-xz' together with the other 'dist-*' options + + See automake bug#13520. + + * doc/automake.texi (List of Automake options): Here. + +2013-01-22 Stefano Lattarini + + docs: 'no-define' option and AM_INIT_AUTOMAKE three-args usage: fixlets + + See automake bug#13519. + + * doc/automake.texi: Adjust. + +2013-01-22 Stefano Lattarini + + warn: correct broken hyperlink in warning message + + * automake.in (scan_autoconf_traces): Here, when an use of the + deprecated two- and three-arguments forms of AM_INIT_AUTOMAKE + is detected. + + Fixes automake bug#13519. + +2013-01-21 Stefano Lattarini + + tests: more information about Lex and Yacc programs + + * t/get-sysconf.sh: Try to also get the version of '$LEX' and '$YACC'. + This will help debugging of user-reported problems. + +2013-01-21 Stefano Lattarini + + lint: fix spurious failure for 'sc_rm_minus_f' syntax check + + * maintainer/syntax-checks.mk (sc_rm_minus_f): Also exempt + file 't/rm-f-probe.sh'. + +2013-01-21 Stefano Lattarini + + maint: bump version 1.13.1a -> 1.13.2a + + The 1.13.2 bug-fixing release will ship from the 'branch-1.13.2' git + branch, not from the 'maint' one, since the latter contains changes + that are non-trivial and hasn't cooked enough yet. The 'maint' branch + will give rise to the 1.13.3 release instead, eventually. Adjust the + version number to match. + + * configure.ac (AC_INIT): Bump version number to 1.13.2b. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2013-01-21 Stefano Lattarini + + Merge branch 'branch-1.13.2' into maint + + That branch is for the "emergency" bug-fixing release 1.13.2. + + * branch-1.13.2: + maint: update copyright in files generated by automake and aclocal + tests: avoid a spurious failure when running inside Emacs + tests: make two new test executable + m4: rename an m4 file to a more appropriate name + NEWS: update w.r.t. recent documentation fixes + compat: reinstate AM_CONFIG_HEADER and AM_PROG_CC_STDC + docs: parallel-tests is no longer experimental + docs: serial-tests are not deprecated, just discouraged + NEWS: we are not going to remove AM_PROG_MKDIR_P in Automake 1.14 + +2013-01-21 Stefano Lattarini + + maint: update copyright in files generated by automake and aclocal + + * bootstrap.sh ($RELEASE_YEAR): Bump top 2013. + * configure.ac ($RELEASE_YEAR): Likewise. + +2013-01-21 Thien-Thi Nguyen (tiny change) + + tests: avoid a spurious failure when running inside Emacs + + Some versions of Emacs set the environment variable 'EMACS' to 't' + for child processes. Thus, when running from inside Emacs, "$(MAKE) -e" + erroneously allows the 't' to override the one in the Makefile. + + * t/lisp-flags.sh: Unset var 'EMACS', fixing the issue. + +2013-01-19 Stefano Lattarini + + tests: make two new test executable + + * t/backslash-issues.sh: This. + * t/extra-data.sh: And this. + + Issue revealed by the 'sc_tests_executable' maintainer check. + +2013-01-19 Stefano Lattarini + + m4: rename an m4 file to a more appropriate name + + * m4/obsolete-err.m4: Rename ... + * m4/obsolete.m4: ... like this. + * Makefile.am (dist_automake_ac_DATA): Adjust. + * t/ansi2knr-no-more.sh: Likewise. + +2013-01-19 Stefano Lattarini + + NEWS: update w.r.t. recent documentation fixes + +2013-01-19 Stefano Lattarini + + compat: reinstate AM_CONFIG_HEADER and AM_PROG_CC_STDC + + Make them give runtime warnings in the obsolete category, but apart + from that, make them behave as they did in Automake 1.12.x and earlier. + + While removing those macros seemed quite harmless, because it didn't put + a real burden on the developers (requiring them just to do a quick edit + to configure.ac), it turned out to place an unsustainable burden (or at + least, a burden perceived as such) on distro packagers who use the latest + Automake to bootstrap existing packages. Many of those packages, while + having likely updated to AC_CONFIG_HEADERS in their development version, + still used AM_CONFIG_HEADER in their existing released versions, and the + removal of this macro would have thus forced the Fedora packagers to + patch all of them. References: + + + + + + In addition, the Fedora packagers have already decided to patch their + Automake 1.13.1 to reinstate the AM_CONFIG_HEADER and AM_PROG_CC_STDC + macros (plus other macros that I don't believe it's worth worrying about): + + + + + + So, rather than having one more incompatibility floating around, we + better mirror that change (or, actually, its relevant parts) in the + upstream. + + * m4/obsolete-err.m4 (AM_CONFIG_HEADER, AM_PROG_CC_STDC): Revert to the + older semantics, plus a runtime warning in the 'obsolete' category. + * t/backcompat6.sh: Use AM_CONFIG_HEADER once again. + * t/am-config-header-no-more.sh: Rename ... + * t/am-config-header.sh: ... like this, and adjust. + * t/am-prog-cc-stdc-no-more.sh: Rename ... + * t/am-prog-cc-stdc.sh: ... like this, and adjust. + * t/list-of-tests.mk: Adjust. + * NEWS: Update. + +2013-01-18 Stefano Lattarini + + Merge branch 'rm-f-probe' into maint + + * rm-f-probe: + init.m4: add probe to check "rm -f" without args work + +2013-01-18 Stefano Lattarini + + docs: parallel-tests is no longer experimental + + So don't declare it as such in the documentation. + + Reported by Brandon Black: + + + * doc/automake.texi: Adjust. + * THANKS: Update. + +2013-01-18 Stefano Lattarini + + docs: serial-tests are not deprecated, just discouraged + + We don't plan to remove support for them, nor to have the serial-tests + option give any kind of runtime warning, so don't alarm the users + still using serial tests with pointless "deprecation" or "obsolescence" + warnings. + + Fixes automake bug#13478. + + See also: + + + * doc/automake.texi: Adjust. + * THANKS: Update. + +2013-01-18 Stefano Lattarini + + plans: we are not going to remove AM_PROG_MKDIR_P in Automake 1.14 + + See commit v1.13.1-109-g030ecb4 of 2013-01-16, "compat: restore + AM_PROG_MKDIR, again", for the rationale; that rationale is now + also copied... + + * PLANS/obsolete-removed/am-prog-mkdir-p.txt: ... here. + +2013-01-18 Stefano Lattarini + + NEWS: we are not going to remove AM_PROG_MKDIR_P in Automake 1.14 + + See commit v1.13.1-109-g030ecb4 of 2013-01-16, "compat: restore + AM_PROG_MKDIR, again", for the rationale. + +2013-01-16 Stefano Lattarini + + init.m4: add probe to check "rm -f" without args work + + See automake bug#10828. + + POSIX will say in a future version that running "rm -f" with no argument + is OK: ). + + We want to be able to make that assumption in our Makefile recipes. + So we introduce an aggressive probe to check that the usage we want is + actually supported "in the wild" to an acceptable degree. + + * m4/init.m4 (AM_INIT_AUTOMAKE): Implement the probe. 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, by setting the ACCEPT_INFERIOR_RM_PROGRAM + environment variable to "yes". + + * t/spy-rm.tap: Update heading comments. + * t/rm-f-probe.sh: New test. + * t/list-of-tests.mk: Add it. + * PLANS/rm-f-without-args.txt: Adjust. + +2013-01-13 Stefano Lattarini + + subdir-objects: complain if it isn't enabled + + Since the next major automake version 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. + + See automake bug#13378. + + * automake.in (handle_single_transform): Print the warning when + necessary. + * t/subobj.sh: Enhance. + * t/ax/depcomp.sh: Adjust. + * t/cscope.tap: Likewise. + * t/depcomp8a.sh: Likewise. + * t/depcomp8b.sh: Likewise. + * t/ext2.sh: Likewise. + * t/extra-portability.sh: Likewise. + * t/fort2.sh: Likewise. + * t/fort4.sh: Likewise. + * t/fort5.sh: Likewise. + * t/lex-line.sh: Likewise. + * t/libtool3.sh: Likewise. + * t/ltinstloc.sh: Likewise. + * t/ltlibsrc.sh: Likewise. + * t/ltorder.sh: Likewise. + * t/parallel-tests-suffix-prog.sh: Likewise. + * t/sourcefile-in-subdir.sh: Likewise. + * t/specflg9.sh: Likewise. + * t/subobj4.sh: Likewise. + * t/subobj7.sh: Likewise. + * t/subpkg-yacc.sh: Likewise. + * t/subpkg.sh: Likewise. + * t/suffix-custom-subobj-and-specflg.sh: Likewise. + * t/vala-libs.sh: Likewise. + * t/vala-non-recursive-setup.sh: Likewise. + * t/yacc-grepping2.sh: Likewise. + * t/yacc-line.sh: Likewise. + +2013-01-12 Stefano Lattarini + + plans: update w.r.t. latest changes + +2013-01-12 Stefano Lattarini + + ywrap: remove an obsolete FIXME comment + + If it were still relevant, somebody would have complained by now. + +2013-01-12 Stefano Lattarini + + ywrap: style fixes (no semantic change intended) + +2013-01-12 Stefano Lattarini + + convenience: "make lint" as an alias for "make maintainer-check" + + * maintainer/syntax-checks.mk (lint): Here. I'm a lazy typist ... + +2013-01-12 Stefano Lattarini + + docs: typofix in manual + + * doc/automake.texi (Yacc and Lex): Here, don't write "automake -i" + where "automake -a" is actually intended. Re-wrap some text while + at it. + +2013-01-12 Stefano Lattarini + + coverage: using multiple lexers in a single program + + Using Flex and Automake built-in support for lex, that is possible. + A little tricky, but not difficult. + + See: + + + + * t/lex-multiple.sh: New test. + * t/list-of-tests.mk: Add it. + +2013-01-12 Stefano Lattarini + + tests: remove most uses of the AM_PROG_CC_C_O obsolete macro + + Our NEWS file says its use will no longer be required in Automake + 1.13, so better make sure that is actually the case. + + * Several tests: Adjust. + +2013-01-12 Stefano Lattarini + + coverage: obsolete macro AM_PROG_CC_C_O should cause no warning nor errors + + Suggested by Eric Blake. + + * t/am-prog-cc-c-o.sh: New test. + * t/list-of-tests.mk: Add it. + +2013-01-12 Stefano Lattarini + + INSTALL: update copyright years + +2013-01-12 Mike Frysinger (tiny change) + + ithreads: use runtime (not configure time) detection of perl threads + + I can't imagine the runtime checks being a big runtime penalty, so there + shouldn't be a need to do the checks at configure check and hardcode the + result in the generated automake. + + With the current system, it means if you change your perl config (build + perl w/threads, build automake, build perl w/out threads), or deploy a + compiled automake package on a different system (build had threads, but + deployed system does not), you get errors when trying to run automake. + + So take the logic from configure.ac and move it to the one place where + PERL_THREADS is used (lib/Automake/Config.in) and do the version/config + checking at runtime. + + * bootstrap.sh (PERL_THREADS): Delete assignment and use in sed. + * configure.ac (am_cv_prog_PERL_ithreads, PERL_THREADS): Delete all code + related to these two variables. + * lib/Automake/Config.in (perl_threads): Initialize to 0, and only set to + 1 if the perl version is at least 5.007_002, and useithreads is in Config. + +2013-01-12 Stefano Lattarini + + copyright: add few missing copyright notices + + Issue revealed by warnings from "make update-copyright". + + * maintainer/am-ft: Add copyright notice. + * maintainer/am-xft: Likewise. + * maintainer/rename-tests: Likewise. + +2013-01-12 Stefano Lattarini + + maint: files in PLANS are to be exempted from copyright notice + + * maintainer/maint.mk (update-copyright): Adjust. + +2013-01-12 Stefano Lattarini + + maint: consistently honor the UPDATE_COPYRIGHT_YEAR environment variable + + * maintainer/maint.mk (update-copyright): Here. The 'lib/update-copyright' + already honoured it, but some parts of our recipe didn't. This has caused + the incomplete copyright bump that was fixed by the previous patch. + +2013-01-12 Stefano Lattarini + + copyright: update some copyright years + + With "make update-copyright". Apparently they were missed in the + last bump. + + * bootstrap.sh, configure.ac, t/txinfo-builddir.sh: In these files. + +2013-01-11 Stefano Lattarini + + compile: use 'compile' script when "-c -o" is used with losing compilers + + Do so seen when only source files in the "current" directory are present. + + This commit is part of a series of related changes addressing automake + bug#13378 (see also the plan 'PLANS/subdir-objects.txt'). + + Before this change, 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. Issue spotted by Nick Bowler: + + + + + We fix this by having Automake redefine AC_PROG_CC to take over the role + of AM_PROG_CC_C_O and to require the 'compile' script unconditionally + (albeit that will continue to be invoked only when inferior compilers + are detected). + + Among other things, this means AM_PROG_CC_C_O explicitly is no longer + required; that macro is still supported for backward-compatibility, but + calling it is basically a no-op now. + + This change has some pros and some cons (obviously, we believe the former + outweighs the latter). Here are the most relevant ones: + + + Pros 1: + Some logic in the Automake script has been simplified. + + Pros 2: + That simplification has automatically fixed an actual bug (see + Nick's mails referenced above; admittedly, that was present only in + corner-case situations, but still); the test 't/ccnoco4.sh', which + demonstrated the bug and has been failing so far, now passes. + + Pros 3: + Things works more "automagically" now (no need to manually add the + AM_PROG_CC_C_O macro to configure.ac anymore). + + * Cons 1: + The 'compile' script will be required in all projects using C + compilation; this will only be a problem for packages not using + '--add-missing'. However, such packages are definitely more rare + than the ones using '--add-missing', and adjusting them will be + trivial -- just copy the compile script over from the new Automake + installation. + * Cons 2: + The copy & paste of autoconf internals hack this change has introduced + in our "rewrite" of AC_PROG_CC is really an egregious abomination. It + can only be justified with the fact that we expect future versions of + autoconf to implement the semantics we need directly in AC_PROG_CC, so + that we'll be able to leverage that (since Automake 1.14 will require + the latest Autoconf version released). + + Now, the detailed list of file-by-file changes ... + + * automake.in ($seen_cc_c_o): Remove this global variable. + (scan_autoconf_traces): Don't set it, and do not trace the + 'AM_PROG_CC_C_O' m4 macro. + (lang_c_rewrite): Remove, no longer needed. + * doc/automake.texi: Adjust expected "autoreconf --install" output + in the amhello example. Remove statements about the need for the + AM_PROG_CC_C_O macro. Report it is obsolete now. + * m4/init.m4: Re-write AC_PROG_CC to append checks about whether the + C compiler supports "-c -o" together. These checks have basically + been ripped out (with adaptations) from the 'AC_PROG_CC_C_O' macro + of Autoconf and ... + * m4/minuso.m4 (AM_PROG_CC_C_O): ... this macro of ours, which has + thus basically become a no-op. + * t/ax/am-test-lib.sh (am_setup_testdir): Also copy the 'compile' + script in the test directory; if we don't do so, every test using + AC_PROG_CC should call automake with the "--add-missing" option, or + copy the 'compile' script itself. + * t/cond11.sh: No need to create a dummy 'compile' script: that is + already brought in by 'am_setup_testdir()', that is automatically + invoked when 'test-lib.sh' is sourced. + * t/add-missing.tap: Adjust: we expect the 'compile' script to be + required by a mere AC_PROG_CC call now. + * t/dist-auxdir-many-subdirs.sh: Likewise. + * t/specflg6.sh: Likewise. + * t/subobj4.sh: Likewise. + * t/cxx-lt-demo.sh: Likewise, and update comments to match. + * t/distcom2.sh: Enhance a little. + * t/dollarvar2.sh: Adjust. + * t/extra-portability.sh: Likewise. + * t/libobj19.sh: Likewise. + * t/per-target-flags.sh: Likewise. + * t/repeated-options.sh: Likewise. + * t/subobj.sh: Likewise, and enhance a little. + * t/ccnoco2.sh: Remove as obsolete. + * t/list-of-tests.mk (handwritten_TESTS): Adjust. + (XFAIL_TESTS): Remove 't/ccnoco4.sh'. + * NEWS: Update. + +2013-01-11 Stefano Lattarini + + HACKING: suggest more checks before releasing + + In particular, "make check-no-trailing-backslash-in-recipes", + "make check-cc-no-c-o" and "make maintainer-check" should also + be run. + +2013-01-11 Stefano Lattarini + + tests: can fake a compiler not grasping "-c -o" -- globally in all tests + + The ability to easily do so will be quite important in upcoming changes + about C compilation handling and semantics of the 'subdir-objects' + option. Refer to the extensive discussion about automake bug#13378 for + more details: . + + See also commit 'v1.13.1-34-g744cd57' of 2013-01-08, "coverage: compile + rules used "-c -o" also with losing compilers". + + * t/ax/cc-no-c-o.in: New, a "C compiler" that chokes when the '-c' and + '-o' options are passed together to it on the command line. + * Makefile.am (t/ax/cc-no-c-o): Generate this script from it. + (noinst_SCRIPTS, CLEANFILES): Add it. + (EXTRA_DIST): Add 't/ax/cc-no-c-o.in'. + (check-cc-no-c-o): New target, runs the whole testsuite with 'cc-no-c-o' + as the C compiler (bot GNU and non-GNU). + * .gitignore: Update. + * t/ccnoco.sh: Use the new script instead of duplicating it. + * t/ccnoco3.sh: Likewise. + * t/ccnoco4.sh: Likewise. + * t/self-check-cc-no-c-o.sh: New testsuite self-check. + * t/list-of-tests.mk: Adjust. + +2013-01-11 Stefano Lattarini + + sync: update files from upstream with "make fetch" + + * lib/INSTALL: Update. + * lib/config.guess: Likewise. + * lib/config.sub: Likewise. + * lib/gendocs_template: Likewise. + * lib/gitlog-to-changelog: Likewise. + * lib/gnupload: Likewise. + * lib/texinfo.tex: Likewise. + * lib/update-copyright: Likewise. + +2013-01-10 Stefano Lattarini + + typofix: in comments in GNUmakefile + +2013-01-10 Stefano Lattarini + + Rename 'maint/' -> 'maintainer/', for Git's sake + + Otherwise, Git gets confused by the fact that a directory ('maint') + is named like a branch, and forces me to tweak the command line to + resolve the ambiguity for it. + + * maint/: Rename ... + * maintainer/: ... like this. + * Makefile.am, GNUmakefile: Adjust. + +2013-01-10 Stefano Lattarini + + HACKING: minor typofix + +2013-01-10 Stefano Lattarini + + HACKING: bug-tracker, the PLANS directory, and how to plan "big" changes + +2013-01-10 Stefano Lattarini + + HACKING: rewindable branches should live in the 'experimental/*' namespace + +2013-01-10 Stefano Lattarini + + HACKING: fixlets about git branch rewinding policy + +2013-01-10 Stefano Lattarini + + HACKING: commit messages are not to follow GCS ChangeLog rules too strongly + +2013-01-10 Stefano Lattarini + + HACKING: "detailed explanation" in commit messages is almost mandatory + +2013-01-10 Stefano Lattarini + + HACKING: we use "merge --log" even when merging master + +2013-01-10 Stefano Lattarini + + HACKING: typofix + +2013-01-09 Stefano Lattarini + + depend2.am: fix comments on verbosity of compilation rules + + The situation and decisions described on those comments have become + quite outdated since the introduction of the silent-rules support. + Today, the general idea is to have nice, terse output if silent rules + are enabled, and complete, faithful, very verbose output if they are + not -- without trying to "massage" this verbose output in a more + pleasant form if that would cause complication in the affected code. + + So it's better to just drop the obsolescent comments. + + Note that we don't start simplifying the existing rules according + to this new philosophy; that will only be done when touching some + existing code (for the 'depend2.am' code, that will probably happen + on the master branch). + +2013-01-09 Stefano Lattarini + + depend2.am: improve comments a little + + * lib/am/depend2.am: The "fastdep" mode is supported not only for + gcc 3.x, but for gcc 3.x or later, in particular, for all gcc in + the 4.x series (at the time of writing, the latest release is 4.72). + Adjust the comments to match, and re-wrap them while at it. + +2013-01-09 Stefano Lattarini + + plans: automake 1.14 is to assume "rm -f" with no args is OK + + See automake bug#10828. + + * PLANS/rm-f-without-args.txt: New. + +2013-01-09 Stefano Lattarini + + plans: we want to active subdir-objects unconditionally in automake 1.14 + + See automake bug#13378. + + * PLANS/subdir-objects.txt: New. + * t/ccnoco4.sh: Improve heading comments a little. + +2013-01-08 Stefano Lattarini + + tests: adjust stale references to old test names + + * t/remake-renamed-m4-macro-and-file.sh: Adjust to reflect to old + "acloca22 -> t/aclocal-deleted-header.sh" test rename. + * t/aclocal-pr450.sh (configure.ac): Use '$me' in the AC_INIT call, + instead of hard-coding the old name of this test, i.e., "acloca19". + +2013-01-08 Stefano Lattarini + + tests: rename the last aclocal test with dumb name + + * t/acloca10.sh: Rename ... + * t/aclocal-I-install.sh: ... to this saner and slightly more + self-explanatory name. + * t/list-of-tests.mk: Adjust. + +2013-01-08 Stefano Lattarini + + tests: fix an old botched change to an aclocal test + + * t/acloca10.sh (configure.ac): Here, invoke the m4 macro 'MACRO2' + before the macro 'MACRO1' (the related test 't/aclocal-I-order-2.sh' + does the opposite). This reverts a botched edit done (by myself, + oops) in commit 'v1.11-1335-gefdc3e1' of 2011-09-11, "tests: minor + optimizations/simplifications in some aclocal tests", and makes the + behaviour of the test match once again what is stated in the + heading comments. While at it, improve those same heading comments + a little. + +2013-01-08 Stefano Lattarini + + tests: fix some botched inter-test references in heading comments + + * t/aclocal-I-order-2.sh: Here. + * t/aclocal-I-order-2.sh: And here. + +2013-01-08 Stefano Lattarini + + coverage: compile rules used "-c -o" also with losing compilers + + If the 'subdir-objects' option is used, Automake-generated rules for + C compilation pass both the "-c" and "-o" options to the C compiler, + *unconditionally*. There are some compilers that choke on such an + usage, but the AM_PROG_CC_C_O macro takes care of them (it does so by + redefining $CC to use the Automake-provided 'compile' wrapper script + automatically, if a losing compiler is detected at configure runtime). + + Unfortunately, in case the 'subdir-objects' option is specified in a + Makefile.am, but all the source files resided anyway in the top-level + directory (relative to the Makefile.am), Automake do *not* complain + if AM_PROG_CC_C_O wasn't invoked in 'configure.ac' -- all the while + still passing "-c -o" to the compiler invocations. This could cause + compilation failures with losing compilers if the user forget to call + AM_PROG_CC_C_O in 'configure.ac' (and Automake would not warn him of + the issue). + + Expose this bug in the testsuite. + + Issue identified by Nick Bowler in the discussion on automake bug#13378: + + + + * t/ccnoco4.sh: New test. + * t/list-of-tests.mk (XFAIL_TESTS, handwritten_TESTS): List it. + +2013-01-05 Stefano Lattarini + + texi: remove extra verbosity in creation of dirstamp directory + + * lib/am/texi-vers.am (%STAMPVTI%): Here. + +2013-01-05 Stefano Lattarini + + coverage: user can avoid distributing '.info' pages + + Can be done like this: + + AUTOMAKE_OPTIONS = info-in-builddir + dist-info: + @: + + Note that this usage is not yet documented: we might decide to go + for a fully-fledged 'no-dist-info' flag, or something like that, in + future automake version (this is not yet decided); in which case, + it's better not to have people start to rely on the hack above. + Still, there's no good reason to break it gratuitously, hence this + test coverage. + + * t/txinfo-nodist-info.sh: New test. + * t/list-of-tests.mk: Add it. + +2013-01-04 Stefano Lattarini + + Merge branch 'plans' into maint + + * plans: + plans: add some on-going plans (already registered on the bug tracker) + +2013-01-04 Stefano Lattarini + + plans: add some on-going plans (already registered on the bug tracker) + +2013-01-04 Stefano Lattarini + + Merge branch 'plans' into maint + + * plans: + plans: add the "PLANS" directory + + + Conflicts: + Makefile.am + +2013-01-04 Karl Berry + + docs: mention dist-hook help for EXTRA_DIST + + * automake.texi (Basics of Distribution): mention dist-hook + as working around the problems of whole directories in EXTRA_DIST. + +2013-01-03 Stefano Lattarini + + texi: remove workaround for older Texinfo (4.1) + + * lib/am/texibuild.am: Here, in the rules generating HTML output. + We can do so because, since Automake 1.13, we require Texinfo >= 4.9 + anyway. + + Basically a backport of Automake-NG commit '1.12.2-879-ge6caf5e'. + +2013-01-03 Stefano Lattarini + + NEWS: improve wordings in entry deprecating suffix-less info files + +2013-01-03 Stefano Lattarini + + build: don't enable 'color-tests' automake option explicitly + + It's enabled by default since commit 'v1.12.2-136-g2d5571e' (this + change appeared in Automake 1.13). + + * configure.ac (AM_INIT_AUTOMAKE): Drop 'color-tests'. + +2013-01-03 Stefano Lattarini + + build: enable all warnings as fatal in our own build system + + Automake should of course be able to bootstrap itself in a + warning-free manner w.r.t. the Autotools. So make any failure + to do so fatal. Not doing so caused the regression fixed by + previous commit 'v1.13.1-22-ga790fae' to go unnoticed. + + * configure.ac (AM_INIT_AUTOMAKE): Add '-Werror' and '-Wall'. + * bootstrap.sh: Pass the '-Wall -Werror' options to aclocal, + automake and autoconf invocations. + +2013-01-03 Stefano Lattarini + + texi: Texinfo sources and CLEANFILES definition should co-exist peacefully + + But they don't now, due to a regression introduced in commit + 'v1.13.1-4-gc1a8f56'. Fix it. The regression was hitting our + own build system! + + * automake.in (handle_texinfo_helper): Only complain if the + 'info-in-builddir' is not active and a '.info' file (not any + random file!) is listed in CLEANFILES or DISTCLEANFILES. + +2013-01-03 Stefano Lattarini + + tests: make two new test executable + + * t/backslash-issues.sh: This. + * t/extra-data.sh: And this. + + Issue revealed by the 'sc_tests_executable' maintainer check. + +2013-01-03 Stefano Lattarini + + Merge branch 'info-in-builddir' into maint + + * info-in-builddir: + texi: deprecate hack about info files in CLEANFILES variables + texi: info files can be generated in the builddir + +2013-01-03 Stefano Lattarini + + runtest: better command line API + + * t/ax/runtest.in: Accept options '-k' and '--keep-testdirs' (same + as exporting '$keep_testdirs' to "yes"). To improve compatibility + with the "make check" interface, allow environment variables to be + passes on the command line. Minor adjustments while at it. + +2013-01-03 Stefano Lattarini + + tests: move runtest.in away from the top-lever directory + + Not only this leaves the top-lever directory less cluttered, but + helps in keeping the testsuite-related files more "centralized". + + * runtest.in: Move ... + * t/ax/runtest.in: ... here. While at it, add customary + '@configure_input@' comment line. + * Makefile.am (runtest, EXTRA_DIST): Adjust. + +2013-01-03 Stefano Lattarini + + maint: move more maintainer files in the 'maint/' subdir + + * maint.mk: Move ... + * maint/maint.mk: ... here. + * syntax-checks.mk: Move ... + * maint/syntax-checks.mk: ... here. + * Makefile.am: Adjust. + * GNUmakefile: Likewise. + +2013-01-03 Stefano Lattarini + + plans: add the "PLANS" directory + + Individual files or sub-directories about future and on-going + development plans in Automake will be added in follow-up commits. + + This new set of documents 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. + + Motivation: + + Not a flatting picture for us (and maybe a little too harsh), but + basically true and even spot-on in some regards. + + * PLANS/README: New. + * Makefile.am (EXTRA_DIST): Distribute the whole PLANS directory. + +2013-01-02 Stefano Lattarini + + tests: more significant names for some tests + + * t/spy.sh: Rename... + * t/spy-double-colon.sh: ... like this. + * t/yacc4.sh: Rename... + * t/yacc-misc.sh: ... like this. + * t/yaccdry.sh: Rename... + * t/yacc-dry.sh: ... like this. + * t/yaccpp.sh: Rename... + * t/yacc-cxx-grepping.sh: ... like this. + * t/yaccvpath.sh: Rename... + * t/yacc-vpath.sh: ... like this. + +2013-01-02 Stefano Lattarini + + maint: add some of my maintainer-specific scripts + + They are likely not general enough for widespread use, but they + are useful nonetheless. + + In the best-case scenario, they will start to be used by other + people, and thus accordingly improved and made more general and + flexible. + + In the worst case scenario, well, I still get to keep them in a + centralized, blessed place, simplifying the deployment and use + of them; so still a win for me :-) + + * maint/am-ft: New script. + * maint/am-xft: Likewise. + * maint/rename-tests: Likewise. + * Makefile.am (EXTRA_DIST): Add them. + +2013-01-02 Stefano Lattarini + + tests: reorganize tests on backslash issues + + * t/backsl.sh, t/backsl2.sh, t/backsl3.sh: Merge ... + * t/backslash-issues.sh: ... into this test. + * t/backsl4.sh: Rename ... + * t/backslash-before-trailing-whitespace.sh: ... like this. + * t/list-of-tests.mk: Adjust. + +2013-01-02 Stefano Lattarini + + style: add trailing ':' to some test cases + +2013-01-02 Stefano Lattarini + + tests: tweak tests on obsolete EXTRA_DATA variable + + * t/extra3.sh, t/extra4.sh: Merge .... + * t/extra-data.sh: ... into this, with updated comments. + * t/list-of-tests.mk: Adjust. Also Tweak the order in + which some other tests are listed. + +2013-01-02 Stefano Lattarini + + tests: more significant names for some tests + + * t/extra5.sh: Rename .... + * t/extra-dist-vpath-dir.sh: ... like this. + * t/extra6.sh: Rename .... + * t/extra-dist-dirs-and-subdirs.sh: ... like this. + * t/extra7.sh: Rename .... + * t/extra-dist-vpath-dir-merge.sh: ... like this. + * t/extra8.sh: Rename .... + * t/extra-programs-misc.sh: ... like this. + * t/extra9.sh: Rename .... + * t/extra-programs-and-libs.sh: ... like this. + * t/extra10.sh: Rename .... + * t/extra-dist-wildcards.sh: ... like this. + * t/extra11.sh: Rename .... + * t/extra-dist-wildcards-gnu.sh: ... like this. + * t/extra12.sh: Rename .... + * t/extra-dist-wildcards-vpath.sh: ... like this. + * t/extradep.sh: Rename .... + * t/extra-deps.sh: ... like this, and adjust heading comments. + * t/extradep2.sh: Rename .... + * t/extra-deps-lt.sh: ... like this, and adjust heading comments. + * t/list-of-tests.mk: Adjust. + +2013-01-02 Stefano Lattarini + + cosmetics: remove few occurrences of trailing whitespace + +2013-01-02 Stefano Lattarini + + docs: re-introduce mention of two-args AM_INIT_AUTOMAKE invocation + + Albeit obsolescent and raising warnings in the 'obsolete' category, + that usage is still supported, and will need to be until Autoconf + improves its handling of configure-time-generated package version + numbers. So it's better to explicitly document it again, stating + that it is obsoleted but still working (and why), rather then leaving + it as Yet Another Undocumented Feature (that will mysteriously and + suddenly break some random day in the future). + + It's worth giving some background about how we ended up in the + situation that this patch fixes. + + We had originally removed support for the long-deprecated two-args + AM_INIT_AUTOMAKE invocation (see commit v1.12-67-ge186355). Before + that removal could land in a released Automake version, Bob Friesenhahn + made a quite compelling point that the two-args AM_INIT_AUTOMAKE + invocation could still be useful for modern, maintained packages like + GraphicsMagick, at least until Autoconf is fixed to offer better support + for "dynamic" package versions (see commit v1.12.2-245-g2abe183 for more + in-depth rationales and references). However, in that commit we didn't + revert the removal of the *documentation* for this two-arguments + AM_INIT_AUTOMAKE invocation (and no rationale for not doing so was given + in the commit message). Time to remedy that. + + Indirectly suggested by Diego Elio Pattenò: + + + * doc/automake.texi: Adjust. + * NEWS: Update. + * THANKS: Likewise. + +2013-01-02 Stefano Lattarini + + texi: warn against '.txi' and '.texinfo' input suffixes + + The warning being in the 'obsolete' category. This is mostly to + ease transition to Automake-NG (see commit v1.12.1-416-gd5459b9), + and to discourage use of seldom-tested setups. + + * automake.in (handle_texinfo_helper): Warn against Texinfo input + files with '.txi' or '.texinfo' suffixes. + * NEWS: Update. + * t/txinfo-other-suffixes.sh: Adjust and enhance. + * t/txinfo-no-repeated-targets.sh: No longer use '.txi' and + '.texinfo' extensions. + +2013-01-02 Stefano Lattarini + + cleanup: remove two lines of dead code in automake + + * automake.in (scan_texinfo_file): Here, the definition and + munging of '$infobase'. + +2013-01-02 Stefano Lattarini + + texi: warn against suffix-less info files + + The warning being in the 'obsolete' category. This is mostly to + ease transition to Automake-NG (see commit v1.12.1-392-ga0c7b6a), + and to discourage use of seldom-tested setups. + + * automake.in (scan_texinfo_file): Warn against '@setfilename' + directives that specify suffix-less output info files. + * t/txinfo-without-info-suffix.sh: Adjust and enhance. + * t/txinfo-makeinfo-error-no-clobber.sh: No longer use suffix-less + info files in '@setfilename' directives. + * t/primary-prefix-valid-couples.sh: Likewise. + * t/txinfo-setfilename-repeated.sh: Likewise. + * t/txinfo-vtexi2.sh : Likewise. + * t/mdate2.sh: Likewise. + * NEWS: Update. + +2013-01-02 Stefano Lattarini + + texi: deprecate hack about info files in CLEANFILES variables + + For quite a long time, Automake has been implementing an undocumented + hack which ensured that '.info' files which appeared to be cleaned (by + e.g. 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 packages such as Texinfo, + which did 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. + + 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 is + scheduled to be removed altogether in Automake 1.14. + + * automake.in (handle_texinfo_helper): Raise proper runtime warnings + if the hack is triggered. + * NEWS: Update. + * t/txinfo28.sh: Adjust. + * t/txinfo23.sh: Likewise. + * t/txinfo25.sh: Adjust and extend. + * t/txinfo24.sh: Likewise. + +2013-01-01 Stefano Lattarini + + texi: info files can be generated in the builddir + + User can now ask info files to be built in the $(builddir), rather than + the $(srcdir), by specifying the 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. + + OK, to be honest, having '.info' files built in the builddir was + *already* possible, but only using ugly and undocumented hacks involving + definition of the CLEANFILES and/or DISTCLEANFILES. For example, the + binutils project did something like this in the relevant 'Makefile.am': + + # Automake 1.9 will only build info files in the objdir if they are + # mentioned in DISTCLEANFILES. It doesn't have to be unconditional, + # though, so we use a bogus condition. + if GENINSRC_NEVER + DISTCLEANFILES = binutils.info + endif + + See also the extensive discussion about automake bug#11034; in + particular, the following messages: + + + + + + * lib/Automake/Options.pm (_is_valid_easy_option): Recognize the + new 'info-in-builddir' option. + * automake.in (handle_texinfo_helper): If that option is set, + initialize '$insrc' to '0', so that info files will be generated + in the builddir. Adjust comments to match. + * t/txinfo-builddir.sh: New test. + * t/list-of-tests.mk: Add it. + * NEWS: Update. + * doc/automake.texi: Document the new options. + +2013-01-01 Stefano Lattarini + + build: respect silent rules in generation of "amhello" example tarball + + * Makefile.am ($(srcdir)/doc/amhello-1.0.tar.gz): Here. + +2013-01-01 Stefano Lattarini + + NEWS: fixlets and updates + +2013-01-01 Stefano Lattarini + + post-release: minor version bump (1.13.1a) + + * configure.ac, m4/amversion.m4: Bump version to 1.13.1a. + +2013-01-01 Stefano Lattarini + + release: stable minor release 1.13.1 + + * configure.ac (AC_INIT): Bump version number to 1.13.1. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2013-01-01 Stefano Lattarini + + tests: don't always look for a C++ compiler named 'RCC' + + On MacOS X (10.8), since the file system is case-insensitive, RCC + can point to the "Resource Compiler" of the Qt4 Toolkit: + + + + That mismatch causes our configure script to erroneously think that + no working C++ compiler is present, and that is thus necessary to + skip all the test cases requiring such a compiler. + + So only look for a compiler named 'RCC' if the file system is + case-sensible. + + Issue spotted analyzing the testsuite logs reported in bug#13317. + + * configure.ac: Adjust. + +2013-01-01 Stefano Lattarini + + tests: fix bug in pkg-config-macros.sh, could cause spurious SKIPs + + Issue spotted perusing the testsuite logs reported in bug#13317. + + * t/pkg-config-macros.sh: Don't use (uninitialized) '$dir' where '$d' + should have been used instead. Set IFS to ':' before looping on the + $PATH expansion. Fix typo: 'alocal' instead of 'aclocal'. These + issues were causing the location in PATH of the 'pkg-config' program + not to be found even when the program was present. + * THANKS: Update. + +2013-01-01 Stefano Lattarini + + docs: autom4te cache can break CONFIGURE_DEPENDENCIES + + In fact, the new test 'remake-configure-dependencies.sh' only + works because it disables the autom4te cache :-( That is more + of an AUtotools design issue than an Automake bug, so better + just document it ... + + * doc/automake.texi (Rebuilding): ... here. + +2013-01-01 Stefano Lattarini + + coverage: test CONFIGURE_DEPENDENCIES + + * t/remake-configure-dependencies.sh: New test. + * t/list-of-tests.mk: Add it. + * doc/automake.texi: Reference it in comments. + +2013-01-01 Stefano Lattarini + + coverage: test CONFIG_STATUS_DEPENDENCIES + + * t/remake-config-status-dependencies.sh: New test. + * t/list-of-tests.mk: Add it. + * doc/automake.texi: Reference it in comments. + +2012-12-31 Stefano Lattarini + + tests: fix reference to related tests in some comments + + * t/acloca10.sh: Here. + * t/check2.sh: And here. + * t/remake-deleted-m4-file.sh: And here. + +2012-12-31 Stefano Lattarini + + tests: some enhancements to texinfo tests (from Automake-NG) + + * t/txinfo-many-output-formats.sh: Backport improvements, almost verbatim, + from Automake-NG commit 'v1.13-768-gb434acc' (plus minor tweaks for the + sake of non-GNU make implementation). + * t/txinfo-many-output-formats-vpath.sh: New test, backported almost + verbatim from that same Automake-NG commit (again, with minor tweaks for + the sake of non-GNU make implementations). + * t/lsit-of-tests.mk: Adjust. + +2012-12-31 Stefano Lattarini + + tests: fix reference to sister tests in two heading comments + + * t/color-tests.sh: Here. + * t/color-tests2.sh: And here. + +2012-12-31 Stefano Lattarini + + maint: update copyright year for 2013 (in branch maint) + +2012-12-31 Stefano Lattarini + + docs: adjust comment w.r.t. recent tests renaming + +2012-12-31 Stefano Lattarini + + tests: some more renames for texinfo tests + + * t/txinfo.sh: Rename ... + * t/txinfo-tex-dist.sh: ... like this. + * t/txinfo10.sh: Rename ... + * t/txinfo-dvi-recurs.sh: ... like this. + * t/txinfo20.sh: Rename ... + * t/txinfo-makeinfo-error-no-clobber.sh: ... like this. + * t/txinfo-setfilename-suffix-match.sh: Rename ... + * t/txinfo-setfilename-suffix-strip.sh: ... like this. + * t/txinfo-suffix-less-info.sh: Rename ... + * t/txinfo-without-info-suffix.sh: ... like this. + * t/vtexi.sh: Rename ... + * t/txinfo-vtexi.sh: ... like this. + * t/vtexi2.sh: Rename ... + * t/txinfo-vtexi2.sh: ... like this. + * t/vtexi3.sh: Rename ... + * t/txinfo-vtexi3.sh: ... like this, and adjust heading comments. + * t/vtexi4.sh: Rename ... + * t/txinfo-vtexi4.sh: ... like this, and adjust heading comments. + * t/list-of-tests.mk: Adjust. + +2012-12-31 Stefano Lattarini + + tests: enhance and tweak some texinfo tests + + * t/txinfo-subdir-pr343.sh: Move the tests checking that '.info.bak' + files in subdirs are not unduly distributed into ... + * t/txinfo-no-extra-dist.sh: ... in here. Enhance a little while + at it. + * t/txinfo-other-suffixes.sh: Also check that the '.texinfo' suffix + is accepted and works. + * t/txinfo-setfilename-suffix-match.sh: Remove useless call to + autoconf, enhance a little. + +2012-12-31 Stefano Lattarini + + tests: remove a redundant texinfo test + + * t/txinfo-add-missing.sh: This one, its checks being already covered + by the more extensive 't/add-missing.tap' test. + * t/txinfo-add-missing2.sh: Rename ... + * t/txinfo-add-missing-and-dist.sh: Like this. + * t/list-of-tests.mk: Adjust. + +2012-12-31 Stefano Lattarini + + tests: don't list a removed tests in XFAIL_TESTS + + * t/list-of-tests.mk (XFAIL_TESTS): No longer list 't/txinfo5.sh' here, + it has been removed together with the Cygnus support. + +2012-12-31 Stefano Lattarini + + tests: more explicative names for some tests + + Do so for several Texinfo-related tests. Note that some of such tests + with suboptimal names are *not* renamed; that's because they are going + to be removed in the master branch anyway (since they check from some + soon-to-be-removed features), so renaming them would be wasted work, + and could even create useless merge conflicts. + + * t/txinfo2.sh: Rename ... + * t/txinfo-no-extra-dist.sh: ... like this. + * t/txinfo3.sh: Rename ... + * t/txinfo-suffix-less-info.sh: ... like this. + * t/txinfo4.sh: Rename ... + * t/txinfo-unrecognized-info-suffix.sh: ... like this. + * t/txinfo6.sh: Rename ... + * t/txinfo-other-suffixes.sh: ... like this. + * t/txinfo7.sh: Rename ... + * t/txinfo-add-missing.sh: ... like this. + * t/txinfo8.sh: Rename ... + * t/txinfo-add-missing2.sh: ... like this. + * t/txinfo9.sh: Rename ... + * t/txinfo-no-repeated-targets.sh: ... like this. + * t/txinfo17.sh: Rename ... + * t/txinfo-setfilename-repeated.sh: ... like this. + * t/txinfo13.sh: Rename ... + * t/txinfo-subdir-pr343.sh: ... like this. + * t/txinfo16.sh: Rename ... + * t/txinfo-info-in-srcdir.sh: ... like this. + * t/txinfo21.sh: Rename ... + * t/txinfo-many-output-formats.sh: ... like this. + * t/txinfo22.sh: Rename ... + * t/txinfo-override-texinfo-tex.sh: ... like this. + * t/txinfo26.sh: Rename ... + * t/txinfo-absolute-srcdir-pr408.sh: ... like this. + * t/txinfo27.sh: Rename ... + * t/txinfo-no-installinfo.sh: ... like this. + * t/txinfo29.sh: Rename ... + * t/txinfo-override-infodeps.sh: ... like this. + * t/txinfo31.sh: Rename ... + * t/txinfo-setfilename-suffix-match.sh: ... like this. + * t/txinfo32.sh: Rename ... + * t/txinfo-bsd-make-recurs.sh: ... like this. + * t/txinfo33.sh: Rename ... + * t/txinfo-clean.sh: ... like this. + * t/list-of-tests.mk: Adjust. + +2012-12-31 Stefano Lattarini + + cleanup: drop a redundant %?FIRST% transform + + * lib/am/texinfos.am: Here: this file is only included one time + per Makefile by Automake. + + Cherry picked from Automake-NG commit 'v1.12.2-864-g5c580b0'. + +2012-12-31 Stefano Lattarini + + maint: state when compatibility cruft should be removed or warned about + + * automake.in: Here. + * lib/Automake/Options.pm: And here. + * m4/obsolete-err.m4: And here. + +2012-12-30 Stefano Lattarini + + fixup: copyright yars in two recent tests + +2012-12-30 Stefano Lattarini + + obsolete: fixup: don't use AU_DEFUN where AC_DEFUN is required + + * m4/obsolete-err.m4: Here, for the definition of 'AM_PROG_CC_STDC' + +2012-12-30 Stefano Lattarini + + NEWS: minor fixup + +2012-12-30 Stefano Lattarini + + obsolete: better error message if AM_PROG_CC_STDC is used + + In Automake 1.13, the long-deprecated (since 2002) macro AM_PROG_CC_STDC + has been removed. Such a removal, albeit sensible and justified, was + probably done in a too-abrupt way, since it didn't turn the pre-existing + warning messages into fatal error messages, but simply dropped the macro + definition, so that remaining usages of it would cause unclear error + messages, e.g.: + + configure.ac:4: warning: macro 'AM_PROG_CC_STDC' not found in library + + from aclocal, and: + + configure.ac:4: error: possibly undefined macro: AM_PROG_CC_STDC + If this token and others are legitimate, please use m4_pattern_allow. + See the Autoconf documentation. + + from autoconf. + + In an attempt to mitigate this issue, we re-add an AM_PROG_CC_STDC + definition that simply raises a *clear* error message when the macro + is used. + + * t/am-prog-cc-stdc-no-more.sh: New test. + * t/list-of-tests.mk: Add it. + * m4/obsolete-err.m4: Add the new "error-raising" definition for + AM_PROG_CC_STDC; the error message is a variation of the one already + present in the older version of this macro, before it got removed in + commit 'v1.12-15-gd2ca168'. + * NEWS: Update. + +2012-12-30 Stefano Lattarini + + obsolete: better error message if AM_CONFIG_HEADER is used + + In Automake 1.13, the long-deprecated macro AM_CONFIG_HEADER (deprecated + since 2002) has been removed in favour of AC_CONFIG_HEADERS. However, + the removal was done without a proper deprecation period, and that + caused packages upgrading to Automake 1.13 to fail with very unclear + error messages, e.g.: + + configure.ac:4: warning: macro 'AM_CONFIG_HEADER' not found in library + + from aclocal, and: + + configure.ac:4: error: possibly undefined macro: AM_CONFIG_HEADER + If this token and others are legitimate, please use m4_pattern_allow. + See the Autoconf documentation. + + from autoconf. + + In an attempt to mitigate this issue, we re-add an AM_CONFIG_HEADER + definition that simply raises a *clear* error message when the macro + is used. + + Report by Paolo Bonzini: + + + * t/am-config-header-no-more.sh: New test. + * t/list-of-tests.mk: Add it. + * m4/obsolete-err.m4: New file, contain the new AM_CONFIG_HEADER + "error-raising" definition, as well as the definition of the + similarly obsolete macros 'AM_C_PROTOTYPES' and 'fp_C_PROTOTYPES', + moved in from ... + * m4/protos.m4: ... this file, which has thus been removed. + * Makefile.am (dist_automake_ac_DATA): Adjust. + * t/ansi2knr-no-more.sh: Likewise. + * NEWS: Update. + +2012-12-29 Stefano Lattarini + + sync: update files from upstream with "make fetch" + + * lib/config.sub: Update. + * lib/config.guess: Likewise. + +2012-12-29 Stefano Lattarini + + tests: better names for temporary configure.ac files + + When editing a pre-existent 'configure.ac' file in a test script, name + the temporary file 'configure.tmp' rather than 'configure.int'; the + latter was a relict of the times when we used 'configure.in' as the + default name for the Autoconf input files throughout the testsuite. + + * t/cond43.sh: Adjust. + * t/depcomp8a.sh: Likewise. + * t/depcomp8b.sh: Likewise. + * t/gettext.sh: Likewise. + * t/mmode.sh: Likewise. + * t/pr401.sh: Likewise. + * t/pr401b.sh: Likewise. + * t/pr401c.sh: Likewise. + * t/python11.sh: Likewise. + * t/cond42.sh: Likewise. Also, while at it, rename ... + (edit_configure_in): ... this function ... + (edit_configure_ac): ... like this. + +2012-12-28 Stefano Lattarini + + post-release: minor version bump + + This is for the maint branch. + + * configure.ac, m4/amversion.m4: Bump version to 1.13.0a. + +2012-12-28 Stefano Lattarini + + release: stable major release 1.13 + + * configure.ac (AC_INIT): Bump version number to 1.13. + * m4/amversion.m4 (AM_AUTOMAKE_VERSION): Likewise (regenerated + by "make bootstrap"). + +2012-12-24 Stefano Lattarini + + news: fix botched URL + +2012-12-21 Akim Demaille + + ylwrap: various fixes + + Rename properly header guards in generated header files, instead of + leaving Y_TAB_H. + + Convert header guards in implementation files. 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. + + Generate header guards with a single '_' for series of non alphabetic + characters, instead of several. This is what Bison does. + + Makes the test t/yacc-d-basic.sh pass again. + + * lib/ylwrap (guard): Properly honor $1 to rename properly the + header guards. + Keep a single _ instead of several. + (rename_sed): Rename as... + (sed_fix_filenames): this. + Suggested by Stefano Lattarini. + (sed_fix_header_guards): New. + Use it. + +2012-12-21 Akim Demaille + + tests: strengthen the ylwrap tests + + * t/yacc-d-basic.sh: Comment changes. + (generated): New. + Use it to factor various tests. + Check that Y_TAB_H is not issued. + +2012-12-19 Stefano Lattarini + + NEWS: we plan to ditch MS-DOS/DJGPP support in future Automake versions + +2012-12-19 Stefano Lattarini + + maint: typofixes in makefile comments + + * maint.mk (git-upload-release): Here. + +2012-12-19 Stefano Lattarini + + maint: remove extra verbosity from a maintainer rule + + * maint.mk (git-upload-release): Here, by adding a forgotten + '@' recipe modifier. + +2012-12-19 Stefano Lattarini + + NEWS: fix grammaro + +2012-12-19 Stefano Lattarini + + maint: version bump after beta release + + * configure.ac (AC_INIT): Bump version number to 1.12c, as per + HACKING suggestion. + * m4/amversion.m4: Likewise (autoupdated by "make bootstrap"). + +2012-12-19 Stefano Lattarini + + release: beta release 1.12b (will become 1.13) + + * configure.ac (AC_INIT): Bump version number to 1.12b. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2012-12-19 Stefano Lattarini + + cosmetics: comments fixlets in our Makefile + + * Makefile.am: Prefer '#' comments over '##' ones where it makes sense. + Other minor style tweaks to comments about "updated later" variables. + +2012-12-19 Stefano Lattarini + + cosmetics: consistency changes in some make recipes + + * Makefile.am (install-exec-hook, uninstall-hook): Don't use extra + quoting in variable assignments. More consistent use of whitespace. + +2012-12-18 Stefano Lattarini + + tests: avoid a spurious failure on NetBSD + + * t/tags-pr12372.sh (configure.ac): AC_SUBST the LINK variable to a + dummy invocation, to avoid possible errors from make or the linker; + errors we do not care about in the least in this test. + (Makefile.am, sub/Makefile.am): Remove LINK definitions; simply + inherit that in configure.ac. + +2012-12-18 Stefano Lattarini + + tests: re-enable some checks disabled by mistake ... + + * t/subpkg-macrodir.sh: ... in this test. And fix some typos that would + have caused the newly re-enabled check to spuriously fail. Issue revealed + by the lack of '.PHONY' support in Solaris CCS make (yes, so we've been + actually *helped* by that make implementation once, at last. Scary ;-) + +2012-12-18 Stefano Lattarini + + tests: avoid a "grep -E" portability issue + + As stated in the Autoconf manual, the empty alternative is not portable + with "grep -E". For example, while with GNU grep we have: + + $ echo b | grep -E '(|a)b'; echo status = $? + b + status = 0 + + with Solaris 10 /usr/xpg4/bin/grep we have: + + $ echo b | grep -E '(|a)b'; echo status = $? + 1 + status = 1 + + * t/silent-texi.sh: That was causing a spurious failure here. Fix it + by simply using '?' instead (as suggested by the Autoconf manual). + +2012-12-18 Stefano Lattarini + + tests: avoid a spurious failure due to a Clang bug + + This version of clang: + + clang version 3.2 (trunk 163574) + Target: powerpc64-unknown-linux-gnu + Thread model: posix + + caused the test 't/ltcond2.sh' to spuriously fail due to what + appeared like a clang bug. Here is a part of the diagnostic (trimmed + down for better clarity): + + clang: .../cfarm/llvm/lib/MC/MCAsmStreamer.cpp:338: \ + virtual void {anonymous}::MCAsmStreamer::EmitLabel(llvm::MCSymbol*): \ + Assertion `Symbol->isUndefined() && "Cannot define a symbol twice!"' \ + failed. + ... + 7 clang 0x0000000012a459c4 llvm::AsmPrinter::EmitGlobalVariable\ + (llvm::GlobalVariable const*) + 18446744073680468044 + 8 clang 0x0000000012a490a8 llvm::AsmPrinter::doFinalization\ + (llvm::Module&) + 18446744073680481840 + ... + Stack dump: + 0. Program arguments: .../opt/cfarm/clang-2012.09.10/bin/clang \ + -cc1 -triple powerpc64-unknown-linux-gnu -S -disable-free \ + ... + 1. parser at end of file + 2. Code generation + 3. Running pass 'Function Pass Manager' on module 'hello-generic.c'. + clang: error: unable to execute command: Aborted + clang: error: clang frontend command failed due to signal (use -v to \ + see invocation) + clang version 3.2 (trunk 163574) + Target: powerpc64-unknown-linux-gnu + Thread model: posix + + So tweak the affected test case to avoid triggering this bug. This is + the easiest way for us to keep the testsuite result clean and meaningful + on our main Clang test bed. + + * t/ltcond2.sh: Prefer using "extern const char *" variables rather + than functions returning a statically allocated "const char *" variable. + +2012-12-16 Stefano Lattarini + + NEWS: start preparing for the 1.13 release + + * NEWS: Here. In particular, list (some of) the planned future + backward-incompatibilities that will take place in Automake 1.14. + +2012-12-16 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: typofix in the shebang line of 't/py-compile-destdir.sh' + HACKING: release process: fixlets about the announcement + maint: post-release minor version bump + release: stable release 1.12.5 + tests: avoid errors due to underquoted third-party macros + maintcheck: also consider contrib tests for syntax checks + cosmetics: whitespace fixlets in syntax-checks.mk + maint: prefer $(MKDIR_P) over $(mkinstalldirs) in maintainer rules + +2012-12-15 Stefano Lattarini + + tests: typofix in the shebang line of 't/py-compile-destdir.sh' + +2012-12-15 Stefano Lattarini + + HACKING: release process: fixlets about the announcement + + * HACKING: The announcement should be generate *before* bumping + the version number to the next alpha number. Also, only an + abridged version of the announcement should be copied on the + Savannah news feed (a link to the complete announcement should + be linked from there, though). + +2012-12-15 Stefano Lattarini + + maint: post-release minor version bump + + * configure.ac (AC_INIT): Bump version number to 1.12.6a. + * m4/amversion.m4: Likewise (automatically regenerated by + "make bootstrap"). + +2012-12-15 Stefano Lattarini + + release: stable release 1.12.5 + + * configure.ac (AC_INIT): Bump version number to 1.12.5. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2012-12-14 Stefano Lattarini + + tests: avoid errors due to underquoted third-party macros + + * t/pkg-config-macros.sh: Call aclocal with the warnings in the + "syntax" category disabled. + +2012-12-14 Stefano Lattarini + + maintcheck: also consider contrib tests for syntax checks + + * syntax-checks.mk (xtests): By listing them here. + +2012-12-14 Stefano Lattarini + + cosmetics: whitespace fixlets in syntax-checks.mk + +2012-12-14 Stefano Lattarini + + maint: prefer $(MKDIR_P) over $(mkinstalldirs) in maintainer rules + + * maint.mk (check-coverage-run, recheck-coverage-run): Here. This + is especially useful since $(mkinstalldirs) is no longer available + in Automake-NG. + +2012-12-14 Stefano Lattarini + + Merge branch 'maint' + + * maint: + sync: update files from upstream with "make fetch" + gitignore: align with recent changes + fixup: add dummy rule for ChangeLog generation in Makefile.am + maint: no longer use AM_MAKEFLAGS in maintainer rules + maint: use more GNU make features in maintainer rules + maint: move maintainer make rules in maint.mk + +2012-12-14 Stefano Lattarini + + sync: update files from upstream with "make fetch" + + * lib/gnupload: Update. See: + + +2012-12-14 Stefano Lattarini + + gitignore: align with recent changes + +2012-12-14 Stefano Lattarini + + fixup: add dummy rule for ChangeLog generation in Makefile.am + + So that automake won't complain about the missing ChangeLog. + The real rule for ChangeLog generation is now in maint.mk (as + it is maintainer-specific). + + * Makefile.am (ChangeLog): Dummy. + +2012-12-14 Stefano Lattarini + + maint: no longer use AM_MAKEFLAGS in maintainer rules + + They are not required with GNU make. + + * maint.mk: Adjust accordingly. + +2012-12-14 Stefano Lattarini + + maint: use more GNU make features in maintainer rules + + * maint.mk: Here, throughout the file. Other minor cleanups + and refactorings while at it. + +2012-12-14 Stefano Lattarini + + maint: move maintainer make rules in maint.mk + + This is done for two reasons: + + 1. It will enable us to take advantage of more GNU make + features in our maintainer-specific recipes, if we + want to (and we probably will). + + 2. The Makefile.am won't have to be modified each time a + maintainer rule needs to be changed or tweaked; this + will prevent useless remaking of (in particular) the + 't/testsuite-part.am' file. + + * maint.mk: New, several recipes, rules and variables for + maintainer-specific tasks, extracted (with some tweaks) + from ... + * Makefile.am: ... this file. + (EXTRA_DIST): Add 'maint.mk'. + * GNUmakefile: Include 'maint.mk' after 'Makefile'. + +2012-12-14 Stefano Lattarini + + fixup: source 'test-init.sh', not './defs', in a test + + * t/pkg-config-macros.sh: Here. + +2012-12-14 Stefano Lattarini + + Merge branch 'maint' + + * maint: + docs: fixlet about xz compression levels and command line options + maint: more files excluded in 'update-copyright' + maint: adapt 'update-copyright' recipe to the new $(FETCHFILES) format + HACKING: update instructions to update the manuals at www.gnu.org + maint: add an explicative comment in Makefile + maint: factor out the name of the dir where web manuals are generated + maint: rename rules to build/upload web manuals + cosmetic: minor variable and rules reordering in Makefile.am + docs: build the web manuals for CVS in the builddir, not in the srcdir + release: automate uploading of web manuals in CVS + docs: AM_CFLAGS: remove reference to non-existing "more detailed" desc + tests: avoid two spurious failures on FreeBSD + tests: improve 'pkg-config' requirement + +2012-12-14 Stefano Lattarini + + Merge branch 'improve-release-process' into maint + + * improve-release-process: + HACKING: update instructions to update the manuals at www.gnu.org + maint: add an explicative comment in Makefile + maint: factor out the name of the dir where web manuals are generated + maint: rename rules to build/upload web manuals + cosmetic: minor variable and rules reordering in Makefile.am + docs: build the web manuals for CVS in the builddir, not in the srcdir + release: automate uploading of web manuals in CVS + docs: AM_CFLAGS: remove reference to non-existing "more detailed" desc + tests: avoid two spurious failures on FreeBSD + +2012-12-14 Stefano Lattarini + + Merge branch 'pkgconfing-tests-requirement' into maint + + * pkgconfing-tests-requirement: + tests: improve 'pkg-config' requirement + +2012-12-14 Patrick Welche (tiny change) + + docs: fixlet about xz compression levels and command line options + + * doc/automake.texi (The types of distributions): To display a + progress bar, xz takes "-v" for verbose. + +2012-12-13 Stefano Lattarini + + maint: more files excluded in 'update-copyright' + + This will avoid the following spurious warnings when + "make update-copyright" is run: + + .autom4te.cfg: warning: copyright statement not found + .git-log-fix: warning: copyright statement not found + .gitattributes: warning: copyright statement not found + .gitignore: warning: copyright statement not found + AUTHORS: warning: copyright statement not found + THANKS: warning: copyright statement not found + contrib/README: warning: copyright statement not found + contrib/multilib/README: warning: copyright statement not found + doc/amhello/README: warning: copyright statement not found + lib/install-sh: warning: copyright statement not found + lib/mkinstalldirs: warning: copyright statement not found + m4/acdir/README: warning: copyright statement not found + t/README: warning: copyright statement not found + + * Makefile.am (files_without_copyright): New. + (update-copyright): Use it when computing '$exclude_list'. + Also, skip any README file. + +2012-12-13 Stefano Lattarini + + maint: adapt 'update-copyright' recipe to the new $(FETCHFILES) format + + This is a fixup for commit v1.12.5-27-g71ce1b4 of 2012-12-09, "fetch: + improve, and reduce code duplication". + + * Makefile.am (update-copyright): Adjust. + +2012-12-13 Stefano Lattarini + + HACKING: update instructions to update the manuals at www.gnu.org + +2012-12-13 Stefano Lattarini + + maint: add an explicative comment in Makefile + + * Makefile.am (web-manual-update): Here, about a slightly tricky + feature of rsync(1) used in the recipe. + +2012-12-13 Stefano Lattarini + + maint: factor out the name of the dir where web manuals are generated + + Just a minor refactoring to reduce duplication; no semantic change is + intended. + + * Makefile.am (web_manual_dir): New. + (web-manual, web-manual-update, clean-web-manual): Use it. + +2012-12-13 Stefano Lattarini + + maint: rename rules to build/upload web manuals + + The new names are the same used by the similar-purpose rules provided by + the 'top/maint.mk' makefile in gnulib (as of commit v0.0-7741-g4a8c422). + No need to have gratuitous incompatibilities. + + * Makefile.am (web-manuals): Rename ... + (web-manual): ... like this. + (upload-web-manuals): Rename ... + (web-manual-update): ... like this. + (clean-web-manuals): Rename ... + (clean-web-manual): ... like this. + +2012-12-13 Stefano Lattarini + + cosmetic: minor variable and rules reordering in Makefile.am + +2012-12-13 Stefano Lattarini + + docs: build the web manuals for CVS in the builddir, not in the srcdir + + We can do so using the '-I' option of the gendocs.sh script. + + Inspired by the 'web-manual' rule in the 'top/maint.mk' file provided + by gnulib (as of commit v0.0-7741-g4a8c422) as customized by Bison in + its 'cfg.mk' file (as of commit v2.6.5-1007-gf5fceda). + + * Makefile.am (web-manuals): Modify and simplify to take advantage + of gendocs.sh's '-I' option. + (upload-we-manuals): Accordingly adjust sanity checks and the rsync + invocation in the recipe. + (clean_texinfo_clutter_cmd): Delete this variable, it's no longer + required. + (clean-texinfo-clutter): Delete this phony target, it's no longer + required. + (clean-local): Don't depend on it. + * configure.ac: Invoke AC_PROG_LN_S, since we want to use $(LN_S) + in the new 'web-manuals' recipe. + +2012-12-13 Stefano Lattarini + + release: automate uploading of web manuals in CVS + + This is partly inspired to the 'gnu-web-doc-update' script from + gnulib. Unfortunately, we can't use that script directly, because + as of now it assumes a build system integrated with gnulib. + + * Makefile.am (upload-web-manuals): New .PHONY rule. + (RSYNC, CVS, CVSU, CVS_USER, WEBCVS_ROOT): New variables, used by + the new rule. + +2012-12-13 Stefano Lattarini + + docs: AM_CFLAGS: remove reference to non-existing "more detailed" desc + + * doc/automake.texi (Program variables): Here. Reported by NightStrike: + + +2012-12-13 Stefano Lattarini + + tests: avoid two spurious failures on FreeBSD + + Due to the FreeBSD make bug that causes of the well-known automake + bug#7884, two of our bison-requiring tests were failing on FreeBSD. + To avoid this, simply skip the part of these tests affected by that + bug. + + * t/yacc-bison-skeleton.sh: Here, using the 'yl_distcheck' function. + * t/yacc-bison-skeleton-cxx.sh: Likewise. + * t/yacc-nodist.sh: While at it, use the 'yl_distcheck' here + as well, instead of running "$MAKE distcheck" only when $MAKE + is GNU make. + +2012-12-13 Stefano Lattarini + + tests: improve 'pkg-config' requirement + + This improves (and unifies among different tests) the detection of + both the 'pkg-config' program and m4 macros provided by it; they are + needed in particular by tests on Vala support. + + Before this, some Vala-related tests were failing spuriously when the + pkg-config program was available but the macros from pkg.m4 were not + made explicitly available in ACLOCAL_PATH. These tests were: + + vala-mix vala-mix2 vala-parallel vala-vapi vala-vpath + + See also similar commit 'v1.11-581-gb7d67d5' of 2011-12-22, + "tests: better handling of gettext and libtool requirements". + + * t/ax/am-test-lib.sh (process_requirements): If a requirement + matches the 'pkg-config*' wildcard, try to make available to it + the pkg-config m4 macros, and skip it if it's not possible. + This is done by sourcing the 'get.sh' fragment generated by ... + * t/pkg-config-macros.sh: ... this new test, which looks in + advance for the 'pkg-config' program and the m4 macros that + comes with it. + * t/list-of-tests.mk: Add the new test. + * gen-testsuite-part (%deps_extractor): Tests requiring pkg-config + will need the m4 macros coming with it; so these tests should be + run after the 'pkg-config-macros.sh' test. Automatically generate + proper declarations for such dependencies. + * t/vala-header.sh: No need to explicitly check that the macro + PKG_CHECK_MODULES has been expanded by autoconf. + * t/vala-libs.sh: Likewise. + * t/vala-non-recursive-setup.sh: Likewise. + * t/vala-per-target-flags.sh: Likewise. + * t/vala-recursive-setup.sh: Likewise. + +2012-12-09 Stefano Lattarini + + Merge branch 'maint' + + * maint: + docs: AM_CFLAGS: remove reference to non-existing "more detailed" desc + maintcheck: prefer '$(am__cd)' over plain 'cd' + fetch: improve, and reduce code duplication + docs: add rule to generate manuals for www.gnu.org + docs: copy the 'gendocs.sh' script from Texinfo CVS repository + sync: update files from upstream with "make fetch" + release: generate a stub for the release announcement + release: distinguish major and minor releases + tests: avoid two spurious failures on FreeBSD + +2012-12-09 Stefano Lattarini + + Merge branch 'improve-release-process' into maint + + * improve-release-process: + maintcheck: prefer '$(am__cd)' over plain 'cd' + fetch: improve, and reduce code duplication + docs: add rule to generate manuals for www.gnu.org + docs: copy the 'gendocs.sh' script from Texinfo CVS repository + sync: update files from upstream with "make fetch" + release: generate a stub for the release announcement + release: distinguish major and minor releases + +2012-12-09 Stefano Lattarini + + docs: AM_CFLAGS: remove reference to non-existing "more detailed" desc + + * doc/automake.texi (Program variables): Here. Reported by NightStrike: + + +2012-12-09 Stefano Lattarini + + maintcheck: prefer '$(am__cd)' over plain 'cd' + + In a couple of rules in out own build system, as suggested by the + maintainer check 'sc_cd_relative_dir'. + + * Makefile.am (web-manuals, clean_texinfo_clutter_cmd): Adjust. + +2012-12-09 Stefano Lattarini + + fetch: improve, and reduce code duplication + + * Makefile.am (WGET_SV_CVS, WGET_SV_GIT_CF, WGET_SV_GIT_AC, + WGET_SV_GIT_GL): Delete. + (SV_CVS, SV_GIT_CF, SV_GIT_AC, SV_GIT_GL): New. + (fetch): Simplify and enhance. + (update-copyright): Adjust. + +2012-12-09 Stefano Lattarini + + docs: add rule to generate manuals for www.gnu.org + + Less clerical work to do by hand. + + * Makefile.am (web-manuals): New rule. + (clean_texinfo_clutter): New macro. + * clean-web-manuals, clean-texinfo-clutter: New cleaning + rules. + (clean-local): Depend on them. + * .gitignore: Update. + * HACKING: Adjust instructions for generation of manuals. + +2012-12-08 Stefano Lattarini + + docs: copy the 'gendocs.sh' script from Texinfo CVS repository + + As well as the 'gendocs_template' file. And enhance the "make fetch" + target to keep them synced. It's better than having to fetch these + files by hand each time a release is to be made. + + * Makefile.am (FETCHFILES): List 'gendocs.sh' and 'gendocs_template'. + (fetch): Fetch them, into 'lib/'. + (EXRA_DIST): Distribute them. + * HACKING: Adjust instructions for generation of manuals. + +2012-12-08 Stefano Lattarini + + sync: update files from upstream with "make fetch" + + * lib/config.sub: Update. + +2012-12-08 Stefano Lattarini + + release: generate a stub for the release announcement + + It's much better than having to write it my hand each time; after all, + most of it is either boilerplate or a cope of NEWS entries. + + * Makefile.am (determine_release_type): Also set the shell variable + '$announcement_type' appropriately. + (print-release-type): Print the value of this new variable as well. + (announcement): New phony target, generate a files with the same name. + The recipe uses the shell variable '$announcement_type'. + (CLEANFILES): Clean it. + (PACKAGE_MAILINGLIST): New make macro, used when generating the + 'announcement' file. + * HACKING: Explain how to take advantage of the new convenience + target. + * .gitignore: Ignore the 'announcement' file. + +2012-12-08 Stefano Lattarini + + release: distinguish major and minor releases + + This is mostly a preparatory change, in view of future + improvements in our release process. + + * Makefile.am (determine_release_type): Also distinguish + between major and minor releases, with the help of ... + (stable_major_version_rx, stable_minor_version_rx): ... these + new macros. + (stable_version_rx): Remove, it's obsolete now. + (version_rx): Rename ... + (base_version_rx): ... like this, and adjust. + (print-release-type): New target; helps in debugging the code + that determines the release type. + +2012-11-30 Stefano Lattarini + + tests: avoid two spurious failures on FreeBSD + + Due to the FreeBSD make bug that causes of the well-known automake + bug#7884, two of our bison-requiring tests were failing on FreeBSD. + To avoid this, simply skip the part of these tests affected by that + bug. + + * t/yacc-bison-skeleton.sh: Here, using the 'yl_distcheck' function. + * t/yacc-bison-skeleton-cxx.sh: Likewise. + * t/yacc-nodist.sh: While at it, use the 'yl_distcheck' here + as well, instead of running "$MAKE distcheck" only when $MAKE + is GNU make. + +2012-11-27 Stefano Lattarini + + Merge branch 'depcomp-work' + + * depcomp-work: + depcomp: remove 'icc' depmode, add 'tcc' one + news: update w.r.t. recent depcomp changes + tests: fix spurious failures with tcc + depcomp: improve comments about tcc support + depcomp: remove last relics of libtool 1.4 support + depcomp: remove an unused variable + depcomp: rewrite a sed invocation for less quoting + depcomp: whitespace fixes + depcomp: shell code style changes + depcomp: make some code more self-documenting + depcomp: less duplication between AIX and Tru64 modes + depcomp: avoid an extra fork when possible + depcomp: reduce code duplication + depcomp: don't rely on character ranges working as in C locale + depcomp: cosmetic fixlets to a comment + depcomp: safer quoting in variable expansion + depcomp: correctly propagate exit status in exit trap + depcomp: use "rmdir", not "rm -rf", to remove the empty lock directory + depcomp: remove useless quoting in variable definitions + depcomp: be more idiomatic in checking for zero exit statuses + +2012-11-27 Stefano Lattarini + + Merge branch 'maint' + + * maint: + news: we'll remove AM_PROG_MKDIR in 1.14, not 1.13 + tests: give few vala tests more significant names + vala tests: don't use the 'posix' profile, it's no longer supported + news: fixup: bug#8847 is fixed in 1.12.6, not in 1.12.5 + news: document the fix for automake bug#10227 + tests: fix a spurious testsuite failure on Solaris + python: make installed modules find by default on Debian and Ubuntu + +2012-11-26 Stefano Lattarini + + news: we'll remove AM_PROG_MKDIR in 1.14, not 1.13 + + See also commit v1.12.4-158-gdf23daf. + + * NEWS (Future backward-incompatibilities): Adjust accordingly. + +2012-11-26 Stefano Lattarini + + tests: give few vala tests more significant names + + * t/vala.sh: Rename ... + * t/vala-grepping.sh: ... like this. + * t/vala2.sh: Rename ... + * t/vala-recursive-setup.sh: ... like this. + * t/vala3.sh: Rename ... + * t/vala-non-recursive-setup.sh: ... like this. + * t/vala4.sh: Rename ... + * t/vala-configure.sh: ... like this. + * t/vala5.sh: Rename ... + * t/vala-per-target-flags.sh: ... like this, and slightly + improve heading comments. + * t/list-of-tests.mk: Adjust. + +2012-11-26 Stefano Lattarini + + vala tests: don't use the 'posix' profile, it's no longer supported + + Fixes automake bug#12934 a.k.a. bug#12522. + + Some of automake's Vala tests used to rely on "valac --profile posix" + (which makes it not use glib). However, the posix profile was removed + in August 2012, and is no longer present in the GNOME 3.6.2 version + of valac (see commit ca020bf0 in the vala Git repository). + + + * t/vala-libs.sh: Adjust to avoid using the posix profile. + * t/vala-mix.sh: Likewise. + * t/vala-mix2.sh: Likewise. + * t/vala-parallel.sh: Likewise. + * t/vala-vapi.sh: Likewise. + * t/vala-vpath.sh: Likewise. + * NEWS: Update and adjust. + +2012-11-26 Stefano Lattarini + + news: fixup: bug#8847 is fixed in 1.12.6, not in 1.12.5 + + * NEWS (Bugs fixed in 1.12.5): So move it from here ... + (Bugs fixed in 1.12.6): ... to here. + +2012-11-26 Stefano Lattarini + + news: document the fix for automake bug#10227 + + This is a follow-up commit for v1.12.5-14-g1f113f6. + + * NEWS: Update. + +2012-11-26 Stefano Lattarini + + Merge branch 'python-fix-pr10227' into maint + + * python-fix-pr10227: + python: make installed modules find by default on Debian and Ubuntu + +2012-11-26 Stefano Lattarini + + tests: fix a spurious testsuite failure on Solaris + + Reported in automake bug#11524. + + * t/amhello-binpkg.sh: When non-GNU tar is in use, relax grepping of + "tar cvf ..." output a little more. + +2012-11-25 Stefano Lattarini + + tests: give few aclocal tests more significant names + + * t/dirlist-abspath.sh: Rename ... + * t/aclocal-dirlist-abspath.sh: ... like this. + * t/dirlist.sh: Rename ... + * t/aclocal-dirlist.sh: ... like this. + * t/dirlist2.sh: Rename ... + * t/aclocal-dirlist-globbing.sh: ... like this. + * t/list-of-tests.mk: Adjust. + +2012-11-24 Stefano Lattarini + + tests: remove a redundant workaround for a testsuite weakness + + * t/warnings-unknown.sh: Here, since we have improved our wrapper + scripts for aclocal and automake enough to make that workaround + unneeded. + +2012-11-24 Stefano Lattarini + + depcomp: remove 'icc' depmode, add 'tcc' one + + According to the comments in the now-removed test 'depcomp5.test' (removed + by commit 'v1.11-1829-g5066c1b' of 2012-02-08, "tests: improve and rework + tests on dependency tracking") "icc 8.0 and greater understand gcc options, + so depmode is set to gcc". According to Wikipedia, the 8.0 version of the + Intel C compiler has been released in December 2003, that is, almost nine + yeas ago. So we can remove explicit support for icc 7.x from the depcomp + script. + + Since our support for tcc has so far been relied on the icc depmode, we + must write a new explicit 'tcc' depmode. That is easy to do, since we can + rely on the simpler and better-specified format of tcc-specified makefiles; + for more info, see: + + + * lib/depcomp (icc): Remove. + (tcc): New. + * NEWS: Update. + +2012-11-24 Stefano Lattarini + + news: update w.r.t. recent depcomp changes + + * NEWS: Here. + +2012-11-24 Stefano Lattarini + + tests: fix spurious failures with tcc + + * t/depcomp8a.sh, t/depcomp8b.sh: Here, by avoiding initialization of + global 'extern' variables, preferring functions definitions instead. + +2012-11-24 Stefano Lattarini + + depcomp: improve comments about tcc support + + * lib/depcomp (icc): Here. See also tcc commit 0394caf7 "Emit spaces + for -MD" and automake commit v1.11-768-gb96263 "depcomp: support tcc + (Tiny C Compiler)". + +2012-11-24 Stefano Lattarini + + depcomp: remove last relics of libtool 1.4 support + + * lib/depcomp (tru64): Here. + +2012-11-24 Stefano Lattarini + + depcomp: remove an unused variable + + * lib/depcomp ($alnum): This. + +2012-11-24 Stefano Lattarini + + depcomp: rewrite a sed invocation for less quoting + + * lib/depcomp (dashmstdout): Here. + +2012-11-24 Stefano Lattarini + + depcomp: whitespace fixes + + * lib/depcomp: We indent by two spaces, and without using tabs. + +2012-11-24 Stefano Lattarini + + depcomp: shell code style changes + + * lib/depcomp: Here, in comments and line continuations. + +2012-11-24 Stefano Lattarini + + depcomp: make some code more self-documenting + + * lib/depcomp (make_dummy_makefile): With the help of this function. + Use it throughout. + +2012-11-24 Stefano Lattarini + + depcomp: less duplication between AIX and Tru64 modes + + * lib/depcomp (tru64, aix): In these entries of the big 'case' + switch, with the help of ... + (aix_post_process_depfile): ... this new function. + +2012-11-24 Stefano Lattarini + + depcomp: avoid an extra fork when possible + + * lib/depcomp (set_dir_from): Here. + +2012-11-24 Stefano Lattarini + + depcomp: reduce code duplication + + * lib/depcomp: Here, when we have to get the directory and basename + components of objects or source files; do so with the help of ... + (set_dir_from, set_base_from): ... these new shell functions. + +2012-11-24 Stefano Lattarini + + depcomp: don't rely on character ranges working as in C locale + + * lib/depcomp (pgcc): Here. + Related reorganization, with the unconditional definition of ... + ($upper, $lower, $digits, $alnum, $alpha): ... these shell variables. + +2012-11-24 Stefano Lattarini + + depcomp: cosmetic fixlets to a comment + + * lib/depcomp (pgcc): Here, as that's unportable according to the + autoconf manual. In fact, there's no need to re-trap the signals + just before exiting, since at that point a signal would cause at + most a useless but harmless attempt to remove the + +2012-11-24 Stefano Lattarini + + depcomp: safer quoting in variable expansion + + * lib/depcomp (pgcc): Here. Probably not needed, but since the + rest of the script seems to employ proper quoting, better to be + consistent. + +2012-11-24 Stefano Lattarini + + depcomp: correctly propagate exit status in exit trap + + * lib/depcomp (pgcc): Here. + +2012-11-24 Stefano Lattarini + + depcomp: use "rmdir", not "rm -rf", to remove the empty lock directory + + * lib/depcomp (pgcc): Here. + +2012-11-24 Stefano Lattarini + + depcomp: remove useless quoting in variable definitions + + * lib/depcomp (pgcc): Here. + +2012-11-24 Stefano Lattarini + + depcomp: be more idiomatic in checking for zero exit statuses + + * lib/depcomp: Prefer "if test $stat -ne 0; then ..." over the longer + "if test $stat -eq 0; then :; else ...". + +2012-11-24 Stefano Lattarini + + tests: give some tests more significant names + + * t/req.sh: Rename ... + * t/aclocal-req.sh: ... like this. + * t/reqd.sh: Rename ... + * t/add-missing-multiple.sh: ... like this. + * t/block.sh: Rename ... + * t/comment-block.sh: ... like this. + * t/list-of-tests.mk: Adjust. + +2012-11-24 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: fix a spurious failure with older flex versions + +2012-11-24 Stefano Lattarini + + python: make installed modules find by default on Debian and Ubuntu + + This change fixes automake bug#10227. + + The code used to get the python package directory was wrong for Python 3, + at least on Debian and Ubuntu distributions. In the case the installation + was using the default prefix "/usr/local", python modules were incorrectly + installed in the directory + + /usr/local/lib/python3/dist-packages + + (which is *not* searched by default), rather than in a directory like + + /usr/local/lib/python3.x/dist-packages + + which is searched by default. + + * m4/python.m4 (AM_PATH_PYTHON): Try to use the 'sysconfig' module if + possible, for better interactions with python 3.x. + + Helped-by: Reuben Thomas + Helped-by: Roumen Petrov + +2012-11-24 Stefano Lattarini + + tests: fix a spurious failure with older flex versions + + See automake bug#11524 and bug#12836. + + * t/lex-header.sh: Here, we use flex option '--header-file', + but that option is not supported by some older flex versions. + Simply skip this test if such an old flex version is detected. + +2012-11-23 Stefano Lattarini + + tests: avoid a failure due to m4 builtin 'sinclude' in package name + + Even with Autoconf 2.69, AC_INIT is not very robust when to package + names that contain some selected m4 builtins; for example: + + $ echo 'AC_INIT([sinclude], [1.0])' | autoconf -o/dev/null - + stdin:1: warning: file `' included several times + + $ echo 'AC_INIT([dnl], [1.0])' | autoconf -o/dev/null - + /usr/bin/m4:stdin:1: excess arguments to builtin `m4_define' ignored + autom4te: /usr/bin/m4 failed with exit status: 1 + + Reference: + + + * t/aclocal-m4-sinclude.sh (configure.ac): Use 'm4sinclude' as package + name in the AC_INIT invocation, to avoid tickling the just-described + bug. + +2012-11-21 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: fix a spurious failure when $PYTHON is in the environment + python tests: support PEP-3147 installation layout + python: uninstall cater to PEP-3147 + tests: improve a comment + tests: honour $PYTHON override + tests: typofix in message + news: document fix for bug#8847 (PEP-3147, __pycache__) + python: improve support for modern python (CPython 3.2 and PyPy) + +2012-11-21 Stefano Lattarini + + Merge branch 'python-pep-3147' into maint + + * python-pep-3147: + tests: fix a spurious failure when $PYTHON is in the environment + python tests: support PEP-3147 installation layout + python: uninstall cater to PEP-3147 + tests: improve a comment + tests: honour $PYTHON override + tests: typofix in message + news: document fix for bug#8847 (PEP-3147, __pycache__) + python: improve support for modern python (CPython 3.2 and PyPy) + +2012-11-19 Stefano Lattarini + + tests: fix a spurious failure when $PYTHON is in the environment + + * t/python11.sh: This test doesn't interact well with user-overrides of + $PYTHON; and, given its particular nature, neither should it be expected + to honour that override. Just unset that $PYTHON variable and live + happy. + +2012-11-19 Stefano Lattarini + + python tests: support PEP-3147 installation layout + + This fixes several spurious testsuite failures with python >= 3.2, + introduced by recent commit v1.12.4-43-ge0e99ed, "python: improve + support for modern python (CPython 3.2 and PyPy)". + + * t/ax/am-test-lib.sh (python_has_pep3147, pyc_location, py_installed): + New functions. + ($am_pep3147_tag): New variable. + * t/py-compile-basic2.sh: Deleted, too difficult to adapt for the + gain it would offer; move the still relevant parts ... + * t/py-compile-basic.sh: ... here. Adapt and adjust the rest of + the test as well. + * t/nobase-python.sh: Adapt and adjust. + * t/py-compile-basedir.sh: Likewise. + * t/py-compile-destdir.sh: Likewise. + * t/py-compile-option-terminate.sh: Likewise. + * t/python-pr10995.sh: Likewise. + * t/python-virtualenv.sh: Likewise. + * t/python10.sh: Likewise. + * t/python12.sh: Likewise. + * t/python3.sh: Likewise. + * t/list-of-tests.mk: Adjust list of tests. + +2012-11-19 Stefano Lattarini + + python: uninstall cater to PEP-3147 + + After recent commit commit v1.12.4-43-ge0e99ed, "python: improve + support for modern python (CPython 3.2 and PyPy)", the python install + rules have been made smart enough to install "*.pyc" byte-compiled + files according to PEP-3147 with modern (post-3.2) pythons. However, + the uninstall rules hadn't been updated accordingly, causing leftover + files to remain around after "make uninstall", as well as failures in + "make distcheck". + + * lib/am/python.am (am__pep3147_tweak): New internal macro, used + in ... + (uninstall-%DIR%PYTHON): ... the recipe of this target, which has + been adjusted to cater to PEP-3147 + +2012-11-19 Stefano Lattarini + + tests: more explicative names for few aclocal tests + + * t/aclocal3.sh: Rename ... + * t/aclocal-missing-macros.sh: ... like this. + * t/aclocal4.sh: Rename ... + * t/aclocal-deps.sh: ... like this. + * t/aclocal5.sh: Rename ... + * t/aclocal-deps-subdir.sh: ... like this. + * t/aclocal6.sh: Rename ... + * t/aclocal-remake-misc.sh: ... like this. + * t/aclocal7.sh: Rename ... + * t/aclocal-no-force.sh: ... like this. + * t/acloca8.sh: Rename ... + * t/aclocal-no-unused-required.sh: ... like this. + * t/acloca9.sh: Rename ... + * t/aclocal-I-order-1.sh: ... like this. + * t/acloca11.sh: Rename ... + * t/aclocal-I-order-2.sh: ... like this, and update heading comments. + * t/acloca12.sh: Rename ... + * t/aclocal-I-order-3.sh: ... like this, and update heading comments. + * t/acloca13.sh: Rename ... + * t/aclocal-m4-sinclude.sh: ... like this, and update heading comments. + * t/acloca14.sh: Rename ... + * t/aclocal-m4-include-are-scanned.sh: ... like this. + * t/acloca14.sh: Rename ... + * t/aclocal-m4-include-are-scanned-aclocal-amflags.sh: ... like this, + and update heading comments. + * t/acloca15.sh: Rename ... + * t/aclocal-scan-configure-ac-pr319.sh: ... like this. + * t/acloca16.sh: Rename ... + * t/aclocal-no-extra-scan.sh: ... like this, and enhance slightly. + * t/acloca18.sh: Rename ... + * t/aclocal-serial.sh: ... like this. + * t/acloca19.sh: Rename ... + * t/aclocal-pr450.sh: ... like this. + * t/acloca20.sh: Rename ... + * t/aclocal-no-symlinked-overwrite.sh: ... like this. + * t/acloca21.sh: Rename ... + * t/aclocal-comments-respected.sh: ... like this. + * t/acloca22.sh: Rename ... + * t/aclocal-deleted-header.sh: ... like this. + * t/acloca22b.sh: Rename ... + * t/aclocal-deleted-header-aclocal-amflags.sh: ... like this. + * t/acloca23.sh: Rename ... + * t/aclocal-underquoted-defun.sh: ... like this. + * t/list-of-tests.mk: Update. + +2012-11-18 Stefano Lattarini + + tests: improve coverage on Texinfo + silent rules + + * t/silent-texi.sh: Here, by basic importing the version of the + test that is the 'ng/master' branch (that of Automake-NG), plus + a minor tweak to avoid a spurious failure with NetBSD make. + +2012-11-17 Stefano Lattarini + + Merge branch 'maint' + + * maint: + build: fix rebuild rules for Makefile.in and aclocal.m4 + hacking: release procedure: fix order of some steps + maint: post-release minor version bump + release: stable release 1.12.5 + +2012-11-17 Stefano Lattarini + + build: fix rebuild rules for Makefile.in and aclocal.m4 + + They have been broken after our removal of the 'perllibdir' hack + in yesterday's commit v1.12.4-45-g4872dfe. + + * configure.ac: Rather then redefining AUTOMAKE and ACLOCAL to + explicitly override the perllibdir, the acdir and the libdir, use + the ready-made t/wrap/{aclocal,automake}-$APIVERSION scripts. + * NEWS: Document the fix. + +2012-11-17 Stefano Lattarini + + hacking: release procedure: fix order of some steps + + * HACKING (Release procedure): The manuals should be rebuilt and + uploaded at at www.gnu.org *before* bumping the version number to + the next alpha release. + +2012-11-17 Stefano Lattarini + + maint: post-release minor version bump + + * configure.ac (AC_INIT): Bump version number to 1.12.5a. + * m4/amversion.m4: Likewise (automatically regenerated by + "make bootstrap"). + +2012-11-17 Stefano Lattarini + + release: stable release 1.12.5 + + * configure.ac (AC_INIT): Bump version number to 1.12.5. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2012-11-16 Stefano Lattarini + + Merge branch 'maint' + + * maint: + maintcheck: avoid failures, sync with 'ng/master' more + maintcheck: remove 'sc_perl_syntax' + sync: update files from upstream with "make fetch" + maint: get rid of $perllibdir environment variable hack + configure: respect the '-q' option better + cosmetics: de-tabify configure.ac + +2012-11-16 Stefano Lattarini + + maintcheck: avoid failures, sync with 'ng/master' more + + * syntax-checks.mk (sc_diff_aclocal_in_aclocal, + sc_diff_automake_in_automake): Rename ... + (sc_diff_aclocal, sc_diff_automake): ... respectively to these, rewrite + to use static pattern rules and 'diff -u' instead of bare 'diff'. This + makes the rules more robust in the face of edits to 'automake.in' and + 'aclocal.in', and get them in sync with the corresponding checks in the + 'ng/master' branch. + (syntax_check_rules): Adjust. + +2012-11-16 Stefano Lattarini + + maintcheck: remove 'sc_perl_syntax' + + It is quite useless, since a "make bootstrap" or "make check" would + immediately catch a breakage in the 'aclocal' or 'automake' scripts + anyway. In addition, the recent removal of the 'perllibdir' environment + variable hack has broken this check. + + * syntax-checks.mk (sc_perl_syntax): Remove. + (syntax_check_rules): No longer list it. + +2012-11-16 Stefano Lattarini + + sync: update files from upstream with "make fetch" + + * lib/texinfo.tex, lib/config.sub: Update. + +2012-11-16 Stefano Lattarini + + maint: get rid of $perllibdir environment variable hack + + That was needed when the automake-$APIVERSION and aclocal-$APIVERSION + wrapper scripts used by the testsuite were shell script, rather than + perl scripts acting as a thin layers. + + * aclocal.in (BEGIN): Update @INC based on the contents of the array + '@Aclocal::perl_libdirs', rather than of the environment variable + 'perllibdir'. + * t/wrap/aclocal.in (BEGIN): Initialize '@Aclocal::perl_libdirs' + rather than $ENV{'perllibdir'}. + * automake.in (BEGIN): Update @INC based on the contents of the array + '@Automake::perl_libdirs', rather than of the environment variable + 'perllibdir'. + * t/wrap/automake.in (BEGIN): Initialize '@Automake::perl_libdirs' + rather than $ENV{'perllibdir'}. + * NEWS: Update. + +2012-11-16 Stefano Lattarini + + configure: respect the '-q' option better + + * configure.ac: Here, by avoiding to print the warnings about + using a non-stable Automake version if the '$silent' variable + is set to "yes". + +2012-11-16 Stefano Lattarini + + cosmetics: de-tabify configure.ac + +2012-11-15 Stefano Lattarini + + fixup: Automake installation works again + + By renaming 'dist_automake_ac_DATA' to 'nobase_dist_automake_ac_DATA' in + a recent patch, we have broken the Automake installation, since m4 files + that were expected to be installed in '${prefix}/aclocal-${APIVERSION}' + are now being installed in '${prefix}/aclocal-${APIVERSION}/m4' instead. + Fix this mess. + + * Makefile.am (nobase_dist_automake_ac_DATA): Rename ... + (dist_automake_ac_DATA): ... like this. And move + 'm4/internal/ac-config-macro-dirs.m4' ... + (dist_automake_internal_ac_DATA): ... here. + (automake_internal_acdir): New, simply defined to + '$(automake_acdir)/internal'. + +2012-11-15 Stefano Lattarini + + Merge branch 'ac-config-macro-dirs' + + * ac-config-macro-dirs: + tests: AC_CONFIG_MACRO_DIRS: ignore inevitable failures with old autoconf + aclocal: AC_CONFIG_MACRO_DIRS: work around autom4te option parsing bugs + aclocal: tracing AC_CONFIG_MACRO_DIRS can work with older autoconf as well + +2012-11-15 Stefano Lattarini + + tests: AC_CONFIG_MACRO_DIRS: ignore inevitable failures with old autoconf + + When "older" version of autoconf are used (that is, those before commit + v2.69-44-g1ed0548), we have no sane way to prevent the autom4te invocation + issued from aclocal to possibly display warnings "MACRO m4_require'd but + not m4_defun'd". That's not a big deal, because that just means that + people using pre-2.70 autoconf with cutting-edge automake will see few + spurious warnings, but the actual semantics will remain correct. + + However, this blemish was causing a couple of annoying testsuite failures. + Solve this by simply skipping the affected tests when older (pre-2.70) + autoconf versions are used. + + * t/aclocl-macrodir.tap ("AC_CONFIG_MACRO_DIR interaction with + AC_REQUIRE"): Skip when older autoconf is in use. + * t/aclocl-macrodirs.tap ("AC_CONFIG_MACRO_DIR interaction with + AC_REQUIRE"): Likewise. + +2012-11-15 Stefano Lattarini + + recursion: remove _AM_EXTRA_RECURSIVE_TARGETS indirection + + Since automake automatically smashes extra whitespace and newlines + in the arguments of the macros it traces, we can remove the extra + indirection with the _AM_EXTRA_RECURSIVE_TARGETS. This doesn't + truly simplify the existing code, but make it slightly easier to + understand anyway, since leave it with one less indirection. + + * automake.in: Trace AM_EXTRA_RECURSIVE_TARGETS directly, rather + than tracing _AM_EXTRA_RECURSIVE_TARGETS. Remove trailing and + leading empty fields in the extracted arguments. + * m4/extra-recurs.m4 (_AM_EXTRA_RECURSIVE_TARGETS): Remove, no longer + needed. + (AM_EXTRA_RECURSIVE_TARGETS): Adjust by making it a simple no-op. + +2012-11-15 Stefano Lattarini + + aclocal: AC_CONFIG_MACRO_DIRS: work around autom4te option parsing bugs + + The autom4te program coming with autoconf 2.68 and earlier had a bug + which caused the "-" command line argument (with which we tell it to + read some input from from standard input) to aways be pushed at the + *end* of the command line, regardless of where the user specified it + (that bug was fixed by autoconf commit 'v2.68-120-gf4be358', "getopt: + new Autom4te::Getopt module"). + + This broken semantics conflict with our usage in aclocal, where we + need to pass some input to the invoked autom4te program early, and + have so far been using the stdin to do so. Now we start using an + external file instead. + + * m4/internal/ac-config-macro-dirs.m4: New file, contain a fallback + definition of the AC_CONFIG_MACRO_DIRS macro for older autoconf + releases. + * aclocal.in (trace_used_macros): When invoking autom4te, use that + file instead of "abusing" standard input. + * Makefile.am (dist_automake_ac_DATA): Rename ... + (nobase_dist_automake_ac_DATA): ... like this. + Add 'm4/internal/ac-config-macro-dirs.m4' to it. + * t/aclocal-acdir.sh: Adjust to avoid spurious failures. + + Helped-by: Eric Blake + +2012-11-15 Stefano Lattarini + + aclocal: tracing AC_CONFIG_MACRO_DIRS can work with older autoconf as well + + This will allow our users to interact also with pre-2.70 autoconf without + need for the user to add ACLOCAL_AMFLAGS in Makefile.am. For example, + before this change, in order to have aclocal look for macros in 'm4/dir1' + and 'm4/dir2' also when (say) autoconf 2.69 was used, our users would + have had to add something like: + + ACLOCAL_AMFLAGS = -I m4/dir1 -I m4/dir2 + + in Makefile.am, in addition to the + + AC_CONFIG_MACRO_DIRS([m4/dir1 m4/dir2]) + + in configure.ac. Now, the AC_CONFIG_MACRO_DIRS call is enough. + + See the long-winded discussion on automake bug#12845 for more details: + + + * aclocal.in ($ac_config_macro_dirs_fallback): New global variable, + contains m4 code to issue a fallback definition of AC_CONFIG_MACRO_DIRS + as an alias for the private macro _AM_CONFIG_MACRO_DIRS. + (trace_used_macros): Handle and trace that macro. Do some code + reorganization and fix related botched indentation while at it. + (write_aclocal): Output '$ac_config_macro_dirs_fallback' early in + the generated aclocal.m4. + * t/aclocal-macrodirs.tap: Run unconditionally, even with older + autoconf. + * t/subpkg-macrodir.sh: Likewise. + * doc/automake.texi: Document only AC_CONFIG_MACRO_DIRS, rather + than AC_CONFIG_MACRO_DIR. + +2012-11-14 Stefano Lattarini + + Merge branch 'ac-config-macro-dirs' + + * ac-config-macro-dirs: + news: we trace AC_CONFIG_MACRO_DIRS + aclocal: trace AC_CONFIG_MACRO_DIR_TRACE + aclocal: avoid spurious warnings from autom4te with AC_CONFIG_MACRO_DIRS + coverage: expose a bug in aclocal (spurious warnings) + aclocal: smash newlines in arguments of traced macros + tests: better coverage for AC_CONFIG_MACRO_DIRS + aclocal: diagnose non-existing directories in AC_CONFIG_MACRO_DIRS better + aclocal: multiple local m4 macro dirs with AC_CONFIG_MACRO_DIRS + +2012-11-11 Stefano Lattarini + + tests: improve a comment + + * t/ax/am-test-lib.sh (require_tool): Here, about python support + for '--version' option. + +2012-11-11 Stefano Lattarini + + tests: honour $PYTHON override + + * t/ax/am-test-lib.sh (require_tool): Here. + * t/python-too-old.sh: And here. + * t/python-vars.sh: And here. + * t/python-virtualenv.sh: And here. Also add some sanity + checks while at it. + +2012-11-11 Stefano Lattarini + + tests: typofix in message + + * t/python-virtualenv.sh: Here. + +2012-11-11 Stefano Lattarini + + news: document fix for bug#8847 (PEP-3147, __pycache__) + + * NEWS (Bugs fixed in 1.12.5): Here. + +2012-11-11 Yaakov Selkowitz (tiny change) + + python: improve support for modern python (CPython 3.2 and PyPy) + + This fixes automake bug#8847. + + * m4/python.m4 (AM_PATH_PYTHON): Add python3.3 to + _AM_PYTHON_INTERPRETER_LIST. + * lib/py-compile: Fix compiled filenames for PEP-3147, currently + implemented in CPython 3.2 and newer. Do not create '.pyo' files + for PyPy. + +2012-11-10 Stefano Lattarini + + news: we trace AC_CONFIG_MACRO_DIRS + + * NEWS (New in 1.13): Update accordingly. + +2012-11-10 Stefano Lattarini + + news: improve wording + + * NEWS (New in 1.13): Prefer "no longer" over "not anymore", + wherever possible. Related re-wrapping of text. + +2012-11-10 Stefano Lattarini + + aclocal: trace AC_CONFIG_MACRO_DIR_TRACE + + This is now the documented way, and indeed the only correct way, to + support AC_CONFIG_MACRO_DIR and AC_CONFIG_MACRO_DIRS in third-party + tools. See autoconf commit v2.69-45-g5269030 of 2012-11-09, + "AC_CONFIG_MACRO_DIRS: improve tracing and add sanity checks". + + * aclocal.in (trace_used_macros): Trace 'AC_CONFIG_MACRO_DIR_TRACE' + rather than 'AC_CONFIG_MACRO_DIRS'. We still have to trace + 'AC_CONFIG_MACRO_DIR' explicitly though, for compatibility with + Autoconf versions before 2.70. + * t/aclocal-macrodirs.tap: Enhance w.r.t. precedence of arguments + in one and several AC_CONFIG_MACRO_DIRS calls. + +2012-11-10 Stefano Lattarini + + aclocal: avoid spurious warnings from autom4te with AC_CONFIG_MACRO_DIRS + + When some macro expanded in configure.ac calls AC_REQUIRE on another + macro that is defined in one of the local m4 macro dirs specified + with AC_CONFIG_MACRO_DIRS, aclocal prints spurious warnings like: + + configure.ac:4: warning: MY_BAR is m4_require'd but not m4_defun'd + configure.ac:3: MY_FOO is expanded from... + + Such warnings come from autom4te, and are due to the fact that the + *first* autom4te invocation issued by aclocal is not yet able to + "see" the m4 macro definitions in the local m4 dirs (because they + can be looked for only after the AC_CONFIG_MACRO_DIRS call has been + traced, and tracing it requires running autom4te). + + To allow us to work around this issue, autom4te has introduced a new + "witness" macro 'm4_require_silent_probe', that, when defined, allows + us to silence that particular kind of warnings (and only it). + + Reported by Nick Bowler; see point (4) of: + + + * aclocal.in (trace_used_macros): Pre-define the special macro + 'm4_require_silent_probe' when invoking autom4te. + * t/aclocal-macrodirs.tap ("AC_CONFIG_MACRO_DIR interaction with + AC_REQUIRE"): This test passes now: remove the "TODO" directive. + * t/aclocal-macrodir.tap ("AC_CONFIG_MACRO_DIRS interaction with + AC_REQUIRE"): Likewise. + * t/acloca17.sh: Remove. + * t/list-of-tests.mk: Adjust. + +2012-11-10 Stefano Lattarini + + coverage: expose a bug in aclocal (spurious warnings) + + When some macro expanded in configure.ac calls AC_REQUIRE on another + macro that is defined in one of the local m4 macro dirs specified + with one of the macros AC_CONFIG_MACRO_DIRS or AC_CONFIG_MACRO_DIR, + aclocal prints spurious warnings like: + + configure.ac:4: warning: MY_BAR is m4_require'd but not m4_defun'd + configure.ac:3: MY_FOO is expanded from... + + Expose this weakness in our testsuite. + + Reported by Nick Bowler; see point (4) of: + + + * t/aclocal-macrodir.tap ("AC_CONFIG_MACRO_DIR interaction with + AC_REQUIRE"): New test, still xfailing. + * t/aclocal-macrodirs.tap ("AC_CONFIG_MACRO_DIRS interaction with + AC_REQUIRE"): Likewise. + +2012-11-10 Stefano Lattarini + + aclocal: smash newlines in arguments of traced macros + + This change fixes the existing issues with AC_CONFIG_MACRO_DIRS + containing newlines: + + + Likely, it will also allow a less involved implementation of the + AM_EXTRA_RECURSIVE_TARGETS macro (but that is left for potential + follow-up patches). + + * aclocal.in (trace_used_macros): When calling autom4te, pass its + '--trace' option an argument containing '${::}%' rather than '$1'. + According to the autoconf manual (as of version 2.69), that will expand + to the concatenation, with the '::' string, of all the arguments passed + to a macro, with all newline characters in such arguments smashed. + Related adjustments when handling the macro AC_CONFIG_MACRO_DIRS, to + ensure leading whitespace in its argument are handled correctly. + * t/aclocal-macrodirs.tap ("AC_CONFIG_MACRO_DIRS: extra whitespace"): + No longer declare it as an xfailing test. + +2012-11-10 Stefano Lattarini + + tests: better coverage for AC_CONFIG_MACRO_DIRS + + Suggested by a report from Nick Bowler: + + + * t/aclocal-macrodirs.tap: Enhance to check use of extra whitespaces + and newline characters in the arguments to AC_CONFIG_MACRO_DIRS. This + test currently fails, so mark it as "TODO". While at it, throw in other + minor edits and enhancements. + +2012-11-10 Stefano Lattarini + + aclocal: diagnose non-existing directories in AC_CONFIG_MACRO_DIRS better + + This new implementation ensures that any directory (possibly excluding + the first one, if the '--install' option is used) that is declared with + AC_CONFIG_MACRO_DIRS and that is non-existent will cause an error from + aclocal. + + * aclocal.in (scan_m4_dirs): Add a new argument, telling whether it's OK + for the scanned directory to be non-existing. Adjust the implementation + accordingly. + ($first_user_m4dir): Remove, no more needed. + (scan_m4_files): Update 'scan_m4_dirs' invocations so that aclocal will + not complain if the first user macro directory is non-existing and the + '--install' option is given: such directory will be created later by + aclocal itself. + * t/aclocal-macrodir.tap: Do not mark the last test as TODO anymore; + it now passes. Make stricter by ensuring a non-existing directory in + AC_CONFIG_MACRO_DIRS causes an hard error, not a warning. + +2012-11-10 Stefano Lattarini + + aclocal: multiple local m4 macro dirs with AC_CONFIG_MACRO_DIRS + + A new macro 'AC_CONFIG_MACRO_DIRS' has been recently introduced in + autoconf (and is expected to appear in the autoconf 2.70 release), + allowing us to declare several local m4 macro directories for a + package. + + It can be done either passing several arguments to a single invocation: + + AC_CONFIG_MACRO_DIRS([dir1 dir2]) + + or issuing more invocations: + + AC_CONFIG_MACRO_DIRS([dir1]) + AC_CONFIG_MACRO_DIRS([dir2]) + + or a combination of the two: + + AC_CONFIG_MACRO_DIRS([dir1 dir2]) + AC_CONFIG_MACRO_DIRS([dir3]) + + This will allow projects to use several m4 macro local dirs, without the + need to use ACLOCAL_AMFLAGS (which we want to make obsolete and finally + remove). This is especially important for projects that are used as + nested subpackages of larger projects. + + For more information and rationales, refer to these past discussions: + + + + + + + + + + as well as to Automake commit v1.12.1-165-gcd1a9cc of 2012-07-03, + "aclocal: deprecate ACLOCAL_AMFLAGS, trace AC_CONFIG_MACRO_DIR instead", + autoconf commit v2.69-42-gd73770f of 2012-10-17, "AC_CONFIG_MACRO_DIRS: + new macro, mostly for aclocal". + + * aclocal.in ($ac_config_macro_dir): Turn this global scalar it into ... + (@ac_config_macro_dirs): ... this global array. + (trace_used_macros): Update '@ac_config_macro_dirs' instead of + re-defining '$ac_config_macro_dir'. Cater to calls the now-preferred + macro 'AC_CONFIG_MACRO_DIRS' in addition to the "obsolescent" one + AC_CONFIG_MACRO_DIR. + (main loop): Append '@ac_config_macro_dirs', not '$ac_config_macro_dir', + to '@user_includes'. + * t/subpkg-macrodir.sh: New test. + * t/aclocal-macrodirs.tap: Likewise. + * t/list-of-tests.mk: Add them. + * t/aclocal-macrodir.tap: Adjust and extend a little to keep it more in + sync with 'aclocal-macrodirs.tap'. + +2012-11-07 Stefano Lattarini + + tests: remove an obsolete comment + + * t/silent-yacc.sh: Here. + +2012-11-07 Stefano Lattarini + + tests: remove mostly-redundant tests on silent rules + + We used to have several couples of tests named like 'silent-foo-gcc.sh' + and 'silent-foo-generic.sh'. Differently from what the names suggest, + the first test in such a couple (that is, "silent-foo-gcc.sh") was not + meant to check specific GCC-related features, but rather to check how + the silent rules behave in combination with automatic dependency tracking + when the 'gcc' depmode (that targets GCC versions before the 3.x and 4.x + release series) is forced. + + Such depmode forcing was done exclusively to cover the code paths in + 'lib/am/depend2.am' that actually invoke the 'depcomp' script, rather + than using the inlined, GCC-specific compiler invocation (the so-called + "fastdep" mode), which is the default with modern GCC or with other + modern compilers that can emulate the GCC command-line interface (e.g., + clang 3.0). + + But whenever we run the silent-*-generic.sh" tests with other supported + compilers which have an associated depmode different from 'gcc3', these + same "non-fastdep" code paths are covered, since in those tests we run + ./configure with the '--enable-dependency-tracking' option, which causes + slower depmodes not to be rejected. Examples of such compilers are the + Sun C and C++ compilers (at least since version 5.9, a.k.a. Sun Studio + 12.1), and the Tiny C Compiler (from version 0.9.26); and I run the + Automake testsuite quite regularly with those compilers. + + So, the "silent-*-gcc.sh" test cases don't offer any real coverage + enhancements, while still using testsuite runtime and causing some + (admittedly minor, but still annoying) synchronization headaches with + the sister tests "silent-foo-general.sh" tests. So let's just remove + these "silent-*-gcc.sh" tests. + + * t/silent-c-gcc.sh: Remove. + * t/silent-cxx-gcc.sh: Likewise. + * t/silent-lt-gcc.sh: Likewise. + * t/silent-many-gcc.sh: Likewise. + * t/silent-c-generic.sh: Rename ... + * t/silent-c.sh: ... like this, and adjust heading comments. + * t/silent-cxx-generic.sh: Rename ... + * t/silent-cxx.sh: ... like this, and adjust heading comments. + * t/silent-lt-generic.sh: Rename ... + * t/silent-lt.sh: ... like this, and adjust heading comments. + * t/silent-many-generic.sh: Rename ... + * t/silent-many-languages.sh: ... like this, and adjust heading + comments. + * t/list-of-tests.mk: Adjust. + +2012-11-07 Stefano Lattarini + + tests: enhance coverage on silent-rules and C compilation rules a little + + * t/silent-c-generic.sh: Here, by trying them also with automatic + dependency tracking explicitly disabled. + +2012-11-07 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: new variable $am_testaux_builddir + tests: rename $am_testauxdir -> $am_testaux_srcdir + +2012-11-07 Stefano Lattarini + + tests: rename few tests (on silent-rules support) + + Either to more informative names, or to names more consistent with the + ones of similar/related tests. + + * t/silent.sh: Rename ... + * t/silent-c-generic.sh: ... like this, and adjust heading comments. + * t/silent2.sh: Rename ... + * t/silent-c-gcc.sh: ... like this, and adjust heading comments. + * t/silent3.sh: Rename ... + * t/silent-lt-generic.sh: ... like this, and adjust heading comments. + * t/silent4.sh: Rename ... + * t/silent-lt-gcc.sh: ... like this, and adjust heading comments. + * t/silentcxx.sh: Rename ... + * t/silent-cxx-generic.sh: ... like this, and adjust heading comments. + * t/silentcxx-gcc.sh: Rename ... + * t/silent-cxx-gcc.sh: ... like this, and adjust heading comments. + * t/silentf77.sh: Rename ... + * t/silent-f77.sh: ... like this, and adjust heading comments. + * t/silentf90.sh: Rename ... + * t/silent-f90.sh: ... like this, and adjust heading comments. + * t/silent7.sh: Rename ... + * t/silent-gen.sh: ... like this, and adjust heading comments. + * t/silent6.sh: Rename ... + * t/silent-custom.sh: ... like this. + * t/silent8.sh: Rename ... + * t/silent-texi.sh: ... like this. + * t/list-of-tests.mk: Adjust. + +2012-11-07 Stefano Lattarini + + tests: merge two tests on silent-rules with libtool + + This helps to reduce code duplication, and also to (marginally) + speed up the involved tests. + + Before this change, we had: + + $ diff -u t/silent3.sh t/silent9.sh + + --- t/silent3.sh 2012-11-07 19:38:05.000000000 +0100 + +++ t/silent9.sh 2012-11-07 19:27:54.000000000 +0100 + @@ -14,9 +14,9 @@ + # You should have received a copy of the GNU General Public License + # along with this program. If not, see . + + -# Check silent-rules mode, with libtool, standard depmode case. + +# Check silent-rules mode, with libtool, nodep case. + + -# Please keep this file in sync with 'silent4.sh' and 'silent9.sh'. + +# Please keep this file in sync with 'silent3.sh' and 'silent4.sh'. + + required='cc libtoolize' + . test-init.sh + @@ -26,8 +26,8 @@ + cat >>configure.ac <<'EOF' + AC_CONFIG_FILES([sub/Makefile]) + AC_PROG_CC + -AM_PROG_AR + AM_PROG_CC_C_O + +AM_PROG_AR + AC_PROG_LIBTOOL + AC_OUTPUT + EOF + @@ -61,7 +61,7 @@ + $AUTOMAKE --add-missing + $AUTOCONF + + -./configure --enable-silent-rules + +./configure --disable-dependency-tracking --enable-silent-rules + $MAKE >stdout || { cat stdout; exit 1; } + cat stdout + $EGREP ' (-c|-o)' stdout && exit 1 + + * t/silent9.sh: Remove, merge ... + * t/silent3.sh: ... in here. + * t/list-of-tests.mk: Adjust. + +2012-11-07 Stefano Lattarini + + tests: new variable $am_testaux_builddir + + And a related fix that solves a spurious testsuite failures in + VPATH builds. + + * t/ax/test-defs.in ($am_testaux_builddir): New, counterpart of + $am_testaux_srcdir, but pointing inside the build directory. + * t/self-check-shell-no-trail-bslash.sh: Use $am_testaux_builddir, + not $am_testaux_srcdir, when fetching the 'shell-no-trail-bslash' + script. + +2012-11-07 Stefano Lattarini + + tests: rename $am_testauxdir -> $am_testaux_srcdir + + This is just a preparatory change in view of a future commit. + + * t/ax/test-defs.in: Here. + * t/ax/tap-summary-aux.sh: And here. + * t/ax/testsuite-summary-checks.sh: And here. + * t/distcheck-missing-m4.sh: And here. + * t/distcheck-outdated-m4.sh: And here. + * t/self-check-shell-no-trail-bslash.sh: And here. + * t/test-driver-acsubst.sh: And here. + * t/test-driver-cond.sh: And here. + * t/test-driver-custom-multitest.sh: And here. + * t/test-driver-custom-multitest-recheck.sh: And here. + * t/test-driver-custom-multitest-recheck2.sh: And here. + * t/testsuite-summary-count-many.sh: And here. + +2012-10-31 Stefano Lattarini + + Merge branch 'maint' + + * maint: + vala tests: source test-init.sh, not ./defs + tests: fix a spurious typo-related failure + tests: remove spurious leftover use of 'Exit' + tests: can check our recipes avoid trailing backslashes + vala: improve comments to AM_PROG_VALAC + news: update w.r.t. recent vala changes + vala: if no proper compiler found, set $(VALAC) to 'valac' + vala: AM_PROG_VALAC should not produce an error for tool-old valac + docs: document recent changes to AM_PROG_VALAC + tests: enhance tests on AM_PROG_VALAC + vala: style fixes in vala.m4 + vala: add action arguments, for when no proper vala compiler is found + +2012-10-31 Stefano Lattarini + + vala tests: source test-init.sh, not ./defs + + This will avoid spurious errors when the new vala tests (introduced + in the 'vala-work' branch) will be merged back to master. + + * t/vala-headers.sh: Adjust as said. + * t/vala-libs.sh: Likewise. + * t/vala-mix.sh: Likewise. + * t/vala-mix2.sh: Likewise. + * t/vala-parallel.sh: Likewise. + * t/vala-vapi.sh: Likewise. + * t/vala-vpath.sh: Likewise. + * t/vala.sh: Likewise. + * t/vala2.sh: Likewise. + * t/vala3.sh: Likewise. + * t/vala4.sh: Likewise. + * t/vala5.sh: Likewise. + +2012-10-31 Stefano Lattarini + + tests: fix a spurious typo-related failure + + * t/self-check-shell-no-trail-bslash.sh: Here, due to a mistaken + use of "||" instead of "&&". + +2012-10-31 Stefano Lattarini + + Merge branch 'vala-work' into maint + + * vala-work: + vala: improve comments to AM_PROG_VALAC + news: update w.r.t. recent vala changes + vala: if no proper compiler found, set $(VALAC) to 'valac' + vala: AM_PROG_VALAC should not produce an error for tool-old valac + docs: document recent changes to AM_PROG_VALAC + tests: enhance tests on AM_PROG_VALAC + vala: style fixes in vala.m4 + vala: add action arguments, for when no proper vala compiler is found + +2012-10-31 Stefano Lattarini + + tests: remove spurious leftover use of 'Exit' + + Issue revealed by the 'sc_tests_Exit_not_exit' maintainer check. + + Commit 'v1.12.4-184-g9fed1c8' in master made the same fix basically, + but we mistakenly applied it to master only, rather than to maint. + + * t/per-target-flags.sh: Here. + +2012-10-31 Stefano Lattarini + + tests: can check our recipes avoid trailing backslashes + + This is related to commit v1.11-1704-g254227b of 2012-05-01, + "parallel-tests: avoid trailing backslashes in make recipes", + and automake bug#10436. + + 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. + + So provide a target that runs the testsuite looking for this kind + of breakage (without requiring a real bugged shell). + + * t/ax/shell-no-trail-bslash.in: New, a "shell" that chokes on '-c' + commands having a trailing '\' (possibly followed by whitespace only). + * Makefile (t/ax/shell-no-trail-bslash): Generate this script from it. + (noinst_SCRIPTS, CLEANFILES): Add it. + (EXTRA_DIST): Add 't/ax/shell-no-trail-bslash.in'. + (check-no-trailing-backslash-in-recipes): New target, runs the testsuite + with 'shell-no-trail-bslash' as the CONFIG_SHELL, to catch possible + recipes having a trailing backslash character (possibly followed by + * .gitignore: Update. + * t/self-check-shell-no-trail-bslash.sh: New testsuite self-check. + * t/parallel-tests-trailing-bslash.sh: Remove as obsolete. + * t/list-of-tests.mk: Adjust. + +2012-10-27 Stefano Lattarini + + Merge branch 'maint' + + * maint: + configure: correctly identify missing GNU compilers as such + +2012-10-27 Stefano Lattarini + + configure: correctly identify missing GNU compilers as such + + * configure.ac: Here, instead of mistakenly diagnose them as "botched". + +2012-10-27 Stefano Lattarini + + tests: get rid of ./defs, it's no longer used. + + * defs: Delete. + * configure.ac (AC_CONFIG_LINKS): No longer link it. + * t/ax/tap-setup.sh: Don't look for a file named 'defs' in + the grandparent directory of the current test directory to + decide whether we're running in the correct directory. + * syntax-check.mk (xdefs): Remove '$(srcdir)/defs'. + +2012-10-27 Stefano Lattarini + + maintcheck: fix the name of a check + + * (sc_tests_Exit_not_exit): Rename ... + (sc_tests_exit_not_Exit): ... like this, which is more faithful + to what the check actually does. Adjust a grammaro in comments + while at it. + (syntax_check_rules): Adjust. + +2012-10-27 Stefano Lattarini + + maintcheck: guard against uses of ./defs in tests + + Now, 'test-init.sh' should be used instead. + + * (sc_tests_no_source_defs): New maintainer check. + (syntax_check_rules): Add it. + +2012-10-27 Stefano Lattarini + + tests: remove spurious leftover use of 'Exit' + + * t/per-target-flags.sh: Here, and simply use 'exit' instead. + Issue revealed by the 'sc_tests_Exit_not_exit' maintainer check. + +2012-10-27 Stefano Lattarini + + tests: remove an obsolete, and probably now wrong, comment + + * t/dirlist.sh: Here. + +2012-10-27 Stefano Lattarini + + tests: remove obsolescent references to './defs' + + * t/distcom-subdir.sh, t/distcom2.sh, t/ax/depcomp.sh, t/conff2.sh, + t/ccnoco3.sh, t/ccnoco.sh, t/self-check-dir.tap, t/self-check-exit.tap, + t/self-check-me.tap: Here. Instead, refer to "am-test-lib.sh", + "test-init.sh", or simply "the testsuite setup", as appropriate. + +2012-10-27 Stefano Lattarini + + tests: prefer including 'test-init.sh' rather than './defs' + + This is a follow-up to today's commit v1.12.4-22-g0610fc8, + "tests: prepare to move ./defs to t/ax/test-init.sh" + + * All tests: To run the common setup, use the command: + + . test-init.sh + + instead of the older, "historical" one: + + . ./defs || exit 1 + + Note that the "|| exit 1" wasn't really useful, since the 'errexit' + shell flag is in effect in both './defs' and 'test-init.sh', and all + the known shells that are good enough to run the automake testsuite + do automatically exit with error when a sourced file cannot be found + (at least, they do so in non-interactive mode, which is the only + mode that concerns us in the testsuite). + + * t/ax/tap-summary-aux.sh, t/ax/testsuite-summary-checks.sh: Likewise. + + * gen-testsuite-part: Do the same in the generated tests. + +2012-10-27 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: merge, tweak and modernize few test scripts + tests: move coverage about BUILT_SOURCES + tests: more meaningful names for some test cases + tests: merge some grepping tests on Yacc support + +2012-10-27 Stefano Lattarini + + tests: merge, tweak and modernize few test scripts + + Basically an adjusted-and-improved cherry-pick from Automake-NG + commit v1.12.1-343-gff30f83. + + * t/specflg.sh, t/specflg2.sh, t/specflg3.sh: Merged into ... + * t/per-target-flags.sh: ... this test. + * t/fo.sh: Remove, its weak grepping checks well superseded by + the semantic checks in 't/fort4.sh'. + * t/cxxo.sh: Remove, its weak grepping checks well superseded + by the semantic checks in 't/cxx-demo.sh'. + * t/cxxcpp.sh: Enhance a little. + * t/empty.sh: Renamed ... + * t/empty-data-primary.sh: ... to this. Add trailing ':' command. + * t/empty2.sh, t/empty3.sh, t/empty4.sh: Merged ... + * t/empty-sources-primary.tap: ... into this new test. + * t/no-outdir-option.sh: Remove. A test to check than an obsolete + and now deleted option ("--output-dir") stays deleted is way too + much even for the most test-infected person ;-) + * t/list-of-tests.mk: Adjust. + +2012-10-27 Stefano Lattarini + + tests: move coverage about BUILT_SOURCES + + Basically a backport of some tests from Automake-NG. + + * t/built-sources-check.sh: Sync it with the version in the ng/master + branch. Accordingly, move part of the checks out ... + * t/built-sources-install.sh: ... into this new test, synced from + ng/master as well. + * t/built-sources-subdir.sh: Minor tweaks and enhancements to sync it + with the version in ng/master. + * t/built-sources-cond.sh: New test, synced from ng/master. + * t/built-sources.sh: Likewise, with minor edits to avoid a spurious + failure. + * t/built-sources-fork-bomb.sh: Likewise. + * t/list-of-tests.mk: Update. + +2012-10-27 Stefano Lattarini + + tests: more meaningful names for some test cases + + * t/yacc5.sh: Renamed ... + * t/yacc-grepping2.sh: ... like this. + * t/yacc7.sh: Renamed ... + * t/yacc-headers-and-pr47.sh: ... like this. + * t/yacc8.sh: Renamed ... + * t/yacc-subdir.sh: ... like this. + * t/subdir10.sh: Rename ... + * t/subdir-env-interference.sh: ... like this. + * t/specflg10.sh: Rename ... + * t/am-default-source-ext.sh: ... like this. + * t/suffix12.sh: Rename ... + * t/suffix-custom-subobj.sh: ... like this. + * t/suffix13.sh: Rename ... + * t/suffix-custom-subobj-and-specflg.sh: ... like this. + * t/check3.sh: Rename ... + * t/built-sources-check.sh: ... like this. + * t/subdirbuiltsources.sh: Rename ... + * t/built-sources-subdir.sh: ... like this. + * t/bsource.sh: Rename ... + * t/no-spurious-install-recursive.sh: ... like this. + * t/list-of-tests.mk: Adjust. + +2012-10-27 Stefano Lattarini + + tests: merge some grepping tests on Yacc support + + * t/yacc.sh, t/yacc2.sh: Merge ... + * t/yacc-grepping.sh: ... into this test. + * t/list-of-tests.mk: Adjust. + +2012-10-27 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: prepare to move ./defs to t/ax/test-init.sh + +2012-10-27 Stefano Lattarini + + tests: prepare to move ./defs to t/ax/test-init.sh + + We don't do this in a sweeping passage, because that would cause + endless headaches in the synchronization between the maint, master + and ng/master branches. Instead, we setup our framework to allow + test scripts to work by sourcing either './defs' or 'test-init.sh', + so that we'll be able to make the transition gradual and painless. + + * t/ax/test-init.sh: New, copied from the previous ./defs file. + * defs: Simply work by sourcing the new file. + * Makefile.am (dist_noinst_DATA): List the new file. + * t/README: Adjust to mandate the sourcing of 'test-init.sh' rather + than of './defs'. + * t/c-demo.sh: Source 'test-init.sh' instead of ./defs. This is + done to verify our new setup actually works. + * t/ac-output-old.tap: Likewise. + +2012-10-27 Stefano Lattarini + + Merge branch 'maint' + + * maint: + depcomp: avoid potential interferences from the environment + depcomp: improve comments about the 'gcc' depmode + sync: update files from upstream with "make fetch" + maintcheck: remove an obsolescent check + tests: rename some tests to more expressive names, again + tests: remove an obsolescent grepping check + tests: merge two tests on automatic remake functionality + tests: rename some test to more expressive names + news: 'compile' supports libfoo.a naming when wrapping Microsoft tools + tests: ensure generation of wrapper tests matching multiple conditions + tests: simplify a loop in gen-testsuite-part + compile: support libfoo.a naming when wrapping Microsoft tools + NEWS: fix wording and grammaros, re-wrap text accordingly + cosmetics: fix typo in 'lib/depcomp' comments + +2012-10-27 Stefano Lattarini + + depcomp: avoid potential interferences from the environment + + * lib/depcomp (gccflag, dashmflag): By explicitly initializing these + variables to the empty string by default. + +2012-10-27 Stefano Lattarini + + depcomp: improve comments about the 'gcc' depmode + + It is not only needed by obsolescent gcc compilers (pre-3.x), + but also by modern compiler like IBM C/C++. State that ... + + * lib/depcomp: ... here... + * gen-testsuite-part: ... and here, where we generate the + 'depcomp*.tap' tests. + +2012-10-26 Stefano Lattarini + + vala: improve comments to AM_PROG_VALAC + + * m4/vala.m4 (AM_PROG_VALAC): Here. + +2012-10-26 Stefano Lattarini + + news: update w.r.t. recent vala changes + + * NEWS: Here. + +2012-10-26 Stefano Lattarini + + vala: if no proper compiler found, set $(VALAC) to 'valac' + + This is better than setting it to ':' (as is currently done), because + a triggered makefile rule invoking a vala compilation will then 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. + + For a precedent of a similar behaviour, see the AC_PROG_YACC macro. + + * m4/valac.m4: Implement the new semantic. + * doc/automake.texi (Vala Support): Document it. + * t/vala4.sh: Adjust. + +2012-10-26 Sébastien Wilmet (tiny change) + Matthieu Baerts + Stefano Lattarini + + vala: AM_PROG_VALAC should not produce an error for tool-old valac + + This change fixes automake bug#12688. + + In the AM_PROG_VALAC macro, when the optional parameter specifying the + minimum release number is not provided, and/or if the Vala compiler is + not found, then there is a _warning_ message. + + On the other hand, when the version number is specified and if the Vala + compiler is too old, there is an _error_ message. + + This error message is problematic, because for a tarball, the Vala + compiler is not required: the generated C code is included in the + tarball. So if a user wants to compile the software, he shouldn't + need the valac program with the right version. + + * m4/vala.m4 (AM_PROG_VALAC): Modify to use AC_MSG_WARN instead + of AC_MSG_ERROR. + * t/vala4.sh: Adjust and enhance. + * doc/automake.texi (Vala Support): Likewise. + * THANKS: Update. + +2012-10-26 Stefano Lattarini + + docs: document recent changes to AM_PROG_VALAC + + * doc/automake.texi (Vala Support): Here. This is a follow-up to + recent commit 'v1.12.4-20-gdf202a3', "vala: add action arguments, + for when no proper vala compiler is found". + +2012-10-26 Stefano Lattarini + + tests: enhance tests on AM_PROG_VALAC + + * t/vala4.sh: Here. + +2012-10-26 Stefano Lattarini + + vala: style fixes in vala.m4 + + * m4/vala.m4 (AM_PROG_VALAC): Here. + +2012-10-26 Daiki Ueno (tiny change) + + vala: add action arguments, for when no proper vala compiler is found + + * m4/vala.m4 (AM_PROG_VALAC): Add optional action arguments to + control the behavior if specified version of valac is not found. + This emulates the behaviour of AM_PATH_PYTHON. + * t/vala4.sh: Enhance. + +2012-10-26 Stefano Lattarini + + sync: update files from upstream with "make fetch" + + * lib/config.guess, lib/config.sub: Update. + +2012-10-26 Stefano Lattarini + + maintcheck: remove an obsolescent check + + * syntax-checks.mk (sc_test_names): Remove this check, which verified + that no test name contained an m4/m4sugar builtin or macro name. Since + most tests use their own name as the first argument to AC_INIT, doing + that would have tickled a bug in Autoconf 2.62; but the bug was fixed + in Autoconf 2.63 already; and we are going to soon require Autoconf + 2.65 anyway (in automake 1.13), so this check has become more annoying + than useful. + (syntax_check_rules): Don't list the removed check. + +2012-10-26 Stefano Lattarini + + tests: rename some tests to more expressive names, again + + * t/parallel-tests.sh: Rename ... + * t/parallel-tests-basics.sh: ... like this. + * t/parallel-tests3.sh: Rename ... + * t/parallel-tests-concurrency.sh: ... like this. + * t/parallel-tests5.sh: Rename ... + * t/parallel-tests-concurrency-2.sh: ... like this. + * t/parallel-tests6.sh: Rename ... + * t/parallel-tests-empty.sh: ... like this. Adjust comments. + * t/parallel-tests8.sh: Rename ... + * t/parallel-tests-generated-and-distributed.sh: ... like this. + * t/parallel-tests9.sh: Rename ... + * t/parallel-tests-recheck.sh: ... like this. + * t/parallel-tests10.sh: Rename ... + * t/parallel-tests-trailing-whitespace.sh: ... like this. + * t/remake3a.sh: Rename ... + * t/remake-subdir-no-makefile.sh: ... like this. + * t/remake4.sh: Rename ... + * t/remake-not-after-make-dist.sh: ... like this. + * t/remake5.sh: Rename ... + * t/remake-maintainer-mode.sh: ... like this. + * t/remake6.sh: Rename ... + * t/remake-subdir3.sh: ... like this. + * t/remake7.sh: Rename ... + * t/remake-fail.sh: ... like this. + * t/remake11.sh: Rename ... + * t/remake-deeply-nested.sh: ... like this + * t/remake12.sh: Rename ... + * t/remake-mild-stress.sh: ... like this + * t/pr8365-remake-timing.sh: Rename ... + * t/remake-timing-bug-pr8365.sh: ... like this. + * t/list-of-tests.mk: Adjust. + +2012-10-26 Stefano Lattarini + + tests: remove an obsolescent grepping check + + * t/remake3.sh: This one, superseded by ... + * t/remake3a.sh: ... this semantic test, whose comments have been + djusted accordingly. + * t/list-of-tests.mk: Adjust. + +2012-10-26 Stefano Lattarini + + tests: merge two tests on automatic remake functionality + + * t/remake2.sh: Merge ... + * t/remake-subdir-grepping.sh: ... in here. + * t/list-of-tests.mk: Adjust. + +2012-10-26 Stefano Lattarini + + tests: rename some test to more expressive names + + * t/remake.sh: Rename ... + * t/remake-subdir-grepping.sh: ... like this. + * t/remake8a.sh: Rename ... + * t/remake-makefile-intree.sh: ... like this, and adjust comments. + * t/remake8b.sh: Rename ... + * t/remake-makefile-vpath.sh: ... like this, and adjust comments. + * t/remake9a.sh: Rename ... + * t/remake-after-configure-ac.sh: ... like this, and adjust comments. + * t/remake9b.sh: Rename ... + * t/remake-after-makefile-am.sh: ... like this, and adjust comments. + * t/remake9c.sh: Rename ... + * t/remake-after-acinclude-m4.sh: ... like this, and adjust comments. + * t/remake9d.sh: Rename ... + * t/remake-after-aclocal-m4.sh: ... like this, and adjust comments. + * t/remake10a.sh: Rename ... + * t/remake-include-configure.sh: ... like this, and adjust comments. + * t/remake10b.sh: Rename ... + * t/remake-include-makefile.sh: ... like this, and adjust comments. + * t/remake10c.sh: Rename ... + * t/remake-include-aclocal.sh: ... like this, and adjust comments. + * t/list-of-tests.mk: Adjust. + +2012-10-26 Jim Meyering + + compat: reinstate AM_PROG_MKDIR_P, for gettext + + Do not remove AM_PROG_MKDIR_P just yet. + + gettext (latest from git) still AC_REQUIRE's AM_PROG_MKDIR_P via its + intl.m4 and po.m4 files, which are pulled into *many* projects. + + When I try to build one of those projects (coreutils) using the latest + from automake.git/master, I see this failure: + + $ aclocal -I m4 + configure.ac:477: warning: AM_PROG_MKDIR_P is m4_require'd \ + but not m4_defun'd + m4/po.m4:23: AM_PO_SUBDIRS is expanded from... + m4/gettext.m4:57: AM_GNU_GETTEXT is expanded from... + configure.ac:477: the top level + + That is because AM_PROG_MKDIR_P was removed (via commit + v1.12-20-g8a1c64f) in preparation for the next release of automake. + + * NEWS: Remove the paragraph that announced the removal of + AM_PROG_MKDIR_P. + * Makefile.am (dist_automake_ac_DATA): Add m4/mkdirp.m4. + * m4/mkdirp.m4: Re-add file. + * t/mkdirp-deprecation.sh: Likewise. + * t/list-of-tests.mk: Add it. + * automake.in: Restore removed code, and adjust comments, s/1.13/1.14/ + to reflect new plan for removal. + * doc/automake.texi (Obsolete Macros): Restore the section, but + now with only one entry: the one for AM_PROG_MKDIR_P. + +2012-10-26 Stefano Lattarini + + news: 'compile' supports libfoo.a naming when wrapping Microsoft tools + + This is a follow-up to commit 'v1.12.4-10-g3c5c939' of 2012-10-04, + "compile: support libfoo.a naming when wrapping Microsoft tools". + + * NEWS (Bugs fixed in 1.12.5): Update. + +2012-10-26 Stefano Lattarini + + tests: ensure generation of wrapper tests matching multiple conditions + + * gen-testsuite-part: Our old code to generate wrapper tests had a + severe limitation, in that if a test matched two or more conditions + calling for generation of wrapper tests, still only one wrapper test + was generated, instead of the three that would have been expected -- + that is, one using the setup code triggered by the first condition, + one using the setup code triggered by the second condition, and one + using both this setup code fragments. + Admittedly, this was only a theoretical limitation for the moment, + since since so far no test exists that matches two or more conditions + for wrapping. Still, this might change in the future, and easily in + an unnoticed way, so better fix the issue now, before it might become + a real problem. + +2012-10-26 Stefano Lattarini + + tests: simplify a loop in gen-testsuite-part + + * gen-testsuite-part: No need to loop on the (key, value) entries + of the %test_generators has: we only use the value, and never the + key. So loop simply on the values. + +2012-10-14 Peter Rosin + + compile: support libfoo.a naming when wrapping Microsoft tools + + There is a future plan to provide some means to have Automake + create static libraries that are named differently depending + on the system [1]. + + The background is that everyone has always named static libraries + libfoo.a, except the Redmond crowd who names them foo.lib, and + you have to jump through hoops to have Automake create libraries + named foo.lib in the land of non-GNU Windows while still creating + libfoo.a everywhere else. + + However, there is probably no sane way to accomplish that system + dependent naming discussed in [1] without user intervention, + which makes it necessary to support the classic libfoo.a naming + when using Microsoft tools in the best possible way, for the + benefit of all projects today and for future projects not + opting in to whatever scheme is selected for the problem at + hand. + + [1] http://lists.gnu.org/archive/html/automake/2012-09/msg00028.html + + * lib/compile (func_cl_dashl): As a last resort, match -lfoo with + libfoo.a, if that file exist on the library search path. + * t/compile4.sh: Remove obsolescent workaround for the above. + * t/compile6.sh: Extend to check that libbaz.a is indeed found + when baz.lib and baz.dll.lib does not exist and that bar.lib + and bar.dll.lib are preferred over libbar.a. + +2012-10-14 Stefano Lattarini + + NEWS: fix wording and grammaros, re-wrap text accordingly + + Reported-by: Peter Rosin + +2012-10-14 Paul Eggert + + cosmetics: fix typo in 'lib/depcomp' comments + + Fixes automake bug#12578. + +2012-10-02 Stefano Lattarini + + Merge branch 'maint' + + * maint: + config headers: remove stale comment in makefile fragment + NEWS: wording and quoting fixlets in few older entries + config headers: don't emit rules for headers not generated by autoheader + docs: fix minor typo: s/expending/expanding/ + sync: update files from upstream with "make fetch" + maint: post-release minor version bump + maint: typo fixes s/lies into/lies in/ + release: stable release 1.12.4 + NEWS: minor fix + +2012-10-02 Stefano Lattarini + + config headers: remove stale comment in makefile fragment + + * lib/am/remake-hdr.am: Here. + +2012-10-02 Stefano Lattarini + + NEWS: wording and quoting fixlets in few older entries + +2012-10-02 Stefano Lattarini + + config headers: don't emit rules for headers not generated by autoheader + + This change fixed automake bug#12495. + + Even if an AC_CONFIG_HEADERS invocation is passed a list of several files + as the first argument, only the first one of those file is considered by + autoheader for automatic generation of the corresponding '.in' template. + This is done on purpose, and is clearly documented in the Autoconf manual, + which (as of the 2.69 version) reads something like this: + + The autoheader program searches for the first invocation of + AC_CONFIG_HEADERS in configure sources to determine the name of + the template. If the first call of AC_CONFIG_HEADERS specifies + more than one input file name, autoheader uses the first one. + + That is, an invocation like: + + AC_CONFIG_HEADERS([config.h config2.h]) + + should cause autoheader to generate only a 'config.h.in' template, + and not also a 'config2.h.in' one. + + Accordingly, automake, when tracing AC_CONFIG_HEADERS, should generate + remake rules only for the template associated to the first input file + name passed to that macro. In some situations, however, automake failed + to properly limit itself in this way; for example, with an input like: + + AC_CONFIG_HEADERS([config.h sub/foo.h]) + + in configure.ac, and with the 'sub' directory listed in the SUBDIRS + variable of the top-level Makefile, automake would erroneously generate + in 'sub/Makefile.in' a rule to remake the 'foo.h.in' template by + invoking autoheader. + + This issue was likely introduced in commit 'Release-1-8-23-g262bb92' + of 2004-01-05. + + * NEWS: Update. + * doc/automake.texi (Optional): Improve wording in the description of + hat rules automake generates in response to an 'AC_CONFIG_HEADERS' + invocation. + * lib/am/remake-hdr.am: Only emit autoheader-invoking remake rules for + the %CONFIG_HIN% template if that corresponds to the first argument of + AC_CONFIG_HEADERS, as explaned above. Do so using the automake-time + conditional %?FIRST-HDR%, that is properly passed ... + * automake.in (handle_configure): ... from a 'file_contents' invocation + in here. + * t/autohdr-subdir-pr12495.sh: New test. + * t/list-of-tests.mk: Add it. + * THANKS: Update. + + Helped-by: Hib Eris + +2012-10-02 Stefano Lattarini + + docs: fix minor typo: s/expending/expanding/ + + * doc/automake.texi (Wildcards): Here. Fixes automake bug#12516. + +2012-10-02 Stefano Lattarini + + sync: update files from upstream with "make fetch" + + * lib/texinfo.tex: Update. + +2012-10-02 Stefano Lattarini + + maint: post-release minor version bump + + * configure.ac (AC_INIT): Bump version number to 1.12.4a. + * m4/amversion.m4: Likewise (automatically regenerated by + "make bootstrap"). + +2012-09-23 Jim Meyering + + maint: typo fixes s/lies into/lies in/ + +2012-09-17 Stefano Lattarini + + release: stable release 1.12.4 + + * configure.ac (AC_INIT): Bump version number to 1.12.4. + * m4/amversion.m4: Likewise (auto-updated by "make bootstrap"). + +2012-09-17 Stefano Lattarini + + NEWS: minor fix + +2012-09-12 Jim Meyering + + fix typos in mk-dirp.m4 + + * t/gettext-macros.sh: Fix typo in name of macro emitted into + mk-dirp.m4: s/AM_MKDIR_P/AM_PROG_MKDIR_P/, + and as Stefano Lattarini noted, also fix this typo: + s/AC_MKDIR_P/AC_PROG_MKDIR_P/. + +2012-09-11 Stefano Lattarini + + tags: automake bug bug#12372 is fixed + + It has been fixed as a side effect of the overhauling of tags support. + + * t/list-of-tests.mk (XFAIL_TESTS): No longer list 'tags-pr12372.sh'. + * NEWS: Update. + +2012-09-11 Stefano Lattarini + + Merge branch 'maint' + + * maint: + coverage: better exposure for automake bug#12372 (tags-related) + coverage: expose automake bug#12372 (tags-related) + +2012-09-11 Stefano Lattarini + + coverage: better exposure for automake bug#12372 (tags-related) + + Alas, in contrast with what is said in the commit message of previous + commit 'v1.12.3-14-g94b7b8e', that bug is still present also in the + current maint branch (which will become automake version 1.12.4); it + is just that it only triggers when a _SOURCES variable contains only + files with custom extension. + + * t/tags-pr12372.sh: Extend. + * t/list-of-tests.mk: Add it. + + Suggested-by: Юрий ПухальÑкий + +2012-09-07 Stefano Lattarini + + coverage: expose automake bug#12372 (tags-related) + + That bug is somehow already been fixed in the latest automake + version (1.12.4); but exercise it anyway in the testsuite, to + ensure we won't regress. + + * t/tags-pr12372.sh: New test. + * t/list-of-tests.mk: Add it. + +2012-09-05 Stefano Lattarini + + Merge branch 'maint' + + * maint: + sync: update files from upstream with "make fetch" + news: cygnus will be removed in automake 1.13 + news: some changes for 1.13 has been "de-planned" + news: report that the have seen fixlets after 1.12.3 + warns: enable category 'obsolete' by default + +2012-09-05 Stefano Lattarini + + sync: update files from upstream with "make fetch" + + * lib/texinfo.tex: Update. + +2012-09-05 Stefano Lattarini + + news: cygnus will be removed in automake 1.13 + + * NEWS (Future backward-incompatibilities): So document it here. + +2012-09-05 Stefano Lattarini + + news: some changes for 1.13 has been "de-planned" + + * NEWS (Future backward-incompatibilities): The planned Automake release + 1.13 already has too much stuff on its plate; so we are not going to + In Automake 1.13, we are definitely not going to change the exact order + in which the directories in the aclocal macro search path are looked up. + Also, experience and user feedback have shown that the "obsolescent" + two-arguments invocation for AM_INIT_AUTOMAKE: + + AM_INIT_AUTOMAKE(PACKAGE-NAME, PACKAGE-VERSION) + + is still useful (until at least Autoconf is fixed to offer better support + for "dynamically" package versions), so we are not going to remove + support for that usage in Automake 1.13. For more details, see commit + v1.12.2-245-g2abe183 of 2012-08-24, "AM_INIT_AUTOMAKE: allow obsolescent + two-args invocation once again". + (New in 1.12.1): Adjust accordingly. + +2012-09-05 Stefano Lattarini + + news: report that the have seen fixlets after 1.12.3 + + * NEWS: Here. + +2012-09-04 Stefano Lattarini + + warns: enable category 'obsolete' by default + + No surprise that our users were bitten by backward-incompatible changes + especially hard: the warnings in the 'obsolete' category, that might + have informed them of the upcoming incompatibilities, and help them to + prepare for the transition, where not enabled by default! + + * NEWS, doc/automake.texi: Update. + * lib/Automake/ChannelDefs.pm: Enable warnings in the category 'obsolete' + by default. + * t/warnings-obsolete-default.sh: New test. + * t/list-of-tests.mk: Add it. + * t/backcompat.sh: Use 'configure.ac' rather than 'configure.in' as + autoconf input file, to avoid spurious aclocal errors. + * t/backcompat2.sh: Likewise. + * t/backcompat3.sh: Likewise. + * t/backcompat5.sh: Add '-Wno-obsolete' when invoking aclocal. Adjust + heading comments. + * t/backcompat6.sh: Likewise. + * t/cygnus-imply-foreign.sh: Add '-Wno-obsolete' when invoking automake. + +2012-08-28 Stefano Lattarini + + tests: fix a maintainer-check failure ('Exit' used instead of 'exit') + + * t/lisp-loadpath.sh: Here. + +2012-08-28 Stefano Lattarini + + Merge branch 'maint' + + * maint: + sync: update files from upstream with "make fetch" + automake: don't define many identical 'lang_*_rewrite' subroutines + coverage: bugs #8844 and #9933 (already fixed by Akim's work on ylwrap) + +2012-08-28 Stefano Lattarini + + sync: update files from upstream with "make fetch" + + * lib/config.guess, lib/config.sub: Update. + +2012-08-27 Stefano Lattarini + + automake: don't define many identical 'lang_*_rewrite' subroutines + + This is just a simplifying refactoring, with no semantic change intended. + + Cherry-picked from the Automake-NG commit 'v1.12.1-312-g63aa4a9' of + 2012-06-07. + +2012-08-26 Stefano Lattarini + + coverage: bugs #8844 and #9933 (already fixed by Akim's work on ylwrap) + + * t/flex-header.sh: New test, show that automake bug#8844 and bug#9933 + have already been fixed by the recent-ish improvements to ylwrap (merged + with commit v1.12.2-27-gec5cb49 of 2012-07-16, "Merge branch 'yacc-work' + into maint"). + * t/list-of-tests.mk: Update. + +2012-08-26 Stefano Lattarini + + Merge branch 'maint' + + * maint: + docs: don't suggest to use recursive makefile setup + tests: fix a timestamp race in python tests + tests: fixup: make distcheck-override-infodir pass again + sync: update files from upstream with "make fetch" + maint: post-release minor version bump + release: stable release 1.12.3 + maintcheck: fix spurious warnings + docs: fix typo: s/make install-info/make uninstall-info/ + tests: fixup: make a couple of tests executable + +2012-08-24 Stefano Lattarini + + AM_INIT_AUTOMAKE: allow obsolescent two-args invocation once again + + This partially reverts commit 'v1.12-67-ge186355' of 2012-05-25, + "init: obsolete usages of AM_INIT_AUTOMAKE not supported anymore" + + Some users still need to be able to define the version number for + their package dynamically, at configure runtime. + + Their user case is that, for development snapshots, they want to be + able to base the complete version of the package on the VCS revision + ID (mostly Git or Mercurial). They could of course do so by + specifying such version dynamically in their call to AC_INIT, as is + done by several GNU packages. But then they would need to regenerate + and re-run the configure script before each snapshot, which might be + very time-consuming for complex packages, to the point of slowing + down and even somewhat impeding development. + + The situation should truly be solved in Autoconf, by allowing a way + to specify the version dynamically in a way that doesn't force the + configure script to be regenerated and re-run every time the package + version changes. But until Autoconf has been improved to allow + this, Automake will have to support the obsolescent two-arguments + invocation for AM_INIT_AUTOMAKE, to avoid regressing the suboptimal + but working solution for the use case described above. + + See also: + + + * NEWS: Update. + * m4/init.m4 (AM_INIT_AUTOMAKE): Support once again invocation with + two or three arguments. + * t/aminit-moreargs-no-more.sh: Renamed ... + * t/aminit-moreargs-deprecated.sh: ... like this, and updated. + * t/nodef.sh: Recovered test, with minor adjustments. + * t/backcompat.sh: Likewise. + * t/backcompat2.sh: Likewise. + * t/backcompat3.sh: Likewise. + * t/backcompat6.sh: Likewise. + * t/list-of-tests.mk: Adjust. + + Suggested-by: Bob Friesenhahn n + +2012-08-21 Stefano Lattarini + + docs: don't suggest to use recursive makefile setup + + * doc/automake.texi (Introduction): Here, by erroneously telling that + "there should generally be one Makefile.am per directory of a project". + For reference, see commit 'v1.12.1-25-g61dfb47' of 2012-06-12, "docs: + recursive make considered harmful". + +2012-08-16 Adam Sampson (tiny change) + Stefano Lattarini + + tests: fix a timestamp race in python tests + + Fixes automake bug#12210. + + * t/python-missing.sh: Call aclocal and autoconf with the "--force" + option. We need this because, on fast machines, it's possible for + 'mypy.m4' and 'aclocal.m4' to end up with the same timestamp as configure, + so autoconf (without the "--force" options) wouldn't bother to rebuild it, + and would just rerun the previous AM_PATH_PYTHON test, succeeding rather + than failing as expected. + * t/python-am-path-iftrue.sh: Likewise. + +2012-08-14 Peter Rosin + + tests: fixup: make distcheck-override-infodir pass again + + Fixes Automake bug#12198. + + * t/distcheck-override-infodir.sh (main.texi): Remove all leading + cruft added by commit v1.12.2-96-g133307b "maintcheck: fix spurious + warnings". + +2012-08-14 Stefano Lattarini + + sync: update files from upstream with "make fetch" + + * lib/config.guess, lib/config.sub, lib/gitlog-to-changelog, + lib/texinfo.tex: Update. + +2012-08-14 Stefano Lattarini + + maint: post-release minor version bump + + * configure.ac (AC_INIT): Bump version number to 1.12.3a. + * m4/amversion.m4: Likewise (automatically regenerated by + "make bootstrap"). + +2012-08-13 Stefano Lattarini + + release: stable release 1.12.3 + + * configure.ac (AC_INIT): Bump version number to 1.12.3. + * m4/amversion.m4: Likewise (auto-updated by "./bootstrap"). + +2012-08-13 Stefano Lattarini + + maintcheck: fix spurious warnings + + * t/distcheck-override-infodir.sh: Be sure that valid occurences + of the "aclocal" and "automake" strings, which can confuse the + 'sc_tests_plain_automake' check, are protected by leading "#" + characters. + * t/ax/test-lib.sh: Always use '$(...)' for command subtitution, + to avoid triggering the 'sc_tests_command_subst' check; there was + still once place where `...` was used. While at it, fix a related + comment. + * t/ax/test-defs.in ($sleep): Use creative quoting to avoid + spuriously triggering the 'sc_tests_plain_sleep' check. + +2012-08-13 Stefano Lattarini + + docs: fix typo: s/make install-info/make uninstall-info/ + + * doc/automake.texi (Texinfo): Here. And a minor wording improvement + while we are at it. + +2012-08-13 Stefano Lattarini + + tests: fixup: make a couple of tests executable + + * t/python-am-path-iftrue.sh: This. + * t/python-missing.sh: And this. + +2012-08-13 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: rework tests on AM_PATH_PYTHON + cosmetics: fix typos and references in comments + typofix: in a test diagnostic + readme: fixlets to HACKING + +2012-08-13 Stefano Lattarini + + tests: rework tests on AM_PATH_PYTHON + + * t/python8.sh, t/python9.sh: Merge into ... + * t/python-am-path-iftrue.sh: ... this new test, with minor adjustments. + * t/python4.sh, t/python5.sh, t/python6.sh, t/python7.sh: Merge into ... + * t/python-missing.sh: ... this new test. + * t/python5b.sh: Rename ... + * t/python-too-old.sh: ... like this, and adjust/extend. + * t/list-of-tests.mk: Adjust. + +2012-08-13 Stefano Lattarini + + cosmetics: fix typos and references in comments + + * lib/am/check.am: Here. + * doc/automake.texi: And here. + * t/*.sh: And in several of these tests. + +2012-08-13 Stefano Lattarini + + typofix: in a test diagnostic + + * t/cscope.tap: Here. + +2012-08-12 Stefano Lattarini + + readme: fixlets to HACKING + + * HACKING: Use longer "=====" lines to separate different section (this + is just eye-candy admittedly, but I prefer it). + (Release procedure): Don't tell to "update NEWS"; that should be updated + throughout the normal course of development. Instead, tell to just check + it. Improve description of the re-bootstrapping and rechecking procedure, + also suggesting to use "git clean" beforehand (with all due warnings!). + +2012-08-12 Stefano Lattarini + + Merge branch 'maint' + + * maint: + cleanup: remove stale references to 'lzma' option + +2012-08-12 Stefano Lattarini + + cleanup: remove unused transform '%HAVE-MANS%' + + * automake.in (preprocess_file): Here. + +2012-08-11 Stefano Lattarini + + cleanup: remove stale references to 'lzma' option + + * automake.in (preprocess_file): Here. + (handle_dist): And here. + +2012-08-10 Stefano Lattarini + + Merge branch 'maint' + + * maint: + automake: remove an unused local variable + distcheck: more resilient against possible failures + cleanup: remove almost-unused global var 'am_relative_dir' + +2012-08-10 Stefano Lattarini + + automake: remove an unused local variable + + * automake.in (handle_dist): Here, the '$extra_dist' variable. + +2012-08-10 Stefano Lattarini + + distcheck: more resilient against possible failures + + * lib/am/distdir.am (distcheck): Ensure that a failure in the commands + making the just-extracted source tree read-only cause the recipe to fail. + While at it, save a fork by creating the '_build' and '_inst' subdir + with a single mkdir invocation. + +2012-08-10 Stefano Lattarini + + cleanup: remove almost-unused global var 'am_relative_dir' + + Cherry picked from commit v1.12.2-741-g53b5d11 of Automake-NG. + + * automake.in ($am_relative_dir): Delete, it was only used once ... + (generate_makefile): ... in here, so it's simpler to inline its + expansion. + (initialize_per_input): Don't reset the deleted variable. + +2012-08-10 Stefano Lattarini + + Merge branch 'maint' + + * maint: + cleanup: remove two almost-unused global variables: {am,in}_file_name + cleanup: remove almost-unused global var 'topsrcdir' + automake: remove an unused variable + tests: make a test script more semantic + tests: remove an obsolete, no-op test script + tests: remove an obsolete test script + +2012-08-10 Stefano Lattarini + + cleanup: remove two almost-unused global variables: {am,in}_file_name + + Cherry picked from commit v1.12.2-739-gbf2a8b0 of Automake-NG. + + * automake.in ($am_file_name, $in_file_name): Delete these, which were + used only in the 'read_main_am_file' subroutine; instead ... + (read_main_am_file): ... modify it to only work from the '$makefile_am' + argument (which it was already receiving), and the new '$makefile_in' + argument, which is now passed to it ... + (generate_makefile): ... from here. + (initialize_per_input): Don't reset the two deleted variables anymore. + +2012-08-10 Stefano Lattarini + + cleanup: remove almost-unused global var 'topsrcdir' + + Cherry picked from commit v1.12.2-740-ga7f24eb in Automake-NG. + + * automake.in ($topsrcdir): Delete, it was only used once ... + (handle_LIBOBJS_or_ALLOCA): ... in here, so it's simpler to inline + its expansion. Improve formatting of immediately surrounding code + a little while we are at it. + (initialize_per_input): Don't reset the deleted variable. + +2012-08-10 Stefano Lattarini + + automake: remove an unused variable + + * automake.in ($canonical_location): This. + (scan_autoconf_traces): Don't initialize it. + +2012-08-08 Stefano Lattarini + + tests: make a test script more semantic + + This is mostly useful for Automake-NG, that is heavily overhauling the + generated Makefiles and thus is prone to break grepping checks (which + can sometimes end up causing false negatives in the testsuite, sadly). + But this is not a reason not to strengthen the test for mainline + Automake as well. + + * t/noinstdir.sh: Add semantic checks. + +2012-08-08 Stefano Lattarini + + tests: remove an obsolete, no-op test script + + * t/info.sh: This: it tried to operate by checking the contents of the + variable '$(INFOS)', but that is not even defined (and probably has been + obsolete for quite a long time). Since other tests already do thorough + testing of the Texinfo support, just remove this test. + * t/list-of-tests.mk: Adjust. + +2012-08-08 Stefano Lattarini + + tests: remove an obsolete test script + + * t/scripts.sh: This: it used to check that the 'AC_PROG_INSTALL' macro + was not uselessly required, but today that macro is AC_REQUIRE'd by + 'AM_INIT_AUTOMAKE' anyway, so that the test is no more significant. + * t/list-of-tests.mk: Adjust. + +2012-08-05 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: avoid spurious failures with older Texinfo + tests: avoid tons of spurious failures on NetBSD + runtest: avoid spurious failures on NetBSD + news: dependency tracking for Portland Group Compilers is now supported + +2012-08-05 Stefano Lattarini + + tests: avoid spurious failures with older Texinfo + + * t/distcheck-override-infodir.sh (main.texi): Add explicit calls to + '@dircategory' and '@direntry', to ensure a 'dir' file will be created + also by 'install-info' coming with Texinfo 4.8. + +2012-08-05 Stefano Lattarini + + tests: avoid tons of spurious failures on NetBSD + + * t/ax/am-test-lib.sh (process_requirements): Set the '$am_tool' variable + to the empty string before trying to unset it; otherwise, we might be + attempting to unset an already-unset variable, which (together with the + presence of the 'errexit' shell flag) causes spurious failures at least + with the /bin/sh shell from NetBSD 5.1. This was actually causing the + great majority of the Automake tests (all those not using a "required=..." + declaration) to fail spuriously on that platform! + +2012-08-05 Stefano Lattarini + + runtest: avoid spurious failures on NetBSD + + * runtest.in: Use ${1+"$@"} rather than simply "$@", because the 'set -u' + setting used in the script causes the latter to trigger a spurious error + with the NetBSD 5.1 /bin/sh ("./runtest: @: parameter not set") if there + are no arguments to the test. + +2012-08-05 Stefano Lattarini + + news: dependency tracking for Portland Group Compilers is now supported + + * NEWS: So document it here. + +2012-08-05 Stefano Lattarini + + Merge branch 'elisp-work' + + * elisp-work: + news: document all the recent elisp-related changes and improvements + coverage: byte-compiling elisp files in different subdirectories + elisp: honour AM_ELCFLAFS and ELCFLAGS in byte-compilation + elisp: --batch implies -q, remove -q + elisp: support elisp files in subdirectories properly + elisp: simplify suffix rules using emacs '-L' option + elisp: no need to "absolutize" $(srcdir) and $(builddir) ... + elisp: prefer $(builddir) files over $(srcdir) ones + elisp: use suffix rules, get rid of 'elisp-comp' script (mostly a rewrite) + coverage: elisp path contains $(srcdir) and $(builddir) + coverage: emacs lisp files in subdirectories + +2012-08-05 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: cater to OpenSolaris 'zip' + +2012-08-05 Stefano Lattarini + + tests: cater to OpenSolaris 'zip' + + * t/dist-formats.tap: Here: OpenSolaris zip do not accept the + '--version' option, but accept the '-v' one with a similar + meaning (if no further arguments are given). + +2012-08-04 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: fix a spurious XPASS on OpenIndiana + tests: avoid spurious failure of 't/vala-vapi.sh' on OpenIndiana + tests: avoid spurious failure of 't/uninstall-fail.sh' on OpenIndiana + tests: reimplement wrappers for automake and aclocal in perl + tests: work around a ksh bug w.r.t. ${1+"$@"} + depcomp: style changes to Portland Group Compilers support + depcomp: initial support for Portland Group Compilers + +2012-08-04 Stefano Lattarini + + tests: fix a spurious XPASS on OpenIndiana + + * t/instspc.tap: Here, by isolating the $(DESTDIR) used by runs with + different "problematic strings" to prevent them to unduly interfering + with each other. With this, the Automake testsuite finally run cleanly + on the OpenIndiana and Solaris 10 systems I have access to. + +2012-08-04 Stefano Lattarini + + tests: avoid spurious failure of 't/vala-vapi.sh' on OpenIndiana + + * t/vala-vapi.sh: Use 'printf', not 'echo', to print strings containing + substrings like '\n', that can be interpreted like escape strings. That + because the /bin/sh and the /bin/bash shell from OpenIndiana actually + interpret them that way: + + $ /bin/sh -c 'echo "foo\nbar"' + foo + bar + $ /bin/bash -c 'echo "foo\nbar"' + foo + bar + +2012-08-04 Stefano Lattarini + + tests: avoid spurious failure of 't/uninstall-fail.sh' on OpenIndiana + + On current OpenIndiana (based on what once was OpenSolaris 11), the shell + /bin/sh (which, differently from what happens on Solaris, is a true POSIX + shell, thus worthy of consideration) somehow manages to "eat" the + error message from 'rm' when that fails to remove a file due to lacking + permission on the parent directory: + + $ /bin/sh -c "cd unwritable-dir || { echo OOPS; exit 1; }; rm -f foo" + $ echo rc = $? + rc = 1 + $ /bin/bash -c "cd unwritable-dir || { echo OOPS; exit 1; }; rm -f foo" + rm: foo not removed: Permission denied + $ echo rc = $? + rc = 2 + $ /bin/sh -c "cd unwritable-dir || { echo OOPS; exit 1; }; env rm -f foo" + rm: foo not removed: Permission denied + $ echo rc = $? + rc = 2 + + That is probably due to an improper optimization, that is, the shell tries + to be smart and remove the file itself instead of invoking 'rm', but fails + spectacularly in the attempt. + + * t/uninstall-fail.sh: The just-described bug was causing a spurious + failure in this test case. Cater to thus situation, by relaxing the + test when a faulty shell is detected. And while at it, fix and improve + an unrelated comment. + +2012-08-04 Stefano Lattarini + + tests: reimplement wrappers for automake and aclocal in perl + + This will allow us to avoid one extra shell invocation per automake + and aclocal invocation in our testsuite, and, more importantly, will + allow us not to worry about potential shell portability issues, at + least in those wrappers. For an example of such a portability issue, + refer to the recent commit v1.12.2-80-g65dadf6 "tests: work around a + ksh bug w.r.t. ${1+"$@"}". + + * t/wrap/automake.in, t/wrap/aclocal.in: Rewritten in perl. + +2012-08-04 Stefano Lattarini + + tests: work around a ksh bug w.r.t. ${1+"$@"} + + Fixes automake bug#10898. See also the older (much older) thread: + + + At least the AT&T and OpenSolaris versions of the Korn shell, as well + as the /bin/sh from OpenIndiana 11, have a strange bug regarding the + expansion of ${1+"$@"}: when exactly *one empty* argument is passed to + a script run by one of this shells, inside that script ${1+"$@"} will + expand to *nothing*, rather than to to the single empty string, as + one would expect (OTOH, $# will correctly expand to 1). This buggy + behaviour was causing a spurious failure in our testsuite (test 6 in + 't/automake-cmdline.tap'). Work around it. + + * t/wrap/automake.in: Here. + +2012-08-04 Stefano Lattarini + + news: document all the recent elisp-related changes and improvements + + * NEWS (Elisp byte-compilation): Here. Also notice that the recent + changes have fixed the long-standing (almost two years old!) automake + bug#7441. + +2012-08-04 Stefano Lattarini + + coverage: byte-compiling elisp files in different subdirectories + + Where a '.el' file in a subdirectory might require a '.el' file in + another one. This does not work out of the box, but can be made to + work with a judicious use of $(AM_ELCFLAGS) (just introduced in the + previous commit). + + * t/lisp-subdir-mix.sh: New test. + * t/list-of-tests.mk: Add it. + +2012-08-04 Stefano Lattarini + + elisp: honour AM_ELCFLAFS and ELCFLAGS in byte-compilation + + * lib/am/lisp.am (.el.elc): Add "$(AM_ELCFLAFS) $(ELCFLAGS)" + to the emacs command line. + * t/lisp-flags.sh: New test. + * t/list-of-tests.mk: Add it. + * doc/automake.texi (Emacs Lisp): Update. + +2012-08-02 Stefano Lattarini + + Merge branch 'depcomp-pgcc' into maint + + * depcomp-pgcc: + depcomp: style changes to Portland Group Compilers support + depcomp: initial support for Portland Group Compilers + +2012-07-30 Stefano Lattarini + + Merge branch 'maint' + + * maint: + build: fix build in VPATH setup + gen-tests: simplify sourcing of helper shell files + +2012-07-30 Stefano Lattarini + + build: fix build in VPATH setup + + * Makefile.am (t/ax/test-defs.sh): Ensure the 't/ax' directory exists, + before trying to create 'test-defs.sh' in there. This is required in + VPATH builds. + + Reported-by: Akim Demaille + +2012-07-26 Stefano Lattarini + + news: fix a couple of minor formatting issues + + * NEWS (New in 1.13): Here. + +2012-07-26 Stefano Lattarini + + gen-tests: simplify sourcing of helper shell files + + This is a follow-up on commit v1.12.2-49-g42fb45b, for an occurrence + of '. "$am_testauxdir"/foo.sh' that wasn't in a test script, but + rather in 'gen-testsuite-part' (ending up in the tests generated by + that script). + + * gen-testsuite-part: In the generated 'depcomp*.tap' tests, use + simply: + . depcomp.sh + rather than: + . "$am_testauxdir/depcomp.sh" + +2012-07-26 Stefano Lattarini + + typofix: in a comment in Makefile.am + +2012-07-26 Stefano Lattarini + + Merge branch 'maint' + + * maint: (38 commits) + maintcheck: fixup list of files in $(xdefs) + tests: never source test-defs.sh directly, source test-lib.sh instead + runtest: sanitize test environment + tests: remove an obsolescent self test + tests: "am_using_tap=yes" -> "am_test_protocol=tap" + tests: protect test libs against multiple inclusion + configure: testsuite shell can return early from "dot-sourced" files + tests: move sanitization and "Bournification" in the generic test lib + tests: source test defs in the generic test lib + test defs: no need to re-add $srcdir/t/ax to $PATH + tests: split test libs into "generic" and "automake-specific" + test setup: move actual calling of testsuite setup in ./defs + test setup: merge definitions of function for simple tests + test init: refactor: new function 'am_test_setup' + test init: refactor: move displaying of debugging info later + test init: refactor: new function 'am_setup_testdir' + test init: refactor: new function 'am_set_exit_traps' + configure: testsuite shell set exit traps in shell functions + test init: refactor: new function 'am_exit_trap' + test init: refactor: new function 'process_requirements' + ... + +2012-07-26 Stefano Lattarini + + Merge branch 'testsuite-refactor' into maint + + * testsuite-refactor: (33 commits) + maintcheck: fixup list of files in $(xdefs) + tests: never source test-defs.sh directly, source test-lib.sh instead + runtest: sanitize test environment + tests: remove an obsolescent self test + tests: "am_using_tap=yes" -> "am_test_protocol=tap" + tests: protect test libs against multiple inclusion + configure: testsuite shell can return early from "dot-sourced" files + tests: move sanitization and "Bournification" in the generic test lib + tests: source test defs in the generic test lib + test defs: no need to re-add $srcdir/t/ax to $PATH + tests: split test libs into "generic" and "automake-specific" + test setup: move actual calling of testsuite setup in ./defs + test setup: merge definitions of function for simple tests + test init: refactor: new function 'am_test_setup' + test init: refactor: move displaying of debugging info later + test init: refactor: new function 'am_setup_testdir' + test init: refactor: new function 'am_set_exit_traps' + configure: testsuite shell set exit traps in shell functions + test init: refactor: new function 'am_exit_trap' + test init: refactor: new function 'process_requirements' + ... + +2012-07-26 Stefano Lattarini + + Merge branch 'fix-pr12041' into maint + + * fix-pr12041: + tests: avoid spurious failure when running as root + +2012-07-26 Stefano Lattarini + + maintcheck: fixup list of files in $(xdefs) + + syntax-checks.mk (xdefs): Adjust to recent changes: add 't/ax/test-lib.sh' + and 't/ax/test-lib.sh', remove the now-deleted 't/ax/test-init.sh' + +2012-07-26 Stefano Lattarini + + tests: never source test-defs.sh directly, source test-lib.sh instead + + After the recent re-organization, sourcing 'test-defs.sh' directly might + not work well and cause spurious failures or other unexpected behaviours. + We should source 'test-lib.sh' instead, which contains not more direct + code execution (only definition of shell variables/functions, or sourcing + of other '*.sh' with the same property), is protected against multiple + inclusions, and sources 'test-defs.sh' automatically in in a proper way. + + * t/testsuite-summary-count.sh, t/tap-summary.sh, t/tap-summary-color.sh, + t/testsuite-summary-color.sh: Source 'test-lib.sh', not 'test-defs.sh'. + * gen-testsuite-part: Likewise, in the generated wrapper scripts. + +2012-07-26 Stefano Lattarini + + runtest: sanitize test environment + + * runtest.in: Here, similarly to what is done by AM_TESTS_ENVIRONMENT + in Makefile.am, unset variables that should be under the complete control + of the test framework, and that could create havoc if inherited from the + environment. This remove the need to check against possible environment + "pollution" ... + * t/ax/test-defs.in: ... in here. + * Makefile.am (AM_TESTS_ENVIRONMENT): Add a comment about the need of + synchronization with 'runtest.in'. + * t/self-check-env-sanitize.tap: Remove as obsolete. + * t/list-of-tests.mk: Adjust. + +2012-07-26 Stefano Lattarini + + tests: remove an obsolescent self test + + * t/self-check-tap.sh: This. The recent reorganization and code + moving between 'test-defs.sh' and 'test-lib.sh' has made it + brittle and prone to failures. Since the usefulness of this self + check is extremely limited, it's not worth trying to fix it. Just + remove it. + * t/list-of-tests.mk: Adjust. + +2012-07-26 Stefano Lattarini + + tests: "am_using_tap=yes" -> "am_test_protocol=tap" + + And similarly, "am_using_tap=no" -> "am_test_protocol=none". + + The new '$am_test_protocol' name is clearer, and will allow the easy + addition of further test protocols in the future. This is not truly + relevant for automake, but we are trying to make some parts of our + testsuite framework as general as possible, in view of a future move + to a more generic project like Gnulib. + + * Makefile.am, t/ax/am-test-lib.sh, t/ax/test-defs.in, t/ax/test-lib.sh, + t/self-check-env-sanitize.tap, t/self-check-tap.sh: Adjust. + * syntax-checks.mk (sc_tests_obsolete_variables): Add 'am_using_tap' to + the list of obsolete variables to check against. + +2012-07-26 Stefano Lattarini + + tests: protect test libs against multiple inclusion + + * t/ax/test-lib.sh, t/ax/am-test-lib.sh: Return early if already sourced. + Use the witness variables '$test_lib_sourced' and '$am_test_lib_sourced', + respectively, for this purpose. + * runtest.in, Makefile.am (AM_TESTS_ENVIRONMENT): Unset 'test_lib_sourced' + and 'am_test_lib_sourced', to avoid interferences from the environment. + +2012-07-26 Stefano Lattarini + + configure: testsuite shell can return early from "dot-sourced" files + + * configure.ac: Check that the shell selected to run the test + scripts can call 'return' form within a file being sourced + with the '.' built-in. + +2012-07-26 Stefano Lattarini + + tests: move sanitization and "Bournification" in the generic test lib + + * t/ax/test-defs.sh: From here ... + * t/ax/test-lib.sh: ... to here. Also move the initialization of + '$argv0' and '$me'. + +2012-07-26 Stefano Lattarini + + tests: source test defs in the generic test lib + + * t/ax/test-lib.sh: That is, here ... + * defs: ... rather than here. + +2012-07-26 Stefano Lattarini + + test defs: no need to re-add $srcdir/t/ax to $PATH + + * t/ax/test-defs.sh: Here. That is already done by both 'runtest' and + AM_TESTS_ENVIRONMENT, and the presence of '$srcdir/t/ax' in $PATH is + anyway required, after the recent changes, for our testsuite framework + to work at all. + +2012-07-26 Stefano Lattarini + + tests: split test libs into "generic" and "automake-specific" + + This is the first step in the quest to merge the generically useful + parts of our test suite framework in a more generic project, like + Gnulib. Time will tell if we'll succeed, and whether the success will + be worth the extra hassle. + + * t/ax/test-init.sh: Split out ... + * t/ax/am-test-lib.sh, t/ax/test-lib.sh: ... into these two tests. + * defs, Makefile.am: Adjust. + +2012-07-26 Stefano Lattarini + + test setup: move actual calling of testsuite setup in ./defs + + * t/ax/test-init.sh: Move call to 'am_test_setup' ... + * defs: ... here. + +2012-07-26 Stefano Lattarini + + test setup: merge definitions of function for simple tests + + * t/ax/plain-functions.sh: Delete, moving the definitions of ... + ($stderr_fileno_): ... this variable ... + (warn_, fail_, skip_, skip_all_, fatal_, framework_failure_): ... and + these functions ... + * t/ax/test-init.sh: ... in here. This allow us to use those functions + earlier in this file (instead of having to duplicate their behaviour + with inlined code). The TAP-based tests are still able to override these + functions later to their TAP-enhanced equivalents when 'tap-functions.sh' + is sourced. + * Makefile.am (dist_noinst_DATA): Remove 't/ax/plain-functions.sh'. + * t/ax/tap-functions.sh: Adjust a comment. + +2012-07-26 Stefano Lattarini + + test init: refactor: new function 'am_test_setup' + + * t/ax/test-init.sh (am_test_setup): Here. + Call it from the main code. Remove other calls of functions and + settings that are now duly called by 'am_test_setup'. + +2012-07-26 Stefano Lattarini + + test init: refactor: move displaying of debugging info later + + * t/ax/test-init.sh: Here, about the values of $PATH, $am_using_tap + and $am_running_installcheck. + +2012-07-26 Stefano Lattarini + + test init: refactor: new function 'am_setup_testdir' + + * t/ax/test-init.sh (am_setup_testdir): Here. + Use it instead of inlining its contents in the main code. + +2012-07-26 Stefano Lattarini + + test init: refactor: new function 'am_set_exit_traps' + + * t/ax/test-init.sh (am_set_exit_traps): Here. + (trap): Use it instead of inlining the cleanup/finalization code. + +2012-07-26 Stefano Lattarini + + configure: testsuite shell set exit traps in shell functions + + * configure.ac: Check that the shell selected to run the test + scripts can set an exit trap in a shell function, without having + that trap executed at the termination of the function rather + than of the scripts. According to the Autoconf manual, at least + AUX 5.3 /bin/sh suffers of such a bug. + +2012-07-26 Stefano Lattarini + + test init: refactor: new function 'am_exit_trap' + + * t/ax/test-init.sh (am_exit_trap): Here. + (trap): Use it instead of inlining the cleanup/finialization code. + +2012-07-26 Stefano Lattarini + + test init: refactor: new function 'process_requirements' + + * t/ax/test-init.sh (process_requirements): Here. + Use it in to check that the tools in $required are present. + +2012-07-26 Stefano Lattarini + + test init: refactor: new function 'require_tool' + + * t/ax/test-init.sh (require_tool): Here. + Use it in the loop in the prerequisites in $required. + +2012-07-26 Stefano Lattarini + + test init: remove a couple of paranoid sanity checks + + * t/ax/test-init.sh: Here, about 'am_top_srcdir' and 'am_top_builddir'; + the values of those variables are AC_SUBST'd, so it's nigh impossible + for the to be wrong or get "messed up". + +2012-07-26 Stefano Lattarini + + tests: simplify sourcing of helper shell files + + Now that the early $PATH setup in both 'runtest' and AM_TESTS_ENVIRONMENT + allow the '.' built-in to find to-be-sourced shell scripts in the 't/ax/' + directory automatically, we can simplify several usages like: + + . "$am_testauxdir"/foo.sh + + to just: + + . foo.sh + + Also, because our test scripts run with the 'errexit' flag active, and + because POSIX mandates that, when the '.' built-in is used, + + ... if no readable file is found, a non-interactive shell shall abort ... + + we can further simplify usages like: + + . "$am_testauxdir"/foo.sh || fatal_ "sourcing foo.sh" + + once again to to just: + + . foo.sh + + * ./defs, several tests: Adjusted. + +2012-07-26 Stefano Lattarini + + test defs: move in 't/ax/test-defs.sh' + + We can do so with minimal churn, now that the early setup of $PATH in + both 'runtest' and AM_TESTS_ENVIRONMENT allow the '.' built-in to find + to-be-sourced shell scripts in 't/ax' automatically, both in in-tree + and VPATH builds. + + With this change, we take another step forward a more rational and + "segregated" organization of our testsuite framework. + + * defs-static.in: Rename ... + * t/ax/test-defs.in: ... like this, and adjust. + * Makefile.am, syntax-checks.mk, t/README, gen-testsuite-part, + t/tests-init.sh, t/ax/tap-setup.sh, t/tap-summary.sh, .gitignore, + t/testsuite-summary-color.sh, t/testsuite-summary-count.sh, + t/self-check-tap.sh, defs: Adjust. + +2012-07-26 Stefano Lattarini + + tests: update PATH early from AM_TESTS_ENVIRONMENT and runtest + + Because the POSIX standards mandate that sourcing a file with ". FILE" + will cause FILE (assuming it is a relative containing no slashes) to be + looked for in PATH, such a move will allow us to simplify our sourcing + of shell testing libraries like (currently) 't/ax/test-init.sh' and + 'defs', and to modularize and re-organize them better in the feature, + with minimal churn. + + * runtest.in, Makefile.am (AM_TEST_ENVIRONMENT): Prepend $(abs_srcdir)/t/ax + and $(abs_builddir)/t/ax (in that order) to PATH; do so avoiding repetition + in the common case of non-VPATH builds. + +2012-07-26 Stefano Lattarini + + runtest: export $srcdir for use by the test scripts + + This is mostly a preparatory change in view of future ones. But it + also make the behaviour of runtest more similar to that of the test + harness used by "make check". + + * runtest.in: Export srcdir (was already defined to '@srcdir@'). + +2012-07-26 Stefano Lattarini + + gen-tests: $testdir/ax -> $testauxdir + + * gen-testsuite-part ($testauxdir): New, defined to "$testdir/ax". + Use it throughout, for better encapsulation and less duplication. + ($auxdir): Remove as unneeded. + +2012-07-26 Stefano Lattarini + + gen-tests: less hard-coding of 't' as the test directory + + This will make life easier for us in case we decide to rename the + testsuite directory in the future (perhaps to something like 'tests', + which is somewhat less cryptic than the current 't'). + + * gen-testsuite-part ($testdir): New variable, used throughout instead + of hard-coding the name of the test directory to 't'. + All the script adjusted to make proper use of '$testdir'. + ($auxdir): Move its definition earlier, for consistency with the one + of '$testdir'. + +2012-07-26 Stefano Lattarini + + build: auxiliary testsuite files/scripts built by "make all" + + This will allow the developers to run a tests case by hand out of + a newly extracted tarball simply doing: + + $ ./configure && make + $ ./runtest t/the-test-case.sh + + while before this change one has to resort to: + + $ ./configure && make && make check TESTS= + $ ./runtest t/the-test-case.sh + + or, with some non-GNU makes, even: + + $ ./configure && make && make check TESTS= AM_MAKEFLAGS="TESTS=" + $ ./runtest t/the-test-case.sh + + This come very handy sometimes, especially when doing one-shot + debugging. Admittedly not a big deal, but one less friction in + the build system is always nice. + + * Makefile.am (check_SCRIPTS, dist_check_DATA, nodist_check_DATA): + Move their content to ... + (noinst_SCRIPTS, dist_noinst_DATA, nodist_noinst_DATA): ... these + variables. + Adjust comments. + +2012-07-26 Stefano Lattarini + + perf tests: reorganize + + * t/list-of-tests.mk (handwritten_TESTS): Don't list ($perf_TESTS) in + here anymore. + * Makefile.am (EXTRA_DIST): Add them explicitly. + (perf): New target, run the performance tests and save the logs of + the ones with unexpected results in the file 't/perf/test-suite.log', + which is thus ... + (PERF_TEST_SUITE_LOG): ... defined in this variable ... + (CLEANFILES): ... and added to this. + (test_subdirs): Remove 't/perf': the tests in there are no more + listed in $(TESTS). + * t/ax/test-init.sh: Don't explicitly skip "perf" test here. + +2012-07-26 Stefano Lattarini + + runtest: pass *all* the given shell options to the test invocation + + * runtest.in: Here. This didn't work previously because, in our + option parsing loop, we were mistakenly redefining '$shell_opts' + each time, instead of appending to it. + +2012-07-26 Stefano Lattarini + + runtest: correctly pass shell option also for TAP tests + + * runtest.in: Here. This required code refactoring not + completely trivial. + +2012-07-26 Stefano Lattarini + + cosmetics: remove leftover comment fragment from runtest.in + +2012-07-25 Stefano Lattarini + + test defs: improve a comment + + * defs-static.in: Here, about the unsetting of CDPATH. + +2012-07-25 Stefano Lattarini + + test defs: remove obsolete comment + + * defs-static.in: Here: do not state anymore that this file should execute + correctly with any system's /bin/sh shell, as this is not true anymore: the + testsuite assumes a POSIX shell throughout these days. + +2012-07-25 Stefano Lattarini + + runtest: support option --shell, tell which shell should run the test + + * runtest.in: Here. The same effect could have been obtained by + exporting AM_TEST_RUNNER_SHELL to the desired value, but the new + API is simpler and requires less typing and less thinking. + +2012-07-25 Stefano Lattarini + + runtest: support passing options over to the shell + + * runtest.in: Here. Also, support '--help' to display a nice + help screen. + +2012-07-25 Stefano Lattarini + + tests: avoid spurious failure when running as root + + Fixes automake bug#12041. + + * t/primary-prefix-couples-force-valid.sh: If run as root, don't expect + a "test -x" on a non-executable files to fail: for root, all files are + executable (as well as readable and writable), and at least on Solaris + 10 that causes "test -x" to succeed also on non-executable files. + +2012-07-24 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: avoid non-textual output in a '.log' file + +2012-07-24 Stefano Lattarini + + tests: avoid non-textual output in a '.log' file + + * t/dist-formats.tap: Here. Otherwise, some inferior awk implementations, + like OpenIndiana /usr/xpg4/bin/awk, could be confused and cause spurious + errors in the testsuite harness. + +2012-07-24 Stefano Lattarini + + tags: refactor to reduce code duplication (2) + + No semantic change is intended. + + * lib/am/tags.am (am__define_uniq_tagged_files): New variable, + factor out some code common to ... + (ctags-am, tags-am, ID): ... the recipes of these targets. + +2012-07-24 Stefano Lattarini + + tags: refactor to reduce code duplication (1) + + No semantic change is intended. + + * lib/am/tags.am (am__uniquify_input): New variable, factor + out some code common to ... + (ctags-am, tags-am, ID): ... the recipes of these targets. + +2012-07-24 Stefano Lattarini + + Merge branches 'tags-simplify-recursion' and 'color-tests-always' + + * tags-simplify-recursion: + tags: unify recursion for tags targets with that of "usual" targets + + * color-tests-always: + tests: better name for a couple of tests + check: support colorized testsuite output by default + +2012-07-23 Stefano Lattarini + + tests: avoid a spurious failure with Solaris /bin/sh + + The /bin/sh shell on Solaris is dumb enough not to set the exit + status to 127 after the execution of a non-existing command is + attempted: + + $ /bin/sh -c 'nonesuch'; echo stat = $? + /bin/sh: nonesuch: not found + stat = 1 + + This means that the missing script, when run through that shell, + cannot discriminate between a real failure of a maintainer tool + and a failure due to its absence. This is not a big deal in + practice (especially because all the 'missing' invocations in + our Makefiles are done with $(SHELL), and that is almost surely + set by configure to a proper POSIX shell), but was causing an + annoying failure in our testsuite. Fix it. + + * t/missing3.sh: If 'missing' is run with a /bin/sh shell suffering + from the just-described bug, skip the check that would spuriously + fail due to that bug. + +2012-07-23 Stefano Lattarini + + tests: fix buglet in t/missing3.sh + + * t/missing3.sh: Be sure to use 'run_cmd' also in the first invocation + of 'missing', to ensure the stderr will actually be saved in a file we + can later grep. + +2012-07-23 Stefano Lattarini + + Merge branch 'maint' + + * maint: + self tests: avoid spurious failures on older bash + tests: remove t/parallel-tests-many.sh (fixes spurious failure) + typofix: in a comment in the automake script + news: minor fixlets and reordering + +2012-07-23 Stefano Lattarini + + Merge branch 'fix-pr11909' into maint + + * fix-pr11909: + self tests: avoid spurious failures on older bash + +2012-07-23 Stefano Lattarini + + self tests: avoid spurious failures on older bash + + Fixes automake bug#11909. + + * t/self-check-explicit-skips.sh: Remove or rework few checks for use + cases that are no more relevant nor supported now that we've got rid + of the need to use the 'Exit' function explicitly. Make the other + existing checks stricter. + +2012-07-23 Stefano Lattarini + + tests: remove t/parallel-tests-many.sh (fixes spurious failure) + + That test was checking for automake#7868 "parallel-tests and command-line + length limit issue". That bug is still open, and the tests was xfailing. + + What concerns us is that the test was also causing an annoying problem. + On Solaris 10, it produced a '.log' file with two overly-long lines (more + than 1 million characters long!) and that was causing the test harness to + experience spurious failures, with Solaris XPG4 awk complaining that: + + /usr/xpg4/bin/awk: line 0 (NR=734): Record too long (LIMIT: 19999 bytes) + + A little consideration shows that the bug#7868 checked by the culprit + test cannot be solved "by accident", e.g., by another bug fix or some + simple refactoring, so there is little added value in keeping the xfailing + test for it, if this causes other problems (and we've seen it does). + + So we just remove the test. In case we ever manage to fix the bug in + mainline automake, we can copy over the similar test(s) from Automake-NG, + which has actually managed to fix the bug (and have simpler test cases + for it). + + * t/parallel-tests-many.sh: Delete. + * t/list-of-tests.mk (XFAIL_TESTS, handwritten_TESTS): Remove it. + +2012-07-22 Stefano Lattarini + + tests: better name for a couple of tests + + * t/color.sh: Rename ... + * t/color-tests.sh: ... like this. + * t/color2.sh: Rename ... + * t/color-tests2.sh: ... like this. + * t/list-of-tests.mk: Adjust. + +2012-07-22 Stefano Lattarini + + check: support colorized testsuite output by default + + Fixes automake bug#11855. + + With this change, we make the 'color-tests' option enabled by default. + That option remains still silently accepted as a no-op, for backward + compatibility. + + The developer of a package is still free to disable testsuite coloring on + a per-makefile basis (by adding "AM_COLOR_TESTS = no" to the Makefile.am) + or on a whole-project basis (by AC_SUBST'ing AM_COLOR_TESTS to "no" in + configure.ac). But now the user will be able to request the testsuite + output to be colorized, if he really wants to: + + # With GNU make: + make AM_COLOR_TESTS=yes check + # With non-GNU make: + make AM_COLOR_TESTS=yes AM_MAKEFLAGS=AM_COLOR_TESTS=yes check + + * NEWS: Update. + * doc/automake.texi: Updated, and some related minor reformatting + and rewording. + * automake.in (handle_tests): No need to pass the transform '%COLOR%' + when processing "check.am". + * lib/am/parallel-tests.am: Remove use of the '%?COLOR%' transform; + just act as if it were unconditionally TRUE. + * t/color.sh: No need to specify 'color-tests' in 'AUTOMAKE_OPTIONS' + nor in 'AM_INIT_AUTOMAKE'. + * t/ax/testsuite-summary-checks.sh: Likewise. + * t/ax/tap-summary-aux.sh: Likewise. + * t/color2.sh: Likewise. Also, ensure that colorized testsuite output + can be disabled by default by calling "AC_SUBST([AM_COLOR_TESTS], [no])". + * t/tap-realtime.sh: Define 'AM_COLOR_TESTS' to "no" in Makefile.am, to + avoid spurious colorization of the output due to the use of the 'expect' + program. + * t/color-tests-opt.sh: New test, check that the 'color-tests' option is + still recognized as a no-op. + * t/list-of-tests.mk: Add the new test. + +2012-07-22 Stefano Lattarini + + tags: unify recursion for tags targets with that of "usual" targets + + This change has a side effect: now any failure of the 'tags', 'ctags', + 'cscope' and 'cscopelist' targets in a subdirectory will cause the + recursive command issued from the top directory to fail. We believe + that this behavioural change is not only justified by the simplification + this patch entails, but actually offers better semantics: ignoring + failures by default is never a good idea, and with make, the user can + anyway order the completion of commands in the face of possible failures + with the '-k' option. + + * NEWS: Update. + * automake.in (%required_targets): Add keys 'cscopelist-am', 'tags-am' + and 'ctags-am'. + (handle_tags): Greatly simplified, the major part of the handling of + recursion for the 'tags', 'ctags' and 'cscopelist' now moved out to ... + * lib/am/tags.am: ... this file, that has been adjusted and extended + accordingly. + * t/maken3.sh: Remove testing of the 'TAGS' target, that is now just + an alias to 'tags'. Without this change, this test would spuriously + fail. + +2012-07-21 Stefano Lattarini + + typofix: in a comment in the automake script + + * automake.in (process_file): Here. + +2012-07-17 Stefano Lattarini + + news: minor fixlets and reordering + +2012-07-16 Jack Kelly + + elisp: --batch implies -q, remove -q + + According to the emacs manual[1], --batch implies -q, so there's no + need to pass -q when compiling elisp. + + * lib/am/lisp.am: Remove -q from $(EMACS) call. + + [1]: http://gnu.org/s/emacs/manual/html_node/emacs/Initial-Options.html + +2012-07-16 Stefano Lattarini + + Merge branch 'maint' + + * maint: + fixup: delete "# serial" line in m4/amversion.in + news: update about recent ylwrap changes and fixes + m4: get rid of "# serial" lines + configure: ${#param} must be supported by the shell for the testsuite + yacc tests: fix a spurious failure with parallel make + ylwrap: use proper quoting inside a `...` substitution + ylwrap: don't uselessly reset the exit status in case of failure + ylwrap: fix C++ support for Bison + ylwrap: refactor: move loop invariant + ylwrap: refactoring: don't rely on the file order + tests: upgrade and fix Bison test case + tests: fix bison input file + ylwrap: comment changes + ylwrap: modernize idioms + ylwrap: rename header inclusion in generated parsers + ylwrap: simplify the list of renamings + ylwrap: refactor: less duplication + +2012-07-16 Stefano Lattarini + + fixup: delete "# serial" line in m4/amversion.in + + Otherwise, when m4/amversion.m4 is regenerated, it will contain a + serial line as well. + +2012-07-16 Stefano Lattarini + + Merge branch 'yacc-work' into maint + + * yacc-work: + news: update about recent ylwrap changes and fixes + yacc tests: fix a spurious failure with parallel make + ylwrap: use proper quoting inside a `...` substitution + ylwrap: don't uselessly reset the exit status in case of failure + ylwrap: fix C++ support for Bison + ylwrap: refactor: move loop invariant + ylwrap: refactoring: don't rely on the file order + tests: upgrade and fix Bison test case + tests: fix bison input file + ylwrap: comment changes + ylwrap: modernize idioms + ylwrap: rename header inclusion in generated parsers + ylwrap: simplify the list of renamings + ylwrap: refactor: less duplication + +2012-07-16 Akim Demaille + + news: update about recent ylwrap changes and fixes + + * NEWS: In ylwrap, renamings are properly propagated, and unknown + files are preserved. + +2012-07-15 Stefano Lattarini + + elisp: support elisp files in subdirectories properly + + For more reference, see: + + + + * lib/am/lisp.am (.el.elc): If the file being byte-compiled is in + a subdirectory, add that (both as a subdirectory of the builddir + and the srcdir) to the emacs load path. While we are at it (and + for consistency), drop quoting of $(srcdir) and $(builddir), since + those variables are ensured (by configure-time checks) not to + contain white space nor shell metacharacters. + * t/list-of-tests.mk (XFAIL_TESTS): Add 't/lisp-subdir.sh' and + 't/lisp-subdir2.sh', since they now passes. + +2012-07-15 Stefano Lattarini + + elisp: simplify suffix rules using emacs '-L' option + + * lib/am/lisp.am (.el.elc): Use '-L dir' instead of calling '--eval' to + explicitly append to the 'load-path' variable. + +2012-07-15 Stefano Lattarini + + elisp: no need to "absolutize" $(srcdir) and $(builddir) ... + + * lib/am/lisp.am (.el.elc): ... here: we don't chdir around anyway, + nor move or copy around our source '.el' files. Update comments, + and re-wrap them while we are at it. + +2012-07-14 Stefano Lattarini + + elisp: prefer $(builddir) files over $(srcdir) ones + + * lib/am/lisp.am (.el.elc): Here. This better respects VPATH spirit. + Adjust and extends comments. + * t/list-of-tests.mk (XFAIL_TESTS): Remove 't/lisp-loadpath.sh', which + now passes. + +2012-07-14 Jack Kelly + + elisp: use suffix rules, get rid of 'elisp-comp' script (mostly a rewrite) + + Motivated by automake bug#11806. + + Traditionally, automake byte-compiled emacs-lisp '.el' files by invoking + 'elisp-comp' on all of them in a bulk; this involved complex timestamping + and file-locking logic. It was also brittle in any slightly-unusual + setup, because 'elisp-comp' operated by copying all of the elisp files + to be compiled into a temporary sub-directory and compiling them in there, + the copying the resulting byte-compile files back in the build directory. + + This patch removes all of that juggling and chicanery in favour of + defining a much simpler '.el.elc' suffix rule. Not only this is simpler, + but it also interacts better with "make -jN" calls, which are becoming + more and more common and useful on today's increasingly multicore systems. + + * Makefile.am (dist_script_DATA): Remove 'elisp-comp'. + * automake.in (@common_files): Likewise. + (handle_emacs_lisp): Do not require 'elisp-comp'. + * doc/automake.texi: Remove references to 'elisp-comp'. + * lib/am/lisp.am: Define elisp compilation via a suffix rule; this + basically amounts to a complete re-write of the lisp byte-compilation + rules. + * lib/elisp-comp: Remove. + * t/add-missing.tap: Remove elisp-comp test. + * t/dist-auxdir-many-subdirs.sh: Remove reference to elisp-comp. + * t/primary-prefix-invalid-couples.tap: Likewise. + * t/primary-prefix-valid-couples.sh: Likewise. + * t/lisp4.sh: Remove reference to elc-stamp. + * t/lisp5.sh: Likewise. + * t/lisp6.sh: Likewise. + * t/lisp3.sh: Likewise. Also remove the recompilation check that + involves a (message) call. + * t/lisp7.sh: Remove check for "Warnings can be ignored". Remove + reference to elc-stamp. + * t/lisp8.sh: Likewise. + * t/lispdry.sh: Remove references to elc-stamp. + + Acked-by: Stefano Lattarini + +2012-07-14 Stefano Lattarini + + coverage: elisp path contains $(srcdir) and $(builddir) + + * t/lisp-loadpath.sh: Check that. Also check that, in true VPATH + spirit, elisp files in the build directory are preferred to those + in the source directory. This test currently fails. + * t/list-of-tests.mk (handwritten_TESTS): Add the new test. + (XFAIL_TESTS): Likewise. + +2012-07-14 Stefano Lattarini + + coverage: emacs lisp files in subdirectories + + * t/lisp-subdir.sh, t/lisp-subdir2.sh: New tests, still failing. + * t/list-of-files.mk (handwritten_TESTS, XFAIL_TESTS): Add them. + +2012-07-14 Stefano Lattarini + + m4: get rid of "# serial" lines + + The "#serial" lines are only considered by aclocal for the system-wide + third-party '.m4' files, not for the Automake-provided ones. So they + serve no real purpose in the Automake '.m4' files. + + In addition, now that we use git and topic branches, and that we are also + writing the Automake-NG fork, the "#serial" lines are becoming more and + more unreliable (e.g., different version of the same file in different + branches can easily end up having the same serial numbers). + + So let's just nuke all the "#serial" lines. See also automake bug#11932. + + * m4/*.m4: All "# serial" lines removed. + +2012-07-14 Stefano Lattarini + + configure: ${#param} must be supported by the shell for the testsuite + + This will be required at least by the Automake-NG branch. + + * configure.ac: Require the $AM_TEST_RUNNER_SHELL supports ${#param} as + a way to obtain the length of the expansion of the variable $param. + +2012-07-14 Stefano Lattarini + + yacc tests: fix a spurious failure with parallel make + + * t/yacc-bison-skeleton.sh (Makefile.am): Add 'zardoz.h' + to BUILT_SOURCES. + +2012-07-14 Stefano Lattarini + + ylwrap: use proper quoting inside a `...` substitution + + * lib/ylwrap ($target): Here, when redefining this to a temporary file. + +2012-07-14 Stefano Lattarini + + ylwrap: don't uselessly reset the exit status in case of failure + + * lib/ylwrap: Here. In case of a failure in the wrapped yacc/lex + invocation, '$ret' (holding the final exit status of ylwrap) was + being uselessly reset to '1' in the later if/else. + +2012-07-14 Akim Demaille + + ylwrap: fix C++ support for Bison + + Fixes automake bug#7648. + + The current logic of ylwrap is to call yacc in a sub directory, and + pull out of it all the files that were requested on its command line. + Reverse this approach: export *all* the files created in the + subdirectory, but rename them according to what the command says. + This way, extra files, such as position.hh, location.hh and stack.hh + for C++ parsers, but also parser.xml or parser.dot if XML or Dot + output is enabled, will be preserved. + + * lib/ylwrap (pairlist): Remove. + (main loop): Don't loop over pairlist, but over the files in the + temporary directory. + * t/list-of-tests.mk (XFAIL_TESTS): Fixes t/yacc-bison-skeleton-cxx.sh. + * THANKS (James Bostock): Add, he reported bug#7648. + +2012-07-14 Akim Demaille + + ylwrap: refactor: move loop invariant + + * lib/ylwrap (input_rx): Move its definition next to its sibling's, + outside of the main loop. + +2012-07-14 Akim Demaille + + ylwrap: refactoring: don't rely on the file order + + Forthcoming changes will make us iterate over the files in a different + order. + + lib/ylwrap (first): Remove, replaced by... + (parser): this. + +2012-07-14 Akim Demaille + + tests: upgrade and fix Bison test case + + * t/yacc-bison-skeleton-cxx.sh: Request locations, to be + even more stressful. + Use %union to make sure the %{...%} is inserted where appropriate. + Fix some indentation/coding style issues. + +2012-07-14 Akim Demaille + + tests: fix bison input file + + Do not provide implementations in the %{...%} section, especially if the + header is included elsewhere, since then the linker will complain about + multiple definitions. + + Reported by Stefano Lattarini, + . + + * t/yacc-bison-skeleton.sh (zardoz.y): Define yylex and yyerror in the + epilogue. + +2012-07-14 Akim Demaille + + ylwrap: comment changes + + * lib/ylwrap: Improve some comments. + +2012-07-14 Akim Demaille + + ylwrap: modernize idioms + + * lib/ylwrap: Prefer printf to echo when special characters may + occur. + Replace the historical ',' sed separator with '|'. + +2012-07-14 Akim Demaille + + ylwrap: rename header inclusion in generated parsers + + Some types of Bison parsers, such as the GLR ones, generate a header + file that they include. ylwrap, which renames the generated files, + does not rename the included file. Fix this shortcoming, reported + for instance here: + . + Fixes t/yacc-bison-skeleton.sh, see Automake bug#7648 and PR automake/491. + + * lib/ylwrap (quote_for_sed): Accept arguments. + Catch more special characters. + (rename_sed): New. + Improve the previous renaming sed commands using quote_for_sed. + Suggested by Stefano Lattarini here: + . + (main loop): Use rename_sed to rename the dependencies to other files. + * t/yacc-d-basic.sh: Exercise this case, even if bison/yacc was + not issuing such an include. + * t/list-of-tests.mk (XFAIL_TESTS): Adjust. + +2012-07-14 Akim Demaille + + ylwrap: simplify the list of renamings + + * lib/ylwrap (pairwise): Instead of being a straightforward copy from + the command line arguments, and having to deal with y.tab vs. y_tab + later, let pairwise store the real file names to process, y_tab + conversion included when needed. + (main loop): Use $to instead of $2, for symmetry with $from. + +2012-07-14 Akim Demaille + + ylwrap: refactor: less duplication + + * lib/ylwrap (guard): New function. + Move functions before actual code. + +2012-07-13 Stefano Lattarini + + Merge branch 'maint' + + * maint: + news: mention fixed testsuite weaknesses + news: bump, for future 1.12.3 + tests: verify the shell test scripts are syntactically valid + tests: don't use C instead of C++ compiler on case-insensitive platforms + tests: avoid spurious TAP errors on Mac OS X 10.7 + tests: fix spurious failure in aclocal7.sh on fast machines + +2012-07-13 Stefano Lattarini + + news: mention fixed testsuite weaknesses + +2012-07-13 Stefano Lattarini + + news: bump, for future 1.12.3 + +2012-07-13 Stefano Lattarini + + Merge branches 'fix-pr11898' and 'fix-pr-11893-and-10766' into maint + + * fix-pr11898: + tests: verify the shell test scripts are syntactically valid + + * fix-pr-11893-and-10766: + tests: don't use C instead of C++ compiler on case-insensitive platforms + +2012-07-13 Stefano Lattarini + + tests: verify the shell test scripts are syntactically valid + + Fixes automake bug#11898. + + This measure of extra safety is mostly motivated by the fact that some + shells (at least some versions of Bash in the 3.x release series, one + of which serves as /bin/sh on Mac OS X 10.7, as well as Bash 4.0 and the + /usr/xpg4/bin/sh shell from Solaris 10) erroneously exit with exit status + 0 upon encountering a syntax error, if an exit trap is sett (as it is in + our test scripts). + + * Makefile.am (check-tests-syntax): New, check that the shell test + scripts listed in $(TESTS) are syntactically correct. + (.PHONY, check-local): Depend on it. + * t/self-check-exit.tap : Remove checks verifying that a script exits + with non-zero status upon encountering a syntax error; as explained + above, we can't depend on that. + +2012-07-12 Stefano Lattarini + + depcomp: style changes to Portland Group Compilers support + + * lib/depcomp (pgcc): Quote 'like this', not `like this'. Other minor + quoting improvements. Remove a commented-out command. In comments, + use proper capitalization and punctuation. Make a more consistent use + of whitespace. Make fatal error messages more nicely formatted, and + send them to standard error rather than to standard output. + +2012-07-12 Dave Goodell + Jeff A. Daily + + depcomp: initial support for Portland Group Compilers + + * lib/depcomp: Here. See automake bug#8880. + + Acked-by: Stefano Lattarini + +2012-07-12 Stefano Lattarini + + tests: don't use C instead of C++ compiler on case-insensitive platforms + + This change fixes automake bug#11893 and bug#10766. + + On at least Cygwin and Mac OS X 10.7, the file system where the system + compilers are located can be case-insensitive, so that looking for a + program named 'CC' might actually find the C compiler in /usr/bin/cc. + + Now, the Automake configure script looks for a C++ compiler named 'CC' + before looking for more obvious names like c++ or g++ (that is done to + increase testsuite "coverage in the wild", e.g., preferring, on Solaris, + the Sun Studio C++ compiler /usr/bin/CC over the GNU C++ compiler). + + Since the checks done in AC_PROG_CXX are apparently not strict enough + to rule out C compilers like those from GCC or Clang (which are smart + enough to recognize if a file has a C++ extension, passing it to the + C++ front end) the testsuite might end up using a C compiler where a + C++ one is expected, with some subtle bad consequences. + + * configure.ac: Don't look for a C++ compiler named 'CC' if the + "top-level" file system(s) (where /bin and /usr/bin are) are detected + to be case-insensitive. + + Reported-by: Peter Rosin + Reported-by: Max Horn + Helped-by: Eric Blake + +2012-07-10 Stefano Lattarini + + tests: avoid spurious TAP errors on Mac OS X 10.7 + + Fixes automake bug#1897. Reported by Max Horn. + + * t/suffix8.tap: The libtool bug#11895 was causing the ./configure script + to output a stray "ok" string on a line of its own, confusing the TAP + driver into thinking this was an extra test result (which resulted in the + next, real test results being flagged as "OUT-OF-ORDER"). Fix this by + protecting configure output. + * t/suffix10.tap: Likewise, and for the "make distcheck" output as well. + * THANKS: Update. + +2012-07-10 Adam Sampson (tiny change) + + tests: fix spurious failure in aclocal7.sh on fast machines + + Fixes automake bug#11896. Issue introduced in commit v1.12.1-46-g13dd512. + + * t/aclocal7.sh: Since aclocal rewrites aclocal.m4 unless the input files + are all older than the existing aclocal.m4, so we must sleep to ensure + somedefs.m4 has an older timestamp than the aclocal.m4 the next aclocal + call will generate. + +2012-07-09 Stefano Lattarini + + Merge branch 'maint' (with fix for CVE-2012-3386) + + This makes the fix for a locally-exploitable security vulnerability + (CVE-2012-3386) available to the Automake master branch. + + * maint: + sync: update files from upstream with "make fetch" + news: improve wording in entry about CVE-2012-3386 + maint: post-release minor version bump + release: stable release 1.12.2 + distcheck: never make part of $(distdir) world-writable + compat: automake should substitute @mkdir_p@, for backward compatibility + fixup: t/README: it's ./runtest, not ./t/ax/runtest + +2012-07-09 Stefano Lattarini + + sync: update files from upstream with "make fetch" + + * lib/config.guess, lib/gitlog-to-changelog, lib/texinfo.tex: Update. + +2012-07-09 Stefano Lattarini + + news: improve wording in entry about CVE-2012-3386 + +2012-07-09 Stefano Lattarini + + maint: post-release minor version bump + + * configure.ac (AC_INIT): Bump version number to 1.12.2a. + * m4/amversion.m4: Likewise (automatically regenerated by + "make bootstrap"). + +2012-07-09 Stefano Lattarini + + release: stable release 1.12.2 + + * configure.ac (AC_INIT): Bump version number to 1.12.2. + * m4/amversion.m4: Likewise (auto-updated by "./bootstrap"). + +2012-07-09 Stefano Lattarini + + Merge branch 'distcheck-vulnerability-CVE-2012-3386' into maint + + * distcheck-vulnerability-CVE-2012-3386: + distcheck: never make part of $(distdir) world-writable + +2012-07-09 Stefano Lattarini + + distcheck: never make part of $(distdir) world-writable + + This fixes a locally-exploitable security vulnerability (CVE-2012-3386). + + In the 'distcheck' rule, we used to make the just-extracted (from + the distribution tarball) $(distdir) directory and all its files and + subdirectories read-only; then, in order to create the '_inst' and + '_build' subdirectories in there (used by the rest of the recipe) we + made the top-level $(distdir) *world-writable* for an instant (the + time to create those two directories) before making it read-only + again. + + Making that directory world-writable (albeit only briefly) introduced a + locally exploitable race condition for those who run "make distcheck" with + a non-restrictive umask (e.g., 022) in a directory that is accessible by + others. A successful exploit would result in arbitrary code execution + with the privileges of the user running "make distcheck" -- game over. + Jim Meyering wrote a proof-of-concept script showing that such exploit is + easily implemented. + + This issue is similar to the CVE-2009-4029 vulnerability: + + + * lib/am/distdir.am (distcheck): Don't make $(distdir) world-writable, + not even for an instant; make it user-writable instead, which is enough. + + Helped-By: Jim Meyering + +2012-07-09 Stefano Lattarini + + compat: automake should substitute @mkdir_p@, for backward compatibility + + That has been unwittingly broken by commit v1.12-19-g7a1eb9f of 2012-04-28, + "AM_PROG_MKDIR_P: deprecate, to be removed in Automake 1.13". We thought it + wasn't a big deal, but Jim Meyering reported that @mkdir_p@ is used in + gettext's Makefile.in.in template: + + + * lib/am/header-vars.am (mkdir_p): Don't define. + * m4/init.m4 (AM_INIT_AUTOMAKE): AC_SUBST 'mkdir_p' with $(MKDIR_P). + * t/mkdir_p.sh, t/mkdirp-deprecation.sh: Enhance. + * NEWS: Update. + +2012-07-08 Stefano Lattarini + + fixup: t/README: it's ./runtest, not ./t/ax/runtest + + * t/README (Supported shells): Here. And remove an extra empty line. + +2012-07-07 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: move 'runtest' into the top-level directory + +2012-07-07 Stefano Lattarini + + tests: move 'runtest' into the top-level directory + + Move our wrapper script 'runtest' (meant to allow the execution of + Automake test cases from the command line) from the 't/ax/' directory + to the top-level one. This makes the script easier to find and to + invoke. Much more importantly, our DejaGNU-checking test cases won't + try anymore to use that script instead of the 'runtest' program provided + by DejaGNU (that happened because '$(srcdir)/t/ax/' is automatically + added early to the $PATH variable in our test cases), which was causing + spurious SKIPs. + + * t/ax/runtest.in: Move ... + * runtest.in: ... here. + * Makefile.am, t/README, .gitignore: Adjust. + +2012-07-07 Stefano Lattarini + + Merge branch 'maint' + + * maint: + cosmetics: rename t/ax/test-runner => t/ax/runtest + fixup: another "make recheck" failure with BSD make + test runner: work correctly in VPATH setups + compat: automake should define $(mkdir_p), for backward compatibility + coverage: test that AM_PROG_MKDIR_P and $(mkdir_p) still works + tests init: don't automatically re-execute tests with a POSIX shell + yacc tests: fix spurious failure with parallel make + tests: ignore minor 'recheck' regression for BSD make + tests: don't clutter the top-level dir with temporary test directories + tests: avoid spurious failures when @MKDIR_P@ points to "install-sh -d" + lisp: better support of VPATH builds + news: fixlets and updates + + + Extra non-trivial edits: + + * NEWS: State that $(mkdir_p) is still provided as an alias to + $(MKDIR_P), for (partial) backward-compatibility. + +2012-07-06 Stefano Lattarini + + cosmetics: rename t/ax/test-runner => t/ax/runtest + + The latter is shorter and clearer. Better to do the rename early, + before other developers or contributors begin to get used to the + 'test-runner' name. + + * t/ax/test-runner.in: Rename ... + * t/ax/runtest.in: ... like this. + * Makefile.am, t/README, .gitignore: Adjust. + +2012-07-06 Stefano Lattarini + + fixup: another "make recheck" failure with BSD make + + * t/parallel-tests-log-override-recheck.sh: Here, add a proper $sleep + before calling "make recheck". This should ideally have been done + in the earlier commit 'v1.12.1-100-g19d84bc', but it somehow slipped + through the cracks. + * t/test-metadata-recheck.sh: Likewise. + +2012-07-06 Stefano Lattarini + + test runner: work correctly in VPATH setups + + Due to a "feature" of AC_CONFIG_FILES, because 't/ax/test-runner.in' + is in a subdirectory, the '@srcdir@' value that is AC_SUBST'd in it + gets tweaked to contain as much '..' components as are the directory + components of 't/ax/test-runner'. Because our build system operates + in a non-recursive setup, this substitution is wrong; for example, + the final 't/ax/test-runner' build in a VPATH builds where the source + directory is ".." contains the line: + + : ${srcdir='../../../t/ax'} + + instead of the expected (and correct): + + : ${srcdir='../t/ax'} + + We solve the issue by building 't/ax/test-runner' with a Makefile + recipe instead of config.status substitutions; this is already done + for other testsuite-related files, like 'defs-static'. + + * configure.ac (AC_CONFIG_FILES): Don't build 't/ax/test-runner' + anymore. + * Makefile.am (t/ax/test-runner): New rule. + (EXTRA_DIST): Add 't/ax/test-runner.in'. + (CLEANFILES, noinst_SCRIPTS): Add 't/ax/test-runner'. + +2012-07-06 Stefano Lattarini + + Merge branch 'fix-pr11806' into maint + + * fix-pr11806: + lisp: better support of VPATH builds + +2012-07-06 Stefano Lattarini + + tests init: don't automatically re-execute tests with a POSIX shell + + I've unwittingly broken support for that feature *again* in some of + my recent testsuite tweaking. In this case, the re-execution code + works correctly when the tests are executed with a POSIX shells, but + breaks when they are invoked by an old-style Bourne shells (e.g., + /bin/sh on Solaris). + + It's time to face it: that feature is too much brittle, and too seldom + used (because the Makefile takes care of running the tests with the + correct shell anyway, so that a breakage is only experienced when + running the tests by hand). It just don't remain working for long, not + when we often touch the testsuite setup (which we are going to do again + when we'll try to move part of our testsuite framework to Gnulib, or a + similar project). + + So, instead of trying to be extra-smart and automatically re-execute the + tests with the correct shell, we now offer a simple wrapper script that + the user can employ to run the test scripts with the proper shell. And + while we are at it, we write this wrapper to also deal with TAP tests in + a better way, running them through the prove(1) utility, so that their + results are correctly recognized and reported. + + * t/ax/test-runner.in: New file; the wrapper script we were talking about. + * configure.ac (AC_CONFIG_FILES): Process it into 't/ax/test-runner'. + * .gitignore: Add 't/ax/test-runner'. + * defs: Remove code for automatic re-execution of the scripts with the + correct shell. This file now just a very thin layer around 'defs-static' + and 't/ax/test-init.sh'. + * t/README: Adjust, and remove or fix some imprecise or outdated text in + the process (like "... test scripts are written with portability in mind, + so that they should run with any decent Bourne-compatible shell ..." ). + * Makefile.am (AM_TESTS_ENVIRONMENT): No need to export 'AM_TESTS_REEXEC' + to "no" anymore. + * t/self-check-explicit-skips.sh: Likewise. + * t/self-check-exit.tap: Likewise. + * t/self-check-me.tap: Likewise. + * t/self-check-dir.tap: Likewise. + * t/self-check-reexec.tap: Remove as obsolete. + * t/list-of-tests.mk: Adjust. + +2012-07-06 Stefano Lattarini + + yacc tests: fix spurious failure with parallel make + + * t/yacc-deleted-headers.sh: Here, by adding a missing dependency + in the Makefile.am. Revealed by a failure with Sun Distributed make + run on Solaris 10 in parallel mode. + +2012-07-06 Stefano Lattarini + + tests: ignore minor 'recheck' regression for BSD make + + It turns out that, with NetBSD 5.1 make and FreeBSD 9 make, running + "make recheck" two times in a row quickly fails to correctly re-run + the failed tests in the second run. + + That issue has been introduced likely introduced in commit + 'v1.12.1-95-gd5443e4' of 20102-07-01, "parallel-tests: reimplement + fix for bug#11791". + + Anyway, the use case that has been broken is not realistic (who is + going to run "make recheck" two times in one second, without modifying + any of the tests or the tested programs in the meantime?), so we believe + the best fix is to simply work around the issue in the affected test + cases, rather than risking to slow down or uglify the 'recheck' rule. + + * t/parallel-tests9.sh: Enhance a little. + * t/tap-recheck.sh: Adjust adding proper '$sleep' calls were required. + * t/parallel-tests-log-override-recheck.sh: Likewise. + * t/test-driver-custom-multitest-recheck.sh: Likewise. + * t/test-driver-custom-multitest-recheck2.sh: Likewise. + +2012-07-06 Stefano Lattarini + + tests: don't clutter the top-level dir with temporary test directories + + * t/self-check-me.tap: Be sure to initialize '$am_create_testdir' to "no" + in all the shell invocations sourcing './defs'. Otherwise, when running + the testsuite with 'keep_testdirs=yes', the following temporary director + are left cluttering the top-level directory: + + ./012.dir + ./abc..dir + ./a.b.c.dir + ./foo.dir + ./foo.bar.dir + ./foo-bar-.dir + ./_foo__bar.dir + +2012-07-06 Stefano Lattarini + + tests: avoid spurious failures when @MKDIR_P@ points to "install-sh -d" + + * t/self-check-cleanup.tap: Several checks in this test were failing on + NetBSD 5.1. That happened because on that system, '@MKDIR_P@' expands to + an "install-sh -d" invocation that references the $(builddir), and the + code trying to duplicate some of the Automake testsuite infrastructure + in the test subdirectory of this self test wasn't smart enough to cater + to that situation. Granted, we could tweak the test case once more to + fix this Yet Another Spurious Failure, but at this point it has become + clear that the extra coverage offered by this test is not worth all the + hassle. Just remove the test. Since the testsuite is regularly run on + several systems and with different setups, most issues with the testsuite + framework will reveal themselves anyway; no actual need to unit-test them + in our testsuite, if that's too tricky. + * t/list-of-tests.mk: Adjust. + +2012-07-06 Stefano Lattarini + + compat: automake should define $(mkdir_p), for backward compatibility + + That has been unwittingly broken by commit 'v1.12-19-g7a1eb9f' + of 2012-04-28, "AM_PROG_MKDIR_P: deprecate, to be removed in + Automake 1.13". + + Report from Benoit Sigoure and Diego Elio Pattenò: + + + * lib/am/header-vars.am (mkdir_p): Define as an alias for $(MKDIR_P). + * t/list-of-tests.mk (XFAIL_TESTS): Remove 't/mkdir_p.sh'. + * NEWS: Update. + +2012-07-06 Stefano Lattarini + + coverage: test that AM_PROG_MKDIR_P and $(mkdir_p) still works + + They are deprecated, but should continue to work in the 1.12.x + release series. Report from Benoit Sigoure and Diego Elio Pattenò: + + + * t/mkdirp-deprecation.sh: Enhance. + * t/mkdir_p.sh: New test, check that AM_INIT_AUTOMAKE still defines + the $(mkdir_p) make variable. Currently xfailing. + * t/list-of-tests.mk (handwritten_TESTS, XFAIL_TESTS): Add the new + test. + +2012-07-06 Jack Kelly (tiny change) + Stefano Lattarini + + lisp: better support of VPATH builds + + Fixes automake bug#11806. + + * lib/am/lisp.am: Pass the value of '$(abs_srcdir)' to the + elisp-compile script in the environment. + * lib/elisp-comp: Add the vale of '$abs_srcdir' to the emacs + load-path. + * t/lisp-pr11806.sh: New test. + * t/list-of-tests.mk: Add it. + + Reported-by: Makoto Fujiwara + +2012-07-03 Stefano Lattarini + + tests: make 't/aclocal-macrodir.tap' executable + +2012-07-03 Stefano Lattarini + + maintcheck: fix spurious failure in 'maintainer-check-list-of-tests' + + * Makefile.am (test_subdirs): Add 'contrib/t', otherwise we would get a + spurious error like: + + List of tests in Makefile an on filesystem differ + + diff -u in-makefile on-filesystem + --- tests-in-makefile-list.tmp 2012-07-03 23:07:47.000000000 +0200 + +++ tests-on-filesystem-list.tmp 2012-07-03 23:07:47.000000000 +0200 + @@ -1,7 +1,3 @@ + -contrib/t/help-multilib.sh + -contrib/t/multilib.sh + -contrib/t/parallel-tests-html-recursive.sh + -contrib/t/parallel-tests-html.sh + t/ac-output-old.tap + t/acloca10.sh + t/acloca11.sh + make: *** [maintainer-check-list-of-tests] Error 1 + +2012-07-03 Stefano Lattarini + + build: fix cleaning of test directories in contrib (and in t/perf) + + * Makefile.am (clean-local-check): Update recipe to cater to the fact + that some tests using a temporary directory have been placed in other + directories that the 't/' directory (for the moment, at least 't/perf' + and 'contrib/t'). + +2012-07-03 Stefano Lattarini + + Merge branch 'aclocal-trace-macrodir' + + * aclocal-trace-macrodir: + aclocal: deprecate ACLOCAL_AMFLAGS, trace AC_CONFIG_MACRO_DIR instead + +2012-07-03 Stefano Lattarini + + aclocal: deprecate ACLOCAL_AMFLAGS, trace AC_CONFIG_MACRO_DIR instead + + Maintaining ACLOCAL_AMFLAGS in the Makefile.am to pass extra flags + to aclocal is (and have always been) quite of an hack. For example, + autoreconf is forced to grep Makefile.am to honour those flags. But + this is a bad obsolescent behaviour; in fact, the autotools have moved + consistently in the past years from custom grepping of Makefile.am and + configure.ac to tracing of m4 macro calls, which is more consistent, + more reliable and more flexible. + + And when autoreconf is not used, the developer is forced to add *by hand* + the flags specified by ACLOCAL_AMFLAGS to the aclocal calls not triggered + by make rebuild rules; here lie again more duplication and more chances + for errors. + + Moreover, ACLOCAL_AMFLAGS has only two typical use cases: + + - to instruct aclocal to look for extra macro definition in a local + directory (as with "ACLOCAL_AMFLAGS = -I m4"); and + + - to further instruct aclocal to copy in that local directory the + required third-party .m4 files found in the system-wide directory + (as with "ACLOCAL_AMFLAGS = -I m4 --install"). + + The first use case can be better covered if aclocal can instead trace and + honours call to the AC_CONFIG_MACRO_DIR autoconf macro; and the second + use case shouldn't be considered really legitimate, as it is quite (and + subtly) brittle (see automake bug#9037). + + Thus we now make aclocal trace AC_CONFIG_MACRO_DIR macro, and act + accordingly. For backward compatibility, we continue to support the + ACLOCAL_AMFLAGS special variable (although removing any mention of it + from the documentation). Future Automake releases will likely start + to warn about the use of that variable, and eventually remove support + for it altogether. + + From a suggestion by Eric Blake. + + This is a much simplified (and IMHO saner) version of the patch series + discussed in the threads: + + + + * aclocal.in ($ac_config_macro_dir): New global variable. + (trace_used_macros): Also trace the macro 'AC_CONFIG_MACRO_DIR', + and set the '$ac_config_macro_dir' variable accordingly. + (parse_arguments): Code for diagnosis of '--install' used without + any user-specified include directory moved ... + (while (1)): .. into the main loop. Which now also updates the + list of user-specified include directories to include the directory + given as argument to the call (if any) of 'AC_CONFIG_MACRO_DIR'. + * lib/am/configure.am: Update comments. + * NEWS: Updated. + * doc/automake.texi: Likewise. Also, stop advising the use of the + '--install' in ACLOCAL_AMFLAGS (see automake bug#9037 for a rationale), + and remove any reference to ACLOCAL_AMFLAGS (which is now considered + obsolescent). + * t/aclocal-path-install.sh: Adjust grepping check in the aclocal + error messages. + * t/subpkg.sh: Updated: add 'AC_CONFIG_MACRO_DIR' call to configure.ac, + remove setting of 'ACLOCAL_AMFLAGS' in Makefile.am and use of aclocal + command line arguments. + * t/subpkg2.sh: Likewise. + * t/subdir8.sh: Likewise. + * t/remake10c.sh: Likewise. + * t/remake8a.sh: Likewise. + * t/remake8b.sh: Likewise. + * t/aclocal4.sh: Likewise. + * t/aclocal6.sh: Likewise. + * t/acloca14.sh: Likewise. + * t/acloca22.sh: Likewise. + * t/aclocal5.sh: Likewise, and do not not invade the Automake + namespace (this avoids spurious failures). + * t/acloca14b.sh: New test, identical to the previous version of + 'acloca14.test'; it is kept to verify backwards compatibility with + the use of ACLOCAL_AMFLAGS. + * t/acloca22b.sh: Likewise (but for 'acloca22.test'). + * t/aclocal-amflags.sh: New test, check for backwards + compatibility that ACLOCAL_AMFLAGS still works. + * t/remake-macrodir.sh: New test, checking that aclocal's honoring of + AC_CONFIG_MACRO_DIR interacts nicely with automatic rebuild rules. + * t/list-of-tests.mk: Add the new tests. + +2012-07-03 Stefano Lattarini + + news: fixlets and updates + + * NEWS: Here. In particular, report the change in 'missing' + semantics. + +2012-07-02 Stefano Lattarini + + contrib: check-html: pass flags to rst2html invocations + + Related to automake bug#11287. + + * contrib/t/check-html.am (.log.html): Here, passing $(AM_RST2HTMLFLAGS) + and $(RST2HTMLFLAGS) (in that order). + +2012-07-02 Stefano Lattarini + + contrib: simple improvements to check-html + + Related to automake bug#11287. + + * contrib/t/check-html.am (.log.html): Do not look for $RST2HTML in + the environment, looking for $(RST2HTML) should be enough (also, the + pre-existing code was broken, because it single-quoted $RST2HTML). + Fix the loop-and-search implementation to be more similar to the + one in 'contrib/t/parallel-tests-html.sh'. Prefer 'mv -f' over bare + 'mv'. Do not break the recipe in + +2012-07-02 Stefano Lattarini + + coverage: check-html can be used recursively + + Addresses the main part of Automake bug#11287. + + * contrib/t/parallel-tests-html-recursive.sh: New test. + * contrib/t/local.am: Add it. + +2012-07-02 Stefano Lattarini + + tests: tests for stuff in contrib goes in 'contrib/t' + + * t/help-multilib.sh: Move ... + * contrib/t/help-multilib.sh: .. here. Remove a now-obsolete + "FIXME" comment. + * t/multlib.sh: Move ... + * contrib/t/multilib.sh: .. here. Remove a now-obsolete + "FIXME" comment. + * t/parallel-test2.sh: Move ... + * contrib/t/parallel-tests-html.sh: .. here. Remove a + now-obsolete "FIXME" comment. + * contrib/t/local.am: New, basically defining the list of + tests for stuff in 'contrib/'. + * t/list-of-tests.mk, Makefile.am: Adjust. + * .gitignore: Update. + * syntax-checks.mk (xtests): Likewise. + +2012-07-02 Stefano Lattarini + + Merge branch 'user-recursive-targets' + + * user-recursive-targets: + recursion: support user-defined recursive targets + tests: rename 'recurs*.sh' to 'var-recurs*.sh' + tests: minor improvements to 'recurs*.sh' + +2012-07-02 Stefano Lattarini + + recursion: support user-defined recursive targets + + The user can now define his own recursive targets that recurse + in the directories specified in $(SUBDIRS). That can be done by + specifying the name of such targets in invocations of the new + 'AM_EXTRA_RECURSIVE_TARGETS' m4 macro. + + The API goes like this: + + $ cat configure.ac + AC_INIT([pkg-name], [1.0] + AM_INIT_AUTOMAKE + AM_EXTRA_RECURSIVE_TARGETS([foo]) + AC_CONFIG_FILES([Makefile sub/Makefile]) + AC_OUTPUT + + $ cat Makefile.am + SUBDIRS = sub + foo-local: + @echo This will be run by "make foo". + + $ cat sub/Makefile.am + foo-local: + @echo This too will be run by a "make foo" issued either in + @echo the 'sub/' directory or in the top-level directory. + + Like for the "default" recursive targets (e.g., 'all' and 'check'), + the user-defined recursive targets descend in the $(SUBDIRS) in a + depth-first fashion, and process '.' last (unless that is explicitly + specified in $(SUBDIRS)). + + * NEWS, doc/automake.texi: Document the new feature. + * automake.in (@extra_recursive_targets): New global variable. + (scan_autoconf_traces): Trace macro '_AM_EXTRA_RECURSIVE_TARGETS'. + (handle_user_recursion): New subroutine; among other things, it defines + the new internal '$(am__extra_recursive_targets)' make variable, and + the '*-am', '*-local' and '*-recursive' targets associated with the + user-specified user recursive targets. + (generate_makefile): Call the new subroutine. + * lib/am/subdirs.am (am__recursive_targets): New internal make variable, + listing all of '$(RECURSIVE_TARGETS)', '$(RECURSIVE_CLEAN_TARGETS)' and + '$(am__extra_recursive_targets)' together. + (AM_RECURSIVE_TARGETS): Adjust the definition of this variable ... + (.PHONY, .MAKE): ... and the list of dependencies of these special targets + to take advantage of the new '$(am__recursive_targets)' variable. + ($(am__recursive_targets)): New targets, superseding ... + ($(RECURSIVE_TARGETS), $(RECURSIVE_CLEAN_TARGETS)): ... these, and + inheriting their rules. This way, the rules to handle recursion for + built-in recursive targets (e.g., 'all', 'dvi', 'clean') and for user + defined recursive targets are the same. + * m4/extra-recurs.m4: New file, contain definition of new macro + 'AM_EXTRA_RECURSIVE_TARGETS' and '_AM_EXTRA_RECURSIVE_TARGETS'. + These macros are basically dummy, only used for tracing by automake. + * m4/Makefile.am (dist_automake_ac_DATA): Update. + * t/recurs-user.sh: New test. + * t/recurs-user2.sh: Likewise. + * t/recurs-user-deeply-nested.sh: Likewise. + * t/recurs-user-indir.sh: Likewise. + * t/recurs-user-keep-going.sh: Likewise. + * t/recurs-user-many.sh: Likewise. + * t/recurs-user-no-subdirs.sh: Likewise. + * t/recurs-user-no-top-level.sh: Likewise. + * t/recurs-user-override.sh: Likewise. + * t/recurs-user-phony.sh: Likewise. + * t/recurs-user-wrap.sh: Likewise. + * t/remake-recurs-user.sh: Likewise. + * t/list-of-tests.mk: Update. + +2012-07-02 Stefano Lattarini + + tests: rename 'recurs*.sh' to 'var-recurs*.sh' + + * t/recurs.sh: Rename ... + * t/var-recurs.sh: ... to this. + * t/recurs2.sh: Rename ... + * t/var-recurs2.sh: ... to this. + * tests/list-of-tests.mk: Adjust. + +2012-07-02 Stefano Lattarini + + tests: minor improvements to 'recurs*.sh' + + * t/recurs.sh: Removed useless calls to AM_CONDITIONAL in + the generated 'configure.ac'. + * t/recurs2.sh: Add trailing ':' command. + +2012-07-01 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: don't trust the exit status of "make -k" for non-GNU makes + parallel-tests: reimplement fix for bug#11791 + tests setup: unset CDPATH + tests setup: more namespace safeness + tests setup: remove an unused variable + tests setup: less hard-coding of the test subdirectory + +2012-07-01 Stefano Lattarini + + tests: don't trust the exit status of "make -k" for non-GNU makes + + * t/parallel-tests-recheck-pr11791.sh: Here. At least some versions + of FreeBSD make botch it up, returning success when failure should be + returned. + +2012-07-01 Stefano Lattarini + + parallel-tests: reimplement fix for bug#11791 + + * lib/am/check.am: Here. The new implementation is shorter, slightly + more efficient (requiring less forks), less brittle in the face of + signals or unexpected interruptions in the make process, and should + also be easier to merge in the 'ng/master' branch (as of now, due to + the difficulties in merging our previous version of the fix in the + 'ng/master' codebase, Automake-NG still lacks a fix for bug#11791). + +2012-07-01 Stefano Lattarini + + tests setup: unset CDPATH + + So that our test scripts can safely chdir around using relative + paths as well, without having to worry abut possible CDPATH + interferences. + + * defs-static.in: unset CDPATH. + * t/ax/tests-init.sh: Remove a now-unneeded workaround. + +2012-07-01 Stefano Lattarini + + tests setup: more namespace safeness + + * t/ax/tests-init.sh ($testSubDir): Rename ... + ($am_test_subdir): ... to this, throughout the file. + +2012-07-01 Stefano Lattarini + + tests setup: remove an unused variable + + * defs-static.in ($testprefix): This one. + +2012-07-01 Stefano Lattarini + + tests setup: less hard-coding of the test subdirectory + + * t/ax/tests-init.sh: Make the code creating the temporary + test subdirectory smart enough to automatically create it + in the same subdirectory of the test that is being run. + * defs-static.in ($MKDIR_P, $am_rel_srcdir): New variables, + AC_SUBST'd from @MKDIR_P@ and @srcdir@ respectively, and + used in the new 'tests-init.sh' code. + +2012-07-01 Stefano Lattarini + + Merge branch 'maint' + + * maint: + parallel-tests: silence an overly verbose recipe + tests: fix some uses of 'Exit', where 'exit' should now be used instead + maintcheck: test scripts should be executable, check for that + +2012-06-30 Stefano Lattarini + + parallel-tests: silence an overly verbose recipe + + * lib/am/check.am (check-TESTS): Here, the part of the recipe + removing the stale '.log' and '.trs' files. + +2012-06-30 Stefano Lattarini + + tests: fix some uses of 'Exit', where 'exit' should now be used instead + + * t/parallel-tests-recheck-pr11791.sh: Here. + +2012-06-30 Stefano Lattarini + + maintcheck: test scripts should be executable, check for that + + * syntax-checks.mk (sc_tests_executable): Here, in this new check. + (syntax_check_rules): Add it. + * Makefile.am (dist-hook): Drop, no need to make test cases executable + anymore. + +2012-06-30 Stefano Lattarini + + Merge branch 'maint' + + * maint: + parallel-tests: recipes for "check" and "recheck" are separated again + +2012-06-30 Stefano Lattarini + + Merge branch 'recheck-fix' into maint + + * recheck-fix: + parallel-tests: recipes for "check" and "recheck" are separated again + +2012-06-30 Stefano Lattarini + + Merge branch 'maint' + + * maint: + parallel-tests: "recheck" behaves better in case of compilation failures + scripts: quote 'like this', not `like this' + +2012-06-30 Stefano Lattarini + + parallel-tests: recipes for "check" and "recheck" are separated again + + * lib/am/check.am: Here. They have distinctly diverged recently, and + the reduction in code duplication obtained keeping their recipes united + is not anymore worth the extra complications. + +2012-06-30 Stefano Lattarini + + Merge branch 'recheck-fix' into maint + + * recheck-fix: + parallel-tests: "recheck" behaves better in case of compilation failures + scripts: quote 'like this', not `like this' + +2012-06-30 Stefano Lattarini + + tests: prefer "test ! -e FILE" to check that a file doesn't exist + + * t/autohdrdry.sh: Here, rather than using "test ! -r FILE". + +2012-06-30 Jim Meyering + + texi: clean after Texinfo manuals in $(SUBDIRS) directories correctly + + Fixes the regression exposed by previous commit 'v1.12.1-165-g498492f'. + + * automake.in (handle_texinfo_helper): Add $infobase.{t2d,t2p} + to @mostly_cleans, but *without* the '$relative_dir/' prefix. + +2012-06-30 Stefano Lattarini + + coverage: regression in texinfo "make mostlyclean" with $(SUBDIRS) + + After commit v1.12.1-91-g205c757 of 2012-06-20, "texi: require + Texinfo >= 4.9, related enhancements", the presence of a Texinfo manual + 'manual.texi' in a subdir (say 'doc/') of a package using a recursive + make setup would cause "make distcheck" to fail, due to the presence of + the 'manual.t2d/' directory created by texi2dvi. That directory would + not be correctly removed because the 'mostlyclean' rule would run, from + within the 'doc/' sub-directory, "rm -rf doc/manual.t2d", instead of + the expected (and correct) "rm -rf manual.t2d". + + Reported by Jim Meyering: + + + * t/txinfo21.sh: Enhance to expose the issue. + * t/txinfo-no-clutter.sh: Likewise, and other miscellaneous improvements. + +2012-06-30 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: fix a spurious failure + configure: fix detection of POSIX shell to work in a VPATH build + tests: prefer "test ! -e FILE" to check that a file doesn't exist + +2012-06-30 Stefano Lattarini + + tests: fix a spurious failure + + * t/parallel-tests-dry-run-2.sh: Here. + +2012-06-30 Stefano Lattarini + + configure: fix detection of POSIX shell to work in a VPATH build + + * configure.ac: When checking whether "test -e" works, use 'config.log', + not 'configure', as the witness file, because the latter does not exist + in the current directory during a VPATH build. + +2012-06-29 Stefano Lattarini + + tests: prefer "test ! -e FILE" to check that a file doesn't exist + + Once, for the sake of (at least) Solaris 10 /bin/sh, we had to use + "test ! -f FILE" or "test ! -r FILE" or "test ! -d FILE" instead, + because the that shell's 'test' built-in didn't grok the '-e' option. + + Note however that we still can't use "test ! -e" in the Makefile recipes + used in the test cases; that is because those recipes are run with the + shell detected by 'configure', and Autoconf-generated configure scripts + do no guarantee to find or provide a POSIX-compatible shell. + + * Several tests: Adjust. + * t/yacc-clean-cxx: Adjust, and remove a couple of useless commands. + * t/parallel-tests-dry-run-2.sh: Adjust, and add invocation to + "make -n" forgotten in previous versions of the test. + * t/txinfo26.sh: Adjust, and don't bother to skip the test when it's + run in a directory whose absolute path contain whitespace: that setup + is not supported anyway. + * t/maken3.sh: Adjust, and fix a typo that could cause a minor false + negative. + * t/test-trs-recover2.sh: Prefer using 'skip_' with a suitable error + message over a bare 'exit 77'. + +2012-06-28 Stefano Lattarini + + Merge branch 'maint' + + * maint: + configure: move a misplaced "section" comment + configure: clump check for ${var%...} and ${var#...} expansion together + cosmetics: improve wording of a couple of configure messages + configure: the testsuite shell must support 'test -e' and 'test ! -e' + tests: remove stale workarounds for Solaris /bin/sh + +2012-06-28 Stefano Lattarini + + configure: move a misplaced "section" comment + + * configure.ac (Create output files): This, move it towards the end + of the script. + +2012-06-28 Stefano Lattarini + + configure: clump check for ${var%...} and ${var#...} expansion together + + And together with those for the ${var%%...} and ${var##...} expansions. + After all, it is basically impossible to find a shell that support one + of them but not the others. + + Suggestion by Eric Blake. + + * configure.ac: Here. + +2012-06-28 Stefano Lattarini + + cosmetics: improve wording of a couple of configure messages + + * configure.ac: Fix a couple of messages so that the configure + output changes from this: + + checking whether /bin/sh "set -e" preserves exit traps... yes + checking whether /bin/sh "set -x" corrupts stderr... no + + to this: + + checking whether /bin/sh preserves exit traps with "set -e"... yes + checking whether /bin/sh corrupts stderr with "set -x"... no + +2012-06-28 Stefano Lattarini + + configure: the testsuite shell must support 'test -e' and 'test ! -e' + + * configure.ac: Require that the shell that is to be selected to run + the testsuite understands "set -e" and "set ! -e". + +2012-06-28 Stefano Lattarini + + tests: remove stale workarounds for Solaris /bin/sh + + Our testsuite cannot be run with that shell anymore (as it is + not POSIX-compliant). + + * t/tap-more.sh: Remove outdated workarounds for Solaris /bin/sh. + * t/self-check-exit.tap: Likewise. + * t/ansi2knr-no-more.sh: Likewise. + * t/add-missing.tap: Likewise. + * t/dist-auxfile.sh: Likewise. + * t/test-driver-custom-multitest-recheck2.sh: Likewise. + * t/ax/test-init.sh: Remove obsolete references to Solaris + /bin/sh. + * t/confh5.sh: Likewise. + * t/uninstall-fail.sh: Likewise. And update comments about + quirks of Solaris /bin/ksh and /usr/xpg4/bin/sh. + +2012-06-28 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests init: don't bother allowing '$me' to be overridable + tests init: typofixes in comments + +2012-06-28 Stefano Lattarini + + tests init: don't bother allowing '$me' to be overridable + + We once used that feature in our wrapper tests; but now (and probably + even since commit 'v1.11-1308-g375f23d' of 2011-09-08, "testsuite: + revamp generation of autogenerated tests") it is not needed anymore. + By removing it we can simplify our growingly complex testsuite framework + a little. + + * t/ax/test-inist.sh ($me): Do not initialize it here (and only if not + already set), instead ... + * defs-static.in ($me): ... initialize it here unconditionally. + Do not check anymore that $me doesn't come from the environment: that + wouldn't cause any problem now. + Now that '$me' is defined early, prefer it over 'argv0' in early error + messages, both here ... + * defs: ... and here. + * Makefile.am (AM_TESTS_ENVIRONMENT): Do not bother "nullifying" $me + anymore. + * t/self-check-env-sanitize.tap: Adjust. + * t/self-check-me.tap: Likewise. + +2012-06-28 Stefano Lattarini + + tests init: typofixes in comments + +2012-06-28 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: one test was not executable, make it so + readme: fix typo in t/README: s/$((...)/$((...))/ + tests: don't skip if $(abs_builddir) or $(abs_srcdir) contain whitespace + tests: avoid spurious maintainer-check failures + tests: remove obsolete hacks around maintainer-check false positives + +2012-06-28 Stefano Lattarini + + tests: one test was not executable, make it so + + * t/subdir-order.sh: This test. + +2012-06-28 Stefano Lattarini + + readme: fix typo in t/README: s/$((...)/$((...))/ + +2012-06-28 Stefano Lattarini + + tests: don't skip if $(abs_builddir) or $(abs_srcdir) contain whitespace + + We used to explicitly skip libtool and gettext tests if the absolute + path of the builddir or of the srcdir which Automake was configured + with contained any whitespace (or other metacharacters). + + But several other tests would spuriously fail in such an unholy setup. + To be precise, it would cause 61 'FAIL's and 42 'ERROR's in the whole + Automake testsuite. + + The fact that, as of today, nobody has reported any failure of this kind + means that (thankfully) nobody is building automake with $(abs_srcdir) + or $(abs_builddir) mangled by whitespace. So, instead of trying to cater + to such a broken setup consistently, we just drop the extra check in the + libtool/gettext tests. + + In case someone will ever reports a failure due to extra whitespace in + either $(abs_srcdir) or or $(abs_builddir), we will simply enhance our + 'configure.ac' to bail out flatly and loudly at such a setup. + + * t/ax/test-init.sh: Simplify accordingly. + +2012-06-28 Stefano Lattarini + + tests: avoid spurious maintainer-check failures + + * t/ax/test-init.sh: Here, by adding extra quoting for two + occurrences of the string "perl". + +2012-06-28 Stefano Lattarini + + tests: remove obsolete hacks around maintainer-check false positives + + * gen-testsuite-part, t/test-trs-recover.sh: Here. + +2012-06-28 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: simpler workaround for shells losing the exit status in exit trap + + + Extra non-trivial edits: + * Several tests: Adjusted to use 'exit' rather than 'Exit'. + +2012-06-28 Stefano Lattarini + + Merge branch 'simplify-exit-trap-workaround' into maint + + * simplify-exit-trap-workaround: + tests: simpler workaround for shells losing the exit status in exit trap + + + Extra non-trivial edits: + + * t/am-missing-prog.sh: Use 'exit, not 'Exit'. + +2012-06-28 Stefano Lattarini + + cosmetics: remove trailing whitespace in some files + + * lib/missing, t/comment7.sh, t/objc-flags.sh, t/objcxx-flags.sh, + t/perf/testsuite-summary.sh, t/self-check-explicit-skips.sh: Here. + + Prompted by a report from Karl Berry. + +2012-06-28 Stefano Lattarini + + coverage: enhance tests in 'missing' script a little + + * t/am-missing-prog.sh: Here, by also verifying its expected + exit status. + +2012-06-28 Stefano Lattarini + + Merge branch 'maint' + + * maint: + coverage: tests AM_MISSING_PROG usage + docs: document AM_MISSING_PROG + +2012-06-28 Stefano Lattarini + + coverage: tests AM_MISSING_PROG usage + + Now that AM_MISSING_PROG is documented, we want to make sure it + works as expected when used in third-party code. + + * t/am-missing-prog.sh: New test. + * t/ammissing: Rename ... + * t/am-macro-not-found.sh: ... like this, to avoid confusion (this + test has nothing to do with the 'missing' script nor with the + 'AM_MISSING_PROG' macro). + * t/list-of-tests.mk: Adjust. + +2012-06-28 Eric Blake + + docs: document AM_MISSING_PROG + + Addresses automake bug#11793. + + This macro has been present for a long time, and coreutils has been + relying on it despite no documentation, which argues that it is stable + enough to be worth documenting. + + Furthermore, since we are hoping to change our preferred invocation + from 'missing --run program' to 'missing program' in a future version + of automake, we need a way for packages to consistently get the + preferred invocation form rather than open-coding a call to 'missing'. + In particular, the Autoconf manual would love to recommend this macro + when discussing how to integrate an autotest suite with automake. + + * doc/automake.texi (Public Macros): Document AM_MISSING_PROG. + +2012-06-27 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: fix a spurious failure with Solaris make + tests: avoid several spurious failures on Solaris + tests: avoid a spurious failure on NetBSD + +2012-06-27 Stefano Lattarini + + tests: fix a spurious failure with Solaris make + + * t/subdir-order.sh: Run make in parallel only if the make implementation + truly supports it. + +2012-06-27 Stefano Lattarini + + parallel-tests: "recheck" behaves better in case of compilation failures + + With this change, the "recheck" target 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, that test will still be rerun by further "make recheck" invocations. + Previously, its '.log' and '.trs' would have both been lost, so that the + test would have not been re-run. + + This change fixes automake bug#11791. + + * NEWS: Update. + * lib/am/check.am (recheck, check-TESTS): Adjust to cater to scenario + described above. + * t/parallel-tests-recheck-pr11791.sh: New test. + * t/list-of-tests.mk: Add it. + +2012-06-27 Stefano Lattarini + + scripts: quote 'like this', not `like this' + + * lib/test-driver.sh: Here. + +2012-06-26 Stefano Lattarini + + Merge branch 'missing-not-touch-just-warn' + + * missing-not-touch-just-warn: + missing: --run is supported again (as a no-op) for use by older automake + +2012-06-26 Eric Blake + + missing: --run is supported again (as a no-op) for use by older automake + + Commit v1.12.1-87-ga22717d of 2012-06-21 ("missing: do not touch + timestamps; only warn for out-of-date files") has removed the '--run' + option, since our new preferred calling conventions now imply it; but + if a newer 'missing' is mixed with an already built project that used + an older Automake version (this happened in practice for GNU m4; see: + ), then + the 'Makefile' in that project will fail due to passing the '--run' + option when trying to bring the project up-to-date. + + * lib/missing: Parse and ignore '--run'. + +2012-06-25 Stefano Lattarini + + Merge branch 'missing-not-touch-just-warn' + + * missing-not-touch-just-warn: + missing: don't cater to 'configure.in' in our advice + missing: better tips about missing tools + +2012-06-25 Stefano Lattarini + + missing: don't cater to 'configure.in' in our advice + + The use of 'configure.in' as autoconf input now deprecated the development + versions of both Automake and Autoconf, and we'd like to speed up its + demise. + + * missing: In the advice displayed in case some autotools are detected to + be missing, refer to 'configure.ac' unconditionally, instead of referring + to 'configure.in' when that file exists in the current directory (and no + 'configure.ac' does). + +2012-06-25 Stefano Lattarini + + tests: simpler workaround for shells losing the exit status in exit trap + + Now that we can assume our tests are run by a decent POSIX shell, we + can simplify our workaround aimed at having the exit status propagated + correctly to the code in the exit trap. Unfortunately, we cannot + dispense with such a workaround altogether, because it's still required + by some shells we need to support (at least Solaris 10 /bin/ksh and + /usr/xpg4/bin/sh). + + For more information about the need of that workaround, see the entry + about 'trap' in the section "Limitations of Shell Builtins" in the + Autoconf manual: + + + The new workaround has been tested successfully with the following + shells: + + - Bash 4.1 + - Bash 3.2 + - Bash 3.0 + - Bash 2.05b + - dash 0.5.5.1 + - dash 0.5.2 + - AT&T Ksh 93u (from official Debian package) + - MirBSD Korn Shell 40.2 (from official Debian package) + - Solaris 9, 10 and 11 /bin/ksh + - Solaris 9, 10 and 11 /usr/xpg4/bin/sh + - NetBSD 5.1 /bin/sh + - NetBSD 5.1 /bin/ksh + + * t/ax/test-init.sh (Exit): Rename ... + (_am_exit): ... like this. + (exit): New alias for '_am_exit'. We cannot simply redefine 'exit' + as a shell function, because some shells (dash 0.5.5.1, Solaris 10 + /bin/ksh and /usr/xpg4/bin/sh) do not allow it. + (_am_exit, trap): Add extra escaping for 'exit' calls, to ensure we + really invoke the 'exit' builtin and not our alias with the same + name. + * configure.ac: Check that the shell selected to run our testsuite + supports aliases named like shell builtins. + * t/REAMDE: Adjust. + * All tests: Adjust, by simply using 'exit' instead of 'Exit'. + * t/self-check-explicit-skips.sh: Adjust: the first usage of 'exit' + after it has been redefined as an alias must be on a new line w.r.t. + that where the alias is defined, in order for the redefinition to be + honored. + * syntax-checks.mk (sc_tests_Exit_not_exit): Delete. + (sc_tests_exit_not_Exit): New. + (syntax_check_rules): Adjust. + (sc_tests_automake_fails): Simplify the recipe a little. + * Several tests: Remove now useless spurious quoting once required + to placate the 'sc_tests_Exit_not_exit' maintainer check. + * gen-testsuite-part: Likewise. Also, avoid uses of 'Exit' in the + generated scripts. + +2012-06-24 Stefano Lattarini + + tests: avoid several spurious failures on Solaris + + * t/ax/is_newest: Rewrite to be Bourne-compatible, for /bin/sh shells like + Solaris' that are not POSIX-conforming. The script is so small that such + a rewrite is easier than going through the hoops that would be required to + ensure this script is always executed with a POSIX shell. + * t/ax/is: Add a comment stating that this script is to be kept Bourne + compatible as well. + +2012-06-24 Stefano Lattarini + + tests: avoid a spurious failure on NetBSD + + * t/maken.sh: Do not expect the timestamp of the current directory + to be unchanged after a "make -n". + +2012-06-24 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: fix automatic re-execution of tests with Zsh + tests: drop support for older Zsh shells + tests: allow AM_TEST_RUNNER_SHELL to be overridden + tests: fix setup for older Zsh + +2012-06-23 Stefano Lattarini + + tests: fix automatic re-execution of tests with Zsh + + * defs: Use '$argv0' instead of '$0'. With Zsh not started right + away in Bourne-compatibility mode, the latter will be the path not + of the test script itself, but of the file it's currently sourcing + -- i.e., in our case, './defs'. This would cause the automatic + re-execution code to execute './defs' (basically a no-op) rather + than re-run the test correctly. + +2012-06-23 Stefano Lattarini + + tests: drop support for older Zsh shells + + * defs-static.in: Here. The fact that such support has been broken for + almost a year (only fixed by today's commit 'v1.12.1-57-gf1e0300'), + causing no bug reports from anyone, shows that such support is not truly + warranted. And it will get in the way of future improvements in the + handling of the exit trap (because bugs in older Zsh versions will + prevent some of our planned improvements). So just drop it. + * t/README: Remove obsolete advice for working around bugs in older + versions of Zsh; instead, indicate version 4.3 is the oldest Zsh now + supported. + +2012-06-23 Stefano Lattarini + + tests: allow AM_TEST_RUNNER_SHELL to be overridden + + * defs-static.in: Here. This will make it easier for the maintainer + to run some self checks (like those in 't/self-check-exit.tap') with + different shells, to look for possible portability problems. Fix a + typo (doubled "the") while we are at it. + +2012-06-23 Stefano Lattarini + + tests: fix setup for older Zsh + + * defs-static.in: After the addition of TAP-based tests and our renaming + of "simple" test scripts from 'tests/foo.test' to 't/foo.sh', a test name + is valid if it matches the wildcard "*.sh" or "*.tap", not the wildcard + "*.test". Adjust accordingly. + +2012-06-23 Stefano Lattarini + + missing: better tips about missing tools + + * lib/missing: Try to point the user to the home page of such tools + where possible. Also, make clear that some tools (e.g., aclocal or + autoheader) are distributed as part of bigger projects (resp. automake + and autoconf, in those cases). While at it, refactor and re-format + the existing code heavily, in particular introducing + (give_advice): ... this new function in the process. + +2012-06-23 Stefano Lattarini + + Merge branch 'missing-not-touch-just-warn' + + * missing-not-touch-just-warn: + missing: do not touch timestamps; only warn for out-of-date files + +2012-06-23 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: avoid one last `...` command substitution in 'test-init.sh' + maintcheck: guard against `...` for command substitution in test cases + tests: more uses of $(...) over `...` for command substitution + cosmetics: quote `like this', not 'like this', in a couple of tests + readme: clarify/extend few entries in 't/README' + readme: better separation of entries in 't/README' + readme: subsections "Do" and "Do not" in 't/README' merged + tests: new requirement 'grep-nonprint' + cosmetics: fix description of an expected error message in a test + tests: assume automake quotes 'like this', not `like this' + +2012-06-23 Stefano Lattarini + + tests: avoid one last `...` command substitution in 'test-init.sh' + + * t/ax/test-init.sh (me): In the definition of this variable. This + also shave off a couple of forks, and the need for a sanity check + only required in fringe situations. + +2012-06-23 Stefano Lattarini + + maintcheck: guard against `...` for command substitution in test cases + + But still allow them in configure.ac, Makefile.am and shell scripts + created or used inside test cases itself, because Autoconf (as of + version 2.69) does not yet ensure that $CONFIG_SHELL will be set to + a proper POSIX shell. + + * syntax-checks.mk (sc_tests_command_subst): New check. + (syntax-check_rules): Add it. + * t/tap-global-log.sh: Minimal tweakings to avoid triggering the + new maintainer check. + +2012-06-22 Stefano Lattarini + + tests: more uses of $(...) over `...` for command substitution + + Somehow missed by the previous changes. No big deal, fix them now. + + * t/ax/depcomp.sh: Here. + * t/autodist.sh: And here. + * t/autodist-no-duplicate.sh: And here. + * t/autodist-subdir.sh: Ad here. + * t/remake11.sh t/self-check-me.tap: And here. + * t/perf/testsuite-summary.sh: And here. + * t/perf/testsuite-recheck.sh: And here. + +2012-06-22 Stefano Lattarini + + cosmetics: quote `like this', not 'like this', in a couple of tests + + * t/ansi2knr-no-more.sh: Here. + * t/aclocal-verbose-install.sh: And here. + +2012-06-22 Stefano Lattarini + + readme: clarify/extend few entries in 't/README' + + * t/README (Writing test cases): Here. + +2012-06-22 Stefano Lattarini + + readme: better separation of entries in 't/README' + + * t/README (Writing test cases): Prepend different entries with a '*' + character acting like a bullet in a list. This make different entries + better separated, visually-wise. Minor related reformatting. + +2012-06-22 Stefano Lattarini + + readme: subsections "Do" and "Do not" in 't/README' merged + + * t/README (Writing test cases): Merge subsections "Do" and "Do not". + The distinction was rather artificial, and more confusing than helpful. + +2012-06-22 Stefano Lattarini + + tests: new requirement 'grep-nonprint' + + * t/ax/test-inist.sh ($esc): New, a literal escape character. + (grep-nonprint): New requirement, check that the grep implementation + available that can handle non-printing characters correctly. + * t/color.sh: Use it instead of hand-rolled equivalent, and do not + (re)define '$esc' explicitly. + * t/color2.sh: Likewise. + * t/tap-color.sh: Likewise. + * t/vtexi4.sh: Likewise. + * t/parallel-tests-no-color-in-log.sh: Likewise. Also prefer the use + of grep over that of $FGREP, because the new requirement only check + grep, and ensure we only grep non-printing characters from a pipe, to + avoid hitting a BSD grep limitation. + * t/parallel-tests-reset-term.sh: Likewise. + * t/ax/tap-summary-aux.sh: Use '$esc' instead of hard-coding the + literal escape character. + +2012-06-22 Stefano Lattarini + + cosmetics: fix description of an expected error message in a test + + * t/vartypo2.sh: Here. This reflects the change from `this style' + of quoting to 'this style'. + +2012-06-22 Stefano Lattarini + + tests: assume automake quotes 'like this', not `like this' + + * t/add-missing.tap: Here. This slightly simplifies and/or enhances + some grepping checks on automake diagnostic. + +2012-06-22 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: prefer using 'is_newest' over 'ls -t' hacks + tests: implement is_newest as an auxiliary script, not shell function + tests: fix some spurious failures in VPATH setup + tests: work in VPATH setup again + +2012-06-22 Stefano Lattarini + + tests: prefer using 'is_newest' over 'ls -t' hacks + + To verify that a file 'new' is newer than the file 'old', it's much + cleaner to use "is_newest new old" rather than the more clumsy + "ls -t". Adjust several of our tests accordingly. + + * syntax-checks.mk (sc_tests_ls_t): New check, guard against uses + of "ls -t" and similar. + (syntax_check_rules): Add it. + * t/maken.sh: Adjust. + * t/autohdr4.sh: Likewise. + * t/extradep2.sh: Likewise. + * t/lex-depend-cxx.sh: Likewise. + * t/extradep.sh: Likewise. + * t/yacc-depend2.sh: Likewise. + * t/yacc-pr204.sh: Likewise. + * t/lex-pr204.sh: Likewise. + * t/yacc8.sh: Likewise. + * t/acloca13.sh: Likewise. + * t/lex-depend.sh: Likewise, and enhance. + * t/acloca14.sh: Likewise. + * t/aclocal7.sh: Likewise. + +2012-06-22 Stefano Lattarini + + tests: implement is_newest as an auxiliary script, not shell function + + This will allow to also use it in the makefile recipes used in our + test cases. + + * t/ax/test-init.sh (is_newest): Remove. + * t/ax/is_newest: New script. + * Makefile.am (EXTRA_DIST): Add it. + +2012-06-22 Stefano Lattarini + + tests: fix some spurious failures in VPATH setup + + * t/self-check-cleanup.tap: No need to copy the 'ax/t/test-init.sh' + file over in our temporary directory. + * t/self-check-reexec.tap: Likewise. + +2012-06-22 Stefano Lattarini + + tests: work in VPATH setup again + + * defs: Drop overly paranoid sanity checks that was causing all the tests + to fail spuriously when run in a VPATH setup, with a message like: + "../t/nodef.sh: ./t/ax/test-init.sh: not found in current directory". + Those checks looked for invariants that, even if broken, would still + cause the test to fail very early and with a pretty clear error message + anyway. + +2012-06-22 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: automatic re-execution works for non-POSIX shells too + tests: use more POSIX shell features our test scripts + + + Extra non-trivial edits: + + * t/ax/test-init.sh: Apply the diffs between past versions of + 'defs' in maint and in master; i.e., remove handling of $required + entries 'texi2dvi-o' and 'makeinfo-html', and adjust to the fact + that the parallel testsuite harness is now the default. + +2012-06-22 Stefano Lattarini + + tests: automatic re-execution works for non-POSIX shells too + + Some inferior shells are too greedy in parsing their input. If a + non-POSIX Bourne shell (like Solaris 10 /bin/sh) was used to launch + one of our test scripts, it would fail unconditionally, because it + unexpectedly saw some (by it) unsupported constructs, notwithstanding + such constructs being placed *after* the code implementing automatic + test re-execution with a better shell. In conclusion, the shell + bailed out like this: + + $ /bin/sh t/ar.sh + $ t/ar.sh: syntax error at line 257: `is_newest_files=$' unexpected + + By moving all the potentially problematic code in a separate file, to + be sourced only after the code for automatic re-execution with a better + shell, we ensure that inferior shell cannot see such code by mistake. + + * defs: All code after automatic shell re-execution moved out ... + * t/ax/test-init.sh: ... to this new file. + * syntax-checks.mk (xdefs): Add it. + * Makefile.am (dist_check_DATA): Add it. Also move in 'defs' from + a less explicit 'check_DATA' declaration. + (nodist_check_DATA): Move in 'defs-static' from a less explicit + 'check_DATA' declaration. + (check_DATA): Remove. + * t/self-check-sanity.sh: Remove, it was actually too hacky and brittle, + sanity-checking situations we don0t actually care about. + * t/list-of-tests.mk: Adjust. + * t/self-check-explicit-skips.sh: Adjust, and fix a botched heading + comments while we are at it. + * t/self-check-reexec.tap: Adjust. + * t/self-check-cleanup.tap: Likewise. + +2012-06-22 Stefano Lattarini + + tests: use more POSIX shell features our test scripts + + Since commit 'v1.12-36-g2d68fd9' of 2012-05-07, "configure: search a + sturdy POSIX shell to be used in the testsuite", the shell running + our test script is assured to be a POSIX-conforming shell, so we can + use the more modern and flexible idioms and features that we couldn't + use when we also aimed at compatibility with non-POSIX Bourne shells, + like Solaris /bin/sh. + + * t/README: Suggest to use POSIX shell features liberally in test cases, + with possible exception of Makefile recipes and configure shell code. + * Several tests: Adjust to use more POSIX shell features; e.g., $(...) + rather than `...`, $((...)) rather than `expr ...`, "if ! CMD; then ..." + instead of "if CMD; then :; else ...", and so on. + In several places, when using the 'test' built-in, prefer '-eq' over + '=' for numeric comparisons, and prefer "grep -c PATTERN FILE" over + "grep PATTERN FILE | wc -l". + Throw in other low-hanging easy improvements and fixlets while we are + at it. + * t/ax/depcomp.sh, t/ax/tap-summary-aux.sh, t/ax/tap-functions.sh, + defs, defs-static.in: Likewise. + +2012-06-21 Stefano Lattarini + + Merge branch 'maint' + + * maint: + docs: avoid failures with development version of Texinfo (4.13.90) + typofix: s/test derivers/test drivers/ in check.am comments + typofix: s/env/even/ in comments in GNUmakefile + +2012-06-21 Stefano Lattarini + + docs: avoid failures with development version of Texinfo (4.13.90) + + * doc/automake-history.texi: Use '@item' instead of '@itemx' where + appropriate. + +2012-06-21 Stefano Lattarini + + missing: do not touch timestamps; only warn for out-of-date files + + Before this change, the missing script had a twofold role: + + - it warned the user if some required maintainer tools was missing, + or too old; + + - in such a case, it tried to "fix" the timestamp of the files that + should have been rebuilt by that tool (without actually updating + the file contents, of course), to allow the build to continue. + + The second capability used to be quite useful in the days when most + projects committed files generated by maintainer-only tools in their + VCS repository (today the trend is not to keep such generated files + VCS-committed anymore). In such a setup, the "timestamp-fixing" + capability of 'missing' was quite useful, in that it allowed users + lacking some required maintainer tool to build from a VCS checkout + in the face of skewed timestamps (as could have been caused by + "cvs update" or "git checkout"). + + But then, when the automatic remake rules kicked in due to the + generated files being *actually out-of-date* (e.g., because the user + had modified 'configure.ac' but lacked a modern-enough autoconf to + rebuild it), that behaviour of 'missing' caused the same problem that + plagued AM_MAINTAINER_MODE; i.e., the user would get non-dependable + builds and inconsistent statuses of the build tree -- changes to + source files don't reflect on generated files, and this can be very + confusing and cause hard-to-spot errors). + + So we now believe that the best approach to deal with timestamp-related + issues is not to have 'missing' to "automagically" try to resolve + them (with all the risk and brittleness entailed), but rather to + suggest those projects still keeping generated files committed in their + VCS to provide a proper (say) 'fix-timestamp.sh' script that touches + the timestamp of the checked-out files, to ensure no spurious rebuild + will be triggered. As a bonus, such a script can be more aware of the + particularities, nooks and corner cases of a project, and thus more + reliable than the old 'missing' script. + + An example of this approach is offered by GNU awk (release 4.0.1, Git + tag 'gawk-4.0.1', commit b85b04e8). The GNU awk maintainers commit + the Autotools-generated files (configure, Makefile.in, etc.) and other + generated in the project's Git repository, but offer a useful script + 'bootstrap.sh' that fixes the timestamps of those files, to ensure no + useless remake is triggered in a freshly cloned repository: + + #! /bin/sh + # bootstrap.sh --- touch relevant files to avoid out-of-date issues + # in Git sandboxes + touch aclocal.m4 + find awklib -type f -print | xargs touch + sleep 1 + touch configure + sleep 2 + touch configh.in + sleep 1 + touch test/Maketests + find . -name Makefile.in -print | xargs touch + touch doc/*.info + touch po/*.gmo + touch po/stamp-po + touch awkgram.c + touch command.c + touch version.c + + A similar, simplified script is also reported as an example in the + manual. + + * NEWS: Update. + * doc/automake.texi (Auxiliary Programs, maintainer-mod): Update. + (CVS): Do not suggest that 'missing' can "automagically" fix botched + timestamp due to a "cvs update"; this isn't true anymore. Give an + example of a custom 'fix-timestamp.sh' script that can be used to + obtain the same effect (in a slightly more laborious but also more + explicit and less brittle way). Fix some minor typos and improper + wordings while we are at it. + * lib/missing: Basically rewritten to implement the new semantics. + As a side effect (one of the several), the '--run' option is no more + required nor recognized. + * m4/missing.m4 (AM_MISSING_HAS_RUN): Enhance the test on '$MISSING' + to ensure it actually provides the new semantics (by trying the new + "witness" option '--is-lightweight'). + * lib/am/distdir.am (distdir): No need anymore to check for "bad" + distributed man pages that were actually dummy stubs generated by + the 'missing' script. + * t/missing4.sh: Rename ... + * t/remake-aclocal-version-mismatch.sh: ... like this. + * t/missing2.sh: Rename ... + * t/missing-version-mismatch.sh: ... like this, and adjust to the + new semantics. + * t/missing3.sh: Adjust to the new semantics. + * t/man4.sh: Remove as obsolete. + * t/missing.sh: Likewise. + * t/missing5.sh: Likewise. + * t/txinfo30.sh: Likewise. + * t/man6.sh: Adjust grepping checks. + * t/remake6.sh: Likewise. + * t/list-of-tests.mk: Adjust. + +2012-06-21 Stefano Lattarini + + typofix: s/test derivers/test drivers/ in check.am comments + +2012-06-20 Stefano Lattarini + + typofix: s/env/even/ in comments in GNUmakefile + + Spotted by Eric Blake. + +2012-06-20 Stefano Lattarini + + Merge branch 'maint' + + * maint: + bootstrap: overhaul and improve + docs: quote 'like this', not `like this' + +2012-06-20 Stefano Lattarini + + bootstrap: overhaul and improve + + This fixes several weaknesses and buglets in the 'bootstrap' convenience + target offered in GNUmakefile (and its supporting code). Refer to the + extensive code comments in there for more details. + + * GNUmakefile: Almost completely rewritten. + +2012-06-20 Stefano Lattarini + + docs: quote 'like this', not `like this' + + * doc/automake.texi: Fix the reported warnings and informative messages + from automake to quote 'like this' rather than as `like this'. Do the + same for comments and some text in our examples. + +2012-06-20 Stefano Lattarini + + fixup: tests: special requirement 'makeinfo-html' removed from ./defs + + This should have ideally been part of earlier commit v1.12.1-93-g3c64d54. + + * defs (makeinfo-html): Remove. + +2012-06-20 Stefano Lattarini + + maintcheck: guard against obsolete $required entries + + * syntax-check.mk: Add rules guarding against the use of the + obsolete test requirements 'texi2dvi-o' and 'makeinfo-html'. + +2012-06-20 Stefano Lattarini + + tests: drop requirement 'makeinfo-html'; 'makeinfo' is enough + + * defs: Since we now require Texinfo 4.9 or later in the Automake + generated Makefiles, and since the '--html' option of makeinfo, as + well as its capability to generate HTML output, has been supported + since Texinfo 4.0 (according to the Texinfo NEWS file), the + requirement 'makeinfo-html' is obsolete -- the simpler requirement + 'makeinfo' is enough. + * t/instdir-texi.sh ($required): Adjust by using simply 'makeinfo' + instead of 'makeinfo-html'. + * t/silent8.sh: Likewise. + * t/txinfo21.sh: Likewise. + +2012-06-20 Stefano Lattarini + + tests: drop requirement 'texi2dvi-o'; 'texi2dvi' is enough + + * defs: Since we now require Texinfo 4.9 or later in the Automake + generated Makefiles, and since the '-o' option of texi2dvi has been + supported since Texinfo 4.1, the requirement 'texi2dvi-o' is + obsolete -- the simpler requirement 'texi2dvi' is enough. + * t/silent8.sh ($required): Adjust by using simply 'texi2dvi' + instead of 'texi2dvi-o' + * t/txinfo-no-clutter.sh: Likewise. + * t/txinfo13.sh: Likewise. + * t/txinfo23.sh: Likewise. + * t/txinfo24.sh: Likewise. + * t/txinfo25.sh: Likewise. + * t/txinfo28.sh: Likewise. + * t/txinfo33.sh: Likewise. + * t/vtexi4.sh: Likewise. + +2012-06-20 Stefano Lattarini + + texi: require Texinfo >= 4.9, related enhancements + + We start passing the '--build-dir' option to the texi2dvi and texi2pdf + invocations done in our Texinfo-related rules. The argument for this + option will be specific for each info_TEXINFOS entry, to work around a + texi2dvi bug that could otherwise cause racy failures in parallel make + builds: + + That bug seems already fixed in the development version of texi2dvi, + though: + + so the details of our '--build-dir' usage can be revisited once we can + assume Texinfo 5.0 or later. + + Since the '--build-dir' options has been only supported since Texinfo + 4.9, we lose compatibility with all older Texinfo versions. + + But we also get some real improvements. + + First, the '--build-dir' option implies the '--tidy' option; this, like + the '--clean' option that we were formerly using, prevents cluttering of + the build directory with all the TeX and Texinfo auxiliary files and + build by-products, but, differently from '--clean', keeps them around + for later re-runs to use; this shortens the rebuild times considerably. + + Second, the use of '--build-dir' also allows us to specify different + build directories for the PDF and DVI output, preventing the rules + building them from stomping on each other's feet when run in parallel. + This is demonstrated by the test cases 'txinfo-no-clutter.sh' and + 'txinfo33.sh', which before this change used to fail when run with + MAKE="make -j4", but now succeed even in that case. + + * NEWS: Update. + * lib/am/texibuilds.am: Do not try to avoid texi2dvi/texi2pdf option + '-o'; it has been supported since Texinfo 4.1, and we now require + Texinfo >= 4.9. Remove an obsolete comment. Modify calls to texi2dvi + and texi2pdf to use the '--build-dir' option, so that TeX auxiliary + files and build by-products for a 'foo.texi' input will be placed in + a 'foo.t2d' directory (for texi2dvi) or in a 'foo.t2p' directory (for + texi2pdf). + * automake.in (scan_texinfo_file): Greatly simplify the implementation, + since we don't need anymore to keep track of the TeX auxiliary files and + build by-products to clean. Drop the '@CLEAN_FILES' part of the return + value. + (handle_texinfo_helper): Adjust the 'scan_texinfo_file()' call to its + new signature. Append the "work directories" now created by texi2dvi + and texi2pdf invocation to the list of files/directories removed upon + "make mostlyclean". + * lib/am/texinfos.am: Update the cleaning rules (and comments) + accordingly. + * t/txinfo-no-clutter.sh: Minimal adjustment to avoid spurious failures. + * .gitignore: Update. + +2012-06-16 Stefano Lattarini + + docs: it's not true that DISTCHECK_CONFIGURE_FLAGS is maintainer-reserved + + At least, not anymore since commit 'v1.11-372-g9760039' of 2001-06-10, + "distcheck: add support for AM_DISTCHECK_CONFIGURE_FLAGS". See also + automake bug#8784. + + * doc/automake.texi (Flag Variables Ordering): Do not report + 'DISTCHECK_CONFIGURE_FLAGS' as a "variables that are only useful + to the maintainer that has no user counterpart": now it is a + user-reserved variable, its maintainer-reserved counterpart + being 'AM_DISTCHECK_CONFIGURE_FLAGS' . + +2012-06-15 Stefano Lattarini + + Merge branch 'am-preprocess-drop-tricky-transform' + + * am-preprocess-drop-tricky-transform: + automake: stop supporting "%KEY?iftrue:iffalse%" transforms + am: stop using "%KEY:iffalse?iftrue%" transforms + +2012-06-15 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: minor reorganization of few tests + fixup: adjust t/list-of-tests.mk for renamed/added tests + subdirs: enhance coverage, tweak and rename few tests + sync: update files from upstream with "make fetch" + py-compile: consistently quote 'like this', not `like this'. + docs: recursive make considered harmful + docs: clean rules are not run in reverse order of build rules anymore + silent: new $(AM_V_P) variable, tell if we're running in silent mode + refactor: silent rules handling (a little) + refactor: &define_verbose_var: accept a third optional argument + + + Extra non-trivial edits: + + These are due to the fact that support for silent rules is enabled + unconditionally these days (since commit 'v1.12-34-g14141f2' of + 2012-05-01, "silent rules: support for them is always active now"). + + * automake.in: In the new silent related code, do not ever check + whether the 'silent-rules' option is active; just assume support + for silent rules is enabled. + * t/silent-obsolescent-warns.sh: Remove as obsolete. + * t/list-of-tests.mk: Adjust. + +2012-06-15 Stefano Lattarini + + Merge branch 'docs-recursion' into maint + + * docs-recursion: + docs: recursive make considered harmful + +2012-06-15 Stefano Lattarini + + Merge branch 'silent-custom' into maint + + * silent-custom: + silent: new $(AM_V_P) variable, tell if we're running in silent mode + refactor: silent rules handling (a little) + refactor: &define_verbose_var: accept a third optional argument + +2012-06-14 Stefano Lattarini + + automake: stop supporting "%KEY?iftrue:iffalse%" transforms + + And the similar "reduced forms" "%KEY:iffalse%" and "%KEY?iftrue%" + as well. + + They are convoluted, never used (after the previous change), and will + get in the way in the Automake-NG branch, where we'll soon want to use + GNU make static pattern rules in our internal '*.am' fragments. + + * automake.in (preprocess_file, transform): Simplify not to support + those transform patterns. + +2012-06-14 Stefano Lattarini + + am: stop using "%KEY:iffalse?iftrue%" transforms + + And the similar "reduced forms" "%KEY:iffalse%" and "%KEY?iftrue%" + as well. + + They are harder to grasp, can be easily reformulated in function of + other "plainer" transforms ("?KEY?" and "?!KEY?"), and we'll remove + support for them anyway in a later change. + + * 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: Adjusted not + to rely on those kinds of transforms. + +2012-06-14 Stefano Lattarini + + tests: minor reorganization of few tests + + * t/subdir3.sh: Rename ... + * t/sourcefile-in-subdir.sh: ... like this. + * t/subdir4.sh: Rename ... + * t/depcomp-implicit-auxdir.sh: ... like this. + * t/subdir6.sh: Rename ... + * t/confh-subdir-clean.sh: ... like this. + * t/subdir7.sh: Renamed ... + * t/dir-named-obj-is-bad.sh: ... like this, and enhance. + * t/srcsub.sh, t/srcsub2.sh: Unify ... + * t/src-acsubst.sh: ... as this test. + * t/list-of-tests.mk: Adjust. + +2012-06-14 Stefano Lattarini + + fixup: adjust t/list-of-tests.mk for renamed/added tests + +2012-06-14 Stefano Lattarini + + subdirs: enhance coverage, tweak and rename few tests + + * t/subdir5.sh: Rename ... + * t/subdir-add-pr46.sh: ... like this. + * t/subdir8.sh: Rename ... + * t/subdir-add2-pr46.sh: ... like this. + * t/cond2.sh: Rename ... + * t/subdir-cond-err.sh: ... like this. + * t/subdir9.sh: Rename ... + * t/subdir-with-slash.sh: ... like this; improve heading comments. + * t/subcond.sh: Rename ... + * t/subdir-cond-gettext.sh: ... like this; improve m4 quoting. + * t/subcond2.sh: Rename ... + * t/subdir-am-cond.sh: ... like this; adjust heading comments. + * t/subcond3.sh: Rename ... + * t/subdir-ac-subst.sh: ... like this; adjust heading comments. + * t/subdir2.sh: Rename ... + * t/subdir-subsub.sh: ... like this; enhance so that it also runs + './configure' and 'make'. + * t/subdir-order.sh: New test, check that the $(SUDBIRS) entries + are processed in the order they are specified. + * doc/automake.texi: Adjust references to tests. + +2012-06-14 Stefano Lattarini + + sync: update files from upstream with "make fetch" + + * lib/config.guess, lib/gitlog-to-changelog, lib/texinfo.tex: Update. + +2012-06-14 Stefano Lattarini + + py-compile: consistently quote 'like this', not `like this'. + + * lib/py-compile (usage_error): Here. + +2012-06-12 Stefano Lattarini + + docs: recursive make considered harmful + + In the documentation, we shouldn't confuse "packages using subdirectories" + with "packages using recursive make invocations". A package can have a + careful organization in subdirectories, make no (or almost no) use of make + recursion (examples of such packages are GNU bison, GNU cppi, and Automake + itself). + + In fact, make recursion should be used as seldom as possible, because it + makes the build system more brittle and dependency declarations less + faithful. See Peter Miller's article "Recursive Make Considered Harmful" + for more a more in-depth discussion: + + http://miller.emu.id.au/pmiller/books/rmch/ + + * doc/automake.texi (Directories): Clarify how a build system based on + make recursion does. Observe that such a system, albeit being very + widespread, has its own issues and drawbacks, and that one can have a + non-recursive setup also for projects using complex directory layout. + (Recursing subdirectories): Speak of "packages that use make recursion" + rather than of "packages with subdirectories". + +2012-06-12 Stefano Lattarini + + Merge branch 'subdirs-simplify' into maint + + * subdirs-simplify: + docs: clean rules are not run in reverse order of build rules anymore + +2012-06-12 Stefano Lattarini + + docs: clean rules are not run in reverse order of build rules anymore + + At least since commit 'v1.12.1-12-gec6a135' of 2012-06-10, "subdirs: unify + rules for "cleaning" and "normal" recursive targets" + + * doc/automake.texi (Recursing subdirectories): Adjust. + +2012-06-11 Stefano Lattarini + + Merge branch 'maint' + + * maint: + maintcheck: fix failures, both real and spurious + subdir tests: avoid an use of "make -j4", for portability + tests: avoid failure due to libtool quirks in C++ demo test + tests: fix spurious failures due to missing '$sleep' + subdirs: unify rules for "cleaning" and "normal" recursive targets + tests: add a "demo" test on C support + tests: look for '.lo' rather than '.o' object when using Libtool with C++ + cosmetics: few typofixes in older ChangeLogs, suggested by "codespell.py" + maint: grammar fixes: s/all these/all of these/ + subdir-objects: improve "make mostlyclean" efficiency and flexibility + +2012-06-11 Stefano Lattarini + + Merge branch 'subdir-objects-pr10697' into maint + + * subdir-objects-pr10697: + maintcheck: fix failures, both real and spurious + +2012-06-11 Stefano Lattarini + + maintcheck: fix failures, both real and spurious + + * syntax-checks.mk (sc_rm_minus_f): Whitelist the + 't/subobj-clean*-pr10697.sh' tests. + * t/subobj-clean-pr10697.sh: When redefining PATH, + use '$PATH_SEPARATOR', not hard-coded ':'. + * t/subobj-clean-lt-pr10697.sh: Likewise. + +2012-06-11 Stefano Lattarini + + tests: merged some testsuite fixlets + + * fix-cxx-libtool-demo: + tests: avoid failure due to libtool quirks in C++ demo test + + * subdir-objects-pr10697: + tests: fix spurious failures due to missing '$sleep' + + * subdirs-simplify: + subdir tests: avoid an use of "make -j4", for portability + +2012-06-11 Stefano Lattarini + + subdir tests: avoid an use of "make -j4", for portability + + Otherwise, a spurious failure with Solaris CCS make can be triggered. + The coverage is not actually reduced, since the code path is still + covered when one runs the testsuite with AM_TESTSUITE_MAKE="make -jN" + (as should be done periodically). + + * t/subdir-distclean.sh : Call simply "make maintainer-check", not + "make -j4 maintainer-check". + +2012-06-11 Stefano Lattarini + + tests: avoid failure due to libtool quirks in C++ demo test + + Revealed by failures on NetBSD 5.1. + + * t/cxx-lt-demo.sh: In "make distcheck" invocation, don't define 'CC' + to "false", as that value would be exported and passed to the child + ./configure invocation, and some configure checks generated by libtool + autoconf macros can still require a C preprocessor even for packages + using only C++, and bail out if it's not found. The problem was not + apparent on Solaris and GNU/Linux because those systems have a + '/lib/cpp' program, and configure detected and used that as a fallback + C preprocessor. + +2012-06-11 Stefano Lattarini + + tests: fix spurious failures due to missing '$sleep' + + Revealed by failures on NetBSD 5.1. + + * t/subobj-clean-pr10697.sh: Call '$sleep' before modifying the + files that should trigger an automatic remake. + * t/subobj-clean-lt-pr10697.sh: Likewise. + +2012-06-11 Stefano Lattarini + + Merge branches 'subdirs-simplify' and 'subdir-objects-pr10697' into maint + + * subdirs-simplify: + subdirs: unify rules for "cleaning" and "normal" recursive targets + tests: add a "demo" test on C support + + * subdir-objects-pr10697: + subdir-objects: improve "make mostlyclean" efficiency and flexibility + tests: look for '.lo' rather than '.o' object when using Libtool with C++ + cosmetics: few typofixes in older ChangeLogs, suggested by "codespell.py" + +2012-06-11 Stefano Lattarini + + subdirs: unify rules for "cleaning" and "normal" recursive targets + + Before this change, the recursive invocation of cleaning targets in + the $(SUBDIRS) where done in inverse order, i.e., starting from the + last $(SUBDIRS) entry and proceeding towards the first. According + to the code comments, this was done ... + + ... in an attempt to alleviate a problem that can happen when + dependencies are enabled. In this case, the .P file in one + directory can depend on some automatically generated header + in an earlier directory. Since the dependencies are required + before any target is examined, make bombs. + + But this comment does not apply anymore to the current implementation + of automatic dependency tracking: the '.Po' and '.Plo' files does not + depend on any C header or source file, ever! + + So it seems that the distinction between "normal" and "cleaning" + recursive targets is a stale leftover of an older implementation of + the automatic dependency tracking. In fact, the Automake History + manual seems to confirm this suspect; the section "First Take on + Dependency Tracking" reads: + + Because each .P file was a dependency of Makefile, this meant + that dependency tracking was done eagerly by make. For instance, + "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. + + and the following section "Dependencies As Side Effects" reads: + + In this approach, the .P files were included using the -include + command, which let us create these files lazily. This avoided + the "make clean" problem. + + So the distinction between "normal" and "cleaning" recursive targets + has likely been obsolete since by then already. We can thus remove + such distinction, thus reducing some complications and duplication in + our rules. Doing so, the whole testsuite still passes (both with GCC + and Sun C 5.9), even the test 'c-demo.sh', which, among the other + things, exercise the setup described in the obsolete code comment + referenced above. + + Finally, note that we still keep '$(RECURSIVE_CLEAN_TARGETS)' and + '$(RECURSIVE_TARGETS)' as two distinct variables, to ensure a better + backward-compatibility for any user-defined rules that happen to use + those variables. + + * NEWS: Update. + * lib/am/subdirs.am ($(RECURSIVE_CLEAN_TARGETS), $(CLEAN_TARGETS)): + Merge their recipes. + * t/subdir-distclean.sh: New test, check that "./configure && make + && make distclean" is actually a no-op, even when conditional SUBDIRS + are involved. + * t/list-of-tests.mk: Add it. + +2012-06-11 Stefano Lattarini + + tests: add a "demo" test on C support + + Showing and testing non-trivial use of C support, and its interaction + with other features. + + * t/c-demo.sh: New test. + * t/list-of-tests.mk: Add it. + +2012-06-11 Stefano Lattarini + + tests: look for '.lo' rather than '.o' object when using Libtool with C++ + + * t/cxx-lt-demo.sh: ... in this test. + +2012-06-11 Stefano Lattarini + + cosmetics: few typofixes in older ChangeLogs, suggested by "codespell.py" + + The typofixes offered by this patch have been suggested by the + "codespell.py" script. Reference: + + + * old/ChangeLog.01, old/ChangeLog.02, old/ChangeLog.03: Fix few typos. + +2012-06-11 Stefano Lattarini + + silent: new $(AM_V_P) variable, tell if we're running in silent mode + + Addresses part of automake bug#8665. + + * automake.in (handle_silent): Define a new make variable '$(AM_V_P)', + that expands to a shell conditional that can be used in make recipes to + determine whether they 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. + * t/automake.texi, NEWS: Document the new variable. + * t/silent6.sh: Adjust and extend. Move out the checks that didn't + actually deal with user extension of silent rules ... + * t/silent-obsolescent-warns.sh: ... into this test (bound to be + removed once 'maint' is merged into the 'master' branch). + * t/list-of-tests.mk: Add the new test. + +2012-06-11 Stefano Lattarini + + refactor: silent rules handling (a little) + + * automake.in (handle_languages): Move definition of $(AM_V_GEN) + variable ... + (define_verbose_tagvar): ... and of '$(AM_V_at)' variable ... + (handle_silent): ... in this new subroutine. + (generate_makefile): Call it. + +2012-06-11 Stefano Lattarini + + refactor: &define_verbose_var: accept a third optional argument + + This is only required by future changes. + + * automake.in (define_verbose_var): Accept a third optional argument, + specifying the value to assign to the given make variable when silent + rules are disabled. + +2012-06-10 Jim Meyering + + maint: grammar fixes: s/all these/all of these/ + + Run this command: + git grep -li '\' \ + |xargs perl -pi -e 's/\b([Aa])ll these\b/${1}ll of these/' + +2012-06-10 Stefano Lattarini + + subdir-objects: improve "make mostlyclean" efficiency and flexibility + + Fixes automake bug#10697. + + Before this change, the generated Makefile issued one 'rm' invocation + for each subdir object file. Not only was this very inefficient when + there were several such files, but it also caused stale object files + to be left behind when a source file was renamed or removed. + + * automake.in (handle_single_transform): When a subdir object is seen, + update '%compile_clean_files' to clean all the compiled objects in its + same subdirectory, and all the libtool compiled objects ('.lo') there + as well is that subdir object is a libtool one. + * t/subobj-clean-pr10697.sh: New test. + * t/subobj-clean-lt-pr10697.sh: Likewise. + * t/list-of-tests.mk: Add them. + * NEWS: Update. + +2012-06-09 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: look for '.lo' rather than '.o' object when using Libtool with C++ + cosmetics: few typofixes in older ChangeLogs, suggested by "codespell.py" + tests: add basic semantic tests on C++ support + tests: minor tweak to 't/objc-megademo.sh' + +2012-06-09 Stefano Lattarini + + tests: look for '.lo' rather than '.o' object when using Libtool with C++ + + * t/cxx-lt-demo.sh: ... in this test. + +2012-06-09 Stefano Lattarini + + cosmetics: few typofixes in older ChangeLogs, suggested by "codespell.py" + + The typofixes offered by this patch have been suggested by the + "codespell.py" script. Reference: + + + * old/ChangeLog.01, old/ChangeLog.02, old/ChangeLog.03: Fix few typos. + +2012-06-09 Stefano Lattarini + + tests: add basic semantic tests on C++ support + + Strange as it might seem, we were still missing them (yikes). + + * t/cxx-demo.sh: New test. + * t/cxx-lt-demo.sh: Likewise (using libtool). + * t/list-of-tests.mk: Add them. + +2012-06-09 Stefano Lattarini + + tests: minor tweak to 't/objc-megademo.sh' + + * t/objc-megademo.sh (am_create_testdir): Define to "empty" before + including ./defs, because this test doesn't rely on the files usually + pre-set by the setup in there. + +2012-06-08 Stefano Lattarini + + cleanup: simplify subroutine '&saw_extension' + + * automake.in (saw_extension): Now that we use the '%extension_seen' + hash only as a set (it's keys being its elements), we can simplify + the implementation of this function accordingly. + +2012-06-08 Stefano Lattarini + + cleanup: remove subroutine '&saw_sources_p' + + * automake.in (saw_sources_p): Remove, its implementation is now so + trivial that it's easier to inline it into ... + (handle_languages): ... it's only caller. + +2012-06-08 Stefano Lattarini + + cleanup: remove unused '&count_files_for_language' subroutine + + * automake.in (count_files_for_language): Remove. Its only remaining + caller (saw_sources_p) has stopped calling it in the previous commit. + +2012-06-08 Stefano Lattarini + + automake: simplify '&saw_sources_p' + + This is just a minor cleanup. No semantic change is intended. + + * automake.in (saw_sources_p): Since its now-only caller calls it with + the '0' argument, remove the code paths that assumed the argument could + be '1', and assume no arguments. + (handle_languages): Drop the arguments '0' in the '&saw_sources_p' + invocation. + +2012-06-08 Stefano Lattarini + + tags: look at $(am__tagged_files) to decide whether to activate + + This is just a preparatory refactoring in view of future changes. + + * automake.in (handle_tags): To decide whether to include the tags rules, + rely on whether the automake-defined variable $(SOURCES) is non-empty, + rather than on the fact that '&saw_sources(1)' returns true. + +2012-06-08 Stefano Lattarini + + tags: new var $(am__tagged_files) to list all files to run taggers on + + This change reduce code duplication a little, and will be needed by + future simplifications. + + * automake.in (handle_tags): Define a new 'am__tagged_files' private + make variable that lists all files to run taggers (mkid, cscope, ctags, + etc) on. Drop the now-useless transform '%CONFIG%' when including + 'tags.am'. + * lib/am/tags.am: Use it in several recipes and dependencies list to + reduce code duplication. + +2012-06-08 Stefano Lattarini + + tags (cscope): also process $(TAGS_FILES) + + * lib/am/tags.am (cscopelist): Also scan the files (if any) listed in + the '$(TAGS_FILES) variable, for consistency by what is done by the + 'ID', 'TAGS' and 'CTAGS' rules. + +2012-06-08 Stefano Lattarini + + tags (ID, cscope): also process config header (if any) + + * lib/am/tags.am (cscopelist, ID): Also scan the file given by the + '%CONFIG%' transform, for consistency by what is done by the 'TAGS' + and 'CTAGS' rules. + +2012-06-02 Stefano Lattarini + + Merge branch 'maint' + + * maint: + news: document deprecation of configure.in + news: put planned backward compatibilities early + sync: update files from upstream with "make fetch" + maint: deprecate 'configure.in' as autoconf input + maint: post-release minor version bump + release: stable release 1.12.1 + copyright: update copyright years in a couple of files + tests: avoid spurious failures with Solaris 9 cscope program + maintcheck: fix a spurious failure + perf: beginning of a performance testsuite + aclocal: declare function prototypes, do not use '&' in function calls + news: support for configure.in will be dropped in future automake versions + tests: fix botched heading comments in 'lex-clean-cxx.sh' + [ng] maintcheck: some tweaks and fixlets + help: fix a typo in the list of warning categories + maint: version bump after beta release + release: beta release 1.12.0b (will become 1.12.1) + release: remove overly picky check + +2012-06-02 Stefano Lattarini + + news: document deprecation of configure.in + + * NEWS (Warnings and deprecations): We now warn if 'configure.in' is + used instead of 'configure.ac' as autoconf input. + (Future backward-incompatibilities): Adjust. + +2012-06-02 Stefano Lattarini + + news: put planned backward compatibilities early + + * NEWS (Future backward-incompatibilities): Put them in the news + entries for the future 1.12.2 release. + +2012-06-01 Stefano Lattarini + + sync: update files from upstream with "make fetch" + + * lib/config.sub, lib/gitlog-to-changelog, lib/texinfo.tex: Update. + +2012-06-01 Stefano Lattarini + + maint: deprecate 'configure.in' as autoconf input + + It has been years since that has been deprecated in the documentation, + in favour of 'configure.ac': + + Previous versions of Autoconf promoted the name configure.in, which + is somewhat ambiguous (the tool needed to process this file is not + described by its extension), and introduces a slight confusion with + config.h.in and so on (for which '.in' means "to be processed by + configure"). Using configure.ac is now preferred. + + It's now time to start giving runtime warning about the use of + 'configure.in', so that support for it can be removed in future + versions of autoconf/automake. + + See also, in the Autoconf repository, commit 'v2.69-4-g560f16b' of + 2012-05-23, "general: deprecate 'configure.in' as autoconf input". + + * lib/Automake/Configure_ac.pm: Issue a warning in the 'obsolete' + category if 'configure.in' is detected. Since this module is synced + from Automake, this change is to be backported there (and will be + soon). + * t/help.sh: Adjust. + * t/configure.sh: Adjust and enhance. + +2012-06-01 Stefano Lattarini + + maint: post-release minor version bump + + * configure.ac (AC_INIT): Bump version number to 1.12.1a. + * m4/amversion.m4: Likewise (automatically regenerated by + "make bootstrap"). + +2012-06-01 Stefano Lattarini + + release: stable release 1.12.1 + + * configure.ac (AC_INIT): Bump version number to 1.12.1. + * m4/amversion.m4: Likewise (auto-updated by "./bootstrap"). + +2012-06-01 Stefano Lattarini + + copyright: update copyright years in a couple of files + + * doc/help2man, t/aclocal-verbose-install.sh: Update copyright, + thanks to "make update-copyright". + +2012-06-01 Stefano Lattarini + + tests: avoid spurious failures with Solaris 9 cscope program + + * t/cscope.tap: Also check that the cscope program in use supports the + '-q' option; if this is not the case, some cscope usages in the generated + Makefiles would fail, so we must skip the checks involving those usages. + +2012-06-01 Stefano Lattarini + + maintcheck: fix a spurious failure + + * Makefile.am (test_subdirs): Add 't/perf'. Fix spurious failure + of the 'maintainer-check-list-of-tests' target. + +2012-05-29 Stefano Lattarini + + perf: beginning of a performance testsuite + + Some tests in the Automake testsuite already aims only at verifying + the performance, rather than the correctness, of some operations. + Still, they are somewhat shoehorned and forced into the PASS/FAIL + framework (say, with the 'ulimit' shell builtin used to verify some + operation doesn't take up too much time or memory), but that is + conceptually a stretch, and has already caused problems in practice + (see automake bug#11512 for an example). + + So we start moving the "performance tests" out of the testsuite proper, + and make them run only "on demand" (when the user exports the variable + 'AM_TESTSUITE_PERF' to "yes"). Ideally, we should provide those tests + with a custom runner/driver that measures and displays the relevant + performance information, but doing that correctly and with the right + APIs is definitely more difficult, so we leave it for a later step + (an hope we'll take such a step eventually). + + * t/cond29.sh: Move ... + * t/perf/cond.sh: ... here, and adjust. + * t/testsuite-recheck-speed.sh: Move ... + * t/perf/testsuite-recheck.sh: ... here. + * t/testsuite-summary-speed.sh: Move ... + * t/perf/testsuite-summary.sh: ... here. + * t/list-of-tests.mk (perf_TESTS): New variable, listing the tests in + the 't/perf' directory. + (handwritten_TESTS): Adjust. + * defs: Skip any tests in the 't/perf/' subdirectory unless the + 'AM_TESTSUITE_PERF' variable is set to "yes" or "y". + * .gitignore: Update. + +2012-05-29 Stefano Lattarini + + Merge branch 'fix-pr11543' into maint + + * fix-pr11543: + aclocal: declare function prototypes, do not use '&' in function calls + +2012-05-29 Stefano Lattarini + + aclocal: declare function prototypes, do not use '&' in function calls + + This change will also fix automake bug#11543 (from a report by Matt + Burgess). + + * aclocal.in: Declare prototypes for almost all functions early, before + any actual function definition (but omit the prototype for the dynamically + generated '&search' function). Add prototypes to any function definition. + Remove '&' from function invocations (i.e., simply use "func(ARGS..)" + instead of "&func(ARGS...)"). + * THANKS, NEWS: Update. + +2012-05-28 Stefano Lattarini + + news: support for configure.in will be dropped in future automake versions + + The use of configure.in as Autoconf input has been deprecated for a + very long time in the Autoconf documentation, and the next version of + Autoconf (2.70) will start warning about it ar runtime as well (see + commit 'v2.69-4-g560f16b' or 2012-05-23, "general: deprecate + 'configure.in' as autoconf input", in the Autoconf's git repository). + + * NEWS (Future backward-incompatibilities): Update. + +2012-05-27 Stefano Lattarini + + missing: support AC_CONFIG_HEADERS in addition to obsolete AC_CONFIG_HEADER + + * missing (autoheader*): Do not look only for AC_CONFIG_HEADER when + grepping configure.ac, but also for AC_CONFIG_HEADERS: the latter has + been preferred to the former by several years now in Autoconf. + +2012-05-27 Stefano Lattarini + + missing: don't bother checking for AM_CONFIG_HEADER: it is gone now + + * missing (autoheader*): Do not look for AM_CONFIG_HEADER when + grepping configure.ac: it is not supported anymore (has been in + fact deleted in commit v1.12-15-gd2ca168 of 2012-04-27, "m4: delete + several obsolete macros"). + +2012-05-27 Stefano Lattarini + + docs: remove mention of AM_CONFIG_HEADER: it is obsolete and removed now + + * doc/automake.texi (Variables used when building a program): Remove + obsolete mention of AM_CONFIG_HEADER as an alias to AC_CONFIG_HEADERS. + +2012-05-26 Stefano Lattarini + + tests: fix botched heading comments in 'lex-clean-cxx.sh' + + * t/lex-clean-cxx.sh: This file tests lex, not yacc. + +2012-05-25 Stefano Lattarini + + [ng] maintcheck: some tweaks and fixlets + + * syntax-checks.mk (sc_no_brace_variable_expansions): Do not complain + about ${MAKEVAR} usages in comments: they might be legitimate. This + change is not strictly required for mainline automake, but will help + in the Automake-NG branch. + * sc_tests_here_document_format: Relax a bit, so that usages like + "cout << "string" << endl;" in the test scripts (usages which can be + used in here documents defining C++ sources) are not flagged as uses + of bad delimiters for here documents. This change is not strictly + required for mainline automake, but will help in the Automake-NG + branch, and will anyway be more future proof w.r.t. possible future + testsuite additions. + (sc_tests_Exit_not_exit): Do not whitelist lines containing $PERL + explicitly (that was only required for one test); instead ... + * t/ext2.sh: ... use "exit (1)" instead of "exit 1" in the perl + invocation of the guilty script. + +2012-05-25 Stefano Lattarini + + Merge branch 'am-init-automake' + + * am-init-automake: + init: obsolete usages of AM_INIT_AUTOMAKE not supported anymore + +2012-05-25 Stefano Lattarini + + init: obsolete usages of AM_INIT_AUTOMAKE not supported anymore + + This is a follow-up on commit v1.12-66-g27136df of 2012-05-06, "init: warn + against obsolete usage of AM_INIT_AUTOMAKE". + + With this change, we drop support for the two-arguments and three-arguments + invocation forms of the AM_INIT_AUTOMAKE macro, as in either of: + AM_INIT_AUTOMAKE($PACKAGE, $VERSION) + AM_INIT_AUTOMAKE($PACKAGE, $VERSION, NODEFINE) + + * NEWS, doc/automake.texi: Update. + * m4/init.m4 (AM_INIT_AUTOMAKE): Report the two- and three-arguments + invocation form as a hard error. + * t/aminit-moreargs-deprecation.sh: Renamed ... + * t/aminit-moreargs-deprecation.sh: ... to this, and updated to check + the new semantics. + * t/ac-output-old.tap: Adjust by avoiding old-style uses of AC_INIT + and AM_INIT_AUTOMAKE. + * t/acsilent.sh: Likewise. + * t/dirlist.sh: Likewise. + * t/dirlist2.sh: Likewise. + * t/req.sh: Likewise. + * t/nodef.sh: Remove as obsolete. + * t/version.sh: Likewise. + * t/version2.sh: Likewise. + * t/backcompat.sh: Likewise. + * t/backcompat2.sh: Likewise. + * t/backcompat3.sh: Likewise. + * t/backcompat5.sh: Likewise. + * t/backcompat4.sh: Renamed ... + * t/backcompat-acout.sh: ... to this. + * t/list-of-tests.mk: Adjust. + +2012-05-21 Stefano Lattarini + + help: fix a typo in the list of warning categories + + * lib/Automake/ChannelDefs.pm (usage): s/none'/none/. + +2012-05-19 Stefano Lattarini + + maint: version bump after beta release + + * configure.ac (AC_INIT): Bump version number to 1.12.0c. + * m4/amversion.m4: Likewise (auto-updated by "./bootstrap"). + +2012-05-19 Stefano Lattarini + + release: beta release 1.12.0b (will become 1.12.1) + + * configure.ac (AC_INIT): Bump version number to 1.12.0b. + * m4/amversion.m4: Likewise (auto-updated by "./bootstrap"). + +2012-05-19 Stefano Lattarini + + release: remove overly picky check + + * Makefile.am (git-tag-release): Do not check that the version number + NEWS is updated w.r.t. $(VERSION); given the new way we manage NEWS, + that would cause gratuitous spurious failures. + * HACKING: Update. + +2012-05-19 Stefano Lattarini + + Merge branch 'parallel-tests-default' + + * parallel-tests-default: + check: the parallel-tests driver is now the default + +2012-05-19 Stefano Lattarini + + Merge branch 'maint' + + * maint: + ylwrap: preserve subdirectories in "#line" munging + ylwrap: preparatory refactoring + +2012-05-19 Stefano Lattarini + + Merge branch 'ylwrap-line-filename' into maint + + * ylwrap-line-filename: + ylwrap: preserve subdirectories in "#line" munging + ylwrap: preparatory refactoring + +2012-05-18 Stefano Lattarini + + check: the parallel-tests driver is now the default + + The old serial testsuite driver is still supported, and can be activated + by the 'serial-tests' option (introduced by commit 'v1.11-1989-gdeb7773' + of 2012-02-20, "automake: new option 'serial-tests'"). + + * lib/Automake/Options.pm: Now, the 'parallel-tests' option is a no-op + (but still explicitly recognized, for backward compatibility), while the + 'serial-tests' option is recognized and registered. + * automake.in: Adjust to ensure that the parallel test harness is used by + default; mostly, this amounts at using "! option('serial-tests')" where + "option('parallel-tests')" was used before. + * NEWS, doc/automake.texi: Update. + * configure.ac (AM_INIT_AUTOMAKE): Drop 'parallel-tests' option, is + redundant now. + * defs: In the generated AM_INIT_AUTOMAKE call, use the 'serial-tests' + when the serial testsuite harness is to be used, and no option otherwise. + * lib/am/check.am: Use (static) conditional '%SERIAL_TESTS%' instead of + conditional '%PARALLEL_TESTS%'. + * lib/test-driver: Adjust heading comments. + * t/ax/extract-testsuite-summary.pl: Likewise. + * t/check-exported-srcdir.sh: Likewise. + * t/check-subst.sh: Likewise. + * t/java-compile-run-nested.sh: Likewise. + * t/parallel-tests-dry-run-1.sh: Likewise. + * t/parallel-tests-dry-run-2.sh: Likewise. + * t/parallel-tests-interrupt.sh: Likewise. + * t/parallel-tests-many.sh: Likewise. + * t/test-metadata-global-log.sh: Likewise. + * t/tests-environment-backcompat.sh: Likewise. + * m4/init.m4 (AM_INIT_AUTOMAKE): Adjust a comment. + * t/check8.sh: Likewise. + * t/check-tests-in-builddir.sh: Likewise. + * t/java-compile-run-flat.sh: Adjust a botched comment. + * t/ax/tap-summary-aux.sh: Remove explicit use of the 'parallel-tests' + option. + * t/ax/testsuite-summary-checks.sh: Likewise. + * t/aclocal-path-precedence.sh: Likewise. + * t/dist-aux-many-subdirs.sh: Likewise. + * t/parallel-tests-no-color-in-log.sh: Likewise. + * t/parallel-tests-reset-term.sh: Likewise. + * t/parallel-tests-subdir.sh: Likewise. + * t/check-no-test-driver.sh: Fix setup to adjust to the changed + semantics. Update heading comments. + * t/parallel-tests-driver-install.sh: Adjust to the new semantic. + * t/test-driver-is-distributed.sh: Simplified according to the + new semantics. + +2012-05-18 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: use 'parallel-tests' Automake option by default + doc: fix location of Automake's own test-suite.log file + yacc tests: avoid a spurious failure with Sun C++ 5.9 + self tests: cater for /bin/ksh symlinked to Zsh + tests: fix spurious failures due to dpkg install-info + +2012-05-18 Stefano Lattarini + + tests: use 'parallel-tests' Automake option by default + + This will help our transition from 'serial-tests' to 'parallel-tests' + as the default test suite driver enabled by a TESTS assignment in the + input Makefile.am. Note that that change of default will only take + place in master, though. + + * defs: Pass the 'parallel-tests' option to the AM_INIT_AUTOMAKE + invocation in the created 'configure.ac' stub, unless the variable + 'am_serial_tests' is set to "yes". Don't pay attention anymore to + the 'am_parallel_tests' variable, that's obsolete now. + * defs-static.in: Warn if the 'am_serial_tests' variable is set in the + environment; conversely, don't warn anymore about 'am_parallel_tests' + being set in the environment. + * Makefile.am (AM_TESTS_ENVIRONMENT): Nullify the 'am_serial_tests' + variable instead of the now-obsolete 'am_parallel_tests' one. + * syntax-checks.mk (sc_tests_obsolete_variables): Also warn against + uses of 'am_parallel_tests', which is now deprecated in favor of + 'am_serial_tests'. Similarly, if a use of 'parallel_tests' is seen, + suggest using 'am_serial_tests' instead, not 'am_parallel_tests'. + * gen-testsuite-part: Now that we use the 'parallel-tests' by default + in our tests, we need to completely change the logic and semantics of + generation of sibling tests for those tests that check the Automake + generated testsuite harness itself. Do that, and give a complete + explanation of the new logic and semantics in the relevant comments. + * t/README: Update. + * Lots of test cases: Adjust. + +2012-05-17 Stefano Lattarini + + doc: fix location of Automake's own test-suite.log file + + * doc/automake.texi (Reporting Bugs): The global testsuite log of + Automake is now (basically since we have removed make recursion from + the Automake's build system) saved in the file 'test-suite.log', not + in the file 'tests/test-suite.log'. Adjust accordingly. + +2012-05-16 Nikolai Weibull (tiny change) + Stefano Lattarini + + ylwrap: preserve subdirectories in "#line" munging + + If Automake is used in non-recursive mode and one of the inputs is a + yacc file, for example, "src/grammar.y", ylwrap will remove too many + directories from the output file when it adjusts the paths in it. + This results in #line directives referring to "grammar.y" instead of + "src/grammar.y". + + This is a result of $input_rx simply taking all the directory + components of the absolute input path and removing them. + + One solution is to store the path passed to ylwrap and replace + $input_rx with it. This is what we do. + + Suggestion and initial patch (without tests) by Nikolai Weibull: + + Final patch by Stefano Lattarini. + + * lib/ylwrap ($input_sub_rx): New. + When munging the #line directives, substitute '$input_rx' with it, + instead of stripping it altogether. + Adjust comments. + * t/yacc-line.sh, t/lex-line: Adjust and extend. + * NEWS, THANKS: Update. + +2012-05-16 Stefano Lattarini + + ylwrap: preparatory refactoring + + This commit should cause no semantic change in the ylwrap behaviour. + It will only be needed in light of a future change. See: + + + * lib/ylwrap (get_dirname, quote_for_sed): New functions, factoring + out some non-trivial code. Use them where appropriate. + +2012-05-16 Stefano Lattarini + + yacc tests: avoid a spurious failure with Sun C++ 5.9 + + * t/yacc-cxx.sh (parse1.yy): When calling the 'getchar' function declared + in the #included , fully qualify it as std::getchar', to avoid + Sun C++ 5.9 erroring out with: + "parse1.yy", line 5: Error: The function "getc" must have a prototype. + * t/yacc-clean-cxx.sh (sub1/parsefoo.yxx): Likewise. + +2012-05-16 Stefano Lattarini + + self tests: cater for /bin/ksh symlinked to Zsh + + * t/self-check-reexec.tap: When searching for a suitable non-Bash + shells, be sure to reject any shell that is Zsh "in disguise" (as + can be found on some Debian systems, where /bin/ksh can be symlinked + to /bin/zsh4). This is required because our testsuite does not + support older versions of Zsh, and that was causing the test to fail + in the setup just described. + +2012-05-16 Stefano Lattarini + + tests: fix spurious failures due to dpkg install-info + + * t/install-info-dir.sh: Skip some checks if 'install-info' is the one + from dpkg, not the one from GNU info; the former might try to create + files in '/var/backups/', causing spurious failures like this for any + non-root user: + + install-info(.../install-info-dir.dir/_inst/info/foo.info): \ + creating new section `Dummy utilities' + cp: cannot create regular file `/var/backups/infodir.bak': \ + Permission denied + install-info(.../install-info-dir.dir/_inst/info/foo.info): \ + could not backup .../install-info-dir.dir/_inst/info/dir in \ + /var/backups/infodir.bak: No such file or directory + +2012-05-13 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: fix spurious failure due to i18n issue + tests: add few missing 'cc' and 'c++' requirements + +2012-05-13 Stefano Lattarini + + tests: fix spurious failure due to i18n issue + + Fixes automake bug#11452. + + * t/parallel-tests-fork-bomb.sh: Export LANG, LANGUAGE and LC_ALL to + 'C', to ensure error messages will be in English, and thus avoiding + possible false negatives in our grepping of them. + +2012-05-10 Stefano Lattarini + + tests: add few missing 'cc' and 'c++' requirements + + Without that requirements, the configure-time overrides of CC and CXX + wouldn't be honored in the affected tests. + + * t/silent-yacc.sh ($required): Require 'cc'. + * t/silent-yacc-headers.sh: Likewise. + * t/silent-lex.sh: Likewise. + * t/lex-clean.sh: Likewise. + * t/lex-depend.sh: Likewise. + * t/lex-line.sh: Likewise. + * t/lex-depend.sh: Likewise. + * t/lex-pr204.sh: Likewise. + * t/yacc-deleted-headers.sh: Likewise. + * t/yacc-line.sh: Likewise. + * t/yacc-depend.sh: Likewise. + * t/yacc-depend2.sh: Likewise. + * t/yacc-dist-nobuild-subdir.sh: Likewise. + * t/yacc-bison-skeleton.sh: Likewise. + * t/yacc-bison-skeleton-cxx.sh ($required): Require 'c++'. + * t/yacc-clean-cxx.sh: Likewise. + * t/yacc-d-cxx.sh: Likewise. + * t/yacc-cxx.sh: Likewise. + * t/yacc-mix-c-cxx.sh ($required): Require 'cc' and 'c++'. + +2012-05-08 Stefano Lattarini + + fixup: s/AM_CONFIG_HEADER/AC_CONFIG_HEADERS/ in 't/confsub.sh' + + Issue introduced in the recent merge 'v1.12-101-g12405c9'. + +2012-05-08 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: fix a spurious failure with dash + test defs: fix indentation (cosmetic change) + tests: remove obsolete uses of $sh_errexit_works + configure: search a sturdy POSIX shell to be used in the testsuite + tests: shell running test scripts is now named AM_TEST_RUNNER_SHELL + fixup: distribute t/README + init: warn against obsolete usage of AM_INIT_AUTOMAKE + +2012-05-07 Stefano Lattarini + + Merge branch 'testsuite-saner-shell' into maint + + * testsuite-saner-shell: + tests: fix a spurious failure with dash + test defs: fix indentation (cosmetic change) + tests: remove obsolete uses of $sh_errexit_works + configure: search a sturdy POSIX shell to be used in the testsuite + tests: shell running test scripts is now named AM_TEST_RUNNER_SHELL + +2012-05-07 Stefano Lattarini + + tests: fix a spurious failure with dash + + The dash shell, at least version 0.5.5.1, doesn't always bail out + with a syntax error when a stray "fi" in encountered: + + $ dash -c ":; fi"; echo stat = $? + stat = 0 + + See also the relevant bug report: + + + + This behaviour was causing a spurious error in our testsuite. Fix it. + + * t/self-check-exit.tap: Use a stray parentheses rather than a stray + 'fi' to trigger a syntax error. + +2012-05-07 Stefano Lattarini + + test defs: fix indentation (cosmetic change) + + * defs (exit trap): Fix indentation left botched by previous + patch 'v1.11b-51-g626bf65'. + +2012-05-07 Stefano Lattarini + + tests: remove obsolete uses of $sh_errexit_works + + After the last changes, configure will ensure that the shell + selected to run the test scripts can correctly propagate exit + status to the exit trap when 'set -e' is in effect. + + * configure.ac (sh_errexit_works): Do not AC_SUBST it anymore. + * defs-static.in (sh_errexit_works): Do not initialize + from the AC_SUBST value anymore. + * defs (trap): Trap the EXIT signal unconditionally. + * t/self-check-explicit-skips.sh: Do not skip the test if + '$sh_errexit_works' is != "yes", this check doesn't make + sense anymore. + * t/self-check-cleanup.tap: Likewise. + * t/self-check-exit.tap: Assume the exit trap is always + installed by ./defs. + +2012-05-07 Stefano Lattarini + + configure: search a sturdy POSIX shell to be used in the testsuite + + * configure.ac: Add code (partially inspired to checks in gnulib's + 'tests/init.sh') to search for a good-enough, not-buggy POSIX/XSI + shell to be used in our testsuite. Accordingly AC_SUBSTitute the + variable 'AM_TEST_RUNNER_SHELL'. + * NEWS: Update. + +2012-05-07 Stefano Lattarini + + tests: shell running test scripts is now named AM_TEST_RUNNER_SHELL + + This is just a preparatory refactoring for future changes. + + * configure.ac (AM_TEST_RUNNER_SHELL): New variable, defined + to $SHELL', and AC_SUBST'd. + * Makefile.am (LOG_COMPILER): Redefine from $(SHELL) to + $(AM_TEST_RUNNER_SHELL). + * defs: Adjust to use $AM_TEST_RUNNER_SHELL instead + of $CONFIG_SHELL and/or $SHELL, where appropriate. Minor + opportunistic changes. + * t/self-check-explicit-skips.sh: Likewise. + * t/self-check-sanity.sh: Likewise. + * t/self-check-tap.sh: Likewise. + * t/self-check-cleanup.tap: Likewise. + * t/self-check-dir.tap: Likewise. + * t/self-check-env-sanitize.tap: Likewise. + * t/self-check-exit.tap: Likewise. + * t/self-check-me.tap: Likewise. + * t/self-check-reexec.tap: Likewise. + +2012-05-06 Stefano Lattarini + + fixup: distribute t/README + + Since commit v1.11-2128-g8e02441 of 2012-04-06, "maint: no more make + recursion in Automake's build system" we haven't been distributing the + testsuite README file in our release tarballs. Oops. + + * Makefile.am (EXTRA_DIST): Add 't/README'. + +2012-05-06 Stefano Lattarini + + init: warn against obsolete usage of AM_INIT_AUTOMAKE + + Support for the two- and three-arguments invocation forms of the + AM_INIT_AUTOMAKE macro, as in: + + AM_INIT_AUTOMAKE($PACKAGE, $VERSION) + + or: + + AM_INIT_AUTOMAKE($PACKAGE, $VERSION, NODEFINE) + + will be removed in the next major Automake release (1.13). + + Such usages have already been deprecated in the documentation + starting from commit v1.11-2015-ge99690a of 23-02-2012 "docs, + news: document planned removal of obsolete macros and features". + + We now start giving runtime warnings as well (in the 'obsolete' + category). + + * NEWS: Update. + * m4/init.m4 (AM_INIT_AUTOMAKE): Report the two- and three-arguments + form invocation. + * automake.in (scan_autoconf_traces): Likewise. + * doc/automake.texi: Minor adjustments. Add an @anchor to the + location where it's described how to modernize outdated invocation + of AM_INIT_AUTOMAKE, so that it can be referenced from automake + warning/error messages. + * t/aminit-moreargs-deprecation.sh: New test. + * tests/list-of-tests.mk: Add it. + * tests/ac-output-old.tap: Adjust by calling automake with the + warnings in the 'obsolete' category disabled. + * t/backcompat.test: Likewise. + * t/backcompat3.test: Likewise. + * t/backcompat5.test: Likewise. + * t/backcompat6.test: Likewise. + * t/version.test: Likewise. + * t/version2.test: Likewise. + * t/pr2.test: Modernize style of AC_INIT and AM_INIT_AUTOMAKE + invocations, and use proper m4 quoting. + * t/pr87.test: Likewise. + * t/confsub.test: Likewise. + * t/install2.test: Likewise. + +2012-05-06 Stefano Lattarini + + Merge branch 'maint' + + * maint: + m4: prepend m4 builtins with "m4_" + docs: fix clumsy grammar in the scripts-based testsuite chapter + +2012-05-06 Stefano Lattarini + + m4: prepend m4 builtins with "m4_" + + The comments in 'lib/autoconf/autoconf.m4' from Autoconf 2.69 read: + + We discourage the use of the non prefixed macro names: M4sugar maps + all the builtins into 'm4_'. Autoconf has been converted to these + names too. But users may still depend upon these, so reestablish + them. + + Alas, in our init.m4 files, we were still using m4 builtins without + prefixing them with "m4_". Not nice for a package that is one of the + major clients of Autoconf, and an integral part of the GNU Autotools! + + Fix the issue. + + * m4/init.m4 (AM_INIT_AUTOMAKE): Use 'm4_define' and 'm4_defn' instead + of 'define' and 'defn'. + +2012-05-05 Stefano Lattarini + + require: autoconf >= 2.65; related simplifications + + The new support for Objective C++ (to be added in Automake 1.12.1) can be + simplified if we assume Autoconf version 2.65 or later (2.65 being the + version that introduced support for Objective C++). Since such an Autoconf + version is two and half years old now (and will likely be almost three + years old when Automake 1.13 gets released), requiring it is acceptable. + This will also simplify testing and maintenance of Automake, because we'll + need to test with fewer Autoconf version, and possibly rely on new Autoconf + features. + + * NEWS (Version requirements): Automake 1.13 will require Autoconf + 2.65 or later. + * configure.ac ($required_autoconf_version): Bump to 2.65. + * m4/init.m4 (AM_INIT_AUTOMAKE): Require Autoconf >= 2.65. + Assume AC_PROG_OBJCXX is unconditionally defined. + * m4/depout.m4: Adjust a comment about a nugget of defensive programming. + * t/ext.sh: Assume that AC_PROG_OBJCXX is unconditionally defined, + and that we are using Autoconf >= 2.65. Related simplifications. + * t/objc-megademo.sh: Likewise. + * t/objcxx-basic.sh: Likewise. + * t/objcxx-deps.sh: Likewise. + * t/objcxx-flags.sh: Likewise. + * t/objcxx-minidemo.sh: Likewise. + * t/nodep2.sh: Likewise. + * t/backcompat3.sh: Assume AC_INIT accepts an URL argument. + * t/depend5.sh: Adjust a comment. + * syntax-checks.mk (sc_test_names): Delete this check as now useless: + autoconf >= 2.65 (>= 2.63, actually) can handle arguments to AC_INIT + that contain or are m4 builtins or predefined macros. + (m4_builtin): Delete this now-useless variable as well, was used only + by the check above. + (syntax_check_rules): Update. + +2012-05-05 Nick Alcock (tiny change) + + docs: fix clumsy grammar in the scripts-based testsuite chapter + + * doc/automake.texi (Scripts-based Testsuites): "We'll have later" is + a rare example of English in the Automake manual clearly not written + by a native English-speaker: while comprehensible, it can be better + formulated. + +2012-05-05 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: use append mode to capture parallel make output + parallel-tests: separate different logs with an empty line + +2012-05-05 Stefano Lattarini + + tests: use append mode to capture parallel make output + + This should fix the spurious failure reported in automake bug#11413. + + This is due to the fact that the redirected output of parallel make + can racily loose lines. For example, if GNU make (3.82) is run on + a Makefile like this: + + all = 0 1 2 3 4 5 6 7 8 9 + default: $(all) + $(all): + @sleep 0.$$(($RANDOM % 10)); echo $@ + + and has its standard output redirected in overwrite-mode to a regular + file, it looses a line of that output every 15 runs or so on a Fedora + 17 system with 64 ppc64 cores and Linux 3.3.1. Redirection in append + mode does not suffer of this problem. + + See also similar commit 'Release-1-10-280-g6426999' of 2009-03-10, + "Use append mode to capture parallel test output", which tackled a + similar problem for 't/parallel-tests3.sh' and 't/lisp8.sh'. + + * t/tap-more.sh: Use append mode for output from "make -j", to avoid + dropped lines. + * t/parallel-tests3.sh, t/lisp8.sh: Enhance comments. + +2012-05-05 Stefano Lattarini + + Merge branch 'parallel-tests-performance' into maint + + * parallel-tests-performance: + parallel-tests: separate different logs with an empty line + +2012-05-05 Stefano Lattarini + + parallel-tests: separate different logs with an empty line + + After commit v1.12-21-g5eeb366 "parallel-tests: optimize global log + creation", the log files copied in the global log are not anymore + separated by a blank line, causing unclear output like this: + + FAIL: test1 + =========== + + output from test 1 + FAIL: test2 + =========== + + output from test 2 + + where we would want something like this: + + FAIL: test1 + =========== + + output from test 1 + + FAIL: test2 + =========== + + output from test 2 + + Fix this regression. + + * lib/am/check.am (am__create_global_log): Print an extra empty line + after having displayed the content of a '.log' file. + +2012-05-05 Stefano Lattarini + + Merge branch 'maint' + + * maint: + maintcheck: avoid a couple of spurious failures + maintcheck: reduce code duplication, increase coverage + +2012-05-05 Stefano Lattarini + + maintcheck: avoid a couple of spurious failures + + * t/objcxx-deps.sh, t/objcxx-minidemo.sh: In C++ files, use + "std::cout <<", not "cout <<", to avoid triggering a spurious + failure by the syntax check 'sc_tests_here_document_format'. + + Cherry-picked from yesterday's commit v1.12-81-g7f3f467, that + had erroneously been applied to 'master' only rather than to + 'maint'. + +2012-05-05 Stefano Lattarini + + maintcheck: reduce code duplication, increase coverage + + * syntax-checks.mk: Move ... + (sc_tests_plain_aclocal, + sc_tests_plain_autoconf, + sc_tests_plain_perl, + sc_tests_plain_autoupdate, + sc_tests_plain_automake, + sc_tests_plain_make, + sc_tests_plain_autoheader, + sc_tests_plain_autoreconf, + sc_tests_plain_autom4te): ... all these targets ... + (sc_tests_plain_egrep_fgrep): ... and part of this target ... + (sc_tests_plain_check_rules): ... into this variable, and + reimplement their recipes ... + ($(sc_tests_plain_check_rules)): ... with this static pattern + rule. Enhance the coverage they offer a little since we are + at it. + (sc_m4_am_plain_egrep_fgrep): New rule, the part of the old + 'sc_tests_plain_egrep_fgrep' rule that checked for use of + 'fgrep' and 'egrep' in *.am and *.m4 fragments (rather than + in test scripts). + (syntax_check_rules): Update. + * t/dist-formats.tap: Fix bad use of "make" instead of "$MAKE" + revealed by the extra coverage. + * t/cond5.sh, t/auxdir-autodetect.sh: Cosmetic changes to avoid + spuriously triggering the maintainer checks due to the + enhanced coverage. + +2012-05-04 Stefano Lattarini + + maintcheck: avoid a couple of spurious failures + + * t/objcxx-deps.sh, t/objcxx-minidemo.sh: In C++ files, use + "std::cout <<", not "cout <<", to avoid triggering a spurious + failure by the syntax check 'sc_tests_here_document_format'. + +2012-05-04 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: avoid spurious failure on missing Obj C/C++ compiler + objc, objc++: test support for compilation flags + objc, objc++: add stress test + objc, objc++: test automatic dependency tracking + objc: reorganize basic tests + objc++, objc: add first semantic tests + objc++: add first basic test + news: announce initial support for Objective C++ + objc++: test support for '.mm' suffix in _SOURCES entries + objc++: add documentation + objc++: initial support for Objective C++ + +2012-05-04 Stefano Lattarini + + Merge branch 'objc++' into maint + + * objc++: + tests: avoid spurious failure on missing Obj C/C++ compiler + +2012-05-04 Stefano Lattarini + + tests: avoid spurious failure on missing Obj C/C++ compiler + + * t/objc-megademo.sh: Arrange the test to SKIP, not FAIL, if there is + no Objective C or no Objective C++ compiler. Since we are at it, remove + some checks that were actually testing Autoconf (not Automake) behaviour. + +2012-05-04 Stefano Lattarini + + Merge branch 'objc++' into maint + + * objc++: + objc, objc++: test support for compilation flags + objc, objc++: add stress test + objc, objc++: test automatic dependency tracking + objc: reorganize basic tests + objc++, objc: add first semantic tests + objc++: add first basic test + news: announce initial support for Objective C++ + objc++: test support for '.mm' suffix in _SOURCES entries + objc++: add documentation + objc++: initial support for Objective C++ + +2012-05-03 Stefano Lattarini + + dist: don't bother putting README first in $(DIST_COMMON) + + Comments on some of our automake-time pre-processing of $(DIST_COMMON) + said that it was done in order to "put README first because it then + becomes easier to make a Usenet-compliant shar file". But such a + format is hardly relevant anymore, and not worth the (albeit small) + added complexity. + + * automake.in (handle_dist): Don't sort @dist_common. + (for_dist_common): Delete this function, is not used anymore. + * lib/am/distdir.am (DISTFILES): Remove obsolete comment. + * t/distcom4.sh: Adjust. + +2012-05-02 Stefano Lattarini + + Merge branch 'always-support-silent-rules' + + * always-support-silent-rules: + silent rules: support for them is always active now + +2012-05-02 Stefano Lattarini + + Merge branch 'maint' + + * maint: + news: document improvement in parallel-tests performance + tests: fix spurious failure due to autom4te caching + news: fix typos + aclocal: error out again on unrecognized arguments + parallel-tests: save few forks when possible + parallel-tests: optimize global log creation + parallel-tests: optimize 'recheck' target for speed + coverage: add performance tests on some parallel-tests aspects + +2012-05-02 Stefano Lattarini + + news: document improvement in parallel-tests performance + + * NEWS: Document the improved performances of the parallel-tests targets + 'check' and 'recheck'. See recent commits: + + - v1.12-20-gf5733aa of 2012-04-26, + "parallel-tests: optimize 'recheck' target for speed" + + - v1.12-21-g5eeb366 of 2012-02-26, + "parallel-tests: optimize global log creation" + + - v1.12-22-g4c2dd6e of 2012-04-30, + "parallel-tests: save few forks when possible" + +2012-05-02 Stefano Lattarini + + tests: fix spurious failure due to autom4te caching + + Reported by Peter Breitenlohner : + + + * t/suffix.sh: Remove stale autom4te.cache directories, to prevent racy, + spurious failures (using 'aclocal --force' was not enough, since the cache + was still picked up by the following automake call). + +2012-05-02 Stefano Lattarini + Peter Breitenlohner + + objc, objc++: test support for compilation flags + + * t/objc-flags.sh, t/objcxx-flags.sh: New tests. + * t/list-of-tests.mk: Add them. + +2012-05-02 Peter Breitenlohner + + objc, objc++: add stress test + + * t/objc-megademo.sh: New test, trying out a package using all + of C, C++, Objective C and Objective C++ at the same time. + * t/list-of-tests.mk: Add it. + +2012-05-02 Stefano Lattarini + + objc, objc++: test automatic dependency tracking + + * t/objc-deps.sh, t/objcxx-deps.sh: New tests. + * t/list-of-tests.mk: Add them. + +2012-05-02 Stefano Lattarini + + objc: reorganize basic tests + + * t/objc.sh, t/objc2.sh: Removed, merged into ... + * t/objc-basic.sh: ... this new test. + * t/objcxx-basic.sh: Add reference to new sister test. + * t/list-of-tests.mk: Update. + +2012-05-02 Stefano Lattarini + Peter Breitenlohner + + objc++, objc: add first semantic tests + + * t/objcxx-minidemo.sh: New test. + * t/objc-minidemo.sh: Likewise. + * t/list-of-tests.mk: Add them. + +2012-05-02 Peter Breitenlohner + + objc++: add first basic test + + * t/objcxx-basic.sh: New test. + * t/list-of-tests.mk: Add it. + +2012-05-02 Stefano Lattarini + + Merge branch 'parallel-tests-performance' into maint + + * parallel-tests-performance: + parallel-tests: save few forks when possible + parallel-tests: optimize global log creation + parallel-tests: optimize 'recheck' target for speed + coverage: add performance tests on some parallel-tests aspects + +2012-05-02 Stefano Lattarini + + news: fix typos + + * NEWS (Bugs fixed in 1.12.1): Fix botched indentation of an entry, + add a forgotten "and", remove a redundant "the". + +2012-05-02 Stefano Lattarini + + aclocal: error out again on unrecognized arguments + + Starting from commit v1.11-662-g52246cc of 2102-02-18, "cmdline parsing: + move into a dedicated perl module", aclocal has been silently ignoring + non-option arguments instead of correctly reporting them. + Fix this regression. + + * t/aclocal.sh: Update to catch the regression. + * aclocal.in (parse_arguments): Explicitly reject non-option arguments. + * NEWS: Update. + +2012-05-02 Stefano Lattarini + + Merge branch 'cygnus-remove' + + * cygnus-remove: + cygnus: remove support for Cygnus-style trees + +2012-05-02 Stefano Lattarini + + Merge branch 'maint' + + * maint: + cosmetics: fix typo in aclocal m4 directory README + cygnus: warn when it's used (flagged as 'obsolete' now) + +2012-05-02 Stefano Lattarini + + Merge branch 'cygnus-deprecate' into maint + + * cygnus-deprecate: + cygnus: warn when it's used (flagged as 'obsolete' now) + +2012-05-01 Andrew Eikum (tiny change) + + cosmetics: fix typo in aclocal m4 directory README + + * m4/acdir/README: Add forgotten "if". + * THANKS: Update. + +2012-05-01 Stefano Lattarini + + silent rules: support for them is always active now + + Before this change, support for silent rules was optional and activated + only if the 'silent-rules' option was specified. + + The rationale behind that behaviour was that the silent-rules machinery + originally only worked with make implementations supporting nested + variables expansions, which isn't (or wasn't) a POSIX-specified features; + so that packages wanting to be "extra-portable" couldn't use the + silent-rules machinery at all. + + But after Paul Eggert's commit 'v1.11-598-g8493499' of 25-12-2011, + "silent-rules: fallback for makes without nested vars" (motivated + by automake bugs #9928 and #10237), Makefiles generated when the + 'silent-rules' option is enabled can work also with those make + implementations that don't support nested variables expansion (albeit + the configure-time selected verbosity cannot be overridden at make + runtime in such case). + + In light of that, and since silent rules are disabled by default even + when the 'silent-rules' option is given (unless the developer explicitly + makes them enabled by default be calling "AM_SILENT_RULES([yes])" in + configure.ac), we can now have the support for silent rules always + enabled. + + The 'silent-rules' option will thus become a no-op, but will reaming a + valid option for the time being, for better backward-compatibility. + + A collateral effect of this change is that the use of the 'silent-rules' + option will not anymore automatically disable the warnings in the + 'portability-recursive' category. + + The present change is basically a backport of the Automake-NG commit + 'v1.11d-75-g61ca923' of 19-04-2012, "[ng] silent rules: support for + them is always active now". Stemmed by this thread on the Automake-NG + list: + + + * automake.in: Enable silent-rules machinery unconditionally. Reword + some comments. Do not switch off warnings in the category + 'portability-recursive' anymore if the 'silent-rules' option is + given. + * m4/init.m4: Call 'AC_REQUIRE' on 'AM_SILENT_RULES' unconditionally. + * lib/Automake/Options.pm: Recognize 'silent-rules' as a dummy option. + Do not bother anymore checking that it is set in 'configure.ac'. + * t/silent.sh: Remove now-redundant calls to AM_SILENT_RULES. + * t/silent2.sh: Likewise. + * t/silent3.sh: Likewise. + * t/silent4.sh: Likewise. + * t/silent8.sh: Likewise. + * t/silent9.sh: Likewise. + * t/silent-lex.sh: Likewise. + * t/silent-many-gcc.sh: Likewise. + * t/silent-many-generic.sh: Likewise. + * t/silent-yacc-headers.sh: Likewise. + * t/silent-yacc.sh: Likewise. + * t/silentcxx-gcc.sh: Likewise. + * t/silentcxx.sh: Likewise. + * t/silentf77.sh: Likewise. + * t/silentf90.sh: Likewise. + * t/help-silent.sh: Likewise. + * t/silent-configsite.sh: Likewise, and other minor adjustments. + * t/silent7.sh: Likewise. Also, extend to check that silent rules + are disabled by default, and remove obsoleted checks about the + 'silent-rules' option being rejected in 'AUTOMAKE_OPTIONS'. + * t/silent6.sh: Remove now-redundant calls to 'AM_SILENT_RULES'. + Call automake with '-Wno-portability-recursive'. Remove other + obsoleted checks. + * t/dollarvar.sh: Don't expect the use of 'AM_SILENT_RULES' in + 'configure.ac' to disable warning in the 'portability-recursive' + category anymore. + * t/compile_f_c_cxx.sh: Adjust to avoid a spurious failure. + * t/silent-amopts.sh: Remove as obsolete. + * t/silent-nowarn.sh: Likewise. + * t/list-of-tests.mk: Adjust. + * NEWS: Update. + * doc/automake.texi: Update and simplify accordingly. + * configure.ac (AM_INIT_AUTOMAKE): Remove 'silent-rules' option. + +2012-05-01 Stefano Lattarini + + Merge branch 'maint' + + * maint: + fixup: botched edit in bootstrap.sh + +2012-05-01 Stefano Lattarini + + fixup: botched edit in bootstrap.sh + + * bootstrap.sh (dosubst): Fix botched option ("G" instead of "g") + in a sed "s///" expression. Issue introduced in today's commit + 'v1.12-17-g5f810d0'. + +2012-05-01 Stefano Lattarini + + Merge branch 'maint' + + * maint: + news: fix confusing wording + news: fixed weaknesses in build system and testsuite + bootstrap: consistently use correct copyright year + fixup: remove leftover "TERM=ansi" definition in 't/color.sh' + +2012-05-01 Stefano Lattarini + + news: fix confusing wording + + Reported by Dave Hart. + + * NEWS (Future backward-incompatibilities): Fix possibly confusing + wording about the upcoming requirement of Autoconf >= 2.65. + +2012-05-01 Stefano Lattarini + + news: fixed weaknesses in build system and testsuite + + * NEWS (Bugs fixed in 1.12.1): Report that several weaknesses in the + Automake's own build system and test suite have been fixed. See for + example recent commits: + - commit v1.12-5-geb7e8f3, for bug#11345 + - commit v1.12-5-g63e07a9, for bug#11346 + - commit v1.12-5-gf31fe4f + - commit v1.12-10-gab14841 + - commit v1.12-19-g807f3cf, for bug#11369 + - commit v1.12-20-gd330368, for bug#11369 + - bug#11387, pre-emptively solved by commit v1.12-4-g444618b + +2012-05-01 Stefano Lattarini + + bootstrap: consistently use correct copyright year + + Suggested by Peter Johansson in the discussion about automake bug#11356: + + + * boostrap.sh (dosubst): Don't initialize the substituted value for the + release year from the current year (using `date +%Y`); instead, do it + through ... + ($RELEASE_YEAR): ... this new statically-defined variable. To ensure it + won't get out-of-sync, it will be automatically updated ... + * Makefile.am (update-copyright): ... by this target's recipe. + Since are at it, fix a botched output redirection for an error message, + i.e., use ">&2" instead of ">&1". + +2012-04-30 Stefano Lattarini + + fixup: remove leftover "TERM=ansi" definition in 't/color.sh' + + It should have actually be removed in commit 'v1.12-23-gb105d40'. + +2012-04-30 Stefano Lattarini + + parallel-tests: save few forks when possible + + * lib/am/check.am (am__check_pre): Save some forks, by analyzing more + carefully the value of '$@' to decide how to extract its dirname part, + and whether that should be created as a directory. + +2012-04-30 Stefano Lattarini + + Merge branch 'maint' + + * maint: + news: Automake 1.13 will require Autoconf >= 2.65 + news: put planned future backward-incompatibilities on top + readme: update INSTALL to latest version from Autoconf + sync: some auxiliary files synced from upstream + hacking: copyright notices must be updated before releasing + color-tests: coloring can be forced on non-ANSI terminals as well + +2012-04-30 Stefano Lattarini + + news: Automake 1.13 will require Autoconf >= 2.65 + + Autoconf 2.65 is almost three years old now, so requiring it is + acceptable. Also, the soon-to-appear support for Objective C++ + in Automake will be simplified if we can assume that Autoconf + version (which is the one that introduced support for Objective + C++). + + * NEWS (Planned future backward-incompatibilities): Automake 1.13 + will require Autoconf 2.65 or later. + +2012-04-30 Stefano Lattarini + + news: put planned future backward-incompatibilities on top + + * NEWS (New in 1.12): List of planned future backward-incompatibilities + moved from here ... + (New in 1.12.1): ... to here. + +2012-04-30 Stefano Lattarini + + readme: update INSTALL to latest version from Autoconf + + * INSTALL: Updated to the version coming with Autoconf 2.69. This + is warranted now that we use and require that same Autoconf version + in our build system. + +2012-04-30 Stefano Lattarini + + sync: some auxiliary files synced from upstream + + * lib/config.sub: Synced from upstream, by "make fetch". + +2012-04-30 Stefano Lattarini + + hacking: copyright notices must be updated before releasing + + * HACKING (Release procedure): Suggest to use "make update-copyright". + +2012-04-30 Stefano Lattarini + + color-tests: coloring can be forced on non-ANSI terminals as well + + Before this change, colorization of testsuite output was suppressed + whenever the terminal was recognized to be a "dumb" one, incapable + of handling ANSI coloring (i.e., when the environment variable TERM + had a value of "dumb"). This happened even when the AM_COLOR_TESTS + variable was set to a value of "always". + + Such a behaviour was suboptimal and slightly confusing; in fact, if + a user wants to force coloring of testsuite output that is being + redirected to a regular file, he should be able to do so even if his + terminal is not capable of handling ANSI colors -- in fact, such + terminal wouldn't be involved with the testsuite output in any way, + so why should it be allowed to influence it? + + Thus, we now enable coloring of test output whenever AM_COLOR_TESTS + is set to "always", irrespective of the value of the TERM environment + variable. + + * NEWS: Update. + * lib/am/check.am [%?COLOR%] (am__tty_colors): Activate colorization + of testsuite output whenever AM_COLOR_TESTS has the value of "always". + * t/ax/tap-summary-aux.sh: Export the TERM environment variable to + "dumb" when forcing colorization of the testsuite output; this should + *not* prevent such colorization from taking place, and we want to + check that this expectation really holds. + * t/ax/testsuite-summary-checks.sh: Likewise. + * t/color.sh: Likewise, and adjust some grepping checks. + * t/tap-color.sh: Likewise. Also, remove redundant "make check" + invocation since we are at it. + * t/color2.sh: Likewise, and check that exporting TERM=dumb actually + prevents testsuite output colorization when AM_COLOR_TESTS is unset. + * t/parallel-tests-reset-term.sh: Relax, to prevent it from failing + spuriously due to the new semantic. + +2012-04-30 Stefano Lattarini + + cygnus: remove support for Cygnus-style trees + + Support for "Cygnus-style" tree as enabled by the 'cygnus' option + has been deprecated in the documentation and with runtime warning + since Automake 1.12.1. It's now time to remove it. + + Closes automake bug#11034. + + * lib/Automake/Options.pm (_process_option_list): Issue a proper + error when the 'cygnus' option is seen. + * automake.in: Don't handle the 'cygnus' option anymore. + * docs/automake.texi: Remove references to cygnus option and + Cygnus-style trees. + * lib/am/dejagnu.am, lib/am/texinfos.am: Drop special setups for + cygnus mode. + * NEWS: Update. + * t/cygnus-no-more.sh: New test. + * t/flavor.sh: Adjust. + * t/cygnus-deprecation.sh: Remove. + * t/cygnus-check-without-all.sh: Likewise. + * t/cygnus-requires-maintainer-mode.sh: Likewise. + * t/cygnus-dependency-tracking.sh: Likewise. + * t/cygnus-imply-foreign.sh: Likewise. + * t/cygnus-no-installinfo.sh: Likewise. + * t/cygnus-no-dist.sh: Likewise. + * t/clean2.sh: Likewise. + * t/txinfo5.sh: Likewise. + * t/txinfo5b.sh: Likewise. + * t/list-of-tests.mk: Update. + +2012-04-30 Stefano Lattarini + + cygnus: warn when it's used (flagged as 'obsolete' now) + + Support for "Cygnus-style" tree as enabled by the 'cygnus' + option is now reported as obsolete when the warnings in the + 'obsolete' category are enabled. + + See automake bug#11034. + + * automake.in (check_cygnus): Report the use of 'cygnus' mode as + obsolete. + * NEWS: Update. + * docs/automake.texi: Minor adjustments. + * t/cygnus-deprecation.sh: New test. + * t/list-of-tests.mk: Add it. + * tests/cygnus-check-without-all.sh: Adjust by calling automake + with the warnings in the 'obsolete' category disabled. + * t/cygnus-requires-maintainer-mode.sh: Likewise. + * t/cygnus-dependency-tracking.sh: Likewise. + * t/cygnus-imply-foreign.sh: Likewise. + * t/cygnus-no-installinfo.sh: Likewise. + * t/cygnus-no-dist.sh: Likewise. + * t/clean2.sh: Likewise. + * t/flavor.sh: Likewise. + * t/txinfo5.sh: Likewise. + * t/txinfo5b.sh: Likewise. + * t/library.sh: Remove use of 'cygnus' and 'dejagnu' options, + and of AM_MAINTAINER_MODE macro. + +2012-04-30 Stefano Lattarini + + parallel-tests: optimize global log creation + + With this change, the time required to execute the test case + 'testsuite-summary-speed.sh' has dropped as follows: + + + Slow Debian i686 system, 1 core x 1.5 GHz, 768 MB of RAM, + GNU make 3.81: + - 1 run: 4 minutes => 30/40 seconds + + + Fast Solaris 10 i686 system, 4 cores x 3 GHz, 20 GB of RAM, + Solaris CCS make: + - 2 runs: 6 minutes => 30 seconds + + + Very fast Fedora ppc64 system, 64 cores x 3.5 GHz, 64 GB of RAM, + GNU make 3.82: + - 5 runs: 7 minutes => 1 minute and 10 seconds + + * lib/am/check.am ($(TEST_SUITE_LOG)): Optimize for speed, by avoiding + lots of forks with the help of ... + (am__create_global_log): ... this new internal variable, basically + defining a smart awk program, and ... + (am__global_test_result_rx, am__copy_in_global_log_rx): ... these new + internal variables, used by the one above. + (am__rst_section): Remove as obsolete + * t/rst-formatting.trs: Remove. + * t/list-of-tests.mk: Update. + * t/testsuite-summary-count-many.sh: Improve its stress testing by + using 1 million tests rather than just 5 thousands: we can afford + this with our new optimization, and still have the test completed + in a reasonable time. + +2012-04-30 Stefano Lattarini + + parallel-tests: optimize 'recheck' target for speed + + With this change, the time required to execute the test case + 'testsuite-recheck-speed.sh' has dropped as follows: + + + Slow Debian i686 system, 1 core x 1.5 GHz, 768 MB of RAM, + GNU make 3.81: + - 1 run: 6 minutes => 40 seconds + + + Fast Solaris 10 i686 system, 4 cores x 3 GHz, 20 GB of RAM, + Solaris CCS make: + - 4 runs: 3 minutes => 1 minute + + + Very fast Fedora ppc64 system, 64 cores x 3.5 GHz, 64 GB of RAM, + GNU make 3.82: + - 5 runs: 4 minutes => 1 minute 30 seconds + + * lib/am/check.am (recheck): Optimize for speed, by avoiding lots of + forks with the help of ... + (am__list_recheck_tests): ... this new internal variable, basically + defining a proper awk program, and ... + (am__recheck_rx): ... this other new internal variable, used by the + one above. + * t/test-trs-recover2.sh: Relax by not checking for a very corner + case ('.log' and '.trs' files both unreadable) that we don't handle + anymore. + +2012-04-30 Stefano Lattarini + + news: announce initial support for Objective C++ + +2012-04-30 Peter Breitenlohner + Stefano Lattarini + + objc++: test support for '.mm' suffix in _SOURCES entries + + * t/ext.sh: Enhance by adding a file with the '.mm' suffix in + the 'foo_SOURCES' definition. + * t/nodep2.sh: Likewise. + +2012-04-30 Stefano Lattarini + + coverage: add performance tests on some parallel-tests aspects + + * t/testsuite-recheck-speed.sh: New test. + * t/testsuite-summary-speed.sh: Likewise. + * t/list-of-tests.mk: Update. + + The new tests are not meant to PASS/FAIL, but rather to help us to + obtain quantitative measurements of the performance improvements + offered by soon-to-appear optimization patches. + + Timing before the optimizations implemented by following patches: + + + Slow Debian i686 system, 1 core x 1.5 GHz, 768 MB of RAM, + GNU make 3.81: + - testsuite-recheck-speed.sh: 1 run, ~ 6 minutes + - testsuite-summary-speed.sh: 1 run, ~ 4 minutes + + + Fast Solaris 10 i686 system, 4 cores x 3 GHz, 20 GB of RAM, + Solaris CCS make: + - testsuite-recheck-speed.sh: 4 runs, ~ 3 minutes + - testsuite-summary-speed.sh: 2 runs, ~ 6 minutes + + + Very fast Fedora ppc64 system, 64 cores x 3.5 GHz, 64 GB of RAM, + GNU make 3.82: + - testsuite-recheck-speed.sh: 5 runs, ~ 4 minutes + - testsuite-summary-speed.sh: 5 runs, ~ 7 minutes + +2012-04-30 Peter Breitenlohner + + objc++: add documentation + + * doc/automake.texi (Objective C++ Support): New node. + (How the Linker is Chosen, Support for Other Languages): Adjust. + +2012-04-30 Peter Breitenlohner + + objc++: initial support for Objective C++ + + Original thread (dating back to almost three years ago): + + + * automake.in: Register new language 'objcxx'. + (lang_objcxx_rewrite): New subroutine. + (resolve_linker): Add OBJCXXLINK. + (%_am_macro_for_cond): Add am__fastdepOBJCXX and AC_PROG_OBJCXX. + (%_ac_macro_for_var): Add OBJCXX and OBJCXXFLAGS. + * m4/depend.m4 (_AM_DEPENDENCIES): Add OBJCXX. + * m4/init.m4 (AM_INIT_AUTOMAKE): Add AC_PROG_OBJCXX hook. + +2012-04-29 Stefano Lattarini + + Merge branch 'mkdirp-remove' into master + + * mkdirp-remove: + AM_PROG_MKDIR_P: remove as obsolete + +2012-04-29 Stefano Lattarini + + Merge branch 'maint' + + * maint: + AM_PROG_MKDIR_P: deprecate, to be removed in Automake 1.13 + +2012-04-29 Stefano Lattarini + + Merge branch 'mkdirp-deprecate' into maint + + * mkdirp-deprecate: + AM_PROG_MKDIR_P: deprecate, to be removed in Automake 1.13 + +2012-04-29 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: root can write on files without write perms; cater for this + tests: require lex, not yacc, in a lex test case + maint: fix a comment typo + +2012-04-28 Stefano Lattarini + + tests: root can write on files without write perms; cater for this + + Fixes last part of automake bug#11369. + + * t/dist-readonly.sh ($required): Add 'non-root'. + +2012-04-28 Stefano Lattarini + + tests: require lex, not yacc, in a lex test case + + See automake bug#11369. + + * t/lex-clean.sh ($required): Require 'lex', not 'yacc'. + +2012-04-28 Stefano Lattarini + + AM_PROG_MKDIR_P: remove as obsolete + + Support for the obsolescent 'AM_PROG_MKDIR_P' m4 macro (and its + output variable '$(mkdir_p)') has in the documentation and with + runtime warning since Automake 1.12.1. It's now time to remove it. + + * automake.in (scan_autoconf_traces): Remove special handling of + 'AM_PROG_MKDIR_P'. + * m4/mkdirp.m4: Delete. + * Makefile.am (dist_automake_ac_DATA): Remove it. + * t/mkdirp-deprecation.sh: Delete. + * t/list-of-tests.mk: Remove it. + * doc/automake.texi: Remove references to the 'AM_MKDIR_P' m4 macro + and the '$(mkdir_p)' output variable. + * t/gettext-macros.sh: Ensure the gettext-requiring tests will + still see the now-removed 'AM_PROG_MKDIR_P' macro as an alias for + the 'AC_PROG_MKDIR_P' macro, since even recent versions of gettext + uses 'AM_PROG_MKDIR_P' in their '.m4' files. + * NEWS: Update. + +2012-04-28 Stefano Lattarini + + AM_PROG_MKDIR_P: deprecate, to be removed in Automake 1.13 + + Support for the obsolescent 'AM_PROG_MKDIR_P' macro (and its + output variable '$(mkdir_p)') has already been deprecated in + the documentation. It's now time to make its use actively + emit warnings in the 'obsolete' category as well. + + * automake.in (scan_autoconf_traces): Warn about 'AM_PROG_MKDIR_P' + obsolescent if that macro is seen. + * m4/mkdirp.m4 (AM_PROG_MKDIR_P): Warn about its own obsolescence. + * m4/init.m4: Require 'AC_PROG_MKDIR_P', not 'AM_PROG_MKDIR_P'. + * t/mkdirp-deprecation.sh: New test. + * t/list-of-tests.mk: Add it. + * syntax-check.mk (sc_mkdir_p): Delete this check as obsolete. + (syntax_check_rules): Remove it. + * t/gettext-macros.sh: Ensure the gettext-requiring tests will + call aclocal and automake with the 'obsolete' warnings disabled, + since even recent versions of gettext used the now-deprecated + 'AM_PROG_MKDIR_P' m4 macro. + * NEWS: Update. + +2012-04-28 Jim Meyering + + maint: fix a comment typo + + * configure.ac: Fix typo in comment: s/out/our/ + +2012-04-28 Stefano Lattarini + + Merge branches 'remove-acdir-option' and 'remove-obsolete-m4' + + * remove-acdir-option: + aclocal: remove the --acdir option + + * remove-obsolete-m4: + m4: delete several obsolete macros + +2012-04-28 Stefano Lattarini + + Merge branch 'maint' + + * maint: + fixup: avoid unconditional re-bootstrapping on "make dist" + build: ensure release year in copyright notice is up-to-date + cosmetics: fix spacing in THANKS + readme: explicitly state we use ranges in copyright years + bootstrap: add convenience make target + automake, aclocal: update copyright year in output + +2012-04-28 Stefano Lattarini + + fixup: avoid unconditional re-bootstrapping on "make dist" + + Since our 'bootstrap' script is distributed, the 'distdir' target depends + on it. But in our GNUmakefile, we also have a 'bootstrap' target declared + .PHONY, which when called re-bootstrap the Automake distribution. Thus, + whenever we run "make dist", GNU make sees it must remake the 'bootstrap' + target (as it is a dependency of the 'distdir' target), and thus ends up + re-bootstrapping all the package (because of the .PHONY 'bootstrap' target + in GNUmakefile). + + We fix this issue by renaming our bootstrap script to 'bootstrap.sh'. + + * bootstrap: Renamed ... + * bootstrap.sh: ... to this. + * GNUmakefile (bootstrap): Adjust. + * Makefile.am (EXTRA_DIST): Likewise. + (autodiffs): Likewise. + * HACKING: Likewise. + +2012-04-28 Stefano Lattarini + + build: ensure release year in copyright notice is up-to-date + + From a suggestion by Eric Blake. See automake bug#11356. + This is a follow-up to previous patch 'v1.12-12-gb99b5be'. + + * configure.ac (RELEASE_YEAR): New AC_SUBST'd variable, should hold + the value of the current year. + * Makefile.am (update-copyright): Be sure to also update the + definition of 'RELEASE_YEAR' in configure.ac. + * lib/Automake/Config.in ($RELEASE_YEAR): New exported variable, + initialized from the value substituted for '@RELEASE_YEAR@'. + (@EXPORT): Add it. + * automake.in, aclocal.in: Use '$RELEASE_YEAR' (which will be + substituted at make time) instead of hard-coding the release + year. This should ensure the copyright range in the version + message and in the generated files (Makefile.in and aclocal.m4) + are automatically kept up-to-date. + * bootstrap (dosubst): Update, also substitute '@RELEASE_YEAR@'. + +2012-04-28 Stefano Lattarini + + cosmetics: fix spacing in THANKS + + * THANKS: Use spaces, not tabs, to separate a reporter's name from + his e-mail address. Also, increase such spacing, to allow a more + consistent formatting with longer names. + +2012-04-28 Stefano Lattarini + + readme: explicitly state we use ranges in copyright years + + Reported by Jack Kelly in automake bug#11356. + + * README: Explicitly state we use ranges in copyright years; this is + mandated by the GNU Coding Standards for each package that wants to + actually use ranges in copyright years. + +2012-04-27 Stefano Lattarini + + aclocal: remove the --acdir option + + It not documented in the manual anymore, its use has already been + causing a deprecation warning, and its oncoming removal has already + been announced in the NEWS file. So let's finally remove it. + + * aclocal.in (parse_arguments): Don't recognize the '--acdir' option + anymore. + (handle_acdir_option): Remove subroutine. + * configure.ac ($ACLOCAL): Adjust. + ($AUTOMAKE): Cosmetic changes, for consistency. + * tests/aclocal-acdir.test: Remove usages of the '--acdir' option. + * tests/aclocal-print-acdir.test: Likewise. + * NEWS: Update. + +2012-04-27 Stefano Lattarini + + bootstrap: add convenience make target + + Dependencies in the Automake build system are not completely specified + (see for example the commit log of recent commit 'v1.12-10-gab14841', + "build: avoid too greedy rebuilds in the testsuite"). In fact, some of + them cannot even be; for example, Makefile is generated at configure + time from Makefile.in, which should be regenerated by our bleeding-edge + automake script, which is generated by out Makefile -- specifying the + complete chain of dependencies here would bring to a circular dependency + issue. + + For this reason, before testing or deploying a change, we are often + forced to perform a full re-bootstrap of the Automake package, to ensure + all our files are actually up-to-date. Until now, this has to be done + manually, thus causing wasted keystrokes and more possibilities of error. + + With this change, we introduce a new 'bootstrap' make target to + automatize all the (easy) steps of this re-bootstrapping (plus some + minor bells & whistles since we are at it). + + * GNUmakefile: Rewrite to allow an easy bootstrapping and clean rebuild + of the whole package, in particular with the help of ... + (bootstrap): ... this new target. + +2012-04-27 Stefano Lattarini + + m4: delete several obsolete macros + + Support for several obsolescent macros has already been deprecated, + and their removal already announced in the documentation and in the + NEWS file. It's now time to finally remove them. + + * m4/dmalloc.m4 (fp_WITH_DMALLOC): Don't define anymore. + * m4/maintainer.m4 (jm_MAINTAINER_MODE): Likewise. + * m4/lispdir.m4 (ud_PATH_LISPDIR): Likewise. + * m4/protos.m4 (fp_C_PROTOTYPES): Likewise. + * m4/ccstdc.m4: Delete file. + * m4/header.m4: Likewise. + * m4/obsol-gt.m4: Likewise. + * m4/obsol-lt.m4: Likewise. + * m4/obsolete.m4: Likewise. + * Makefile.am (dist_automake_ac_DATA): Don't list the deleted '.m4' + files anymore. + * t/confh.sh: Use 'AC_CONFIG_HEADERS' instead of the now-removed + AM_CONFIG_HEADER. + * t/confh.sh: Likewise. + * t/confh4.sh: Likewise. + * t/confh6.sh: Likewise. + * t/confh7.sh: Likewise. + * t/confh8.sh: Likewise. + * t/confsub.sh: Likewise. + * t/stamph2.sh: Likewise. + * t/subdir6.sh: Likewise. + * t/autohdr2.sh: Remove as obsolete. + * t/obsolete.sh: Likewise. + * t/list-of-tests.mk. Don't list the deleted test cases anymore. + * NEWS: Update. + * doc/automake.texi: Likewise. In particular ... + (Obsolete Macros): Remove this node altogether. + +2012-04-27 Stefano Lattarini + + automake, aclocal: update copyright year in output + + Fixes automake bug#11356. + + * aclocal.in, automake.in: Add copyright year '2012' in the version + message. Ditto for the copyright notice in the generated Makefile.in + or aclocal.m4 files; and for those, since we are at it, prefer using + a range for copyright years, rather than listing each copyright year + individually. + +2012-04-26 Stefano Lattarini + + Merge branch 'maint' + + * maint: + maint: don't use "union" merge driver for NEWS anymore + build: avoid too greedy rebuilds in the testsuite + tests: avoid yet another spurious environment influence + tests: fix a failure in Lex/C++ tests on Mac OS X + tests: fix a spurious failure due to truncated timestamps + build: require autoconf 2.69 + build: don't require minimal automake version in AM_INIT_AUTOMAKE + +2012-04-26 Stefano Lattarini + + maint: don't use "union" merge driver for NEWS anymore + + The use of the "union" merge driver to avoid conflicts in NEWS has + proven to be problematic, as it often silently produced mis-merges + (instead of spurious conflicts, but a spurious conflict is better + than a mis-merge). Also, our new branching policy (see automake + bug#11153 for a description) should greatly mitigate the problem of + merge conflicts in NEWS. For further discussion, see: + + +2012-04-26 Stefano Lattarini + + build: avoid too greedy rebuilds in the testsuite + + The autogenerated makefile fragment 't/testsuite-part.am' used to depend + on the list of *all* the hand-written files. This was technically correct, + since that makefile fragment was (and still is) generated by the script + 'gen-testsuite-part', which scans all the hand-written files to detect + implicit dependencies and to decide for which tests a further wrapper test + should be generated. + + However, the presence of such a dependency implied that, whenever *any* + test case was modified (no matter how slightly), the 't/testsuite-part.am' + file was rebuilt, and since that is included by our 'Makefile.am', the + 'Makefile.in' file was rebuilt as well by automake. In order to do so, + automake scanned our 'configure.ac' file, which requires the latest + Autoconf version (2.69 at the time of writing), and the casual user can + easily lack that on his machine (and that should be allowed, as automake + currently supports any autoconf version >= 2.62). + + The described situation could hinder in-field testing or debugging by + users (even experienced ones) that are not automake developers; see for + example automake bug#11347. + + So we drop the explicit dependency of 't/testsuite-part.am' on the + hand-written test cases. (As an aside, note that this has already + been done in Automake-NG, albeit for other reasons; see the commit + 'v1.11b-129-g1690aca' of 2012-04-23, "[ng] build: define $(TESTS) + through a wildcard"). + + This is not a serious regression in the faithfulness of the Automake + build systems, since it unfortunately already had several undeclared + dependencies; e.g., 'Makefile.in' should depend on the automake script, + and 'aclocal.m4' should depend on the aclocal script (but this isn't + possible, as it would mean that distributed files depend on ones generated + at make time). Similarly, 'Makefile.in' should depend on some of the + 'lib/am/*.am' files, but does not. + + Currently, the workaround to get a faithful and correct rebuild is to run + + ./bootstrap && ./config.status --recheck && make clean all + + and the present commit does not change that. + + * Makefile.am ($(srcdir)/t/testsuite-part.am): Don't depend on + 't/list-of-tests.mk' nor on '$(handwritten_TESTS)' anymore. + ($(generated_TESTS)): Likewise, and don't depend on 'Makefile.am' + either. + +2012-04-26 Stefano Lattarini + + Merge branch 'fix-pr11345-lex' into maint + + * fix-pr11345-lex: + tests: fix a failure in Lex/C++ tests on Mac OS X + +2012-04-26 Stefano Lattarini + + Merge branch 'fix-pr11346-timestamp' into maint + + * fix-pr11346-timestamp: + tests: fix a spurious failure due to truncated timestamps + +2012-04-26 Thien-Thi Nguyen (tiny change) + + tests: avoid yet another spurious environment influence + + * t/remake11.sh: Unset 'd' before first use. + +2012-04-26 Stefano Lattarini + + tests: fix a failure in Lex/C++ tests on Mac OS X + + The header from Xcode-4.3.2 on Mac OS X 10.7.3 declares a 'isatty' + function with C++ linkage, that conflicts with our dummy definition of the + same function, which in turn is required to work around the absence of the + unistd.h header on MinGW (see commit 'v1.11-2138-gfeea090' of 11-04-2012). + So we tweak the affected tests to work around this new problem as well. + + This fixes automake bug#11345. + + * t/lex-clean-cxx.sh ($required): Since we are at it, add an explicit + 'c++' requirement. + * t/lex-depend-cxx.sh ($required): Likewise. + (my-hdr.hxx): Don't include . The "using namespace" directive + should still be enough to ensure the content of this header is not valid + C, albeit being of course valid C++. + Fix unrelated typos in comments. + (joe.ll): Adjust, by removing the call to 'printf'. + * THANKS: Add entry for reporter "Adam Mercer". + +2012-04-26 Stefano Lattarini + Peter Breitenlohner + + tests: fix a spurious failure due to truncated timestamps + + Fixes automake bug#11346. + + * t/self-check-is_newest.tap: Apparently, on some systems (or file + systems), "touch -r" can truncate timestamps :-( Work around that. + +2012-04-26 Stefano Lattarini + + build: require autoconf 2.69 + + It is only from version 2.69 that the 'AC_PROG_FC' macro has started to + set the '$GFC' variable to "yes" if the selected Fortran compiler is a + GNU compiler. Since we use this variable in our configure.ac, we better + require autoconf 2.69 explicitly. + + * configure.ac (AC_PRERQ): Require autoconf >= 2.69. + Remove a now-obsolete "FIXME" comment. + +2012-04-25 Stefano Lattarini + + build: don't require minimal automake version in AM_INIT_AUTOMAKE + + * configure.ac (AM_INIT_AUTOMAKE): Don't explicitly require a minimal + automake version number. Since the Automake build system is only meant + to work with the bleeding-edge automake, that requirement was redundant + and misleading. + +2012-04-25 Stefano Lattarini + + post-release: major version bump + + This is for the master branch. + + * configure.ac, m4/amversion.m4: Bump version to 1.12a. + +2012-04-25 Stefano Lattarini + + Merge branch 'maint' + + * maint: + post-release: minor version bump + +2012-04-25 Stefano Lattarini + + post-release: minor version bump + + This is for the maint branch. + + * configure.ac, m4/amversion.m4: Bump version to 1.12.0a. + +2012-04-25 Stefano Lattarini + + Merge branch master into maint after 1.12 release + +2012-04-25 Stefano Lattarini + + release: stable major release 1.12 + + * configure.ac (AC_INIT): Bump version number to 1.12. + * NEWS: Likewise. + * m4/amversion.m4 (AM_AUTOMAKE_VERSION): Likewise (autoupdated + by ./bootstrap). + +2012-04-25 Stefano Lattarini + + Merge branches 'fix-pr11302-opensuse' and 'fix-pr11306-macosx' + + * fix-pr11302-opensuse: + tests: cater to systems installing libs in /lib64 + + * fix-pr11306-macosx: + tests: fix spurious failure on Mac OS X + +2012-04-23 Stefano Lattarini + + coverage: test the internal $(am__relativize) variable + + This new coverage might turn out be useful for the planned changes + in Automake-NG. Even if it eventually doesn't, we gen an improved + testsuite exposure of some non-trivial internals, so it's always a + win for us. + + * t/relativize.tap: New test. + * t/list-of-tests.mk: Add it. + +2012-04-23 Stefano Lattarini + + tests: cater to systems installing libs in /lib64 + + See automake bug#11302. + + On at least OpenSUSE 12.1, "make install" will install libraries in + the '${prefix}/lib64' directory by default. This is due to the + $CONFIG_SITE set by /etc/profile.d/site.sh, which sets a libdir + that ends in '/lib64' rather than '/lib' if it finds that the compiler + is generating 64-bit code. This behaviour was causing some spurious + failures in our testsuite. Fix them. + + * t/posixsubst-libraries.sh: Assume the libraries are installed in + '$(libdir)' rather than in '$(prefix)/lib'. + * t/posixsubst-ltlibraries.sh: Likewise. + * t/posixsubst-scripts.sh: Similarly, don't assume that '$(bindir)', + '$(sbindir)' and '$(libexedir)' always defaults to respectively + '$(prefix)/bin', '$(prefix)/sbin' and '$(prefix)/libexec'. + * t/transform3.test: Likewise. + +2012-04-23 Stefano Lattarini + Bruno Haible + + tests: fix spurious failure on Mac OS X + + See automake bug#11306. + + * t/lex-libobj.sh: We used to pass LEXLIB='-L /lib' to the ./configure + invocation, to prevent it from explicitly searching for a "lex library". + But the linker on MacOS X 10.5 apparently chokes on that: + + cc -g -O2 -o foo foo.o -L /lib yywrap.o + ld: file not found: /lib + collect2: ld returned 1 exit status + + So, we now instead pass LEXLIB=' ', which being non-empty is enough + to prevent the search of a "lex library". And since we are at it, + enhance comments on this non-obvious usage. + +2012-04-22 Stefano Lattarini + + coverage: parallel make with vala + + * t/vala-parallel.sh: New test. + * t/list-of-tests.mk: Add it. + +2012-04-21 Stefano Lattarini + + vala: configure exit with status 77, not 1, if valac version is too old + + From a report by Bruno Haible in automake bug#1193. This change should + also automatically avoid spurious testsuite failures with older vala + versions. + + * m4/vala.m4 (AM_PROG_VALAC): Exit with status 77, rather than 1, if + the Vala compiler found older than the minimal required version (if + any). This is more consistent with what is done by other macros like + AM_PROG_UPC or AC_PROG_CC. + * NEWS: Update. + * t/vala-headers.sh: Adjust, so that the test is only skipped of the + vala compiler is too old or the required PKG_CHECK_MODULES third-party + macro is not found by aclocal, and not if a generic error happens in + the configure script. + * t/vala-libs.sh: Likewise. + * t/vala2.sh: Likewise. + * t/vala3.sh: Likewise. + * t/vala5.sh: Likewise. + * t/vala-vpath.sh: Likewise (but don't check for the potential error + with PKG_CHECK_MODULES, as that macro is not used in any way here). + * t/vala4.sh: Adjust, to avoid the new semantic causing this test to + skip instead of failing. + +2012-04-21 Stefano Lattarini + + refactor: processing of input makefile rules + + This is a pure refactoring, with no intended functional or semantic + changes. It breaks up an overly-long function in three smaller + sub-functions. This change will very especially useful for the work + on Automake-NG. + + * lib/Automake/Rule.pm (define): Move quite a lot of code out, into ... + (_rule_defn_with_exeext_awareness, _maybe_warn_about_duplicated_target, + _conditionals_for_rule): ... these new subroutines. + +2012-04-21 Stefano Lattarini + + automake: refactor pre-processing of makefile fragments + + This change will provide the automake script with a new function that + reads in a Makefile fragment *without* performing Automake ad-hoc parsing, + but only the pre-processing step, i.e., removal of '##' comments and + substitution of tokens like '%SUBDIRS%', '%?LIBTOOL%' or '?GENENRIC?'. + + This will very likely be useful for the work on Automake-NG. + + This is a pure refactoring, with no intended functional or semantic + changes. + + * automake.in (preprocess_file): New function, extracted ... + (make_paragraphs): ... from here. + +2012-04-20 Stefano Lattarini + + docs: remove obsolete references to Autoconf 2.13 + + Autoconf 2.13 is definitely obsolete today, so giving hints or caveats + about it in the Automake documentation is not only obsolescent, but + also counter-productive, as it suggests that autoconf 2.13 is still + relevant. + + * doc/automake.texi: Adjust. Related rewordings. Since we are at it, + prefer using a more modern autoconf version number (2.68 instead of 2.57) + in an example showing how to correctly use 'AC_PREREQ' in third-party + .m4 files. + +2012-04-20 Stefano Lattarini + + tests: fix spurious failure with non-ANSI terminals + + * t/ax/tap-summary-aux.sh: When checking colored testsuite output, + be sure to export the TERM variable to the value "ansi"; otherwise + the automake testsuite driver will not display colored output, not + even if AM_COLOR_TESTS is exported to "always". Failure revealed + by NixOS Hydra. + +2012-04-18 Stefano Lattarini + + hacking: fix typo + + * HACKING (Test suite): Refer to file 't/README', not to the + non-existent 'tests/README'. + +2012-04-18 Stefano Lattarini + + maint: version bump after beta release + + * configure.ac (AC_INIT): Bump version number to 1.11e, as per + HACKING suggestion. + * NEWS: Likewise. + * m4/amversion.m4: Likewise (autoupdated by ./bootstrap). + +2012-04-18 Stefano Lattarini + + Beta release 1.11d (will become 1.12) + + * configure.ac (AC_INIT): Bump version number to 1.11d. + * NEWS: Likewise. + * m4/amversion.m4: Likewise (autoupdated by ./bootstrap). + +2012-04-18 Stefano Lattarini + + tests: remove redundant 'set -e' calls + + * t/aclocal-install-fail.sh: Do not set the 'errexit' shell flag, + as it is already set by './defs'. + * t/aclocal-install-mkdir.sh: Likewise. + * t/aclocal-no-install-no-mkdir.sh: Likewise. + * t/aclocal-verbose-install.sh: Likewise. + * t/instdir-no-empty.sh: Likewise. + * t/link_cond.sh: Likewise. + * t/python-pr10995.sh: Likewise. + * t/vala-vapi.sh: Likewise. + +2012-04-18 Stefano Lattarini + + tests: avoid spurious failures when cross-compiling + + * t/parallel-tests-recheck-depends-on-all.sh: Skip the test + when cross-compiling. + * t/vala-vapi.sh: Skip tests that do not make sense when + cross-compiling. + * t/yacc-basic.sh: Likewise. + * t/yacc-cxx.sh: Likewise. + +2012-04-18 Stefano Lattarini + + maintainer-check: fix definition of $(ams) again + + * syntax-checks.mk (ams): The previous change 'v1.11b-36-g127adfb' solved + one problem in the definition of this variable, but also caused it contain + the names of all the left-behind 't/*.dir' temporary test directories. + Fix that. + +2012-04-18 Stefano Lattarini + + maintainer-check: do not hang + + * syntax-checks.mk (ams): The definition of this variable was invoking + the 'find' utility in an incorrect way, which resulted into the variable + being empty, thus reducing coverage in some maintainer check and making + other hang. Fix this. + +2012-04-18 Stefano Lattarini + + parallel-tests: 'recheck' must depend on 'all' + + Fixes automake bug#11252. + + When a developer experience one or more failures in the testsuite, a good + workflow is for him to modify its program's sources to fix the bug thus + revealed, run "make recheck" to verify that the change has indeed solved + the testsuite failures previously experienced, and then run "make check" + to verify that the change has not introduced any new failure or regression. + + Unfortunately, this apparently natural workflow couldn't have worked until + now, since the Automake-provided 'recheck' target (which didn't depend on + 'all') wouldn't have causes the program to be recompiled, and the failed + tests would have thus been run with the older, buggy version of the + program, failing the same way as before. + + * lib/am/check.am (recheck): Depend on 'all'. + * t/parallel-tests-recheck-depends-on-all.sh: New test. + * t/list-of-tests.mk: Add it. + * NEWS: Update. + +2012-04-17 Stefano Lattarini + + vala tests: building libraries, and more on '.vapi' files + + * t/vala1.sh: Remove, turned into ... + * t/vala-libs.sh: ... this functional test instead. + * t/list-of-tests.mk: Adjust. + +2012-04-17 Stefano Lattarini + + automake: fix botched call to 'check_user_variables' + + * automake.in (lang_vala_finish_target): The 'check_user_variables' function + takes an array, not an array ref, as argument; adjust its call accordingly. + +2012-04-17 Stefano Lattarini + + vala: cleanup rules are better and more complete now + + * automake.in (lang_vala_finish_target): Ensure Vala-generated C sources + and header files and our custom stamp files are correctly cleaned. + * t/vala-headers.sh, t/vala-vpath.sh: Enhance. + * NEWS: Update. + +2012-04-17 Stefano Lattarini + + vala tests: check headers generation + + * t/vala-headers.sh: New test, checking use of 'valac' options for + header generation (e.g., '-H', '--vapi', ...) in '$(..._VALAFLAGS)'. + * t/list-of-tests.mk: Add it. + +2012-04-17 Stefano Lattarini + + vala tests: remove redundant libtool requirements and usages + + * t/vala2.sh: Don't require libtool m4 macros, don't run libtoolize, + don't invoke AC_PROG_LIBTOOL: none of there is really needed. + * t/vala3.test: Likewise. + +2012-04-16 Stefano Lattarini + + vala tests: some enhancements + + * t/vala-vpath.sh, t/vala2.sh, t/vala3.sh, t/vala5.sh: Enhance a little. + +2012-04-16 Stefano Lattarini + + vala tests: few adjustments and improvements + + * t/vala4.sh: Don't run 'libtoolize', it's not truly required. + ($required): Don't require 'libtoolize'. + (configure.ac): Don't invoke 'AC_PROG_LIBTOOL'. + * t/vala-mix.sh ($required): Require 'cc'. + Avoid some calls to 'framework_failure_', they were only useful when + this test was xfailing (to ensure it wasn't failing for the wrong + reasons). + Ensure the stamp file is created in the source directory. + +2012-04-16 Jim Meyering + + build: use latest help2man, but without locale support + + * doc/help2man: Update to latest (1.40.8), but built with + --disable-nls, which elides the less-portable locale-related + code, and with the "use 5.008" manually changed to "use 5.006". + Thanks to Brendan O'Dea for the tips. + * THANKS: Update Brendan's address. + +2012-04-14 Stefano Lattarini + + parallel-tests: print error messages on stderr, not stdout + + * lib/am/check.am ($(TEST_SUITE_LOG)): Be sure to print error messages + on stderr, not on stdout. + +2012-04-13 Stefano Lattarini + + dist tests: fix reduced coverage due to typo + + * t/dist-formats.tap: Append to 'Makefile.am', not to 'Makefil.am'. + +2012-04-13 Jim Meyering + + build: use slightly older help2man, for improved portability + + Fixes automake bug#11235 + + * doc/help2man: Downgrade to help2man-1.36.4, so that it does + not require Locale/gettext.pm, which is not available on a + default Fedora 16 installation. Reported by Stefano Lattarini. + +2012-04-13 Stefano Lattarini + + tests: avoid spurious failure when 'install-info' program is unavailable + + From a report by Dmitry V. Levin: + + + * t/install-info-dir.sh : When 'install-info' is unavailable, create a + dummy '${infodir}/dir' file by hand when that file is required by later + checks. + +2012-04-13 Stefano Lattarini + + Merge branch 'maint' + + * maint: + install: shell parameter expansions can be used in directory names + +2012-04-13 Stefano Lattarini + + Merge branch 'fix-pr11232' into maint + + * fix-pr11232: + install: shell parameter expansions can be used in directory names + +2012-04-13 Dmitry V. Levin + + install: shell parameter expansions can be used in directory names + + Fixes automake bug#11232. + + GNU automake used to support shell parameter expansion and command + substitutions in installation directories, but that was inadvertently + broken by commit v1.11-759-g368f1c4 "install: don't create empty dirs + when an empty 'foo_PRIMARY' is used" of 18-03-2012, where shell quoting + of generated MKDIR_P command was changed from double to single quotes + in 3 places, while some 21 other places still use double quotes for + generated MKDIR_P commands. + + * lib/am/data.am: Use double quotes for generated "mkdir -p" commands. + * lib/am/libs.am: Likewise. + * lib/am/ltlib.am: Likewise. + +2012-04-13 Stefano Lattarini + + test defs: more environment cleanups + + * defs (SH_LOG_COMPILER, SH_LOG_COMPILE, SH_LOG_FLAGS, + AM_SH_LOG_FLAGS, SH_LOG_DRIVER, SH_LOG_DRIVER_FLAGS, + AM_SH_LOG_DRIVER_FLAGS): Unset these variable to avoid + potential interferences from the environment. + +2012-04-13 Stefano Lattarini + + test defs: unset 'AM_UPDATE_INFO_DIR' environment variable + + * defs (AM_UPDATE_INFO_DIR): Unset, to be sure to avoid unduly + interferences from the environment. See also automake bug#11204. + * THANKS: Add entry for David Fang. + +2012-04-12 Jim Meyering + + build: generate doc/*.1 files; include help2man + + This change is required to avoid making a distributed file depend + on a generated (non-distributed) one. The preceding change + introduced one such dependency, with the distributed doc/*.1 + depending on the generated aclocal and automake files. Here, + we avoid the problem by generating the doc/*.1 files rather than + distributing them. + + * doc/help2man: New file, version 1.37.1. + * Makefile.am (EXTRA_DIST): Add doc/help2man. + (man1_MANS): Rename from $(dist_man1_MANS). Remove $(srcdir) prefix. + (CLEANFILES): Add these files here, rather than to + $(MAINTAINERCLEANFILES), since we are no longer distributing them. + (update_mans): Use doc/help2man, not $(HELP2MAN). + * configure.ac: Don't test for help2man, now that we bundle it. + +2012-04-12 Jim Meyering + + build: avoid parallel build failures + + A parallel build would fail when two concurrent sub-make processes + tried to build lib/Automake/Config.pm. The loser would complain that + grep: lib/Automake/Config.pm-t: No such file or directory + chmod: cannot access `lib/Automake/Config.pm-t': No such file or\ + directory + make[1]: *** [lib/Automake/Config.pm] Error 1 + * Makefile.am (update_mans): Don't build lib/Automake/Config.pm here. + Instead, depend on it from the two rules that use it: + ($(srcdir)/doc/aclocal-$(APIVERSION).1): Depend on it. + ($(srcdir)/doc/automake-$(APIVERSION).1): Likewise. + + [ Note that technically, the above is incorrect, since it makes those + distributed doc/*.1 files depend on generated aclocal and automake. + That problem is addressed by the following commit. ] + + However, that was not enough, since even then, a parallel build + would still fail, now with this: + + help2man: can't get `--help' info from automake-1.11a + Try `--no-discard-stderr' if option outputs to stderr + make: *** [doc/automake-1.11a.1] Error 1 + + a subsequent "make -j3" would create the missing file. + That was because help2man would invoke t/wrap/aclocal.in and + t/wrap/automake.in, each of which would require aclocal and + automake, yet those two files weren't guaranteed to be created. + Add explicit dependencies: + ($(srcdir)/doc/aclocal-$(APIVERSION).1): Depend on aclocal. + ($(srcdir)/doc/automake-$(APIVERSION).1): Depend on automake. + +2012-04-12 Stefano Lattarini + + news: remove older entry for "future backward incompatibilities" + + * NEWS (New in 1.11.4): Remove subsection about "Future backward + incompatibilities"; they are now either documented changes for the + upcoming 1.12 release, or re-casted as planned future backward + incompatibilities for the next 1.13 release. + +2012-04-12 Stefano Lattarini + + news: document fixes for bug#11222 and bug#11229 + + * NEWS (Bugs fixed in 1.11.5): New, documenting the fixes. + +2012-04-12 Stefano Lattarini + + Merge branch 'maint' + + * maint: + vala: fix distcheck with c/vala mixed projects + vala: fix vapi files handling + vala: test vapi files handling (still failing) + +2012-04-12 Stefano Lattarini + + Merge branches 'vala-fix-pr11222' and 'vala-fix-pr11229' into maint + + * vala-fix-pr11222: + vala: fix vapi files handling + vala: test vapi files handling (still failing) + + * vala-fix-pr11229: + vala: fix distcheck with c/vala mixed projects + +2012-04-12 Marc-Antoine Perennou (tiny change) + + vala: fix distcheck with c/vala mixed projects + + Fixes automake bug#11229. + + * automake.in (lang_vala_finish_target): Return early if the + current '_SOURCES' variable does not contain any '.vala' nor + '.vapi' source. Otherwise, the vala compiler will be called + without arguments, causing an error. + * tests/vala-mix.test: Enhance to catch the fixed bug. + +2012-04-12 Stefano Lattarini + + news: fix typo + + * NEWS (Changes to Automake-generated testsuite harnesses): It's + 'perl', not 'per'. Reported by Akim Demaille in a private mail. + +2012-04-12 Marc-Antoine Perennou (tiny change) + + vala: fix vapi files handling + + Fixes automake bug#11222. + + Issue introduced in commit 'v1.11-696-g51f61df' of 27-02-2012, + "vala: fix 'valac' calls for projects with mixed Vala/C", which + fixed automake bug#10894. + + * automake.in (lang_vala_finish_target): Also recognize '.vapi' + as an extension for vala input files. + * tests/list-of-tests.mk (XFAIL_TESTS): Remove 'vala-vapi.test'. + +2012-04-12 Stefano Lattarini (tiny change) + Marc-Antoine Perennou + + vala: test vapi files handling (still failing) + + Exposes automake bug#11222. + + * tests/vala-vapi.test: New test, still failing. + * tests/list-of-tests.mk (handwritten_TESTS): Add it. + (XFAIL_TESTS): Likewise. + * THANKS: Update. + +2012-04-11 Stefano Lattarini + + self checks: avoid spurious failures when keep_testdirs=yes + + * t/self-check-cleanup.tap, t/self-check-dir.tap: Unset the + 'keep_testdirs' environment variable, to avoid spurious errors + when the testsuite is run with "keep_testdirs=yes make check". + +2012-04-11 Stefano Lattarini + + fixup: some weaknesses in a self-check test case + + * t/self-check-cleanup.tap: This test contained several buglets + introduced in the recent row of commits that converted the Automake + build system to a non-recursive setup. Fix them. Since we are at + it, enhance the test to cover also the use of the 'keep_testdirs' + environment variable in order to keep the temporary test directories + around. + +2012-04-11 Stefano Lattarini + + maintcheck: avoid yet more spurious failures (2) + + Some maintainer checks were too greedy in processing 'Makefile.am' + files, looking for them even in temporary directories left behind + by the test cases, thus causing occasional spurious failures. + + * syntax-checks.mk (ams): Ignore 'Makefile.am' files in the + temporary test directories. + +2012-04-11 Stefano Lattarini + + maintcheck: avoid yet more spurious failures (1) + + The 'sc_tests_makefile_variable_order' maintainer check is too + strict sometimes, blaming automake for outputting out-of-order + variables when this is in fact due to the result of post-processing + of third-party tools or custom test code. + + * t/tap-doc2.sh: Ensure the final Makefile.in (that we hack by + hand) is removed, to avoid a spurious maintainer-check failure. + * t/gettext-macros.sh: Ensure that any leftover Makefile.in (that + is generated by gettext/autopoint) is removed, to avoid a spurious + maintainer-check failure. + +2012-04-11 Stefano Lattarini + + hacking: fixlets w.r.t. the release procedure + + * HACKING (Release procedure): Do not state that the result of + "make fetch" is woefully incomplete: this is not true anymore today. + Suggest to re-run the testsuite after a "make fetch", in case any + file has been updated. + +2012-04-11 Stefano Lattarini + + maintcheck: fix spurious failures + + * syntax-check.mk (sc_mkinstalldirs): Now the 'mkinstalldirs' is + listed in the top-level 'Makefile.am', not in 'lib/Makefile.am'; + adjust the "whitelist" accordingly. + (sc_ensure_testsuite_has_run): The 'test-suite.log' file created by + "make check" is now placed in the top-level directory, not in the + 't/' subdirectory. Adjust by using '$(TEST_SUITE_LOG)' instead of + an hand-crafted path for the 'test-suite.log' file. + +2012-04-11 Stefano Lattarini + + maint: version bump after beta release + + * configure.ac (AC_INIT): Bump version number to 1.11c, as per + HACKING suggestion. + * NEWS: Likewise. + * m4/amversion.m4: Likewise (autoupdated by ./bootstrap). + +2012-04-11 Stefano Lattarini + + Beta release 1.11b (will become 1.12) + + * configure.ac (AC_INIT): Bump version number to 1.11b. + * NEWS: Likewise. + * m4/amversion.m4: Likewise (autoupdated by ./bootstrap). + +2012-04-11 Stefano Lattarini + + sync: some auxiliary files synced from upstream + + * lib/texinfo.tex: Synced from upstream, by "make fetch". + * lib/INSTALL: Likewise. + +2012-04-11 Stefano Lattarini + + hacking: described new branching policy for 1.12 an later + + This change closes automake bug#11153. + + * HACKING (Working with git): Document the new policy for automake + branching and merging, which will start being applied after 1.12 is + released: + + - the maintenance branch will be 'maint', and we will cut the + maintenance releases directly from there; + + - the development branch will be 'master', and we will cut the + new releases directly from there; + + - 'maint' will be kept regularly merged into 'master'. + +2012-04-11 Stefano Lattarini + + vala tests: avoid spurious failure with older GObject + + * t/vala2.sh: In the 'PKG_CHECK_MODULES' call in 'configure.ac', + don't require gobject >= 2.10, but just >= 2.4: that is enough in + order for the test to pass. + * t/vala3.sh: Likewise. + * t/vala5.sh: Likewise. Also, skip the test instead of failing + if the ./configure invocation fails: that is likely due to the + fact that the GObject library is too old or missing, and that is + not automake's fault. + +2012-04-11 Stefano Lattarini + + vala tests: force the use of automatic dependency tracking + + * t/vala-mix2.sh: Invoke ./configure with the option + '--enable-dependency-tracking', so that slower dependency + extractors are not rejected. This avoids a spurious failure + at least on Solaris when the Sun C compiler is used. + +2012-04-11 Stefano Lattarini + + tests: avoid spurious failures in tests on C++ and lex + + This is a follow-up to commit v1.11-2128-g7f2bc63 of 09-04-2012, + "tests: avoid spurious failures with non-flex 'lex' programs and + C++". It is required to avoid a couple of spurious failures on + Solaris and NetBSD systems (at least). See also automake bug#11185. + + * t/lex-clean-cxx.sh (parsefoo.lxx): Do not declared the provided + dummy 'isatty' function as 'static', since that might conflict with + a declaration of it as 'extern' pulled in through other system + * t/lex-depend-cxx.sh (joe.ll): Likewise. + * t/README: Update advice, to avoid similar issues in the future. + +2012-04-11 Stefano Lattarini + + Merge branch 'rmch' + + * rmch: + maint: simplify generation of files with @substed@ stuff + t/README: update w.r.t. recent overhaul (non-recursive build system) + docs: fix names of relevant test cases in comments + NEWS: automake build systems avoids make recursion + maint: no more make recursion in Automake's build system + tests: rename 'tests/' => 't/', '*.test' => '*.sh' + tests: remove recipes that run tests with 'prove' + tests: move most helper scripts and files into the 'ax' subdirectory + +2012-04-09 Stefano Lattarini + Peter Rosin + + tests: avoid spurious failures with non-flex 'lex' programs and C++ + + This change fixes automake bug#11185. + + The commit v1.11-2058-g6f4b08d of 06-03-2012, "tests: explicitly + state that our lexers do not require unistd.h" has broken the tests + 'lex-clean-cxx.test' and 'lex-depend-cxx.test' on Solaris, where lex + is not flex and does not understand the "%option never-interactive" + directive. Remove the use of this directive, resorting to defining + a dummy 'isatty()' function instead to keep the flex-generated tests + able to compile also on MinGW/MSYS. + + * tests/lex-clean-cxx.test (parsefoo.lxx): Define a dummy 'isatty()' + function. + * tests/lex-depend-cxx.test (joe.ll): Likewise. + * tests/README: Adjust. Fix an unrelated typo since we are at it. + +2012-04-08 Stefano Lattarini + + tests: avoid a spurious failures for shells with busted 'set -e' + + Some versions of the BSD Korn shell wrongly bail out when the + 'errexit' shell flag is active and the left-hand command in a + "&&" list fails and that list is the *last* command of the body + of a "while" or "for" loop. + + * tests/install-info-dir.test: Work around that behaviour. + +2012-04-08 Stefano Lattarini + + maint: simplify generation of files with @substed@ stuff + + Use a proper "config.status --file=-" idiom to do most substitutions + in our generated files, to avoid too much duplications between the + various $(do_subst) commands in Makefile.am and the (explicit or + implicit AC_SUBST) invocation in configure.ac. + + From a suggestion by Eric Blake and Federico Simoncelli: + + + * Makefile.am (do_subst): Rewrite to take advantage of the + "config.status --file=-" idiom. + (generated_file_finalize): New, to help checking that generated + files don't contain unexpanded '@substitutions@', and are made + read-only. + (automake, aclocal): Take advantage of the improved $(do_subst). + Improve comments. + (lib/Automake/Config.pm): Likewise, and of the new variable + $(generated_file_finalize) as well. + ($(top_srcdir)/m4/amversion.m4): Likewise. + (defs-static): Likewise, and depend explicitly on 'Makefile'. + (do_subst_t): Remove as obsolete. + * THANKS: Update. + +2012-04-07 Stefano Lattarini + + tests: remove redundant requirement + + * tests/txinfo19.test ($required): Drop required "tex", it is not + really needed. + Add trailing ':' command since we are at it. + +2012-04-07 Stefano Lattarini + + tests: make two test scripts executable + + * tests/instdir-cond.test: Add executable bit. + * tests/instdir-cond2.test: Likewise. + +2012-04-06 Stefano Lattarini + + t/README: update w.r.t. recent overhaul (non-recursive build system) + + And other miscellaneous improvements since we are at it. + +2012-04-06 Stefano Lattarini + + docs: fix names of relevant test cases in comments + + * doc/automake.texi: In comments reporting which test(s) check a + given feature/idiom, fix the names of the referenced tests, to + reflect the recent 'tests/foo.test' => 't/foo.sh' "Great Rename". + +2012-04-06 Stefano Lattarini + + NEWS: automake build systems avoids make recursion + +2012-04-06 Stefano Lattarini + + maint: no more make recursion in Automake's build system + + We finally merge testsuite-related part of the Automake build + system with the top-level one. See also yesterday's commit + 'v1.11-2124-ga4b0f4b', "maint: remove most recursion in automake's + own build system". + + * t/gen-testsuite-part: Move ... + * gen-testsuite-part: ... here, with required adjustments. + * t/defs-static.in: Move ... + * defs-static.in: ... here, with required adjustments. In + particular ... + ($testsrcdir, $testbuilddir): Removed. + ($top_testsrcdir): Renamed ... + ($am_top_srcdir): ... to this. + ($top_testbuilddir): Renamed ... + ($am_top_builddir): ... to this. + * t/defs: Move ... + * defs: ... here, and adjust as required. + * t/Makefile.am: Merge ... + * Makefile.am: ... in here, with related adjustments and + simplifications. + * bootstrap: Adjust as required. + * syntax-checks.mk: Likewise. + * .gitignore: Likewise. + * t/ax/tap-setup.sh: Likewise. + * t/get-sysconf.sh: Likewise. + * t/help-multilib.sh: Likewise. + * t/multlib.sh: Likewise. + * t/parallel-tests2.sh: Likewise. + * t/self-check-cleanup.tap: Likewise. + * t/self-check-exit.tap: Likewise. + * t/self-check-dir.tap: Likewise. + * t/self-check-explicit-skips.sh: Likewise. + * t/self-check-reexec.tap: Likewise. + * t/self-check-sanity.sh: Likewise. + * t/yacc-d-cxx.sh: Likewise. + +2012-04-06 Stefano Lattarini + + tests: rename 'tests/' => 't/', '*.test' => '*.sh' + + When we (soon) convert the Automake testsuite to a non-recursive + make setup, we'll have to fix the entries of $(TESTS) to be + prepended with the subdirectory they are in; this will increase + the length of $(TESTS), and thus increase the possibility of + exceeding the command-line length limits on some systems (most + notably, MinGW/MSYS). See automake bug#7868 for more information. + + Thus we rename the 'tests/' subdirectory to 't/', and each 'x.test' + script in there to 'x.sh'; this way, the $(TESTS) entry 'foo.test' + will become 't/foo.sh', which have the same number of characters. + + * tests/: Rename ... + * t/: ... to this. + * t/*.test: Rename ... + * t/*.sh: ... to this. + * t/.gitignore: Removed as obsolete. + * t/defs: Adjust. + * t/gen-testsuite-part: Likewise. + * t/list-of-tests.mk: Likewise. + * t/ccnoco.sh: Likewise. + * t/ccnoco3.sh: Likewise. + * t/self-check-cleanup.tap: Likewise. + * t/self-check-dir.tap: Likewise. + * t/self-check-me.tap: Likewise. + * t/self-check-reexec.tap: Likewise. + * README: Likewise. + * bootstrap: Likewise + * configure.ac: Likewise. + * Makefile.am: Likewise. + * .gitignore: Likewise. + * syntax-check.mk: Likewise. + +2012-04-06 Stefano Lattarini + + tests: remove recipes that run tests with 'prove' + + Those recipes has served its purpose by helping us during the + development of TAP support in Automake, to ensure our TAP driver + didn't have gratuitous incompatibilities with the 'prove' test + runner. But they are now unused, out-of-date and bitrotting. So + it's better to just remove them. We can resurrect them at a later + time if the need arises. + + * tests/Makefile.am (PROVE, AM_PROVEFLAGS, AM_PROVECMD): Remove + these variables. + (prove, installprove): Remove these targets and their recipe. + (EXTRA_DIST): Don't distribute 'ax/prove-runner' anymore. + * ax/prove-runner: Delete. + +2012-04-06 Stefano Lattarini + + tests: move most helper scripts and files into the 'ax' subdirectory + + * tests/defs-static.in ($am_testauxdir): New variable. + * tests/testsuite-summary-checks.sh: Moved ... + * tests/ax/testsuite-summary-checks.sh: ... here. + * tests/trivial-test-driver: Moved ... + * tests/ax/trivial-test-driver: ... here. + * tests/tap-summary-aux.sh: Moved ... + * tests/ax/tap-summary-aux.sh: ... here. + * tests/distcheck-hook-m4.am: Moved ... + * tests/ax/distcheck-hook-m4.am: ... here. + * tests/prove-runner: Moved ... + * tests/ax/prove-runner: ... here. + * tests/depcomp.sh: Moved ... + * tests/ax/depcomp.sh: ... here. + * tests/tap-setup.sh: Moved ... + * tests/ax/tap-setup.sh: ... here. + * tests/tap-functions.sh: Moved ... + * tests/ax/tap-functions.sh: ... here. + * tests/plain-functions.sh: Moved ... + * tests/ax/plain-functions.sh: ... here. + * tests/extract-testsuite-summary: Moved ... + * tests/ax/extract-testsuite-summary.pl: .. . here. + * tests/gen-testsuite-part: Adjusted accordingly. + * tests/Makefile.am: Likewise. + * tests/defs: Likewise. + * syntax-check.mk: Likewise. + * Several tests: Likewise. + +2012-04-05 Stefano Lattarini + + maint: remove most recursion in automake's own build system + + Recursive make-based build systems tend to be slower, more fragile + and less faithful than "flat" ones. See Peter Miller's article + "Recursive Make Considered Harmful" for more a more in-depth + discussion: + + + + While in the case of automake this isn't a big problem (given the + small size of its build systems), it still creates occasional + glitches and annoyances. + + With this change, the use of recursion in Automake's own build + system is eliminated *but for the testsuite*. Converting that + is a little more tricky, and better left for a later change (or + series of changes). + + See also commit v1.11-769-gfeeb7f6 of 28-03-2012. + + * contrib/Makefile.am, lib/Makefile.am, m4/Makefile.am, + doc/Makefile.am: Removed, their content merged ... + * Makefile.am: ... here, with required adjustments and few + other "opportunistic" changes. + (SUBDIRS): Update. + * configure.ac (AC_CONFIG_FILES): Likewise. + * .gitignore: Likewise. + +2012-04-05 Stefano Lattarini + + tests: fix a spurious failures with non-GNU make + + * tests/instdir-no-empty.test: Also pass proper AM_MAKEFLAGS to + make invocations that might recurse, to ensure the macro definitions + passed from the command line are properly propagated. + +2012-04-04 Stefano Lattarini + + texinfo: warn about future use of '--tidy' + + Starting from the next major release of Automake (likely 1.13) we + want to start passing the '--tidy' option to texi2dvi and texi2pdf + invocations, so that auxiliary TeX-generated files can be kept + around (thus speeding up rebuilding of DVI and PDF output) without + cluttering the build directory too much. + + Since the '--tidy' option was introduced in Texinfo 4.9 (as + documented in the Texinfo distribution's NEWS file), this also + means that Makefiles generated by future Automake versions will + require at least that version of Texinfo (at the time of writing + four years and nine months old). + + The users should be warned about the planned behavioral change + and the new version requirement it will entail. + + See also automake bug#11146. + + * NEWS (Planned Backward Incompatibilities): Add entry about use + of the '--tidy' option and requirement of Texinfo 4.9. + +2012-04-04 Stefano Lattarini + + texinfo: don't clutter the builddir when using modern texi2dvi + + In modern versions of texi2dvi (at least since version 1.135, which + comes with Texinfo 4.13) the '-o' option does not imply anymore the + '--clean' option. As a consequence, lots of TeX-generated auxiliary + files are now left in the build directory by the 'pdf', 'ps' and + 'dvi' rules. + + This is especially annoying with non-recursive setups having the + '.texi' files in a subdirectory, as in: + + info_TEXINFOS = doc/foo.texi + + In this case, the stray auxiliary files are left in the top build + directory (since TeX is run from there). See for example: + + + + See also automake bug#11146. + + * lib/am/texibuild.am: Call 'texi2dvi' and 'texi2pdf' with the + '--clean' option. Update comments accordingly. + * tests/txinfo-noclutter.test: New test. + * tests/txinfo18.test: Remove as obsolete, the still relevant parts + of it moved into the new test. + * tests/list-of-tests.mk: Adjust. + * NEWS: Update. + +2012-04-02 Stefano Lattarini + + hacking: autotools-generated files are not committed anymore + + * HACKING (Working with git) Generated files like 'configure', + 'Makefile.in' and 'aclocal.m4' are not committed anymore in our + git repository since some months. Remove obsoleted advices that + assumed they still were. + +2012-04-02 Stefano Lattarini + + hacking: simplify documentation of bootstrapping process + + * HACKING (Working with git): Do not suggest that, to ensure the + bootstrapping process is performed with the latest autotools, the + developer could explicitly pass $AUTOCONF and $AUTOM4TE in the + environment to the ./bootstrap and ./configure invocations: that + is a little tricky and quite fragile. Instead, suggest to just + put modern-enough version of the autotools early in PATH. + +2012-04-01 Stefano Lattarini + + cosmetics: remove repeated line in comment, fix quoting + + * automake.in: Drop a repeated line in a comment. In the same + comment, prefer quoting 'like this' rather than `like this'. + Issue introduced in one of the commits that converted from quoting + `like this' to quoting 'like this'. + +2012-03-31 Stefano Lattarini + + cosmetics: remove useless import in automake script + + * automake.in (Automake::Version): This import is not needed; + remove it. + +2012-03-31 Stefano Lattarini + + Merge branch 'maint' + + * maint: + docs: deprecate 'cygnus' mode, help the transition + +2012-03-31 Stefano Lattarini + + docs: deprecate 'cygnus' mode, help the transition + + Support for "Cygnus-style" trees (so far enabled by the 'cygnus' + option) will be deprecated in one release of the next major series + (1.12.x) and removed in the next major release after that (1.13). + Better to start warning about this in the manual. + + * docs/automake.texi: Warn about the oncoming deprecation of the + 'cygnus' mode. Suggest some idioms that can be used to retain some + effects of the 'cygnus' option. + * THANKS: Update. + + From a suggestion by Joseph S. Myers in automake bug#11034. + +2012-03-29 Stefano Lattarini + + perl refactor: use modern semantics of 'open' + + * lib/Automake/XFile.pm: Update comments and POD documentation to + suggest a more idiomatic/modern usage. + (open): Be more robust in detecting whether the created file handle + is being opened for writing. + * lib/Automake/FileUtils.pm (update_file, contents): Call the + 'Automake::XFile' and 'File::IO' constructors with two arguments + rather than one; this change obsoletes ... + (open_quote): ... this subroutine, which has thus been removed. + (@EXPORT): Drop '&open_quote'. + +2012-03-28 Stefano Lattarini + + Merge branch 'maint' + + * maint: + cosmetics: don't make the generated Config.pm executable + maint: reduce use of recursion in automake build system + + + Extra non-trivial extra edits follows. + + * lib/Makefile.am (amdir): Deleted this definition, it is already + provided by a proper AC_SUBST in configure.ac. + (dist_am_DATA): Remove 'am/ansi2knr.am', 'am/check-html.am' and + 'am/multilib.am'. + (dist_perllib_DATA): Remove 'Automake/Struct.pm'. + +2012-03-28 Stefano Lattarini + + cosmetics: don't make the generated Config.pm executable + + * lib/Makefile.am (Automake/Config.pm): Don't make this executable, + there's not need for it to be (it's a perl module, not a script). + +2012-03-28 Stefano Lattarini + + maint: reduce use of recursion in automake build system + + Recursive make-based build systems tend to be slower, more fragile + and less faithful than "flat" ones. See Peter Miller's article + "Recursive Make Considered Harmful" for more a more in-depth + discussion: + + + + While in the case of automake this isn't a big problem (given the + small size of its build systems), it still creates occasional + glitches and annoyances. So, with this change, we start making + less use of make recursion in the Automake's own build system + (future changes will reduce it even more). + + * lib/am/Makefile.am, lib/Automake/Makefile.am: Removed, their + content merged ... + * lib/Makefile.am: ... here, with required adjustments. + * configure.ac (AC_CONFIG_FILES): Update. + +2012-03-28 Stefano Lattarini + + news: sync with branch-1.11, fix mis-merges + +2012-03-28 Stefano Lattarini + + acinstall: remove, it has never been really used + + Accordingly to the git history (see for example the 'README-alpha' + in commit 'Release-1-1e-39-g9beb4ec' of 06-10-1996), the 'acinstall' + script should have been used to install m4 files for aclocal. The + comments in this script report that "... A script is needed to do + this because we want to do serial-number checking; newer versions + of macro files should always be preferred". + + But the 'acinstall' script has never been really used: for example, + the entry "actually use acinstall program" was removed (unfixed) + from the TODO file in commit 'Release-1-1k-12-g1201405' of + 08-12-1996, and the only citation of 'acinstall' in the manual was + removed in commit 'Release-1-1l-37-g128c3d7' of 19-03-1997, and + never added back. In addition, the last non-trivial edit to the + script (that is, besides updates to the copyright notice) dates + back to 1996. + + More importantly, now that aclocal supports the ACLOCAL_PATH + environment variable, installing m4 files directly in the + system-wide acdir is discouraged, and better left only to + distros' package managers (which already have their own way to + do so, with which third-party build systems should not directly + meddle). + + So we just remove the 'acinstall' script. + + * lib/acinstall: Remove. + * lib/Makefile.am (dist_script_DATA): Update. + +2012-03-28 Stefano Lattarini + + maint: reorganize the source tree and make it less cluttered + + * TODO: Move ... + * old/TODO: ... here. This is done because this file is quite + outdated, and today TODO and wishlist items are better handled + though the debbugs tracker. + * ChangeLog.00: Move ... + * old/ChangeLog.00: ... here. + * ChangeLog.01: Move ... + * old/ChangeLog.01: ... here. + * ChangeLog.02: Move ... + * old/ChangeLog.02: ... here. + * ChangeLog.03: Move ... + * old/ChangeLog.03: ... here. + * ChangeLog.04: Move ... + * old/ChangeLog.04: ... here. + * ChangeLog.09: Move ... + * old/ChangeLog.09: ... here. + * ChangeLog.11: Move ... + * old/ChangeLog.11: ... here. + * ChangeLog.96: Move ... + * old/ChangeLog.96: ... here. + * ChangeLog.98: Move ... + * old/ChangeLog.98: ... here. + * tests/ChangeLog-old: Move ... + * old/ChangeLog-tests: .. here. + * tests/Makefile.am (EXTRA_DIST): Adjust. + * Makefile.am (EXTRA_DIST): Likewise. + * .autom4te.cfg: New file, instructing the autotools to place the + autom4te cache directory in '.autom4te.cache' rather than in + 'autom4te.cache'. + * .gitignore: Adjust. + * Makefile.am (maintainer-clean-local): Remove the '.autom4te.cache' + directory. + +2012-03-27 Stefano Lattarini + + news: we are going to drop 'cygnus' soonish + + * NEWS (Future backward incompatibilities): Support for + "Cygnus-style" trees (so far enabled by the 'cygnus' option) + will be deprecated in the next minor release and removed in + in the next major release. + +2012-03-27 Stefano Lattarini + + Merge branch 'maint' + + * maint: + depcomp: support tcc (Tiny C Compiler) + tests: workaround for automatic linker determination and conditionals + info: allow user to inhibit pruning of '${infodir}/dir' + vala tests: fix spurious failures with older valac (<= 0.7.2) + tests: fix a timestamp issue, and other minor buglets + tests: fix spurious failure with older autoconf + build: remove duplicated entries in $(TESTS) + + + Extra non-trivia edits: + * tests/link_cond.test: Use 'configure.ac', not 'configure.in'. + +2012-03-27 Stefano Lattarini + + depcomp: support tcc (Tiny C Compiler) + + This change fixes automake bug#11007. + + Since git commit 0c928da9 of 21-06-2010, "tcc: Draft suppoprt for + -MD/-MF options" (sic, with typo in summary line), tcc has supported + automatic dependency generation with a command-line interface + similar to what old (pre-8.0) Intel compilers did. This caused + Automake-generated code for automatic dependency tracking to + recognize tcc dependency style as "icc". However, the format of + the dependency files generated by tcc is apparently different enough + from that of icc to cause spurious failures in the post-processing + operated by our 'depcomp' script on such files. + + The failure was exposed with the development version of tcc 0.9.26 + (as installed with debian package "tcc 0.9.26~git20120104.83d") by + test case 'depcomp-auto.tap' (available only in the master branch). + + * lib/depcomp (icc): Cater to tcc as well. Update comments + accordingly. + * NEWS: Update. + +2012-03-27 Stefano Lattarini + + tests: workaround for automatic linker determination and conditionals + + See automake bug#11089. + + Automake is not very smart in automatically determining the command + to be used to link a program whose source files' languages are + conditionally defined. For example, an input like: + + if HAVE_CXX + foo_SOURCES = more.c++ + else + foo_SOURCES = less.c + endif + + will cause the build rules for 'foo' to *unconditionally* use the + C++ compiler for linking, even when the 'HAVE_CXX' conditional + evaluates to false (which might mean that no C++ compiler is + available). + + This behaviour is not really correct, but it's easy enough to work + around, and it's only relevant for fringe use cases (at best). So + let's just test that the workaround really works. + + * tests/link_cond.test: New test. + * tests/list-of-tests.mk: Add it. + * THANKS: Update. + +2012-03-27 Stefano Lattarini + + info: allow user to inhibit pruning of '${infodir}/dir' + + This should have ideally been part of commit 'v1.11-519-g1ec1668' + of 23-11-2011 "info: allow user to inhibit creation/update of + '${infodir}/dir'". Well, better late than never. + + * lib/am/texinfos.am (uninstall-info-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'. To avoid code duplication with ... + (install-info-am): ... the recipe of this target, move common code + out to ... + (am__can_run_installinfo): ... this new internal variable. + * tests/install-info-dir.test: Enhance. + * doc/automake.texi (Texinfo): Update. + * NEWS: Likewise. + +2012-03-26 Bruno Haible + Stefano Lattarini + + vala tests: fix spurious failures with older valac (<= 0.7.2) + + See automake bug#11093. + + The Vala compiler before the 0.7.3 release does not support the + '--profile' option. But some of our tests were relying on it, so + skip those tests if the detected Vala compiler is too old. + + * tests/vala-vpath.test, tests/vala-mix.test, tests/vala-mix2.test + (configure.in): Require vala version >= 0.7.3 in AM_PROG_VALAC call. + +2012-03-26 Stefano Lattarini + + tests: fix a timestamp issue, and other minor buglets + + Cherry picked from commit v1.11-1988-g82616f0 of 21-02-2012. + + Reported by Panther Martin in automake bug#10848. See also + automake bug#11093. + + * tests/conffile-leading-dot.test: Add a proper '$sleep' invocation, + to avoid spurious failures on fast systems without sub-second + timestamp resolutions. Add other minor related and unrelated + improvements and fixlets since we are at it. + +2012-03-26 Stefano Lattarini + + tests: fix spurious failure with older autoconf + + Cherry picked from commit v1.11-1950-gba5a89b of 16-02-2012. + + * tests/conffile-leading-dot.test: Relax grepping of 'config.status' + stderr, to cater for older autoconf. Issue revealed by a failure + with autoconf 2.63 on Cygwin 1.5.25. See also automake bug#11093. + +2012-03-24 Stefano Lattarini + + fixup: update THANKS + + * THANKS: Add entry for Tim Landscheidt. + +2012-03-24 Stefano Lattarini + + docs: terminate unfinished sentence, fix reference to a test case + + * doc/automake.texi (Using the TAP test protocol): Here. + +2012-03-24 Tim Landscheidt (tiny change) + + docs: fix some small typos and grammaros + + * doc/automake.texi (Using the TAP test protocol): Here ... + * tests/tap-doc2.test: ... and here. + +2012-03-24 Stefano Lattarini + + build: remove duplicated entries in $(TESTS) + + * tests/list-of-tests.mk (handwritten_TESTS): Remove duplicated + entries for test cases 'extra-portability*.test'. + +2012-03-23 Stefano Lattarini + + maint: update TODO file + + We don't have to make creation of $(foodir) conditional when + foo_PRIMARY is conditionally defined; that has been solved in + a more sweeping way by commit v1.11-759-g368f1c4 of March 18, + which solved bug#11030 and bug#10997. + + The "check" target already depends on the "all" target. + + Remove comment "investigate problems with conditionally defined + libraries"; it is aimed at automake 1.5 (!) and too terse and old + to be useful now. + + Remove the 12 years old suggestion that "distcheck should make sure + that each file that uses _() is listed in POTFILES.in"; this is + handled by gnulib-provided syntax check 'sc_po_check' already today. + + Don't tell to "Run automake before libtool"; automake does not + automatically run libtool anymore today. + + Remove hint about the possibility to "rewrite automake in guile" or + "add a GUI": we are not going to do so. + + The automatic de-ANSI-fication feature has already been remove, so + no need to suggest its potential removal in the future. + + Remove reference to a prospective "cvs" option that could add some + cvs-specific rules. First of all, CVS is falling out of use today. + Secondly, and most to the point, instead of guessing which VCS + is going to be most popular and try to hack support for it into + automake, we should leave it to developer-specific makefile + fragments offered by projects like Gnulib to provide such rules + (they are already doing so with succcess). + + About DOS support: it should actually be dropped, not extended. + + Add link about Karl Berry's proposal of preferring HTML over Info + documentation installed in the local system: + + + Remove items about "beautification" of output Makefile.in; they + are pretty obvious, and mostly noise (after all, everybody prefers + clean output where possible). Leave it to any developer doing + future refactorings to find out low-hanging and/or high-impact + optimizations and beatifications of the generated Makefiles. + + Remove item about internationalization: we're not going to + implement it. + + Remove an item explicitly marked as "not that it matters". + + The order of files in a distribution tarball does not really + matter, nobody has ever complained about it, so do not worry + about it. + + Remove the suggestions about allowing hierarchy of dirs to share + one aclocal.m4 and about printing full file name of Makefile.am + or configure.in when giving error, in order to help very large + trees: nobody has ever complained about the current behaviours, + so no real need to change them. + +2012-03-21 Stefano Lattarini + + fixup: bootstrapping issues with 'list-of-tests.mk' + + * tests/list-of-tests.mk: This file is expected to be executed + directly with make from the bootstrap script, so we can't use + Automake '##' comments after line continuations. + +2012-03-21 Stefano Lattarini + + Merge branch 'maint' + + * maint: + maint: move definition of XFAIL_TESTS near TESTS + + Actually, after the trivial merge conflicts have been solved, what + this change actually does is moving the definition of XFAIL_TESTS + near that of handwritten_TESTS. But the rationale is the same of + that of commit 'v1.11-761-gabf40ce' (being merged here), and still + works, so all is good. + +2012-03-21 Stefano Lattarini + + maint: move definition of XFAIL_TESTS near TESTS + + The $(TESTS) variable is defined in file 'tests/list-of-tests.mk', + while the $(XFAIL_TESTS) variable is defined in 'tests/Makefile.am'. + This means that when a new xfailing test is to be added, two files + must be touched; this is suboptimal and slightly confusing. + + * tests/Makefile.am (XFAIL_TESTS): Definition moved ... + * tests/list-of-tests.mk: ... here. + +2012-03-19 Stefano Lattarini + + tests: fix spurious failures caused by uses of 'configure.in' + + Issue introduced by the recent merges of maint into master, and + revealed by "make maintainer-check". + + * tests/aclocal-install-fail.test: Likewise. + * tests/aclocal-install-mkdir.test: Likewise. + * tests/aclocal-verbose-install.test: Likewise. + * tests/installdir.test: Likewise. + * tests/instdir-cond2.test: Likewise. + * tests/instdir-no-empty.test: Likewise. + * tests/python-pr10995.test: Likewise. + * tests/aclocal-no-install-no-mkdir.test: Likewise. + +2012-03-18 Stefano Lattarini + + Merge branch 'maint' + + * maint: + install-mans: avoid spurious failure with NetBSD make + install: don't create empty dirs when an empty 'foo_PRIMARY' is used + aclocal: remove a couple of useless imports + aclocal: create local directory where to install m4 files + +2012-03-18 Stefano Lattarini + + install-mans: avoid spurious failure with NetBSD make + + * lib/am/mans.am: After the changes introduced by previous commit + v1.11-759-g368f1c4, some manpage installation recipes started to + fail spuriously on NetBSD 5.1 make. Apparently, the system make + there eats backslashes used to escape whitespace characters in the + relevant recipes. Revert to slightly slower but safer idioms that + avoid the need of such escaping. + +2012-03-18 Stefano Lattarini + + install: don't create empty dirs when an empty 'foo_PRIMARY' is used + + Fixes automake bug#11030 and bug#10997. + + An empty declaration of "foo_PRIMARY" in a Makefile.am used to + cause the generated install rules to create the directory $(foodir) + anyway, even if nothing was to be installed there. + + While this could be seen as a convenient way to create a $(foodir) + directory upon "make install" (respecting $(DESTDIR) settings and + such), it also caused problems with conditionals; for example, an + input of: + + if FALSE + pgkdata_DATA = something + endif + + caused the generated install rules to unconditionally create the + $(pkgdatadir) directory (see automake bug#10997). + + Also, a user wanting to create an empty directory upon installation + can easily do so with a custom install hook, as in: + + installdirs-local: + $(MKDIR_P) $(DESTDIR)$(foodir) + install-data-hook: installdirs-local + + On the other hand, the old behavior of "always create $(foodir), + even if 'foo_PRIMARY' is empty" was harder and more tricky to + override. + + Thus, from now on, an empty declaration of "foo_PRIMARY" will not + cause the directory $(foodir) to be created upon "make install" + anymore. + + * lib/am/data.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: Adjust install rules to avoid + creating an installation directory if no files are actually to be + installed there. + * tests/instdir-empty.test: Remove, it was testing a semantic + opposite to the one we now want and implement. + * tests/instdir-no-empty.test: New test, check the new semantic. + * tests/instdir-cond.test: Enhance. Move the still-failing part + of the test ... + * tests/instdir-cond2.test: ... here. + * tests/list-of-tests.mk, tests/Makefile.am (XFAIL_TESTS): Update. + * tests/java3.test: Adjust to avoid spurious failures. + * HACKING, NEWS, THANKS: Update. + +2012-03-17 Stefano Lattarini + + aclocal: remove a couple of useless imports + + * aclocal.in (File::stat, Cwd): Remove these imports, they are not + really required. + +2012-03-16 Stefano Lattarini + + aclocal: create local directory where to install m4 files + + Fixes automake bug#8168 and bug#10816. + + A call like "aclocal -I m4 --install" used to fail if the 'm4' + directory wasn't pre-existing. This could be particularly + annoying when running in a checked-out version from a VCS like + git, which doesn't allow empty directories to be tracked. + + * aclocal.in (File::Path): New import. + (scan_m4_dirs): Don't die if the first directory of type FT_USER + doesn't exist and the '--install' option was given; that directory + will be created later ... + (install_file): ... here. Change signature of this function: now + it takes as second argument the destination directory rather than + the destination file. Crate the destination directory if it + doesn't already exist. In verbose mode, tell what is being copied + where. + (write_aclocal): Update to the changes in 'install_file'. + * NEWS, THANKS: Update. + * tests/aclocal-install-fail.test: New test. + * tests/aclocal-install-mkdir.test: Likewise. + * tests/aclocal-no-install-no-mkdir.test: Likewise. + * tests/aclocal-verbose-install.test: Likewise. + * tests/list-of-tests.mk: Add them. + +2012-03-15 Stefano Lattarini + + Merge branch 'maint' + + * maint: + python: avoid failures due to $(am__py_compile) being undefined + python: expose automake bug#10995 + +2012-03-15 Steven Drake (tiny change) + + python: avoid failures due to $(am__py_compile) being undefined + + Fixes automake bug#10995, introduced in commit v1.11-372-gb46debf. + + * lib/am/python.am: Move the definition of 'am__py_compile' to + ensure it is always emitted in the output Makefile.in. Previously, + this wouldn't have happened if the input Makefile.am contained a + 'noinst_PYTHON' declaration before a 'python_PYTHON' one. + * tests/Makefile.am (XFAIL_TESTS): Remove 'python-pr10995.test' and + 'python.test'. + * NEWS: Update. + +2012-03-15 Stefano Lattarini + + python: expose automake bug#10995 + + * tests/python.test: Expose the bug in grepping tests. + * tests/python-noinst.test: New functional test to expose the + bug. + * tests/list-of-tests.mk: Add it. + * tests/Makefile.am (XFAIL_TESTS): Add the new test and the + extended one. + * THANKS: Update. + +2012-03-14 Stefano Lattarini + + tests: one more use of 'unindent' function + + * tests/yacc-d-cxx.test (write_parse, write_main): Use 'unindent' + instead of ad-hoc sed invocation to strip extra leading whitespace. + +2012-03-14 Stefano Lattarini + + tests: remove redundant 'set -e' calls + + * tests/dist-pr109765.test: Do not set the 'errexit' shell flag, + as it is already set by 'tests/defs'. + * tests/instdir-cond.test: Likewise. + * tests/instdir-empty.test: Likewise. + * tests/lex-clean-cxx.test: Likewise. + * tests/lex-clean.test: Likewise. + * tests/lex-depend-cxx.test: Likewise. + * tests/lex-depend.test: Likewise. + * tests/lex-line.test: Likewise. + * tests/lex-nodist.test: Likewise. + * tests/lex-pr204.test: Likewise. + * tests/silent-lex.test: Likewise. + * tests/silent-yacc-headers.test: Likewise. + * tests/silent-yacc.test: Likewise. + * tests/vala-mix2.test: Likewise. + * tests/yacc-auxdir.test: Likewise. + * tests/yacc-bison-skeleton-cxx.test: Likewise. + * tests/yacc-bison-skeleton.test: Likewise. + * tests/yacc-clean-cxx.test: Likewise. + * tests/yacc-cxx.test: Likewise. + * tests/yacc-d-cxx.test: Likewise. + * tests/yacc-deleted-headers.test: Likewise. + * tests/yacc-depend.test: Likewise. + * tests/yacc-depend2.test: Likewise. + * tests/yacc-line.test: Likewise. + * tests/yacc-mix-c-cxx.test: Likewise. + * tests/yacc-weirdnames.test: Likewise. + +2012-03-14 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: avoid spurious failures in get-sysconf.test + scripts: bump the depcomp scriptversion + sync: some auxiliary files synced from upstream + coverage: an empty foo_PRIMARY should create directory $(foodir) + coverage: make sure am__py_compile is defined when needed + coverage: expose automake bug#10997 + coverage: expose automake bug#10975 + getopt: relax version requirement for perl + + + Extra non-trivial edits: + + * tests/dist-pr109765.test: Use 'configure.ac', not 'configure.in'. + * tests/instdir-cond.test: Likewise. + * tests/instdir-empty.test: Likewise. + +2012-03-14 Stefano Lattarini + + tests: fix spurious failure with older m4 + + Reported by Panther Martin in automake bug#10866, diagnosed by + Panther Martin and Eric Blake. + + Older GNU m4 versions (e.g., 1.4.6) did error reporting at the end + of an error construct rather than the beginning. This was causing + a spurious testsuite failure due to an off-by-one error in the line + number reported in an aclocal diagnostic. + + * tests/cond41.test: Keep all the body of the 'AM_COND_IF' + invocation on a single line, to avoid the off-by-one error. + +2012-03-14 Stefano Lattarini + + tests: avoid spurious failures in get-sysconf.test + + This change fixes the last bit of automake bug#10866. + + * tests/get-sysconf.test: When Homebrew spawns a build, even if + from a project's VCS, it stages the files in a new temporary + directory, instead of building directly from a VCS checkout. + This behaviour was causing a spurious failure in this test, which + expected to find either a ChangeLog file or a .git directory in + the source directory (the former happening when the test was run + from a distribution tarball, the latter when it was run from a + git checkout). The Homebrew issue shows that these expectations + are not truly warranted, so relax the test to just give a warning, + not a failure, in case they do not hold. Since we are at it, fix + an unrelated weakness in the displaying of the git log, which + could have failed when the builddir was not a subdirectory of the + srcdir. + +2012-03-12 Peter Rosin + + scripts: bump the depcomp scriptversion + + * lib/depcomp (scriptversion): Bump, to account for recent changes. + +2012-03-12 Stefano Lattarini + + sync: some auxiliary files synced from upstream + + * lib/texinfo.tex: Synced from upstream, by "make fetch". + * lib/config.guess: Likewise. + * lib/config.sub: Likewise. + * lib/gnupload: Likewise. + +2012-03-12 Stefano Lattarini + + coverage: an empty foo_PRIMARY should create directory $(foodir) + + For example, a Makefile.am containing the definition: + + pkgdata_DATA = + + should cause the 'install' rule of the generated Makefile.in to + create the '$(pkgdatadir)' directory (respecting any DESTDIR + setting as well). + + Suggestion by Peter Breitenlohner in automake bug#10997. + +2012-03-12 Stefano Lattarini + + coverage: make sure am__py_compile is defined when needed + + See automake bug#10995. + + * tests/python.test: Also make sure 'am__py_compile' is defined + correctly in the generated Makefile.in. + +2012-03-12 Daiki Ueno (tiny change) + + coverage: expose automake bug#10997 + + * tests/instdir-cond.test: New test. + * tests/list-of-tests.mk: Add it. + * tests/Makefile.am (XFAIL_TESTS): Likewise. + +2012-03-09 Stefano Lattarini + + coverage: expose automake bug#10975 + + * tests/dist-pr10975.test: New test. + * tests/list-of-tests.mk: Add it. + * tests/Makefile.am (XFAIL_TESTS): Likewise. + +2012-03-07 Stefano Lattarini + + getopt: relax version requirement for perl + + * lib/Automake/Getopt.pm: Require perl 5.6.0, not 5.6.2: the former + is enough. See also commit 'v1.11-2054-g7df05a0' on master (dated + 04-03-2012). + +2012-03-07 Stefano Lattarini + + Merge branch 'maint' + + * maint: + cosmetics: fix repeated changelog entry heading + +2012-03-07 Stefano Lattarini + + cosmetics: fix repeated changelog entry heading + +2012-03-07 Peter Rosin + + Merge branch 'maint' + +2012-03-07 Peter Rosin + + Merge branch 'msvc' into maint + + This merge remedies the confusing situation that some changes + destined for both the master branch and the release branch (a.k.a. + branch-1.11) currently needs to be made on the non-obvious msvc + branch and not on the more natural maint branch. This has caused + a seemingly endless string of less than optimal commits. + + The reason for the confusion stems from the fact that the changes made + on the msvc branch became too radical and was considered only suitable + for the master branch, and was thus written in a form suitable for + master and then merged there. Later, the msvc branch was merged + directly into branch-1.11, in order to rush the new features to the + market and to keep the released scripts (lib/ar-lib, lib/compile and + lib/depcomp) consistent with those on the master branch. However, + some changes had to be made to the features added by the msvc branch + in order for them to fit the requirements of branch-1.11, notably that + the warnings issued in the extra-portability class cannot be enabled + by -Wall in the 1.11.x maintenance releases. + + In retrospect, it would have been better to not merge msvc directly + into branch-1.11, but instead do it via the maint branch (followed up + with a dummy merge from maint into master) the moment it was decided + that the msvc changes should make it into branch-1.11. + + All in all, this merge is going to affect neither the master branch + nor branch-1.11, since it is followed up with dummy merges masking all + changes. The merge is made to maintain the sanity of the poor + developers, who wishes to once again have a working maint branch. + + Discussion about merging the msvc branch into branch-1.11: + http://lists.gnu.org/archive/html/automake/2011-10/msg00030.html + + Discussion about why this merge hasn't happened before: + http://lists.gnu.org/archive/html/automake/2011-12/msg00051.html + + Extra edits below. + + * lib/Automake/ChannelDefs.pm: Use the version from branch-1.11. + * tests/ar-lib3.test: Likewise. + * tests/ar-lib4.test: Likewise. + * tests/extra-portability.test: Likewise. + * tests/extra-portability2.test: Likewise. + * tests/extradep.test: Likewise. + * tests/extradep2.test: Likewise. + * tests/list-of-tests.mk: Likewise. + * HACKING: Backport the version from branch-1.11 while at it (as the + change on branch-1.11 is also present on master via an unrelated + commit), even though this change has nothing to do with the changes + on the msvc branch. + +2012-03-07 Stefano Lattarini + + tests: remove useless sleep from tests on remake rules + + The sleeps were there to make generated autotools files strictly + newer than their sources; however, this is not necessary, since + POSIX mandates that make considers files with the same timestamp + of their dependencies to be up-to-date. + + * tests/remake9a.test: Remove useless $sleep. + * tests/remake9b.test: Likewise. + * tests/remake9c.test: Likewise. + * tests/remake9d.test: Likewise. + * tests/remake10a.test: Likewise. + * tests/remake10b.test: Likewise. + * tests/remake10c.test: Likewise. + +2012-03-07 Stefano Lattarini + + Merge branch 'msvc' into master (dummy merge) + +2012-03-07 Stefano Lattarini + + Merge branch 'maint' into msvc + + * maint: + news: describe recently-fixed bug in vala support + depcomp: add support for IBM xlc/xlC compilers + +2012-03-06 Stefano Lattarini + + Merge remote-tracking branch 'origin/master' + +2012-03-06 Stefano Lattarini + + Merge branch 'maint' + + * maint: + news: describe recently-fixed bug in vala support + depcomp: add support for IBM xlc/xlC compilers + +2012-03-06 Stefano Lattarini + + news: describe recently-fixed bug in vala support + + * NEWS (Long-standing bugs): Document fix for bug#10894, fixed + by commit 'v1.11-696-g51f61df' of 27-02-2012. + +2012-03-06 Michael Hofmannm (tiny change) + + depcomp: add support for IBM xlc/xlC compilers + + * lib/depcomp (xlc): New depmode. + * NEWS, THANKS: Update. + +2012-03-06 Peter Rosin + + tests: do not clobber the $CC set by AM_PROG_CC_C_O + + If $CC is originally a losing compiler, AM_PROG_CC_C_O will + modify $CC. "$MAKE -e" will then clobber this modified $CC + and reintroduce the raw losing compiler causing the test + to fail, as subdir-objects is in effect. + + * tests/yacc-dist-nobuild-subdir.test: Drop -e from the $MAKE + invocations. This is safe since DISTCHECK_CONFIGURE_FLAGS is not + specified in the Makefile and since the YACC override is carried + over from the configure invocation into the Makefile making it + redundant to specifiy it again in the environment for $MAKE. + +2012-03-06 Peter Rosin + + tests: explicitly state that our lexers do not require unistd.h + + By default, GNU flex generates code that is dependent on unistd.h, + which is not portable to non-ANSI systems causing spurious test + failures. + + * tests/cond35.test (tscan.l): Define YY_NO_UNISTD_H. + * tests/lex-clean.test (lexer.l): Likewise. + * tests/lex-depend.test (joe.l): Likewise. + * tests/lex-lib-external.test (foo.l): Likewise. + * tests/lex-lib.test (foo.l): Likewise. + * tests/lex-libobj.test (foo.l): Likewise. + * tests/lex-line.test (zardoz.l): Likewise. + * tests/lex-nodist.test (lexer.l): Likewise. + * tests/lex-noyywrap.test (foo.l): Likewise. + * tests/lex-pr204.test (lexer.l): Likewise. + * tests/lex-subobj-nodep.test (subl/sl.l): Likewise. + * tests/lex3.test (foo.l): Likewise. + * tests/lex5.test (foo/foo.l): Likewise. + * tests/lexvpath.test (lexer.l): Likewise. + * tests/silent-lex.test (foo.l): Likewise. + * tests/silent-many-gcc.test (foo5.l): Likewise. + * tests/silent-many-generic.test (foo5.l): Likewise. + * tests/lex-clean-cxx.test (parsefoo.lxx): Likewise. Also specify + the never-interactive option to prevent usage of the non-ANSI + function isatty(3) (from unistd.h). + * tests/lex-depend-cxx.test (joe.ll): Likewise. + * tests/README: Describe these quirks. + +2012-03-06 Peter Rosin + + Merge branch 'msvc' + + * msvc: + scripts: support -I -L and -l for cl in compile + +2012-03-06 Peter Rosin + + scripts: support -I -L and -l for cl in compile + + POSIX mandates that the compiler accepts a space between the -I, + -l and -L options and their respective arguments. See + http://pubs.opengroup.org/onlinepubs/000095399/utilities/c99.html + + * lib/compile (func_cl_dashl): New function with factored out code + for implementing the -l option for the cl wrapper. + (func_cl_dashL): New function with factored out code implementing + the -L option for the cl wrapper. + (func_cl_wrapper): Use func_cl_dashl to implement both -l + and -l, and func_cl_dashL to implement both -L and + -L. Also add support for -I . + (scriptversion): Update. + * tests/compile3.test: Test both with and without a space between + -I, -l and -L and their respective arguments. + * tests/compile5.test: Likewise. + * tests/compile6.test: Likewise. + * tests/compile3.test: Likewise. + * NEWS: Update. + +2012-03-04 Stefano Lattarini + + maint: drop 'Automake::Struct' module + + Now that we require Perl 5.6, we can drop the 'Automake::Struct' + module, which was basically just a backport of Perl 5.6's + 'Class::Struct' to Perl 5.5. + + * automake.in: Use 'Class::Struct', not 'Automake::Struct'. + * lib/Automake/Struct.pm: Delete. + * lib/Automake/Makefile.am (dist_perllib_DATA): Remove it. + +2012-03-04 Stefano Lattarini + + maint: require perl 5.6 throughout + + That version of perl is quite old already, so it should be OK to + require it. More importantly, it is the older perl versions the + developers can currently use for testing, thus it's safer and more + honest to just require it throughout. And anyway, we were already + requiring it in Automake::Getopt, which implied that both automake + and aclocal wouldn't have worked in practice with an older perl + version. + + See also the discussion related to automake bug#10925. + + * lib/Automake/ChannelDefs.pm: Adjusted to require perl 5.6. + * lib/Automake/Channels.pm: Likewise. + * lib/Automake/Condition.pm: Likewise. + * lib/Automake/Configure_ac.pm: Likewise. + * lib/Automake/DisjConditions.pm: Likewise. + * lib/Automake/FileUtils.pm: Likewise. + * lib/Automake/General.pm: Likewise. + * lib/Automake/Item.pm: Likewise. + * lib/Automake/ItemDef.pm: Likewise. + * lib/Automake/Location.pm: Likewise. + * lib/Automake/Options.pm: Likewise. + * lib/Automake/Rule.pm: Likewise. + * lib/Automake/RuleDef.pm: Likewise. + * lib/Automake/Struct.pm: Likewise. + * lib/Automake/VarDef.pm: Likewise. + * lib/Automake/Variable.pm: Likewise. + * lib/Automake/Version.pm: Likewise. + * lib/Automake/Wrap.pm: Likewise. + * lib/Automake/XFile.pm: Likewise. + +2012-03-04 Stefano Lattarini + + cosmetics: remove useless escaping for "'" character + +2012-03-04 Stefano Lattarini + + test defs: remove redundant and unused requirements + + * tests/defs (xsi-bin-sh, xsi-shell): Remove these requirements, + they have never been used. + (cygpath, cscope): Recognizing these explicitly is mostly redundant; + just merge them with the default "catch all" rule, and adjust that + accordingly. + (bzip2): Adjust some outdated comments. + +2012-03-03 Stefano Lattarini + + tests: fix spurious failure on case-insensitive file systems + + See automake bug#10866. + + * tests/java-uninstall.test: Relax the test a little to cater to + case-insensitive file systems, like HFS+ on MacOS X. + +2012-03-02 Stefano Lattarini + + news: more about planned backward incompatibilities + + * NEWS (Future backward-incompatibilities): Starting from the next + major Automake versions, the parallel testsuite driver will be used + by default, instead of the serial testsuite driver as in the past. + +2012-03-02 Stefano Lattarini + + maintcheck: fix few spurious failures + + * syntax-checks.mk: Fix some spurious failures by tightening and/or + tweaking few checks so that some false positives end up whitelisted. + +2012-03-02 Stefano Lattarini + + tests: fix spurious failure due to exported MAKEINFO + + * tests/txinfo30.test: Unset variable MAKEINFO, as its content could + take precedence over our faked makeinfo script and cause a spurious + failure. Reported as part of automake bug#10866. Add trailing ':' + command since we are at it. + +2012-03-02 Stefano Lattarini + + tests: fix spurious failure in a vala test + + * tests/vala-mix2.test: Append to 'configure.ac' rather than to + 'configure.in'. Reported as part of automake bug#10866, and also + revealed by "make maintainer-check". + +2012-03-02 Stefano Lattarini + + self checks: relax tests on cleanup + + Some find(1) implementations have problems operating recursively on + directories having subdirectories with null permissions, even when + the permissions of such subdirectory should be fixed by find before + it descends into them; for example, with this setup: + + % mkdir a a/b + % chmod 000 a/b + + a command like this: + + % find a -type d ! -perm -700 -exec chmod u+rwx '{}' ';' + + fails with this diagnostic on MacOS X 10.7: + + find: a/b: Permission denied + + and with this diagnostic on Solaris 10: + + find: cannot read dir a/b: Permission denied + + The problem is that our self checks were simply demanding too much + from our cleanup trap: our tests never use subdirectories with null + permissions, so it doesn't matter if the cleanup trap fails to + handle those. Just relax the self checks to avoid such useless + testsuite noise. + + * tests/self-check-cleanup.tap: Only try directories missing + write permissions, not with null permission. That should be + enough for our usages. + +2012-03-02 Peter Rosin + + Merge branch 'msvc' + + * msvc: + news: add entry about recent 'ar-lib' changes + +2012-03-02 Peter Rosin + + news: add entry about recent 'ar-lib' changes + + * NEWS: Add information about recent 'ar-lib' changes. + +2012-03-02 Peter Rosin + + scripts: recognize the "q", "s" and "S" actions/modifiers in ar-lib + + * lib/ar-lib: Implement the "q" (quick) action as a synonym + for "r" (replace). Ignore "s" (symbol index) and "S" (no symbol + index) when used as modifiers and "s" when used as a command, + there is simply no way for Microsoft lib to not update the + symbol table index in the archive. + (scriptversion): Update. + * tests/ar-lib.test: Check the added behavior. Also add checks + for the recently added "u" (update) and "v" (verbose) modifiers. + +2012-03-02 Peter Rosin + + Merge branch 'fix-vala-test' + + * fix-vala-test: + tests: fix (harmless) botched merge + +2012-03-02 Peter Rosin + + tests: fix (harmless) botched merge + + Commit v1.11-1750-g9928ea5 of 2012-01-16 (Merge branch 'maint') + reordered the macro calls so that AM_PROG_AR ended up after + AC_PROG_LIBTOOL, which is not allowed. This error went by + undetected since AC_PROG_LIBTOOL was redefined, but that also + removed the ordering requirement making the error benign. + + * tests/vala.test: Put AM_PROG_AR before AC_PROG_LIBTOOL. + +2012-03-02 Peter Rosin + + Merge branch 'maint' into msvc + +2012-03-01 Peter Rosin + + scripts: recognize the "q", "s" and "S" actions/modifiers in ar-lib + + * lib/ar-lib: Implement the "q" (quick) action as a synonym + for "r" (replace). Ignore "s" (symbol index) and "S" (no symbol + index) when used as modifiers and "s" when used as a command, + there is simply no way for Microsoft lib to not update the + symbol table index in the archive. + (scriptversion): Update. + * tests/ar-lib.test: Check the added behavior. Also add checks + for the recently added "u" (update) and "v" (verbose) modifiers. + +2012-02-29 Peter Rosin + + tests: do not try to use ar(1) when $AR points to something else + + * tests/libobj10.test: Move the archive listing commands to the + Makefile, so that $AR - as determined by configure - can be + used. + * tests/libobj17.test: Likewise. + +2012-02-29 Peter Rosin + + tests: make tests behave for the AR=lib case + + These below tests were left mostly as-is when AM_PROG_AR was + introduced (with libobj16b being the exception, that test was + forgotten or has regressed since), in a misguided attempt to + not make them diverge from the original problem reports. + + Modernize them so that they do not FAIL when $AR is Microsoft + 'lib'. + + * tests/libobj16b.test: Add AM_PROG_AR to configure.ac and remove + the no-longer-needed -Wno-extra-portability option when invoking + automake. + * tests/pr300-lib.test: Likewise. + * tests/pr300-ltlib.test: Likewise. + * tests/pr307.test: Likewise. + * tests/pr401.test: Likewise. Also fetch the 'ar-lib' script. + * tests/pr401b.test: Likewise. + * tests/pr401c.test: Likewise. + +2012-02-29 Stefano Lattarini + + Merge branch 'maint' + + * maint: + vala: fix 'valac' calls for projects with mixed Vala/C + vala: expose automake bug#10894 + +2012-02-29 Dave Goodell (tiny change) + Stefano Lattarini + + tests: fix spurious failure with Portland Compilers + + * tests/silent-many-generic.test (configure.ac): Be more careful + in the workaround to avoid spurious failures with C++ compilers + containing the string "CC" in their names; this avoids spurious + failures with at least the Sun Studio C++ compiler (when named + "sunCC") and the Portland Group C++ Compiler ("pgCC"). + Also handle arguments with whitespace correctly in the 'am--cxx' + temporary wrapper. + * THANKS: Update. + +2012-02-28 Stefano Lattarini + + tests: fix spurious failure when dependency tracking is unavailable + + Report by Dave Goodell. See automake bug#8880. + + * tests/yacc-dist-nobuild.test: Run the sanity check that aims at + ensuring we really cover the expected code paths in a new build + directory, to avoid spurious failures when automatic dependency + tracking is disabled. + +2012-02-27 Stefano Lattarini + + vala: fix 'valac' calls for projects with mixed Vala/C + + Fixes automake bug#10894. + + * automake.in (lang_vala_finish_target): Strip non-vala files + from the dependencies of vala stamps, and from the invocation + of valac compiler. Related refactorings. + * tests/Makefile.am (XFAIL_TESTS): Remove 'vala-mix2.test'. + +2012-02-27 Stefano Lattarini + + vala: expose automake bug#10894 + + * tests/vala-mix2.test: New test. + * tests/list-of-tests.mk: Add it. + * tests/Makefile.am (XFAIL_TESTS): Likewise. + * THANKS: Update. + +2012-02-27 Stefano Lattarini + + cosmetics: remove a duplicated copyright line + + * tests/list-of-tests.mk: Remove a duplicated copyright line. + +2012-02-27 Stefano Lattarini + + coverage: --program-transform shouldn't transform too much + + Stemmed from a report by Vladimir 'φ-coder/phcoder' Serbinenko: + + + * tests/transform3.test: New test, checking that --program-transform + does not transform too much stuff (in particular, pkglibexecdir, + pgklibdir and pkgdatadir). + * tests/list-of-tests.mk: Add it. + * THANKS: Update. + +2012-02-26 Stefano Lattarini + + tests: avoid spurious failure (line too long in awk) + + * tests/parallel-tests-many.test: Use perl, not awk, to write the + Makefile.am with (deliberately) overly long TESTS content, as some + inferior awk implementations (e.g., Solaris 10 /usr/bin/awk) are + unable to handle the long lines used there and die with errors like: + "awk: string too long near line 5". + +2012-02-26 Stefano Lattarini + + tests: avoid spurious failures when awk is "traditional awk" + + * tests/Makefile.am (do_subst): Also substitute '@AWK@'. + * tests/defs-static.in ($AWK): New, user-overridable and defaulting + to the substituted '@AWK@'. + * tests/defs (fetch_tap_driver): When the shell+awk implementation + of the TAP driver is required, export AM_TAP_AWK to point to a + properly capable awk, since the default awk might be a "traditional" + implementation, which won't be enough for our driver. This is the + right fix, since a proper setting of AM_TAP_AWK in the driver's + environment is expected (and documented to be required) in real + world uses of 'tap-driver.sh'. + +2012-02-26 Stefano Lattarini + + tests: avoid many spurious failures for shells with busted 'set -e' + + Some versions of the BSD Korn shell wrongly bail out when the + 'errexit' shell flag is active and the left-hand command in a + "&&" list fails and that list is the *last* command of an entry + in a "case" statement. + + * tests/defs (gcc, g++, gcj): Work around that. + +2012-02-26 Stefano Lattarini + + aclocal: don't create /usr/share/aclocal as empty + + Related to automake bug#10791. + + Since automake 1.11.2, aclocal no longer succeeds if the system + acdir '${datadir}/aclocal' (i.e., "/usr/share/aclocal" when + ${prefix} is "/usr") does not exist. So we now have a directory + *installed empty by default*, but whose existence is required by + aclocal in order for it to function at all. This might be + confusing, and sounds like asking for trouble in the long term. + + So we now also install a simple README file in that directory, + which briefly explains its purpose and warn that its existence + is required by the normal aclocal functioning. + + * m4/acdir/README: New file. + * m4/Makefile.am (dist_system_ac_DATA): Add it. + * m4/acdir/.placeholder: Delete, no more needed. + * m4/Makefile.am (EXTRA_DIST): Remove it. + * THANKS: Update. + +2012-02-26 Stefano Lattarini + + hacking: document format for git commit messages + + * HACKING (Writing a good commit message): New section. + (Working with git): A related minor adjustment. + +2012-02-25 Stefano Lattarini + + docs: improve 'dist-hook' documentation + + * doc/automake.texi (The dist Hook): Explicitly document the fact + that the dist-hook should account for the case where the source + tree is read-only, mostly for the benefit of distcheck. Since + we are at it, do some minor unrelated rewordings, and remove + obsolescent advice. Motivated by the discussion on automake + bug#10878. + * tests/disthook.test: New test. + * tests/disthook-perms.test: Delete as obsolete. + * tests/list-of-tests.mk: Adjust. + +2012-02-25 Stefano Lattarini + + docs: improve "make distcheck" documentation + + * doc/automake.texi (Checking the Distribution): The fact that + "make distcheck" uses a read-only srcdir wasn't documented clearly + enough here. Fix that. Since we are at it, be more explicit + about the steps undertaken by "make distcheck", and re-organize + this section a bit. Motivated by the discussion on automake + bug#10878. + (distcleancheck): Rename this node (in the "FAQ" section) ... + (Errors with distclean): ... to this. + Add a proper "FIXME" comment. + +2012-02-25 Stefano Lattarini + + cosmetics: proper capitalization and full stops in 'm4/depend.m4' + +2012-02-25 Stefano Lattarini + + coverage: dist-hook and distcheck-hook can modify file permission + + See automake bug#10878. + + * tests/dist-hook-perms.test: New test, checking that the user can + use the 'dist-hook' target to modify permissions of distributed + files before putting them in the distribution tarball. + * tests/distcheck-writable-srcdir.test: New test, checking that the + user can use '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. + * tests/list-of-tests.mk: Add them. + +2012-02-25 Jim Meyering + + tests: avoid spurious failure when gcj is not installed + + Since yesterday's commit, v1.11-2019-g4d2bf42, + the gcj4 test would fail when gcj is not installed. + + * tests/defs-static.in (GNU_GCJ, GNU_GCJFLAGS): Define. + * tests/Makefile.am (do_subust): Add those to the list of + substituted symbols. + +2012-02-24 Stefano Lattarini + + tests: look for GNU Java compiler at configure time + + Do this for consistency with what is done with other compilers. + + * configure.ac: Look for GNU java compiler at configure time. + * tests/defs (gcj): Adjust and simplify. + ($am__tool_prefix): Remove definition, it's not used anymore. + +2012-02-24 Stefano Lattarini + + refactor: in Automake::Options (no semantic change) + + * lib/Automake/Options.pm: Prefer leading spaces to leading tabs + throughout. Minor whitespace and comment changes. + (_process_option_list): Simple refactoring to make the code more + pleasant to read and easier to modify in the future. This + refactoring also reduces code duplication, with the help of ... + (_option_must_be_from_configure, _is_valid_easy_option): ... these + new internal subroutines. + * tests/tar3.test: Enhance. + * tests/silent-amopts.test: New, checks that automake complains if + the 'silent-rules' option is used in AUTOMAKE_OPTIONS. + * tests/list-of-tests.mk: Add it. + +2012-02-24 Stefano Lattarini + + cosmetics: typofixes and whitespace changes + + * configure.ac: Fix a typo in comments. + * aclocal.in: Get rid of latest form-feed (^L) usages. + * automake.in: Likewise. + +2012-02-24 Stefano Lattarini + + tests: looks for GNU compilers at configure time + + This way, if the generic C compiler determined configure time is + recognized to be the GNU C compiler, we can reuse it instead of + looking for a compiler named "gcc" (over and over again) in the + test scripts requiring the GNU C compiler. Ditto for the C++, + Fortran, and Fortran 77 compilers. + + This change will improve coverage by allowing us to more easily + use non-default GNU compilers throughout the testsuite. + + And as a bonus, this change also removes a weakness from our + testsuite that could cause spurious failures when flags passed + to the generic compilers were erroneously reused for the GNU + compilers; see automake bug#10859. + + * configure.ac: Look for the GNU compilers explicitly. Improve + some configure output and diagnostic since we are at it. + * tests/defs-static.in ($GNU_CC, $GNU_CXX, $GNU_FC, $GNU_F77): + Initialize with the values determined at configure time (while + allowing user overrides). + * tests/Makefile.am (do_edit): Also substitute the configure-time + values of GNU_CC, GNU_CXX, GNU_FC and GNU_F77. + * tests/defs (gcc, g++, gfortran, g77): Use the values for the GNU + compilers determined at configure time (i.e., $GNU_CC for the GNU + C compiler, and so on). + +2012-02-24 Stefano Lattarini + + docs, news: document planned removal of obsolete macros and features + + * NEWS (Future backward-incompatibilities): Document planned removal + of several superseded and/or obsoleted macros, of the $(mkdir_p) + variable and @mkdir_p@ substitution, and of the support for the + two- or three-arguments invocation forms of AM_INIT_AUTOMAKE. + * doc/automake.texi: Likewise. + +2012-02-24 Stefano Lattarini + + docs: remove reference to lzma support, it has been removed + + Support for lzma compression in distribution tarball has been + removed in commit 'v1.11-1674-g02e9072' of 01-01-2012, "dist: + remove support for lzma (superseded by xz and lzip)", but was + still documented in the manual. + + * doc/automake.texi: Remove references to the 'dist-lzma' option + and to the lzma compression support. + +2012-02-24 Stefano Lattarini + + cosmetics: fixlet in comment in automake + + * automake.in ($configure_dist_common): In the associated comment, + refer to scanning of 'configure.ac', not 'configure.in'. + +2012-02-24 Stefano Lattarini + + maint: assume 'test -x' is portable + + * lib/Makefile.am (installcheck-local): To verify that the installed + scripts are actually executable, simply use 'test -x', instead of + resorting to perl and its '-x' file operator. Today, 'test -x' + should today be portable to any non-museum system. Since we are at + it, improve diagnostic in case of failure. + +2012-02-24 Stefano Lattarini + + deptrack: avoid few forks in configure (minor optimization) + + * m4/depend.m4 (_AM_DEPENDENCIES): Use 'echo > file' instead of + 'touch file' to ensure the creation of a dummy file. Adjust the + comment that explains why we can't simply use ': > file': the + problem this latter idiom tickles is present also with Solaris 10 + /bin/sh, not merely with Solaris 8 /bin/sh. + +2012-02-23 Stefano Lattarini + + maintcheck: remove an obsolete check + + * syntax-checks.mk (sc_perl_local_no_parens): Remove, we don't even + allow the use of local but for the '$_' and '$~' special variables. + (syntax_check_rules): Adjust. + +2012-02-23 Stefano Lattarini + + news: update w.r.t. change in quoting format + + * NEWS (New in 1.11.1a): State that we prefer to quote 'like this' + or "like this" rather than `like this', as according to the new GCS + recommendations. + +2012-02-23 Stefano Lattarini + + automake: do not quote `like this', as per GCS recommendation + + * automake.in: Convert comments, diagnostic and help screen to the + use of new quoting format 'like this' or "like this" rather than + `like this'. + * tests/stdlib2.test: Adjust. + * tests/ltinstloc.test: Likewise. + * tests/location.test: Likewise. + * tests/libtool8.test: Likewise. + * tests/ldadd.test: Likewise, and prefer trailing ':' over trailing + 'Exit 0'. + +2012-02-23 Stefano Lattarini + + aclocal: do not quote `like this', as per GCS recommendation + + * aclocal.in: Convert comments, diagnostic and help screen + to the use of new quoting format 'like this' or "like this" + rather than `like this'. + +2012-02-23 Stefano Lattarini + + pm: do not quote `like this', as per GCS recommendation + + This patch converts the internal perl modules used by automake and + aclocal to the use of new quoting format 'like this' or "like this" + rather than `like this'. + + * lib/Automake/ChannelDefs.pm, lib/Automake/Channels.pm, + lib/Automake/Condition.pm, lib/Automake/Configure_ac.pm, + lib/Automake/DisjConditions.pm, lib/Automake/FileUtils.pm, + lib/Automake/General.pm, lib/Automake/Item.pm, + lib/Automake/Rule.pm, lib/Automake/Getopt.pm, + lib/Automake/Options.pm, lib/Automake/Struct.pm, + lib/Automake/VarDef.pm, lib/Automake/Variable.pm, + lib/Automake/Version.pm, lib/Automake/XFile.pm: Update and + adjust quoting format throughout, in comments and diagnostic. + Some minor related rewordings and reformatting since we are + at it. + +2012-02-23 Stefano Lattarini + + m4: do not quote `like this', as per GCS recommendation + + This patch converts the files comprising the automake's own build + system to the use of new quoting format 'like this' or "like this" + rather than `like this'. + + * m4/auxdir.m4, m4/ccstdc.m4, m4/depend.m4, m4/depout.m4, m4/tar.m4, + m4/init.m4, m4/maintainer.m4, m4/make.m4, m4/missing.m4, m4/vala.m4, + m4/mkdirp.m4, m4/sanity.m4, m4/silent.m4, m4/strip.m4: Update and + adjust quoting format throughout, in comments and diagnostic. Some + minor related rewordings and reformatting since we are at it. Bump + serial numbers. + +2012-02-23 Stefano Lattarini + + build: do not quote `like this', as per GCS recommendation + + This patch converts the files implementing the automake's own build + system to the use of new quoting format 'like this' or "like this" + rather than `like this'. + + * bootstrap, configure.ac, syntax-checks.mk, Makefile.am, + lib/Makefile.am, m4/Makefile.am, syntax-checks.mk: Update quoting + format throughout, in comments and diagnostic. Some minor related + rewordings and reformatting since we are at it. + +2012-02-23 Stefano Lattarini + + hacking: update advice w.r.t. release process + + * HACKING: Don't describe the obsolete 'git-release' target anymore. + Instead, document the new and improved targets 'git-tag-release' and + 'git-upload-release' (introduced in commit v1.11-674-gaf5f939 of + 25-01-2012, "release: revamp rules to tag and upload the releases"). + +2012-02-23 Stefano Lattarini + + hacking: do not quote `like this', as per GCS recommendation + + * HACKING: Quote 'like this' or "like this", not `like this'. This + is done for consistency with the new recommendations in the GNU + Coding Standards, and because I've come to actually prefer the '...' + and "..." quoting format over the `...' one. + +2012-02-23 Stefano Lattarini + + am: do not quote `like this', as per GCS recommendation + + This patch converts the automake-provided '*.am' fragments, and + related files, to the use of new quoting format 'like this' or + "like this" rather than `like this'. + + * lib/am/check.am: Update quoting format throughout, in comments + and diagnostic. Some related rewordings, reformatting, and removal + of redundant commands since we are at it. + * lib/am/configure.am: Likewise. + * lib/am/dejagnu.am: Likewise. + * lib/am/depend2.am: Likewise. + * lib/am/distdir.am: Likewise. + * lib/am/inst-vars.am: Likewise. + * lib/am/install.am: Likewise. + * lib/am/lang-compile.am: Likewise. + * lib/am/lisp.am: Likewise. + * lib/am/ltlib.am: Likewise. + * lib/am/mans.am: Likewise. + * lib/am/progs.am: Likewise. + * lib/am/remake-hdr.am: Likewise. + * lib/am/subdirs.am: Likewise. + * lib/am/tags.am: Likewise. + * lib/am/texi-vers.am: Likewise. + * lib/am/texibuild.am: Likewise. + * lib/am/texinfos.am: Likewise. + * lib/am/yacc.am: Likewise. + +2012-02-23 Stefano Lattarini + + tests: quote 'like this', not `like this', as per GCS recommendation + + This patch converts the automake testsuite and related files, to + the use of new quoting format 'like this' or "like this" rather + than `like this'. + + This is done for consistency with the new recommendations in the GNU + Coding Standards, and, well, because I've come to actually prefer + the '...' and "..." quoting formats over the `...' one. + + * tests/README: Update quoting format throughout. Remove some + "excessive" use of quoting, and throw in minor rewording where + appropriate. + * tests/Makefile.am: Likewise, for comments. + * tests/CheckListOfTests.am: Likewise. + * tests/defs-static.in: Likewise. + * tests/defs: Likewise. + * tests/trivial-test-driver: Likewise. + * Many tests/*.tap, tests/*.test and tests/*.sh files: Likewise, + and for the diagnostic and informational messages as well. + * tests/gen-testsuite-part: Likewise, and for the generated tests + as well. + +2012-02-22 Stefano Lattarini + + spy: "rm -f" and "rm -rf" without args are portable + + According to recent testing by Eric Blake, it seems that all + non-museum rm(1) implementations don't complain if called without + file operands, *if* the '-f' option is used. This behaviour will + likely be mandated by future versions of the POSIX standard as + well. + + We'd like to start assuming this rm(1) behaviour in future Automake + releases, in order to simplify some automake-provided cleanup rules. + So, for the moment, we add a new "spy" test in our test suite, to + try ensuring that all the rm(1) implementation we encounter "in the + wild" truly behaves as expected in this regard. + + For more references, see this discussion on the bug-autoconf list: + + which sprang from coreutils bug#10819: + + and brought to the POSIX issue#542: + + which has been accepted and will ensure that future version of the + POSIX standards will mandate that 'rm' shouldn't complain if called + without file operands, when the '-f' option is in use. + + * tests/spy-rm.test: New test. + * tests/list-of-tests.mk: Add it. + +2012-02-22 Stefano Lattarini + + tests: avoid spurious failures under "make distcheck" + + * tests/tap-setup.sh: Pass also '-f' option to 'cp' invocations, + so that files that have already been copied in without write + permissions will still be overwritten where needed, instead of + causing a spurious testsuite failure. Issue seen when the + testsuite is run under "distcheck". + * tests/defs (get_shell_script): Remove target file before + overwriting it, for the same reason. Rework code flow a bit + since we are at it. + +2012-02-22 Stefano Lattarini + + fixup: avoid spurious failure for 'parallel-tests-many.test' + + * tests/parallel-tests-many.test: Adjust grepping of "make check" + and "make recheck" output to match the new format of the testsuite + summary. Remove redundant 'set -e' call since we are at it. + +2012-02-22 Stefano Lattarini + + tests: prefer 'configure.ac' over 'configure.in' + + With this change, our testsuite now uses 'configure.ac' as the + name for the typical autoconf input, instead of the obsolescent + 'configure.in' (which has been deprecated for several years, at + least since autoconf 2.50). + + Most of the test cases changed by this commit have been + automatically modified with this sed command (using GNU + sed): + + sed -i 's/\/configure\1.ac/g' + + * syntax-checks.mk (sc_tests_no_configure_in): New syntax check. + (syntax_check_rules): Add it. + * tests/defs: Create stub for autoconf input in 'configure.ac', + not in 'configure.in'. Adjust comments. + ($AUTOCONF, $AUTOHEADER, $AUTORECONF): Remove workaround for the + infamous debian autoconf wrapper: we don't need such workaround + anymore now that we name our autoconf input as 'configure.ac'. + For more information, see commit v1.11-564-g63da492 "test defs: + hack to support autoconf-wrapper programs" of 16-12-2011. + * tests/README: Use 'configure.ac', not 'configure.in'. + * Many many tests: Likewise. + * tests/backcompat3.test: Adjust to avoid spurious failures. + * tests/backcompat5.test: Likewise. + * tests/missing6.test: Likewise. + * tests/backcompat6.test: Likewise, and extend a bit since we + are at it. + +2012-02-22 Stefano Lattarini + + coverage: expose automake bug#7868 + + Expose the command-line length limit issue that can affect the + Automake-generated parallel-tests harness, especially on systems + where this limit is smaller (e.g., MinGW/MSYS). + + Suggestion by Bob Friesenhahn. + + * tests/parallel-tests-many.test: New test. We have verified that + it actually exposes the bug#7868, as it passes when we opportunely + reduce the number of test cases in $(TESTS). Checked on NetBSD 5.1 + 64bit, Debian unstable 32bit, Solaris 10 64bit and Cygwin 1.5 32bit. + * tests/list-of-tests.mk (handwritten_TESTS): Add it. + * tests/Makefile.am (XFAIL_TESTS): Likewise. + +2012-02-21 Stefano Lattarini + + tests: remove obsoleted "icc" requirement + + * tests/defs (icc): This requirement is not used anymore by any + test case, so remove it. + +2012-02-21 Stefano Lattarini + + readme: fix typo in tests/README + +2012-02-21 Stefano Lattarini + + tests: "make installcheck" shouldn't run the testsuite twice + + * Makefile.am (installcheck-local): Remove. The "installcheck" + target provided by automake is already a recursive target, so + there's no need to have an 'installcheck-local' recipe that + manually recurse into 'tests/'. In fact, such a manual recursion + was causing the testsuite to be run twice by "make installcheck". + +2012-02-21 Stefano Lattarini + + news: minor fixlets and reorganization + + * NEWS: Get rid of form-feed characters (^L) throughout the file. + Use separator lines instead (composed by 76 '~' characters), or + just an extra blank lines for older less verbose entries (those + predating the 1.8 release). + (New in 1.11.3): Move description of planned future backward + incompatibilities that won't make it to 1.12 ... + (New in 1.11a): ... in here. Quote 'like this', not `like this'. + Other minor miscellaneous rewordings and fixlets. + +2012-02-21 Stefano Lattarini + + cosmetics: few typofixes + +2012-02-21 Stefano Lattarini + + automake: new option 'serial-tests' + + Currently, automake offers a 'parallel-tests' option to enable the + use of the parallel testsuite harness in the generated Makefiles, + but no option to explicitly state the intention of using the older + serial testsuite driver (which is currently the default). + + This makes the parallel test harness seems like a second-class + citizen (while actually it should be the other way around); more + importantly, it will prevent us from making the parallel harness + be the default one in future automake versions, since the users + of the serial harness would then have no way to instruct automake + to continue using it. + + We solve all of this by introducing a new 'serial-tests' option. + + * lib/Automake/Options.pm (_process_option_list): Recognize the + new option, and related minor refactoring. + * tests/serial-tests.test: New test. + * tests/list-of-tests.mk: Add it. + * doc/automake.texi: Update. + * NEWS: Likewise. + +2012-02-21 Stefano Lattarini + + tests: fix a timestamp issue, and other minor buglets + + Reported by Panther Martin in automake bug#10848. + + * tests/conffile-leading-dot.test: Add a proper '$sleep' invocation, + to avoid spurious failures on fast systems without sub-second + timestamp resolutions. Add other minor related and unrelated + improvements and fixlets since we are at it. + +2012-02-21 Stefano Lattarini + + automake: new option to print location of scripts and data files + + With this change, we add a new automake option '--print-libdir' + that prints (on stdout) the path of the directory containing the + Automake-provided scripts (e.g., 'missing' and 'install-sh') and + data files (e.g., INSTALL or texinfo.tex). + + Suggestion by Nick Bowler. See also automake bug#10473. + + * automake.in (parse_arguments): Handle the new option. + (usage): Mention it. + * doc/automake.texi (automake Invocation): Document it. + * NEWS: Update. + * tests/print-dir.test: New test. + * tests/list-of-tests.mk: Add it. + +2012-02-19 Stefano Lattarini + + docs: prefer the awk+sh TAP driver over the perl one + + We had completed our shell+awk implementation of the TAP driver + months ago, but never documented it in the manual, continuing to + document only the "prototype" written in perl instead. Time to + fix this, before the 1.12 release. + + * doc/automake.texi (Use TAP with the Automake test harness): Now + we document the use of the awk+shell implementation of our TAP + driver, rather than of the perl one. + * tests/tap-doc2.test: Adjust to use the shell+awk implementation + of the TAP driver. + +2012-02-19 Stefano Lattarini + + tests: be stricter in determining whether "make -jN" works + + * tests/parallel-tests3.test: With at least Solaris 10 CCS make, + "make -jN" does not fail, but merely prints a warning about + "DistributedMake -j option" being ignored. This was causing this + test case to fail spuriously. So we now use a stricter check in + determining whether make works in parallel mode. Since we are at + it, we try to cater also to Sun Distributed make, which understands + "-j N" but *not* "-jN". + +2012-02-19 Stefano Lattarini + + tests: don't trust exit status of "make -k" + + * tests/parallel-tests-extra-programs.test: Unless $MAKE is GNU + make, don't trust the exit status of "$MAKE -k". Fixes a spurious + failure with OpenBSD 5.0 make and NetBSD 5.1 make. + +2012-02-19 Stefano Lattarini + + tests: fix race condition in 'self-check-dir.tap' + + * tests/self-check-dir.tap (do_check): Don't fail if "ls -l" fails. + +2012-02-18 Stefano Lattarini + + parallel-tests: fix another BSD parallel make issue + + 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). This was causing FreeBSD 9.0 + make and NetBSD 5.1 make to spuriously fail with automake-generated + test harnesses if subdir tests were present *and* make was being + run in parallel mode. This issue affected also the Automake own + testsuite. + + * lib/am/check2.am (am__set_b): New internal variable. + (%OBJ%, %EXT%.log, %EXT%$(EXEEXT).log): Use it to work around + the described BSD make issue. + * tests/parallel-tests3.test: Enhanced to expose the bug. + * tests/parallel-tests-subdir.test: Enhance a little, since we + are at it. + * NEWS: Update. + +2012-02-18 Stefano Lattarini + + tests: avoid FreeBSD make VPATH issues in more tests (see bug#7884) + + See also similar change 'v1.11-755-g818bc40' of 07-02-2012, + "tests: work around bug#7884 in many yacc/lex tests". The + rationale for this change is basically the same. + + * tests/lex-lib-external.test: Use "yl_distcheck" instead of + bare "$MAKE distcheck" to avoid extra failures caused by + automake bug#7884. + * tests/lex-noyywrap.test: Likewise. + * tests/lex-libobj.test: Likewise. + * tests/man6.test: This test suffers from the same FreeBSD make + incompatibility in VPATH handling that is the source of automake + bug#7884. Since this is caused by rules that are defined in the + Makefile.am by the test itself, rather that being generated by + automake, the best thing to do is to skip this test if we detect + the presence of said make incompatibility (through the function + 'useless_vpath_rebuild'). + * tests/man8.test: Likewise. + +2012-02-18 Stefano Lattarini + + cosmetics: remove extra trailing whitespace in configure.ac + +2012-02-18 Peter Rosin + + Merge branch 'yacc-quote-fix' + +2012-02-17 Stefano Lattarini + + tests: avoid spurious failure with FreeBSD make + + * tests/parallel-tests-extra-programs.test: FreeBSD make seems to + write (some) diagnostic messages on stdout instead than on stderr, + so now we also grep the stdout for the expected make diagnostic. + +2012-02-17 Peter Rosin + + tests: fix broken quoting in the generated yacc grammar + + Fixes problem introduced by v1.11-1912-ge0906b7 "tests: avoid + spurious failure with non-bison yacc" from 12-02-2012. + + * tests/suffix10.tap (Makefile.am): Avoid outer single quotes + when we need to produce single quotes. + +2012-02-17 Stefano Lattarini + + fixup: always use correct path for automake/aclocal wrappers + + Otherwise, bootstrapping from a git checkout won't work anymore. + Issue introduced in today's commit 'v1.11-1974-ga98e58f'. + + * doc/Makefile.am ($(srcdir)/amhello-1.0.tar.gz): Export PATH in a + way that makes the automake and aclocal wrappers truly accessible + (the location of this wrappers has been modified in a recent commit, + but this makefile hadn't been updated accordingly). + (update_mans): Likewise. + +2012-02-17 Stefano Lattarini + + tests: fix spurious failure in VPATH build + + * tests/self-check-dir.tap: Adjust to handle running in a VPATH + build correctly. + +2012-02-17 Stefano Lattarini + + tests: fix many spurious failures in VPATH builds + + The 'is' helper script, used by some test cases since commit + 'v1.11-1830-g96401cb' of 08-02-2012, "tests: better way to compare + lists in Makefile rules", is not available in VPATH builds, since + it resides in $(srcdir), nor in $(builddir), and only $(builddir) + is added to $PATH in the test script. This was causing spurious + failures. + + Solve this issue by re-organizing a bit the layout and placing of + wrapper and help scripts used by the testsuite. This reorganization + is by no mean complete, but should be enough to solve the VPATH + issues. + + * tests/is: Moved ... + * tests/ax/is: ... here + * tests/automake.in: Moved ... + * tests/wrap/automake.in: ... here. + * tests/aclocal.in: Moved ... + * tests/wrap/aclocal.in: ... here. + * tests/defs-static.in ($am_bindir, $PATH): Adjust. + * configure.ac (AC_CONFIG_FILES): Likewise. + * tests/Makefile.am (EXTRA_DIST, check_SCRIPTS): Likewise. + * tests/get-sysconf.test: Likewise. + * .gitignore: Likewise. + +2012-02-17 Stefano Lattarini + + tests: relax a test to cater to NetBSD make + + * tests/parallel-tests-empty-testlogs.test: 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). This behaviour was + causing a check in this test case to fail. But that check was in + fact overly strict, since our recipes are smart enough to work + around the botched-up substitution. Also, the failure wasn't a + regression from Automake 1.11, since that version too would have + triggered the same error with NetBSD 5.1 make. So we just relax + the test a little to avoid extra noise in the testsuite. + +2012-02-17 Stefano Lattarini + + Merge branch 'maint' + + * maint: + dryrun: $(am__dry_run) not confused by metachars in $(MAKEFLAGS) + +2012-02-17 Stefano Lattarini + + dryrun: $(am__dry_run) not confused by metachars in $(MAKEFLAGS) + + * lib/am/header-vars.am (am__make_dryrun): Be smarter and more + correct in handling shell metacharacters in $(MAKEFLAGS). + +2012-02-17 Stefano Lattarini + + tests: TAP-based tests should error if no plan was specified + + After this change, it will still be OK for TAP-based tests not to + report any explicit TAP plan -- but they should state *explicitly* + that they want to do so, by calling the 'plan_' function with a + proper argument (currently, either "later" or "unknonwn"). + + Motivated by a recent issue introduced by yesterday's commit + 'v1.11-1959-g0699a84' (pointed out by Peter Rosin, and fixed + by follow-up commit 'v1.11-1961-gea44190'). + + * tests/tap-functions.sh (plan_): Get rid of '$have_tap_plan_', + and refactor use and initialization of '$planned_' in a way that + will allow client script to get more information on which kind + of plan (if any) has been declared by the former 'plan_' invocation. + (skip_all_): Adjust. + * tests/defs (exit trap): Only print the "lazy" TAP plan if 'plan_' + has requested that *explicitly*. + * syntax-check.mk (sc_tests_tap_plan): Remove: it's obsolete now, + since a TAP-based test that doesn't call 'plan_' explicitly won't + print any TAP plan, and the TAP driver will catch that and report + an error. + (syntax_check_rules): Adjust. + +2012-02-17 Stefano Lattarini + + tests: expose $(am__dry_run) limitations + + Currently, the internal $(am__dry_run) macro can fail in weird ways + when $(MAKEFLAGS) contains shell metacharacters. Let's expose this + limitation in the testsuite (and fix a couple of related weaknesses + since we are at it). + + * tests/make-dryrun.test: Moved ... + * tests/make-dryrun.tap: ... here, converted to TAP, and extended to + expose the described limitations. Also ... + (am_parallel_tests): Define this so that the 'gen-testsuite-part' + script won't generate a useless wrapper script. + * test/list-of-tests.mk: Update. + +2012-02-17 Peter Rosin + + cosmetics: fix commit message typo in previous + + * .git-log-fix: The file is called .git-log-fix, nothing else. + +2012-02-17 Peter Rosin + + fixup: .git-log-fix should not be executable + + * .git-log-fix: Set mode 644. + +2012-02-17 Peter Rosin + + maint: support amending the generated ChangeLog, and fix a typo + + * Makefile.am (gitlog_to_changelog_options): Add support for + amending the generated ChangeLog. + (EXTRA_DIST): Update. + * .git-log-fix: New file with things to amend to the generated + ChangeLog, starting with a fix for a typo in v1.11-1963-g3b369e6 + "maint: use AC_PACKAGE_BUGREPORT to avoid duplication" from + yesterday. + +2012-02-16 Stefano Lattarini + + cosmetics: normalize copyright notice in some tests + + * tests/lisp3.test: Normalize copyright notice to read the + same of that of other tests. + * tests/lisp4.test: Likewise. + * tests/lisp5.test: Likewise. + * tests/lisp6.test: Likewise. + * tests/lisp7.test: Likewise. + * tests/lisp8.test: Likewise. + * tests/lispdry.test: Likewise. + +2012-02-16 Stefano Lattarini + + readme: fix grammaro + + Reported by Eric Blake. + + * README: Use "also has" instead of "has also"; the former sounds + better to a native speaker. + +2012-02-16 Stefano Lattarini + + maint: use AC_PACKAGE_BUGREPORT to avoid duplication + + * configure.ac: In the message reporting whether the user is about + to build an alpha or beta version, use the autoconf-provided + AC_PACKAGE_BUGREPORT macro instead of duplicating the bug reporting + address. + +2012-02-16 Stefano Lattarini + + readme: update and renew + + * README: Remove stale or now-obvious description and advices. + Add reference to the INSTALL file. Some minor rewordings. + +2012-02-16 Stefano Lattarini + + depcomp tests: fix up today's botched commit + + Today's commit 'v1.11-1959-g0699a84' has caused the generated + 'depcomp*.tap' tests to call the 'plan_' function *before* it is + defined, and has also caused the extra checks required for better + libtool coverage to be run only when libtool is *not* in use, + rather than the other way around. Fix this mess. + + Report by Peter Rosin. + + * tests/gen-testsuite-part: Include './defs' in the generated + tests, rather than doing so from 'depcomp.sh'. Adjust the count + of TAP tests for 'depcomp-lt-auto.test' (it's 84, not 72). + * tests/depcomp.sh: Adjust accordingly, and fix inverted logic + about the decision of when to run extra checks for libtool. + +2012-02-16 Stefano Lattarini + + build: clearer diagnostic if "make" is invoked before "./configure" + + Since a GNUmakefile wrapper has been introduced in our build + system, a "make" invocation issued before a "./configure" one + has caused GNU make to die with the cryptic message: + + GNUmakefile:18: Makefile: No such file or directory + GNUmakefile:19: /syntax-checks.mk: No such file or directory + make: *** No rule to make target `/syntax-checks.mk'. Stop. + + * GNUmakefile: Detect when we are being run from an unconfigured + tree, and give helpful diagnostic. + +2012-02-16 Stefano Lattarini + + depcomp tests: put TAP plan in generated tests + + This avoids a spurious maintcheck failure, and also simplifies + the 'depcomp.sh' helper script a little. + + * tests/gen-testsuite-part: Create and place also a proper 'plan_' + call (to emit the TAP plan) in each generated 'depmod*.tap' test. + * tests/depcomp.sh: Remove 'plan_' invocations, and simplify a + little since we are at it. + +2012-02-16 Stefano Lattarini + + update-copyright: don't touch COPYING and INSTALL + + Reported by Peter Rosin. + + * update-copyright: Also exclude the COPYING and INSTALL files + found in the top-level directory. + * COPYING, INSTALL: Revert update of copyright years done in + today's commit 'v1.11-1948-g641a5a4'. + +2012-02-16 Stefano Lattarini + + maintcheck: whitelist some false positives + + Instead of tweaking or dumbing down some of our sources or tests + in order not to make them spuriously trigger few maintainer checks, + we tweak such checks instead. + + * syntax-checks.mk (sc_tests_overriding_macros_on_cmdline): Also + allow the variable 'exp' to be overridden on the make command line. + Whitelist the test 'make-dryrun.test' where appropriate. + (sc_mkinstalldirs): When whitelisting the 'mkinstalldirs' occurrence + in 'lib/Makefile.am', do not look for the exact line number: it is + obviously too fragile. + +2012-02-16 Stefano Lattarini + + tests: avoid spurious failure with parallel make + + * tests/parallel-tests-extra-programs.test: Run make with the '-k' + option where appropriate, to ensure it doesn't stop at the first + error, which would prevent the building of the extra programs we + expect it to build. + +2012-02-16 Stefano Lattarini + + tests: avoid spurious failure on older Cygwin + + * tests/tap-signal.tap: Sending a SIGQUIT on Cygwin 1.5 can cause a + segmentation fault instead (sometimes at least). Don't let this + older bug pollute the results of our testsuite. + +2012-02-16 Stefano Lattarini + + fixup: display captured make stdout in 'tap-signal.tap' + +2012-02-16 Stefano Lattarini + + tests: avoid spurious failure in 'suffix3.tap' + + * tests/suffix3.tap (foo.zoo): This C++ file fails to compile with + older g++ (3.4.4) on Cygwin 1.5.25 if we #include . Don't + do that, since it's not strictly required, and the "using namespace" + directive is already enough to ensure the file contents is valid C++ + but invalid C. + +2012-02-16 Stefano Lattarini + + docs: fix typo in description of AM_YFLAGS + + Report by Akim Demaille. + + * doc/automake.texi (Program variables): Don't list "-d -t" twice + in the examples of valid ways to specify the '-d' flag to Yacc; + instead, use "-d -t" and "-t -d". Add missing period. + +2012-02-16 Stefano Lattarini + + tests: another spurious failure with older autoconf fixed + + * tests/aclocal8.test (configure.in): Also call 'AC_INIT', it's + required by some older autoconf versions (e.g., 2.63). + * tests/acloca15.test: Likewise. Add trailing ':' command since + we are at it. + +2012-02-16 Stefano Lattarini + + tests: fix spurious failure with older autoconf + + * tests/conffile-leading-dot.test: Relax grepping of 'config.status' + stderr, to cater for older autoconf. Issue revealed by a failure + with autoconf 2.63 on Cygwin 1.5.25. + +2012-02-16 Stefano Lattarini + + maint: sync auxiliary files from upstream + + * lib/texinfo.tex: Synced from upstream, by "make fetch". + * lib/config.guess: Likewise. + * lib/config.sub: Likewise. + +2012-02-16 Stefano Lattarini + + maint: run "make update-copyright" + +2012-02-16 Stefano Lattarini + + maint: add some missing copyright notices + + * tests/ChangeLog-old: Add copyright notice. + * tests/aclocal.in: Likewise. + * tests/automake.in: Likewise. + * tests/extract-testsuite-summary: Likewise. + * tests/prove-runner: Likewise. + +2012-02-16 Stefano Lattarini + + Merge branch 'maint' + + * maint: + update-copyright: don't touch files synced from external packages + +2012-02-16 Stefano Lattarini + + update-copyright: don't touch files synced from external packages + + * Makefile.am (update-copyright): Do not update copyright years of + files synced from external packages, as given by the '$(FETCHFILES)' + variable. Silence the recipe since we are at it. + +2012-02-16 Stefano Lattarini + + Merge branch 'extra-dist-tests-ksh-bug' + + * extra-dist-tests-ksh-bug: + tests: fix spurious failure when testing wildcards in EXTRA_DIST + +2012-02-16 Stefano Lattarini + + tests: fix spurious failure when testing wildcards in EXTRA_DIST + + * tests/extra10.test: Remove the "make distcheck" call, since, at + least with GNU make 3.82, it trips on the fact that $(srcdir) is + not explicitly used in the wildcard in EXTRA_DIST. + +2012-02-15 Stefano Lattarini + + Merge branch 'maint' + + * maint: + fixup: distribute 'lib/update-copyright' + +2012-02-15 Stefano Lattarini + + fixup: distribute 'lib/update-copyright' + + While the 'update-copyright' script shouldn't be needed by final + users, that's not a good reason to keep it out by the distribution, + as doing so might be unhelpful toward occasional but curious users + interested in peeking into the automake build system. + + * lib/Makefile.am (EXTRA_DIST): Distribute 'update-copyright'. + +2012-02-15 Stefano Lattarini + + maint: prefer $(GIT) over hard-coded "git" in maintainer recipes + + * Makefile.am (update-copyright, autodiffs): Use '$(GIT)' instead + of hard-coding 'git'. + +2012-02-15 Stefano Lattarini + + Merge branch 'maint' + + * maint: + maint: add a rule to use gnulib's update-copyright + +2012-02-15 Stefano Lattarini + + Merge branch 'extra-dist-tests-ksh-bug' + + * extra-dist-tests-ksh-bug: + tests: avoid ksh bug for wildcards in EXTRA_DIST + +2012-02-15 Stefano Lattarini + + Merge branch 'yl-work-for-master' + + * yl-work-for-master: (44 commits) + tests: truly use Lex and Yacc selected by configure + news: fix grammaros related to Yacc + yacc/lex tests: avoid spurious skips with non-GNU make + fixup: remove double news entry + tests: workaround for shells with broken 'set -e' + tests: avoid spurious failure with non-bison yacc + tests: fix spurious failures due to missing 'yywrap()' function + fixup: list of yacc/lex tests was botched + tests: work around bug#7884 in many yacc/lex tests + yacc/lex tests: remove an unneeded workaround for bug#8485 + yacc/lex tests: avoid too much failures with FreeBSD make + yacc-dist-nobuild.test: add reference to bug#7884 + yacc tests: fix bug in 'yacc-cxx.test' + lex tests: fix spurious link errors on Solaris + lex: "make clean" removes .c files from non-distributed .l + lex tests: make test on Lex dependency tracking more "semantic" + lex tests: remove erroneous check about ylwrap distribution + yacc tests: "make clean" removes C++ files from non-distributed .y + tests: add a workaround for automake bug#8485 + tests: add a couple of inter-tests reference + ... + +2012-02-15 Stefano Lattarini + + cscope: is only expected to work with GNU make in VPATH setup + + The 'cscope' functionality does not properly handle VPATH rewrites; + so we explicitly document that, for now, it is only ensured to work + with GNU make when doing a VPATH build, and we adjust testsuite + requirements accordingly. + + Issue revealed by a failure of 'cscope.test' with Solaris 10 CCS + make. + + * doc/automake.texi (Tags): Document the limitations of the cscope + support. Couple of fixlets to formatting since we are at it. + * tests/cscope.test: Converted to TAP, and thus moved ... + * tests/cscope.tap: ... here. Only run tests with VPATH builds when + using GNU make. Adjust so that no C, C++, Fortran or Java compiler, + nor any Emacs program, will be required to run this test. + * tests/list-of-tests.mk: Adjust. + +2012-02-14 Jim Meyering + + maint: add a rule to use gnulib's update-copyright + + * lib/update-copyright: New file, from gnulib. + * Makefile.am (FETCHFILES): Add update-copyright to the list. + (fetch): Fetch it. + (update-copyright): New rule. + +2012-02-14 Stefano Lattarini + + Merge branch 'doc-no-history' + + * doc-no-history: + docs: move chapter on automake history out of main manual + +2012-02-14 Stefano Lattarini + + check: fix test-suite.log formatting with NetBSD sed + + * lib/am/check.am (am__rst_section): Tweak to ensure en extra final + newline is printed also with NetBSD sed. Issue revealed by a + failure of 'test-metadata-global-result.test'. + * tests/rst-formatting.test: New test, checking the internal + variables '$(am__rst_title)' and '$(am__rst_section)'. + * tests/list-of-tests.mk: Add it. + +2012-02-14 Stefano Lattarini + + tests: avoid ksh bug for wildcards in EXTRA_DIST + + Some shells, like NetBSD 5.1 /bin/ksh, have a bug that causes + wildcards resulting from an unquoted parameter expansion not to + be expanded as expected in some cases: + + $ touch a b c d + $ /bin/sh -c 'var="[ab]" && echo $var' # As expected. + a b + $ /bin/ksh -c 'var="[ab]" && echo $var' # Oops. + [ab] + $ /bin/ksh -c 'var="?" && echo $var' # But this as expected. + a b c d + + This was causing a failure in our testsuite. Work around that. + + See also: + + + * tests/extra11.test: Work around the described issue by using the + $(wildcard) builtin in the EXTRA_DIST definition. This is not a + problem, since this test was assuming GNU make anyway. Since we are + at it, enhance coverage a little by also running "make distcheck". + * tests/extra10.test: Similarly, enhance coverage by also running + "make distcheck", and fix a minor bug in the process. But continue + using a "bare" wildcard expression in EXTRA_DIST, without involving + the $(wildcard) builtin, to ensure coverage of similar usages "in + the wild". + +2012-02-14 Stefano Lattarini + + Merge branch 'fix-tap-signal-test' + + * fix-tap-signal-test: + fixup: fix test tap-signal.tap to avoid false negatives + +2012-02-14 Stefano Lattarini + + fixup: fix test tap-signal.tap to avoid false negatives + + Problem introduced by yesterday commit v1.11-1851-g79b2c6a, + "tests: avoid yet other spurious failures on NetBSD" + + * tests/tap-signal.tap: Truly ensure the exit status of the make + call under test is correctly reflected in the TAP result displayed + by the corresponding 'command_ok_' invocation. + +2012-02-14 Stefano Lattarini + + Merge branch 'maint' + + * maint: + fixup: do not tickle makefile-deps.test with the make_dryrun code + gitattributes: custom merge driver for ChangeLog not needed anymore + gitattributes: use "union" merge driver for NEWS + +2012-02-14 Peter Rosin + + fixup: do not tickle makefile-deps.test with the make_dryrun code + + * lib/am/header-vars.am (am__make_dryrun): Avoid code matching + '^ *:' in the Makefile, as that tickles makefile-deps.test. + +2012-02-14 Stefano Lattarini + + gitattributes: custom merge driver for ChangeLog not needed anymore + + * .gitattributes: We don't maintain a version-controlled ChangeLog + file anymore, so we have no need to specify a custom merge driver + for it anymore. Update accordingly. + +2012-02-14 Stefano Lattarini + + gitattributes: use "union" merge driver for NEWS + + This should help in reducing the spurious merge conflicts for the + NEWS file, which have already caused a great deal of confusion and + wasted time. + + Suggestion by Eric Blake: + http://lists.gnu.org/archive/html/automake-patches/2012-02/msg00119.html + + * .gitattributes (NEWS): Use the "union" merge driver. + +2012-02-14 Stefano Lattarini + + tests: truly use Lex and Yacc selected by configure + + When 'yacc-work' was merged into 'yl-work-for-master' in commit + v1.11-1910-ge6c40d4 (12-02-2012), the values for $YACC and $LEX + stopped being substituted directly by config.status, and started + being substituted by a Makefile rule using the contents of the + $(YACC) and $(LEX) makefile variables. + + Unfortunately, our configure.ac was calling AM_SUBST_NOTMAKE on + 'YACC' and 'LEX' (see commit v1.11-284-g34ca92b of 29-01-2011, + "tests: don't define YACC and LEX in the Makefiles", for a + rationale), so that the $(YACC) and $(LEX) in the Makefile simply + hold the default make-provided values (that is, "yacc" and "lex" + respectively), independently of what yacc and lex programs were + defined at configure time. + + Apart from reducing coverage and creating confusion, this behaviour + also caused spurious failures on systems lacking a yacc and/or lex + programs. + + Problem reported by Peter Rosin. References: + + + + * configure.ac (AM_SUBST_NOTMAKE): Don't call anymore on 'YACC' nor + on 'LEX'. + +2012-02-14 Peter Rosin + + depcomp tests: do not specify LDFLAGS for static libraries + + Commit v1.11-1848-gb3f34ca accidentally specified LDFLAGS + for libbaz even when built as a static library, which is + not allowed. + + * tests/depcomp.sh (src/Makefile.am): Don't add any LDFLAGS + when libbaz is built as a static library. + +2012-02-14 Peter Rosin + + depcomp tests: avoid redundant runs for non-libtool test + + When running the dependency tests without libtool, it's + not meaningful to run the tests three-fold, the libtool + configure options are simply ignored anyway. + + * tests/depcomp.sh: Only run the tests three-fold when + libtool is in use. + +2012-02-14 Stefano Lattarini + + tests: avoid yet other spurious failures on NetBSD + + * tests/tap-signal.tap: Add a "strategically placed" extra 'echo' + command and a temporary silencing of xtraces; they are 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. + +2012-02-13 Stefano Lattarini + + tests: avoid a spurious failure on NetBSD + + * tests/test-driver-is-distributed.test: Rewrite to avoid having to + edit configure.in; such editing was subtly botched on NetBSD (the + 'AC_CONFIG_AUX_DIR' call got misplaced, ending up *before* the + 'AC_INIT' call), and that caused an hard-to-track bug. Since we + are at it, extend coverage a little. + +2012-02-13 Stefano Lattarini + + tests: avoid spurious failure with NetBSD /bin/ksh + + * tests/parallel-tests-fd-redirect-exeext.test (configure.in): Tweak + so that we don't end up with the generated configure script having + two nested subshells that start with '((': + + ((./conftest$EXEEXT 9>&1) | grep "^foobar") >&5 2>&5 + + which is unportable and could confuse some shells (e.g., NetBSD 5.1 + /bin/ksh) into thinking we are trying to perform an arithmetic + operation. + +2012-02-13 Peter Rosin + + tests: increase coverage for depcomp tests + + 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. + + tests/depcomp.sh (Makefile.am): Add -no-undefined if a libtool + library (.la) is built. + (src/Makefile.am): Likewise. + +2012-02-13 Peter Rosin + + news: fix grammaros related to Yacc + + * NEWS: Fix some grammaros and typos. + +2012-02-13 Stefano Lattarini + + yacc/lex tests: avoid spurious skips with non-GNU make + + * tests/defs (useless_vpath_rebuild): Fix botched logic that + was causing this function to always diagnose non-GNU make + implementations as being affected by the "useless rebuilds + in VPATH setup" bug (that affects FreeBSD make and causes + automake bug#7884). + +2012-02-13 Peter Rosin + + fixup: remove double news entry + + * NEWS: Remove double (stale) news entry introduced by a botched + merge. + +2012-02-12 Stefano Lattarini + + tests: workaround for shells with broken 'set -e' + + * tests/dist-formats.tap: Some versions of the BSD shell wrongly + bail out when the 'errexit' shell flag is active and the left-hand + command in a "&&" list fails and that list is the *last* command + of a "case" statement. This was causing an incorrect initialization + of the '$missing_compressors' variable, and thus potential spurious + failures when non-existing programs were assumed to be available. + +2012-02-12 Stefano Lattarini + + tests: workaround for shells with broken 'set -e' + + * tests/yacc-cxx.test: Some versions of the BSD shell wrongly bail + out when the 'errexit' shell flag is active if the left-hand + command in a "&&" list fails and such list is the *last* command + of a "for" or "while" loop or of an "if" construct. Work around + this issue. + * tests/check12.test: Likewise. + +2012-02-12 Stefano Lattarini + + tests: avoid spurious failure with non-bison yacc + + Issue revealed by a failure on NetBSD 5.1. + + * tests/suffix10.tap (Makefile.am): Adjust the rule generating + the '.y' files so that such files won't use bison-only features. + +2012-02-12 Stefano Lattarini + + 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 similar commits 'v1.11-546-gca0ba5d' (24-10-2011), + 'v1.11-1085-gb5c3968' (24-10-2011) and 'v1.11-871-geb147a1' + (25-05-2011). + + * tests/lex-clean.test: Provide a dummy 'yywrap' function. + * tests/lex-line.test: Likewise. + * tests/lex-nodist.test: Likewise. + * tests/lex-depend.test: Likewise. + * tests/lex-clean-cxx.test: Move the dummy 'yywrap' function + from the main '.cc' file into the '.lxx' file, so that it won't + be subject to the namespace declaration in the '.cc' file (which + was causing a spurious link error in systems without a default + "lex library"). + +2012-02-12 Stefano Lattarini + + Merge branch 'yacc-work' into yl-work-for-master + + * yacc-work: (37 commits) + fixup: list of yacc/lex tests was botched + tests: work around bug#7884 in many yacc/lex tests + yacc/lex tests: remove an unneeded workaround for bug#8485 + yacc/lex tests: avoid too much failures with FreeBSD make + yacc-dist-nobuild.test: add reference to bug#7884 + yacc tests: fix bug in 'yacc-cxx.test' + lex tests: fix spurious link errors on Solaris + lex: "make clean" removes .c files from non-distributed .l + lex tests: make test on Lex dependency tracking more "semantic" + lex tests: remove erroneous check about ylwrap distribution + yacc tests: "make clean" removes C++ files from non-distributed .y + tests: add a workaround for automake bug#8485 + tests: add a couple of inter-tests reference + lex tests: require just `lex' instead of `flex' + fix typo in ChangeLog (2011-05-04) + tests defs: use `skip_' for skipping yacc/lex related tests + lex/yacc tests: remove redundant $distdir definition + coverage: test lex-generated "#line" directives postprocessing + tests: minor improvements to a couple of yacc tests + tests: fix spurious failure in test 'yacc-d-cxx.test' + ... + + + Extra non-trivial edits: + + * tests/defs.in: Delete; the differences from maint has been + merged into 'tests/defs' and 'tests/defs-static.in'. + * tests/defs (yacc, lex): Use 'skip_all_', not 'skip_', to + skip the whole test case if yacc (resp. lex) is missing. + (bison): New, set up the environment so that 'bison -y' will + be used as the yacc program. + (useless_vpath_rebuild, yl_distcheck): Moved in from + 'tests/defs.in'. + * tests/defs-static.in ($YACC, $LEX): Default to the values + determined at configure time, and allow them to be overridden + by the more namespace-safe variables '$AM_TESTSUITE_YACC' and + '$AM_TESTSUITE_LEX' respectively. + * tests/Makefile.am (do_subst): Also substitute '@YACC@' and + '@LEX@'. + * Several tests: Fix requirements declarations, by preferring + 'lex' and 'yacc' over 'flex' and 'bison' whenever possible. + +2012-02-12 Stefano Lattarini + + fixup: list of yacc/lex tests was botched + + * tests/list-of-tests.mk: Update to take into account the addition, + renaming, removing or split-ups of Yacc/Lex tests that have taken + place in the 'yacc-work' branch. Problem likely introduced by a + botched merge of 'maint' into 'yacc-work'. + +2012-02-12 Stefano Lattarini + + docs: move chapter on automake history out of main manual + + The chapter on Automake history, while certainly interesting and + even fascinating, does not truly pertain to a reference manual, + so move it out from there and into its own dedicated file. This + change is made more advisable and pressing by the fact that such + and "Automake history" chapter hasn't been updated since the 1.9.6 + release, so it has been becoming less faithful and useful since + then. + + * doc/history.texi: New, manual on the history of the automake + package; extracted from ... + * doc/automake.texi: ... this file, with related adjustments. + * doc/Makefile.am (info_TEXINFOS): Add 'history.texi'. + (history_TEXINFOS): New, list included file 'fdl.texi'. + * Makefile.am (release-stats): Remove as obsolete. + * HACKING (Release Procedure): Don't advise anymore to run the + "release-stats" target and to update the manual with its output. + * NEWS: Update. + * .gitignore: Likewise. + +2012-02-12 Stefano Lattarini + + depcomp tests: avoid redundant runs for libtool tests + + When running libtool-oriented tests, our 'depcomp.sh' script used + to run the same checks thrice: once after having run configure + with the '--disable-shared' option, once after having run it with + the '--enable-shared' option, and once by allowing configure to + automatically select which kind of library (or libraries) to build. + + This was done to offer extra coverage for the less-common 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). + About this, see commit 'Release-1-10-24-ge89ec38' of 28-03-2007, + "* lib/depcomp (aix): Rewrite depmode in the spirit of the tru64 + one". + + But that extra coverage came at the price of *considerably* slowing + down the depcomp libtool-oriented tests, since for each of them the + tested source tree was configured and built *twelve* times (rather + than "just" four as it is for the non-libtool case). + + So, to strike a balance between coverage and speed, we now run the + libtool-oriented tests with the three different configuration modes + *only* when it is possible that the depmode that will get selected + is one of those which can actually benefit from the extra coverage. + + * tests/depcomp.sh: Adjust to only run the threefold libtool tests + when that can truly be potentially useful. Add related explanatory + comments. + +2012-02-09 Stefano Lattarini + + tests: avoid wrong skips in dist-formats.tap + + * tests/dist-formats.tap: The test checking whether the 'compress' + program is actually capable of compressing files relied on the + assumption that 'compress' exits with status zero if no problem + occurs; alas, this reasonable assumption doesn't hold in practice, + since 'compress' does (and is documented to) exit with status 2 if + the output is larger than the input after (attempted) compression! + Fix this by using and input that 'compress' can actually reduce in + size when compressing. + Do some related reformatting of surrounding code since we are at it. + +2012-02-09 Stefano Lattarini + + tests: few tweakings and cosmetic changes + + * tests/dist-formats.tap: Fix botched spacing. + * tests/subobjname.test: Prefer spaces to tabs in indentation. + * tests/cond43.test: Likewise. + * tests/comment7.test: Likewise. + * tests/compile_f90_c_cxx.test: Use "$tab" instead of literal + tab characters in the grep regexp. + * tests/compile_f_c_cxx.test: Likewise. + * tests/pluseq3.test: Likewise. + * tests/cond-basic.test: Likewise. + * tests/acloca16.test: Add empty line before trailing ':' command. + * tests/bsource.test: Likewise. + * tests/depend5.test: Likewise. + * tests/depend6.test: Likewise. + * tests/destdir.test: Likewise. + * tests/fort2.test: Likewise. + * tests/instdir-java.test: Likewise. + * tests/instdir-lisp.test: Likewise. + * tests/instdir-python.test: Likewise. + * tests/instdir.test: Likewise. + * tests/instdir2.test: Likewise. + * tests/ltinstloc.test: Likewise. + * tests/missing.test: Likewise. + * tests/missing2.test: Likewise. + * tests/nodef.test: Likewise. + * tests/nodef2.test: Likewise. + * tests/subst4.test: Likewise. + * tests/werror3.test: Likewise. + * tests/commen11.test: Likewise. Also, make grepping of automake + stderr slightly stricter, and properly quote strings with shell + metacharacters. + * tests/nodep2.test: Add empty line before trailing ':' command. + Do not create unneeded dummy source files. + +2012-02-09 Stefano Lattarini + + tests: remove a couple of redundant 'set -e' calls + + * tests/conffile-leading-dot.test: Do not set the 'errexit' + shell flag, as it is already set by 'tests/defs'. + * tests/make-dryrun.test: Likewise. + +2012-02-09 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: fix a timestamp-related spurious failures + dryrun: fix regression with '$(am__make_dryrun)' + test defs: function 'is_newest' now works also with directories + +2012-02-09 Stefano Lattarini + + Merge branch 'dryrun-fix' into maint + + * dryrun-fix: + dryrun: fix regression with '$(am__make_dryrun)' + +2012-02-09 Peter Rosin + + tests: check if 'compress' is real or fake + + On Cygwin, 'compress' is provided by sharutils and is just a + dummy script that is not able to actually compress (it can + only decompress). This fake 'compress' is not usable for + our purpose - to create compressed tarballs. + + * tests/dist-formats.tap (missing_compressors): Count 'compress' + as missing if it does not support the -c option. + +2012-02-08 Peter Rosin + + Merge branch 'msvc' + + * msvc: + depcomp: try to prevent whitespace regressions + depcomp: recognize tabs as whitespace in the dashmstdout mode + depcomp: quote 'like this', not `like this' + +2012-02-08 Stefano Lattarini + + depcomp tests: avoid spurious failures with 'dashXmstdout' depmode + + * tests/gen-testsuite-part: The 'dashXmstdout' depmode cannot be + truly forced on gcc (like we were trying to do, causing spurious + failures in the process); so don't do that. This change shouldn't + actually reduce coverage anyway, since, as the comments in + 'lib/depcomp' say, the 'dashXmstdout' depmode is just like + the 'dashmstdout' one, only with a different argument for the + compiler. + +2012-02-08 Peter Rosin + + depcomp: try to prevent whitespace regressions + + Suggested by Stefano Lattarini. + + * lib/depcomp: Add $tab and $nl variables and use them + throughout. + +2012-02-08 Peter Rosin + + depcomp: recognize tabs as whitespace in the dashmstdout mode + + Commit Release-1-7-2b-2-gf03ceab "Cope with DOS filenames in + dependencies." inadvertedly converted tabs into spaces. + + * lib/depcomp (dashmstdout): Add a tab character to all sets + matching whitespace. + +2012-02-08 Peter Rosin + + depcomp: quote 'like this', not `like this' + + Cherry-picked from recent changes from master. + + * lib/depcomp: Quote 'like this', not `like this'. + +2012-02-08 Peter Rosin + + tests: check the depmodes 'msvisualcpp' and 'msvcmsys' + + * tests/defs (cygpath): New requirement, checking that cygpath + is working. + (mingw): New requirement, checking that the build system is + MSYS (in its normal MinGW mode). + * tests/gen-testsuite-part (depmodes): Add entries for depmodes + 'msvisualcpp' and 'msvcmsys'. + +2012-02-08 Stefano Lattarini + + tests: better way to compare lists in Makefile rules + + With this commit, we introduce a new helper shell script for use + in the testsuite, which is meant to allow the test cases to easily + check whether two whitespace-separated lists are equal; this ability + is particularly useful to check for equality of the contents of make + variables that are expected to contain multiple whitespace-separated + words, and are defined through line continuations (or are rewritten + by automake in this way), or that contain expansion of potentially + empty variables. + + Before this change, a test checking that an usage like this one: + + VAR = valA + if COND1 + VAR += val1 # com1 + endif COND1 + VAR += valC + + worked as expected, couldn't use rules like: + + ## Doesn't work because $(VAR) expands to multiple words + verify: + test $(VAR) = "valA val1 valC" + + nor like: + + ## Doesn't work because the final expansion of $(VAR) contains + ## repeated contiguous whitespace characters (it actually + ## equals "valA val1 valC", not "valA val1 valC"), and this + ## is an internal detail which might change and which we don't + ## want to explicitly rely on. + verify: + test "$(VAR)" = "valA val1 valC" + + Instead, we had to rely on cumbersome workaround such as: + + ## This works, but is ugly. + verify: + test "`echo $(VAR)`" = "valA val1 valC" + + or: + + ## This works, but is even uglier. + verify: + echo BEG: $(VAR) :END | grep "BEG: valA val1 valC :END" + + Now, with the help of the new 'is' script, we can perform such a + check in a clearer and more straightforward way, as in: + + ## Works, and reads clearly. + verify: + is $(VAR) == valA val1 valC + + * tests/is: New helper shell script, telling whether two whitespace + separated lists are equal. + * Makefile.am (EXTRA_DIST): Add it. + * tests/colneq2.test: Use the new helper script, and accordingly + get rid of older, more cumbersome idioms. + * tests/cond11.test: Likewise. + * tests/cond16.test: Likewise. + * tests/cond18.test: Likewise. + * tests/cond22.test: Likewise. + * tests/cond31.test: Likewise. + * tests/cond38.test: Likewise. + * tests/test-logs-repeated.test: Likewise. + * tests/objext-pr10128.test: Likewise. + * tests/programs-primary-rewritten.test: Likewise. + * tests/substre2.test: Likewise. Also ... + (configure.in, Makefile.am): Add a couple of hack to avoid having + to require (and run) a C compiler; accordingly ... + ($required): ... remove this. + * tests/exeext4.test: Likewise. + * tests/substref.test: Likewise. Also ... + (hello.c): Use ": >" rather than "cat < + + tests: improve and rework tests on dependency tracking + + Fixes automake bug#10434. Suggestion by Peter Rosin. + + The 'depcomp.tap' test case worked by trying to unconditionally + force the compiler in use by the testsuite to use, one by one, *all* + the dependency modes known by the 'depcomp' script, and, for each + such forced mode that was compatible enough with said compiler not + to cause breakage in the basic compilation rules, checking that it + was *also* good enough not to break remake rules in VPATH builds. + + This seemed a good approach when this test was first introduced, as + it apparently increased coverage for the less used and less tested + dependency-tracking modes. But in the log run it turned out the + approach was actually in part too brittle, causing some annoying + spurious failures (as with the Tru64 depmode forced on GCC, see + automake bug#10434), and partly too forgiving, since, for some of + the more corner-case dependency modes, the 'depcomp' script simply + reverts to silently disabling dependency tracking when an error is + encountered (this happened e.g., with the Tru64 depmode forced on + the Sun C compiler 5.9), so that a passing test means nothing, and + only gives a false sense of security. + + As Peter Rosin put it, "it's just dead wrong to assume that feeding + -M or -xM to the compiler (or whatever other random stuff 'depcomp' + might do) and not get an error is the same as dependencies magically + appearing". + + So we get rid of this wrong approach, and in the process proceed to + a complete overhaul of many of the tests on automatic dependency + tracking, extending the offered coverage and rationalizing their + organization. + + * tests/depcomp.sh: New helper script, used by several new + autogenerated tests. + * tests/gen-testsuite-part: Generate several tests based on the + new 'depcomp.sh' script. Emit makefile code that declares their + dependency on that script, and that extends EXTRA_DIST in order + to distribute it. + * tests/depmod.tap: Remove. + * tests/depend2.test: Remove, it has been subsumed by the new + autogenerated test 'depcomp-disabled.tap'. + * tests/depcomp3.test: Remove, it has been subsumed by the new + autogenerated test 'depmod-dashmstdout.tap'. + * tests/depcomp3.test: Remove, it has been subsumed by the new + autogenerated test 'depmod-lt-makedepend.tap'. + * tests/depcomp6.test: Remove, it has been subsumed by the new + autogenerated test 'depmod-auto.tap'. + * tests/depcomp7.test: Remove, it has been subsumed by the new + autogenerated test 'depmod-lt-auto.tap'. + * tests/depcomp5.test: Remove as obsolescent. + * test/list-of-tests.mk: Adjust. + * .gitignore: List the new autogenerated tests. + +2012-02-07 Stefano Lattarini + + tests: fix a timestamp-related spurious failures + + Fixes automake bug#10737. Report from Larry Daniel. + See also automake bug#8365 and commit 'v1.11-329-gd4df619' of + 30-03-2011, "tests: fix timestamp-related failures". + + * tests/aclocal5.test: Sleep before modifying m4 files that should + trigger remake rules. This fixes an hard-to-hit timestamp-related + race condition. + * THANKS: Update. + +2012-02-07 Stefano Lattarini + + dryrun: fix regression with '$(am__make_dryrun)' + + In commit v1.11-683-gda0964e of 05-02-2012, we introduced a new + variable '$(am__make_dryrun)' that could be used in recipes to + determine whether make is running in dry mode (e.g., as with + "make -n"). Unfortunately, the idiom we used fails to take into + account the case in which $(MAKEFLAGS) contains one or more variable + definitions whose value is a whitespace-separated list; for example, + if we invoke make as: + + make check TESTS="n1.test n2.test" + + then the better make implementations out there (at least modern + GNU make and BSD make) will export MAKEFLAGS to the following + value: + + TESTS=n1.test\ n2.test + + So a shell loop like the one we used in $(am__make_dryrun): + + for flag in $$MAKEFLAGS; do ... + + won't behave as expected: the shell word-splitting rules will break + up the entry for TESTS into the two distinct entries "TESTS=n1.test\" + and "n2.test", and this second entry will goad our $(am__make_dryrun) + code into thinking that make is performing a dry run! + + So now we simply loop over the expanded value of $(MAKEFLAGS). + This solves the regression, but alas, is more brittle in case the + users passes on the command line a macro value containing unbalanced + " or ' quotes, or shell metacharacters like, say, '`' or '('. This + should almost never happen though, so we don't worry about it now; + we will revisit the issue only when and if we receive bug reports in + this area. + + * lib/am/header-vars.am (am__make_dryrun): Fix. + * tests/make-dryrun.test: New test. + * tests/list-of-tests.mk: Add it. + +2012-02-07 Stefano Lattarini + + tests: work around bug#7884 in many yacc/lex tests + + Due to automake bug#7884, many test cases on Yacc/Lex support are + failing when run with FreeBSD make. Since these failures are all + due to the same bug, and that bug is well understood and already + explicitly exposed in the dedicated 'yacc-dist-nobuild.test' test, + the reported failures are mostly noise, that not only is annoying, + but which might end up covering different real bugs or regressions. + + Thus we minimize such spurious failures, by ensuring the commands + triggering them (most of them being "make distcheck" invocations) + will be skipped when $MAKE suffers of the bug/limitation that + triggers automake bug#7884. + + * tests/defs.in (useless_vpath_rebuild): New function. + (yl_distcheck): Likewise. + * tests/lex3.test, tests/subpkg-yacc.test, tests/yacc-basic.test, + tests/yacc-cxx.test, tests/yacc-d-basic.test, tests/yacc-d-cxx.test, + tests/yacc-dist-nobuild-subdir.test : Use them to avoid extra + failures caused by automake bug#7884. Where possible, throw in + some related simplifications. + +2012-02-06 Stefano Lattarini + + Merge branch 'maint' into yacc-work + + * maint: (75 commits) + test defs: function 'is_newest' now works also with directories + refactor: new variable telling whether make is running in "dry mode" + ... + +2012-02-06 Stefano Lattarini + + test defs: avoid spurious XPASS results with NetBSD make + + * tests/defs (make_can_chain_suffix_rules): Ensure to properly + declare the '.SUFFIXES:' in the temporary Makefile used to check + whether $MAKE is able to automatically chain suffix rules. This + avoids spurious XPASS results with (at least) NetBSD make in some + 'suffix*.tap' tests; in a sense also, this also makes the probing + of $MAKE capabilities more faithful, since the Automake-generated + Makefiles are expected to properly declare the '.SUFFIXES:' as + well. + +2012-02-06 Stefano Lattarini + + cosmetics: few whitespace fixlets + +2012-02-06 Stefano Lattarini + + cosmetics: various typofixes + + Several typofixes in documentation and comments, as + suggested by the "codespell.py" script. Reference: + + +2012-02-06 Stefano Lattarini + + cosmetics: convert encoding from ISO-8859 to UTF-8 in some tests + + The changed files have been converted using iconv; specifically, + the command "iconv --from-code=ISO-8859-1 --to-code=UTF-8". + + * tests/block.test, tests/tagsub.test: Converted to UTF-8 encoding. + +2012-02-06 Stefano Lattarini + + test defs: remove obsolete requirement 'rst2html' + + * tests/defs (rst2html): Remove, it's not needed anymore now that + the old code supporting the ".log -> .html" conversion for the + parallel-tests harness has been moved in contrib. This removal + should have actually be done in commit v1.11-1757-g0a9d201 of + 17-01-2012, 'check: move ".log -> .html" conversion in contrib'. + +2012-02-06 Stefano Lattarini + + tests: workaround for shells with broken 'set -e' + + * tests/defs (gmake, native, rst2html): Some versions of the BSD + shell wrongly bail out when the 'errexit' shell flag is active and + the left-hand command in a "&&" list fails, if that list is the + *last* command of a "for" or "while" loop. Work around this issue. + * tests/lex3.test: Likewise. + * tests/check12.test: Likewise. + * tests/yacc-basic.test: Likewise. + * tests/lex-noyywrap.test: Likewise. + * tests/parallel-tests2.test: Likewise. + * tests/lex-lib-external.test: Likewise. + * tests/check-no-test-driver.test: Likewise. + * tests/test-metadata-recheck.test: Likewise. + * tests/parallel-tests-dry-run-1.test: Likewise. + * tests/parallel-tests-dry-run-2.test: Likewise. + * tests/parallel-tests-unreadable.test: Likewise. + * tests/test-driver-custom-no-extra-driver.test: Likewise. + + Problem revealed by spurious testsuite failures on a NetBSD 5.1 + system and an OpenBSD 5.0 system. + +2012-02-06 Stefano Lattarini + + cosmetics: fix a typo in comments + + * tests/extra-programs-empty.test: Fix typo in heading comments. + +2012-02-05 Stefano Lattarini + + test defs: function 'is_newest' now works also with directories + + Reported by Jim Meyering against automake master (see bug#9147) and + by Adam Sampson against automake 1.11.3 (see bug#10730). + + * tests/defs (is_newest): Call 'find' with the '-prune' option, + so that it won't descend in the directories (which could cause + spurious results). + * THANKS: Update. + + Backported from commit v1.11-914-gb6a40fa (originally on master). + +2012-02-05 Stefano Lattarini + + parallel-tests: more uses for '$(am__make_dryrun)' + + With this change we refactor some recipes of the parallel-tests + harness to make them use, where appropriate, the new internal + variable '$(am__make_dryrun)' (introduced in the 'maint' branch) + when they need to determine whether make is running in "dry mode", + i.e., with "make -n". This allows for some simplifications and + for improved uniformity. + + * lib/am/check.am (check-TESTS recheck): Use $(am__make_dryrun) and + simplify accordingly. + (am--redo-logs): Delete this internal helper recipe, merged into ... + ($(TEST_SUITE_LOG)): ... this, with the help of $(am__make_dryrun). + recipe accordingly. + +2012-02-05 Stefano Lattarini + + Merge branch 'maint' + + * maint: + refactor: new variable telling whether make is running in "dry mode" + tests: do not clobber the modified CC + +2012-02-05 Stefano Lattarini + + refactor: new variable telling whether make is running in "dry mode" + + We define a new variable '$(am__make_dryrun)', that can be used + in recipes to determine whether make is running in "dry mode" (as + with "make -n") or not. This is 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). + + * lib/am/header-vars.am (am__make_dryrun): New variable. + * lib/am/check.am (check-TESTS recheck): Use it, and simplify + recipe accordingly. + * lib/am/distdir.am (distdir): Likewise. + * lib/am/lisp.am ($(am__ELCFILES)): Likewise. + +2012-02-02 Peter Rosin + + tests: do not clobber the modified CC + + If CC is originally a losing compiler, AM_PROG_CC_C_O will + modify CC. "$MAKE -e" will then clobber this modified CC + and reintroduce the raw losing compiler causing the test + to fail, as subdir-objects is in effect. + + tests/check8.test: Drop -e from the $MAKE invocation, since + AM_COLOR_TESTS is not specified in the Makefile and -e is + therefore not needed. + +2012-02-02 Stefano Lattarini + + cosmetics: fix indentation and typos in perl TAP driver + + * lib/tap-driver.pl (get_test_exit_message): Fix botched + indentation. Fix typo in error message: s/ststus/status/. + +2012-02-02 Stefano Lattarini + + test defs: fix typo in variable name ($AM_TESTSUITE_PERL) + + * tests/defs-static.in: Fix typo: it's '$AM_TESTSUITE_PERL', + not '$AM_TESTUITE_PERL'. + +2012-02-02 Stefano Lattarini + + tap/perl: handle missing or non-executable scripts better + + This change improves how our Perl-based TAP driver handles + non-runnable test scripts (meaning they might be not executable, + or not readable, or even not exist). In particular, it makes the + driver deterministically display a clear "ERROR" result instead + of possibly dying with diagnostic from 'TAP::Parser' internals, + and prevents it from displaying spurious "missing TAP plan" errors. + + Moreover, with this change, some testsuite failures present only + with newer perl versions (e.g., 5.14) are fixed. See automake + bug#10418. + + * tests/tap-bad-prog.tap: When testing the perl implementation of + the TAP driver, and when the perl interpreter offers a good-enough + 'IPC::Open3::open3' function, expect it not to display spurious + "missing TAP plan" diagnostic if the error is actually due to a + non-runnable test script. + * lib/tap-driver.pl (start): Removed, broken up into ... + (setup_io): ... this ... + (setup_parser): ... and this, which now tries to catch and report + errors in launching the test scripts. + (finish): New, used by both 'main' and 'setup_parser'. + (main): Adjust. + +2012-02-01 Peter Rosin + + Merge branch 'maint' + +2012-02-01 Peter Rosin + + tests: put AM_PROG_CC_C_O before AC_OUTPUT to help losing compilers + + When AM_PROG_CC_C_O is after AC_OUTPUT, the compile script + is not used even if needed, causing testsuite fails if + libtool is not used. + + * tests/depcomp8a.test: Uncomment the AM_PROG_CC_C_O macro + in its correct location, as indicated... + (configure.in): ...with this comment. + * tests/depcomp8b.test: Sync with tests/depcomp8a.test. + +2012-01-31 Stefano Lattarini + + cleanup: remove unused .am file + + * lib/am/comp-vars.am: Remove. This file has stopped being useful + since commit 'Release-1-4d-206-g3334f9a' of 09-04-2001, and should + have been removed back then. But apparently only its contents were + removed, leaving the file empty but still present in the repository. + Or maybe this situation is the consequence of a minor blunder in + the conversion from CVS to Git; either way, this is not a big deal. + +2012-01-31 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: do not assume the object file extension is .o + tests: avoid spurious failure of 'transform2.test' on Cygwin + tests: avoid spurious failure of deleted-am.test with FreeBSD make + tests: avoid possibly undeserved PASS from check8.test + warnings: more precise category and message for one warning + release: revamp rules to tag and upload the releases + amversion: add missing dependency + hacking: update advice w.r.t. synced files + hacking: don't reference ChangeLog anymore + + + Extra non-trivial edits: + + * tests/suffix8.tap: Copy in (by hand) the modifications done + to 'suffix8.test' on maint, i.e., the addition of an explicit + '.y_.obj:' suffix rule to Makefile.am. + +2012-01-30 Peter Rosin + + Merge branch 'msvc' + + * msvc: + ar-lib: ignore the verbose modifier instead of erroring out + scripts: cherry-pick recent changes from master + tests: add missing dependency for some 'ar-lib*.test' tests + +2012-01-30 Peter Rosin + + ar-lib: ignore the verbose modifier instead of erroring out + + * lib/ar-lib: A number of tests uses the v modifier when listing + the archive content, ignore it to make them pass. + +2012-01-30 Peter Rosin + + scripts: cherry-pick recent changes from master + + * lib/ar-lib: prefer the term "Windows" over "Win32" and quote + 'like this', not `like this'. + * lib/compile: Likewise. + +2012-01-30 Stefano Lattarini + + maintcheck: fix real and spurious warnings + + * lib/Makefile.am (install-data-hook): Correctly quote $(DESTDIR) + occurrences. + * Makefile.am (install-exec-hook, uninstall-hook): Likewise. + (autodiffs): Prefer '$(am__cd)' to plain 'cd', where warranted. + * doc/Makefile.am ($(srcdir)/amhello-1.0.tar.gz): Likewise. Also, + prefer using AC_SUBST'd $(abs_top_builddir) over obtaining it at + runtime from $(top_builddir). + * syntax-check.mk (sc_mkinstalldirs): Tweak to whitelist known + harmless occurrences of the checked-against usages. + (sc_no_for_variable_in_macro): Likewise. + * tests/CheckListOfTests.am (maintainer-check-list-of-tests): Tweak + to avoid spuriously triggering the 'sc_no_for_variable_in_macro' + maintainer check. Prefer '$(am__cd)' to plain 'cd' when warranted. + +2012-01-30 Stefano Lattarini + + maintcheck: take advantage of some GNU make features + + We can do so now that our maintainer checks require GNU make + unconditionally. + + * syntax-check.mk (ams, xtests): Redefine as "immediate variables", + using the GNU make $(shell ...) builtin. + (maintainer-check-list-of-tests): Take advantage of GNU make "-C" + option. Don't use $(AM_MAKEFLAGS), we shouldn't need it with GNU + make. + +2012-01-30 Stefano Lattarini + + build: require GNU make in order to run the maintainer checks + + This is not a real regression in portability, since most maintainer + check rules already assumed GNU grep, and were anyway only meant to + run on the developers' systems (where we can safely assume the + presence of GNU make). + + This change will allow us to take advantage, in future changes, of + more GNU make features, thus simplifying or optimizing some of our + maintainer rules. + + * GNUmakefile: New, including 'Makefile' and 'syntax-checks.mk'. + * configure.ac (AC_CONFIG_LINKS): Link it in the builddir. + * Makefile.am (EXTRA_DIST): Distribute 'GNUmakefile' and + 'syntax-checks.mk'. + Move all syntax-check rules and auxiliary variables into ... + * syntax-checks.mk: ... this new file, with some adjustments. + +2012-01-30 Stefano Lattarini + + maintcheck: refactor rules checking '*.am' files + + A small refactoring in our syntax-check to avoid code duplication + and to ensure more uniform checking. This change introduces some + new failures in syntax-check rules (both real and spurious), that + will be fixed in follow-up changes and code reorganizations. + + * Makefile.am (ams): New variable, holding the list of all the + '*.am' fragments in he automake source tree. + (sc_no_brace_variable_expansions): Use it. + (sc_rm_minus_f): Likewise. + (sc_no_for_variable_in_macro): Likewise. + (sc_mkinstalldirs): Likewise. + (sc_pre_normal_post_install_uninstall): Likewise. + (sc_cd_in_backquotes): Likewise. + (sc_cd_relative_dir): Likewise. + (sc_tests_make_without_am_makeflags): Likewise. + (sc_tests_plain_egrep_fgrep): Likewise. + (sc_mkdir_p): Likewise. + +2012-01-30 Peter Rosin + + tests: do not assume the object file extension is .o + + * tests/specflg7.test: Dig out the object file extension from the + OBJEXT makefile variable. + * tests/substref.test: Likewise. + * tests/specflg8.test: Likewise. Also check that the false-true + object is created instead of checking the true-true object twice. + * tests/suffix8.test: Add a chain rule for the case where the + object file extension is .obj. + +2012-01-30 Peter Rosin + + tests: fetch the 'compile' script for subdir objects + + * tests/libobj19.test: Subdir objects are used, so the 'compile' + script needs to be present for inferior hosts. Fetch it. + +2012-01-30 Peter Rosin + + tests: fetch the 'ar-lib' script for archiver usage + + * tests/libobj10.test: The archiver is used, so the 'ar-lib' + script needs to be present for inferior hosts. Fetch it. + +2012-01-28 Stefano Lattarini + + tests: avoid spurious failure of 'transform2.test' on Cygwin + + On newer Cygwin versions (at least 1.7.x), the 'transform2.test' + test has been failing spuriously; the gist is the following: + some *purposefully* rigged install rules there try something + like: + + install bla.exe .../inst/bin/foo.exe + install script.sh .../inst/bin/foo + + and the second install command fails (trying to overwrite the + '.../inst/bin/foo.exe' file, likely due to overly aggressive + appending of '.exe' suffix when copying/renaming Windows + executables). Since this is a Cygwin issue rather than an + Automake one (and since the use case we are testing is a really + corner-case anyway, making it unworthy to attempt to work + around it in automake proper), we simply hack the test case + to avoid the failure. + + Analysis by Peter Rosin and Ralf Wildenhues. + + References: + + + + * tests/transform2.test: Skip the affected part of the test + if the described Cygwin behaviour is detected. + +2012-01-28 Stefano Lattarini + + tests: avoid spurious failure of deleted-am.test with FreeBSD make + + * tests/deleted-am.test: Sleep between the removal of the included + '.am' fragments and the subsequent "make" calls, to ensure that the + remake rules kick in. This is required to avoid racy spurious + failures (~ 60% of the time) with FreeBSD make. + +2012-01-27 Stefano Lattarini + + tests: avoid possibly undeserved PASS from check8.test + + * tests/check8.test: Strengthen grepping of "make check" output + where we know no problem with VPATH rewrites can take place. This + has the advantage of ensuring that we won't match also "sub/bar" + when looking for "bar" during the uncolorized tests. + + Suggestion by Peter Rosin. + +2012-01-27 Stefano Lattarini + + tests: work around MinGW/MSYS issue in fd redirections + + Some checks on $(AM_TESTS_FD_REDIRECT) were failing on MSYS, likely + because system calls like "write(9, ...)" simply doesn't work for + MinGW-compiled programs. Similar usages work for the shell scripts + though, since /bin/sh is an MSYS program and thus is a lot more + POSIX-ish than most MinGW-compiled programs. + + The best fix for this issue is to separate the checks using shell + scripts as dummy test cases from the checks using compiled programs + for the same purpose, and skip these latter checks on MinGW. + + This change fixes automake bug#10466. Report by Peter Rosin. + + * tests/parallel-tests-fd-redirect.test: Move checks using compiled + C programs as test cases to ... + * tests/parallel-tests-fd-redirect-exeext.test: ... this new test. + * tests/list-of-tests.mk: Update. + +2012-01-27 Stefano Lattarini + + warnings: more precise category and message for one warning + + If automake detected an usage like "AC_CONFIG_FILES([./Makefile])" + in configure.ac, it warned that such an usage was unportable to + non-GNU make implementations. But the truth is actually worse: + that is actually *unportable to GNU make* itself, since it breaks + the automatic remake rules in subtle ways. + + So we now reveal this breakage in a new test case, and enhance + the warning by giving it a more precise and correct wording, and + by moving it from the category 'portability' to the category + 'unsupported'. + + * automake.in (scan_autoconf_config_files): Improve the warning. + * tests/conffile-leading-dot.test: New test. + * tests/list-of-tests.mk: Add it. + +2012-01-25 Stefano Lattarini + + release: revamp rules to tag and upload the releases + + The older Makefile rules used to create and tag the releases were + based on an approach we now consider flawed: they over-mechanized + some delicate operations that are better performed manually *and* + double-checked by a developer, and at the same time they did not + run enough safety checks. + + * Makefile.am (GIT, version_rx, stable_version_rx, beta_version_rx, + match_version, git_must_have_clean_workdir, determine_release_type): + New variables. + (git-release, git-dist): Remove, they are superseded by ... + (git-tag-release, git-upload-release): ... these new targets. + +2012-01-25 Stefano Lattarini + + amversion: add missing dependency + + * m4/Makefile.am ($(top_srcdir)/m4/amversion.m4): Depend on + configure.ac, since the value of $(VERSION) can change every + time configure.ac is updated. + +2012-01-25 Stefano Lattarini + + hacking: update advice w.r.t. synced files + + * HACKING: Update and improve advices and explanations about files + in the automake repository that are now owned by automake, but + mirrored from other upstreams. Also, don't list these files + explicitly, rather point the reader to the $(FETCHFILES) variable + in Makefile.am. + * Makefile.am (FETCHFILES): Don't state that "there should be a + lot more here", as this is not true anymore today. Only 'COPYING' + must be synced by hand. + +2012-01-25 Stefano Lattarini + + hacking: don't reference ChangeLog anymore + + * HACKING: Don't reference the ChangeLog file anymore, since that + is now generated from the git commit messages, not maintained by + hand. So remove advice that is obsolete, and speak about "git + commit message" instead of "ChangeLog entry" for advice that is + still relevant. + +2012-01-24 Stefano Lattarini + + multilib: move to contrib + + This follows up on commit v1.11-665-gc5df21e of 2012-01-17, + "multilib: deprecate, will be moved to contrib". See also: + + + * NEWS: Update. + * automake.in ($seen_multilib): Remove. + (scan_autoconf_traces): Don't trace 'AM_ENABLE_MULTILIB', and don't + handle it anymore. + (handle_multilib): Remove. + (generate_makefile): Don't call it anymore. + * doc/automake.texi: Remove documentation about multilib support, + related macros, and helper files. + * m4/multi.m4: Delete. + * m4/Makefile.am (dist_automake_ac_DATA): Remove it. + * lib/am/multilib.am: Delete. + * lib/am/Makefile.am (dist_am_DATA): Remove it. + * contrib/multilib/multilib.am: New file, adapted from extracts of + a Makefile.in generated with automake multilib support. We did + this instead of moving and editing 'lib/am/multilib.am' because it + allows us to license this file with a liberal license that will + permit users to copy-and-paste it in non-GPLed Makefile.am files + too). + * lib/symlink-tree, lib/config-ml.in: Move ... + * contrib/multilib: ... in here. + * lib/Makefile.am (dist_script_DATA, dist_pkgvdata_DATA): Update. + * contrib/multilib/README: New file. + * contrib/Makefile.am (EXTRA_DIST): Add the files created or moved + in 'contrib/multlib'. + * tests/multilib.test: Update and enhance a little. + * tests/help-multilib.test: Likewise. + +2012-01-23 Peter Rosin + + tests: improve diagnostics when write(2) fails + + MinGW programs can't redirect file descriptor 9, they can only redirect + stdin, stdout and stderr. So, improve the information in the test log. + + See automake bug#10466. + + * tests/parallel-tests-fd-redirect.test (baz.c, zardoz.c): Check the + return value from the write(2) call, and report detected errors. + +2012-01-23 Stefano Lattarini + + Merge branch 'compilers-for-testsuite' + + * compilers-for-testsuite: + readme: how to run the testsuite with cross-compilers + tests: no need to unset CFLAGS in tests requiring 'gcc' anymore + test defs: allow compilers to be auto-selected on user's request + test defs: substitute compilers and flags found at configure time + test defs: setup `*FLAGS' variables for GNU compilers + configure: search generic compilers for use in the tests + +2012-01-23 Stefano Lattarini + Peter Rosin + + readme: how to run the testsuite with cross-compilers + + * tests/README: Suggest a better way to run the automake testsuite + with cross-compilers -- that is, configuring the Automake source + tree with proper `--build' and `--host' configure option. And + yes, specifying both these options (not only `--host') is indeed + required to avoid spurious failures in corner cases. + When you call configure with the `--host' option but without the + `--build' option, configure tries to auto-detect whether you are + cross-compiling or not, by trying to run a generated executable. + That test might spuriously "succeed" in some corner cases (e.g., + Cygwin is able to run non-Cygwin apps). In fact, generally, it + can be the case that a cross-compilation is not detected as a + cross anymore just because someone has installed an emulator; as + an example, think of what can happen on a GNU/Linux system that + is configured (through the use of the binfmt_misc kernel module) + to execute PE executables (compiled for MS-DOS or Windows) through + Wine *automatically*. In conclusion, configure needs to be used + as recommended in the documentation (i.e., by specifying *both* + `--host' and `--build' instead of just one of them) to not have + the build fall into any of a number of weird traps. + * tests/defs (cross_compiling): Improve comments. + +2012-01-23 Stefano Lattarini + + tests: no need to unset CFLAGS in tests requiring 'gcc' anymore + + * tests/ccnoco.test: Since this test have "gcc" in $required, + there is no need to manually nullify the CFLAGS variable, since + now `tests/defs' should automatically re-define that to a value + appropriate for gcc. + * tests/ccnoco3.test: Likewise. + +2012-01-23 Stefano Lattarini + + test defs: allow compilers to be auto-selected on user's request + + In the recent changes, by pre-setting the required compilers for + the `configure' scripts launched by the test scripts, we have + slightly reduced the coverage of autoconf/automake code aimed at + automatically detecting said compilers. This commit restore such + coverage, by allowing the user to instruct the testsuite *not* to + preset the testsuite compiler(s). + + * tests/defs (cc): If $CC is set to the special value "autodetect" + or "autodetected", don't export the configure-detected CC, CFLAGS + and CPPFLAGS variables; rather, unset them. + (c++): Likewise, but for CXX, CXXFLAGS and CPPFLAGS instead. + (fortran): Likewise, but for FC and FCFLAGS instead. + (fortran77): Likewise, but for F77 and FFLAGS instead. + (require_compiler_): New function, to reduce code duplication. + +2012-01-23 Stefano Lattarini + + test defs: substitute compilers and flags found at configure time + + * tests/Makefile.am (do_subst): Also substitute CC, CXX, F77, FC, + CPPFLAGS, CFLAGS, CXXFLAGS, FCFLAGS and FFLAGS. + * tests/defs-static.in: Define those variables, allowing for + overrides from the environment. + * tests/defs (for tool in $required): Export (subsets of) those + variables when the stuff in `$required' calls for it. + Add related explanatory comments. + +2012-01-23 Stefano Lattarini + + test defs: setup `*FLAGS' variables for GNU compilers + + * configure.ac: Setup some `*FLAGS' variables for use by the + GNU compilers in our testsuite. For example, use `GNU_CFLAGS' + instead of `CFLAGS', and so on for similar variables. This + is especially useful in case the compilers found or defined + at configure time are not the GNU ones. + * tests/defs-static.in: Initialize those same variables with + the values set at configure time, but allowing overrides + from the environment. + * tests/Makefile.am (do_subst): Process configure-style + substitutions of those variables (e.g., `@GNU_CFLAGS@'). + * tests/defs: When a GNU compiler is required, override the + corresponding generic `*FLAGS' variable with the GNU-specific + variant (e.g., redefine `$CFLAGS' to take the value of + `$GNU_CFLAGS'). + +2012-01-23 Stefano Lattarini + + configure: search generic compilers for use in the tests + + * configure.ac: Look for "generic" C, C++ and Fortran compilers, + with the aim of starting to use them in the testsuite (this will + be done in future changes). This is more tricky than it seems, + since we don't want to abort the whole configure script even if + no one of those compilers is available (after all, they're only + needed by the testsuite, not to build automake), but currently + autoconf doesn't offer an easy way to obtain this behaviour. + We prefer non-GNU compilers to the GNU ones, to ensure better + coverage "in the wild". + +2012-01-22 Stefano Lattarini + + tests: remove redundant 'set -e' calls + + * tests/aclocal-install-absdir.test: Do not set the 'errexit' shell + flag, as it is already set by 'tests/defs'. + * tests/distcheck-pr10470.test: Likewise. + * tests/objext-pr10128.test: Likewise. + * tests/parallel-tests-dry-run-1.test: Likewise. + * tests/silent-nested-vars.test: Likewise. + * tests/tar-override.test: Likewise. + * tests/vala-mix.test: Likewise. + * tests/vala-vpath.test: Likewise. + +2012-01-22 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: fix spurious failure due to autom4te caching + vala: fix name of temporary file used in vala rules + vala tests: add missing 'valac' requirement, and other minor fixlets + news: fix grammaro + +2012-01-22 Stefano Lattarini + + tests: fix spurious failure due to autom4te caching + + * tests/lzma.test: Remove stale autom4te.cache directories, to + prevent racy, spurious failures (using 'aclocal --force' was + not enough, since the cache was still picked up by the following + automake call). + +2012-01-22 Stefano Lattarini + + dist tests: missing 'compress' program was causing spurious failures + + Fixes automake bug#10575. + + The compress(1) tool is becoming anachronistic, and thus is not + installed by default on modern distros (e.g., Fedora 16). We + can't thus unconditionally assume it exists on every reasonable + portability target. + + * tests/dist-formats.tap ($missing_compressors): When defining + this, don't assume anymore that compress(1) is unconditionally + available. + (Parallel compression): Skip this sub-test if compress(1) is + unavailable. + Since we are at it, fix a couple of unrelated buglets: a typo + in a test name (s/distcheck/ark-exists/), and some attempts to + remove directories with "rm -f". + +2012-01-22 Stefano Lattarini + + vala: fix name of temporary file used in vala rules + + Unquoted `@' characters in a "..." string in the automake script + were causing slightly wrong rules to be emitted in the generated + Makefile.in; i.e., rules like: + + rm -f $@ && echo stamp > $10t + + instead of the expected: + + rm -f $@ && echo stamp > $@-t + + * automake.in (lang_vala_finish_target): Fix that. + * tests/vala.test: Enhance. + +2012-01-22 Stefano Lattarini + + vala tests: add missing 'valac' requirement, and other minor fixlets + + See also automake bug#10575. + + * tests/vala-mix.test ($required): Add 'valac'; this will avoid + spurious failures on systems lacking a Vala compiler. + Add some explicative comments for a couple of non-obvious make + calls. + Make grepping of "make -n" slightly stricter, to avoid potential + false positives. + +2012-01-22 Stefano Lattarini + + news: fix grammaro + + * NEWS (Miscellaneous changes): Fix grammaro: s/don't/doesn't/. + + Reported by Jim Meyering. + +2012-01-21 Stefano Lattarini + + Merge branch 'maint' + + * maint: + fixup: distribute 'contrib/multilib/multi.m4' + multilib: deprecate, will be moved to contrib + fixlet: flags for Fortran77 compiler are in FFLAGS, not F77FLAGS + cosmetics: fix a botched comment in a maintainer check + +2012-01-21 Stefano Lattarini + + fixup: distribute 'contrib/multilib/multi.m4' + + This fix up a blunder in commit v1.11-665-gc5df21e of 2012-01-17, + "multilib: deprecate, will be moved to contrib". + + * contrib/Makefile.am (EXTRA_DIST): Add 'multilib/multi.m4'. + +2012-01-21 Stefano Lattarini + + multilib: deprecate, will be moved to contrib + + As of 2012-01-17, according to Google codesarch, almost no active + package is using the 'multilib' feature offered by automake. + + The only major exception seems to be GCC... But on a closer look, + it become clear that GCC basically carries its own version of + multilib support. In fact, Automake syncs its 'config-ml.in' and + 'symlink-tree' scripts from GCC; and the GCC repository contains a + version of the 'multi.m4' file that is *more* updated than the one + in the automake repository (the former having being modified the + last time in 2008, the latter only in 2006). + + The 'multilib' feature was anyway hardly documented at all, only + being briefly cited in the manual as an "obscure feature", "still + experimental", that was only for users "familiar with multilibs" + and which "can debug problems they might encounter". We expect + such users to be motivated and knowledgeable enough to make the + minor adjustments required to start using the contrib version of + multilib, if they really need to. + + * NEWS (Future backward incompatibility): Update. + * doc/automake.texi: Deprecate multilib support. State that it + will be removed from automake core in the next major release. + * m4/multi.m4 (AM_ENABLE_MULTILIB): Deprecate. If called, now + gives a proper warning in the 'obsolete' category (while still + retaining its former behaviour for the rest). + * tests/multilib.test: Update. + * contrib/multilib/multi.m4: New, verbatim copy of the earlier + version of multi.m4, without the new deprecation warning. + * Makefile.am (fetch): Don't sync the 'config-ml.in' file nor + the 'symlink-tree' script from GCC SVN repository anymore. + (FETCHFILES): Adjust. + (WGET_GCC): Remove, it's not needed anymore. + +2012-01-21 Stefano Lattarini + + fixlet: flags for Fortran77 compiler are in FFLAGS, not F77FLAGS + + This change fixes automake bug#10555. + + Note that the bug was a minor one, since it didn't affect the + compilation rules generated by automake, but only only the "hints" + printed by automake in some error messages (e.g., "The usual way + to define `FFLAGS' is to add AC_PROG_F77 to configure.ac"). + + * lib/Automake/Variable.pm (%_ac_macro_for_var): The code generated + by AC_PROG_F77 uses FFLAGS, not F77FLAGS, as the variable where to + look for switches for the Fortran 77 compiler: adjust accordingly. + +2012-01-19 Stefano Lattarini + + cosmetics: fix a botched comment in a maintainer check + + * Makefile.am (sc_tests_make_without_am_makeflags): Adjust + botched description of this check. + +2012-01-18 Stefano Lattarini + + Merge branch 'maint' + + * maint: + cmdline parsing: move into a dedicated perl module + +2012-01-18 Stefano Lattarini + + cmdline parsing: move into a dedicated perl module + + With this change, we delegate most of the automake and aclocal code + for command-line options parsing to a new module "Automake::Getopt". + This allows better code sharing between automake and aclocal, and + also with Autoconf, which will sync the new module from us. See + also autoconf commit 'v2.68-120-gf4be358' (2012-01-17, "getopt: new + Autom4te::Getopt module"), and this mailing list discussion: + + + This change might interact with the behaviour described in automake + bug#7434; for example, starting from now, "automake -Wfoo --version" + will cause automake to emit diagnostic like "unknown warning + category 'foo'" before actually printing the version number and + exiting. This is not a big deal in practice, and the code sharing + and simplifications introduced by this patch is certainly worth it. + Still, we should revisited the issue in the future. + + * lib/Automake/Getopt.pm: New module, basically a slightly-edited + copy of the 'lib/Autom4te/Getopt.pm' file from the autoconf devel + repository (commit v2.68-120-gf4be358). It defines and exports ... + (parse_options): ... this new function. + * automake.in (parse_arguments): Use the new function. + * aclocal.in (parse_arguments): Likewise. + * lib/Automake/Makefile.am (dist_perllib_DATA): Add the new file. + * tests/getopt.test: Remove. + * tests/list-of-tests.mk: Update. + +2012-01-18 Stefano Lattarini + + tests: don't use custom TAP diagnostic in our own tests + + We simply don't need it (yet), we are not actually using it (the + set up for using it is there in the Makefile, but no test script + makes actual use of that). + + * tests/Makefile.am (TAP_LOG_DRIVER_FLAGS): Remove '-comments' and + '--diagnostic-string' options. + * tests/defs ($diag_string_): Remove redefinition. + +2012-01-18 Stefano Lattarini + + tests: better name for a couple of tests + + Two tests checking "make -n" behaviour with the parallel-tests + harness has been introduced in the Automake repository in the past: + one of them ('parallel-tests-dryrun.test') in the maint branch, the + other one ('parallel-tests-dry-run.test') in the master branch. + + Needless to say, their too-much-similar names can be a great source + of confusion now. Moreover, the two tests have been written during + distinct refactorings, and are meant to exercise different code + paths and/or usage scenarios, so that no one of them subsumes the + other, and they should be both kept. + + Thus we simply rename both of them to avoid future confusion. + + * tests/parallel-tests-dryrun.test: Renamed ... + * tests/parallel-tests-dry-run-1.test: .. to this. + * tests/parallel-tests-dry-run.test: Renamed ... + * tests/parallel-tests-dry-run-2.test: .. to this. + Add cross-reference among them. + * tests/list-of-tests.mk: Adjust. + +2012-01-18 Stefano Lattarini + + build: simplify our top-level "recheck" target + + * Makefile.am (recheck): Now that all the test scripts are in + the 'tests/' directory, its recipe can be greatly simplified, + as we don't need to deal with recursion in multiple subdirectories + anymore. + +2012-01-18 Stefano Lattarini + + Merge branch 'maint' + + * maint: + cosmetics: move CheckListOfTests.am into tests/ + tests: move all under the same hierarchy ('tests/' directory) + gitlog-to-changelog: update from upstream + changelog: don't cluster multiple entries under the same "date line" + + + Extra non-trivial edits: + + * tests/Makefile.am (XFAIL_TESTS): Update with the xfailing tests + that were in 'lib/Automake/tests'. Add proper "FIXME" comment. + +2012-01-18 Stefano Lattarini + + cosmetics: move CheckListOfTests.am into tests/ + + After the previous change 'v1.11-660-gfbeda3d', the makefile + fragment 'CheckListOfTests.am' is used only by the Makefile.am + in 'tests'; so keeping them two nearer makes sense. It also help + in reducing potential confusion, since (after that same change) + the whole Automake testsuite is expected to be (and remain) + contained into the 'tests' subdirectory. + + * CheckListOfTests.am: Move ... + * tests/CheckListOfTests.am: ... to this. + * tests/Makefile.am (include): Adjust. + +2012-01-18 Stefano Lattarini + + tests: move all under the same hierarchy ('tests/' directory) + + This simplifies the organization of the Automake source tree and + reduces the (lamentably high) number of Makefiles in the Automake + build system by one. It also makes the maintainer check that + verifies the consistency of list of tests more self-contained and + simpler. Finally, it might be a first step forward the transition + to a non-recursive build system for automake (if we ever decide to + go down that road fully some day). + + * lib/Automake/tests: All the '*.pl' tests in here moved ... + * tests/pm: ... into this new directory. + * lib/Automake/tests/Makefile.am: Remove, its meaningful + contents moved ... + * tests/Makefile.am: ... here, with obvious adjustments. + (test_subdirs): New variable, for the sake of the recipe + of 'maintainer-check-list-of-tests'. + * CheckListOfTests (maintainer-check-list-of-tests): Enhance + its recipe to make it able to deal with test script residing + in subdirectories. + * Makefile.am (maintainer-check-list-of-tests): Simplified. + (TEST_SUBDIRS): Remove, no more needed. + * tests/list-of-tests.mk (perl_TESTS): New variable, lists + the '.pl' tests just moved into 'tests/pm'. + (handwritten_TESTS): Add the contents of '$(perl_TESTS)'. + * lib/Automake/Makefile.am (SUBDIRS): Remove. + * configure.ac (AC_CONFIG_FILES): Update. + * .gitignore: Adjust. + +2012-01-18 Stefano Lattarini + + gitlog-to-changelog: update from upstream + + * lib/gitlog-to-changelog: Update from gnulib upstream. The only + changes should be cosmetic and/or minor fixlets. + +2012-01-17 Stefano Lattarini + + changelog: don't cluster multiple entries under the same "date line" + + * lib/gitlog-to-changelog: Synced from gnulib. The new version + has a new option '--no-cluster', that disables clustering of + adjacent commit messages under the same "date line". + * Makefile.am (gitlog_to_changelog_options): Add '--no-cluster'. + Also add a proper '--format' specification to ensure we have a + blank line between the summary line and the commit message body. + +2012-01-17 Stefano Lattarini + + Merge branch 'maint' + + * maint: + fixup: contrib: really integrate in automake build system + +2012-01-17 Stefano Lattarini + + fixup: contrib: really integrate in automake build system + + * configure.ac (AC_CONFIG_FILES): Add 'contrib/Makefile'. + * Makefile.am (SUBDIRS): Add 'contrib'. + +2012-01-17 Stefano Lattarini + + check: move ".log -> .html" conversion in contrib + + That feature has been deprecated in the 1.11.x series, and marked + for removal from the automake core in the 1.12 release. Here we + implement such removal. + + Reference: + + + See also commit 'v1.11-650-g20f2ac9'. + + * doc/automake.texi, NEWS: Update. + * lib/am/check.am: Don't include 'check-html.am' anymore. + * lib/am/check-html.am: Move ... + * contrib/check-html.am: ... to this, and adjust comments. + * lib/am/Makefile.am (dist_am_DATA): Update. + * contrib/Makefile.am (EXTRA_DIST): Likewise. + * tests/parallel-tests2.test: Adjust. + * tests/parallel-tests-dryrun.test: Remove checks on the + ".log -> .html" conversion. + * tests/test-driver-custom-html.test: Remove as obsolete. + * tests/test-driver-custom-no-html.test: Likewise. + * tests/tap-html.test: Likewise. + * tests/list-of-tests.mk: Don't list removed tests anymore. + +2012-01-17 Stefano Lattarini + + Merge branch 'maint' + + * maint: + contrib: new, a directory for non-mainstream functionalities + +2012-01-17 Stefano Lattarini + + tap: some makes in parallel mode unconditionally serialize output + + Some make implementations (among them, FreeBSD make, NetBSD make, + and Solaris Distributed Make), when run in parallel mode, serialize + the output from their targets' recipes unconditionally. This has + the nasty side effect that the user won't see the partial results + of a TAP test until the test has terminated. This is not something + our TAP driver script can work around unfortunately; in fact, the + driver is sending out its output progressively and "in sync" with + test execution -- it is make that is stowing such output away + instead of presenting it to the user as soon as it gets it. + + So we content ourself with working around the issue in our + testsuite, to at least avoid failures we could do nothing to + prevent. + + * tests/tap-realtime.test: Skip this test if the make program used + is a non-GNU make running in parallel mode. And if Sun dmake is + being used, try to force it to run in serial mode, by exporting the + 'DMAKE_MODE' environment variable to "serial". + +2012-01-17 Stefano Lattarini + + contrib: new, a directory for non-mainstream functionalities + + This new 'contrib' hierarchy will be a good place were to move + implementation/support for obsolescent features we are not yet + ready to remove completely, or were to leave experimental or + third-party features to cook before their eventual inclusion in + the automake core. + + * contrib: New directory. + * contrib/README: New file. + * contrib/Makefile.am: New file. + (EXTRA_DIST): Distribute README. + +2012-01-17 Stefano Lattarini + + docs: APIs for custom test drivers are highly experimental + + * doc/automake.texi (API for Custom Test Drivers): The APIs + described here are not "somewhat experimental", but rather + "highly experimental". Don't promise the sure a sort of + backward-compatibility that we are very likely not going to + keep. + +2012-01-17 Stefano Lattarini + + tests: avoid spurious failures with parallel make + + Some tests are unprepared to be run with a make command that runs + in parallel mode by default. This can happen e.g., if the user + explicitly run the tests with something like: + + AM_TESTSUITE_MAKE="gmake -j3" in the + + in the environment, but also if the make used in the testsuite is + Sun Distributed Make, and the 'DMAKE_MODE' environment variable is + set to "parallel". + + Fix some instances of this issue. + + * tests/tap-doc.test (Makefile.am): Declare explicit dependencies + among the test cases, to ensure they are run in the correct order. + * tests/tap-doc2.test: Set the 'DMAKE_MODE' environment variable + to "serial", to prevent Sun dmake from trying to run in parallel. + Remove other now-superfluous workarounds for dmake. + +2012-01-17 Stefano Lattarini + + tests: fix spurious failures with Solaris dmake + + Solaris Distributed Make, when run in parallel mode, can sprinkle + its standard output with lines like: + + hostname --> 2 jobs + ... + hostname --> Job output + ... + + This behaviour was causing spurious errors in some tests where we + compare the output of make with a known, expected value. Fix that. + + * tests/tap-doc.test: Before comparing the output from make with its + expected value, remove extra lines that could have been printed by + Solaris dmake. + * tests/tap-doc2.test: Likewise. + +2012-01-16 Stefano Lattarini + + Merge branch 'maint' + + * maint: + recheck: fix interaction with "make -n" + vala: avoid potential useless remakes (minor bugfix) + vala: enhance tests + recheck: behave better with non-GNU make + check: separate .log -> .html conversion from core testsuite harness + docs: deprecate .log -> .html conversion by parallel-tests + tests: list some forgotten test cases in $(TESTS) + maintcheck: consistency of list of test scripts + build: explicitly declare some targets as .PHONY + maint: remove obsolete/broken maintainer targets + build: improve silencing of automake build system + tests: move list of tests in its own Makefile fragment + + + Extra non-trivial edits: + + * tests/parallel-tests2.test: Obvious edits to merge the slightly + inconsistent enhancements to coverage done in master with those + done in maint. + * lib/am/check.am (check-TESTS, recheck): Sweeping and rather + complex changes to merge the considerable divergences between + maint and master in a way that is meaningful and, where possible, + retains the semantic changes from both maint and master. + +2012-01-16 Stefano Lattarini + + Merge branch 'check-html-deprecate' into maint + + * check-html-deprecate: + recheck: fix interaction with "make -n" + recheck: behave better with non-GNU make + check: separate .log -> .html conversion from core testsuite harness + docs: deprecate .log -> .html conversion by parallel-tests + +2012-01-16 Stefano Lattarini + + recheck: fix interaction with "make -n" + + * lib/am/check.am (recheck): Ensure the recipe does not erroneously + remove '.log' files when running under "make -n". For the sake of + NetBSD make, this also means that ... + (.MAKE): ... this cannot depend on 'recheck' anymore. + * tests/parallel-tests-dryrun.test: New test. + * tests/list-of-tests.mk: Add it. + +2012-01-16 Stefano Lattarini + + vala: avoid potential useless remakes (minor bugfix) + + * automake.in (lang_vala_finish_target): Ensure the timestamp file + from which the C files generated from Vala sources depend on gets + created with a modification time that is truly older than those of + said generated C files. This prevents make from attempting useless + rebuilds (which were bound to happen deterministically on systems + with sub-second timestamp resolutions). It is worth noting that, + luckily, those useless rebuild ended up being a no-op, since the + Vala compiler is careful not to update the timestamp of an output + file if its content has not changed from the previous version. + Still, the useless rebuilds messed up "make -q" and "make -n" + invocations, and were technically incorrect (despite being, as + noted, inoffensive in practice). + + Problem revealed by failure of tests vala-mix.test and vala5.test + on a fast Solaris 10 system whose filesystem had a sub-second + timestamp resolution. + +2012-01-16 Stefano Lattarini + + vala: enhance tests + + * tests/vala.test: Extend test. Throw in some cosmetic and + consistency changes since we are at it. + * tests/vala5.test: Avoid uselessly requiring libtool. Ensure a + failure happens in case VALAFLAGS are not supported as expected. + Extend test in some ways. Throw in some cosmetic and consistency + changes since we are at it. + * tests/vala-mix.test: New test. + * tests/list-of-tests.mk: Add it. + +2012-01-16 Stefano Lattarini + + recheck: behave better with non-GNU make + + * automake.in (handle_tests): Also substitute '%CHECK_DEPS%' with + the value of the '@check' array, containing the list of early + test dependencies like '$(check_SCRIPTS)', $(check_PROGRAMS)', + etc. + * lib/am/check.am (recheck): Explicitly depend on '%CHECK_DEPS%'. + (check, recheck): Unify the implementation of their recipes, with + different code paths taken depending on the name of the target. + This makes the implementation of "recheck" less brittle in the + process (especially when non-GNU make and AM_MAKEFLAGS overriding + are involved). + * lib/am/check-html.am (check-html, recheck-html): Likewise. + * tests/check.test: Adjust to avoid spurious failure. + * tests/parallel-tests2.test: Improve coverage. + +2012-01-16 Stefano Lattarini + + check: separate .log -> .html conversion from core testsuite harness + + That feature is to be deprecated in the 1.11.x series, and removed + from the automake core in the 1.12 release, where it will instead + be offered in a semi-independent extra '*.am' fragment. So let's + start better separating the .log -> .html conversion from the "core + code" of the parallel-tests harness. + + Reference: + + + * lib/am/check.am (.log.html, check-html, recheck-html): Move these + targets ... + * automake.in (handle_tests): ... and the initialization of the + TEST_SUITE_HTML variable and the cleaning of the $(TEST_SUITE_HTML) + file ... + * lib/am/check-html.am: ... in this new file, with related (minor) + refactorings, enhancements and simplifications. + * lib/am/check.am (.MAKE. PHONY, AM_RECURSIVE_TARGETS): Adjust. + * lib/am/Makefile.am (dist_am_DATA): Add 'check-html.am'. + * tests/parallel-tests2.test: Improve coverage. + +2012-01-16 Stefano Lattarini + + docs: deprecate .log -> .html conversion by parallel-tests + + That feature is to be deprecated in the 1.11.x series, and + removed in the 1.12 release. + + Reference: + + + * doc/automake.texi (Simple Tests using parallel-tests): Deprecate + the '.log' -> '.html' conversion and the targets 'check-html' and + 'recheck-html'. Related rewording and reformatting. + * NEWS (Future backward-incompatibilities): Update. + +2012-01-16 Stefano Lattarini + + tests: list some forgotten test cases in $(TESTS) + + This way, they will be properly executed by "make check", and + properly distributed. Our previous commit 'v1.11-647-g27f1a1c' + is already paying its dividends! + + * tests/list-of-tests.mk (handwritten_TESTS): Add check12.test, + dist-missing-included-m4.test, dist-missing-am.test, and + dist-missing-m4.test. + +2012-01-16 Stefano Lattarini + + maintcheck: consistency of list of test scripts + + This is basically a backport of commit 'v1.11-358-g7b6ab07' + and its follow-ups. The possibility of easily checking that + the list of test scripts listed in a Makefile equals that of + the tests on the filesystem has proved itself so useful that + it's worth taking the annoyance of backporting it to maint. + + * CheckListOfTests.am: New file, backported from master (commit + 'v1.11-1736-g083a75b') with minor adjustments. + (maintainer-check-list-of-tests): New target, check for consistency + between the list of tests defined in the including Makefile and the + list of tests on the filesystem. + (clean-maintcheck-testslist-tmp): New rule, to clean up 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'. + * tests/Makefile.am: Likewise. + * Makefile.am (maintainer-check-list-of-test): New target, + calling recursively into `tests/' and `lib/Automake/tests/', + using ... + (TEST_SUBDIRS): ... this new variable. + (maintainer-check): Added dependency from the new target + `maintainer-check-list-of-tests'. + +2012-01-16 Stefano Lattarini + + maintcheck: completeness check on list of tests simplified + + * CheckListOfTests.am: Simplify the recipe, accordingly to the + assumption that all the entries in $(TEST_EXTENSIONS) and in + $(TESTS) have an associated real test script. This was not the + case when we used to have some entries in $(TESTS) that were not + real files, but rather "parameters" (sort of) for the corresponding + $(LOG_COMPILER). However, that usage had proven to be confusing + and brittle, and thus removed (see commit 'v1.11-1308-g375f23d' of + September 8 2011, "testsuite: revamp generation of autogenerated + tests"). + +2012-01-15 Stefano Lattarini + + build: explicitly declare some targets as .PHONY + + * Makefile.am (fetch, git-dist, git-release, maintainer-check): + Declare as ".PHONY". + +2012-01-15 Stefano Lattarini + + maint: remove obsolete/broken maintainer targets + + * Makefile.am (git-diff): Remove. First, we don't distribute diffs + between an automake version and the next one anyway, so this target + is pointless. Moreover, its recipe has been broken for quite a + long time now, always generating an empty diff due to the spurious + '$(PACKAGE)' argument that was passed to the "git diff" invocation. + (path-check): Remove. The 'pathchk' program running in this check + complains about any file with name longer than 14 characters, which + is a ridiculously low limit for today standards. Also, we already + had several test scripts (no less than 195!) that were exceeding + that limit, and nobody ever complained (not even on MinGW/MSYS nor + Cygwin). + +2012-01-15 Stefano Lattarini + + build: improve silencing of automake build system + + In this change, we continue the silencing of the automake build + system that has been started in commit v1.11-642-g17542c3, but + which has been left incomplete there for an (absent-mindness) + mistake. + + * Makefile.am (INSTALL): Silence the recipe. + (automake, aclocal): Likewise, and improve them a little since + we are at it. + * lib/Automake/Makefile.am (Config.pm): Likewise. + +2012-01-15 Stefano Lattarini + + tests: move list of tests in its own Makefile fragment + + This change will make it easier to merge maint into master, which + has a similar Makefile setup in the testsuite. + + * tests/Makefile.am (include): Inclusion of ... + * tests/list-of-tests.mk: ... this new file. + * tests/Makefile.am (TESTS): Move most of its content into, + and redefine in function of, ... + * tests/list-of-tests.mk (handwritten_TESTS): ... this new + variable. + * tests/gen-parallel-tests: Update. + +2012-01-15 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: move list of tests in its own Makefile fragment + build: silence automake build system + +2012-01-15 Stefano Lattarini + + tests: move list of tests in its own Makefile fragment + + This change will make it easier to merge maint into master, which + has a similar Makefile setup in the testsuite. + + * tests/Makefile.am (include): Inclusion of ... + * tests/list-of-tests.mk: ... this new file. + * tests/Makefile.am (TESTS): Move most of its content into, + and redefine in function of ... + * tests/list-of-tests.mk (handwritten_TESTS): ... this new + variable. + * tests/gen-parallel-tests: Update. + +2012-01-15 Stefano Lattarini + + build: silence automake build system + + * configure.ac (AM_SILENT_RULES): Invoke with "yes" as a parameter, + to activate silent rules by default. + * NEWS: Update. + * Makefile.am (sc_perl_syntax): Silence its recipe unconditionally, + similarly to what is done for other syntax checks. + (release-stats): Be silent by default *but not unconditionally*, + thanks to the use of $(AM_V_GEN). + (path-check, git-diff): Be silent by default, thanks to the use + of $(AM_V_GEN). + * m4/Makefile.am ($(top_srcdir)/m4/amversion.m4): Likewise. + * doc/Makefile.am ($(srcdir)/amhello-1.0.tar.gz): Likewise. + * tests/Makefile.am ($(srcdir)/parallel-tests.am): Likewise. + ($(parallel_tests)): Likewise. + +2012-01-15 Stefano Lattarini + + Merge branch 'maint' + + * maint: + gnupload: moved to gnulib + sync: gitlog-to-changelog from gnulib upstream + test defs: backport optimized 'using_gmake' implementation + tests: unify some tests on "make -n", reducing duplication + vala: use "$(am__cd) $(srcdir)", not "cd $(srcdir)" + + + Extra edits: + + * tests/maken3.test: Carry over (with necessary adjustments) the + code from maken4.test that determines whether $MAKE supports the + special '.MAKE' target. + +2012-01-15 Stefano Lattarini + + gnupload: moved to gnulib + + Since the gnupload script is not required by automake-generated + code (be it configure or Makefile content), and is not specifically + tied to automake in any way, it is better to have its master copy + installed in the gnulib repository, as is already done for similar + generally-useful, maintainer-oriented scripts. We can them sync it + from there. + + See also gnulib commit v0.0-6822-gf8b7120, and: + + + * Makefile.am (FETCHFILES): Added 'gnupload'. + (fetch): Also sync 'gnupload' from the gnulib repository. + * lib/gnupload: Synced from gnulib. + * NEWS: Update. + +2012-01-15 Stefano Lattarini + + sync: gitlog-to-changelog from gnulib upstream + + * lib/gitlog-to-changelog: Synced from upstream, by "make fetch". + +2012-01-14 Stefano Lattarini + + test defs: backport optimized 'using_gmake' implementation + + * tests/defs.in (using_gmake): Backport optimized, result-caching + implementation from master. + +2012-01-14 Stefano Lattarini + + tests: unify some tests on "make -n", reducing duplication + + * tests/maken2.test: Merge into ... + * tests/maken.test: ... this test, to avoid unnecessary code + duplication. Make checks depending on GNU make conditional to + the actual presence of GNU make. + * tests/maken4.test: Similarly, merge into ... + * tests/maken3.test: ... this test. + * tests/Makefile.am (TESTS): Remove maken2.test and maken4.test. + +2012-01-14 Stefano Lattarini + + vala: use "$(am__cd) $(srcdir)", not "cd $(srcdir)" + + * automake.in (lang_vala_finish_target): In the generated rules, + use '$(am__cd)', not bare 'cd', to chdir into $(scdir). Issue + revealed by the maintainer check 'sc_cd_relative_dir'. + +2012-01-13 Stefano Lattarini + + Merge branch 'maint' + + * maint: + dist: avoid $(distdir) removal failure on MSYS/MinGW + tests: fix spurious failure of 'get-sysconf.test' + coverage: expose automake bug#10470 (distcheck-related) + tests: make 'aclocal-install-absdir.test' executable + tests: require GNU make in 'vala-vapth.test' + vala: fix VPATH builds + tests: fix some bugs in the vala-vpath test + +2012-01-13 Stefano Lattarini + + Merge branch 'fix-pr10470' into maint + + * fix-pr10470: + dist: avoid $(distdir) removal failure on MSYS/MinGW + coverage: expose automake bug#10470 (distcheck-related) + +2012-01-13 Stefano Lattarini + + dist: avoid $(distdir) removal failure on MSYS/MinGW + + This change fixes automake bug#10470. + + On MSYS (1.0.17) it is not possible to remove a directory that is + in use, and this, together with timing issues, could cause spurious + failures in the cleanup code of the "distcheck" recipe. In fact, + it should be noted that assuming a directory can be removed while + it the CWD of a running process is a POSIX violation: + + "If the directory is the root directory or the current working + directory of any process, it is unspecified whether the function + succeeds, or whether it shall fail and set errno to [EBUSY]." + + * lib/am/distdir.am (am__remove_distdir): If rm fails, sleep some + seconds and retry, to give potential "pending" processes some time + to exit and "release" the directory. + * tests/Makefile.am (XFAIL_TESTS): Remove 'distcheck-pr10470.test'. + + Report and suggestions by Peter Rosin and Eric Blake. + +2012-01-12 Stefano Lattarini + + tests: fix spurious failure of 'get-sysconf.test' + + * tests/get-sysconf.test: Do not assume that a ChangeLog file exists + in $(srcdir): now that the ChangeLog is autogenerated and not under + version control anymore, this is not necessary true. Instead, if we + are running from a git checkout, use "git log" to get information on + the version of the automake snapshot being tested (and fall back on + extracting the first ChangeLog entry otherwise). + + Reported by Jim Meyering in automake bug#10418. + + Cherry picked from commit v1.11-1675-g104f302. + +2012-01-12 Stefano Lattarini + + coverage: expose automake bug#10470 (distcheck-related) + + * tests/distcheck-pr10470.test: New test. + * tests/Makefile.am (TESTS, XFAIL_TESTS): Add it. + + Report and suggestions by Peter Rosin and Eric Blake. + +2012-01-12 Stefano Lattarini + + tests: make 'aclocal-install-absdir.test' executable + + * tests/aclocal-install-absdir.test: Make it executable. + +2012-01-12 Stefano Lattarini + + tests: add missing dependency for some 'ar-lib*.test' tests + + This change fixes spurious failures of the tests ar-lib4.test, + ar-lib6a.test and ar-lib6b.test. + + * tests/Makefile.am (ar-lib4.log): Depend explicitly on the + `libtool-macros.log' file. + (ar-lib6a.log, ar-lib6b.log): Likewise. + +2012-01-11 Stefano Lattarini + + dist: distdir not unconditionally removed anymore for xz and lzip + + This change fixes automake bug#10444 a.k.a. bug#10448. + + The 'dist-xz' and 'dist-lzip' recipes were erroneously using + '$(am__remove_distdir)' instead of '$(am__post_remove_distdir)' + to cleanup the '$(distdir)'; so a "make dist" issued in a package + using (say) gzip and xz compression would have failed to properly + created the gzip tarball, since the distdir was unconditionally + removed by "make dist-xz" upon its completion, instead of being + left populated for the following "make dist-gzip". + + The problem with 'dist-xz' was introduced in the merge commit + `v1.11-1142-g47587d1', and the problem with 'dist-lzip' was + introduced in the merge commit `v1.11-1673-gc1b14e9' + + * lib/am/distdir.am (dist-xz): Use '$(am__post_remove_distdir)', + not '$(am__remove_distdir)'. + (dist-lzip): Likewise. + +2012-01-11 Stefano Lattarini + + coverage: archive and compression formats used by "make dist" + + This change exposes automake bug#10444 a.k.a. bug#10448. + + * tests/dist-formats.tap: New test. + * tests/lzip.test: Remove, it's obsolete now. + * tests/nogzip.test: Likewise. + * tests/nogzip2.test: Likewise. + * tests/xz.test: Likewise. + * tests/list-of-tests.mk: Update. + +2012-01-10 Peter Rosin + + tap/awk: avoid redirection issues with bash 3.2 and earlier + + Fixes automake bug#10465. + + * lib/tap-driver.sh: Add workaround for bash 3.2 and earlier, which + sometimes does not properly set '$?' when failing to write redirected + output of a compound command. See the Autoconf manual for more details. + + The workaround was pointed out by Eric Blake. + +2012-01-09 Peter Rosin + + tests: detect that MSYS lacks symlinks + + * tests/self-check-cleanup.tap: Also check if "ln -s" really created a + symlink to cater for MSYS falling back to an ordinary copy. Also, don't + chmod the symlinks if they were never created. + +2012-01-08 Stefano Lattarini + + tests: avoid many spurious failures on MSYS due to lack of symlinks + + Fixes automake bug#10441. + + * tests/add-missing.tap: Do not assume the system supports real + symlinks, as this is not the case for MinGW/MSYS. Skip checks + that would spuriously fail in that situation. + * tests/copy.test: Likewise. + + Reported by Peter Rosin. + +2012-01-08 Stefano Lattarini + + tests: require GNU make in 'vala-vapth.test' + + * vala-vpath.test ($required): Add the "GNUmake" requirement, since + rules generated by vala support are expected to work with GNU make + only. + +2012-01-08 Ryan Lortie (tiny change) + Stefano Lattarini + + vala: fix VPATH builds + + This change fixes automake bug#9859. + + * automake.in (lang_vala_finish_target): Create the stamp file + '${derived}_vala.stamp' in $(srcdir), not in $(builddir). + Also, don't try to chdir to the $(srcdir) to trigger the rebuild + rules, since that is just wrong in a VPATH setup. + * tests/vala-vpath.test, tests/vala2.test: Extend to catch more + possible VPATH issues. + * tests/Makefile.am (XFAIL_TESTS): Remove 'vala-vpath.test'. + * NEWS, THANKS: Update. + +2012-01-08 Ryan Lortie (tiny change) + + tests: fix some bugs in the vala-vpath test + + * tests/vala-vpath.test: There are (trivial) problems in this + testcase that would cause the build to fail even if the core + issue were resolved. Fix those. + +2012-01-06 Stefano Lattarini + + fixup: list forgotten test case in $(TESTS) + + * tests/list-of-tests.mk: Also list 'tar-override.test'. + +2012-01-06 Paul Eggert + + scripts: quote 'like this', not `like this' + + This change follows up on recent changes to the GNU coding standards. + They now suggest that we should quote 'like this' or "like this" instead + of `like this'; see: + . + + Gnulib is being changed accordingly, and Gnulib imports some files + directly from Automake master, so change those files to use the + straight-up style. This affects only commentary and quoting in + diagnostics. + +2012-01-06 Stefano Lattarini + + tests: safer declarations of test dependencies + + To declare prerequisites common to all the tests, we now prefer to + use the special `check_DATA' and `check_SCRIPTS' variables rather + than "lazy" dependency declaration like "$(TEST_LOGS): DEPS ..."; + this because the latter, allowing run-time overriding of the + TEST_LOGS variable, turned out to be subtly incomplete in some + situations involving non-trivial inter-test dependencies. For + example, if the user issued a: + + make check TESTS=libtool.test + + before the `defs-static' file was created (either explicitly or + implicitly), a spurious errors followed, along these lines: + + 1. $(TEST_LOGS) got dynamically defined to `libtool.log'; + + 2. make saw that, in the Makefile, `libtool.log' was explicitly + declared depending on `libtool-macros.log' and `defs-static'; + + 3. somehow, make considered the dependency on `libtool-macros.log' + *before* considering the one on `defs-static' (which BTW is + perfectly legitimate on make's part); + + 4. to satisfy such a dependency, make set out to execute the + test `libtool-macros.test' in order to create the file + `libtool-macros.log'; + + 5. since `libtool-macros.log' was *not* in $(TEST_LOGS), it + didn't appear to depend on the `defs-static' file, so make + didn't consider necessary to build `defs-static' before + running the `libtool-macros.test' script; + + 6. but that script sources `./defs-static' in order to work; + thus the test `libtool-macros.test' failed spuriously. + + * tests/Makefile.am ($(TEST_LOGS)): Remove explicit declaration + of dependency on the required files/scripts; instead use ... + (check_SCRIPTS, check_DATA): ... these new variables. + +2012-01-06 Stefano Lattarini + + tests: skip tests on perl TAP driver if TAP::Parser is not available + + We had so far taken for granted that all the perl installations + modern enough to correctly run automake also came with a built-in + TAP::Parser module; unfortunately, testing on MinGW/MSYS has + shown that this is not always true, and that a lot of spurious + testsuite failures would take place in such a situation (see + automake bug#10440). + + Luckily, the perl implementation of the Automake TAP driver is + only meant to be used for prototyping and consistency checks, the + "real" Automake TAP driver being the portable one implemented in + awk. So we can simply skip the affected tests on systems lacking + TAP::Parser. + + * tests/defs (fetch_tap_driver): Skip the whole test case if + the desired tap driver implementation is the perl one but the + TAP::Parser module is unavailable. + * tests/tap-bad-prog.tap: Adjust order of calls to `plan_' and + `fetch_tap_driver', to ensure the test is not skipped after the + TAP plan has been outputted (which would lead to a spurious + error). + * tests/tap-bad-signal.tap: Tweak to avoid the need to source the + `tap-setup.sh' script, as that might cause a test skip too late, + i.e., after a TAP plan has been already printed. + * tests/tap-test-number-0.test: Do not force the test to skip + when the tested TAP driver implementation is not the perl one. + On the other hand, when it *is* the perl one, skip the test if + the TAP::Parser module is unavailable. + * tests/test-driver-cond.test: Skip the part of the test actually + running "make check" if the TAP::Parser module is unavailable. + * tests/get-sysconf.test: Also print the version of the + `TAP::Parser' module, if available. + + Reported by Peter Rosin. + +2012-01-06 Stefano Lattarini + + Merge branch 'maint' + + * maint: + dist: do not wrap calls to 'tar' with the 'missing' script + fixup: previous commit v1.11-627-g1e0aedc + tests: fix spurious failures due to autom4te caching + +2012-01-06 Stefano Lattarini + + dist: do not wrap calls to 'tar' with the 'missing' script + + The `missing' script is meant to allow non-developers to build a + package in the face of slightly-skewed timestamps (as might happen + e.g. when the package is obtained from a VCS checkout rather than + from a distribution tarball). It is *not* the business of the + `missing' script to try to provide wrappers for all the maintainer + tools (in this case, to tool being a decent tar program). Such + wrapping of `tar' was not only inappropriate, but it was also + preventing the legitimate overriding (at make runtime) of the + `tar' program used in the creation of the distribution tarballs. + + See also automake bug#9822. + + * lib/missing: Don't try to specially wrap `tar' invocations + anymore. + * m4/tar.m4 (_AM_PROG_TAR): In the definitions of the `AMTAR' + variable, do not wrap the `tar' invocation with the `missing' + script anymore. Instead, allow the user to override the intended + tar program at make runtime, by defining the `TAR' environment + variable. + [$1 == v7]: Similarly for the definitions of the `am__tar' and + `am__untar' variables. Since we are at it, don't make them depend + anymore on the definition of the obsolescent `AMTAR' variable. + * NEWS: Update. + * tests/missing-tar.test: Remove, it's obsolete. + * tests/tar-override.test: New test. + * tests/Makefile.am (TESTS): Update. + + Reported by Akim Demaille. + +2012-01-06 Stefano Lattarini + + fixup: previous commit v1.11-627-g1e0aedc + + * tests/acloca18.test: Do not remove an aclocal.m4 file that is + needed by a later autoconf invocation. + +2012-01-06 Stefano Lattarini + + tests: fix spurious failures due to autom4te caching + + * tests/aclocal9.test: Call aclocal and autoconf with the `--force' + option. + * tests/acloca10.test: Sleep between re-runs of aclocal and autoconf. + * tests/acloca18.test: Explicitly remove also the configure script + and the aclocal.m4 before re-invoking aclocal and autoconf. + +2012-01-06 Stefano Lattarini + + parallel-tests: avoid trailing backslashes in make recipes + + The new testsuite-harness could generate recipes with a trailing + backslash character (possibly followed by blank characters only), + in the very common case where the user hadn't defined the special + $(AM_TESTS_FD_REDIRECT) variable. This caused spurious syntax + errors with at least older bash versions (e.g., bash 2.05b), and + could be potentially unportable to other weaker shells. + + See automake bug#10436: + + and coreutils bug#10427: + + + * lib/am/check2.am: Rework line breaks so that no backslash can + be at the end of a line. + * tests/parallel-tests-trailing-bslash.test: New test. + * tests/list-of-tests.mk: Add it. + + Report and diagnosis by Paul Eggert. + +2012-01-06 Stefano Lattarini + + Merge branch 'maint' + + * maint: + parallel-tests: avoid issue with overly long lines in sed input + + Additional edits: + * NEWS: Remove entry from merged commit, since that will also be + present in the NEWS file of automake 1.11.3. + * lib/am/check.am (check-TESTS, recheck, recheck-html): Rework + merged changes to adapt them to the different form these recipes + has assumed in the master branch (w.r.t. the maint branch). + +2012-01-05 Stefano Lattarini + + parallel-tests: avoid issue with overly long lines in sed input + + See automake bug#10437: + + and coreutils bug#10427: + + + * lib/am/check.am (recheck, recheck-html): In order to strip + trailing whitespace from the definition of the `$list' variable, + we used to invoke sed in a way that could cause it to get passed + overly long input lines, causing spurious failures. So rework + the logic of the recipe to avoid any sed invocation, relying on + simpler shell idioms instead. + (check-TESTS): Reorganize the recipe to be more similar to the + one of `recheck', for consistency and simplicity. + * NEWS: Update. + + Report and analysis by Paul Eggert. + +2012-01-05 Peter Rosin + + tests: work around strangeness in MSYS + + MSYS mishandles carriage returns and behaves very strangely for + directories with colon in them. It seems that colon-directories are + somehow mixed up with drive letters. + + Fixes automake bug#7849. + + * tests/instspc.tap: Skip instead of erroring out when $test_string + is empty for the carriageret case, as that is expected on MSYS. Also, + for similar reasons, skip instead of erroring out when it is not + possible to cd into the just created directory, and the directory + name contains a colon. Update copyright years. + +2012-01-04 Paul Eggert + + cosmetics: prefer the term "Windows" over "Win32" + + Microsoft has renamed the Win32 API to "Windows API": + + + Also, after some discussion on bug-gnulib, when talking about hosts and + platforms we believe it's better to talk about "Windows" or "native + Windows" instead: + + + + * doc/automake.texi: Mention "Windows", not "Win32". + * lib/Automake/XFile.pm: Likewise. + * lib/ar-lib: Likewise. + * lib/compile: Likewise. + * tests/compile2.test: Mention "Windows", not "w32". + +2012-01-04 Peter Rosin + + test defs: skip all tests when the lib requirement isn't fulfilled + + * tests/defs (lib): Use skip_all_ instead of skip_, in order to support + TAP-based test scripts. + +2012-01-04 Stefano Lattarini + + tests: be sure to list all test cases in $(TESTS) + + * tests/list-of-tests.mk: Due to slightly botched merges, the test + scripts `objext-pr10128.test' and `silent-nested-vars.test' weren't + being correctly listed in $(TESTS); fix this. + +2012-01-04 Stefano Lattarini + + Merge branch 'maint' + + * maint: + sync: auxiliary files from upstream synced + sync: fix syncing of 'gitlog-to-changelog' script + maintcheck: avoid false positive in sc_tests_plain_make + +2012-01-04 Stefano Lattarini + + sync: auxiliary files from upstream synced + + * lib/texinfo.tex: Synced from upstream, by "make fetch". + * lib/gitlog-to-changelog: Likewise. + * lib/config.guess: Likewise. + * lib/config.sub: Likewise. + +2012-01-04 Stefano Lattarini + + sync: fix syncing of 'gitlog-to-changelog' script + + * Makefile.am (FETCHFILES): Also list 'gitlog-to-changelog'. + +2012-01-04 Stefano Lattarini + + maintcheck: avoid false positive in sc_tests_plain_make + + * Makefile.am (sc_tests_plain_make): Ensure to only match full + `make' words. Avoid false positive in `silent-nested-vars.test'. + +2012-01-03 Stefano Lattarini + + Merge branch 'maint' + + * maint: + install: pkglibexec_SCRIPTS is a valid prefix/primary combination + coverage: expose automake bug#10128 + progs, libs: implement EXTRA_foo_DEPENDENCIES + tests: fix spurious failures in 'pr300*.test' + +2012-01-03 Stefano Lattarini + + install: pkglibexec_SCRIPTS is a valid prefix/primary combination + + It makes little sense for `libexec_SCRIPTS' to be accepted as valid + while `pkglibexec_SCRIPTS' is not. So fix this inconsistency by + explicitly allowing `pkglibexec_SCRIPTS' as well. It is worth + noting that the inconsistency has been there for a long time, + but only the quite recent commit `v1.11-373-g9ca6326' "Warnings + about primary/prefix mismatch fixed and extended" has made it + noisy enough to be noticed. + + * automake.in (handle_scripts): Also list `pkglibexec' among the + prefixes valid for the `SCRIPTS' primary. + * doc/automake.texi (Scripts): Likewise. + * tests/primary-prefix-valid-couples.test: Update. + * THANKS: Likewise. + * NEWS: Likewise. + + Reported by Dennis Schridde on the automake list: + + +2012-01-03 Stefano Lattarini + + coverage: expose automake bug#10128 + + * tests/objext-pr10128.test: New test, still expected to fail. + * tests/Makefile.am (TESTS, XFAIL_TESTS): Add it. + +2012-01-03 Stefano Lattarini + + progs, libs: implement EXTRA_foo_DEPENDENCIES + + Backported from commit `v1.11-377-g6edafbb'. + + The feature implemented by that change is quite unobtrusive, so + adding it to a maintenance release is acceptable. Also, there + have been requests from real-world users for this feature since + it has been implemented in master; see automake bug#9320: + + and this short discussion on the automake list: + + It would be a pity to make such users wait even more (until + Automake 1.12 is out) before they could start using this feature. + Thus we backport it, so that it will appear in the next maintenance + version of automake (1.11.3). + + * 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. + +2012-01-03 Stefano Lattarini + + tests: fix spurious failures in 'pr300*.test' + + This change fixes automake bug#10426. + + * tests/pr300-lib.test: Call configure with an explicit '--libdir' + option, to avoid spurious failures due to users possibly overriding + '${libdir}' in ther config.site files. + * tests/pr300-ltlib.test: Likewise. + + Reported by Bruno Haible. + +2012-01-02 Stefano Lattarini + + tests: fix spurious failure due to I/O buffering + + * tests/parallel-tests-interrupt.tap: Ensure the dummy test script + `foo.test' flushes its standard output before starting to grep the + log file where such output is being redirected by the parallel test + harness. Since we are at it, improve this same dummy script to + better catch unexpected behaviours and results. + + Reported by Jim Meyering in automake bug#10418. + +2012-01-02 Stefano Lattarini + + news: fix botched merges, rebase on 1.11.2a NEWS version + + The NEWS file is unfortunately written in a format that doesn't + lend itself very well to automatic merges; the recent merges of + maint into master have left it full of blunders and in a somewhat + inconsistent state. + + Another orthogonal issue is that the current version of NEWS + still reports all the changes since the last 1.11 version, rather + than since the latest maintenance version 1.11.2, or, even better, + since the planned next maintenance version 1.11.3. + + * NEWS: Fix blunders and errors from botched merges. Rebase the + file on the NEWS file from branch-1.11 (from which automake 1.11.3 + is expected to be released). + +2012-01-01 Stefano Lattarini + + Merge branch 'msvc' + + * msvc: + tests: fix spurious failure due to autom4te caching + news: fix suboptimal wording + tests: various minor tweakings, mostly related to AM_PROG_AR + +2012-01-01 Stefano Lattarini + + tests: fix spurious failure due to autom4te caching + + * tests/ar-lib3.test: Remove stale autom4te.cache directory, to + prevent racy, spurious failures. + + Reported by Jim Meyering in automake bug#10418. + +2012-01-01 Stefano Lattarini + + Merge branch 'maint' into msvc + + * maint: + tests: make 'lzip.test' executable + dist: obsolete support for lzma (superseded by xz and lzip) + test defs: more granular overriding of the make program + docs: fix a couple broken anchors + dist: add support for lzip compression + docs: fix paragraph names for automake and aclocal invocations + tests: fix spurious failure due to autom4te caching + fix: last entry in ChangeLog + tests: tweak tests on silent-rules for makes without nested vars + silent-rules: fallback for makes without nested vars + +2012-01-01 Stefano Lattarini + + tests: fix spurious failure of 'get-sysconf.test' + + * tests/get-sysconf.test: Do not assume that a ChangeLog file exists + in $(srcdir): now that the ChangeLog is autogenerated and not under + version control anymore, this is not necessary true. Instead, if we + are running from a git checkout, use "git log" to get information on + the version of the automake snapshot being tested (and fall back on + extracting the first ChangeLog entry otherwise). + + Reported by Jim Meyering in automake bug#10418. + +2012-01-01 Stefano Lattarini + + dist: remove support for lzma (superseded by xz and lzip) + + See also commit `v1.11-611-ge637fa2' (from maint), where support + for lzma compression of distribution archive had been deprecated. + + * NEWS: Update. + * lib/Automake/Options.pm: Error out if the `dist-lzma' option + is used. + * lib/am/distdir.am: Remove all support for the creation of a + lzma-compressed distribution archive. + * tests/lzma.test: Update. + +2012-01-01 Stefano Lattarini + + Merge branch 'maint' + + * maint: + tests: make 'lzip.test' executable + dist: obsolete support for lzma (superseded by xz and lzip) + test defs: more granular overriding of the make program + docs: fix a couple broken anchors + dist: add support for lzip compression + docs: fix paragraph names for automake and aclocal invocations + tests: fix spurious failure due to autom4te caching + fix: last entry in ChangeLog + tests: tweak tests on silent-rules for makes without nested vars + silent-rules: fallback for makes without nested vars + +2012-01-01 Stefano Lattarini + + tests: make 'lzip.test' executable + + * tests/lzip.test: Make it executable. + +2012-01-01 Stefano Lattarini + + Merge branch 'deprecate-lzma' into maint + + * deprecate-lzma: + dist: obsolete support for lzma (superseded by xz and lzip) + +2012-01-01 Stefano Lattarini + + dist: obsolete support for lzma (superseded by xz and lzip) + + The lzma utilities are today superseded by the xz utilities; in + fact, the official site at reads: + + ``LZMA Utils are legacy data compression software with high + compression ratio. LZMA Utils are no longer developed, ... + Users of LZMA Utils should move to XZ Utils.'' + + and the existing automake manual (as of 1.11.2) already says: + + ``dist-xz + Generate an 'xz' tar archive of the distribution. xz archives + are frequently smaller than bzip2-compressed archives. The 'xz' + format will soon (early 2009) displace the 'lzma' format'' + + Also, the `dist-lzma' target still suffers of never-solved bugs, + due to the too-high compression ratio its uses by default, which + might cause an unacceptable memory consumption when one tries to + compress or, worse, decompress the created tarballs; see also: + + + + + * NEWS: Update. + * doc/automake.texi (Dist, Options): State that `dist-lzma' will + go away in the next major automake version. + * lib/Automake/Options.pm (_process_option_list): Deprecate + `dist-lzma'. + * tests/lzma.test: Update. + +2011-12-31 Stefano Lattarini + + maintcheck: fix a couple of typos in error messages + + * Makefile.am (sc_tests_plain_autoheader): Fix the message to + report a bad use of "autocheader", not of "automake." + (sc_tests_plain_autom4te): Likewise, but for "autom4te" instead. + (sc_tests_plain_autoreconf): Likewise, but for "autoreconf" + instead. + +2011-12-31 Stefano Lattarini + + maintcheck: be sure to look at all the test cases + + Many maintainer checks in the top-level Makefile.am did some + unwarranted assumptions about the test cases, i.e., they assumed + that all the test scripts matched the wildcard `$(srcdir)/*.test'. + + This failed to properly 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). + + Fixes automake bug#9299. + + * Makefile.am (xtests): New variable, containing a (dynamically + computed) of files that looks like test cases of the automake + testsuite. + Update many rules to use this new variable instead of blindly + assuming that all the testcases matches the $(srcdir)/tests/*.test + wildcard. + * tests/tap-bad-prog.tap: Do a minor formatting change to + avoid spuriously triggering a match from the syntax check + `sc_tests_overriding_macros_on_cmdline'. + +2011-12-31 Stefano Lattarini + + Merge branch 'dist-lzip' into maint + + * dist-lzip: + dist: add support for lzip compression + +2011-12-30 Stefano Lattarini + + test defs: more granular overriding of the make program + + Before this change, the only way the user could override the make + program used in the automake test cases was to override the $MAKE + variable in the environment. This had the annoying side effect of + requiring that, whenever a non-default make program was to be used + in the test cases, that same make program had to be used to drive + the execution of the automake testsuite; otherwise, the recursive + make invocations could pick up $MAKE from the environment, and use + that instead of re-executing with the correct make. + + So, for example, if one wanted to try how Solaris /usr/ccs/bin/make + behaved in the automake test cases, he couldn't run the testsuite + in parallel mode, because that make lacks support for concurrent + execution of recipes; on fast machines, this easily meant a 4x or + higher slow-down. + + Once the problem is clear, the solution is pretty simple: allow + the use of another variable, besides $MAKE, to override the make + program to be used in the test cases. + + See also commit `v1.11-1318-g3ceeef4', that introduced a more + general version of this change to the master branch. + + * tests/defs.in: Allow the make implementation to be used by the + test cases to be overridden by the `$AM_TESTSUITE_MAKE' variable, + in preference to the `$MAKE' variable. + +2011-12-30 Stefano Lattarini + + docs: fix a couple broken anchors + + * doc/automake.texi: In previous commit v1.11-605-g5f71f2b (related + to automake bug#8071), we had renamed the chapters about aclocal + and automake invocation, and added anchors to the old names as not + to break hyperlinks to our on-line manual. Unfortunately, these + anchors had been erroneously placed *before* the relevant `@node' + commands, instead that just after, so that they ended up pointing + to the wrong chapters. Fix this. Since we are at it, tweak the + wording of the comments to the anchors to better match that used + in the autoconf manual. + + Report and suggestion by Eric Blake. + +2011-12-30 Antonio Diaz Diaz + + dist: add support for lzip compression + + * NEWS: Update. + * automake.in (handle_dist): Recognize dist-lzip. + (make_paragraphs): Map LZIP to dist-lzip. + * doc/automake.texi (Dist, Options): Describe dist-lzip. + * lib/Automake/Options.pm (_process_option_list): Recognize + `dist-lzip'. + * lib/am/distdir.am (dist-lzip): New target. + (DIST_ARCHIVES) [?LZIP?]: Add `dist-lzip'. + (dist, dist-all) [?LZIP?]: Add command to create an lzip-compressed + tarball. + (distcheck): Handle lzip-compressed tarballs just like the others. + * tests/lzip.test: New test. + * tests/Makefile.am (TESTS): Add it. + +2011-12-30 Stefano Lattarini + + Merge remote-tracking branch 'silent-fixes' into maint + + * origin/silent-fixes: + fix: last entry in ChangeLog + tests: tweak tests on silent-rules for makes without nested vars + silent-rules: fallback for makes without nested vars + +2011-12-28 Stefano Lattarini + + docs: fix paragraph names for automake and aclocal invocations + + All the other autotools entitle their invocation nodes + "autofoo Invocation", whereas automake used to call its + "Invoking Automake" and "Invoking aclocal". So let's + try to be more consistent. + + This change is related to automake bug#8071. + + Suggestion by Reuben Thomas and Eric Blake. + + * doc/automake.texi (Invoking Automake): Node renamed ... + (automake Invocation): ... to this. + (Invoking aclocal): Node renamed ... + (aclocal Invocation): ... to this. + Add proper @anchor directives to avoid breaking existing web + hyperlinks still using the old names of the renamed nodes. + +2011-12-28 Stefano Lattarini + + tests: fix spurious failure due to autom4te caching + + * tests/acloca18.test: Remove stale autom4te.cache directories, to + prevent racy, spurious failures. + * tests/python11.test: Likewise. Fix a typo in comments since we + are at it. + +2011-12-28 Stefano Lattarini + + Merge branch 'maint' into msvc + + * maint: + maint: autogenerate ChangeLog + +2011-12-28 Stefano Lattarini + + Merge branch 'maint' into silent-fixes + + * maint: + maint: autogenerate ChangeLog + fix: last ChangeLog entry + tests: drop unnecessary requirement in 'subpkg.test' + gitlog-to-changelog: new auxiliary script, synced from gnulib + docs: "aclocal --install -I /abs/dir" actually copies files + docs: fix node names for automake and aclocal invocations + +2011-12-28 Stefano Lattarini + + Merge branch 'maint' into yacc-work + + * maint: + maint: autogenerate ChangeLog + +2011-12-28 Stefano Lattarini + + Merge branch 'maint' + + * maint: + maint: autogenerate ChangeLog + +2011-12-28 Stefano Lattarini + + maint: autogenerate ChangeLog + + Following the practice set by various other GNU projects, we start + to automatically generate the ChangeLog file from the git commit + messages. This will avoid duplication (as the ChangeLog entries + were always inserted both in the git commit message and in the + version-controlled ChangeLog file), and potential problems with + spurious merge conflicts (which, although greatly mitigated by + Bruno Haible's `git-merge-changelog' helper program, have never + been completely solved). + + * ChangeLog: Moved ... + * ChangeLog.11:... to this. + * Makefile.am (EXTRA_DIST): Add it. + (gitlog_to_changelog_command, gitlog_to_changelog_options): New + variables. + (ChangeLog, am--changelog-regen-hook): New targets. + * .gitignore: Add ChangeLog. diff --git a/automake-1.15.1/GNUmakefile b/automake-1.15.1/GNUmakefile new file mode 100644 index 0000000..aa52f60 --- /dev/null +++ b/automake-1.15.1/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 . + +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/automake-1.15.1/HACKING b/automake-1.15.1/HACKING new file mode 100644 index 0000000..e34870b --- /dev/null +++ b/automake-1.15.1/HACKING @@ -0,0 +1,404 @@ +============================================================================ += 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 'micro' 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 'maint' branch is where the development of the next minor 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 'micro' branch anyway). + +* The 'master' 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 'micro' branch should be kept regularly merged into the 'maint' + branch, and the 'maint' branch 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 new minor release is done, the 'maint' branch is to be merged + into the 'micro' branch, and then a "new" 'maint' branch created + stemming from the resulting commit. + Similarly, after a new major release is done, the 'master' branch is to + be merged into both the 'micro' and 'maint' branches, and then "new" + 'master' branch created stemming from the resulting commit. + +* 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 'micro' 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") + + + + 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. + + + +* The 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"... + +============================================================================ += 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: + + +* 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 + and . If the release + is a stable one, the announcement must also go to ; + if it is an alpha or beta release, announcement should be sent also + to , 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: + . + Be sure to link a version to the complete announcement (from + the version you sent to the automake list, as get archived on + ). + +----- + +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 . + +Local Variables: +mode: text +End: diff --git a/automake-1.15.1/INSTALL b/automake-1.15.1/INSTALL new file mode 100644 index 0000000..2099840 --- /dev/null +++ b/automake-1.15.1/INSTALL @@ -0,0 +1,370 @@ +Installation Instructions +************************* + +Copyright (C) 1994-1996, 1999-2002, 2004-2013 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 `' 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/automake-1.15.1/Makefile.am b/automake-1.15.1/Makefile.am new file mode 100644 index 0000000..cfe4dd4 --- /dev/null +++ b/automake-1.15.1/Makefile.am @@ -0,0 +1,135 @@ +## 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 . + +## 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 $@ + +# For some tests or targets, we need to have the just-build automake and +# aclocal scripts avaiable on PATH. +extend_PATH = \ + { PATH='$(abs_builddir)/t/wrap$(PATH_SEPARATOR)'$$PATH && export PATH; } + +# 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/Makefile.inc +include $(srcdir)/doc/Makefile.inc +include $(srcdir)/lib/Makefile.inc +include $(srcdir)/lib/Automake/Makefile.inc +include $(srcdir)/lib/am/Makefile.inc +include $(srcdir)/m4/Makefile.inc +include $(srcdir)/t/Makefile.inc + +# vim: ft=automake noet diff --git a/automake-1.15.1/Makefile.in b/automake-1.15.1/Makefile.in new file mode 100644 index 0000000..5fb3121 --- /dev/null +++ b/automake-1.15.1/Makefile.in @@ -0,0 +1,4201 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# 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, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# 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 . + + +VPATH = @srcdir@ +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; \ +} +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 \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + 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;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +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) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/amversion.m4 \ + $(top_srcdir)/m4/auxdir.m4 $(top_srcdir)/m4/cond.m4 \ + $(top_srcdir)/m4/init.m4 $(top_srcdir)/m4/install-sh.m4 \ + $(top_srcdir)/m4/lead-dot.m4 $(top_srcdir)/m4/missing.m4 \ + $(top_srcdir)/m4/options.m4 $(top_srcdir)/m4/prog-cc-c-o.m4 \ + $(top_srcdir)/m4/runlog.m4 $(top_srcdir)/m4/sanity.m4 \ + $(top_srcdir)/m4/silent.m4 $(top_srcdir)/m4/strip.m4 \ + $(top_srcdir)/m4/substnot.m4 $(top_srcdir)/m4/tar.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(dist_noinst_SCRIPTS) \ + $(srcdir)/doc/version.texi $(srcdir)/doc/stamp-vti \ + $(dist_am_DATA) $(dist_automake_ac_DATA) \ + $(dist_automake_internal_ac_DATA) $(dist_doc_DATA) \ + $(dist_noinst_DATA) $(dist_perllib_DATA) $(dist_pkgvdata_DATA) \ + $(dist_script_DATA) $(dist_system_ac_DATA) $(am__DIST_COMMON) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(SHELL) $(top_srcdir)/lib/mkinstalldirs +CONFIG_CLEAN_FILES = t/wrap/aclocal-${APIVERSION} \ + t/wrap/automake-${APIVERSION} +CONFIG_CLEAN_VPATH_FILES = GNUmakefile +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; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +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/||" +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] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" \ + "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(amdir)" \ + "$(DESTDIR)$(automake_acdir)" \ + "$(DESTDIR)$(automake_internal_acdir)" "$(DESTDIR)$(docdir)" \ + "$(DESTDIR)$(perllibdir)" "$(DESTDIR)$(pkgvdatadir)" \ + "$(DESTDIR)$(scriptdir)" "$(DESTDIR)$(system_acdir)" \ + "$(DESTDIR)$(perllibdir)" +SCRIPTS = $(bin_SCRIPTS) $(dist_noinst_SCRIPTS) \ + $(nodist_noinst_SCRIPTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +depcomp = +am__depfiles_maybe = +SOURCES = +DIST_SOURCES = +AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) +am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) +am__v_DVIPS_0 = @echo " DVIPS " $@; +am__v_DVIPS_1 = +AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) +am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) +am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; +am__v_MAKEINFO_1 = +AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) +am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) +am__v_INFOHTML_0 = @echo " INFOHTML" $@; +am__v_INFOHTML_1 = +AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) +am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) +am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; +am__v_TEXI2DVI_1 = +AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) +am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) +am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; +am__v_TEXI2PDF_1 = +AM_V_texinfo = $(am__v_texinfo_@AM_V@) +am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) +am__v_texinfo_0 = -q +am__v_texinfo_1 = +AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) +am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) +am__v_texidevnull_0 = > /dev/null +am__v_texidevnull_1 = +am__dirstamp = $(am__leading_dot)dirstamp +INFO_DEPS = $(srcdir)/doc/automake.info \ + $(srcdir)/doc/automake-history.info +TEXINFO_TEX = $(top_srcdir)/lib/texinfo.tex +am__TEXINFO_TEX_DIR = $(top_srcdir)/lib +DVIS = doc/automake.dvi doc/automake-history.dvi +PDFS = doc/automake.pdf doc/automake-history.pdf +PSS = doc/automake.ps doc/automake-history.ps +HTMLS = doc/automake.html doc/automake-history.html +TEXINFOS = doc/automake.texi doc/automake-history.texi +TEXI2DVI = texi2dvi +TEXI2PDF = $(TEXI2DVI) --pdf --batch +MAKEINFOHTML = $(MAKEINFO) --html +AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) +DVIPS = dvips +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(man1_MANS) +DATA = $(dist_am_DATA) $(dist_automake_ac_DATA) \ + $(dist_automake_internal_ac_DATA) $(dist_doc_DATA) \ + $(dist_noinst_DATA) $(dist_perllib_DATA) $(dist_pkgvdata_DATA) \ + $(dist_script_DATA) $(dist_system_ac_DATA) \ + $(nodist_noinst_DATA) $(nodist_perllib_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# 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 \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +AM_RECURSIVE_TARGETS = cscope check recheck +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; \ + 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; \ +} +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) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + 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"; \ +} \ +{ \ + 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"; \ + }; \ + 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; \ +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$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +TEST_SUITE_LOG = test-suite.log +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +am__test_logs3 = $(am__test_logs2:.pl.log=.log) +PL_LOG_DRIVER = $(SHELL) $(top_srcdir)/lib/test-driver +PL_LOG_COMPILE = $(PL_LOG_COMPILER) $(AM_PL_LOG_FLAGS) $(PL_LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs4 = $(am__test_logs3:.sh.log=.log) +SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/lib/test-driver +SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS) +TEST_LOGS = $(am__test_logs4:.tap.log=.log) +TAP_LOG_COMPILE = $(TAP_LOG_COMPILER) $(AM_TAP_LOG_FLAGS) \ + $(TAP_LOG_FLAGS) +am__DIST_COMMON = $(doc_automake_TEXINFOS) \ + $(doc_automake_history_TEXINFOS) $(srcdir)/GNUmakefile \ + $(srcdir)/Makefile.in $(srcdir)/bin/Makefile.inc \ + $(srcdir)/contrib/t/Makefile.inc $(srcdir)/doc/Makefile.inc \ + $(srcdir)/lib/Automake/Makefile.inc $(srcdir)/lib/Makefile.inc \ + $(srcdir)/lib/am/Makefile.inc $(srcdir)/m4/Makefile.inc \ + $(srcdir)/t/CheckListOfTests.am $(srcdir)/t/Makefile.inc \ + $(srcdir)/t/list-of-tests.mk $(srcdir)/t/testsuite-part.am \ + $(top_srcdir)/lib/compile $(top_srcdir)/lib/config.guess \ + $(top_srcdir)/lib/config.sub $(top_srcdir)/lib/install-sh \ + $(top_srcdir)/lib/mdate-sh $(top_srcdir)/lib/missing \ + $(top_srcdir)/lib/mkinstalldirs $(top_srcdir)/lib/test-driver \ + $(top_srcdir)/lib/texinfo.tex $(top_srcdir)/t/wrap/aclocal.in \ + $(top_srcdir)/t/wrap/automake.in AUTHORS COPYING ChangeLog \ + INSTALL NEWS README THANKS lib/COPYING lib/INSTALL lib/ar-lib \ + lib/compile lib/config.guess lib/config.sub lib/depcomp \ + lib/install-sh lib/mdate-sh lib/missing lib/mkinstalldirs \ + lib/py-compile lib/texinfo.tex lib/ylwrap +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +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)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.xz +GZIP_ENV = --best +DIST_TARGETS = dist-xz dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AM_TEST_RUNNER_SHELL = @AM_TEST_RUNNER_SHELL@ +APIVERSION = @APIVERSION@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FC = @FC@ +FCFLAGS = @FCFLAGS@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GNU_CC = @GNU_CC@ +GNU_CFLAGS = @GNU_CFLAGS@ +GNU_CXX = @GNU_CXX@ +GNU_CXXFLAGS = @GNU_CXXFLAGS@ +GNU_F77 = @GNU_F77@ +GNU_FC = @GNU_FC@ +GNU_FCFLAGS = @GNU_FCFLAGS@ +GNU_FFLAGS = @GNU_FFLAGS@ +GNU_GCJ = @GNU_GCJ@ +GNU_GCJFLAGS = @GNU_GCJFLAGS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN = @LN@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MODIFICATION_DELAY = @MODIFICATION_DELAY@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +RELEASE_YEAR = @RELEASE_YEAR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TEX = @TEX@ +VERSION = @VERSION@ +YACC = @YACC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_FC = @ac_ct_FC@ +ac_ct_GNU_CC = @ac_ct_GNU_CC@ +ac_ct_GNU_CXX = @ac_ct_GNU_CXX@ +ac_ct_GNU_F77 = @ac_ct_GNU_F77@ +ac_ct_GNU_FC = @ac_ct_GNU_FC@ +ac_ct_GNU_GCJ = @ac_ct_GNU_GCJ@ +am_AUTOCONF = @am_AUTOCONF@ +am_AUTOHEADER = @am_AUTOHEADER@ +am_AUTOM4TE = @am_AUTOM4TE@ +am_AUTORECONF = @am_AUTORECONF@ +am_AUTOUPDATE = @am_AUTOUPDATE@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +amdir = @amdir@ +automake_acdir = @automake_acdir@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgvdatadir = @pkgvdatadir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +required_autoconf_version = @required_autoconf_version@ +sbindir = @sbindir@ +scriptdir = @scriptdir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +system_acdir = @system_acdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +CLEANFILES = $(bin_SCRIPTS) $(man1_MANS) $(nodist_perllib_DATA) \ + t/ax/test-defs.sh t/ax/shell-no-trail-bslash t/ax/cc-no-c-o \ + runtest $(PERF_TEST_SUITE_LOG) +DISTCLEANFILES = +MAINTAINERCLEANFILES = + +# Third-party, obsolescent or experimental stuff. + +# Older files, kept mostly for historical interest. + +# Maintainer-specific files and scripts. +EXTRA_DIST = bootstrap GNUmakefile HACKING PLANS 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 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/am-ft \ + maintainer/am-xft maintainer/rename-tests maintainer/maint.mk \ + maintainer/syntax-checks.mk $(AUTOMAKESOURCES) \ + bin/gen-perl-protos doc/help2man lib/Automake/Config.in \ + m4/amversion.in t/README t/ax/is t/ax/is_newest \ + t/ax/deltree.pl $(handwritten_TESTS) t/ax/tap-summary-aux.sh \ + t/ax/testsuite-summary-checks.sh t/ax/depcomp.sh \ + t/ax/extract-testsuite-summary.pl t/ax/tap-setup.sh \ + t/ax/trivial-test-driver $(generated_TESTS) gen-testsuite-part \ + $(contrib_TESTS) t/ax/distcheck-hook-m4.am t/ax/test-defs.in \ + t/ax/shell-no-trail-bslash.in t/ax/cc-no-c-o.in \ + t/ax/runtest.in $(perf_TESTS) +TAGS_FILES = $(AUTOMAKESOURCES) +dist_noinst_DATA = $(amhello_sources) t/ax/test-init.sh \ + t/ax/test-lib.sh t/ax/am-test-lib.sh t/ax/tap-functions.sh +nodist_noinst_DATA = t/ax/test-defs.sh +dist_noinst_SCRIPTS = + +# 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. +nodist_noinst_SCRIPTS = t/wrap/aclocal-$(APIVERSION) \ + t/wrap/automake-$(APIVERSION) t/ax/shell-no-trail-bslash \ + t/ax/cc-no-c-o runtest + +# 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' \ + -e 's,[@]am__isrc[@],!!@!!am__isrc!!@!!,g' \ + | $(SHELL) ./config.status --file=- \ + | 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 $@ + + +# For some tests or targets, we need to have the just-build automake and +# aclocal scripts avaiable on PATH. +extend_PATH = \ + { PATH='$(abs_builddir)/t/wrap$(PATH_SEPARATOR)'$$PATH && export PATH; } + +bin_SCRIPTS = bin/automake bin/aclocal + +# Used by maintainer checks and such. +automake_in = $(srcdir)/bin/automake.in +aclocal_in = $(srcdir)/bin/aclocal.in +automake_script = bin/automake +aclocal_script = bin/aclocal +AUTOMAKESOURCES = $(automake_in) $(aclocal_in) +info_TEXINFOS = doc/automake.texi doc/automake-history.texi +doc_automake_TEXINFOS = doc/fdl.texi +doc_automake_history_TEXINFOS = doc/fdl.texi +man1_MANS = \ + doc/aclocal.1 \ + doc/automake.1 \ + doc/aclocal-$(APIVERSION).1 \ + doc/automake-$(APIVERSION).1 + +update_mans = \ + $(AM_V_GEN): \ + && $(MKDIR_P) doc \ + && $(extend_PATH) \ + && $(PERL) $(srcdir)/doc/help2man --output=$@ + +amhello_sources = \ + doc/amhello/configure.ac \ + doc/amhello/Makefile.am \ + doc/amhello/README \ + doc/amhello/src/main.c \ + doc/amhello/src/Makefile.am + +amhello_configury = \ + aclocal.m4 \ + autom4te.cache \ + Makefile.in \ + config.h.in \ + configure \ + depcomp \ + install-sh \ + missing \ + src/Makefile.in + +dist_doc_DATA = $(srcdir)/doc/amhello-1.0.tar.gz +setup_autotools_paths = { \ + $(extend_PATH) \ + && 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; \ +} + +dist_pkgvdata_DATA = \ + lib/COPYING \ + lib/INSTALL \ + lib/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 = \ + lib/config.guess \ + lib/config.sub \ + lib/install-sh \ + lib/mdate-sh \ + lib/missing \ + lib/mkinstalldirs \ + lib/ylwrap \ + lib/depcomp \ + lib/compile \ + lib/py-compile \ + lib/ar-lib \ + lib/test-driver \ + lib/tap-driver.sh + +perllibdir = $(pkgvdatadir)/Automake +dist_perllib_DATA = \ + lib/Automake/ChannelDefs.pm \ + lib/Automake/Channels.pm \ + lib/Automake/Condition.pm \ + lib/Automake/Configure_ac.pm \ + lib/Automake/DisjConditions.pm \ + lib/Automake/FileUtils.pm \ + lib/Automake/General.pm \ + lib/Automake/Getopt.pm \ + lib/Automake/Item.pm \ + lib/Automake/ItemDef.pm \ + lib/Automake/Language.pm \ + lib/Automake/Location.pm \ + lib/Automake/Options.pm \ + lib/Automake/Rule.pm \ + lib/Automake/RuleDef.pm \ + lib/Automake/Variable.pm \ + lib/Automake/VarDef.pm \ + lib/Automake/Version.pm \ + lib/Automake/XFile.pm \ + lib/Automake/Wrap.pm + +nodist_perllib_DATA = lib/Automake/Config.pm +dist_am_DATA = \ + lib/am/check.am \ + lib/am/check2.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/install.am \ + lib/am/inst-vars.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/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/vala.am \ + lib/am/yacc.am + +dist_automake_ac_DATA = \ + m4/amversion.m4 \ + m4/ar-lib.m4 \ + m4/as.m4 \ + m4/auxdir.m4 \ + m4/cond.m4 \ + m4/cond-if.m4 \ + m4/depend.m4 \ + m4/depout.m4 \ + m4/dmalloc.m4 \ + m4/extra-recurs.m4 \ + m4/gcj.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/missing.m4 \ + m4/mkdirp.m4 \ + m4/obsolete.m4 \ + m4/options.m4 \ + m4/python.m4 \ + m4/prog-cc-c-o.m4 \ + m4/runlog.m4 \ + m4/sanity.m4 \ + m4/silent.m4 \ + m4/strip.m4 \ + m4/substnot.m4 \ + m4/tar.m4 \ + m4/upc.m4 \ + m4/vala.m4 + +dist_system_ac_DATA = m4/acdir/README +automake_internal_acdir = $(automake_acdir)/internal +dist_automake_internal_ac_DATA = m4/internal/ac-config-macro-dirs.m4 + +# Run the tests with a proper shell detected at configure time. +LOG_COMPILER = $(AM_TEST_RUNNER_SHELL) +TEST_EXTENSIONS = .pl .sh .tap +SH_LOG_COMPILER = $(LOG_COMPILER) +TAP_LOG_COMPILER = $(LOG_COMPILER) +PL_LOG_COMPILER = $(PERL) +AM_PL_LOG_FLAGS = -Mstrict -I $(builddir)/lib -I $(srcdir)/lib -w +TAP_LOG_DRIVER = AM_TAP_AWK='$(AWK)' $(SHELL) $(srcdir)/lib/tap-driver.sh +AM_TAP_LOG_DRIVER_FLAGS = --merge + +# Hand-written tests. + +# Automatically-generated tests wrapping hand-written ones. +# Also, automatically-computed dependencies for tests. + +# Hand-written tests for stuff in 'contrib/'. +TESTS = $(handwritten_TESTS) $(generated_TESTS) $(contrib_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. + +# 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 = 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; stderr_fileno_=9; export stderr_fileno_; if test \ + $(srcdir) != .; then \ + PATH='$(abs_srcdir)/t/ax$(PATH_SEPARATOR)'$$PATH; fi; \ + PATH='$(abs_builddir)/t/ax$(PATH_SEPARATOR)'$$PATH; export \ + PATH; +# 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 + +# 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/subobj-indir-pr13928.sh \ +t/subobj-vpath-pr13928.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/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/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/postproc.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-vpath-pr13928.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 + +generated_TESTS = t/ar-lib-w.sh t/built-sources-check-w.sh \ + t/check-exported-srcdir-w.sh t/check-fd-redirect-w.sh \ + t/check-subst-prog-w.sh t/check-subst-w.sh \ + t/check-tests-in-builddir-w.sh t/check-w.sh t/check11-w.sh \ + t/check12-w.sh t/check2-w.sh t/check4-w.sh t/check5-w.sh \ + t/check6-w.sh t/check7-w.sh t/check8-w.sh t/color-tests-w.sh \ + t/color-tests2-w.sh t/compile-w.sh t/compile2-w.sh \ + t/compile3-w.sh t/compile4-w.sh t/compile5-w.sh \ + t/compile6-w.sh t/compile7-w.sh t/exeext4-w.sh \ + t/install-sh-option-C-w.sh t/install-sh-unittests-w.sh \ + t/maken3-w.sh t/mdate5-w.sh t/mdate6-w.sh \ + t/missing-version-mismatch-w.sh t/missing3-w.sh t/mkinst3-w.sh \ + t/posixsubst-tests-w.sh t/depcomp-lt-auto.tap \ + t/depcomp-lt-cpp.tap t/depcomp-lt-dashmstdout.tap \ + t/depcomp-lt-disabled.tap t/depcomp-lt-gcc.tap \ + t/depcomp-lt-makedepend.tap t/depcomp-lt-msvcmsys.tap \ + t/depcomp-lt-msvisualcpp.tap t/depcomp-auto.tap \ + t/depcomp-cpp.tap t/depcomp-dashmstdout.tap \ + t/depcomp-disabled.tap t/depcomp-gcc.tap \ + t/depcomp-makedepend.tap t/depcomp-msvcmsys.tap \ + t/depcomp-msvisualcpp.tap +check_tap_testsuite_summary_TESTS = \ + t/tap-summary.sh \ + t/tap-summary-color.sh + +check_testsuite_summary_TESTS = \ + t/testsuite-summary-color.sh \ + t/testsuite-summary-count.sh + +depcomp_TESTS = \ + t/depcomp-lt-auto.tap \ + t/depcomp-lt-cpp.tap \ + t/depcomp-lt-dashmstdout.tap \ + t/depcomp-lt-disabled.tap \ + t/depcomp-lt-gcc.tap \ + t/depcomp-lt-makedepend.tap \ + t/depcomp-lt-msvcmsys.tap \ + t/depcomp-lt-msvisualcpp.tap \ + t/depcomp-auto.tap \ + t/depcomp-cpp.tap \ + t/depcomp-dashmstdout.tap \ + t/depcomp-disabled.tap \ + t/depcomp-gcc.tap \ + t/depcomp-makedepend.tap \ + t/depcomp-msvcmsys.tap \ + t/depcomp-msvisualcpp.tap + +extract_testsuite_summary_TESTS = \ + t/testsuite-summary-count-many.sh + +gettext_macros_TESTS = \ + t/gettext-basics.sh \ + t/gettext-config-rpath.sh \ + t/gettext-external-pr338.sh \ + t/gettext-intl-subdir.sh \ + t/gettext-pr381.sh \ + t/subdir-cond-gettext.sh + +libtool_macros_TESTS = \ + t/ar-lib4.sh \ + t/ar-lib6a.sh \ + t/ar-lib6b.sh \ + t/canon6.sh \ + t/canon7.sh \ + t/ccnoco-lt.sh \ + t/cxx-lt-demo.sh \ + t/depcomp8b.sh \ + t/extra-deps-lt.sh \ + t/fort5.sh \ + t/instdir-ltlib.sh \ + t/instfail-libtool.sh \ + t/ldadd.sh \ + t/ldflags.sh \ + t/libobj13.sh \ + t/libtool.sh \ + t/libtool2.sh \ + t/libtool3.sh \ + t/libtool5.sh \ + t/libtool6.sh \ + t/libtool7.sh \ + t/libtool8.sh \ + t/libtool9.sh \ + t/libtoo10.sh \ + t/libtoo11.sh \ + t/listval.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/nobase-libtool.sh \ + t/objc-megademo.sh \ + t/posixsubst-ltlibraries.sh \ + t/pr72.sh \ + t/pr211.sh \ + t/pr300-ltlib.sh \ + t/pr307.sh \ + t/pr401b.sh \ + t/reqd2.sh \ + t/silent-lt.sh \ + t/stdlib2.sh \ + t/strip3.sh \ + t/subobj9.sh \ + t/subobj-clean-lt-pr10697.sh \ + t/suffix2.sh \ + t/suffix5.sh \ + t/suffix8.tap \ + t/suffix10.tap \ + t/vala-libs.sh \ + t/vartypo2.sh \ + t/depcomp-lt-auto.tap \ + t/depcomp-lt-cpp.tap \ + t/depcomp-lt-dashmstdout.tap \ + t/depcomp-lt-disabled.tap \ + t/depcomp-lt-gcc.tap \ + t/depcomp-lt-makedepend.tap \ + t/depcomp-lt-msvcmsys.tap \ + t/depcomp-lt-msvisualcpp.tap + +on_tap_with_common_setup_TESTS = \ + 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-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 + +pkgconfig_macros_TESTS = \ + 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 + +use_trivial_test_driver_TESTS = \ + t/testsuite-summary-count-many.sh \ + t/test-driver-acsubst.sh \ + t/test-driver-cond.sh \ + t/test-driver-custom-multitest.sh \ + t/test-driver-custom-multitest-recheck.sh \ + t/test-driver-custom-multitest-recheck2.sh + +contrib_TESTS = \ + contrib/t/parallel-tests-html.sh \ + contrib/t/parallel-tests-html-recursive.sh \ + contrib/t/help-multilib.sh \ + contrib/t/multilib.sh + +test_subdirs = t t/pm contrib/t +am__tmk = tests-in-makefile-list.tmp +am__tfs = tests-on-filesystem-list.tmp +am__tdf = diff-in-tests-lists.tmp +PERF_TEST_SUITE_LOG = t/perf/test-suite.log +all: all-am + +.SUFFIXES: +.SUFFIXES: .dvi .log .pl .pl$(EXEEXT) .ps .sh .sh$(EXEEXT) .tap .tap$(EXEEXT) .trs +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/bin/Makefile.inc $(srcdir)/doc/Makefile.inc $(srcdir)/lib/Makefile.inc $(srcdir)/lib/Automake/Makefile.inc $(srcdir)/lib/am/Makefile.inc $(srcdir)/m4/Makefile.inc $(srcdir)/t/Makefile.inc $(srcdir)/t/list-of-tests.mk $(srcdir)/t/testsuite-part.am $(srcdir)/contrib/t/Makefile.inc $(srcdir)/t/CheckListOfTests.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu --ignore-deps'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu --ignore-deps \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu --ignore-deps Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu --ignore-deps Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; +$(srcdir)/bin/Makefile.inc $(srcdir)/doc/Makefile.inc $(srcdir)/lib/Makefile.inc $(srcdir)/lib/Automake/Makefile.inc $(srcdir)/lib/am/Makefile.inc $(srcdir)/m4/Makefile.inc $(srcdir)/t/Makefile.inc $(srcdir)/t/list-of-tests.mk $(srcdir)/t/testsuite-part.am $(srcdir)/contrib/t/Makefile.inc $(srcdir)/t/CheckListOfTests.am $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): +t/wrap/aclocal-${APIVERSION}: $(top_builddir)/config.status $(top_srcdir)/t/wrap/aclocal.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +t/wrap/automake-${APIVERSION}: $(top_builddir)/config.status $(top_srcdir)/t/wrap/automake.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +install-binSCRIPTS: $(bin_SCRIPTS) + @$(NORMAL_INSTALL) + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;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 \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) +doc/$(am__dirstamp): + @$(MKDIR_P) doc + @: > doc/$(am__dirstamp) + +$(srcdir)/doc/automake.info: doc/automake.texi $(srcdir)/doc/version.texi $(doc_automake_TEXINFOS) + $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ + am__cwd=`pwd` && $(am__cd) $(srcdir) && \ + rm -rf $$backupdir && mkdir $$backupdir && \ + 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 && \ + cd "$$am__cwd"; \ + if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \ + -o $@ $(srcdir)/doc/automake.texi; \ + then \ + rc=0; \ + $(am__cd) $(srcdir); \ + else \ + rc=$$?; \ + $(am__cd) $(srcdir) && \ + $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ + fi; \ + rm -rf $$backupdir; exit $$rc + +doc/automake.dvi: doc/automake.texi $(srcdir)/doc/version.texi $(doc_automake_TEXINFOS) doc/$(am__dirstamp) + $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \ + $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ + `test -f 'doc/automake.texi' || echo '$(srcdir)/'`doc/automake.texi + +doc/automake.pdf: doc/automake.texi $(srcdir)/doc/version.texi $(doc_automake_TEXINFOS) doc/$(am__dirstamp) + $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \ + $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ + `test -f 'doc/automake.texi' || echo '$(srcdir)/'`doc/automake.texi + +doc/automake.html: doc/automake.texi $(srcdir)/doc/version.texi $(doc_automake_TEXINFOS) doc/$(am__dirstamp) + $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) + $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \ + -o $(@:.html=.htp) `test -f 'doc/automake.texi' || echo '$(srcdir)/'`doc/automake.texi; \ + then \ + rm -rf $@ && mv $(@:.html=.htp) $@; \ + else \ + rm -rf $(@:.html=.htp); exit 1; \ + fi +$(srcdir)/doc/version.texi: $(srcdir)/doc/stamp-vti +$(srcdir)/doc/stamp-vti: doc/automake.texi $(top_srcdir)/configure + @test -f doc/$(am__dirstamp) || $(MAKE) $(AM_MAKEFLAGS) doc/$(am__dirstamp) + @(dir=.; test -f ./doc/automake.texi || dir=$(srcdir); \ + set `$(SHELL) $(top_srcdir)/lib/mdate-sh $$dir/doc/automake.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$$$$ $(srcdir)/doc/version.texi \ + || (echo "Updating $(srcdir)/doc/version.texi" && \ + cp vti.tmp$$$$ $(srcdir)/doc/version.texi.tmp$$$$ && \ + mv $(srcdir)/doc/version.texi.tmp$$$$ $(srcdir)/doc/version.texi)) && \ + rm -f vti.tmp$$$$ $(srcdir)/doc/version.texi.$$$$ + @cp $(srcdir)/doc/version.texi $@ + +mostlyclean-vti: + -rm -f vti.tmp* $(srcdir)/doc/version.texi.tmp* + +maintainer-clean-vti: + -rm -f $(srcdir)/doc/stamp-vti $(srcdir)/doc/version.texi + +$(srcdir)/doc/automake-history.info: doc/automake-history.texi $(doc_automake_history_TEXINFOS) + $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ + am__cwd=`pwd` && $(am__cd) $(srcdir) && \ + rm -rf $$backupdir && mkdir $$backupdir && \ + 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 && \ + cd "$$am__cwd"; \ + if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \ + -o $@ $(srcdir)/doc/automake-history.texi; \ + then \ + rc=0; \ + $(am__cd) $(srcdir); \ + else \ + rc=$$?; \ + $(am__cd) $(srcdir) && \ + $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ + fi; \ + rm -rf $$backupdir; exit $$rc + +doc/automake-history.dvi: doc/automake-history.texi $(doc_automake_history_TEXINFOS) doc/$(am__dirstamp) + $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \ + $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ + `test -f 'doc/automake-history.texi' || echo '$(srcdir)/'`doc/automake-history.texi + +doc/automake-history.pdf: doc/automake-history.texi $(doc_automake_history_TEXINFOS) doc/$(am__dirstamp) + $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \ + $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ + `test -f 'doc/automake-history.texi' || echo '$(srcdir)/'`doc/automake-history.texi + +doc/automake-history.html: doc/automake-history.texi $(doc_automake_history_TEXINFOS) doc/$(am__dirstamp) + $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) + $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \ + -o $(@:.html=.htp) `test -f 'doc/automake-history.texi' || echo '$(srcdir)/'`doc/automake-history.texi; \ + then \ + rm -rf $@ && mv $(@:.html=.htp) $@; \ + else \ + rm -rf $(@:.html=.htp); exit 1; \ + fi +.dvi.ps: + $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + $(DVIPS) $(AM_V_texinfo) -o $@ $< + +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) \ + echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ + rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ + done + +uninstall-info-am: + @$(PRE_UNINSTALL) + @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + 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|^.*/||'`; \ + 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 + +dist-info: $(INFO_DEPS) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; \ + for base in $$list; do \ + 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 \ + relfile=`expr "$$file" : "$$d/\(.*\)"`; \ + test -f "$(distdir)/$$relfile" || \ + cp -p $$file "$(distdir)/$$relfile"; \ + else :; fi; \ + done; \ + done + +mostlyclean-aminfo: + -rm -rf doc/automake.t2d doc/automake.t2p doc/automake-history.t2d \ + doc/automake-history.t2p + +clean-aminfo: + -test -z "doc/automake.dvi doc/automake.pdf doc/automake.ps doc/automake.html \ + doc/automake-history.dvi doc/automake-history.pdf \ + doc/automake-history.ps doc/automake-history.html" \ + || rm -rf doc/automake.dvi doc/automake.pdf doc/automake.ps doc/automake.html \ + doc/automake-history.dvi doc/automake-history.pdf \ + doc/automake-history.ps doc/automake-history.html + +maintainer-clean-aminfo: + @list='$(INFO_DEPS)'; for i in $$list; do \ + 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 +install-man1: $(man1_MANS) + @$(NORMAL_INSTALL) + @list1='$(man1_MANS)'; \ + list2=''; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$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)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +install-dist_amDATA: $(dist_am_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_am_DATA)'; test -n "$(amdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(amdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(amdir)" || 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)$(amdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(amdir)" || exit $$?; \ + done + +uninstall-dist_amDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_am_DATA)'; test -n "$(amdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(amdir)'; $(am__uninstall_files_from_dir) +install-dist_automake_acDATA: $(dist_automake_ac_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_automake_ac_DATA)'; test -n "$(automake_acdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(automake_acdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(automake_acdir)" || 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)$(automake_acdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(automake_acdir)" || exit $$?; \ + done + +uninstall-dist_automake_acDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_automake_ac_DATA)'; test -n "$(automake_acdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(automake_acdir)'; $(am__uninstall_files_from_dir) +install-dist_automake_internal_acDATA: $(dist_automake_internal_ac_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_automake_internal_ac_DATA)'; test -n "$(automake_internal_acdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(automake_internal_acdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(automake_internal_acdir)" || 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)$(automake_internal_acdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(automake_internal_acdir)" || exit $$?; \ + done + +uninstall-dist_automake_internal_acDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_automake_internal_ac_DATA)'; test -n "$(automake_internal_acdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(automake_internal_acdir)'; $(am__uninstall_files_from_dir) +install-dist_docDATA: $(dist_doc_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(docdir)" || 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)$(docdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ + done + +uninstall-dist_docDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) +install-dist_perllibDATA: $(dist_perllib_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_perllib_DATA)'; test -n "$(perllibdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(perllibdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(perllibdir)" || 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)$(perllibdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(perllibdir)" || exit $$?; \ + done + +uninstall-dist_perllibDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_perllib_DATA)'; test -n "$(perllibdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(perllibdir)'; $(am__uninstall_files_from_dir) +install-dist_pkgvdataDATA: $(dist_pkgvdata_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_pkgvdata_DATA)'; test -n "$(pkgvdatadir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgvdatadir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgvdatadir)" || 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)$(pkgvdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgvdatadir)" || exit $$?; \ + done + +uninstall-dist_pkgvdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_pkgvdata_DATA)'; test -n "$(pkgvdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgvdatadir)'; $(am__uninstall_files_from_dir) +install-dist_scriptDATA: $(dist_script_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_script_DATA)'; test -n "$(scriptdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(scriptdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(scriptdir)" || 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)$(scriptdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(scriptdir)" || exit $$?; \ + done + +uninstall-dist_scriptDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_script_DATA)'; test -n "$(scriptdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(scriptdir)'; $(am__uninstall_files_from_dir) +install-dist_system_acDATA: $(dist_system_ac_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_system_ac_DATA)'; test -n "$(system_acdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(system_acdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(system_acdir)" || 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)$(system_acdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(system_acdir)" || exit $$?; \ + done + +uninstall-dist_system_acDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_system_ac_DATA)'; test -n "$(system_acdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(system_acdir)'; $(am__uninstall_files_from_dir) +install-nodist_perllibDATA: $(nodist_perllib_DATA) + @$(NORMAL_INSTALL) + @list='$(nodist_perllib_DATA)'; test -n "$(perllibdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(perllibdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(perllibdir)" || 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)$(perllibdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(perllibdir)" || exit $$?; \ + done + +uninstall-nodist_perllibDATA: + @$(NORMAL_UNINSTALL) + @list='$(nodist_perllib_DATA)'; test -n "$(perllibdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(perllibdir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + 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 +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +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 +cscopelist: cscopelist-am + +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 + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +# 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); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + 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 \ + 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 \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + elif test -n "$$redo_logs"; then \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + 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 + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + 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`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + 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}"; \ + }; \ + 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"; \ + }; \ + { \ + 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); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + 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; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @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`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + 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`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +.pl.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(PL_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_PL_LOG_DRIVER_FLAGS) $(PL_LOG_DRIVER_FLAGS) -- $(PL_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.pl$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(PL_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_PL_LOG_DRIVER_FLAGS) $(PL_LOG_DRIVER_FLAGS) -- $(PL_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) +.sh.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.sh$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) +.tap.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TAP_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TAP_LOG_DRIVER_FLAGS) $(TAP_LOG_DRIVER_FLAGS) -- $(TAP_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.tap$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TAP_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TAP_LOG_DRIVER_FLAGS) $(TAP_LOG_DRIVER_FLAGS) -- $(TAP_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + 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 -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-info + -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 test -z "$(am__skip_length_check)" && find "$(distdir)" -type f -print | \ + grep '^...................................................................................................' 1>&2; then \ + echo 'error: the above filenames are too long' 1>&2; \ + exit 1; \ + else :; fi +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +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) + +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) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +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 + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --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 \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (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 \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && 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' +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 +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 +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS check-local +check: check-am +all-am: Makefile $(INFO_DEPS) $(SCRIPTS) $(MANS) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(amdir)" "$(DESTDIR)$(automake_acdir)" "$(DESTDIR)$(automake_internal_acdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(perllibdir)" "$(DESTDIR)$(pkgvdatadir)" "$(DESTDIR)$(scriptdir)" "$(DESTDIR)$(system_acdir)" "$(DESTDIR)$(perllibdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + 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 +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +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) + -rm -f doc/$(am__dirstamp) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-aminfo clean-generic clean-local mostlyclean-am + +distclean: distclean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: $(DVIS) + +html: html-am + +html-am: $(HTMLS) + +info: info-am + +info-am: $(INFO_DEPS) + +install-data-am: install-dist_amDATA install-dist_automake_acDATA \ + install-dist_automake_internal_acDATA install-dist_docDATA \ + install-dist_perllibDATA install-dist_pkgvdataDATA \ + install-dist_scriptDATA install-dist_system_acDATA \ + install-info-am install-man install-nodist_perllibDATA + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-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-exec-am: install-binSCRIPTS + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-exec-hook +install-html: install-html-am + +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) \ + 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: install-info-am + +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 \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + 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 \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ + install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ + done; \ + else : ; fi +install-man: install-man1 + +install-pdf: install-pdf-am + +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: install-ps-am + +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 +installcheck-am: installcheck-local + +maintainer-clean: maintainer-clean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-aminfo \ + maintainer-clean-generic maintainer-clean-local \ + maintainer-clean-vti + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti + +pdf: pdf-am + +pdf-am: $(PDFS) + +ps: ps-am + +ps-am: $(PSS) + +uninstall-am: uninstall-binSCRIPTS uninstall-dist_amDATA \ + uninstall-dist_automake_acDATA \ + uninstall-dist_automake_internal_acDATA uninstall-dist_docDATA \ + uninstall-dist_perllibDATA uninstall-dist_pkgvdataDATA \ + uninstall-dist_scriptDATA uninstall-dist_system_acDATA \ + uninstall-dvi-am uninstall-html-am uninstall-info-am \ + uninstall-man uninstall-nodist_perllibDATA uninstall-pdf-am \ + uninstall-ps-am + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +uninstall-man: uninstall-man1 + +.MAKE: check-am install-am install-data-am install-exec-am \ + install-strip uninstall-am + +.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-TESTS \ + check-am check-local clean clean-aminfo clean-cscope \ + clean-generic clean-local cscope cscopelist-am ctags ctags-am \ + dist dist-all dist-bzip2 dist-gzip dist-info dist-lzip \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-generic distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-binSCRIPTS install-data \ + install-data-am install-data-hook install-dist_amDATA \ + install-dist_automake_acDATA \ + install-dist_automake_internal_acDATA install-dist_docDATA \ + install-dist_perllibDATA install-dist_pkgvdataDATA \ + install-dist_scriptDATA install-dist_system_acDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-exec-hook \ + install-html install-html-am install-info install-info-am \ + install-man install-man1 install-nodist_perllibDATA \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installcheck-local \ + installdirs maintainer-clean maintainer-clean-aminfo \ + maintainer-clean-generic maintainer-clean-local \ + maintainer-clean-vti mostlyclean mostlyclean-aminfo \ + mostlyclean-generic mostlyclean-vti pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am \ + uninstall-binSCRIPTS uninstall-dist_amDATA \ + uninstall-dist_automake_acDATA \ + uninstall-dist_automake_internal_acDATA uninstall-dist_docDATA \ + uninstall-dist_perllibDATA uninstall-dist_pkgvdataDATA \ + uninstall-dist_scriptDATA uninstall-dist_system_acDATA \ + uninstall-dvi-am uninstall-hook uninstall-html-am \ + uninstall-info-am uninstall-man uninstall-man1 \ + uninstall-nodist_perllibDATA uninstall-pdf-am uninstall-ps-am + +.PRECIOUS: Makefile + + +# 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: + +# 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. +bin/automake: bin/automake.in +bin/aclocal: bin/aclocal.in +bin/automake bin/aclocal: Makefile bin/gen-perl-protos + $(AM_V_GEN)rm -f $@ $@-t $@-t2 \ + && $(MKDIR_P) $(@D) \ + && in=$@.in && $(do_subst) <$(srcdir)/$$in >$@-t \ + && $(PERL) -w $(srcdir)/bin/gen-perl-protos $@-t > $@-t2 \ + && mv -f $@-t2 $@-t \ + && chmod a+x,a-w $@-t && mv -f $@-t $@ + +# vim: ft=automake noet + +$(man1_MANS): $(top_srcdir)/configure.ac + +doc/aclocal.1 doc/automake.1: + $(AM_V_GEN): \ + && $(MKDIR_P) doc \ + && f=`echo $@ | sed 's|.*/||; s|\.1$$||; $(transform)'` \ + && echo ".so man1/$$f-$(APIVERSION).1" > $@ + +doc/aclocal-$(APIVERSION).1: $(aclocal_script) lib/Automake/Config.pm + $(update_mans) aclocal-$(APIVERSION) +doc/automake-$(APIVERSION).1: $(automake_script) lib/Automake/Config.pm + $(update_mans) automake-$(APIVERSION) + +# We depend on configure.ac so that we regenerate the tarball +# whenever the Automake version changes. +$(srcdir)/doc/amhello-1.0.tar.gz: $(amhello_sources) $(srcdir)/configure.ac + $(AM_V_GEN)tmp=amhello-output.tmp \ + && $(am__cd) $(srcdir)/doc/amhello \ + && : Make our aclocal and automake avaiable before system ones. \ + && $(setup_autotools_paths) \ + && ( \ + { $(AM_V_P) || exec 5>&2 >$$tmp 2>&1; } \ + && $(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 + +install-data-hook: + @$(POST_INSTALL) + @for f in $(dist_script_DATA); do echo $$f; done \ + | sed 's,^lib/,,' \ + | ( 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,^lib/,,' \ + | 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 + +lib/Automake/Config.pm: lib/Automake/Config.in Makefile + $(AM_V_at)rm -f $@ $@-t + $(AM_V_at)$(MKDIR_P) lib/Automake + $(AM_V_GEN)in=Config.in \ + && $(do_subst) <$(srcdir)/lib/Automake/Config.in >$@-t + $(generated_file_finalize) + +# vim: ft=automake noet + +# vim: ft=automake noet + +# 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)/m4/amversion.m4: $(srcdir)/configure.ac \ + $(srcdir)/m4/amversion.in + $(AM_V_at)rm -f $@-t $@ + $(AM_V_GEN)in=amversion.in \ + && $(do_subst) <$(srcdir)/m4/amversion.in >$@-t + $(generated_file_finalize) + +# vim: ft=automake noet + +print-list-of-tests: + @echo $(handwritten_TESTS) +.PHONY: print-list-of-tests + +t/ar-lib-w.log: t/ar-lib.sh +t/ar-lib-w.log: t/ar-lib.log +t/built-sources-check-w.log: t/built-sources-check.sh +t/built-sources-check-w.log: t/built-sources-check.log +t/check-exported-srcdir-w.log: t/check-exported-srcdir.sh +t/check-exported-srcdir-w.log: t/check-exported-srcdir.log +t/check-fd-redirect-w.log: t/check-fd-redirect.sh +t/check-fd-redirect-w.log: t/check-fd-redirect.log +t/check-subst-prog-w.log: t/check-subst-prog.sh +t/check-subst-prog-w.log: t/check-subst-prog.log +t/check-subst-w.log: t/check-subst.sh +t/check-subst-w.log: t/check-subst.log +t/check-tests-in-builddir-w.log: t/check-tests-in-builddir.sh +t/check-tests-in-builddir-w.log: t/check-tests-in-builddir.log +t/check-w.log: t/check.sh +t/check-w.log: t/check.log +t/check11-w.log: t/check11.sh +t/check11-w.log: t/check11.log +t/check12-w.log: t/check12.sh +t/check12-w.log: t/check12.log +t/check2-w.log: t/check2.sh +t/check2-w.log: t/check2.log +t/check4-w.log: t/check4.sh +t/check4-w.log: t/check4.log +t/check5-w.log: t/check5.sh +t/check5-w.log: t/check5.log +t/check6-w.log: t/check6.sh +t/check6-w.log: t/check6.log +t/check7-w.log: t/check7.sh +t/check7-w.log: t/check7.log +t/check8-w.log: t/check8.sh +t/check8-w.log: t/check8.log +t/color-tests-w.log: t/color-tests.sh +t/color-tests-w.log: t/color-tests.log +t/color-tests2-w.log: t/color-tests2.sh +t/color-tests2-w.log: t/color-tests2.log +t/compile-w.log: t/compile.sh +t/compile-w.log: t/compile.log +t/compile2-w.log: t/compile2.sh +t/compile2-w.log: t/compile2.log +t/compile3-w.log: t/compile3.sh +t/compile3-w.log: t/compile3.log +t/compile4-w.log: t/compile4.sh +t/compile4-w.log: t/compile4.log +t/compile5-w.log: t/compile5.sh +t/compile5-w.log: t/compile5.log +t/compile6-w.log: t/compile6.sh +t/compile6-w.log: t/compile6.log +t/compile7-w.log: t/compile7.sh +t/compile7-w.log: t/compile7.log +t/exeext4-w.log: t/exeext4.sh +t/exeext4-w.log: t/exeext4.log +t/install-sh-option-C-w.log: t/install-sh-option-C.sh +t/install-sh-option-C-w.log: t/install-sh-option-C.log +t/install-sh-unittests-w.log: t/install-sh-unittests.sh +t/install-sh-unittests-w.log: t/install-sh-unittests.log +t/maken3-w.log: t/maken3.sh +t/maken3-w.log: t/maken3.log +t/mdate5-w.log: t/mdate5.sh +t/mdate5-w.log: t/mdate5.log +t/mdate6-w.log: t/mdate6.sh +t/mdate6-w.log: t/mdate6.log +t/missing-version-mismatch-w.log: t/missing-version-mismatch.sh +t/missing-version-mismatch-w.log: t/missing-version-mismatch.log +t/missing3-w.log: t/missing3.sh +t/missing3-w.log: t/missing3.log +t/mkinst3-w.log: t/mkinst3.sh +t/mkinst3-w.log: t/mkinst3.log +t/posixsubst-tests-w.log: t/posixsubst-tests.sh +t/posixsubst-tests-w.log: t/posixsubst-tests.log +t/tap-summary.log: t/ax/tap-summary-aux.sh +t/tap-summary-color.log: t/ax/tap-summary-aux.sh +t/testsuite-summary-color.log: t/ax/testsuite-summary-checks.sh +t/testsuite-summary-count.log: t/ax/testsuite-summary-checks.sh +t/depcomp-lt-auto.log: t/ax/depcomp.sh +t/depcomp-lt-cpp.log: t/ax/depcomp.sh +t/depcomp-lt-dashmstdout.log: t/ax/depcomp.sh +t/depcomp-lt-disabled.log: t/ax/depcomp.sh +t/depcomp-lt-gcc.log: t/ax/depcomp.sh +t/depcomp-lt-makedepend.log: t/ax/depcomp.sh +t/depcomp-lt-msvcmsys.log: t/ax/depcomp.sh +t/depcomp-lt-msvisualcpp.log: t/ax/depcomp.sh +t/depcomp-auto.log: t/ax/depcomp.sh +t/depcomp-cpp.log: t/ax/depcomp.sh +t/depcomp-dashmstdout.log: t/ax/depcomp.sh +t/depcomp-disabled.log: t/ax/depcomp.sh +t/depcomp-gcc.log: t/ax/depcomp.sh +t/depcomp-makedepend.log: t/ax/depcomp.sh +t/depcomp-msvcmsys.log: t/ax/depcomp.sh +t/depcomp-msvisualcpp.log: t/ax/depcomp.sh +t/testsuite-summary-count-many.log: t/ax/extract-testsuite-summary.pl +t/gettext-basics.log: t/gettext-macros.log +t/gettext-config-rpath.log: t/gettext-macros.log +t/gettext-external-pr338.log: t/gettext-macros.log +t/gettext-intl-subdir.log: t/gettext-macros.log +t/gettext-pr381.log: t/gettext-macros.log +t/subdir-cond-gettext.log: t/gettext-macros.log +t/ar-lib4.log: t/libtool-macros.log +t/ar-lib6a.log: t/libtool-macros.log +t/ar-lib6b.log: t/libtool-macros.log +t/canon6.log: t/libtool-macros.log +t/canon7.log: t/libtool-macros.log +t/ccnoco-lt.log: t/libtool-macros.log +t/cxx-lt-demo.log: t/libtool-macros.log +t/depcomp8b.log: t/libtool-macros.log +t/extra-deps-lt.log: t/libtool-macros.log +t/fort5.log: t/libtool-macros.log +t/instdir-ltlib.log: t/libtool-macros.log +t/instfail-libtool.log: t/libtool-macros.log +t/ldadd.log: t/libtool-macros.log +t/ldflags.log: t/libtool-macros.log +t/libobj13.log: t/libtool-macros.log +t/libtool.log: t/libtool-macros.log +t/libtool2.log: t/libtool-macros.log +t/libtool3.log: t/libtool-macros.log +t/libtool5.log: t/libtool-macros.log +t/libtool6.log: t/libtool-macros.log +t/libtool7.log: t/libtool-macros.log +t/libtool8.log: t/libtool-macros.log +t/libtool9.log: t/libtool-macros.log +t/libtoo10.log: t/libtool-macros.log +t/libtoo11.log: t/libtool-macros.log +t/listval.log: t/libtool-macros.log +t/ltcond.log: t/libtool-macros.log +t/ltcond2.log: t/libtool-macros.log +t/ltconv.log: t/libtool-macros.log +t/ltdeps.log: t/libtool-macros.log +t/ltinit.log: t/libtool-macros.log +t/ltinstloc.log: t/libtool-macros.log +t/ltlibobjs.log: t/libtool-macros.log +t/ltlibsrc.log: t/libtool-macros.log +t/ltorder.log: t/libtool-macros.log +t/nobase-libtool.log: t/libtool-macros.log +t/objc-megademo.log: t/libtool-macros.log +t/posixsubst-ltlibraries.log: t/libtool-macros.log +t/pr72.log: t/libtool-macros.log +t/pr211.log: t/libtool-macros.log +t/pr300-ltlib.log: t/libtool-macros.log +t/pr307.log: t/libtool-macros.log +t/pr401b.log: t/libtool-macros.log +t/reqd2.log: t/libtool-macros.log +t/silent-lt.log: t/libtool-macros.log +t/stdlib2.log: t/libtool-macros.log +t/strip3.log: t/libtool-macros.log +t/subobj9.log: t/libtool-macros.log +t/subobj-clean-lt-pr10697.log: t/libtool-macros.log +t/suffix2.log: t/libtool-macros.log +t/suffix5.log: t/libtool-macros.log +t/suffix8.log: t/libtool-macros.log +t/suffix10.log: t/libtool-macros.log +t/vala-libs.log: t/libtool-macros.log +t/vartypo2.log: t/libtool-macros.log +t/depcomp-lt-auto.log: t/libtool-macros.log +t/depcomp-lt-cpp.log: t/libtool-macros.log +t/depcomp-lt-dashmstdout.log: t/libtool-macros.log +t/depcomp-lt-disabled.log: t/libtool-macros.log +t/depcomp-lt-gcc.log: t/libtool-macros.log +t/depcomp-lt-makedepend.log: t/libtool-macros.log +t/depcomp-lt-msvcmsys.log: t/libtool-macros.log +t/depcomp-lt-msvisualcpp.log: t/libtool-macros.log +t/tap-ambiguous-directive.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-autonumber.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-bailout.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-bailout-leading-space.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-bailout-and-logging.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-bailout-suppress-badexit.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-bailout-suppress-later-diagnostic.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-bailout-suppress-later-errors.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-color.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-deps.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-diagnostic.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-empty-diagnostic.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-empty.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-escape-directive.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-escape-directive-2.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-exit.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-fancy.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-fancy2.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-global-log.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-global-result.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-log.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-msg0-result.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-msg0-directive.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-msg0-planskip.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-msg0-bailout.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-msg0-misc.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-merge-stdout-stderr.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-no-merge-stdout-stderr.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-no-disable-hard-error.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-no-spurious-summary.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-no-spurious-numbers.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-no-spurious.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-not-ok-skip.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-number-wordboundary.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-numeric-description.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-negative-numbers.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-numbers-leading-zero.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-out-of-order.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-passthrough.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-passthrough-exit.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-plan.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-plan-corner.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-plan-errors.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-plan-middle.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-plan-whitespace.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-plan-leading-zero.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-plan-malformed.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-missing-plan-and-bad-exit.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-planskip.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-planskip-late.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-planskip-and-logging.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-planskip-unplanned.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-planskip-unplanned-corner.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-planskip-case-insensitive.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-planskip-whitespace.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-planskip-badexit.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-planskip-bailout.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-planskip-later-errors.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-test-number-0.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-recheck-logs.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-result-comment.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-todo-skip-together.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-todo-skip-whitespace.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-todo-skip.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-unplanned.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-whitespace-normalization.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-with-and-without-number.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/tap-xfail-tests.log: t/ax/tap-setup.sh t/tap-common-setup.log +t/vala-headers.log: t/pkg-config-macros.log +t/vala-libs.log: t/pkg-config-macros.log +t/vala-mix.log: t/pkg-config-macros.log +t/vala-mix2.log: t/pkg-config-macros.log +t/vala-non-recursive-setup.log: t/pkg-config-macros.log +t/vala-parallel.log: t/pkg-config-macros.log +t/vala-per-target-flags.log: t/pkg-config-macros.log +t/vala-recursive-setup.log: t/pkg-config-macros.log +t/vala-vapi.log: t/pkg-config-macros.log +t/vala-vpath.log: t/pkg-config-macros.log +t/testsuite-summary-count-many.log: t/ax/trivial-test-driver +t/test-driver-acsubst.log: t/ax/trivial-test-driver +t/test-driver-cond.log: t/ax/trivial-test-driver +t/test-driver-custom-multitest.log: t/ax/trivial-test-driver +t/test-driver-custom-multitest-recheck.log: t/ax/trivial-test-driver +t/test-driver-custom-multitest-recheck2.log: t/ax/trivial-test-driver + +$(srcdir)/t/testsuite-part.am: + $(AM_V_at)rm -f t/testsuite-part.tmp $@ + $(AM_V_GEN)$(PERL) $(srcdir)/gen-testsuite-part \ + --srcdir $(srcdir) > t/testsuite-part.tmp + $(AM_V_at)chmod a-w t/testsuite-part.tmp + $(AM_V_at)mv -f t/testsuite-part.tmp $@ + +# 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)/t/testsuite-part.am: $(srcdir)/gen-testsuite-part +$(srcdir)/t/testsuite-part.am: Makefile.am + +# Few more static dependencies. +t/distcheck-missing-m4.log: t/ax/distcheck-hook-m4.am +t/distcheck-outdated-m4.log: t/ax/distcheck-hook-m4.am + +t/ax/test-defs.sh: t/ax/test-defs.in Makefile + $(AM_V_at)rm -f $@ $@-t + $(AM_V_at)$(MKDIR_P) t/ax + $(AM_V_GEN)in=t/ax/test-defs.in \ + && $(do_subst) <$(srcdir)/$$in >$@-t + $(generated_file_finalize) + +t/ax/shell-no-trail-bslash: t/ax/shell-no-trail-bslash.in Makefile + $(AM_V_at)rm -f $@ $@-t + $(AM_V_GEN)in=t/ax/shell-no-trail-bslash.in \ + && $(MKDIR_P) t/ax \ + && $(do_subst) <$(srcdir)/$$in >$@-t \ + && chmod a+x $@-t + $(generated_file_finalize) + +t/ax/cc-no-c-o: t/ax/cc-no-c-o.in Makefile + $(AM_V_at)rm -f $@ $@-t + $(AM_V_GEN)in=t/ax/cc-no-c-o.in \ + && $(MKDIR_P) t/ax \ + && $(do_subst) <$(srcdir)/$$in >$@-t \ + && chmod a+x $@-t + $(generated_file_finalize) + +runtest: t/ax/runtest.in Makefile + $(AM_V_at)rm -f $@ $@-t + $(AM_V_GEN)in=t/ax/runtest.in \ + && $(MKDIR_P) t/ax \ + && $(do_subst) <$(srcdir)/$$in >$@-t \ + && chmod a+x $@-t + $(generated_file_finalize) + +# 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; }; \ + 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; \ + 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'"; \ + 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)/t/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 + +.PHONY: maintainer-check-list-of-tests +maintainer-check-list-of-tests: + @if diff -u /dev/null /dev/null >/dev/null 2>&1; then \ + diff='diff -u'; \ + else \ + diff='diff'; \ + fi; \ + lst='$(expected_list_of_tests)'; \ + test -n "$$lst" || lst='$(TESTS)'; \ + for t in $$lst; do \ + echo "$$t"; \ + done | sort >$(am__tmk); \ + dirs='$(test_subdirs)'; \ + test -n "$$dirs" || dirs=.; \ + 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); \ + 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) + +# 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)' + +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 + +# Most work delegated to sub-dir makefile fragments. + +# vim: ft=automake noet + +# 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/automake-1.15.1/NEWS b/automake-1.15.1/NEWS new file mode 100644 index 0000000..1a0ccc9 --- /dev/null +++ b/automake-1.15.1/NEWS @@ -0,0 +1,2952 @@ +* 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: + + + + 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: + + + - 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 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 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: + + + + - 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: + + + + 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: . + + - 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 _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 '_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 + + http://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 . diff --git a/automake-1.15.1/PLANS/README b/automake-1.15.1/PLANS/README new file mode 100644 index 0000000..87cb8dc --- /dev/null +++ b/automake-1.15.1/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/automake-1.15.1/PLANS/obsolete-removed/am-prog-mkdir-p.txt b/automake-1.15.1/PLANS/obsolete-removed/am-prog-mkdir-p.txt new file mode 100644 index 0000000..20d5cf5 --- /dev/null +++ b/automake-1.15.1/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: + + + +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: + + + + + +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: + + + +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/automake-1.15.1/PLANS/obsolete-removed/configure.in.txt b/automake-1.15.1/PLANS/obsolete-removed/configure.in.txt new file mode 100644 index 0000000..d3f6da7 --- /dev/null +++ b/automake-1.15.1/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/automake-1.15.1/PLANS/rm-f-without-args.txt b/automake-1.15.1/PLANS/rm-f-without-args.txt new file mode 100644 index 0000000..b940fc3 --- /dev/null +++ b/automake-1.15.1/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/automake-1.15.1/PLANS/subdir-objects.txt b/automake-1.15.1/PLANS/subdir-objects.txt new file mode 100644 index 0000000..3cf6101 --- /dev/null +++ b/automake-1.15.1/PLANS/subdir-objects.txt @@ -0,0 +1,71 @@ +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: . + +Sadly, **THIS IS IMPOSSIBLE** until automake bug#13928 is resolved: +http://debbugs.gnu.org/cgi/bugreport.cgi?bug=13928 + +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: + + + + +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 some automake 1.x (*before* 2.0 can be released) +---------------------------------------------------- + +Find a proper way to fix the blocking automake bug#13928: +http://debbugs.gnu.org/cgi/bugreport.cgi?bug=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/automake-1.15.1/PLANS/texi/drop-split-info-files.txt b/automake-1.15.1/PLANS/texi/drop-split-info-files.txt new file mode 100644 index 0000000..a0a5636 --- /dev/null +++ b/automake-1.15.1/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: . + +Basically, it has been confirmed that the original reason behind +the existence of split info files was indeed "efficiency, +especially memory size": + + +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: . + +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/automake-1.15.1/PLANS/texi/warnings-for-automake-ng-compatibility.txt b/automake-1.15.1/PLANS/texi/warnings-for-automake-ng-compatibility.txt new file mode 100644 index 0000000..aca46b4 --- /dev/null +++ b/automake-1.15.1/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/automake-1.15.1/README b/automake-1.15.1/README new file mode 100644 index 0000000..fdf25fa --- /dev/null +++ b/automake-1.15.1/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: + + http://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 + +New releases are announced to autotools-announce@gnu.org. If you want to +be informed, subscribe to that list by following the instructions at +. + +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 . diff --git a/automake-1.15.1/THANKS b/automake-1.15.1/THANKS new file mode 100644 index 0000000..9b9faa1 --- /dev/null +++ b/automake-1.15.1/THANKS @@ -0,0 +1,440 @@ +Automake was originally written by David J. MacKenzie . +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 +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 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 +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 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 +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 +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/automake-1.15.1/aclocal.m4 b/automake-1.15.1/aclocal.m4 new file mode 100644 index 0000000..ceb86df --- /dev/null +++ b/automake-1.15.1/aclocal.m4 @@ -0,0 +1,37 @@ +# generated automatically by aclocal 1.15.1 -*- 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 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. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +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'.])]) + +m4_include([m4/amversion.m4]) +m4_include([m4/auxdir.m4]) +m4_include([m4/cond.m4]) +m4_include([m4/init.m4]) +m4_include([m4/install-sh.m4]) +m4_include([m4/lead-dot.m4]) +m4_include([m4/missing.m4]) +m4_include([m4/options.m4]) +m4_include([m4/prog-cc-c-o.m4]) +m4_include([m4/runlog.m4]) +m4_include([m4/sanity.m4]) +m4_include([m4/silent.m4]) +m4_include([m4/strip.m4]) +m4_include([m4/substnot.m4]) +m4_include([m4/tar.m4]) diff --git a/automake-1.15.1/bin/Makefile.inc b/automake-1.15.1/bin/Makefile.inc new file mode 100644 index 0000000..102dec9 --- /dev/null +++ b/automake-1.15.1/bin/Makefile.inc @@ -0,0 +1,71 @@ +## 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 . + +## ----------------------------------- ## +## The automake and aclocal scripts. ## +## ----------------------------------- ## + +bin_SCRIPTS = %D%/automake %D%/aclocal +CLEANFILES += $(bin_SCRIPTS) + +# 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 %D%/gen-perl-protos + $(AM_V_GEN)rm -f $@ $@-t $@-t2 \ + && $(MKDIR_P) $(@D) \ +## Common substitutions. + && in=$@.in && $(do_subst) <$(srcdir)/$$in >$@-t \ +## Auto-compute prototypes of perl subroutines. + && $(PERL) -w $(srcdir)/%D%/gen-perl-protos $@-t > $@-t2 \ + && mv -f $@-t2 $@-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 $@ +EXTRA_DIST += %D%/gen-perl-protos + +# vim: ft=automake noet diff --git a/automake-1.15.1/bin/aclocal.in b/automake-1.15.1/bin/aclocal.in new file mode 100644 index 0000000..a4535bc --- /dev/null +++ b/automake-1.15.1/bin/aclocal.in @@ -0,0 +1,1214 @@ +#!@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 . + +# Written by Tom Tromey , and +# Alexandre Duret-Lutz . + +BEGIN +{ + @Aclocal::perl_libdirs = ('@datadir@/@PACKAGE@-@APIVERSION@') + unless @Aclocal::perl_libdirs; + unshift @INC, @Aclocal::perl_libdirs; +} + +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. + +#! Prototypes here will automatically be generated by the build system. + +################################################################ + +# 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 http://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: + # http://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: . +EOF + exit $status; +} + +# Print version and exit. +sub version () +{ + print < +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 + and Alexandre Duret-Lutz . +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 (open (DIRLIST, "$system_includes[0]/dirlist")) + { + while () + { + # 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; + } +} + +################################################################ + +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/automake-1.15.1/bin/automake.in b/automake-1.15.1/bin/automake.in new file mode 100644 index 0000000..d356336 --- /dev/null +++ b/automake-1.15.1/bin/automake.in @@ -0,0 +1,8247 @@ +#!@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 . + +# Originally written by David Mackenzie . +# Perl reimplementation by Tom Tromey , and +# Alexandre Duret-Lutz . + +package Automake; + +use strict; + +BEGIN +{ + @Automake::perl_libdirs = ('@datadir@/@PACKAGE@-@APIVERSION@') + unless @Automake::perl_libdirs; + unshift @INC, @Automake::perl_libdirs; + + # 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 Carp; + +## ----------------------- ## +## Subroutine prototypes. ## +## ----------------------- ## + +#! Prototypes here will automatically be generated by the build system. + + +## ----------- ## +## 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; + +# 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; + + %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) + { + # Set location of depcomp. + define_variable ('depcomp', + "\$(SHELL) $am_config_aux_dir/depcomp", + INTERNAL); + define_variable ('am__depfiles_maybe', 'depfiles', INTERNAL); + + require_conf_file ("$am_file.am", FOREIGN, 'depcomp'); + + my @deplist = sort keys %dep_files; + # Generate each 'include' individually. Irix 6 make will + # not properly include several files resulting from a + # variable expansion; generating many separate includes + # seems safest. + $output_rules .= "\n"; + foreach my $iter (@deplist) + { + $output_rules .= (subst ('AMDEP_TRUE') + . subst ('am__include') + . ' ' + . subst ('am__quote') + . $iter + . subst ('am__quote') + . "\n"); + } + + # Compute the set of directories to remove in distclean-depend. + my @depdirs = uniq (map { dirname ($_) } @deplist); + $output_rules .= file_contents ('depend', + new Automake::Location, + DEPDIRS => "@depdirs"); + } + } + else + { + define_variable ('depcomp', '', INTERNAL); + define_variable ('am__depfiles_maybe', '', 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 output). + my $derived_source = 0; + + # 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; + } + $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 provide _SHORTNAME to + # override. + + my $dname = $derived; + 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) +# ------------------------------- +# Definitions common to LIBOBJS and ALLOCA. +# VAR should be one of LIBOBJS, LTLIBOBJS, ALLOCA, or LTALLOCA. +sub handle_LIBOBJS_or_ALLOCA +{ + my ($var) = @_; + + 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); + $clean_files{"\$($var)"} = MOSTLY_CLEAN; + # If LTLIBOBJS is used, we must also clear LIBOBJS (which might + # be created by libtool as a side-effect of creating LTLIBOBJS). + $clean_files{"\$($var)"} = MOSTLY_CLEAN if $var =~ s/^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; + + my $dir = handle_LIBOBJS_or_ALLOCA "${lt}LIBOBJS"; + + foreach my $iter (keys %libsources) + { + if ($iter =~ /\.[cly]$/) + { + saw_extension ($&); + saw_extension ('.c'); + } + + 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"; + + $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)); +} + + +sub handle_programs () +{ + my @proglist = am_install_var ('progs', 'PROGRAMS', + 'bin', 'sbin', 'libexec', 'pkglibexec', + 'noinst', 'check'); + 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 () +{ + my @liblist = am_install_var ('libs', 'LIBRARIES', + 'lib', 'pkglib', 'noinst', 'check'); + 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 () +{ + my @liblist = am_install_var ('ltlib', 'LTLIBRARIES', + 'noinst', 'lib', 'pkglib', 'check'); + return if ! @liblist; + $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 (@liblist) + { + 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", < $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: +http://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 /(?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 = $_; + /^(.*?)(?:(?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_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: . +'; + + # --help always returns 0 per GNU standards. + exit 0; +} + + +sub version () +{ + print < +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 + and Alexandre Duret-Lutz . +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/automake-1.15.1/bin/gen-perl-protos b/automake-1.15.1/bin/gen-perl-protos new file mode 100755 index 0000000..215d275 --- /dev/null +++ b/automake-1.15.1/bin/gen-perl-protos @@ -0,0 +1,36 @@ +#!/usr/bin/env perl +# +# 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 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 . + +use warnings; +use strict; + +my @lines = <>; +my @protos = map { /^(sub \w+\s*\(.*\))/ ? ("$1;") : () } @lines; + +while (defined ($_ = shift @lines)) + { + if (/^#!.* prototypes/i) + { + print "# BEGIN AUTOMATICALLY GENERATED PROTOTYPES\n"; + print join ("\n", sort @protos) . "\n"; + print "# END AUTOMATICALLY GENERATED PROTOTYPES\n"; + } + else + { + print; + } + } diff --git a/automake-1.15.1/bootstrap b/automake-1.15.1/bootstrap new file mode 100755 index 0000000..d0766d4 --- /dev/null +++ b/automake-1.15.1/bootstrap @@ -0,0 +1,127 @@ +#! /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 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 . + +# 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` +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 + +# Read the rule for calculating APIVERSION and execute it. +apiver_cmd=`sed -ne 's/\[\[/[/g;s/\]\]/]/g;/^APIVERSION=/p' configure.ac` +eval "$apiver_cmd" + +# 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. +for p in bin/aclocal bin/automake; do + dosubst $p.in $p.tmp + $PERL -w bin/gen-perl-protos $p.tmp > $p.tmp2 + mv -f $p.tmp2 $p.tmp +done + +# 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/automake-1.15.1/configure b/automake-1.15.1/configure new file mode 100755 index 0000000..3466981 --- /dev/null +++ b/automake-1.15.1/configure @@ -0,0 +1,7781 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for GNU Automake 1.15.1. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +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 +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="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 +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: bug-automake@gnu.org about your system, including any +$0: error possibly output before this message. Then install +$0: a modern shell, or manually run the script under such a +$0: shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='GNU Automake' +PACKAGE_TARNAME='automake' +PACKAGE_VERSION='1.15.1' +PACKAGE_STRING='GNU Automake 1.15.1' +PACKAGE_BUGREPORT='bug-automake@gnu.org' +PACKAGE_URL='http://www.gnu.org/software/automake/' + +ac_unique_file="bin/automake.in" +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +ac_ct_GNU_GCJ +GNU_GCJFLAGS +GNU_GCJ +ac_ct_GNU_F77 +GNU_FFLAGS +GNU_F77 +ac_ct_GNU_FC +GNU_FCFLAGS +GNU_FC +ac_ct_GNU_CXX +GNU_CXXFLAGS +GNU_CXX +ac_ct_GNU_CC +GNU_CFLAGS +GNU_CC +ac_ct_F77 +FFLAGS +F77 +ac_ct_FC +FCFLAGS +FC +ac_ct_CXX +CXXFLAGS +CXX +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +AM_TEST_RUNNER_SHELL +am_candidate_sh +FGREP +EGREP +GREP +MODIFICATION_DELAY +LN +required_autoconf_version +LEX +YACC +TEX +PERL +LN_S +system_acdir +automake_acdir +amdir +scriptdir +pkgvdatadir +APIVERSION +RELEASE_YEAR +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +am_AUTOUPDATE +am_AUTOHEADER +am_AUTORECONF +am_AUTOM4TE +am_AUTOCONF +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +' + ac_precious_vars='build_alias +host_alias +target_alias +AM_TEST_RUNNER_SHELL +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CXX +CXXFLAGS +CCC +FC +FCFLAGS +F77 +FFLAGS +GNU_CC +GNU_CFLAGS +GNU_CXX +GNU_CXXFLAGS +GNU_FC +GNU_FCFLAGS +GNU_F77 +GNU_FFLAGS +GNU_GCJ +GNU_GCJFLAGS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures GNU Automake 1.15.1 to adapt to many kinds of systems. + +Usage: $0 [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 + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' 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/automake] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +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] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of GNU Automake 1.15.1:";; + esac + cat <<\_ACEOF + +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") + +Some influential environment variables: + AM_TEST_RUNNER_SHELL + a sturdy POSIX shell for our testsuite + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CXX C++ compiler command + CXXFLAGS C++ compiler flags + FC Fortran compiler command + FCFLAGS Fortran compiler flags + F77 Fortran 77 compiler command + FFLAGS Fortran 77 compiler flags + GNU_CC GNU C compiler + GNU_CFLAGS GNU C compiler flags + GNU_CXX GNU C++ compiler + GNU_CXXFLAGS + GNU C++ compiler flags + GNU_FC GNU Fortran compiler + GNU_FCFLAGS GNU Fortran compiler flags + GNU_F77 GNU Fortran 77 compiler + GNU_FFLAGS GNU Fortran 77 compiler flags + GNU_GCJ GNU Java compiler + GNU_GCJFLAGS + GNU Java compiler flags + +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 . +GNU Automake home page: . +General help using GNU software: . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +GNU Automake configure 1.15.1 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_fc_try_compile LINENO +# --------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_fc_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_fc_try_compile + +# ac_fn_f77_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_f77_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_f77_try_compile +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by GNU Automake $as_me 1.15.1, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +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 || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + +ac_aux_dir= +for ac_dir in lib "$srcdir"/lib; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in lib \"$srcdir\"/lib" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=0;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + 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 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + + +# 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. +am_AUTOCONF="${AUTOCONF-autoconf}" + +am_AUTOM4TE="${AUTOM4TE-autom4te}" + +am_AUTORECONF="${AUTORECONF-autoreconf}" + +am_AUTOHEADER="${AUTOHEADER-autoheader}" + +am_AUTOUPDATE="${AUTOUPDATE-autoupdate}" + + +am__api_version='1.15' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# 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]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +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". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + 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 + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# 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 + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` + +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= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +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 + +# 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. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +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 + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + 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 + + +# Define the identity of the package. + PACKAGE='automake' + VERSION='1.15.1' + + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# 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: + +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: . + +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 + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + + +# 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 + + +# The API version is the base version. We must guarantee +# compatibility for all releases with the same API version. +# Our current rule is that: +# * All releases, including the prereleases, in an X.Y series +# are compatible. So 1.5.1c is compatible with 1.5. +# * Prereleases on the trunk are all incompatible -- 1.5b and 1.5c +# aren't the same. +APIVERSION=`echo "$VERSION" | sed -e 's/^\([0-9]*\.[0-9]*[a-z]*\).*$/\1/'` + + +pkgvdatadir="\${datadir}/$PACKAGE-$APIVERSION" + +scriptdir="\${pkgvdatadir}" + +amdir="\${pkgvdatadir}/am" + +automake_acdir="\${datadir}/aclocal-$APIVERSION" + +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`/t/wrap/aclocal-$APIVERSION\"" +AUTOMAKE="\"`pwd`/t/wrap/automake-$APIVERSION\"" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + + +# Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PERL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_PERL="$PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PERL=$ac_cv_path_PERL +if test -n "$PERL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 +$as_echo "$PERL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test -z "$PERL"; then + as_fn_error $? "perl not found" "$LINENO" 5 +fi +# Save details about the selected perl interpreter in config.log. +{ echo "$as_me:$LINENO: $PERL --version" >&5 + ($PERL --version) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +$PERL -e 'require 5.006;' || { + as_fn_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" "$LINENO" 5 +} + +# The test suite will skip some tests if tex is absent. +# Extract the first word of "tex", so it can be a program name with args. +set dummy tex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_TEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$TEX"; then + ac_cv_prog_TEX="$TEX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_TEX="tex" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +TEX=$ac_cv_prog_TEX +if test -n "$TEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEX" >&5 +$as_echo "$TEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# 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. +{ echo "$as_me:$LINENO: $TEX --version &5 + ($TEX --version &5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +# 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. +for ac_prog in yacc byacc 'bison -y' +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_YACC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$YACC"; then + ac_cv_prog_YACC="$YACC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_YACC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +YACC=$ac_cv_prog_YACC +if test -n "$YACC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 +$as_echo "$YACC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$YACC" && break +done +test -n "$YACC" || YACC="false" + +for ac_prog in lex flex +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LEX"; then + ac_cv_prog_LEX="$LEX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LEX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LEX=$ac_cv_prog_LEX +if test -n "$LEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 +$as_echo "$LEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$LEX" && break +done +test -n "$LEX" || LEX="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. + +required_autoconf_version=2.65 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether autoconf is installed" >&5 +$as_echo_n "checking whether autoconf is installed... " >&6; } +if ${am_cv_autoconf_installed+:} false; then : + $as_echo_n "(cached) " >&6 +else + if { echo "$as_me:$LINENO: $am_AUTOCONF --version" >&5 + ($am_AUTOCONF --version) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; +then + am_cv_autoconf_installed=yes +else + am_cv_autoconf_installed=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_autoconf_installed" >&5 +$as_echo "$am_cv_autoconf_installed" >&6; } +if test "$am_cv_autoconf_installed" = no; then + as_fn_error $? "Autoconf $required_autoconf_version or better is required. + Please make sure it is installed and in your PATH." "$LINENO" 5 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether autoconf works" >&5 +$as_echo_n "checking whether autoconf works... " >&6; } +if ${am_cv_autoconf_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + mkdir conftest +echo 'AC''_INIT' > conftest/conftest.ac +if { echo "$as_me:$LINENO: cd conftest && $am_AUTOCONF -o /dev/null conftest.ac" >&5 + (cd conftest && $am_AUTOCONF -o /dev/null conftest.ac) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; +then + am_cv_autoconf_works=yes +else + am_cv_autoconf_works=no +fi +rm -rf conftest +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_autoconf_works" >&5 +$as_echo "$am_cv_autoconf_works" >&6; } +if test "$am_cv_autoconf_works" = no; then + as_fn_error $? "The installed version of autoconf does not work. + Please check config.log for error messages before this one." "$LINENO" 5 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether autoconf is recent enough" >&5 +$as_echo_n "checking whether autoconf is recent enough... " >&6; } +if ${am_cv_autoconf_version+:} false; then : + $as_echo_n "(cached) " >&6 +else + mkdir conftest +echo 'AC'"_PREREQ([$required_autoconf_version])" > conftest/conftest.ac +if { echo "$as_me:$LINENO: cd conftest && $am_AUTOCONF -o /dev/null conftest.ac" >&5 + (cd conftest && $am_AUTOCONF -o /dev/null conftest.ac) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; +then + am_cv_autoconf_version=yes +else + am_cv_autoconf_version=no +fi +rm -rf conftest +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_autoconf_version" >&5 +$as_echo "$am_cv_autoconf_version" >&6; } +if test "$am_cv_autoconf_version" = no; then + as_fn_error $? "Autoconf $required_autoconf_version or better is required." "$LINENO" 5 +fi + +# Test for ln. We need use it to install the versioned binaries. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln works" >&5 +$as_echo_n "checking whether ln works... " >&6; } +if ${am_cv_prog_ln+:} false; then : + $as_echo_n "(cached) " >&6 +else + +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 +fi + +LN=$am_cv_prog_ln + +result=no +test "x$am_cv_prog_ln" = xln && result=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 +$as_echo "$result" >&6; } + +# 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 + + +## ------------------------------------------- ## +## Test for things needed by the test suite. ## +## ------------------------------------------- ## + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + + + + + + +# 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. +# + + +# These messages only goes to the config.log file. +{ $as_echo "$as_me:${as_lineno-$LINENO}: will now look for a sturdy POSIX shell, for our testsuite" >&5 +$as_echo "$as_me: will now look for a sturdy POSIX shell, for our testsuite" >&6;} + +am_bourne_compatible="# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +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 +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + +" +if ${ac_cv_AM_TEST_RUNNER_SHELL+:} false; then : + $as_echo_n "(cached) " >&6 +else + 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 + # Extract the first word of "$am_sh", so it can be a program name with args. +set dummy $am_sh; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_am_candidate_sh+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $am_candidate_sh in + [\\/]* | ?:[\\/]*) + ac_cv_path_am_candidate_sh="$am_candidate_sh" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $am_PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_am_candidate_sh="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +am_candidate_sh=$ac_cv_path_am_candidate_sh +if test -n "$am_candidate_sh"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_candidate_sh" >&5 +$as_echo "$am_candidate_sh" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test -n "$am_candidate_sh"; then + am_candidate_shells="$am_candidate_shells $am_candidate_sh" + fi + + # Must nullify these in order not to interfere with the checks in + # the next loop. + { am_candidate_sh=; unset am_candidate_sh;} + { ac_cv_path_am_candidate_sh=; unset ac_cv_path_am_candidate_sh;} + done + { am_PATH=; unset am_PATH;} # Not required anymore + for am_sh in $am_candidate_shells; do + am_score=0 + am_score=10 + while :; do + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_sh supports \$(cmd)" >&5 +$as_echo_n "checking whether $am_sh supports \$(cmd)... " >&6; } + if { $am_sh -c "$am_bourne_compatible +test \"\$(echo x)\" = x +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" >&5 2>&1; test $? -eq 77; } + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + am_score=1; break + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_sh supports \$((expr))" >&5 +$as_echo_n "checking whether $am_sh supports \$((expr))... " >&6; } + if { $am_sh -c "$am_bourne_compatible +test \$((1 + 2 * 3)) = 7 +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" >&5 2>&1; test $? -eq 77; } + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + am_score=1; break + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_sh supports \${#var}" >&5 +$as_echo_n "checking whether $am_sh supports \${#var}... " >&6; } + if { $am_sh -c "$am_bourne_compatible +zero='' one='x' twelve=' foobar baz!' \\ + && test \${#zero} -eq 0 \\ + && test \${#one} -eq 1 \\ + && test \${#twelve} -eq 12 +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" >&5 2>&1; test $? -eq 77; } + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + am_score=1; break + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_sh supports \${var#glob} and \${var%glob}" >&5 +$as_echo_n "checking whether $am_sh supports \${var#glob} and \${var%glob}... " >&6; } + if { $am_sh -c "$am_bourne_compatible +v=a/b/c \\ + && test \${v#*/} = b/c \\ + && test \${v##*/} = c \\ + && test \${v%/*} = a/b \\ + && test \${v%%/*} = a +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" >&5 2>&1; test $? -eq 77; } + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + am_score=1; break + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_sh preserves exit traps with \"set -e\"" >&5 +$as_echo_n "checking whether $am_sh preserves exit traps with \"set -e\"... " >&6; } + if { $am_sh -c "$am_bourne_compatible +set -e; trap 'exit \$?' 0; (exit 77); exit 77 +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" >&5 2>&1; test $? -eq 77; } + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + am_score=1; break + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_sh can define exit traps in a shell function" >&5 +$as_echo_n "checking whether $am_sh can define exit traps in a shell function... " >&6; } + if { $am_sh -c "$am_bourne_compatible +fail=0 && foo() { trap 'fail=1' 0; } && foo && test \$fail = 0 +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" >&5 2>&1; test $? -eq 77; } + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + am_score=1; break + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_sh corrupts stderr with \"set -x\"" >&5 +$as_echo_n "checking whether $am_sh corrupts stderr with \"set -x\"... " >&6; } + if { $am_sh -c "$am_bourne_compatible +(set -x; P=1 true 2>&3) 3>&1 2>/dev/null | grep P=1 +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" >&5 2>&1; test $? -eq 77; } + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + am_score=9 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + fi + + echo 'return 34' > conftest-return.sh + echo 'ok=no' >> conftest-return.sh + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_sh can return early from \"dot-sourced\" files" >&5 +$as_echo_n "checking whether $am_sh can return early from \"dot-sourced\" files... " >&6; } + if { $am_sh -c "$am_bourne_compatible +ok=yes; . ./conftest-return.sh; test \$? -eq 34 && test \$ok = yes +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" >&5 2>&1; test $? -eq 77; } + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + rm -f conftest-return.sh + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + rm -f conftest-return.sh; am_score=1; break + fi + + echo 'alias false=echo' > conftest-alias.sh + echo 'false && test "$(false 97)" = 97' >> conftest-alias.sh + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_sh supports alias named like shell builtins" >&5 +$as_echo_n "checking whether $am_sh supports alias named like shell builtins... " >&6; } + if { $am_sh -c "$am_bourne_compatible +. ./conftest-alias.sh +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" >&5 2>&1; test $? -eq 77; } + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + rm -f conftest-alias.sh + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + rm -f conftest-alias.sh; am_score=1; break + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_sh supports \"test -e\"" >&5 +$as_echo_n "checking whether $am_sh supports \"test -e\"... " >&6; } + if { $am_sh -c "$am_bourne_compatible +test -e config.log && test -e . && test ! -e nonesuch +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" >&5 2>&1; test $? -eq 77; } + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + am_score=1; break + fi + + break + done + 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. + { $as_echo "$as_me:${as_lineno-$LINENO}: shell $am_sh is acceptable, but we might do better" >&5 +$as_echo "$as_me: shell $am_sh is acceptable, but we might do better" >&6;} + ac_cv_AM_TEST_RUNNER_SHELL=$am_sh + elif test $am_score -eq 10; then + { $as_echo "$as_me:${as_lineno-$LINENO}: shell $am_sh is good enough, stop looking" >&5 +$as_echo "$as_me: shell $am_sh is good enough, stop looking" >&6;} + ac_cv_AM_TEST_RUNNER_SHELL=$am_sh + break + fi + done + fi + AM_TEST_RUNNER_SHELL=$ac_cv_AM_TEST_RUNNER_SHELL +fi + + +if test $AM_TEST_RUNNER_SHELL = no; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no POSIX shell found that is good enough to be used in our testsuite +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: will use $AM_TEST_RUNNER_SHELL as the testsuite shell" >&5 +$as_echo "$as_me: will use $AM_TEST_RUNNER_SHELL as the testsuite shell" >&6;} +fi + + + + +########################################################################### + +# Look for C, C++ and fortran compilers to be used in the testsuite. + + + + + + + + +# 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: +# + +{ $as_echo "$as_me:${as_lineno-$LINENO}: will now look for generic compilers" >&5 +$as_echo "$as_me: will now look for generic compilers" >&6;} + +# C compiler. + + + + am__failed=no + while :; do + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in cc gcc + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cc gcc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + + +test -z "$CC" && { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no acceptable C compiler found in \$PATH" >&5 +$as_echo "$as_me: WARNING: no acceptable C compiler found in \$PATH" >&2;} + am__failed=yes + break +} + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler cannot create executables" >&5 +$as_echo "$as_me: WARNING: C compiler cannot create executables" >&2;} + am__failed=yes + break +} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot compute suffix of executables: cannot compile and link" >&5 +$as_echo "$as_me: WARNING: cannot compute suffix of executables: cannot compile and link" >&2;} + am__failed=yes + break +} +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot run C compiled programs. +If you meant to cross compile, use \`--host'." >&5 +$as_echo "$as_me: WARNING: cannot run C compiled programs. +If you meant to cross compile, use \`--host'." >&2;} + am__failed=yes + break +} + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot compute suffix of object files: cannot compile" >&5 +$as_echo "$as_me: WARNING: cannot compute suffix of object files: cannot compile" >&2;} + am__failed=yes + break +} +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # 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 { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && 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 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +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_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + break + done + if test $am__failed = yes; then : + CC=false; { $as_echo "$as_me:${as_lineno-$LINENO}: tests requiring the C compiler will be skipped" >&5 +$as_echo "$as_me: tests requiring the C compiler will be skipped" >&6;} +fi + # 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 ... + + + + + + +if test x"$GCC" = x"yes"; then : + am_CC_is_GNU=yes +else + am_CC_is_GNU=no +fi + +# 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": +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__failed=no + while :; do + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in aCC $am_CC FCC KCC $am_RCC xlC_r xlC c++ cxx cc++ gpp g++ + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in aCC $am_CC FCC KCC $am_RCC xlC_r xlC c++ cxx cc++ gpp g++ +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 +$as_echo_n "checking whether the C++ compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C++ compiler cannot create executables" >&5 +$as_echo "$as_me: WARNING: C++ compiler cannot create executables" >&2;} + am__failed=yes + break +} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 +$as_echo_n "checking for C++ compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot compute suffix of executables: cannot compile and link" >&5 +$as_echo "$as_me: WARNING: cannot compute suffix of executables: cannot compile and link" >&2;} + am__failed=yes + break +} +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot run C++ compiled programs. +If you meant to cross compile, use \`--host'." >&5 +$as_echo "$as_me: WARNING: cannot run C++ compiled programs. +If you meant to cross compile, use \`--host'." >&2;} + am__failed=yes + break +} + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot compute suffix of object files: cannot compile" >&5 +$as_echo "$as_me: WARNING: cannot compute suffix of object files: cannot compile" >&2;} + am__failed=yes + break +} +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + break + done + if test $am__failed = yes; then : + CXX=false; { $as_echo "$as_me:${as_lineno-$LINENO}: tests requiring the C++ compiler will be skipped" >&5 +$as_echo "$as_me: tests requiring the C++ compiler will be skipped" >&6;} +fi + # 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 ... + + + + + + +if test x"$GXX" = x"yes"; then : + am_CXX_is_GNU=yes +else + am_CXX_is_GNU=no +fi + +# 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__failed=no + while :; do + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g95 gfortran + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$FC"; then + ac_cv_prog_FC="$FC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_FC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +FC=$ac_cv_prog_FC +if test -n "$FC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 +$as_echo "$FC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$FC" && break + done +fi +if test -z "$FC"; then + ac_ct_FC=$FC + for ac_prog in xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g95 gfortran +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_FC"; then + ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_FC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_FC=$ac_cv_prog_ac_ct_FC +if test -n "$ac_ct_FC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 +$as_echo "$ac_ct_FC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_FC" && break +done + + if test "x$ac_ct_FC" = x; then + FC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + FC=$ac_ct_FC + fi +fi + + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done +rm -f a.out + +cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Fortran compiler works" >&5 +$as_echo_n "checking whether the Fortran compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Fortran compiler cannot create executables" >&5 +$as_echo "$as_me: WARNING: Fortran compiler cannot create executables" >&2;} + am__failed=yes + break +} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler default output file name" >&5 +$as_echo_n "checking for Fortran compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot compute suffix of executables: cannot compile and link" >&5 +$as_echo "$as_me: WARNING: cannot compute suffix of executables: cannot compile and link" >&2;} + am__failed=yes + break +} +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat > conftest.$ac_ext <<_ACEOF + program main + open(unit=9,file='conftest.out') + close(unit=9) + + end +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot run Fortran compiled programs. +If you meant to cross compile, use \`--host'." >&5 +$as_echo "$as_me: WARNING: cannot run Fortran compiled programs. +If you meant to cross compile, use \`--host'." >&2;} + am__failed=yes + break +} + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot compute suffix of object files: cannot compile" >&5 +$as_echo "$as_me: WARNING: cannot compute suffix of object files: cannot compile" >&2;} + am__failed=yes + break +} +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran compiler" >&5 +$as_echo_n "checking whether we are using the GNU Fortran compiler... " >&6; } +if ${ac_cv_fc_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_fc_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 +$as_echo "$ac_cv_fc_compiler_gnu" >&6; } +ac_ext=$ac_save_ext +ac_test_FCFLAGS=${FCFLAGS+set} +ac_save_FCFLAGS=$FCFLAGS +FCFLAGS= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 +$as_echo_n "checking whether $FC accepts -g... " >&6; } +if ${ac_cv_prog_fc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + FCFLAGS=-g +cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + ac_cv_prog_fc_g=yes +else + ac_cv_prog_fc_g=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 +$as_echo "$ac_cv_prog_fc_g" >&6; } +if test "$ac_test_FCFLAGS" = set; then + FCFLAGS=$ac_save_FCFLAGS +elif test $ac_cv_prog_fc_g = yes; then + if test "x$ac_cv_fc_compiler_gnu" = xyes; then + FCFLAGS="-g -O2" + else + FCFLAGS="-g" + fi +else + if test "x$ac_cv_fc_compiler_gnu" = xyes; then + FCFLAGS="-O2" + else + FCFLAGS= + fi +fi + +if test $ac_compiler_gnu = yes; then + GFC=yes +else + GFC= +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + break + done + if test $am__failed = yes; then : + FC=false; { $as_echo "$as_me:${as_lineno-$LINENO}: tests requiring the Fortran compiler will be skipped" >&5 +$as_echo "$as_me: tests requiring the Fortran compiler will be skipped" >&6;} +fi + # 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 ... + + + + + + +if test x"$GFC" = x"yes"; then : + am_FC_is_GNU=yes +else + am_FC_is_GNU=no +fi + + + + + am__failed=no + while :; do + ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in xlf f77 frt pgf77 cf77 fort77 fl32 af77 g77 gfortran + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_F77+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$F77"; then + ac_cv_prog_F77="$F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_F77="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +F77=$ac_cv_prog_F77 +if test -n "$F77"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $F77" >&5 +$as_echo "$F77" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$F77" && break + done +fi +if test -z "$F77"; then + ac_ct_F77=$F77 + for ac_prog in xlf f77 frt pgf77 cf77 fort77 fl32 af77 g77 gfortran +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_F77+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_F77"; then + ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_F77="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_F77=$ac_cv_prog_ac_ct_F77 +if test -n "$ac_ct_F77"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_F77" >&5 +$as_echo "$ac_ct_F77" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_F77" && break +done + + if test "x$ac_ct_F77" = x; then + F77="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + F77=$ac_ct_F77 + fi +fi + + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done +rm -f a.out + +cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Fortran 77 compiler works" >&5 +$as_echo_n "checking whether the Fortran 77 compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Fortran 77 compiler cannot create executables" >&5 +$as_echo "$as_me: WARNING: Fortran 77 compiler cannot create executables" >&2;} + am__failed=yes + break +} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 compiler default output file name" >&5 +$as_echo_n "checking for Fortran 77 compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot compute suffix of executables: cannot compile and link" >&5 +$as_echo "$as_me: WARNING: cannot compute suffix of executables: cannot compile and link" >&2;} + am__failed=yes + break +} +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat > conftest.$ac_ext <<_ACEOF + program main + open(unit=9,file='conftest.out') + close(unit=9) + + end +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot run Fortran 77 compiled programs. +If you meant to cross compile, use \`--host'." >&5 +$as_echo "$as_me: WARNING: cannot run Fortran 77 compiled programs. +If you meant to cross compile, use \`--host'." >&2;} + am__failed=yes + break +} + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot compute suffix of object files: cannot compile" >&5 +$as_echo "$as_me: WARNING: cannot compute suffix of object files: cannot compile" >&2;} + am__failed=yes + break +} +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran 77 compiler" >&5 +$as_echo_n "checking whether we are using the GNU Fortran 77 compiler... " >&6; } +if ${ac_cv_f77_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +if ac_fn_f77_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_f77_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_compiler_gnu" >&5 +$as_echo "$ac_cv_f77_compiler_gnu" >&6; } +ac_ext=$ac_save_ext +ac_test_FFLAGS=${FFLAGS+set} +ac_save_FFLAGS=$FFLAGS +FFLAGS= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 accepts -g" >&5 +$as_echo_n "checking whether $F77 accepts -g... " >&6; } +if ${ac_cv_prog_f77_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + FFLAGS=-g +cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_f77_try_compile "$LINENO"; then : + ac_cv_prog_f77_g=yes +else + ac_cv_prog_f77_g=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_g" >&5 +$as_echo "$ac_cv_prog_f77_g" >&6; } +if test "$ac_test_FFLAGS" = set; then + FFLAGS=$ac_save_FFLAGS +elif test $ac_cv_prog_f77_g = yes; then + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-g -O2" + else + FFLAGS="-g" + fi +else + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-O2" + else + FFLAGS= + fi +fi + +if test $ac_compiler_gnu = yes; then + G77=yes +else + G77= +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + break + done + if test $am__failed = yes; then : + F77=false; { $as_echo "$as_me:${as_lineno-$LINENO}: tests requiring the Fortran 77 compiler will be skipped" >&5 +$as_echo "$as_me: tests requiring the Fortran 77 compiler will be skipped" >&6;} +fi + # 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 ... + + + + + + +if test x"$G77" = x"yes"; then : + am_F77_is_GNU=yes +else + am_F77_is_GNU=no +fi + +# 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. + +{ $as_echo "$as_me:${as_lineno-$LINENO}: will now look for GNU compilers" >&5 +$as_echo "$as_me: will now look for GNU compilers" >&6;} + +# GNU C compiler. + + +if test $am_CC_is_GNU = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $CC is already a GNU C compiler" >&5 +$as_echo "$as_me: $CC is already a GNU C compiler" >&6;} + GNU_CC=$CC GNU_CFLAGS=${GNU_CFLAGS-$CFLAGS} +else + if test -n "$ac_tool_prefix"; then + for ac_prog in gcc + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_GNU_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$GNU_CC"; then + ac_cv_prog_GNU_CC="$GNU_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_GNU_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +GNU_CC=$ac_cv_prog_GNU_CC +if test -n "$GNU_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GNU_CC" >&5 +$as_echo "$GNU_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$GNU_CC" && break + done +fi +if test -z "$GNU_CC"; then + ac_ct_GNU_CC=$GNU_CC + for ac_prog in gcc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_GNU_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_GNU_CC"; then + ac_cv_prog_ac_ct_GNU_CC="$ac_ct_GNU_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_GNU_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_GNU_CC=$ac_cv_prog_ac_ct_GNU_CC +if test -n "$ac_ct_GNU_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GNU_CC" >&5 +$as_echo "$ac_ct_GNU_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_GNU_CC" && break +done + + if test "x$ac_ct_GNU_CC" = x; then + GNU_CC="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + GNU_CC=$ac_ct_GNU_CC + fi +fi + +fi +if test "$GNU_CC" != false; then + if { echo "$as_me:$LINENO: $GNU_CC --version && $GNU_CC -v" >&5 + ($GNU_CC --version && $GNU_CC -v) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: botched installation for GNU C compiler" >&5 +$as_echo "$as_me: WARNING: botched installation for GNU C compiler" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: tests requiring the GNU C compiler will be skipped" >&5 +$as_echo "$as_me: tests requiring the GNU C compiler will be skipped" >&6;} +fi +fi + +# GNU C++ compiler. + + +if test $am_CXX_is_GNU = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $CXX is already a GNU C++ compiler" >&5 +$as_echo "$as_me: $CXX is already a GNU C++ compiler" >&6;} + GNU_CXX=$CXX + GNU_CXXFLAGS=${GNU_CXXFLAGS-$CXXFLAGS} +else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ gpp + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_GNU_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$GNU_CXX"; then + ac_cv_prog_GNU_CXX="$GNU_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_GNU_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +GNU_CXX=$ac_cv_prog_GNU_CXX +if test -n "$GNU_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GNU_CXX" >&5 +$as_echo "$GNU_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$GNU_CXX" && break + done +fi +if test -z "$GNU_CXX"; then + ac_ct_GNU_CXX=$GNU_CXX + for ac_prog in g++ gpp +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_GNU_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_GNU_CXX"; then + ac_cv_prog_ac_ct_GNU_CXX="$ac_ct_GNU_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_GNU_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_GNU_CXX=$ac_cv_prog_ac_ct_GNU_CXX +if test -n "$ac_ct_GNU_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GNU_CXX" >&5 +$as_echo "$ac_ct_GNU_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_GNU_CXX" && break +done + + if test "x$ac_ct_GNU_CXX" = x; then + GNU_CXX="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + GNU_CXX=$ac_ct_GNU_CXX + fi +fi + +fi +if test "$GNU_CXX" != false; then + if { echo "$as_me:$LINENO: $GNU_CXX --version && $GNU_CXX -v" >&5 + ($GNU_CXX --version && $GNU_CXX -v) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: botched installation for GNU C++ compiler" >&5 +$as_echo "$as_me: WARNING: botched installation for GNU C++ compiler" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: tests requiring the GNU C++ compiler will be skipped" >&5 +$as_echo "$as_me: tests requiring the GNU C++ compiler will be skipped" >&6;} +fi +fi + +# GNU Fortran compiler. + + +if test $am_FC_is_GNU = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $FC is already a GNU Fortran compiler" >&5 +$as_echo "$as_me: $FC is already a GNU Fortran compiler" >&6;} + GNU_FC=$FC + GNU_FCFLAGS=${GNU_FCFLAGS-$FCFLAGS} +else + if test -n "$ac_tool_prefix"; then + for ac_prog in gfortran + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_GNU_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$GNU_FC"; then + ac_cv_prog_GNU_FC="$GNU_FC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_GNU_FC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +GNU_FC=$ac_cv_prog_GNU_FC +if test -n "$GNU_FC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GNU_FC" >&5 +$as_echo "$GNU_FC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$GNU_FC" && break + done +fi +if test -z "$GNU_FC"; then + ac_ct_GNU_FC=$GNU_FC + for ac_prog in gfortran +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_GNU_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_GNU_FC"; then + ac_cv_prog_ac_ct_GNU_FC="$ac_ct_GNU_FC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_GNU_FC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_GNU_FC=$ac_cv_prog_ac_ct_GNU_FC +if test -n "$ac_ct_GNU_FC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GNU_FC" >&5 +$as_echo "$ac_ct_GNU_FC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_GNU_FC" && break +done + + if test "x$ac_ct_GNU_FC" = x; then + GNU_FC="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + GNU_FC=$ac_ct_GNU_FC + fi +fi + +fi +if test "$GNU_FC" != false; then + if { echo "$as_me:$LINENO: $GNU_FC --version && $GNU_FC -v" >&5 + ($GNU_FC --version && $GNU_FC -v) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: botched installation for GNU Fortran compiler" >&5 +$as_echo "$as_me: WARNING: botched installation for GNU Fortran compiler" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: tests requiring the GNU Fortran compiler will be skipped" >&5 +$as_echo "$as_me: tests requiring the GNU Fortran compiler will be skipped" >&6;} +fi +fi + +# GNU Fortran 77 compiler. + + +if test $am_F77_is_GNU = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $F77 is already a GNU Fortran 77 compiler" >&5 +$as_echo "$as_me: $F77 is already a GNU Fortran 77 compiler" >&6;} + GNU_F77=$F77 + GNU_FFLAGS=${GNU_FFLAGS-$FFLAGS} +else + if test -n "$ac_tool_prefix"; then + for ac_prog in g77 gfortran + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_GNU_F77+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$GNU_F77"; then + ac_cv_prog_GNU_F77="$GNU_F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_GNU_F77="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +GNU_F77=$ac_cv_prog_GNU_F77 +if test -n "$GNU_F77"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GNU_F77" >&5 +$as_echo "$GNU_F77" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$GNU_F77" && break + done +fi +if test -z "$GNU_F77"; then + ac_ct_GNU_F77=$GNU_F77 + for ac_prog in g77 gfortran +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_GNU_F77+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_GNU_F77"; then + ac_cv_prog_ac_ct_GNU_F77="$ac_ct_GNU_F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_GNU_F77="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_GNU_F77=$ac_cv_prog_ac_ct_GNU_F77 +if test -n "$ac_ct_GNU_F77"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GNU_F77" >&5 +$as_echo "$ac_ct_GNU_F77" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_GNU_F77" && break +done + + if test "x$ac_ct_GNU_F77" = x; then + GNU_F77="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + GNU_F77=$ac_ct_GNU_F77 + fi +fi + +fi +if test "$GNU_F77" != false; then + if { echo "$as_me:$LINENO: $GNU_F77 --version && $GNU_F77 -v" >&5 + ($GNU_F77 --version && $GNU_F77 -v) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: botched installation for GNU Fortran 77 compiler" >&5 +$as_echo "$as_me: WARNING: botched installation for GNU Fortran 77 compiler" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: tests requiring the GNU Fortran 77 compiler will be skipped" >&5 +$as_echo "$as_me: tests requiring the GNU Fortran 77 compiler will be skipped" >&6;} +fi +fi + +# GNU Java compiler. + + +if test -n "$ac_tool_prefix"; then + for ac_prog in gcj + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_GNU_GCJ+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$GNU_GCJ"; then + ac_cv_prog_GNU_GCJ="$GNU_GCJ" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_GNU_GCJ="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +GNU_GCJ=$ac_cv_prog_GNU_GCJ +if test -n "$GNU_GCJ"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GNU_GCJ" >&5 +$as_echo "$GNU_GCJ" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$GNU_GCJ" && break + done +fi +if test -z "$GNU_GCJ"; then + ac_ct_GNU_GCJ=$GNU_GCJ + for ac_prog in gcj +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_GNU_GCJ+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_GNU_GCJ"; then + ac_cv_prog_ac_ct_GNU_GCJ="$ac_ct_GNU_GCJ" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_GNU_GCJ="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_GNU_GCJ=$ac_cv_prog_ac_ct_GNU_GCJ +if test -n "$ac_ct_GNU_GCJ"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GNU_GCJ" >&5 +$as_echo "$ac_ct_GNU_GCJ" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_GNU_GCJ" && break +done + + if test "x$ac_ct_GNU_GCJ" = x; then + GNU_GCJ="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + GNU_GCJ=$ac_ct_GNU_GCJ + fi +fi + +if test "$GNU_GCJ" != false; then + if { echo "$as_me:$LINENO: $GNU_GCJ --version && $GNU_GCJ -v" >&5 + ($GNU_GCJ --version && $GNU_GCJ -v) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: botched installation for GNU Java compiler" >&5 +$as_echo "$as_me: WARNING: botched installation for GNU Java compiler" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: tests requiring the GNU Java compiler will be skipped" >&5 +$as_echo "$as_me: tests requiring the GNU Java compiler will be skipped" >&6;} +fi +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} + + + +########################################################################### + +## ---------------------- ## +## Create output files. ## +## ---------------------- ## + +ac_config_files="$ac_config_files Makefile" + +ac_config_links="$ac_config_links GNUmakefile:GNUmakefile" + + +ac_config_files="$ac_config_files t/wrap/aclocal-${APIVERSION}:t/wrap/aclocal.in" + +ac_config_files="$ac_config_files t/wrap/automake-${APIVERSION}:t/wrap/automake.in" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} +t clear +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g +t quote +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g +t quote +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` + + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +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 +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by GNU Automake $as_me 1.15.1, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_links="$ac_config_links" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Configuration links: +$config_links + +Report bugs to . +GNU Automake home page: . +General help using GNU software: ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +GNU Automake config.status 1.15.1 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +APIVERSION=$APIVERSION +APIVERSION=$APIVERSION + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "GNUmakefile") CONFIG_LINKS="$CONFIG_LINKS GNUmakefile:GNUmakefile" ;; + "t/wrap/aclocal-${APIVERSION}") CONFIG_FILES="$CONFIG_FILES t/wrap/aclocal-${APIVERSION}:t/wrap/aclocal.in" ;; + "t/wrap/automake-${APIVERSION}") CONFIG_FILES="$CONFIG_FILES t/wrap/automake-${APIVERSION}:t/wrap/automake.in" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + + +eval set X " :F $CONFIG_FILES :L $CONFIG_LINKS " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + + :L) + # + # CONFIG_LINK + # + + if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then + : + else + # Prefer the file from the source tree if names are identical. + if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then + ac_source=$srcdir/$ac_source + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 +$as_echo "$as_me: linking $ac_source to $ac_file" >&6;} + + if test ! -r "$ac_source"; then + as_fn_error $? "$ac_source: file not found" "$LINENO" 5 + fi + rm -f "$ac_file" + + # Try a relative symlink, then a hard link, then a copy. + case $ac_source in + [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; + *) ac_rel_source=$ac_top_build_prefix$ac_source ;; + esac + ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || + ln "$ac_source" "$ac_file" 2>/dev/null || + cp -p "$ac_source" "$ac_file" || + as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 + fi + ;; + + esac + + + case $ac_file$ac_mode in + "t/wrap/aclocal-${APIVERSION}":F) chmod +x t/wrap/aclocal-${APIVERSION} ;; + "t/wrap/automake-${APIVERSION}":F) chmod +x t/wrap/automake-${APIVERSION} ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +# 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 + +as_fn_exit 0 diff --git a/automake-1.15.1/configure.ac b/automake-1.15.1/configure.ac new file mode 100644 index 0000000..49a25a3 --- /dev/null +++ b/automake-1.15.1/configure.ac @@ -0,0 +1,616 @@ +# 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 . + +AC_PREREQ([2.69]) +AC_INIT([GNU Automake], [1.15.1], [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. +# Our current rule is that: +# * All releases, including the prereleases, in an X.Y series +# are compatible. So 1.5.1c is compatible with 1.5. +# * Prereleases on the trunk are all incompatible -- 1.5b and 1.5c +# aren't the same. +APIVERSION=`echo "$VERSION" | sed -e 's/^\([[0-9]]*\.[[0-9]]*[[a-z]]*\).*$/\1/'` +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`/t/wrap/aclocal-$APIVERSION\"" +AUTOMAKE="\"`pwd`/t/wrap/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 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: +# + +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": +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([t/wrap/aclocal-${APIVERSION}:t/wrap/aclocal.in], + [chmod +x t/wrap/aclocal-${APIVERSION}], + [APIVERSION=$APIVERSION]) +AC_CONFIG_FILES([t/wrap/automake-${APIVERSION}:t/wrap/automake.in], + [chmod +x t/wrap/automake-${APIVERSION}], + [APIVERSION=$APIVERSION]) + +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 + +AS_EXIT([0]) diff --git a/automake-1.15.1/contrib/README b/automake-1.15.1/contrib/README new file mode 100644 index 0000000..a4d7eeb --- /dev/null +++ b/automake-1.15.1/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/automake-1.15.1/contrib/check-html.am b/automake-1.15.1/contrib/check-html.am new file mode 100644 index 0000000..fc5db41 --- /dev/null +++ b/automake-1.15.1/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 . + +## 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/automake-1.15.1/contrib/multilib/README b/automake-1.15.1/contrib/multilib/README new file mode 100644 index 0000000..35c726f --- /dev/null +++ b/automake-1.15.1/contrib/multilib/README @@ -0,0 +1,9 @@ +Minimal support for multilib builds. + +For a little more information, see: + + +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 . The same is probably true also for +the 'multi.m4' file. diff --git a/automake-1.15.1/contrib/multilib/config-ml.in b/automake-1.15.1/contrib/multilib/config-ml.in new file mode 100644 index 0000000..cc7f797 --- /dev/null +++ b/automake-1.15.1/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 +# and send patches to . + +# 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 <>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/automake-1.15.1/contrib/multilib/multi.m4 b/automake-1.15.1/contrib/multilib/multi.m4 new file mode 100644 index 0000000..2156e66 --- /dev/null +++ b/automake-1.15.1/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/automake-1.15.1/contrib/multilib/multilib.am b/automake-1.15.1/contrib/multilib/multilib.am new file mode 100644 index 0000000..5c98b69 --- /dev/null +++ b/automake-1.15.1/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/automake-1.15.1/contrib/multilib/symlink-tree b/automake-1.15.1/contrib/multilib/symlink-tree new file mode 100755 index 0000000..49de9fc --- /dev/null +++ b/automake-1.15.1/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 +# and send patches to . + +# 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/automake-1.15.1/contrib/t/Makefile.inc b/automake-1.15.1/contrib/t/Makefile.inc new file mode 100644 index 0000000..d55fb95 --- /dev/null +++ b/automake-1.15.1/contrib/t/Makefile.inc @@ -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 . + +## -------------------------------- ## +## 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/automake-1.15.1/contrib/t/help-multilib.sh b/automake-1.15.1/contrib/t/help-multilib.sh new file mode 100755 index 0000000..b58ca80 --- /dev/null +++ b/automake-1.15.1/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 . + +# Make sure that our macro 'AM_ENABLE_MULTILIB' adds proper text to +# the configure help screen. + +. test-init.sh + +cat > configure.ac < aclocal.m4 +$AUTOCONF + +grep_configure_help --enable-multilib ' many library versions \(default\)' + +: diff --git a/automake-1.15.1/contrib/t/multilib.sh b/automake-1.15.1/contrib/t/multilib.sh new file mode 100755 index 0000000..3899ce4 --- /dev/null +++ b/automake-1.15.1/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 . + +# 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/automake-1.15.1/contrib/t/parallel-tests-html-recursive.sh b/automake-1.15.1/contrib/t/parallel-tests-html-recursive.sh new file mode 100755 index 0000000..f2d1fba --- /dev/null +++ b/automake-1.15.1/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 . + +# 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/automake-1.15.1/contrib/t/parallel-tests-html.sh b/automake-1.15.1/contrib/t/parallel-tests-html.sh new file mode 100755 index 0000000..4d2f8e3 --- /dev/null +++ b/automake-1.15.1/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 . + +# 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/automake-1.15.1/contrib/tap-driver.pl b/automake-1.15.1/contrib/tap-driver.pl new file mode 100755 index 0000000..637c14c --- /dev/null +++ b/automake-1.15.1/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 . + +# 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 or send patches to +# . + +# ---------------------------------- # +# 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/automake-1.15.1/doc/Makefile.inc b/automake-1.15.1/doc/Makefile.inc new file mode 100644 index 0000000..b39ce89 --- /dev/null +++ b/automake-1.15.1/doc/Makefile.inc @@ -0,0 +1,116 @@ +## 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 . + +## ---------------- ## +## 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) +EXTRA_DIST += %D%/help2man + +update_mans = \ + $(AM_V_GEN): \ + && $(MKDIR_P) %D% \ + && $(extend_PATH) \ + && $(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 = { \ + $(extend_PATH) \ + && 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; } \ + && $(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/automake-1.15.1/doc/amhello-1.0.tar.gz b/automake-1.15.1/doc/amhello-1.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..f2d04927125d0bec5115a514d3bb809399ac219b GIT binary patch literal 81098 zcmV((K;XY0iwFSKxkgz61MEBRciP6X{fhpIE#(#D8nE4@ITwyw5sV#fZQ}ztZEr{w z83gDBBq|9zZtVa4&Ft@$gq@z-`{ADR$cfpVot>ST-JPA?8NBt*WWQANsME`ZIEKPrPj! zt)Y<|HV$7l4#_-@)(YEOH>_`nGmXM|u-L}F8-$x}>R15mMw|OMSS(Xg>)Pb-AOCn! zKRP&kMNVViC!=Vd-g&W4PNQu&^U@#+_enpTHn8V-86*ZnP@QA1g!gKbbm{LT1QZs* zt)Gx>xC+(*%CYg|b&w>`NYaQ*fivQTvt|^NS&*c0aI;N)5~Tak^)5)41RC%=+NNY3 z&4PI_rIeF>;w5Aig$w*nkYcSkO=u-MjIar zUJ4__aH|!$@yRyv=i3!B0=VRt{`k${dQ3W(zmZ=$!(r!g{M$Z?fc^bXsUN0Hwv^A- z%DZa|)`5n9>$9lfP)1v$M>!^motlzCOP&<7_tX zLE#|B+pEs_4LK%G5>IDA>{#B~b%VrRgj<)c_+#>!Oe{izIZ6E_CG|f^wNgXL&wFos z=XRBH7*ZTU=H4m+p0VPuWS3BMao-F^<4l({-aggiZEra04=(L0`Sx4Av3or{=?|Zv zmH2s{<^g^`QXx?~H{OO}5H4I?EpD_yor1)OI`x1+rSduT;)S2`w)!KkTSk_UpKQ`@ z%i5kz{OK|x<)?_ZpnvMep|>J_97i$MZ@pD8D@!`!Q)VL*&Q&$fOO+%We+nDZhweXq zd(_rx_@7`y9diEs#GA6x(o3-aaTu|B;)OotcE0i!$#JEENLI+AFopny?L> z=P792wQ1lAmGpH@?oB4|CS+224@y)r+$6`7i7r%Ts1KVMv^gi$|4Alcm6SE&raB); z0z0FeG%J;x1pmLoKLr24kj>_z{6S8nQWaY)FzUx(-UaT@8C?9ZqTk!24WZW_x8I*v|wdTRu|_ ztJ6Inbb-pn3(8*_ZCvJf*iCP`il*MGv3@~kg;(A63wP#kk{r79wj17*O`~+bC4K=N z8^GPcW=y>cCdIZR-z z=NeCXr=9Ebv4L~|Sk$SLkVCr8DE+hErA7p5nK2MjfRG;tTW})^3C~ip@9yos&s(S;Ck4lYNRVgRfj!rg-89jJ$Kw0p7qAKL}2#n zu|M6$3EU0{tc>YLy`I3e0G#b4)qt>GrzyA@8fbPKXtia!)`1aM<$4dyroap;rL;Wo?-$gGtY;vwns zRusv+c);4Yz5)Y*R{3-QW?-nih43Ma9xlOmVpkjC6oAW6({)7Z^;h}V+&Ndz#)ZXlW-Na9~8(@W5H0lx^e_&fc8bIO5R+EPY{99B%v`s2# zC72i+#kI1Z!022Ot!$KE{O~(?wQAtz!-M9T(_VnC-)ZQu%x_~yjG&7nGpcnT`TV`H z2h;?k!osb+PtfPZ0R@K94e-pV2{ll6|BF=7eD}Wb4)~u;_8#6hC-C{U37W}~=0wrc z-!MNPcOv!fl}6gsuTv6$YI2&jVq%zX|U3{-lObyZP?-=6i5x_a}$@RZa{})?a?MN%eK_tbYmj6g)qZcjZR;J@8#F zlSc`wRE`j)Rmx~{D~Dnsz@4=A-FG2J6jEz*YO7o1XF_jc(EVs%BiSaRJ2_~Z<5FH8 zIRWqvkT1|%4c8Z_j^f&!D!>F)D846;RXQp9ln6z_{r&69_S1io<|J$qST))NRG&no z!$}+CQdV4io#fl$v$`47|D@MY#1OaRhX+8QjbFn-kIm4lEFW3`I4=Um0@#*%qLlbS zSp)AF*#->yXal}zeU1}I$0lXFY&=wOFKK4$L(x8>i@dx(>YJClE3g$$dZRJE1%YQ3 zu}x`7kKFXNw8N4)DC)>uM@hQ6pRRl_)Q?KDUZOWHAeqHmd$1hfzaQ5#O_XI>bJ?XS z;R~Zu%bnhKuEF3`G$U2GWX4{ewvEn6kypTa^jbGvX1t zgQ7VJ{X6tk>xsYd*pob3qHvM0cX)gtg%uIbycnOAH(UCIjSrn{lltHqBN@P3lPH|} z`|@3Tw%x4oS=&zl!h=r0o@tcv1+mC1xfJk zff^CYOQLN&g&7I(kr-I_K~nnajPLe7v?N}9Pj39Fw@rLhoZnb9_L)-QuE_gSBS+Ts ziTehCOD~3L@YWawkiO`x7YE)AOg~VW)3CyP?#J|bp4~%}Cfvefzyf_!WzOIl75Y@C z+4Y0UKpBp!Y}x9~`09)8OrYZrI9QN5*W^*bj2|^*L7Bf?au)&gM;|CzRk|m%LA?I) z^N=xNPQLxY>d}pIOnh|vtS+xjS#8uET=lR@Hxc*SuU~_yV!M%-ndATLT@%HtnfFY( zU&s*l*+q};)@Z%Kc@j=wvLrMX5H9H8;sOa4Q@d=6s=h~izoOGg%e`O6!w%)nwuBi# z68s6pu2*W}iQdASu#UsaHn)N62#k(uH=+u7`bhk;8B+*Cvz64-do)UT7Gb!9)Q=7h z2)#$ZU1uH5$o9KC^7)Ze+f{ke@Ixh@o1{cDJ;0Kc?{CP<9k}usqHCswON0uxfs-RI zoiMgKSSVuUrNM3Rr_YrDEeFRRHg_}r7M##^9^=|i_J5z$s5b>(RYSN`3Jq)%!=gCN zy?woLjr8Fo1t&}XwiCBpb=3KFVmYODzqg|14t5}sQZI+yAl z8}4YuLmQHe$(bW9I&s) z1AN(|7`)7&@>$SPHP(W`I00voa&VL=;Fq5rtJ}q5w~M8d-qpq6q{jff0&o^4L?A5z zZ8FaT%IL3U z`|2=-WztX(z?izz)MdL_lzA2ji`>x$Rb_2p&1M)MoJFZ<*FX&Ck8PC7-n8QIi)JjK zP;~gMOoP&jW8HvlWIVGHKu|8%TLoT1!K%vJ1iqACg)1FiWUx4jQVq_l&=v_ju@XRT z0|B8W$3j2VWwxJ&7gW`;mgq}L22~AO()EfH;zh?YLZyzXVGBJ%7?>6vEx^dYqUKmK zli^tC8 zOzU;Wl6z2FCRvz<#p#bX zO_tRdU7w!zf9;K0uq*4(G6xrL*^(J^5ug?HN)*%4nQg;7)>L|+(u_MH6_zmb%9 z_@r9csmfvzC7x~pFq&>u;tn#ps#Scul#Jj-5G3aQiw({t4C)7qklv0;+4sxm`(dvV zG}7d(1C5B5tyNOl9VOuumvrW|c=PUogbEp_I**y|bik)+SfbF{`7WWaJ^4Dp;><8r zd`^B+6R>BXsA=GGR%-MFv`NFHrS!fFL#QxEQmRg}$&^=2hEyCrv9Lrr%18xwkoOBk&dJ_@fl_2nU~K=B9&v+(f1qYFEmcNsg`!4jp` zjwiY2Hbj9ZZDAWFUSX^W$L8i6JFpj!Qc+A1Va7<{$m44ggx7rOOUTNpW-3o0^d)1q+$TrkiGE^Ufb1)&5(L$yPju3t)q z^};Yx;-{$Hs(DoJQyN()P{B_PmM2&f`hyP|d7?z+VEEI88(h8WS2%aLOHeOL0d^aC zIwrX|%>$2*I#o!`cxSwQ)(#y-OnKCaSk_da)6_}i ze^stHW$9lj6TJuha?xqN9gqf+1@YyOkK$Tmvv6!#U+?JO{K%*?=);xZD+%{;N4 zb`my4djRJR#0&>ecS~xAWlrB0L0el za<3B&A1pjHk8HwCZ(fsFh(%=%BSYw2LmGk>96x%x2Mk}fto})h6ogTQ>$NKk3u}A* zF#x+b@1KAyEZk~gaI;0sJU0s?pA2YG1YoTtqWxx;Z6P0MLOxLeU?=-37>25X387(D zyqeHBYhAo7J(1t0sgYxgMD+|2u~0D74(xn7Ze+G>uKTWz`d-fMoi=%Tw-j!I1{b5% zHWso<&JoB>8hCzqP!~#6D9{3vfN^hAgh~aK+%!68wt-x#&n^(aNtVGpH9ap}d~DX- z&Jd=qQrQ#hr(7hI=C5%ql!nLmD;25ajLE1}z9IDmy-Mr0LM|9y5L*@ZkqOXPRJvn& z6Py%Sl7EwahO+P&18d5*RwfVEVtEA|&XE4%_WF`p)F!U0Pn?(!Vc2-HEeg8uCZJm& zytE?L85K%w`0T~RxCo&&U=*k!F22Hu_66#P)B|Wf(-IS8=q*q!*@1P}cTdLS9%=2%f(@ z1sNAXrsfLz6eG8L#YGCa(Q!1>M}GVlJu9b>8e%vt>Cz)-L-sZL?E?PN zpW4zroSATR;(0L$_1Y%VYueDjQHv+;uv|K^$Fm71rK0p2T+#H&-GG9(`Rg_AJ1r{%Epbe7FlKMA z3GAl1;Fz%>xKmG^nC`AUB4{}g0=LWHCCyuGa7ymjF| zNFTpAMNITJ2goOj$#HTyW3O^KWAWW5%o>}t<=9dtGkg81NMuXg#%A{$>WNx|v zJ#U720vf|S2io-N|HHCLzT~`p0Y^EHv_3Cnj-x<#9A>j)kOFjLG|f0`PeSJ9_3!kt zwW~h+<*eqvX*D1Jn5<(KDB;*0o zW+qOJumyNxTdrlZG~s`L&vrLiW=YykpLv>@V(IGc%eiMij&QJeWF~{Uaga{dh2w>5 zpm1>dL(u@eZ_Xg++p8?zqu#NsISkpknn~C89+ba@I`7wCeMQ}y17X#Z^vj6=GF6jf z{n>m44<0;FwLyRME>jH;5XN6lZc#c1J#SYCo1{WTX5dl<*TVC_b=UUjn}>%PZAG)= zh#APpvsn{E3c)Aj`4htlH6dFH%Od$BYLV25@8;De1!XMIU#>8gSv!J?*6!4cN6_XP z9Q^n6P^*1&rKpmkE*$;3c8fj??m7`z0GoqO?BERSzC56QPy;Iw-|Ao!r z`1z?;ORm(#uSKK3xJ~nr@n22{*cSPxjlCD!FP=74X@52zBkFhTI&ng8G4Z5(N{)fh zBw&(ch-0C+fMJF9Ff&L_;_jvK&=l&-AvtSG;2CXWdJ%b-nQwjDdTip}!%-Pb(~|_* z@pu7mXt!Bw(W=yO^Aze%6wTScZZT!3mUGJ~!>kMDt)F?2SI^k*Gbz*$XG-pLn6dEf zPP2cIgambJLjCA_ba*Deij+;{3#9ue z5+Ljf;h8AvnX zsgTRDA&WWU5s9LpCg=sr-;9wQPrXoz8h6!d?M63gMS!!`U%7T8^t$uP@Q$q#9jNtn zQ!Bt*U9G_6`3fMeJV6_gUykX5k)xE@^uhTcfy;g>Q^^z$-4WIW|9#qHyE}9XYFN*3>+kfB-<5#8cR;^uOSJp`QAJ0-KMd#6SuLV4NX%WN2D@6_toU*n5rjh5|xEx9Dy zHDeP!k(OWBpYe~ZBR9bxSxXM5xppl~q4``6SL%vwCyl|RTXNk{i&u7o7v{XxuE|%C zzeI0UiM6D%8;E=#2(Yn|F7Era*vGx^mo znc98kXjgJ9?Zzqn&FWFTRX?HUG5x(Duv{*WLwUFe3vA$;MhB97YZmVcz)@(Wt#(Ja zwYRss*96?^k~EM~QqC!V&;DcM5evsdXVXCk7S}E=Ebl3o$8eQXVE%~ib>k7>WdJ6a zFE~xr$8~~cNUp={t^Gczb0GT%hcM^As8t!i<0C^l#)5)Day(V>@f64dQ)9EF*4?w} zsWcjGv^nm#%kWy}JuZ1w#&nOvyJ9A=-_A{Dj9zAQwuy@I&sNi(HP~Ca`=Q}{hsb(W z^J|7i4|!BYCX~fXb?r*Qv1GK#==I6s znKp8ZcU|jlK7Tsd9TiG!QByJ=1~RQVH&p?DwI&t_6iGGHC<#0MQktsJrIninD`UZt zaM24@J1tY)Q8vqyQ32d=eF2dMYQKwy1-W;t z0$|cK3!JrR=G-H)OuROa5mEBhF^d=OU--?;cQcAfuyV?_|Ti6gp<~^7wTN0CZBg z*ToJS{ak)IJ(?nSj(#q`9PCEtZQMI<7CV3R^7vJZGp9^eSS0gGn0t8s*fg(m`*oMi zMx>1A3m19B52gvbb)DambM4}iyZclvI^ux~+?vH+&%8WTbpb#O0-FEayqo#PdG_a5 z&#S$WvF2i9kRXWg7HKYWSw@DZ%GRU2>lI4Be75`IpVt&;Pfe_(MSrk9sSEA^$9PqE zDta66`Om52c~HQ5P4hJGSbI}x?acyLYAkJIqZ1JTDkA|?Mz*1hU`UCCN@?!CF3Vju z`{71VrHdJ8mB+tb|8F@ajIgB`S`Y+Na^MMEDLKW41>!7P&Sz{MvnqsPF4XcW;Pzcu zwGeZoPC8|6e;wbcIVhwY807hu?Hwy0*f`)tc`(H-#-2dEiOj(p7gNvsqAfVz3lBV& zb&hY*QN}~8r1Q{e?ksHs?avn8E&Itmz>ClC%e}45?cG=Vj`26iY7(eHwDvRg=6>|m zH`V*m!}}F9I(quzl_Jp?UNe{jFMK5-@UZXRSX0R~+lj~jlH;@1Hkm5g4U?=C7BS7i+ zU#kxq5AQ=dJU;yTulP@YO#G)$3*+PN8I^V6fKUJMa6TKGo$VLf2g`3{Grz5>H?W`a z=V*3P({Zf6KN-!UbaL{Re1&3(j&=aB{HFF39=O_16re_lGXTuFNt9G)a}ysuukicJ zZ#27sGs;)Oa+co&76zct3FA8;;LN+P4qm=G2>wj*-`ESr?{hRH{#)VsZ@{<4+Qa)_ zeRUs_zk>4*AmQO(=l_rRr@f-aK*0{-cABzwfEvf$ckxL=q%Yo3T7e@94p0Z|kkAF4 z7&1j0_voM-T@Sz-X7L~j{=dKe{jZ4sC~i~#;P{`7ukPP(B%G>Rl6y`ub1#~(o^4#>G%8o zB#mY;mMK7`LDY@Et5Rcy0UC3-igrUVNxTS=I&35(9;`M6y@Y8(m^THCB@=(!G&4`h zhJT=5&W;8^Z0z*A$p}$*Xc<$oQ&OQqovCY3qji<^NrO(NRjpMqR^u|@`OwRWM9Hg= z<8O=rIkj1T=TMX;)a12+Cec6l4WTBB0!=ElpO9|^D1Xgd5?2-wHMqHe1{`EG1hRN?GF>IEU&6s4X&keXxA9=jmeNkQVO)#FgWf90UMz; zAV(0Oa#BC54G_YdC-}EQet7}@WISR#HnEHv2Hc&b#Exff#Q7;Jtl}WzGuTt)>_dAK z=ZY+igG&CBkxEABfg}oyG;@_6*Vnl_XhkDM9|2BPLp8p5s&`icpauisoZw=eA&iBo zo$0;~5WK_&^CA;>G&^@2IQ>xL{}TE$;J;&Tlf@J50A}>f?#qMi-4}18C{o&O>YI(d zr>~xGy*R+sAlO4EBZc3>DlF=BHW`t=C$1^p4{`4dBjA#g65gD63{?-^C8Va2qXY}- zTLZU9n&Qx)!Cg8JS(C<5l|?r?I^zNCN2-^Sk?OjnWb102Gz1UkXlE4EZ1 zI?yn+x@YVq1zQ)7T4*k#_Xa(k0!|A9cQjDz4u>25YVKJH(z{}TcPmo@CrPZ2^-|0VQi z!hbXQ>FeM0gY{D3Y(%{Y${wdiaHS^QsS6OX5{pSte2@_#Me01A zyn`V#99~1j!Zfdekt}C6U0+vvPPZ_r3oukYysw5y440PP5U@{RQM#u(Y6oCOFzu&^ zl|n9oH-x6p{X|OcER)5t#iMQ?`=)E7TM`AY=npC889iR^@ zJl^gG6#PdcQikaujEiQ;tK!>ozT0)()^~o+ZDhS?sofm9cE*#4TmOLO{v}Kt?sg8I z!+LVv($K5jDU61>x7Vu|`~X7iKg@Ak7o zfaWR)5NLM!GEW>@DQ)FT&!$b5?G2dKm)jb@rZbiEL)|}WwnQhNWna6uM6xf8j(gnTgjZY z`H`5zCu_IjZxn};A}z#Gf>h&FNE4=mk>2wgtom!SsF(d|q%-CrM5y}{&Tnzv&>!1T zK+S|-kJIOOwCqp!^}XY66!Z__$;bB2@&EjZ-6NK4u5%1vKYr$9@uJ~_Pw5=@!ta}g zSOtCK&|5^uo4#b}(2YFjDqIPW@jFKj5Oo_C>STI6op<puYrI9jD-EP(!F`9hv-+8AFo#8xCQn_Fne3FOBgmlujfG+5hMe8_Dl6R=cg4+~lRSb(1){2Yc*F3PWz28V>SSbtbT1Hc z0A1p#-meopeJ=MvEhiUv^q^h7rGSbQS&Z}@YC%mQA_J>PK6_vJG87I$Z$?OMp0ch) zfguc`wjJVrS*OSt5%Vk_G}Ut4>(x%v^qmS(?2^=QZ%_hUj??}ysgd7v6hYWG{5zR8 zRmqnLmHbT1d4XJ?H!o|SudWU8PcMQ$&vH5G@z->eK;~Bmo2$9c0L#g|jD$@1Z3`0q z5<1^q{wt9*|7iK|!~1Iw=j6X%t^Fnc{ln$IKRJS5*$k6RZo?jHCz4Qz0uQSYz5Jx% z$IE`dxuxv)CoAwhNQdfR0`UG)eLJP!@4J_9$7T`q_dCe^e@DK%^nXymyY!cY_s=Zh zl?};sMP{k=p6ddrs>Z0KoQN2T_Tb4i!YJHP8H%pPh`11^AIf~I^VKBT3a^4-G-!oE zi2eDAu~S&07(<{><0E1{j*@c2GL5IYif!vD-tqJ=0bI-XKOq#!ej zX~mF>ta1@j4q%u>To6(W5ED>fY!YS-aok}0$$qP(N~L?{5xS%5T(j&h08LGRFyGU93OEGhAhH;&jBQG)oIB{AWg6a$B#;Xu%u|$!OOYK*z0fz`(KBsuc)1k zfBmxxC&(#HK!=~h0)=R*u=H$ z5Ic5Hspmiq`~>8ico)^n3U!^Fb0W|e@VoiXr$24Kn9m5e*E!dubI#|142jJ_q>46V zmj^pvRH9xjuT`moD^;6X<(jb$>Rz4SY1R+B!=9?wH#J9(J(apXZtA7>a!LRP}1kU9tdI2nHpSK^}%1fp+j?OEK30(O6rouuB+8ObPIXPL~L8ljI zr#pD!(a8y3TDTXx12sU(27%h3e>90njtEr)$sw(#srO(zq5T=ep#u9BPSrgFytp?yTzmT*3hrMGNd`zKDD~nk4bN zz&SXcXLVEPj&0nfe#lE@;#)Rg@)x&2&IR&w8Mr=wsb&f_PZ4C??bvd954Cw)M{9t> z5s4=!s2l{SPVe8dY^v!3VmE>P6~nPYDldjUw9Co5TJ&V z=-`C+0O6};T~>C<;(Mr!wNNg0id0Vs$>+9Ei7`vNqzx=Xz>oxN0TRRvp+Hg=a*FPR}{V!kAFKh_=t@_QHhlP0@u4xU~$9RDa<~U7l}(32)=K>ZEx*9 z30@(k)-+)M4L9-@AB2*5>nYCezYT(qWSH%dLp69uMZ0Vor6E(2SZkFoAKj2q6P_eP zCNTpzr*N5$rWw;cK-`hy3gi(r*cf#YS%3hv@HUGFk?~|bmN69>Lr>FzQJG@)1N5`z<|o2NCQ|Crw^anA3MM^K(C!UB7d8^7szzcg4EikJE(I zGFfdJF(~O0t3Reh>I7Z>2{eX7_|0|Ljo>y0v&rev!Hgkt^BbWyOKLwweN(pE$K48j z44IDrorD*%92_ZtX|Ua(gg|s35z=T7zT5gP<5H_@04m0Ef}D ztmYuxn*)bZ+!mHX1J`VL(Wk>59}1rX&a8XQb!15&z&#XTn#V%TQHLQJOL=%TFsnk zu7Z`oWc`_GX#717(v0m87>p5*oP@=RW{Xl4A?yu4=yPL07-O_z5$vOatL+eqcd3f> zUF2R7q?x*;ULY7tkEQNJV3_R>a%BM6Op_?+@&?kHcwINB4#%=3KfE74tSfkX6W4y- zsQv40lius?s9UZ_De^CnJw{c^1d!7Y@o$GD&x>>lHv%#~Lp=V?sP;BgniH6eGCW^2 ze`XzYP*>unB48%oA?Lv9VHE_;Mumex8Z?U3ysHWww;GLo9lce10N+ zr5HwOhp|#&sW=*C;F7I;lm_XOwVz*al7o@JRU~@{#B*P5K}|ln@~Gp1#CdAsm52X7QbvM*3u6ELX(!hN36@N zm@x=BttYGHo&4dM^GSbjw85#y_nhJC=-+d-I-iPac0Zfi@yzg;?FxuU9|mM)`aild zeY99=GVxvG%M%i_(^{V*Fvskub?qzwy&^`a8(~A1spp-+%Dc+Jn6O|KZnv z`G5I?!b*tgN`1pjQq!v@@>8iqK{>qcYmE44iAPwTU3 ze^BSDGQA0-?6gu9N{UUGSo}Rni2fiE6jt$2EnjrSa}ihMRA9&_WNoIf&CeOb(Rv6R z4V?tCEL)yaQFx$Uqx20!4fbb4%Jb4XryR35Cz-Raw~pu$b;CdR?m`qJXk{ zAP-P$H$9qaK_PVm@APBF(X@gBbt=xXwA&{cZZGW;xyRTVEB}$~t)vwSN|h?hM0-g* z&|-h1ZJ@>YD6*aOyR2BjGT^?*!0|J=-q9E#&KFICHmj3YWE50 zXZ*1J;&D}Ny?(ie8Wy{IXk7UG<<9mNq;9|1+Dd+~ZNESX z#0#~tiAK!Wd#L$f4_>PCeL97zwIi$Fn*K>A5$`Z5O-#*;o8kcxU$ zJcHCp|5t%D6FGajr!_*nW-@DVO6eeh z4axZ2BzKS`;(IwG^$<^kf_7%6EeV*CB~}FLh+}TjMkC2I-dGdbYsu)WKS@VJGPR8- z=zgPndNLU!#sJN3K6|=HKBsGxdKFN>67%u-?qm4~srWHHADNH4KfRETkP07%rqbt9 zx*o`D3RqlnNiu^p_tw`Rod4C`sFUPHB_jRY3eMNj9#t*?T2S;W*9u z7agjSw09mSS${$n)IB=gvKbQA(uo30Z=wFH%ujdNYw={@Q`t-l&jEcMp3x`nFLV*# zN@eaUP?II@A!QA+Nw*dBvMK!OPdX_6!8d*g@QUlCqYj@_ks0+faS7XrJBHoSf?;K_ zvoC{yRF+z$w&sZEoJYK=9lTZhdzwxFXf`TL&Ulxm9SwuRoab=TMLLAKvg`f z%VfMiITNlI+GLR@S~fH33K9q;HdWelE0uxkUBmh^*%Up$*_}@uu0DA!h4Lrr>E7u=S2pK9UxxC! z`_pmk>+cfCci`5^I*t?-h8#=6LdY%@r+b#&7;O0fmDx6Q2TuCEMAY++tD|!@!w4e?Nov}m;|qM)TQ#@O|D^uU^2=X z%>Jd`6Qnj06OsmmDqKM!MF}tAl03p)Oi$qoe+>UFzi&cgu%&YH%Kqpq9`t*{YNMt& z-ldnF#ggkL(a~Vbk2S^Fk&B_^Z0p6dlU0bWxFAlx*Tv%x*(D>^) z?h{Mg^)ZG}%c>IoYWq6hE0|Plu0~-$ko>9=Dqw`}$_U-rZI5&RIbtbW&(zk#U^|;4 z?@M?_@qmM*k=+0qc5+eU;Ja!sX5B6p%hd#Qx9Aa|KOm$p%HKyfYReTY2)14RUJL#y zdRbHTT}uOTD^5B>`UIo!^cZlDo))0$ngi!7Ld}$CPU!@7xF_sV&A=C(@Tt&c0c5!? zRFN}Br!BvwJhye89C+>+xEpP9+f*8Cm3~13%*O`LRgCeExu2jiP4pO zh6irJmb8K2nh`cts9;rI63UGnLK!*bWg?IE`}E-9s^Vz1x5H0fGN0Y zhUhq_%idx!kDR=fhYubAx-#xiuVF^+Yx{N}f1M9&Yv#Ipvs(N5ZKcRuL*p?1zEEn` z84qSzXL8=s>u%M2-LK*2=*&KxGnLStI7}|a08Exc_4U_ZtC|e+bJbW~T~%QvRAp1w zVctytH|=P3_T}V!VK=E;wksAbz`afJ+$UYu8~QZ3$x98D8Pwi~m&j)TSP4J23v;*q zJP<_A1QyaS$Th(eP47B7Gr<6oVB1_BHimDJG8fI9?7yGl{?sZ_^fNJ%XODGk^hV;5 za#zR*91}J$9ga(ya+114IVwghDtD z4x+SKu@@;25>XxkqHX|`D;Z2hpdzL%f{55oFHPjazUXJuYXD&|w_$GpxTDlVSc91CwLb{cQ*N8G&YFxkk2MAw3LetYSRj0XTSLOVdf#4wL= zK>Uf-o5~-fwToDISut(kALIphku#Jcj6Q#&^PAt!7+QK9qV5j~2zcoay;Axxtmf?+ zq|!t9BZYC$x^VINDm-EK&V;`yGKb+jF_*K0h^+7qT@=8p1x-v=oq1z$;_yl>B4)IF zXe0!XFC zH{X0+YpmAR{$`8HjX*z#ITBTa_o&Qwu}7+2dmRdI;mz9phhM+tzZE4@%CMb&9BNjn zXl3=y>e^fU55RAffA-7UdsH{&-lqJ|&Cge!jN?nSwl?R(q^7^pJqUjvtU^YUwzhhG z2`u2{_c9-PBV8$)i|R>QJI|B%&ItnjbH{<$7%+6(MEFjibHKp z60(j348ZosX1(c#bEld3O|>E2*>()>weRH&Y(!!^NLRkVhtA)R1-o$NO=Io;SGdV= z{R=h$pa#49+pk4;t~N&M4NlmX=NIY-eb-KslX%h_Ao>RkGJ<~bx62E)sFJs#*4?h&uitfpC57Q zkX8BCl~#=7TI#)$c?P`Pswuj7K6=~r*yqQ(|L(4UOM1@f59zU%jo?Y=C%^?WU8}hr zspPdJ{ZaUPYX0Ju-AA#Si@Xmli9096jd;cFY6-5#OI903#pR#9ti5`zP=n__VT$M! zOFfLf(pzU}cFze=8{?WvC&d*JidjR-f-L@Eo8i_P$0UMqjw`WwrsB~7?(+rx(tGS- z)R^yz7QGQFgtvynRxhY+kaY&Vj%=~RL8fYhp4}mbMMe1Nxdr_b==|&b9sbq+K0z*^ z5xVes|9W-R+w}9LYDJ~K`f5=r$V?!j_&Wm6q8*E}4!d6gT=@;=b}eD1?~B`aC#2K3 z0K;e8`=Fe+rf}g<&5IBh3YdPB zoc2eAsc3i9f&~r7K$B^Gt}H6-2+&y$5Q*xrAn>Q=!mi+&@h~t1ke0hhT?Ut6%kter z)L^-neavVf3@jT(gPS0rkAO0;r*&#tls2$uB@!8=;+E^6nKt!uup**ey86+J|{%I z6&aH9>!zD|7H7@Rp?^+LrsoiI`pBhG|47GYz}|1p80BfzTQCk65ABpcHO0!KRZOk= z^l(ZP;*UyjImQ*jk)>sSwDfzPR<2}b$ZyMrj7|h30DX}>%6uMjxI{fPDVS{;>@3He zxVO!Vq=sG`zTK~um1RXVad62V0f1KZrZo-_S~wEHb|(H{HUsCpth6r0v0ulUh6e)N z<&A%8T~8SqLKwVWa1)w()$h&{=3iUCJiTeTX*lUtx4qtUK2Wi%TlLuWjTjX;JLJv- z%nX$smQE1UVp>NB`D`q8YkSu+uu&Y+4v+{!8>GgWD;s~aYFUKV4*13o%`OxE1FZi; zVdApdWb=j=@{~Bgx2bZtNI2xA!Ht;H64cHEf_^ffZ3q zX<*UIWFBVaND_XDZp_fPhq#1>T7wcTYMA+Sam`SBbUI~&zC!B_)+vMD*XH5cxjjnE z5i`(pgQ>M&B9;jwhUcp-{vebkHjt5N_STEDHL<|44f(d|#wQczEV9wde}&`ziz4X` zCP!{8MX5y=h_gaAi7a^VBkYz>Avy}zISDcL-2m3zYNEntzX6)tJXUC|wL^=kyiO2} z9O^|SE%P5R1elA~VLhdRS`A^ZC=Id*)xf=+>Z`F0$tdT=OPKxE1z`+(o1q;131-4X7{=I$<}c2dtpGz)G3$c6`0}-A@=Gl61*K-wS%l&*VZaWa zy`w&;S1hsz3>jhd*C)EL;v1`6_!=||{5vRreEjiF^? z-sgSfkGtDk;)Bq6n55E#2^~{nmBQuvsEJi? zJGj;-!Ub8%!U`IuZxfgdLt@Q-!N&lC4bBO7;oVFi#yJLZdcdsvQHQ#W`0-6pZ{n0; zzFoQ}!9G>ceCyhrJBxOPc5~)@yjln*4t~`qI7>dd%=in11+)cY8S=qBOuPfz1d-)v>HGB6mIUFx+4yg~G zsc2{KJo5urmHC&ToaWObe40KSrwn{Qv>Bn$@~cx|N~ONUTHzgk1d;Jrrm&kkG6q`~ z?t1KGsigg33)ZSWmA}k99!zl}jH&61e`Qym8)G;f>auS0TP)lR3{!_jEs_P9UxoxqCH9VMbo$@%ey zx0E8d1#sVEhSbK4O9da>(^#{Y3zQW8kj`9<-sa11k%QvRf$6(#hCoXC5)=W*pTpdI zLE&_FEXEV8yHVgTqqt5mlO((3&54HG zW6*Sx+NouzY)x27_*~3n#B=@Yu+iK zjpt-N|9sifV;3Ljk*+zry81f2Sg4y3q4hpW$sRd}h>vzLIzSLBYmwy0H@LmwK&m4h!Hs1A=C0O6WznW=xq>X8iA}Z! zjSe;D=VC*e|K;LGN9e}4%Y7Ctu=?Wdbx!rP$=eoNIx+aQz^Ihz^c=N zrv6Cr{aWG;G?wphz(}!*$4}AT{`3y2YfcdG_ON=iMp-EN7VsYOD_4EYkDL(dUW z$=cYtDso7~4xn&(I5n5T0a1DdreFL|3b8nvrmf6#~!?bKBs(c`>RIJzllP?>AgeDYU9p&kg(VNsu=N-p2pDxd$xgOl-(%)hO*B%_xy-HPC6H7!)H&`V(vuIo<@5b`fJyw^y8Kf&sUtql^>D*4W_pq0-gA@TF0<}vP6DJrz^#tj@_|;7HCNcFWqO!IGmM?|SPtHyY z!_0X;Ve}D(%u2f#n7Uc4r+_#+S0}NPcguvPtxz^1$}^5BY5H5kggEAz-;fQ1^tIX8 zZmRiZ@^!%L$)kp1ga|U(5!Co>gAHz4AZjQD0ojeq!7 z$a+#;0S#j5sD`6CE*JBkD_%-NkVjK_{SIl!q}K9|zS*aeTIoTf*XFhAjyK20w)g3a+XQ@ZBL0NEC{ph# z*aKwzu<(su?fisWtfX74R>}bvef9jEH5aIPpi$|VEyntj*S{05X`*x-{)h7k^qh%h zE(eDEFarKj6o}4(8=+OE;o-vEONyJ5zNzj~M2f3>N;7+E;=W?pWeCB>uN1Si>(P&K z$dSqDV7YQDq@z-fqJf`l%p!@-oCBDX1KASd{_Zd7CdaR{(ufvh(pH8NzbidN0|H8W z0C*+H9KRATx*J9du%F^YscJ1EKxKdU;<+|MnMvIlW%7F_tl`LKfY-3{oeJ=MY{ zmG!qulVS|NOO~-(i@F3`&iFBvb41GzC5SZ&Cd|0-k!~Fq#F!}oVHa+JK87(7Qp%v8 zc;Nar-~sR{*vU7ij%XM&&x#-I>K8%Nbe}L)5Y{9V40ML7Ww(NhF15tu zy|zq*-VXx5(U-5)vp65eFkJf^|9sG_*jq=)$1+eWS_#8-E6?N1?mN0uL19dK1=x~s zh5!(hlZ%l(C`)sol{C4RNYIF1h^G?>)w&D!uS1XWWx&QFTyZs1uS?VLsec{kKRFXM z*H}ehdwf;h!HP07{;9(>Ct^nWk}ayY&sw~1U;JzIk1Gkvo6kDc+i9ynaU>6;!L{K2=#5PnoS@DRLinA*4`spT1EpMhe{$!Lo7;Z1g{xT8YclzK1fR z{6ECOjAq<`N^|uRjf*xq6GJer!t=^hgfk4;DT}cM?N4!Jy{YR$v19QmcW--R{je_r zyy|WBA4h-C;$X-TpG$Ubyf;~|L2|829!?l>d9PE?z%#X-WI#mmp~l*k~_;M^x~$3mH(_2W5GtC5p_ zZcT3REfO{)ie$cItVohaBz^_M21+!TPJ`(Ut`H_4;TIc?ie*&%Ha5$^YNnU49KZ;PmM8QL7G*f`NcTh85m-bQJu4md6pBQ}v_}-w7TQ1BEehQy zW2uXvuI%si5>T5914QI?3o@2T8Y#rn(1J6|qjZrlZPDh2AhaRh%Q`Y`ZH3OD8=9(KzU zR$+Gw3dv4!SWP!Z?8aN_7OG%nO)p^RE1$$J*jQH?O(xla>%g8NVC5vS@-Kcv5w8{# z<$`lh-nmr>RGp`Yz`cQip~;UYz|UgcXlJNU>R)BBlDbI1P@6eW8hI3U&Ol-@0vYmK z`7PCRu>w8sT<;4>lo!Cxz@&jZS1;Sa^_cIF0dzZI7If0x!gZ0rlOST|E$l#PKe0@S z?J61=VoX1&kQo`SSu%m_k2;le0h0K!V_cO&9km-RdC^mJUqWizEEB=AiqWPN6j=~E zc4wm~>L~wsqXZ@rjL_49MIK8ywt38LMl1uDoe;pfwmNEv13mtlYL?Uq0s=H*1<8|S z=q5@wVz@5#gP<6)kC1GL`>KY0hQ}V$n`l4wNKr}K9np~>N zY%T7Gy-xxXz$;sL?c6}Ba@C3RgxBpaJP(eq1d?joE?=xd3WGi2h!xY`=^;bh6IH9B*|0!SS#*x}R( zL3P4eDV-Dt+z#HC=MxC9x~9mtoqvo`;LEK=!el0gYrzGLo>F2T&pzZ*+;d;%!m9-- z{UYFaw4zm*xh`79IYGBK@xgr@%_;-2AmXH&D{mTZhscFYgFp_l;ps7Lj^@)H&X1%yJZkBk{$=M* z(|}C*3rDfwYBv%IjaFiYR{Oz^bPRdZjtOMe9A6;^QVVPc#8PMggF27|nfa&2n8n^; zHPoT(*ZQNH#5mbmtw?OI881%b(z=3thw3|sv~C#4Vz^*thfFH@tGMv80%#7*VD7mX zZ#akDyl}h)1YU1R1iDDzOqbOdqCugk!Drvd1Y#AmlS5~hgK<=D195yhLjo|+`2r&X zRJ@%jkc%QuEV&l8S7Ur%3|{D=rF>5r{*BeYtI>#&KXcX=lxKct`P1?TYzjY`pLCj) zZR!3vRZrEtIHxNJx(ScZ8^6JDmMx_n@ozL|I9VkSZw@hI#ThZtw`xI&Vr>h5)U(7Z zt>zVm%{E=U_El9PBKA3esnh=JDxtV^7Lw0Aw2K{B&~5zY95P|J4Sc?2Scf@$)U9!S01|faz;5F@4s6qp#h!LQP!p!F{+VZ*Cab zo2jnC4W@3qQgPX}EO-6}eK63|Ms2|L^h;YXY;RT4UQMu)@bI&zaDwLQNSK@PhJQHp zO8F7TOf&%BqGT6uZsoeoVb+Wvf42v(%O#n1Fq?c8-iS`F9)e-+op+Z@2~3fU#p{yIeu|qrNwxQRaPfsXiPYAYY%n6 z>I&`nsKyubnGd#i8;-w*B3Hq!IVdkVi%`2^Ie~>KjP!~;pCgjeE#eRutfs1KPWxc3 zl%>~0LZ~vm#JJ~ED$Fr5^f`5hgdFbOb?`r=BiJ&6Chz<DV5LLAKSiaTdz^bXQk<;j@EBn(2AQMF=T zM=OSOV5Mko0wet9_Bj@PoR9NXnnucMy)E~6afMCN8>GiJoGtRgQ;g8zhZ9n|Zud{E zO^KoVNZq)?(O1H^n^b)OdI3jXyVj9vFh(5le`be4>x^$;W8f6AJBl|z(~EDc8x*EA znigzBI!=6Mw5ckqR2_P!syc(*e1O_0RXzi`8a*4sQX`!*sME<`Or>uO3*1E78QD;A zOE6kl&PSL|NuT7^2gt?*k<3&EEr5e}xUlL`(~K^K z%n43i)VOGdRgjRqZjK4!g`!Iga%xMvig4%9&B4bfD`QG3sx>WGE}rHs7v_=*VtL$f z02=Rk+{B|uXJ$eS^All${8=DAV(h9Kn}Ieo zy#j_=SCo?ubL)G|R6?p5^=bD|lJcr)@iPgqa3G|81fYMV5VW6P{HIi%_6RM@5Tz_r z^#Fu{M_4$ea^!83ETtLRw{UjpVWev2p1&JXp!8NOjjxG-A#qIepVVzu131HP6c$Pl zX1xQ-f_j`_p69P7W#%OVLapl%;w5Xw3=DNpG&889a@oxc_La}TXkfHwT83L=X+1_3 zZ`!26oEW2(GiG%v5Xr`SG?3)lOV&p`$PMM=pCr)b9EtRGgliXM4HjQHkDWhiwMUt1 zX5##S1~pb~3dkX<9E6-(CKLtmQ$$}?GN3yMF32st6KdR<1fTli`in0IX4Z8-r)Fe) z1*b8cRvt^>L(X3FmHly0HYX2Nj@=9?-=+I^qUv5VPyhUccn(%`Sbe+ZSqW5!5k`u1 zqmF9tPC6X$H{l1BY!wjTF&s*7vZjqZ8ZZ7VdCmj*qru05J@D&I!sd@j0;WxX`p-Jk z3wHc~1Pxqwsy0sqd_^?k>R-|@3xILECDDSpB&Y;-D4YXTDq3s-Tej<>FK5MP^+hP0 z@$xyEdx+8t9DN)+rbK045b5_?OTFDs9Zam91dUTf*rn= z4QxAVI?2K`ase8OEE7Fy0^<{kuxIgA9=*)4`K}sj)o0+`qiTmJ=QjeP-#g?4zxY_h zgHW~rg*l)4`x`G9bfL5wI<8Q)rFnu}&L?Fh)<#cBI1+@+y^B^Sz_-9ux&HG`2c(B9 zL?8g(bQc;ls|11M`DjdKS!$ZMR^x5N!jtR)Z$z7_-;s)1EUkX(2aVhAfcqA|z3CAV z8}#D0-@u9e5puuMQ@_lGi8N{6Na>jot;a}R%v@S$vpbuKpv>n=LTVSH06eOwH&sGR z-oy@l3kz1vI^1@v5bQO<=oav7TZ6F+CEflTpcE!?e2-E`^r~DSt-f?|K|DaQFp!PN zFj6?AcXIRZ!EJ$IBA+_fbyl*eWMDp2G5dQt=lKldXZgD+dggWoOzsiBP{y@sRJ#@NvRo2BfXyV;h|@+t=S;28jmTNFAUeE? z3Vp{Y?I1Z(QMF3!9Zx6rQN4MLa*hR8)gN=di8p))^2f5gsYiR|=jq08gKy=hN8$d5 z=!-``(zJK2Qu-BQq&UTSt1&d26lBIVz8>bU3b@EogECYEn1|9 z74&Cu9?9498=otfHWAV1N3B^hSuRpiAQqRz`sSNFTSoK}F|^PHJXX)<(%SaYt_c&J zGUQmBj363J>ftlgr*#F04tw{*?~3o@^VcP$r|V;1iXXN{JgGLT79XvC2DC}HC11ye z*4^XI(#-7P?cmSDx1MamdZ78#LCPmI7!3Ld$9~S5`>a{Z4tnO7&w*6uMUAz#qvPyf zZ6QZ2*?xn??+7`0n7gzkr@?cG=CddjY6HRp=_OhJs0EggDg-|v)j&xDw|vPyo!4G0YZu(l*o92^D$U%s6FOzCAcDn2PPr_`}^gAPF|gq(|vh@5^W ze)$%4)bMOy+im_7;v3*iz=lt7&oEjQ`ETPWXUfmG0TJ+HAlZ?3QR-d6@j0wG#6qD1 z?6DmFuM7ljMZ{nWQ5jb~rX}$=ug`NKJZL5-QRbqUxJdaN@MXZ|tbK8{o-m;(c~?!o zG%8RuVv~fNDnYDWO!a!Aj}#dCm!36yMo%8k5>tktR|*OZuOy3NgK_&c@TnGT)9qp| z{iE@D80oaHC7~Y&-mXg~E?#05H}$BBql;}BQb(fcvQiX};1vCY#4q z_SJs>DN{hXr_>_;d5AyVcKf>N7NZa_^Sd}2-X89|&e4|3Z9;g=&^bKG-!Q{i(Dwpp z)gIy7YxfkCF!_wUN4eB>x;7mUn!;R?g`MJB(*N6i)Q(zxu&HxrQyWD6&wsK=qKM$S zMqXaVHYm}FL0IgfOJe@Y3=-*ve2I`0XVd?ONeVJ4pNR2JVt7t@1|eR`^Q$aeC4wAi z{a~KPNqG9Bt_zbnlzi*{x$fNh(yerW&*t(oZ@P~4aEPP;5~K?h8-ldUQqb8FR-=6~ zUYm7=LsVAo6>%ayo+Tq5c^^XsXs zy(b3Hpj9IjxQpr?6TvQyk;}#16I1&yJ(aJuNKE(f;9+U1nhWWcz=MHov{SVR-c8=s z(#4DTy~ifm2rY8y0}N_GsD&tFIgz@MW4eSDZ+bl3Fu~>Z)Yi!in=ZF#>@&S=bAbUV zJl9zgK$}>pFE`fHX0fB}t;kwbP$zf?TAT(TH*$MWkauITG$gF_W{phDUjstQdGfb~ z_6%Zn>}BIX1A`m$8ATDMdDE7Q&qxZ~5t1dT>%2udwvgN7_&GQ|3z z)WM5?C z0R^0qhQ7w4kXs&J#GWAYliE&dOBM)pfTA1(OwcPt<}(7`CzZxOEV#m+Ou2PGdj0Or zx}T-DJttTjT#sU|>?2GiEbZp0JE?8x0>;|vSuBH*2vmv_AXG_*WvlY>!2l~0Q68Dt zJoiVwg{Uce=bmjn%TPUqq2N`wQttloU8`$qg&4i~&Te?1oZdB}HE%qtYwmZCOT!B^ zCxJ!sN$n%-t>kgv_ZKWahcJyYjF35Oq_C=eLeN{)2@UG=%|$kY1Sb+c#^J$T4DEJ# z?(pW088H=_YJ}M)MH7lbs;5yBBtCz2=0-ualW@{_*+Fpfj0u?Z63_sMn~rF*2B)^r z zfDZaUqZ2S@T{6y(Dgrc+)ESu|xTZeZ*|A843553j(-)~BRzw=R=`K8W9SO)VJa%x+ zhz!^N8pW(km!7W&M@LJ3pN5zsDCEhBOk76v`Xz1^KIk;~Z32_7C`DJ3HFZw1Ev}6Z zLFwDyzDQqF;Hx*NUR?@Smuc4*>AIJ3)+CzJg2rrL+k$d>q>TZ0q!5k(Aa@ZA2VUfR zIof=^PQbiSZFdwl?ksGJi2H&+jDC7(q!+fvCec=tX(^4Yuf8L6Ad3b7Z_Gty+(JK} zPtg`>bETIoT)TA9?(|eb?VG`BrP4XcFr0xV(Gg>|s zl!?9f?foxg3WVZ!&*(}2PYrF$p9JfCyxe8WYCHSHZna~odyu=JH;-3r(FY$`=-+a|MMv`|1n-OuK62YyX;yu*{hon0s+^v|hk0yW4r~NHlv<2O`$pJe5g>c`v(a zjZOLe*=^yDF?1JE``|Elx_+DDJ7OK+zkgN8j9KyCp;gr2y2ZE{G6DNTWRv|x``wCw z#VktZD672mCa$$S%sz&eBe$#^lQ!G;Rkb8RY_Y6*46v+pv4Xflm``0H{|%iY_ctCv_rEflN%NwQU`E{ZK>Zn zq#JuaO!{CI18&KH*-)J{?9vLjC;+|vLv!_w?AT*=hki$u11^xE;TOzLlba?iAyVUS z$aWgb6@AT+WtL%<*nk9Beo@9rH>HHcs}V0d$#LxgZb72pXoVmk z@K;%;;}fC^WQsVIg4q?1Fx;sND{d+ld4q#~{xu$4T+2Q+vvmYf2b8Z;Yt^{fGLr5u z(K)&GPw3eI06hF!i`Y7@o!+-OHN>G&%5!&9Of?s7IZtwGy;-N)S1D!Le7ybfDzG(K zP1lShZy^YOq`DC97IK8fUrlEFNII738s6tMxo#`okmW912yXD*9MQ7KF(7iPLkMhC z#x!!5PH6M+z8dL)X!w2jAPr2#8JEjC&$fkP0@qG_8^Be!q_zGfo`C{#Bm@@%tr!#2 z?t&9P+*aUY0h@8zLa!h-zmg;{R6-&qcV2kJU@k<_hT843HONdq|NEjvFifO`LQSUP z3_?z2IEXd;lc*G~D8O<`?BvZDPJ%$C`hee#$HOl`qUfGD`p~wI=1cK?pl&#x@uw6# zpM_>L5v)luFNEM8&`h>G27|f%d@y0qS;UzA0x$ixo;3l25|&AcQIKLL>@yR80(xTD zvknBs;PAzL5YRJTPl{^DYU)=5VjVYrA29%AAnk>(1L+S)9WJR#UF^~J=@&40vvs9` z9Gylrg=EZL?$OhjPYs*~4--6?@S4$i5Q}8qmFpM<2p1T&J_az%>ekHW=H~jsDd+ma z+M@ZZvq9yldJh;)=Dc=rZa-M>K@h z%37l_(|R!~Z<1#Mpk$N_BkSLDx?Pt~H@c)q2dybZtA3Dn}n71VJ%?}!U(Bh@3ry~-=!>c$R*;Z^m(`;4sH##8fx zfjjNW4ige>4CCn=+GkropE5eM!%1PXmRXOgD)0&SOH4 zch-i?jzKu1EglCGiR4X(xCNONir)4F{jmaf3((DW7zCI<iDnj3_(N1-?WS)|LGRMdyPI7UU#@qPhFqp^IKqW$CLKGEyP zRrALUjbW>f0f&SN1OQOkl(#kpnOnySx)y_d+Z2TnhHI89a&H0h4Nz!~a=?ul4;Si+ zD2))G^sFrckSZ;Khl4R*Ussm&jAIkDGy-hNVUqy`R*9{l-1W?KGs+>4oqzgZI|!&( z3Y2`CMD2=*C4vEWM{zqIR$?I-XYkjaMl9mBsj1o4xSo(76uYUeInHP(i{0)!b*}br zK&|$LUh}$1Qj}gWoZVSFP+ZSu9HYN0gT_7c?WPWmsdB&D62EQHUuzndiQ@clN74-Nx&HBSem>O* zRWkvMIR@kfF4ol_t~~Od+6`mBzS@{xKnjoy^aBMgFRu=-b66*rrRnR1>BJE`w1KpO zp)C`|eCM!BmUi@sicrzWKuq%RG5jKt(-F;#0mx%gg|DDS>M$!n6xz36uaUwaZUH92 z@mM&U(G3^0JKSnnh(zI8F6AcujDdmM)icjPalv_DKxfM(ej!VdUVKIuh(IA4fpnup zQKv3SYWcC{TWKu3LubNtC0OT3kLu*{7b!KkK%DclZmXl6iMAkapRhEwdFKmM(ywHV zpnJ^un_&5{p2hUh)fQ;qCxY<}%+mmyBgS>xoA1sFZdgs{HBn(1c}* zaMRA1kPOVSio@I4rC^BTa~yjq+o=I6gW|6cyHL618-K!OJ|GEU?x1Rj=Cr+2P1jGzKUk8B>E*t@>p~G>|kYV3@nT4%_2-X->fT(N1k;Bm2YiBvjP8CYM zJq{m0BzZS`0^C(VB>x|8>S7@vZb&wylewhwM@e?2W*ciT=WOZVFb8>(pl8M-uS z2gv6hp<=m41-t5WfJ>&fpOWuHU=OKL~#B@R^4t~=*5xc^rb8XkMZR1K7>6WGCl|qq^1aPV8E1ttgC)C!0 z!Mc*3?&*X8Z%QNPUp>-LG2nYs=OHAMFGRo3=>G- zQX@zMhWl<3KsR=IDsTbLmAVUwJyowKX)*u~dA7f|j{IYy=+KfI;DRdQPqUya@a2kG z;U&4gqJ1-jDu%iVTN2pgKx&$C6gW3pN4rc!e^&~H2l zRkuPmT8;#i!oZPa|^L`$)Ui%X?>PtJ_>-OLet%l>%hwh98Q_a6A+>G-T;U0)(wUg_oQe`99+|j!(x%F9*7!!&yN^OyiUEDoRIw+~4nu-~YI@{=P<2gBDJ1^69Ow;lE06X8Sz=Ps zXVs!&)_{ecLD+o<5OH~hQJR?A&(sSIjWo)i7NJ5(!N^qO^sZM0yofp^oU{;+LcOQQ zEo4uE6;o2A5bNXFEz7J$9&;dTVmoslIZzFsr4!_*<5jV z+?e6Y%?&EDy76gN7-}0e+SlAXiZw(=KqTJ|;ue$H z!;?JA3Nk6R-k2)yNH9*RCxkm-?c0jAEOKhIMhmuZxY;P*Q4nQB4%3NS=cT8a;lywv zsTX4Zzzq|f>NSdsSozz^+!Aqo-Ng0zMsAOR;m+<5IUkH*s&j3`y5fBq;n@lq8@Q~B zAys0WmpY&el7D=TO%E%L2F3s$A$kSH0KG3r9e|r+yY1wcvbnd_y$uX6R82=lpJ?&l z*P{8)660B4(!3JR->I&KsoI=>_iaB%mXLPb^YVHI6E1A=v_eG=uCg9fbY-iegRvvh z)3e*xBF5umxpHdNv^4ADIp_Rp9qd45`}?*ls`O9zkHu$DkJw}48CbSAoh8?pDO({A zHzrOxV&4wPgXQ{$oy5IBc-D8;R{e%+6oL7aBqo0*sIy5QiMtnoUtzF#{Au}jfUXH? zE*cx!FnR$?iXmNbA8!7AS_@9$w2Z;YCu7yP!r3?D0Sfxu%F!X}`4)wk@o!6?Li(}g z47AT>4z^uA&Rf*>xXkw1AXbdG(U-52jxZ}=h z;b#EY-&<(e{CW{!S$A@-`ZPD)xm(5Jw&}X_NAaw#Zmw-@u0k5ep1Q!Y{=6k!p?cKU zORO}0xF6^bxEdm7@X*(^vt63B3ay_3=16)JL4@DKK=;g;9|Hb#A`~GlACCF@Ly+xq zI$tAso*(o<4r6>>;T*`_RL1g^EbIaJF?_R=l<0f{LJ&<%;!P2$NIGcW(Qt{tS3W;6 z4lv0)4KAqv7!r%0fdTQ2dn}glj>oQ!03Sw+Vcf5B4Kf;%3nD1tM|gQ2$7){(9mhI+ z_j=hAj9L^Tar{|d7}KXJLScq8C820F6LSWv_gaDDi0?-yPsqw&Iio;$0#@!hV!m*1 zFVv|4&)AQ#$lLPeoB+XXy|}gpx69mhc!0;cLhu0*YQ9(k;M&s~qD;t}{W+Z%Ef1E( zcUT2HWwlLbyF!a#0L==HcQKu8U`Wj%kq5+5-Z(~AS#;ncAq43lN~Wz91Vy>5tAPB6 z7LG|eg%!@e6m8IMVW9c_R9=&d)VlusW zi~=eo0uK8vBw}+b6NjRF_~s9^veI>BUZfNAp0K9?)y~nRq!FVQdh9}!*;iQLN`h*J z7iOycj(Jk9ccq2iYW?pmm&E<_9Vq4lqqq_iL`(u<^$V1qwHV4Oj8~$h=3#$fkx$pgg*C;JE3sG&QktTKsePdeZhz;oB|uZP*Izl@>{#EP9uQIhwpD4Bp(v-e8kJzV9!M_~ia(tUZ`#{hIwslet{$NRJ|ZdAj*6q@ z#VE!oBPv3-8N^7^jr|0$YKq9gYA~KB`y3a;98Fo@EcBR%zt_4u)|8w>D2`Z;P|E$- z=iU%|SVTfAQLMH;o_$OfbW$?Ck>DG(tM>cDG@Ct$vSoR_#+yO5K%=D~uydM1B9@?R zJy-D}3icxV_rV%(D$zGi@B41Vvc?mm{3-;-%t7!PN7t$Afw7fty1|E8?p;8xFfe9v z#xT022j}frn_wEz0gi$c4V;Df#~SZzZJxuU{PCz^e|f*Fjn0#qbLUeY`_>`?wdbQ| zJ5vK#!anEf;Iq`3%hmXOUT5sZgq9?C*BT`I*z9h56U{Bg*$VVwFl2;kaE#8jqis>~ZVqKZM1MKdgMid3;;ObC zgMGxdVi44w?>Nsn+1nHj&NOvN$Xy3&3FgZXZzfs84u?~pDp^#F(+Tc>uglK0qleO;)3x5XAyFW)#&Zh&e*k0xLy zl5}=ZryFit1>YQ#GD>V`{x8inoxiF2DQffCKRAArl#QRDQ6GEprX6Y%lQE=C{5k){ zzb)gE?4d}mWn7t)*G7TNT8AI9LJa zI`DIUrYzlff`h1}jC<&jSA&6tedbvqN0y8VG#PT|oZ7)^G7Iyn!6&I?p|W)N62*n) z@pbkL6V(y-aAk)t1-#4)2(q5{`qeEI=)U_Nti{E{XyyuRxiK# zK3U`C)Ov8X1S4jdiXC=TD;+IRyP5J~h`#Iik7|8*EeiNzpN849n6FHTtut%`X5lH25(!u86|BFr(l!n%zn-!E5Y7^*IRxr z&*&wsx!GoBqRvd94Fwo~wJUF@d>nF|23SN)8bcOZ_tmn!Ui7-ym;jWV1%6okR#J4* z669)?EapG|i^L%Z+O*%fHyw5$L^u7$TwvWhq2r#EC70&qy2sOQ`!nOWk{B9-%JjeI zxX-}fj_~|+i>T$oYSY!SG`IePCxh%O4;=sK#EX~HlzQ-6H*}+@!Q#sOQlD+aD6|y2 zm_@;*I0I_uKPW3PyE4eU(N&0pN>aKxR#6Ta9NBfu4SvJ0Nl5Hu`+t<1i2%u_^+ZCV zbn=np?Q>rE_iHHnAE7>y)5yN?dp-~BBzhV;nSAnR#y|6*=8qGz3N4i$)*NrXD_&A+ zrr*r}>k+dj12^BF3=Za1pZ{w@6MWy+o`(rypi@1+Wce=^9{*tCD2R+NTfJQ7R72Bc ziOJvey(x4sIxu;*Ae(Blk#J62{+lt&mKq~lO@APMjx>uKdeJ3`OgL6N=7bGzbNgv> z2P@|B0~4vzFU~U)2?u2gJA2SLQM`wI!$@L9o5@pfEv*a5Q_{Fr>JHsL3D&EoYR30* zi0@w%S%aRBXqYa3U8AQ+9rB~uM(h3~Ve9v*l&Lk?7P~V2$r4;c*Iv8pGV}*UQ@g0P zx8M>q{Xv7lfmVx`zz@n1lLxdUKpCYq;r}{prj`pWNyQ`-Je91^b>#n=nf~7GYJ_>Zrm@= zPAu*9vdlirb2ba^Gc)CTUKne-pBE(i*dvj)G+gFSeq%mFhO)eGaR1*)YKFXNBF`gA zwaY$Tw9`Vi&$p428apu)Ud&epmI74B12p5mmGPVOHeP9L+qhDmYWAo9l@7Dqzmh~y zYn%%D5t2Whp1+6bz0w>_W$@ivb(HDAHg(9^WLaz|NS4wt2Hb3IMD)2nJ=Q+ z{tNGRPfRbRV5uOpT@i`&uJ-i~uHJ<5wnwO*dYHvebd0gC)mN{Lk!F!hD)|A2CV|50 zJ9|sv(RD;7*yJ0{9Pz8E%s$`u!^b4Ot0~edcoz*W@wFc`8BG&m6u|X&*d2GLZCv$B z(w+TB)Sv!3R%FMm)s&;(J^TMa{=Iy;KUrJ1_HzEW&-jROm|{PSJQbK)a~5qDxcw}h z!Ib>JQAoh&&}_itw7h9dveVX<8S8k-obhgLFQ8=WRjd)<5!sYiR}8ivIJUPVWaBSc&`9TmmCdp4@$Fth zS(!7ZXO;*#!{9=gi^*B?f$7vaeUr;qpaR9TcN2OC?Y?e6>- zrA5^fYiW$1w!2YsBetWuXg?h@%)qG=G0Lxl!6)EW*@aK!v|$q|J!V^_aF} zttKrsb-zmjQplckqMat86VW6cW9;11RD8*4$EGN7KANQOl9BN+-&BWXgl!m#bta~w zr!t(4d&T00V+Atss8TFAPmTm|A_G<~J<6*=d1N!dt zGdiDZ;+LdUX0AAnM#4CW8xqIo3>iV5_gaVW$GUtpcg=Z^{M*6f0Da7~4hI?9xTxq* zk|Brw)a`kNl+8+BeDd4)oZaR-J6Bw=9ih+UX)+n2r{q##d{9asbU=Bh?NV_I@EyQi zl1YdV!ez8OvANbufeHLf7RKpp(&gy9=sx+FARw6`p2u7vIS)JTV}vzxMWPFC=3;s` zG$(04DH4N6$A}U?XL=6UMKpG8YU7Ml*)1gPJ2oKjrJz0s*hn8r&QLHSMHH0^&Z-+Ro6laRmUHb_D8#v(FYGmZ9%d)4k}ePv zwWqUG$-i0~;gY0;798ODFJT36gWAKh9NZ%)CT&=FIAKqK{&W<%%rA4FO2IvVK9xg^ zdX6WTE(gYf*>ho)9B}AmvUgS4?-Bt!4OGqan_@5r2G^R6OyG<;yh|NV(xDW?%lL6R zLn2Xs?T>62a(YXTh`ME`a>>!`7KRDe2^2qR zVQvaDh8V3*adLLg?pXC)f%)16E2FifTM7Zan4Rd*Mey0%B*vzLwg{S?*!{7jc8BN< z3{fEy4IEcwNdRY2`vVBAYXCU6)~6QM8u#Myl>0WiRB%oAC_u1y zM2mvp74`+N+Ew+2qZGYGZ;Eez+}LYT6b5_^f`e2$V<-xQ4&Wt;PNJ&X+=TzgWe$|8 zROMc$dwB>I1g6$Vsr@8@F=GS<+>E`1Z)Y9BnC4sjx&dZ2cgYkBZOSYW?$IQ>ma5(w-oIWy1Hf|0SOb0L7y$jL&_mi}h%A6|g>+A( z7hUZIRrBWkDy&(O*Dm^V!Mdq&jAJ2gW{h^MREDTe?Z>Jkew!bK{^IcN-0{?YscMaq zs#Ov}TU7$?W7v=c`8DqWRyNdoI5UHBya!O!5i!i?L&o772pZDIH)8DDdyDOFR`b^V zOuUkalyuJyz4~1<|B$qytDf4m89xs|QYDB0A)%(%0#F}s@99FvKGI5k#?No8_YJvw z+lMd_Z-b!F;ZQ#zzoSOK_2u3cP*7MqdPy*_$LCfOUO1g<{b3s26r1$Sl zdCqGf&8lZ{xMkWeY`LJ_t(zO>954fqj0>YG%!=zaDP*5Urcv3&x|M)=s($aup-@#7 zenL+*?B7WJGo6v+69F+nY+}*zN(eWA1Hn`Dz@i#M2?T*#Oj4?JIZ|C1UD1AlYv$SR z^Q{md$rH$NM1D0nYI-`T60g;TLxb79R-Rrex-lzJ|UooGXbtc9f24C*7`k<2s|_I$Sp!wt2fO zIHA$}Op==s-6>iXTiyIz_|;vrKIp`8Z+G_qitEW?8$rK5GFI%R-IvS0DM`BprTvmToo;dT2qyR%SEKD={d&k)H{Xlh zO*4PusUhF^S^v61qWYREgsQjK70L?AsByNajNqyUcWvv0mjY6VO42u_X9JPDG1=6E z*s1b`;&u`oMRdrm&#O+9^Y>pp$yFy2ujIomYs;yPi_cNq{j(8qP;^Qp01Hxj>| z+tjdH@;YzbnbwRu)5U0)Ox1*C<{8pYwgR}Ku?oN@{Mo)+6M#~oQu1t!0eEZE{!oS! z1p7<{9|O@nLSLxG)F6dV-?a5@DrV3VwnWh!Fawc^a~X~Y@d@@_{ID`4?~mT;PgRAK zrmF3Hiy9mNjlR=CgGuUS?_iXg=f(&(WG4PB9WJq{2wUBLv~TVYQx(Qh2kKYHBjoPr zjtsu#jF(tmJB-Eh%e#adz_F~T&HCn-UlIVDq{vrFbEDb*R&QAuQLg7^e0=Nk=oXE~ ztqSRTLQ6BxMQKXW4JQ~G9!CT)qmQ)C5GqH9q%LcL!>u9Q3HroHAPUJ&4pNc=-#CQ4 z*DZp0bjk*%XwV<_v2$Zo zhA>fWy3naAa>}QZ{t*HdL}!RKbV+WfWyBJDjFi_F2gOxOOZeG_Me`!OMDqE%(&$va zi$YL<36o3FYe^)q?X}@}15toTH7ZRLhsz(4%IU?FV=8l~8;tcPj8W8!n032=@uT)d zQR_AiZei@&#>d63wUM7pCy|+UF=Y|`d*0sA4=wbj&Xfe5StfZld@YHu?skc^eA|co z(`Iu590ndt)>(r$4ba_h_7j0oEo(I2OYKto+UUAvCwIG43Vh5&e<6(RyDz?i4oDDb zcU%}M$V>*H=AvQX000BtGUaA;fZ7S5wP@lM{;XEM482^+t-K++(^EG~L;9xF@XT8o z{FLiiaq!^c$!VAW4ydt(GbL$90x9cc$g_$Q1b_)OJgf>3&Qa%_lma?PGZ6-T&uCa= z`M%M=D~mE`MSIK%%?)XACQwasRjYQ)gL8}n=kRgP!>mO7-oI7%qCAeps zXaqEMqE6|biFM^nASX4yY+eEALhT0g#pruLs-C;DX(8ay%=4!>z~%l2~wS8={ZsYf{iZ{b@l5 z=QoUj02tLUi_enI_LKcq8UCy*ddkJTBEC_k`9}1WwfiZvQ-=vG`Kt{%Ni3kOW65ZH z4`D@3r88;-f3DJi5e$a)Uwma@d>(BTptXstd+bM6fSeK_v*pzfNrDj|k$-G7b6fz6 zx^Vk|Mvsx}?I~nnj+~3Sj996cM#%)PpV>HHh3KN_5Jx6N^LfnXH7IkK^e`YYPWIh(_!dO@q_wu{r9@%el zD3*MT75uXx3tRz*R(T=9UZ>lyaDTC{)$WyQgUL z_?wz82m15AVCS~hHAyk|Y5l6GL}PJ@29(fh*`yphnT-)ON51|=e;W3xielEz#<00D zo)s!oiya8w3P?|&5-rqW@o&K4f6~^kbiFu%a|tK*!&z+b&>SL2}8~&fH;)Fv!6L z@s7oXLi?aef67KUiD-oa`F9HIkFrRaB3ecQURgC*w)dK7s2?uF{zJ6wi-rJqxVUib zfc9=Lzlm$VZq)wOc`FaAwQo9PVjiuamB<(~9rJ|;+|uNFrkL??4a@mXHLa~*Ssxq@Fj_dm4$ME`nu^Rd zMgufJwjUpD>_6*l>^=PvKGXC5?yJ4ct%`3z>J_2M@;+;5Bk%bR76Ch@-2LIMCHC=f z8QDx@z*}2%-0{!4G6fEcmfDnPE3@jd?cfGN%mNV#{6n|}{8GZnI-4Q=+=gA5b2xxo zBcIlWP1+{ojCQ5oZZ}$7;~G^qw&30LFV~k+{pZ^>({k%Fv!@Ne(#bTa+yzc(K(Wi} zEjL1n0#Gq;fMR2KOQ1k_gksTwbz&_Ax{=^mJW+fM!vEM zt(jDek0t5<2vI1STz_iwN?%TRWM4#e{Ti56c!GE{Rnni%Sj}RwsKKm+vlfe2!_}6D z1-Vze7WeYYaPK!=0mhN;-E!XNXWrd){oE2Tces}vXVK}c=3ZvjmMW&43+7n!+qqal z&y2nZ?~4A(2&d_@mRh~e(*__rc=>a7<&<3DCWOU)4!(gIwO~REWq^!ciRcIaM24@u zqI<#_YZJrrUNK|ir*e6PIz#9m?;~Ayt_MM=RyBPq<6sI`HSVj%S8{PPqGYnPLOWJ~ z=3+aDRX0Ls8W<0@rB;K$T|E__rTt!}cK3Z|F;E~UfWeW_P<+y0WO%YTNG?!X76sSL z0j#fcL)YC8YNZbMu9tI3y__WQf;QT|l9+4qL`TObz^TooeN2U~_I8}A;H~5` z(RLE16v*i)30<;efQp<*bqvV5aH^4H`V5e&&kQf*L`A$;jxkm@Zball^`~f9LAAj4 zp+ZP$kV@UO-=$dM=5tDM-|09^+48o*k<;CzHBR#GsmDyMHz-Oa3-Ky|)ZoP0&OBn0#IwXw+8 z^*zBVIPBX3=fQJ6;It?vNn{sMcZQkExn^=E)2^4#F(h}Yoi}>AMGNzV@{OTO3=LtW z98SGlHM;pyE@7?2Oh!l7(R?F~M{>yGD?RF|v<&voTDfX{V{reIa|_>^h#I6ZX{FJr z5;c)rgT*w{tqML|zp@SzjI6g*&;aI&=DxH8BVKra`!SKk8~taA-P-uP7d97-V_{|> z?}EHpy$G|XDGh(|*aNiC)n>-XeQ^B1^%9^Z2N~`c?r}+d#i~cJ(Q>}FaEWb{W*2&p zI=Sc?k=5@}oSm}CAa)YFD857NW?Ck7T|f~uZi?dW=?uYKMF&KuOC10cGace-q}1bo zJbn36CBxYuCY}*W)B#*gk`qW_GpcCu=5@Mnx9;(Raec(bWq|KBbNz-bETA_k16e2H zx1o%RR4Sv~FdT=Rh5sUQ-!NZ7NF?hax@J-1_o&5`>Tae3fq z#-k{$r_JxVa?-nhmyG4&j)%x-Bu*8}d8iRUlbQADOKWcFUm+dz#Pz`frwC5oQF3nc zUY8LoWjbx4V? zltr4#Wsy|K;#rEA`bq{HG38BXKWX(&QHkj^9-Sn3rK06{e%_n6U%^{ehO2n5cnO1h zEbP0(n9kz~O2(UP(?|S!yI9i8=6guE=^ zP#cU=&c+!alPEX@Y*pls$tYvbJ6%|TxO*8n9?fqr$yIY`6rs_gm7hD`W}^QCYWbku`Gn^Yjp!Zj0LzGz1`yWr*VGI(d1S3|;(^ zK8VN{Z74koh*GY(xzxPS#Ab3(|%Qd~-}|GijXbp)sNJg71Q2=Z%6egBa%5vQw96 za~hP4HcScS?_{TJiy+yYdSJ?#-%d6-L6J3*Qy}_{8jfz=aCVCRO+T$suEY59$v5l( zEKhk~iaS0$ukluBXSAy9AgidtVVYNMz0&QHeTF5^y;92D@nnC!1Q^g_$X<0Zc`?v_ zEXX5p4+YV)F`5b|y(-$~AQYdlAGlGEc_>G$?9rRV=OZ@D7Cl6xmp(}VqGY5Wd4M{P z1ffVpB}*oB;TlyHn7o+5RWb=P&HR{RPy1r@ZA@iR-Q^Tr4ICqzg0!HGh<`SkWiz+{ zUCl;w{dCZ94+Cqk&6~T%a@kXc5+MfEby2%y4@Z4M5ZwCEH1?X>;Pb8Pf{DAPDl*2q zz9!>%HdZHTYIc-1-C*6Kv9Qq9rZMSQK8`b(rwT4}mLi|ru{Q&3oGL?>(TF@sK|POV zQ(-jG9m9^D(+QLZlvQkR2bR6nMBUcQ>_ExXfH9MHj+6lQez#5*&0OI59JacQ&Rk$iZFxwa8?0rgVx;O$|- zzYA4F`3~R-hI5ZFY?QzOhJud$3SkoDBs6j$brhID7r8wt@LFHRWWo8$s9IyhoKAF_C3PGbH-nL@LWHLXC-_94oUEJTqpob-suD>F z3Lt^#DwGOYS-`rs!w*2wA;_kZ$Vbx31t!nf?3{X8x=?m1b~s9|S~vByWls1PU$CMu znQiv6@i05Np;|Zi3Tm#|W@y6#)Yj7uyMD^hZRB4^C=V8ky)*RTgVqXEzDc~4!EO6H zJ|7PNbNQ718V_CC|B78ex_Bud0xbHom(m)#S(9z#cbXYptd%lxOjq$1H!ozZO3sdDPLU0ySOyOc`JL;BXWb3oLClqCW}-RD>2*zsSZ4KE6w&V#npUTg<-w~fF? zxt6b0baA00>Ul1gfKW}`x+Ma~Lj;^n#53TsAYZsZPgr-M={Q&0M#Xr$S zG+*N7_drC{U`SVpu5F{puRnU1iPPE%)YTo3cQ-PEOVFA2)YY|iwJ@V#4m;|IcR)fn za%ruw{9cl-!l0n+{^s8H%LA_{C*4>QT~2!CFu^T_2FDK{Jb=P?$1=4i33hnra^ldl zM4Z=G_fX9n%X;{x!JmODkB<|FxOD;*DDekwg89q^CxLose=5ZAP^`=12gGdPa#!TR zRQQUpouT>&c~pbrRv3hg*0F;w_B#RCQ@hk&YM0wzv_s^UV%E1h8s1zqF6#K=zERJ7 zr3!&{^NyK{n{KQ2y&IaBN<>T$>Ua)?%~E^=6#~=?nf-t}oPkwp?J?m{933S*@mdN& zxk9AnOkgjV^5-)Q0|x`G?Z|=ZkC-iQeFPvZ5seOjen5_24v|N>&c-j|xn7ZL^K(Ev zd+LO+PBOW{9t?p}C#Qwv=bp-9HgOLmPa6k&oi)?mg@ z@!lCE6e2XxDCQ77FNhASML+peVN(DHhvTZEa%k4;R8w+s4N_eYb^ob)ttev9&eXCx z9kz&92(T@y!XiPu?ESXFVSgMUEv!bb-_sO5AXiR%w`fjU&{wwC5{g@2tGOEd3Q$Sv zp2lLFV*a4Yi#$5v5VnuiDCrY88OBqjA|=qzxu|f&nnyFhjmW-*06RV<=?vD;Kdvg* z^>?=r!7{JmhVs|y!v{@A@L{MWzu;MLH0%xM*r{?!{bOcff(X*!TmZqrPHX%l z$DyALVz{t3_^}e`wt97t}h5_8PFL~=Ria%$c1*}{|^QYGj z`D=3==sV*)Fv>i-BS~^C!q!Jn%m+J& zR#7b%0lI`7`3! z=R8Hxg6gPjLPK^OrCm`;4UFIVj&a)DA*aoy?2Dhj$d&wJy%8jALp7EhU2cv_N#m@HyoR>kxJXtw9u`}^B3o(iFc%G)lfChRy< ztM(eE*j?B?!I-3yR;gWnPf-5~MM}0 zqu4QHWEX)f+}%B)$U}M$kxClrI7ld7LVbmj8)c^Q})c-}~Byg$`a zo!E2NFP8k169Afs6!&Js;iW3BX&w1s*jlT+_L1_Mvea;cd`4%>%VP}d3PwOiQ7=DE z;^NIU)#JtB^jc`?9LkzEQLq}%#W-EvT>XDSobxf9f0~AySpT>RMXY~^E9%Zv@eV9D z)hymF$LQKrUE2j?i^A-_HAg#RA;*;Yaoo*vzT?4l`{C|9JlQU}o5G~hX1=Qpfv$X% z<}2nDsuZEH8==!Um~;p0@ARoG9e3|02=mbZ<V$ExMhteA4A;gtD%lhj zTC8I8{D;TedmZO!#pqsRHti3xiV9f=$Io-qcVvd??+>EJ zN<~Z6ReoQzuIsQVCBk^|W+%?UJ7ng(pMovXi(_=*}CtSmZ9J zz@B(h08iZSCv}&0|5r%ey*aW_4%Vdf38HrmfAaT$lg^^|ykb^-{!R_?&j|m(e+(I} zr`4r`kD|_{?4Jyu-uUT<-vEz>S_<)JNN@4izwqV7_%hFu-dlefR2jQf_PZG@UiG^l zUD_78V=HODGqtU9gTNiZf>Xi* zDHmR5^3Mzpo)Bcs#vH4ESs&K{@?`ZlKReDS>z(>Zcxc%AZ4WSDeQa+}O`t*L#{mix zPJr^xeparTAbudVU zfdj*5%!z)}c-vH4=m1tC#FtFS2KLAbeZre@rZuAvy#;W^d(?{Ko?R>2NDu$MBApX% zy!Kyk&0Hcy;WF@VQ)HBC5+o;mB;Gf(kXUkqySrV!zB-t7?88T&-y0;rKm=_abZ|af zzt2f_8Yt0UclAm}NIN-J(G;e`S-pTUv$oW|RvGt<$tH6<_d~C<3)i zMgg#v6}9oa^LXpY#;ctJ^o;gscYpifpRH9k3Ld2kzBjBH^uq5P8*a!@%L8Sf0DGlA zCFXJH#+PEj8GE|hz~CDzDL|)&c+TjENvRGO>X(quV4Vcp?UHYZ-!6&H8qtS&Z8YB7 zfs8@}7OnBuy*xqgfX_wS{O41maDMXmXv>nGi=ZX=N<1KMmf?N2YY2CDD~fMOCilC4l;VnOBNHWTgSS7G1X-ZQ23O6ho{yt%Y> z+&Sm4QyjQ4uU9Jukir@IE8W=K+1=dOfh$LzY9)f-jwZ@gj4E>Rphh2DHvm_qE9l+E ztAkzC!NfY`v8WO;v^GTqMbVE7ieP82YxvpL#^bF$sfS+{)Wku#sUWtu{o={4T(tOD zPzakwC;la}Q+R?=dlS?&Ul6<(6-UX?To^$BDY{k@Lp7prq6^YcP6#$|aMm@56^}YvBY%53osOIJ`k;>ifF$%b#j66OsD3&f4(fWI>KLxGw)%B_n4PS` zzea?gzx$+08V{rrLJ>RY*J4>%NdTGx@-0fri^w!O79|tLA^;}DlM}$Jmnr&q3Nw2& z;Fu5x8!uIFf?=L2q;H#$0y(K;mY|{%tMTF#vO4)#;i;JOvVbc-6J<*@StA2*>dQG=H8g9>WOJUK5+!uZw&@Z_h$2~}&>;HWLC>%KDN;`X zH4PI|ehUbIgrYc|aR3pjuIsxEoMBu< z({i6o9JIZHaTlRV&L${nB}Xzip#*Mz|tlYZ+N8d7p3yX=H}MRgAUxDTYKBPd!4=K z)^e@|87}=u2~4zYdSSK+(2yf_a^-?CgQ{X@4kKjzFk>!xXaa9@MT=Ya^ckraxw8D? z$ngC=y@AKkh<&{NiqH3|qpFYnoDxQrPWv|I9zlYLP6i#q9)N#x|UH}|@Zxm`DP*T2IUuC#3oB-Z{k77tUT zU$oc6`3?Fi52$;3wE*;_5?HBFr*!c;1$udO%Ozk!HvbF)ywx4GG(Z-2@67R&c&j*7P1pGMRN zJuG`24i>Kc-FbGnJ8~>JPWsR3)aEzy6xRrPbraC|NEq?w0||Q2znKp00`Ooa*U9%6 zsJKaW7U%0v1t07gDd=l(!*=*sW!VC_;ePnT)nu_*Uq=?#=`a1*BK=ssRcL>>nz05H zSV-&{)G<4J(~mh<6ripUR>#iiXTz?Lr zlXu`~hLh8wAo&{iAy!A}2}?*={5(Ca8ZQ^biabYA915JsUYz`I`s&sWbc0W){o|># z&&x{`#neL`enS6UDLd9MK6f?W$-2*hj?K_RaiSfGiiJB$-N=!Sj>&|+c@l&jqAiig zn1~O2B#r6D#q$)oO~G+&ZX()K;}_%mv8BHVGH3lD!_~{ISh1>HEf)p$f0c z-&^hb|3kb0cNDk6EOX`q-9ZEgA}|r5Z!{ZlD*aR|f`Y34x`X~gKj#j7@uvF=1^s*ZLc{ZA2E8THhxj@PC`(9r3_N*D}%L}+CS{hpp7G$hT%K4}xNS_P~3h>8=n7zH15 zk2pOR{T!Yab_ZLw3Ine00A5=H98;reXDz>LXR7w2s{JDG0vB<)aP=pb0{?ZpWm^rj zTw)8F((-bdbC2Lgl)G-i$i32$Qe<$bfCIQYAmgPHH8cBy^sl$D*_ zZ8*9<0McIoz+DMMT^3({*Nn5G)~w|oY$%EGPI~pN^55N?)$z;^867}E7Kn}2xEk}YGtpqL869?K6r%kS)K}1JyOTYF?NJYc{%9HuF*e^a zz*B_VxNq1?G&B`lX`OdmK{QLCSb%&FGKjK?xjeGHZGws;ik5_bqu%~MpTi?u!RiPT z(7oruDF9533kOpI|J8V95b2qhI(cf|Jh`-~e!iS?H`8lEA zVLYZ^xH-6#&X@Avqkrq5KhUBgps71eGb%5pcO~o2lujap0VgMMBlD2nU9@a_!` zVLD~VLGs@P7&=til8HT7TZ)|L3Ng+KI*Tz7_vY!zE1NgDZ zK1|O0I^rH1ck2M&hg+|=wq747^x7G+6+~>*?IYI+0+B;Q+Ijtf{nBR##!OvGI6g=B zUaOv;rju!{+n;m+Sc&F2&I=wc1K-qa#MTkhG_aErEj)oh(D5Pk0%)>>de;rmfBcjN z_vDzqiI3hAw5gycdBf4isnY8H_V%c%quEpddJAY*RNMxn97}eS35GftT(XDQD7Z&t zj0OhL3N|q3tcR;|&7+ld;_qhBzFdQQyh+z>&?Yxq>oB<(Puy8=s_@Ov(c6{wayyDv z+7*D<6xEx?itTy3hYSU+7aj`Wfj5cX82zajOkxG-b*m{fi`_B9_>z6&_jnfB9XIYv zG8M-Q@~{Tm`<{(!QI%L2R8+jJ=*XxqkUpxMXZhHUg0Vd*WbjZ85x)=APOOmL8< z@1Qr6+41zU>54ew-dQ}FqTNY)Ol@m}6A2-bUoc!Qn_xk7;o9KR5WB-&iolU89+Td3 zSfu91_ke{xzb&ObPmWh?dl#$U&|o(#^H(%3IXnA%q{rNMblM&qvbf8r76z z;T;_vo1ivXgw(sr`W8+Rf|#ch$_2E=M^3!}EymvUp1NVO3(Mpg#YMQ>ep!8*hZbLKWL zPtNA=;Aie{ZGK<)YldOXN=fU2sxU{$<-fld^J2- zA9J;ls~?xeR18-??gDTSp#o`w`;omH=9pcYv&6(t?tXCY4gUUHFsqi>ax+oiX476j zjZVMIv9F$N?`)}+V*oD4aBLy5WCLN&rlqPXotG-Gy@bDY%qzQmT)~5N%n=Upjg)q7 z%?z7oba|~Br%Z;HGnYF+m);B`Fgp7O5o)CKCbJO+vpq(nys9|B7yA2f%cF@Nakj`q zCKhy&`cGk9L0t%F-TLN&oD?#ziVGI{_AL&4;rk2w>(>1}*vG_EH&Yu%^+Ko;$_o6K z%{LC=4@PpX99czf&vW!dBLThUY_yQhK1y`#!hAhiXOsC0f2QjaO^^*mV<^}x($>?% zM4L~$(2HFbw-0MIl%E0;^%2*nQCa<1S739Ckeii)@7LXx3#cOZy7)tgBS7CUoGjIN zYwE}?v`CKz^IUv_56?eJnw47~CoDFMpord+P5Iv{mHm%VeTyg~e?{&}8?FBbh$Bl5 zX-pHEI}px<7;jWRB7zuE@r5z34F8PoB`%NjJV!QbD!8#sotV)fN0c5 z@dmqS#}-X{tDI{n_>_(9SG8b+&u7Z{JM}Z<>~fxNZo1QiucBdzr915DrB!~<4?VJ+;?Hmu{6JB69B@n5i zmrLk^Tt6geyUbgu#wxXcBno!N!{qke*(G`aB{|K1$`QCHe{Kcm7dE)(t;@atP0RAB zknBHQUfq6`J^`AVIa>foz3(}mnGX;1VS+Ru^Z_GmKo1BzE#!c(ZRaWLYx~}(?Y>mC z-8D~l+Xp4q8N+RBEUxbEw7YNj0nk}=O{ZEzS#9s{s?EQBbCb!)HAQa%^WDFF^U;9b zuZC=y^;)vc&Tq{~k0&R{NiSfoXVb|HFma^a*0HMRDJ#~JIZ!$nr00YeLW3O6Ih&>f z7%JJY?rrX?ucEKfLF}YU{KY7f)}`8`8Iswk9ddy*p)l{&^2(%}A@{zbmYtj{RpoRC zU!i1WJ;1kq7gjxOB{n@kPfjZO zMcS*HN~@?yT%p=HDZ^&Y;tu))R%h}8HBY8$`K&rdv4cVa_=Nfh-(cSH3szf^?6_9T zXB7uDXV^cS``!H~>Or)sHqjC9FRI%`=0B;!V|*`Mm3V+UO|^{|``eDwQ$JO+ZWHCh3Yi9ps~eW)Fpx?MA7LqBlYQn(}cXH zqNo$yT&C|>VVB6e87k;cXQOzU3@)oAb45)#+9DJQ0$mo9>PL?NZl=PEkewDg`>H=; z*@&*TDz1EMusEocZPikuz8 z)h2GEF{(k8SrG)3;>jewgs%RYpc)f;80BdUF;D|~ag13}`Fzp`%9X2bwN|yaNs1J6 z3PZrUQ0N2YunF;VkAi0$10M$5m1%bT0M9$O`-Ur2t(ICWxGG5Z+*Z9Ir^8i#RrlBzK*C-g3v(0+iGA*+fhMz7(mP_*C-GsHRc zlil6riwdq7_5EVdeQ5gr20z9X>^e@g+j-1O_rNlp!z%2Z8LD4i&>7}~-B9oGy46!%tAy=IAaJU*x;`A%OD<|49*5Efb4KJ zI0-SVBcF?QaIdxj=vr+fR<*~SXD?s9?(FZr+S}YJLE`H!CU&-7A8frqkM{eWPKotC zwRN3bG=wHV(?Rj(C}7@QLl1S0%@kxIkSw-{x$Acv?)UWMD)DFR6{q z&gRDEv#rjL8#}_%Eo_R|h8KLFe1wAEh#k2ny?ISP?-Sw?%szy1ePnC1k#WJDZ!P!9 zwkC0*#N1sK%)rO>rD!UzMRX;H?in#aa|VR-n*ip@l34%k&S?Lu2lr|Gn%Sra_t}&@ zpTnT>7K1TN(-X>aOCHYkl`M+KWVU1{{qqaGP{;1M@oYnyYLj;v>)a7mLcFYzSgmH{ zEE^EbhzdS2cp1P>^fnE^w6odSts;}Sml`{DH9bd{-C7qNaUm*i70o9JMZ^PS2`wQQ zhay|AJ~@0>QOa7bj3}j54%S1?^|6&pHt`bGVR4W%w;ICsqDyqx>EjjJP;2Yjl?qAt z{QbszjNCfl2AJE_&aqf?t}0_YzI?}m6)dQwZh5iWg1#*hvjKW>(RT%H6$GShYv-tq z6Pydu?ThCQ3WF0^O#<-{H8;P^Kh$C?D`^*_`GU)S1(M+=Lem9UkxvQD<@94gAg)}F zJPTz$Pfqa&-7%zW+AaH*Y#og04(&~{lHeH1T;$32>*rfdq_@ySXp$mvoI>Y$k8f^D zwnsDVf{E!T0vGUxv;&-FI7<^oZc!LE(gYq7CuD^rwQQ&XG>}YcfU6G`%Ffs*i6eKA zn|~8>fI@r>JBZkkt1ArZ07y@jYl_)!hWcPFrZ_)^i=U?Bj)cytYxED2H#aMUA29AX z?8LK+4u{6#EM@V#`Col4Ki+!zczdtKp^n@@jaR*7oUs8Uiz_=4ghT5K`iU3{hxIXn zpg3qD#Z+Kl{-ZA36N*DCxRLni3``|#2U*X^M+qA=7ov~C0g&dk*^L~hXQVVch$ENv z&wzj-KVjHmbXjKY?t34lX-LW?(@Wmwx-kqRgjB2!8+em)%1z~cvsnxV#~E9tr4qgW zGE1jPi(&#XkZB=mj6=On-Rn*5dMlMaS zM>fXsz?gI(yDX##cP2)xiJF*ckUczxyFz)vVb#)dumVfaHp|(Tbtb&t9j^RJstj5w zXV@@G#2f_oUQ#d8a~l1l{l|r)_n@h6hx`mKIc{7yu1KUOsibEqw9};Be%xWusAREt z+{zz%WXG=D;g{N4XynWSjF!__mxJblyl&k6s>}=T8|Zw8dF{QjK>YWJ4&*fKXo>l31cxlmJ%! zIFr0|BLFsVfppN$7SWB5>j72Yp;)Kp?a9W@{#Gkoa)M==OqlBD<4qA@m%HLBj*%pN zHy{_d^)W%dZT~HFD^okyz{16a77;FhyqiM(B(ohyrtl{^z(NB_J9{M;`6Ote7uxs8 z$pOEBHaVg&oNx&_R7J)irGVhsHHO%tCyyl2Y)rL46*wF0I+Hc=N$1|&ZDgFvE@LP* z6?yjL*n(^y#GysCjgS~*PZEi2MwO)__3UNs)obe8Nw+HzIFTlq?@BBl&y3k#Plb;| zILC%S3Tw|H0aai#RT|5k>c%-8smG;AFzSiJ--20!RE{#8O9Zfyj*%5i^Gq>Lc~*6! zsXK}1_S)|YVj51EXk*2n7-nD)BMM-{m|~B*V}CvK-RSn_JN8o|j!9=2B9K+RnDOjx zN4B8nPD|KS={nEJlstT796@l3+G71tJRT4FT?sK~jspq;vYhP~)j?G6!DROEL71U5 z1-q~fIHYjO6f6sosM>jq(>d4@G1WoL^W^v#JCGg=sX%^-nEj6RaX2nn*W4I|vW0y- zn~)n=J6yIVqyBkS47IOXo;s?*TNK_9Fm-_;i)`IfkmvxnCE#|Swr$(CZQHhO+qP}n zJg05jwl)3VduOU&gT+tu3{w|87fJ6 zzRzlZz7W0A`(1V4u5G4DaqQVDj}v;TiDXXZTf}u{4<-z)ncV%iC%+JgkPH%9k=XO1 zu%x;~-)gksQ+aq!;1G3cbWcM&2~ZB-2ExTR4r8>%sktRr+QeWh5W6jPxD8J<*ny<+ z)Q+7xMBoDbeuJ2bIAX-Y|2e#sj?9W2Ai;(+8A|ljrqUuk)l7AmElSDpqAdpSi83?b z*la;vuhvUkq$cP$!IkG)x8OK>0=;@S(X15CzNFBE@az z**p`v7#2qZf${=_6!JzG?4VxkRWU&)yb0L9`AA0VjmK(xd7diCVij+S@t zwz$AAiTjD@z|{-DO++zpm#rcQJK^wbMCpUJJ_bC>y>lhAK0de=)8|LYFy_r zqqjgj$BX^fH9_uEMKFX3BD0n?vUe`&DJdnBAje51jb4 zD1?Ukqi5)ihY$8XEzyW{ zy$j-lD8ywsum#4h&HB{0z(+WFwfLk|UNY7$`VLJF_L9;ehrKf3S5wHem;b;5>ezxs z;N!H9U}-@ov_zXwHa8IkeXoKioPfc6aPtp1uI-59Lw4FqpL=4+Y)o!pfwWDtCk2O4 z9+$rSWd^V=pGK;oa$=(a$W{Fc^>(7d5fI}78FL;Kl(Fjl{EN!biX|qnjM9wRdE$O$ zgL|b3b23cB+ZY-b$BN+dEGlypKN7{a1DR25}Ww1p|q9vIcZECmfplGbpCkR0 zA4?f~t4#VYXd=PK9~~c!Y)!ooUY)v=wo0RDg!QkxsJo^eqRCvLL0Jwa<#LSjQIHKq zH5E8a%QYItEf9;iw~>gld&2Qf~EuaUiDKPTL zB_^nWvXM)AkaqGYL)5cNS-YPRPclcBFR?d>;vk2WU%tRNv>dDfbO}x3oym>TlD-!Q z`}^K9G7&aUlGb8$4k7?wxk)hAHcq*EQ$#Zb4@NOgx-(TSW zk&CEP$=bs%g=>XYoFk>=oEojqV;~8xEIkpXKZqGXDU=f*7T<#;ku{B+77&jj$_;-R zN=MChVXK4$7a9_EjMonv+A11w$|W-jS=*qmdss zn_^oS&y z&AJGwgIhF^g38f>K}OprS+m=#QBmIIRdr&)kSpnObo|SJ!i#ocD)YT&dCI?*n*bQ3abZ2!i_u@hdr!JU|+ zM2R+Q_I|%}?(H#BO#H(oH4A{Gr;T~2HBFM*YE-Ge-2a3KPR!x+LY;Sy*NW-KZ8KBw zSVfLH#pu#3v2pz?{W^;V#J-bXzl}o?Sih>o&dz-!)no3Z;_AiOq%wJ`$2Hvh%^6k~ z`O$EL*~4_m-55Bh>p9(XPz1=Pvw(d|- zZR=KQiiHrM@kkc%h{;O^?(B~Yfj9e{{e;wP1}CDJZr5rG$eg!>RzZtZGFQIk{aQoy zYwc(YOQStcnB<`bN%cqX8Kfz~0L5 zD(ALMeQ|CAZM8k1NP}VGEU$aVm%84~3BwsF*HV9q32k~mKs8sBxxL6ezj)c5e0M-S z(Z9s8rCsK@5(0^kPiVF-6H|ARW1^|Pwtw_$v8>S#5t6zbJQE-PB*a9m>U9bkuMiuA zG(tjT9(Hg0{;hIwCNxwl3kE_pehqyJ$G(V}*GX7|>RjzI-eaFkdT{&k%}i%tNdp?4 zEC=2H`vwex%3L)HIQVb3LhBNI?v}Pz^3Pnv`c-~k$?~}!B52tqi)JTqG=Bn9?v*wS zRPCNsBcHLK^!98x!Lb>MQL+!S=o^1=PEsENwGSx}M!S6;Cc98)+bVA(%(E%cg#6zN z9P|=2m=JLXuqYeLh-`725h+R)TYgoQ-zv|l19Ml$K-4xV+gRUHpU8$La)?HORMPRB z0>eV5z^G)G;Jw3=hQE!(pv;G=8@4#!b$8O*p#Jvx_wX}NGdOaWpOdY18S5k}RIg>J zskaLc;A<7@xC7g<;9q(k%ZCeviu5#bh|h^n+I4(rHur=yX&xAVOP)(qmWYugBJEg5hH8mY>SSG~OG0HT43`+_#5v!xE1Ig!h-;b*l224ZQ9q}{`;LmeJAdunf z_%a(EaWezLA=t9t*oBsxRXN`@6&BqVxiE|(4#?rz=Lls7@NVgtX)NJg7H)E&(gT}) zW(B;ew+WgO*l^QzU#y%Ct>Srd@ zeNtIIxW5oLv>$3G=P)TEQZVBpj(+LkDT3370%a@mgbFFPdDZAiZRa}PDC!EAMb4JG zi9Sz+^CkeJ_x(S(T(%Ry!@GTk>p``ba#^@1@xmYJwZu|PY>tnxBvyK)e?*+5*g>^F{( z2Yydb2 zjZx-RTmagYJGu7STzSM0S{=2`p5x6aQ3Z7i!EDS-x5|M(Cr(?CD-PGh_t%JyYrs{1 zC8*CTGe^Y=r+sBBflvE^-iWq*Q{g+KH7}BM83V9x{Y)tW8hu9vTOsyL;@_YZ7?KZ4 zlA>i2n{z?77=_mryjaX(8=8-#is$dT}Sd932%zZKcvv){Rs%) z%r@E=UeI02a0Z_W>)5@0D5&P?4r*1ao5?gaMgc%aUi1isoH?}wqnjjBACh9k6;~&Z zk^T`{-OB2k$+OGXAk?6(H)WhEZ$})FG_Z(6#6nl6Q#thTo+Y|7678beO)MXTZY`0H zz}6Agiz(A|pp_~*l)E4_Fl9v@MVp=nd@p+vWUE0S58~N^FMo_IR#J_%oRT#kcGi?A zQXvIN84Y;mXQ?HE=J-Yf4q7ddW8Ip!YYisPg= z46wA2#eJWiGI$)o19oZPgvquWyi9`~;{^3oG1UqRJf(qw6{25Q9Z zVt~FlnKH64$<^(=f-!IwurI`H5oJlN1fc8JDiT*JO1r~;rLsaa*?NKm1@G|u*0r>Q z8y>?^qm&4REJ9@wV_GOhgv}FsHS|mvDm)!15SJi}2 zh0|8E(`kw8##6$i%mJZ%l80gq3y|oRiw3L1p>Wl~?z_1wZn0-MTiqt+A1}$bOFPz# zln)p06G#jHtOU2H00QMn&pS0Yvlr2ekP{Jx;=@ri=>n97YH;o{|f@yb{GShIhK>(&<}JB zs+xM|l|>5(pdc=BXA$PjP?AB$f}-R=12|xf=Wy(nyrAWx@+@e^+P_XK_Jc&+2=s56 za}mAK3(MRV4V!0Fqyx7nr=?M$EVBc9F6hu`rn7p3-~Nz%g0E?wr~VFYj-;943PVy- z06FTAYo-GkISGeeR80W*3AV{%hB`opIDryRvEeKub4sl45UvciIVWfuv+% zCS9?mtaq(XyAqv>x@4iHZ~scg^Ooty&K~W$HY%vzT|yzx!)v((%exn8U&rKoVkm%Z`>tZGVLu{7%q1SRKwDG?dKRY*ILkgVVCW$g;W+!NA zeW8giW*58qR(5?Tw%qI9-A{*SO;>)O^$(vT*AqW$8+`6h2Xb{kZ*)m2mNZ^5$vvLL zR&{>!d4eBRF)bf(y`Ha6JH2x$@wn-=hGSKMP@n_)6GIFF&B~zXj$UHkQbv1Ow&-bEWx{ zvK!2GD*sbD;1kvS1`KJ)3)Fex7%p4c=u$z)ygbC95mvNehy|#q*2=TbyBj(wu921P znZQ6j7F${S?Z>0nwEb7ph>_cqhVJb`|_HpcQLOCVuJ)h>9bqu*FuO3J zKVSjBD{wH`mu=Orwx^*+-PczdVOUq}tmD7+;awe4-Wly)`~NK8k7I`l@r}HrX)g5A z0P*$L05GBZA&yzCjQk*YSeeaiLrAO6!V3hQ(TX^|Lj#!D2if{yqmDSck$iCaGeqHz zR~VgO>j_R-J2-EeCcKpZ;{(W=0A~lrkdfN+efKof$z))}nl1vjd2AzSB3l%g6Qfkg z*EF_o4lPiSiNKH-!T=~nTA_x{M>LZNM5w~hOZfa73;V>mpB6vPg1g02&D~}@IzGKe z#>n{m&Ww`t>df-`-qzTNUb`ROB-A^t-CBzxD)n>B9-UMDkv~kt5k&s7hp;dy*Z~pFQ%cr9pBcw__UN*G3T(h zlq%K!k@ls2pDNEI5sav8WfA7UZeUg%j#fB=Lp^k7)fXLOHW5XVNbXv|z%VE1%B(rE zk1eKhr+xkps=>jkjOU?}$V0k=Zg?~OEuIdue#O6|S<=5ALO7B6yEk2(f(n;lml%1T zWhq=$7$3|Lgrvp=+aqB+SxP}j;!n)`2}VONW@f>L`kig&olDTV3j_4sGN~z_ICW=j zb--}x$`(ev#?7@s=R3Y6D8U*Qe*2t*%?W|A(oTAG6NE3a!38}fwZc$+6@7E0Fw*yQ zD$nf80WGaSL{sraNiEf9LVz-dTIE+INH^bbn~I%sRBPNTUI1 zxgt6)`xW*4>Z0`-@g#h*F}lx+DTp+#9~F23lOZ)Ql{!Z{(~@i25S*QQ^L?F+zkIpE|%SKm%MD(z)e4DB6C;0$C{8V~8|Y zksfU-Anp0-ZA&pe$$s`6_c87>y*L2IAZkFhPga)2!zL*U-#y5{;^5Y|=HpTSON!GZ zM%(4H^X_s~=coeK7M^erjA@KSCPOf^{L7X~B;~)xV`wX9Sl{FXtPLtM-q&z@xC}=W zK3)m^Y4&JaXjNlg`KDX_rfcG@)LXQy9yxdSr~eV|okU4w#GbD8H+;NOxG(@Mrmm98 zuc=G-I{+#zw*DJc@KI^gwugrSOoGXYTX58V%?|#Kpr&*vEYsX-BXWoWMzEE2Jh1$b z#)Sp0WfwKNM_uDi>r|Gq%Sxcwsmsfpr^~c5-GkE_;uB(t448Jd)!>xs5nh}ADb;XwnYw~reOOc zJQ~vum^xKVO=U`5Nz1PWj-lE066S+F!kz*B0S0&_I96Fs1xkK87Y#)GI7_Ae^NRRI zU4IgF=TV1p&OQOiWgZ6N`zPoMt-hX%E1po!;P$_wc{yqE#Bv7pcMEX0kbXn`Z zB#ReXCOVY8pIDQ1HA||RerQG}%s+)O`YdEvnd&Q}9fD1cs&ao78x==W(OR%-4&W`! z8GsXBu~x6inmg;aI|}0IH)tg1Ma$^FT2Rc{(!oR!>oE7j9y9Q}HTkK?z%io0QvH5^ z`1t%6VKGkklMcupiYmin@vi%+pL_K`w8HC)m`aAyKl=eGi=2_~`Si^qyvP4J6m@>A z>8SF+@+Oe`81#7$_kAT%VjXB`8em%i_xX!C7`@|1U3`@8!srKXGJ((78uy)Kd*Wcp zWi5pnn8X$d@8&UPeFTsAJYah%r5u0`YeXgH`jt)RgGfb{$*KPv z4*;b%Y!M-&qMye7V9ho**0|oDoDvPs$&D6oJ1QcT%Vc)Zk}?w5WLF2w#3C}2q1i@J zOuGE_v@SP?g}M@>&Vu(NOlc73(zYn*rKR>bIs`{VS`KG9KSrn_KwaO=oe|&58yGtN zNYf>7`_<_1gdQ!)PZgyrwzvBgHIrWIdWOE6IfJG{C|BCN+!(VGg1W6_){)e-O;BC# z>b~U(edB6+fxR^4TJ#t8_Dxai1aT?w=ryRpx9St~(qwQ(jPE-0REa%leu4P+7kd9>T9@XZVBEY9>MnC$BKC|k zscPquCK=s#XD6IMKFUT;?~58UCMj~2UyX}GA#8}89{)W~Oula}vX(v$z5WC+0S0}j}jnMAPdwED3 zv@r`+xqwYCmx)0wW_up$oWV>#)@fiFX@*=qV@RSgkTYAC+&MM+{cm|xC?xX0Y-j8N zKO%igv2AQ-A*pKcsb@T}FsPbfX!jV>qg&{8)=cz(b{Z3)VU^}I!LF5&NZ=tjY>m9XSDU6`LLlp+-@~4)6W3z8t1D7Ba=_B-6PH+7q$V zzOj~Mcv2J?T z47pkwRof%L9E?_exd(xjPJt;V=Y`L%coq)h(wFihh#*_ZJu4K`?- zu)!B4yOIy21bW8K>nnl~2+e`Sv*FqD1q_SPcq?h=;h?Ob>i^V6(eCouLbsK*DJI2U zptzQ;jm35`Xp^{%P-%1RyCwhA+=N=o6nN;)s7d zQVljjeb>>%PWdJ;tm2pUhF!DR_gei4%Jm29G3;rUhLnZC^r9I^E0lTnSZB$6<>OG5 z`bM6_?XtWBwz3?T_ME6=r`AQ~mFZGTrx?ZeTjQjO1jVx28D1!XBG0xI9PMiaca5VcJhm%^BSdNx&{C=O|p@@_9nnBsnX-K=#bS`E~6eG;J?rL`uDs5$B2S@$PL;S zlup2jIiGT4LgB;bU|?rm?MiYu*O36ukpuJgNv2{;lwul<-=WZHg0oFGv>3sA@K|gB zfo-|FAwIbu_CmBmY&M1T<@_DDMn{W7)n~Xz{Ucr19uB~J`pWW|Ix}Bk!Yy6tvIk)?hmLR=RPvIlSHx$*;4*!e>TQr%1 zTVN?}{s%bnBNCtStgxSh1R2`)!gzK9eoSoP%fywPKSD+2y*HSfJk~5QGY@2oY%YJ+RCo|(eho`gz9z+>p4yDdFTAo zHC8>^>8KMo^y}{t|F;|yv*w+3qqy{?MFx3)mQ?lCm zt$oD1#NP<#I9HXON>LK@bN zIyB5V7$gydlH22P=4Vn#SdB>CrZkd2tcqbrFQ1MghkGxd_dP(Je)B8Dgl!>B(s~Ky zR3asm6sWN&!;z)v{N|2uR)c_J;KgHwL5_0OP_qw8mtZzp<;hmynrtHLN%r#269bv{ zmpOo${Qo?O(J51m-SGTBb0t)&BNA1(rIWp+%gql7{mqQj^Hl%j-{g9B3F_pRp?-nN zhXY{w;}5Qoe#?7i=E-MkV?pv%D#4V2(qxM-S&3oV+CvwDtzmse4261}ppodh)Yi^>oX zID7^WR)qIps~jN4H5mpUdM+?V&1npBWX28YQcNa-&5<0Uv>q!eULpFTE(ZzIy(rOv zEi&SHzEiJ6gcSdfNbASK=9Rs$HB4fC9JW}*yW=Gr3t;82=Kyi;c}b8VjO<;EofF2V z3+QCyW}KIj*@xDUDTC$9Xb(W7-kTop7Tt1qwjrKU+(M)cRCB_EeMoSv&^~(^$a>;^ zi$O43j6iO!*dkJSQXh7@GalSySZyk!X3!3S9qbDho4*}uv7kZzdHi*MNyl2XJwEL)xOXj?ucc2WPDy!}BHsW&ELhZ~Y6%*9mub04J3kOf=|Eu@S+4){c=vLN zBDED!i4KmPe_Y!`T?ynV(^rJG932EGE)C#^)47s_V`|#Df+Q`w6WeYlX!Qqs$yqek zT*$KoC;6PLjfm-5R`FGM@F3FD8z;da`;QY+Ip)kDcIJ!ZE+&_a*%q9vMQ!j7+b zBBj%DJc@MzjaCIgPS(FvURWvq=eqKc9f&Wd{ti zCzp<}oo7W`#VWFqRUi3LgBEh7yuo)` zAao(Okprf^eqCiAXr6!Koxyd8zSS{tCc^|h#ZjNSt*Io@9+()EbGH7dl-~VHf9E3y zd1~tVmH%#@eKNY$KT^5aWRo+EW`Xc@n}1&{ku8{=w>HPMI;!)3AsaQmJBm3Gv+4>? zMI|auk@W^Z6mw4$fgm>~b%>{+a+`$f&7oJKP?vO>e2r4aBcFK00g+ z@Y)+{O1MqaD-W(E9f}2?Q#jFo=Qf9fLkumbCxI;7DdB~Ta_p>7Fa)ZWtJe-ulBkce z?xEPrHjIqlI&A?*mh_aAwP_!%(b4>MRzUNYl>?L&{m69WWG81rrH5djqy`&Ov08^j zDIlrN;{%e>K_>`tq9{yx|1C5uTgpeC?6;dlJW}vyB{rOdNN5q9xwqOAZUKgYFy1l_OQs3)u&Ox}f*u+7u!|F^)5yOZ z-p|kD6H@(qJl<+Eyv%!T6+GF&-ED)@j`}!3I_L#Zy2#i8XN3nsx}y(cMxnNeUuLpP z)T;4!EeFmvl493*u_1%_ayHR3VX_p-S(dI;-M$08j2y#id)D@}VL@%aJDomKfEu85 zjKn(}#Nb}+bky9+F96@KI;;G#Y*Pf6RE#?Cenc3YF|xn0vhEBpo<-jghjTnN9dfcR~HB#eEoeucf#;F0nf-a5sOjh!gO$V&0)9Jb9MUOR} zdD#wL6nW_{%gQxct`@voY@`HjvQjfHwFKCh?8J@9DfzAP3iXv?O%Z_57I~lWwy7)ic>cL(A~Ir0;0q%K=;pu{{6dnmhMVx<8Irz9DT2e+8yb zk25h-UCHVUbQ;teRU|W>6IV@+njOMZY!o0OW^R&8mBvDZDZlBAfJ?(bpPOet1Pk~Y zBW$zXjhS*B7UT1|8qFor5A8|Fl)sJ|aTqv#vI(>Xb<)H@&NdUL@A4^0*^Tq; z8lNmpkA5XZ#CZgX`*$%&8YeS;UK*l-?hrAM>^A}KV(BEDw81X#){7FeJz-ZtWiwGO zgCS#g_?5YBKjC7#v8c4zT07DDMUfg`I9n~VT~i&9JheLJOP4#E#2gakr?_+nMbX&m z+4%MTrm7Sb*m>iRyLd`B@yDxNH8s0xf;iXQ4b^IHNCj1L)ssuTQzRC4bCFs?6nO|f z0rRT>1ZkZ|8svd1-0vHPLm733E6-O<+9+Ji; z6ySyk)t7N`Pt&rctX<36PfS8KU&V3DQ&k-6zI>%Qnu2#R-Q=UMLTVYE>>=6CdAtR^gV7fS# z8x~87VG7~~^AZ8C#dt1U&MNIPc(3Z0B6EwZ)?=}Jh&cxyqk#$JnwyA$2@$6-D49x8sLm# z^+$G~eZA-*>wM`=nxL#^P5d^db)Ei^C-r5`yKEWDyXsm=&l>6VYB_BB`nmG462ekT zeD-$viNw{wlE9VF_LjmomIrBF)7S4Ho(4(?A?CL#SS}|qVtw}WyQrvivTC81H9g+S z_@&ja7fyU@DwUp;(M^j&X_)NFyiSn<9$@ zjrXd$uhPsGBnB7)O&>}Yl2Kw~R;^WSPPmYwiLTh1YR&;xwVlkWbSBqsRoGtDSnqN= zKOW}=O_TB$##C|*QMYT~dF41-GKmgP$X42QQ$KrwZVpK%8cxz~`#MNImzhSleA{Z| zLURXZ8{AFE?0PCw2@^WjhJwuh^zQ15WjS=S`KJb*0u?Vf$c4CK?oFF5{-kB@MK_f< zV@O2G9aIY4gqLirk_R;)w)f)y2E0o&dgK_b4F2BnCWU-lzIM%=H*a;~2E*!jum~kh z)I^7Fi{zWrc5RZ=a%ZMAA|zZE%hgX9@IPm?+*m=Un6^PJ**P21n038&k!Xnqu3zPW zA0#L(bK~FBB_?-f0NKKYDz zz30kT8d*x;BcoQ&icegGDN?FjP%%QDBcIBbdILRPGgo^4NRnMuAtcZ&?18-dDuV`7 zZVy}Ys;Wpm$K%&J=cWcdDB!7OGiN?EMiVcCno$v|GmJ>nZ<2J!Fo`xY%3FJdr&HfD zfG#j+p`5PUVFc8|^fmFbB@xQyXCWOeQ(qI#y1=})A)nITvMJV`d)gLpsHQ*~rE-x;>}(5`P;z3gIB zzUl8#&vEBf{t4LHE?z-U6Y)cWi*(s|=2sEa2E9$GQmK56U&3`IG%SLGKiq@rj3xvi zipdsx&dp_4QYG~J5=2>YXyL?(u!ODr8>L&24I&;Dm*ixXPv0}U=?O+}{>-s7#tz5{{aVyRVEAEPaz*+=Tq!$*DR zZt1xEFc-Dm!2apq`bddsEw5d00NVoGkQGZaCy_L~xPR2nMv1XRJ|_+j* zSd8`Ze)@>w3OWGhoMz4V&lE2a%8ItA_-KSoZ-UUjg8hkg%G#*s-!%|Fcbr4hw#aW^ zY3{HbDjHf1W3qwy{5c)mMI4Yi4={ncpR$jViLV4H%*xqR4G0PjSJAV3qEm&t3$N2B z{^>MXTvWE(X|Uc2N%w@p(9`G3i0O;CT#-GB?!H~%#|qDk6TYZZtm|(a?8e}(RegkIkas0HO+7O}}%XQIEya+DkYKrOw< zs2>$*k5L{A)KF`3f3YmxHnzP~eC^-JX$plKj+Pgg(R1r<)J~1VoGZF&8U zW<481HM4yv6jI(Y8i%UNVYCa0&nzklcV6Lc0TVtk4I7A@*+2pPl$^l~edcTQ&0T}d z99^BQAdikbX@y8PFUs4|3JEAhIgXCXrXb8T_N=oRHMaiaSv9=hQ*oWaaoVT*|lQxvn47@=HJ{zyh#^0&eqbc75yj zE^_gS8SM;-c$vi)8-AR5A}ZIi8*no%+afn{U#rZ5%*BGw!nq~OuW?|;@ZG5st6du4 zq>Z+6b?mM1v<5N?zjx(U*nIG~l(4&i7$%xwX=0PoBuvr2ghDOD;}hq&^0PNpHVu6y zVp50~fW|A*52QaR{6sh*zR5r9wg;qAqi^<<0S*=jzM0ha9~+ar80aDmGek|Tg6|Kp zIwTL?38X;0)b$!(@H?bOfKJ*ggaVvb&4JYPvZx2t$7emjqo`hcw)MKdHR3kc>p*iX zo9di9Gv-!`SXc+(mUQNFPrZ}ERr67_#@Rw>&o6p-QXq%?sA%t^9x&dIFu**}Hxzvy zv7vCpXI6-dIaNMnbcN7OLbUBRgwAaFz&WJttF9t zrupvelpGx$k;VNqKe}6ZoShwz&7`IMG`BZDI=`*u?fX^4PO@I>9lp#W@kE3h0;$ad zd=pJekP3Gz>v?MGMOwvK%4UkwSp(wcf7AIqOf{|F@6SKX2>f6%c@x#XAvXI}-kaTh zJLJ<58{s|m@d1|L$3l;$dYJM7_&A^wFT!Hww<&SZoid+8RhJBSoOb?e@{4;$*~wUU z>>NcsNfd`-2r7FBk~y1J4+T$?!p|(f&1;3#yTZj8jmgPtptxakh4rh|%saS^U`}Y2 zQ4VJ|*Q?8{47&8FW6#dd*eyK5Jl-CH!1C_f-n8p2#KzjOv$4bZju!1(<=kB3W)Ii9 zydHyLAF{o~vt@~E#rnA0p8MXu9w248K9{KSi`Ck{cPLt$Z~AsA>gd}bRK4A8#>7)X zZr!KCYs0L2D9TpVF7{YEB&9`Lp(=aqljgw`3+oEscz1C60f05phlq&OZ=P^pwPN-& z@7{Dq*xz(cc5!2m-<(h!Gw_8#`3Lw-CtJ1j2UPwUzK8FA7A>wtpUglC;I&Q3ZM45R6vfVhqLjKhrB zu)G#S!yQO5lQI2Yi=dmG}`wE%3z6ia{B`wT$c*<&+%11*^R zXuJu{b#SYBQ9@sk7G?%v`A#`3RTZ2azu?D_{|D6t>#|?mU&4?I!fFA5k^(Rr_8j{C zqMWxUNnt5dqlb|>Seo3m(S>{N(8&s(bFDgN5^SQ9a8*2*gA{+!Qp3!&q#*o}d3y?B z8ai4{dp3KOFz&^44TsS8q3@-~f7Ep3ZN&R>k)%Dg<&1P4DK0ucV%Xx zh^q*?%&=G+M+Y!>XTi1lb{y(-$_D=S8=6kCDV=LN#thBP8sD{!D;fb72C+Mv7z1CS zrfW!R%{=$FZ%jd45{R##hTrPXyrP%82M66dQlJ|c*T5e*p|>fR=uwWMrzqc>mgATq z1--WltZE!srfoLZFr9|5tZ-UWMPFZ2IYSwHal99<2wgCt#@m~Jq2!PdAgYM{xmvBb zqG79I-5n&1Fu%X1emK|HcMf^zxwfC|-*=V~sYAN21|~V(u)l_2yEY@-Ki1S5iWb>D zgMvC*-c0Knnhnw!T8 z8Q|LRo>+J*P{}z{S1uk!Tke72Nqu^th)2%YuT-`o z99TeS-58}Gzt=6X1=aFja_<^cWYqXjl%qkbB|Ch2frqNm~H&abuIR zGgLKi!EnW2Jb_M8z)%W;&w{iKE+lsavQ9dCnr4b`oJH<|l0sk?R=M<^+-37P0p3Nu z0mu8Tu6RiTn>HQfvd|zo`OJEYwlr;hUfZm#A%kKCvP<5U@$PiOdPjxZ~Ee z>JfLLJZwZ=&+jL+Eo|$)N^>;5r4Lm4D!7~qGs^o&FWvKO3$>j!>%6!hoq^3WwLew< z6+kdpG7^4qh3quF<3KbfF7<5QMV=D&IhAnMh_T6MSahyNDHkwXVK!kF5aq_wW3cZD zQL(QNE$J+`#b3K6RM~cj_7cCwFMMIhAhl^fhv^I=Tdbc+4;u@fYArW<)&wt%eEFW3Jg9ctCuBEb3)J2d3gSpXF1!AudTWTuaf? zAg@Sc+p&N+*s~fzMJ}iWD0cLcbF`6%POhiu-R5LpUH71vb$6()vkFPtucMy$9(F6u zKt-K&I6y6Fo6Dk35qdDIazo1>lH`#2!b)W~Ct0{18h$l|jWJx^8(_JqhMkf35a05$ zr~L&BKlZB!{q@xFLYH__#sx~p! z*=kEDX)2$Lp?UphV?CyK+m$4L{e~9`_2Svkz2M%X5#v#?V(m`SnIzpfr2Jw~(G47|0_ZZz6hx{wO;3mBIDNor(Q;hORnb&x zb3r){aHIa(c8CRr)&2NdO$x4N-=AZqz;5*R1V^f6eKP~(e{&81*KbwFw|{jO*6gP* zl7zmCvGwq}t!=JvZV*j;FJt&f)G6zC<;Hc5WRY%bH;tB(BfETI zu(Vg?&C}X%&!82~-G3d&)q97C{*DKt>nw_h4Y7|c@RPxWJ2$lU0?_wINpu~$nD3_$ zM+8hp;nSFiQ4eHPbK3Bh8CWCJRSHT+!8q0I{7IAwagLEy9~o#QO9HBc*F?&n?NG*XyS+_$JCmnT0pWxAH( zbQuyu-|DMGhFW2xM#CDd#jjkXxGGv|z$!I+}>zoH8wt{OR=w;_KS^F_;mtkwoN>vrRjtuCxc^1c|L|8~O5uuxS7TChlOj|Lm6FZmjO;30& zO7gN$Kz2054I&1fdkofHRn_J9$ApSaXgb_olKJg&^u}+ShjWvQ(>deQx@~UrlzL=+ z-NF{n#`;(kJ}OxB0sIZ~pJtW}w(lK-i$WQ2n)_5>J&ZyiG%b{@;&2jVGyHrSqPvcvj0Hf!ORH~Bg zYZJ!q;XkUj!AFOtIq#OW!k5qU>Ov^fQOas;nbCI4XX|4{qCEWtpvyeqH!$IljbG8>s2^C zd!2Lj;v4Qmxiykn%D6|9szk9dh|YR3#`(%#GJuZK$f8PX0>XN-R7iI8qBPaGWBVYW zB+H=3qTYojKp~^yEqNYZDY`ATs9&4fS*=lsUvlaVEk5rXtoQcqsN86iRA_@wGLx$z%K7lL3!6+5TS~fT858I>BfQS-E z>b%(v6RT9l){ZOZ!BU>X@$}h~QX11Jq6%A0cdXN}AbZtZ3@Qf;lSs6}yFFD-!~&8P zp)?yLJjjn*YsNLxM$Uu}u_+y5!~lD~3NJBZxPCzvSB6%QuHzhnL6HdoV2eohg3qkn zwV`O;dJfJq8wfi&^HK9>w-}?kehj_-hmTImiiW{p7$=pADy5&s-^TR?oi1-9wV=R7 z;&j-@{Z@Nm^$2ktLiC(}u5jVUg36}5Rb24k4dX{AajiY>T%Pz(l}rJX@w8`5OIf?v zWXuP_KdOvMq?T!vrJDW4Gd;cPnXEBpaoY%$nFPOrJlP*fD~OU?Qj=F|EuY@0LT-CR zM9}ymSQ#h~TnoIYOs|IV*NbtPi#e$VJ)75$8 zCPYVUC(-GpTBpR@aH*D*EIM)uvOq=pg>E~&yhL@*o5^%c1DWtXsg(G^ zbhtww>ZAMKFv0OCr=zP$ zgQ3=#3!1bqszms}imIPprN(_U1Km=}nk227Tm8~tU~}O)f2KCGyzGh3qSL=Wp>XS{ z)HJ~J)ud|MZX0YtNkCM$*WwROL;pdhQ7ol;VEn~+)_=CWSLyrC^Z29uy-IIVdG14Q z)ESNR3qEAV#SViIVi)7&9oB-(LNQmxWMgR)W&3XbcysR?n7&CjB&>LP3*tHr+yC-GHn1 z_+1*8S$&o_-`Y=X&{eUvqj{SZhUVz$sUS38O1iz- z*x1^6+1l7W%-)fibn&s0x2p8e>L!yTJvwv%@GRI!7;VQ#rep~ZcV%5;y)bdSpPZ->f6CnXUE zxB)M7^2$9Z&^;*7Jt)xM4;08-V8@EDb6PQ2H1tt1xruQK0BKGu|9A|V)5>Q_2xSI- zJCPCcJSt=}0#2h(mf$+NR%4Z!_x-lV7kN~gK=12~fDr}=U14p%^9V?&e5Xn~0FZ@o z`Hj_txn|%Kp;X^1>9L^q>X677TojtF$r#iRbas>NV z?2n=7>#YabG=Ug|Ynw?zl-RU$$%4Eqy*&~MH&1#@LrlbT%H$@Qj*Vfnr0(>_#-#*Y z=Ed>%Vub<15TZwQLD7!S`WG~1p$yEXsQc<=*VitCrec7n;OUZSoK~~78(2)bC6@-*1|Hx zT09di)+p2RHj2WNz%CuiMbPR;((-8Bvu5$N<@(dbis#Ju3_6kVh$uy|NQRNG6r(mE z*2>e|LtHc5Q#(}>ojMXtR#(VkF#rlmtzNkbh&E&E$%MYq`(V8gj>~mV?L{PQW^_hR z#Qd1Au{2|NHFiwJxW};jo}nLvR`xl~@7li6T{hR-OpKYJ*yc$NVjX7*_XcQ%2pDE0JVmC;2E z1X~Sb$fQ;pd_)x9@}sAe2F$A3Rx+gB`Q|1s`mHg66r;~zK<;MyvH%YFnk5Ibz&x#={Mq*06C@AHq1Ir8fN`E zHy1Fqi2}{S=Fcx-VAT4_4HYgRG%jszdI_JoKd{eUt87+lC7b-ZA=Aqe(?;S3EMSZsN7RvDvLc8W8hP zhJA%B-Holr%bnc=ng!9V zCEo@g-wg(YsFL;1jq$xPtp~q>Y9#MYD=WD%yt*P13&4|iEA(772K(pj33|y?$$6Pm zyFsp_p+PVL1|P>P-Tc4I@t6wrDu;_W~Mb02rbv7~e&^p@rucO_= z&5fWUg`&O`@V29(Ic*tMa$b6`VuhlAH$^{3)e&e-%f8A0$PYy?*}i^fNz4NCGjvKqS98KB2@vI`{WBFi zA2#-g)`JdKMf7}NDK5}Y1$HO~I=apDqKJbB?Fn!4_1uAL{Pe>uql%rBHs-km+012X zW`m(t)TXdwH%AC(OWRoaSc0+rKhSe3C+(>HVKyZKIo*Q?E}{GU{`slEi{)*0?o!)q zd6e+StqnRbUTkh3Y-Tt#lrUp{Q-&sT#eAK|+?m?tGI{gzbk>}6tHm11^Xf$(Z>^Xn zo>wy@pPTLH>n5f+^D4(*Z>yb6KBsz;!Tg->R>9l)PrrYzlDGGw$>g^D9f(wRQEhF5 z!P!6B-aK$5(4jGbVKfq1{Q)4HXVkL!W^?n+A@d`++JS@_S(I?j$hVSjnhL^MEO=k< zQQ7+%ht-_mAy8$2oQGA(xJ*+sZwAEV+Ex! zor0CfNq2u(HM+sZS*Ztpt&Bd*J=1i0C8|>pj84b)7KfSlPJhH4^g&`lJuWWBJ=*LQ z{jVpt3An`cEDJ$Mnv(k|qll@1%&Jkv1=aAR7IzBCg-|SX?9Ol2?SyvTgPcc_Ocht^HM$68~LWdI%wg}fI@NFo~JptmkG?3o(or!I>n&PwCrrD}6H((n^GX*Njw6*liTDLRZXzACZh{ikg z0@-LbH}?*S@_n(nzqPyH+J9|W2UZX--1Ji46iP0Ynm!tdnrq?moss8nuG=>XH09tu z8NKVWSHisWGMZnyL*$}4z_rMvl@}|x$j<2omZRzM06isEJ%OqRM2UJbGNVf9RfNGi zL7i8INGFr);UH-+~RR+NZ1*A-Ku6eS~*qU{Xg3(lpjHXXCLnS3iE z*FW`~)8^UNPnPO@#er;IK@X-6vZ9njSCoXXK)nF_Fyt$BcX1xag5xO_651yqb>tpR zx5YG+g8xK4*^qpD8NT|tnY@)XaYWj1pN8%sateXe-K zQ9fm)fFkO+!gtDHv|ylhBjN%$un?HP>8NYKgVl$k>R0)GCF7v-VuT)O1>wNegCf2KP2Dhq>71kN+5xE2}4~8kYlx6i1_KDq&OxQ(DUV zw5defB1CqRNd{~oetl4b(<$Zeax6A{IU-F*HMyxzXuf&Zc98%Z%mmxJ!7hLE?FxJo zj2OKKr zYNzCNvyc{Bw^NLmQ4#`S*dcZ)7Jdoi-A($FmFU4bpJ%>*Df3YU z^-+EA)$Y#ED>j^I{D<+@xkH{|cooKu6}?UM-}auUQMPAPg4!_ePCE`f0$**xOy?L! zsRisYc^SloqBfAGrmwqOcvy&>vMo~>Gz8PZM9kBmQwyDPz;uCk5vL=%zgF zEYF^w+A4tYU;y9sApwC0jIJe$jfyT5nvKpfpA&CQr9*?!WzS;tt-^0SqJBBCeSD&w z&nJT4T>TsQ8pe^(GumuwWyFTZd@MYScbLn$iN8PC$ZdT9jp7uV*JA2fCkqe`z8;`F zpqEOnn~bgg7c?3)+5C2Aw6yE4?SX=I;iRBiuwE}vYa`DBd-jO*at_R*Y`zkT3A(>| zaI_86MwdT*6d{~hTG|J)Z@w`4P^>%L8;Xp9eTj!;*G9REwCp?7;k`D)@pyEip)<)n9dZSS$ns z7&043<@S&1fV)x7E((8!eN_2aYcWe(YZ17 z2x-=)GDwR>C6<=_+B&^@(mERvi8nn!RTjP{4Z7|q>n z@7Xrn%4v)H=alr8af0S$45i3FG?eqhtd+y;;8Dmn(C3`q3*w2Lr@jzP9j_XNm%~q)ostS0?FjQ=($#n%Nz)Zs1L-Z_~1+)Qf*%3z(5!(1X)Yq*}4ytD2q7b zfM(*@ut<7GfdU^<@N}s3YTw7zD9&U*<5rxyciZ?!mqFs24XY<%t?PwIs!I|!_*(&n z9($`##Fe~RjliSkXfT)Rdom4UsDcY#zPB@ocXZk$a6E@QR7O|g4Onw&@D|e>*Cw=W zQD=OxZe#3qki8{j%@|@gX-v)KCWzpw5!V)+!V zi2~4SWrbzw?e6i?SJpL|tJiAxqt@Gq9UH2%dbx!kBo|a+=MvL6*NofU_Q*QcG!%VFE*rH*>QOS| z5K})g>_;5>cNd@T@XrCK>abtlJUDoupgws`C2I|sYDlMbSj!SK0Y})DV#h!DV}_FQaWL|=ivPG zR3#3f3XE2Ke%-icrxhc(6>*4htaeLzC-KRH+so8USQBl|iD`F<&X<2h#3wPe60C(V0S!BqdQlY%>EK zd0^ue7L2om8X5<*7o`K5FiP<#wKfsAem=bxXVe2|7e~4k7B<;z%;f^paI7>d@E3Hz zzlq-th_K$CIDc`r(+XjtP^2D(Xt2fON2e^se`CZ@4<2GXy8SK&6VtCAJ@87rLxEa` z!G_J01uN4x@k}0J76pKFI8Z(>Vc4|Us%R_FjIHx{sD3k9p|;npT2e{jVLV7J z(gRc{84epc^v|n;YpwUV)mW8W1Ot_|)6z@P{KM>}q8Q`^X>HbVd(dyE4#&pZx=g8z z45ZT>X{83NI&?6F&pTt_(g_?_(|%0!EOdwp*Z>POQsK&$0Yhf(F{>fM5hPZg4`MR5 zutlanz<_X_`$N$Y^r~zSM{-7YnP*ZsKp#KK=c2BITJLZ1a==3PFq9_Khw*<--FBd$ zDzqeeqj<^Q>$ue>ypaXyzNJ3+T!|c?u=|cPUorC4%+3g zOIgoZx>YwrJv$SIhq%@QiwkOv`rS2bVuD4g+t4s6Wd?E{OjOy7OI(S+63*4-Tm18F zuFHhg4^Md}wDRiD)s{}Ti(TfTRel%>cW8?b+%-ImUor2eV7aQ1J?`!p1akr zP6f7LMuq#EZ7NY z(OUHlVs+;p4|k|BAKw9<^zG4!wm$bog2g)|ibDw@hEd##l!`x=EDj|drzLbyNobNZ z-rC=K!%~1cBk;C9TQh)0-OEd_qX#Akke=gR_zDb)07~2j-oUxbqzLj1vG<;C+v_^l@BLz21_-|G(Th zs#xFCH)6I_f+43E=!sRmvA8iK(HUW4_R=mFs)CpXsVmeTwS$;Yo~n;tZo;V7Ra>tTzn7fBC8`4>+-ZK>X~d0h zc9ZmqSEMqZZ1#!(zMV`4R+A{42x4{?P6g*!)?CLMZ?rOkY!1quQOdVG)2lX+B(k1# z@+z#5+{@r-V51AJPRq?pJ_@Qnps6&B8bw6J%^B1(9ao!4&0+`-xgAG34)fOG?(TN^ zScfn^<}Ra$6=wT_5jMA&d^_V*@GH2ntEB~R56w+B_nze0ALrUVJVt(O>~Db(|BU_w zjNr%E5Ivwe7Rm@g%y+dWE1D$h=6M}++5?TAb3j#ILYb1pF<{Kr5za zgMKGYp)|_Y&od=t*_WVnqqPzgUR)29`7gx}wO&fMp>BId)3pBkz&mM@KKX;`h5(S| z#qR#=#^Eh$Shw~$W*_X<>Fkz__!#6T4{Hlo%^+XjKQC3|5<|xM)c#PC9zB2p zS${I+-0fysEQ7G8_!Voq*fy5>>T0|%cj4l5j=oCiHB&(+8V@m%DRq(J&^xNku*m$j z<}Ne7`pPf=yI9nw>l1jG{!ERhLsw_@>OuTd=Msm!?K>dy$s(u9%hF|IKtG3X!%}n9 zX=o6|l(8YygF!-lO&|D-nG5msbB}#CF|~sO4%AijF!r!1;+0yN^?r0L#YRHyz+);- z{O&0-9ZoAaKKJQtt{uRYioen$M&(mUZDM;RDw9n>abAjH0{fG?BE~c6rrG%xE5;M8 z9jY!*D%PnH>r4hBTPs}*r-&M`=oaFLeL69&QA`sr?u_~gyEQ9iTx7q0ZdHIV_G^Ca z;rELB{XYPA&6SO8oF>0#-cufI0y#4N9VYPG9* z8#wQO=yhu;5q|X88+6mU?^Mc)&D&>;m%F?~bQrPj0_tzjtd6!ejEYA5a%%%l8fiJx zT&;ROwtBKkV_5XV^jt0>;6Z8#7~TsSI?88((u1JPNFTm_{N%CC%Ss_0KmGdaiszQ@ zs{Nrg?RVFf7r%MF^mK`$F8@L`t{Hi{iE{y|t&1Oc(JGq86j2k$TN|H+;JiI*+w*e@ zB^cLUQLf@~s0r*V;EKEDrHbhR>ZVPAURcxXQXh`7U;}NlVO$->ZDbRFumsbg@ii~_ zKVrPE)NX1_r{I9X=2O;Pk2d%BNxy46qK$iMosrC7Bot~U4Fix=H70ji`o2hiWcK$+alT!dBO8lr>lj2_vIi{lsf3e-VlbDEi-~^xq|TgJI;&9 zeu3;qw;v3RTU5^*DEtWLX>n)UxZ)Hg(r$w3Z&;jbQCT$W zQE^u!xx;oY>0Ye0}T?d9-5k zjgqwg!9ctc^LEK+R>?cH!hBo5JL8;u^l3%y zhpb;<>jB>R^DggRurUpy`x?6<9sQjTxhOihiO`k)TkK*`<@^g7792SO$d-zouI{>@JzwJoiY->_$KThKjq)R+32bLpGy@Sk$GS|9 z-&!$yhn~iMs^D-9c2?KN-{uq(Muv6yOrvZ});rL~&&0~xFXk(eXIrN7IlglHQ2`Uf zv1c^lY~Y$bjkuCo^WND^_=pc}gQYLRu&FRc5pC+BgdmFkbpQLu{n}ShKTK*%^~HsB z+*$ZXlmP(c=TD#VU;1VL^7GQ;rRAlkkDokWrg%$>^z^6r>AzA(W*he}I{uz4_wU*@ z&z?M)GyYGOo;>l#pW-boKV5$Or}$6zq{akw6Src^e|qx z`ev>Ea5SB)=W6xeO|Wg`+J1%pRee)=7>&Lfq)KcqlaZQD7?<^DEQL9r4p0%;K>oCK z_-gm)FmCMp9RJkV-*4<3{#-TUq233$|CF{(bhHNT>s3>A%7a;AhUB~&4f>GUwZ~&3 z4%yqt>&^YIFi>{`4o8q({6hLg64Zx*$kwfI-I z`t$tC0H2>)zPdxie+BhyptUN^)}`d2lVQHJyz1w{W=l(2 zKk!iU1a0VqEf3@!3gKK^80)8N#UeVLy-Tf{VV7GFZ%$N#KA+9OOYRMWcBswY@5x6e zC&z4g^2j$aJxkY4PW(n?ih9dz>v>%IkMv{+hqW&Ausg-`aUoqO7SB@rcZ`2x{6j@9 zEL;@c+JSUkC6gs)0Z0pu%Uq}7*1pAHuhf@uSt|XjnQw!OoT^c1!LP_t{ZX;Fus|hq zvQJtj+?ftoPo`K5n+x%kndU6$EZT~Rt^yXwubJ8!p~b5KVn<-@(Z^biy5FYo zJHGa4tCDSXX^YmLD-C*cE(s<0>!aKxVYa)oadvObb~i8E-E6jl**Jq+vmNARJMgou z9d|c3u81d_o5}Hi9?t#jX4TvQU_p*s-c%p6R#_#H+1Z@@z}L!?&I(N>bHeR(-SG`{ zc-C0d=89PxuId7xw`El-E|Yh?-smC`?U+nH@9vP#=-maKTW!c8)+n||m3~fX3nOenp(~b|a^f)7oepHng&#n$A^B#J(TXAe7HW_G2A1_qX;A^CB5lA3@LM z7$yjns6^~}5wckRrnFbfhPGf9Sc!IUGrw(=#VG1Zw70(*zSBt^1ZbM0oouR12-1Z? zXZ@jR_yGklmsKnaE^{SHr#g;Afkf(Ds`dH_*WWivS7%f8t0z2a`r2a1m{B?t-NA^r zJ2K3cJh$<4@~Kd;SfLzI(|oTa*yJA+%dUo%Xk&}o3S*Vs9nQ~`?GtoTiWjpIUA@y$ zrO4^*D0ia(BH6Z#6(YU1)h|uN=JsY|hY>lbf5Skg@9Zamsq@P&z@7EMAxNoWnFb2^ z7b0)8IMfaw?*%-7aNn}oJVX=#&((`%1Ykh3pScHuKoe(sqp`8UG5Cp{bp6=cvt#qV zwbxol*t+aNc%S)bb&kDAixf*l$tGlpXCmkSa&yPagx)e`AS5TkY&rOXk_7a!5XZ=w zNw>JTzUoCn;Zk;c;^o|)WJ;!h+0V1((g!Zqy>bC2qM~@B>uX!}b>sGOojqg*6Dgt@ z4^w=pB4Xnc;*ukBYXe&wK?EmZFEDxv=d#ae$kO{ytT` z=NSnMdvG(-9^V)p1azF3Vp&fL>OhyTd8`I@dfA3ObNdQnC_6K)0s`f7&T=i|D#4(o zE)W?wRx1J7)1b)3eVUyy=nS+0Ry)}V1+l{kV-KN0Yj4^3TbMQ^@mMv_Z!po8eYG_e zNddi!UnPCD^aFn|>?a6(*in^d2fy+*+QbB=+V-e=Y1GuW4!>mxk9-mZmCoJrky7af z?A#s!V_yAbwD|^$nxBaX*l%#b6+_Qq6VgZQbkK)H2p)Lno3R^`&$HnaTfK;K41JbR zOD?UuH~GTuRWw{=cC=zR;HMwfBR)LVn@v0s!S{N1V^ae3g~CN(fk1wu5IvSSOrI&# zI5_5D^RkYUnPcKF-uAHf@jIT@BiP@yxEAuHAv-o?M?(&6$RUM@Cl-Y8(|Y8H?sa{% zVTMOp_ut)D$Cs>Uf?OQSm8^#$>-lyIK}7$7mBor!wQ!i*vNU?SH3N_f2_K|GNeuj?cSF6hCA=GIDHub24oKu0RkT z=$-AA@Q#P|$Sc#9)jmrtX^9X1yL?sX82x4?&h+e)rRKXI=3<3;xDblbX>}$-3a*>y zbsycGKe$)<<~b@b-@Tx9hX!xH^2@r?7-JJkkL!`scF<6MS&xLTLZCcR2-?*W^b7>M zSN&$<+x9!b$+|vD*f>chUbw!}x5V_5JWj!zF5ZjTa5A($@5+m;mrASSt zDd(BGsgs(yBeaj-z%Ybj*fnC-MtYM%XkbF^+j^u@JUi0XNFfW$oAFkYR z)%q(o;3AA5fynp4UPUg50rN)s5^<)zl^f*Z2#Zayyti`RB{mofRBX|}>(XE}jGEbUn z#iK;VG!BmrLJ?{7;5T=$snAS`D|6TEZ!aqlE`y zfNF#ydW0EfG>D7)Z>zLw1-P&$;pjZz0rC+us0Dk2`@mq#p;baBSFqpB2!%_9RkNOL zyjz9CKl)hz z7=(>hKiK%0dau$9GN*h6AB*n0X%x42XBGcTt0%*1T)ogQMz~`HJG`8a3-tm-I0bZC ze{A2ESQPUBqMq(rvG{nE3L1 zEtO;0#{%X|amnsh+@m)4bIP4+5Em8@>q%9jelkUfl!>KEtO_Jj6+dye>Wca_JNA>C z5u1=oBzIo>NOMJ2ZeNS*Iv1b}ts{@e1&&~+fYbl}U%szLzC4+K^^Q}sR5DC*Yjfwv z%4~2Y)_ihT6c=xomDrnpX}*Pd`MPCT1UaKcaPP}Pi=yc;Z!_{YAA61WyS5*$smRFY z?f}8+k7Kh4FKIda^7&O&a$U#^G`q&=E2~*N$ZmtSlNKE{R1nfFcMr5)(hF_`Dl&qd z?wsw=Brz$Xs6!0qFw^NZH}%3E<~nKynPVafZ&FvRT;5!>*?{mK(}?KuzR^HSVVPUn z2YlGc4Mhcl@|_bkBY+Y`rt;|t;peMvy}A6yE}}asx~*?qq8>F>CXoJw@3fIh+P52NA<%|!dL#d%!!NN-kNiJQc+!r_m$aPf`Gkbwz)3X7me+M zpu!?7r)BzWDFzOI2TOLnM62-(h6-!LB$n(fp3?dq@|XIo*^2R1mr6(Rq9Wr;PTsfI zmp=~^`nVqSwbze4P-p-14;!ktl+Z|OLHT@JdV4>1e~+=t>)2>(VbsRx6A(dB&4-@C+FK4U_c(wq4mgA+)&>ut42Tafp2^Wfh>hXGy{-6=|ySTER)HqrxI*WaCgCTGJV^rMc9X~ztz z+-PY))cFnLdY9qzMy%CGJE@ar*ORaCH&2*hBE_Eg!myOHm#z=y-nsg6n}U}=$C#Pn zhBQTO{5U?t_}zE2qABjjx>9v2u-uZzYxW_)PEuUNTqu9T=@8Lby5gueTfq`XW?UZP>}4co1FTOOIK^^jg>Up)k2?b;IMX*-7Csxt5$ z-V(p)(!yR+$sj05W z3K7>O`CPVJDV_+&^hY4E(E zo^5|X(vmMp&XhS*ipfoT)PM7<$lKvcK$OyE%~$xI;gra9bL)|jJK@C6Rq3eM2{Ehd zep{k29EGmcQn!*cGubTdJpMmf*+P!wZq1^=uDNb61g#>H*O!g3(P_W4Vq`?_-BA)Y zERY$^YJ!K7qnz(1gSx1JyL10zJTGHUoBWpS{a8`t+>+O_4N%2Y@u;Hk7*GrxPI|+x zdcE|$nhSPp!6pROOmEPe^iuTz!G@$)?VEVq``fe+cNPLd%+Rx`fQ&I&P%lUi({99d zViH)NOqeI2i-VfS{*WQ19h{ZejT07lP2nayVU(o-?d_+Z#MLLBk%YxFbAWfTfW(ZT zHO2q0J*g(z`-BFqgvX zRu@a^=f4HH`t^0%z%GGT{~*9iK$FXR8+FfJYI+G0%ex;t^&+QX+%$-4&%D`rzY@=^ zggZ}>oRr~Ii|4JfK=!&aGjqfD@Vl9IIU7_IaR-`?vmJ(x(hf2mNzV zdO&;+<6Yy>+qnl5?9nog*Mpn%$CwUHYGgX8@Y#6=RE18j*M-GFeP?&`4fI`C{_Vks zviL8ejrRA4MtSy(@n4pnKV9_y^6%-A;=e3DS$g)E!k3nwK3lxUfB9$p79Rap9FI7j zfjapT5D%c6{T>t#2(M_nFj~&v8uQTayf7R=34(}HnJ_&Omw{tjiGHQ>N7G3fmkX~j z|Kp#M@u2(XLS@x`F!nlyIHT5Hs7pL?ju|hmMxUa8m-X+djsDZt|Kq3G^}qad`Pu#Y z|L5R8{p-T`XrVMu4;uLz+?!0SX^bq`zR(bE-9Go0$LmWdWgju`W z9mB7qxV}1@UeIYO?)?OE8-#^s=Nx&Y>=t+?duN}PQ_wkVrH5_fw%X;Jml5pGZp{N* zkn$#X$xjG|oE&lSm)=~RB?B}Mjur1%Lp74i$?_6Tzenh>Y!Bw;bF{ymlgAe{O)cO! zlOHwNaC&tnUUz1vf{A~><^G@D|NjxR-<{~cCrerW@A>2B_xt}n{dYV4cX0Im#@7CU zqA0NjK{x3bqwoFA#s+Pa_e=c#cmKQp-T&@?_rLq!{qO#F|GWR)|L%YHzx&_)@BVlH wyZ_z)?tk~c```WV{&)Yo|K0!YfA_!p-~I3YcmKQp{hR*&A80ALI{>f*0Qp@M761SM literal 0 HcmV?d00001 diff --git a/automake-1.15.1/doc/amhello/Makefile.am b/automake-1.15.1/doc/amhello/Makefile.am new file mode 100644 index 0000000..706c2f2 --- /dev/null +++ b/automake-1.15.1/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/automake-1.15.1/doc/amhello/README b/automake-1.15.1/doc/amhello/README new file mode 100644 index 0000000..d24723a --- /dev/null +++ b/automake-1.15.1/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/automake-1.15.1/doc/amhello/configure.ac b/automake-1.15.1/doc/amhello/configure.ac new file mode 100644 index 0000000..381344d --- /dev/null +++ b/automake-1.15.1/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/automake-1.15.1/doc/amhello/src/Makefile.am b/automake-1.15.1/doc/amhello/src/Makefile.am new file mode 100644 index 0000000..e52ff3c --- /dev/null +++ b/automake-1.15.1/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/automake-1.15.1/doc/amhello/src/main.c b/automake-1.15.1/doc/amhello/src/main.c new file mode 100644 index 0000000..7a7ebec --- /dev/null +++ b/automake-1.15.1/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 +#include + +int +main (void) +{ + puts ("Hello World!"); + puts ("This is " PACKAGE_STRING "."); + return 0; +} diff --git a/automake-1.15.1/doc/automake-history.info b/automake-1.15.1/doc/automake-history.info new file mode 100644 index 0000000..a2b899f --- /dev/null +++ b/automake-1.15.1/doc/automake-history.info @@ -0,0 +1,1678 @@ +This is automake-history.info, produced by makeinfo version 6.1 from +automake-history.texi. + +This manual describes (part of) the history of GNU Automake, a program +that creates GNU standards-compliant Makefiles from template files. + + Copyright (C) 1995-2017 Free Software Foundation, Inc. + + 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." + + +File: automake-history.info, Node: Top, Next: Timeline, Up: (dir) + +Brief History of Automake +************************* + +This manual describes (part of) the history of GNU Automake, a program +that creates GNU standards-compliant Makefiles from template files. + + Copyright (C) 1995-2017 Free Software Foundation, Inc. + + 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." + +* 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 + + -- 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 + + + +File: automake-history.info, Node: Timeline, Next: Dependency Tracking Evolution, Prev: Top, Up: Top + +1 Timeline +********** + +1994-09-19 First CVS commit. + + If we can trust the CVS repository, David J. MacKenzie (djm) + started working on Automake (or AutoMake, as it was spelt then) + this Monday. + + The first version of the 'automake' script looks as follows. + + #!/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 + + From this you can already see that Automake will be about reading + '*.am' file and producing '*.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 'Makefile.am' files trigger injections of precanned + 'Makefile' fragments into the generated 'Makefile.in'. The use of + 'Makefile' fragments was inspired by the 4.4BSD 'make' and include + files, however Automake aims to be portable and to conform to the + GNU standards for '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. + +1994-11-05 David MacKenzie's last commit. + + At this point Automake is a 200 line portable shell script, plus + 332 lines of 'Makefile' fragments. In the 'README', David states + his ambivalence between "portable shell" and "more appropriate + language": + + 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. + + 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. + +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 'Makefile.in' up to GNU standards. + This was hard, and one day he saw Automake on + , 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 Franc,ois 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. + +1995-11-23 Automake 0.20 + + Besides introducing automatic dependency tracking (*note Dependency + Tracking Evolution::), this version also supplies a 9-page manual. + + At this time 'aclocal' and '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 'configure.ac' we use + today) must contain in order to use Automake 0.20: + + 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 + + (Today all of the above is achieved by 'AC_INIT' and + 'AM_INIT_AUTOMAKE'.) + + Here is how programs are specified in 'Makefile.am': + + PROGRAMS = hello + hello_SOURCES = hello.c + + This looks pretty much like what we do today, except the 'PROGRAMS' + variable has no directory prefix specifying where 'hello' should be + installed: all programs are installed in '$(bindir)'. + 'LIBPROGRAMS' can be used to specify programs that must be built + but not installed (it is called 'noinst_PROGRAMS' nowadays). + + Programs can be built conditionally using 'AC_SUBST'itutions: + + PROGRAMS = @progs@ + AM_PROGRAMS = foo bar baz + + ('AM_PROGRAMS' has since then been renamed to 'EXTRA_PROGRAMS'.) + + Similarly scripts, static libraries, and data can be built and + installed using the 'LIBRARIES', 'SCRIPTS', and 'DATA' variables. + However 'LIBRARIES' were treated a bit specially in that Automake + did automatically supply the 'lib' and '.a' prefixes. Therefore to + build 'libcpio.a', one had to write + + LIBRARIES = cpio + cpio_SOURCES = ... + + Extra files to distribute must be listed in 'DIST_OTHER' (the + ancestor of 'EXTRA_DIST'). Also extra directories that are to be + distributed should appear in 'DIST_SUBDIRS', but the manual + describes this as a temporary ugly hack (today extra directories + should also be listed in 'EXTRA_DIST', and 'DIST_SUBDIRS' is used + for another purpose, *note Conditional Subdirectories: + (automake)Conditional Subdirectories.). + +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 + 'my' variables (only dynamically scoped 'local' variables), without + function prototypes, with function calls that needs to be prefixed + with '&', etc. Traces of this old style can still be found in + today's 'automake'. + +1995-11-28 Automake 0.22 +1995-11-29 Automake 0.23 + + Bug fixes. + +1995-12-08 Automake 0.24 +1995-12-10 Automake 0.25 + + Releases are raining. 0.24 introduces the uniform naming scheme we + use today, i.e., 'bin_PROGRAMS' instead of 'PROGRAMS', + 'noinst_LIBRARIES' instead of 'LIBLIBRARIES', etc. (However + 'EXTRA_PROGRAMS' does not exist yet, 'AM_PROGRAMS' is still in use; + and 'TEXINFOS' and 'MANS' still have no directory prefixes.) + Adding support for prefixes like that was one of the major ideas in + 'automake'; it has lasted pretty well. + + AutoMake is renamed to Automake (Tom seems to recall it was + Franc,ois Pinard's doing). + + 0.25 fixes a Perl 4 portability bug. + +1995-12-18 Jim Meyering starts using Automake in GNU Textutils. +1995-12-31 Franc,ois Pinard starts using Automake in GNU tar. + +1996-01-03 Automake 0.26 +1996-01-03 Automake 0.27 + + Of the many changes and suggestions sent by Franc,ois 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. + +1996-01-13 Automake 0.28 + + Automake starts scanning 'configure.in' for 'LIBOBJS' support. + This is an important step because until this version Automake only + knew about the 'Makefile.am's it processed. 'configure.in' was + Autoconf's world and the link between Autoconf and Automake had to + be done by the 'Makefile.am' author. For instance, if 'config.h' + was generated by 'configure', it was the package maintainer's + responsibility to define the 'CONFIG_HEADER' variable in each + 'Makefile.am'. + + Succeeding releases will rely more and more on scanning + 'configure.in' to better automate the Autoconf integration. + + 0.28 also introduces the 'AUTOMAKE_OPTIONS' variable and the + '--gnu' and '--gnits' options, the latter being stricter. + +1996-02-07 Automake 0.29 + + Thanks to 'configure.in' scanning, 'CONFIG_HEADER' is gone, and + rebuild rules for 'configure'-generated file are automatically + output. + + 'TEXINFOS' and 'MANS' converted to the uniform naming scheme. + +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 (*note Releases::), and this + proved to be really helpful later on. + + 'EXTRA_PROGRAMS' finally replaces 'AM_PROGRAMS'. + + All the third-party Autoconf macros, written mostly by Franc,ois + Pinard (and later Jim Meyering), are distributed in Automake's + hand-written '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...) + +1996-03-11 Automake 0.31 + + The test suite in 0.30 was run via a long 'check-local' rule. Upon + Ulrich Drepper's suggestion, 0.31 makes it an Automake rule output + whenever the 'TESTS' variable is defined. + + 'DIST_OTHER' is renamed to 'EXTRA_DIST', and the 'check_' prefix is + introduced. The syntax is now the same as today. + +1996-03-15 Gordon Matzigkeit starts writing libtool. + +1996-04-27 Automake 0.32 + + '-hook' targets are introduced; an idea from Dieter Baron. + + '*.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. + +1996-05-18 Automake 0.33 + + Gord Matzigkeit's main two contributions: + + * very preliminary libtool support + * the distcheck rule + + Although they were very basic at this point, these are probably + among the top features for Automake today. + + Jim Meyering also provides the infamous 'jm_MAINTAINER_MODE', since + then renamed to 'AM_MAINTAINER_MODE' and abandoned by its author + (*note maintainer-mode: (automake)maintainer-mode.). + +1996-05-28 Automake 1.0 + + After only six months of heavy development, the 'automake' script + is 3134 lines long, plus 973 lines of 'Makefile' fragments. The + package has 30 pages of documentation, and 38 test cases. + '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. + +1996-10-10 Kevin Dalley packages Automake 1.0 for Debian GNU/Linux. + +1996-11-26 David J. 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 'ChangeLog' for 1997 lists only 7 + commits. + +1997-02-28 list alive + + The mailing list is announced as follows: + 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 + + Before that people were discussing Automake privately, on the Gnits + mailing list (which is not public either), and less frequently on + 'gnu.misc.discuss'. + + 'gnu.ai.mit.edu' is now 'gnu.org', in case you never noticed. The + archives of the early years of the '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. + +1997-06-22 Automake 1.2 + + Automake developments continues, and more and more new Autoconf + macros are required. Distributing them in '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 'aclocal' + ('aclocal' was actually started on 1996-07-28), a tool that + automatically constructs an '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 + 'AM_INIT_AUTOMAKE' macro that simplifies the creation of + 'configure.in'. + + Libtool is fully supported using '*_LTLIBRARIES'. + + The missing script is introduced by Franc,ois Pinard; it is meant + to be a better solution than 'AM_MAINTAINER_MODE' (*note + maintainer-mode: (automake)maintainer-mode.). + + 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 'configure'-based, + and Ian thought that adding conditionals to 'automake' was simpler + than doing all the work in '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 'automake' script has almost doubled: 6089 lines of Perl, plus + 1294 lines of 'Makefile' fragments. + +1997-07-08 Gordon Matzigkeit releases Libtool 1.0. + +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. + +1998-09-06 'sourceware.cygnus.com' is on-line. + + Sourceware was setup by Jason Molenda to host open source projects. + +1998-09-19 Automake CVS repository moved to 'sourceware.cygnus.com' +1998-10-26 'sourceware.cygnus.com' announces it hosts Automake: + Automake is now hosted on '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 + 'savannah.gnu.org', but the Sourceware host had been renamed to + '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 'automake' and 'autoconf' had joined + '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. + +1999-01-05 Ben Elliston releases Autoconf 2.13. + +1999-01-14 Automake 1.4 + + This release adds support for Fortran 77 and for the 'include' + statement. Also, '+=' 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. + + '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. + +1999-03-27 The '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 '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. + + *Note Dependency Tracking Evolution::, for more details about the + evolution of automatic dependency tracking in Automake. + +1999-11-21 The '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. + +2000-05-10 + + Since September 1999 and until 2003, Akim Demaille will be + zealously revamping Autoconf. + + 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 + + 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. + +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 :) + +2001-01-28 + + Akim sends a batch of 14 patches to . + + Aiieeee! I was dreading the day that the Demaillator turned + his sights on automake... and now it has arrived! - Tom + Tromey + + 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. + + 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 + + All of these patches were sent to and discussed on + , so subscribed users were literally drowning in + technical mails. Eventually, the + mailing list was created in May. + + Year after year, Automake had drifted away from its initial design: + construct 'Makefile.in' by assembling various 'Makefile' fragments. + In 1.4, lots of 'Makefile' rules are being emitted at various + places in the '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 + 'Makefile' fragments, so the logic could be centralized in a + 'Makefile' fragment processor. + + Another significant contribution of Akim is the interface with the + "trace" feature of Autoconf. The way to scan '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; 'automake' could miss some definition (for instance + '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 '--trace' option, which + provides accurate information about where macros are actually + called and with what arguments. Akim will equip Automake with a + second 'configure.in' scanner that uses this '--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. + +2001-04-25 Gary V. 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. + +2001-05-08 Automake 1.4-p1 +2001-05-24 Automake 1.4-p2 + + Gary V. Vaughan, the principal Libtool maintainer, makes a "patch + release" of Automake: + + The main purpose of this release is to have a stable automake + which is compatible with the latest stable libtool. + + The release also contains obvious fixes for bugs in Automake 1.4, + some of which were reported almost monthly. + +2001-05-21 Akim Demaille releases Autoconf 2.50 + +2001-06-07 Automake 1.4-p3 +2001-06-10 Automake 1.4-p4 +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 'configure.ac' over 'configure.in', and it introduces a + new syntax for 'AC_OUTPUT'ing files. + +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: + * The new dependency tracking scheme that uses 'depcomp'. Aside + from the improvement on the dependency tracking itself (*note + Dependency Tracking Evolution::), this also streamlines the + use of 'automake'-generated 'Makefile.in's as the + 'Makefile.in's used during development are now the same as + those used in distributions. Before that the 'Makefile.in's + generated for maintainers required GNU 'make' and GCC, they + were different from the portable 'Makefile' generated for + distribution; this was causing some confusion. + + * Support for per-target compilation flags. + + * Support for reference to files in subdirectories in most + 'Makefile.am' variables. + + * Introduction of the 'dist_', 'nodist_', and 'nobase_' + prefixes. + * Perl 4 support is finally dropped. + + 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 '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, 'make distcheck' + was improved to check that 'make uninstall' did remove all the + files 'make install' installed, that '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 '+=' 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. + +2002-03-05 Automake 1.6 + + This release introduced versioned installation (*note API + Versioning: (automake)API Versioning.). 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 'automake-1.6', call all its + bug-fix versions identically, and switch to '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. + +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 '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. + +2002-06-14 Automake 1.6.2 + +2002-07-28 Automake 1.6.3 +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. + +2002-09-25 Automake 1.7 + + This release switches to the new 'configure.ac' scanner Akim was + experimenting in 1.5. + +2002-10-16 Automake 1.7.1 +2002-12-06 Automake 1.7.2 +2003-02-20 Automake 1.7.3 +2003-04-23 Automake 1.7.4 +2003-05-18 Automake 1.7.5 +2003-07-10 Automake 1.7.6 +2003-09-07 Automake 1.7.7 +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. + +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 'Makefile.in' generated by automake... + +2003-11-09 Automake 1.7.9 + +2003-12-10 Automake 1.8 + + The most striking update is probably that of 'aclocal'. + + 'aclocal' now uses 'm4_include' in the produced '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: 'Makefile.in' must be rebuilt whenever + a dependency of 'configure' changes, but all the 'm4' files + included in 'aclocal.m4' where unknown from 'automake'. Now + 'automake' can just trace the 'm4_include's to discover the + dependencies. + + 'aclocal' also starts using the '--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 'aclocal' + versions, notably using handwritten 'm4_include's: '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. + +2004-01-11 Automake 1.8.1 +2004-01-12 Automake 1.8.2 +2004-03-07 Automake 1.8.3 +2004-04-25 Automake 1.8.4 +2004-05-16 Automake 1.8.5 + +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 '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. + +2004-08-11 Automake 1.9.1 +2004-09-19 Automake 1.9.2 + + Automake has ten years. This chapter of the manual was initially + written for this occasion. + +2007-10-29 Automake repository moves to 'savannah.gnu.org' + and uses git as primary repository. + + +File: automake-history.info, Node: Dependency Tracking Evolution, Next: Releases, Prev: Timeline, Up: Top + +2 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 + + +File: automake-history.info, Node: First Take on Dependencies, Next: Dependencies As Side Effects, Up: Dependency Tracking Evolution + +2.1 First Take on Dependency Tracking +===================================== + +Description +----------- + +Our first attempt at automatic dependency tracking was based on the +method recommended by GNU 'make'. (*note Generating Prerequisites +Automatically: (make)Automatic Prerequisites.) + + This version worked by precomputing dependencies ahead of time. For +each source file, it had a special '.P' file that held the dependencies. +There was a rule to generate a '.P' file by invoking the compiler +appropriately. All such '.P' files were included by the 'Makefile', +thus implicitly becoming dependencies of 'Makefile'. + +Bugs +---- + +This approach had several critical bugs. + + * The code to generate the '.P' file relied on 'gcc'. (A limitation, + not technically a bug.) + * The dependency tracking mechanism itself relied on GNU 'make'. (A + limitation, not technically a bug.) + * Because each '.P' file was a dependency of 'Makefile', this meant + that dependency tracking was done eagerly by 'make'. For instance, + '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. + * As dependency tracking was done as a pre-pass, compile times were + doubled-the compiler had to be run twice per source file. + * 'make dist' re-ran 'automake' to generate a 'Makefile' that did not + have automatic dependency tracking (and that was thus portable to + any version of '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 '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 '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. + +Historical Note +--------------- + +The code generated by Automake is often inspired by the '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.) + + +File: automake-history.info, Node: Dependencies As Side Effects, Next: Dependencies for the User, Prev: First Take on Dependencies, Up: Dependency Tracking Evolution + +2.2 Dependencies As Side Effects +================================ + +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 '.P' files were included using the '-include' +command, which let us create these files lazily. This avoided the '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). + +Bugs +---- + + * This approach also relied on the existence of 'gcc' and GNU 'make'. + (A limitation, not technically a bug.) + * Dependency tracking was still done by the developer, so the + problems from the first implementation relating to massaging of + dependencies by 'make dist' were still in effect. + * This implementation suffered from the "deleted header file" + problem. Suppose a lazily-created '.P' file includes a dependency + on a given header file, like this: + + maude.o: maude.c something.h + + Now suppose that you remove 'something.h' and update 'maude.c' so + that this include is no longer needed. If you run 'make', you will + get an error because there is no way to create 'something.h'. + + We fixed this problem in a later release by further massaging the + output of 'gcc' to include a dummy dependency for each header file. + + +File: automake-history.info, Node: Dependencies for the User, Next: Techniques for Dependencies, Prev: Dependencies As Side Effects, Up: Dependency Tracking Evolution + +2.3 Dependencies for the User +============================= + +Description +----------- + +The bugs associated with '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" 'Makefile.in's, leading to user complaints. +Also, the requirement for 'gcc' and GNU '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 ('depcomp') knows +about twelve different compilers (including a "compiler" that simply +invokes 'makedepend' and then the real compiler, which is assumed to be +a standard Unix-like C compiler with no way to do dependency tracking). + +Bugs +---- + + * Running a wrapper script for each compilation slows down the build. + * Many users don't really care about precise dependencies. + * 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. + + * 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 'BUILT_SOURCES' to list built headers + (*note Sources: (automake)Sources.). 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. + + 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 '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 'gcc' is detected at +'configure' time, we inline the dependency-generation code and do not +use the '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 +'Makefile' (with or without 'depcomp'), the produced 'Makefile's are +larger. + + +File: automake-history.info, Node: Techniques for Dependencies, Prev: Dependencies for the User, Up: Dependency Tracking Evolution + +2.4 Techniques for Computing Dependencies +========================================= + +There are actually several ways for a build tool like Automake to cause +tools to generate dependencies. + +'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 'makedepend' are not + completely precise; ordinarily they were conservative and + discovered too many dependencies. +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. +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. '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. +'LD_PRELOAD' + Rather than use the file system, one could write a special library + to intercept 'open' and other syscalls. This technique is also + quite powerful, but unfortunately it is not portable enough for use + in 'automake'. + +* Menu: + +* Recommendations for Tool Writers:: +* Future Directions for Dependencies:: + + +File: automake-history.info, Node: Recommendations for Tool Writers, Next: Future Directions for Dependencies, Up: Techniques for Dependencies + +2.4.1 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 '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. + + +File: automake-history.info, Node: Future Directions for Dependencies, Prev: Recommendations for Tool Writers, Up: Techniques for Dependencies + +2.4.2 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. + + +File: automake-history.info, Node: Releases, Next: Copying This Manual, Prev: Dependency Tracking Evolution, Up: Top + +3 Release Statistics +******************** + +The following table (inspired by 'perlhist(1)') quantifies the evolution +of Automake using these metrics: + +Date, Rel + The date and version of the release. +am + The number of lines of the 'automake' script. +acl + The number of lines of the 'aclocal' script. +pm + The number of lines of the 'Perl' supporting modules. +'*.am' + The number of lines of the 'Makefile' fragments. The number in + parentheses is the number of files. +m4 + The number of lines (and files) of Autoconf macros. +doc + The number of pages of the documentation (the Postscript version). +t + The number of test cases in the test suite. Of those, the number + in parentheses is the number of generated test cases. + +Date Rel am acl pm '*.am' m4 doc t +------------------------------------------------------------------------------------ +1994-09-19 CVS 141 299 (24) +1994-11-05 CVS 208 332 (28) +1995-11-23 0.20 533 458 (35) 9 +1995-11-26 0.21 613 480 (36) 11 +1995-11-28 0.22 1116 539 (38) 12 +1995-11-29 0.23 1240 541 (38) 12 +1995-12-08 0.24 1462 504 (33) 14 +1995-12-10 0.25 1513 511 (37) 15 +1996-01-03 0.26 1706 438 (36) 16 +1996-01-03 0.27 1706 438 (36) 16 +1996-01-13 0.28 1964 934 (33) 16 +1996-02-07 0.29 2299 936 (33) 17 +1996-02-24 0.30 2544 919 (32) 85 (1) 20 9 +1996-03-11 0.31 2877 919 (32) 85 (1) 29 17 +1996-04-27 0.32 3058 921 (31) 85 (1) 30 26 +1996-05-18 0.33 3110 926 (31) 105 (1) 30 35 +1996-05-28 1.0 3134 973 (32) 105 (1) 30 38 +1997-06-22 1.2 6089 385 1294 (36) 592 (20) 37 126 +1998-04-05 1.3 6415 422 1470 (39) 741 (23) 39 156 +1999-01-14 1.4 7240 426 1591 (40) 734 (20) 51 197 +2001-05-08 1.4-p1 7251 426 1591 (40) 734 (20) 51 197 +2001-05-24 1.4-p2 7268 439 1591 (40) 734 (20) 49 197 +2001-06-07 1.4-p3 7312 439 1591 (40) 734 (20) 49 197 +2001-06-10 1.4-p4 7321 439 1591 (40) 734 (20) 49 198 +2001-07-15 1.4-p5 7228 426 1596 (40) 734 (20) 51 198 +2001-08-23 1.5 8016 475 600 2654 (39) 1166 (29) 63 327 +2002-03-05 1.6 8465 475 1136 2732 (39) 1603 (27) 66 365 +2002-04-11 1.6.1 8544 475 1136 2741 (39) 1603 (27) 66 372 +2002-06-14 1.6.2 8575 475 1136 2800 (39) 1609 (27) 67 386 +2002-07-28 1.6.3 8600 475 1153 2809 (39) 1609 (27) 67 391 +2002-07-28 1.4-p6 7332 455 1596 (40) 735 (20) 49 197 +2002-09-25 1.7 9189 471 1790 2965 (39) 1606 (28) 73 430 +2002-10-16 1.7.1 9229 475 1790 2977 (39) 1606 (28) 73 437 +2002-12-06 1.7.2 9334 475 1790 2988 (39) 1606 (28) 77 445 +2003-02-20 1.7.3 9389 475 1790 3023 (39) 1651 (29) 84 448 +2003-04-23 1.7.4 9429 475 1790 3031 (39) 1644 (29) 85 458 +2003-05-18 1.7.5 9429 475 1790 3033 (39) 1645 (29) 85 459 +2003-07-10 1.7.6 9442 475 1790 3033 (39) 1660 (29) 85 461 +2003-09-07 1.7.7 9443 475 1790 3041 (39) 1660 (29) 90 467 +2003-10-07 1.7.8 9444 475 1790 3041 (39) 1660 (29) 90 468 +2003-11-09 1.7.9 9444 475 1790 3048 (39) 1660 (29) 90 468 +2003-12-10 1.8 7171 585 7730 3236 (39) 1666 (31) 104 521 +2004-01-11 1.8.1 7217 663 7726 3287 (39) 1686 (31) 104 525 +2004-01-12 1.8.2 7217 663 7726 3288 (39) 1686 (31) 104 526 +2004-03-07 1.8.3 7214 686 7735 3303 (39) 1695 (31) 111 530 +2004-04-25 1.8.4 7214 686 7736 3310 (39) 1701 (31) 112 531 +2004-05-16 1.8.5 7240 686 7736 3299 (39) 1701 (31) 112 533 +2004-07-28 1.9 7508 715 7794 3352 (40) 1812 (32) 115 551 +2004-08-11 1.9.1 7512 715 7794 3354 (40) 1812 (32) 115 552 +2004-09-19 1.9.2 7512 715 7794 3354 (40) 1812 (32) 132 554 +2004-11-01 1.9.3 7507 718 7804 3354 (40) 1812 (32) 134 556 +2004-12-18 1.9.4 7508 718 7856 3361 (40) 1811 (32) 140 560 +2005-02-13 1.9.5 7523 719 7859 3373 (40) 1453 (32) 142 562 +2005-07-10 1.9.6 7539 699 7867 3400 (40) 1453 (32) 144 570 +2006-10-15 1.10 7859 1072 8024 3512 (40) 1496 (34) 172 604 +2008-01-19 1.10.1 7870 1089 8025 3520 (40) 1499 (34) 173 617 +2008-11-23 1.10.2 7882 1089 8027 3540 (40) 1509 (34) 176 628 +2009-05-17 1.11 8721 1092 8289 4164 (42) 1714 (37) 181 732 (20) + + +File: automake-history.info, Node: Copying This Manual, Prev: Releases, Up: Top + +Appendix A Copying This Manual +****************************** + +* Menu: + +* GNU Free Documentation License:: License for copying this manual + + +File: automake-history.info, Node: GNU Free Documentation License, Up: Copying This Manual + +A.1 GNU Free Documentation License +================================== + + Version 1.3, 3 November 2008 + + Copyright (C) 2000-2017 Free Software Foundation, Inc. + + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "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. + + 1. 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 + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and standard-conforming + simple HTML, PostScript or PDF designed for human modification. + Examples of transparent image formats include PNG, XCF and JPG. + Opaque formats include proprietary formats that can be read and + edited only by proprietary word processors, SGML or XML for which + the DTD and/or processing tools are not generally available, and + the machine-generated HTML, PostScript or 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. + + 2. 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. + + 3. 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. + + 4. 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: + + A. 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. + + B. 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. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. 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. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. 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. + + J. 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. + + K. 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. + + L. 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. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + 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. + + 5. 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." + + 6. 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. + + 7. 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. + + 8. 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. + + 9. 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. + + 10. 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 + . + + 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. + + 11. 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. + +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: + + Copyright (C) YEAR 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''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + 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. + + + +Tag Table: +Node: Top702 +Node: Timeline2236 +Node: Dependency Tracking Evolution33697 +Node: First Take on Dependencies34539 +Node: Dependencies As Side Effects37197 +Node: Dependencies for the User39256 +Node: Techniques for Dependencies44286 +Node: Recommendations for Tool Writers45984 +Node: Future Directions for Dependencies46703 +Node: Releases47173 +Node: Copying This Manual52560 +Node: GNU Free Documentation License52787 + +End Tag Table diff --git a/automake-1.15.1/doc/automake-history.texi b/automake-1.15.1/doc/automake-history.texi new file mode 100644 index 0000000..75141f9 --- /dev/null +++ b/automake-1.15.1/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/automake-1.15.1/doc/automake.info b/automake-1.15.1/doc/automake.info new file mode 100644 index 0000000..ab636b1 --- /dev/null +++ b/automake-1.15.1/doc/automake.info @@ -0,0 +1,246 @@ +This is automake.info, produced by makeinfo version 6.1 from +automake.texi. + +This manual is for GNU Automake (version 1.15.1, 17 June 2017), a +program that creates GNU standards-compliant Makefiles from template +files. + + Copyright © 1995-2017 Free Software Foundation, Inc. + + 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.†+ +INFO-DIR-SECTION Software development +START-INFO-DIR-ENTRY +* Automake: (automake). Making GNU standards-compliant Makefiles. +END-INFO-DIR-ENTRY + +INFO-DIR-SECTION Individual utilities +START-INFO-DIR-ENTRY +* aclocal-invocation: (automake)aclocal Invocation. Generating aclocal.m4. +* automake-invocation: (automake)automake Invocation. Generating Makefile.in. +END-INFO-DIR-ENTRY + + +Indirect: +automake.info-1: 1079 +automake.info-2: 301288 + +Tag Table: +(Indirect) +Node: Top1079 +Node: Introduction14404 +Ref: Introduction-Footnote-115813 +Node: Autotools Introduction15972 +Node: GNU Build System17353 +Node: Use Cases20101 +Node: Basic Installation22229 +Node: Standard Targets25815 +Node: Standard Directory Variables27418 +Node: Standard Configuration Variables29275 +Node: config.site30634 +Node: VPATH Builds32060 +Node: Two-Part Install36008 +Node: Cross-Compilation38452 +Node: Renaming41427 +Node: DESTDIR42585 +Node: Preparing Distributions44767 +Node: Dependency Tracking47138 +Node: Nested Packages49246 +Node: Why Autotools50762 +Node: Hello World52404 +Ref: amhello Explained52826 +Node: Creating amhello52998 +Node: amhello's configure.ac Setup Explained58353 +Node: amhello's Makefile.am Setup Explained63273 +Node: Generalities66973 +Node: General Operation67667 +Node: Strictness71090 +Node: Uniform72708 +Node: Length Limitations77647 +Node: Canonicalization79957 +Node: User Variables81029 +Node: Auxiliary Programs82519 +Node: Examples86255 +Node: Complete87125 +Node: true89230 +Node: automake Invocation91721 +Ref: Invoking automake91876 +Node: configure99471 +Node: Requirements100400 +Node: Optional105638 +Node: aclocal Invocation115040 +Ref: Invoking aclocal115201 +Node: aclocal Options118256 +Node: Macro Search Path121772 +Ref: ACLOCAL_PATH126147 +Node: Extending aclocal127717 +Node: Local Macros131441 +Node: Serials135425 +Node: Future of aclocal140618 +Node: Macros143007 +Node: Public Macros143548 +Ref: Modernize AM_INIT_AUTOMAKE invocation145179 +Node: Obsolete Macros149660 +Node: Private Macros151002 +Node: Directories152452 +Node: Subdirectories154048 +Node: Conditional Subdirectories157439 +Node: SUBDIRS vs DIST_SUBDIRS159119 +Node: Subdirectories with AM_CONDITIONAL160757 +Node: Subdirectories with AC_SUBST161951 +Node: Unconfigured Subdirectories162778 +Node: Alternative166229 +Ref: Alternative-Footnote-1168421 +Node: Subpackages168546 +Node: Programs171893 +Node: A Program173435 +Node: Program Sources174158 +Node: Linking176063 +Node: Conditional Sources179708 +Node: Conditional Programs182634 +Node: A Library184524 +Node: A Shared Library187201 +Node: Libtool Concept188205 +Node: Libtool Libraries190309 +Node: Conditional Libtool Libraries192043 +Node: Conditional Libtool Sources194500 +Node: Libtool Convenience Libraries195887 +Node: Libtool Modules199314 +Node: Libtool Flags200630 +Node: LTLIBOBJS202534 +Node: Libtool Issues203169 +Node: Error required file ltmain.sh not found203510 +Node: Objects created both with libtool and without204731 +Node: Program and Library Variables206655 +Ref: Program and Library Variables-Footnote-1218031 +Node: Default _SOURCES218106 +Node: LIBOBJS220578 +Node: Program Variables225805 +Node: Yacc and Lex229369 +Ref: Yacc and Lex-Footnote-1234993 +Node: C++ Support235256 +Node: Objective C Support236136 +Node: Objective C++ Support237109 +Node: Unified Parallel C Support238131 +Node: Assembly Support239127 +Node: Fortran 77 Support240299 +Ref: Fortran 77 Support-Footnote-1241984 +Node: Preprocessing Fortran 77242187 +Node: Compiling Fortran 77 Files242791 +Node: Mixing Fortran 77 With C and C++243403 +Ref: Mixing Fortran 77 With C and C++-Footnote-1245726 +Node: How the Linker is Chosen246033 +Node: Fortran 9x Support247571 +Node: Compiling Fortran 9x Files248617 +Node: Java Support with gcj249253 +Node: Vala Support250734 +Node: Support for Other Languages252819 +Node: Dependencies253527 +Node: EXEEXT255414 +Node: Other Objects257657 +Node: Scripts258249 +Node: Headers261108 +Node: Data262911 +Node: Sources263596 +Node: Built Sources Example266541 +Node: Other GNU Tools273729 +Node: Emacs Lisp274258 +Node: gettext276356 +Node: Libtool277044 +Node: Java277303 +Node: Python279962 +Node: Documentation285043 +Node: Texinfo285347 +Node: Man Pages292546 +Node: Install295671 +Node: Basics of Installation296375 +Node: The Two Parts of Install297905 +Node: Extending Installation299445 +Node: Staged Installs301288 +Node: Install Rules for the User302701 +Node: Clean303259 +Node: Dist305431 +Node: Basics of Distribution305935 +Node: Fine-grained Distribution Control309166 +Node: The dist Hook310093 +Node: Checking the Distribution312584 +Node: The Types of Distributions318944 +Node: Tests321182 +Node: Generalities about Testing322378 +Node: Simple Tests325313 +Node: Scripts-based Testsuites325694 +Ref: Testsuite progress on console328079 +Ref: Simple tests and color-tests329182 +Node: Serial Test Harness333198 +Node: Parallel Test Harness335296 +Ref: Basics of test metadata335802 +Node: Custom Test Drivers344531 +Node: Overview of Custom Test Drivers Support344822 +Node: Declaring Custom Test Drivers347876 +Node: API for Custom Test Drivers349298 +Node: Command-line arguments for test drivers350075 +Node: Log files generation and test results recording352789 +Node: Testsuite progress output357000 +Node: Using the TAP test protocol358422 +Node: Introduction to TAP358784 +Node: Use TAP with the Automake test harness360601 +Node: Incompatibilities with other TAP parsers and drivers366017 +Node: Links and external resources on TAP367412 +Node: DejaGnu Tests369036 +Node: Install Tests371161 +Node: Rebuilding371471 +Node: Options375146 +Node: Options generalities375447 +Node: List of Automake options377229 +Ref: tar-formats383880 +Node: Miscellaneous387231 +Node: Tags387576 +Node: Suffixes390692 +Node: Include392324 +Node: Conditionals394059 +Node: Usage of Conditionals394918 +Node: Limits of Conditionals398274 +Node: Silencing Make399459 +Node: Make verbosity399810 +Ref: Make verbosity-Footnote-1401132 +Node: Tricks For Silencing Make401206 +Node: Automake Silent Rules403723 +Node: Gnits410707 +Node: Not Enough413186 +Node: Extending413633 +Node: Third-Party Makefiles418668 +Node: Distributing425604 +Node: API Versioning426253 +Node: Upgrading428962 +Node: FAQ431007 +Node: CVS432131 +Node: maintainer-mode440520 +Node: Wildcards444684 +Node: Limitations on File Names448123 +Node: Errors with distclean450753 +Node: Flag Variables Ordering455701 +Node: Renamed Objects463532 +Node: Per-Object Flags465123 +Node: Multiple Outputs468128 +Node: Hard-Coded Install Paths480083 +Node: Debugging Make Rules485239 +Ref: Debugging Make Rules-Footnote-1487396 +Node: Reporting Bugs487574 +Node: Copying This Manual489519 +Node: GNU Free Documentation License489749 +Node: Indices515052 +Node: Macro Index515341 +Node: Variable Index520980 +Node: General Index551856 + +End Tag Table + + +Local Variables: +coding: utf-8 +End: diff --git a/automake-1.15.1/doc/automake.info-1 b/automake-1.15.1/doc/automake.info-1 new file mode 100644 index 0000000..f97b950 --- /dev/null +++ b/automake-1.15.1/doc/automake.info-1 @@ -0,0 +1,6916 @@ +This is automake.info, produced by makeinfo version 6.1 from +automake.texi. + +This manual is for GNU Automake (version 1.15.1, 17 June 2017), a +program that creates GNU standards-compliant Makefiles from template +files. + + Copyright © 1995-2017 Free Software Foundation, Inc. + + 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.†+ +INFO-DIR-SECTION Software development +START-INFO-DIR-ENTRY +* Automake: (automake). Making GNU standards-compliant Makefiles. +END-INFO-DIR-ENTRY + +INFO-DIR-SECTION Individual utilities +START-INFO-DIR-ENTRY +* aclocal-invocation: (automake)aclocal Invocation. Generating aclocal.m4. +* automake-invocation: (automake)automake Invocation. Generating Makefile.in. +END-INFO-DIR-ENTRY + + +File: automake.info, Node: Top, Next: Introduction, Up: (dir) + +GNU Automake +************ + +This manual is for GNU Automake (version 1.15.1, 17 June 2017), a +program that creates GNU standards-compliant Makefiles from template +files. + + Copyright © 1995-2017 Free Software Foundation, Inc. + + 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.†+ +* 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 ‘make’ +* Gnits:: The effect of ‘--gnu’ and ‘--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 + + — 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 ‘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 ‘configure.ac’, using ‘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 ‘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:: ‘dist_’ and ‘nodist_’ prefixes +* The dist Hook:: A target for last-minute distribution changes +* Checking the Distribution:: ‘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 ‘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 ‘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 ‘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 + + + +File: automake.info, Node: Introduction, Next: Autotools Introduction, Prev: Top, Up: Top + +1 Introduction +************** + +Automake is a tool for automatically generating ‘Makefile.in’s from +files called ‘Makefile.am’. Each ‘Makefile.am’ is basically a series of +‘make’ variable definitions(1), with rules being thrown in occasionally. +The generated ‘Makefile.in’s are compliant with the GNU Makefile +standards. + + The GNU Makefile Standards Document (*note (standards)Makefile +Conventions::) 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 ‘Makefile.in’. + + Automake does constrain a project in certain ways; for instance, it +assumes that the project uses Autoconf (*note Introduction: +(autoconf)Top.), and enforces certain restrictions on the ‘configure.ac’ +contents. + + Automake requires ‘perl’ in order to generate the ‘Makefile.in’s. +However, the distributions created by Automake are fully GNU +standards-compliant, and do not require ‘perl’ in order to be built. + + For more information on bug reports, *Note Reporting Bugs::. + + ---------- Footnotes ---------- + + (1) These variables are also called “make macros†in Make +terminology, however in this manual we reserve the term “macro†for +Autoconf’s macros. + + +File: automake.info, Node: Autotools Introduction, Next: Generalities, Prev: Introduction, Up: Top + +2 An Introduction to the Autotools +********************************** + +If you are new to Automake, maybe you know that it is part of a set of +tools called _The Autotools_. Maybe you’ve already delved into a +package full of files named ‘configure’, ‘configure.ac’, ‘Makefile.in’, +‘Makefile.am’, ‘aclocal.m4’, ..., some of them claiming to be _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 +‘automake’-centered continuation, some slides for this introduction are +available in Alexandre Duret-Lutz’s Autotools Tutorial +(http://www.lrde.epita.fr/~adl/autotools.html). 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 + + +File: automake.info, Node: GNU Build System, Next: Use Cases, Up: Autotools Introduction + +2.1 Introducing the GNU Build System +==================================== + +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 ‘make’ (*note Overview: (make)Top.). You express the +recipe to build your package in a ‘Makefile’. This file is a set of +rules to build the files in the package. For instance the program +‘prog’ may be built by running the linker on the files ‘main.o’, +‘foo.o’, and ‘bar.o’; the file ‘main.o’ may be built by running the +compiler on ‘main.c’; etc. Each time ‘make’ is run, it reads +‘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 ‘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 ‘Makefile’ for the 20 +platforms he had to deal with. Instead, he handcrafted a little shell +script called ‘configure’ to automatically adjust the ‘Makefile’ (*note +Genesis: (autoconf)Genesis.). Compiling his package was now as simple +as running ‘./configure && make’. + + Today this process has been standardized in the GNU project. The GNU +Coding Standards (*note The Release Process: (standards)Managing +Releases.) explains how each package of the GNU project should have a +‘configure’ script, and the minimal interface it should have. The +‘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 ‘./configure && make && make install’, and +repeat with the next package to install. + + We call this build system the “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. + + The Autotools are tools that will create a GNU Build System for your +package. Autoconf mostly focuses on ‘configure’ and Automake on +‘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. + + +File: automake.info, Node: Use Cases, Next: Why Autotools, Prev: GNU Build System, Up: Autotools Introduction + +2.2 Use Cases for the GNU Build System +====================================== + +In this section we explore several use cases for the GNU Build System. +You can replay all of these examples on the ‘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 +‘PREFIX/share/doc/automake/amhello-1.0.tar.gz’, where PREFIX is the +installation prefix specified during configuration (PREFIX defaults to +‘/usr/local’, however if Automake was installed by some GNU/Linux +distribution it most likely has been set to ‘/usr’). If you do not have +a copy of Automake installed, you can find a copy of this file inside +the ‘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 + + +File: automake.info, Node: Basic Installation, Next: Standard Targets, Up: Use Cases + +2.2.1 Basic Installation +------------------------ + +The most common installation procedure looks as follows. + + ~ % tar zxf amhello-1.0.tar.gz + ~ % cd amhello-1.0 + ~/amhello-1.0 % ./configure + ... + config.status: creating Makefile + config.status: creating src/Makefile + ... + ~/amhello-1.0 % make + ... + ~/amhello-1.0 % make check + ... + ~/amhello-1.0 % su + Password: + /home/adl/amhello-1.0 # make install + ... + /home/adl/amhello-1.0 # exit + ~/amhello-1.0 % make installcheck + ... + + The user first unpacks the package. Here, and in the following +examples, we will use the non-portable ‘tar zxf’ command for simplicity. +On a system without GNU ‘tar’ installed, this command should read +‘gunzip -c amhello-1.0.tar.gz | tar xf -’. + + The user then enters the newly created directory to run the +‘configure’ script. This script probes the system for various features, +and finally creates the ‘Makefile’s. In this toy example there are only +two ‘Makefile’s, but in real-world projects, there may be many more, +usually one ‘Makefile’ per directory. + + It is now possible to run ‘make’. This will construct all the +programs, libraries, and scripts that need to be constructed for the +package. In our example, this compiles the ‘hello’ program. All files +are constructed in place, in the source tree; we will see later how this +can be changed. + + ‘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 ‘make check’ is a no-op. + + 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 ‘make install’ will +do that. However, by default everything will be installed in +subdirectories of ‘/usr/local’: binaries will go into ‘/usr/local/bin’, +libraries will end up in ‘/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 ‘make install’. In our example, running ‘make +install’ will copy the program ‘hello’ into ‘/usr/local/bin’ and +‘README’ into ‘/usr/local/share/doc/amhello’. + + A last and optional step is to run ‘make installcheck’. This command +may run tests on the installed files. ‘make check’ tests the files in +the source tree, while ‘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 ‘make installcheck’ +will run the very same tests as ‘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 ‘installcheck’ tests because +the existence of ‘installcheck’ is little known, and its usefulness is +neglected. Our little toy package is no better: ‘make installcheck’ +does nothing. + + +File: automake.info, Node: Standard Targets, Next: Standard Directory Variables, Prev: Basic Installation, Up: Use Cases + +2.2.2 Standard ‘Makefile’ Targets +--------------------------------- + +So far we have come across four ways to run ‘make’ in the GNU Build +System: ‘make’, ‘make check’, ‘make install’, and ‘make installcheck’. +The words ‘check’, ‘install’, and ‘installcheck’, passed as arguments to +‘make’, are called “targetsâ€. ‘make’ is a shorthand for ‘make all’, +‘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. + +‘make all’ + Build programs, libraries, documentation, etc. (same as ‘make’). +‘make install’ + Install what needs to be installed, copying the files from the + package’s tree to system-wide directories. +‘make install-strip’ + Same as ‘make install’, then strip debugging symbols. Some users + like to trade space for useful bug reports... +‘make uninstall’ + The opposite of ‘make install’: erase the installed files. (This + needs to be run from the same build tree that was installed.) +‘make clean’ + Erase from the build tree the files built by ‘make all’. +‘make distclean’ + Additionally erase anything ‘./configure’ created. +‘make check’ + Run the test suite, if any. +‘make installcheck’ + Check the installed programs or libraries, if supported. +‘make dist’ + Recreate ‘PACKAGE-VERSION.tar.gz’ from all the source files. + + +File: automake.info, Node: Standard Directory Variables, Next: Standard Configuration Variables, Prev: Standard Targets, Up: Use Cases + +2.2.3 Standard Directory Variables +---------------------------------- + +The GNU Coding Standards also specify a hierarchy of variables to denote +installation directories. Some of these are: + +Directory variable Default value +------------------------------------------------------- +‘prefix’ ‘/usr/local’ + ‘exec_prefix’ ‘${prefix}’ + ‘bindir’ ‘${exec_prefix}/bin’ + ‘libdir’ ‘${exec_prefix}/lib’ + ... + ‘includedir’ ‘${prefix}/include’ + ‘datarootdir’ ‘${prefix}/share’ + ‘datadir’ ‘${datarootdir}’ + ‘mandir’ ‘${datarootdir}/man’ + ‘infodir’ ‘${datarootdir}/info’ + ‘docdir’ ‘${datarootdir}/doc/${PACKAGE}’ + ... + + 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 ‘amhello-1.0’, the program ‘hello’ +is to be installed in BINDIR, the directory for binaries. The default +value for this directory is ‘/usr/local/bin’, but the user can supply a +different value when calling ‘configure’. Also the file ‘README’ will +be installed into DOCDIR, which defaults to +‘/usr/local/share/doc/amhello’. + + As a user, if you wish to install a package on your own account, you +could proceed as follows: + + ~/amhello-1.0 % ./configure --prefix ~/usr + ... + ~/amhello-1.0 % make + ... + ~/amhello-1.0 % make install + ... + + This would install ‘~/usr/bin/hello’ and +‘~/usr/share/doc/amhello/README’. + + The list of all such directory options is shown by ‘./configure +--help’. + + +File: automake.info, Node: Standard Configuration Variables, Next: config.site, Prev: Standard Directory Variables, Up: Use Cases + +2.2.4 Standard Configuration Variables +-------------------------------------- + +The GNU Coding Standards also define a set of standard configuration +variables used during the build. Here are some: + +‘CC’ + C compiler command +‘CFLAGS’ + C compiler flags +‘CXX’ + C++ compiler command +‘CXXFLAGS’ + C++ compiler flags +‘LDFLAGS’ + linker flags +‘CPPFLAGS’ + C/C++ preprocessor flags +... + + ‘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 ‘configure’ to force it to use ‘gcc-3’ as +C compiler, use header files from ‘~/usr/include’ when compiling, and +libraries from ‘~/usr/lib’ when linking. + + ~/amhello-1.0 % ./configure --prefix ~/usr CC=gcc-3 \ + CPPFLAGS=-I$HOME/usr/include LDFLAGS=-L$HOME/usr/lib + + Again, a full list of these variables appears in the output of +‘./configure --help’. + + +File: automake.info, Node: config.site, Next: VPATH Builds, Prev: Standard Configuration Variables, Up: Use Cases + +2.2.5 Overriding Default Configuration Setting with ‘config.site’ +----------------------------------------------------------------- + +When installing several packages using the same setup, it can be +convenient to create a file to capture common settings. If a file named +‘PREFIX/share/config.site’ exists, ‘configure’ will source it at the +beginning of its execution. + + Recall the command from the previous section: + + ~/amhello-1.0 % ./configure --prefix ~/usr CC=gcc-3 \ + CPPFLAGS=-I$HOME/usr/include LDFLAGS=-L$HOME/usr/lib + + Assuming we are installing many package in ‘~/usr’, and will always +want to use these definitions of ‘CC’, ‘CPPFLAGS’, and ‘LDFLAGS’, we can +automate this by creating the following ‘~/usr/share/config.site’ file: + + test -z "$CC" && CC=gcc-3 + test -z "$CPPFLAGS" && CPPFLAGS=-I$HOME/usr/include + test -z "$LDFLAGS" && LDFLAGS=-L$HOME/usr/lib + + Now, any time a ‘configure’ script is using the ‘~/usr’ prefix, it +will execute the above ‘config.site’ and define these three variables. + + ~/amhello-1.0 % ./configure --prefix ~/usr + configure: loading site script /home/adl/usr/share/config.site + ... + + *Note Setting Site Defaults: (autoconf)Site Defaults, for more +information about this feature. + + +File: automake.info, Node: VPATH Builds, Next: Two-Part Install, Prev: config.site, Up: Use Cases + +2.2.6 Parallel Build Trees (a.k.a. VPATH Builds) +------------------------------------------------ + +The GNU Build System distinguishes two trees: the source tree, and the +build tree. + + The source tree is rooted in the directory containing ‘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 ‘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 ‘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 (*note 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 ‘configure’ to build everything +in a subdirectory called ‘build/’. + + ~ % tar zxf ~/amhello-1.0.tar.gz + ~ % cd amhello-1.0 + ~/amhello-1.0 % mkdir build && cd build + ~/amhello-1.0/build % ../configure + ... + ~/amhello-1.0/build % make + ... + + These setups, where source and build trees are different, are often +called “parallel builds†or “VPATH buildsâ€. The expression _parallel +build_ is misleading: the word _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 _VPATH builds_ in the following. _VPATH_ is the name of +the ‘make’ feature used by the ‘Makefile’s to allow these builds (*note +‘VPATH’ Search Path for All Prerequisites: (make)General Search.). + + VPATH builds have other interesting uses. One is to build the same +sources with multiple configurations. For instance: + + ~ % tar zxf ~/amhello-1.0.tar.gz + ~ % cd amhello-1.0 + ~/amhello-1.0 % mkdir debug optim && cd debug + ~/amhello-1.0/debug % ../configure CFLAGS='-g -O0' + ... + ~/amhello-1.0/debug % make + ... + ~/amhello-1.0/debug % cd ../optim + ~/amhello-1.0/optim % ../configure CFLAGS='-O3 -fomit-frame-pointer' + ... + ~/amhello-1.0/optim % make + ... + + 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: ‘HOST1’ and +‘HOST2’, which may be different platforms. + + ~ % cd /nfs/src + /nfs/src % tar zxf ~/amhello-1.0.tar.gz + + On the first host, you could create a local build directory: + [HOST1] ~ % mkdir /tmp/amh && cd /tmp/amh + [HOST1] /tmp/amh % /nfs/src/amhello-1.0/configure + ... + [HOST1] /tmp/amh % make && sudo make install + ... + +(Here we assume that the installer has configured ‘sudo’ so it can +execute ‘make install’ with root privileges; it is more convenient than +using ‘su’ like in *note Basic Installation::). + + On the second host, you would do exactly the same, possibly at the +same time: + [HOST2] ~ % mkdir /tmp/amh && cd /tmp/amh + [HOST2] /tmp/amh % /nfs/src/amhello-1.0/configure + ... + [HOST2] /tmp/amh % make && sudo make install + ... + + In this scenario, nothing forbids the ‘/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.) + + +File: automake.info, Node: Two-Part Install, Next: Cross-Compilation, Prev: VPATH Builds, Up: Use Cases + +2.2.7 Two-Part Installation +--------------------------- + +In our last example (*note 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 ‘Makefile’ targets to +install each of these classes of files. + + These targets are ‘install-exec’ for architecture-dependent files and +‘install-data’ for architecture-independent files. The command we used +up to now, ‘make install’, can be thought of as a shorthand for ‘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 +(*note Standard Directory Variables::), all the variables based on +EXEC-PREFIX designate architecture-dependent directories whose files +will be installed by ‘make install-exec’. The others designate +architecture-independent directories and will serve files installed by +‘make install-data’. *Note 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 ‘/usr’, and +(2) the directory ‘/usr/share’ is shared by the two hosts. + + On the first host we would run + [HOST1] ~ % mkdir /tmp/amh && cd /tmp/amh + [HOST1] /tmp/amh % /nfs/src/amhello-1.0/configure --prefix /usr + ... + [HOST1] /tmp/amh % make && sudo make install + ... + + On the second host, however, we need only install the +architecture-specific files. + [HOST2] ~ % mkdir /tmp/amh && cd /tmp/amh + [HOST2] /tmp/amh % /nfs/src/amhello-1.0/configure --prefix /usr + ... + [HOST2] /tmp/amh % make && sudo make install-exec + ... + + In packages that have installation checks, it would make sense to run +‘make installcheck’ (*note Basic Installation::) to verify that the +package works correctly despite the apparent partial installation. + + +File: automake.info, Node: Cross-Compilation, Next: Renaming, Prev: Two-Part Install, Up: Use Cases + +2.2.8 Cross-Compilation +----------------------- + +To “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 “build platform†on which the compilation is +performed, and the “host platform†on which the resulting executable is +expected to run. The following ‘configure’ options are used to specify +each of them: + +‘--build=BUILD’ + The system on which the package is built. +‘--host=HOST’ + The system where built programs and libraries will run. + + When the ‘--host’ is used, ‘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 +‘i586-mingw32msvc-gcc’, ‘i586-mingw32msvc-ld’, ‘i586-mingw32msvc-as’, +etc. + + Here is how we could build ‘amhello-1.0’ for ‘i586-mingw32msvc’ on a +GNU/Linux PC. + + ~/amhello-1.0 % ./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... + ... + ~/amhello-1.0 % make + ... + ~/amhello-1.0 % cd src; file hello.exe + hello.exe: MS Windows PE 32-bit Intel 80386 console executable not relocatable + + The ‘--host’ and ‘--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. + +‘--target=TARGET’ + When building compiler tools: the system for which the tools will + create output. + + For instance when installing GCC, the GNU Compiler Collection, we can +use ‘--target=TARGET’ to specify that we want to build GCC as a +cross-compiler for TARGET. Mixing ‘--build’ and ‘--target’, we can +actually cross-compile a cross-compiler; such a three-way +cross-compilation is known as a “Canadian crossâ€. + + *Note Specifying the System Type: (autoconf)Specifying Names, for +more information about these ‘configure’ options. + + +File: automake.info, Node: Renaming, Next: DESTDIR, Prev: Cross-Compilation, Up: Use Cases + +2.2.9 Renaming Programs at Install Time +--------------------------------------- + +The GNU Build System provides means to automatically rename executables +and manpages before they are installed (*note 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 ‘tar’ as ‘gtar’ so you can +distinguish it from your vendor’s ‘tar’. + + This can be done using one of these three ‘configure’ options. + +‘--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. + + The following commands would install ‘hello’ as +‘/usr/local/bin/test-hello’, for instance. + + ~/amhello-1.0 % ./configure --program-prefix test- + ... + ~/amhello-1.0 % make + ... + ~/amhello-1.0 % sudo make install + ... + + +File: automake.info, Node: DESTDIR, Next: Preparing Distributions, Prev: Renaming, Up: Use Cases + +2.2.10 Building Binary Packages Using DESTDIR +--------------------------------------------- + +The GNU Build System’s ‘make install’ and ‘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 ‘make install’ is inappropriate. + + The ‘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., ‘--prefix /usr’), but when running ‘make +install’, the ‘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. + + For instance here is how we could create a binary package containing +a snapshot of all the files to be installed. + + ~/amhello-1.0 % ./configure --prefix /usr + ... + ~/amhello-1.0 % make + ... + ~/amhello-1.0 % make DESTDIR=$HOME/inst install + ... + ~/amhello-1.0 % cd ~/inst + ~/inst % find . -type f -print > ../files.lst + ~/inst % tar zcvf ~/amhello-1.0-i686.tar.gz `cat ../files.lst` + ./usr/bin/hello + ./usr/share/doc/amhello/README + + After this example, ‘amhello-1.0-i686.tar.gz’ is ready to be +uncompressed in ‘/’ on many hosts. (Using ‘`cat ../files.lst`’ instead +of ‘.’ as argument for ‘tar’ avoids entries for each subdirectory in the +archive: we would not like ‘tar’ to restore the modification time of +‘/’, ‘/usr/’, etc.) + + Note that when building packages for several architectures, it might +be convenient to use ‘make install-data’ and ‘make install-exec’ (*note +Two-Part Install::) to gather architecture-independent files in a single +package. + + *Note Install::, for more information. + + +File: automake.info, Node: Preparing Distributions, Next: Dependency Tracking, Prev: DESTDIR, Up: Use Cases + +2.2.11 Preparing Distributions +------------------------------ + +We have already mentioned ‘make dist’. This target collects all your +source files and the necessary parts of the build system to create a +tarball named ‘PACKAGE-VERSION.tar.gz’. + + Another, more useful command is ‘make distcheck’. The ‘distcheck’ +target constructs ‘PACKAGE-VERSION.tar.gz’ just as well as ‘dist’, but +it additionally ensures most of the use cases presented so far work: + + • It attempts a full compilation of the package (*note Basic + Installation::), unpacking the newly constructed tarball, running + ‘make’, ‘make check’, ‘make install’, as well as ‘make + installcheck’, and even ‘make dist’, + • it tests VPATH builds with read-only source tree (*note VPATH + Builds::), + • it makes sure ‘make clean’, ‘make distclean’, and ‘make uninstall’ + do not omit any file (*note Standard Targets::), + • and it checks that ‘DESTDIR’ installations work (*note DESTDIR::). + + 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 ‘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 ‘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 ‘distcheck’ (like ‘DESTDIR’ not working because of a +typo, or a distributed file being erased by ‘make clean’, or even +‘VPATH’ builds not working). + + *Note Creating amhello::, to recreate ‘amhello-1.0.tar.gz’ using +‘make distcheck’. *Note Checking the Distribution::, for more +information about ‘distcheck’. + + +File: automake.info, Node: Dependency Tracking, Next: Nested Packages, Prev: Preparing Distributions, Up: Use Cases + +2.2.12 Automatic 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 ‘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, *note +Dependencies::. + + When ‘configure’ is executed, you can see it probing each compiler +for the dependency mechanism it supports (several mechanisms can be +used): + + ~/amhello-1.0 % ./configure --prefix /usr + ... + checking dependency style of gcc... gcc3 + ... + + 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: +‘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 ‘configure’ option to disable this: + +‘--disable-dependency-tracking’ + Speed up one-time builds. + + 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 ‘--enable-dependency-tracking’ must +be passed to ‘configure’ to activate them. + +‘--enable-dependency-tracking’ + Do not reject slow dependency extractors. + + *Note Dependency Tracking Evolution: (automake-history)Dependency +Tracking Evolution, for some discussion about the different dependency +tracking schemes used by Automake over the years. + + +File: automake.info, Node: Nested Packages, Prev: Dependency Tracking, Up: Use Cases + +2.2.13 Nested Packages +---------------------- + +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 ‘configure’ script of A will +run the ‘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 ‘configure’ options given to +the top-level ‘configure’ are passed recursively to nested ‘configure’s. +A package that does not understand an option will ignore it, assuming it +is meaningful to some other package. + + The command ‘configure --help=recursive’ can be used to display the +options supported by all the included packages. + + *Note Subpackages::, for an example setup. + + +File: automake.info, Node: Why Autotools, Next: Hello World, Prev: Use Cases, Up: Autotools Introduction + +2.3 How Autotools Help +====================== + +There are several reasons why you may not want to implement the GNU +Build System yourself (read: write a ‘configure’ script and ‘Makefile’s +yourself). + + • As we have seen, the GNU Build System has a lot of features (*note + Use Cases::). Some users may expect features you have not + implemented because you did not need them. + • Implementing these features portably is difficult and exhausting. + Think of writing portable shell scripts, and portable ‘Makefile’s, + for systems you may not have handy. *Note Portable Shell + Programming: (autoconf)Portable Shell, to convince yourself. + • You will have to upgrade your setup to follow changes to the GNU + Coding Standards. + + The GNU Autotools take all this burden off your back and provide: + + • Tools to create a portable, complete, and self-contained GNU Build + System, from simple instructions. _Self-contained_ meaning the + resulting build system does not require the GNU Autotools. + • A central place where fixes and improvements are made: a bug-fix + for a portability issue will benefit every package. + + Yet there also exist reasons why you may want NOT to use the +Autotools... 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. + + +File: automake.info, Node: Hello World, Prev: Why Autotools, Up: Autotools Introduction + +2.4 A Small Hello World +======================= + +In this section we recreate the ‘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 +‘configure.ac’ and ‘Makefile.am’ files read by the Autotools. + +* Menu: + +* Creating amhello:: Create ‘amhello-1.0.tar.gz’ from scratch +* amhello's configure.ac Setup Explained:: +* amhello's Makefile.am Setup Explained:: + + +File: automake.info, Node: Creating amhello, Next: amhello's configure.ac Setup Explained, Up: Hello World + +2.4.1 Creating ‘amhello-1.0.tar.gz’ +----------------------------------- + +Here is how we can recreate ‘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 ‘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. + + • ‘src/main.c’ is the source file for the ‘hello’ program. We store + it in the ‘src/’ subdirectory, because later, when the package + evolves, it will ease the addition of a ‘man/’ directory for man + pages, a ‘data/’ directory for data files, etc. + ~/amhello % cat src/main.c + #include + #include + + int + main (void) + { + puts ("Hello World!"); + puts ("This is " PACKAGE_STRING "."); + return 0; + } + + • ‘README’ contains some very limited documentation for our little + package. + ~/amhello % cat README + This is a demonstration package for GNU Automake. + Type 'info Automake' to read the Automake manual. + + • ‘Makefile.am’ and ‘src/Makefile.am’ contain Automake instructions + for these two directories. + + ~/amhello % cat src/Makefile.am + bin_PROGRAMS = hello + hello_SOURCES = main.c + ~/amhello % cat Makefile.am + SUBDIRS = src + dist_doc_DATA = README + + • Finally, ‘configure.ac’ contains Autoconf instructions to create + the ‘configure’ script. + + ~/amhello % cat configure.ac + 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 + + Once you have these five files, it is time to run the Autotools to +instantiate the build system. Do this using the ‘autoreconf’ command as +follows: + + ~/amhello % autoreconf --install + configure.ac: installing './install-sh' + configure.ac: installing './missing' + configure.ac: installing './compile' + src/Makefile.am: installing './depcomp' + + At this point the build system is complete. + + In addition to the three scripts mentioned in its output, you can see +that ‘autoreconf’ created four other files: ‘configure’, ‘config.h.in’, +‘Makefile.in’, and ‘src/Makefile.in’. The latter three files are +templates that will be adapted to the system by ‘configure’ under the +names ‘config.h’, ‘Makefile’, and ‘src/Makefile’. Let’s do this: + + ~/amhello % ./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 + + You can see ‘Makefile’, ‘src/Makefile’, and ‘config.h’ being created +at the end after ‘configure’ has probed the system. It is now possible +to run all the targets we wish (*note Standard Targets::). For +instance: + + ~/amhello % make + ... + ~/amhello % src/hello + Hello World! + This is amhello 1.0. + ~/amhello % make distcheck + ... + ============================================= + amhello-1.0 archives ready for distribution: + amhello-1.0.tar.gz + ============================================= + + Note that running ‘autoreconf’ is only needed initially when the GNU +Build System does not exist. When you later change some instructions in +a ‘Makefile.am’ or ‘configure.ac’, the relevant part of the build system +will be regenerated automatically when you execute ‘make’. + + ‘autoreconf’ is a script that calls ‘autoconf’, ‘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 ‘autoconf’ is in charge of creating ‘configure’ from +‘configure.ac’, while ‘automake’ is in charge of creating ‘Makefile.in’s +from ‘Makefile.am’s and ‘configure.ac’. This should at least direct you +to the right manual when seeking answers. + + +File: automake.info, Node: amhello's configure.ac Setup Explained, Next: amhello's Makefile.am Setup Explained, Prev: Creating amhello, Up: Hello World + +2.4.2 ‘amhello’’s ‘configure.ac’ Setup Explained +------------------------------------------------ + +Let us begin with the contents of ‘configure.ac’. + + 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 + + This file is read by both ‘autoconf’ (to create ‘configure’) and +‘automake’ (to create the various ‘Makefile.in’s). It contains a series +of M4 macros that will be expanded as shell code to finally form the +‘configure’ script. We will not elaborate on the syntax of this file, +because the Autoconf manual has a whole section about it (*note Writing +‘configure.ac’: (autoconf)Writing Autoconf Input.). + + The macros prefixed with ‘AC_’ are Autoconf macros, documented in the +Autoconf manual (*note Autoconf Macro Index: (autoconf)Autoconf Macro +Index.). The macros that start with ‘AM_’ are Automake macros, +documented later in this manual (*note Macro Index::). + + The first two lines of ‘configure.ac’ initialize Autoconf and +Automake. ‘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 ‘./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. + + The argument to ‘AM_INIT_AUTOMAKE’ is a list of options for +‘automake’ (*note Options::). ‘-Wall’ and ‘-Werror’ ask ‘automake’ to +turn on all warnings and report them as errors. We are speaking of +*Automake* warnings here, such as dubious instructions in ‘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 ‘-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 ‘foreign’ option tells Automake that this package will not +follow the GNU Standards. GNU packages should always distribute +additional files such as ‘ChangeLog’, ‘AUTHORS’, etc. We do not want +‘automake’ to complain about these missing files in our small example. + + The ‘AC_PROG_CC’ line causes the ‘configure’ script to search for a C +compiler and define the variable ‘CC’ with its name. The +‘src/Makefile.in’ file generated by Automake uses the variable ‘CC’ to +build ‘hello’, so when ‘configure’ creates ‘src/Makefile’ from +‘src/Makefile.in’, it will define ‘CC’ with the value it has found. If +Automake is asked to create a ‘Makefile.in’ that uses ‘CC’ but +‘configure.ac’ does not define it, it will suggest you add a call to +‘AC_PROG_CC’. + + The ‘AC_CONFIG_HEADERS([config.h])’ invocation causes the ‘configure’ +script to create a ‘config.h’ file gathering ‘#define’s defined by other +macros in ‘configure.ac’. In our case, the ‘AC_INIT’ macro already +defined a few of them. Here is an excerpt of ‘config.h’ after +‘configure’ has run: + + ... + /* Define to the address where bug reports for this package should be sent. */ + #define PACKAGE_BUGREPORT "bug-automake@gnu.org" + + /* Define to the full name and version of this package. */ + #define PACKAGE_STRING "amhello 1.0" + ... + + As you probably noticed, ‘src/main.c’ includes ‘config.h’ so it can +use ‘PACKAGE_STRING’. In a real-world project, ‘config.h’ can grow +really big, with one ‘#define’ per feature probed on the system. + + The ‘AC_CONFIG_FILES’ macro declares the list of files that +‘configure’ should create from their ‘*.in’ templates. Automake also +scans this list to find the ‘Makefile.am’ files it must process. (This +is important to remember: when adding a new directory to your project, +you should add its ‘Makefile’ to this list, otherwise Automake will +never process the new ‘Makefile.am’ you wrote in that directory.) + + Finally, the ‘AC_OUTPUT’ line is a closing command that actually +produces the part of the script in charge of creating the files +registered with ‘AC_CONFIG_HEADERS’ and ‘AC_CONFIG_FILES’. + + When starting a new project, we suggest you start with such a simple +‘configure.ac’, and gradually add the other tests it requires. The +command ‘autoscan’ can also suggest a few of the tests your package may +need (*note Using ‘autoscan’ to Create ‘configure.ac’: +(autoconf)autoscan Invocation.). + + +File: automake.info, Node: amhello's Makefile.am Setup Explained, Prev: amhello's configure.ac Setup Explained, Up: Hello World + +2.4.3 ‘amhello’’s ‘Makefile.am’ Setup Explained +----------------------------------------------- + +We now turn to ‘src/Makefile.am’. This file contains Automake +instructions to build and install ‘hello’. + + bin_PROGRAMS = hello + hello_SOURCES = main.c + + A ‘Makefile.am’ has the same syntax as an ordinary ‘Makefile’. When +‘automake’ processes a ‘Makefile.am’ it copies the entire file into the +output ‘Makefile.in’ (that will be later turned into ‘Makefile’ by +‘configure’) but will react to certain variable definitions by +generating some build rules and other variables. Often ‘Makefile.am’s +contain only a list of variable definitions as above, but they can also +contain other variable and rule definitions that ‘automake’ will pass +along without interpretation. + + Variables that end with ‘_PROGRAMS’ are special variables that list +programs that the resulting ‘Makefile’ should build. In Automake speak, +this ‘_PROGRAMS’ suffix is called a “primaryâ€; Automake recognizes other +primaries such as ‘_SCRIPTS’, ‘_DATA’, ‘_LIBRARIES’, etc. corresponding +to different types of files. + + The ‘bin’ part of the ‘bin_PROGRAMS’ tells ‘automake’ that the +resulting programs should be installed in BINDIR. Recall that the GNU +Build System uses a set of variables to denote destination directories +and allow users to customize these locations (*note Standard Directory +Variables::). Any such directory variable can be put in front of a +primary (omitting the ‘dir’ suffix) to tell ‘automake’ where to install +the listed files. + + Programs need to be built from source files, so for each program +‘PROG’ listed in a ‘_PROGRAMS’ variable, ‘automake’ will look for +another variable named ‘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 +‘hello_SOURCES’ declaration is that ‘main.c’ will be part of the tarball +created by ‘make dist’. + + Finally here are some explanations regarding the top-level +‘Makefile.am’. + + SUBDIRS = src + dist_doc_DATA = README + + ‘SUBDIRS’ is a special variable listing all directories that ‘make’ +should recurse into before processing the current directory. So this +line is responsible for ‘make’ building ‘src/hello’ even though we run +it from the top-level. This line also causes ‘make install’ to install +‘src/hello’ before installing ‘README’ (not that this order matters). + + The line ‘dist_doc_DATA = README’ causes ‘README’ to be distributed +and installed in DOCDIR. Files listed with the ‘_DATA’ primary are not +automatically part of the tarball built with ‘make dist’, so we add the +‘dist_’ prefix so they get distributed. However, for ‘README’ it would +not have been necessary: ‘automake’ automatically distributes any +‘README’ file it encounters (the list of other files automatically +distributed is presented by ‘automake --help’). The only important +effect of this second line is therefore to install ‘README’ during ‘make +install’. + + One thing not covered in this example is accessing the installation +directory values (*note Standard Directory Variables::) from your +program code, that is, converting them into defined macros. For this, +*note (autoconf)Defining Directories::. + + +File: automake.info, Node: Generalities, Next: Examples, Prev: Autotools Introduction, Up: Top + +3 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 + + +File: automake.info, Node: General Operation, Next: Strictness, Up: Generalities + +3.1 General Operation +===================== + +Automake works by reading a ‘Makefile.am’ and generating a +‘Makefile.in’. Certain variables and rules defined in the ‘Makefile.am’ +instruct Automake to generate more specialized code; for instance, a +‘bin_PROGRAMS’ variable definition will cause rules for compiling and +linking programs to be generated. + + The variable definitions and rules in the ‘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 ‘Makefile.in’. For instance, the Automake distribution +includes a non-standard rule for the ‘git-dist’ target, which the +Automake maintainer uses to make distributions from the source control +system. + + Note that most GNU make extensions are not recognized by Automake. +Using such extensions in a ‘Makefile.am’ will lead to errors or +confusing behavior. + + A special exception is that the GNU make append operator, ‘+=’, is +supported. This operator appends its right hand argument to the +variable specified on the left. Automake will translate the operator +into an ordinary ‘=’ operator; ‘+=’ will thus work with any make +program. + + Automake tries to keep comments grouped with any adjoining rules or +variable definitions. + + 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. For example, characters cannot +be used between a target name and the following “‘:’†character, and +variable assignments shouldn’t be indented with characters. Also, +using more complex macro in target names can cause trouble: + + % cat Makefile.am + $(FOO:=x): bar + % automake + Makefile.am:1: bad characters in variable name '$(FOO' + Makefile.am:1: ':='-style assignments are not portable + + A rule defined in ‘Makefile.am’ generally overrides any such rule of +a similar name that would be automatically generated by ‘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. + + Similarly, a variable defined in ‘Makefile.am’ or ‘AC_SUBST’ed from +‘configure.ac’ will override any definition of the variable that +‘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 ‘automake’ are considered to be for internal use +only, and their names might change in future releases. + + When examining a variable definition, Automake will recursively +examine variables referenced in the definition. For example, if +Automake is looking at the content of ‘foo_SOURCES’ in this snippet + + xs = a.c b.c + foo_SOURCES = c.c $(xs) + + it would use the files ‘a.c’, ‘b.c’, and ‘c.c’ as the contents of +‘foo_SOURCES’. + + Automake also allows a form of comment that is _not_ copied into the +output; all lines beginning with ‘##’ (leading spaces allowed) are +completely ignored by Automake. + + It is customary to make the first line of ‘Makefile.am’ read: + + ## Process this file with automake to produce Makefile.in + + +File: automake.info, Node: Strictness, Next: Uniform, Prev: General Operation, Up: Generalities + +3.2 Strictness +============== + +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. + + To this end, Automake supports three levels of “strictnessâ€â€”the +strictness indicating how stringently Automake should check standards +conformance. + + The valid strictness levels are: + +‘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 ‘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. + +‘gnu’ + Automake will check—as much as possible—for compliance to the GNU + standards for packages. This is the default. + +‘gnits’ + Automake will check for compliance to the as-yet-unwritten “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). + + *Note Gnits::, for more information on the precise implications of +the strictness level. + + +File: automake.info, Node: Uniform, Next: Length Limitations, Prev: Strictness, Up: Generalities + +3.3 The Uniform Naming Scheme +============================= + +Automake variables generally follow a “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 ‘configure’ time +determination of what should be built. + + At ‘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 ‘automake’ what is being built is commonly +called the “primaryâ€. For instance, the primary ‘PROGRAMS’ holds a list +of programs that are to be compiled and linked. + + 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 +(*note (standards)Directory Variables::). Automake extends this list +with ‘pkgdatadir’, ‘pkgincludedir’, ‘pkglibdir’, and ‘pkglibexecdir’; +these are the same as the non-‘pkg’ versions, but with ‘$(PACKAGE)’ +appended. For instance, ‘pkglibdir’ is defined as +‘$(libdir)/$(PACKAGE)’. + + For each primary, there is one additional variable named by +prepending ‘EXTRA_’ to the primary name. This variable is used to list +objects that may or may not be built, depending on what ‘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 +‘Makefile.in’ that will work in all cases. + + For instance, ‘cpio’ decides at configure time which programs should +be built. Some of the programs are installed in ‘bindir’, and some are +installed in ‘sbindir’: + + EXTRA_PROGRAMS = mt rmt + bin_PROGRAMS = cpio pax + sbin_PROGRAMS = $(MORE_PROGRAMS) + + Defining a primary without a prefix as a variable, e.g., ‘PROGRAMS’, +is an error. + + Note that the common ‘dir’ suffix is left off when constructing the +variable names; thus one writes ‘bin_PROGRAMS’ and not +‘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. + + 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., ‘zar’) is valid if a variable of the +same name with ‘dir’ appended is defined (e.g., ‘zardir’). + + For instance, the following snippet will install ‘file.xml’ into +‘$(datadir)/xml’. + + xmldir = $(datadir)/xml + xml_DATA = file.xml + + 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: + + # Forbidden directory combinations, automake will error out on this. + pkglib_PROGRAMS = foo + doc_LIBRARIES = libquux.a + +but it will succeed with this: + + # 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 + + The ‘exec’ substring of the ‘my_execbindir’ variable lets the files +be installed at the right time (*note The Two Parts of Install::). + + The special prefix ‘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 (*note A Library::), or helper scripts. + + The special prefix ‘check_’ indicates that the objects in question +should not be built until the ‘make check’ command is run. Those +objects are not installed either. + + The current primary names are ‘PROGRAMS’, ‘LIBRARIES’, ‘LTLIBRARIES’, +‘LISP’, ‘PYTHON’, ‘JAVA’, ‘SCRIPTS’, ‘DATA’, ‘HEADERS’, ‘MANS’, and +‘TEXINFOS’. + + Some primaries also allow additional prefixes that control other +aspects of ‘automake’’s behavior. The currently defined prefixes are +‘dist_’, ‘nodist_’, ‘nobase_’, and ‘notrans_’. These prefixes are +explained later (*note Program and Library Variables::) (*note Man +Pages::). + + +File: automake.info, Node: Length Limitations, Next: Canonicalization, Prev: Uniform, Up: Generalities + +3.4 Staying below the command line length limit +=============================================== + +Traditionally, most unix-like systems have a length limitation for the +command line arguments and environment contents when creating new +processes (see for example + for an overview on this +issue), which of course also applies to commands spawned by ‘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, + + data_DATA = file1 ... fileN fileN+1 ... file2N + +may also be written as + + data_DATA = file1 ... fileN + data2dir = $(datadir) + data2_DATA = fileN+1 ... file2N + +and will cause Automake to treat the two lists separately during ‘make +install’. See *note The Two Parts of Install:: for choosing directory +names that will keep the ordering of the two parts of installation Note +that ‘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 ‘${srcdir}/’ is prepended to file names, as +can happen with above ‘$(data_DATA)’ lists, it limits the amount of +arguments passed to external commands. + + Unfortunately, some system’s ‘make’ commands may prepend ‘VPATH’ +prefixes like ‘${srcdir}/’ to file names from the source tree +automatically (*note Automatic Rule Rewriting: (autoconf)Automatic Rule +Rewriting.). 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 (*note Libtool Convenience Libraries::). + + +File: automake.info, Node: Canonicalization, Next: User Variables, Prev: Length Limitations, Up: Generalities + +3.5 How derived variables are named +=================================== + +Sometimes a Makefile variable name is derived from some text the +maintainer supplies. For instance, a program name listed in ‘_PROGRAMS’ +is rewritten into the name of a ‘_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 ‘sniff-glue’, the derived +variable name would be ‘sniff_glue_SOURCES’, not ‘sniff-glue_SOURCES’. +Similarly the sources for a library named ‘libmumble++.a’ should be +listed in the ‘libmumble___a_SOURCES’ variable. + + The strudel is an addition, to make the use of Autoconf substitutions +in variable names less obfuscating. + + +File: automake.info, Node: User Variables, Next: Auxiliary Programs, Prev: Canonicalization, Up: Generalities + +3.6 Variables reserved for the user +=================================== + +Some ‘Makefile’ variables are reserved by the GNU Coding Standards for +the use of the “userâ€â€”the person building the package. For instance, +‘CFLAGS’ is one such variable. + + Sometimes package developers are tempted to set user variables such +as ‘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 ‘CC’, where they would make no sense.) +The shadow variable is named by prepending ‘AM_’ to the user variable’s +name. For instance, the shadow variable for ‘YFLAGS’ is ‘AM_YFLAGS’. +The package maintainer—that is, the author(s) of the ‘Makefile.am’ and +‘configure.ac’ files—may adjust these shadow variables however +necessary. + + *Note Flag Variables Ordering::, for more discussion about these +variables and how they interact with per-target variables. + + +File: automake.info, Node: Auxiliary Programs, Prev: User Variables, Up: Generalities + +3.7 Programs automake might require +=================================== + +Automake sometimes requires helper programs so that the generated +‘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. + +‘ar-lib’ + This is a wrapper primarily for the Microsoft lib archiver, to make + it more POSIX-like. + +‘compile’ + This is a wrapper for compilers that do not accept options ‘-c’ and + ‘-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: ‘-I’, ‘-L’, ‘-l’, ‘-Wl,’ and + ‘-Xlinker’. + +‘config.guess’ +‘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 before + making a release. + +‘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 (*note Dependencies::). + +‘install-sh’ + This is a replacement for the ‘install’ program that works on + platforms where ‘install’ is unavailable or unusable. + +‘mdate-sh’ + This script is used to generate a ‘version.texi’ file. It examines + a file and prints some date information about it. + +‘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, ‘missing’ will print an informative warning before failing + out, to provide the user with more context and information. + +‘mkinstalldirs’ + This script used to be a wrapper around ‘mkdir -p’, which is not + portable. Now we prefer to use ‘install-sh -d’ when ‘configure’ + finds that ‘mkdir -p’ does not work, this makes one less script to + distribute. + + For backward compatibility ‘mkinstalldirs’ is still used and + distributed when ‘automake’ finds it in a package. But it is no + longer installed automatically, and it should be safe to remove it. + +‘py-compile’ + This is used to byte-compile Python scripts. + +‘test-driver’ + This implements the default test driver offered by the parallel + testsuite harness. + +‘texinfo.tex’ + Not a program, this file is required for ‘make dvi’, ‘make ps’ and + ‘make pdf’ to work when Texinfo sources are in the package. The + latest version can be downloaded from + . + +‘ylwrap’ + This program wraps ‘lex’ and ‘yacc’ to rename their output files. + It also ensures that, for instance, multiple ‘yacc’ instances can + be invoked in a single directory in parallel. + + +File: automake.info, Node: Examples, Next: automake Invocation, Prev: Generalities, Up: Top + +4 Some example packages +*********************** + +This section contains two small examples. + + The first example (*note Complete::) assumes you have an existing +project already using Autoconf, with handcrafted ‘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 (*note Hello World::). + + The second example (*note 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 + + +File: automake.info, Node: Complete, Next: true, Up: Examples + +4.1 A simple example, start to finish +===================================== + +Let’s suppose you just finished writing ‘zardoz’, a program to make your +head float from vortex to vortex. You’ve been using Autoconf to provide +a portability framework, but your ‘Makefile.in’s have been ad-hoc. You +want to make them bulletproof, so you turn to Automake. + + The first step is to update your ‘configure.ac’ to include the +commands that ‘automake’ needs. The way to do this is to add an +‘AM_INIT_AUTOMAKE’ call just after ‘AC_INIT’: + + AC_INIT([zardoz], [1.0]) + AM_INIT_AUTOMAKE + ... + + Since your program doesn’t have any complicating factors (e.g., it +doesn’t use ‘gettext’, it doesn’t want to build a shared library), +you’re done with this part. That was easy! + + Now you must regenerate ‘configure’. But to do that, you’ll need to +tell ‘autoconf’ how to find the new macro you’ve used. The easiest way +to do this is to use the ‘aclocal’ program to generate your ‘aclocal.m4’ +for you. But wait... maybe you already have an ‘aclocal.m4’, because +you had to write some hairy macros for your program. The ‘aclocal’ +program lets you put your own macros into ‘acinclude.m4’, so simply +rename and then run: + + mv aclocal.m4 acinclude.m4 + aclocal + autoconf + + Now it is time to write your ‘Makefile.am’ for ‘zardoz’. Since +‘zardoz’ is a user program, you want to install it where the rest of the +user programs go: ‘bindir’. Additionally, ‘zardoz’ has some Texinfo +documentation. Your ‘configure.ac’ script uses ‘AC_REPLACE_FUNCS’, so +you need to link against ‘$(LIBOBJS)’. So here’s what you’d write: + + bin_PROGRAMS = zardoz + zardoz_SOURCES = main.c head.c float.c vortex9.c gun.c + zardoz_LDADD = $(LIBOBJS) + + info_TEXINFOS = zardoz.texi + + Now you can run ‘automake --add-missing’ to generate your +‘Makefile.in’ and grab any auxiliary files you might need, and you’re +done! + + +File: automake.info, Node: true, Prev: Complete, Up: Examples + +4.2 Building true and false +=========================== + +Here is another, trickier example. It shows how to generate two +programs (‘true’ and ‘false’) from the same source file (‘true.c’). The +difficult part is that each compilation of ‘true.c’ requires different +‘cpp’ flags. + + 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 + + Note that there is no ‘true_SOURCES’ definition. Automake will +implicitly assume that there is a source file named ‘true.c’ (*note +Default _SOURCES::), and define rules to compile ‘true.o’ and link +‘true’. The ‘true.o: true.c’ rule supplied by the above ‘Makefile.am’, +will override the Automake generated rule to build ‘true.o’. + + ‘false_SOURCES’ is defined to be empty—that way no implicit value is +substituted. Because we have not listed the source of ‘false’, we have +to tell Automake how to link the program. This is the purpose of the +‘false_LDADD’ line. A ‘false_DEPENDENCIES’ variable, holding the +dependencies of the ‘false’ target will be automatically generated by +Automake from the content of ‘false_LDADD’. + + The above rules won’t work if your compiler doesn’t accept both ‘-c’ +and ‘-o’. The simplest fix for this is to introduce a bogus dependency +(to avoid problems with a parallel ‘make’): + + 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 + + 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 ‘true’ and ‘false’ +in real life, you would probably use per-program compilation flags, like +so: + + bin_PROGRAMS = false true + + false_SOURCES = true.c + false_CPPFLAGS = -DEXIT_CODE=1 + + true_SOURCES = true.c + true_CPPFLAGS = -DEXIT_CODE=0 + + In this case Automake will cause ‘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 ‘false-true.o’ and ‘true-true.o’. +(The name of the object files rarely matters.) + + +File: automake.info, Node: automake Invocation, Next: configure, Prev: Examples, Up: Top + +5 Creating a ‘Makefile.in’ +************************** + +To create all the ‘Makefile.in’s for a package, run the ‘automake’ +program in the top level directory, with no arguments. ‘automake’ will +automatically find each appropriate ‘Makefile.am’ (by scanning +‘configure.ac’; *note configure::) and generate the corresponding +‘Makefile.in’. Note that ‘automake’ has a rather simplistic view of +what constitutes a package; it assumes that a package has only one +‘configure.ac’, at the top. If your package has multiple +‘configure.ac’s, then you must run ‘automake’ in each directory holding +a ‘configure.ac’. (Alternatively, you may rely on Autoconf’s +‘autoreconf’, which is able to recurse your package tree and run +‘automake’ where appropriate.) + + You can optionally give ‘automake’ an argument; ‘.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 +‘Makefile.in’. Note that ‘automake’ must always be run from the topmost +directory of a project, even if being used to regenerate the +‘Makefile.in’ in some subdirectory. This is necessary because +‘automake’ must scan ‘configure.ac’, and because ‘automake’ uses the +knowledge that a ‘Makefile.in’ is in a subdirectory to change its +behavior in some cases. + + Automake will run ‘autoconf’ to scan ‘configure.ac’ and its +dependencies (i.e., ‘aclocal.m4’ and any included file), therefore +‘autoconf’ must be in your ‘PATH’. If there is an ‘AUTOCONF’ variable +in your environment it will be used instead of ‘autoconf’, this allows +you to select a particular version of Autoconf. By the way, don’t +misunderstand this paragraph: ‘automake’ runs ‘autoconf’ to *scan* your +‘configure.ac’, this won’t build ‘configure’ and you still have to run +‘autoconf’ yourself for this purpose. + + ‘automake’ accepts the following options: + +‘-a’ +‘--add-missing’ + Automake requires certain common files to exist in certain + situations; for instance, ‘config.guess’ is required if + ‘configure.ac’ invokes ‘AC_CANONICAL_HOST’. Automake is + distributed with several of these files (*note 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 ‘--copy’. + + Many of the potentially-missing files are common scripts whose + location may be specified via the ‘AC_CONFIG_AUX_DIR’ macro. + Therefore, ‘AC_CONFIG_AUX_DIR’’s setting affects whether a file is + considered missing, and where the missing file is added (*note + Optional::). + + In some strictness modes, additional files are installed, see *note + Gnits:: for more information. + +‘--libdir=DIR’ + Look for Automake data files in directory DIR instead of in the + installation directory. This is typically used for debugging. + +‘--print-libdir’ + Print the path of the installation directory containing + Automake-provided scripts and data files (like e.g., ‘texinfo.texi’ + and ‘install-sh’). + +‘-c’ +‘--copy’ + When used with ‘--add-missing’, causes installed files to be + copied. The default is to make a symbolic link. + +‘-f’ +‘--force-missing’ + When used with ‘--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 ‘--copy’, copying the new file). + +‘--foreign’ + Set the global strictness to ‘foreign’. For more information, see + *note Strictness::. + +‘--gnits’ + Set the global strictness to ‘gnits’. For more information, see + *note Gnits::. + +‘--gnu’ + Set the global strictness to ‘gnu’. For more information, see + *note Gnits::. This is the default strictness. + +‘--help’ + Print a summary of the command line options and exit. + +‘-i’ +‘--ignore-deps’ + This disables the dependency tracking feature in generated + ‘Makefile’s; see *note Dependencies::. + +‘--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. + +‘--no-force’ + Ordinarily ‘automake’ creates all ‘Makefile.in’s mentioned in + ‘configure.ac’. This option causes it to only update those + ‘Makefile.in’s that are out of date with respect to one of their + dependents. + +‘-o DIR’ +‘--output-dir=DIR’ + Put the generated ‘Makefile.in’ in the directory DIR. Ordinarily + each ‘Makefile.in’ is created in the directory of the corresponding + ‘Makefile.am’. This option is deprecated and will be removed in a + future release. + +‘-v’ +‘--verbose’ + Cause Automake to print information about which files are being + read or created. + +‘--version’ + Print the version number of Automake and exit. + +‘-W CATEGORY’ +‘--warnings=CATEGORY’ + Output warnings falling in CATEGORY. CATEGORY can be one of: + ‘gnu’ + warnings related to the GNU Coding Standards (*note + (standards)Top::). + ‘obsolete’ + obsolete features or constructions + ‘override’ + user redefinitions of Automake rules or variables + ‘portability’ + portability issues (e.g., use of ‘make’ features that are + known to be not portable) + ‘extra-portability’ + extra portability issues related to obscure tools. One + example of such a tool is the Microsoft ‘lib’ archiver. + ‘syntax’ + weird syntax, unused variables, typos + ‘unsupported’ + unsupported or incomplete features + ‘all’ + all the warnings + ‘none’ + turn off all the warnings + ‘error’ + treat warnings as errors + + A category can be turned off by prefixing its name with ‘no-’. For + instance, ‘-Wno-syntax’ will hide the warnings about unused + variables. + + The categories output by default are ‘obsolete’, ‘syntax’ and + ‘unsupported’. Additionally, ‘gnu’ and ‘portability’ are enabled + in ‘--gnu’ and ‘--gnits’ strictness. + + Turning off ‘portability’ will also turn off ‘extra-portability’, + and similarly turning on ‘extra-portability’ will also turn on + ‘portability’. However, turning on ‘portability’ or turning off + ‘extra-portability’ will not affect the other category. + + The environment variable ‘WARNINGS’ can contain a comma separated + list of categories to enable. It will be taken into account before + the command-line switches, this way ‘-Wnone’ will also ignore any + warning category enabled by ‘WARNINGS’. This variable is also used + by other tools like ‘autoconf’; unknown categories are ignored for + this reason. + + If the environment variable ‘AUTOMAKE_JOBS’ contains a positive +number, it is taken as the maximum number of Perl threads to use in +‘automake’ for generating multiple ‘Makefile.in’ files concurrently. +This is an experimental feature. + + +File: automake.info, Node: configure, Next: Directories, Prev: automake Invocation, Up: Top + +6 Scanning ‘configure.ac’, using ‘aclocal’ +****************************************** + +Automake scans the package’s ‘configure.ac’ to determine certain +information about the package. Some ‘autoconf’ macros are required and +some variables must be defined in ‘configure.ac’. Automake will also +use information from ‘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 ‘aclocal.m4’ +using the ‘aclocal’ program. + +* Menu: + +* Requirements:: Configuration requirements +* Optional:: Other things Automake recognizes +* aclocal Invocation:: Auto-generating aclocal.m4 +* Macros:: Autoconf macros supplied with Automake + + +File: automake.info, Node: Requirements, Next: Optional, Up: configure + +6.1 Configuration requirements +============================== + +The one real requirement of Automake is that your ‘configure.ac’ call +‘AM_INIT_AUTOMAKE’. This macro does several things that are required +for proper Automake operation (*note Macros::). + + Here are the other macros that Automake requires but which are not +run by ‘AM_INIT_AUTOMAKE’: + +‘AC_CONFIG_FILES’ +‘AC_OUTPUT’ + These two macros are usually invoked as follows near the end of + ‘configure.ac’. + + ... + AC_CONFIG_FILES([ + Makefile + doc/Makefile + src/Makefile + src/lib/Makefile + ... + ]) + AC_OUTPUT + + Automake uses these to determine which files to create (*note + Creating Output Files: (autoconf)Output.). A listed file is + considered to be an Automake generated ‘Makefile’ if there exists a + file with the same name and the ‘.am’ extension appended. + Typically, ‘AC_CONFIG_FILES([foo/Makefile])’ will cause Automake to + generate ‘foo/Makefile.in’ if ‘foo/Makefile.am’ exists. + + When using ‘AC_CONFIG_FILES’ with multiple input files, as in + + AC_CONFIG_FILES([Makefile:top.in:Makefile.in:bot.in]) + + ‘automake’ will generate the first ‘.in’ input file for which a + ‘.am’ file exists. If no such file exists the output file is not + considered to be generated by Automake. + + Files created by ‘AC_CONFIG_FILES’, be they Automake ‘Makefile’s or + not, are all removed by ‘make distclean’. Their inputs are + automatically distributed, unless they are the output of prior + ‘AC_CONFIG_FILES’ commands. Finally, rebuild rules are generated + in the Automake ‘Makefile’ existing in the subdirectory of the + output file, if there is one, or in the top-level ‘Makefile’ + otherwise. + + The above machinery (cleaning, distributing, and rebuilding) works + fine if the ‘AC_CONFIG_FILES’ specifications contain only literals. + If part of the specification uses shell variables, ‘automake’ will + not be able to fulfill this setup, and you will have to complete + the missing bits by hand. For instance, on + + file=input + ... + AC_CONFIG_FILES([output:$file],, [file=$file]) + + ‘automake’ will output rules to clean ‘output’, and rebuild it. + However the rebuild rule will not depend on ‘input’, and this file + will not be distributed either. (You must add ‘EXTRA_DIST = input’ + to your ‘Makefile.am’ if ‘input’ is a source file.) + + Similarly + + file=output + file2=out:in + ... + AC_CONFIG_FILES([$file:input],, [file=$file]) + AC_CONFIG_FILES([$file2],, [file2=$file2]) + + will only cause ‘input’ to be distributed. No file will be cleaned + automatically (add ‘DISTCLEANFILES = output out’ yourself), and no + rebuild rule will be output. + + Obviously ‘automake’ cannot guess what value ‘$file’ is going to + hold later when ‘configure’ is run, and it cannot use the shell + variable ‘$file’ in a ‘Makefile’. However, if you make reference + to ‘$file’ as ‘${file}’ (i.e., in a way that is compatible with + ‘make’’s syntax) and furthermore use ‘AC_SUBST’ to ensure that + ‘${file}’ is meaningful in a ‘Makefile’, then ‘automake’ will be + able to use ‘${file}’ to generate all of these rules. For + instance, here is how the Automake package itself generates + versioned scripts for its test suite: + + AC_SUBST([APIVERSION], ...) + ... + 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}]) + + Here cleaning, distributing, and rebuilding are done automatically, + because ‘${APIVERSION}’ is known at ‘make’-time. + + Note that you should not use shell variables to declare ‘Makefile’ + files for which ‘automake’ must create ‘Makefile.in’. Even + ‘AC_SUBST’ does not help here, because ‘automake’ needs to know the + file name when it runs in order to check whether ‘Makefile.am’ + exists. (In the very hairy case that your setup requires such use + of variables, you will have to tell Automake which ‘Makefile.in’s + to generate on the command-line.) + + It is possible to let ‘automake’ emit conditional rules for + ‘AC_CONFIG_FILES’ with the help of ‘AM_COND_IF’ (*note Optional::). + + To summarize: + • Use literals for ‘Makefile’s, and for other files whenever + possible. + • Use ‘$file’ (or ‘${file}’ without ‘AC_SUBST([file])’) for + files that ‘automake’ should ignore. + • Use ‘${file}’ and ‘AC_SUBST([file])’ for files that ‘automake’ + should not ignore. + + +File: automake.info, Node: Optional, Next: aclocal Invocation, Prev: Requirements, Up: configure + +6.2 Other things Automake recognizes +==================================== + +Every time Automake is run it calls Autoconf to trace ‘configure.ac’. +This way it can recognize the use of certain macros and tailor the +generated ‘Makefile.in’ appropriately. Currently recognized macros and +their effects are: + +‘AC_CANONICAL_BUILD’ +‘AC_CANONICAL_HOST’ +‘AC_CANONICAL_TARGET’ + Automake will ensure that ‘config.guess’ and ‘config.sub’ exist. + Also, the ‘Makefile’ variables ‘build_triplet’, ‘host_triplet’ and + ‘target_triplet’ are introduced. See *note Getting the Canonical + System Type: (autoconf)Canonicalizing. + +‘AC_CONFIG_AUX_DIR’ + Automake will look for various helper scripts, such as + ‘install-sh’, in the directory named in this macro invocation. + (The full list of scripts is: ‘ar-lib’, ‘config.guess’, + ‘config.sub’, ‘depcomp’, ‘compile’, ‘install-sh’, ‘ltmain.sh’, + ‘mdate-sh’, ‘missing’, ‘mkinstalldirs’, ‘py-compile’, + ‘test-driver’, ‘texinfo.tex’, ‘ylwrap’.) Not all scripts are + always searched for; some scripts will only be sought if the + generated ‘Makefile.in’ requires them. + + If ‘AC_CONFIG_AUX_DIR’ is not given, the scripts are looked for in + their standard locations. For ‘mdate-sh’, ‘texinfo.tex’, and + ‘ylwrap’, the standard location is the source directory + corresponding to the current ‘Makefile.am’. For the rest, the + standard location is the first one of ‘.’, ‘..’, or ‘../..’ + (relative to the top source directory) that provides any one of the + helper scripts. *Note Finding ‘configure’ Input: (autoconf)Input. + + Required files from ‘AC_CONFIG_AUX_DIR’ are automatically + distributed, even if there is no ‘Makefile.am’ in this directory. + +‘AC_CONFIG_LIBOBJ_DIR’ + Automake will require the sources file declared with ‘AC_LIBSOURCE’ + (see below) in the directory specified by this macro. + +‘AC_CONFIG_HEADERS’ + Automake will generate rules to rebuild these headers from the + corresponding templates (usually, the template for a ‘foo.h’ header + being ‘foo.h.in’). Older versions of Automake required the use of + ‘AM_CONFIG_HEADER’; this is no longer the case, and that macro has + indeed been removed. + + As with ‘AC_CONFIG_FILES’ (*note Requirements::), parts of the + specification using shell variables will be ignored as far as + cleaning, distributing, and rebuilding is concerned. + +‘AC_CONFIG_LINKS’ + Automake will generate rules to remove ‘configure’ generated links + on ‘make distclean’ and to distribute named source files as part of + ‘make dist’. + + As for ‘AC_CONFIG_FILES’ (*note 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.) + +‘AC_LIBOBJ’ +‘AC_LIBSOURCE’ +‘AC_LIBSOURCES’ + Automake will automatically distribute any file listed in + ‘AC_LIBSOURCE’ or ‘AC_LIBSOURCES’. + + Note that the ‘AC_LIBOBJ’ macro calls ‘AC_LIBSOURCE’. So if an + Autoconf macro is documented to call ‘AC_LIBOBJ([file])’, then + ‘file.c’ will be distributed automatically by Automake. This + encompasses many macros like ‘AC_FUNC_ALLOCA’, ‘AC_FUNC_MEMCMP’, + ‘AC_REPLACE_FUNCS’, and others. + + By the way, direct assignments to ‘LIBOBJS’ are no longer + supported. You should always use ‘AC_LIBOBJ’ for this purpose. + *Note ‘AC_LIBOBJ’ vs. ‘LIBOBJS’: (autoconf)AC_LIBOBJ vs LIBOBJS. + +‘AC_PROG_RANLIB’ + This is required if any libraries are built in the package. *Note + Particular Program Checks: (autoconf)Particular Programs. + +‘AC_PROG_CXX’ + This is required if any C++ source is included. *Note Particular + Program Checks: (autoconf)Particular Programs. + +‘AC_PROG_OBJC’ + This is required if any Objective C source is included. *Note + Particular Program Checks: (autoconf)Particular Programs. + +‘AC_PROG_OBJCXX’ + This is required if any Objective C++ source is included. *Note + Particular Program Checks: (autoconf)Particular Programs. + +‘AC_PROG_F77’ + This is required if any Fortran 77 source is included. *Note + Particular Program Checks: (autoconf)Particular Programs. + +‘AC_F77_LIBRARY_LDFLAGS’ + This is required for programs and shared libraries that are a + mixture of languages that include Fortran 77 (*note Mixing Fortran + 77 With C and C++::). *Note Autoconf macros supplied with + Automake: Macros. + +‘AC_FC_SRCEXT’ + Automake will add the flags computed by ‘AC_FC_SRCEXT’ to + compilation of files with the respective source extension (*note + Fortran Compiler Characteristics: (autoconf)Fortran Compiler.). + +‘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. *Note + Particular Program Checks: (autoconf)Particular Programs. + +‘AC_PROG_LIBTOOL’ + Automake will turn on processing for ‘libtool’ (*note Introduction: + (libtool)Top.). + +‘AC_PROG_YACC’ + If a Yacc source file is seen, then you must either use this macro + or define the variable ‘YACC’ in ‘configure.ac’. The former is + preferred (*note Particular Program Checks: (autoconf)Particular + Programs.). + +‘AC_PROG_LEX’ + If a Lex source file is seen, then this macro must be used. *Note + Particular Program Checks: (autoconf)Particular Programs. + +‘AC_REQUIRE_AUX_FILE’ + For each ‘AC_REQUIRE_AUX_FILE([FILE])’, ‘automake’ will ensure that + ‘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 ‘AC_CONFIG_AUX_DIR’ + above. *Note Finding ‘configure’ Input: (autoconf)Input. + +‘AC_SUBST’ + The first argument is automatically defined as a variable in each + generated ‘Makefile.in’, unless ‘AM_SUBST_NOTMAKE’ is also used for + this variable. *Note Setting Output Variables: (autoconf)Setting + Output Variables. + + For every substituted variable VAR, ‘automake’ will add a line ‘VAR + = VALUE’ to each ‘Makefile.in’ file. Many Autoconf macros invoke + ‘AC_SUBST’ to set output variables this way, e.g., ‘AC_PATH_XTRA’ + defines ‘X_CFLAGS’ and ‘X_LIBS’. Thus, you can access these + variables as ‘$(X_CFLAGS)’ and ‘$(X_LIBS)’ in any ‘Makefile.am’ if + ‘AC_PATH_XTRA’ is called. + +‘AM_CONDITIONAL’ + This introduces an Automake conditional (*note Conditionals::). + +‘AM_COND_IF’ + This macro allows ‘automake’ to detect subsequent access within + ‘configure.ac’ to a conditional previously introduced with + ‘AM_CONDITIONAL’, thus enabling conditional ‘AC_CONFIG_FILES’ + (*note Usage of Conditionals::). + +‘AM_GNU_GETTEXT’ + This macro is required for packages that use GNU gettext (*note + gettext::). It is distributed with gettext. If Automake sees this + macro it ensures that the package meets some of gettext’s + requirements. + +‘AM_GNU_GETTEXT_INTL_SUBDIR’ + This macro specifies that the ‘intl/’ subdirectory is to be built, + even if the ‘AM_GNU_GETTEXT’ macro was invoked with a first + argument of ‘external’. + +‘AM_MAINTAINER_MODE([DEFAULT-MODE])’ + This macro adds an ‘--enable-maintainer-mode’ option to + ‘configure’. If this is used, ‘automake’ will cause + “maintainer-only†rules to be turned off by default in the + generated ‘Makefile.in’s, unless DEFAULT-MODE is ‘enable’. This + macro defines the ‘MAINTAINER_MODE’ conditional, which you can use + in your own ‘Makefile.am’. *Note maintainer-mode::. + +‘AM_SUBST_NOTMAKE(VAR)’ + Prevent Automake from defining a variable VAR, even if it is + substituted by ‘config.status’. Normally, Automake defines a + ‘make’ variable for each ‘configure’ substitution, i.e., for each + ‘AC_SUBST([VAR])’. This macro prevents that definition from + Automake. If ‘AC_SUBST’ has not been called for this variable, + then ‘AM_SUBST_NOTMAKE’ has no effects. Preventing variable + definitions may be useful for substitution of multi-line values, + where ‘VAR = @VALUE@’ might yield unintended results. + +‘m4_include’ + Files included by ‘configure.ac’ using this macro will be detected + by Automake and automatically distributed. They will also appear + as dependencies in ‘Makefile’ rules. + + ‘m4_include’ is seldom used by ‘configure.ac’ authors, but can + appear in ‘aclocal.m4’ when ‘aclocal’ detects that some required + macros come from files local to your package (as opposed to macros + installed in a system-wide directory, *note aclocal Invocation::). + + +File: automake.info, Node: aclocal Invocation, Next: Macros, Prev: Optional, Up: configure + +6.3 Auto-generating aclocal.m4 +============================== + +Automake includes a number of Autoconf macros that can be used in your +package (*note Macros::); some of them are actually required by Automake +in certain situations. These macros must be defined in your +‘aclocal.m4’; otherwise they will not be seen by ‘autoconf’. + + The ‘aclocal’ program will automatically generate ‘aclocal.m4’ files +based on the contents of ‘configure.ac’. This provides a convenient way +to get Automake-provided macros, without having to search around. The +‘aclocal’ mechanism allows other packages to supply their own macros +(*note Extending aclocal::). You can also use it to maintain your own +set of custom macros (*note Local Macros::). + + At startup, ‘aclocal’ scans all the ‘.m4’ files it can find, looking +for macro definitions (*note Macro Search Path::). Then it scans +‘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 ‘aclocal.m4’. + + _Putting_ the file that contains the macro definition into +‘aclocal.m4’ is usually done by copying the entire text of this file, +including unused macro definitions as well as both ‘#’ and ‘dnl’ +comments. If you want to make a comment that will be completely ignored +by ‘aclocal’, use ‘##’ as the comment leader. + + When a file selected by ‘aclocal’ is located in a subdirectory +specified as a relative search path with ‘aclocal’’s ‘-I’ argument, +‘aclocal’ assumes the file belongs to the package and uses ‘m4_include’ +instead of copying it into ‘aclocal.m4’. This makes the package +smaller, eases dependency tracking, and cause the file to be distributed +automatically. (*Note 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 ‘-I `pwd`/reldir’ instead of ‘-I reldir’ whenever +some relative directory should be considered outside the package. + + The contents of ‘acinclude.m4’, if this file exists, are also +automatically included in ‘aclocal.m4’. We recommend against using +‘acinclude.m4’ in new packages (*note Local Macros::). + + While computing ‘aclocal.m4’, ‘aclocal’ runs ‘autom4te’ (*note Using +‘Autom4te’: (autoconf)Using autom4te.) in order to trace the macros that +are really used, and omit from ‘aclocal.m4’ all macros that are +mentioned but otherwise unexpanded (this can happen when a macro is +called conditionally). ‘autom4te’ is expected to be in the ‘PATH’, just +as ‘autoconf’. Its location can be overridden using the ‘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 + + +File: automake.info, Node: aclocal Options, Next: Macro Search Path, Up: aclocal Invocation + +6.3.1 aclocal Options +--------------------- + +‘aclocal’ accepts the following options: + +‘--automake-acdir=DIR’ + Look for the automake-provided macro files in DIR instead of in the + installation directory. This is typically used for debugging. + +‘--system-acdir=DIR’ + Look for the system-wide third-party macro files (and the special + ‘dirlist’ file) in DIR instead of in the installation directory. + This is typically used for debugging. + +‘--diff[=COMMAND]’ + Run COMMAND on M4 file that would be installed or overwritten by + ‘--install’. The default COMMAND is ‘diff -u’. This option + implies ‘--install’ and ‘--dry-run’. + +‘--dry-run’ + Do not actually overwrite (or create) ‘aclocal.m4’ and M4 files + installed by ‘--install’. + +‘--help’ + Print a summary of the command line options and exit. + +‘-I DIR’ + Add the directory DIR to the list of directories searched for ‘.m4’ + files. + +‘--install’ + Install system-wide third-party macros into the first directory + specified with ‘-I DIR’ instead of copying them in the output file. + Note that this will happen also if DIR is an absolute path. + + When this option is used, and only when this option is used, + ‘aclocal’ will also honor ‘#serial 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 + (*note Serials::). + +‘--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 ‘aclocal.m4’ (or the file + specified with ‘--output’ below) and only this file, it has + absolutely no influence on files that may need to be installed by + ‘--install’. + +‘--output=FILE’ + Cause the output to be put into FILE instead of ‘aclocal.m4’. + +‘--print-ac-dir’ + Prints the name of the directory that ‘aclocal’ will search to find + third-party ‘.m4’ files. When this option is given, normal + processing is suppressed. This option was used _in the past_ by + third-party packages to determine where to install ‘.m4’ macro + files, but _this usage is today discouraged_, since it causes + ‘$(prefix)’ not to be thoroughly honored (which violates the GNU + Coding Standards), and a similar semantics can be better obtained + with the ‘ACLOCAL_PATH’ environment variable; *note Extending + aclocal::. + +‘--verbose’ + Print the names of the files it examines. + +‘--version’ + Print the version number of Automake and exit. + +‘-W CATEGORY’ +‘--warnings=CATEGORY’ + Output warnings falling in CATEGORY. CATEGORY can be one of: + ‘syntax’ + dubious syntactic constructs, underquoted macros, unused + macros, etc. + ‘unsupported’ + unknown macros + ‘all’ + all the warnings, this is the default + ‘none’ + turn off all the warnings + ‘error’ + treat warnings as errors + + All warnings are output by default. + + The environment variable ‘WARNINGS’ is honored in the same way as + it is for ‘automake’ (*note automake Invocation::). + + +File: automake.info, Node: Macro Search Path, Next: Extending aclocal, Prev: aclocal Options, Up: aclocal Invocation + +6.3.2 Macro Search Path +----------------------- + +By default, ‘aclocal’ searches for ‘.m4’ files in the following +directories, in this order: + +‘ACDIR-APIVERSION’ + This is where the ‘.m4’ macros distributed with Automake itself are + stored. APIVERSION depends on the Automake release used; for + example, for Automake 1.11.x, APIVERSION = ‘1.11’. + +‘ACDIR’ + This directory is intended for third party ‘.m4’ files, and is + configured when ‘automake’ itself is built. This is + ‘@datadir@/aclocal/’, which typically expands to + ‘${prefix}/share/aclocal/’. To find the compiled-in value of + ACDIR, use the ‘--print-ac-dir’ option (*note aclocal Options::). + + As an example, suppose that ‘automake-1.11.2’ was configured with +‘--prefix=/usr/local’. Then, the search path would be: + + 1. ‘/usr/local/share/aclocal-1.11.2/’ + 2. ‘/usr/local/share/aclocal/’ + + The paths for the ACDIR and ACDIR-APIVERSION directories can be +changed respectively through aclocal options ‘--system-acdir’ and +‘--automake-acdir’ (*note 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 (*note aclocal Options::), there are several options +that can be used to change or extend this search path. + +Modifying the Macro Search Path: ‘-I DIR’ +......................................... + +Any extra directories specified using ‘-I’ options (*note aclocal +Options::) are _prepended_ to this search list. Thus, ‘aclocal -I /foo +-I /bar’ results in the following search path: + + 1. ‘/foo’ + 2. ‘/bar’ + 3. ACDIR-APIVERSION + 4. ACDIR + +Modifying the Macro Search Path: ‘dirlist’ +.......................................... + +There is a third mechanism for customizing the search path. If a +‘dirlist’ file exists in ACDIR, then that file is assumed to contain a +list of directory patterns, one per line. ‘aclocal’ expands these +patterns to directory names, and adds them to the search list _after_ +all other directories. ‘dirlist’ entries may use shell wildcards such +as ‘*’, ‘?’, or ‘[...]’. + + For example, suppose ‘ACDIR/dirlist’ contains the following: + + /test1 + /test2 + /test3* + +and that ‘aclocal’ was called with the ‘-I /foo -I /bar’ options. Then, +the search path would be + + 1. ‘/foo’ + 2. ‘/bar’ + 3. ACDIR-APIVERSION + 4. ACDIR + 5. ‘/test1’ + 6. ‘/test2’ + +and all directories with path names starting with ‘/test3’. + + If the ‘--system-acdir=DIR’ option is used, then ‘aclocal’ will +search for the ‘dirlist’ file in DIR; but remember the warnings above +against the use of ‘--system-acdir’. + + ‘dirlist’ is useful in the following situation: suppose that +‘automake’ version ‘1.11.2’ is installed with ‘--prefix=/usr’ by the +system vendor. Thus, the default search directories are + + 1. ‘/usr/share/aclocal-1.11/’ + 2. ‘/usr/share/aclocal/’ + + 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†‘.m4’ files are in +‘/usr/local/share/aclocal’. The only way to force ‘/usr/bin/aclocal’ to +find these “extra†‘.m4’ files is to always call ‘aclocal -I +/usr/local/share/aclocal’. This is inconvenient. With ‘dirlist’, one +may create a file ‘/usr/share/aclocal/dirlist’ containing only the +single line + + /usr/local/share/aclocal + + Now, the “default†search path on the affected system is + + 1. ‘/usr/share/aclocal-1.11/’ + 2. ‘/usr/share/aclocal/’ + 3. ‘/usr/local/share/aclocal/’ + + without the need for ‘-I’ options; ‘-I’ options can be reserved for +project-specific needs (‘my-source-dir/m4/’), rather than using it to +work around local system-dependent tool installation directories. + + Similarly, ‘dirlist’ can be handy if you have installed a local copy +of Automake in your account and want ‘aclocal’ to look for macros +installed at other places on the system. + +Modifying the Macro Search Path: ‘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 ‘ACLOCAL_PATH’ is added to the search path and takes precedence +over system directories (including those found via ‘dirlist’), with the +exception of the versioned directory ACDIR-APIVERSION (*note Macro +Search Path::). However, directories passed via ‘-I’ will take +precedence over directories in ‘ACLOCAL_PATH’. + + Also note that, if the ‘--install’ option is used, any ‘.m4’ file +containing a required macro that is found in a directory listed in +‘ACLOCAL_PATH’ will be installed locally. In this case, serial numbers +in ‘.m4’ are honored too, *note Serials::. + + Conversely to ‘dirlist’, ‘ACLOCAL_PATH’ is useful if you are using a +global copy of Automake and want ‘aclocal’ to look for macros somewhere +under your home directory. + +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 ‘ACLOCAL_PATH’ and ‘ACDIR’ might end up +taking precedence over ‘ACDIR-APIVERSION’, and directories in +‘ACDIR/dirlist’ might end up taking precedence over ‘ACDIR’. _This is a +possible future incompatibility!_ + + +File: automake.info, Node: Extending aclocal, Next: Local Macros, Prev: Macro Search Path, Up: aclocal Invocation + +6.3.3 Writing your own aclocal macros +------------------------------------- + +The ‘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 ‘gettext’ library +supplies a macro ‘AM_GNU_GETTEXT’ that should be used by any package +using ‘gettext’. When the library is installed, it installs this macro +so that ‘aclocal’ will find it. + + A macro file’s name should end in ‘.m4’. Such files should be +installed in ‘$(datadir)/aclocal’. This is as simple as writing: + + aclocaldir = $(datadir)/aclocal + aclocal_DATA = mymacro.m4 myothermacro.m4 + +Please do use ‘$(datadir)/aclocal’, and not something based on the +result of ‘aclocal --print-ac-dir’ (*note Hard-Coded Install Paths::, +for arguments). It might also be helpful to suggest to the user to add +the ‘$(datadir)/aclocal’ directory to his ‘ACLOCAL_PATH’ variable (*note +ACLOCAL_PATH::) so that ‘aclocal’ will find the ‘.m4’ files installed by +your package automatically. + + A file of macros should be a series of properly quoted ‘AC_DEFUN’’s +(*note (autoconf)Macro Definitions::). The ‘aclocal’ programs also +understands ‘AC_REQUIRE’ (*note (autoconf)Prerequisite Macros::), 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 ‘AC_PREREQ’ +should be done inside the defined macro, not at the beginning of the +file. + + Starting with Automake 1.8, ‘aclocal’ will warn about all underquoted +calls to ‘AC_DEFUN’. We realize this will annoy a lot of people, +because ‘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 ‘aclocal’ (*note Future of aclocal::) will have to +temporarily include all of these third party ‘.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, + + # bad style + AC_PREREQ(2.68) + AC_DEFUN(AX_FOOBAR, + [AC_REQUIRE([AX_SOMETHING])dnl + AX_FOO + AX_BAR + ]) + +should be rewritten as + + AC_DEFUN([AX_FOOBAR], + [AC_PREREQ([2.68])dnl + AC_REQUIRE([AX_SOMETHING])dnl + AX_FOO + AX_BAR + ]) + + Wrapping the ‘AC_PREREQ’ call inside the macro ensures that Autoconf +2.68 will not be required if ‘AX_FOOBAR’ is not actually used. Most +importantly, quoting the first argument of ‘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 ‘2.68’ that do not require it. + + If you have been directed here by the ‘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 ‘aclocal’ is commonly used is to manage +macros that are used locally by the package, *note Local Macros::. + + +File: automake.info, Node: Local Macros, Next: Serials, Prev: Extending aclocal, Up: aclocal Invocation + +6.3.4 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 ‘acinclude.m4’. This file will be included in ‘aclocal.m4’ +when you run ‘aclocal’, and its macro(s) will henceforth be visible to +‘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 ‘m4/’. Then it’s enough to update +‘configure.ac’ by adding a proper call to ‘AC_CONFIG_MACRO_DIRS’: + + AC_CONFIG_MACRO_DIRS([m4]) + + ‘aclocal’ will then take care of automatically adding ‘m4/’ to its +search path for m4 files. + + When ‘aclocal’ is run, it will build an ‘aclocal.m4’ that +‘m4_include’s any file from ‘m4/’ that defines a required macro. Macros +not found locally will still be searched in system-wide directories, as +explained in *note Macro Search Path::. + + Custom macros should be distributed for the same reason that +‘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 ‘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 ‘aclocal’ directory (*note Extending +aclocal::). For instance, Guile ships with a file called ‘guile.m4’ +that contains the macro ‘GUILE_FLAGS’ that can be used to define setup +compiler and linker flags appropriate for using Guile. Using +‘GUILE_FLAGS’ in ‘configure.ac’ will cause ‘aclocal’ to copy ‘guile.m4’ +into ‘aclocal.m4’, but as ‘guile.m4’ is not part of the project, it will +not be distributed. Technically, that means a user who needs to rebuild +‘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 ‘m4/’ directory so they get distributed. + + Since Automake 1.10, ‘aclocal’ offers the option ‘--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 ‘m4/’ the first +time you run ‘aclocal’. Then the locally installed macros will have +precedence over the system-wide installed macros each time ‘aclocal’ is +run again. + + One reason why you should keep ‘--install’ in the flags even after +the first run is that when you later edit ‘configure.ac’ and depend on a +new macro, this macro will be installed in your ‘m4/’ automatically. +Another one is that serial numbers (*note 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 + + #serial NNN + +where 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 +‘--install’ option of ‘aclocal’: this allows other people to use it. + + +File: automake.info, Node: Serials, Next: Future of aclocal, Prev: Local Macros, Up: aclocal Invocation + +6.3.5 Serial Numbers +-------------------- + +Because third-party macros defined in ‘*.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 ‘#serial’ line for this. + + A serial number should be a single line of the form + + # serial VERSION + +where 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 ‘#’ must be the first character on the line, and it is OK to have +extra words after the version, as in + + #serial VERSION GARBAGE + + Normally these serial numbers are completely ignored by ‘aclocal’ and +‘autoconf’, like any genuine comment. However when using ‘aclocal’’s +‘--install’ feature, these serial numbers will modify the way ‘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 +‘#serial’ line, ‘aclocal’ will ignore the file that has the older +‘#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 ‘--install’ and its +interaction with serial numbers. Let’s assume we maintain a package +called MyPackage, the ‘configure.ac’ of which requires a third-party +macro ‘AX_THIRD_PARTY’ defined in ‘/usr/share/aclocal/thirdparty.m4’ as +follows: + + # serial 1 + AC_DEFUN([AX_THIRD_PARTY], [...]) + + MyPackage uses an ‘m4/’ directory to store local macros as explained +in *note Local Macros::, and has + + AC_CONFIG_MACRO_DIRS([m4]) + +in its ‘configure.ac’. + + Initially the ‘m4/’ directory is empty. The first time we run +‘aclocal --install’, it will notice that + + • ‘configure.ac’ uses ‘AX_THIRD_PARTY’ + • No local macros define ‘AX_THIRD_PARTY’ + • ‘/usr/share/aclocal/thirdparty.m4’ defines ‘AX_THIRD_PARTY’ with + serial 1. + +Because ‘/usr/share/aclocal/thirdparty.m4’ is a system-wide macro and +‘aclocal’ was given the ‘--install’ option, it will copy this file in +‘m4/thirdparty.m4’, and output an ‘aclocal.m4’ that contains +‘m4_include([m4/thirdparty.m4])’. + + The next time ‘aclocal --install’ is run, something different +happens. ‘aclocal’ notices that + + • ‘configure.ac’ uses ‘AX_THIRD_PARTY’ + • ‘m4/thirdparty.m4’ defines ‘AX_THIRD_PARTY’ with serial 1. + • ‘/usr/share/aclocal/thirdparty.m4’ defines ‘AX_THIRD_PARTY’ with + serial 1. + +Because both files have the same serial number, ‘aclocal’ uses the first +it found in its search path order (*note Macro Search Path::). +‘aclocal’ therefore ignores ‘/usr/share/aclocal/thirdparty.m4’ and +outputs an ‘aclocal.m4’ that contains ‘m4_include([m4/thirdparty.m4])’. + + Local directories specified with ‘-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 ‘aclocal --install’ is +run the situation is the following: + + • ‘configure.ac’ uses ‘AX_THIRD_PARTY’ + • ‘m4/thirdparty.m4’ defines ‘AX_THIRD_PARTY’ with serial 1. + • ‘/usr/share/aclocal/thirdparty.m4’ defines ‘AX_THIRD_PARTY’ with + serial 2. + +When ‘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 ‘/usr/share/aclocal/thirdparty.m4’ +with serial 2, ‘aclocal’ will proceed as if it had never seen +‘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. +‘aclocal’ will install the new version of the macro in +‘m4/thirdparty.m4’, in this case overriding the old version. MyPackage +just had its macro updated as a side effect of running ‘aclocal’. + + If you are leery of letting ‘aclocal’ update your local macro, you +can run ‘aclocal --diff’ to review the changes ‘aclocal --install’ would +perform on these macros. + + Finally, note that the ‘--force’ option of ‘aclocal’ has absolutely +no effect on the files installed by ‘--install’. For instance, if you +have modified your local macros, do not expect ‘--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 +‘aclocal --install’. + + +File: automake.info, Node: Future of aclocal, Prev: Serials, Up: aclocal Invocation + +6.3.6 The Future of ‘aclocal’ +----------------------------- + +‘aclocal’ is expected to disappear. This feature really should not be +offered by Automake. Automake should focus on generating ‘Makefile’s; +dealing with M4 macros really is Autoconf’s job. The fact that some +people install Automake just to use ‘aclocal’, but do not use ‘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 ‘m4/’-style layout discussed in *note +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, ‘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 ‘aclocal’ yourself. Keep this guy +under the exclusive control of ‘autoreconf’ and Automake’s rebuild +rules. Hopefully you won’t need to worry about things breaking, when +‘aclocal’ disappears, because everything will have been taken care of. +If otherwise you used to call ‘aclocal’ directly yourself or from some +script, you will quickly notice the change. + + Many packages come with a script called ‘bootstrap’ or ‘autogen.sh’, +that will just call ‘aclocal’, ‘libtoolize’, ‘gettextize’ or +‘autopoint’, ‘autoconf’, ‘autoheader’, and ‘automake’ in the right +order. Actually this is precisely what ‘autoreconf’ can do for you. If +your package has such a ‘bootstrap’ or ‘autogen.sh’ script, consider +using ‘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 ‘aclocal’ directly +anymore. + + For the time being, third-party packages should continue to install +public macros into ‘/usr/share/aclocal/’. If ‘aclocal’ is replaced by +another tool it might make sense to rename the directory, but supporting +‘/usr/share/aclocal/’ for backward compatibility should be really easy +provided all macros are properly written (*note Extending aclocal::). + + +File: automake.info, Node: Macros, Prev: aclocal Invocation, Up: configure + +6.4 Autoconf macros supplied with Automake +========================================== + +Automake ships with several Autoconf macros that you can use from your +‘configure.ac’. When you use one of them it will be included by +‘aclocal’ in ‘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. + + +File: automake.info, Node: Public Macros, Next: Obsolete Macros, Up: Macros + +6.4.1 Public Macros +------------------- + +‘AM_INIT_AUTOMAKE([OPTIONS])’ + Runs many macros required for proper operation of the generated + Makefiles. + + Today, ‘AM_INIT_AUTOMAKE’ is called with a single argument: a + space-separated list of Automake options that should be applied to + every ‘Makefile.am’ in the tree. The effect is as if each option + were listed in ‘AUTOMAKE_OPTIONS’ (*note Options::). + + This macro can also be called in another, _deprecated_ form: + ‘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 PACKAGE and + VERSION can be obtained from Autoconf’s ‘AC_INIT’ macro. However, + differently from what happens for ‘AC_INIT’ invocations, this + ‘AM_INIT_AUTOMAKE’ invocation supports shell variables’ expansions + in the ‘PACKAGE’ and ‘VERSION’ arguments (which otherwise defaults, + respectively, to the ‘PACKAGE_TARNAME’ and ‘PACKAGE_VERSION’ + defined via the ‘AC_INIT’ invocation; *note The ‘AC_INIT’ macro: + (autoconf)AC_INIT.); 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 ‘AM_INIT_AUTOMAKE’ invocation will likely be removed from + Automake. + + If your ‘configure.ac’ has: + + AC_INIT([src/foo.c]) + AM_INIT_AUTOMAKE([mumble], [1.5]) + + you should modernize it as follows: + + AC_INIT([mumble], [1.5]) + AC_CONFIG_SRCDIR([src/foo.c]) + AM_INIT_AUTOMAKE + + Note that if you’re upgrading your ‘configure.ac’ from an earlier + version of Automake, it is not always correct to simply move the + package and version arguments from ‘AM_INIT_AUTOMAKE’ directly to + ‘AC_INIT’, as in the example above. The first argument to + ‘AC_INIT’ should be the name of your package (e.g., ‘GNU + Automake’), not the tarball name (e.g., ‘automake’) that you used + to pass to ‘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 ‘AC_INIT’ to provide the tarball name + explicitly). + + By default this macro ‘AC_DEFINE’’s ‘PACKAGE’ and ‘VERSION’. This + can be avoided by passing the ‘no-define’ option (*note List of + Automake options::): + AM_INIT_AUTOMAKE([no-define ...]) + +‘AM_PATH_LISPDIR’ + Searches for the program ‘emacs’, and, if found, sets the output + variable ‘lispdir’ to the full path to Emacs’ site-lisp directory. + + Note that this test assumes the ‘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 ‘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 ‘C-c’ to kill the test. In order to avoid + problems, you can set ‘EMACS’ to “no†in the environment, or use + the ‘--with-lispdir’ option to ‘configure’ to explicitly set the + correct path (if you’re sure you have an ‘emacs’ that supports + Emacs Lisp). + +‘AM_PROG_AR([ACT-IF-FAIL])’ + You must use this macro when you use the archiver in your project, + if you want support for unusual archivers such as Microsoft ‘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. + +‘AM_PROG_AS’ + 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 ‘CCAS’, and will also set ‘CCASFLAGS’ if required. + +‘AM_PROG_CC_C_O’ + This is an obsolescent macro that checks that the C compiler + supports the ‘-c’ and ‘-o’ options together. Note that, since + Automake 1.14, the ‘AC_PROG_CC’ is rewritten to implement such + checks itself, and thus the explicit use of ‘AM_PROG_CC_C_O’ should + no longer be required. + +‘AM_PROG_LEX’ + Like ‘AC_PROG_LEX’ (*note Particular Program Checks: + (autoconf)Particular Programs.), but uses the ‘missing’ script on + systems that do not have ‘lex’. HP-UX 10 is one such system. + +‘AM_PROG_GCJ’ + This macro finds the ‘gcj’ program or causes an error. It sets + ‘GCJ’ and ‘GCJFLAGS’. ‘gcj’ is the Java front-end to the GNU + Compiler Collection. + +‘AM_PROG_UPC([COMPILER-SEARCH-LIST])’ + Find a compiler for Unified Parallel C and define the ‘UPC’ + variable. The default COMPILER-SEARCH-LIST is ‘upcc upc’. This + macro will abort ‘configure’ if no Unified Parallel C compiler is + found. + +‘AM_MISSING_PROG(NAME, PROGRAM)’ + Find a maintainer tool PROGRAM and define the NAME environment + variable with its location. If PROGRAM is not detected, then NAME + will instead invoke the ‘missing’ script, in order to give useful + advice to the user about the missing maintainer tool. *Note + maintainer-mode::, for more information on when the ‘missing’ + script is appropriate. + +‘AM_SILENT_RULES’ + Control the machinery for less verbose build output (*note Automake + Silent Rules::). + +‘AM_WITH_DMALLOC’ + Add support for the Dmalloc package (http://dmalloc.com/). If the + user runs ‘configure’ with ‘--with-dmalloc’, then define + ‘WITH_DMALLOC’ and add ‘-ldmalloc’ to ‘LIBS’. + + +File: automake.info, Node: Obsolete Macros, Next: Private Macros, Prev: Public Macros, Up: Macros + +6.4.2 Obsolete Macros +--------------------- + +Although using some of the following macros was required in past +releases, you should not use any of them in new code. _All these macros +will be removed in the next major Automake version_; if you are still +using them, running ‘autoupdate’ should adjust your ‘configure.ac’ +automatically (*note Using ‘autoupdate’ to Modernize ‘configure.ac’: +(autoconf)autoupdate Invocation.). _Do it NOW!_ + +‘AM_PROG_MKDIR_P’ + + From Automake 1.8 to 1.9.6 this macro used to define the output + variable ‘mkdir_p’ to one of ‘mkdir -p’, ‘install-sh -d’, or + ‘mkinstalldirs’. + + Nowadays Autoconf provides a similar functionality with + ‘AC_PROG_MKDIR_P’ (*note Particular Program Checks: + (autoconf)Particular Programs.), however this defines the output + variable ‘MKDIR_P’ instead. In case you are still using the + ‘AM_PROG_MKDIR_P’ macro in your ‘configure.ac’, or its provided + variable ‘$(mkdir_p)’ in your ‘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. + + +File: automake.info, Node: Private Macros, Prev: Obsolete Macros, Up: Macros + +6.4.3 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! + +‘_AM_DEPENDENCIES’ +‘AM_SET_DEPDIR’ +‘AM_DEP_TRACK’ +‘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. + +‘AM_MAKE_INCLUDE’ + This macro is used to discover how the user’s ‘make’ handles + ‘include’ statements. This macro is automatically invoked when + needed; there should be no need to invoke it manually. + +‘AM_PROG_INSTALL_STRIP’ + This is used to find a version of ‘install’ that can be used to + strip a program at installation time. This macro is automatically + included when required. + +‘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 ‘AM_INIT_AUTOMAKE’. + + +File: automake.info, Node: Directories, Next: Programs, Prev: configure, Up: Top + +7 Directories +************* + +For simple projects that distribute all files in the same directory it +is enough to have a single ‘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 _make recursion_: each directory contains its own +‘Makefile’, and when ‘make’ is run from the top-level directory, it +enters each subdirectory in turn, and invokes there a new ‘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 *note Alternative:: section below. + +* Menu: + +* Subdirectories:: Building subdirectories recursively +* Conditional Subdirectories:: Conditionally not building directories +* Alternative:: Subdirectories without recursion +* Subpackages:: Nesting packages + + +File: automake.info, Node: Subdirectories, Next: Conditional Subdirectories, Up: Directories + +7.1 Recursing subdirectories +============================ + +In packages using make recursion, the top level ‘Makefile.am’ must tell +Automake which subdirectories are to be built. This is done via the +‘SUBDIRS’ variable. + + The ‘SUBDIRS’ variable holds a list of subdirectories in which +building of various sorts can occur. The rules for many targets (e.g., +‘all’) in the generated ‘Makefile’ will run commands both locally and in +all specified subdirectories. Note that the directories listed in +‘SUBDIRS’ are not required to contain ‘Makefile.am’s; only ‘Makefile’s +(after configuration). This allows inclusion of libraries from packages +that do not use Automake (such as ‘gettext’; see also *note Third-Party +Makefiles::). + + In packages that use subdirectories, the top-level ‘Makefile.am’ is +often very short. For instance, here is the ‘Makefile.am’ from the GNU +Hello distribution: + + EXTRA_DIST = BUGS ChangeLog.O README-alpha + SUBDIRS = doc intl po src tests + + When Automake invokes ‘make’ in a subdirectory, it uses the value of +the ‘MAKE’ variable. It passes the value of the variable ‘AM_MAKEFLAGS’ +to the ‘make’ invocation; this can be set in ‘Makefile.am’ if there are +flags you must always pass to ‘make’. + + The directories mentioned in ‘SUBDIRS’ are usually direct children of +the current directory, each subdirectory containing its own +‘Makefile.am’ with a ‘SUBDIRS’ pointing to deeper subdirectories. +Automake can be used to construct packages of arbitrary depth this way. + + By default, Automake generates ‘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 ‘.’ into ‘SUBDIRS’. For instance, putting ‘.’ first +will cause a prefix ordering of directories. + + Using + + SUBDIRS = lib src . test + +will cause ‘lib/’ to be built before ‘src/’, then the current directory +will be built, finally the ‘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 +(‘all’, ‘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 ‘AM_EXTRA_RECURSIVE_TARGETS’ in ‘configure.ac’. +Automake generates rules to handle the recursion for such targets; and +the developer can define real actions for them by defining corresponding +‘-local’ targets. + + % 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 + % cat Makefile.am + SUBDIRS = sub + foo-local: + @echo This will be run by "make foo". + % cat sub/Makefile.am + SUBDIRS = src + % 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. + + +File: automake.info, Node: Conditional Subdirectories, Next: Alternative, Prev: Subdirectories, Up: Directories + +7.2 Conditional Subdirectories +============================== + +It is possible to define the ‘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 +‘src/’ and ‘opt/’. ‘src/’ should always be built, but we want to decide +in ‘configure’ whether ‘opt/’ will be built or not. (For this example +we will assume that ‘opt/’ should be built when the variable ‘$want_opt’ +was set to ‘yes’.) + + Running ‘make’ should thus recurse into ‘src/’ always, and then maybe +in ‘opt/’. + + However ‘make dist’ should always recurse into both ‘src/’ and +‘opt/’. Because ‘opt/’ should be distributed even if it is not needed +in the current configuration. This means ‘opt/Makefile’ should be +created _unconditionally_. + + There are two ways to setup a project like this. You can use +Automake conditionals (*note Conditionals::) or use Autoconf ‘AC_SUBST’ +variables (*note Setting Output Variables: (autoconf)Setting Output +Variables.). Using Automake conditionals is the preferred solution. +Before we illustrate these two possibilities, let’s introduce +‘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 ‘Makefile’ + + +File: automake.info, Node: SUBDIRS vs DIST_SUBDIRS, Next: Subdirectories with AM_CONDITIONAL, Up: Conditional Subdirectories + +7.2.1 ‘SUBDIRS’ vs. ‘DIST_SUBDIRS’ +---------------------------------- + +Automake considers two sets of directories, defined by the variables +‘SUBDIRS’ and ‘DIST_SUBDIRS’. + + ‘SUBDIRS’ contains the subdirectories of the current directory that +must be built (*note 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. + + ‘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 +‘opt/’, but yet we want to distribute it? This is where ‘DIST_SUBDIRS’ +comes into play: ‘opt’ may not appear in ‘SUBDIRS’, but it must appear +in ‘DIST_SUBDIRS’. + + Precisely, ‘DIST_SUBDIRS’ is used by ‘make maintainer-clean’, ‘make +distclean’ and ‘make dist’. All other recursive rules use ‘SUBDIRS’. + + If ‘SUBDIRS’ is defined conditionally using Automake conditionals, +Automake will define ‘DIST_SUBDIRS’ automatically from the possible +values of ‘SUBDIRS’ in all conditions. + + If ‘SUBDIRS’ contains ‘AC_SUBST’ variables, ‘DIST_SUBDIRS’ will not +be defined correctly because Automake does not know the possible values +of these variables. In this case ‘DIST_SUBDIRS’ needs to be defined +manually. + + +File: automake.info, Node: Subdirectories with AM_CONDITIONAL, Next: Subdirectories with AC_SUBST, Prev: SUBDIRS vs DIST_SUBDIRS, Up: Conditional Subdirectories + +7.2.2 Subdirectories with ‘AM_CONDITIONAL’ +------------------------------------------ + +‘configure’ should output the ‘Makefile’ for each directory and define a +condition into which ‘opt/’ should be built. + + ... + AM_CONDITIONAL([COND_OPT], [test "$want_opt" = yes]) + AC_CONFIG_FILES([Makefile src/Makefile opt/Makefile]) + ... + + Then ‘SUBDIRS’ can be defined in the top-level ‘Makefile.am’ as +follows. + + if COND_OPT + MAYBE_OPT = opt + endif + SUBDIRS = src $(MAYBE_OPT) + + As you can see, running ‘make’ will rightly recurse into ‘src/’ and +maybe ‘opt/’. + + As you can’t see, running ‘make dist’ will recurse into both ‘src/’ +and ‘opt/’ directories because ‘make dist’, unlike ‘make all’, doesn’t +use the ‘SUBDIRS’ variable. It uses the ‘DIST_SUBDIRS’ variable. + + In this case Automake will define ‘DIST_SUBDIRS = src opt’ +automatically because it knows that ‘MAYBE_OPT’ can contain ‘opt’ in +some condition. + + +File: automake.info, Node: Subdirectories with AC_SUBST, Next: Unconfigured Subdirectories, Prev: Subdirectories with AM_CONDITIONAL, Up: Conditional Subdirectories + +7.2.3 Subdirectories with ‘AC_SUBST’ +------------------------------------ + +Another possibility is to define ‘MAYBE_OPT’ from ‘./configure’ using +‘AC_SUBST’: + + ... + 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]) + ... + + In this case the top-level ‘Makefile.am’ should look as follows. + + SUBDIRS = src $(MAYBE_OPT) + DIST_SUBDIRS = src opt + + The drawback is that since Automake cannot guess what the possible +values of ‘MAYBE_OPT’ are, it is necessary to define ‘DIST_SUBDIRS’. + + +File: automake.info, Node: Unconfigured Subdirectories, Prev: Subdirectories with AC_SUBST, Up: Conditional Subdirectories + +7.2.4 Unconfigured Subdirectories +--------------------------------- + +The semantics of ‘DIST_SUBDIRS’ are often misunderstood by some users +that try to _configure and build_ subdirectories conditionally. Here by +configuring we mean creating the ‘Makefile’ (it might also involve +running a nested ‘configure’ script: this is a costly operation that +explains why people want to do it conditionally, but only the ‘Makefile’ +is relevant to the discussion). + + The above examples all assume that every ‘Makefile’ is created, even +in directories that are not going to be built. The simple reason is +that we want ‘make dist’ to distribute even the directories that are not +being built (e.g., platform-dependent code), hence ‘make dist’ must +recurse into the subdirectory, hence this directory must be configured +and appear in ‘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. + + • ‘SUBDIRS’ should always be a subset of ‘DIST_SUBDIRS’. + + It makes little sense to have a directory in ‘SUBDIRS’ that is not + in ‘DIST_SUBDIRS’. Think of the former as a way to tell which + directories listed in the latter should be built. + • Any directory listed in ‘DIST_SUBDIRS’ and ‘SUBDIRS’ must be + configured. + + I.e., the ‘Makefile’ must exists or the recursive ‘make’ rules will + not be able to process the directory. + • Any configured directory must be listed in ‘DIST_SUBDIRS’. + + So that the cleaning rules remove the generated ‘Makefile’s. It + would be correct to see ‘DIST_SUBDIRS’ as a variable that lists all + the directories that have been configured. + + In order to prevent recursion in some unconfigured directory you must +therefore ensure that this directory does not appear in ‘DIST_SUBDIRS’ +(and ‘SUBDIRS’). For instance, if you define ‘SUBDIRS’ conditionally +using ‘AC_SUBST’ and do not define ‘DIST_SUBDIRS’ explicitly, it will be +default to ‘$(SUBDIRS)’; another possibility is to force ‘DIST_SUBDIRS = +$(SUBDIRS)’. + + Of course, directories that are omitted from ‘DIST_SUBDIRS’ will not +be distributed unless you make other arrangements for this to happen +(for instance, always running ‘make dist’ in a configuration where all +directories are known to appear in ‘DIST_SUBDIRS’; or writing a +‘dist-hook’ target to distribute these directories). + + 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 ‘SUBDIRS’ or ‘DIST_SUBDIRS’, ‘automake’ will make +sure the directory exists. Consequently ‘automake’ cannot be run on +such a distribution when one directory has been omitted. One way to +avoid this check is to use the ‘AC_SUBST’ method to declare conditional +directories; since ‘automake’ does not know the values of ‘AC_SUBST’ +variables it cannot ensure the corresponding directory exists. + + +File: automake.info, Node: Alternative, Next: Subpackages, Prev: Conditional Subdirectories, Up: Directories + +7.3 An Alternative Approach to Subdirectories +============================================= + +If you’ve ever read Peter Miller’s excellent paper, Recursive Make +Considered Harmful (http://miller.emu.id.au/pmiller/books/rmch/), 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 ‘make’ invocations are both slow and +error-prone. + + Automake provides sufficient cross-directory support (1) to enable +you to write a single ‘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 ‘$(includedir)/stdio.h’: + + include_HEADERS = inc/stdio.h + + However, the ‘nobase_’ prefix can be used to circumvent this path +stripping. In this example, the header file will be installed as +‘$(includedir)/sys/types.h’: + + nobase_include_HEADERS = sys/types.h + + ‘nobase_’ should be specified first when used in conjunction with +either ‘dist_’ or ‘nodist_’ (*note Fine-grained Distribution Control::). +For instance: + + nobase_dist_pkgdata_DATA = images/vortex.pgm sounds/whirl.ogg + + Finally, note that a variable using the ‘nobase_’ prefix can often be +replaced by several variables, one for each destination directory (*note +Uniform::). For instance, the last example could be rewritten as +follows: + + imagesdir = $(pkgdatadir)/images + soundsdir = $(pkgdatadir)/sounds + dist_images_DATA = images/vortex.pgm + dist_sounds_DATA = sounds/whirl.ogg + +This latter syntax makes it possible to change one destination directory +without changing the layout of the source tree. + + Currently, ‘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 ‘nobase_’ prefix. + + ---------- Footnotes ---------- + + (1) We believe. This work is new and there are probably warts. +*Note Introduction::, for information on reporting bugs. + + +File: automake.info, Node: Subpackages, Prev: Alternative, Up: Directories + +7.4 Nesting Packages +==================== + +In the GNU Build System, packages can be nested to arbitrary depth. +This means that a package can embed other packages with their own +‘configure’, ‘Makefile’s, etc. + + These other packages should just appear as subdirectories of their +parent package. They must be listed in ‘SUBDIRS’ like other ordinary +directories. However the subpackage’s ‘Makefile’s should be output by +its own ‘configure’ script, not by the parent’s ‘configure’. This is +achieved using the ‘AC_CONFIG_SUBDIRS’ Autoconf macro (*note +AC_CONFIG_SUBDIRS: (autoconf)Subdirectories.). + + Here is an example package for an ‘arm’ program that links with a +‘hand’ library that is a nested package in subdirectory ‘hand/’. + + ‘arm’’s ‘configure.ac’: + + 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 + + ‘arm’’s ‘Makefile.am’: + + # 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 + + Now here is ‘hand’’s ‘hand/configure.ac’: + + 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 + +and its ‘hand/Makefile.am’: + + lib_LIBRARIES = libhand.a + libhand_a_SOURCES = hand.c + + When ‘make dist’ is run from the top-level directory it will create +an archive ‘arm-1.0.tar.gz’ that contains the ‘arm’ code as well as the +‘hand’ subdirectory. This package can be built and installed like any +ordinary package, with the usual ‘./configure && make && make install’ +sequence (the ‘hand’ subpackage will be built and installed by the +process). + + When ‘make dist’ is run from the hand directory, it will create a +self-contained ‘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 ‘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 +‘install-sh’: one in the top-level of the ‘arm’ package, and another one +in the ‘hand/’ subdirectory for the ‘hand’ package. + + The historical default is to search for these auxiliary scripts in +the parent directory and the grandparent directory. So if the +‘AC_CONFIG_AUX_DIR([.])’ line was removed from ‘hand/configure.ac’, that +subpackage would share the auxiliary script of the ‘arm’ package. This +may looks like a gain in size (a few kilobytes), but it is actually a +loss of modularity as the ‘hand’ subpackage is no longer self-contained +(‘make dist’ in the subdirectory will not work anymore). + + Packages that do not use Automake need more work to be integrated +this way. *Note Third-Party Makefiles::. + + +File: automake.info, Node: Programs, Next: Other Objects, Prev: Directories, Up: Top + +8 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 + + +File: automake.info, Node: A Program, Next: A Library, Up: Programs + +8.1 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 +(*note A Library::) and libtool libraries (*note 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 + + +File: automake.info, Node: Program Sources, Next: Linking, Up: A Program + +8.1.1 Defining program sources +------------------------------ + +In a directory containing source that gets built into a program (as +opposed to a library or a script), the ‘PROGRAMS’ primary is used. +Programs can be installed in ‘bindir’, ‘sbindir’, ‘libexecdir’, +‘pkglibexecdir’, or not at all (‘noinst_’). They can also be built only +for ‘make check’, in which case the prefix is ‘check_’. + + For instance: + + bin_PROGRAMS = hello + + In this simple case, the resulting ‘Makefile.in’ will contain code to +generate a program named ‘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 ‘hello_SOURCES’ is used to specify which source files +get built into an executable: + + hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h + + This causes each mentioned ‘.c’ file to be compiled into the +corresponding ‘.o’. Then all are linked to produce ‘hello’. + + If ‘hello_SOURCES’ is not specified, then it defaults to the single +file ‘hello.c’ (*note Default _SOURCES::). + + Multiple programs can be built in a single directory. Multiple +programs can share a single source file, which must be listed in each +‘_SOURCES’ definition. + + Header files listed in a ‘_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 ‘configure’ in a +‘_SOURCES’ variable; this file should not be distributed. Lex (‘.l’) +and Yacc (‘.y’) files can also be listed; see *note Yacc and Lex::. + + +File: automake.info, Node: Linking, Next: Conditional Sources, Prev: Program Sources, Up: A Program + +8.1.2 Linking the program +------------------------- + +If you need to link against libraries that are not found by ‘configure’, +you can use ‘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 ‘AM_LDFLAGS’ for this +purpose. + + Sometimes, multiple programs are built in one directory but do not +share the same link-time requirements. In this case, you can use the +‘PROG_LDADD’ variable (where PROG is the name of the program as it +appears in some ‘_PROGRAMS’ variable, and usually written in lowercase) +to override ‘LDADD’. If this variable exists for a given program, then +that program is not linked using ‘LDADD’. + + For instance, in GNU cpio, ‘pax’, ‘cpio’ and ‘mt’ are linked against +the library ‘libcpio.a’. However, ‘rmt’ is built in the same directory, +and has no such link requirement. Also, ‘mt’ and ‘rmt’ are only built +on certain architectures. Here is what cpio’s ‘src/Makefile.am’ looks +like (abridged): + + bin_PROGRAMS = cpio pax $(MT) + libexec_PROGRAMS = $(RMT) + EXTRA_PROGRAMS = mt rmt + + LDADD = ../lib/libcpio.a $(INTLLIBS) + rmt_LDADD = + + cpio_SOURCES = ... + pax_SOURCES = ... + mt_SOURCES = ... + rmt_SOURCES = ... + + ‘PROG_LDADD’ is inappropriate for passing program-specific linker +flags (except for ‘-l’, ‘-L’, ‘-dlopen’ and ‘-dlpreopen’). So, use the +‘PROG_LDFLAGS’ variable for this purpose. + + 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 ‘PROG_DEPENDENCIES’ or the ‘EXTRA_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 ‘*.$(OBJEXT)’, ‘*.a’, or ‘*.la’ files. In rare cases +you may need to add other kinds of files such as linker scripts, but +_listing a source file in ‘_DEPENDENCIES’ is wrong_. If some source +file needs to be built before all the components of a program are built, +consider using the ‘BUILT_SOURCES’ variable instead (*note Sources::). + + If ‘PROG_DEPENDENCIES’ is not supplied, it is computed by Automake. +The automatically-assigned value is the contents of ‘PROG_LDADD’, with +most configure substitutions, ‘-l’, ‘-L’, ‘-dlopen’ and ‘-dlpreopen’ +options removed. The configure substitutions that are left in are only +‘$(LIBOBJS)’ and ‘$(ALLOCA)’; these are left because it is known that +they will not cause an invalid value for ‘PROG_DEPENDENCIES’ to be +generated. + + *note Conditional Sources:: shows a situation where ‘_DEPENDENCIES’ +may be used. + + The ‘EXTRA_PROG_DEPENDENCIES’ may be useful for cases where you +merely want to augment the ‘automake’-generated ‘PROG_DEPENDENCIES’ +rather than replacing it. + + We recommend that you avoid using ‘-l’ options in ‘LDADD’ or +‘PROG_LDADD’ when referring to libraries built by your package. +Instead, write the file name of the library explicitly as in the above +‘cpio’ example. Use ‘-l’ only to list third-party libraries. If you +follow this rule, the default value of ‘PROG_DEPENDENCIES’ will list all +your local libraries and omit the other ones. + + +File: automake.info, Node: Conditional Sources, Next: Conditional Programs, Prev: Linking, Up: A Program + +8.1.3 Conditional compilation of sources +---------------------------------------- + +You can’t put a configure substitution (e.g., ‘@FOO@’ or ‘$(FOO)’ where +‘FOO’ is defined via ‘AC_SUBST’) into a ‘_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 ‘_LDADD’ variables, the other is to +use an Automake conditional. + +Conditional Compilation using ‘_LDADD’ Substitutions +.................................................... + +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 ‘EXTRA_’ variable. For instance, if ‘hello-linux.c’ or +‘hello-generic.c’ were conditionally included in ‘hello’, the +‘Makefile.am’ would contain: + + 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) + +You can then setup the ‘$(HELLO_SYSTEM)’ substitution from +‘configure.ac’: + + ... + case $host in + *linux*) HELLO_SYSTEM='hello-linux.$(OBJEXT)' ;; + *) HELLO_SYSTEM='hello-generic.$(OBJEXT)' ;; + esac + AC_SUBST([HELLO_SYSTEM]) + ... + + In this case, the variable ‘HELLO_SYSTEM’ should be replaced by +either ‘hello-linux.o’ or ‘hello-generic.o’, and added to both +‘hello_DEPENDENCIES’ and ‘hello_LDADD’ in order to be built and linked +in. + +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 ‘Makefile.am’ +construct to build the same ‘hello’ example: + + bin_PROGRAMS = hello + if LINUX + hello_SOURCES = hello-linux.c hello-common.c + else + hello_SOURCES = hello-generic.c hello-common.c + endif + + In this case, ‘configure.ac’ should setup the ‘LINUX’ conditional +using ‘AM_CONDITIONAL’ (*note Conditionals::). + + When using conditionals like this you don’t need to use the ‘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 ‘+=’. + + bin_PROGRAMS = hello + hello_SOURCES = hello-common.c + if LINUX + hello_SOURCES += hello-linux.c + else + hello_SOURCES += hello-generic.c + endif + + +File: automake.info, Node: Conditional Programs, Prev: Conditional Sources, Up: A Program + +8.1.4 Conditional compilation of programs +----------------------------------------- + +Sometimes it is useful to determine the programs that are to be built at +configure time. For instance, GNU ‘cpio’ only builds ‘mt’ and ‘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. + +Conditional Programs using ‘configure’ Substitutions +.................................................... + +In this case, you must notify Automake of all the programs that can +possibly be built, but at the same time cause the generated +‘Makefile.in’ to use the programs specified by ‘configure’. This is +done by having ‘configure’ substitute values into each ‘_PROGRAMS’ +definition, while listing all optionally built programs in +‘EXTRA_PROGRAMS’. + + bin_PROGRAMS = cpio pax $(MT) + libexec_PROGRAMS = $(RMT) + EXTRA_PROGRAMS = mt rmt + + As explained in *note EXEEXT::, Automake will rewrite ‘bin_PROGRAMS’, +‘libexec_PROGRAMS’, and ‘EXTRA_PROGRAMS’, appending ‘$(EXEEXT)’ to each +binary. Obviously it cannot rewrite values obtained at run-time through +‘configure’ substitutions, therefore you should take care of appending +‘$(EXEEXT)’ yourself, as in ‘AC_SUBST([MT], ['mt${EXEEXT}'])’. + +Conditional Programs using Automake Conditionals +................................................ + +You can also use Automake conditionals (*note Conditionals::) to select +programs to be built. In this case you don’t have to worry about +‘$(EXEEXT)’ or ‘EXTRA_PROGRAMS’. + + bin_PROGRAMS = cpio pax + if WANT_MT + bin_PROGRAMS += mt + endif + if WANT_RMT + libexec_PROGRAMS = rmt + endif + + +File: automake.info, Node: A Library, Next: A Shared Library, Prev: A Program, Up: Programs + +8.2 Building a library +====================== + +Building a library is much like building a program. In this case, the +name of the primary is ‘LIBRARIES’. Libraries can be installed in +‘libdir’ or ‘pkglibdir’. + + *Note A Shared Library::, for information on how to build shared +libraries using libtool and the ‘LTLIBRARIES’ primary. + + Each ‘_LIBRARIES’ variable is a list of the libraries to be built. +For instance, to create a library named ‘libcpio.a’, but not install it, +you would write: + + noinst_LIBRARIES = libcpio.a + libcpio_a_SOURCES = ... + + The sources that go into a library are determined exactly as they are +for programs, via the ‘_SOURCES’ variables. Note that the library name +is canonicalized (*note Canonicalization::), so the ‘_SOURCES’ variable +corresponding to ‘libcpio.a’ is ‘libcpio_a_SOURCES’, not +‘libcpio.a_SOURCES’. + + Extra objects can be added to a library using the ‘LIBRARY_LIBADD’ +variable. This should be used for objects determined by ‘configure’. +Again from ‘cpio’: + + libcpio_a_LIBADD = $(LIBOBJS) $(ALLOCA) + + In addition, sources for extra objects that will not exist until +configure-time must be added to the ‘BUILT_SOURCES’ variable (*note +Sources::). + + Building a static library is done by compiling all object files, then +by invoking ‘$(AR) $(ARFLAGS)’ followed by the name of the library and +the list of objects, and finally by calling ‘$(RANLIB)’ on that library. +You should call ‘AC_PROG_RANLIB’ from your ‘configure.ac’ to define +‘RANLIB’ (Automake will complain otherwise). You should also call +‘AM_PROG_AR’ to define ‘AR’, in order to support unusual archivers such +as Microsoft lib. ‘ARFLAGS’ will default to ‘cru’; you can override +this variable by setting it in your ‘Makefile.am’ or by ‘AC_SUBST’ing it +from your ‘configure.ac’. You can override the ‘AR’ variable by +defining a per-library ‘maude_AR’ variable (*note Program and Library +Variables::). + + 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 ‘LDADD’ +for this program. In the following example, the program ‘cpio’ is +statically linked with the library ‘libcpio.a’. + + noinst_LIBRARIES = libcpio.a + libcpio_a_SOURCES = ... + + bin_PROGRAMS = cpio + cpio_SOURCES = cpio.c ... + cpio_LDADD = libcpio.a + + +File: automake.info, Node: A Shared Library, Next: Program and Library Variables, Prev: A Library, Up: Programs + +8.3 Building a Shared Library +============================= + +Building shared libraries portably is a relatively complex matter. For +this reason, GNU Libtool (*note Introduction: (libtool)Top.) 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 + + +File: automake.info, Node: Libtool Concept, Next: Libtool Libraries, Up: A Shared Library + +8.3.1 The Libtool Concept +------------------------- + +Libtool abstracts shared and static libraries into a unified concept +henceforth called “libtool librariesâ€. Libtool libraries are files +using the ‘.la’ suffix, and can designate a static library, a shared +library, or maybe both. Their exact nature cannot be determined until +‘./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, *note The +‘AC_PROG_LIBTOOL’ macro: (libtool)AC_PROG_LIBTOOL.) + + 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 “libtool objectsâ€: these are files using the +‘.lo’ suffix. Libtool libraries are built from these libtool objects. + + You should not assume anything about the structure of ‘.la’ or ‘.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 ‘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 +(*note Conditional Libtool Sources::). + + People considering writing a plug-in system, with dynamically loaded +modules, should look into ‘libltdl’: libtool’s dlopening library (*note +Using libltdl: (libtool)Using libltdl.). 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 (*note Using Automake with Libtool: +(libtool)Using Automake.). + + +File: automake.info, Node: Libtool Libraries, Next: Conditional Libtool Libraries, Prev: Libtool Concept, Up: A Shared Library + +8.3.2 Building Libtool Libraries +-------------------------------- + +Automake uses libtool to build libraries declared with the ‘LTLIBRARIES’ +primary. Each ‘_LTLIBRARIES’ variable is a list of libtool libraries to +build. For instance, to create a libtool library named ‘libgettext.la’, +and install it in ‘libdir’, write: + + lib_LTLIBRARIES = libgettext.la + libgettext_la_SOURCES = gettext.c gettext.h ... + + Automake predefines the variable ‘pkglibdir’, so you can use +‘pkglib_LTLIBRARIES’ to install libraries in ‘$(libdir)/@PACKAGE@/’. + + If ‘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 +‘_HEADERS’ variable, not in ‘libgettext_la_SOURCES’. Headers listed in +the latter should be internal headers that are not part of the public +interface. + + lib_LTLIBRARIES = libgettext.la + libgettext_la_SOURCES = gettext.c ... + include_HEADERS = gettext.h ... + + A package can build and install such a library along with other +programs that use it. This dependency should be specified using +‘LDADD’. The following example builds a program named ‘hello’ that is +linked with ‘libgettext.la’. + + lib_LTLIBRARIES = libgettext.la + libgettext_la_SOURCES = gettext.c ... + + bin_PROGRAMS = hello + hello_SOURCES = hello.c ... + hello_LDADD = libgettext.la + +Whether ‘hello’ is statically or dynamically linked with ‘libgettext.la’ +is not yet known: this will depend on the configuration of libtool and +the capabilities of the host. + + +File: automake.info, Node: Conditional Libtool Libraries, Next: Conditional Libtool Sources, Prev: Libtool Libraries, Up: A Shared Library + +8.3.3 Building Libtool Libraries Conditionally +---------------------------------------------- + +Like conditional programs (*note Conditional Programs::), there are two +main ways to build conditional libraries: using Automake conditionals or +using Autoconf ‘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 _at link-time_ using the ‘-rpath’ option. + + For libraries whose destination directory is known when Automake +runs, Automake will automatically supply the appropriate ‘-rpath’ option +to libtool. This is the case for libraries listed explicitly in some +installable ‘_LTLIBRARIES’ variables such as ‘lib_LTLIBRARIES’. + + However, for libraries determined at configure time (and thus +mentioned in ‘EXTRA_LTLIBRARIES’), Automake does not know the final +installation directory. For such libraries you must add the ‘-rpath’ +option to the appropriate ‘_LDFLAGS’ variable by hand. + + The examples below illustrate the differences between these two +methods. + + Here is an example where ‘WANTEDLIBS’ is an ‘AC_SUBST’ed variable set +at ‘./configure’-time to either ‘libfoo.la’, ‘libbar.la’, both, or none. +Although ‘$(WANTEDLIBS)’ appears in the ‘lib_LTLIBRARIES’, Automake +cannot guess it relates to ‘libfoo.la’ or ‘libbar.la’ at the time it +creates the link rule for these two libraries. Therefore the ‘-rpath’ +argument must be explicitly supplied. + + EXTRA_LTLIBRARIES = libfoo.la libbar.la + lib_LTLIBRARIES = $(WANTEDLIBS) + libfoo_la_SOURCES = foo.c ... + libfoo_la_LDFLAGS = -rpath '$(libdir)' + libbar_la_SOURCES = bar.c ... + libbar_la_LDFLAGS = -rpath '$(libdir)' + + Here is how the same ‘Makefile.am’ would look using Automake +conditionals named ‘WANT_LIBFOO’ and ‘WANT_LIBBAR’. Now Automake is +able to compute the ‘-rpath’ setting itself, because it’s clear that +both libraries will end up in ‘$(libdir)’ if they are installed. + + lib_LTLIBRARIES = + if WANT_LIBFOO + lib_LTLIBRARIES += libfoo.la + endif + if WANT_LIBBAR + lib_LTLIBRARIES += libbar.la + endif + libfoo_la_SOURCES = foo.c ... + libbar_la_SOURCES = bar.c ... + + +File: automake.info, Node: Conditional Libtool Sources, Next: Libtool Convenience Libraries, Prev: Conditional Libtool Libraries, Up: A Shared Library + +8.3.4 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 (*note +Conditional Sources::). The only difference is that ‘_LIBADD’ should be +used instead of ‘_LDADD’ and that it should mention libtool objects +(‘.lo’ files). + + So, to mimic the ‘hello’ example from *note Conditional Sources::, we +could build a ‘libhello.la’ library using either ‘hello-linux.c’ or +‘hello-generic.c’ with the following ‘Makefile.am’. + + 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) + +And make sure ‘configure’ defines ‘HELLO_SYSTEM’ as either +‘hello-linux.lo’ or ‘hello-generic.lo’. + + Or we could simply use an Automake conditional as follows. + + 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 + + +File: automake.info, Node: Libtool Convenience Libraries, Next: Libtool Modules, Prev: Conditional Libtool Sources, Up: A Shared Library + +8.3.5 Libtool Convenience Libraries +----------------------------------- + +Sometimes you want to build libtool libraries that should not be +installed. These are called “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 ‘noinst_LTLIBRARIES’, ‘check_LTLIBRARIES’, or even +‘EXTRA_LTLIBRARIES’. Unlike installed libtool libraries they do not +need an ‘-rpath’ flag at link time (actually this is the only +difference). + + Convenience libraries listed in ‘noinst_LTLIBRARIES’ are always +built. Those listed in ‘check_LTLIBRARIES’ are built only upon ‘make +check’. Finally, libraries listed in ‘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 ‘EXTRA_LTLIBRARIES’ is used for conditional +compilation). + + Here is a sample setup merging libtool convenience libraries from +subdirectories into one main ‘libtop.la’ library. + + # -- Top-level Makefile.am -- + SUBDIRS = sub1 sub2 ... + lib_LTLIBRARIES = libtop.la + libtop_la_SOURCES = + libtop_la_LIBADD = \ + sub1/libsub1.la \ + sub2/libsub2.la \ + ... + + # -- sub1/Makefile.am -- + noinst_LTLIBRARIES = libsub1.la + libsub1_la_SOURCES = ... + + # -- sub2/Makefile.am -- + # showing nested convenience libraries + SUBDIRS = sub2.1 sub2.2 ... + noinst_LTLIBRARIES = libsub2.la + libsub2_la_SOURCES = + libsub2_la_LIBADD = \ + sub21/libsub21.la \ + sub22/libsub22.la \ + ... + + When using such setup, beware that ‘automake’ will assume ‘libtop.la’ +is to be linked with the C linker. This is because ‘libtop_la_SOURCES’ +is empty, so ‘automake’ picks C as default language. If +‘libtop_la_SOURCES’ was not empty, ‘automake’ would select the linker as +explained in *note 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 ‘automake’ to select the appropriate linker. Here +is the top-level ‘Makefile’ of our example updated to force C++ linking. + + SUBDIRS = sub1 sub2 ... + 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 \ + ... + + ‘EXTRA_*_SOURCES’ variables are used to keep track of source files +that might be compiled (this is mostly useful when doing conditional +compilation using ‘AC_SUBST’, *note Conditional Libtool Sources::), and +the ‘nodist_’ prefix means the listed sources are not to be distributed +(*note Program and Library Variables::). In effect the file ‘dummy.cxx’ +does not need to exist in the source tree. Of course if you have some +real source file to list in ‘libtop_la_SOURCES’ there is no point in +cheating with ‘nodist_EXTRA_libtop_la_SOURCES’. + + +File: automake.info, Node: Libtool Modules, Next: Libtool Flags, Prev: Libtool Convenience Libraries, Up: A Shared Library + +8.3.6 Libtool Modules +--------------------- + +These are libtool libraries meant to be dlopened. They are indicated to +libtool by passing ‘-module’ at link-time. + + pkglib_LTLIBRARIES = mymodule.la + mymodule_la_SOURCES = doit.c + mymodule_la_LDFLAGS = -module + + Ordinarily, Automake requires that a library’s name start with ‘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 ‘-module’ explicitly appears in the library’s +‘_LDFLAGS’ variable (or in the common ‘AM_LDFLAGS’ variable when no +per-library ‘_LDFLAGS’ variable is defined). + + As always, ‘AC_SUBST’ variables are black boxes to Automake since +their values are not yet known when ‘automake’ is run. Therefore if +‘-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 ‘mymodule_la_SOURCES’ is not specified, then it defaults to the +single file ‘mymodule.c’ (*note Default _SOURCES::). + + +File: automake.info, Node: Libtool Flags, Next: LTLIBOBJS, Prev: Libtool Modules, Up: A Shared Library + +8.3.7 ‘_LIBADD’, ‘_LDFLAGS’, and ‘_LIBTOOLFLAGS’ +------------------------------------------------ + +As shown in previous sections, the ‘LIBRARY_LIBADD’ variable should be +used to list extra libtool objects (‘.lo’ files) or libtool libraries +(‘.la’) to add to LIBRARY. + + The ‘LIBRARY_LDFLAGS’ variable is the place to list additional +libtool linking flags, such as ‘-version-info’, ‘-static’, and a lot +more. *Note Link mode: (libtool)Link mode. + + The ‘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 ‘libtool’ (hence the use of ‘LIBRARY_LDFLAGS’ for libtool +linking flags). Generic options include ‘--tag=TAG’ and ‘--silent’ +(*note Invoking ‘libtool’: (libtool)Invoking libtool. for more options) +should appear before the mode selection on the command line; in +‘Makefile.am’s they should be listed in the ‘LIBRARY_LIBTOOLFLAGS’ +variable. + + If ‘LIBRARY_LIBTOOLFLAGS’ is not defined, then the variable +‘AM_LIBTOOLFLAGS’ is used instead. + + These flags are passed to libtool after the ‘--tag=TAG’ option +computed by Automake (if any), so ‘LIBRARY_LIBTOOLFLAGS’ (or +‘AM_LIBTOOLFLAGS’) is a good place to override or supplement the +‘--tag=TAG’ setting. + + The libtool rules also use a ‘LIBTOOLFLAGS’ variable that should not +be set in ‘Makefile.am’: this is a user variable (*note Flag Variables +Ordering::. It allows users to run ‘make LIBTOOLFLAGS=--silent’, for +instance. Note that the verbosity of ‘libtool’ can also be influenced +by the Automake support for silent rules (*note Automake Silent +Rules::). + + +File: automake.info, Node: LTLIBOBJS, Next: Libtool Issues, Prev: Libtool Flags, Up: A Shared Library + +8.3.8 ‘LTLIBOBJS’ and ‘LTALLOCA’ +-------------------------------- + +Where an ordinary library might include ‘$(LIBOBJS)’ or ‘$(ALLOCA)’ +(*note LIBOBJS::), a libtool library must use ‘$(LTLIBOBJS)’ or +‘$(LTALLOCA)’. This is required because the object files that libtool +operates on do not necessarily end in ‘.o’. + + Nowadays, the computation of ‘LTLIBOBJS’ from ‘LIBOBJS’ is performed +automatically by Autoconf (*note ‘AC_LIBOBJ’ vs. ‘LIBOBJS’: +(autoconf)AC_LIBOBJ vs LIBOBJS.). + + +File: automake.info, Node: Libtool Issues, Prev: LTLIBOBJS, Up: A Shared Library + +8.3.9 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 + + +File: automake.info, Node: Error required file ltmain.sh not found, Next: Objects created both with libtool and without, Up: Libtool Issues + +8.3.9.1 Error: ‘required file `./ltmain.sh' not found’ +...................................................... + +Libtool comes with a tool called ‘libtoolize’ that will install +libtool’s supporting files into a package. Running this command will +install ‘ltmain.sh’. You should execute it before ‘aclocal’ and +‘automake’. + + People upgrading old packages to newer autotools are likely to face +this issue because older Automake versions used to call ‘libtoolize’. +Therefore old build scripts do not call ‘libtoolize’. + + Since Automake 1.6, it has been decided that running ‘libtoolize’ was +none of Automake’s business. Instead, that functionality has been moved +into the ‘autoreconf’ command (*note Using ‘autoreconf’: +(autoconf)autoreconf Invocation.). If you do not want to remember what +to run and when, just learn the ‘autoreconf’ command. Hopefully, +replacing existing ‘bootstrap’ or ‘autogen.sh’ scripts by a call to +‘autoreconf’ should also free you from any similar incompatible change +in the future. + + +File: automake.info, Node: Objects created both with libtool and without, Prev: Error required file ltmain.sh not found, Up: Libtool Issues + +8.3.9.2 Objects ‘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 ‘Makefile.am’. + + bin_PROGRAMS = prog + prog_SOURCES = prog.c foo.c ... + + lib_LTLIBRARIES = libfoo.la + libfoo_la_SOURCES = foo.c ... + +(In this trivial case the issue could be avoided by linking ‘libfoo.la’ +with ‘prog’ instead of listing ‘foo.c’ in ‘prog_SOURCES’. But let’s +assume we really want to keep ‘prog’ and ‘libfoo.la’ separate.) + + Technically, it means that we should build ‘foo.$(OBJEXT)’ for +‘prog’, and ‘foo.lo’ for ‘libfoo.la’. The problem is that in the course +of creating ‘foo.lo’, libtool may erase (or replace) ‘foo.$(OBJEXT)’, +and this cannot be avoided. + + Therefore, when Automake detects this situation it will complain with +a message such as + object 'foo.$(OBJEXT)' created both with libtool and without + + A workaround for this issue is to ensure that these two objects get +different basenames. As explained in *note Renamed Objects::, this +happens automatically when per-targets flags are used. + + bin_PROGRAMS = prog + prog_SOURCES = prog.c foo.c ... + prog_CFLAGS = $(AM_CFLAGS) + + lib_LTLIBRARIES = libfoo.la + libfoo_la_SOURCES = foo.c ... + +Adding ‘prog_CFLAGS = $(AM_CFLAGS)’ is almost a no-op, because when the +‘prog_CFLAGS’ is defined, it is used instead of ‘AM_CFLAGS’. However as +a side effect it will cause ‘prog.c’ and ‘foo.c’ to be compiled as +‘prog-prog.$(OBJEXT)’ and ‘prog-foo.$(OBJEXT)’, which solves the issue. + + +File: automake.info, Node: Program and Library Variables, Next: Default _SOURCES, Prev: A Shared Library, Up: Programs + +8.4 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 ‘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. + +‘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 ‘.o’ file (or + ‘.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 ‘_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 ‘.o’ + files, then ‘automake’ will treat this file as it will any other + source file (*note Support for Other Languages::). Otherwise, the + file will be ignored as though it were a header file. + + The prefixes ‘dist_’ and ‘nodist_’ can be used to control whether + files listed in a ‘_SOURCES’ variable are distributed. ‘dist_’ is + redundant, as sources are distributed by default, but it can be + specified for clarity if desired. + + It is possible to have both ‘dist_’ and ‘nodist_’ variants of a + given ‘_SOURCES’ variable at once; this lets you easily distribute + some files and not others, for instance: + + nodist_maude_SOURCES = nodist.c + dist_maude_SOURCES = dist-me.c + + By default the output file (on Unix systems, the ‘.o’ file) will be + put into the current build directory. However, if the option + ‘subdir-objects’ is in effect in the current directory then the + ‘.o’ file will be put into the subdirectory named after the source + file. For instance, with ‘subdir-objects’ enabled, + ‘sub/dir/file.c’ will be compiled to ‘sub/dir/file.o’. Some people + prefer this mode of operation. You can specify ‘subdir-objects’ in + ‘AUTOMAKE_OPTIONS’ (*note Options::). + +‘EXTRA_maude_SOURCES’ + Automake needs to know the list of files you intend to compile + _statically_. For one thing, this is the only way Automake has of + knowing what sort of language support a given ‘Makefile.in’ + requires. (1) This means that, for example, you can’t put a + configure substitution like ‘@my_sources@’ into a ‘_SOURCES’ + variable. If you intend to conditionally compile source files and + use ‘configure’ to substitute the appropriate object names into, + e.g., ‘_LDADD’ (see below), then you should list the corresponding + source files in the ‘EXTRA_’ variable. + + This variable also supports ‘dist_’ and ‘nodist_’ prefixes. For + instance, ‘nodist_EXTRA_maude_SOURCES’ would list extra sources + that may need to be built, but should not be distributed. + +‘maude_AR’ + A static library is created by default by invoking ‘$(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 ‘_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: + libmaude_a_AR = $(CXX) -ar -o + +‘maude_LIBADD’ + Extra objects can be added to a _library_ using the ‘_LIBADD’ + variable. For instance, this should be used for objects determined + by ‘configure’ (*note A Library::). + + In the case of libtool libraries, ‘maude_LIBADD’ can also refer to + other libtool libraries. + +‘maude_LDADD’ + Extra objects (‘*.$(OBJEXT)’) and libraries (‘*.a’, ‘*.la’) can be + added to a _program_ by listing them in the ‘_LDADD’ variable. For + instance, this should be used for objects determined by ‘configure’ + (*note Linking::). + + ‘_LDADD’ and ‘_LIBADD’ are inappropriate for passing + program-specific linker flags (except for ‘-l’, ‘-L’, ‘-dlopen’ and + ‘-dlpreopen’). Use the ‘_LDFLAGS’ variable for this purpose. + + For instance, if your ‘configure.ac’ uses ‘AC_PATH_XTRA’, you could + link your program against the X libraries like so: + + maude_LDADD = $(X_PRE_LIBS) $(X_LIBS) $(X_EXTRA_LIBS) + + We recommend that you use ‘-l’ and ‘-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 + ‘maude_DEPENDENCIES’ (see below) is correctly defined by default. + +‘maude_LDFLAGS’ + This variable is used to pass extra flags to the link step of a + program or a shared library. It overrides the ‘AM_LDFLAGS’ + variable. + +‘maude_LIBTOOLFLAGS’ + This variable is used to pass extra options to ‘libtool’. It + overrides the ‘AM_LIBTOOLFLAGS’ variable. These options are output + before ‘libtool’’s ‘--mode=MODE’ option, so they should not be + mode-specific options (those belong to the compiler or linker + flags). *Note Libtool Flags::. + +‘maude_DEPENDENCIES’ +‘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 ‘_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 ‘*.$(OBJEXT)’, ‘*.a’, or ‘*.la’ files for + programs; ‘*.lo’ and ‘*.la’ files for Libtool libraries; and + ‘*.$(OBJEXT)’ files for static libraries. In rare cases you may + need to add other kinds of files such as linker scripts, but + _listing a source file in ‘_DEPENDENCIES’ is wrong_. If some + source file needs to be built before all the components of a + program are built, consider using the ‘BUILT_SOURCES’ variable + (*note Sources::). + + If ‘_DEPENDENCIES’ is not supplied, it is computed by Automake. + The automatically-assigned value is the contents of ‘_LDADD’ or + ‘_LIBADD’, with most configure substitutions, ‘-l’, ‘-L’, ‘-dlopen’ + and ‘-dlpreopen’ options removed. The configure substitutions that + are left in are only ‘$(LIBOBJS)’ and ‘$(ALLOCA)’; these are left + because it is known that they will not cause an invalid value for + ‘_DEPENDENCIES’ to be generated. + + ‘_DEPENDENCIES’ is more likely used to perform conditional + compilation using an ‘AC_SUBST’ variable that contains a list of + objects. *Note Conditional Sources::, and *note Conditional + Libtool Sources::. + + The ‘EXTRA_*_DEPENDENCIES’ variable may be useful for cases where + you merely want to augment the ‘automake’-generated ‘_DEPENDENCIES’ + variable rather than replacing it. + +‘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 ‘_LINK’ variable must hold the name of a + command that can be passed all the ‘.o’ file names and libraries to + link against as arguments. Note that the name of the underlying + program is _not_ passed to ‘_LINK’; typically one uses ‘$@’: + + maude_LINK = $(CCLD) -magic -o $@ + + If a ‘_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 ‘_CFLAGS’, ‘_LDFLAGS’ or ‘_LIBTOOLFLAGS’, in cases where they + apply. + +‘maude_CCASFLAGS’ +‘maude_CFLAGS’ +‘maude_CPPFLAGS’ +‘maude_CXXFLAGS’ +‘maude_FFLAGS’ +‘maude_GCJFLAGS’ +‘maude_LFLAGS’ +‘maude_OBJCFLAGS’ +‘maude_OBJCXXFLAGS’ +‘maude_RFLAGS’ +‘maude_UPCFLAGS’ +‘maude_YFLAGS’ + 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 “per-target compilation + flags†are ‘_CCASFLAGS’, ‘_CFLAGS’, ‘_CPPFLAGS’, ‘_CXXFLAGS’, + ‘_FFLAGS’, ‘_GCJFLAGS’, ‘_LFLAGS’, ‘_OBJCFLAGS’, ‘_OBJCXXFLAGS’, + ‘_RFLAGS’, ‘_UPCFLAGS’, and ‘_YFLAGS’. + + When using a per-target compilation flag, Automake will choose a + different name for the intermediate object files. Ordinarily a + file like ‘sample.c’ will be compiled to produce ‘sample.o’. + However, if the program’s ‘_CFLAGS’ variable is set, then the + object file will be named, for instance, ‘maude-sample.o’. (See + also *note Renamed Objects::). + + In compilations with per-target flags, the ordinary ‘AM_’ form of + the flags variable is _not_ automatically included in the + compilation (however, the user form of the variable _is_ included). + So for instance, if you want the hypothetical ‘maude’ compilations + to also use the value of ‘AM_CFLAGS’, you would need to write: + + maude_CFLAGS = ... your flags ... $(AM_CFLAGS) + + *Note Flag Variables Ordering::, for more discussion about the + interaction between user variables, ‘AM_’ shadow variables, and + per-target variables. + +‘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, + + bin_PROGRAMS = maude + maude_CPPFLAGS = -DSOMEFLAG + maude_SHORTNAME = m + maude_SOURCES = sample.c ... + + the object file would be named ‘m-sample.o’ rather than + ‘maude-sample.o’. + + This facility is rarely needed in practice, and we recommend + avoiding it until you find it is required. + + ---------- Footnotes ---------- + + (1) There are other, more obscure reasons for this limitation as +well. + + +File: automake.info, Node: Default _SOURCES, Next: LIBOBJS, Prev: Program and Library Variables, Up: Programs + +8.5 Default ‘_SOURCES’ +====================== + +‘_SOURCES’ variables are used to specify source files of programs (*note +A Program::), libraries (*note A Library::), and Libtool libraries +(*note 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 +‘AM_DEFAULT_SOURCE_EXT’, which defaults to ‘.c’. + + For example if you have the following somewhere in your ‘Makefile.am’ +with no corresponding ‘libfoo_a_SOURCES’: + + lib_LIBRARIES = libfoo.a sub/libc++.a + +‘libfoo.a’ will be built using a default source file named ‘libfoo.c’, +and ‘sub/libc++.a’ will be built from ‘sub/libc++.c’. (In older +versions ‘sub/libc++.a’ would be built from ‘sub_libc___a.c’, i.e., the +default source was the canonized name of the target, with ‘.c’ appended. +We believe the new behavior is more sensible, but for backward +compatibility ‘automake’ will use the old name if a file or a rule with +that name exists and ‘AM_DEFAULT_SOURCE_EXT’ is not used.) + + Default sources are mainly useful in test suites, when building many +test programs each from a single source. For instance, in + + check_PROGRAMS = test1 test2 test3 + AM_DEFAULT_SOURCE_EXT = .cpp + +‘test1’, ‘test2’, and ‘test3’ will be built from ‘test1.cpp’, +‘test2.cpp’, and ‘test3.cpp’. Without the last line, they will be built +from ‘test1.c’, ‘test2.c’, and ‘test3.c’. + + Another case where this is convenient is building many Libtool +modules (‘moduleN.la’), each defined in its own file (‘moduleN.c’). + + AM_LDFLAGS = -module + lib_LTLIBRARIES = module1.la module2.la module3.la + + 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 *note true::; this happens when all the +constituents of a target have already been compiled and just need to be +combined using a ‘_LDADD’ variable. Then it is necessary to define an +empty ‘_SOURCES’ variable, so that ‘automake’ does not compute a +default. + + bin_PROGRAMS = target + target_SOURCES = + target_LDADD = libmain.a libmisc.a + + +File: automake.info, Node: LIBOBJS, Next: Program Variables, Prev: Default _SOURCES, Up: Programs + +8.6 Special handling for ‘LIBOBJS’ and ‘ALLOCA’ +=============================================== + +The ‘$(LIBOBJS)’ and ‘$(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 +‘configure’. + + These variables are defined by Autoconf macros such as ‘AC_LIBOBJ’, +‘AC_REPLACE_FUNCS’ (*note Generic Function Checks: (autoconf)Generic +Functions.), or ‘AC_FUNC_ALLOCA’ (*note Particular Function Checks: +(autoconf)Particular Functions.). Many other Autoconf macros call +‘AC_LIBOBJ’ or ‘AC_REPLACE_FUNCS’ to populate ‘$(LIBOBJS)’. + + Using these variables is very similar to doing conditional +compilation using ‘AC_SUBST’ variables, as described in *note +Conditional Sources::. That is, when building a program, ‘$(LIBOBJS)’ +and ‘$(ALLOCA)’ should be added to the associated ‘*_LDADD’ variable, or +to the ‘*_LIBADD’ variable when building a library. However there is no +need to list the corresponding sources in ‘EXTRA_*_SOURCES’ nor to +define ‘*_DEPENDENCIES’. Automake automatically adds ‘$(LIBOBJS)’ and +‘$(ALLOCA)’ to the dependencies, and it will discover the list of +corresponding source files automatically (by tracing the invocations of +the ‘AC_LIBSOURCE’ Autoconf macros). If you have already defined +‘*_DEPENDENCIES’ explicitly for an unrelated reason, then you either +need to add these variables manually, or use ‘EXTRA_*_DEPENDENCIES’ +instead of ‘*_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, ‘configure.ac’ contains some checks that affect either +‘LIBOBJS’ or ‘ALLOCA’. + + # configure.ac + ... + AC_CONFIG_LIBOBJ_DIR([lib]) + ... + 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 + ... + AC_CONFIG_FILES([ + lib/Makefile + src/Makefile + ]) + AC_OUTPUT + + The ‘AC_CONFIG_LIBOBJ_DIR’ tells Autoconf that the source files of +these object files are to be found in the ‘lib/’ directory. Automake +can also use this information, otherwise it expects the source files are +to be in the directory where the ‘$(LIBOBJS)’ and ‘$(ALLOCA)’ variables +are used. + + The ‘lib/’ directory should therefore contain ‘malloc.c’, ‘memcmp.c’, +‘strdup.c’, ‘alloca.c’. Here is its ‘Makefile.am’: + + # lib/Makefile.am + + noinst_LIBRARIES = libcompat.a + libcompat_a_SOURCES = + libcompat_a_LIBADD = $(LIBOBJS) $(ALLOCA) + + 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 ‘_SOURCES’ line. + + There is a small trap here, though: ‘$(LIBOBJS)’ and ‘$(ALLOCA)’ +might be empty, and building an empty library is not portable. You +should ensure that there is always something to put in ‘libcompat.a’. +Most projects will also add some utility functions in that directory, +and list them in ‘libcompat_a_SOURCES’, so in practice ‘libcompat.a’ +cannot be empty. + + Finally here is how this library could be used from the ‘src/’ +directory. + + # src/Makefile.am + + # Link all programs in this directory with libcompat.a + LDADD = ../lib/libcompat.a + + bin_PROGRAMS = tool1 tool2 ... + tool1_SOURCES = ... + tool2_SOURCES = ... + + When option ‘subdir-objects’ is not used, as in the above example, +the variables ‘$(LIBOBJS)’ or ‘$(ALLOCA)’ can only be used in the +directory where their sources lie. E.g., here it would be wrong to use +‘$(LIBOBJS)’ or ‘$(ALLOCA)’ in ‘src/Makefile.am’. However if both +‘subdir-objects’ and ‘AC_CONFIG_LIBOBJ_DIR’ are used, it is OK to use +these variables in other directories. For instance ‘src/Makefile.am’ +could be changed as follows. + + # src/Makefile.am + + AUTOMAKE_OPTIONS = subdir-objects + LDADD = $(LIBOBJS) $(ALLOCA) + + bin_PROGRAMS = tool1 tool2 ... + tool1_SOURCES = ... + tool2_SOURCES = ... + + Because ‘$(LIBOBJS)’ and ‘$(ALLOCA)’ contain object file names that +end with ‘.$(OBJEXT)’, they are not suitable for Libtool libraries +(where the expected object extension is ‘.lo’): ‘LTLIBOBJS’ and +‘LTALLOCA’ should be used instead. + + ‘LTLIBOBJS’ is defined automatically by Autoconf and should not be +defined by hand (as in the past), however at the time of writing +‘LTALLOCA’ still needs to be defined from ‘ALLOCA’ manually. *Note +‘AC_LIBOBJ’ vs. ‘LIBOBJS’: (autoconf)AC_LIBOBJ vs LIBOBJS. + + +File: automake.info, Node: Program Variables, Next: Yacc and Lex, Prev: LIBOBJS, Up: Programs + +8.7 Variables used when building a program +========================================== + +Occasionally it is useful to know which ‘Makefile’ variables Automake +uses for compilations, and in which order (*note 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 ‘CC’, ‘CFLAGS’, +‘CPPFLAGS’, ‘DEFS’, ‘LDFLAGS’, and ‘LIBS’. + + There are some additional variables that Automake defines on its own: + +‘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, ‘-I’ and ‘-D’ options should be listed + here. + + Automake already provides some ‘-I’ options automatically, in a + separate variable that is also passed to every compilation that + invokes the C preprocessor. In particular it generates ‘-I.’, + ‘-I$(srcdir)’, and a ‘-I’ pointing to the directory holding + ‘config.h’ (if you’ve used ‘AC_CONFIG_HEADERS’). You can disable + the default ‘-I’ options using the ‘nostdinc’ option. + + When a file to be included is generated during the build and not + part of a distribution tarball, its location is under + ‘$(builddir)’, not under ‘$(srcdir)’. This matters especially for + packages that use header files placed in sub-directories and want + to allow builds outside the source tree (*note VPATH Builds::). In + that case we recommend to use a pair of ‘-I’ options, such as, + e.g., ‘-Isome/subdir -I$(srcdir)/some/subdir’ or + ‘-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. + + ‘AM_CPPFLAGS’ is ignored in preference to a per-executable (or + per-library) ‘_CPPFLAGS’ variable if it is defined. + +‘INCLUDES’ + This does the same job as ‘AM_CPPFLAGS’ (or any per-target + ‘_CPPFLAGS’ variable if it is used). It is an older name for the + same functionality. This variable is deprecated; we suggest using + ‘AM_CPPFLAGS’ and per-target ‘_CPPFLAGS’ instead. + +‘AM_CFLAGS’ + This is the variable the ‘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) ‘_CFLAGS’. + +‘COMPILE’ + This is the command used to actually compile a C source file. The + file name is appended to form the complete command line. + +‘AM_LDFLAGS’ + This is the variable the ‘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) ‘_LDFLAGS’. + +‘LINK’ + This is the command used to actually link a C program. It already + includes ‘-o $@’ and the usual variable references (for instance, + ‘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 ‘_LINK’ variable or + per-target flags cause Automake to define such a ‘_LINK’ variable. + + +File: automake.info, Node: Yacc and Lex, Next: C++ Support, Prev: Program Variables, Up: Programs + +8.8 Yacc and Lex support +======================== + +Automake has somewhat idiosyncratic support for Yacc and Lex. + + Automake assumes that the ‘.c’ file generated by ‘yacc’ (or ‘lex’) +should be named using the basename of the input file. That is, for a +yacc source file ‘foo.y’, Automake will cause the intermediate file to +be named ‘foo.c’ (as opposed to ‘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 ‘-d’ Yacc option is used; see +below for more information about this flag, and how to specify it. +Files with the extension ‘.y’ will thus be turned into ‘.c’ sources and +‘.h’ headers; likewise, ‘.yy’ will become ‘.cc’ and ‘.hh’, ‘.y++’ will +become ‘c++’ and ‘h++’, ‘.yxx’ will become ‘.cxx’ and ‘.hxx’, and ‘.ypp’ +will become ‘.cpp’ and ‘.hpp’. + + Similarly, lex source files can be used to generate C or C++; the +extensions ‘.l’, ‘.ll’, ‘.l++’, ‘.lxx’, and ‘.lpp’ are recognized. + + You should never explicitly mention the intermediate (C or C++) file +in any ‘SOURCES’ variable; only list the source file. + + The intermediate files generated by ‘yacc’ (or ‘lex’) will be +included in any distribution that is made. That way the user doesn’t +need to have ‘yacc’ or ‘lex’. + + If a ‘yacc’ source file is seen, then your ‘configure.ac’ must define +the variable ‘YACC’. This is most easily done by invoking the macro +‘AC_PROG_YACC’ (*note Particular Program Checks: (autoconf)Particular +Programs.). + + When ‘yacc’ is invoked, it is passed ‘AM_YFLAGS’ and ‘YFLAGS’. The +latter is a user variable and the former is intended for the +‘Makefile.am’ author. + + ‘AM_YFLAGS’ is usually used to pass the ‘-d’ option to ‘yacc’. +Automake knows what this means and will automatically adjust its rules +to update and distribute the header file built by ‘yacc -d’(1). 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 ‘BUILT_SOURCES’ (*note Sources::) as follows. + + BUILT_SOURCES = parser.h + AM_YFLAGS = -d + bin_PROGRAMS = foo + foo_SOURCES = ... parser.y ... + + If a ‘lex’ source file is seen, then your ‘configure.ac’ must define +the variable ‘LEX’. You can use ‘AC_PROG_LEX’ to do this (*note +Particular Program Checks: (autoconf)Particular Programs.), but using +‘AM_PROG_LEX’ macro (*note Macros::) is recommended. + + When ‘lex’ is invoked, it is passed ‘AM_LFLAGS’ and ‘LFLAGS’. The +latter is a user variable and the former is intended for the +‘Makefile.am’ author. + + When ‘AM_MAINTAINER_MODE’ (*note maintainer-mode::) is used, the +rebuild rule for distributed Yacc and Lex sources are only used when +‘maintainer-mode’ is enabled, or when the files have been erased. + + When ‘lex’ or ‘yacc’ sources are used, ‘automake -a’ automatically +installs an auxiliary program called ‘ylwrap’ in your package (*note +Auxiliary Programs::). This program is used by the build rules to +rename the output of these tools, and makes it possible to include +multiple ‘yacc’ (or ‘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 ‘yacc’ +simultaneously.) + + For ‘yacc’, simply managing locking is insufficient. The output of +‘yacc’ always uses the same symbol names internally, so it isn’t +possible to link two ‘yacc’ parsers into the same executable. + + We recommend using the following renaming hack used in ‘gdb’: + #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 + + For each define, replace the ‘c_’ prefix with whatever you like. +These defines work for ‘bison’, ‘byacc’, and traditional ‘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. + + ---------- Footnotes ---------- + + (1) Please note that ‘automake’ recognizes ‘-d’ in ‘AM_YFLAGS’ only +if it is not clustered with other options; for example, it won’t be +recognized if ‘AM_YFLAGS’ is ‘-dt’, but it will be if ‘AM_YFLAGS’ is ‘-d +-t’ or ‘-t -d’. + + +File: automake.info, Node: C++ Support, Next: Objective C Support, Prev: Yacc and Lex, Up: Programs + +8.9 C++ Support +=============== + +Automake includes full support for C++. + + Any package including C++ code must define the output variable ‘CXX’ +in ‘configure.ac’; the simplest way to do this is to use the +‘AC_PROG_CXX’ macro (*note Particular Program Checks: +(autoconf)Particular Programs.). + + A few additional variables are defined when a C++ source file is +seen: + +‘CXX’ + The name of the C++ compiler. + +‘CXXFLAGS’ + Any flags to pass to the C++ compiler. + +‘AM_CXXFLAGS’ + The maintainer’s variant of ‘CXXFLAGS’. + +‘CXXCOMPILE’ + The command used to actually compile a C++ source file. The file + name is appended to form the complete command line. + +‘CXXLINK’ + The command used to actually link a C++ program. + + +File: automake.info, Node: Objective C Support, Next: Objective C++ Support, Prev: C++ Support, Up: Programs + +8.10 Objective C Support +======================== + +Automake includes some support for Objective C. + + Any package including Objective C code must define the output +variable ‘OBJC’ in ‘configure.ac’; the simplest way to do this is to use +the ‘AC_PROG_OBJC’ macro (*note Particular Program Checks: +(autoconf)Particular Programs.). + + A few additional variables are defined when an Objective C source +file is seen: + +‘OBJC’ + The name of the Objective C compiler. + +‘OBJCFLAGS’ + Any flags to pass to the Objective C compiler. + +‘AM_OBJCFLAGS’ + The maintainer’s variant of ‘OBJCFLAGS’. + +‘OBJCCOMPILE’ + The command used to actually compile an Objective C source file. + The file name is appended to form the complete command line. + +‘OBJCLINK’ + The command used to actually link an Objective C program. + + +File: automake.info, Node: Objective C++ Support, Next: Unified Parallel C Support, Prev: Objective C Support, Up: Programs + +8.11 Objective C++ Support +========================== + +Automake includes some support for Objective C++. + + Any package including Objective C++ code must define the output +variable ‘OBJCXX’ in ‘configure.ac’; the simplest way to do this is to +use the ‘AC_PROG_OBJCXX’ macro (*note Particular Program Checks: +(autoconf)Particular Programs.). + + A few additional variables are defined when an Objective C++ source +file is seen: + +‘OBJCXX’ + The name of the Objective C++ compiler. + +‘OBJCXXFLAGS’ + Any flags to pass to the Objective C++ compiler. + +‘AM_OBJCXXFLAGS’ + The maintainer’s variant of ‘OBJCXXFLAGS’. + +‘OBJCXXCOMPILE’ + The command used to actually compile an Objective C++ source file. + The file name is appended to form the complete command line. + +‘OBJCXXLINK’ + The command used to actually link an Objective C++ program. + + +File: automake.info, Node: Unified Parallel C Support, Next: Assembly Support, Prev: Objective C++ Support, Up: Programs + +8.12 Unified Parallel C Support +=============================== + +Automake includes some support for Unified Parallel C. + + Any package including Unified Parallel C code must define the output +variable ‘UPC’ in ‘configure.ac’; the simplest way to do this is to use +the ‘AM_PROG_UPC’ macro (*note Public Macros::). + + A few additional variables are defined when a Unified Parallel C +source file is seen: + +‘UPC’ + The name of the Unified Parallel C compiler. + +‘UPCFLAGS’ + Any flags to pass to the Unified Parallel C compiler. + +‘AM_UPCFLAGS’ + The maintainer’s variant of ‘UPCFLAGS’. + +‘UPCCOMPILE’ + The command used to actually compile a Unified Parallel C source + file. The file name is appended to form the complete command line. + +‘UPCLINK’ + The command used to actually link a Unified Parallel C program. + + +File: automake.info, Node: Assembly Support, Next: Fortran 77 Support, Prev: Unified Parallel C Support, Up: Programs + +8.13 Assembly Support +===================== + +Automake includes some support for assembly code. There are two forms +of assembler files: normal (‘*.s’) and preprocessed by ‘CPP’ (‘*.S’ or +‘*.sx’). + + The variable ‘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 ‘-c’ and ‘-o’. The values of ‘CCASFLAGS’ and +‘AM_CCASFLAGS’ (or its per-target definition) is passed to the +compilation. For preprocessed files, ‘DEFS’, ‘DEFAULT_INCLUDES’, +‘INCLUDES’, ‘CPPFLAGS’ and ‘AM_CPPFLAGS’ are also used. + + The autoconf macro ‘AM_PROG_AS’ will define ‘CCAS’ and ‘CCASFLAGS’ +for you (unless they are already set, it simply sets ‘CCAS’ to the C +compiler and ‘CCASFLAGS’ to the C compiler flags), but you are free to +define these variables by other means. + + Only the suffixes ‘.s’, ‘.S’, and ‘.sx’ are recognized by ‘automake’ +as being files containing assembly code. + + +File: automake.info, Node: Fortran 77 Support, Next: Fortran 9x Support, Prev: Assembly Support, Up: Programs + +8.14 Fortran 77 Support +======================= + +Automake includes full support for Fortran 77. + + Any package including Fortran 77 code must define the output variable +‘F77’ in ‘configure.ac’; the simplest way to do this is to use the +‘AC_PROG_F77’ macro (*note Particular Program Checks: +(autoconf)Particular Programs.). + + A few additional variables are defined when a Fortran 77 source file +is seen: + +‘F77’ + The name of the Fortran 77 compiler. + +‘FFLAGS’ + Any flags to pass to the Fortran 77 compiler. + +‘AM_FFLAGS’ + The maintainer’s variant of ‘FFLAGS’. + +‘RFLAGS’ + Any flags to pass to the Ratfor compiler. + +‘AM_RFLAGS’ + The maintainer’s variant of ‘RFLAGS’. + +‘F77COMPILE’ + The command used to actually compile a Fortran 77 source file. The + file name is appended to form the complete command line. + +‘FLINK’ + The command used to actually link a pure Fortran 77 program or + shared library. + + Automake can handle preprocessing Fortran 77 and Ratfor source files +in addition to compiling them(1). Automake also contains some support +for creating programs and shared libraries that are a mixture of Fortran +77 and other languages (*note 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++ + + ---------- Footnotes ---------- + + (1) Much, if not most, of the information in the following sections +pertaining to preprocessing Fortran 77 programs was taken almost +verbatim from *note Catalogue of Rules: (make)Catalogue of Rules. + + +File: automake.info, Node: Preprocessing Fortran 77, Next: Compiling Fortran 77 Files, Up: Fortran 77 Support + +8.14.1 Preprocessing Fortran 77 +------------------------------- + +‘N.f’ is made automatically from ‘N.F’ or ‘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: + +‘.F’ + ‘$(F77) -F $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) + $(AM_FFLAGS) $(FFLAGS)’ + +‘.r’ + ‘$(F77) -F $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS)’ + + +File: automake.info, Node: Compiling Fortran 77 Files, Next: Mixing Fortran 77 With C and C++, Prev: Preprocessing Fortran 77, Up: Fortran 77 Support + +8.14.2 Compiling Fortran 77 Files +--------------------------------- + +‘N.o’ is made automatically from ‘N.f’, ‘N.F’ or ‘N.r’ by running the +Fortran 77 compiler. The precise command used is as follows: + +‘.f’ + ‘$(F77) -c $(AM_FFLAGS) $(FFLAGS)’ + +‘.F’ + ‘$(F77) -c $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) + $(AM_FFLAGS) $(FFLAGS)’ + +‘.r’ + ‘$(F77) -c $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS)’ + + +File: automake.info, Node: Mixing Fortran 77 With C and C++, Prev: Compiling Fortran 77 Files, Up: Fortran 77 Support + +8.14.3 Mixing Fortran 77 With C and C++ +--------------------------------------- + +Automake currently provides _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 _not_ (currently) handled by Automake, but that +are handled by other packages(1). + + Automake can help in two ways: + + 1. Automatic selection of the linker depending on which combinations + of source code. + + 2. Automatic selection of the appropriate linker flags (e.g., ‘-L’ and + ‘-l’) to pass to the automatically selected linker in order to link + in the appropriate Fortran 77 intrinsic and run-time libraries. + + These extra Fortran 77 linker flags are supplied in the output + variable ‘FLIBS’ by the ‘AC_F77_LIBRARY_LDFLAGS’ Autoconf macro. + *Note Fortran Compiler Characteristics: (autoconf)Fortran Compiler. + + If Automake detects that a program or shared library (as mentioned in +some ‘_PROGRAMS’ or ‘_LTLIBRARIES’ primary) contains source code that is +a mixture of Fortran 77 and C and/or C++, then it requires that the +macro ‘AC_F77_LIBRARY_LDFLAGS’ be called in ‘configure.ac’, and that +either ‘$(FLIBS)’ appear in the appropriate ‘_LDADD’ (for programs) or +‘_LIBADD’ (for shared libraries) variables. It is the responsibility of +the person writing the ‘Makefile.am’ to make sure that ‘$(FLIBS)’ +appears in the appropriate ‘_LDADD’ or ‘_LIBADD’ variable. + + For example, consider the following ‘Makefile.am’: + + 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) + + In this case, Automake will insist that ‘AC_F77_LIBRARY_LDFLAGS’ is +mentioned in ‘configure.ac’. Also, if ‘$(FLIBS)’ hadn’t been mentioned +in ‘foo_LDADD’ and ‘libfoo_la_LIBADD’, then Automake would have issued a +warning. + +* Menu: + +* How the Linker is Chosen:: Automatic linker selection + + ---------- Footnotes ---------- + + (1) For example, the cfortran package +(http://www-zeus.desy.de/~burow/cfortran/) addresses all of these +inter-language issues, and runs under nearly all Fortran 77, C and C++ +compilers on nearly all platforms. However, ‘cfortran’ is not yet Free +Software, but it will be in the next major release. + + +File: automake.info, Node: How the Linker is Chosen, Up: Mixing Fortran 77 With C and C++ + +8.14.3.1 How the Linker is Chosen +................................. + +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.) + + 1. Native Java (‘GCJLINK’) + 2. Objective C++ (‘OBJCXXLINK’) + 3. C++ (‘CXXLINK’) + 4. Fortran 77 (‘F77LINK’) + 5. Fortran (‘FCLINK’) + 6. Objective C (‘OBJCLINK’) + 7. Unified Parallel C (‘UPCLINK’) + 8. C (‘LINK’) + + 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 ‘_LDADD’ or +‘_LIBADD’ variable by the user writing the ‘Makefile.am’. + + Automake only looks at the file names listed in ‘_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. +*Note Libtool Convenience Libraries::, for a trick with +‘nodist_EXTRA_..._SOURCES’. + + A per-target ‘_LINK’ variable will override the above selection. +Per-target link flags will cause Automake to write a per-target ‘_LINK’ +variable according to the language chosen as above. + + +File: automake.info, Node: Fortran 9x Support, Next: Java Support with gcj, Prev: Fortran 77 Support, Up: Programs + +8.15 Fortran 9x Support +======================= + +Automake includes support for Fortran 9x. + + Any package including Fortran 9x code must define the output variable +‘FC’ in ‘configure.ac’; the simplest way to do this is to use the +‘AC_PROG_FC’ macro (*note Particular Program Checks: +(autoconf)Particular Programs.). + + A few additional variables are defined when a Fortran 9x source file +is seen: + +‘FC’ + The name of the Fortran 9x compiler. + +‘FCFLAGS’ + Any flags to pass to the Fortran 9x compiler. + +‘AM_FCFLAGS’ + The maintainer’s variant of ‘FCFLAGS’. + +‘FCCOMPILE’ + The command used to actually compile a Fortran 9x source file. The + file name is appended to form the complete command line. + +‘FCLINK’ + The command used to actually link a pure Fortran 9x program or + shared library. + +* Menu: + +* Compiling Fortran 9x Files:: Compiling Fortran 9x sources + + +File: automake.info, Node: Compiling Fortran 9x Files, Up: Fortran 9x Support + +8.15.1 Compiling Fortran 9x Files +--------------------------------- + +‘FILE.o’ is made automatically from ‘FILE.f90’, ‘FILE.f95’, ‘FILE.f03’, +or ‘FILE.f08’ by running the Fortran 9x compiler. The precise command +used is as follows: + +‘.f90’ + ‘$(FC) $(AM_FCFLAGS) $(FCFLAGS) -c $(FCFLAGS_f90) $<’ + +‘.f95’ + ‘$(FC) $(AM_FCFLAGS) $(FCFLAGS) -c $(FCFLAGS_f95) $<’ + +‘.f03’ + ‘$(FC) $(AM_FCFLAGS) $(FCFLAGS) -c $(FCFLAGS_f03) $<’ + +‘.f08’ + ‘$(FC) $(AM_FCFLAGS) $(FCFLAGS) -c $(FCFLAGS_f08) $<’ + + +File: automake.info, Node: Java Support with gcj, Next: Vala Support, Prev: Fortran 9x Support, Up: Programs + +8.16 Compiling Java sources using gcj +===================================== + +Automake includes support for natively compiled Java, using ‘gcj’, the +Java front end to the GNU Compiler Collection (rudimentary support for +compiling Java to bytecode using the ‘javac’ compiler is also present, +_albeit deprecated_; *note Java::). + + Any package including Java code to be compiled must define the output +variable ‘GCJ’ in ‘configure.ac’; the variable ‘GCJFLAGS’ must also be +defined somehow (either in ‘configure.ac’ or ‘Makefile.am’). The +simplest way to do this is to use the ‘AM_PROG_GCJ’ macro. + + By default, programs including Java source files are linked with +‘gcj’. + + As always, the contents of ‘AM_GCJFLAGS’ are passed to every +compilation invoking ‘gcj’ (in its role as an ahead-of-time compiler, +when invoking it to create ‘.class’ files, ‘AM_JAVACFLAGS’ is used +instead). If it is necessary to pass options to ‘gcj’ from +‘Makefile.am’, this variable, and not the user variable ‘GCJFLAGS’, +should be used. + + ‘gcj’ can be used to compile ‘.java’, ‘.class’, ‘.zip’, or ‘.jar’ +files. + + When linking, ‘gcj’ requires that the main class be specified using +the ‘--main=’ option. The easiest way to do this is to use the +‘_LDFLAGS’ variable for the program. + + +File: automake.info, Node: Vala Support, Next: Support for Other Languages, Prev: Java Support with gcj, Up: Programs + +8.17 Vala Support +================= + +Automake provides initial support for Vala +(). This requires valac version 0.7.0 or +later, and currently requires the user to use GNU ‘make’. + + foo_SOURCES = foo.vala bar.vala zardoc.c + + Any ‘.vala’ file listed in a ‘_SOURCES’ variable will be compiled +into C code by the Vala compiler. The generated ‘.c’ files are +distributed. The end user does not need to have a Vala compiler +installed. + + Automake ships with an Autoconf macro called ‘AM_PROG_VALAC’ that +will locate the Vala compiler and optionally check its version number. + + -- Macro: AM_PROG_VALAC ([MINIMUM-VERSION], [ACTION-IF-FOUND], + [ACTION-IF-NOT-FOUND]) Search for a Vala compiler in ‘PATH’. If it + is found, the variable ‘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 MINIMUM-VERSION, then ACTION-IF-FOUND is run (this + defaults to do nothing). Otherwise, ACTION-IF-NOT-FOUND is run. + If 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. + + There are a few variables that are used when compiling Vala sources: + +‘VALAC’ + Absolute path to the Vala compiler, or simply ‘valac’ if no + suitable compiler Vala could be found at configure runtime. + +‘VALAFLAGS’ + Additional arguments for the Vala compiler. + +‘AM_VALAFLAGS’ + The maintainer’s variant of ‘VALAFLAGS’. + + lib_LTLIBRARIES = libfoo.la + libfoo_la_SOURCES = foo.vala + + Note that currently, you cannot use per-target ‘*_VALAFLAGS’ (*note +Renamed Objects::) to produce different C files from one Vala source +file. + + +File: automake.info, Node: Support for Other Languages, Next: Dependencies, Prev: Vala Support, Up: Programs + +8.18 Support for Other Languages +================================ + +Automake currently only includes full support for C, C++ (*note C++ +Support::), Objective C (*note Objective C Support::), Objective C++ +(*note Objective C++ Support::), Fortran 77 (*note Fortran 77 +Support::), Fortran 9x (*note Fortran 9x Support::), and Java (*note +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 (*note Suffixes::). + + +File: automake.info, Node: Dependencies, Next: EXEEXT, Prev: Support for Other Languages, Up: Programs + +8.19 Automatic dependency tracking +================================== + +As a developer it is often painful to continually update the +‘Makefile.am’ whenever the include-file dependencies change in a +project. Automake supplies a way to automatically track dependency +changes (*note 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 ‘depcomp’. ‘depcomp’ understands how to coax +many different C and C++ compilers into generating dependency +information in the format it requires. ‘automake -a’ will install +‘depcomp’ into your source tree for you. If ‘depcomp’ can’t figure out +how to properly invoke your compiler, dependency tracking will simply be +disabled for your build. + + Experience with earlier versions of Automake (*note Dependency +Tracking Evolution: (automake-history)Dependency Tracking Evolution.) +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 +‘no-dependencies’ in the variable ‘AUTOMAKE_OPTIONS’, or passing +‘no-dependencies’ as an argument to ‘AM_INIT_AUTOMAKE’ (this should be +the preferred way). Or, you can invoke ‘automake’ with the ‘-i’ option. +Dependency tracking is enabled by default. + + The person building your package also can choose to disable +dependency tracking by configuring with ‘--disable-dependency-tracking’. + + +File: automake.info, Node: EXEEXT, Prev: Dependencies, Up: Programs + +8.20 Support for executable extensions +====================================== + +On some platforms, such as Windows, executables are expected to have an +extension such as ‘.exe’. On these platforms, some compilers (GCC among +them) will automatically generate ‘foo.exe’ when asked to generate +‘foo’. + + Automake provides mostly-transparent support for this. Unfortunately +_mostly_ doesn’t yet mean _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: + + bin_PROGRAMS = liver + + to this: + + bin_PROGRAMS = liver$(EXEEXT) + + The targets Automake generates are likewise given the ‘$(EXEEXT)’ +extension. + + The variables ‘TESTS’ and ‘XFAIL_TESTS’ (*note Simple Tests::) are +also rewritten if they contain filenames that have been declared as +programs in the same ‘Makefile’. (This is mostly useful when some +programs from ‘check_PROGRAMS’ are listed in ‘TESTS’.) + + However, Automake cannot apply this rewriting to ‘configure’ +substitutions. This means that if you are conditionally building a +program using such a substitution, then your ‘configure.ac’ must take +care to add ‘$(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 +‘$(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 ‘no-exeext’ option (*note Options::) will disable this +feature. This works in a fairly ugly way; if ‘no-exeext’ is seen, then +the presence of a rule for a target named ‘foo’ in ‘Makefile.am’ will +override an ‘automake’-generated rule for ‘foo$(EXEEXT)’. Without the +‘no-exeext’ option, this use will give a diagnostic. + + +File: automake.info, Node: Other Objects, Next: Other GNU Tools, Prev: Programs, Up: Top + +9 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 + + +File: automake.info, Node: Scripts, Next: Headers, Up: Other Objects + +9.1 Executable Scripts +====================== + +It is possible to define and install programs that are scripts. Such +programs are listed using the ‘SCRIPTS’ primary name. When the script +is distributed in its final, installable form, the ‘Makefile’ usually +looks as follows: + + # Install my_script in $(bindir) and distribute it. + dist_bin_SCRIPTS = my_script + + Scripts are not distributed by default; as we have just seen, those +that should be distributed can be specified using a ‘dist_’ prefix as +with other primaries. + + Scripts can be installed in ‘bindir’, ‘sbindir’, ‘libexecdir’, +‘pkglibexecdir’, or ‘pkgdatadir’. + + Scripts that need not be installed can be listed in ‘noinst_SCRIPTS’, +and among them, those which are needed only by ‘make check’ should go in +‘check_SCRIPTS’. + + When a script needs to be built, the ‘Makefile.am’ should include the +appropriate rules. For instance the ‘automake’ program itself is a Perl +script that is generated from ‘automake.in’. Here is how this is +handled: + + 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' \ + ... + + automake: automake.in Makefile + $(do_subst) < $(srcdir)/automake.in > automake + chmod +x automake + + Such scripts for which a build rule has been supplied need to be +deleted explicitly using ‘CLEANFILES’ (*note Clean::), and their sources +have to be distributed, usually with ‘EXTRA_DIST’ (*note Basics of +Distribution::). + + Another common way to build scripts is to process them from +‘configure’ with ‘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 ‘configure.ac’ contains + + AC_CONFIG_FILES([src/my_script], [chmod +x src/my_script]) + +to build ‘src/my_script’ from ‘src/my_script.in’, then a +‘src/Makefile.am’ to install this script in ‘$(bindir)’ can be as simple +as + + bin_SCRIPTS = my_script + CLEANFILES = $(bin_SCRIPTS) + +There is no need for ‘EXTRA_DIST’ or any build rule: Automake infers +them from ‘AC_CONFIG_FILES’ (*note Requirements::). ‘CLEANFILES’ is +still useful, because by default Automake will clean targets of +‘AC_CONFIG_FILES’ in ‘distclean’, not ‘clean’. + + Although this looks simpler, building scripts this way has one +drawback: directory variables such as ‘$(datadir)’ are not fully +expanded and may refer to other directory variables. + + +File: automake.info, Node: Headers, Next: Data, Prev: Scripts, Up: Other Objects + +9.2 Header files +================ + +Header files that must be installed are specified by the ‘HEADERS’ +family of variables. Headers can be installed in ‘includedir’, +‘oldincludedir’, ‘pkgincludedir’ or any other directory you may have +defined (*note Uniform::). For instance, + + include_HEADERS = foo.h bar/bar.h + +will install the two files as ‘$(includedir)/foo.h’ and +‘$(includedir)/bar.h’. + + The ‘nobase_’ prefix is also supported, + + nobase_include_HEADERS = foo.h bar/bar.h + +will install the two files as ‘$(includedir)/foo.h’ and +‘$(includedir)/bar/bar.h’ (*note Alternative::). + + Usually, only header files that accompany installed libraries need to +be installed. Headers used by programs or convenience libraries are not +installed. The ‘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 +‘_SOURCES’ variable (*note Program Sources::) instead of in +‘noinst_HEADERS’. This is clearer for the ‘Makefile.am’ reader. +‘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 ‘_SOURCES’ variable +or in a ‘_HEADERS’ variable. Missing ones will not appear in the +distribution. + + For header files that are built and must not be distributed, use the +‘nodist_’ prefix as in ‘nodist_include_HEADERS’ or +‘nodist_prog_SOURCES’. If these generated headers are needed during the +build, you must also ensure they exist before they are used (*note +Sources::). + + +File: automake.info, Node: Data, Next: Sources, Prev: Headers, Up: Other Objects + +9.3 Architecture-independent data files +======================================= + +Automake supports the installation of miscellaneous data files using the +‘DATA’ family of variables. + + Such data can be installed in the directories ‘datadir’, +‘sysconfdir’, ‘sharedstatedir’, ‘localstatedir’, or ‘pkgdatadir’. + + By default, data files are _not_ included in a distribution. Of +course, you can use the ‘dist_’ prefix to change this on a per-variable +basis. + + Here is how Automake declares its auxiliary data files: + + dist_pkgdata_DATA = clean-kr.am clean.am ... + + +File: automake.info, Node: Sources, Prev: Data, Up: Other Objects + +9.4 Built Sources +================= + +Because Automake’s automatic dependency tracking works as a side-effect +of compilation (*note 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 ‘foo.c’ includes ‘foo.h’. When it first compiles ‘foo.o’, ‘make’ +only knows that ‘foo.o’ depends on ‘foo.c’. As a side-effect of this +compilation ‘depcomp’ records the ‘foo.h’ dependency so that following +invocations of ‘make’ will honor it. In these conditions, it’s clear +there is no problem: either ‘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 ‘foo.o’ should be rebuilt. + + It’s a different story if ‘foo.h’ doesn’t exist by the first ‘make’ +run. For instance, there might be a rule to build ‘foo.h’. This time +‘file.o’’s build will fail because the compiler can’t find ‘foo.h’. +‘make’ failed to trigger the rule to build ‘foo.h’ first by lack of +dependency information. + + The ‘BUILT_SOURCES’ variable is a workaround for this problem. A +source file listed in ‘BUILT_SOURCES’ is made on ‘make all’ or ‘make +check’ (or even ‘make install’) before other targets are processed. +However, such a source file is not _compiled_ unless explicitly +requested by mentioning it in some other ‘_SOURCES’ variable. + + So, to conclude our introductory example, we could use ‘BUILT_SOURCES += foo.h’ to ensure ‘foo.h’ gets built before any other target (including +‘foo.o’) during ‘make all’ or ‘make check’. + + ‘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 ‘BUILT_SOURCES’. For instance, a generated ‘.c’ file doesn’t +need to appear in ‘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 ‘BUILT_SOURCES’ is honored +only by ‘make all’, ‘make check’ and ‘make install’. This means you +cannot build a specific target (e.g., ‘make foo’) in a clean tree if it +depends on a built source. However it will succeed if you have run +‘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. + + +File: automake.info, Node: Built Sources Example, Up: Sources + +9.4.1 Built Sources Example +--------------------------- + +Suppose that ‘foo.c’ includes ‘bindir.h’, which is +installation-dependent and not distributed: it needs to be built. Here +‘bindir.h’ defines the preprocessor macro ‘bindir’ to the value of the +‘make’ variable ‘bindir’ (inherited from ‘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. + +First Try +......... + +This first implementation will illustrate the bootstrap issue mentioned +in the previous section (*note Sources::). + + Here is a tentative ‘Makefile.am’. + + # 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)"' >$@ + + This setup doesn’t work, because Automake doesn’t know that ‘foo.c’ +includes ‘bindir.h’. Remember, automatic dependency tracking works as a +side-effect of compilation, so the dependencies of ‘foo.o’ will be known +only after ‘foo.o’ has been compiled (*note Dependencies::). The +symptom is as follows. + + % 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 + + In this example ‘bindir.h’ is not distributed nor installed, and it +is not even being built on-time. One may wonder if the +‘nodist_foo_SOURCES = bindir.h’ line has any use at all. This line +simply states that ‘bindir.h’ is a source of ‘foo’, so for instance, it +should be inspected while generating tags (*note Tags::). In other +words, it does not help our present problem, and the build would fail +identically without it. + +Using ‘BUILT_SOURCES’ +..................... + +A solution is to require ‘bindir.h’ to be built before anything else. +This is what ‘BUILT_SOURCES’ is meant for (*note Sources::). + + 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)"' >$@ + + See how ‘bindir.h’ gets built first: + + % 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' + + However, as said earlier, ‘BUILT_SOURCES’ applies only to the ‘all’, +‘check’, and ‘install’ targets. It still fails if you try to run ‘make +foo’ explicitly: + + % 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 + +Recording Dependencies manually +............................... + +Usually people are happy enough with ‘BUILT_SOURCES’ because they never +build targets such as ‘make foo’ before ‘make all’, as in the previous +example. However if this matters to you, you can avoid ‘BUILT_SOURCES’ +and record such dependencies explicitly in the ‘Makefile.am’. + + 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)"' >$@ + + You don’t have to list _all_ the dependencies of ‘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 ‘foo.o’ and ‘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). +‘foo.$(OBJEXT): bindir.h’ supersedes any rule Automake may want to +output to build ‘foo.$(OBJEXT)’. It happens to work in this case +because Automake doesn’t have to output any ‘foo.$(OBJEXT):’ target: it +relies on a suffix rule instead (i.e., ‘.c.$(OBJEXT):’). Always check +the generated ‘Makefile.in’ if you do this. + +Build ‘bindir.h’ from ‘configure’ +................................. + +It’s possible to define this preprocessor macro from ‘configure’, either +in ‘config.h’ (*note Defining Directories: (autoconf)Defining +Directories.), or by processing a ‘bindir.h.in’ file using +‘AC_CONFIG_FILES’ (*note Configuration Actions: (autoconf)Configuration +Actions.). + + At this point it should be clear that building ‘bindir.h’ from +‘configure’ works well for this example. ‘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 ‘bindir.h’. + + bin_PROGRAMS = foo + foo_SOURCES = foo.c + + However, it’s not always possible to build sources from ‘configure’, +especially when these sources are generated by a tool that needs to be +built first. + +Build ‘bindir.c’, not ‘bindir.h’. +................................. + +Another attractive idea is to define ‘bindir’ as a variable or function +exported from ‘bindir.o’, and build ‘bindir.c’ instead of ‘bindir.h’. + + 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)";' >$@ + + ‘bindir.h’ contains just the variable’s declaration and doesn’t need +to be built, so it won’t cause any trouble. ‘bindir.o’ is always +dependent on ‘bindir.c’, so ‘bindir.c’ will get built first. + +Which is best? +.............. + +There is no panacea, of course. Each solution has its merits and +drawbacks. + + You cannot use ‘BUILT_SOURCES’ if the ability to run ‘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 ‘./configure’ is not always possible, neither is +converting ‘.h’ files into ‘.c’ files. + + +File: automake.info, Node: Other GNU Tools, Next: Documentation, Prev: Other Objects, Up: Top + +10 Other GNU Tools +****************** + +Since Automake is primarily intended to generate ‘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 + + +File: automake.info, Node: Emacs Lisp, Next: gettext, Up: Other GNU Tools + +10.1 Emacs Lisp +=============== + +Automake provides some support for Emacs Lisp. The ‘LISP’ primary is +used to hold a list of ‘.el’ files. Possible prefixes for this primary +are ‘lisp_’ and ‘noinst_’. Note that if ‘lisp_LISP’ is defined, then +‘configure.ac’ must run ‘AM_PATH_LISPDIR’ (*note Macros::). + + Lisp sources are not distributed by default. You can prefix the +‘LISP’ primary with ‘dist_’, as in ‘dist_lisp_LISP’ or +‘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 ‘AM_PATH_LISPDIR’, if any was found. When performing +such byte-compilation, the flags specified in the (developer-reserved) +‘AM_ELCFLAGS’ and (user-reserved) ‘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. + + lisp_LISP = file1.el file2.el + ELCFILES = + +‘ELCFILES’ is an internal Automake variable that normally lists all +‘.elc’ files that must be byte-compiled. Automake defines ‘ELCFILES’ +automatically from ‘lisp_LISP’. Emptying this variable explicitly +prevents byte-compilation. + + Since Automake 1.8, we now recommend using ‘lisp_DATA’ instead: + + lisp_DATA = file1.el file2.el + + Note that these two constructs are not equivalent. ‘_LISP’ will not +install a file if Emacs is not installed, while ‘_DATA’ will always +install its files. + + +File: automake.info, Node: gettext, Next: Libtool, Prev: Emacs Lisp, Up: Other GNU Tools + +10.2 Gettext +============ + +If ‘AM_GNU_GETTEXT’ is seen in ‘configure.ac’, then Automake turns on +support for GNU gettext, a message catalog system for +internationalization (*note Introduction: (gettext)Top.). + + The ‘gettext’ support in Automake requires the addition of one or two +subdirectories to the package: ‘po’ and possibly also ‘intl’. The +latter is needed if ‘AM_GNU_GETTEXT’ is not invoked with the ‘external’ +argument, or if ‘AM_GNU_GETTEXT_INTL_SUBDIR’ is used. Automake ensures +that these directories exist and are mentioned in ‘SUBDIRS’. + + +File: automake.info, Node: Libtool, Next: Java, Prev: gettext, Up: Other GNU Tools + +10.3 Libtool +============ + +Automake provides support for GNU Libtool (*note Introduction: +(libtool)Top.) with the ‘LTLIBRARIES’ primary. *Note A Shared +Library::. + + +File: automake.info, Node: Java, Next: Python, Prev: Libtool, Up: Other GNU Tools + +10.4 Java bytecode compilation (deprecated) +=========================================== + +Automake provides some minimal support for Java bytecode compilation +with the ‘JAVA’ primary (in addition to the support for compiling Java +to native machine code; *note Java Support with gcj::). Note however +that _the interface and most features described here are deprecated_. +Future Automake releases will strive to provide a better and cleaner +interface, which however _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 ‘JAVA’ primary features are frozen and will no longer +be developed, not even to take bug fixes. + + Any ‘.java’ files listed in a ‘_JAVA’ variable will be compiled with +‘JAVAC’ at build time. By default, ‘.java’ files are not included in +the distribution, you should use the ‘dist_’ prefix to distribute them. + + Here is a typical setup for distributing ‘.java’ files and installing +the ‘.class’ files resulting from their compilation. + + javadir = $(datadir)/java + dist_java_JAVA = a.java b.java ... + + Currently Automake enforces the restriction that only one ‘_JAVA’ +primary can be used in a given ‘Makefile.am’. The reason for this +restriction is that, in general, it isn’t possible to know which +‘.class’ files were generated from which ‘.java’ files, so it would be +impossible to know which files to install where. For instance, a +‘.java’ file can define multiple classes; the resulting ‘.class’ file +names cannot be predicted without parsing the ‘.java’ file. + + There are a few variables that are used when compiling Java sources: + +‘JAVAC’ + The name of the Java compiler. This defaults to ‘javac’. + +‘JAVACFLAGS’ + The flags to pass to the compiler. This is considered to be a user + variable (*note User Variables::). + +‘AM_JAVACFLAGS’ + More flags to pass to the Java compiler. This, and not + ‘JAVACFLAGS’, should be used when it is necessary to put Java + compiler flags into ‘Makefile.am’. + +‘JAVAROOT’ + The value of this variable is passed to the ‘-d’ option to ‘javac’. + It defaults to ‘$(top_builddir)’. + +‘CLASSPATH_ENV’ + This variable is a shell expression that is used to set the + ‘CLASSPATH’ environment variable on the ‘javac’ command line. (In + the future we will probably handle class path setting differently.) + + +File: automake.info, Node: Python, Prev: Java, Up: Other GNU Tools + +10.5 Python +=========== + +Automake provides support for Python compilation with the ‘PYTHON’ +primary. A typical setup is to call ‘AM_PATH_PYTHON’ in ‘configure.ac’ +and use a line like the following in ‘Makefile.am’: + + python_PYTHON = tree.py leave.py + + Any files listed in a ‘_PYTHON’ variable will be byte-compiled with +‘py-compile’ at install time. ‘py-compile’ actually creates both +standard (‘.pyc’) and optimized (‘.pyo’) byte-compiled versions of the +source files. Note that because byte-compilation occurs at install +time, any files listed in ‘noinst_PYTHON’ will not be compiled. Python +source files are included in the distribution by default, prepend +‘nodist_’ (as in ‘nodist_python_PYTHON’) to omit them. + + Automake ships with an Autoconf macro called ‘AM_PATH_PYTHON’ that +will determine some Python-related directory variables (see below). If +you have called ‘AM_PATH_PYTHON’ from ‘configure.ac’, then you may use +the variables ‘python_PYTHON’ or ‘pkgpython_PYTHON’ to list Python +source files in your ‘Makefile.am’, depending on where you want your +files installed (see the definitions of ‘pythondir’ and ‘pkgpythondir’ +below). + + -- Macro: AM_PATH_PYTHON ([VERSION], [ACTION-IF-FOUND], + [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: + ‘AM_PATH_PYTHON’ will skip any Python interpreter that is older + than VERSION. If an interpreter is found and satisfies VERSION, + then ACTION-IF-FOUND is run. Otherwise, ACTION-IF-NOT-FOUND is + run. + + If ACTION-IF-NOT-FOUND is not specified, as in the following + example, the default is to abort ‘configure’. + + AM_PATH_PYTHON([2.2]) + + This is fine when Python is an absolute requirement for the + package. If Python >= 2.5 was only _optional_ to the package, + ‘AM_PATH_PYTHON’ could be called as follows. + + AM_PATH_PYTHON([2.5],, [:]) + + If the ‘PYTHON’ variable is set when ‘AM_PATH_PYTHON’ is called, + then that will be the only Python interpreter that is tried. + + ‘AM_PATH_PYTHON’ creates the following output variables based on + the Python installation found during configuration. + +‘PYTHON’ + The name of the Python executable, or ‘:’ if no suitable + interpreter could be found. + + Assuming ACTION-IF-NOT-FOUND is used (otherwise ‘./configure’ will + abort if Python is absent), the value of ‘PYTHON’ can be used to + setup a conditional in order to disable the relevant part of a + build as follows. + + AM_PATH_PYTHON(,, [:]) + AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :]) + +‘PYTHON_VERSION’ + The Python version number, in the form MAJOR.MINOR (e.g., ‘2.5’). + This is currently the value of ‘sys.version[:3]’. + +‘PYTHON_PREFIX’ + The string ‘${prefix}’. This term may be used in future work that + needs the contents of Python’s ‘sys.prefix’, but general consensus + is to always use the value from ‘configure’. + +‘PYTHON_EXEC_PREFIX’ + The string ‘${exec_prefix}’. This term may be used in future work + that needs the contents of Python’s ‘sys.exec_prefix’, but general + consensus is to always use the value from ‘configure’. + +‘PYTHON_PLATFORM’ + The canonical name used by Python to describe the operating system, + as given by ‘sys.platform’. This value is sometimes needed when + building Python extensions. + +‘pythondir’ + The directory name for the ‘site-packages’ subdirectory of the + standard Python install tree. + +‘pkgpythondir’ + This is the directory under ‘pythondir’ that is named after the + package. That is, it is ‘$(pythondir)/$(PACKAGE)’. It is provided + as a convenience. + +‘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: + + pyexec_LTLIBRARIES = quaternion.la + quaternion_la_SOURCES = quaternion.c support.c support.h + quaternion_la_LDFLAGS = -avoid-version -module + +‘pkgpyexecdir’ + This is a convenience variable that is defined as + ‘$(pyexecdir)/$(PACKAGE)’. + + All of these directory variables have values that start with either +‘${prefix}’ or ‘${exec_prefix}’ unexpanded. This works fine in +‘Makefiles’, but it makes these variables hard to use in ‘configure’. +This is mandated by the GNU coding standards, so that the user can run +‘make prefix=/foo install’. The Autoconf manual has a section with more +details on this topic (*note Installation Directory Variables: +(autoconf)Installation Directory Variables.). See also *note Hard-Coded +Install Paths::. + + +File: automake.info, Node: Documentation, Next: Install, Prev: Other GNU Tools, Up: Top + +11 Building documentation +************************* + +Currently Automake provides support for Texinfo and man pages. + +* Menu: + +* Texinfo:: Texinfo +* Man Pages:: Man pages + + +File: automake.info, Node: Texinfo, Next: Man Pages, Up: Documentation + +11.1 Texinfo +============ + +If the current directory contains Texinfo source, you must declare it +with the ‘TEXINFOS’ primary. Generally Texinfo files are converted into +info, and thus the ‘info_TEXINFOS’ variable is most commonly used here. +Any Texinfo source file should have the ‘.texi’ extension. Automake +also accepts ‘.txi’ or ‘.texinfo’ extensions, but their use is +discouraged now, and will elicit runtime warnings. + + Automake generates rules to build ‘.info’, ‘.dvi’, ‘.ps’, ‘.pdf’ and +‘.html’ files from your Texinfo sources. Following the GNU Coding +Standards, only the ‘.info’ files are built by ‘make all’ and installed +by ‘make install’ (unless you use ‘no-installinfo’, see below). +Furthermore, ‘.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 ‘.info’ files are by default placed in ‘srcdir’ +rather than in the ‘builddir’. This can be changed with the +‘info-in-builddir’ option. + + Other documentation formats can be built on request by ‘make dvi’, +‘make ps’, ‘make pdf’ and ‘make html’, and they can be installed with +‘make install-dvi’, ‘make install-ps’, ‘make install-pdf’ and ‘make +install-html’ explicitly. ‘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 ‘-local’ rules (*note +Extending::). + + If the ‘.texi’ file ‘@include’s ‘version.texi’, then that file will +be automatically generated. The file ‘version.texi’ defines four +Texinfo flags you can reference using ‘@value{EDITION}’, +‘@value{VERSION}’, ‘@value{UPDATED}’, and ‘@value{UPDATED-MONTH}’. + +‘EDITION’ +‘VERSION’ + Both of these flags hold the version number of your program. They + are kept separate for clarity. + +‘UPDATED’ + This holds the date the primary ‘.texi’ file was last modified. + +‘UPDATED-MONTH’ + This holds the name of the month in which the primary ‘.texi’ file + was last modified. + + The ‘version.texi’ support requires the ‘mdate-sh’ script; this +script is supplied with Automake and automatically included when +‘automake’ is invoked with the ‘--add-missing’ option. + + If you have multiple Texinfo files, and you want to use the +‘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 ‘vers*.texi’ just as an automatically generated +version file. + + Sometimes an info file actually depends on more than one ‘.texi’ +file. For instance, in GNU Hello, ‘hello.texi’ includes the file +‘fdl.texi’. You can tell Automake about these dependencies using the +‘TEXI_TEXINFOS’ variable. Here is how GNU Hello does it: + + info_TEXINFOS = hello.texi + hello_TEXINFOS = fdl.texi + + By default, Automake requires the file ‘texinfo.tex’ to appear in the +same directory as the ‘Makefile.am’ file that lists the ‘.texi’ files. +If you used ‘AC_CONFIG_AUX_DIR’ in ‘configure.ac’ (*note Finding +‘configure’ Input: (autoconf)Input.), then ‘texinfo.tex’ is looked for +there. In both cases, ‘automake’ then supplies ‘texinfo.tex’ if +‘--add-missing’ is given, and takes care of its distribution. However, +if you set the ‘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 ‘no-texinfo.tex’ can be used to eliminate the requirement +for the file ‘texinfo.tex’. Use of the variable ‘TEXINFO_TEX’ is +preferable, however, because that allows the ‘dvi’, ‘ps’, and ‘pdf’ +targets to still work. + + Automake generates an ‘install-info’ rule; some people apparently use +this. By default, info pages are installed by ‘make install’, so +running ‘make install-info’ is pointless. This can be prevented via the +‘no-installinfo’ option. In this case, ‘.info’ files are not installed +by default, and user must request this explicitly using ‘make +install-info’. + + By default, ‘make install-info’ and ‘make uninstall-info’ will try to +run the ‘install-info’ program (if available) to update (or +create/remove) the ‘${infodir}/dir’ index. If this is undesired, it can +be prevented by exporting the ‘AM_UPDATE_INFO_DIR’ variable to "‘no’". + + The following variables are used by the Texinfo build rules. + +‘MAKEINFO’ + The name of the program invoked to build ‘.info’ files. This + variable is defined by Automake. If the ‘makeinfo’ program is + found on the system then it will be used by default; otherwise + ‘missing’ will be used instead. + +‘MAKEINFOHTML’ + The command invoked to build ‘.html’ files. Automake defines this + to ‘$(MAKEINFO) --html’. + +‘MAKEINFOFLAGS’ + User flags passed to each invocation of ‘$(MAKEINFO)’ and + ‘$(MAKEINFOHTML)’. This user variable (*note User Variables::) is + not expected to be defined in any ‘Makefile’; it can be used by + users to pass extra flags to suit their needs. + +‘AM_MAKEINFOFLAGS’ +‘AM_MAKEINFOHTMLFLAGS’ + Maintainer flags passed to each ‘makeinfo’ invocation. Unlike + ‘MAKEINFOFLAGS’, these variables are meant to be defined by + maintainers in ‘Makefile.am’. ‘$(AM_MAKEINFOFLAGS)’ is passed to + ‘makeinfo’ when building ‘.info’ files; and + ‘$(AM_MAKEINFOHTMLFLAGS)’ is used when building ‘.html’ files. + + For instance, the following setting can be used to obtain one + single ‘.html’ file per manual, without node separators. + AM_MAKEINFOHTMLFLAGS = --no-headers --no-split + + ‘AM_MAKEINFOHTMLFLAGS’ defaults to ‘$(AM_MAKEINFOFLAGS)’. This + means that defining ‘AM_MAKEINFOFLAGS’ without defining + ‘AM_MAKEINFOHTMLFLAGS’ will impact builds of both ‘.info’ and + ‘.html’ files. + +‘TEXI2DVI’ + The name of the command that converts a ‘.texi’ file into a ‘.dvi’ + file. This defaults to ‘texi2dvi’, a script that ships with the + Texinfo package. + +‘TEXI2PDF’ + The name of the command that translates a ‘.texi’ file into a + ‘.pdf’ file. This defaults to ‘$(TEXI2DVI) --pdf --batch’. + +‘DVIPS’ + The name of the command that builds a ‘.ps’ file out of a ‘.dvi’ + file. This defaults to ‘dvips’. + +‘TEXINFO_TEX’ + + If your package has Texinfo files in many directories, you can use + the variable ‘TEXINFO_TEX’ to tell Automake where to find the + canonical ‘texinfo.tex’ for your package. The value of this + variable should be the relative path from the current ‘Makefile.am’ + to ‘texinfo.tex’: + + TEXINFO_TEX = ../doc/texinfo.tex + + +File: automake.info, Node: Man Pages, Prev: Texinfo, Up: Documentation + +11.2 Man Pages +============== + +A package can also include man pages (but see the GNU standards on this +matter, *note (standards)Man Pages::.) Man pages are declared using the +‘MANS’ primary. Generally the ‘man_MANS’ variable is used. Man pages +are automatically installed in the correct subdirectory of ‘mandir’, +based on the file extension. + + File extensions such as ‘.1c’ are handled by looking for the valid +part of the extension and using that to determine the correct +subdirectory of ‘mandir’. Valid section names are the digits ‘0’ +through ‘9’, and the letters ‘l’ and ‘n’. + + Sometimes developers prefer to name a man page something like +‘foo.man’ in the source, and then rename it to have the correct suffix, +for example ‘foo.1’, when installing the file. Automake also supports +this mode. For a valid section named SECTION, there is a corresponding +directory named ‘manSECTIONdir’, and a corresponding ‘_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: + man1_MANS = rename.man thesame.1 alsothesame.1c + +In this case, ‘rename.man’ will be renamed to ‘rename.1’ when installed, +but the other files will keep their names. + + By default, man pages are installed by ‘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 +‘no-installman’ option will prevent the man pages from being installed +by default. The user can still explicitly install them via ‘make +install-man’. + + For fast installation, with many files it is preferable to use +‘manSECTION_MANS’ over ‘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 ‘dist_’ prefix. For instance here is how +to distribute and install the two man pages of GNU ‘cpio’ (which +includes both Texinfo documentation and man pages): + + dist_man_MANS = cpio.1 mt.1 + + The ‘nobase_’ prefix is meaningless for man pages and is disallowed. + + Executables and manpages may be renamed upon installation (*note +Renaming::). For manpages this can be avoided by use of the ‘notrans_’ +prefix. For instance, suppose an executable ‘foo’ allowing to access a +library function ‘foo’ from the command line. The way to avoid renaming +of the ‘foo.3’ manpage is: + + man_MANS = foo.1 + notrans_man_MANS = foo.3 + + ‘notrans_’ must be specified first when used in conjunction with +either ‘dist_’ or ‘nodist_’ (*note Fine-grained Distribution Control::). +For instance: + + notrans_dist_man3_MANS = bar.3 + + +File: automake.info, Node: Install, Next: Clean, Prev: Documentation, Up: Top + +12 What Gets Installed +********************** + +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 ‘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 + + +File: automake.info, Node: Basics of Installation, Next: The Two Parts of Install, Up: Install + +12.1 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. + + bin_PROGRAMS = hello subdir/goodbye + + In this example, both ‘hello’ and ‘goodbye’ will be installed in +‘$(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 ‘nobase_’ prefix to suppress +the base name step. For example: + + nobase_include_HEADERS = stdio.h sys/types.h + +will install ‘stdio.h’ in ‘$(includedir)’ and ‘types.h’ in +‘$(includedir)/sys’. + + For most file types, Automake will install multiple files at once, +while avoiding command line length issues (*note Length Limitations::). +Since some ‘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 ‘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). + + +File: automake.info, Node: The Two Parts of Install, Next: Extending Installation, Prev: Basics of Installation, Up: Install + +12.2 The Two Parts of Install +============================= + +Automake generates separate ‘install-data’ and ‘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. ‘install-exec’ installs platform-dependent +files, and ‘install-data’ installs platform-independent files. The +‘install’ target depends on both of these targets. While Automake tries +to automatically segregate objects into the correct category, the +‘Makefile.am’ author is, in the end, responsible for making sure this is +done correctly. + + Variables using the standard directory prefixes ‘data’, ‘info’, +‘man’, ‘include’, ‘oldinclude’, ‘pkgdata’, or ‘pkginclude’ are installed +by ‘install-data’. + + Variables using the standard directory prefixes ‘bin’, ‘sbin’, +‘libexec’, ‘sysconf’, ‘localstate’, ‘lib’, or ‘pkglib’ are installed by +‘install-exec’. + + For instance, ‘data_DATA’ files are installed by ‘install-data’, +while ‘bin_PROGRAMS’ files are installed by ‘install-exec’. + + Any variable using a user-defined directory prefix with ‘exec’ in the +name (e.g., ‘myexecbin_PROGRAMS’) is installed by ‘install-exec’. All +other user-defined prefixes are installed by ‘install-data’. + + +File: automake.info, Node: Extending Installation, Next: Staged Installs, Prev: The Two Parts of Install, Up: Install + +12.3 Extending Installation +=========================== + +It is possible to extend this mechanism by defining an +‘install-exec-local’ or ‘install-data-local’ rule. If these rules +exist, they will be run at ‘make install’ time. These rules can do +almost anything; care is required. + + Automake also supports two install hooks, ‘install-exec-hook’ and +‘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. *Note Extending::, for some examples. + diff --git a/automake-1.15.1/doc/automake.info-2 b/automake-1.15.1/doc/automake.info-2 new file mode 100644 index 0000000..1f027e3 --- /dev/null +++ b/automake-1.15.1/doc/automake.info-2 @@ -0,0 +1,6185 @@ +This is automake.info, produced by makeinfo version 6.1 from +automake.texi. + +This manual is for GNU Automake (version 1.15.1, 17 June 2017), a +program that creates GNU standards-compliant Makefiles from template +files. + + Copyright © 1995-2017 Free Software Foundation, Inc. + + 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.†+ +INFO-DIR-SECTION Software development +START-INFO-DIR-ENTRY +* Automake: (automake). Making GNU standards-compliant Makefiles. +END-INFO-DIR-ENTRY + +INFO-DIR-SECTION Individual utilities +START-INFO-DIR-ENTRY +* aclocal-invocation: (automake)aclocal Invocation. Generating aclocal.m4. +* automake-invocation: (automake)automake Invocation. Generating Makefile.in. +END-INFO-DIR-ENTRY + + +File: automake.info, Node: Staged Installs, Next: Install Rules for the User, Prev: Extending Installation, Up: Install + +12.4 Staged Installs +==================== + +Automake generates support for the ‘DESTDIR’ variable in all install +rules. ‘DESTDIR’ is used during the ‘make install’ step to relocate +install objects into a staging area. Each object and path is prefixed +with the value of ‘DESTDIR’ before being copied into the install area. +Here is an example of typical DESTDIR usage: + + mkdir /tmp/staging && + make DESTDIR=/tmp/staging install + + The ‘mkdir’ command avoids a security problem if the attacker creates +a symbolic link from ‘/tmp/staging’ to a victim area; then ‘make’ places +install objects in a directory tree built under ‘/tmp/staging’. If +‘/gnu/bin/foo’ and ‘/gnu/share/aclocal/foo.m4’ are to be installed, the +above command would install ‘/tmp/staging/gnu/bin/foo’ and +‘/tmp/staging/gnu/share/aclocal/foo.m4’. + + This feature is commonly used to build install images and packages +(*note DESTDIR::). + + Support for ‘DESTDIR’ is implemented by coding it directly into the +install rules. If your ‘Makefile.am’ uses a local install rule (e.g., +‘install-exec-local’) or an install hook, then you must write that code +to respect ‘DESTDIR’. + + *Note (standards)Makefile Conventions::, for another usage example. + + +File: automake.info, Node: Install Rules for the User, Prev: Staged Installs, Up: Install + +12.5 Install Rules for the User +=============================== + +Automake also generates rules for targets ‘uninstall’, ‘installdirs’, +and ‘install-strip’. + + Automake supports ‘uninstall-local’ and ‘uninstall-hook’. There is +no notion of separate uninstalls for “exec†and “dataâ€, as these +features would not provide additional functionality. + + Note that ‘uninstall’ is not meant as a replacement for a real +packaging tool. + + +File: automake.info, Node: Clean, Next: Dist, Prev: Install, Up: Top + +13 What Gets Cleaned +******************** + +The GNU Makefile Standards specify a number of different clean rules. +*Note Standard Targets for Users: (standards)Standard Targets. + + 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 ‘MOSTLYCLEANFILES’, ‘CLEANFILES’, ‘DISTCLEANFILES’, and +‘MAINTAINERCLEANFILES’. + + 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 ‘mostlyclean-local’, +‘clean-local’, ‘distclean-local’, or ‘maintainer-clean-local’ targets +(*note Extending::). A common case is deleting a directory, for +instance, a directory created by the test suite: + + clean-local: + -rm -rf testSubDir + + Since ‘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: + + clean-local: clean-local-check + .PHONY: clean-local-check + clean-local-check: + -rm -rf testSubDir + + 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çois Pinard: + + • If ‘make’ built it, and it is commonly something that one would + want to rebuild (for instance, a ‘.o’ file), then ‘mostlyclean’ + should delete it. + + • Otherwise, if ‘make’ built it, then ‘clean’ should delete it. + + • If ‘configure’ built it, then ‘distclean’ should delete it. + + • If the maintainer built it (for instance, a ‘.info’ file), then + ‘maintainer-clean’ should delete it. However ‘maintainer-clean’ + should not delete anything that needs to exist in order to run + ‘./configure && make’. + + We recommend that you follow this same set of heuristics in your +‘Makefile.am’. + + +File: automake.info, Node: Dist, Next: Tests, Prev: Clean, Up: Top + +14 What Goes in a Distribution +****************************** + +* Menu: + +* Basics of Distribution:: Files distributed by default +* Fine-grained Distribution Control:: ‘dist_’ and ‘nodist_’ prefixes +* The dist Hook:: A target for last-minute distribution changes +* Checking the Distribution:: ‘make distcheck’ explained +* The Types of Distributions:: A variety of formats and compression methods + + +File: automake.info, Node: Basics of Distribution, Next: Fine-grained Distribution Control, Up: Dist + +14.1 Basics of Distribution +=========================== + +The ‘dist’ rule in the generated ‘Makefile.in’ can be used to generate a +gzipped ‘tar’ file and other flavors of archive for distribution. The +file is named based on the ‘PACKAGE’ and ‘VERSION’ variables +automatically defined by either the ‘AC_INIT’ invocation or by a +_deprecated_ two-arguments invocation of the ‘AM_INIT_AUTOMAKE’ macro +(see *note 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 ‘tar’ file is named +‘${PACKAGE}-${VERSION}.tar.gz’. You can use the ‘make’ variable +‘GZIP_ENV’ to control how gzip is run. The default setting is ‘--best’. + + 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 ‘Makefile.am’ and ‘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 ‘Makefile.am’ rule); this list is printed by ‘automake +--help’. Note that some files in this list are actually distributed +only if other certain conditions hold (for example, the ‘config.h.top’ +and ‘config.h.bot’ files are automatically distributed only if, e.g., +‘AC_CONFIG_HEADERS([config.h])’ is used in ‘configure.ac’). Also, files +that are read by ‘configure’ (i.e. the source files corresponding to the +files specified in various Autoconf macros such as ‘AC_CONFIG_FILES’ and +siblings) are automatically distributed. Files included in a +‘Makefile.am’ (using ‘include’) or in ‘configure.ac’ (using +‘m4_include’), and helper scripts installed with ‘automake +--add-missing’ are also distributed. + + 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 ‘EXTRA_DIST’ variable. You can mention files from subdirectories in +‘EXTRA_DIST’. + + You can also mention a directory in ‘EXTRA_DIST’; in this case the +entire directory will be recursively copied into the distribution. +Please note that this will also copy _everything_ in the directory, +including, e.g., Subversion’s ‘.svn’ private directories or CVS/RCS +version control files; thus we recommend against using this feature +as-is. However, you can use the ‘dist-hook’ feature to ameliorate the +problem; *note The dist Hook::. + + If you define ‘SUBDIRS’, Automake will recursively include the +subdirectories in the distribution. If ‘SUBDIRS’ is defined +conditionally (*note Conditionals::), Automake will normally include all +directories that could possibly appear in ‘SUBDIRS’ in the distribution. +If you need to specify the set of directories conditionally, you can set +the variable ‘DIST_SUBDIRS’ to the exact list of subdirectories to +include in the distribution (*note Conditional Subdirectories::). + + +File: automake.info, Node: Fine-grained Distribution Control, Next: The dist Hook, Prev: Basics of Distribution, Up: Dist + +14.2 Fine-grained Distribution Control +====================================== + +Sometimes you need tighter control over what does _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 ‘dist’ and ‘nodist’ prefixes. Any +primary or ‘_SOURCES’ variable can be prefixed with ‘dist_’ to add the +listed files to the distribution. Similarly, ‘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: + + dist_data_DATA = distribute-this + bin_PROGRAMS = foo + nodist_foo_SOURCES = do-not-distribute.c + + +File: automake.info, Node: The dist Hook, Next: Checking the Distribution, Prev: Fine-grained Distribution Control, Up: Dist + +14.3 The dist Hook +================== + +Occasionally it is useful to be able to change the distribution before +it is packaged up. If the ‘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 +‘EXTRA_DIST’: + + EXTRA_DIST = doc + dist-hook: + rm -rf `find $(distdir)/doc -type d -name .svn` + +Note that the ‘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 ‘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 ‘EXTRA_DIST’ are writable. So, if the +‘dist-hook’ recipe wants to modify the content of an existing file (or +‘EXTRA_DIST’ subdirectory) in the distribution directory, it should +explicitly to make it writable first: + + EXTRA_DIST = README doc + dist-hook: + chmod u+w $(distdir)/README $(distdir)/doc + echo "Distribution date: `date`" >> README + rm -f $(distdir)/doc/HACKING + + Two variables that come handy when writing ‘dist-hook’ rules are +‘$(distdir)’ and ‘$(top_distdir)’. + + ‘$(distdir)’ points to the directory where the ‘dist’ rule will copy +files from the current directory before creating the tarball. If you +are at the top-level directory, then ‘distdir = $(PACKAGE)-$(VERSION)’. +When used from subdirectory named ‘foo/’, then ‘distdir = +../$(PACKAGE)-$(VERSION)/foo’. ‘$(distdir)’ can be a relative or +absolute path, do not assume any form. + + ‘$(top_distdir)’ always points to the root directory of the +distributed tree. At the top-level it’s equal to ‘$(distdir)’. In the +‘foo/’ subdirectory ‘top_distdir = ../$(PACKAGE)-$(VERSION)’. +‘$(top_distdir)’ too can be a relative or absolute path. + + Note that when packages are nested using ‘AC_CONFIG_SUBDIRS’ (*note +Subpackages::), then ‘$(distdir)’ and ‘$(top_distdir)’ are relative to +the package where ‘make dist’ was run, not to any sub-packages involved. + + +File: automake.info, Node: Checking the Distribution, Next: The Types of Distributions, Prev: The dist Hook, Up: Dist + +14.4 Checking the Distribution +============================== + +Automake also generates a ‘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, _operating from it_, +takes the following steps: + • tries to do a ‘VPATH’ build (*note VPATH Builds::), with the + ‘srcdir’ and all its content made _read-only_; + • runs the test suite (with ‘make check’) on this fresh build; + • installs the package in a temporary directory (with ‘make + install’), and tries runs the test suite on the resulting + installation (with ‘make installcheck’); + • checks that the package can be correctly uninstalled (by ‘make + uninstall’) and cleaned (by ‘make distclean’); + • finally, makes another tarball to ensure the distribution is + self-contained. + + 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. + +DISTCHECK_CONFIGURE_FLAGS +------------------------- + +Building the package involves running ‘./configure’. If you need to +supply additional flags to ‘configure’, define them in the +‘AM_DISTCHECK_CONFIGURE_FLAGS’ variable in your top-level ‘Makefile.am’. +The user can still extend or override the flags provided there by +defining the ‘DISTCHECK_CONFIGURE_FLAGS’ variable, on the command line +when invoking ‘make’. It’s worth nothing that ‘make distcheck’ needs +complete control over the ‘configure’ options ‘--srcdir’ and ‘--prefix’, +so those options cannot be overridden by ‘AM_DISTCHECK_CONFIGURE_FLAGS’ +nor by ‘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 ‘AM_DISTCHECK_CONFIGURE_FLAGS’. However, +there might be few scenarios in which the use of this variable is +justified. GNU ‘m4’ offers an example. GNU ‘m4’ configures by default +with its experimental and seldom used "changeword" feature disabled; so +in its case it is useful to have ‘make distcheck’ run configure with the +‘--with-changeword’ option, to ensure that the code for changeword +support still compiles correctly. GNU ‘m4’ also employs the +‘AM_DISTCHECK_CONFIGURE_FLAGS’ variable to stress-test the use of +‘--program-prefix=g’, since at one point the ‘m4’ build system had a bug +where ‘make installcheck’ was wrongly assuming it could blindly test +"‘m4’", rather than the just-installed "‘gm4’". + +distcheck-hook +-------------- + +If the ‘distcheck-hook’ rule is defined in your top-level ‘Makefile.am’, +then it will be invoked by ‘distcheck’ after the new distribution has +been unpacked, but before the unpacked copy is configured and built. +Your ‘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 +‘distcheck-hook’ as well as ‘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. + +distcleancheck +-------------- + +Speaking of potential distribution errors, ‘distcheck’ also ensures that +the ‘distclean’ rule actually removes all built files. This is done by +running ‘make distcleancheck’ at the end of the ‘VPATH’ build. By +default, ‘distcleancheck’ will run ‘distclean’ and then make sure the +build tree has been emptied by running ‘$(distcleancheck_listfiles)’. +Usually this check will find generated files that you forgot to add to +the ‘DISTCLEANFILES’ variable (*note Clean::). + + The ‘distcleancheck’ behavior should be OK for most packages, +otherwise you have the possibility to override the definition of either +the ‘distcleancheck’ rule, or the ‘$(distcleancheck_listfiles)’ +variable. For instance, to disable ‘distcleancheck’ completely, add the +following rule to your top-level ‘Makefile.am’: + + distcleancheck: + @: + + If you want ‘distcleancheck’ to ignore built files that have not been +cleaned because they are also part of the distribution, add the +following definition instead: + + distcleancheck_listfiles = \ + find . -type f -exec sh -c 'test -f $(srcdir)/$$1 || echo $$1' \ + sh '{}' ';' + + 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 (*note Errors with distclean::), make sure +you read it before playing with ‘distcleancheck_listfiles’. + +distuninstallcheck +------------------ + +‘distcheck’ also checks that the ‘uninstall’ rule works properly, both +for ordinary and ‘DESTDIR’ builds. It does this by invoking ‘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 +‘uninstall’-related rules. + + By default, the checking is done by the ‘distuninstallcheck’ rule, +and the list of files in the install tree is generated by +‘$(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 +‘distcheck’. For instance, to disable this check completely, you would +write: + + distuninstallcheck: + @: + + +File: automake.info, Node: The Types of Distributions, Prev: Checking the Distribution, Up: Dist + +14.5 The Types of Distributions +=============================== + +Automake generates rules to provide archives of the project for +distributions in various formats. Their targets are: + +‘dist-gzip’ + Generate a ‘gzip’ tar archive of the distribution. This is the + only format enabled by default. + +‘dist-bzip2’ + Generate a ‘bzip2’ tar archive of the distribution. bzip2 archives + are frequently smaller than gzipped archives. By default, this + rule makes ‘bzip2’ use a compression option of ‘-9’. To make it + use a different one, set the ‘BZIP2’ environment variable. For + example, ‘make dist-bzip2 BZIP2=-7’. + +‘dist-lzip’ + Generate an ‘lzip’ tar archive of the distribution. ‘lzip’ + archives are frequently smaller than ‘bzip2’-compressed archives. + +‘dist-xz’ + Generate an ‘xz’ tar archive of the distribution. ‘xz’ archives + are frequently smaller than ‘bzip2’-compressed archives. By + default, this rule makes ‘xz’ use a compression option of ‘-e’. To + make it use a different one, set the ‘XZ_OPT’ environment variable. + For example, run this command to use the default compression ratio, + but with a progress indicator: ‘make dist-xz XZ_OPT=-ve’. + +‘dist-zip’ + Generate a ‘zip’ archive of the distribution. + +‘dist-tarZ’ + Generate a tar archive of the distribution, compressed with the + historical (and obsolescent) program ‘compress’. This option is + deprecated, and it and the corresponding functionality will be + removed altogether in Automake 2.0. + +‘dist-shar’ + Generate a ‘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. + + The rule ‘dist’ (and its historical synonym ‘dist-all’) will create +archives in all the enabled formats (*note List of Automake options:: +for how to change this list). By default, only the ‘dist-gzip’ target +is hooked to ‘dist’. + + +File: automake.info, Node: Tests, Next: Rebuilding, Prev: Dist, Up: Top + +15 Support for test suites +************************** + +Automake can generate code to handle two kinds of test suites. One is +based on integration with the ‘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 ‘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. + +In either case, the testsuite is invoked via ‘make check’. + +* Menu: + +* Generalities about Testing:: Concepts and terminology about testing +* Simple Tests:: Listing test scripts in ‘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 ‘dejagnu’ testing framework +* Install Tests:: Running tests on installed packages + + +File: automake.info, Node: Generalities about Testing, Next: Simple Tests, Up: Tests + +15.1 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). + + The minimal unit of testing is usually called _test case_, or simply +_test_. How a test case is defined or delimited, and even what exactly +_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 _testsuite_. + + A _test harness_ (also _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. + + A test is said to _pass_ when it can determine that the condition or +behaviour it means to verify holds, and is said to _fail_ when it can +determine that such condition of behaviour does _not_ hold. + + 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 _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. + + 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 _expected +failure_ (or _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 _unexpected pass_ (or _xpass_). + + 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 _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). + + +File: automake.info, Node: Simple Tests, Next: Custom Test Drivers, Prev: Generalities about Testing, Up: Tests + +15.2 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 + + +File: automake.info, Node: Scripts-based Testsuites, Next: Serial Test Harness, Up: Simple Tests + +15.2.1 Scripts-based Testsuites +------------------------------- + +If the special variable ‘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 ‘TESTS’ to list also +data files to be passed to one or more test scripts defined by different +means (the so-called “log compilersâ€, *note 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 ‘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 (*note Using the TAP +test protocol::) or custom (*note 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, *note Custom Test Drivers::). + + 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. + + You may define the variable ‘XFAIL_TESTS’ to a list of tests (usually +a subset of ‘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 +‘DISABLE_HARD_ERRORS’ make variable to a nonempty value. + + Note however that, for tests based on more complex test protocols, +the exact effects of ‘XFAIL_TESTS’ and ‘DISABLE_HARD_ERRORS’ might +change, or they might even have no effect at all (for example, in tests +using TAP, there is not way to disable hard errors, and the +‘DISABLE_HARD_ERRORS’ variable has no effect on them). + + The result of each test case run by the scripts in ‘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 *note Generalities about Testing::) are ‘PASS’, ‘FAIL’, ‘SKIP’, +‘XFAIL’, ‘XPASS’ and ‘ERROR’. Here is an example of output from an +hypothetical testsuite that uses both plain and TAP tests: + 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 + +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. + + 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 ‘make’ variable +‘AM_COLOR_TESTS=no’; the user can in addition force colored output even +without a connecting terminal with ‘AM_COLOR_TESTS=always’. It’s also +worth noting that some ‘make’ implementations, when used in parallel +mode, have slightly different semantics (*note (autoconf)Parallel +make::), 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 ‘AM_COLOR_TESTS=always’ in order to have the testsuite output +colorized. + + Test programs that need data files should look for them in ‘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 (*note Build Directories: (autoconf)Build Directories.), and +in particular for the ‘distcheck’ rule (*note Checking the +Distribution::). + + The ‘AM_TESTS_ENVIRONMENT’ and ‘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 ‘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 +‘AM_TESTS_ENVIRONMENT’ _must_ be terminated by a semicolon. + + The ‘AM_TESTS_FD_REDIRECT’ variable can be used to define file +descriptor redirections for the test scripts. One might think that +‘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 ‘exec’ builtin, +thus rendering an idiom like ‘AM_TESTS_ENVIRONMENT = exec 9>&2;’ +ineffectual. This issue also affects some Bourne shells, such as the +HP-UX’s ‘/bin/sh’, + + 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; + ## 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 + +Note however that ‘AM_TESTS_ENVIRONMENT’ is, for historical and +implementation reasons, _not_ supported by the serial harness (*note +Serial Test Harness::). + + Automake ensures that each file listed in ‘TESTS’ is built before it +is run; you can list both source and derived programs (or scripts) in +‘TESTS’; the generated rule will look both in ‘srcdir’ and ‘.’. For +instance, you might want to run a C program as a test. To do this you +would list its name in ‘TESTS’ and also in ‘check_PROGRAMS’, and then +specify it as you would any other program. + + Programs listed in ‘check_PROGRAMS’ (and ‘check_LIBRARIES’, +‘check_LTLIBRARIES’...) are only built during ‘make check’, not during +‘make all’. You should list there any program needed by your tests that +does not need to be built by ‘make all’. Note that ‘check_PROGRAMS’ are +_not_ automatically added to ‘TESTS’ because ‘check_PROGRAMS’ usually +lists programs used by the tests, not the tests themselves. Of course +you can set ‘TESTS = $(check_PROGRAMS)’ if all your programs are test +cases. + + +File: automake.info, Node: Serial Test Harness, Next: Parallel Test Harness, Prev: Scripts-based Testsuites, Up: Simple Tests + +15.2.2 Older (and discouraged) serial test harness +-------------------------------------------------- + +First, note that today the use of this harness is strongly discouraged +in favour of the parallel test harness (*note Parallel Test Harness::). +Still, there are _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 +‘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 ‘AM_TESTS_ENVIRONMENT’ +variable is _not_ supported by this harness (it will be silently ignored +if defined); only ‘TESTS_ENVIRONMENT’ is, and it is to be considered a +developer-reserved variable. This is done so that, when using the +serial harness, ‘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: + + TESTS_ENVIRONMENT = $(PERL) -Mstrict -w + TESTS = foo.pl bar.pl baz.pl + +It’s important to note that the use of ‘TESTS_ENVIRONMENT’ endorsed here +would be _invalid_ with the parallel harness. That harness provides a +more elegant way to achieve the same effect, with the further benefit of +freeing the ‘TESTS_ENVIRONMENT’ variable for the user (*note 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. + + +File: automake.info, Node: Parallel Test Harness, Prev: Serial Test Harness, Up: Simple Tests + +15.2.3 Parallel Test Harness +---------------------------- + +By default, Automake generated a parallel (concurrent) test harness. It +features automatic collection of the test scripts output in ‘.log’ +files, concurrent execution of tests with ‘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. + + The parallel test harness operates by defining a set of ‘make’ rules +that run the test scripts listed in ‘TESTS’, and, for each such script, +save its output in a corresponding ‘.log’ file and its results (and +other “metadataâ€, *note API for Custom Test Drivers::) in a +corresponding ‘.trs’ (as in Test ReSults) file. The ‘.log’ file will +contain all the output emitted by the test on its standard output and +its standard error. The ‘.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, +‘TEST_SUITE_LOG’, which defaults to ‘test-suite.log’ and requires a +‘.log’ suffix. This file depends upon all the ‘.log’ and ‘.trs’ files +created for the test scripts listed in ‘TESTS’. + + 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 ‘test-suite.log’ file. If the variable ‘VERBOSE’ is set, this +file is output after the summary. + + Each couple of ‘.log’ and ‘.trs’ files is created when the +corresponding test has completed. The set of log files is listed in the +read-only variable ‘TEST_LOGS’, and defaults to ‘TESTS’, with the +executable extension if any (*note EXEEXT::), as well as any suffix +listed in ‘TEST_EXTENSIONS’ removed, and ‘.log’ appended. Results are +undefined if a test file name ends in several concatenated suffixes. +‘TEST_EXTENSIONS’ defaults to ‘.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. For example, ‘.sh’, ‘.T’ and ‘.t1’ are valid +extensions, while ‘.x-y’, ‘.6c’ and ‘.t.1’ are not. + + It is important to note that, due to current limitations (unlikely to +be lifted), configure substitutions in the definition of ‘TESTS’ can +only work if they will expand to a list of tests that have a suffix +listed in ‘TEST_EXTENSIONS’. + + For tests that match an extension ‘.EXT’ listed in ‘TEST_EXTENSIONS’, +you can provide a custom “test runner†using the variable +‘EXT_LOG_COMPILER’ (note the upper-case extension) and pass options in +‘AM_EXT_LOG_FLAGS’ and allow the user to pass options in +‘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 ‘LOG_COMPILER’, ‘AM_LOG_FLAGS’, and ‘LOG_FLAGS’ may be +used. For 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 + +will invoke ‘$(PERL) -w foo.pl’, ‘$(PYTHON) -v bar.py’, and +‘./wrapper-script -d baz’ to produce ‘foo.log’, ‘bar.log’, and +‘baz.log’, respectively. The ‘foo.trs’, ‘bar.trs’ and ‘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 (*note Serial Test Harness::), the +‘AM_TESTS_ENVIRONMENT’ and ‘TESTS_ENVIRONMENT’ variables _cannot_ be use +to define a custom test runner; the ‘LOG_COMPILER’ and ‘LOG_FLAGS’ (or +their extension-specific counterparts) should be used instead: + + ## This is WRONG! + AM_TESTS_ENVIRONMENT = PERL5LIB='$(srcdir)/lib' $(PERL) -Mstrict -w + + ## Do this instead. + AM_TESTS_ENVIRONMENT = PERL5LIB='$(srcdir)/lib'; export PERL5LIB; + LOG_COMPILER = $(PERL) + AM_LOG_FLAGS = -Mstrict -w + + By default, the test suite harness will run all tests, but there are +several ways to limit the set of tests that are run: + + • You can set the ‘TESTS’ variable. For example, you can use a + command like this to run only a subset of the tests: + + env TESTS="foo.test bar.test" make -e check + + Note however that the command above will unconditionally overwrite + the ‘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 ‘TEST_SUITE_LOG’ at + runtime; for example, + + env TEST_SUITE_LOG=partial.log TESTS="..." make -e check + + will write the result of the partial testsuite runs to the + ‘partial.log’, without touching ‘test-suite.log’. + + • You can set the ‘TEST_LOGS’ variable. By default, this variable is + computed at ‘make’ run time from the value of ‘TESTS’ as described + above. For example, you can use the following: + + set x subset*.log; shift + env TEST_LOGS="foo.log $*" make -e check + + The comments made above about ‘TEST_SUITE_LOG’ overriding applies + here too. + + • By default, the test harness removes all old per-test ‘.log’ and + ‘.trs’ files before it starts running tests to regenerate them. + The variable ‘RECHECK_LOGS’ contains the set of ‘.log’ (and, by + implication, ‘.trs’) files which are removed. ‘RECHECK_LOGS’ + defaults to ‘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: + + env RECHECK_LOGS= make -e check + + • You can ensure that all tests are rerun which have failed or passed + unexpectedly, by running ‘make recheck’ in the test directory. + This convenience target will set ‘RECHECK_LOGS’ appropriately + before invoking the main test harness. + +In order to guarantee an ordering between tests even with ‘make -jN’, +dependencies between the corresponding ‘.log’ files may be specified +through usual ‘make’ dependencies. For example, the following snippet +lets the test named ‘foo-execute.test’ depend upon completion of the +test ‘foo-compile.test’: + + TESTS = foo-compile.test foo-execute.test + foo-execute.log: foo-compile.log + +Please note that this ordering ignores the _results_ of required tests, +thus the test ‘foo-execute.test’ is run even if the test +‘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 ‘TEST_EXTENSIONS’. + + Tests without such specified dependencies may be run concurrently +with parallel ‘make -jN’, so be sure they are prepared for concurrent +execution. + + 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 +‘EXTRA_PROGRAMS’ instead of with ‘check_PROGRAMS’, as the former allows +intertwined compilation and test execution (but note that +‘EXTRA_PROGRAMS’ are not cleaned automatically, *note Uniform::). + + The variables ‘TESTS’ and ‘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 ‘.test’, so that one of the inference rules +generated by ‘automake’ can apply. For literal test names, ‘automake’ +can generate per-target rules to avoid this limitation. + + Please note that it is currently not possible to use ‘$(srcdir)/’ or +‘$(top_srcdir)/’ in the ‘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 ‘make’ implementations (*note (autoconf)Make +Target Lookup::, the semantics of FreeBSD and OpenBSD ‘make’ conflict +with this). In case of doubt you may want to require to use GNU ‘make’, +or work around the issue with inference rules to generate the tests. + + +File: automake.info, Node: Custom Test Drivers, Next: Using the TAP test protocol, Prev: Simple Tests, Up: Tests + +15.3 Custom Test Drivers +======================== + +* Menu: + +* Overview of Custom Test Drivers Support:: +* Declaring Custom Test Drivers:: +* API for Custom Test Drivers:: + + +File: automake.info, Node: Overview of Custom Test Drivers Support, Next: Declaring Custom Test Drivers, Up: Custom Test Drivers + +15.3.1 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 +‘.log’ and ‘.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 (*note 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: + + • list of test scripts defined in ‘TESTS’, and overridable at runtime + through the redefinition of ‘TESTS’ or ‘TEST_LOGS’; + • concurrency through the use of ‘make’’s option ‘-j’; + • per-test ‘.log’ and ‘.trs’ files, and generation of a summary + ‘.log’ file from them; + • ‘recheck’ target, ‘RECHECK_LOGS’ variable, and lazy reruns of + tests; + • inter-test dependencies; + • support for ‘check_*’ variables (‘check_PROGRAMS’, + ‘check_LIBRARIES’, ...); + • use of ‘VERBOSE’ environment variable to get verbose output on + testsuite failures; + • definition and honoring of ‘TESTS_ENVIRONMENT’, + ‘AM_TESTS_ENVIRONMENT’ and ‘AM_TESTS_FD_REDIRECT’ variables; + • definition of generic and extension-specific ‘LOG_COMPILER’ and + ‘LOG_FLAGS’ variables. + +On the other hand, the exact semantics of how (and if) testsuite output +colorization, ‘XFAIL_TESTS’, and hard errors are supported and handled +is left to the individual test drivers. + + +File: automake.info, Node: Declaring Custom Test Drivers, Next: API for Custom Test Drivers, Prev: Overview of Custom Test Drivers Support, Up: Custom Test Drivers + +15.3.2 Declaring Custom Test Drivers +------------------------------------ + +Custom testsuite drivers are declared by defining the make variables +‘LOG_DRIVER’ or ‘EXT_LOG_DRIVER’ (where EXT must be declared in +‘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 ‘LOG_DRIVER’). Clearly, multiple distinct test +drivers can be declared in the same ‘Makefile.am’. Note moreover that +the ‘LOG_DRIVER’ variables are _not_ a substitute for the ‘LOG_COMPILER’ +variables: the two sets of variables can, and often do, usefully and +legitimately coexist. + + The developer-reserved variable ‘AM_LOG_DRIVER_FLAGS’ and the +user-reserved variable ‘LOG_DRIVER_FLAGS’ can be used to define flags +that will be passed to each invocation of ‘LOG_DRIVER’, with the +user-defined flags obviously taking precedence over the +developer-reserved ones. Similarly, for each extension EXT declared in +‘TEST_EXTENSIONS’, flags listed in ‘AM_EXT_LOG_DRIVER_FLAGS’ and +‘EXT_LOG_DRIVER_FLAGS’ will be passed to invocations of +‘EXT_LOG_DRIVER’. + + +File: automake.info, Node: API for Custom Test Drivers, Prev: Declaring Custom Test Drivers, Up: Custom Test Drivers + +15.3.3 API for Custom Test Drivers +---------------------------------- + +Note that _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:: + + +File: automake.info, Node: Command-line arguments for test drivers, Next: Log files generation and test results recording, Up: API for Custom Test Drivers + +15.3.3.1 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 _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). + +Here is the list of options: + +‘--test-name=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., + ‘sub/foo.test’), and is mostly meant to be used in console reports + about testsuite advancements and results (*note Testsuite progress + output::). +‘--log-file=PATH.log’ + The ‘.log’ file the test driver must create (*note Basics of test + metadata::). If it has a directory component (as in e.g., + ‘sub/foo.log’), the test harness will ensure that such directory + exists _before_ the test driver is called. +‘--trs-file=PATH.trs’ + The ‘.trs’ file the test driver must create (*note Basics of test + metadata::). If it has a directory component (as in e.g., + ‘sub/foo.trs’), the test harness will ensure that such directory + exists _before_ the test driver is called. +‘--color-tests={yes|no}’ + Whether the console output should be colorized or not (*note Simple + tests and color-tests::, to learn when this option gets activated + and when it doesn’t). +‘--expect-failure={yes|no}’ + Whether the tested program is expected to fail. +‘--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 + ‘yes’). The exact meaning of “hard error†is highly dependent from + the test protocols or conventions in use. +‘--’ + Explicitly terminate the list of options. + +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 ‘--color-tests’, +‘--expect-failure’ and ‘--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. + + +File: automake.info, Node: Log files generation and test results recording, Next: Testsuite progress output, Prev: Command-line arguments for test drivers, Up: API for Custom Test Drivers + +15.3.3.2 Log files generation and test results recording +........................................................ + +The test driver must correctly generate the files specified by the +‘--log-file’ and ‘--trs-file’ option (even when the tested program fails +or crashes). + + The ‘.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 ‘.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 ‘make recheck’. Unrecognized metadata in a +‘.trs’ file is currently ignored by the harness, but this might change +in the future. The list of currently recognized metadata follows. + +‘:test-result:’ + The test driver must use this field to register the results of + _each_ test case run by a test script file. Several + ‘:test-result:’ fields can be present in the same ‘.trs’ file; this + is done in order to support test protocols that allow a single test + script to run more test cases. + + The only recognized test results are currently ‘PASS’, ‘XFAIL’, + ‘SKIP’, ‘FAIL’, ‘XPASS’ and ‘ERROR’. These results, when declared + with ‘: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 + ‘test-suite.log’ and preparing the testsuite summary. + +‘:recheck:’ + If this field is present and defined to ‘no’, then the + corresponding test script will _not_ be run upon a ‘make recheck’. + What happens when two or more ‘:recheck:’ fields are present in the + same ‘.trs’ file is undefined behaviour. + +‘:copy-in-global-log:’ + If this field is present and defined to ‘no’, then the content of + the ‘.log’ file will _not_ be copied into the global + ‘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 + ‘:copy-in-global-log:’ fields are present in the same ‘.trs’ file + is undefined behaviour. + +‘: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 + ‘$(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 ‘PASS/SKIP’ value for this field, + while a test script which run 19 successful tests and one failed + test could have an ‘ALMOST PASSED’ value. What happens when two or + more ‘:test-global-result:’ fields are present in the same ‘.trs’ + file is undefined behaviour. + +Let’s see a small example. Assume a ‘.trs’ file contains the following +lines: + + :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 + +Then the corresponding test script will be re-run by ‘make check’, will +contribute with _five_ test results to the testsuite summary (three of +these tests being successful, one failed, and one skipped), and the +content of the corresponding ‘.log’ file will _not_ be copied in the +global log file ‘test-suite.log’. + + +File: automake.info, Node: Testsuite progress output, Prev: Log files generation and test results recording, Up: API for Custom Test Drivers + +15.3.3.3 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 _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 ‘--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. + + +File: automake.info, Node: Using the TAP test protocol, Next: DejaGnu Tests, Prev: Custom Test Drivers, Up: Tests + +15.4 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:: + + +File: automake.info, Node: Introduction to TAP, Next: Use TAP with the Automake test harness, Up: Using the TAP test protocol + +15.4.1 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 (*note Testsuite progress on console::), and will use the ‘.trs’ +files (*note 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 ‘prove’ utility +(http://search.cpan.org/~andya/Test-Harness/bin/prove), 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 ‘Test::Harness::TAP’ +(http://search.cpan.org/~petdance/Test-Harness/lib/Test/Harness/TAP.pod). + + The most relevant real-world usages of TAP are obviously in the +testsuites of ‘perl’ and of many perl modules. Still, also other +important third-party packages, such as ‘git’ (http://git-scm.com/), use +TAP in their testsuite. + + +File: automake.info, Node: Use TAP with the Automake test harness, Next: Incompatibilities with other TAP parsers and drivers, Prev: Introduction to TAP, Up: Using the TAP test protocol + +15.4.2 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 +‘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 ‘tap-driver.sh’ script and +the awk program found by ‘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 (*note +Command-line arguments for test drivers::), the ‘tap-driver.sh’ supports +the following options, whose names are chosen for enhanced compatibility +with the ‘prove’ utility. + +‘--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. +‘--comments’ + Instruct the test driver to display TAP diagnostic (i.e., lines + beginning with the ‘#’ character) in the testsuite progress output + too; by default, TAP diagnostic is only copied to the ‘.log’ file. +‘--no-comments’ + Revert the effects of ‘--comments’. +‘--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. +‘--no-merge’ + Revert the effects of ‘--merge’. +‘--diagnostic-string=STRING’ + Change the string that introduces TAP diagnostic from the default + value of “‘#’†to ‘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. + +Here is an example of how the TAP driver can be set up and used. + + % 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 + + % 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) + + % 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 :-)' + + % 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.' + + % cat baz.test + #!/bin/sh + echo 1..1 + echo ok 1 + # Exit with error, even if all the tests have been successful. + exit 7 + + % cp PREFIX/share/automake-APIVERSION/tap-driver.sh . + % 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 + ... + % echo exit status: $? + exit status: 1 + + % 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 + ... + % echo exit status: $? + exit status: 0 + + +File: automake.info, Node: Incompatibilities with other TAP parsers and drivers, Next: Links and external resources on TAP, Prev: Use TAP with the Automake test harness, Up: Using the TAP test protocol + +15.4.3 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. + + • A ‘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. + • The ‘version’ and ‘pragma’ directives are not supported. + • The ‘--diagnostic-string’ option of our driver allows to modify the + string that introduces TAP diagnostic from the default value of + “‘#’â€. 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 ‘prove’ and ‘Test::Harness’ + • And there are probably some other small and yet undiscovered + incompatibilities, especially in corner cases or with rare usages. + + +File: automake.info, Node: Links and external resources on TAP, Prev: Incompatibilities with other TAP parsers and drivers, Up: Using the TAP test protocol + +15.4.4 Links and external resources on TAP +------------------------------------------ + +Here are some links to more extensive official or third-party +documentation and resources about the TAP protocol and related tools and +libraries. + • ‘Test::Harness::TAP’ + (http://search.cpan.org/~petdance/Test-Harness/lib/Test/Harness/TAP.pod), + the (mostly) official documentation about the TAP format and + protocol. + • ‘prove’ (http://search.cpan.org/~andya/Test-Harness/bin/prove), + the most famous command-line TAP test driver, included in the + distribution of ‘perl’ and ‘Test::Harness’ + (http://search.cpan.org/~andya/Test-Harness/lib/Test/Harness.pm). + • The TAP wiki (http://testanything.org/wiki/index.php/Main_Page). + • A “gentle introduction†to testing for perl coders: + ‘Test::Tutorial’ + (http://search.cpan.org/dist/Test-Simple/lib/Test/Tutorial.pod). + • ‘Test::Simple’ + (http://search.cpan.org/~mschwern/Test-Simple/lib/Test/Simple.pm) + and ‘Test::More’ + (http://search.cpan.org/~mschwern/Test-Simple/lib/Test/More.pm), + the standard perl testing libraries, which are based on TAP. + • C TAP Harness + (http://www.eyrie.org/~eagle/software/c-tap-harness/), a C-based + project implementing both a TAP producer and a TAP consumer. + • tap4j (http://www.tap4j.org/), a Java-based project implementing + both a TAP producer and a TAP consumer. + + +File: automake.info, Node: DejaGnu Tests, Next: Install Tests, Prev: Using the TAP test protocol, Up: Tests + +15.5 DejaGnu Tests +================== + +If ‘dejagnu’ (ftp://ftp.gnu.org/gnu/dejagnu/) appears in +‘AUTOMAKE_OPTIONS’, then a ‘dejagnu’-based test suite is assumed. The +variable ‘DEJATOOL’ is a list of names that are passed, one at a time, +as the ‘--tool’ argument to ‘runtest’ invocations; it defaults to the +name of the package. + + The variable ‘RUNTESTDEFAULTFLAGS’ holds the ‘--tool’ and ‘--srcdir’ +flags that are passed to dejagnu by default; this can be overridden if +necessary. + + The variables ‘EXPECT’ and ‘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. + + The contents of the variable ‘RUNTESTFLAGS’ are passed to the +‘runtest’ invocation. This is considered a “user variable†(*note User +Variables::). If you need to set ‘runtest’ flags in ‘Makefile.am’, you +can use ‘AM_RUNTESTFLAGS’ instead. + + Automake will generate rules to create a local ‘site.exp’ file, +defining various variables detected by ‘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, +‘site.exp’ should not be distributed. + + Still, if the package author has legitimate reasons to extend +‘site.exp’ at ‘make’ time, he can do so by defining the variable +‘EXTRA_DEJAGNU_SITE_CONFIG’; the files listed there will be considered +‘site.exp’ prerequisites, and their content will be appended to it (in +the same order in which they appear in ‘EXTRA_DEJAGNU_SITE_CONFIG’). +Note that files are _not_ distributed by default. + + For more information regarding DejaGnu test suites, see *note +(dejagnu)Top::. + + +File: automake.info, Node: Install Tests, Prev: DejaGnu Tests, Up: Tests + +15.6 Install Tests +================== + +The ‘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 ‘installcheck-local’ rule. + + +File: automake.info, Node: Rebuilding, Next: Options, Prev: Tests, Up: Top + +16 Rebuilding Makefiles +*********************** + +Automake generates rules to automatically rebuild ‘Makefile’s, +‘configure’, and other derived files like ‘Makefile.in’. + + If you are using ‘AM_MAINTAINER_MODE’ in ‘configure.ac’, then these +automatic rebuilding rules are only enabled in maintainer mode. + + Sometimes it is convenient to supplement the rebuild rules for +‘configure’ or ‘config.status’ with additional dependencies. The +variables ‘CONFIGURE_DEPENDENCIES’ and ‘CONFIG_STATUS_DEPENDENCIES’ can +be used to list these extra dependencies. These variables should be +defined in all ‘Makefile’s of the tree (because these two rebuild rules +are output in all them), so it is safer and easier to ‘AC_SUBST’ them +from ‘configure.ac’. For instance, the following statement will cause +‘configure’ to be rerun each time ‘version.sh’ is changed. + + AC_SUBST([CONFIG_STATUS_DEPENDENCIES], ['$(top_srcdir)/version.sh']) + +Note the ‘$(top_srcdir)/’ in the file name. Since this variable is to +be used in all ‘Makefile’s, its value must be sensible at any level in +the build hierarchy. + + Beware not to mistake ‘CONFIGURE_DEPENDENCIES’ for +‘CONFIG_STATUS_DEPENDENCIES’. + + ‘CONFIGURE_DEPENDENCIES’ adds dependencies to the ‘configure’ rule, +whose effect is to run ‘autoconf’. This variable should be seldom used, +because ‘automake’ already tracks ‘m4_include’d files. However it can +be useful when playing tricky games with ‘m4_esyscmd’ or similar +non-recommendable macros with side effects. Be also aware that +interactions of this variable with the *note autom4te cache: +(autoconf)Autom4te Cache. are quite problematic and can cause subtle +breakage, so you might want to disable the cache if you want to use +‘CONFIGURE_DEPENDENCIES’. + + ‘CONFIG_STATUS_DEPENDENCIES’ adds dependencies to the ‘config.status’ +rule, whose effect is to run ‘configure’. This variable should +therefore carry any non-standard source that may be read as a side +effect of running ‘configure’, like ‘version.sh’ in the example above. + + Speaking of ‘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 ‘configure.ac’s may look like: + + AC_INIT + . $srcdir/version.sh + AM_INIT_AUTOMAKE([name], $VERSION_NUMBER) + ... + +Here, ‘version.sh’ is a shell fragment that sets ‘VERSION_NUMBER’. The +problem with this example is that ‘automake’ cannot track dependencies +(listing ‘version.sh’ in ‘CONFIG_STATUS_DEPENDENCIES’, and distributing +this file is up to the user), and that it uses the obsolete form of +‘AC_INIT’ and ‘AM_INIT_AUTOMAKE’. Upgrading to the new syntax is not +straightforward, because shell variables are not allowed in ‘AC_INIT’’s +arguments. We recommend that ‘version.sh’ be replaced by an M4 file +that is included by ‘configure.ac’: + + m4_include([version.m4]) + AC_INIT([name], VERSION_NUMBER) + AM_INIT_AUTOMAKE + ... + +Here ‘version.m4’ could contain something like +‘m4_define([VERSION_NUMBER], [1.2])’. The advantage of this second form +is that ‘automake’ will take care of the dependencies when defining the +rebuild rule, and will also distribute the file automatically. An +inconvenience is that ‘autoconf’ will now be rerun each time the version +number is bumped, when only ‘configure’ had to be rerun in the previous +setup. + + +File: automake.info, Node: Options, Next: Miscellaneous, Prev: Rebuilding, Up: Top + +17 Changing Automake’s Behavior +******************************* + +* Menu: + +* Options generalities:: Semantics of Automake option +* List of Automake options:: A comprehensive list of Automake options + + +File: automake.info, Node: Options generalities, Next: List of Automake options, Up: Options + +17.1 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-‘Makefile’ basis when listed in a +special ‘Makefile’ variable named ‘AUTOMAKE_OPTIONS’. Some of these +options only make sense when specified in the toplevel ‘Makefile.am’ +file. Options are applied globally to all processed ‘Makefile’ files +when listed in the first argument of ‘AM_INIT_AUTOMAKE’ in +‘configure.ac’, and some options which require changes to the +‘configure’ script can only be specified there. These are annotated +below. + + As a general rule, options specified in ‘AUTOMAKE_OPTIONS’ take +precedence over those specified in ‘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 ‘portability’ warnings are disabled by default in +‘foreign’ strictness, an usage like this will end up enabling them: + + AUTOMAKE_OPTIONS = -Wportability foreign + + 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 ‘configure.ac’ contains: + + AM_INIT_AUTOMAKE([-Wportability]) + +and ‘Makefile.am’ contains: + + AUTOMAKE_OPTIONS = foreign + +then ‘portability’ warnings will be _disabled_ in ‘Makefile.am’. + + +File: automake.info, Node: List of Automake options, Prev: Options generalities, Up: Options + +17.2 List of Automake options +============================= + +‘gnits’ +‘gnu’ +‘foreign’ + + Set the strictness as appropriate. The ‘gnits’ option also implies + options ‘readme-alpha’ and ‘check-news’. + +‘check-news’ + Cause ‘make dist’ to fail unless the current version number appears + in the first few lines of the ‘NEWS’ file. + +‘dejagnu’ + Cause ‘dejagnu’-specific rules to be generated. *Note DejaGnu + Tests::. + +‘dist-bzip2’ + Hook ‘dist-bzip2’ to ‘dist’. + +‘dist-lzip’ + Hook ‘dist-lzip’ to ‘dist’. + +‘dist-xz’ + Hook ‘dist-xz’ to ‘dist’. + +‘dist-zip’ + Hook ‘dist-zip’ to ‘dist’. + +‘dist-shar’ + Hook ‘dist-shar’ to ‘dist’. Use of this option is deprecated, as + the ‘shar’ format is obsolescent and problematic. Support for it + will be removed altogether in Automake 2.0. + +‘dist-tarZ’ + Hook ‘dist-tarZ’ to ‘dist’. Use of this option is deprecated, as + the ‘compress’ program is obsolete. Support for it will be removed + altogether in Automake 2.0. + +‘filename-length-max=99’ + Abort if file names longer than 99 characters are found during + ‘make dist’. Such long file names are generally considered not to + be portable in tarballs. See the ‘tar-v7’ and ‘tar-ustar’ options + below. This option should be used in the top-level ‘Makefile.am’ + or as an argument of ‘AM_INIT_AUTOMAKE’ in ‘configure.ac’, it will + be ignored otherwise. It will also be ignored in sub-packages of + nested packages (*note Subpackages::). + +‘info-in-builddir’ + Instruct Automake to place the generated ‘.info’ files in the + ‘builddir’ rather than in the ‘srcdir’. Note that this might make + VPATH builds with some non-GNU make implementations more brittle. + +‘no-define’ + This option is meaningful only when passed as an argument to + ‘AM_INIT_AUTOMAKE’. It will prevent the ‘PACKAGE’ and ‘VERSION’ + variables from being ‘AC_DEFINE’d. But notice that they will + remain defined as shell variables in the generated ‘configure’, and + as make variables in the generated ‘Makefile’; this is deliberate, + and required for backward compatibility. + +‘no-dependencies’ + This is similar to using ‘--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 (*note + Dependencies::). In this case the effect is to effectively disable + automatic dependency tracking. + +‘no-dist’ + Don’t emit any code related to ‘dist’ target. This is useful when + a package has its own method for making distributions. + +‘no-dist-gzip’ + Do not hook ‘dist-gzip’ to ‘dist’. + +‘no-exeext’ + If your ‘Makefile.am’ defines a rule for target ‘foo’, it will + override a rule for a target named ‘foo$(EXEEXT)’. This is + necessary when ‘EXEEXT’ is found to be empty. However, by default + ‘automake’ will generate an error for this use. The ‘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. + +‘no-installinfo’ + The generated ‘Makefile.in’ will not cause info pages to be built + or installed by default. However, ‘info’ and ‘install-info’ + targets will still be available. This option is disallowed at + ‘gnu’ strictness and above. + +‘no-installman’ + The generated ‘Makefile.in’ will not cause man pages to be + installed by default. However, an ‘install-man’ target will still + be available for optional installation. This option is disallowed + at ‘gnu’ strictness and above. + +‘nostdinc’ + This option can be used to disable the standard ‘-I’ options that + are ordinarily automatically provided by Automake. + +‘no-texinfo.tex’ + Don’t require ‘texinfo.tex’, even if there are texinfo files in + this directory. + +‘serial-tests’ + Enable the older serial test suite harness for ‘TESTS’ (*note + Serial Test Harness::, for more information). + +‘parallel-tests’ + Enable test suite harness for ‘TESTS’ that can run tests in + parallel (*note Parallel Test Harness::, for more information). + This option is only kept for backward-compatibility, since the + parallel test harness is the default now. + +‘readme-alpha’ + If this release is an alpha release, and the 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 ‘MAJOR.MINOR.ALPHA’, where each element is a + number; the final period and number should be left off for + non-alpha releases. The second form is ‘MAJOR.MINORALPHA’, where + ALPHA is a letter; it should be omitted for non-alpha releases. + +‘std-options’ + + Make the ‘installcheck’ rule check that installed scripts and + programs support the ‘--help’ and ‘--version’ options. This also + provides a basic check that the program’s run-time dependencies are + satisfied after installation. + + In a few situations, programs (or scripts) have to be exempted from + this test. For instance, ‘false’ (from GNU coreutils) is never + successful, even for ‘--help’ or ‘--version’. You can list such + programs in the variable ‘AM_INSTALLCHECK_STD_OPTIONS_EXEMPT’. + Programs (not scripts) listed in this variable should be suffixed + by ‘$(EXEEXT)’ for the sake of Windows or OS/2. For instance, + suppose we build ‘false’ as a program but ‘true.sh’ as a script, + and that neither of them support ‘--help’ or ‘--version’: + + AUTOMAKE_OPTIONS = std-options + bin_PROGRAMS = false ... + bin_SCRIPTS = true.sh ... + AM_INSTALLCHECK_STD_OPTIONS_EXEMPT = false$(EXEEXT) true.sh + +‘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 ‘subdir/file.cxx’, then the output file would be + ‘subdir/file.o’. + +‘tar-v7’ +‘tar-ustar’ +‘tar-pax’ + + These three mutually exclusive options select the tar format to use + when generating tarballs with ‘make dist’. (The tar file created + is then compressed according to the set of ‘no-dist-gzip’, + ‘dist-bzip2’, ‘dist-lzip’, ‘dist-xz’ and ‘dist-tarZ’ options in + use.) + + These options must be passed as arguments to ‘AM_INIT_AUTOMAKE’ + (*note Macros::) because they can require additional configure + checks. Automake will complain if it sees such options in an + ‘AUTOMAKE_OPTIONS’ variable. + + ‘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 + ‘filename-length-max=99’ option to catch file names too long. + + ‘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 so we can + document this accurately). + + ‘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. + + *Note Controlling the Archive Format: (tar)Formats, for further + discussion about tar formats. + + ‘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 ‘make dist’ will fail. + +VERSION + A version number (e.g., ‘0.30’) can be specified. If Automake is + not newer than the version specified, creation of the ‘Makefile.in’ + will be suppressed. + +‘-WCATEGORY’ or ‘--warnings=CATEGORY’ + These options behave exactly like their command-line counterpart + (*note 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 + ‘AM_INIT_AUTOMAKE([-Wall])’ in your ‘configure.ac’. + + Unrecognized options are diagnosed by ‘automake’. + + If you want an option to apply to all the files in the tree, you can +use the ‘AM_INIT_AUTOMAKE’ macro in ‘configure.ac’. *Note Macros::. + + +File: automake.info, Node: Miscellaneous, Next: Include, Prev: Options, Up: Top + +18 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 + + +File: automake.info, Node: Tags, Next: Suffixes, Up: Miscellaneous + +18.1 Interfacing to ‘etags’ +=========================== + +Automake will generate rules to generate ‘TAGS’ files for use with GNU +Emacs under some circumstances. + + If any C, C++ or Fortran 77 source code or headers are present, then +‘tags’ and ‘TAGS’ rules will be generated for the directory. All files +listed using the ‘_SOURCES’, ‘_HEADERS’, and ‘_LISP’ primaries will be +used to generate tags. Note that generated source files that are not +distributed must be declared in variables like ‘nodist_noinst_HEADERS’ +or ‘nodist_PROG_SOURCES’ or they will be ignored. + + A ‘tags’ rule will be output at the topmost directory of a +multi-directory package. When run from this topmost directory, ‘make +tags’ will generate a ‘TAGS’ file that includes by reference all ‘TAGS’ +files from subdirectories. + + The ‘tags’ rule will also be generated if the variable ‘ETAGS_ARGS’ +is defined. This variable is intended for use in directories that +contain taggable source that ‘etags’ does not understand. The user can +use the ‘ETAGSFLAGS’ to pass additional flags to ‘etags’; +‘AM_ETAGSFLAGS’ is also available for use in ‘Makefile.am’. + + Here is how Automake generates tags for its source, and for nodes in +its Texinfo file: + + ETAGS_ARGS = automake.in --lang=none \ + --regex='/^@node[ \t]+\([^,]+\)/\1/' automake.texi + + If you add file names to ‘ETAGS_ARGS’, you will probably also want to +define ‘TAGS_DEPENDENCIES’. The contents of this variable are added +directly to the dependencies for the ‘tags’ rule. + + Automake also generates a ‘ctags’ rule that can be used to build +‘vi’-style ‘tags’ files. The variable ‘CTAGS’ is the name of the +program to invoke (by default ‘ctags’); ‘CTAGSFLAGS’ can be used by the +user to pass additional flags, and ‘AM_CTAGSFLAGS’ can be used by the +‘Makefile.am’. + + Automake will also generate an ‘ID’ rule that will run ‘mkid’ on the +source. This is only supported on a directory-by-directory basis. + + Similarly, the ‘cscope’ rule will create a list of all the source +files in the tree and run ‘cscope’ to build an inverted index database. +The variable ‘CSCOPE’ is the name of the program to invoke (by default +‘cscope’); ‘CSCOPEFLAGS’ and ‘CSCOPE_ARGS’ can be used by the user to +pass additional flags and file names respectively, while +‘AM_CSCOPEFLAGS’ can be used by the ‘Makefile.am’. Note that, +currently, the Automake-provided ‘cscope’ support, when used in a VPATH +build, might not work well with non-GNU make implementations (especially +with make implementations performing *note VPATH rewrites: +(autoconf)Automatic Rule Rewriting.). + + Finally, Automake also emits rules to support the GNU Global Tags +program (http://www.gnu.org/software/global/). The ‘GTAGS’ rule runs +Global Tags and puts the result in the top build directory. The +variable ‘GTAGS_ARGS’ holds arguments that are passed to ‘gtags’. + + +File: automake.info, Node: Suffixes, Prev: Tags, Up: Miscellaneous + +18.2 Handling new file extensions +================================= + +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 ‘.foo’ +files to ‘.o’ files. You would simply define a suffix rule for your +language: + + .foo.o: + foocc -c -o $@ $< + + Then you could directly use a ‘.foo’ file in a ‘_SOURCES’ variable +and expect the correct results: + + bin_PROGRAMS = doit + doit_SOURCES = doit.foo + + 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 ‘SUFFIXES’ variable *before* you define your implicit +rule. + + For instance, the following definition prevents Automake from +misinterpreting the ‘.idlC.cpp:’ rule as an attempt to transform ‘.idlC’ +files into ‘.cpp’ files. + + SUFFIXES = .idl C.cpp + .idlC.cpp: + # whatever + + As you may have noted, the ‘SUFFIXES’ variable behaves like the +‘.SUFFIXES’ special target of ‘make’. You should not touch ‘.SUFFIXES’ +yourself, but use ‘SUFFIXES’ instead and let Automake generate the +suffix list for ‘.SUFFIXES’. Any given ‘SUFFIXES’ go at the start of +the generated suffixes list, followed by Automake generated suffixes not +already in the list. + + +File: automake.info, Node: Include, Next: Conditionals, Prev: Miscellaneous, Up: Top + +19 Include +********** + +Automake supports an ‘include’ directive that can be used to include +other ‘Makefile’ fragments when ‘automake’ is run. Note that these +fragments are read and interpreted by ‘automake’, not by ‘make’. As +with conditionals, ‘make’ has no idea that ‘include’ is in use. + + There are two forms of ‘include’: + +‘include $(srcdir)/file’ + Include a fragment that is found relative to the current source + directory. + +‘include $(top_srcdir)/file’ + Include a fragment that is found relative to the top source + directory. + + 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 ‘Makefile.in’. + + Inside a fragment, the construct ‘%reldir%’ is replaced with the +directory of the fragment relative to the base ‘Makefile.am’. +Similarly, ‘%canon_reldir%’ is replaced with the canonicalized (*note +Canonicalization::) form of ‘%reldir%’. As a convenience, ‘%D%’ is a +synonym for ‘%reldir%’, and ‘%C%’ is a synonym for ‘%canon_reldir%’. + + A special feature is that if the fragment is in the same directory as +the base ‘Makefile.am’ (i.e., ‘%reldir%’ is ‘.’), then ‘%reldir%’ and +‘%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: + + bin_PROGRAMS += %reldir%/mumble + %canon_reldir%_mumble_SOURCES = %reldir%/one.c + + +File: automake.info, Node: Conditionals, Next: Silencing Make, Prev: Include, Up: Top + +20 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 ‘configure’ +script, and affect the translation from ‘Makefile.in’ to ‘Makefile’. +They are based on options passed to ‘configure’ and on results that +‘configure’ has discovered about the host system. GNU Make conditionals +are checked at ‘make’ time, and are based on variables passed to the +make program or defined in the ‘Makefile’. + + Automake conditionals will work with any make program. + +* Menu: + +* Usage of Conditionals:: Declaring conditional content +* Limits of Conditionals:: Enclosing complete statements + + +File: automake.info, Node: Usage of Conditionals, Next: Limits of Conditionals, Up: Conditionals + +20.1 Usage of Conditionals +========================== + +Before using a conditional, you must define it by using ‘AM_CONDITIONAL’ +in the ‘configure.ac’ file (*note Macros::). + + -- Macro: AM_CONDITIONAL (CONDITIONAL, CONDITION) + The conditional name, CONDITIONAL, should be a simple string + starting with a letter and containing only letters, digits, and + underscores. It must be different from ‘TRUE’ and ‘FALSE’ that are + reserved by Automake. + + The shell CONDITION (suitable for use in a shell ‘if’ statement) is + evaluated when ‘configure’ is run. Note that you must arrange for + _every_ ‘AM_CONDITIONAL’ to be invoked every time ‘configure’ is + run. If ‘AM_CONDITIONAL’ is run conditionally (e.g., in a shell + ‘if’ statement), then the result will confuse ‘automake’. + + Conditionals typically depend upon options that the user provides to +the ‘configure’ script. Here is an example of how to write a +conditional that is true if the user uses the ‘--enable-debug’ option. + + 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]) + + Here is an example of how to use that conditional in ‘Makefile.am’: + + if DEBUG + DBG = debug + else + DBG = + endif + noinst_PROGRAMS = $(DBG) + + This trivial example could also be handled using ‘EXTRA_PROGRAMS’ +(*note Conditional Programs::). + + You may only test a single variable in an ‘if’ statement, possibly +negated using ‘!’. The ‘else’ statement may be omitted. Conditionals +may be nested to any depth. You may specify an argument to ‘else’ in +which case it must be the negation of the condition used for the current +‘if’. Similarly you may specify the condition that is closed on the +‘endif’ line: + + if DEBUG + DBG = debug + else !DEBUG + DBG = + endif !DEBUG + +Unbalanced conditions are errors. The ‘if’, ‘else’, and ‘endif’ +statements should not be indented, i.e., start on column one. + + The ‘else’ branch of the above two examples could be omitted, since +assigning the empty string to an otherwise undefined variable makes no +difference. + + In order to allow access to the condition registered by +‘AM_CONDITIONAL’ inside ‘configure.ac’, and to allow conditional +‘AC_CONFIG_FILES’, ‘AM_COND_IF’ may be used: + + -- Macro: AM_COND_IF (CONDITIONAL, [IF-TRUE], [IF-FALSE]) + If CONDITIONAL is fulfilled, execute IF-TRUE, otherwise execute + IF-FALSE. If either branch contains ‘AC_CONFIG_FILES’, it will + cause ‘automake’ to output the rules for the respective files only + for the given condition. + + ‘AM_COND_IF’ macros may be nested when m4 quotation is used properly +(*note (autoconf)M4 Quotation::). + + Here is an example of how to define a conditional config file: + + AM_CONDITIONAL([SHELL_WRAPPER], [test "x$with_wrapper" = xtrue]) + AM_COND_IF([SHELL_WRAPPER], + [AC_CONFIG_FILES([wrapper:wrapper.in])]) + + +File: automake.info, Node: Limits of Conditionals, Prev: Usage of Conditionals, Up: Conditionals + +20.2 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: + + # This syntax is not understood by Automake + AM_CPPFLAGS = \ + -DFEATURE_A \ + if WANT_DEBUG + -DDEBUG \ + endif + -DFEATURE_B + + However the intended definition of ‘AM_CPPFLAGS’ can be achieved with + + if WANT_DEBUG + DEBUGFLAGS = -DDEBUG + endif + AM_CPPFLAGS = -DFEATURE_A $(DEBUGFLAGS) -DFEATURE_B + +or + + AM_CPPFLAGS = -DFEATURE_A + if WANT_DEBUG + AM_CPPFLAGS += -DDEBUG + endif + AM_CPPFLAGS += -DFEATURE_B + + More details and examples of conditionals are described alongside +various Automake features in this manual (*note Conditional +Subdirectories::, *note Conditional Sources::, *note Conditional +Programs::, *note Conditional Libtool Libraries::, *note Conditional +Libtool Sources::). + + +File: automake.info, Node: Silencing Make, Next: Gnits, Prev: Conditionals, Up: Top + +21 Silencing ‘make’ +******************* + +* 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 + + +File: automake.info, Node: Make verbosity, Next: Tricks For Silencing Make, Up: Silencing Make + +21.1 Make is verbose by default +=============================== + +Normally, when executing the set of rules associated with a target, +‘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(1): + + 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. + + In fact, while such verbosity of ‘make’ can theoretically be useful +to track bugs and understand reasons of failures right away, it can also +hide warning and error messages from ‘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 ‘make’ ends up being mostly noise that hampers +the easy detection of potentially important warning messages. + + ---------- Footnotes ---------- + + (1) See also . + + +File: automake.info, Node: Tricks For Silencing Make, Next: Automake Silent Rules, Prev: Make verbosity, Up: Silencing Make + +21.2 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 (*note Automake Silent Rules::) we’ll see how Automake can help +in this respect, providing more elaborate and flexible idioms. + + • ‘make -s’ + + This simply causes ‘make’ not to print _any_ rule before executing + it. + + The ‘-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 ‘-s’ flag is used, the ‘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! + + • ‘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 ‘make’ two times in a row might hide errors + (especially intermittent ones), or subtly change the expected + semantic of the ‘make’ calls — things these which can clearly make + debugging and error assessment very difficult. + + • ‘make --no-print-directory’ + + This is GNU ‘make’ specific. When called with the + ‘--no-print-directory’ option, GNU ‘make’ will disable printing of + the working directory by invoked sub-‘make’s (the well-known + “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 ‘make’ recursion. + + As an aside, notice that the ‘--no-print-directory’ option is + automatically activated if the ‘-s’ flag is used. + + +File: automake.info, Node: Automake Silent Rules, Prev: Tricks For Silencing Make, Up: Silencing Make + +21.3 How Automake can help in silencing make +============================================ + +The tricks and idioms for silencing ‘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 ‘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 ‘make’ output (where silent rules +are disabled) and one with silent rules enabled: + + % cat Makefile.am + bin_PROGRAMS = foo + foo_SOURCES = main.c func.c + % cat main.c + int main (void) { return func (); } /* func used undeclared */ + % cat func.c + int func (void) { int i; return i; } /* i used uninitialized */ + + The make output is by default very verbose. This causes warnings + from the compiler to be somewhat hidden, and not immediate to spot. + % 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 + + Clean up, so that we we can rebuild everything from scratch. + % make clean + test -z "foo" || rm -f foo + rm -f *.o + + Silent rules enabled: the output is minimal but informative. In + particular, the warnings from the compiler stick out very clearly. + % 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 + + Also, in projects using ‘libtool’, the use of silent rules can +automatically enable the ‘libtool’’s ‘--silent’ option: + + % cat Makefile.am + lib_LTLIBRARIES = libx.la + + % 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 + ... + + % make V=0 + CC libx.lo + CCLD libx.la + + For Automake-generated ‘Makefile’s, the user may influence the +verbosity at ‘configure’ run time as well as at ‘make’ run time: + + • Passing ‘--enable-silent-rules’ to ‘configure’ will cause build + rules to be less verbose; the option ‘--disable-silent-rules’ will + cause normal verbose output. + • At ‘make’ run time, the default chosen at ‘configure’ time may be + overridden: ‘make V=1’ will produce verbose output, ‘make V=0’ less + verbose output. + + Note that silent rules are _disabled_ by default; the user must +enable them explicitly at either ‘configure’ run time or at ‘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 ‘AM_SILENT_RULES([yes])’ in ‘configure.ac’. + + Users who prefer to have silent rules enabled by default can edit +their ‘config.site’ file to make the variable ‘enable_silent_rules’ +default to ‘yes’. This should still allow disabling silent rules at +‘configure’ time and at ‘make’ time. + + For portability to different ‘make’ implementations, package authors +are advised to not set the variable ‘V’ inside the ‘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 ‘$(VAR1$(V))’, a ‘Makefile’ +feature that is not required by POSIX 2008 but is widely supported in +practice. On the rare ‘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. + + To extend the silent mode to your own rules, you have few choices: + + • You can use the predefined variable ‘AM_V_GEN’ as a prefix to + commands that should output a status line in silent mode, and + ‘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. + + • You can silence a recipe unconditionally with ‘@’, and then use the + predefined variable ‘AM_V_P’ to know whether make is being run in + silent or verbose mode, adjust the verbose information your recipe + displays accordingly: + + generate-headers: + ... [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 + + • 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 ‘AM_V_GEN’: + + 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 $@ + + As a final note, observe that, even when silent rules are enabled, +the ‘--no-print-directory’ option is still required with GNU ‘make’ if +the “Entering/Leaving directory ...†messages are to be disabled. + + +File: automake.info, Node: Gnits, Next: Not Enough, Prev: Silencing Make, Up: Top + +22 The effect of ‘--gnu’ and ‘--gnits’ +************************************** + +The ‘--gnu’ option (or ‘gnu’ in the ‘AUTOMAKE_OPTIONS’ variable) causes +‘automake’ to check the following: + + • The files ‘INSTALL’, ‘NEWS’, ‘README’, ‘AUTHORS’, and ‘ChangeLog’, + plus one of ‘COPYING.LIB’, ‘COPYING.LESSER’ or ‘COPYING’, are + required at the topmost directory of the package. + + If the ‘--add-missing’ option is given, ‘automake’ will add a + generic version of the ‘INSTALL’ file as well as the ‘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, + ). However, an existing + ‘COPYING’ file will never be overwritten by ‘automake’. + + • The options ‘no-installman’ and ‘no-installinfo’ are prohibited. + + 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, ‘--gnu’ can require certain non-standard +GNU programs to exist for use by various maintainer-only rules; for +instance, in the future ‘pathchk’ might be required for ‘make dist’. + + The ‘--gnits’ option does everything that ‘--gnu’ does, and checks +the following as well: + + • ‘make installcheck’ will check to make sure that the ‘--help’ and + ‘--version’ really print a usage message and a version string, + respectively. This is the ‘std-options’ option (*note Options::). + + • ‘make dist’ will check to make sure the ‘NEWS’ file has been + updated to the current version. + + • ‘VERSION’ is checked to make sure its format complies with Gnits + standards. + + • If ‘VERSION’ indicates that this is an alpha release, and the file + ‘README-alpha’ appears in the topmost directory of a package, then + it is included in the distribution. This is done in ‘--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 ‘README-alpha’ should + be included. + + • The file ‘THANKS’ is required. + + +File: automake.info, Node: Not Enough, Next: Distributing, Prev: Gnits, Up: Top + +23 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 ‘Makefile’s. + +* Menu: + +* Extending:: Adding new rules or overriding existing ones. +* Third-Party Makefiles:: Integrating Non-Automake ‘Makefile’s. + + +File: automake.info, Node: Extending, Next: Third-Party Makefiles, Up: Not Enough + +23.1 Extending Automake Rules +============================= + +With some minor exceptions (for example ‘_PROGRAMS’ variables, ‘TESTS’, +or ‘XFAIL_TESTS’) being rewritten to append ‘$(EXEEXT)’), the contents +of a ‘Makefile.am’ is copied to ‘Makefile.in’ verbatim. + + These copying semantics mean that many problems can be worked around +by simply adding some ‘make’ variables and rules to ‘Makefile.am’. +Automake will ignore these additions. + + Since a ‘Makefile.in’ is built from data gathered from three +different places (‘Makefile.am’, ‘configure.ac’, and ‘automake’ itself), +it is possible to have conflicting definitions of rules or variables. +When building ‘Makefile.in’ the following priorities are respected by +‘automake’ to ensure the user always has the last word: + + • User defined variables in ‘Makefile.am’ have priority over + variables ‘AC_SUBST’ed from ‘configure.ac’, and ‘AC_SUBST’ed + variables have priority over ‘automake’-defined variables. + • As far as rules are concerned, a user-defined rule overrides any + ‘automake’-defined rule for the same target. + + 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 ‘-Woverride’ option (*note 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 ‘automake’-defined target +without redefining the entire rule. + + However, various useful targets have a ‘-local’ version you can +specify in your ‘Makefile.am’. Automake will supplement the standard +target with these user-supplied targets. + + The targets that support a local version are ‘all’, ‘info’, ‘dvi’, +‘ps’, ‘pdf’, ‘html’, ‘check’, ‘install-data’, ‘install-dvi’, +‘install-exec’, ‘install-html’, ‘install-info’, ‘install-pdf’, +‘install-ps’, ‘uninstall’, ‘installdirs’, ‘installcheck’ and the various +‘clean’ targets (‘mostlyclean’, ‘clean’, ‘distclean’, and +‘maintainer-clean’). + + Note that there are no ‘uninstall-exec-local’ or +‘uninstall-data-local’ targets; just use ‘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 ‘make +clean’ (*note Clean::). + + clean-local: + -rm -rf testSubDir + + You may be tempted to use ‘install-data-local’ to install a file to +some hard-coded location, but you should avoid this (*note Hard-Coded +Install Paths::). + + With the ‘-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. + + In contrast, some rules also have a way to run another rule, called a +“hookâ€; hooks are always executed after the main rule’s work is done. +The hook is named after the principal target, with ‘-hook’ appended. +The targets allowing hooks are ‘install-data’, ‘install-exec’, +‘uninstall’, ‘dist’, and ‘distcheck’. + + For instance, here is how to create a hard link to an installed +program: + + install-exec-hook: + ln $(DESTDIR)$(bindir)/program$(EXEEXT) \ + $(DESTDIR)$(bindir)/proglink$(EXEEXT) + + Although cheaper and more portable than symbolic links, hard links +will not work everywhere (for instance, OS/2 does not have ‘ln’). +Ideally you should fall back to ‘cp -p’ when ‘ln’ does not work. An +easy way, if symbolic links are acceptable to you, is to add +‘AC_PROG_LN_S’ to ‘configure.ac’ (*note Particular Program Checks: +(autoconf)Particular Programs.) and use ‘$(LN_S)’ in ‘Makefile.am’. + + For instance, here is how you could install a versioned copy of a +program using ‘$(LN_S)’: + + install-exec-hook: + cd $(DESTDIR)$(bindir) && \ + mv -f prog$(EXEEXT) prog-$(VERSION)$(EXEEXT) && \ + $(LN_S) prog-$(VERSION)$(EXEEXT) prog$(EXEEXT) + + Note that we rename the program so that a new version will erase the +symbolic link, not the real binary. Also we ‘cd’ into the destination +directory in order to create relative links. + + When writing ‘install-exec-hook’ or ‘install-data-hook’, please bear +in mind that the exec/data distinction is based on the installation +directory, not on the primary used (*note The Two Parts of Install::). +So a ‘foo_SCRIPTS’ will be installed by ‘install-data’, and a +‘barexec_SCRIPTS’ will be installed by ‘install-exec’. You should +define your hooks consequently. + + +File: automake.info, Node: Third-Party Makefiles, Prev: Extending, Up: Not Enough + +23.2 Third-Party ‘Makefile’s +============================ + +In most projects all ‘Makefile’s are generated by Automake. In some +cases, however, projects need to embed subdirectories with handwritten +‘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 ‘SUBDIRS’ or +‘DIST_SUBDIRS’ provided each of these directories has a ‘Makefile’ that +recognizes all the following recursive targets. + + 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 ‘Makefile’s support them. + +‘all’ + Compile the entire package. This is the default target in + Automake-generated ‘Makefile’s, but it does not need to be the + default in third-party ‘Makefile’s. + +‘distdir’ + Copy files to distribute into ‘$(distdir)’, before a tarball is + constructed. Of course this target is not required if the + ‘no-dist’ option (*note Options::) is used. + + The variables ‘$(top_distdir)’ and ‘$(distdir)’ (*note The dist + Hook::) will be passed from the outer package to the subpackage + when the ‘distdir’ target is invoked. These two variables have + been adjusted for the directory that is being recursed into, so + they are ready to use. + +‘install’ +‘install-data’ +‘install-exec’ +‘uninstall’ + Install or uninstall files (*note Install::). + +‘install-dvi’ +‘install-html’ +‘install-info’ +‘install-ps’ +‘install-pdf’ + Install only some specific documentation format (*note Texinfo::). + +‘installdirs’ + Create install directories, but do not install any files. + +‘check’ +‘installcheck’ + Check the package (*note Tests::). + +‘mostlyclean’ +‘clean’ +‘distclean’ +‘maintainer-clean’ + Cleaning rules (*note Clean::). + +‘dvi’ +‘pdf’ +‘ps’ +‘info’ +‘html’ + Build the documentation in various formats (*note Texinfo::). + +‘tags’ +‘ctags’ + Build ‘TAGS’ and ‘CTAGS’ (*note Tags::). + + If you have ever used Gettext in a project, this is a good example of +how third-party ‘Makefile’s can be used with Automake. The ‘Makefile’s +‘gettextize’ puts in the ‘po/’ and ‘intl/’ directories are handwritten +‘Makefile’s that implement all of these targets. That way they can be +added to ‘SUBDIRS’ in Automake packages. + + Directories that are only listed in ‘DIST_SUBDIRS’ but not in +‘SUBDIRS’ need only the ‘distclean’, ‘maintainer-clean’, and ‘distdir’ +rules (*note 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 ‘Makefile’ as follows: + + EMPTY_AUTOMAKE_TARGETS = dvi pdf ps info html tags ctags + .PHONY: $(EMPTY_AUTOMAKE_TARGETS) + $(EMPTY_AUTOMAKE_TARGETS): + + Another aspect of integrating third-party build systems is whether +they support VPATH builds (*note VPATH Builds::). Obviously if the +subpackage does not support VPATH builds the whole package will not +support VPATH builds. This in turns means that ‘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 ‘make +distcheck’). Other people may prefer to revamp the existing ‘Makefile’s +to support VPATH. Doing so does not necessarily require Automake, only +Autoconf is needed (*note Build Directories: (autoconf)Build +Directories.). The necessary substitutions: ‘@srcdir@’, ‘@top_srcdir@’, +and ‘@top_builddir@’ are defined by ‘configure’ when it processes a +‘Makefile’ (*note Preset Output Variables: (autoconf)Preset Output +Variables.), they are not computed by the Makefile like the +aforementioned ‘$(distdir)’ and ‘$(top_distdir)’ variables. + + It is sometimes inconvenient to modify a third-party ‘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. + + Here are two other ideas. If GNU make is assumed, one possibility is +to add to that subdirectory a ‘GNUmakefile’ that defines the required +targets and includes the third-party ‘Makefile’. For this to work in +VPATH builds, ‘GNUmakefile’ must lie in the build directory; the easiest +way to do this is to write a ‘GNUmakefile.in’ instead, and have it +processed with ‘AC_CONFIG_FILES’ from the outer package. For example if +we assume ‘Makefile’ defines all targets except the documentation +targets, and that the ‘check’ target is actually called ‘test’, we could +write ‘GNUmakefile’ (or ‘GNUmakefile.in’) like this: + + # 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 + + A similar idea that does not use ‘include’ is to write a proxy +‘Makefile’ that dispatches rules to the real ‘Makefile’, either with +‘$(MAKE) -f Makefile.real $(AM_MAKEFLAGS) target’ (if it’s OK to rename +the original ‘Makefile’) or with ‘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 ‘Makefile’ can be generated +with Automake. All we need are ‘-local’ targets (*note 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 ‘Makefile.am’: + + 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 ... + + Pushing this idea to the extreme, it is also possible to ignore the +subproject build system and build everything from this proxy +‘Makefile.am’. This might sound very sensible if you need VPATH builds +but the subproject does not support them. + + +File: automake.info, Node: Distributing, Next: API Versioning, Prev: Not Enough, Up: Top + +24 Distributing ‘Makefile.in’s +****************************** + +Automake places no restrictions on the distribution of the resulting +‘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 +‘--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. + + +File: automake.info, Node: API Versioning, Next: Upgrading, Prev: Distributing, Up: Top + +25 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 ‘$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 +‘$prefix’, and can select an arbitrary Automake version by running +‘automake-1.6’ or ‘automake-1.7’ without juggling with ‘$PATH’. +Furthermore, ‘Makefile’’s generated by Automake 1.6 will use +‘automake-1.6’ explicitly in their rebuild rules. + + The number ‘1.6’ in ‘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 +‘configure.ac’: + + AM_INIT_AUTOMAKE([1.6.1]) dnl Require Automake 1.6.1 or better. + +or, in a particular ‘Makefile.am’: + + AUTOMAKE_OPTIONS = 1.6.1 # Require Automake 1.6.1 or better. + +Automake will print an error message if its version is older than the +requested version. + +What is in the API +================== + +Automake’s programming interface is not easy to define. Basically it +should include at least all *documented* variables and targets that a +‘Makefile.am’ author can use, any behavior associated with them (e.g., +the places where ‘-hook’’s are run), the command line interface of +‘automake’ and ‘aclocal’, ... + +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 + and try to get it documented and exercised by the +test-suite. + + +File: automake.info, Node: Upgrading, Next: FAQ, Prev: API Versioning, Up: Top + +26 Upgrading a Package to a Newer Automake Version +************************************************** + +Automake maintains three kind of files in a package. + + • ‘aclocal.m4’ + • ‘Makefile.in’s + • auxiliary tools like ‘install-sh’ or ‘py-compile’ + + ‘aclocal.m4’ is generated by ‘aclocal’ and contains some +Automake-supplied M4 macros. Auxiliary tools are installed by ‘automake +--add-missing’ when needed. ‘Makefile.in’s are built from ‘Makefile.am’ +by ‘automake’, and rely on the definitions of the M4 macros put in +‘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 + + aclocal # with any option needed (such a -I m4) + autoconf + automake --add-missing --force-missing + +or more conveniently: + + autoreconf -vfi + + The use of ‘--force-missing’ ensures that auxiliary tools will be +overridden by new versions (*note 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 +‘Makefile.in’ and the supporting M4 macros copied to ‘aclocal.m4’. + + Presently ‘automake’ is able to diagnose situations where +‘aclocal.m4’ has been generated with another version of ‘aclocal’. +However it never checks whether auxiliary scripts are up-to-date. In +other words, ‘automake’ will tell you when ‘aclocal’ needs to be rerun, +but it will never diagnose a missing ‘--force-missing’. + + Before upgrading to a new major release, it is a good idea to read +the file ‘NEWS’. This file lists all changes between releases: new +features, obsolete constructs, known incompatibilities, and workarounds. + + +File: automake.info, Node: FAQ, Next: Copying This Manual, Prev: Upgrading, Up: Top + +27 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 + + +File: automake.info, Node: CVS, Next: maintainer-mode, Up: FAQ + +27.1 CVS and generated files +============================ + +Background: distributed generated Files +--------------------------------------- + +Packages made with Autoconf and Automake ship with some generated files +like ‘configure’ or ‘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 ‘Makefile’s to rebuild these files. For +instance, ‘make’ will run ‘autoconf’ to rebuild ‘configure’ whenever +‘configure.ac’ is changed. This makes development safer by ensuring a +‘configure’ is never out-of-date with respect to ‘configure.ac’. + + As generated files shipped in packages are up-to-date, and because +‘tar’ preserves times-tamps, these rebuild rules are not triggered when +a user unpacks and builds a package. + +Background: CVS and Timestamps +------------------------------ + +Unless you use CVS keywords (in which case files must be updated at +commit time), CVS preserves timestamp during ‘cvs commit’ and ‘cvs +import -d’ operations. + + When you check out a file using ‘cvs checkout’ its timestamp is set +to that of the revision that is being checked out. + + However, during ‘cvs update’, files will have the date of the update, +not the original timestamp of this revision. This is meant to make sure +that ‘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, +‘configure.ac’ will appear newer than ‘configure’ after a ‘cvs update’ +that updates both files, even if ‘configure’ was newer than +‘configure.ac’ when it was checked in. Calling ‘make’ will then trigger +a spurious rebuild of ‘configure’. + +Living with CVS in Autoconfiscated Projects +------------------------------------------- + +There are basically two clans amongst maintainers: those who keep all +distributed files under CVS, including generated files, and those who +keep generated files _out_ of CVS. + +All Files in CVS +................ + + • The CVS repository contains all distributed files so you know + exactly what is distributed, and you can checkout any prior version + entirely. + + • Maintainers can see how generated files evolve (for instance, you + can see what happens to your ‘Makefile.in’s when you upgrade + Automake and make sure they look OK). + + • Users do not need the autotools to build a checkout of the project, + it works just like a released tarball. + + • If users use ‘cvs update’ to update their copy, instead of ‘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 ‘autoconf’ or ‘automake’. + + Calls to such tools are all wrapped into a call to the ‘missing’ + script discussed later (*note 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 ‘cvs + update’ or a ‘git checkout’, to prevent spurious rebuilds. In case + of a project committing the Autotools-generated files, as well as + the generated ‘.info’ files, such script might look something like + this: + + #!/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 + + • 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: + + • 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.) + • Or people use a script to fix the timestamp after a checkout + (the GCC folks have such a script). + • Or ‘configure.ac’ uses ‘AM_MAINTAINER_MODE’, which will + disable all of these rebuild rules by default. This is + further discussed in *note maintainer-mode::. + + • 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 ‘Makefile.am’ and + has rebuilt ‘Makefile.in’, and then decides to do a last-minute + change to ‘Makefile.am’ right before checking in both files + (without rebuilding ‘Makefile.in’ to account for the change). + + This last change to ‘Makefile.am’ makes the copy of ‘Makefile.in’ + out-of-date. Since CVS processes files alphabetically, when + another developer ‘cvs update’s his or her tree, ‘Makefile.in’ will + happen to be newer than ‘Makefile.am’. This other developer will + not see that ‘Makefile.in’ is out-of-date. + +Generated Files out of CVS +.......................... + +One way to get CVS and ‘make’ working peacefully is to never store +generated files in CVS, i.e., do not CVS-control files that are +‘Makefile’ targets (also called _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 +‘Makefile.am’/‘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. + +Third-party Files +----------------- + +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 ‘gettextize’ and +‘autopoint’ (from Gettext) or ‘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 *note CVS Issues: (gettext)CVS +Issues. + + +File: automake.info, Node: maintainer-mode, Next: Wildcards, Prev: CVS, Up: FAQ + +27.2 ‘missing’ and ‘AM_MAINTAINER_MODE’ +======================================= + +‘missing’ +--------- + +The ‘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 ‘autoconf’, ‘automake’, ‘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 ‘configure’. + + However, if for some reason a rebuild rule is triggered and involves +a missing tool, ‘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 ‘makeinfo’ or ‘bison’). This is more helpful and +user-friendly than just having the rebuild rules spewing out a terse +error message like ‘sh: TOOL: command not found’. Similarly, ‘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, ‘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 ‘AM_MAINTAINER_MODE’ advocates. + +‘AM_MAINTAINER_MODE’ +-------------------- + +‘AM_MAINTAINER_MODE’ allows you to choose whether the so called "rebuild +rules" should be enabled or disabled. With +‘AM_MAINTAINER_MODE([enable])’, they are enabled by default, otherwise +they are disabled by default. In the latter case, if you have +‘AM_MAINTAINER_MODE’ in ‘configure.ac’, and run ‘./configure && make’, +then ‘make’ will *never* attempt to rebuild ‘configure’, ‘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 +‘--enable-maintainer-mode’ or ‘--disable-maintainer-mode’ to +‘configure’. + + People use ‘AM_MAINTAINER_MODE’ either because they do not want their +users (or themselves) annoyed by timestamps lossage (*note CVS::), or +because they simply can’t stand the rebuild rules and prefer running +maintainer tools explicitly. + + ‘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çois Pinard pointed out several arguments +against this ‘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 ‘--enable-maintainer-mode’ suggests), +on the contrary. If one user has to modify a ‘Makefile.am’, then either +‘Makefile.in’ should be updated or a warning should be output (this is +what Automake uses ‘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 ‘AM_MAINTAINER_MODE’). + + Jim Meyering, the inventor of the ‘AM_MAINTAINER_MODE’ macro was +swayed by François’s arguments, and got rid of ‘AM_MAINTAINER_MODE’ in +all of his packages. + + Still many people continue to use ‘AM_MAINTAINER_MODE’, because it +helps them working on projects where all files are kept under version +control, and because ‘missing’ isn’t enough if you have the wrong +version of the tools. + + +File: automake.info, Node: Wildcards, Next: Limitations on File Names, Prev: maintainer-mode, Up: FAQ + +27.3 Why doesn’t Automake support wildcards? +============================================ + +Developers are lazy. They would often like to use wildcards in +‘Makefile.am’s, so that they would not need to remember to update +‘Makefile.am’s every time they add, delete, or rename a file. + + There are several objections to this: + • When using CVS (or similar) developers need to remember they have + to run ‘cvs add’ or ‘cvs rm’ anyway. Updating ‘Makefile.am’ + accordingly quickly becomes a reflex. + + Conversely, if your application doesn’t compile because you forgot + to add a file in ‘Makefile.am’, it will help you remember to ‘cvs + add’ it. + + • 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. + + • 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 ‘make dist’ successfully, + even though a file is missing. By listing files, ‘make dist’ + _will_ complain. + + • Wildcards are not portable to some non-GNU ‘make’ implementations, + e.g., NetBSD ‘make’ will not expand globs such as ‘*’ in + prerequisites of a target. + + • Finally, it’s really hard to _forget_ to add a file to + ‘Makefile.am’: files that are not listed in ‘Makefile.am’ are not + compiled or installed, so you can’t even test them. + + 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 ‘$(wildcard ...)’ works with GNU ‘make’, it is not portable +to other ‘make’ implementations. + + The only way Automake could support ‘$(wildcard ...)’ is by expanding +‘$(wildcard ...)’ when ‘automake’ is run. The resulting ‘Makefile.in’s +would be portable since they would list all files and not use +‘$(wildcard ...)’. However that means developers would need to remember +to run ‘automake’ each time they add, delete, or rename files. + + Compared to editing ‘Makefile.am’, this is a very small gain. Sure, +it’s easier and faster to type ‘automake; make’ than to type ‘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 ‘Makefile.am’ or in separate ‘Makefile’ fragments. + + Even if you don’t care about portability, and are tempted to use +‘$(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 +‘$(wildcard ...)’, you cannot use it in these places. ‘$(wildcard ...)’ +is a black box comparable to ‘AC_SUBST’ed variables as far Automake is +concerned. + + You can get warnings about ‘$(wildcard ...’) constructs using the +‘-Wportability’ flag. + + +File: automake.info, Node: Limitations on File Names, Next: Errors with distclean, Prev: Wildcards, Up: FAQ + +27.4 Limitations on File Names +============================== + +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 ‘/’ 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, ‘_’, ‘.’, and ‘-’. File names +consist of components separated by ‘/’. File name components cannot +begin with ‘-’. + + 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 ‘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: + + newline " # $ ' ` + + should not appear in the names of install directories. For example, +the operand of ‘configure’’s ‘--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: + + & @ \ + + For example, the full name of the directory containing the source +files should not contain these characters. + + Source and installation file names like ‘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., ‘makefile’ and +‘Makefile’). Nowadays it is no longer worth worrying about the 8.3 +limits of DOS file systems. + + +File: automake.info, Node: Errors with distclean, Next: Flag Variables Ordering, Prev: Limitations on File Names, Up: FAQ + +27.5 Errors with distclean +========================== + +This is a diagnostic you might encounter while running ‘make distcheck’. + + As explained in *note Checking the Distribution::, ‘make distcheck’ +attempts to build and check your package for errors like this one. + + ‘make distcheck’ will perform a ‘VPATH’ build of your package (*note +VPATH Builds::), and then call ‘make distclean’. Files left in the +build directory after ‘make distclean’ has run are listed after this +error. + + This diagnostic really covers two kinds of errors: + + • files that are forgotten by distclean; + • distributed files that are erroneously rebuilt. + + The former left-over files are not distributed, so the fix is to mark +them for cleaning (*note 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 ‘help2man’. GNU ‘help2man’ +produces simple manual pages from the ‘--help’ and ‘--version’ output of +other commands (*note Overview: (help2man)Top.). Because we don’t want +to force our users to install ‘help2man’, we decide to distribute the +generated man page using the following setup. + + # 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) + + This will effectively distribute the man page. However, ‘make +distcheck’ will fail with: + + ERROR: files left in build directory after distclean: + ./foo.1 + + Why was ‘foo.1’ rebuilt? Because although distributed, ‘foo.1’ +depends on a non-distributed built file: ‘foo$(EXEEXT)’. ‘foo$(EXEEXT)’ +is built by the user, so it will always appear to be newer than the +distributed ‘foo.1’. + + ‘make distcheck’ caught an inconsistency in our package. Our intent +was to distribute ‘foo.1’ so users do not need to install ‘help2man’, +however since this rule causes this file to be always rebuilt, users +_do_ need ‘help2man’. Either we should ensure that ‘foo.1’ is not +rebuilt by users, or there is no point in distributing ‘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 ‘foo.1’ is +to not depend on ‘foo$(EXEEXT)’. For instance, assuming ‘foo --version’ +and ‘foo --help’ do not change unless ‘foo.c’ or ‘configure.ac’ change, +we could write the following ‘Makefile.am’: + + 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) + + This way, ‘foo.1’ will not get rebuilt every time ‘foo$(EXEEXT)’ +changes. The ‘make’ call makes sure ‘foo$(EXEEXT)’ is up-to-date before +‘help2man’. Another way to ensure this would be to use separate +directories for binaries and man pages, and set ‘SUBDIRS’ so that +binaries are built before man pages. + + We could also decide not to distribute ‘foo.1’. In this case it’s +fine to have ‘foo.1’ dependent upon ‘foo$(EXEEXT)’, since both will have +to be rebuilt. However it would be impossible to build the package in a +cross-compilation, because building ‘foo.1’ involves an _execution_ of +‘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: + + distributed-file: built-tools distributed-sources + build-command + +should be changed to + + distributed-file: distributed-sources + $(MAKE) $(AM_MAKEFLAGS) built-tools + build-command + +or you could choose not to distribute ‘distributed-file’, if +cross-compilation does not matter. + + The points made through these examples are worth a summary: + + • Distributed files should never depend upon non-distributed built + files. + • Distributed files should be distributed with all their + dependencies. + • If a file is _intended_ to be rebuilt by users, then there is no + point in distributing it. + + For desperate cases, it’s always possible to disable this check by +setting ‘distcleancheck_listfiles’ as documented in *note Checking the +Distribution::. Make sure you do understand the reason why ‘make +distcheck’ complains before you do this. ‘distcleancheck_listfiles’ is +a way to _hide_ errors, not to fix them. You can always do better. + + +File: automake.info, Node: Flag Variables Ordering, Next: Renamed Objects, Prev: Errors with distclean, Up: FAQ + +27.6 Flag Variables Ordering +============================ + + What is the difference between ‘AM_CFLAGS’, ‘CFLAGS’, and + ‘mumble_CFLAGS’? + + Why does ‘automake’ output ‘CPPFLAGS’ after + ‘AM_CPPFLAGS’ on compile lines? Shouldn’t it be the converse? + + My ‘configure’ adds some warning flags into ‘CXXFLAGS’. In + one ‘Makefile.am’ I would like to append a new flag, however if I + put the flag into ‘AM_CXXFLAGS’ it is prepended to the other + flags, not appended. + +Compile Flag Variables +---------------------- + +This section attempts to answer all the above questions. We will mostly +discuss ‘CPPFLAGS’ in our examples, but actually the answer holds for +all the compile flags used in Automake: ‘CCASFLAGS’, ‘CFLAGS’, +‘CPPFLAGS’, ‘CXXFLAGS’, ‘FCFLAGS’, ‘FFLAGS’, ‘GCJFLAGS’, ‘LDFLAGS’, +‘LFLAGS’, ‘LIBTOOLFLAGS’, ‘OBJCFLAGS’, ‘OBJCXXFLAGS’, ‘RFLAGS’, +‘UPCFLAGS’, and ‘YFLAGS’. + + ‘CPPFLAGS’, ‘AM_CPPFLAGS’, and ‘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). ‘CPPFLAGS’ is the user variable (*note User Variables::), +‘AM_CPPFLAGS’ is the Automake variable, and ‘mumble_CPPFLAGS’ is the +variable specific to the ‘mumble’ target (we call this a per-target +variable, *note Program and Library Variables::). + + Automake always uses two of these variables when compiling C sources +files. When compiling an object file for the ‘mumble’ target, the first +variable will be ‘mumble_CPPFLAGS’ if it is defined, or ‘AM_CPPFLAGS’ +otherwise. The second variable is always ‘CPPFLAGS’. + + In the following example, + + bin_PROGRAMS = foo bar + foo_SOURCES = xyz.c + bar_SOURCES = main.c + foo_CPPFLAGS = -DFOO + AM_CPPFLAGS = -DBAZ + +‘xyz.o’ will be compiled with ‘$(foo_CPPFLAGS) $(CPPFLAGS)’, (because +‘xyz.o’ is part of the ‘foo’ target), while ‘main.o’ will be compiled +with ‘$(AM_CPPFLAGS) $(CPPFLAGS)’ (because there is no per-target +variable for target ‘bar’). + + The difference between ‘mumble_CPPFLAGS’ and ‘AM_CPPFLAGS’ being +clear enough, let’s focus on ‘CPPFLAGS’. ‘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 ‘configure --help’. + + For instance, someone who needs to add ‘/home/my/usr/include’ to the +C compiler’s search path would configure a package with + + ./configure CPPFLAGS='-I /home/my/usr/include' + +and this flag would be propagated to the compile rules of all +‘Makefile’s. + + It is also not uncommon to override a user variable at ‘make’-time. +Many installers do this with ‘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 + + rm file.o + make CXXFLAGS=-O0 file.o + make + + The reason ‘$(CPPFLAGS)’ appears after ‘$(AM_CPPFLAGS)’ or +‘$(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 ‘CXXFLAGS=-O0’ above, which should supersede any +other switch from ‘AM_CXXFLAGS’ or ‘mumble_CXXFLAGS’ (and this of course +replaces the previous value of ‘CXXFLAGS’). + + You should never redefine a user variable such as ‘CPPFLAGS’ in +‘Makefile.am’. Use ‘automake -Woverride’ to diagnose such mistakes. +Even something like + + CPPFLAGS = -DDATADIR=\"$(datadir)\" @CPPFLAGS@ + +is erroneous. Although this preserves ‘configure’’s value of +‘CPPFLAGS’, the definition of ‘DATADIR’ will disappear if a user +attempts to override ‘CPPFLAGS’ from the ‘make’ command line. + + AM_CPPFLAGS = -DDATADIR=\"$(datadir)\" + +is all that is needed here if no per-target flags are used. + + You should not add options to these user variables within ‘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 ‘AM_’ variables within +‘configure’ if you ‘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 ‘AM_’ variables in all ‘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 ‘AC_SUBST’ them in +‘WARNINGCFLAGS’; you may also have an Autoconf macro that determines +which compiler and which linker flags should be used to link with +library ‘libfoo’, and ‘AC_SUBST’ these in ‘LIBFOOCFLAGS’ and +‘LIBFOOLDFLAGS’. Then, a ‘Makefile.am’ could use these variables as +follows: + + AM_CFLAGS = $(WARNINGCFLAGS) + bin_PROGRAMS = prog1 prog2 + prog1_SOURCES = ... + prog2_SOURCES = ... + prog2_CFLAGS = $(LIBFOOCFLAGS) $(AM_CFLAGS) + prog2_LDFLAGS = $(LIBFOOLDFLAGS) + + In this example both programs will be compiled with the flags +substituted into ‘$(WARNINGCFLAGS)’, and ‘prog2’ will additionally be +compiled with the flags required to link with ‘libfoo’. + + Note that listing ‘AM_CFLAGS’ in a per-target ‘CFLAGS’ variable is a +common idiom to ensure that ‘AM_CFLAGS’ applies to every target in a +‘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 +‘prog1_CFLAGS = $(AM_CFLAGS) -no-flag’. If all of these flags had been +forcefully appended to ‘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 +‘LIBFOO_LDFLAGS’ (with an underscore) because that would cause Automake +to think that this is actually a per-target variable (like +‘mumble_LDFLAGS’) for some non-declared ‘LIBFOO’ target. + +Other Variables +--------------- + +There are other variables in Automake that follow similar principles to +allow user options. For instance, Texinfo rules (*note Texinfo::) use +‘MAKEINFOFLAGS’ and ‘AM_MAKEINFOFLAGS’. Similarly, DejaGnu tests (*note +DejaGnu Tests::) use ‘RUNTESTDEFAULTFLAGS’ and ‘AM_RUNTESTDEFAULTFLAGS’. +The tags and ctags rules (*note Tags::) use ‘ETAGSFLAGS’, +‘AM_ETAGSFLAGS’, ‘CTAGSFLAGS’, and ‘AM_CTAGSFLAGS’. Java rules (*note +Java::) use ‘JAVACFLAGS’ and ‘AM_JAVACFLAGS’. None of these rules +support per-target flags (yet). + + To some extent, even ‘AM_MAKEFLAGS’ (*note Subdirectories::) obeys +this naming scheme. The slight difference is that ‘MAKEFLAGS’ is passed +to sub-‘make’s implicitly by ‘make’ itself. + + ‘ARFLAGS’ (*note A Library::) is usually defined by Automake and has +neither ‘AM_’ nor per-target cousin. + + Finally you should not think that the existence of a per-target +variable implies the existence of an ‘AM_’ variable or of a user +variable. For instance, the ‘mumble_LDADD’ per-target variable +overrides the makefile-wide ‘LDADD’ variable (which is not a user +variable), and ‘mumble_LIBADD’ exists only as a per-target variable. +*Note Program and Library Variables::. + + +File: automake.info, Node: Renamed Objects, Next: Per-Object Flags, Prev: Flag Variables Ordering, Up: FAQ + +27.7 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. + + bin_PROGRAMS = true false + true_SOURCES = generic.c + true_CPPFLAGS = -DEXIT_CODE=0 + false_SOURCES = generic.c + false_CPPFLAGS = -DEXIT_CODE=1 + +Obviously the two programs are built from the same source, but it would +be bad if they shared the same object, because ‘generic.o’ cannot be +built with both ‘-DEXIT_CODE=0’ _and_ ‘-DEXIT_CODE=1’. Therefore +‘automake’ outputs rules to build two different objects: +‘true-generic.o’ and ‘false-generic.o’. + + ‘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, ‘true’ and ‘false’ will both use ‘version.o’ in +the following example. + + AM_CPPFLAGS = -DVERSION=1.0 + bin_PROGRAMS = true false + true_SOURCES = true.c version.c + false_SOURCES = false.c version.c + + Note that the renaming of objects is also affected by the +‘_SHORTNAME’ variable (*note Program and Library Variables::). + + +File: automake.info, Node: Per-Object Flags, Next: Multiple Outputs, Prev: Renamed Objects, Up: FAQ + +27.8 Per-Object Flags Emulation +=============================== + + One of my source files needs to be compiled with different flags. How + do I do? + + Automake supports per-program and per-library compilation flags (see +*note Program and Library Variables:: and *note Flag Variables +Ordering::). With this you can define compilation flags that apply to +all files compiled for a target. For instance, in + + bin_PROGRAMS = foo + foo_SOURCES = foo.c foo.h bar.c bar.h main.c + foo_CFLAGS = -some -flags + +‘foo-foo.o’, ‘foo-bar.o’, and ‘foo-main.o’ will all be compiled with +‘-some -flags’. (If you wonder about the names of these object files, +see *note Renamed Objects::.) Note that ‘foo_CFLAGS’ gives the flags to +use when compiling all the C sources of the _program_ ‘foo’, it has +nothing to do with ‘foo.c’ or ‘foo-foo.o’ specifically. + + What if ‘foo.c’ needs to be compiled into ‘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 +‘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. + + 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 + + Here ‘foo-bar.o’ and ‘foo-main.o’ will all be compiled with ‘-some +-flags’, while ‘libfoo_a-foo.o’ will be compiled using ‘-some -other +-flags’. Eventually, all three objects will be linked to form ‘foo’. + + This trick can also be achieved using Libtool convenience libraries, +for instance ‘noinst_LTLIBRARIES = libfoo.la’ (*note Libtool Convenience +Libraries::). + + Another tempting idea to implement per-object flags is to override +the compile rules ‘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 ‘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 ‘foo_CFLAGS’ (because ‘foo.c’ will then be compiled as ‘foo.o’ +instead of ‘foo-foo.o’, *note Renamed Objects::). Also in order to +support dependency tracking, the two ‘.o’/‘.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 ‘automake’ for this +file. If a new release of Automake generates a different rule, your +copy will need to be updated by hand. + + +File: automake.info, Node: Multiple Outputs, Next: Hard-Coded Install Paths, Prev: Per-Object Flags, Up: FAQ + +27.9 Handling Tools that Produce Many Outputs +============================================= + +This section describes a ‘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 ‘Makefile’s. + + Suppose we have a program called ‘foo’ that will read one file called +‘data.foo’ and produce two files named ‘data.c’ and ‘data.h’. We want +to write a ‘Makefile’ rule that captures this one-to-two dependency. + + The naive rule is incorrect: + + # This is incorrect. + data.c data.h: data.foo + foo data.foo + +What the above rule really says is that ‘data.c’ and ‘data.h’ each +depend on ‘data.foo’, and can each be built by running ‘foo data.foo’. +In other words it is equivalent to: + + # We do not want this. + data.c: data.foo + foo data.foo + data.h: data.foo + foo data.foo + +which means that ‘foo’ can be run twice. Usually it will not be run +twice, because ‘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: + + • The most worrying case is when running a parallel ‘make’. If + ‘data.c’ and ‘data.h’ are built in parallel, two ‘foo data.foo’ + commands will run concurrently. This is harmful. + • Another case is when the dependency (here ‘data.foo’) is (or + depends upon) a phony target. + + A solution that works with parallel ‘make’ but not with phony +dependencies is the following: + + data.c data.h: data.foo + foo data.foo + data.h: data.c + +The above rules are equivalent to + + data.c: data.foo + foo data.foo + data.h: data.foo data.c + foo data.foo + +therefore a parallel ‘make’ will have to serialize the builds of +‘data.c’ and ‘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: + + # There is still a problem with this one. + data.c: data.foo + foo data.foo + data.h: data.c + +The idea is that ‘foo data.foo’ is run only when ‘data.c’ needs to be +updated, but we further state that ‘data.h’ depends upon ‘data.c’. That +way, if ‘data.h’ is required and ‘data.foo’ is out of date, the +dependency on ‘data.c’ will trigger the build. + + This is almost perfect, but suppose we have built ‘data.h’ and +‘data.c’, and then we erase ‘data.h’. Then, running ‘make data.h’ will +not rebuild ‘data.h’. The above rules just state that ‘data.c’ must be +up-to-date with respect to ‘data.foo’, and this is already the case. + + What we need is a rule that forces a rebuild when ‘data.h’ is +missing. Here it is: + + 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 + + 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 ‘foo’ should +additionally read ‘data.bar’ and also produce ‘data.w’ and ‘data.x’, we +would write: + + 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 + + However there are now three minor problems in this setup. One is +related to the timestamp ordering of ‘data.h’, ‘data.w’, ‘data.x’, and +‘data.c’. Another one is a race condition if a parallel ‘make’ attempts +to run multiple instances of the recover block at once. Finally, the +recursive rule breaks ‘make -n’ when run with GNU ‘make’ (as well as +some other ‘make’ implementations), as it may remove ‘data.h’ even when +it should not (*note How the ‘MAKE’ Variable Works: (make)MAKE +Variable.). + + Let us deal with the first problem. ‘foo’ outputs four files, but we +do not know in which order these files are created. Suppose that +‘data.h’ is created before ‘data.c’. Then we have a weird situation. +The next time ‘make’ is run, ‘data.h’ will appear older than ‘data.c’, +the second rule will be triggered, a shell will be started to execute +the ‘if...fi’ command, but actually it will just execute the ‘then’ +branch, that is: nothing. In other words, because the witness we +selected is not the first file created by ‘foo’, ‘make’ will start a +shell to do nothing each time it is run. + + A simple riposte is to fix the timestamps when this happens. + + 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 + + Another solution is to use a different and dedicated file as witness, +rather than using any of ‘foo’’s outputs. + + 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 + + ‘data.tmp’ is created before ‘foo’ is run, so it has a timestamp +older than output files output by ‘foo’. It is then renamed to +‘data.stamp’ after ‘foo’ has run, because we do not want to update +‘data.stamp’ if ‘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 ‘data.c’ and ‘data.h’, and runs ‘make -j’, then ‘make’ may start +both recover rules in parallel. If the two instances of the rule +execute ‘$(MAKE) $(AM_MAKEFLAGS) data.stamp’ concurrently the build is +likely to fail (for instance, the two rules will create ‘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 ‘data.c’ +and ‘data.h’ have been explicitly removed without also removing +‘data.stamp’ and the other output files. ‘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 ‘data.stamp’. One +could imagine something along the following lines. + + 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 + + Using a dedicated witness, like ‘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 ‘*.el’ files into ‘*.elc’ +files in a single command. It does not matter how ‘ELFILES’ is defined +(as long as it is not empty: empty targets are not accepted by POSIX). + + ELFILES = one.el two.el three.el ... + 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 $$?; \ + fi; \ + fi + + These solutions all still suffer from the third problem, namely that +they break the promise that ‘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 ‘$(MAKE)’. The solutions involving locking could +act upon the contents of the ‘MAKEFLAGS’ variable, but parsing that +portably is not easy (*note (autoconf)The Make Macro MAKEFLAGS::). Here +is an example: + + ELFILES = one.el two.el three.el ... + 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 \ + sleep 1; \ + done; \ + ## Succeed if and only if the first process succeeded. + $$dry test -f elc-stamp; exit $$?; \ + fi; \ + fi + + For completeness it should be noted that GNU ‘make’ is able to +express rules with multiple output files using pattern rules (*note +Pattern Rule Examples: (make)Pattern Examples.). We do not discuss +pattern rules here because they are not portable, but they can be +convenient in packages that assume GNU ‘make’. + + +File: automake.info, Node: Hard-Coded Install Paths, Next: Debugging Make Rules, Prev: Multiple Outputs, Up: FAQ + +27.10 Installing to Hard-Coded Locations +======================================== + + My package needs to install some configuration file. I tried to use + the following rule, but ‘make distcheck’ fails. Why? + + # Do not do this. + install-data-local: + $(INSTALL_DATA) $(srcdir)/afile $(DESTDIR)/etc/afile + + My package needs to populate the installation directory of another + package at install-time. I can easily compute that installation + directory in ‘configure’, but if I install files therein, + ‘make distcheck’ fails. How else should I do? + + These two setups share their symptoms: ‘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 (‘$(prefix)’, ‘$(bindir)’, ‘$(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 ‘/usr’ or ‘/usr/local’. So you do +something like ‘./configure --prefix ~/usr’ to install a package in your +own ‘~/usr’ tree. + + If a package attempts to install something to some hard-coded path +(e.g., ‘/etc/afile’), regardless of this ‘--prefix’ setting, then the +installation will fail. ‘make distcheck’ performs such a ‘--prefix’ +installation, hence it will fail too. + + Now, there are some easy solutions. + + The above ‘install-data-local’ example for installing ‘/etc/afile’ +would be better replaced by + + sysconf_DATA = afile + +by default ‘sysconfdir’ will be ‘$(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 ‘--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: + + % python -c 'from distutils import sysconfig; + print sysconfig.get_python_lib(1,0)' + /usr/lib/python2.5/site-packages + + 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 ‘sysconfig.get_python_lib()’ function actually +accepts a third argument that will replace Python’s installation prefix. + + % python -c 'from distutils import sysconfig; + print sysconfig.get_python_lib(1,0,"${exec_prefix}")' + ${exec_prefix}/lib/python2.5/site-packages + + You can also use this new path. If you do + • root users can install your package with the same ‘--prefix’ as + Python (you get the behavior of the previous attempt) + + • 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). + + The ‘AM_PATH_PYTHON’ macro uses similar commands to define +‘$(pythondir)’ and ‘$(pyexecdir)’ (*note Python::). + + Of course not all tools are as advanced as Python regarding that +substitution of PREFIX. So another strategy is to figure the part of +the installation directory that must be preserved. For instance, here +is how ‘AM_PATH_LISPDIR’ (*note Emacs Lisp::) computes ‘$(lispdir)’: + + $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` + + I.e., it just picks the first directory that looks like +‘*/lib/*emacs/site-lisp’ or ‘*/share/*emacs/site-lisp’ in the search +path of emacs, and then substitutes ‘${libdir}’ or ‘${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 ‘sed’ invocation. + + +File: automake.info, Node: Debugging Make Rules, Next: Reporting Bugs, Prev: Hard-Coded Install Paths, Up: FAQ + +27.11 Debugging Make Rules +========================== + +The rules and dependency trees generated by ‘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 ‘make’ command +(*note (make)Options Summary::), here’s a couple of further hints for +debugging makefiles generated by ‘automake’ effectively: + + • If less verbose output has been enabled in the package with the use + of silent rules (*note Automake Silent Rules::), you can use ‘make + V=1’ to see the commands being executed. + • ‘make -n’ can help show what would be done without actually doing + it. Note however, that this will _still execute_ commands prefixed + with ‘+’, and, when using GNU ‘make’, commands that contain the + strings ‘$(MAKE)’ or ‘${MAKE}’ (*note (make)Instead of + Execution::). 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.(1) + Furthermore, note that GNU ‘make’ will update prerequisites for the + ‘Makefile’ file itself even with ‘-n’ (*note (make)Remaking + Makefiles::). + • ‘make SHELL="/bin/bash -vx"’ can help debug complex rules. *Note + (autoconf)The Make Macro SHELL::, for some portability quirks + associated with this construct. + • ‘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 ‘print’ if that is already used or a + file with that name exists. + • provides a modified GNU + ‘make’ command called ‘remake’ that copes with complex GNU + ‘make’-specific Makefiles and allows to trace execution, examine + variables, and call rules interactively, much like a debugger. + + ---------- Footnotes ---------- + + (1) Automake’s ‘dist’ and ‘distcheck’ rules had a bug in this regard +in that they created directories even with ‘-n’, but this has been fixed +in Automake 1.11. + + +File: automake.info, Node: Reporting Bugs, Prev: Debugging Make Rules, Up: FAQ + +27.12 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 GNU Bug Tracker (http://debbugs.gnu.org/) +and the bug-automake mailing list archives +(http://lists.gnu.org/archive/html/bug-automake/) for previous bug +reports. We previously used a Gnats database +(http://sourceware.org/cgi-bin/gnatsweb.pl?database=automake) 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 How to Report Bugs Effectively +(http://www.chiark.greenend.org.uk/~sgtatham/bugs.html) and How to Ask +Questions the Smart Way +(http://catb.org/~esr/faqs/smart-questions.html). 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 . This will then open a new bug in the +bug tracker (http://debbugs.gnu.org/automake). Be sure to include the +versions of Autoconf and Automake that you use. Ideally, post a minimal +‘Makefile.am’ and ‘configure.ac’ that reproduces the problem you +encounter. If you have encountered test suite failures, please attach +the ‘test-suite.log’ file. + + +File: automake.info, Node: Copying This Manual, Next: Indices, Prev: FAQ, Up: Top + +Appendix A Copying This Manual +****************************** + +* Menu: + +* GNU Free Documentation License:: License for copying this manual + + +File: automake.info, Node: GNU Free Documentation License, Up: Copying This Manual + +A.1 GNU Free Documentation License +================================== + + Version 1.3, 3 November 2008 + + Copyright © 2000-2017 Free Software Foundation, Inc. + + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document “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. + + 1. 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 + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and standard-conforming + simple HTML, PostScript or PDF designed for human modification. + Examples of transparent image formats include PNG, XCF and JPG. + Opaque formats include proprietary formats that can be read and + edited only by proprietary word processors, SGML or XML for which + the DTD and/or processing tools are not generally available, and + the machine-generated HTML, PostScript or 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. + + 2. 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. + + 3. 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. + + 4. 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: + + A. 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. + + B. 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. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. 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. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document’s + license notice. + + H. Include an unaltered copy of this License. + + I. 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. + + J. 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. + + K. 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. + + L. 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. + + M. Delete any section Entitled “Endorsementsâ€. Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + “Endorsements†or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + 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. + + 5. 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.†+ + 6. 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. + + 7. 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. + + 8. 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. + + 9. 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. + + 10. 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 + . + + 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. + + 11. 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. + +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: + + Copyright (C) YEAR 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''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the “with...Texts.†line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + 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. + + +File: automake.info, Node: Indices, Prev: Copying This Manual, Up: Top + +Appendix B Indices +****************** + +* Menu: + +* Macro Index:: Index of Autoconf macros +* Variable Index:: Index of Makefile variables +* General Index:: General index + + +File: automake.info, Node: Macro Index, Next: Variable Index, Up: Indices + +B.1 Macro Index +=============== + +[index] +* Menu: + +* _AM_DEPENDENCIES: Private Macros. (line 12) +* AC_CANONICAL_BUILD: Optional. (line 11) +* AC_CANONICAL_HOST: Optional. (line 12) +* AC_CANONICAL_TARGET: Optional. (line 13) +* AC_CONFIG_AUX_DIR: Optional. (line 19) +* AC_CONFIG_AUX_DIR <1>: Subpackages. (line 6) +* AC_CONFIG_FILES: Requirements. (line 15) +* AC_CONFIG_HEADERS: Optional. (line 44) +* AC_CONFIG_LIBOBJ_DIR: Optional. (line 40) +* AC_CONFIG_LIBOBJ_DIR <1>: LIBOBJS. (line 51) +* AC_CONFIG_LINKS: Optional. (line 55) +* AC_CONFIG_SUBDIRS: Subpackages. (line 6) +* AC_DEFUN: Extending aclocal. (line 36) +* AC_F77_LIBRARY_LDFLAGS: Optional. (line 101) +* AC_FC_SRCEXT: Optional. (line 107) +* AC_INIT: Public Macros. (line 15) +* AC_LIBOBJ: Optional. (line 65) +* AC_LIBOBJ <1>: LTLIBOBJS. (line 6) +* AC_LIBOBJ <2>: LIBOBJS. (line 11) +* AC_LIBSOURCE: Optional. (line 66) +* AC_LIBSOURCE <1>: LIBOBJS. (line 17) +* AC_LIBSOURCES: Optional. (line 67) +* AC_OUTPUT: Requirements. (line 15) +* AC_PREREQ: Extending aclocal. (line 36) +* AC_PROG_CXX: Optional. (line 85) +* AC_PROG_F77: Optional. (line 97) +* AC_PROG_FC: Optional. (line 112) +* AC_PROG_LEX: Public Macros. (line 95) +* AC_PROG_LEX <1>: Optional. (line 127) +* AC_PROG_LIBTOOL: Optional. (line 117) +* AC_PROG_OBJC: Optional. (line 89) +* AC_PROG_OBJCXX: Optional. (line 93) +* AC_PROG_RANLIB: Optional. (line 81) +* AC_PROG_YACC: Optional. (line 121) +* AC_REQUIRE_AUX_FILE: Optional. (line 131) +* AC_SUBST: Optional. (line 139) +* AM_CONDITIONAL: Optional. (line 152) +* AM_CONDITIONAL <1>: Usage of Conditionals. + (line 6) +* AM_CONDITIONAL <2>: Usage of Conditionals. + (line 9) +* AM_COND_IF: Optional. (line 155) +* AM_COND_IF <1>: Usage of Conditionals. + (line 66) +* AM_COND_IF <2>: Usage of Conditionals. + (line 70) +* AM_DEP_TRACK: Private Macros. (line 14) +* AM_GNU_GETTEXT: Optional. (line 161) +* AM_GNU_GETTEXT_INTL_SUBDIR: Optional. (line 167) +* AM_INIT_AUTOMAKE: Requirements. (line 6) +* AM_INIT_AUTOMAKE <1>: Public Macros. (line 7) +* AM_MAINTAINER_MODE: Rebuilding. (line 9) +* AM_MAINTAINER_MODE <1>: maintainer-mode. (line 37) +* AM_MAINTAINER_MODE([DEFAULT-MODE]): Optional. (line 172) +* AM_MAKE_INCLUDE: Private Macros. (line 20) +* AM_MISSING_PROG: Public Macros. (line 111) +* AM_OUTPUT_DEPENDENCY_COMMANDS: Private Macros. (line 15) +* AM_PATH_LISPDIR: Public Macros. (line 61) +* AM_PATH_PYTHON: Python. (line 28) +* AM_PROG_AR: Public Macros. (line 76) +* AM_PROG_AS: Public Macros. (line 83) +* AM_PROG_CC_C_O: Public Macros. (line 88) +* AM_PROG_GCJ: Public Macros. (line 100) +* AM_PROG_INSTALL_STRIP: Private Macros. (line 25) +* AM_PROG_LEX: Public Macros. (line 95) +* AM_PROG_MKDIR_P: Obsolete Macros. (line 14) +* AM_PROG_UPC: Public Macros. (line 105) +* AM_PROG_VALAC: Vala Support. (line 20) +* AM_SANITY_CHECK: Private Macros. (line 30) +* AM_SET_DEPDIR: Private Macros. (line 13) +* AM_SILENT_RULES: Public Macros. (line 119) +* AM_SUBST_NOTMAKE(VAR): Optional. (line 180) +* AM_WITH_DMALLOC: Public Macros. (line 123) +* m4_include: Basics of Distribution. + (line 17) +* m4_include <1>: Optional. (line 190) + + +File: automake.info, Node: Variable Index, Next: General Index, Prev: Macro Index, Up: Indices + +B.2 Variable Index +================== + +[index] +* Menu: + +* _DATA: Data. (line 6) +* _HEADERS: Headers. (line 6) +* _LIBRARIES: A Library. (line 6) +* _LISP: Emacs Lisp. (line 6) +* _LOG_COMPILE: Parallel Test Harness. + (line 51) +* _LOG_COMPILER: Parallel Test Harness. + (line 51) +* _LOG_DRIVER: Declaring Custom Test Drivers. + (line 6) +* _LOG_DRIVER_FLAGS: Declaring Custom Test Drivers. + (line 6) +* _LOG_FLAGS: Parallel Test Harness. + (line 51) +* _LTLIBRARIES: Libtool Libraries. (line 6) +* _MANS: Man Pages. (line 6) +* _PROGRAMS: Uniform. (line 11) +* _PROGRAMS <1>: Program Sources. (line 6) +* _PYTHON: Python. (line 6) +* _SCRIPTS: Scripts. (line 6) +* _SOURCES: Program Sources. (line 32) +* _SOURCES <1>: Program Sources. (line 33) +* _SOURCES <2>: Default _SOURCES. (line 6) +* _TEXINFOS: Texinfo. (line 6) +* _TEXINFOS <1>: Texinfo. (line 65) +* ALLOCA: LTLIBOBJS. (line 6) +* ALLOCA <1>: LIBOBJS. (line 6) +* AM_CCASFLAGS: Assembly Support. (line 10) +* AM_CFLAGS: Program Variables. (line 50) +* AM_COLOR_TESTS: Scripts-based Testsuites. + (line 67) +* AM_CPPFLAGS: Program Variables. (line 16) +* AM_CPPFLAGS <1>: Assembly Support. (line 10) +* AM_CXXFLAGS: C++ Support. (line 22) +* AM_DEFAULT_SOURCE_EXT: Default _SOURCES. (line 6) +* AM_DEFAULT_V: Automake Silent Rules. + (line 120) +* AM_DEFAULT_VERBOSITY: Automake Silent Rules. + (line 120) +* AM_DISTCHECK_CONFIGURE_FLAGS: Checking the Distribution. + (line 28) +* AM_ETAGSFLAGS: Tags. (line 25) +* AM_EXT_LOG_DRIVER_FLAGS: Declaring Custom Test Drivers. + (line 6) +* AM_EXT_LOG_FLAGS: Parallel Test Harness. + (line 51) +* AM_FCFLAGS: Fortran 9x Support. (line 22) +* AM_FFLAGS: Fortran 77 Support. (line 22) +* AM_GCJFLAGS: Java Support with gcj. + (line 26) +* AM_INSTALLCHECK_STD_OPTIONS_EXEMPT: List of Automake options. + (line 135) +* AM_JAVACFLAGS: Java. (line 44) +* AM_LDFLAGS: Linking. (line 10) +* AM_LDFLAGS <1>: Program Variables. (line 59) +* AM_LFLAGS: Yacc and Lex. (line 60) +* AM_LIBTOOLFLAGS: Libtool Flags. (line 6) +* AM_LOG_DRIVER_FLAGS: Declaring Custom Test Drivers. + (line 6) +* AM_LOG_FLAGS: Parallel Test Harness. + (line 51) +* AM_MAKEFLAGS: Subdirectories. (line 29) +* AM_MAKEINFOFLAGS: Texinfo. (line 115) +* AM_MAKEINFOHTMLFLAGS: Texinfo. (line 116) +* AM_OBJCFLAGS: Objective C Support. (line 22) +* AM_OBJCXXFLAGS: Objective C++ Support. + (line 22) +* AM_RFLAGS: Fortran 77 Support. (line 28) +* AM_RUNTESTFLAGS: DejaGnu Tests. (line 24) +* AM_TESTS_ENVIRONMENT: Scripts-based Testsuites. + (line 86) +* AM_TESTS_FD_REDIRECT: Scripts-based Testsuites. + (line 94) +* AM_UPCFLAGS: Unified Parallel C Support. + (line 21) +* AM_UPDATE_INFO_DIR: Texinfo. (line 92) +* AM_V: Automake Silent Rules. + (line 120) +* AM_VALAFLAGS: Vala Support. (line 41) +* AM_V_at: Automake Silent Rules. + (line 120) +* AM_V_GEN: Automake Silent Rules. + (line 120) +* AM_YFLAGS: Yacc and Lex. (line 37) +* AR: Public Macros. (line 76) +* AUTOCONF: automake Invocation. (line 28) +* AUTOM4TE: aclocal Invocation. (line 44) +* AUTOMAKE_JOBS: automake Invocation. (line 174) +* AUTOMAKE_OPTIONS: Public Macros. (line 10) +* AUTOMAKE_OPTIONS <1>: Dependencies. (line 34) +* AUTOMAKE_OPTIONS <2>: List of Automake options. + (line 6) +* bin_PROGRAMS: Program Sources. (line 6) +* bin_SCRIPTS: Scripts. (line 18) +* build_triplet: Optional. (line 14) +* BUILT_SOURCES: Sources. (line 27) +* BZIP2: The Types of Distributions. + (line 13) +* CC: Program Variables. (line 12) +* CCAS: Public Macros. (line 83) +* CCAS <1>: Assembly Support. (line 10) +* CCASFLAGS: Public Macros. (line 83) +* CCASFLAGS <1>: Assembly Support. (line 10) +* CFLAGS: Program Variables. (line 12) +* check_: Uniform. (line 95) +* check_LTLIBRARIES: Libtool Convenience Libraries. + (line 6) +* check_PROGRAMS: Program Sources. (line 6) +* check_PROGRAMS <1>: Default _SOURCES. (line 28) +* check_SCRIPTS: Scripts. (line 18) +* CLASSPATH_ENV: Java. (line 53) +* CLEANFILES: Clean. (line 13) +* COMPILE: Program Variables. (line 55) +* CONFIGURE_DEPENDENCIES: Rebuilding. (line 12) +* CONFIG_STATUS_DEPENDENCIES: Rebuilding. (line 12) +* CPPFLAGS: Program Variables. (line 12) +* CPPFLAGS <1>: Assembly Support. (line 10) +* CXX: C++ Support. (line 16) +* CXXCOMPILE: C++ Support. (line 25) +* CXXFLAGS: C++ Support. (line 19) +* CXXLINK: C++ Support. (line 29) +* CXXLINK <1>: How the Linker is Chosen. + (line 12) +* DATA: Uniform. (line 101) +* DATA <1>: Data. (line 7) +* data_DATA: Data. (line 9) +* DEFS: Program Variables. (line 12) +* DEJATOOL: DejaGnu Tests. (line 19) +* DESTDIR: DESTDIR. (line 6) +* DESTDIR <1>: Staged Installs. (line 6) +* DISABLE_HARD_ERRORS: Scripts-based Testsuites. + (line 32) +* DISTCHECK_CONFIGURE_FLAGS: Checking the Distribution. + (line 28) +* distcleancheck_listfiles: Checking the Distribution. + (line 70) +* distcleancheck_listfiles <1>: Errors with distclean. + (line 112) +* DISTCLEANFILES: Clean. (line 13) +* DISTCLEANFILES <1>: Checking the Distribution. + (line 70) +* distdir: The dist Hook. (line 33) +* distdir <1>: Third-Party Makefiles. + (line 25) +* distuninstallcheck_listfiles: Checking the Distribution. + (line 106) +* dist_: Alternative. (line 29) +* dist_ <1>: Fine-grained Distribution Control. + (line 6) +* dist_lisp_LISP: Emacs Lisp. (line 11) +* dist_noinst_LISP: Emacs Lisp. (line 11) +* DIST_SUBDIRS: Subdirectories with AM_CONDITIONAL. + (line 25) +* DIST_SUBDIRS <1>: Basics of Distribution. + (line 47) +* DVIPS: Texinfo. (line 141) +* EMACS: Public Macros. (line 61) +* ETAGSFLAGS: Tags. (line 25) +* ETAGS_ARGS: Tags. (line 25) +* EXPECT: DejaGnu Tests. (line 19) +* EXTRA_DIST: Basics of Distribution. + (line 34) +* EXTRA_maude_DEPENDENCIES: Linking. (line 41) +* EXTRA_maude_DEPENDENCIES <1>: Program and Library Variables. + (line 119) +* EXTRA_maude_SOURCES: Program and Library Variables. + (line 53) +* EXTRA_PROGRAMS: Conditional Programs. + (line 15) +* EXT_LOG_COMPILE: Parallel Test Harness. + (line 51) +* EXT_LOG_COMPILER: Parallel Test Harness. + (line 51) +* EXT_LOG_DRIVER: Declaring Custom Test Drivers. + (line 6) +* EXT_LOG_DRIVER_FLAGS: Declaring Custom Test Drivers. + (line 6) +* EXT_LOG_FLAGS: Parallel Test Harness. + (line 51) +* F77: Fortran 77 Support. (line 16) +* F77COMPILE: Fortran 77 Support. (line 31) +* F77LINK: How the Linker is Chosen. + (line 13) +* FC: Fortran 9x Support. (line 16) +* FCCOMPILE: Fortran 9x Support. (line 25) +* FCFLAGS: Fortran 9x Support. (line 19) +* FCLINK: How the Linker is Chosen. + (line 14) +* FCLINK <1>: Fortran 9x Support. (line 29) +* FFLAGS: Fortran 77 Support. (line 19) +* FLIBS: Mixing Fortran 77 With C and C++. + (line 21) +* FLINK: Fortran 77 Support. (line 35) +* GCJ: Public Macros. (line 100) +* GCJFLAGS: Public Macros. (line 100) +* GCJFLAGS <1>: Java Support with gcj. + (line 16) +* GCJLINK: How the Linker is Chosen. + (line 10) +* GTAGS_ARGS: Tags. (line 60) +* GZIP_ENV: Basics of Distribution. + (line 14) +* HEADERS: Uniform. (line 101) +* host_triplet: Optional. (line 14) +* INCLUDES: Program Variables. (line 44) +* include_HEADERS: Headers. (line 6) +* info_TEXINFOS: Texinfo. (line 6) +* JAVA: Uniform. (line 101) +* JAVAC: Java. (line 37) +* JAVACFLAGS: Java. (line 40) +* JAVAROOT: Java. (line 49) +* LDADD: Linking. (line 10) +* LDFLAGS: Program Variables. (line 12) +* LFLAGS: Yacc and Lex. (line 60) +* libexec_PROGRAMS: Program Sources. (line 6) +* libexec_SCRIPTS: Scripts. (line 18) +* LIBOBJS: Optional. (line 68) +* LIBOBJS <1>: LTLIBOBJS. (line 6) +* LIBOBJS <2>: LIBOBJS. (line 6) +* LIBRARIES: Uniform. (line 101) +* LIBS: Program Variables. (line 12) +* LIBTOOLFLAGS: Libtool Flags. (line 6) +* lib_LIBRARIES: A Library. (line 6) +* lib_LTLIBRARIES: Libtool Libraries. (line 6) +* LINK: Program Variables. (line 64) +* LINK <1>: How the Linker is Chosen. + (line 17) +* LISP: Uniform. (line 101) +* lispdir: Public Macros. (line 61) +* lisp_LISP: Emacs Lisp. (line 6) +* localstate_DATA: Data. (line 9) +* LOG_COMPILE: Parallel Test Harness. + (line 51) +* LOG_COMPILER: Parallel Test Harness. + (line 51) +* LOG_DRIVER: Declaring Custom Test Drivers. + (line 6) +* LOG_DRIVER_FLAGS: Declaring Custom Test Drivers. + (line 6) +* LOG_FLAGS: Parallel Test Harness. + (line 51) +* LTALLOCA: LTLIBOBJS. (line 6) +* LTALLOCA <1>: LIBOBJS. (line 6) +* LTLIBOBJS: LTLIBOBJS. (line 6) +* LTLIBOBJS <1>: LIBOBJS. (line 6) +* LTLIBRARIES: Uniform. (line 101) +* MAINTAINERCLEANFILES: Clean. (line 13) +* MAKE: Subdirectories. (line 29) +* MAKEINFO: Texinfo. (line 99) +* MAKEINFOFLAGS: Texinfo. (line 109) +* MAKEINFOHTML: Texinfo. (line 105) +* MANS: Uniform. (line 101) +* man_MANS: Man Pages. (line 6) +* maude_AR: Program and Library Variables. + (line 68) +* maude_CCASFLAGS: Program and Library Variables. + (line 170) +* maude_CFLAGS: Program and Library Variables. + (line 171) +* maude_CPPFLAGS: Program and Library Variables. + (line 172) +* maude_CXXFLAGS: Program and Library Variables. + (line 173) +* maude_DEPENDENCIES: Linking. (line 41) +* maude_DEPENDENCIES <1>: Program and Library Variables. + (line 118) +* maude_FFLAGS: Program and Library Variables. + (line 174) +* maude_GCJFLAGS: Program and Library Variables. + (line 175) +* maude_LDADD: Linking. (line 17) +* maude_LDADD <1>: Program and Library Variables. + (line 86) +* maude_LDFLAGS: Linking. (line 37) +* maude_LDFLAGS <1>: Program and Library Variables. + (line 106) +* maude_LFLAGS: Program and Library Variables. + (line 176) +* maude_LIBADD: A Library. (line 26) +* maude_LIBADD <1>: Program and Library Variables. + (line 78) +* maude_LIBTOOLFLAGS: Libtool Flags. (line 6) +* maude_LIBTOOLFLAGS <1>: Program and Library Variables. + (line 111) +* maude_LINK: Program and Library Variables. + (line 154) +* maude_OBJCFLAGS: Program and Library Variables. + (line 177) +* maude_OBJCXXFLAGS: Program and Library Variables. + (line 178) +* maude_RFLAGS: Program and Library Variables. + (line 179) +* maude_SHORTNAME: Program and Library Variables. + (line 210) +* maude_SOURCES: Program and Library Variables. + (line 18) +* maude_UPCFLAGS: Program and Library Variables. + (line 180) +* maude_YFLAGS: Program and Library Variables. + (line 181) +* MISSING: Public Macros. (line 111) +* MKDIR_P: Obsolete Macros. (line 14) +* mkdir_p: Obsolete Macros. (line 14) +* MOSTLYCLEANFILES: Clean. (line 13) +* nobase_: Alternative. (line 23) +* nodist_: Alternative. (line 29) +* nodist_ <1>: Fine-grained Distribution Control. + (line 6) +* noinst_: Uniform. (line 90) +* noinst_HEADERS: Headers. (line 6) +* noinst_HEADERS <1>: Headers. (line 23) +* noinst_LIBRARIES: A Library. (line 6) +* noinst_LISP: Emacs Lisp. (line 6) +* noinst_LTLIBRARIES: Libtool Convenience Libraries. + (line 6) +* noinst_PROGRAMS: Program Sources. (line 6) +* noinst_SCRIPTS: Scripts. (line 18) +* notrans_: Man Pages. (line 54) +* OBJC: Objective C Support. (line 16) +* OBJCCOMPILE: Objective C Support. (line 25) +* OBJCFLAGS: Objective C Support. (line 19) +* OBJCLINK: Objective C Support. (line 29) +* OBJCLINK <1>: How the Linker is Chosen. + (line 15) +* OBJCXX: Objective C++ Support. + (line 16) +* OBJCXXCOMPILE: Objective C++ Support. + (line 25) +* OBJCXXFLAGS: Objective C++ Support. + (line 19) +* OBJCXXLINK: Objective C++ Support. + (line 29) +* OBJCXXLINK <1>: How the Linker is Chosen. + (line 11) +* oldinclude_HEADERS: Headers. (line 6) +* PACKAGE: Basics of Distribution. + (line 6) +* pkgdatadir: Uniform. (line 19) +* pkgdata_DATA: Data. (line 9) +* pkgdata_SCRIPTS: Scripts. (line 18) +* pkgincludedir: Uniform. (line 19) +* pkginclude_HEADERS: Headers. (line 6) +* pkglibdir: Uniform. (line 19) +* pkglibexecdir: Uniform. (line 19) +* pkglibexec_PROGRAMS: Program Sources. (line 6) +* pkglibexec_SCRIPTS: Scripts. (line 18) +* pkglib_LIBRARIES: A Library. (line 6) +* pkglib_LTLIBRARIES: Libtool Libraries. (line 6) +* pkgpyexecdir: Python. (line 105) +* pkgpythondir: Python. (line 91) +* PROGRAMS: Uniform. (line 17) +* PROGRAMS <1>: Uniform. (line 101) +* pyexecdir: Python. (line 96) +* PYTHON: Uniform. (line 101) +* PYTHON <1>: Python. (line 56) +* pythondir: Python. (line 87) +* PYTHON_EXEC_PREFIX: Python. (line 77) +* PYTHON_PLATFORM: Python. (line 82) +* PYTHON_PREFIX: Python. (line 72) +* PYTHON_VERSION: Python. (line 68) +* RECHECK_LOGS: Parallel Test Harness. + (line 118) +* RFLAGS: Fortran 77 Support. (line 25) +* RUNTEST: DejaGnu Tests. (line 19) +* RUNTESTDEFAULTFLAGS: DejaGnu Tests. (line 14) +* RUNTESTFLAGS: DejaGnu Tests. (line 24) +* sbin_PROGRAMS: Program Sources. (line 6) +* sbin_SCRIPTS: Scripts. (line 18) +* SCRIPTS: Uniform. (line 101) +* SCRIPTS <1>: Scripts. (line 9) +* sharedstate_DATA: Data. (line 9) +* SOURCES: Program Sources. (line 33) +* SOURCES <1>: Default _SOURCES. (line 6) +* SUBDIRS: Subdirectories. (line 8) +* SUBDIRS <1>: Basics of Distribution. + (line 47) +* SUFFIXES: Suffixes. (line 6) +* sysconf_DATA: Data. (line 9) +* TAGS_DEPENDENCIES: Tags. (line 35) +* target_triplet: Optional. (line 14) +* TESTS: Scripts-based Testsuites. + (line 86) +* TESTS <1>: Parallel Test Harness. + (line 12) +* TESTS_ENVIRONMENT: Scripts-based Testsuites. + (line 86) +* TEST_EXTENSIONS: Parallel Test Harness. + (line 34) +* TEST_LOGS: Parallel Test Harness. + (line 34) +* TEST_SUITE_LOG: Parallel Test Harness. + (line 12) +* TEXI2DVI: Texinfo. (line 132) +* TEXI2PDF: Texinfo. (line 137) +* TEXINFOS: Uniform. (line 101) +* TEXINFOS <1>: Texinfo. (line 65) +* TEXINFO_TEX: Texinfo. (line 145) +* top_distdir: The dist Hook. (line 33) +* top_distdir <1>: Third-Party Makefiles. + (line 25) +* UPC: Public Macros. (line 105) +* UPC <1>: Unified Parallel C Support. + (line 15) +* UPCCOMPILE: Unified Parallel C Support. + (line 24) +* UPCFLAGS: Unified Parallel C Support. + (line 18) +* UPCLINK: Unified Parallel C Support. + (line 28) +* UPCLINK <1>: How the Linker is Chosen. + (line 16) +* V: Automake Silent Rules. + (line 88) +* VALAC: Vala Support. (line 34) +* VALAFLAGS: Vala Support. (line 38) +* VERBOSE: Parallel Test Harness. + (line 26) +* VERSION: Basics of Distribution. + (line 6) +* WARNINGS: automake Invocation. (line 167) +* WARNINGS <1>: aclocal Options. (line 91) +* WITH_DMALLOC: Public Macros. (line 123) +* XFAIL_TESTS: Scripts-based Testsuites. + (line 32) +* XZ_OPT: The Types of Distributions. + (line 24) +* YACC: Optional. (line 122) +* YFLAGS: Yacc and Lex. (line 37) + + +File: automake.info, Node: General Index, Prev: Variable Index, Up: Indices + +B.3 General Index +================= + +[index] +* Menu: + +* ## (special Automake comment): General Operation. (line 68) +* #serial syntax: Serials. (line 6) +* $(LIBOBJS) and empty libraries: LIBOBJS. (line 72) +* +=: General Operation. (line 24) +* --add-missing: automake Invocation. (line 41) +* --automake-acdir: aclocal Options. (line 9) +* --build=BUILD: Cross-Compilation. (line 14) +* --copy: automake Invocation. (line 71) +* --diff: aclocal Options. (line 18) +* --disable-dependency-tracking: Dependency Tracking. (line 33) +* --disable-maintainer-mode: Optional. (line 173) +* --disable-silent-rules: Automake Silent Rules. + (line 85) +* --dry-run: aclocal Options. (line 23) +* --enable-debug, example: Usage of Conditionals. + (line 21) +* --enable-dependency-tracking: Dependency Tracking. (line 43) +* --enable-maintainer-mode: Optional. (line 173) +* --enable-silent-rules: Automake Silent Rules. + (line 85) +* --force: aclocal Options. (line 45) +* --force-missing: automake Invocation. (line 76) +* --foreign: automake Invocation. (line 82) +* --gnits: automake Invocation. (line 86) +* --gnits, complete description: Gnits. (line 29) +* --gnu: automake Invocation. (line 90) +* --gnu, complete description: Gnits. (line 6) +* --gnu, required files: Gnits. (line 6) +* --help: automake Invocation. (line 94) +* --help <1>: aclocal Options. (line 27) +* --help check: List of Automake options. + (line 129) +* --help=recursive: Nested Packages. (line 30) +* --host=HOST: Cross-Compilation. (line 16) +* --include-deps: automake Invocation. (line 102) +* --install: aclocal Options. (line 34) +* --libdir: automake Invocation. (line 61) +* --no-force: automake Invocation. (line 107) +* --output: aclocal Options. (line 55) +* --output-dir: automake Invocation. (line 114) +* --prefix: Standard Directory Variables. + (line 33) +* --print-ac-dir: aclocal Options. (line 58) +* --print-libdir: automake Invocation. (line 65) +* --program-prefix=PREFIX: Renaming. (line 16) +* --program-suffix=SUFFIX: Renaming. (line 18) +* --program-transform-name=PROGRAM: Renaming. (line 20) +* --system-acdir: aclocal Options. (line 13) +* --target=TARGET: Cross-Compilation. (line 55) +* --verbose: automake Invocation. (line 121) +* --verbose <1>: aclocal Options. (line 69) +* --version: automake Invocation. (line 125) +* --version <1>: aclocal Options. (line 72) +* --version check: List of Automake options. + (line 129) +* --warnings: automake Invocation. (line 129) +* --warnings <1>: aclocal Options. (line 76) +* --with-dmalloc: Public Macros. (line 123) +* -a: automake Invocation. (line 41) +* -c: automake Invocation. (line 70) +* -f: automake Invocation. (line 75) +* -hook targets: Extending. (line 66) +* -i: automake Invocation. (line 98) +* -I: aclocal Options. (line 30) +* -l and LDADD: Linking. (line 70) +* -local targets: Extending. (line 37) +* -module, libtool: Libtool Modules. (line 6) +* -o: automake Invocation. (line 114) +* -v: automake Invocation. (line 121) +* -W: automake Invocation. (line 129) +* -W <1>: aclocal Options. (line 76) +* -Wall: amhello's configure.ac Setup Explained. + (line 38) +* -Werror: amhello's configure.ac Setup Explained. + (line 38) +* .la suffix, defined: Libtool Concept. (line 6) +* .log files: Parallel Test Harness. + (line 12) +* .trs files: Parallel Test Harness. + (line 12) +* :copy-in-global-log:: Log files generation and test results recording. + (line 44) +* :recheck:: Log files generation and test results recording. + (line 38) +* :test-global-result:: Log files generation and test results recording. + (line 54) +* :test-result:: Log files generation and test results recording. + (line 24) +* _DATA primary, defined: Data. (line 6) +* _DEPENDENCIES, defined: Linking. (line 41) +* _HEADERS primary, defined: Headers. (line 6) +* _JAVA primary, defined: Java. (line 6) +* _LDFLAGS, defined: Linking. (line 37) +* _LDFLAGS, libtool: Libtool Flags. (line 6) +* _LIBADD, libtool: Libtool Flags. (line 6) +* _LIBRARIES primary, defined: A Library. (line 6) +* _LIBTOOLFLAGS, libtool: Libtool Flags. (line 6) +* _LISP primary, defined: Emacs Lisp. (line 6) +* _LTLIBRARIES primary, defined: Libtool Libraries. (line 6) +* _MANS primary, defined: Man Pages. (line 6) +* _PROGRAMS primary variable: Uniform. (line 11) +* _PYTHON primary, defined: Python. (line 6) +* _SCRIPTS primary, defined: Scripts. (line 6) +* _SOURCES and header files: Program Sources. (line 39) +* _SOURCES primary, defined: Program Sources. (line 32) +* _SOURCES, default: Default _SOURCES. (line 6) +* _SOURCES, empty: Default _SOURCES. (line 44) +* _TEXINFOS primary, defined: Texinfo. (line 6) +* acinclude.m4, defined: Complete. (line 23) +* aclocal and serial numbers: Serials. (line 6) +* aclocal program, introduction: Complete. (line 23) +* aclocal search path: Macro Search Path. (line 6) +* aclocal’s scheduled death: Future of aclocal. (line 6) +* aclocal, extending: Extending aclocal. (line 6) +* aclocal, Invocation: aclocal Invocation. (line 6) +* aclocal, Invoking: aclocal Invocation. (line 6) +* aclocal, Options: aclocal Options. (line 6) +* aclocal, using: configure. (line 6) +* aclocal.m4, preexisting: Complete. (line 23) +* ACLOCAL_PATH: Macro Search Path. (line 116) +* AC_CONFIG_FILES, conditional: Usage of Conditionals. + (line 79) +* AC_SUBST and SUBDIRS: Subdirectories with AC_SUBST. + (line 6) +* Adding new SUFFIXES: Suffixes. (line 6) +* all: Standard Targets. (line 16) +* all <1>: Extending. (line 41) +* all-local: Extending. (line 41) +* ALLOCA, and Libtool: LTLIBOBJS. (line 6) +* ALLOCA, example: LIBOBJS. (line 6) +* ALLOCA, special handling: LIBOBJS. (line 6) +* amhello-1.0.tar.gz, creation: Hello World. (line 6) +* amhello-1.0.tar.gz, location: Use Cases. (line 6) +* amhello-1.0.tar.gz, use cases: Use Cases. (line 6) +* AM_CCASFLAGS and CCASFLAGS: Flag Variables Ordering. + (line 20) +* AM_CFLAGS and CFLAGS: Flag Variables Ordering. + (line 20) +* AM_CONDITIONAL and SUBDIRS: Subdirectories with AM_CONDITIONAL. + (line 6) +* AM_CPPFLAGS and CPPFLAGS: Flag Variables Ordering. + (line 20) +* AM_CXXFLAGS and CXXFLAGS: Flag Variables Ordering. + (line 20) +* AM_FCFLAGS and FCFLAGS: Flag Variables Ordering. + (line 20) +* AM_FFLAGS and FFLAGS: Flag Variables Ordering. + (line 20) +* AM_GCJFLAGS and GCJFLAGS: Flag Variables Ordering. + (line 20) +* AM_INIT_AUTOMAKE, example use: Complete. (line 11) +* AM_LDFLAGS and LDFLAGS: Flag Variables Ordering. + (line 20) +* AM_LFLAGS and LFLAGS: Flag Variables Ordering. + (line 20) +* AM_LIBTOOLFLAGS and LIBTOOLFLAGS: Flag Variables Ordering. + (line 20) +* AM_MAINTAINER_MODE, purpose: maintainer-mode. (line 37) +* AM_OBJCFLAGS and OBJCFLAGS: Flag Variables Ordering. + (line 20) +* AM_OBJCXXFLAGS and OBJXXCFLAGS: Flag Variables Ordering. + (line 20) +* AM_RFLAGS and RFLAGS: Flag Variables Ordering. + (line 20) +* AM_UPCFLAGS and UPCFLAGS: Flag Variables Ordering. + (line 20) +* AM_YFLAGS and YFLAGS: Flag Variables Ordering. + (line 20) +* Append operator: General Operation. (line 24) +* ARG_MAX: Length Limitations. (line 6) +* autogen.sh and autoreconf: Error required file ltmain.sh not found. + (line 6) +* autom4te: aclocal Invocation. (line 44) +* Automake constraints: Introduction. (line 21) +* automake options: automake Invocation. (line 37) +* Automake parser, limitations of: General Operation. (line 33) +* Automake requirements: Introduction. (line 26) +* Automake requirements <1>: Requirements. (line 6) +* automake, invocation: automake Invocation. (line 6) +* automake, invoking: automake Invocation. (line 6) +* Automake, recursive operation: General Operation. (line 58) +* Automatic dependency tracking: Dependencies. (line 11) +* Automatic linker selection: How the Linker is Chosen. + (line 6) +* autoreconf and libtoolize: Error required file ltmain.sh not found. + (line 6) +* autoreconf, example: Creating amhello. (line 59) +* autoscan: amhello's configure.ac Setup Explained. + (line 89) +* Autotools, introduction: GNU Build System. (line 43) +* Autotools, purpose: Why Autotools. (line 6) +* autoupdate: Obsolete Macros. (line 6) +* Auxiliary programs: Auxiliary Programs. (line 6) +* Avoiding man page renaming: Man Pages. (line 54) +* Avoiding path stripping: Alternative. (line 23) +* Binary package: DESTDIR. (line 22) +* bootstrap and autoreconf: Error required file ltmain.sh not found. + (line 6) +* Bugs, reporting: Introduction. (line 30) +* build tree and source tree: VPATH Builds. (line 6) +* BUILT_SOURCES, defined: Sources. (line 27) +* C++ support: C++ Support. (line 6) +* canonicalizing Automake variables: Canonicalization. (line 6) +* CCASFLAGS and AM_CCASFLAGS: Flag Variables Ordering. + (line 20) +* CFLAGS and AM_CFLAGS: Flag Variables Ordering. + (line 20) +* cfortran: Mixing Fortran 77 With C and C++. + (line 6) +* check: Standard Targets. (line 31) +* check <1>: Tests. (line 6) +* check <2>: Extending. (line 41) +* check-local: Extending. (line 41) +* check-news: List of Automake options. + (line 14) +* check_ primary prefix, definition: Uniform. (line 95) +* check_PROGRAMS example: Default _SOURCES. (line 28) +* clean: Standard Targets. (line 27) +* clean <1>: Extending. (line 41) +* clean-local: Clean. (line 15) +* clean-local <1>: Extending. (line 41) +* Colorized testsuite output: Scripts-based Testsuites. + (line 67) +* command line length limit: Length Limitations. (line 6) +* Comment, special to Automake: General Operation. (line 68) +* Compilation of Java to bytecode: Java. (line 6) +* Compilation of Java to native code: Java Support with gcj. + (line 6) +* Compile Flag Variables: Flag Variables Ordering. + (line 20) +* Complete example: Complete. (line 6) +* Conditional example, --enable-debug: Usage of Conditionals. + (line 21) +* conditional libtool libraries: Conditional Libtool Libraries. + (line 6) +* Conditional programs: Conditional Programs. + (line 6) +* Conditional subdirectories: Conditional Subdirectories. + (line 6) +* Conditional SUBDIRS: Conditional Subdirectories. + (line 6) +* Conditionals: Conditionals. (line 6) +* config.guess: automake Invocation. (line 39) +* config.site example: config.site. (line 6) +* configuration variables, overriding: Standard Configuration Variables. + (line 6) +* Configuration, basics: Basic Installation. (line 6) +* Configure substitutions in TESTS: Parallel Test Harness. + (line 46) +* configure.ac, Hello World: amhello's configure.ac Setup Explained. + (line 6) +* configure.ac, scanning: configure. (line 6) +* conflicting definitions: Extending. (line 14) +* Constraints of Automake: Introduction. (line 21) +* convenience libraries, libtool: Libtool Convenience Libraries. + (line 6) +* copying semantics: Extending. (line 10) +* cpio example: Uniform. (line 36) +* CPPFLAGS and AM_CPPFLAGS: Flag Variables Ordering. + (line 20) +* cross-compilation: Cross-Compilation. (line 6) +* cross-compilation example: Cross-Compilation. (line 25) +* CVS and generated files: CVS. (line 49) +* CVS and third-party files: CVS. (line 167) +* CVS and timestamps: CVS. (line 28) +* CXXFLAGS and AM_CXXFLAGS: Flag Variables Ordering. + (line 20) +* DATA primary, defined: Data. (line 6) +* debug build, example: VPATH Builds. (line 46) +* debugging rules: Debugging Make Rules. + (line 6) +* default source, Libtool modules example: Default _SOURCES. (line 38) +* default verbosity for silent rules: Automake Silent Rules. + (line 92) +* default _SOURCES: Default _SOURCES. (line 6) +* definitions, conflicts: Extending. (line 14) +* dejagnu: DejaGnu Tests. (line 19) +* dejagnu <1>: List of Automake options. + (line 18) +* depcomp: Dependencies. (line 22) +* dependencies and distributed files: Errors with distclean. + (line 6) +* Dependency tracking: Dependency Tracking. (line 6) +* Dependency tracking <1>: Dependencies. (line 11) +* Dependency tracking, disabling: Dependencies. (line 36) +* directory variables: Standard Directory Variables. + (line 6) +* dirlist: Macro Search Path. (line 52) +* Disabling dependency tracking: Dependencies. (line 37) +* Disabling hard errors: Scripts-based Testsuites. + (line 32) +* dist: Standard Targets. (line 35) +* dist <1>: Basics of Distribution. + (line 6) +* dist-bzip2: The Types of Distributions. + (line 18) +* dist-bzip2 <1>: List of Automake options. + (line 22) +* dist-bzip2 <2>: List of Automake options. + (line 22) +* dist-gzip: The Types of Distributions. + (line 11) +* dist-hook: The dist Hook. (line 6) +* dist-hook <1>: Extending. (line 66) +* dist-lzip: The Types of Distributions. + (line 22) +* dist-lzip <1>: List of Automake options. + (line 25) +* dist-lzip <2>: List of Automake options. + (line 25) +* dist-shar: The Types of Distributions. + (line 45) +* dist-shar <1>: List of Automake options. + (line 36) +* dist-shar <2>: List of Automake options. + (line 34) +* dist-tarZ: The Types of Distributions. + (line 39) +* dist-tarZ <1>: List of Automake options. + (line 41) +* dist-tarZ <2>: List of Automake options. + (line 39) +* dist-xz: The Types of Distributions. + (line 30) +* dist-xz <1>: List of Automake options. + (line 28) +* dist-xz <2>: List of Automake options. + (line 28) +* dist-zip: The Types of Distributions. + (line 33) +* dist-zip <1>: List of Automake options. + (line 31) +* dist-zip <2>: List of Automake options. + (line 31) +* distcheck: Creating amhello. (line 100) +* distcheck <1>: Checking the Distribution. + (line 6) +* distcheck better than dist: Preparing Distributions. + (line 10) +* distcheck example: Creating amhello. (line 100) +* distcheck-hook: Checking the Distribution. + (line 55) +* distclean: Standard Targets. (line 29) +* distclean <1>: Extending. (line 41) +* distclean <2>: Errors with distclean. + (line 6) +* distclean, diagnostic: Errors with distclean. + (line 6) +* distclean-local: Clean. (line 15) +* distclean-local <1>: Extending. (line 41) +* distcleancheck: Checking the Distribution. + (line 70) +* distdir: Third-Party Makefiles. + (line 25) +* Distinction between errors and failures in testsuites: Generalities about Testing. + (line 48) +* Distributions, preparation: Preparing Distributions. + (line 6) +* distuninstallcheck: Checking the Distribution. + (line 106) +* dist_ and nobase_: Alternative. (line 29) +* dist_ and notrans_: Man Pages. (line 63) +* DIST_SUBDIRS, explained: SUBDIRS vs DIST_SUBDIRS. + (line 6) +* dmalloc, support for: Public Macros. (line 123) +* dvi: Texinfo. (line 25) +* dvi <1>: Extending. (line 41) +* DVI output using Texinfo: Texinfo. (line 6) +* dvi-local: Extending. (line 41) +* E-mail, bug reports: Introduction. (line 30) +* EDITION Texinfo flag: Texinfo. (line 35) +* else: Usage of Conditionals. + (line 36) +* Empty libraries: A Library. (line 48) +* Empty libraries and $(LIBOBJS): LIBOBJS. (line 72) +* empty _SOURCES: Default _SOURCES. (line 44) +* endif: Usage of Conditionals. + (line 36) +* Example conditional --enable-debug: Usage of Conditionals. + (line 21) +* Example conditional AC_CONFIG_FILES: Usage of Conditionals. + (line 79) +* Example Hello World: Hello World. (line 6) +* Example of recursive operation: General Operation. (line 58) +* Example of shared libraries: Libtool Libraries. (line 6) +* Example, EXTRA_PROGRAMS: Uniform. (line 36) +* Example, false and true: true. (line 6) +* Example, mixed language: Mixing Fortran 77 With C and C++. + (line 34) +* Executable extension: EXEEXT. (line 6) +* Exit status 77, special interpretation: Scripts-based Testsuites. + (line 27) +* Exit status 99, special interpretation: Scripts-based Testsuites. + (line 27) +* expected failure: Generalities about Testing. + (line 39) +* expected test failure: Generalities about Testing. + (line 39) +* Expected test failure: Scripts-based Testsuites. + (line 32) +* Extending aclocal: Extending aclocal. (line 6) +* Extending list of installation directories: Uniform. (line 56) +* Extension, executable: EXEEXT. (line 6) +* Extra files distributed with Automake: automake Invocation. (line 39) +* EXTRA_, prepending: Uniform. (line 29) +* EXTRA_PROGRAMS, defined: Uniform. (line 36) +* EXTRA_PROGRAMS, defined <1>: Conditional Programs. + (line 15) +* EXTRA_prog_SOURCES, defined: Conditional Sources. (line 18) +* false Example: true. (line 6) +* FCFLAGS and AM_FCFLAGS: Flag Variables Ordering. + (line 20) +* Features of the GNU Build System: Use Cases. (line 6) +* FFLAGS and AM_FFLAGS: Flag Variables Ordering. + (line 20) +* file names, limitations on: Limitations on File Names. + (line 6) +* filename-length-max=99: List of Automake options. + (line 44) +* Files distributed with Automake: automake Invocation. (line 39) +* First line of Makefile.am: General Operation. (line 74) +* Flag variables, ordering: Flag Variables Ordering. + (line 6) +* Flag Variables, Ordering: Flag Variables Ordering. + (line 20) +* FLIBS, defined: Mixing Fortran 77 With C and C++. + (line 21) +* foreign: amhello's configure.ac Setup Explained. + (line 38) +* foreign <1>: List of Automake options. + (line 9) +* foreign strictness: Strictness. (line 10) +* Fortran 77 support: Fortran 77 Support. (line 6) +* Fortran 77, mixing with C and C++: Mixing Fortran 77 With C and C++. + (line 6) +* Fortran 77, Preprocessing: Preprocessing Fortran 77. + (line 6) +* Fortran 9x support: Fortran 9x Support. (line 6) +* GCJFLAGS and AM_GCJFLAGS: Flag Variables Ordering. + (line 20) +* generated files and CVS: CVS. (line 49) +* generated files, distributed: CVS. (line 9) +* Gettext support: gettext. (line 6) +* git-dist: General Operation. (line 12) +* git-dist, non-standard example: General Operation. (line 12) +* gnits: List of Automake options. + (line 9) +* gnits strictness: Strictness. (line 10) +* gnu: List of Automake options. + (line 9) +* GNU Build System, basics: Basic Installation. (line 6) +* GNU Build System, features: Use Cases. (line 6) +* GNU Build System, introduction: GNU Build System. (line 6) +* GNU Build System, use cases: Use Cases. (line 6) +* GNU Coding Standards: GNU Build System. (line 29) +* GNU Gettext support: gettext. (line 6) +* GNU make extensions: General Operation. (line 20) +* GNU Makefile standards: Introduction. (line 12) +* gnu strictness: Strictness. (line 10) +* GNUmakefile including Makefile: Third-Party Makefiles. + (line 111) +* hard error: Generalities about Testing. + (line 48) +* Header files in _SOURCES: Program Sources. (line 39) +* HEADERS primary, defined: Headers. (line 6) +* HEADERS, installation directories: Headers. (line 6) +* Hello World example: Hello World. (line 6) +* hook targets: Extending. (line 66) +* HP-UX 10, lex problems: Public Macros. (line 95) +* html: Texinfo. (line 25) +* html <1>: Extending. (line 41) +* HTML output using Texinfo: Texinfo. (line 6) +* html-local: Extending. (line 41) +* id: Tags. (line 43) +* if: Usage of Conditionals. + (line 36) +* include: Basics of Distribution. + (line 17) +* include <1>: Include. (line 6) +* include, distribution: Basics of Distribution. + (line 17) +* Including Makefile fragment: Include. (line 6) +* indentation in Makefile.am: General Operation. (line 33) +* info: List of Automake options. + (line 93) +* info <1>: Extending. (line 41) +* info-in-builddir: List of Automake options. + (line 53) +* info-local: Extending. (line 41) +* install: Standard Targets. (line 18) +* install <1>: The Two Parts of Install. + (line 14) +* install <2>: Extending. (line 41) +* Install hook: Extending Installation. + (line 15) +* Install, two parts of: The Two Parts of Install. + (line 14) +* install-data: Two-Part Install. (line 16) +* install-data <1>: The Two Parts of Install. + (line 14) +* install-data <2>: Extending. (line 41) +* install-data-hook: Extending. (line 66) +* install-data-local: Extending Installation. + (line 9) +* install-data-local <1>: Extending. (line 41) +* install-dvi: Texinfo. (line 25) +* install-dvi <1>: Extending. (line 41) +* install-dvi-local: Extending. (line 41) +* install-exec: Two-Part Install. (line 16) +* install-exec <1>: The Two Parts of Install. + (line 14) +* install-exec <2>: Extending. (line 41) +* install-exec-hook: Extending. (line 66) +* install-exec-local: Extending Installation. + (line 9) +* install-exec-local <1>: Extending. (line 41) +* install-html: Texinfo. (line 25) +* install-html <1>: Extending. (line 41) +* install-html-local: Extending. (line 41) +* install-info: Texinfo. (line 85) +* install-info <1>: List of Automake options. + (line 93) +* install-info <2>: Extending. (line 41) +* install-info target: Texinfo. (line 85) +* install-info-local: Extending. (line 41) +* install-man: Man Pages. (line 32) +* install-man <1>: List of Automake options. + (line 99) +* install-man target: Man Pages. (line 32) +* install-pdf: Texinfo. (line 25) +* install-pdf <1>: Extending. (line 41) +* install-pdf-local: Extending. (line 41) +* install-ps: Texinfo. (line 25) +* install-ps <1>: Extending. (line 41) +* install-ps-local: Extending. (line 41) +* install-strip: Standard Targets. (line 21) +* install-strip <1>: Install Rules for the User. + (line 7) +* Installation directories, extending list: Uniform. (line 56) +* Installation support: Install. (line 6) +* Installation, basics: Basic Installation. (line 6) +* installcheck: Standard Targets. (line 33) +* installcheck <1>: Extending. (line 41) +* installcheck-local: Extending. (line 41) +* installdirs: Install Rules for the User. + (line 7) +* installdirs <1>: Extending. (line 41) +* installdirs-local: Extending. (line 41) +* Installing headers: Headers. (line 6) +* Installing scripts: Scripts. (line 6) +* installing versioned binaries: Extending. (line 86) +* Interfacing with third-party packages: Third-Party Makefiles. + (line 6) +* Invocation of aclocal: aclocal Invocation. (line 6) +* Invocation of automake: automake Invocation. (line 6) +* Invoking aclocal: aclocal Invocation. (line 6) +* Invoking automake: automake Invocation. (line 6) +* JAVA primary, defined: Java. (line 6) +* JAVA restrictions: Java. (line 27) +* Java support with gcj: Java Support with gcj. + (line 6) +* Java to bytecode, compilation: Java. (line 6) +* Java to native code, compilation: Java Support with gcj. + (line 6) +* lazy test execution: Parallel Test Harness. + (line 118) +* LDADD and -l: Linking. (line 70) +* LDFLAGS and AM_LDFLAGS: Flag Variables Ordering. + (line 20) +* lex problems with HP-UX 10: Public Macros. (line 95) +* lex, multiple lexers: Yacc and Lex. (line 68) +* LFLAGS and AM_LFLAGS: Flag Variables Ordering. + (line 20) +* libltdl, introduction: Libtool Concept. (line 29) +* LIBOBJS, and Libtool: LTLIBOBJS. (line 6) +* LIBOBJS, example: LIBOBJS. (line 6) +* LIBOBJS, special handling: LIBOBJS. (line 6) +* LIBRARIES primary, defined: A Library. (line 6) +* libtool convenience libraries: Libtool Convenience Libraries. + (line 6) +* libtool libraries, conditional: Conditional Libtool Libraries. + (line 6) +* libtool library, definition: Libtool Concept. (line 6) +* libtool modules: Libtool Modules. (line 6) +* Libtool modules, default source example: Default _SOURCES. (line 38) +* libtool, introduction: Libtool Concept. (line 6) +* LIBTOOLFLAGS and AM_LIBTOOLFLAGS: Flag Variables Ordering. + (line 20) +* libtoolize and autoreconf: Error required file ltmain.sh not found. + (line 6) +* libtoolize, no longer run by automake: Error required file ltmain.sh not found. + (line 6) +* Limitations of automake parser: General Operation. (line 33) +* Linking Fortran 77 with C and C++: Mixing Fortran 77 With C and C++. + (line 6) +* LISP primary, defined: Emacs Lisp. (line 6) +* LN_S example: Extending. (line 86) +* local targets: Extending. (line 37) +* LTALLOCA, special handling: LTLIBOBJS. (line 6) +* LTLIBOBJS, special handling: LTLIBOBJS. (line 6) +* LTLIBRARIES primary, defined: Libtool Libraries. (line 6) +* ltmain.sh not found: Error required file ltmain.sh not found. + (line 6) +* m4_include, distribution: Basics of Distribution. + (line 17) +* Macro search path: Macro Search Path. (line 6) +* macro serial numbers: Serials. (line 6) +* Macros Automake recognizes: Optional. (line 6) +* maintainer-clean-local: Clean. (line 15) +* make check: Tests. (line 6) +* make clean support: Clean. (line 6) +* make dist: Basics of Distribution. + (line 6) +* make distcheck: Checking the Distribution. + (line 6) +* make distclean, diagnostic: Errors with distclean. + (line 6) +* make distcleancheck: Checking the Distribution. + (line 70) +* make distuninstallcheck: Checking the Distribution. + (line 106) +* make install support: Install. (line 6) +* make installcheck, testing --help and --version: List of Automake options. + (line 129) +* Make rules, overriding: General Operation. (line 46) +* Make targets, overriding: General Operation. (line 46) +* Makefile fragment, including: Include. (line 6) +* Makefile.am, first line: General Operation. (line 74) +* Makefile.am, Hello World: amhello's Makefile.am Setup Explained. + (line 6) +* Man page renaming, avoiding: Man Pages. (line 54) +* MANS primary, defined: Man Pages. (line 6) +* many outputs, rules with: Multiple Outputs. (line 6) +* mdate-sh: Texinfo. (line 35) +* MinGW cross-compilation example: Cross-Compilation. (line 25) +* missing, purpose: maintainer-mode. (line 9) +* Mixed language example: Mixing Fortran 77 With C and C++. + (line 34) +* Mixing Fortran 77 with C and C++: Mixing Fortran 77 With C and C++. + (line 6) +* Mixing Fortran 77 with C and/or C++: Mixing Fortran 77 With C and C++. + (line 6) +* mkdir -p, macro check: Obsolete Macros. (line 14) +* modules, libtool: Libtool Modules. (line 6) +* mostlyclean: Extending. (line 41) +* mostlyclean-local: Clean. (line 15) +* mostlyclean-local <1>: Extending. (line 41) +* multiple configurations, example: VPATH Builds. (line 46) +* Multiple configure.ac files: automake Invocation. (line 6) +* Multiple lex lexers: Yacc and Lex. (line 68) +* multiple outputs, rules with: Multiple Outputs. (line 6) +* Multiple yacc parsers: Yacc and Lex. (line 68) +* Nested packages: Nested Packages. (line 6) +* Nesting packages: Subpackages. (line 6) +* no-define: Public Macros. (line 55) +* no-define <1>: List of Automake options. + (line 58) +* no-dependencies: Dependencies. (line 34) +* no-dependencies <1>: List of Automake options. + (line 66) +* no-dist: List of Automake options. + (line 73) +* no-dist-gzip: List of Automake options. + (line 77) +* no-dist-gzip <1>: List of Automake options. + (line 77) +* no-exeext: List of Automake options. + (line 80) +* no-installinfo: Texinfo. (line 85) +* no-installinfo <1>: List of Automake options. + (line 90) +* no-installinfo option: Texinfo. (line 85) +* no-installman: Man Pages. (line 32) +* no-installman <1>: List of Automake options. + (line 96) +* no-installman option: Man Pages. (line 32) +* no-texinfo.tex: List of Automake options. + (line 106) +* nobase_ and dist_ or nodist_: Alternative. (line 29) +* nobase_ prefix: Alternative. (line 23) +* nodist_ and nobase_: Alternative. (line 29) +* nodist_ and notrans_: Man Pages. (line 63) +* noinst_ primary prefix, definition: Uniform. (line 90) +* Non-GNU packages: Strictness. (line 6) +* Non-standard targets: General Operation. (line 12) +* nostdinc: List of Automake options. + (line 102) +* notrans_ and dist_ or nodist_: Man Pages. (line 63) +* notrans_ prefix: Man Pages. (line 54) +* OBJCFLAGS and AM_OBJCFLAGS: Flag Variables Ordering. + (line 20) +* OBJCXXFLAGS and AM_OBJCXXFLAGS: Flag Variables Ordering. + (line 20) +* Objective C support: Objective C Support. (line 6) +* Objective C++ support: Objective C++ Support. + (line 6) +* Objects in subdirectory: Program and Library Variables. + (line 51) +* obsolete macros: Obsolete Macros. (line 6) +* optimized build, example: VPATH Builds. (line 46) +* Option, --warnings=CATEGORY: List of Automake options. + (line 211) +* Option, -WCATEGORY: List of Automake options. + (line 211) +* Option, check-news: List of Automake options. + (line 14) +* Option, dejagnu: List of Automake options. + (line 18) +* Option, dist-bzip2: List of Automake options. + (line 22) +* Option, dist-lzip: List of Automake options. + (line 25) +* Option, dist-shar: List of Automake options. + (line 34) +* Option, dist-tarZ: List of Automake options. + (line 39) +* Option, dist-xz: List of Automake options. + (line 28) +* Option, dist-zip: List of Automake options. + (line 31) +* Option, filename-length-max=99: List of Automake options. + (line 44) +* Option, foreign: List of Automake options. + (line 9) +* Option, gnits: List of Automake options. + (line 9) +* Option, gnu: List of Automake options. + (line 9) +* Option, info-in-builddir: List of Automake options. + (line 53) +* Option, no-define: List of Automake options. + (line 58) +* Option, no-dependencies: List of Automake options. + (line 66) +* Option, no-dist: List of Automake options. + (line 73) +* Option, no-dist-gzip: List of Automake options. + (line 77) +* Option, no-exeext: List of Automake options. + (line 80) +* Option, no-installinfo: Texinfo. (line 85) +* Option, no-installinfo <1>: List of Automake options. + (line 90) +* Option, no-installman: Man Pages. (line 32) +* Option, no-installman <1>: List of Automake options. + (line 96) +* Option, no-texinfo.tex: List of Automake options. + (line 106) +* Option, nostdinc: List of Automake options. + (line 102) +* Option, parallel-tests: List of Automake options. + (line 114) +* Option, readme-alpha: List of Automake options. + (line 120) +* Option, serial-tests: List of Automake options. + (line 110) +* Option, tar-pax: List of Automake options. + (line 159) +* Option, tar-ustar: List of Automake options. + (line 159) +* Option, tar-v7: List of Automake options. + (line 159) +* Option, VERSION: List of Automake options. + (line 206) +* Option, warnings: List of Automake options. + (line 211) +* Options, aclocal: aclocal Options. (line 6) +* Options, automake: automake Invocation. (line 37) +* Options, std-options: List of Automake options. + (line 129) +* Options, subdir-objects: List of Automake options. + (line 150) +* Ordering flag variables: Flag Variables Ordering. + (line 6) +* Overriding make rules: General Operation. (line 46) +* Overriding make targets: General Operation. (line 46) +* Overriding make variables: General Operation. (line 51) +* overriding rules: Extending. (line 26) +* overriding semantics: Extending. (line 26) +* PACKAGE, directory: Uniform. (line 19) +* PACKAGE, prevent definition: Public Macros. (line 55) +* Packages, nested: Nested Packages. (line 6) +* Packages, preparation: Preparing Distributions. + (line 6) +* Parallel build trees: VPATH Builds. (line 6) +* parallel-tests: List of Automake options. + (line 114) +* Path stripping, avoiding: Alternative. (line 23) +* pax format: List of Automake options. + (line 159) +* pdf: Texinfo. (line 25) +* pdf <1>: Extending. (line 41) +* PDF output using Texinfo: Texinfo. (line 6) +* pdf-local: Extending. (line 41) +* Per-object flags, emulated: Per-Object Flags. (line 6) +* per-target compilation flags, defined: Program and Library Variables. + (line 182) +* pkgdatadir, defined: Uniform. (line 19) +* pkgincludedir, defined: Uniform. (line 19) +* pkglibdir, defined: Uniform. (line 19) +* pkglibexecdir, defined: Uniform. (line 19) +* Preparing distributions: Preparing Distributions. + (line 6) +* Preprocessing Fortran 77: Preprocessing Fortran 77. + (line 6) +* Primary variable, DATA: Data. (line 6) +* Primary variable, defined: Uniform. (line 11) +* Primary variable, HEADERS: Headers. (line 6) +* Primary variable, JAVA: Java. (line 6) +* Primary variable, LIBRARIES: A Library. (line 6) +* Primary variable, LISP: Emacs Lisp. (line 6) +* Primary variable, LTLIBRARIES: Libtool Libraries. (line 6) +* Primary variable, MANS: Man Pages. (line 6) +* Primary variable, PROGRAMS: Uniform. (line 11) +* Primary variable, PYTHON: Python. (line 6) +* Primary variable, SCRIPTS: Scripts. (line 6) +* Primary variable, SOURCES: Program Sources. (line 32) +* Primary variable, TEXINFOS: Texinfo. (line 6) +* PROGRAMS primary variable: Uniform. (line 11) +* Programs, auxiliary: Auxiliary Programs. (line 6) +* PROGRAMS, bindir: Program Sources. (line 6) +* Programs, conditional: Conditional Programs. + (line 6) +* Programs, renaming during installation: Renaming. (line 6) +* prog_LDADD, defined: Linking. (line 12) +* Proxy Makefile for third-party packages: Third-Party Makefiles. + (line 128) +* ps: Texinfo. (line 25) +* ps <1>: Extending. (line 41) +* PS output using Texinfo: Texinfo. (line 6) +* ps-local: Extending. (line 41) +* PYTHON primary, defined: Python. (line 6) +* Ratfor programs: Preprocessing Fortran 77. + (line 6) +* read-only source tree: VPATH Builds. (line 89) +* readme-alpha: List of Automake options. + (line 120) +* README-alpha: Gnits. (line 42) +* rebuild rules: Rebuilding. (line 6) +* rebuild rules <1>: CVS. (line 9) +* recheck: Parallel Test Harness. + (line 130) +* Recognized macros by Automake: Optional. (line 6) +* Recursive operation of Automake: General Operation. (line 58) +* recursive targets and third-party Makefiles: Third-Party Makefiles. + (line 15) +* Register test case result: Log files generation and test results recording. + (line 24) +* Register test result: Log files generation and test results recording. + (line 24) +* Renaming programs: Renaming. (line 6) +* Reporting bugs: Introduction. (line 30) +* Requirements of Automake: Requirements. (line 6) +* Requirements, Automake: Introduction. (line 26) +* Restrictions for JAVA: Java. (line 27) +* reStructuredText field, :copy-in-global-log:: Log files generation and test results recording. + (line 44) +* reStructuredText field, :recheck:: Log files generation and test results recording. + (line 38) +* reStructuredText field, :test-global-result:: Log files generation and test results recording. + (line 54) +* reStructuredText field, :test-result:: Log files generation and test results recording. + (line 24) +* RFLAGS and AM_RFLAGS: Flag Variables Ordering. + (line 20) +* rules with multiple outputs: Multiple Outputs. (line 6) +* rules, conflicting: Extending. (line 14) +* rules, debugging: Debugging Make Rules. + (line 6) +* rules, overriding: Extending. (line 26) +* Scanning configure.ac: configure. (line 6) +* SCRIPTS primary, defined: Scripts. (line 6) +* SCRIPTS, installation directories: Scripts. (line 18) +* Selecting the linker automatically: How the Linker is Chosen. + (line 6) +* serial number and --install: aclocal Options. (line 38) +* serial numbers in macros: Serials. (line 6) +* serial-tests: List of Automake options. + (line 110) +* serial-tests, Using: Serial Test Harness. (line 6) +* Shared libraries, support for: A Shared Library. (line 6) +* Silencing make: Silencing Make. (line 6) +* Silent make: Silencing Make. (line 6) +* Silent make rules: Silencing Make. (line 6) +* Silent rules: Silencing Make. (line 6) +* silent rules and libtool: Automake Silent Rules. + (line 59) +* site.exp: DejaGnu Tests. (line 26) +* source tree and build tree: VPATH Builds. (line 6) +* source tree, read-only: VPATH Builds. (line 89) +* SOURCES primary, defined: Program Sources. (line 32) +* Special Automake comment: General Operation. (line 68) +* Staged installation: DESTDIR. (line 14) +* std-options: List of Automake options. + (line 129) +* Strictness, command line: automake Invocation. (line 37) +* Strictness, defined: Strictness. (line 10) +* Strictness, foreign: Strictness. (line 10) +* Strictness, gnits: Strictness. (line 10) +* Strictness, gnu: Strictness. (line 10) +* su, before make install: Basic Installation. (line 49) +* subdir-objects: List of Automake options. + (line 150) +* Subdirectories, building conditionally: Conditional Subdirectories. + (line 6) +* Subdirectories, configured conditionally: Unconfigured Subdirectories. + (line 6) +* Subdirectories, not distributed: Unconfigured Subdirectories. + (line 55) +* Subdirectory, objects in: Program and Library Variables. + (line 51) +* SUBDIRS and AC_SUBST: Subdirectories with AC_SUBST. + (line 6) +* SUBDIRS and AM_CONDITIONAL: Subdirectories with AM_CONDITIONAL. + (line 6) +* SUBDIRS, conditional: Conditional Subdirectories. + (line 6) +* SUBDIRS, explained: Subdirectories. (line 6) +* Subpackages: Nested Packages. (line 6) +* Subpackages <1>: Subpackages. (line 6) +* suffix .la, defined: Libtool Concept. (line 6) +* suffix .lo, defined: Libtool Concept. (line 15) +* SUFFIXES, adding: Suffixes. (line 6) +* Support for C++: C++ Support. (line 6) +* Support for Fortran 77: Fortran 77 Support. (line 6) +* Support for Fortran 9x: Fortran 9x Support. (line 6) +* Support for GNU Gettext: gettext. (line 6) +* Support for Java with gcj: Java Support with gcj. + (line 6) +* Support for Objective C: Objective C Support. (line 6) +* Support for Objective C++: Objective C++ Support. + (line 6) +* Support for Unified Parallel C: Unified Parallel C Support. + (line 6) +* Support for Vala: Vala Support. (line 6) +* tags: Tags. (line 9) +* TAGS support: Tags. (line 6) +* tar formats: List of Automake options. + (line 159) +* tar-pax: List of Automake options. + (line 159) +* tar-ustar: List of Automake options. + (line 159) +* tar-v7: List of Automake options. + (line 159) +* Target, install-info: Texinfo. (line 85) +* Target, install-man: Man Pages. (line 32) +* test case: Generalities about Testing. + (line 11) +* Test case result, registering: Log files generation and test results recording. + (line 24) +* test failure: Generalities about Testing. + (line 25) +* test harness: Generalities about Testing. + (line 18) +* test metadata: Parallel Test Harness. + (line 12) +* test pass: Generalities about Testing. + (line 25) +* Test result, registering: Log files generation and test results recording. + (line 24) +* test skip: Generalities about Testing. + (line 29) +* Test suites: Tests. (line 6) +* Tests, expected failure: Scripts-based Testsuites. + (line 32) +* testsuite harness: Generalities about Testing. + (line 18) +* Testsuite progress on console: Scripts-based Testsuites. + (line 45) +* Texinfo flag, EDITION: Texinfo. (line 35) +* Texinfo flag, UPDATED: Texinfo. (line 35) +* Texinfo flag, UPDATED-MONTH: Texinfo. (line 35) +* Texinfo flag, VERSION: Texinfo. (line 35) +* texinfo.tex: Texinfo. (line 70) +* TEXINFOS primary, defined: Texinfo. (line 6) +* third-party files and CVS: CVS. (line 167) +* Third-party packages, interfacing with: Third-Party Makefiles. + (line 6) +* timestamps and CVS: CVS. (line 28) +* Transforming program names: Renaming. (line 6) +* trees, source vs. build: VPATH Builds. (line 6) +* true Example: true. (line 6) +* underquoted AC_DEFUN: Extending aclocal. (line 36) +* unexpected pass: Generalities about Testing. + (line 39) +* unexpected test pass: Generalities about Testing. + (line 39) +* Unified Parallel C support: Unified Parallel C Support. + (line 6) +* Uniform naming scheme: Uniform. (line 6) +* uninstall: Standard Targets. (line 24) +* uninstall <1>: Install Rules for the User. + (line 7) +* uninstall <2>: Extending. (line 41) +* uninstall-hook: Extending. (line 66) +* uninstall-local: Extending. (line 41) +* Unit tests: Parallel Test Harness. + (line 154) +* Unpacking: Basic Installation. (line 27) +* UPCFLAGS and AM_UPCFLAGS: Flag Variables Ordering. + (line 20) +* UPDATED Texinfo flag: Texinfo. (line 35) +* UPDATED-MONTH Texinfo flag: Texinfo. (line 35) +* Use Cases for the GNU Build System: Use Cases. (line 6) +* user variables: User Variables. (line 6) +* Using aclocal: configure. (line 6) +* ustar format: List of Automake options. + (line 159) +* v7 tar format: List of Automake options. + (line 159) +* Vala Support: Vala Support. (line 6) +* variables, conflicting: Extending. (line 14) +* Variables, overriding: General Operation. (line 51) +* variables, reserved for the user: User Variables. (line 6) +* VERSION Texinfo flag: Texinfo. (line 35) +* VERSION, prevent definition: Public Macros. (line 55) +* version.m4, example: Rebuilding. (line 12) +* version.sh, example: Rebuilding. (line 12) +* versioned binaries, installing: Extending. (line 86) +* VPATH builds: VPATH Builds. (line 6) +* wildcards: Wildcards. (line 6) +* Windows: EXEEXT. (line 6) +* xfail: Generalities about Testing. + (line 39) +* xpass: Generalities about Testing. + (line 39) +* yacc, multiple parsers: Yacc and Lex. (line 68) +* YFLAGS and AM_YFLAGS: Flag Variables Ordering. + (line 20) +* ylwrap: Yacc and Lex. (line 68) +* zardoz example: Complete. (line 35) + diff --git a/automake-1.15.1/doc/automake.texi b/automake-1.15.1/doc/automake.texi new file mode 100644 index 0000000..da0aa29 --- /dev/null +++ b/automake-1.15.1/doc/automake.texi @@ -0,0 +1,13215 @@ +\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 +#include + +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{http://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{http://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. + +@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. + +@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 nothing 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 not 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 use 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{ftp://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{http://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{http://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{http://debbugs.gnu.org/, GNU Bug Tracker} +and the @uref{http://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{http://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/automake-1.15.1/doc/fdl.texi b/automake-1.15.1/doc/fdl.texi new file mode 100644 index 0000000..16589f9 --- /dev/null +++ b/automake-1.15.1/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/automake-1.15.1/doc/help2man b/automake-1.15.1/doc/help2man new file mode 100755 index 0000000..e651b8d --- /dev/null +++ b/automake-1.15.1/doc/help2man @@ -0,0 +1,669 @@ +#!/usr/bin/perl -w + +# Generate a short man page from --help and --version output. +# 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 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 . + +# Written by Brendan O'Dea +# Available from ftp://ftp.gnu.org/gnu/help2man/ + +use 5.006; +use strict; +use Getopt::Long; +use Text::Tabs qw(expand); +use POSIX qw(strftime setlocale LC_ALL); + +my $this_program = 'help2man'; +my $this_version = '1.40.8'; + +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] } + +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 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 +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 . +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 %append = (); +my @include = (); # retain order given in include file + +# Process include file (if given). Format is: +# +# [section name] +# verbatim text +# +# or +# +# /pattern/ +# verbatim text +# + +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 = \%include; + + while () + { + # 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; + push @include, $key unless $include{$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; + 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 = split; + GetOptions %opt_def; + } + + next; + } + + $hash->{$key} ||= ''; + $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, %append)) +{ + for (keys %$hash) { $hash->{$_} =~ s/\n+$/\n/ } +} + +sub get_option_value; + +# 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; + +# 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; +(my $program = $ARGV[0]) =~ s!.*/!!; +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: +# +# +# +# {GNU,Free} +# ({GNU,Free} ) +# - {GNU,Free} +# +# 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 = $1; + $package = $2; + $version = $3; +} +elsif (/^((?:GNU|Free) +)?(\S+) +(.*)/) +{ + $program = $2; + $package = $1 ? "$1$2" : $2; + $version = $3; +} +else +{ + $version = $_; +} + +$program =~ s!.*/!!; + +# No info for `info' itself. +$opt_no_info = 1 if $program eq 'info'; + +# 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 ($include{_('NAME')}) +{ + if ($opt_name) # --name overrides --include contents. + { + $_ = "$program \\- $opt_name\n"; + } + elsif ($_) # 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/^\./\\&./; + + $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; + +sub convert_option; + +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; + } + + # 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'; + $include{$sect} ||= ''; + while (s/^$indent\Q$prefix\E(\S.*)\n*//) + { + $include{$sect} .= "$break\n\\f(CW$prefix$1\\fR\n"; + $break = '.br'; + } + + next; + } + + my $matched = ''; + $include{$sect} ||= ''; + + # Sub-sections have a trailing colon and the second line indented. + if (s/^(\S.*:) *\n / /) + { + $matched .= $& if %append; + $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; + $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; + $content = ".HP\n\x84$1\n"; + $indent = 80; # not continued + } + + # Indented paragraph with tag. + elsif (s/^( +(\S.*?) +)(\S.*)\n//) + { + $matched .= $& if %append; + $indent = length $1; + $content = ".TP\n\x84$2\n\x84$3\n"; + } + + # Indented paragraph. + elsif (s/^( +)(\S.*)\n//) + { + $matched .= $& if %append; + $indent = length $1; + $content = ".IP\n\x84$2\n"; + } + + # Left justified paragraph. + else + { + s/(.*)\n//; + $matched .= $& if %append; + $content = ".PP\n" if $include{$sect}; + $content .= "$1\n"; + } + + # Append continuations. + while ($indent ? s/^ {$indent}(\S.*)\n// : s/^(\S.*)\n//) + { + $matched .= $& if %append; + $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; + + # Convert options. + s/(^| |\()(-[][\w=-]+)/$1 . convert_option $2/mge; + + # 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 bugs to + # GNU home page: + # ... + s/\n([[:upper:]])/\n.br\n$1/g; + } + } + + # Check if matched paragraph contains /pat/. + if (%append) + { + for my $pat (keys %append) + { + if ($matched =~ $pat) + { + $content .= ".PP\n" unless $append{$pat} =~ /^\./; + $content .= $append{$pat}; + } + } + } + + $include{$sect} .= $content; +} + +# Refer to the real documentation. +unless ($opt_no_info) +{ + my $info_page = $opt_info || $program; + + $sect = _('SEE ALSO'); + $include{$sect} ||= ''; + $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 +} + +# Output header. +print <$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; + } + + return $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'; + } + + $_; +} diff --git a/automake-1.15.1/doc/stamp-vti b/automake-1.15.1/doc/stamp-vti new file mode 100644 index 0000000..7e17bc5 --- /dev/null +++ b/automake-1.15.1/doc/stamp-vti @@ -0,0 +1,4 @@ +@set UPDATED 17 June 2017 +@set UPDATED-MONTH June 2017 +@set EDITION 1.15.1 +@set VERSION 1.15.1 diff --git a/automake-1.15.1/doc/version.texi b/automake-1.15.1/doc/version.texi new file mode 100644 index 0000000..7e17bc5 --- /dev/null +++ b/automake-1.15.1/doc/version.texi @@ -0,0 +1,4 @@ +@set UPDATED 17 June 2017 +@set UPDATED-MONTH June 2017 +@set EDITION 1.15.1 +@set VERSION 1.15.1 diff --git a/automake-1.15.1/gen-testsuite-part b/automake-1.15.1/gen-testsuite-part new file mode 100755 index 0000000..53b5f39 --- /dev/null +++ b/automake-1.15.1/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 . + +#-------------------------------------------------------------------------- + +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 = )) + { + 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 <&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 <{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 < ["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 <{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/automake-1.15.1/lib/Automake/ChannelDefs.pm b/automake-1.15.1/lib/Automake/ChannelDefs.pm new file mode 100644 index 0000000..145ff47 --- /dev/null +++ b/automake-1.15.1/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 . + +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). 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. For some of them we list a shorthand +function that makes the code more readable. + +=over 4 + +=item C + +Fatal errors. Use C<&fatal> to send messages over this channel. + +=item C + +Common errors. Use C<&error> to send messages over this channel. + +=item C + +Errors related to GNU Standards. + +=item C + +Errors related to GNU Standards that should be warnings in 'foreign' mode. + +=item C + +Errors related to GNITS Standards (silent by default). + +=item C + +Internal errors. Use C<&prog_error> to send messages over this channel. + +=item C + +Warnings related to GNU Coding Standards. + +=item C + +Warnings about obsolete features (silent by default). + +=item C + +Warnings about user redefinitions of Automake rules or +variables (silent by default). + +=item C + +Warnings about non-portable constructs. + +=item C + +Extra warnings about non-portable constructs covering obscure tools. + +=item C + +Warnings about weird syntax, unused variables, typos... + +=item C + +Warnings about unsupported (or mis-supported) features. + +=item C + +Messages output in C<--verbose> mode. Use C<&verb> to send such messages. + +=item C + +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 + +Display warning categories. + +=cut + +sub usage () +{ + print < + +Signal a programming error (on channel C), +display C<$MESSAGE>, and exit 1. + +=cut + +sub prog_error ($;%) +{ + my ($msg, %opts) = @_; + msg 'automake', '', $msg, %opts; +} + +=item C + +=item C + +Uncategorized errors. + +=cut + +sub error ($;$%) +{ + my ($where, $msg, %opts) = @_; + msg ('error', $where, $msg, %opts); +} + +=item C + +=item C + +Fatal errors. + +=cut + +sub fatal ($;$%) +{ + my ($where, $msg, %opts) = @_; + msg ('fatal', $where, $msg, %opts); +} + +=item C + +C<--verbose> messages. + +=cut + +sub verb ($;%) +{ + my ($msg, %opts) = @_; + $msg = "thread " . threads->tid . ": " . $msg + if $perl_threads; + msg 'verb', '', $msg, %opts; +} + +=item C + +If C<$CATEGORY> is C, turn on channel C. +If it's C, turn C off. +Else handle C and C 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 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 the argument of C<--warning=CATEGORY> or C<-WCATEGORY>. + +C<$OPTIONS> is C<"--warning"> or C<"-W">, C<$ARGUMENT> is C. + +This is meant to be used as an argument to C. + +=cut + +sub parse_warnings ($$) +{ + my ($opt, $categories) = @_; + + foreach my $cat (split (',', $categories)) + { + msg 'unsupported', "unknown warning category '$cat'" + if switch_warning $cat; + } +} + +=item C + +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 + +=head1 HISTORY + +Written by Alexandre Duret-Lutz EFE. + +=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/automake-1.15.1/lib/Automake/Channels.pm b/automake-1.15.1/lib/Automake/Channels.pm new file mode 100644 index 0000000..a98fb51 --- /dev/null +++ b/automake-1.15.1/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 . + +############################################################### +# 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 + ®ister_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 options of C and C 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, C, C + +Possible values for the C options. This selects the part +of the message that should be considered when filtering out duplicates. +If C is used, the location and the explanation message +are used for filtering. If C is used, only the explanation +message is used (so the same message will be filtered out if it appears +at different locations). C 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, C + +Possible values for the C options. +Use C for error messages that should be printed only +once during the execution of the program, C for message that +should be printed only once per file. (Actually, C does not +do this now when files are changed, it relies on you calling +C 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, C, and C +functions. The possible keys, with their default value are: + +=over + +=item C '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 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 \*STDERR> + +The file where the error should be output. + +=item C 0> + +Whether the channel should be silent. Use this do disable a +category of warning, for instance. + +=item C 1> + +Whether, with multi-threaded execution, the message should be queued +for ordered output. + +=item C UP_LOC_TEXT> + +The part of the message subject to duplicate filtering. See the +documentation for the C, C, and C +constants above. + +C can also be set to an arbitrary string that will be used +instead of the message when considering duplicates. + +=item C US_LOCAL> + +The scope of duplicate filtering. See the documentation for the +C, and C constants above. + +=item C
''> + +A string to prepend to each message emitted through this channel. +With partial messages, only the first part will have C
+prepended. + +=item C