From e89ec38d380faa0f0c652d347614d9be2c870f37 Mon Sep 17 00:00:00 2001 From: Ralf Wildenhues Date: Wed, 28 Mar 2007 23:08:06 +0000 Subject: [PATCH] * lib/depcomp (aix): Rewrite depmode in the spirit of the tru64 one. Fixes failure to catch dependencies with libtool and xlc in case of enable_static=no (which is the default on AIX without runtimelinking). * tests/depcomp7.test: Run test once with --disable-shared and once with --disable-static, to expose failure systematically. * NEWS: Update. --- ChangeLog | 10 ++++++++++ NEWS | 7 ++++++- lib/depcomp | 33 +++++++++++++++++++-------------- tests/depcomp7.test | 36 ++++++++++++++++++++++-------------- 4 files changed, 57 insertions(+), 29 deletions(-) diff --git a/ChangeLog b/ChangeLog index aab25c1eb..5dbfeb62a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2007-03-29 Ralf Wildenhues + + * lib/depcomp (aix): Rewrite depmode in the spirit of the tru64 + one. Fixes failure to catch dependencies with libtool and xlc + in case of enable_static=no (which is the default on AIX without + runtimelinking). + * tests/depcomp7.test: Run test once with --disable-shared and + once with --disable-static, to expose failure systematically. + * NEWS: Update. + 2007-03-29 Stepan Kasal Ralf Wildenhues diff --git a/NEWS b/NEWS index 9237d009f..50b54919b 100644 --- a/NEWS +++ b/NEWS @@ -15,6 +15,11 @@ New in 1.10a: - install-sh supports -C, which does not update the installed file (and its time stamps) if the contents did not change. +Bugs fixed in 1.10a: + +* Long standing bugs: + + - Fix aix dependency tracking for libtool objects. New in 1.10: @@ -1250,7 +1255,7 @@ New in 0.20: ----- Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -2004, 2005 Free Software Foundation, Inc. +2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of GNU Automake. diff --git a/lib/depcomp b/lib/depcomp index ca5ea4e1e..e5f9736c7 100755 --- a/lib/depcomp +++ b/lib/depcomp @@ -1,9 +1,9 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2006-10-15.18 +scriptversion=2007-03-29.01 -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software # Foundation, Inc. # This program is free software; you can redistribute it and/or modify @@ -215,34 +215,39 @@ aix) # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. - stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` - tmpdepfile="$stripped.u" + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u "$@" -M fi stat=$? - if test -f "$tmpdepfile"; then : - else - stripped=`echo "$stripped" | sed 's,^.*/,,'` - tmpdepfile="$stripped.u" - fi - if test $stat -eq 0; then : else - rm -f "$tmpdepfile" + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done if test -f "$tmpdepfile"; then - outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" - sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile diff --git a/tests/depcomp7.test b/tests/depcomp7.test index b2cb0d48d..56ec1a8d1 100755 --- a/tests/depcomp7.test +++ b/tests/depcomp7.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2006 Free Software Foundation, Inc. +# Copyright (C) 2006, 2007 Free Software Foundation, Inc. # # This file is part of GNU Automake. # @@ -65,7 +65,7 @@ cat >sub/bar.c <<'END' int bar() { return 0; } END -touch sub2/sub3/ba3.h +echo 'extern int x;' > sub2/sub3/ba3.h cat >sub/bar.h <<'END' #include @@ -91,15 +91,23 @@ $ACLOCAL $AUTOCONF $AUTOMAKE -a -./configure --enable-dependency-tracking -$MAKE - -# check that dependency tracking works -if grep 'depmode=none' Makefile; then : -else - cd sub2 - $sleep - echo 'choke me' > sub3/ba3.h - if $MAKE; then exit 1; fi -fi -: +for staticshared in --disable-shared "" --disable-static; do + ./configure --enable-dependency-tracking $staticshared + $MAKE + + # check that dependency tracking works + if grep 'depmode=none' Makefile; then : + else + cd sub2 + $sleep + echo 'choke me' > sub3/ba3.h + if $MAKE; then exit 1; fi + cd .. + fi + + $MAKE distclean + test ! -f sub2/sub3/ba3.u + test ! -f sub2/sub3/ba3.d + + echo 'extern int x;' > sub2/sub3/ba3.h +done -- 2.47.2