From: Stepan K. <ka...@uc...> - 2006-04-11 19:48:52
Attachments:
autoconf-20060411-ln.patch
|
Hello Ralf, > > Ralf Wildenhues <Ral...@gm...> writes: > > > * lib/m4sugar/m4sh.m4 (_AS_LN_S_PREPARE): If `ln -s file1 file2' > > > succeeded, but `ln -s file dir' failed, take care to remove the > > > leftover target before the next test, to prevent its spurious > > > failure; also make sure `ln file dir' works before selecting it. > > > Thanks to Keith Marshall for pointing this out. I don't like this; this is all getting very crufty in a course of just a few days. Let start from poit 0 again: Iteration 0 ----------- The most natural thing to do is: if ln -s f1 f2; then as_ln_s='ln -s' elif ln f1 f2; then as_ln_s=ln else as_ln_s='cp -p' fi That is what was in Autoconf before 2001-01-23 Iteration 1 ----------- We have to catch on exception: DJGPP < 2.04 and its executable wrappers. We know that the first `ln -s' succeeds there, so we know where the additional code is to be inserted. if ln -s f1 f2; then if test -f f2.exe; then # DJGPP < 2.04 has no links at all. as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln f1 f2; then as_ln_s=ln else as_ln_s='cp -p' fi Note that this code has been present in Autoconf since 2001-01-23 until 2006-04-07. Iteration 2 ----------- We need to catch yet another buggy platform, MSYS, where neither `ln -s' nor `ln' work if the target is directory. This means we cannot use neither of them there, and have to default to `cp -p'. Again, we know that `ln -s f1 f2' succeeds there, not creating `f2.exe', so we know where the exception code should be placed. if ln -s f1 f2; then if test -f f2.exe; then # DJGPP < 2.04 has no links at all. as_ln_s='cp -p' elif ln -s f1 dir; then as_ln_s='ln -s' else # MSYS bug: as_ln_s='cp -p' fi elif ln f1 f2; then as_ln_s=ln else as_ln_s='cp -p' fi or, more compactly: if ln -s f1 f2; then as_ln_s='ln -s' if test -f f2.exe; then # DJGPP < 2.04 has no links at all. as_ln_s='cp -p' else # Check for MSYS bug: ln -s f1 dir || as_ln_s='cp -p' fi elif ln f1 f2; then as_ln_s=ln else as_ln_s='cp -p' fi or, even more compactly: if ln -s f1 f2; then as_ln_s='ln -s' # ... but check for MSYS and DJGPP < 2.04: ln -s f1 dir && test ! -f f2.exe || as_ln_s='cp -p' elif ln f1 f2; then as_ln_s=ln else as_ln_s='cp -p' fi Attached please find an implmentation of this change, to be applied against current CVS. Have a nice day, Stepan |
From: Ralf W. <Ral...@gm...> - 2006-04-11 21:35:27
|
Hi Stepan, * Stepan Kasal wrote on Tue, Apr 11, 2006 at 09:48:28PM CEST: > > Attached please find an implmentation of this change, to be applied > against current CVS. Go ahead. Cheers, Ralf > 2006-04-11 Stepan Kasal <ka...@uc...> > > * lib/m4sugar/m4sh.m4 (_AS_LN_S_PREPARE): Simplify the summary of > all the changes since 2006-04-07. |
From: Stepan K. <ka...@uc...> - 2006-04-12 12:23:15
|
Hello, On Tue, Apr 11, 2006 at 11:35:16PM +0200, Ralf Wildenhues wrote: > * Stepan Kasal wrote on Tue, Apr 11, 2006 at 09:48:28PM CEST: > > * lib/m4sugar/m4sh.m4 (_AS_LN_S_PREPARE): Simplify the summary of > > all the changes since 2006-04-07. > Go ahead. installed. Thank you for review. Stepan |
From: Earnie B. <ea...@us...> - 2006-04-05 12:01:24
|
Quoting Rolf Ebert <rol...@gm...>: > I was under the impression that "ln -s" is implemented as cp in the > MSYS shell. However > > $ mkdir dir > $ ln -s Makefile dir > ln: `dir': cannot overwrite directory > $ cp Makefile dir > The fix for this would be the source file for ln itself. > This construct is used in the gcc Makefiles, more specifically in > .../gcc/ada/Makefile.in. In the past I edited the Makefile.in not to > use $(LN_S) and replaced it with cp. > > I wonder how a clean solution should look like. Shouldn't gcc's > configure script detect that ln -s does *not* work correctly and > substitute it by cp? Is it just my msys installation where ln -s > does not work correctly with directories? > I tried to modify ln to work as much as ln could by using a copy. I think this should be fixed in the MSYS ln source file. You could try removing/renaming ln to see if the configure script will DTRT. Earnie Boyd http://shop.siebunlimited.com |