]> git.street.me.uk Git - andy/viking.git/blobdiff - win32/prepare.bat
[WINDOWS] Explore compiling against mapnik with g++ - but ultimately disable it.
[andy/viking.git] / win32 / prepare.bat
index 9ae404fe284df7aa071b81716171041053e10ccf..41bfdfd5d735a4157e4843eeaf8de9d8dacfca66 100644 (file)
@@ -19,44 +19,148 @@ set ERRORLEVEL=0
 if not exist cache mkdir cache\r
 pushd cache\r
 \r
+:: We need a program to be able to extract not only zips, but bz2 and *lzma*
+set PATH=%PATH%;%ProgramFiles%\7-Zip
+echo =+=+=
+echo Checking 7Zip is Available...
+echo =+=+=
+set ZIP_INST=7z920.exe
+if not exist "%ProgramFiles%\7-Zip\7z.exe" (
+       call :Download %ZIP_INST% http://downloads.sourceforge.net/sevenzip/%ZIP_INST%
+       %ZIP_INST% /S
+       if ERRORLEVEL 1 goto Error
+)
+
 echo =+=+=\r
 echo Checking mingw...\r
 echo =+=+=\r
-set MINGW_EXE=MinGW-5.1.6.exe\r
-set BIN_UTILS=binutils-2.19.1-mingw32-bin.tar.gz\r
-set GCC_CORE=gcc-core-3.4.5-20060117-3.tar.gz\r
-set GCC_GPP=gcc-g++-3.4.5-20060117-3.tar.gz\r
-set MINGWRTDLL=mingwrt-3.15.2-mingw32-dll.tar.gz\r
-set MINGWRTDEV=mingwrt-3.15.2-mingw32-dev.tar.gz\r
-set W32API=w32api-3.13-mingw32-dev.tar.gz\r
+set MINGW_BASE_URL=http://sourceforge.net/projects/mingw/files/MinGW/Base
+set BIN_UTILS_LZ=binutils-2.23.2-1-mingw32-bin.tar.lzma
+set BIN_UTILS_URL=%MINGW_BASE_URL%/binutils/binutils-2.23.2-1/%BIN_UTILS_LZ%/download
+::GCC dependencies::
+set MPC_DEV_LZ=mpc-1.0.1-2-mingw32-dev.tar.lzma
+set MPC_DEV_URL=%MINGW_BASE_URL%/mpc/mpc-1.0.1-2/%MPC_DEV_LZ%/download
+set MPC_DLL_LZ=mpc-1.0.1-2-mingw32-dll.tar.lzma
+set MPC_DLL_URL=%MINGW_BASE_URL%/mpc/mpc-1.0.1-2/%MPC_DLL_LZ%/download
+set MPFR_DEV_LZ=mpfr-3.1.2-2-mingw32-dev.tar.lzma
+set MPFR_DEV_URL=%MINGW_BASE_URL%/mpfr/mpfr-3.1.2-2/%MPFR_DEV_LZ%/download
+set MPFR_DLL_LZ=mpfr-3.1.2-2-mingw32-dll.tar.lzma
+set MPFR_DLL_URL=%MINGW_BASE_URL%/mpfr/mpfr-3.1.2-2/%MPFR_DLL_LZ%/download
+set GMP_DEV_LZ=gmp-5.1.2-1-mingw32-dev.tar.lzma
+set GMP_DEV_URL=%MINGW_BASE_URL%/gmp/gmp-5.1.2/%GMP_DEV_LZ%/download
+set GMP_DLL_LZ=gmp-5.1.2-1-mingw32-dll.tar.lzma
+set GMP_DLL_URL=%MINGW_BASE_URL%/gmp/gmp-5.1.2/%GMP_DLL_LZ%/download
+set PTHREADS_DEV_LZ=pthreads-w32-2.9.1-1-mingw32-dev.tar.lzma
+set PTHREADS_DEV_URL=%MINGW_BASE_URL%/pthreads-w32/pthreads-w32-2.9.1/%PTHREADS_DEV_LZ%/download
+set PTHREADS_DLL_LZ=pthreads-w32-2.9.1-1-mingw32-dll.tar.lzma
+set PTHREADS_DLL_URL=%MINGW_BASE_URL%/pthreads-w32/pthreads-w32-2.9.1/%PTHREADS_DLL_LZ%/download
+set ICONV_DEV_LZ=libiconv-1.14-3-mingw32-dev.tar.lzma
+set ICONV_DEV_URL=%MINGW_BASE_URL%/libiconv/libiconv-1.14-3/%ICONV_DEV_LZ%/download
+set ICONV_DLL_LZ=libiconv-1.14-3-mingw32-dll.tar.lzma
+set ICONV_DLL_URL=%MINGW_BASE_URL%/libiconv/libiconv-1.14-3/%ICONV_DLL_LZ%/download
+set GCC_CORE_BIN_LZ=gcc-core-4.8.1-4-mingw32-bin.tar.lzma
+set GCC_CORE_BIN_URL=%MINGW_BASE_URL%/gcc/Version4/gcc-4.8.1-4/%GCC_CORE_BIN_LZ%/download
+set GCC_CORE_DEV_LZ=gcc-core-4.8.1-4-mingw32-dev.tar.lzma
+set GCC_CORE_DEV_URL=%MINGW_BASE_URL%/gcc/Version4/gcc-4.8.1-4/%GCC_CORE_DEV_LZ%/download
+set GCC_CORE_DLL_LZ=gcc-core-4.8.1-4-mingw32-dll.tar.lzma
+set GCC_CORE_DLL_URL=%MINGW_BASE_URL%/gcc/Version4/gcc-4.8.1-4/%GCC_CORE_DLL_LZ%/download
+set MINGWRTDLL_LZ=mingwrt-4.0.3-1-mingw32-dll.tar.lzma
+set MINGWRTDLL_URL=%MINGW_BASE_URL%/mingw-rt/mingwrt-4.0.3/%MINGWRTDLL_LZ%/download
+set MINGWRTDEV_LZ=mingwrt-4.0.3-1-mingw32-dev.tar.lzma
+set MINGWRTDEV_URL=%MINGW_BASE_URL%/mingw-rt/mingwrt-4.0.3/%MINGWRTDEV_LZ%/download
+set W32API_LZ=w32api-4.0.3-1-mingw32-dev.tar.lzma
+set W32API_URL=%MINGW_BASE_URL%/w32api/w32api-4.0.3/%W32API_LZ%/download
+set ZLIB_LZ=zlib-1.2.8-1-mingw32-dll.tar.lzma
+set ZLIB_URL=%MINGW_BASE_URL%/zlib/zlib-1.2.8/%ZLIB_LZ%/download
+set GETTEXT_LZ=gettext-0.18.3.1-1-mingw32-dll.tar.lzma
+set GETTEXT_URL=%MINGW_BASE_URL%/gettext/gettext-0.18.3.1-1/%GETTEXT_LZ%/download\r
+\r
+set GCC-CPP_BIN_LZ=gcc-c++-4.8.1-4-mingw32-bin.tar.lzma\r
+set GCC-CPP_BIN_URL=%MINGW_BASE_URL%/gcc/Version4/gcc-4.8.1-4/%GCC-CPP_BIN_LZ%/download\r
+set GCC-CPP_DEV_LZ=gcc-c++-4.8.1-4-mingw32-dev.tar.lzma\r
+set GCC-CPP_DEV_URL=%MINGW_BASE_URL%/gcc/Version4/gcc-4.8.1-4/%GCC-CPP_DEV_LZ%/download\r
+set GCC-CPP_DLL_LZ=gcc-c++-4.8.1-4-mingw32-dll.tar.lzma\r
+set GCC-CPP_DLL_URL=%MINGW_BASE_URL%/gcc/Version4/gcc-4.8.1-4/%GCC-CPP_DLL_LZ%/download\r
 \r
 if not exist "%MINGW_BIN%" (\r
        :: Here we download all default components manually in an attempt to get autoinstall to work...\r
-       if not exist %MINGW_EXE% (\r
-               wget "http://sourceforge.net/projects/mingw/files/OldFiles/MinGW 5.1.6/%MINGW_EXE%"\r
-       )\r
-       if not exist %BIN_UTILS% (\r
-               wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/binutils/binutils-2.19.1/%BIN_UTILS%/download"\r
-       )\r
-       if not exist %GCC_CORE% (\r
-               wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version3/Current Release_ gcc-3.4.5-20060117-3/%GCC_CORE%/download"\r
-       )\r
-       if not exist %GCC_GPP% (\r
-               wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version3/Current Release_ gcc-3.4.5-20060117-3/%GCC_GPP%/download"\r
-       )\r
-       if not exist %MINGWRTDEV% (\r
-               wget http://sourceforge.net/projects/mingw/files/MinGW/Base/mingw-rt/mingwrt-3.15.2/%MINGWRTDEV%/download\r
-       )\r
-       if not exist %MINGWRTDLL% (\r
-               wget http://sourceforge.net/projects/mingw/files/MinGW/Base/mingw-rt/mingwrt-3.15.2/%MINGWRTDLL%/download\r
-       )\r
-       if not exist %W32API% (\r
-               wget http://sourceforge.net/projects/mingw/files/MinGW/Base/w32api/w32api-3.13/%W32API%/download\r
-       )\r
-       :: Can't get it to silent install. As a NSIS installer it supports /S, but it doesn't seem to work - it just hangs\r
-       :: Have to click through manually\r
-       %MINGW_EXE%\r
-       if ERRORLEVEL 1 goto Error\r
+       call :Download "%BIN_UTILS_LZ%" "%BIN_UTILS_URL%"
+       call :InstallLZMA "%BIN_UTILS_LZ%"
+
+       call :Download "%MPC_DLL_LZ%" "%MPC_DLL_URL%"
+       call :InstallLZMA "%MPC_DLL_LZ%"
+
+       call :Download "%MPC_DEV_LZ%" "%MPC_DEV_URL%"
+       call :InstallLZMA "%MPC_DEV_LZ%"
+
+       call :Download "%MPFR_DLL_LZ%" "%MPFR_DLL_URL%"
+       call :InstallLZMA "%MPFR_DLL_LZ%"
+
+       call :Download "%MPFR_DEV_LZ%" "%MPFR_DEV_URL%"
+       call :InstallLZMA "%MPFR_DEV_LZ%"
+
+       call :Download "%GMP_DEV_LZ%" "%GMP_DEV_URL%"
+       call :InstallLZMA "%GMP_DEV_LZ%"
+
+       call :Download "%GMP_DLL_LZ%" "%GMP_DLL_URL%"
+       call :InstallLZMA "%GMP_DLL_LZ%"
+
+       call :Download "%PTHREADS_DLL_LZ%" "%PTHREADS_DLL_URL%"
+       call :InstallLZMA "%PTHREADS_DLL_LZ%"
+
+       call :Download "%PTHREADS_DEV_LZ%" "%PTHREADS_DEV_URL%"
+       call :InstallLZMA "%PTHREADS_DEV_LZ%"
+
+       call :Download "%ICONV_DEV_LZ%" "%ICONV_DEV_URL%"
+       call :InstallLZMA "%ICONV_DEV_LZ%"
+
+       call :Download "%ICONV_DLL_LZ%" "%ICONV_DLL_URL%"
+       call :InstallLZMA "%ICONV_DLL_LZ%"
+
+       call :Download "%GCC_CORE_DEV_LZ%" "%GCC_CORE_DEV_URL%"
+       call :InstallLZMA "%GCC_CORE_DEV_LZ%"
+
+       call :Download "%GCC_CORE_DLL_LZ%" "%GCC_CORE_DLL_URL%"
+       call :InstallLZMA "%GCC_CORE_DLL_LZ%"
+
+       call :Download "%GCC_CORE_BIN_LZ%" "%GCC_CORE_BIN_URL%"
+       call :InstallLZMA "%GCC_CORE_BIN_LZ%"
+
+       call :Download "%MINGWRTDEV_LZ%" "%MINGWRTDEV_URL%"
+       call :InstallLZMA "%MINGWRTDEV_LZ%"
+
+       call :Download "%MINGWRTDLL_LZ%" "%MINGWRTDLL_URL%"
+       call :InstallLZMA "%MINGWRTDLL_LZ%"
+
+       call :Download "%W32API_LZ%" "%W32API_URL%"
+       call :InstallLZMA "%W32API_LZ%"
+
+       call :Download "%ZLIB_LZ%" "%ZLIB_URL%"
+       call :InstallLZMA "%ZLIB_LZ%"
+
+       call :Download "%GETTEXT_LZ%" "%GETTEXT_URL%"
+       call :InstallLZMA "%GETTEXT_LZ%"
+\r
+       REM Seems '+' in the filename screws things up for script function calls :(\r
+       REM call :Download "%GCC_CPP_DEV_LZ%" "%GCC_CPP_DEV_URL%"\r
+       REM call :InstallLZMA "%GCC_CPP_DEV_LZ%"\r
+\r
+       REM call :Download "%GCC_CPP_DLL_LZ%" "%GCC_CPP_DLL_URL%"\r
+       REM call :InstallLZMA "%GCC_CPP_DLL_LZ%"\r
+\r
+       REM call :Download "%GCC_CPP_BIN_LZ%" "%GCC_CPP_BIN_URL%"\r
+       REM call :InstallLZMA "%GCC_CPP_BIN_LZ%"\r
+\r
+       REM Do it every time...\r
+       wget http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.8.1-4/gcc-c++-4.8.1-4-mingw32-bin.tar.lzma/download\r
+       wget http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.8.1-4/gcc-c++-4.8.1-4-mingw32-dev.tar.lzma/download\r
+       wget http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.8.1-4/gcc-c++-4.8.1-4-mingw32-dll.tar.lzma/download\r
+       7z e gcc-c++-4.8.1-4-mingw32-bin.tar.lzma\r
+       7z e gcc-c++-4.8.1-4-mingw32-dev.tar.lzma\r
+       7z e gcc-c++-4.8.1-4-mingw32-dll.tar.lzma\r
+       7z x gcc-c++-4.8.1-4-mingw32-bin.tar -o"%MinGW%" -y\r
+       7z x gcc-c++-4.8.1-4-mingw32-dev.tar -o"%MinGW%" -y\r
+       7z x gcc-c++-4.8.1-4-mingw32-dll.tar -o"%MinGW%" -y\r
 )\r
 \r
 echo =+=+=\r
@@ -67,7 +171,7 @@ if not exist "%SystemDrive%\msys" (
        if not exist %MSYS_EXE% (\r
                wget http://downloads.sourceforge.net/mingw/%MSYS_EXE%\r
        )\r
-       if not [%WINELOADER%]==[] (\r
+       if not [%WINELOADERNOEXEC%]==[] (
                echo Running under WINE - Requires MSYS install fixes: run msys-pi-wine.sh when msys install halts..."\r
                echo Ctrl-C to stop and then rerun the installation if necessary\r
        )\r
@@ -75,30 +179,14 @@ if not exist "%SystemDrive%\msys" (
        if ERRORLEVEL 1 goto Error\r
 )\r
 \r
-:: We need a program to be able to extract not only zips, but bz2 and *lzma*\r
-set PATH=%PATH%;%ProgramFiles%\7-Zip\r
-echo =+=+=\r
-echo Checking 7Zip is Available...\r
-echo =+=+=\r
-set ZIP_INST=7z920.exe\r
-if not exist "%ProgramFiles%\7-Zip\7z.exe" (\r
-       if not exist %ZIP_INST% (\r
-               wget http://downloads.sourceforge.net/sevenzip/%ZIP_INST%\r
-       )\r
-       %ZIP_INST% /S\r
-       if ERRORLEVEL 1 goto Error\r
-)\r
-\r
 ::\r
 echo =+=+=\r
 echo Checking gtk+-bundle...\r
 echo =+=+=\r
 set GTK_ZIP=gtk+-bundle_2.24.10-20120208_win32.zip\r
 if not exist "%MINGW_BIN%\gtk-update-icon-cache.exe" (\r
-       if not exist %GTK_ZIP% (\r
-               wget http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.24/%GTK_ZIP%\r
-       )\r
-       7z x %GTK_ZIP% -o"%MinGW%"\r
+       call :Download %GTK_ZIP% http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.24/%GTK_ZIP%
+       7z x %GTK_ZIP% -o"%MinGW%" -y
        if ERRORLEVEL 1 goto Error\r
 )\r
 \r
@@ -107,33 +195,29 @@ echo =+=+=
 echo Checking expat-dev...\r
 echo =+=+=\r
 if not exist "%MINGW%\include\expat.h" (\r
-       if not exist %EXPAT_ZIP% (\r
-               wget http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/%EXPAT_ZIP%\r
-       )\r
+       call :Download  %EXPAT_ZIP% http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/%EXPAT_ZIP%
        7z x %EXPAT_ZIP% -o"%MinGW%"\r
        if ERRORLEVEL 1 goto Error\r
 )\r
 \r
-set GTT_ZIP=gettext-tools-dev_0.18.1.1-2_win32.zip\r
-echo =+=+=\r
-echo Checking gettext-tools-dev...\r
-echo =+=+=\r
-if not exist "%MINGW_BIN%\libgettextlib-0-18-1.dll" (\r
-       if not exist %GTT_ZIP% (\r
-               wget http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/%GTT_ZIP%\r
-       )\r
-       7z x -y %GTT_ZIP% -o"%MinGW%"\r
-       if ERRORLEVEL 1 goto Error\r
-)\r
+::set GTT_ZIP=gettext-tools-dev_0.18.1.1-2_win32.zip
+::echo =+=+=
+::echo Checking gettext-tools-dev...
+::echo =+=+=
+::if not exist "%MINGW_BIN%\libgettextlib-0-18-1.dll" (
+::     if not exist %GTT_ZIP% (
+::             wget http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/%GTT_ZIP%
+::     )
+::     7z x -y %GTT_ZIP% -o"%MinGW%"
+::     if ERRORLEVEL 1 goto Error
+::)
 \r
 echo =+=+=\r
 echo Checking intltool...\r
 echo =+=+=\r
 set INTLTOOL_ZIP=intltool_0.40.4-1_win32.zip\r
 if not exist "%MINGW_BIN%\intltoolize" (\r
-       if not exist %INTLTOOL_ZIP% (\r
-               wget http://ftp.acc.umu.se/pub/GNOME/binaries/win32/intltool/0.40/%INTLTOOL_ZIP%\r
-       )\r
+       call :Download %INTLTOOL_ZIP% http://ftp.acc.umu.se/pub/GNOME/binaries/win32/intltool/0.40/%INTLTOOL_ZIP%
        7z x %INTLTOOL_ZIP% -o"%MinGW%"\r
        if ERRORLEVEL 1 goto Error\r
 )\r
@@ -143,9 +227,7 @@ echo Checking iconv...
 echo =+=+=\r
 set ICONV_ZIP=libiconv-1.9.2-1-bin.zip\r
 if not exist "%MINGW_BIN%\iconv.exe" (\r
-       if not exist %ICONV_ZIP% (\r
-               wget http://sourceforge.net/projects/gnuwin32/files/libiconv/1.9.2-1/%ICONV_ZIP%\r
-       )\r
+       call :Download %ICONV_ZIP% http://sourceforge.net/projects/gnuwin32/files/libiconv/1.9.2-1/%ICONV_ZIP%
        7z x -y %ICONV_ZIP% -o"%MinGW%"\r
        if ERRORLEVEL 1 goto Error\r
 )\r
@@ -156,52 +238,60 @@ echo =+=+=
 :: Needed by iconv\r
 set LIBINTL_ZIP=libintl-0.14.4-bin.zip\r
 if not exist "%MINGW_BIN%\libintl3.dll" (\r
-       if not exist %LIBINTL_ZIP% (\r
-               wget http://sourceforge.net/projects/gnuwin32/files/libintl/0.14.4/%LIBINTL_ZIP%\r
-       )\r
+       call :Download %LIBINTL_ZIP% http://sourceforge.net/projects/gnuwin32/files/libintl/0.14.4/%LIBINTL_ZIP%
        7z x -y %LIBINTL_ZIP% -o"%MinGW%"\r
        if ERRORLEVEL 1 goto Error\r
 )\r
 \r
 echo =+=+=\r
+echo Checking gettext tools...
+echo =+=+=
+:: Needed by intltool
+set GETTEXT_BIN_LZ=gettext-0.18.3.1-1-mingw32-bin.tar.lzma
+set GETTEXT_BIN_URL=%MINGW_BASE_URL%/gettext/gettext-0.18.3.1-1/%GETTEXT_BIN_LZ%/download
+if not exist "%MINGW_BIN%\xgettext.exe" (
+       call :Download %GETTEXT_BIN_LZ% %GETTEXT_BIN_URL%
+       call :InstallLZMA "%GETTEXT_BIN_LZ%"
+)
+
+echo =+=+=
 echo Checking libcurl...\r
 echo =+=+=\r
-set CURL_TAR=libcurl-7.14.0_nossl-1sid.tar\r
-set CURL_BZ2=%CURL_TAR%.bz2\r
+REM Win32 - Generic - http://curl.haxx.se/download.html
+set CURL=curl-7.34.0-devel-mingw32
+set CURL_ZIP=%CURL%.zip
 if not exist "%MINGW_BIN%\libcurl.dll" (\r
-       if not exist %CURL_BZ2% (\r
-               wget http://downloads.sourceforge.net/devpaks/libcurl-7.14.0_nossl-1sid.DevPak?download\r
-               move libcurl-7.14.0_nossl-1sid.DevPak %CURL_BZ2%\r
-       )\r
+       call :Download %CURL_ZIP% http://curl.haxx.se/gknw.net/7.34.0/dist-w32/%CURL_ZIP%
        echo Extracting libcurl...\r
-       7z e %CURL_BZ2%\r
-       7z x %CURL_TAR% -o"libcurl"\r
+       7z x -y %CURL_ZIP% -o"libcurl"
        if ERRORLEVEL 1 goto Error\r
        @echo ON\r
-       move libcurl\include "%MinGW%\include\curl\r
-       copy /Y libcurl\bin\*.* "%MinGW_BIN%"\r
-       copy /Y libcurl\lib\*.* "%MinGW%\lib"\r
-       copy /Y libcurl\docs\*.* "%MinGW%\doc"\r
-       copy /Y COPYING.txt "%MinGW%\COPYING_curl.txt"\r
+       xcopy /S /Y libcurl\%CURL%\include\*.* "%MinGW%\include"
+       xcopy /S /Y libcurl\%CURL%\bin\*.* "%MinGW_BIN%"
+       xcopy /S /Y libcurl\%CURL%\lib\*.a "%MinGW%\lib"
+       copy /Y libcurl\%CURL%\COPYING "%MinGW%\COPYING_curl.txt"
        rmdir /S /Q libcurl\r
-       del %CURL_TAR%\r
        @echo OFF\r
 )\r
 \r
 echo =+=+=\r
 echo Checking libexif...\r
 echo =+=+=\r
-set EXIF=libexif-0.6.20_winxp_mingw\r
+set EXIF=libexif-0.6.21.1_winxp_mingw
 set EXIF_7Z=%EXIF%.7z\r
 if not exist "%MINGW_BIN%\libexif-12.dll" (\r
-       if not exist %EXIF_7Z% (\r
+       :: Space in URL so function call doesn't work ATM
+       ::call :Download %EXIF_7Z% "http://sourceforge.net/projects/maille/files/Extern libs/%EXIF_7Z%/download"
+       if not exist "%EXIF_7Z%" (
                wget "http://sourceforge.net/projects/maille/files/Extern libs/%EXIF_7Z%/download"\r
+               if ERRORLEVEL 1 goto Error
        )\r
+
        echo Extracting libexif...\r
        7z x %EXIF_7Z%\r
        if ERRORLEVEL 1 goto Error\r
 \r
-       echo Using *xcopy* (to get all subdirs) libexif into place...\r
+       echo Using xcopy to get all subdirs of libexif into place...
        @echo ON\r
        xcopy /Y /S %EXIF%\*.* "%MinGW%"\r
        rmdir /S /Q %EXIF%\r
@@ -211,17 +301,11 @@ if not exist "%MINGW_BIN%\libexif-12.dll" (
 echo =+=+=\r
 echo Checking libstdc++...\r
 echo =+=+=\r
-set STDCPP_TAR=libstdc++-4.6.2-1-mingw32-dll-6.tar\r
+set STDCPP_TAR=gcc-c++-4.8.1-4-mingw32-dll.tar
 set STDCPP_LZ=%STDCPP_TAR%.lzma\r
 if not exist "%MINGW_BIN%\libstdc++-6.dll" (\r
-       if not exist %STDCPP_LZ% (\r
-               wget http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.6.2-1/%STDCPP_LZ%\r
-       )\r
-       echo Extracting lidstdc++...\r
-       7z e %STDCPP_LZ%\r
-       7z x %STDCPP_TAR% -o"%MinGW%"\r
-       if ERRORLEVEL 1 goto Error\r
-       del %STDCPP_TAR%\r
+  call :Download "%STDCPP_LZ%" "http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.8.1-4/%STDCPP_LZ%/download"
+  call :InstallLZMA "%STDCPP_LZ%"
 )\r
 \r
 echo =+=+=\r
@@ -230,14 +314,8 @@ echo =+=+=
 set BZ2_TAR=bzip2-1.0.6-4-mingw32-dev.tar\r
 set BZ2_LZ=%BZ2_TAR%.lzma\r
 if not exist "%MINGW%\include\bzlib.h" (\r
-       if not exist %BZ2_LZ% (\r
-               wget "http://sourceforge.net/projects/mingw/files/MinGW/Extension/bzip2/bzip2-1.0.6-4/%BZ2_LZ%"\r
-       )\r
-       echo Extracting libbz2 header...\r
-       7z e %BZ2_LZ%\r
-       7z x %BZ2_TAR% -o"%MinGW%"\r
-       if ERRORLEVEL 1 goto Error\r
-       del %BZ2_TAR%\r
+       call :Download %BZ2_LZ% "http://sourceforge.net/projects/mingw/files/MinGW/Extension/bzip2/bzip2-1.0.6-4/%BZ2_LZ%"
+       call :InstallLZMA "%BZ2_LZ%"
 )\r
 \r
 echo =+=+=\r
@@ -246,14 +324,8 @@ echo =+=+=
 set BZ2DLL_TAR=libbz2-1.0.6-4-mingw32-dll-2.tar\r
 set BZ2DLL_LZ=%BZ2DLL_TAR%.lzma\r
 if not exist "%MINGW_BIN%\libbz2-2.dll" (\r
-       if not exist %BZ2DLL_LZ% (\r
-               wget "http://sourceforge.net/projects/mingw/files/MinGW/Extension/bzip2/bzip2-1.0.6-4/%BZ2DLL_LZ%"\r
-       )\r
-       echo Extracting libbz2...\r
-       7z e %BZ2DLL_LZ%\r
-       7z x %BZ2DLL_TAR% -o"%MinGW%"\r
-       if ERRORLEVEL 1 goto Error\r
-       del %BZ2DLL_TAR%\r
+       call :Download %BZ2DLL_LZ% "http://sourceforge.net/projects/mingw/files/MinGW/Extension/bzip2/bzip2-1.0.6-4/%BZ2DLL_LZ%"
+       call :InstallLZMA "%BZ2DLL_LZ%"
 )\r
 \r
 echo =+=+=\r
@@ -261,9 +333,7 @@ echo Checking magic dev...
 echo =+=+=\r
 set MAGIC_ZIP=file-5.03-lib.zip\r
 if not exist "%MINGW%\include\magic.h" (\r
-       if not exist %MAGIC_ZIP% (\r
-               wget http://downloads.sourceforge.net/gnuwin32/%MAGIC_ZIP%\r
-       )\r
+       call :Download %MAGIC_ZIP% http://downloads.sourceforge.net/gnuwin32/%MAGIC_ZIP%
        7z x %MAGIC_ZIP% -o"%MinGW%"\r
        if ERRORLEVEL 1 goto Error\r
 )\r
@@ -273,9 +343,7 @@ echo Checking magic DLL...
 echo =+=+=\r
 set MAGICDLL_ZIP=file-5.03-bin.zip\r
 if not exist "%MINGW_BIN%\magic1.dll" (\r
-       if not exist %MAGICDLL_ZIP% (\r
-               wget http://downloads.sourceforge.net/gnuwin32/%MAGICDLL_ZIP%\r
-       )\r
+       call :Download %MAGICDLL_ZIP% http://downloads.sourceforge.net/gnuwin32/%MAGICDLL_ZIP%
        7z x %MAGICDLL_ZIP% -o"%MinGW%"\r
        if ERRORLEVEL 1 goto Error\r
 )\r
@@ -285,9 +353,7 @@ echo Checking regex DLL (required by magic)...
 echo =+=+=\r
 set REGDLL_ZIP=regex-2.7-bin.zip\r
 if not exist "%MINGW_BIN%\regex2.dll" (\r
-       if not exist %REGDLL_ZIP% (\r
-               wget http://downloads.sourceforge.net/gnuwin32/%REGDLL_ZIP%\r
-       )\r
+       call :Download %REGDLL_ZIP% http://downloads.sourceforge.net/gnuwin32/%REGDLL_ZIP%
        7z x %REGDLL_ZIP% -o"%MinGW%"\r
        if ERRORLEVEL 1 goto Error\r
 )\r
@@ -297,9 +363,7 @@ echo Checking SQLite dev...
 echo =+=+=\r
 set SQL_ZIP=sqlite-amalgamation-3080002.zip\r
 if not exist "%MINGW%\include\sqlite3.h" (\r
-       if not exist %SQL_ZIP% (\r
-               wget http://www.sqlite.org/2013/%SQL_ZIP%\r
-       )\r
+       call :Download %SQL_ZIP% http://www.sqlite.org/2013/%SQL_ZIP%
        7z x %SQL_ZIP%\r
        if ERRORLEVEL 1 goto Error\r
        copy /Y sqlite-amalgamation-3080002\s* "%MinGW%\include"\r
@@ -311,17 +375,35 @@ echo Checking SQL DLL...
 echo =+=+=\r
 set SQLDLL_ZIP=sqlite-dll-win32-x86-3080002.zip\r
 if not exist "%MINGW_BIN%\sqlite3.dll" (\r
-       if not exist %SQLDLL_ZIP% (\r
-               wget http://www.sqlite.org/2013/%SQLDLL_ZIP%\r
-       )\r
+       call :Download %SQLDLL_ZIP% http://www.sqlite.org/2013/%SQLDLL_ZIP%
        7z x %SQLDLL_ZIP% -o"%MinGW_BIN%"\r
        if ERRORLEVEL 1 goto Error\r
        REM Annoyingly SQL doesn't come with a .lib file so have to generate it ourselves:\r
        REM Possibly need to insert the line 'LIBRARY sqlite3.dll' at the beginning of the def file?\r
        REM  but this may not be needed as the --dllname option may suffice\r
-       popd %MinGW_BIN%\r
-       dlltool -d sqlite3.def --dllname sqlite3.dll -l ..\lib\sqlite3.lib\r
-       pushd\r
+       set PATH=%PATH%;%MinGW_BIN%
+       dlltool.exe -d %MinGW_BIN%\sqlite3.def --dllname %MinGW_BIN%\sqlite3.dll -l %MinGW%\lib\sqlite3.lib
+       if ERRORLEVEL 1 goto Error
+)\r
+\r
+\r
+echo =+=+=\r
+echo Mapnik...\r
+echo =+=+=\r
+set MAPNIK_ZIP=mapnik-win-sdk-v2.2.0.zip\r
+set MAPNIK_URL=http://mapnik.s3.amazonaws.com/dist/v2.2.0/%MAPNIK_ZIP%\r
+if not exist "%MINGW_BIN%\mapnik.dll" (\r
+       call :Download "%MAPNIK_ZIP%" "%MAPNIK_URL%"\r
+       7z x %MAPNIK_ZIP%\r
+       if ERRORLEVEL 1 goto Error\r
+       copy /Y mapnik-v2.2.0\include\* "%MinGW%\include"\r
+       copy /Y mapnik-v2.2.0\lib\*.lib "%MinGW%\lib\"\r
+       copy /Y mapnik-v2.2.0\lib\*.dll "%MinGW%\bin"\r
+       copy /Y mapnik-v2.2.0\lib\mapnik\input "\"\r
+       rmdir /S /Q mapnik-v2.2.0\r
+       REM Mapnik 2.2.0 seems to ship with a unicode copy which is missing ptypes.h\r
+       REM Copy headers from a known good version...\r
+       REM See fix in calling shell script when using wine\r
 )\r
 \r
 ::\r
@@ -333,9 +415,7 @@ echo Checking Gnome Doc Utils...
 echo =+=+=\r
 set GNOME_DOC_ZIP=gnome-doc-utils-0.12.0.zip\r
 if not exist "%MINGW_BIN%\gnome-doc-prepare" (\r
-       if not exist %GNOME_DOC_ZIP% (\r
-               wget http://ftp.gnome.org/pub/gnome/binaries/win32/gnome-doc-utils/0.12/%GNOME_DOC_ZIP%\r
-       )\r
+       call :Download %GNOME_DOC_ZIP% http://ftp.gnome.org/pub/gnome/binaries/win32/gnome-doc-utils/0.12/%GNOME_DOC_ZIP%
        echo Extracting Gnome Doc Utils...\r
        7z x %GNOME_DOC_ZIP% -o"%MinGW%"\r
        if ERRORLEVEL 1 goto Error\r
@@ -347,9 +427,7 @@ echo =+=+=
 set XLST=libxslt-1.1.26.win32\r
 set XLST_ZIP=%XLST%.zip\r
 if not exist "%MINGW_BIN%\xsltproc.exe" (\r
-       if not exist %XLST_ZIP% (\r
-               wget ftp://ftp.zlatkovic.com/libxml/%XLST_ZIP%\r
-       )\r
+       call :Download %XLST_ZIP% ftp://ftp.zlatkovic.com/libxml/%XLST_ZIP%
        echo Extracting XLST...\r
        7z x %XLST_ZIP%\r
        xcopy /Y /S "%XLST%\bin\*" "%MinGW_BIN%"\r
@@ -363,9 +441,7 @@ echo =+=+=
 set XML2=libxml2-2.7.8.win32\r
 set XML2_ZIP=%XML2%.zip\r
 if not exist "%MINGW_BIN%\xmllint.exe" (\r
-       if not exist %XML2_ZIP% (\r
-               wget ftp://ftp.zlatkovic.com/libxml/%XML2_ZIP%\r
-       )\r
+       call :Download %XML2_ZIP% ftp://ftp.zlatkovic.com/libxml/%XML2_ZIP%
        echo Extracting xmllint...\r
        7z x %XML2_ZIP%\r
        xcopy /Y /S "%XML2%\bin\*" "%MinGW_BIN%"\r
@@ -379,9 +455,7 @@ echo =+=+=
 set ICONV=iconv-1.9.2.win32\r
 set ICONV_ZIP=%ICONV%.zip\r
 if not exist "%MINGW_BIN%\iconv.dll" (\r
-       if not exist %ICONV_ZIP% (\r
-               wget ftp://ftp.zlatkovic.com/libxml/%ICONV_ZIP%\r
-       )\r
+       call :Download %ICONV_ZIP% ftp://ftp.zlatkovic.com/libxml/%ICONV_ZIP%
        echo Extracting iconv...\r
        7z x %ICONV_ZIP%\r
        xcopy /Y /S "%ICONV%\bin\*" "%MinGW_BIN%"\r
@@ -392,23 +466,18 @@ if not exist "%MINGW_BIN%\iconv.dll" (
 :: Note GPSBabel can not be directly downloaded via wget\r
 :: ATM get it manually from here:\r
 ::   http://www.gpsbabel.org/download.html\r
-set GPSBABEL_INST=GPSBabel-1.4.4-Setup.exe\r
-if not exist "%ProgramFiles%\GPSBabel" (\r
-       echo Installing GPSBabel...\r
-       if exist %GPSBABEL_INST% (\r
-               %GPSBABEL_INST% /silent\r
-               if ERRORLEVEL 1 goto Error\r
-       )\r
+set GPSBABEL_INST=GPSBabel-1.5.1-Setup.exe
+if not exist %GPSBABEL_INST% (
+       echo Required %GPSBABEL_INST% not found. Exitting
+       exit /b
 )\r
 \r
 echo =+=+=\r
 echo Checking Perl Installation...\r
 echo =+=+=\r
-set PERL_MSI=ActivePerl-5.14.3.1404-MSWin32-x86-296513.msi\r
+set PERL_MSI=ActivePerl-5.18.2.1802-MSWin32-x86-64int-298023.msi
 if not exist "%SystemDrive%\Perl" (\r
-       if not exist %PERL_MSI% (\r
-               wget http://downloads.activestate.com/ActivePerl/releases/5.14.3.1404/%PERL_MSI%\r
-       )\r
+       call :Download %PERL_MSI% http://downloads.activestate.com/ActivePerl/releases/5.18.2.1802/%PERL_MSI%
        echo Installing Perl takes a little time...\r
        msiexec /qb /i %PERL_MSI% PERL_PATH=Yes PERL_EXT=Yes\r
        if ERRORLEVEL 1 goto Error\r
@@ -419,9 +488,7 @@ echo Checking NSIS installed...
 echo =+=+=\r
 set NSIS_INST=nsis-2.46-setup.exe\r
 if not exist "%ProgramFiles%\NSIS" (\r
-       if not exist %NSIS_INST% (\r
-               wget http://prdownloads.sourceforge.net/nsis/nsis-2.46-setup.exe?download\r
-       )\r
+       call :Download %NSIS_INST% http://prdownloads.sourceforge.net/nsis/nsis-2.46-setup.exe?download
        echo Installing NSIS...\r
        %NSIS_INST% /S\r
        if ERRORLEVEL 1 goto Error\r
@@ -432,9 +499,7 @@ echo Checking NSIS Plugins installed...
 echo =+=+=\r
 set FPDLLZIP=FindProc.zip\r
 if not exist "%ProgramFiles%\NSIS\Plugins\FindProcDLL.dll" (\r
-       if not exist %FPDLLZIP% (\r
-               wget http://nsis.sourceforge.net/mediawiki/images/3/3c/%FPDLLZIP%\r
-       )\r
+       call :Download %FPDLLZIP% http://nsis.sourceforge.net/mediawiki/images/3/3c/%FPDLLZIP%
        echo Extracting NSIS Plugins...\r
        7z e %FPDLLZIP% -o"%ProgramFiles%\NSIS\Plugins"\r
        if ERRORLEVEL 1 goto Error\r
@@ -443,13 +508,28 @@ if not exist "%ProgramFiles%\NSIS\Plugins\FindProcDLL.dll" (
 popd\r
 \r
 echo Fixing Perl reference\r
-REM Sadly '-i' for in place changes doesn't seem available with Windows sed 3.02\r
+
 set PATH=%PATH%;C:\msys\1.0\bin\r
-sed -e 's:#! /bin/perl:#! /opt/perl/bin/perl:' %MINGW_BIN%\glib-mkenums > tmp.enums\r
+
+call :FixPerlRef %MINGW_BIN%\glib-mkenums s:/bin/perl:perl:
+call :FixPerlRef %MINGW_BIN%\intltool-extract s:/opt/perl/bin/perl:perl:
+call :FixPerlRef %MINGW_BIN%\intltool-merge s:/opt/perl/bin/perl:perl:
+call :FixPerlRef %MINGW_BIN%\intltool-prepare s:/opt/perl/bin/perl:perl:
+call :FixPerlRef %MINGW_BIN%\intltool-update s:/opt/perl/bin/perl:perl:
+
+goto End
+
+:FixPerlRef
+:: Param %1 = File
+:: Param %2 = sed command
+:: Sadly '-i' for in place changes doesn't seem available with Windows sed 3.02
+sed -e '%2' %1 > %1.tmp
 if ERRORLEVEL 1 goto Error\r
-xcopy /Y tmp.enums %MINGW_BIN%\glib-mkenums\r
+xcopy /Y %1.tmp %1
 if ERRORLEVEL 1 goto Error\r
-del tmp.enums\r
+del %1.tmp
+:: End function
+exit /b
 \r
 :: Potentially Clean Up\r
 :: If any parameters given on the command line then remove all downloaded items\r
@@ -461,9 +541,53 @@ if not [%1]==[] (
 \r
 goto End\r
 \r
+
+::Function to try to download something via wget
+:: (obviously needs 7zip to be installed first and available on the path!)
+:: Param %1 = File
+:: Param %2 = URL (which should retrieve %1) [ URL can't contain a space or %20:( ]
+:Download
+if not exist "%1" (
+       wget "%2"
+       if ERRORLEVEL 1 goto Error
+)
+:: End function
+exit /b
+
+::Function to install something via 7zip
+:: (obviously needs 7zip to be installed first and available on the path!)
+:: Param %1 = LZMA file
+:: Param %2 = Internal file (normally the .tar file)
+:InstallBy7Zip
+echo Extracting "%1" from "%2"
+7z e "%1"
+if ERRORLEVEL 1 goto Error
+7z x "%2" -o"%MinGW%"
+if ERRORLEVEL 1 goto Error
+del "%2"
+if ERRORLEVEL 1 goto Error
+:: End function
+exit /b
+
+::Function to install LZMA file containing a tar file (via 7zip)
+:: (obviously needs 7zip to be installed first and available on the path!)
+:: Param %1 = LZMA file
+:InstallLZMA
+7z e "%1"
+if ERRORLEVEL 1 goto Error
+set param=%1
+:: Remove the .lzma extension to get the tar file
+set file=%param:.lzma=%
+7z x "%file%" -o"%MinGW%" -y
+if ERRORLEVEL 1 goto Error
+del "%file%"
+if ERRORLEVEL 1 goto Error
+:: End function
+exit /b
+
 :Error\r
 echo exitting due to error: %ERRORLEVEL%\r
-exit\r
+exit /b
 \r
 :End\r
 echo Finished\r