Subject: bug#19989: 25.0.50; Build instructions on Windows

From: Eli Zaretskii <[email-masked]>
Date: Wed, 04 Mar 2015 05:42:59 +0200

> Date: Tue, 3 Mar 2015 12:30:37 -0800
> From: Ilya Zakharevich <[email-masked]>
> Cc: [email-masked]
> 
> On Tue, Mar 03, 2015 at 07:21:03PM +0200, Eli Zaretskii wrote:
> > > Date: Tue, 03 Mar 2015 19:00:09 +0200
> > > From: Eli Zaretskii <[email-masked]>
> > > Cc: [email-masked]
> > > 
> > > >   • mingw shell sets path to (essentially) FOO/msys/1.0/mingw/bin (here FOO
> > > >         is the install path), but there is no directory
> > > >           FOO/msys/1.0/mingw
> > > >         what is is
> > > >           FOO/bin
> > > >     So I needed to make a symbolic link (Windows style required) by
> > > >     running
> > > >         mklink /j mingw FOO
> > > >     in FOO/msys/1.0
> 
> > > FWIW, the 2nd issue sounds to me like an installation mistake of some
> > > kind (did you install MinGW inside the MSYS tree, by chance?).
> 
> How would I know?

You could look at the directory hierarchy that got created.

> I just ran mingw-get (as described), and set
> install directory ( = FOO) once.

Did you select the same install directory for MinGW and for MSYS?

> The result:
>   FOO/bin		- contains gcc executables etc
>   FOO/msys/1.0/		- contains msys
>   FOO/msys/1.0/bin	- contains msys executables
> 
> > >  But
> > > I'm not an expert; all I know is that on my system, the MSYS Bash
> > > window has PATH set to whatever my system-wide PATH is, with these
> > > directories prepended:
> > > 
> > >   .:/usr/local/bin:/mingw/bin:/bin:
> > > 
> > > IOW, no msys/1.0/mingw/ anywhere in sight.
> 
> ???  Of course it IS in sight:
> 
>   /bin	       IS native   FOO/msys/1.0/bin
>   /mingw/bin   IS native   FOO/msys/1.0/mingw/bin

But then there's no problem, because missing directories on PATH do no
harm.  The binaries are in /bin, and it is on PATH, so there should be
no problem; there isn't one in my installation.  (Of course, I didn't
use mingw-get, but instead installed stuff by manually unpacking the
tarballs in the first place.)

> > Btw, there's nothing magic in the PATH value: it is set in
> > /etc/profile (probably FOO/msys/etc/profile in your case), and you can
> > edit it to your heart's content.
> 
> Only if one KNOWS what all these slashes-etc MEAN.

/etc/profile is a standard place in many Posix shells.

> As you see, even
> *you* got lost what denotes which native directory.  If what the users
> know is what is in nt/INSTALL, they have no way to deduce this info.   

I wasn't talking about some abstract user, I was trying to help you to
get your installation in good shape.

> BTW: you reminded me: there is another bug in Emacs build — this one
> purely in Emacs.  My default PATH accesses a complete cygwin
> installation

How does Cygwin enter this equation?  Do you have both Cygwin and
MinGW/MSYS installed?

>   •  Emacs won’t build unless I unset PATH before running the msys shell.
> 
> I expect that the detection of presence of dependencies is not
> “specific enough”:
> 
>   • it can see “something” present on PATH, and
>   • it does not check that “this” won’t actually build with mingw
>     being first on PATH. 

If you mix incompatible stuff in the same shell session, you get what
you deserve.  My advice is to have MSYS in separate tree from MinGW,
and only let MSYS shell see MinGW executables _after_ its own.  MinGW,
OTOH, should not have the MSYS's /bin directory on its PATH.  As for
Cygwin, it should be in yet another segregated tree, and never on the
same PATH as either MSYS or MinGW.  It is next to impossible to have
the Posix configure scripts distinguish between foo.exe or foo.h that
are for Cygwin and their namesakes for MinGW.

Like I said: you need to get your MinGW/MSYS installation in good
shape, and then things will work seamlessly.  This isn't an Emacs
issue, per se.