On 4/5/2011 10:21 AM, Ralf Wildenhues wrote:
> * Charles Wilson wrote on Tue, Apr 05, 2011 at 04:15:02PM CEST:
>> On 4/5/2011 9:21 AM, Arnaud Charlet wrote:
>>>> I'm one of the MSys "devs" (if you want to call the sporadic process of
>>>> updating MSys "development"). I'll take a look at implementing
>>>> ln -s file dir
>>>> as synonymous with
>>>> ln -s file dir/basename-of-file
>>>> in the next few days.
>
> Please use LN_S *only* in the way that it is documented. Let me quote 'info
> Autoconf --index LN_S':
>
> -- Macro: AC_PROG_LN_S
> If `ln -s' works on the current file system (the operating system
> and file system support symbolic links), set the output variable
> `LN_S' to `ln -s'; otherwise, if `ln' works, set `LN_S' to `ln',
> and otherwise set it to `cp -p'.
>
> If you make a link in a directory other than the current
> directory, its meaning depends on whether `ln' or `ln -s' is used.
> To safely create links using `$(LN_S)', either find out which form
> is used and adjust the arguments, or always invoke `ln' in the
> directory where the link is to be created.
>
> In other words, it does not work to do:
> $(LN_S) foo /x/bar
>
> Instead, do:
>
> (cd /x && $(LN_S) foo bar)
OK, so you're saying "don't 'fix' MSys's ln -s behavior since doing so
would contravene normal expectations"
However, as Arno pointed out, right now for MSys LN_S is defined as "cp
-p" so it appears that "ln -s" behavior is a red herring.
This confuses me, because as I demonstrated earlier:
$ cp -p file dir
*works* on MSys. So, I think we need more information from Kai about
WHAT exactly is failing here. He claims that
cp -p file dir
fails for him (and, wants to 'fix' it by adding -r, which implies that
some element of the foreach statement resolves to a *dir*, not a *file*
-- but Arno says that is not the case. /me = confused...)
What version of coreutils, and msys, are you using, Kai? I tested with
msys-1.0.16 and coreutils-5.97-3. Contact me offlist if you want help
running these details down.
As a side issue, it ALSO seems to me that Ada's Mafile.in is doing it
wrong, given Ralf's statements above:
# Copy target independent sources
$(foreach f,$(ADA_INCLUDE_SRCS) $(LIBGNAT_SRCS), \
$(LN_S) $(fsrcpfx)ada/$(f) $(RTSDIR) ;) true
But as this isn't shell code (some sort of Ada buildfile? I'm not
familiar with building Ada), I'm not sure exactly how to "fix" it in the
event LN_S is ACTUALLY defined as "ln -s" or "ln" (which, recall, is NOT
the case on MSYS, which apparently uses cp -p).
--
Chuck