Changes between Version 4 and Version 5 of DevWikiWinMingW64_21

Show
Ignore:
Timestamp:
07/31/12 05:18:26 (11 months ago)
Author:
robe
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DevWikiWinMingW64_21

    v4 v5  
    6060 
    6161 *  download [http://sourceforge.net/projects/mingw-w64/files/External%20binary%20packages%20%28Win64%20hosted%29/MSYS%20%2832-bit%29/ Msys] MSYS-20110309.zip (update there is now a newer MSYS -- MSYS-20110526.zip) 
    62  * Extract into a folder called C:\Msys 
     62 * Extract into a folder called C:\Ming64\msys (or C:\Ming32\msys) 
    6363 * launch msys.bat 
    6464 * type 
     
    7171{{{C:/ming64/mingw64}}} or {{{C:/ming32/mingw32}}}  depending on which tool chain you chose 
    7272Once done, type logout and the console should exit. 
     73Note: You can have both if you are using windows 64-bit and we do. 
    7374 
    74 GEOS also gives missing vtable message during link.  I think this was caused by msys missing find.exe, so I copied the find.exe from regular msys packaged as instructed in the [http://www.gaia-gis.it/spatialite-3.0.0-BETA/mingw64_how_to.html#env] to bin of my msys. 
     75GEOS also gives missing vtable message during link.  I think this was caused by msys missing find.exe, so I copied the find.exe from regular msys package ( as instructed in the [http://www.gaia-gis.it/spatialite-3.0.0-BETA/mingw64_how_to.html#env] to bin of respective ming64/ming32 msys folders. 
    7576 
    7677== 3a. Installing Autoconf, Automake and Libtool == 
    7778Relaunch C:\ming64\msys\msys.bat (or c:\ming32\msys\msys.bat) 
    7879 
    79 I created a file with commands like this  
     80 
     81 
     82 
     83We create a file with commands like this  
    8084and make sure this is included in all my compile scripts 
    8185 
     
    8791#if you are building for 32-bit change to this 
    8892#export MINGHOST=i686-w64-mingw32  
     93 
     94#this part is not necessary 
     95#but we like to prefix our binary folders with 
     96#version 
     97export OS_BUILD=64 #change to 32 if building for 32 
     98}}} 
     99 
     100{{{ 
     101#if you are building for 32-bit change ming64 to ming32 
     102mkdir ${PROJECTS}  
    89103}}} 
    90104 
     
    109123tar -xvf autoconf-2.65.tar.gz 
    110124cd autoconf-2.65 
    111 ./configure --host=x86_64-w64-mingw32 --prefix=/mingw  (if you are building for 32-bit then use --host=i686-w64-mingw32) 
     125./configure --host=${MINGHOST} --prefix=/mingw  (if you are building for 32-bit then use --host=i686-w64-mingw32) 
    112126make && make install 
    113127autoconf --version 
     
    122136 
    123137cd libtool-2.4.10 
    124 ./configure --host=x86_64-w64-mingw32 --disable-shared --prefix=/mingw 
    125 #if you are building on 32-bit then use --host=i686-w64-mingw32 for the host 
     138./configure --host=${MINGHOST} --disable-shared --prefix=/mingw 
    126139#if you get a message that gcc is not usable, then you probably set your 
    127140# mingw setting wrong or did not install automake/autotools in /mingw 
     
    135148 
    136149{{{ 
    137  export PROJECTS=/c/ming64/projects 
    138150 cd ${PROJECTS} 
    139  mkdir pg 
     151 mkdir pgx${OS_BUILD} 
    140152 mkdir postgresql 
    141153 mkdir geos 
     
    153165tar xvfz gdal-1.9.1.tar.gz 
    154166cd gdal-${GDAL_VER} 
    155 ./configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --with-threads=no --prefix=${PROJECTS}/gdal/rel-${GDAL_VER}w64  
     167./configure --host=$MINGHOST}--build=x86_64-w64-mingw32 --with-threads=no --prefix=${PROJECTS}/gdal/rel-${GDAL_VER}w${OS_BUILD}  
    156168make && make install 
    157 cd ${PROJECTS}/gdal/rel-${GDAL_VER}w64/bin 
     169cd ${PROJECTS}/gdal/rel-${GDAL_VER}w${OS_BUILD}/bin 
    158170strip *.dll 
    159171}}} 
     
    172184== 4. Compiling GEOS == 
    173185 
    174 Download latest GEOS source from http://trac.osgeo.org/geos/ either the http://download.osgeo.org/geos/geos-3.3.3.tar.bz2 
    175 You can also use the trunk svn version https://svn.osgeo.org/geos/trunk. If you are using svn version, make sure to run: 
     186Download latest GEOS source from http://trac.osgeo.org/geos/  
     187You can also use the trunk svn version https://svn.osgeo.org/geos/trunk which is what we use.  
     188NOTE: To take advantage of new functions like ST_DelaunayTriangles, you need GEOS 3.4dev which is trunk 
     189If you are using svn version, make sure to run: 
    176190 
    177191{{{ 
     
    179193}}} 
    180194 
    181  
    182 this fails at linker phase with a whole bunch of errors if you compile without doing 
    183 #linking errors seems to be caused by as described here [http://www.gaia-gis.it/spatialite-3.0.0-BETA/mingw64_how_to.html#env] 
    184 mingw64 is picking up the 32-bit dlls from syswow64 instead of the 64-bit dlss from windows/system32 
    185 I may have over-copied, but to remedy before evening starting configure 
    186 with windows explorer copy the files from windows/system32 
    187  
    188 {{{ 
    189 ws2_32.dll, kernel32.dll, advapi32.dll, mscvrt.dll, user32.dll 
    190 }}} 
    191  
    192 To your folder: C:\mingw\mingw64\x86_64-w64-mingw32\lib 
    193 and then rename them adding a lib extensions so you have 
    194 {{{ 
    195 libws2_32.dll, libkernel32.dll, libadvapi32.dll, libmscvrt.dll, libuser32.dll 
    196 }}} 
    197  
    198 # hack described in [http://www.gaia-gis.it/spatialite-3.0.0-BETA/mingw64_how_to.html#libgeos] 
    199  
    200 {{{ 
    201 simplify/.libs/libsimplify.a(TopologyPreservingSimplifier.o):TopologyPreservingS 
    202 implifier.cpp:(.rdata+0x1f0): undefined reference to `geos::geom::util::GeometryTransformer::transformGeometryCollection(geos::geom::GeometryCollection const*, 
    203 geos::geom::Geometry const*)' 
    204  
    205 and bunch of other classes in util::GeometryTransformer.. 
    206 the .la file gets created so seems to be at linker phase. 
    207 }}} 
    208  
    209 -- follow instructions in [http://www.gaia-gis.it/spatialite-3.0.0-BETA/mingw64_how_to.html#libgeos] 
    210 {{{ 
    211 export GEOS_VER=3.3.5 
    212 cd ${PROJECTS}/geos 
    213 tar xjf geos-${GEOS_VER}.tar.bz2 
    214 cd geos-${GEOS_VER} 
    215 ./configure --host=x86_64-w64-mingw32 --prefix=${PROJECTS}/geos/rel-${GEOS_VER}w64 | tee /c/geos_configure_3.3.log  
    216 make 
    217 make install 
    218 }}} 
    219 To strip all the debug info weight from the libgeos DLL files, run 
    220 {{{ 
    221 strip ${PROJECTS}/bin/geos/rel-${GEOS_VER}w64/*.dll 
    222 }}} 
    223  
    224 ==  Installing !LibIconv == 
    225  
    226 For iconv we are going to compile our own copy instead of installing from GNUWin. 
    227  
    228  * http://ftp.gnu.org/gnu/libiconv/libiconv-1.13.1.tar.gz 
    229  
    230 Save the source in your C:\ming64\projects directory. Open up the MSYS terminal. Ignore the errors in the configure process. 
    231 {{{ 
    232 cd ${PROJECTS} 
    233 tar xvfz libiconv-1.13.1.tar.gz 
    234 cd libiconv-1.13.1 
    235 ./configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=${PROJECTS}/rel-libiconv-1.13.1w64 
    236 make 
    237 make install 
    238 }}} 
    239 Copy rel-.. contents int c:\mingw\mingw64 folder.  For some reason using libiconv-prefix did not work for configuring postgis.  
    240 Verify if the version of iconv you are running is the same as the one you just compiled (1.13): 
    241 {{{ 
    242 # iconv --version 
    243 }}} 
    244  
    245 == Compiling Proj == 
    246 Download  Proj4 from the web site, and the datum shifts grid file. 
    247  
    248     *  http://download.osgeo.org/proj/proj-4.8.0.tar.gz 
    249     *  http://download.osgeo.org/proj/proj-datumgrid-1.5.zip  
    250  
    251 and copy to c:\ming64\projects\proj 
    252 The datum grid file must be unzipped into the "nad" subdirectory of the Proj4 source tree. 
    253 {{{ 
    254  #set this to whereever you plan to keep your source 
    255  #I have one for 32-bit and one for 64-bit 
    256  export PROJECTS=/c/ming64/projects    
    257  cd ${PROJECTS}/proj 
    258  wget http://download.osgeo.org/proj/proj-4.8.0.tar.gz 
    259  wget http://download.osgeo.org/proj/proj-datumgrid-1.5.zip  
    260  tar xvfz proj-4.8.0.tar.gz 
    261  cd proj-4.8.0 
    262  cd nad 
    263  unzip ../../proj-datumgrid-1.5.zip 
    264  cd .. 
    265  ./configure --prefix=${PROJECTS}/proj/rel-4.8.0w64 --host=x86_64-w64-mingw32 --enable-shared 
    266  make clean 
    267  make && make install 
    268 }}} 
    269  
    270 == Compiling and Installing C-Unit == 
    271 Download from http://sourceforge.net/projects/cunit/ into c:\projects 
    272  
    273 {{{ 
    274 cd ${PROJECTS} 
    275 wget http://iweb.dl.sourceforge.net/project/cunit/CUnit/2.1-2/CUnit-2.1-2-src.tar.bz2 
    276 tar -xvf CUnit-2.1-2-src.tar.bz2 
    277 cd CUnit-2.1-2 
    278 #if you are building for 64-bit then use x86_64-w64-mingw32 for the build,host,target 
    279 #32 bit uses i686-w64-mingw32 for build, host, target 
    280 ./configure --host=x86_64-w64-mingw32 --prefix=/mingw 
    281 make && make install 
    282 }}} 
    283  
    284 For some reason, PostGIS couldn't find my cunit install.  So I had to copy the files: 
    285 from C:\ming64\mingw64\include\CUnit to C:\ming64\mingw64\x86_64-w64-mingw32\include\CUnit 
    286 == 7. Compiling LibXML2 == 
    287  
    288 {{{ 
    289 mkdir ${PROJECTS}/libxml 
    290 cd ${PROJECTS}/libxml 
    291 wget ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz  
    292 }}} 
    293  
    294  
    295 {{{ 
    296  tar xvfz libxml2-2.7.8.tar.gz  
    297 cd libxml2-2.7.8 
    298 #if you are building for 64-bit then use x86_64-w64-mingw32 for the build,host,target 
    299 #32 bit uses i686-w64-mingw32 for build, host, target 
    300  ./configure --prefix=/c/projects/libxml/rel-libxml2-2.7.8w64 --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --enable-shared --with-threads=no  CFLAGS=-O2 
    301 #Note to self: used to have CCFLAGS=LDFLAGS="-Wl,-static"  in here will see how it goes without 
    302 #If you have pthreads installed, libxml picks it up and royally screws up thus the need for --with-threads=no 
    303  make 
    304  make install 
    305 }}} 
    306  
    307 You might get an error during the configure process 
    308 {{{ 
    309 /bin/rm: cannot lstat `libtoolT': No such file or directory 
    310 }}} 
    311  
    312 That error seems safe to ignore. 
    313  
    314 == 8. Compiling PostgreSQL 9.1 == 
    315 Download source from: 
    316 [http://ftp.postgresql.org/pub/source/v9.1.3/postgresql-9.1.3.tar.bz2] 
    317  
    318 {{{ 
    319 mkdir ${PROJECTS}/pgx64 
    320 cd postgresql 
    321 tar -xvjf postgresql-9.1.3.tar.bz2 
    322 cd postgresql-9.1.3 
    323 #if you are building for 64-bit then use x86_64-w64-mingw32 for the build,host,target 
    324 #32 bit uses i686-w64-mingw32 for build, host, target 
    325 #EnterpriseDb VC++ 64-bit builds are compiled with disable float8 by val.  
    326 #If we don't include this line, the modules compiled against mingw64 will be incompatible with edb builds 
    327 ./configure --prefix=${PROJECTS}/pgx64/pg91 \ 
    328  --build=x86_64-w64-mingw32 \ 
    329  --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 \ 
    330  --with-pgport=5441 --enable-cassert --enable-debug \ 
    331  --enable-integer-datetimes --disable-float8-byval --without-zlib 
    332  
    333  make 
    334  make install 
    335 #initialize the database cluster 
    336 /c/projects/pgx64/pg91/bin/initdb -U postgres -D ${PROJECTS}/pgx64/pg91/data -A trust 
    337 }}} 
    338  
    339 == Compiling JSON-C == 
    340 This is needed if you want ST_GeomFromGeoJSON to be functional.  
    341 Download [http://oss.metaparadigm.com/json-c/json-c-0.9.tar.gz] and save to c:\ming64\projects\json-c 
    342 {{{ 
    343 cd ${PROJECTS}/json-c 
    344 wget http://oss.metaparadigm.com/json-c/json-c-0.9.tar.gz 
    345 tar xvfz json-c-0.9.tar.gz 
    346 cd json-c-0.9 
    347 ## had to compile with -w (disable warnings otherwise it gave errors) 
    348 ## if using 32-bit (ming32), use i686-w64-mingw32 for host/build 
    349 ./configure --build=x86_64-w64-mingw32 \ 
    350  --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 \ 
    351  --prefix=/c/projects/json-c/rel-0.9w64 CFLAGS=-w 
    352 make clean 
    353 make 
    354 make install 
    355 }}} 
    356 == Copy over needed dlls to PostgreSQL folders == 
    357  
    358 {{{ 
    359 export PATHOLD=$PATH 
    360 export PATH=$PATH:/c/projects/pgx64/pg91edb/bin:/mingw 
    361 export PGHOST=localhost 
    362 export PGPORT=5441 
    363 export PGUSER=postgres 
    364 cp /c/projects/geos/rel-3.3.3w64/bin/*.dll /c/projects/pgx64/pg91edb/bin 
    365 cp /c/projects/gdal/rel-1.9.0w64/bin/*.dll /c/projects/pgx64/pg91edb/bin 
    366 cp /c/projects/proj/rel-4.7.0w64/bin/*.dll  /c/projects/pgx64/pg91edb/bin 
    367 cp /c/mingw/mingw64/bin/libgcc_s_sjlj-1.dll /c/projects/pgx64/pg91edb/bin 
    368 cp /c/projects/geos/rel-3.3.3w64/bin/*.dll /c/projects/pgx64/pg91/bin 
    369 cp /c/projects/gdal/rel-1.9.0w64/bin/*.dll /c/projects/pgx64/pg91/bin 
    370 cp /c/projects/proj/rel-4.7.0w64/bin/*.dll  /c/projects/pgx64/pg91/bin 
    371 cp /c/mingw/mingw64/bin/libgcc_s_sjlj-1.dll /c/projects/pgx64/pg91/bin 
    372 }}} 
    373  
    374 == Getting GTK == 
    375 If you want to build the shp2pgsql-gui loader in 64-bit, you can use the pre-compiled gtk bundle 
    376 which already has the needed headers 
    377  
    378 {{{ 
    379 export PORJECTS=/c/ming64/projects/gtk 
    380 cd ${PROJECTS} 
    381 mkdir gtk 
    382 cd gtk 
    383 wget  
    384 http://ftp.gnome.org/pub/gnome/binaries/win64/gtk+/2.22/gtk+-bundle_2.22.1-20101229_win64.zip 
    385 unzip gtk+-bundle_2.22.1-20101229_win64.zip 
    386 }}} 
    387  
    388  
    389  
    390 == Compiling PostGIS 2.0 == 
    391  * There is a problem at least for my Mingw64 that prevents functions like ST_AsText and ST_AsKML that makes it leave out digits randomly 
    392  * This also causes issues for shp2pgsql.  The issue is the fact that the MingW64 chain uses  
    393  * Microsoft's vsprintf version instead of the C99 one. This version when space is not enough returns an error code instead of length of output the write 
    394  * To work around this issue, I put in this pretty ugly hack in the liblwgeom/string_buffer.c around line 210 
    395 change: 
    396 {{{ 
    397         if ( len < 0 )  
    398                 return len; 
    399 }}} 
    400  
    401 to: 
    402 {{{ 
    403         if ( len < 0 )  
    404                 len = _vscprintf(fmt, ap2);  
    405 }}} 
    406  
    407 Details of this issue are outlined in #1668 
    408                  
    409 {{{ 
    410 export PROJECTS=/c/ming64/projects 
    411 export PG_VER=91 
    412 export PGWINVER=${PG_VER}edb 
    413 export GEOS_VER=3.3.5 
    414 # had to override the paths since cunit was picking up 32-bit junk and crashing 
    415 export PATHOLD=".:/bin:/include:/mingw/bin:/mingw/include:/c/Windows/system32:/c/Windows:/c/ming64/mingw64/include" 
    416 export PATH="${PATHOLD}:${PROJECTS}/pgx64/pg${PG_VER}/bin:${PROJECTS}/pgx64/pg${PG_VER}/lib" 
    417 #needed to build comments and shp2pgsql-gui 
    418 export PATH="${PATH}:${PROJECTS}/xsltproc:${PROJECTS}/gtk/bin" 
    419 export POSTGIS_SRC=${PROJECTS}/postgis/postgis-${POSTGIS_MICRO_VER} 
    420 cd /c/ming64/projects 
    421 mkdir postgis 
    422 cd postgis 
    423 wget http://www.postgis.org/download/postgis-${POSTGIS_MICRO_VER}.tar.gz 
    424 tar xvf postgis-${POSTGIS_MICRO_VER}.tar.gz 
    425 cd ${POSTGIS_SRC} 
    426  
    427 CPPFLAGS="-I${PROJECTS}/pgx64/pg${PG_VER}/include -I${PROJECTS}/gettextrel-gettext-0.18.1/include -I${PROJECTS}/rel-libiconv-1.13.1w64/include" \ 
    428 LDFLAGS="-L${PROJECTS}/pgx64/pg${PG_VER}/lib -L${PROJECTS}/gdal/rel-${GDAL_VER}/lib -L${PROJECTS}/gettext/rel-gettext-0.18.1/lib -L${PROJECTS}/rel-libiconv-1.13.1w64/lib" ./configure \ 
    429  --host=x86_64-w64-mingw32  \ 
    430   --with-xml2config=${PROJECTS}/libxml/rel-libxml2-2.7.8w64/bin/xml2-config \ 
    431   --with-pgconfig=${PROJECTS}/pgx64/pg${PG_VER}/bin/pg_config \ 
    432   --with-geosconfig=${PROJECTS}/geos/rel-${GEOS_VER}/bin/geos-config \ 
    433   --with-projdir=${PROJECTS}/proj/rel-4.7.0w64 \ 
    434   --with-gdalconfig=${PROJECTS}/gdal/rel-${GDAL_VER}/bin/gdal-config \ 
    435   --with-jsondir=${PROJECTS}/json-c/rel-0.9w64 \ 
    436   --with-libiconv=${PROJECTS}/rel-libiconv-1.13.1w64 \ 
    437    --with-xsldir=${PROJECTS}/docbook/docbook-xsl-1.76.1 \ 
    438   --with-gui --with-gettext=no 
    439 }}} 
    440  
    441 #this part is a hack, but again didn't work without it 
    442 #you can try without doing this, but if you get errors about  
    443 # conflicting type def boolean during PostGIS compile, you need this. 
    444 #In my case I got this: 
    445 {{{ 
    446 In file included from c:/ming64/projects/json-c/rel-0.9w64/include/json/json_util.h:1 
    447  
    448                  from c:/projects/json-c/rel-0.9w64/include/json/json.h:23, 
    449                  from lwgeom_in_geojson.c:31: 
    450 c:/ming64/projects/json-c/rel-0.9w64/include/json/json_object.h:32: error: conflictin 
    451 types for 'boolean' 
    452 c:\mingw\mingw64\bin\../lib/gcc/x86_64-w64-mingw32/4.4.7/../../../../x86_64-w6 
    453 mingw32/include/rpcndr.h:52: note: previous declaration of 'boolean' was here 
    454 make[1]: *** [lwgeom_in_geojson.o] Error 1 
    455 }}} 
    456  
    457  * Open up /c/projects/json-c/rel-0.9/include/json/json_object.h 
    458  * remark out line 32 that reads 
    459     {{{ typedef int boolean }}} 
    460  * so it should now read  
    461     {{{ /** typedef int boolean; **/ }}} 
    462  * During the PostGIS configure process, you have to put this back the way it was otherwise configure complains json.h or something is not usable and refuses to configure with JSON-C support. Then you remark the line out again during compile.  Crazy I know, but json-c won't compile without that line so can't take it out before json-c compile. 
    463  
    464 If you run into problems with your build, pipe the output into a file for further analysis. The GUI requires that pkg-config be on your PATH, check that it is there by running 'which pkg-config'. 
    465 {{{ 
    466 make 2>&1 | tee /c/build.log 
    467 make check 
    468 make install 
    469 }}} 
     195--- TO BE CONTINUED --