This is an old revision of the document!
LibPq (Postgresql Client Library) Windows, How to compile
Building LibPq 8.3.x
Requirements
- Common tools used to compile PHP
- Native Perl from ActiveState (http://www.activestate.com/Products/activeperl/) installed and perl being in your PATH
- Postgresql sources (http://pecl2.php.net/downloads/php-windows-builds/source/ Custom sources for VC6)
Dependencies
- OpenSSL build (http://pecl2.php.net/downloads/php-windows-builds/php-libs/)
Modification to the config scripts (all VCs)
To make it works smoothly with our libraries, it is first needed to modify the script to look for:
- zlib.lib instead of zdll.lib
- ssleay32.lib instead of ssleay32MD.lib
- libeay32.lib instead of libeay32MD.lib
and for the debug versions:
- zlib_debug.lib instead of zdll.lib
- ssleay32_debug.lib instead of ssleay32MDd.lib
- libeay32_debug.lib instead of libeay32MDd.lib
To do so, open src\tools\msvc\Solution.pm (line 332):
$proj->AddLibrary($self->{options}->{zlib} . '\lib\zlib.lib');
The configuration option given through the command line does not work. Edit the src\tools\msvc\config.pl to define the correct path. Here is an example using my local config:
our $config = { asserts=>0, # --enable-cassert integer_datetimes=>0, # --enable-integer-datetimes nls=>undef, # --enable-nls=<path> tcl=>'c:\tcl', # --with-tls=<path> perl=>'c:\perl', # --with-perl python=>'c:\python24', # --with-python=<path> #krb5=>'c:\prog\pgsql\depend\krb5', # --with-krb5=<path> krb5=>0, ldap=>0, # --with-ldap openssl=>'c:\Users\pierre\Documents\php-sdk\vc8\x86\deps', # --with-ssl=<path> uuid=>'c:\prog\pgsql\depend\ossp-uuid', #--with-ossp-uuid xml=>'c:\Users\pierre\Documents\php-sdk\vc8\x86\deps', xslt=>'c:\prog\pgsql\depend\libxslt', iconv=>'c:\prog\pgsql\depend\iconv', zlib=>'c:\Users\pierre\Documents\php-sdk\vc8\x86\deps'# --with-zlib=<path> };
Nothing else is necessary as long as the VC version is 2005 or later. See the next section for the changes I applied for the VC6 builds.
Modification to the sources (VC6) only
libpq relies on SHGetFolderPath which is not available in the Platform SDK used by VC6 (2003/02). Modify the file \src\backend\libpq\fe-connect.c (line 3812) as follow:
#ifndef SHGetFolderPath { HMODULE shfolder = LoadLibrary("shfolder.dll"); FARPROC qSHGetFolderPath; #define CSIDL_PROGRAM_FILES 38 #define CSIDL_APPDATA 0x001a char szPath[MAX_PATH]; shfolder = LoadLibrary("shfolder.dll"); if(shfolder == NULL) { return false; } qSHGetFolderPath = GetProcAddress(shfolder, "SHGetFolderPathA"); if (qSHGetFolderPath == NULL) { FreeLibrary(shfolder); return NULL; } if (qSHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, szPath)) { FreeLibrary(shfolder); return NULL; } } #else if (SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, tmppath) != S_OK) return false; #endif
Further changes have to be done after having run the configure scripts, to update pg_config.h, pg_config_os.h, see the next section for the details.
Configure
Configure for Win32
cd C:\php-sdk\vc9\x86\libs_builds\postgresql-8.3.3\tools\msvc
build.bat libpq