Last active
October 4, 2015 11:49
-
-
Save slaykovsky/94b2689168b8401de050 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
rem Prerequisities | |
rem 1. Visual Studio 2015 Community Edition | |
rem 2. Msys2 | |
rem 3. Active Perl | |
rem 4. Python 2.7 | |
rem 5. 7-zip | |
rem Set PostgreSQL version | |
set PGVER=9.4.4 | |
rem Set useful directories | |
set PG_BUILD_DIR=c:\pg | |
set PG_DOWNLOAD_DIR=%PG_BUILD_DIR%\downloads | |
rem Set Architecture (x86 or x64) | |
set ARCH=x64 | |
rem Add build tools to PATH | |
set PATH=%PATH%;C:\Program Files\7-Zip; | |
if "%ARCH%" == "x86" set PATH=C:\msys32\usr\bin;C:\Perl\Bin;%PATH% | |
if "%ARCH%" == "x64" set PATH=C:\msys64\usr\bin;C:\Perl64\Bin;%PATH% | |
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %ARCH% | |
rem Make nmake builds parallel | |
set CL=/MP | |
rem Install useful UNIX tools | |
pacman --noconfirm --sync flex bison tar wget unzip gettext || goto :ERROR | |
rem Start build from place you need | |
goto :BUILD_ALL | |
:BUILD_ALL | |
mkdir "%PG_DOWNLOAD_DIR%" | |
:BUILD_ICU | |
cd %PG_DOWNLOAD_DIR% | |
wget --no-check-certificate -c http://download.icu-project.org/files/icu4c/56rc/icu4c-56_rc-src.tgz -O icu4c-source.tgz | |
rm -rf "c:\pg\icu" | |
mkdir "c:\pg\icu" | |
tar -xvf icu4c-source.tgz | |
mv %PG_DOWNLOAD_DIR%\icu c:\pg\icu | |
cd "c:\pg\icu" | |
devenv icu\source\allinone\allinone.sln /upgrade || goto :ERROR | |
rem Here well not go to Error 'cause there are some errors with compilation | |
rem we can proudly ignore | |
msbuild icu\source\allinone\allinone.sln /p:Configuration=Release /p:Platform=%ARCH% | |
rem msbuild icu\source\common\common.vcxproj /p:Configuration=Release /p:Platform=%ARCH% | |
if "%ARCH%" == "x86" cp -va icu\bin bin || goto :ERROR | |
if "%ARCH%" == "x64" cp -va icu\bin64 bin || goto :ERROR | |
if "%ARCH%" == "x86" cp -va icu\lib lib || goto :ERROR | |
if "%ARCH%" == "x64" cp -va icu\lib64 lib || goto :ERROR | |
cp -va icu\include include || goto :ERROR | |
:BUILD_OPENSSL | |
cd %PG_DOWNLOAD_DIR% | |
wget --no-check-certificate -c ftp://ftp.openssl.org/source/openssl-1.0.2d.tar.gz -O openssl-source.tar.gz | |
rm -rf "c:\pg\openssl" | |
mkdir "c:\pg\openssl" | |
tar -xvf openssl-source.tar.gz | |
mv openssl-1.0.2d c:\pg\openssl | |
cd c:\pg\openssl\openssl-1.0.2d | |
if "%ARCH%" == "x86" perl Configure VC-WIN32 no-asm --prefix="c:\pg\openssl" || goto :ERROR | |
if "%ARCH%" == "x86" call ms\do_ms || goto :ERROR | |
if "%ARCH%" == "x64" perl Configure VC-WIN64A no-asm --prefix="c:\pg\openssl" || goto :ERROR | |
if "%ARCH%" == "x64" call ms\do_win64a || goto :ERROR | |
nmake /f ms\ntdll.mak || goto :ERROR | |
nmake /f ms\ntdll.mak test || goto :ERROR | |
nmake /f ms\ntdll.mak install || goto :ERROR | |
cd c:\pg\openssl | |
mv bin\libeay32.dll bin\libeay32MD.dll || goto :ERROR | |
mv bin\ssleay32.dll bin\ssleay32MD.dll || goto :ERROR | |
mkdir lib\VC | |
mv lib\libeay32.lib lib\VC\libeay32MD.lib || goto :ERROR | |
mv lib\ssleay32.lib lib\VC\ssleay32MD.lib || goto :ERROR | |
:BUILD_ZLIB | |
cd %PG_DOWNLOAD_DIR% | |
wget -c http://zlib.net/zlib-1.2.8.tar.gz | |
rm -rf "c:\pg\zlib" | |
mkdir "c:\pg\zlib" | |
mkdir "c:\pg\zlib\lib" | |
mkdir "c:\pg\zlib\include" | |
tar -xvf zlib-1.2.8.tar.gz | |
mv zlib-1.2.8 c:\pg\zlib | |
cd c:\pg\zlib\zlib-1.2.8 | |
nmake /f win32/Makefile.msc || goto :ERROR | |
nmake /f win32/Makefile.msc test || goto :ERROR | |
cp -v *.lib c:\pg\zlib\lib || goto :ERROR | |
cp -v *.dll c:\pg\zlib\lib || goto :ERROR | |
cp -v *.pdb c:\pg\zlib\lib || goto :ERROR | |
cp -v *.h c:\pg\zlib\include || goto :ERROR | |
:BUILD_ICONV | |
cd %PG_DOWNLOAD_DIR% | |
wget --no-check-certificate -c https://github.com/holy-shit/iconv-for-windows/archive/master.zip -O iconv-for-windows.zip | |
rm -rf "c:\pg\iconv" | |
mkdir "c:\pg\iconv" | |
cd "c:\pg\iconv" | |
7z -y x "%PG_DOWNLOAD_DIR%\iconv-for-windows.zip" | |
mv iconv-for-windows-master iconv-for-windows | |
cp -v iconv-for-windows/lib/libiconv.lib iconv-for-windows/lib/iconv.lib || goto :ERROR | |
cp -v iconv-for-windows/lib/libiconv.dll iconv-for-windows/lib/iconv.dll || goto :ERROR | |
cp -v iconv-for-windows/lib64/libiconv.lib iconv-for-windows/lib64/iconv.lib || goto :ERROR | |
cp -v iconv-for-windows/lib64/libiconv.dll iconv-for-windows/lib64/iconv.dll || goto :ERROR | |
mkdir "c:\pg\iconv\lib" | |
if "%ARCH%" == "x86" cp -va c:/pg/iconv/iconv-for-windows/lib/* c:\pg\iconv\lib || goto :ERROR | |
if "%ARCH%" == "x64" cp -va c:/pg/iconv/iconv-for-windows/lib64/* c:\pg\iconv\lib || goto :ERROR | |
cp -va c:/pg/iconv/iconv-for-windows/include c:\pg\iconv || goto :ERROR | |
cp -va c:/pg/iconv/iconv-for-windows/libiconv c:\pg\iconv || goto :ERROR | |
:BUILD_XML | |
cd %PG_DOWNLOAD_DIR% | |
rm -rf libxml2-master | |
wget --no-check-certificate -c https://github.com/tenderlove/libxml2/archive/master.zip | |
rm -rf "c:\pg\libxml2" | |
mkdir "c:\pg\libxml2" | |
mkdir "c:\pg\libxml2\lib" | |
mkdir "c:\pg\libxml2\include" | |
unzip master.zip | |
curl -Ssl https://gist.githubusercontent.com/slaykovsky/30b4fb94f888fa10272b/raw/19a1b38c3e03acf48131af312b1df02a4b26977c/win32config.h > win32config.h | |
mv win32config.h libxml2-master\include\win32config.h | |
cd libxml2-master\win32 | |
cp -va c:/pg/iconv/include/* c:/pg/libxml2/include/ || goto :ERROR | |
cp -va c:/pg/iconv/lib/* c:/pg/libxml2/lib/ || goto :ERROR | |
cp -va c:/pg/zlib/include/* c:/pg/libxml2/include/ || goto :ERROR | |
cp -va c:/pg/zlib/lib/* c:/pg/libxml2/lib/ || goto :ERROR | |
cp -va c:/pg/icu/include/* c:/pg/libxml2/include/ || goto :ERROR | |
cp -va c:/pg/icu/lib/* c:/pg/libxml2/lib/ || goto :ERROR | |
cp -va c:/pg/libxml2/lib/icuuc.lib c:/pg/libxml2/lib/icu.lib || goto :ERROR | |
cscript configure.js compiler=mscv iconv=yes zlib=yes icu=yes prefix=c:\pg\libxml2 iconv=yes || goto :ERROR | |
nmake /f Makefile.msvc || goto :ERROR | |
nmake /f Makefile.msvc install || goto :ERROR | |
:BUILD_XSLT | |
cd %PG_DOWNLOAD_DIR% | |
wget -c ftp://xmlsoft.org/libxml2/libxslt-git-snapshot.tar.gz | |
rm -rf "c:\pg\libxslt" | |
mkdir "c:\pg\libxslt" | |
mkdir "c:\pg\libxslt\lib" | |
mkdir "c:\pg\libxslt\include" | |
tar -xvf libxslt-git-snapshot.tar.gz | |
curl -Ssl https://gist.githubusercontent.com/slaykovsky/4f4d2f6e3d97a1d9faa0/raw/9a09075067932a1e033b0128c8d86ccdae1233bb/libxslt_win32config.h > win32config.h | |
mv win32config.h libxslt-1.1.28\libxslt\win32config.h || goto :ERROR | |
cd libxslt-1.1.28\win32 | |
cp -va c:/pg/iconv/include/* c:/pg/libxslt/include/ || goto :ERROR | |
cp -va c:/pg/iconv/lib/* c:/pg/libxslt/lib/ || goto :ERROR | |
cp -va c:/pg/zlib/include/* c:/pg/libxslt/include/ || goto :ERROR | |
cp -va c:/pg/zlib/lib/* c:/pg/libxslt/lib/ || goto :ERROR | |
cp -va c:/pg/icu/include/* c:/pg/libxslt/include/ || goto :ERROR | |
cp -va c:/pg/icu/lib/* c:/pg/libxslt/lib/ || goto :ERROR | |
cp -va c:/pg/libxml2/include/* c:/pg/libxslt/include/ || goto :ERROR | |
cp -va c:/pg/libxml2/lib/* c:/pg/libxslt/lib || goto :ERROR | |
cscript configure.js prefix=c:\pg\libxslt iconv=yes zlib=yes || goto :ERROR | |
sed -i /NOWIN98/d Makefile.msvc || goto :ERROR | |
nmake /f Makefile.msvc || goto :ERROR | |
nmake /f Makefile.msvc install || goto :ERROR | |
:BUILD_LIBINTL | |
cd %PG_DOWNLOAD_DIR% | |
wget --no-check-certificate -c https://github.com/postgrespro/libintl_win32/archive/master.zip -O libintl.zip | |
rm -rf libintl_win32-master | |
rm -rf "c:\pg\libintl" | |
mkdir "c:\pg\libintl" | |
unzip libintl.zip | |
cd libintl_win32-master | |
cp -va c:/pg/iconv/include c:/pg/libintl/include || goto :ERROR | |
cp -va c:/pg/iconv/lib c:/pg/libintl/lib || goto :ERROR | |
nmake /f Makefile.msvc MFLAGS="-MD" DLL=1 PREFIX=c:\pg\libintl install || goto :ERROR | |
cp -v c:/pg/libintl/lib/intl.lib c:/pg/libintl/lib/libintl.lib || goto :ERROR | |
:BUILD_UUID | |
CD %PG_DOWNLOAD_DIR% | |
wget -c http://netcologne.dl.sourceforge.net/project/osspuuidwin32/src/ossp_uuid_1.6.2_win32_source_120608.7z -O ossp_uuid_1.6.2_win32_source_120608.7z | |
rm -rf "c:\pg\uuid" | |
MKDIR "c:\pg\uuid" | |
CD "c:\pg\uuid" | |
7z x %PG_DOWNLOAD_DIR%\ossp_uuid_1.6.2_win32_source_120608.7z | |
CD "C:\pg\uuid\ossp_uuid" | |
devenv ossp_uuid.sln /upgrade || goto :ERROR | |
IF "%ARCH%" == "x64" sed -i 's/Win32/x64/g' ossp_uuid.sln || goto :ERROR | |
IF "%ARCH%" == "x64" sed -i 's/Win32/x64/g' ossp_uuid\ossp_uuid.vcxproj || goto :ERROR | |
IF "%ARCH%" == "x64" sed -i 's/Win32/x64/g' example\example.vcxproj || goto :ERROR | |
IF "%ARCH%" == "x64" sed -i 's/Win32/x64/g' uuid_cli\uuid_cli.vcxproj || goto :ERROR | |
IF "%ARCH%" == "x64" msbuild ossp_uuid.sln /p:Configuration=Release /p:Platform=x64 || goto :ERROR | |
IF "%ARCH%" == "x86" msbuild ossp_uuid.sln /p:Configuration=Release || goto :ERROR | |
MKDIR "c:\pg\uuid\lib" || goto :ERROR | |
cp -av include "c:\pg\uuid" || goto :ERROR | |
IF "%ARCH%" == "x64" cp -av x64/Release/ossp_uuid.lib "c:\pg\uuid\lib\uuid.lib" || goto :ERROR | |
IF "%ARCH%" == "x86" cp -av Release/ossp_uuid.lib "c:\pg\uuid\lib\uuid.lib" || goto :ERROR | |
:BUILD_POSTGRESQL | |
CD %PG_DOWNLOAD_DIR% | |
wget --no-check-certificate -c https://ftp.postgresql.org/pub/source/v%PGVER%/postgresql-%PGVER%.tar.bz2 -O postgresql-%PGVER%.tar.bz2 | |
rm -rf "c:\pg\postgresql" | |
MKDIR "c:\pg\postgresql" | |
tar xf postgresql-%PGVER%.tar.bz2 -C "c:\pg\postgresql" | |
CD "c:\pg\postgresql\postgresql-%PGVER%" | |
>src\tools\msvc\config.pl ECHO use strict; | |
>>src\tools\msvc\config.pl ECHO use warnings; | |
>>src\tools\msvc\config.pl ECHO our $config = { | |
>>src\tools\msvc\config.pl ECHO asserts ^=^> 0^, ^# --enable-cassert | |
>>src\tools\msvc\config.pl ECHO ^# integer_datetimes^=^>1, | |
>>src\tools\msvc\config.pl ECHO ^# float4byval^=^>1, | |
>>src\tools\msvc\config.pl ECHO ^# float8byval^=^>0, | |
>>src\tools\msvc\config.pl ECHO ^# blocksize ^=^> 8, | |
>>src\tools\msvc\config.pl ECHO ^# wal_blocksize ^=^> 8, | |
>>src\tools\msvc\config.pl ECHO ^# wal_segsize ^=^> 16, | |
>>src\tools\msvc\config.pl ECHO ldap ^=^> 1, | |
>>src\tools\msvc\config.pl ECHO nls ^=^> 'C:\pg\libintl', | |
>>src\tools\msvc\config.pl ECHO tcl ^=^> undef, | |
IF "%ARCH%" == "x64" (>>src\tools\msvc\config.pl ECHO perl ^=^> 'C:\Perl64', ) | |
IF "%ARCH%" == "x86" (>>src\tools\msvc\config.pl ECHO perl ^=^> 'C:\Perl', ) | |
>>src\tools\msvc\config.pl ECHO python ^=^> 'C:\Python27', | |
>>src\tools\msvc\config.pl ECHO openssl ^=^> 'c:\pg\openssl', | |
>>src\tools\msvc\config.pl ECHO uuid ^=^> 'c:\pg\uuid', | |
>>src\tools\msvc\config.pl ECHO xml ^=^> 'c:\pg\libxml2', | |
>>src\tools\msvc\config.pl ECHO xslt ^=^> 'c:\pg\libxslt', | |
>>src\tools\msvc\config.pl ECHO iconv ^=^> 'C:\pg\iconv', | |
>>src\tools\msvc\config.pl ECHO zlib ^=^> 'c:\pg\zlib' | |
>>src\tools\msvc\config.pl ECHO ^}; | |
>>src\tools\msvc\config.pl ECHO 1^; | |
cd src\tools\msvc | |
sed -i "s|VC2013Project|VC2015Project|g" MSBuildProject.pm | |
sed -i "s|12.00|14.00|g" MSBuildProject.pm | |
sed -i "s|v120|v140|g" MSBuildProject.pm | |
sed -i "s|12.0|14.0|g" MSBuildProject.pm | |
sed -i "s|VC2013Project|VC2015Project|g" VSObjectFactory.pm | |
perl build.pl || GOTO :ERROR | |
:BUILD_PG | |
IF "%ARCH%" == "x86" SET PERL5LIB=C:\Perl\lib;src\tools\msvc | |
IF "%ARCH%" == "x64" SET PERL5LIB=C:\Perl64\lib;src\tools\msvc | |
rm -rf c:\pg\distr_%ARCH%_%PGVER%\postgresql | |
MKDIR "c:\pg\distr_%ARCH%_%PGVER%\postgresql" | |
PAUSE | |
CD "c:\pg\postgresql\postgresql-%PGVER%\src\tools\msvc" | |
cp -v c:/pg/libintl/lib/*.dll c:\pg\postgresql\postgresql-%PGVER%\ || goto :ERROR | |
perl install.pl c:\pg\distr_%ARCH%_%PGVER%\postgresql || goto :ERROR | |
PAUSE | |
cp -v c:/pg/libintl/lib/*.dll "c:\pg\distr_%ARCH%_%PGVER%\postgresql\bin" || goto :ERROR | |
cp -v c:/pg/iconv/lib/*.dll "c:\pg\distr_%ARCH%_%PGVER%\postgresql\bin" || goto :ERROR | |
cp -v c:/pg/libxml2/lib/*.dll "c:\pg\distr_%ARCH%_%PGVER%\postgresql\bin" || goto :ERROR | |
cp -v c:/pg/libxslt/lib/*.dll "c:\pg\distr_%ARCH%_%PGVER%\postgresql\bin" || goto :ERROR | |
cp -v c:/pg/openssl/lib/VC/*.dll "c:\pg\distr_%ARCH%_%PGVER%\postgresql\bin" || goto :ERROR | |
cp -v c:/pg/zlib/lib/*.dll "c:\pg\distr_%ARCH%_%PGVER%\postgresql\bin" || goto :ERROR | |
goto :DONE | |
:ERROR | |
echo Failed with error #%errorlevel%. | |
PAUSE | |
exit /b %errorlevel% | |
:DONE | |
echo Done. | |
PAUSE |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment