Commit aaef29b3 authored by Tom Lane's avatar Tom Lane

More MSVC build fixes:

* New versions of OpenSSL come with proper debug versions, and use
suffixed names on the LIBs for that. Adapts library handling to deal
with that.

* Fixes error where it incorrectly enabled Kerberos based on NLS
configuration instead of Kerberos configuration

* Specifies path of perl in config, instead of using current one.
Required when using a 64-bit perl normally, but want to build pl/perl
against 32-bit one (required)

* Fix so pgevent generates win32ver.rc automatically

Magnus Hagander
parent e2b1dbd3
...@@ -18,7 +18,8 @@ sub new { ...@@ -18,7 +18,8 @@ sub new {
guid => Win32::GuidGen(), guid => Win32::GuidGen(),
files => {}, files => {},
references => [], references => [],
libraries => '', libraries => [],
suffixlib => [],
includes => '', includes => '',
defines => ';', defines => ';',
solution => $solution, solution => $solution,
...@@ -86,12 +87,12 @@ sub AddReference { ...@@ -86,12 +87,12 @@ sub AddReference {
} }
sub AddLibrary { sub AddLibrary {
my ($self, $lib) = @_; my ($self, $lib, $dbgsuffix) = @_;
if ($self->{libraries} ne '') { push @{$self->{libraries}}, $lib;
$self->{libraries} .= ' '; if ($dbgsuffix) {
push @{$self->{suffixlib}}, $lib;
} }
$self->{libraries} .= $lib;
} }
sub AddIncludeDir { sub AddIncludeDir {
...@@ -351,7 +352,19 @@ sub WriteConfiguration ...@@ -351,7 +352,19 @@ sub WriteConfiguration
{ {
my ($self, $f, $cfgname, $p) = @_; my ($self, $f, $cfgname, $p) = @_;
my $cfgtype = ($self->{type} eq "exe")?1:($self->{type} eq "dll"?2:4); my $cfgtype = ($self->{type} eq "exe")?1:($self->{type} eq "dll"?2:4);
my $libs = $self->{libraries}; my $libcfg = (uc $cfgname eq "RELEASE")?"MD":"MDd";
my $libs = '';
foreach my $lib (@{$self->{libraries}}) {
my $xlib = $lib;
foreach my $slib (@{$self->{suffixlib}}) {
if ($slib eq $lib) {
$xlib =~ s/\.lib$/$libcfg.lib/;
last;
}
}
$libs .= $xlib . " ";
}
$libs =~ s/ $//;
$libs =~ s/__CFGNAME__/$cfgname/g; $libs =~ s/__CFGNAME__/$cfgname/g;
print $f <<EOF; print $f <<EOF;
<Configuration Name="$cfgname|Win32" OutputDirectory=".\\$cfgname\\$self->{name}" IntermediateDirectory=".\\$cfgname\\$self->{name}" <Configuration Name="$cfgname|Win32" OutputDirectory=".\\$cfgname\\$self->{name}" IntermediateDirectory=".\\$cfgname\\$self->{name}"
......
...@@ -83,7 +83,7 @@ sub GenerateFiles { ...@@ -83,7 +83,7 @@ sub GenerateFiles {
print O "#define USE_SSL 1\n" if ($self->{options}->{openssl}); print O "#define USE_SSL 1\n" if ($self->{options}->{openssl});
print O "#define ENABLE_NLS 1\n" if ($self->{options}->{nls}); print O "#define ENABLE_NLS 1\n" if ($self->{options}->{nls});
print O "#define LOCALEDIR \"/usr/local/pgsql/share/locale\"\n" if ($self->{options}->{nls}); print O "#define LOCALEDIR \"/usr/local/pgsql/share/locale\"\n" if ($self->{options}->{nls});
if ($self->{options}->{nls}) { if ($self->{options}->{krb5}) {
print O "#define KRB5 1\n"; print O "#define KRB5 1\n";
print O "#define HAVE_KRB5_ERROR_TEXT_DATA 1\n"; print O "#define HAVE_KRB5_ERROR_TEXT_DATA 1\n";
print O "#define HAVE_KRB5_TICKET_ENC_PART2 1\n"; print O "#define HAVE_KRB5_TICKET_ENC_PART2 1\n";
...@@ -220,8 +220,8 @@ sub AddProject { ...@@ -220,8 +220,8 @@ sub AddProject {
} }
if ($self->{options}->{openssl}) { if ($self->{options}->{openssl}) {
$proj->AddIncludeDir($self->{options}->{openssl} . '\include'); $proj->AddIncludeDir($self->{options}->{openssl} . '\include');
$proj->AddLibrary($self->{options}->{openssl} . '\lib\VC\ssleay32.lib'); $proj->AddLibrary($self->{options}->{openssl} . '\lib\VC\ssleay32.lib', 1);
$proj->AddLibrary($self->{options}->{openssl} . '\lib\VC\libeay32.lib'); $proj->AddLibrary($self->{options}->{openssl} . '\lib\VC\libeay32.lib', 1);
} }
if ($self->{options}->{nls}) { if ($self->{options}->{nls}) {
$proj->AddIncludeDir($self->{options}->{nls} . '\include'); $proj->AddIncludeDir($self->{options}->{nls} . '\include');
......
...@@ -6,7 +6,7 @@ our $config = { ...@@ -6,7 +6,7 @@ our $config = {
asserts=>1, # --enable-cassert asserts=>1, # --enable-cassert
nls=>undef, # --enable-nls=<path> nls=>undef, # --enable-nls=<path>
tcl=>'c:\tcl', # --with-tls=<path> tcl=>'c:\tcl', # --with-tls=<path>
perl=>1, # --with-perl perl=>'c:\perl', # --with-perl
python=>'c:\python24', # --with-python=<path> python=>'c:\python24', # --with-python=<path>
krb5=>'c:\prog\pgsql\depend\krb5', # --with-krb5=<path> krb5=>'c:\prog\pgsql\depend\krb5', # --with-krb5=<path>
ldap=>1, # --with-ldap ldap=>1, # --with-ldap
......
...@@ -47,24 +47,23 @@ $plpgsql->AddFiles('src\pl\plpgsql\src','scan.l','gram.y'); ...@@ -47,24 +47,23 @@ $plpgsql->AddFiles('src\pl\plpgsql\src','scan.l','gram.y');
$plpgsql->AddReference($postgres); $plpgsql->AddReference($postgres);
if ($solution->{options}->{perl}) { if ($solution->{options}->{perl}) {
# Already running in perl, so use the version that we already have information for.
use Config;
my $plperl = $solution->AddProject('plperl','dll','PLs','src\pl\plperl'); my $plperl = $solution->AddProject('plperl','dll','PLs','src\pl\plperl');
$plperl->AddIncludeDir($Config{archlibexp} . '\CORE'); $plperl->AddIncludeDir($solution->{options}->{perl} . '/lib/CORE');
$plperl->AddDefine('PLPERL_HAVE_UID_GID'); $plperl->AddDefine('PLPERL_HAVE_UID_GID');
if (Solution::IsNewer('src\pl\plperl\SPI.c','src\pl\plperl\SPI.xs')) { if (Solution::IsNewer('src\pl\plperl\SPI.c','src\pl\plperl\SPI.xs')) {
print 'Building src\pl\plperl\SPI.c...' . "\n"; print 'Building src\pl\plperl\SPI.c...' . "\n";
system('perl ' . $Config{privlibexp} . '/ExtUtils/xsubpp -typemap ' . $Config{privlibexp} . '/ExtUtils/typemap src\pl\plperl\SPI.xs >src\pl\plperl\SPI.c'); system($solution->{options}->{perl} . '/bin/perl ' . $solution->{options}->{perl} . '/lib/COREExtUtils/xsubpp -typemap ' . $solution->{options}->{perl} . '/lib/CORE/ExtUtils/typemap src\pl\plperl\SPI.xs >src\pl\plperl\SPI.c');
die 'Failed to create SPI.c' . "\n" if ((!(-f 'src\pl\plperl\SPI.c')) || -z 'src\pl\plperl\SPI.c'); die 'Failed to create SPI.c' . "\n" if ((!(-f 'src\pl\plperl\SPI.c')) || -z 'src\pl\plperl\SPI.c');
} }
$plperl->AddReference($postgres); $plperl->AddReference($postgres);
$plperl->AddLibrary($Config{archlibexp} . '\CORE\perl58.lib'); $plperl->AddLibrary($solution->{options}->{perl} . '\lib\CORE\perl58.lib');
} }
if ($solution->{options}->{python}) { if ($solution->{options}->{python}) {
my $plpython = $solution->AddProject('plpython','dll','PLs','src\pl\plpython'); my $plpython = $solution->AddProject('plpython','dll','PLs','src\pl\plpython');
$plpython->AddIncludeDir($solution->{options}->{python} . '\include'); $plpython->AddIncludeDir($solution->{options}->{python} . '\include');
$plpython->AddLibrary($solution->{options}->{python} . '\Libs\python24.lib'); $solution->{options}->{python} =~ /\\Python(\d{2})/i || croak "Could not determine python version from path";
$plpython->AddLibrary($solution->{options}->{python} . "\\Libs\\python$1.lib");
$plpython->AddReference($postgres); $plpython->AddReference($postgres);
} }
...@@ -125,6 +124,8 @@ my $pgreset = AddSimpleFrontend('pg_resetxlog'); ...@@ -125,6 +124,8 @@ my $pgreset = AddSimpleFrontend('pg_resetxlog');
my $pgevent = $solution->AddProject('pgevent','dll','bin'); my $pgevent = $solution->AddProject('pgevent','dll','bin');
$pgevent->AddFiles('src\bin\pgevent','pgevent.c','pgmsgevent.rc'); $pgevent->AddFiles('src\bin\pgevent','pgevent.c','pgmsgevent.rc');
$pgevent->AddResourceFile('src\bin\pgevent','Eventlog message formatter');
$pgevent->RemoveFile('src\bin\pgevent\win32ver.rc');
$pgevent->UseDef('src\bin\pgevent\pgevent.def'); $pgevent->UseDef('src\bin\pgevent\pgevent.def');
my $psql = AddSimpleFrontend('psql', 1); my $psql = AddSimpleFrontend('psql', 1);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment