From 6a85bc48aa9691574053a153d79cc79cd28e311f Mon Sep 17 00:00:00 2001 From: Ralf Wildenhues Date: Wed, 6 Apr 2011 22:17:01 +0200 Subject: [PATCH] Fix makedepend depmode for VPATH builds. * lib/depcomp [makedepend]: Remove any VPATH prefix from the object file name, so a rebuild doesn't attempt to update the .Po files in the source tree. * tests/depcomp9.test: New test. * tests/Makefile.am (TESTS): Update. * NEWS: Update. Signed-off-by: Ralf Wildenhues --- ChangeLog | 10 ++++++ NEWS | 2 ++ lib/depcomp | 9 +++--- tests/Makefile.am | 1 + tests/Makefile.in | 1 + tests/depcomp9.test | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 109 insertions(+), 4 deletions(-) create mode 100755 tests/depcomp9.test diff --git a/ChangeLog b/ChangeLog index 1be7709..4a18921 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2011-04-08 Ralf Wildenhues + + Fix makedepend depmode for VPATH builds. + * lib/depcomp [makedepend]: Remove any VPATH prefix from the + object file name, so a rebuild doesn't attempt to update the + .Po files in the source tree. + * tests/depcomp9.test: New test. + * tests/Makefile.am (TESTS): Update. + * NEWS: Update. + 2011-04-02 Stefano Lattarini tests: fix timestamp-related failures diff --git a/NEWS b/NEWS index 3132b16..6bd67f6 100644 --- a/NEWS +++ b/NEWS @@ -56,6 +56,8 @@ 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. New in 1.11: diff --git a/lib/depcomp b/lib/depcomp index df8eea7..ce9419c 100755 --- a/lib/depcomp +++ b/lib/depcomp @@ -1,10 +1,10 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2009-04-28.21; # UTC +scriptversion=2011-04-08-18; # UTC -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free -# Software Foundation, Inc. +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 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 @@ -503,7 +503,8 @@ makedepend) touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation diff --git a/tests/Makefile.am b/tests/Makefile.am index d4d9474..c894864 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -277,6 +277,7 @@ depcomp6.test \ depcomp7.test \ depcomp8a.test \ depcomp8b.test \ +depcomp9.test \ depdist.test \ depend.test \ depend2.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 4d4c21f..6a4ae92 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -547,6 +547,7 @@ depcomp6.test \ depcomp7.test \ depcomp8a.test \ depcomp8b.test \ +depcomp9.test \ depdist.test \ depend.test \ depend2.test \ diff --git a/tests/depcomp9.test b/tests/depcomp9.test new file mode 100755 index 0000000..d137fad --- /dev/null +++ b/tests/depcomp9.test @@ -0,0 +1,90 @@ +#! /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 . + +# makedepend should work in VPATH mode. + +# Here's the bug: makedepend will prefix VPATH to the object file name, +# thus the second make will invoke depcomp with object='../../src/foo.o', +# causing errors such as: +# touch: cannot touch `../../src/.deps/foo.TPo': No such file or directory +# makedepend: error: cannot open "../../src/.deps/foo.TPo" +# ../../depcomp: line 560: ../../src/.deps/foo.TPo: No such file or directory + +# We include subfoo only to be sure that we don't remove too much +# from the object file name. + +required='makedepend' +. ./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 <src/foo.c <src/sub/subfoo.c <out 2>&1 || { cat out; Exit 1; } +cat out +grep 'src/[._]deps' out && Exit 1 + +: -- 2.7.4