mirror of
https://github.com/postgres/postgres.git
synced 2025-04-24 10:47:04 +03:00
Various MSVC build fixes from Magnus; also remove stray Windows
newlines.
This commit is contained in:
parent
fa5d08fbf8
commit
c2c0b14086
@ -286,7 +286,7 @@ EOF
|
|||||||
my $of = $f;
|
my $of = $f;
|
||||||
$of =~ s/\.y$/.c/;
|
$of =~ s/\.y$/.c/;
|
||||||
$of =~ s{^src\\pl\\plpgsql\\src\\gram.c$}{src\\pl\\plpgsql\\src\\pl_gram.c};
|
$of =~ s{^src\\pl\\plpgsql\\src\\gram.c$}{src\\pl\\plpgsql\\src\\pl_gram.c};
|
||||||
print F '>' . GenerateCustomTool('Running bison on ' . $f, 'src\tools\msvc\pgbison.bat ' . $f, $of) . '</File>' . "\n";
|
print F '>' . GenerateCustomTool('Running bison on ' . $f, 'cmd /V:ON /c src\tools\msvc\pgbison.bat ' . $f, $of) . '</File>' . "\n";
|
||||||
}
|
}
|
||||||
elsif ($f =~ /\.l$/) {
|
elsif ($f =~ /\.l$/) {
|
||||||
my $of = $f;
|
my $of = $f;
|
||||||
@ -358,7 +358,7 @@ sub WriteConfiguration
|
|||||||
ConfigurationType="$cfgtype" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="FALSE" CharacterSet="2" WholeProgramOptimization="$p->{wholeopt}">
|
ConfigurationType="$cfgtype" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="FALSE" CharacterSet="2" WholeProgramOptimization="$p->{wholeopt}">
|
||||||
<Tool Name="VCCLCompilerTool" Optimization="$p->{opt}"
|
<Tool Name="VCCLCompilerTool" Optimization="$p->{opt}"
|
||||||
AdditionalIncludeDirectories="src/include;src/include/port/win32;src/include/port/win32_msvc;$self->{solution}->{options}->{pthread};$self->{includes}"
|
AdditionalIncludeDirectories="src/include;src/include/port/win32;src/include/port/win32_msvc;$self->{solution}->{options}->{pthread};$self->{includes}"
|
||||||
PreprocessorDefinitions="WIN32;_WINDOWS;__WINDOWS__;__WIN32__;EXEC_BACKEND;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE$self->{defines}$p->{defs}"
|
PreprocessorDefinitions="WIN32;_WINDOWS;__WINDOWS__;__WIN32__;EXEC_BACKEND;WIN32_STACK_RLIMIT=4194304;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE$self->{defines}$p->{defs}"
|
||||||
StringPooling="$p->{strpool}"
|
StringPooling="$p->{strpool}"
|
||||||
RuntimeLibrary="$p->{runtime}" DisableSpecificWarnings="$self->{disablewarnings}"
|
RuntimeLibrary="$p->{runtime}" DisableSpecificWarnings="$self->{disablewarnings}"
|
||||||
EOF
|
EOF
|
||||||
@ -407,4 +407,19 @@ EOF
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Utility function that loads a complete file
|
||||||
|
sub read_file {
|
||||||
|
my $filename = shift;
|
||||||
|
my $F;
|
||||||
|
my $t = $/;
|
||||||
|
|
||||||
|
undef $/;
|
||||||
|
open($F, $filename) || croak "Could not open file $filename\n";
|
||||||
|
my $txt = <$F>;
|
||||||
|
close($F);
|
||||||
|
$/ = $t;
|
||||||
|
|
||||||
|
return $txt;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -11,7 +11,10 @@ our $config = {
|
|||||||
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
|
||||||
openssl=>'c:\openssl', # --with-ssl=<path>
|
openssl=>'c:\openssl', # --with-ssl=<path>
|
||||||
pthread=>'c:\prog\pgsql\depend\pthread', # foo baz?
|
pthread=>'c:\prog\pgsql\depend\pthread',
|
||||||
|
xml=>'c:\prog\pgsql\depend\libxml2',
|
||||||
|
xslt=>'c:\prog\pgsql\depend\libxslt',
|
||||||
|
iconv=>'c:\prog\pgsql\depend\iconv',
|
||||||
zlib=>'c:\prog\pgsql\depend\zlib'# --with-zlib=<path>
|
zlib=>'c:\prog\pgsql\depend\zlib'# --with-zlib=<path>
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -144,16 +144,73 @@ my $pgrestore = AddSimpleFrontend('pg_dump', 1);
|
|||||||
$pgrestore->{name} = 'pg_restore';
|
$pgrestore->{name} = 'pg_restore';
|
||||||
$pgrestore->AddFile('src\bin\pg_dump\pg_restore.c');
|
$pgrestore->AddFile('src\bin\pg_dump\pg_restore.c');
|
||||||
|
|
||||||
open(MF,'src\backend\utils\mb\conversion_procs\Makefile') || die 'Could not open src\backend\utils\mb\conversion_procs\Makefile';
|
my $zic = $solution->AddProject('zic','exe','utils');
|
||||||
my $t = $/;undef $/;
|
$zic->AddFiles('src\timezone','zic.c','ialloc.c','scheck.c','localtime.c');
|
||||||
my $mf = <MF>;
|
$zic->AddReference($libpgport);
|
||||||
close(MF);
|
|
||||||
|
my $contrib_defines = {
|
||||||
|
'refint' => 'REFINT_VERBOSE'
|
||||||
|
};
|
||||||
|
my @contrib_uselibpq = ('dblink', 'oid2name', 'pgbench', 'vacuumlo');
|
||||||
|
my @contrib_uselibpgport = ('oid2name', 'pgbench', 'vacuumlo');
|
||||||
|
my $contrib_extralibs = {
|
||||||
|
'pgbench' => ['wsock32.lib']
|
||||||
|
};
|
||||||
|
my $contrib_extraincludes = {
|
||||||
|
'tsearch2' => ['contrib/tsearch2']
|
||||||
|
};
|
||||||
|
my $contrib_extrasource = {
|
||||||
|
'cube' => ['cubescan.l','cubeparse.y'],
|
||||||
|
'seg' => ['segscan.l','segparse.y']
|
||||||
|
};
|
||||||
|
|
||||||
|
my @contrib_excludes = ('pgcrypto');
|
||||||
|
|
||||||
|
if ($solution->{options}->{xml}) {
|
||||||
|
$contrib_extraincludes->{'xml2'} = [$solution->{options}->{xml} . '\include' ,
|
||||||
|
$solution->{options}->{xslt} . '\include',
|
||||||
|
$solution->{options}->{iconv} . '\include'];
|
||||||
|
|
||||||
|
$contrib_extralibs->{'xml2'} = [$solution->{options}->{xml} . '\lib\libxml2.lib',
|
||||||
|
$solution->{options}->{xslt} . '\lib\libxslt.lib'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
push @contrib_excludes,'xml2';
|
||||||
|
}
|
||||||
|
|
||||||
|
# Pgcrypto makefile too complex to parse....
|
||||||
|
my $pgcrypto = $solution->AddProject('pgcrypto','dll','crypto');
|
||||||
|
$pgcrypto->AddFiles('contrib\pgcrypto','pgcrypto.c','px.c','px-hmac.c','px-crypt.c',
|
||||||
|
'crypt-gensalt.c','crypt-blowfish.c','crypt-des.c','crypt-md5.c','mbuf.c',
|
||||||
|
'pgp.c','pgp-armor.c','pgp-cfb.c','pgp-compress.c','pgp-decrypt.c','pgp-encrypt.c',
|
||||||
|
'pgp-info.c','pgp-mpi.c','pgp-pubdec.c','pgp-pubenc.c','pgp-pubkey.c','pgp-s2k.c',
|
||||||
|
'pgp-pgsql.c');
|
||||||
|
if ($solution->{options}->{openssl}) {
|
||||||
|
$pgcrypto->AddFiles('contrib\pgcrypto', 'openssl.c','pgp-mpi-openssl.c');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$pgcrypto->AddFiles('contrib\pgcrypto', 'md5.c','sha1.c','sha2.c','internal.c','internal-sha2.c',
|
||||||
|
'blf.c','rijndael.c','fortuna.c','random.c','pgp-mpi-internal.c','imath.c');
|
||||||
|
}
|
||||||
|
$pgcrypto->AddReference($postgres);
|
||||||
|
$pgcrypto->AddLibrary('wsock32.lib');
|
||||||
|
|
||||||
|
my $D;
|
||||||
|
opendir($D, 'contrib') || croak "Could not opendir on contrib!\n";
|
||||||
|
while (my $d = readdir($D)) {
|
||||||
|
next if ($d =~ /^\./);
|
||||||
|
next unless (-f "contrib/$d/Makefile");
|
||||||
|
next if (grep {/^$d$/} @contrib_excludes);
|
||||||
|
AddContrib($d);
|
||||||
|
}
|
||||||
|
closedir($D);
|
||||||
|
|
||||||
|
|
||||||
|
my $mf = Project::read_file('src\backend\utils\mb\conversion_procs\Makefile');
|
||||||
$mf =~ s{\\s*[\r\n]+}{}mg;
|
$mf =~ s{\\s*[\r\n]+}{}mg;
|
||||||
$mf =~ m{DIRS\s*=\s*(.*)$}m || die 'Could not match in conversion makefile' . "\n";
|
$mf =~ m{DIRS\s*=\s*(.*)$}m || die 'Could not match in conversion makefile' . "\n";
|
||||||
foreach my $sub (split /\s+/,$1) {
|
foreach my $sub (split /\s+/,$1) {
|
||||||
open(MF,'src\backend\utils\mb\conversion_procs\\' . $sub . '\Makefile') || die 'Could not open Makefile for $sub';
|
my $mf = Project::read_file('src\backend\utils\mb\conversion_procs\\' . $sub . '\Makefile');
|
||||||
$mf = <MF>;
|
|
||||||
close(MF);
|
|
||||||
my $p = $solution->AddProject($sub, 'dll', 'conversion procs');
|
my $p = $solution->AddProject($sub, 'dll', 'conversion procs');
|
||||||
$p->AddFile('src\backend\utils\mb\conversion_procs\\' . $sub . '\\' . $sub . '.c');
|
$p->AddFile('src\backend\utils\mb\conversion_procs\\' . $sub . '\\' . $sub . '.c');
|
||||||
if ($mf =~ m{^SRCS\s*\+=\s*(.*)$}m) {
|
if ($mf =~ m{^SRCS\s*\+=\s*(.*)$}m) {
|
||||||
@ -162,9 +219,7 @@ foreach my $sub (split /\s+/,$1) {
|
|||||||
$p->AddReference($postgres);
|
$p->AddReference($postgres);
|
||||||
}
|
}
|
||||||
|
|
||||||
open(MF,'src\bin\scripts\Makefile') || die 'Could not open src\bin\scripts\Makefile';
|
$mf = Project::read_file('src\bin\scripts\Makefile');
|
||||||
$mf = <MF>;
|
|
||||||
close(MF);
|
|
||||||
$mf =~ s{\\s*[\r\n]+}{}mg;
|
$mf =~ s{\\s*[\r\n]+}{}mg;
|
||||||
$mf =~ m{PROGRAMS\s*=\s*(.*)$}m || die 'Could not match in bin\scripts\Makefile' . "\n";
|
$mf =~ m{PROGRAMS\s*=\s*(.*)$}m || die 'Could not match in bin\scripts\Makefile' . "\n";
|
||||||
foreach my $prg (split /\s+/,$1) {
|
foreach my $prg (split /\s+/,$1) {
|
||||||
@ -194,7 +249,6 @@ foreach my $prg (split /\s+/,$1) {
|
|||||||
$proj->AddReference($libpq,$libpgport);
|
$proj->AddReference($libpq,$libpgport);
|
||||||
$proj->AddResourceFile('src\bin\scripts','PostgreSQL Utility');
|
$proj->AddResourceFile('src\bin\scripts','PostgreSQL Utility');
|
||||||
}
|
}
|
||||||
$/ = $t;
|
|
||||||
|
|
||||||
|
|
||||||
# Regression DLLs
|
# Regression DLLs
|
||||||
@ -202,16 +256,6 @@ my $regress = $solution->AddProject('regress','dll','misc');
|
|||||||
$regress->AddFile('src\test\regress\regress.c');
|
$regress->AddFile('src\test\regress\regress.c');
|
||||||
$regress->AddReference($postgres);
|
$regress->AddReference($postgres);
|
||||||
|
|
||||||
my $refint = $solution->AddProject('refint','dll','contrib');
|
|
||||||
$refint->AddFile('contrib\spi\refint.c');
|
|
||||||
$refint->AddReference($postgres);
|
|
||||||
$refint->AddDefine('REFINT_VERBOSE');
|
|
||||||
|
|
||||||
my $autoinc = $solution->AddProject('autoinc','dll','contrib');
|
|
||||||
$autoinc ->AddFile('contrib\spi\autoinc.c');
|
|
||||||
$autoinc->AddReference($postgres);
|
|
||||||
|
|
||||||
|
|
||||||
$solution->Save();
|
$solution->Save();
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
@ -234,3 +278,86 @@ sub AddSimpleFrontend {
|
|||||||
return $p;
|
return $p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Add a simple contrib project
|
||||||
|
sub AddContrib {
|
||||||
|
my $n = shift;
|
||||||
|
my $mf = Project::read_file('contrib\\' . $n . '\Makefile');
|
||||||
|
|
||||||
|
if ($mf =~ /^MODULE_big/mg) {
|
||||||
|
$mf =~ s{\\\s*[\r\n]+}{}mg;
|
||||||
|
my $proj = $solution->AddProject($n, 'dll', 'contrib');
|
||||||
|
$mf =~ /^OBJS\s*=\s*(.*)$/gm || croak "Could not find objects in MODULE_big for $n\n";
|
||||||
|
foreach my $o (split /\s+/, $1) {
|
||||||
|
$o =~ s/\.o$/.c/;
|
||||||
|
$proj->AddFile('contrib\\' . $n . '\\' . $o);
|
||||||
|
}
|
||||||
|
$proj->AddReference($postgres);
|
||||||
|
if ($mf =~ /^SUBDIRS\s*:?=\s*(.*)$/mg) {
|
||||||
|
foreach my $d (split /\s+/, $1) {
|
||||||
|
my $mf2 = Project::read_file('contrib\\' . $n . '\\' . $d . '\Makefile');
|
||||||
|
$mf2 =~ s{\\\s*[\r\n]+}{}mg;
|
||||||
|
$mf2 =~ /^SUBOBJS\s*=\s*(.*)$/gm || croak "Could not find objects in MODULE_big for $n, subdir $d\n";
|
||||||
|
foreach my $o (split /\s+/, $1) {
|
||||||
|
$o =~ s/\.o$/.c/;
|
||||||
|
$proj->AddFile('contrib\\' . $n . '\\' . $d . '\\' . $o);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
AdjustContribProj($proj);
|
||||||
|
return $proj;
|
||||||
|
}
|
||||||
|
elsif ($mf =~ /^MODULES\s*=\s*(.*)$/mg) {
|
||||||
|
foreach my $mod (split /\s+/, $1) {
|
||||||
|
my $proj = $solution->AddProject($mod, 'dll', 'contrib');
|
||||||
|
$proj->AddFile('contrib\\' . $n . '\\' . $mod . '.c');
|
||||||
|
$proj->AddReference($postgres);
|
||||||
|
AdjustContribProj($proj);
|
||||||
|
}
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
elsif ($mf =~ /^PROGRAM\s*=\s*(.*)$/mg) {
|
||||||
|
my $proj = $solution->AddProject($1, 'exe', 'contrib');
|
||||||
|
$mf =~ /^OBJS\s*=\s*(.*)$/gm || croak "Could not find objects in MODULE_big for $n\n";
|
||||||
|
foreach my $o (split /\s+/, $1) {
|
||||||
|
$o =~ s/\.o$/.c/;
|
||||||
|
$proj->AddFile('contrib\\' . $n . '\\' . $o);
|
||||||
|
}
|
||||||
|
AdjustContribProj($proj);
|
||||||
|
return $proj;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
croak "Could not determine contrib module type for $n\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub AdjustContribProj {
|
||||||
|
my $proj = shift;
|
||||||
|
my $n = $proj->{name};
|
||||||
|
|
||||||
|
if ($contrib_defines->{$n}) {
|
||||||
|
foreach my $d ($contrib_defines->{$n}) {
|
||||||
|
$proj->AddDefine($d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (grep {/^$n$/} @contrib_uselibpq) {
|
||||||
|
$proj->AddIncludeDir('src\interfaces\libpq');
|
||||||
|
$proj->AddReference($libpq);
|
||||||
|
}
|
||||||
|
if (grep {/^$n$/} @contrib_uselibpgport) {
|
||||||
|
$proj->AddReference($libpgport);
|
||||||
|
}
|
||||||
|
if ($contrib_extralibs->{$n}) {
|
||||||
|
foreach my $l (@{$contrib_extralibs->{$n}}) {
|
||||||
|
$proj->AddLibrary($l);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($contrib_extraincludes->{$n}) {
|
||||||
|
foreach my $i (@{$contrib_extraincludes->{$n}}) {
|
||||||
|
$proj->AddIncludeDir($i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($contrib_extrasource->{$n}) {
|
||||||
|
$proj->AddFiles('contrib\\' . $n, @{$contrib_extrasource->{$n}});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,11 +1,16 @@
|
|||||||
@echo off
|
@echo off
|
||||||
bison -V > NUL
|
SET BV=
|
||||||
if errorlevel 1 goto nobison
|
for /F "tokens=4 usebackq" %%f in (`bison -V`) do if "!BV!"=="" SET BV=%%f
|
||||||
|
if "%BV%"=="" goto novarexp
|
||||||
|
if %BV% LSS 1.875 goto nobison
|
||||||
|
if %BV% EQU 2.1 goto nobison
|
||||||
|
|
||||||
if "%1" == "src\backend\parser\gram.y" call :generate %1 src\backend\parser\gram.c src\include\parser\parse.h
|
if "%1" == "src\backend\parser\gram.y" call :generate %1 src\backend\parser\gram.c src\include\parser\parse.h
|
||||||
if "%1" == "src\backend\bootstrap\bootparse.y" call :generate %1 src\backend\bootstrap\bootparse.c src\backend\bootstrap\bootstrap_tokens.h
|
if "%1" == "src\backend\bootstrap\bootparse.y" call :generate %1 src\backend\bootstrap\bootparse.c src\backend\bootstrap\bootstrap_tokens.h
|
||||||
if "%1" == "src\pl\plpgsql\src\gram.y" call :generate %1 src\pl\plpgsql\src\pl_gram.c src\pl\plpgsql\src\pl.tab.h
|
if "%1" == "src\pl\plpgsql\src\gram.y" call :generate %1 src\pl\plpgsql\src\pl_gram.c src\pl\plpgsql\src\pl.tab.h
|
||||||
if "%1" == "src\interfaces\ecpg\preproc\preproc.y" call :generate %1 src\interfaces\ecpg\preproc\preproc.c src\interfaces\ecpg\preproc\preproc.h
|
if "%1" == "src\interfaces\ecpg\preproc\preproc.y" call :generate %1 src\interfaces\ecpg\preproc\preproc.c src\interfaces\ecpg\preproc\preproc.h
|
||||||
|
if "%1" == "contrib\cube\cubeparse.y" call :generate %1 contrib\cube\cubeparse.c contrib\cube\cubeparse.h
|
||||||
|
if "%1" == "contrib\seg\segparse.y" call :generate %1 contrib\seg\segparse.c contrib\seg\segparse.h
|
||||||
|
|
||||||
echo Unknown bison input: %1
|
echo Unknown bison input: %1
|
||||||
exit 1
|
exit 1
|
||||||
@ -22,6 +27,11 @@ del %fn:~0,-2%.tab.*
|
|||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
|
|
||||||
|
:novarexp
|
||||||
|
echo pgbison must be called with cmd /V:ON /C pgbison to work!
|
||||||
|
exit 1
|
||||||
|
|
||||||
:nobison
|
:nobison
|
||||||
echo WARNING! Bison install not found, attempting to build without!
|
echo WARNING! Bison install not found, or unsupported Bison version.
|
||||||
|
echo Attempting to build without.
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -8,6 +8,8 @@ if "%1" == "src\backend\utils\misc\guc-file.l" call :generate %1 src\backend\uti
|
|||||||
if "%1" == "src\pl\plpgsql\src\scan.l" call :generate %1 src\pl\plpgsql\src\pl_scan.c
|
if "%1" == "src\pl\plpgsql\src\scan.l" call :generate %1 src\pl\plpgsql\src\pl_scan.c
|
||||||
if "%1" == "src\interfaces\ecpg\preproc\pgc.l" call :generate %1 src\interfaces\ecpg\preproc\pgc.c
|
if "%1" == "src\interfaces\ecpg\preproc\pgc.l" call :generate %1 src\interfaces\ecpg\preproc\pgc.c
|
||||||
if "%1" == "src\bin\psql\psqlscan.l" call :generate %1 src\bin\psql\psqlscan.c
|
if "%1" == "src\bin\psql\psqlscan.l" call :generate %1 src\bin\psql\psqlscan.c
|
||||||
|
if "%1" == "contrib\cube\cubescan.l" call :generate %1 contrib\cube\cubescan.c
|
||||||
|
if "%1" == "contrib\seg\segscan.l" call :generate %1 contrib\seg\segscan.c
|
||||||
|
|
||||||
echo Unknown flex input: %1
|
echo Unknown flex input: %1
|
||||||
exit 1
|
exit 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user