libFoundation on Windows mingw32 README ======================================= Intro ===== I have started to port the libFoundation library to Windows 95/NT by using the so called mingw32 environment. Mingw32 is a GNU compilation environment containing gcc, ld and other tools. The port is done in a cross-compilation environment. This is significant mostly because configure and the Makefiles might not work on Win32 because of file naming problems (slash vs backslash). First attempts are made to compile lF using mingw32 only, that is, without cross-compilation and without cygwin, see below for issues. Mingw32 ======= The libFoundation compiles with a sparc-solaris-X-i386-mingw32 compiler in the GNUstep make environment. Quite a lot information regarding Unix to Windows porting using GNU tools is contained on this site: http://www.xraylith.wisc.edu/~khan/software/gnu-win32/ The site includes a HOWTO file for creating a cross-compiler with a i386-mingw32 target which I found *very* useful. I recently modified libFoundation to use the Win32 API libraries at http://www.acc.umu.se/~anorland/gnu-win32/w32api.html These includes/libraries are much more extensive than the ones delivered with mingw32. Probably they will make it into the mingw32 distribution. There are some other Unix-to-Windows porting packages, especially Cygwin from http://www.cygnus.com. Cygwin emulates large parts of Unix in it's environment and also provides a Unix shell environment that might be used to host native mingw32 compiles. The major advantages of mingw32 is that the resulting executables are not covered by GPL and that it doesn't require any additional libraries but the ones provided by Windows itself. The disadvantage is that more porting is required .. GNUstep-make ============ If compiling lF with gstep-make (--with-gnustep configure switch) you have to configure gstep-make for cross-compilation. This is usually done with a sequence like this: cd make setenv CC i386-mingw32-gcc setenv RANLIB i386-mingw32-ranlib setenv AR i386-mingw32-ar setenv DLLTOOL i386-mingw32-dlltool rm -f config.cache ./configure --prefix=/usr/local/GNUstep \ --target="i386-mingw32" \ --program-suffix=exe unsetenv CC RANLIB AR DLLTOOL make install Never forget to remove config.cache before calling configure on a different target !!! If you have done this you can use just make target="i386-mingw32" to cross compile a gstep-make package. Building lF =========== If you have correctly installed your mingw32 x-tools and gstep-make package, compilation of libFoundation for Windows is quite easy: cd libFoundation setenv CC i386-mingw32-gcc rm -f config.cache ./configure --with-gnustep --target="i386-mingw32" unsetenv CC make target="i386-mingw32" install That's it ! The resulting binaries will be placed in the appropriate platform subdirectories of the GNUstep hierachy, this way you can keep libraries for multiple targets in one hierachy. Native Build of lF with cygwin tools ==================================== I managed to compile lF on NT using the cygwin environment (this is actually a x-compilation as well, from cygwin->mingw32). Note that the cygwin environment is only used as the compilation environment, the resulting binary is still mingw32-only. To get this running I got the b20 version of cygwin: http://sourceware.cygnus.com The gcc 2.95.2 compilers from Mumit Khan: ftp://www.xraylith.wisc.edu/pub/khan/gnu-win32/mingw32/ The GNUstep-make package: ftp://ftp.gnustep.org/pub/gnustep First you need to configure gstep-make: cd make ./configure --target=i386-mingw32 \ --prefix=/cygwin/GNUstep \ --program-suffix=.exe \ --with-library-combo=gnu-fd-gnu-nil make target=i386-mingw32 install Note the --target switch. If you miss that, gstep-make will be configured for producing cygwin binaries, which is a different story - so don't forget it ! (See below for a hack avoiding this x-setup). If you get a message from native make like 'unmatched "', you probably are using a wrong shell. Check whether the SHELL variable and /bin/sh matches your standard shell (eg cygwin bash or zsh) If you get makefiles errors, you may want to make sure that you are running cygwin in unix-make-mode (eg echo $MAKE_MODE) If you like you can patch config.guess to output 'i386-pc-mingw32', this makes running tools a bit nicer (this way you avoid making config.guess guess the environment as being cygwin). To do that, replace config.guess with these contents: #!/bin/sh echo "i386-pc-mingw32" After you have installed GNUstep makefiles, source them (you might also want to source them on every startup in the .profile file). Native Build of lF with mingw32 tools ===================================== It will also be possible to compile libFoundation without the help of a Unix system or a Unix emulation like cygwin. The native build process needs some more stuff than just the mingw32 binaries provided by Mumit Khan. You need at least: egcs and make binaries as provided by Mumit Khan: ftp://www.xraylith.wisc.edu/pub/khan/gnu-win32/mingw32/ an appropriate sh.exe, eg the zsh: ftp://ftp.blarg.net/users/amol/ (note that the native bash I retrieved didn't work with make) a sed: ftp://agnes.dida.physik.uni-essen.de/home/janjaap/mingw32/newnew/ some other tools are useful but not required if one does some handwork: mkdir (the DOS mkdir is an internal command and not available in zsh) rm I figured out that you need at least these to run configure: a sh shell: see above grep: http://agnes.dida.physik.uni-essen.de/~janjaap/mingw32/download.html cat The Unix95 kit provides some Unix utilities described (it's also called 'Virtually Unix'): http://www.itribe.net/virtunix/files/unix95.7.zip Note that the library doesn't yet build cleanly, I work on this. Other useful native Windows software ==================================== Native Xemacs: ftp://ftp.ese-metz.fr/pub/xemacs/win32/ Native tcsh: ftp://ftp.blarg.net/users/amol/tcsh/ Further Mingw32 software: ftp://agnes.dida.physik.uni-essen.de/home/janjaap/mingw32 ftp://www.xraylith.wisc.edu/pub/khan ftp://ftp.franken.de/pub/win32/develop/gnuwin32/mingw32 --- Helge Hess (hh@mdlink.de) MDlink online service center 2000-02-09 ! Local variables: ! mode: indented-text ! End: