axiom-developer
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]