This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] Fix move-if-change for VPATH builds
- From: Nick Clifton <nickc at redhat dot com>
- To: Dmitry Shatrov <shatrov at gmail dot com>
- Cc: binutils at sourceware dot org
- Date: Fri, 04 Jan 2008 16:12:16 +0000
- Subject: Re: [PATCH] Fix move-if-change for VPATH builds
- References: <1198361584.18856.29.camel@localhost.localdomain>
Hi Dmitry,
What I suggest is making "move-if-change" aware of the directory where
building is performed by passing "$(srcdir)" to it as the first
argument. The only change in the algorithm is adding the following rule:
"If the destination file "dstfile" is the same as the source file and
the destination file doesn't exist in the current directory, then create
a symbolic link "dstfile" pointing to "$(srcdir)/dstfile".
It seems to me that this patch changes the semantics of move-if-change quite
considerably. Before:
move-if-change foo bar
meant:
"In the current directory replace bar with foo if they are different
or if bar does not exist, and then regardless of whether the
replacement happened, delete foo".
with the patch applied we would have:
move-if-change <srcdir> foo bar
meaning:
"In the current directory replace bar with foo, but only if foo is
different from some other file <srcdir>/bar or if <srcdir>/bar does not
exist. If <srcdir>/bar does not exist then go ahead with the replacement
even if foo and bar are the same. Then regardless of whether the
replacement happened, delete foo, but if the replacement did not happen
and bar does not exist then create a symbolic link called bar back to
<srcdir>/bar."
My points are:
a) If SRCDIR/DEST does not exist then the patched script will always move
SOURCE to DEST even if they both exist and are both the same.
b) The script's behaviour is no longer "like mv $1 $2", so the comment at
the start ought to be changed.
c) The patched script assumes that symbolic links can be created - this is
not true of all file systems and all OSes.
Hence as it stands I do not think that the patch is suitable for inclusion into
the sources. Plus as DJ mentioned you will need buy-in from the GCC and GDB
projects before a patch like this can be applied, so you will need to propose
it to them as well.
Cheers
Nick