[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Axiom-developer] [build-improvements] msys and double-colon
From: |
Gabriel Dos Reis |
Subject: |
Re: [Axiom-developer] [build-improvements] msys and double-colon |
Date: |
10 Apr 2007 11:39:48 -0500 |
"Bill Page" <address@hidden> writes:
| On April 10, 2007 11:55 AM Gabriel Dos Reis wrote:
| >
| > With a recent version of msys (Windows XP), I'm seeing a
| > surprising behaviour where the '::' in boottran::boottoclc
| > will be passed to the Lisp image as a semicolon! I don't know
| > whether is GCL doign it or msys, but I think it is msys.
|
| Do you mean when passed via the command line?
Yeah, sort of; this is from document.in.
Note that similar thing in the Makefile works -- and the makefile is
supposed to use the same shell.
| I think MSYS does
| do some mangling of things it thinks might be file names. There
| is a difference for Windows in the PATH separator - Windows
| uses ; instead of :.
Yes, I know that. But, how do you explain the difference between the
behaviour of document and that of Makefile?
| Perhaps that is relevant. But you might
| want to report this to the MSYS developers.
Definitely, something things that it sees a path separator when it is
not.
| > Another hunk of this patch concerns the use of "ln -s".
| > With Autoconf-2.60 and later, Autoconf test all possible ways
| > of using "ln -s" (between files, from files to directories,
| > etc.) and if any of those possibilities fails, Autoconf
| > deduces that "ln -s" is unusable on the platform, therefore
| > default to "cp -p". In the cases where we use "ln -s", it is
| > for just creating a symlink to a directory (which works
| > on msys) and the fallback "cp -p" just does not work for that
| > situation!
|
| As far as I know autoconf is right and Windows does not support
| symlinks.
Except that I'm talking of msys, not windows. Autoconf is right in
its decision but for a different reason: it does not know beforehand
how I'm going to use "ln -s"; therefore it should not tell me that
"ln -s" works, when in fact it is "ln -s" works with qualification.
The exact fallback has this comment:
if ln -s conf$$.file conf$$ 2>/dev/null; then
as_ln_s='ln -s'
# ... but there are two gotchas:
# 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
# 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
# In both cases, we have to default to `cp -p'.
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
as_ln_s='cp -p'
elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln
else
as_ln_s='cp -p'
fi
Notice that the first test passes fine -- the only way we use "ln -s".
It is the second test that fails -- when one uses a file as first
argument and a directory as the second argument.
Try
$ cd /tmp && mkdir foo && touch bar
$ ln -s bar foo
You should get an error. However
$ rm bar && ln -s foo bar
works just fine. That is what we use.
| I recall that MSYS actually internally "implements"
| 'ln -s' as a copy.
More like a link than a copy in recent versions -- it augments the
"inode" counts.
| I am not sure why you say 'cp -p' doesn't
| work. What error do you get?
Oh, cp by defaults works on files. It you want to use it on
directories then you have to specify -r. That behaviour is uniform
and not specific to msys. Therefore Autoconf is wrong to default to
"cp -p" when it does not know how I'm going to use LN_S.
-- Gaby