[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: automake manual: distclean
From: |
Ralf Wildenhues |
Subject: |
Re: automake manual: distclean |
Date: |
Thu, 27 Nov 2008 22:47:56 +0100 |
User-agent: |
Mutt/1.5.18 (2008-05-17) |
Hello Jan, Andreas,
thanks for the bug report.
* Andreas Schwab wrote on Wed, Nov 26, 2008 at 07:48:32PM CET:
> Jan Engelhardt <address@hidden> 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)/@address@hidden || echo
@address@hidden' ';'
+ find . -type f -exec sh -c 'test -f $(srcdir)/$$1 || echo $$1' \
+ sh '@address@hidden' ';'
@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
+
+:
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: automake manual: distclean,
Ralf Wildenhues <=