Gonzalo Garramuño wrote:

What you want to do is extend the msys environment with extra POSIX compatible tools.

No. I was just trying to compile cmake (or other stuff) under msys and have it behave like all other (subset of) autotools libraries or executables that can be compiled under such environment. All of these get compiled and installed under MSYS's /usr/local root, not under $PROGRAMFILES.


How is a native windows program supposed to write to /usr/local? (see below)

To do that cmake
would have to link to the MSYS run time library in order to understand things like sym links and mount points.


AFAIK, no. If my understanding of MSYS/MinGW is correct, there's no extra POSIX compatibility library. The POSIX compatibility comes from the limited POSIX compatibility provided by the win32api and the msvcrt DLL. This is one of the things it distinguishes it from cygwin, where the cygwin.dll does indeed try to have a 1-to-1 correspondence with POSIX (and some Linux internals too).

--- digression---
Currently, neither cygwin nor mingw support sym links (as they are still constrained by what pre-windows vista supports). Cygwin might support mount points other than windows ones (like NFS), but not sure. MinGW certainly does not (only windows A: to Z: drives). The only magic msys utilities like bash perform is modifying the PATH variable for Windows to make /C/ become C:\ and '/' become MSYSROOT\.


Not really true, cygwin has its own symlinks.  See here:
http://www.cygwin.com/cygwin-ug-net/using.html

Also see here:

http://www.mingw.org/MinGWiki/index.php/Shells%2C%20terminals%20and%20MSYS

>Firstly: a MSYS application is one that uses (links with)
> the the MSYS runtime (msys-1.0.dll), just like a Cygwin application
....

However, the key here is that this MSYS environment is
>  just a driver for native Win32 tools such as the
>MinGW gcc which produces MinGW binaries. It is very rare
> and uncommon to actually use MSYS to build MSYS apps, and
>in fact to do this you have to install a special environment
> and use a specially modified copy of gcc -- currently a
 very old 2.95 version.


They have special files and the cygwin run time knows what to do with them. msys also has mount points and such. For example on my machine: $ mount
C:\DOCUME~1\hoffman\LOCALS~1\Temp on /tmp type user (binmode,noumount)
C:\msys\1.0\bin on /usr/bin type user (binmode,cygexec,noumount)
C:\msys\1.0\bin on /bin type user (binmode,cygexec,noumount)
C:\msys\1.0 on /usr type user (binmode,noumount)
C:\msys\1.0 on / type user (binmode,noumount)
c:\MinGW on /mingw type user (binmode)
c: on /c type user (binmode,noumount)

Note, that /usr is really c:\msys\1.0. An all native windows program has no idea what /user or /tmp is according to the msys commands. So, there is no way the native windows cmake could write to /usr/local for installing files. So, there is more magic than meets the eye.


So, even if you figured out what shell you were running from, you still could not write to /usr/local because that directory does not exist to a windows program.

-Bill
_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to