Hello Ralf and Bruno. I've spotted a couple of harmful typos in the patch, and I also have a very minor nit.
On Monday 11 April 2011, Ralf Wildenhues wrote: > Fix hp depmode for VPATH builds with GNU make. > > * lib/depcomp: Be sure to remove VPATH-prefixed object from > dependency output when creating stub rule. > * tests/depcomp10.test: New test. > * tests/Makefile.am (TESTS): Update. > * NEWS: Update. > Report by Bruno Haible. > > diff --git a/NEWS b/NEWS > index 3cd5ab0..c8219bd 100644 > --- a/NEWS > +++ b/NEWS > @@ -57,7 +57,7 @@ Bugs fixed in 1.11.0a: > - The parallel-tests driver now does not produce erroneous results > with Tru64/OSF 5.1 sh upon unreadable log files any more. > > - - The makedepend depmode now works better with VPATH builds. > + - The makedepend and hp depmodes now works better with VPATH builds. > > - Java sources specified with check_JAVA are not compiled anymore upon > "make all", but only upon "make check". > diff --git a/lib/depcomp b/lib/depcomp > index 8097c19..e996e5d 100755 > --- a/lib/depcomp > +++ b/lib/depcomp > @@ -1,7 +1,7 @@ > #! /bin/sh > # depcomp - compile a program generating dependencies as side-effects > > -scriptversion=2011-04-09-11; # UTC > +scriptversion=2011-04-11-05; # UTC > > # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2011, > # Free Software Foundation, Inc. > @@ -158,10 +158,12 @@ gcc) > ' < "$tmpdepfile" | > ## Some versions of gcc put a space before the `:'. On the theory > ## that the space means something, we add a space to the output as > -## well. > +## well. hp depmode also adds that space, but also prefixes the VPATH > +## to the object. Take care to not repeat it in the output. > ## Some versions of the HPUX 10.20 sed can't process this invocation > ## correctly. Breaking it into two sed invocations is a workaround. > - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" > + sed -e 's/^\\$//' -e '/^$/d' -e -e "s|.*$object$||" '/:$/d' \ > Is the doubled "-e -e" above intended, or (as I'd guess) a typo? > + | sed -e 's/$/ :/' >> "$depfile" > rm -f "$tmpdepfile" > ;; > > diff --git a/tests/Makefile.am b/tests/Makefile.am > index bf07f2b..4e87805 100644 > --- a/tests/Makefile.am > +++ b/tests/Makefile.am > @@ -278,6 +278,7 @@ depcomp7.test \ > depcomp8a.test \ > depcomp8b.test \ > depcomp9.test \ > +depcomp10.test \ > depdist.test \ > depend.test \ > depend2.test \ > diff --git a/tests/depcomp10.test b/tests/depcomp10.test > new file mode 100644 > index 0000000..4fdee40 > --- /dev/null > +++ b/tests/depcomp10.test > @@ -0,0 +1,81 @@ > +#! /bin/sh > +# Copyright (C) 2011 Free Software Foundation, Inc. > +# > +# This program is free software; you can redistribute it and/or modify > +# it under the terms of the GNU General Public License as published by > +# the Free Software Foundation; either version 2, or (at your option) > +# any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program. If not, see <http://www.gnu.org/licenses/>. > + > +# hp depmode should work with GNU make in VPATH mode (bug similar to > +# depcomp9.test). > + > +# Here's the bug: hp depmode will prefix VPATH to the object file name, > +# thus the second gmake will invoke depcomp with object='../../src/foo.o', > +# causing errors such as: > +# cpp: "", line 0: error 4066: Cannot create > "../../gllib/.deps/nonblocking.TPo" file for > "-M../../gllib/.deps/nonblocking.TPo" option. (No such file or dir > ++ectory[errno=2]) > This stray "+ectory[errno=2])" string here (copy & paste blunder?) causes the script to abort unconditionally: $ sh depcomp10.test depcomp10.test: line 24: syntax error near unexpected token `)' depcomp10.test: line 24: `+ectory[errno=2])' > + > +required=GNUmake > +. ./defs || Exit 1 > + > +mkdir src src/sub build > + > +cat >> configure.in << 'END' > +AC_PROG_CC > +AM_PROG_CC_C_O > +AC_CONFIG_FILES([src/Makefile]) > +AC_OUTPUT > +END > + > +cat > Makefile.am << 'END' > +SUBDIRS = src > +END > + > +cat > src/Makefile.am << 'END' > +AUTOMAKE_OPTIONS = subdir-objects > +bin_PROGRAMS = foo > +foo_SOURCES = foo.c foo.h sub/subfoo.c > +END > + > +cat > src/foo.h <<EOF > +extern int subfoo (void); > +EOF > + > +cat >src/foo.c <<EOF > +#include "foo.h" > +int main (void) > +{ > + return subfoo (); > +} > +EOF > + > +cat >src/sub/subfoo.c <<EOF > +#include "foo.h" > +int subfoo (void) > +{ > + return 0; > +} > +EOF > + > +$ACLOCAL > +$AUTOCONF > +$AUTOMAKE -a > + > +cd build > +../configure am_cv_CC_dependencies_compiler_type=hp > +$MAKE || Exit 77 > Here I'd put the same comment that is in depcomp9.test: # Do not error out with the first make, as the forced 'hp' depmode # might not actually work, but we have overridden the _AM_DEPENDENCIES # tests. The actual error only happens the second time the objects # are built, because 'hp' has silently messed up the .Po files the # first time. > +$MAKE clean > + > +$MAKE >out 2>&1 || { cat out; Exit 1; } > +cat out > +grep 'src/[._]deps' out && Exit 1 > + > +: > > Regards, Stefano