Changes between Version 4 and Version 5 of DevWikiWinMingW64_21


Ignore:
Timestamp:
Jul 31, 2012, 5:18:26 AM (12 years 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 --