From 971878288bec797087215f7fb1e7c398ef2f3a1a Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Tue, 6 Oct 2009 22:03:33 +0200 Subject: [PATCH] Fix 'compile' script to not call mv when target equals source. * lib/compile: Don't attempt to move the generated file to its target destination when it is already at the target destination. Avoids an mv failure with subdir-objects. * tests/ccnoco3.test: New test. * tests/Makefile.am: Adjust. Signed-off-by: Ralf Wildenhues --- ChangeLog | 10 +++++++ lib/compile | 6 ++-- tests/Makefile.am | 1 + tests/Makefile.in | 1 + tests/ccnoco3.test | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 96 insertions(+), 3 deletions(-) create mode 100755 tests/ccnoco3.test diff --git a/ChangeLog b/ChangeLog index f6bd507..9e45e73 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2009-10-06 Bruno Haible + Ralf Wildenhues + + Fix 'compile' script to not call mv when target equals source. + * lib/compile: Don't attempt to move the generated file to its + target destination when it is already at the target destination. + Avoids an mv failure with subdir-objects. + * tests/ccnoco3.test: New test. + * tests/Makefile.am: Adjust. + 2009-10-01 Stefano Lattarini (tiny change) Fix recommended way to run automake's test scripts with Zsh. diff --git a/lib/compile b/lib/compile index ec64c62..c0096a7 100755 --- a/lib/compile +++ b/lib/compile @@ -1,7 +1,7 @@ #! /bin/sh # Wrapper for compilers which do not understand `-c -o'. -scriptversion=2009-04-28.21; # UTC +scriptversion=2009-10-06.20; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 Free Software # Foundation, Inc. @@ -124,9 +124,9 @@ trap "rmdir '$lockdir'; exit 1" 1 2 15 ret=$? if test -f "$cofile"; then - mv "$cofile" "$ofile" + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then - mv "${cofile}bj" "$ofile" + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" diff --git a/tests/Makefile.am b/tests/Makefile.am index 62529a6..bab2ac3 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -103,6 +103,7 @@ canon5.test \ canon-name.test \ ccnoco.test \ ccnoco2.test \ +ccnoco3.test \ check.test \ check2.test \ check3.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 570b76d..02fa60a 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -337,6 +337,7 @@ canon5.test \ canon-name.test \ ccnoco.test \ ccnoco2.test \ +ccnoco3.test \ check.test \ check2.test \ check3.test \ diff --git a/tests/ccnoco3.test b/tests/ccnoco3.test new file mode 100755 index 0000000..2e9cd37 --- /dev/null +++ b/tests/ccnoco3.test @@ -0,0 +1,81 @@ +#! /bin/sh +# Copyright (C) 2001, 2002, 2008, 2009 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 . + +# Test to make sure `compile' doesn't call 'mv SRC SRC'. + +required=gcc +. ./defs || Exit 1 + +set -e + +cat >> configure.in << 'END' +AC_PROG_CC +AM_PROG_CC_C_O +AC_OUTPUT +END + +cat > Makefile.am << 'END' +AUTOMAKE_OPTIONS = subdir-objects +bin_PROGRAMS = wish +wish_SOURCES = a.c +END + +mkdir sub + +cat > a.c << 'END' +#include + +int main () +{ + printf ("hi\n"); +} +END + +cat > Mycomp << 'END' +#!/bin/sh + +case " "$* in + *\ -c*\ -o* | *\ -o*\ -c*) + exit 1 + ;; +esac + +exec gcc "$@" +END + +chmod +x Mycomp + +# Ignore user CFLAGS. +CFLAGS= +export CFLAGS + +$ACLOCAL +$AUTOCONF +$AUTOMAKE --copy --add-missing + +mkdir build +cd build + +# Make sure the compiler doesn't understand `-c -o' +CC=`pwd`/../Mycomp +export CC + +../configure +$MAKE 2>stderr || { cat stderr >&2; Exit 1; } +cat stderr >&2 +grep 'mv.*the same file' stderr && Exit 1 + +Exit 0 -- 2.7.4