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

From: Ilya Zakharevich <[email-masked]>
Date: Thu, 5 Mar 2015 13:18:21 -0800

On Wed, Mar 04, 2015 at 05:42:59AM +0200, Eli Zaretskii wrote:
> > > > >   • 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.

*This* I did — and I reported the result in my initial message (quoted
below).  This does not answer your question.

> > 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?

AFAIR, there was no “install directory ‘for”’.  Only “install directory”.

> > 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.

Of course they do.  configure did not work (since the gcc found on
path was not MINGW one).

> The binaries are in /bin, and it is on PATH, so there should be
> no problem; there isn't one in my installation.

Are you joking?!  What do you think is a reason for filing bug
reports?  I followed instructions, AND GOT PROBLEMS!

> > > 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.

How would it help?  How would the user find it on their disk?

> > 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.

Thanks!  But did I ask for that?  This is a bug report, not a cry for
help.  Emacs builds fine now — but I needed 3 corrections to what is
written in nt/INSTALL to achieve this.

> > 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?

I have tens of environment installed.  cygwin is on PATH.

> >   •  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.

Sigh…  Again — all I did was following instructions in nt/INSTALL.

>  My advice is to have MSYS in separate tree from MinGW,

Is this advice in nt/INSTALL?  And how to do it from mingw-get?

> and only let MSYS shell see MinGW executables _after_ its own.  MinGW,
> OTOH, should not have the MSYS's /bin directory on its PATH.

Same questions.

> As for Cygwin, it should be in yet another segregated tree,

It is.

> and never on the same PATH as either MSYS or MinGW.

It was not in *MY* $PATH.  It was in the $PATH created by /etc/profile
which was created following instructions in nt/INSTALL.

> 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.

For foo.exe — one does not care.  For foo.h — one compiles and runs a
simple program.

> 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.

Again: this is an issue with nt/INSTALL.  Who distributes it, the god
almoighty?

Thanks again,
Ilya