+ system("dumpbin /symbols /out:symbols.out $_ >NUL") && die "Could not call dumpbin";
chdir("../../..") if (-f "../../../configure");
my $conf = "";
-if (-d "debug") {
- $conf = "debug";
+if (-d "debug")
+{
+ $conf = "debug";
}
-if (-d "release") {
- $conf = "release";
+if (-d "release")
+{
+ $conf = "release";
}
die "Could not find debug or release binaries" if ($conf eq "");
print "Installing for $conf\n";
-EnsureDirectories ('bin','lib','share','share/timezonesets');
+EnsureDirectories('bin','lib','share','share/timezonesets');
CopySolutionOutput($conf, $target);
copy($target . '/lib/libpq.dll', $target . '/bin/libpq.dll');
CopySetOfFiles('config files', "*.sample", $target . '/share/');
CopySetOfFiles('timezone names', 'src\timezone\tznames\*.txt', $target . '/share/timezonesets/');
-CopyFiles('timezone sets', $target . '/share/timezonesets/', 'src/timezone/tznames/', 'Default','Australia','India');
+CopyFiles(
+ 'timezone sets',
+ $target . '/share/timezonesets/',
+ 'src/timezone/tznames/', 'Default','Australia','India'
+);
CopySetOfFiles('BKI files', "src\\backend\\catalog\\postgres.*", $target .'/share/');
CopySetOfFiles('SQL files', "src\\backend\\catalog\\*.sql", $target . '/share/');
-CopyFiles('Information schema data', $target . '/share/', 'src/backend/catalog/', 'sql_features.txt');
+CopyFiles(
+ 'Information schema data',
+ $target . '/share/',
+ 'src/backend/catalog/', 'sql_features.txt'
+);
GenerateConversionScript();
GenerateTimezoneFiles();
-sub Usage {
- print "Usage: install.pl \n";
- exit(1);
+sub Usage
+{
+ print "Usage: install.pl \n";
+ exit(1);
}
-sub EnsureDirectories {
- mkdir $target unless -d ($target);
- while (my $d = shift) {
- mkdir $target . '/' . $d unless -d ($target . '/' . $d);
- }
+sub EnsureDirectories
+{
+ mkdir $target unless -d ($target);
+ while (my $d = shift)
+ {
+ mkdir $target . '/' . $d unless -d ($target . '/' . $d);
+ }
}
-sub CopyFiles {
- my $what = shift;
- my $target = shift;
- my $basedir = shift;
-
- print "Copying $what";
- while (my $f = shift) {
- print ".";
- $f = $basedir . $f;
- die "No file $f\n" if (! -f $f);
- copy($f, $target . basename($f)) || croak "Could not copy $f to $target" . basename($f) . " to $target" . basename($f) . "\n";
- }
- print "\n";
+sub CopyFiles
+{
+ my $what = shift;
+ my $target = shift;
+ my $basedir = shift;
+
+ print "Copying $what";
+ while (my $f = shift)
+ {
+ print ".";
+ $f = $basedir . $f;
+ die "No file $f\n" if (!-f $f);
+ copy($f, $target . basename($f))
+ || croak "Could not copy $f to $target"
+ . basename($f)
+ . " to $target"
+ . basename($f) . "\n";
+ }
+ print "\n";
}
-sub CopySetOfFiles {
- my $what = shift;
- my $spec = shift;
- my $target = shift;
- my $D;
-
- print "Copying $what";
- open($D, "dir /b /s $spec |") || croak "Could not list $spec\n";
- while (<$D>) {
- chomp;
- next if /regress/; # Skip temporary install in regression subdir
- my $tgt = $target . basename($_);
- print ".";
- copy($_, $tgt) || croak "Could not copy $_: $!\n";
- }
- close($D);
- print "\n";
+sub CopySetOfFiles
+{
+ my $what = shift;
+ my $spec = shift;
+ my $target = shift;
+ my $D;
+
+ print "Copying $what";
+ open($D, "dir /b /s $spec |") || croak "Could not list $spec\n";
+ while (<$D>)
+ {
+ chomp;
+ next if /regress/; # Skip temporary install in regression subdir
+ my $tgt = $target . basename($_);
+ print ".";
+ copy($_, $tgt) || croak "Could not copy $_: $!\n";
+ }
+ close($D);
+ print "\n";
}
-sub CopySolutionOutput {
- my $conf = shift;
- my $target = shift;
- my $rem = qr{Project\("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"\) = "([^"]+)"};
-
- my $sln = read_file("pgsql.sln") || croak "Could not open pgsql.sln\n";
- print "Copying build output files...";
- while ($sln =~ $rem) {
- my $pf = $1;
- my $dir;
- my $ext;
-
- $sln =~ s/$rem//;
-
- my $proj = read_file("$pf.vcproj") || croak "Could not open $pf.vcproj\n";
- if ($proj !~ qr{ConfigurationType="([^"]+)"}) {
- croak "Could not parse $pf.vcproj\n";
- }
- if ($1 == 1) {
- $dir = "bin";
- $ext = "exe";
- }
- elsif ($1 == 2) {
- $dir = "lib";
- $ext = "dll";
- }
- else {
- # Static lib, such as libpgport, only used internally during build, don't install
- next;
- }
- copy("$conf\\$pf\\$pf.$ext","$target\\$dir\\$pf.$ext") || croak "Could not copy $pf.$ext\n";
- print ".";
- }
- print "\n";
+sub CopySolutionOutput
+{
+ my $conf = shift;
+ my $target = shift;
+ my $rem = qr{Project\("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"\) = "([^"]+)"};
+
+ my $sln = read_file("pgsql.sln") || croak "Could not open pgsql.sln\n";
+ print "Copying build output files...";
+ while ($sln =~ $rem)
+ {
+ my $pf = $1;
+ my $dir;
+ my $ext;
+
+ $sln =~ s/$rem//;
+
+ my $proj = read_file("$pf.vcproj") || croak "Could not open $pf.vcproj\n";
+ if ($proj !~ qr{ConfigurationType="([^"]+)"})
+ {
+ croak "Could not parse $pf.vcproj\n";
+ }
+ if ($1 == 1)
+ {
+ $dir = "bin";
+ $ext = "exe";
+ }
+ elsif ($1 == 2)
+ {
+ $dir = "lib";
+ $ext = "dll";
+ }
+ else
+ {
+
+ # Static lib, such as libpgport, only used internally during build, don't install
+ next;
+ }
+ copy("$conf\\$pf\\$pf.$ext","$target\\$dir\\$pf.$ext") || croak "Could not copy $pf.$ext\n";
+ print ".";
+ }
+ print "\n";
}
-sub GenerateConversionScript {
- my $sql = "";
- my $F;
-
- print "Generating conversion proc script...";
- my $mf = read_file('src/backend/utils/mb/conversion_procs/Makefile');
- $mf =~ s{\\\s*[\r\n]+}{}mg;
- $mf =~ /^CONVERSIONS\s*=\s*(.*)$/m || die "Could not find CONVERSIONS line in conversions Makefile\n";
- my @pieces = split /\s+/,$1;
- while ($#pieces > 0) {
- my $name = shift @pieces;
- my $se = shift @pieces;
- my $de = shift @pieces;
- my $func = shift @pieces;
- my $obj = shift @pieces;
- $sql .= "-- $se --> $de\n";
- $sql .= "CREATE OR REPLACE FUNCTION $func (INTEGER, INTEGER, CSTRING, INTERNAL, INTEGER) RETURNS VOID AS '\$libdir/$obj', '$func' LANGUAGE C STRICT;\n";
- $sql .= "DROP CONVERSION pg_catalog.$name;\n";
- $sql .= "CREATE DEFAULT CONVERSION pg_catalog.$name FOR '$se' TO '$de' FROM $func;\n";
- }
- open($F,">$target/share/conversion_create.sql") || die "Could not write to conversion_create.sql\n";
- print $F $sql;
- close($F);
- print "\n";
+sub GenerateConversionScript
+{
+ my $sql = "";
+ my $F;
+
+ print "Generating conversion proc script...";
+ my $mf = read_file('src/backend/utils/mb/conversion_procs/Makefile');
+ $mf =~ s{\\\s*[\r\n]+}{}mg;
+ $mf =~ /^CONVERSIONS\s*=\s*(.*)$/m
+ || die "Could not find CONVERSIONS line in conversions Makefile\n";
+ my @pieces = split /\s+/,$1;
+ while ($#pieces > 0)
+ {
+ my $name = shift @pieces;
+ my $se = shift @pieces;
+ my $de = shift @pieces;
+ my $func = shift @pieces;
+ my $obj = shift @pieces;
+ $sql .= "-- $se --> $de\n";
+ $sql .=
+"CREATE OR REPLACE FUNCTION $func (INTEGER, INTEGER, CSTRING, INTERNAL, INTEGER) RETURNS VOID AS '\$libdir/$obj', '$func' LANGUAGE C STRICT;\n";
+ $sql .= "DROP CONVERSION pg_catalog.$name;\n";
+ $sql .= "CREATE DEFAULT CONVERSION pg_catalog.$name FOR '$se' TO '$de' FROM $func;\n";
+ }
+ open($F,">$target/share/conversion_create.sql")
+ || die "Could not write to conversion_create.sql\n";
+ print $F $sql;
+ close($F);
+ print "\n";
}
-sub GenerateTimezoneFiles {
- my $mf = read_file("src/timezone/Makefile");
- $mf =~ s{\\\s*[\r\n]+}{}mg;
- $mf =~ /^TZDATA\s*:?=\s*(.*)$/m || die "Could not find TZDATA row in timezone makefile\n";
- my @tzfiles = split /\s+/,$1;
- unshift @tzfiles,'';
- print "Generating timezone files...";
- system("$conf\\zic\\zic -d $target/share/timezone " . join(" src/timezone/data/", @tzfiles));
- print "\n";
+sub GenerateTimezoneFiles
+{
+ my $mf = read_file("src/timezone/Makefile");
+ $mf =~ s{\\\s*[\r\n]+}{}mg;
+ $mf =~ /^TZDATA\s*:?=\s*(.*)$/m || die "Could not find TZDATA row in timezone makefile\n";
+ my @tzfiles = split /\s+/,$1;
+ unshift @tzfiles,'';
+ print "Generating timezone files...";
+ system("$conf\\zic\\zic -d $target/share/timezone " . join(" src/timezone/data/", @tzfiles));
+ print "\n";
}
+sub read_file
+{
+ my $filename = shift;
+ my $F;
+ my $t = $/;
-sub read_file {
- my $filename = shift;
- my $F;
- my $t = $/;
+ undef $/;
+ open($F, $filename) || die "Could not open file $filename\n";
+ my $txt = <$F>;
+ close($F);
+ $/ = $t;
- undef $/;
- open($F, $filename) || die "Could not open file $filename\n";
- my $txt = <$F>;
- close($F);
- $/ = $t;
-
- return $txt;
+ return $txt;
}
my $solution = new Solution($config);
our @pgportfiles = qw(
- crypt.c fseeko.c getrusage.c inet_aton.c random.c srandom.c
- unsetenv.c getaddrinfo.c gettimeofday.c kill.c open.c rand.c
- snprintf.c strlcat.c strlcpy.c copydir.c dirmod.c exec.c noblock.c path.c pipe.c
- pgsleep.c pgstrcasecmp.c qsort.c qsort_arg.c sprompt.c thread.c
- getopt.c getopt_long.c dirent.c rint.c win32error.c);
+ crypt.c fseeko.c getrusage.c inet_aton.c random.c srandom.c
+ unsetenv.c getaddrinfo.c gettimeofday.c kill.c open.c rand.c
+ snprintf.c strlcat.c strlcpy.c copydir.c dirmod.c exec.c noblock.c path.c pipe.c
+ pgsleep.c pgstrcasecmp.c qsort.c qsort_arg.c sprompt.c thread.c
+ getopt.c getopt_long.c dirent.c rint.c win32error.c);
my $libpgport = $solution->AddProject('libpgport','lib','misc');
$libpgport->AddDefine('FRONTEND');
$plpgsql->AddFiles('src\pl\plpgsql\src','scan.l','gram.y');
$plpgsql->AddReference($postgres);
-if ($solution->{options}->{perl}) {
- my $plperl = $solution->AddProject('plperl','dll','PLs','src\pl\plperl');
- $plperl->AddIncludeDir($solution->{options}->{perl} . '/lib/CORE');
- $plperl->AddDefine('PLPERL_HAVE_UID_GID');
- if (Solution::IsNewer('src\pl\plperl\SPI.c','src\pl\plperl\SPI.xs')) {
- print 'Building src\pl\plperl\SPI.c...' . "\n";
- system($solution->{options}->{perl} . '/bin/perl ' . $solution->{options}->{perl} . '/lib/ExtUtils/xsubpp -typemap ' . $solution->{options}->{perl} . '/lib/ExtUtils/typemap src\pl\plperl\SPI.xs >src\pl\plperl\SPI.c');
- if ((!(-f 'src\pl\plperl\SPI.c')) || -z 'src\pl\plperl\SPI.c') {
- unlink('src\pl\plperl\SPI.c'); # if zero size
- die 'Failed to create SPI.c' . "\n";
- }
- }
- $plperl->AddReference($postgres);
- $plperl->AddLibrary($solution->{options}->{perl} . '\lib\CORE\perl58.lib');
+if ($solution->{options}->{perl})
+{
+ my $plperl = $solution->AddProject('plperl','dll','PLs','src\pl\plperl');
+ $plperl->AddIncludeDir($solution->{options}->{perl} . '/lib/CORE');
+ $plperl->AddDefine('PLPERL_HAVE_UID_GID');
+ if (Solution::IsNewer('src\pl\plperl\SPI.c','src\pl\plperl\SPI.xs'))
+ {
+ print 'Building src\pl\plperl\SPI.c...' . "\n";
+ system( $solution->{options}->{perl}
+ . '/bin/perl '
+ . $solution->{options}->{perl}
+ . '/lib/ExtUtils/xsubpp -typemap '
+ . $solution->{options}->{perl}
+ . '/lib/ExtUtils/typemap src\pl\plperl\SPI.xs >src\pl\plperl\SPI.c');
+ if ((!(-f 'src\pl\plperl\SPI.c')) || -z 'src\pl\plperl\SPI.c')
+ {
+ unlink('src\pl\plperl\SPI.c'); # if zero size
+ die 'Failed to create SPI.c' . "\n";
+ }
+ }
+ $plperl->AddReference($postgres);
+ $plperl->AddLibrary($solution->{options}->{perl} . '\lib\CORE\perl58.lib');
}
-if ($solution->{options}->{python}) {
- my $plpython = $solution->AddProject('plpython','dll','PLs','src\pl\plpython');
- $plpython->AddIncludeDir($solution->{options}->{python} . '\include');
- $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);
+if ($solution->{options}->{python})
+{
+ my $plpython = $solution->AddProject('plpython','dll','PLs','src\pl\plpython');
+ $plpython->AddIncludeDir($solution->{options}->{python} . '\include');
+ $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);
}
-if ($solution->{options}->{tcl}) {
- my $pltcl = $solution->AddProject('pltcl','dll','PLs','src\pl\tcl');
- $pltcl->AddIncludeDir($solution->{options}->{tcl} . '\include');
- $pltcl->AddReference($postgres);
- $pltcl->AddLibrary($solution->{options}->{tcl} . '\lib\tcl84.lib');
+if ($solution->{options}->{tcl})
+{
+ my $pltcl = $solution->AddProject('pltcl','dll','PLs','src\pl\tcl');
+ $pltcl->AddIncludeDir($solution->{options}->{tcl} . '\include');
+ $pltcl->AddReference($postgres);
+ $pltcl->AddLibrary($solution->{options}->{tcl} . '\lib\tcl84.lib');
}
my $libpq = $solution->AddProject('libpq','dll','interfaces','src\interfaces\libpq');
$libpq->UseDef('src\interfaces\libpq\libpqdll.def');
$libpq->ReplaceFile('src\interfaces\libpq\libpqrc.c','src\interfaces\libpq\libpq.rc');
-my $pgtypes = $solution->AddProject('libpgtypes','dll','interfaces','src\interfaces\ecpg\pgtypeslib');
+my $pgtypes =
+ $solution->AddProject('libpgtypes','dll','interfaces','src\interfaces\ecpg\pgtypeslib');
$pgtypes->AddDefine('FRONTEND');
$pgtypes->AddReference($postgres,$libpgport);
$pgtypes->AddIncludeDir('src\interfaces\ecpg\include');
-if ($config->{pthread}) {
- my $libecpg = $solution->AddProject('libecpg','dll','interfaces','src\interfaces\ecpg\ecpglib');
- $libecpg->AddDefine('FRONTEND');
- $libecpg->AddIncludeDir('src\interfaces\ecpg\include');
- $libecpg->AddIncludeDir('src\interfaces\libpq');
- $libecpg->AddIncludeDir('src\port');
- $libecpg->AddLibrary('wsock32.lib');
- $libecpg->AddLibrary($config->{'pthread'} . '\pthreadVC2.lib');
- $libecpg->AddReference($libpq,$pgtypes);
-
- my $libecpgcompat = $solution->AddProject('libecpg_compat','dll','interfaces','src\interfaces\ecpg\compatlib');
- $libecpgcompat->AddIncludeDir('src\interfaces\ecpg\include');
- $libecpgcompat->AddIncludeDir('src\interfaces\libpq');
- $libecpgcompat->AddReference($pgtypes,$libecpg);
-
- my $ecpg = $solution->AddProject('ecpg','exe','interfaces','src\interfaces\ecpg\preproc');
- $ecpg->AddIncludeDir('src\interfaces\ecpg\include');
- $ecpg->AddIncludeDir('src\interfaces\libpq');
- $ecpg->AddFiles('src\interfaces\ecpg\preproc','pgc.l','preproc.y');
- $ecpg->AddDefine('MAJOR_VERSION=4');
- $ecpg->AddDefine('MINOR_VERSION=2');
- $ecpg->AddDefine('PATCHLEVEL=1');
- $ecpg->AddReference($libpgport);
+if ($config->{pthread})
+{
+ my $libecpg = $solution->AddProject('libecpg','dll','interfaces','src\interfaces\ecpg\ecpglib');
+ $libecpg->AddDefine('FRONTEND');
+ $libecpg->AddIncludeDir('src\interfaces\ecpg\include');
+ $libecpg->AddIncludeDir('src\interfaces\libpq');
+ $libecpg->AddIncludeDir('src\port');
+ $libecpg->AddLibrary('wsock32.lib');
+ $libecpg->AddLibrary($config->{'pthread'} . '\pthreadVC2.lib');
+ $libecpg->AddReference($libpq,$pgtypes);
+
+ my $libecpgcompat =
+ $solution->AddProject('libecpg_compat','dll','interfaces','src\interfaces\ecpg\compatlib');
+ $libecpgcompat->AddIncludeDir('src\interfaces\ecpg\include');
+ $libecpgcompat->AddIncludeDir('src\interfaces\libpq');
+ $libecpgcompat->AddReference($pgtypes,$libecpg);
+
+ my $ecpg = $solution->AddProject('ecpg','exe','interfaces','src\interfaces\ecpg\preproc');
+ $ecpg->AddIncludeDir('src\interfaces\ecpg\include');
+ $ecpg->AddIncludeDir('src\interfaces\libpq');
+ $ecpg->AddFiles('src\interfaces\ecpg\preproc','pgc.l','preproc.y');
+ $ecpg->AddDefine('MAJOR_VERSION=4');
+ $ecpg->AddDefine('MINOR_VERSION=2');
+ $ecpg->AddDefine('PATCHLEVEL=1');
+ $ecpg->AddReference($libpgport);
+}
+else
+{
+ print "Not building ecpg due to lack of pthreads.\n";
}
-else {
- print "Not building ecpg due to lack of pthreads.\n";
-}
-
# src/bin
my $initdb = AddSimpleFrontend('initdb', 1);
$zic->AddFiles('src\timezone','zic.c','ialloc.c','scheck.c','localtime.c');
$zic->AddReference($libpgport);
-my $contrib_defines = {
- 'refint' => 'REFINT_VERBOSE'
-};
+my $contrib_defines = {'refint' => 'REFINT_VERBOSE'};
my @contrib_uselibpq = ('dblink', 'oid2name', 'pgbench', 'vacuumlo');
my @contrib_uselibpgport = ('oid2name', 'pgbench', 'pg_standby', 'vacuumlo');
-my $contrib_extralibs = {
- 'pgbench' => ['wsock32.lib']
-};
-my $contrib_extraincludes = {
- 'tsearch2' => ['contrib/tsearch2']
-};
+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']
+ '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'];
+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';
+else
+{
+ push @contrib_excludes,'xml2';
}
-if (!$solution->{options}->{openssl}) {
- push @contrib_excludes,'sslinfo';
+if (!$solution->{options}->{openssl})
+{
+ push @contrib_excludes,'sslinfo';
}
# 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');
+$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');
+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);
+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 =~ m{DIRS\s*=\s*(.*)$}m || die 'Could not match in conversion makefile' . "\n";
-foreach my $sub (split /\s+/,$1) {
- my $mf = Project::read_file('src\backend\utils\mb\conversion_procs\\' . $sub . '\Makefile');
- my $p = $solution->AddProject($sub, 'dll', 'conversion procs');
- $p->AddFile('src\backend\utils\mb\conversion_procs\\' . $sub . '\\' . $sub . '.c');
- if ($mf =~ m{^SRCS\s*\+=\s*(.*)$}m) {
- $p->AddFile('src\backend\utils\mb\conversion_procs\\' . $sub . '\\' . $1);
- }
- $p->AddReference($postgres);
+foreach my $sub (split /\s+/,$1)
+{
+ my $mf = Project::read_file('src\backend\utils\mb\conversion_procs\\' . $sub . '\Makefile');
+ my $p = $solution->AddProject($sub, 'dll', 'conversion procs');
+ $p->AddFile('src\backend\utils\mb\conversion_procs\\' . $sub . '\\' . $sub . '.c');
+ if ($mf =~ m{^SRCS\s*\+=\s*(.*)$}m)
+ {
+ $p->AddFile('src\backend\utils\mb\conversion_procs\\' . $sub . '\\' . $1);
+ }
+ $p->AddReference($postgres);
}
$mf = Project::read_file('src\bin\scripts\Makefile');
$mf =~ s{\\s*[\r\n]+}{}mg;
$mf =~ m{PROGRAMS\s*=\s*(.*)$}m || die 'Could not match in bin\scripts\Makefile' . "\n";
-foreach my $prg (split /\s+/,$1) {
- my $proj = $solution->AddProject($prg,'exe','bin');
- $mf =~ m{$prg\s*:\s*(.*)$}m || die 'Could not find script define for $prg' . "\n";
- my @files = split /\s+/,$1;
- foreach my $f (@files) {
- if ($f =~ /\/keywords\.o$/) {
- $proj->AddFile('src\backend\parser\keywords.c');
- }
- else {
- $f =~ s/\.o$/\.c/;
- if ($f eq 'dumputils.c') {
- $proj->AddFile('src\bin\pg_dump\dumputils.c');
- }
- elsif ($f =~ /print\.c$/) { # Also catches mbprint.c
- $proj->AddFile('src\bin\psql\\' . $f);
- }
- else {
- $proj->AddFile('src\bin\scripts\\' . $f);
- }
- }
- }
- $proj->AddIncludeDir('src\interfaces\libpq');
- $proj->AddIncludeDir('src\bin\pg_dump');
- $proj->AddIncludeDir('src\bin\psql');
- $proj->AddReference($libpq,$libpgport);
- $proj->AddResourceFile('src\bin\scripts','PostgreSQL Utility');
+foreach my $prg (split /\s+/,$1)
+{
+ my $proj = $solution->AddProject($prg,'exe','bin');
+ $mf =~ m{$prg\s*:\s*(.*)$}m || die 'Could not find script define for $prg' . "\n";
+ my @files = split /\s+/,$1;
+ foreach my $f (@files)
+ {
+ if ($f =~ /\/keywords\.o$/)
+ {
+ $proj->AddFile('src\backend\parser\keywords.c');
+ }
+ else
+ {
+ $f =~ s/\.o$/\.c/;
+ if ($f eq 'dumputils.c')
+ {
+ $proj->AddFile('src\bin\pg_dump\dumputils.c');
+ }
+ elsif ($f =~ /print\.c$/)
+ { # Also catches mbprint.c
+ $proj->AddFile('src\bin\psql\\' . $f);
+ }
+ else
+ {
+ $proj->AddFile('src\bin\scripts\\' . $f);
+ }
+ }
+ }
+ $proj->AddIncludeDir('src\interfaces\libpq');
+ $proj->AddIncludeDir('src\bin\pg_dump');
+ $proj->AddIncludeDir('src\bin\psql');
+ $proj->AddReference($libpq,$libpgport);
+ $proj->AddResourceFile('src\bin\scripts','PostgreSQL Utility');
}
-
# Regression DLL and EXE
my $regress = $solution->AddProject('regress','dll','misc');
$regress->AddFile('src\test\regress\regress.c');
#####################
# Add a simple frontend project (exe)
-sub AddSimpleFrontend {
- my $n = shift;
- my $uselibpq= shift;
-
- my $p = $solution->AddProject($n,'exe','bin');
- $p->AddDir('src\bin\\' . $n);
- $p->AddDefine('FRONTEND');
- $p->AddReference($libpgport);
- if ($uselibpq) {
- $p->AddIncludeDir('src\interfaces\libpq');
- $p->AddReference($libpq);
- }
- return $p;
+sub AddSimpleFrontend
+{
+ my $n = shift;
+ my $uselibpq= shift;
+
+ my $p = $solution->AddProject($n,'exe','bin');
+ $p->AddDir('src\bin\\' . $n);
+ $p->AddDefine('FRONTEND');
+ $p->AddReference($libpgport);
+ if ($uselibpq)
+ {
+ $p->AddIncludeDir('src\interfaces\libpq');
+ $p->AddReference($libpq);
+ }
+ 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 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}});
- }
+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}});
+ }
}