== Compiling using MingGW-w64 for both 32-bit and 64-bit == [wiki:UsersWikiWinCompile Back to Compiling in Windows] == 1. Installing Minimalist GNU for Windows-w64 (MinGW-w64) == The objective will be to try to use the MingGW-w64 toolchain instead of the standard MingW since it has support for both 32-bit and 64-bit compiling. Note: We are not successful yet, but just writing down our steps as we go along. Details of the prefixes of files can be found at [http://sourceforge.net/apps/trac/mingw-w64/wiki/download%20filename%20structure What to download] MingW-w64 site is [http://mingw-w64.sourceforge.net] * If you are on 64-bit Windows download one of the binary packages from [http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Automated%20Builds/] with name starting with '''mingw-w64-1.0-bin_i686-mingw_''' * If you are on 32-bit Windows download one of the binary packages from [http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Automated%20Builds/] with name starting with '''mingw-w32-1.0-bin_i686-mingw_''' (for my purposes I used mingw-w32-1.0-bin_i686-mingw_20110408.zip) * Extract your respective zip into a folder called C:\mingw_w64 or c:\mingw_w32 * Add c:\mingw_w64\bin (or c:\mingw_w32\bin) to your windows environment path variable in System Control Panel Advanced Settings -- PATH == 2. Installing Msys == MSys is 32-bit but you can use it with your 32-bit or 64-bit mingw-w64. Instructions are here [http://sourceforge.net/apps/trac/mingw-w64/wiki/MSYS mingw-w64 with MSYS] and repeated here for completeness * download [http://sourceforge.net/projects/mingw-w64/files/External%20binary%20packages%20%28Win64%20hosted%29/MSYS%20%2832-bit%29/ Msys] MSYS-20110309.zip * Extract into a folder called C:\Msys * launch msys.bat * type {{{ sh /postinstall/pi.sh }}} When prompted type in {{{C:/mingw_w64/mingw}}} or {{{C:/mingw_w32/mingw}}} depending on which tool chain you chose Once done, type logout and the console should exit. == 3a. Installing Autoconf, Automake and Libtool == Relaunch C:\mysy\msys.bat Verify which versions of these you have with autoconf --version etc. If they are not newer (or you get not found) than below then download and install. Download the source code from the GNU site and save to c:\projects * http://ftp.gnu.org/gnu/autoconf/autoconf-2.65.tar.gz * http://ftp.gnu.org/gnu/automake/automake-1.11.tar.gz * http://ftp.gnu.org/gnu/libtool/libtool-2.4.tar.xz {{{ cd /c/projects tar -xvf autoconf-2.65.tar.gz cd autoconf-2.65 ./configure --build=i686-w64-mingw32 --host=i686-w64-mingw32 (if you are building for 64-bit then use --build=x86_64-w64-mingw32) make && make install autoconf --version }}} repeat same exercise for automake For libtool {{{ cd /c/projects tar -xvf libtool-2.4.10.tar.gz cd libtool-2.4 ./configure --build=i686-w64-mingw32 --host=i686-w64-mingw32 --target=i686-w64-mingw32 --disable-shared #if you are building for 64-bit then use --host=x86_64-w64-mingw32 for the build,host,target make clean && make && make install libtool --version }}} == 3.b create project folders == {{{ cd /c/projects mkdir pg mkdir postgresql mkdir geos mkdir proj ls }}} == 4. Compiling GEOS == Download latest GEOS source from http://trac.osgeo.org/geos/ either the http://download.osgeo.org/geos/geos-3.3.0.tar.bz2 or http://download.osgeo.org/geos/geos-svn.tar.bz2 and copy to c:\projects\geos. You can also use the trunk svn version https://svn.osgeo.org/geos/trunk. If you are using svn version, make sure to run: {{{ sh autogen.sh }}} ---- (THIS WE DON'T THINK IS NECESSARY ANYMORE and we didn't do it) I had to comment out the lines as seen below, lines 159 and 166 in your mingw*\include\c++\4.4.6\cwchar {{{ //using ::swprintf; //using ::vswprintf; }}} ---- ---- We don't think this is necessary either If you get errors about g++ and libstdc++ moved try this If you are runnning gcc 4.4.0+ and you get complaints about link g++ you probably need to do this too. Changing file: mingw*\i686-w64-mingw32\lib32\libstdc++.la {{{ library_names='libstdc++.dll.a' }}} to {{{ #library_names='libstdc++.dll.a' library_names='libstdc++.a' }}} ---- #this currently fails at linker phase with a whole bunch of {{{ simplify/.libs/libsimplify.a(TopologyPreservingSimplifier.o):TopologyPreservingS implifier.cpp:(.rdata+0x1f0): undefined reference to `geos::geom::util::GeometryTransformer::transformGeometryCollection(geos::geom::GeometryCollection const*, geos::geom::Geometry const*)' and bunch of other classes in util::GeometryTransformer.. the .la file gets created so seems to be at linker phase. }}} {{{ cd /c/projects/geos bzip2 -d -c geos-svn.tar.bz2 | tar xvf - ./configure --prefix=/c/projects/geos/rel-3.3.0 --build=i686-w64-mingw32 --host=i686-w64-mingw32 --target=i686-w64-mingw32 make make install }}} To strip all the debug info weight from the libgeos DLL files, run {{{ # strip /c/projects/bin/geos/rel-3.3.0/*.dll }}} == 5. Compiling Proj == Download Proj4 from the web site, and the datum shifts grid file. * http://download.osgeo.org/proj/proj-4.7.0.tar.gz * http://download.osgeo.org/proj/proj-datumgrid-1.5.zip and copy to c:\projects\proj The datum grid file must be unzipped into the "nad" subdirectory of the Proj4 source tree. {{{ cd /c/projects/proj tar xvfz proj-4.7.0.tar.gz cd proj-4.7.0 cd nad unzip ../../proj-datumgrid-1.5.zip cd .. }}} Apply mutex patch in http://trac.osgeo.org/proj/ticket/72 to src/pj_mutex.c {{{ ./configure --prefix=/c/projects/proj/rel-4.7.0 --build=i686-w64-mingw32 --host=i686-w64-mingw32 --target=i686-w64-mingw32 --enable-shared --disable-static make make install }}} Seems to give an error on make install (when trying to copy over the nad folder), but generates files in rel-4.7.0. Have to copy the nad folder manually. The .dll file is strangely called libproj-0.dll. of libproj.dll. Oh well. == 6. Compiling and Installing C-Unit == Download from http://sourceforge.net/projects/cunit/ into c:\projects {{{ cd /c/projects tar -xvf CUnit-2.1-2-src.tar.bz2 cd CUnit-2.1.2 ./configure --build=i686-w64-mingw32 --host=i686-w64-mingw32 --target=i686-w64-mingw32 make && make install }}} == 7. Compiling LibXML2 == {{{ mkdir /c/projects/libxml cd /c/projects/libxml wget ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz }}} {{{ tar xvfz libxml2-2.7.8.tar.gz cd libxml2-2.7.8 ./configure --prefix=/c/projects/libxml/libxml2-2.7.8release --build=i686-w64-mingw32 --host=i686-w64-mingw32 --target=i686-w64-mingw32 --disable-shared CCFLAGS=LDFLAGS="-Wl,-static" CFLAGS=-O2 make make install }}} == 7. Compiling PostgreSQL == The patches to get PostgreSQL 9.0,9.1 to compile under MingW64 were not introduced into the code base until after 9.0.3 and 9.1Alpha5. With that said, as of this writing, there is no tar ball with all the fixes. You need to download from the PostgreSQL GIT repository. For this we use TortoiseGIT, which you can download and install from: http://code.google.com/p/tortoisegit/downloads/list