Hello Jan, Andreas, thanks for the bug report.
* Andreas Schwab wrote on Wed, Nov 26, 2008 at 07:48:32PM CET: > Jan Engelhardt <[EMAIL PROTECTED]> writes: > > > This is not quite portable -- unless GNU find, which implies a > > path of "." if nothing else is specified, Solaris's explicitly requires > > a path to find. It should therefor read > > > > distcleancheck_listfiles = \ > > find . -type f -exec sh -c 'test -f $(srcdir)/{} || echo {}' ';' > > This isn't quite portable either. POSIX only requires that find -exec > substitutes in arguments consisting of exactly {}. Good points. The above fails with native 'find' on Solaris 10, HP-UX 11.23, AIX 5.3, Tru64/OSF5.1, IRIX 6.5. The Posix-conforming find . -type f -exec sh -c ' for arg do test -f $(srcdir)/$$arg || echo $$arg done' sh '{}' + doesn't work with OpenBSD 4.0, HP-UX 10.20, AIX 4.3.3, Tru64/OSF5.1, IRIX 6.5, so we have to use the (less efficient but more portable) code as below. I've pushed that and added Jan to THANKS, master and branch-1-10. Thanks, Ralf Fix portability issues in distcleancheck_listfiles doc example. * doc/automake.texi (Dist): In the `distcleancheck_listfiles' code example, add `.' path, for Solaris `find', also rewrite so `{}' appears only once and as separate argument, for Posix. * THANKS: Update. * tests/distcleancheck.test: New test. * tests/Makefile.am: Update. Report by Jan Engelhardt and Andreas Schwab. diff --git a/doc/automake.texi b/doc/automake.texi index 065e6fa..1190f2e 100644 --- a/doc/automake.texi +++ b/doc/automake.texi @@ -8207,7 +8207,8 @@ following definition instead: @example distcleancheck_listfiles = \ - find -type f -exec sh -c 'test -f $(srcdir)/@[EMAIL PROTECTED] || echo @[EMAIL PROTECTED]' ';' + find . -type f -exec sh -c 'test -f $(srcdir)/$$1 || echo $$1' \ + sh '@[EMAIL PROTECTED]' ';' @end example The above definition is not the default because it's usually an error if diff --git a/tests/Makefile.am b/tests/Makefile.am index 2a8e847..cac16a1 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -228,6 +228,7 @@ dirforbid.test \ dirlist.test \ dirlist2.test \ discover.test \ +distcleancheck.test \ distcom2.test \ distcom3.test \ distcom4.test \ diff --git a/tests/distcleancheck.test b/tests/distcleancheck.test new file mode 100755 index 0000000..5f66a12 --- /dev/null +++ b/tests/distcleancheck.test @@ -0,0 +1,66 @@ +#! /bin/sh +# Copyright (C) 2008 Free Software Foundation, Inc. +# +# This program is free software; you can 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 <http://www.gnu.org/licenses/>. + +# Make sure the suggested `distcleancheck_listfiles' in the manual works. +# The example Makefile.am we use is from the FAQ entry `distcleancheck'. + +. ./defs || Exit 1 + +set -e + +cat >>configure.in << 'END' +AC_PROG_CC +AC_OUTPUT +END + +cat > Makefile.am << 'END' +# This Makefile.am is bogus. See @node{distcleancheck} in the manual +# for how to fix it properly. +bin_PROGRAMS = foo +foo_SOURCES = foo.c +dist_man_MANS = foo.1 + +foo.1: foo$(EXEEXT) + echo man page for foo$(EXEEXT) > foo.1 + +## Ignore warnings about overridden variables +AUTOMAKE_OPTIONS = -Wno-override +distcleancheck_listfiles = \ + find . -type f -exec sh -c 'test -f $(srcdir)/$$1 || echo $$1' \ + sh '{}' ';' +END + +cat >foo.c <<'END' +int main () { return 0; } +END + +$ACLOCAL +$AUTOCONF +$AUTOMAKE + +./configure +$MAKE +$MAKE distcheck + +# Now ensure that we really needed the override. +sed '/distcleancheck_listfiles/,$d' Makefile.am > t +mv -f t Makefile.am +$AUTOMAKE +./configure +$MAKE +$MAKE -e distcheck && Exit 1 + +: