2007-03-17 14:50:42 +01:00
|
|
|
package Install;
|
2007-03-24 16:28:48 +01:00
|
|
|
|
2007-03-17 15:01:01 +01:00
|
|
|
#
|
|
|
|
# Package that provides 'make install' functionality for msvc builds
|
|
|
|
#
|
2007-10-23 22:46:12 +02:00
|
|
|
# $PostgreSQL: pgsql/src/tools/msvc/Install.pm,v 1.25 2007/10/23 20:46:12 tgl Exp $
|
2007-03-17 15:01:01 +01:00
|
|
|
#
|
2007-03-17 14:50:42 +01:00
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
use Carp;
|
|
|
|
use File::Basename;
|
|
|
|
use File::Copy;
|
2007-09-22 22:38:10 +02:00
|
|
|
use File::Find ();
|
2007-03-17 14:50:42 +01:00
|
|
|
|
|
|
|
use Exporter;
|
|
|
|
our (@ISA,@EXPORT_OK);
|
|
|
|
@ISA = qw(Exporter);
|
|
|
|
@EXPORT_OK = qw(Install);
|
|
|
|
|
2007-09-27 23:13:11 +02:00
|
|
|
sub lcopy
|
|
|
|
{
|
|
|
|
my $src = shift;
|
|
|
|
my $target = shift;
|
|
|
|
|
2007-10-03 15:20:40 +02:00
|
|
|
if (-f $target)
|
|
|
|
{
|
|
|
|
unlink $target || confess "Could not delete $target\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
copy($src,$target)
|
|
|
|
|| confess "Could not copy $src to $target\n";
|
2007-09-27 23:13:11 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2007-03-17 14:50:42 +01:00
|
|
|
sub Install
|
|
|
|
{
|
|
|
|
$| = 1;
|
|
|
|
|
|
|
|
my $target = shift;
|
2007-03-24 23:16:49 +01:00
|
|
|
our $config;
|
|
|
|
require 'config.pl';
|
2007-03-17 14:50:42 +01:00
|
|
|
|
|
|
|
chdir("../../..") if (-f "../../../configure");
|
2007-06-12 13:07:34 +02:00
|
|
|
chdir("../../../..") if (-f "../../../../configure");
|
2007-03-17 14:50:42 +01:00
|
|
|
my $conf = "";
|
|
|
|
if (-d "debug")
|
|
|
|
{
|
|
|
|
$conf = "debug";
|
|
|
|
}
|
|
|
|
if (-d "release")
|
|
|
|
{
|
|
|
|
$conf = "release";
|
|
|
|
}
|
|
|
|
die "Could not find debug or release binaries" if ($conf eq "");
|
2007-05-13 17:33:07 +02:00
|
|
|
print "Installing for $conf in $target\n";
|
2007-03-17 14:50:42 +01:00
|
|
|
|
2007-03-24 16:28:48 +01:00
|
|
|
EnsureDirectories($target, 'bin','lib','share','share/timezonesets','share/contrib','doc',
|
2007-08-27 12:51:15 +02:00
|
|
|
'doc/contrib', 'symbols', 'share/tsearch_data');
|
2007-03-17 14:50:42 +01:00
|
|
|
|
|
|
|
CopySolutionOutput($conf, $target);
|
2007-09-27 23:13:11 +02:00
|
|
|
lcopy($target . '/lib/libpq.dll', $target . '/bin/libpq.dll');
|
2007-09-22 22:38:10 +02:00
|
|
|
my $sample_files = [];
|
|
|
|
File::Find::find({wanted =>
|
|
|
|
sub { /^.*\.sample\z/s &&
|
|
|
|
push(@$sample_files, $File::Find::name);
|
|
|
|
}
|
|
|
|
},
|
2007-09-23 22:32:40 +02:00
|
|
|
"src" );
|
2007-09-22 22:38:10 +02:00
|
|
|
CopySetOfFiles('config files', $sample_files , $target . '/share/');
|
2007-03-27 23:47:10 +02:00
|
|
|
CopyFiles(
|
2007-03-29 22:48:26 +02:00
|
|
|
'Import libraries',
|
|
|
|
$target .'/lib/',
|
2007-04-25 21:00:05 +02:00
|
|
|
"$conf\\", "postgres\\postgres.lib","libpq\\libpq.lib", "libecpg\\libecpg.lib", "libpgport\\libpgport.lib"
|
2007-03-27 23:47:10 +02:00
|
|
|
);
|
2007-09-22 22:38:10 +02:00
|
|
|
CopySetOfFiles('timezone names',
|
|
|
|
[ glob('src\timezone\tznames\*.txt') ] ,
|
|
|
|
$target . '/share/timezonesets/');
|
2007-03-17 14:50:42 +01:00
|
|
|
CopyFiles(
|
|
|
|
'timezone sets',
|
|
|
|
$target . '/share/timezonesets/',
|
|
|
|
'src/timezone/tznames/', 'Default','Australia','India'
|
|
|
|
);
|
2007-09-22 22:38:10 +02:00
|
|
|
CopySetOfFiles('BKI files', [ glob("src\\backend\\catalog\\postgres.*") ],
|
|
|
|
$target .'/share/');
|
|
|
|
CopySetOfFiles('SQL files', [ glob("src\\backend\\catalog\\*.sql") ],
|
|
|
|
$target . '/share/');
|
2007-03-17 14:50:42 +01:00
|
|
|
CopyFiles(
|
|
|
|
'Information schema data',
|
|
|
|
$target . '/share/',
|
|
|
|
'src/backend/catalog/', 'sql_features.txt'
|
|
|
|
);
|
|
|
|
GenerateConversionScript($target);
|
|
|
|
GenerateTimezoneFiles($target,$conf);
|
2007-08-27 12:29:49 +02:00
|
|
|
GenerateTsearchFiles($target);
|
2007-09-22 22:38:10 +02:00
|
|
|
CopySetOfFiles('Stopword files',
|
|
|
|
[ glob ("src\\backend\\snowball\\stopwords\\*.stop") ],
|
|
|
|
$target . '/share/tsearch_data/');
|
|
|
|
CopySetOfFiles('Dictionaries sample files',
|
2007-09-23 22:32:40 +02:00
|
|
|
[ glob ("src\\backend\\tsearch\\*_sample.*" ) ],
|
2007-09-22 22:38:10 +02:00
|
|
|
$target . '/share/tsearch_data/');
|
2007-04-04 18:34:43 +02:00
|
|
|
CopyContribFiles($config,$target);
|
2007-03-29 22:48:26 +02:00
|
|
|
CopyIncludeFiles($target);
|
2007-03-24 23:16:49 +01:00
|
|
|
|
|
|
|
GenerateNLSFiles($target,$config->{nls}) if ($config->{nls});
|
2007-04-02 14:11:26 +02:00
|
|
|
|
|
|
|
print "Installation complete.\n";
|
2007-03-17 14:50:42 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
sub EnsureDirectories
|
|
|
|
{
|
|
|
|
my $target = shift;
|
|
|
|
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);
|
2007-10-03 15:20:40 +02:00
|
|
|
lcopy($f, $target . basename($f));
|
2007-03-17 14:50:42 +01:00
|
|
|
}
|
|
|
|
print "\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
sub CopySetOfFiles
|
|
|
|
{
|
|
|
|
my $what = shift;
|
2007-09-22 22:38:10 +02:00
|
|
|
my $flist = shift;
|
2007-03-17 14:50:42 +01:00
|
|
|
my $target = shift;
|
2007-09-22 22:38:10 +02:00
|
|
|
print "Copying $what" if $what;
|
|
|
|
foreach (@$flist)
|
2007-03-17 14:50:42 +01:00
|
|
|
{
|
|
|
|
next if /regress/; # Skip temporary install in regression subdir
|
2007-06-12 13:07:34 +02:00
|
|
|
next if /ecpg.test/; # Skip temporary install in regression subdir
|
2007-03-17 14:50:42 +01:00
|
|
|
my $tgt = $target . basename($_);
|
|
|
|
print ".";
|
2007-09-27 23:13:11 +02:00
|
|
|
lcopy($_, $tgt) || croak "Could not copy $_: $!\n";
|
2007-03-17 14:50:42 +01:00
|
|
|
}
|
|
|
|
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;
|
|
|
|
}
|
2007-09-27 23:13:11 +02:00
|
|
|
lcopy("$conf\\$pf\\$pf.$ext","$target\\$dir\\$pf.$ext") || croak "Could not copy $pf.$ext\n";
|
|
|
|
lcopy("$conf\\$pf\\$pf.pdb","$target\\symbols\\$pf.pdb") || croak "Could not copy $pf.pdb\n";
|
2007-03-17 14:50:42 +01:00
|
|
|
print ".";
|
|
|
|
}
|
|
|
|
print "\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
sub GenerateConversionScript
|
|
|
|
{
|
|
|
|
my $target = shift;
|
|
|
|
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 $target = shift;
|
|
|
|
my $conf = shift;
|
|
|
|
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...";
|
2007-04-21 22:58:05 +02:00
|
|
|
system("$conf\\zic\\zic -d \"$target/share/timezone\" " . join(" src/timezone/data/", @tzfiles));
|
2007-03-17 14:50:42 +01:00
|
|
|
print "\n";
|
|
|
|
}
|
|
|
|
|
2007-08-27 12:29:49 +02:00
|
|
|
sub GenerateTsearchFiles
|
|
|
|
{
|
|
|
|
my $target = shift;
|
|
|
|
|
|
|
|
print "Generating tsearch script...";
|
|
|
|
my $F;
|
|
|
|
my $tmpl = read_file('src/backend/snowball/snowball.sql.in');
|
|
|
|
my $mf = read_file('src/backend/snowball/Makefile');
|
|
|
|
$mf =~ s{\\\s*[\r\n]+}{}mg;
|
|
|
|
$mf =~ /^LANGUAGES\s*=\s*(.*)$/m
|
|
|
|
|| die "Could not find LANGUAGES line in snowball Makefile\n";
|
|
|
|
my @pieces = split /\s+/,$1;
|
|
|
|
open($F,">$target/share/snowball_create.sql")
|
|
|
|
|| die "Could not write snowball_create.sql";
|
|
|
|
print $F read_file('src/backend/snowball/snowball_func.sql.in');
|
|
|
|
while ($#pieces > 0)
|
|
|
|
{
|
|
|
|
my $lang = shift @pieces || last;
|
2007-10-23 22:46:12 +02:00
|
|
|
my $asclang = shift @pieces || last;
|
2007-08-27 12:29:49 +02:00
|
|
|
my $txt = $tmpl;
|
|
|
|
my $stop = '';
|
|
|
|
|
|
|
|
if (-s "src/backend/snowball/stopwords/$lang.stop") {
|
|
|
|
$stop = ", StopWords=$lang";
|
|
|
|
}
|
|
|
|
|
|
|
|
$txt =~ s#_LANGNAME_#${lang}#gs;
|
|
|
|
$txt =~ s#_DICTNAME_#${lang}_stem#gs;
|
|
|
|
$txt =~ s#_CFGNAME_#${lang}#gs;
|
2007-10-23 22:46:12 +02:00
|
|
|
$txt =~ s#_ASCDICTNAME_#${asclang}_stem#gs;
|
|
|
|
$txt =~ s#_NONASCDICTNAME_#${lang}_stem#gs;
|
2007-08-27 12:29:49 +02:00
|
|
|
$txt =~ s#_STOPWORDS_#$stop#gs;
|
|
|
|
print $F $txt;
|
|
|
|
print ".";
|
|
|
|
}
|
|
|
|
close($F);
|
|
|
|
print "\n";
|
|
|
|
}
|
|
|
|
|
2007-03-24 16:28:48 +01:00
|
|
|
sub CopyContribFiles
|
|
|
|
{
|
2007-04-04 18:34:43 +02:00
|
|
|
my $config = shift;
|
2007-03-24 16:28:48 +01:00
|
|
|
my $target = shift;
|
|
|
|
|
|
|
|
print "Copying contrib data files...";
|
|
|
|
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");
|
2007-04-23 19:18:58 +02:00
|
|
|
next if ($d eq "uuid-ossp");
|
2007-04-04 18:34:43 +02:00
|
|
|
next if ($d eq "sslinfo" && !defined($config->{openssl}));
|
2007-04-04 20:45:59 +02:00
|
|
|
next if ($d eq "xml2" && !defined($config->{xml}));
|
2007-03-24 16:28:48 +01:00
|
|
|
|
|
|
|
my $mf = read_file("contrib/$d/Makefile");
|
|
|
|
$mf =~ s{\\s*[\r\n]+}{}mg;
|
|
|
|
my $flist = '';
|
|
|
|
if ($mf =~ /^DATA_built\s*=\s*(.*)$/m) {$flist .= $1}
|
|
|
|
if ($mf =~ /^DATA\s*=\s*(.*)$/m) {$flist .= " $1"}
|
|
|
|
$flist =~ s/^\s*//; # Remove leading spaces if we had only DATA_built
|
|
|
|
|
|
|
|
if ($flist ne '')
|
|
|
|
{
|
|
|
|
$flist = ParseAndCleanRule($flist, $mf);
|
|
|
|
|
|
|
|
# Special case for contrib/spi
|
|
|
|
$flist = "autoinc.sql insert_username.sql moddatetime.sql refint.sql timetravel.sql"
|
|
|
|
if ($d eq 'spi');
|
|
|
|
foreach my $f (split /\s+/,$flist)
|
|
|
|
{
|
2007-09-27 23:13:11 +02:00
|
|
|
lcopy('contrib/' . $d . '/' . $f,$target . '/share/contrib/' . basename($f))
|
2007-03-24 16:28:48 +01:00
|
|
|
|| croak("Could not copy file $f in contrib $d");
|
|
|
|
print '.';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-10-16 18:00:00 +02:00
|
|
|
$flist = '';
|
|
|
|
if ($mf =~ /^DATA_TSEARCH\s*=\s*(.*)$/m) {$flist .= $1}
|
|
|
|
if ($flist ne '')
|
|
|
|
{
|
|
|
|
$flist = ParseAndCleanRule($flist, $mf);
|
|
|
|
|
|
|
|
foreach my $f (split /\s+/,$flist)
|
|
|
|
{
|
|
|
|
lcopy('contrib/' . $d . '/' . $f,$target . '/share/tsearch_data/' . basename($f))
|
|
|
|
|| croak("Could not copy file $f in contrib $d");
|
|
|
|
print '.';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-03-24 16:28:48 +01:00
|
|
|
$flist = '';
|
|
|
|
if ($mf =~ /^DOCS\s*=\s*(.*)$/mg) {$flist .= $1}
|
|
|
|
if ($flist ne '')
|
|
|
|
{
|
|
|
|
$flist = ParseAndCleanRule($flist, $mf);
|
|
|
|
|
|
|
|
# Special case for contrib/spi
|
|
|
|
$flist =
|
|
|
|
"README.spi autoinc.example insert_username.example moddatetime.example refint.example timetravel.example"
|
|
|
|
if ($d eq 'spi');
|
|
|
|
foreach my $f (split /\s+/,$flist)
|
|
|
|
{
|
2007-09-27 23:13:11 +02:00
|
|
|
lcopy('contrib/' . $d . '/' . $f, $target . '/doc/contrib/' . $f)
|
2007-04-25 21:00:05 +02:00
|
|
|
|| croak("Could not copy file $f in contrib $d");
|
2007-03-24 16:28:48 +01:00
|
|
|
print '.';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
closedir($D);
|
|
|
|
print "\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
sub ParseAndCleanRule
|
|
|
|
{
|
|
|
|
my $flist = shift;
|
|
|
|
my $mf = shift;
|
|
|
|
|
|
|
|
# Strip out $(addsuffix) rules
|
|
|
|
if (index($flist, '$(addsuffix ') >= 0)
|
|
|
|
{
|
|
|
|
my $pcount = 0;
|
|
|
|
my $i;
|
|
|
|
for ($i = index($flist, '$(addsuffix ') + 12; $i < length($flist); $i++)
|
|
|
|
{
|
|
|
|
$pcount++ if (substr($flist, $i, 1) eq '(');
|
|
|
|
$pcount-- if (substr($flist, $i, 1) eq ')');
|
|
|
|
last if ($pcount < 0);
|
|
|
|
}
|
|
|
|
$flist = substr($flist, 0, index($flist, '$(addsuffix ')) . substr($flist, $i+1);
|
|
|
|
}
|
|
|
|
return $flist;
|
|
|
|
}
|
|
|
|
|
2007-03-29 22:48:26 +02:00
|
|
|
sub CopyIncludeFiles
|
|
|
|
{
|
|
|
|
my $target = shift;
|
|
|
|
|
2007-04-25 20:58:33 +02:00
|
|
|
EnsureDirectories($target, 'include', 'include/libpq',
|
|
|
|
'include/internal', 'include/internal/libpq',
|
|
|
|
'include/server');
|
2007-03-29 22:48:26 +02:00
|
|
|
|
|
|
|
CopyFiles(
|
|
|
|
'Public headers',
|
|
|
|
$target . '/include/',
|
|
|
|
'src/include/', 'postgres_ext.h', 'pg_config.h', 'pg_config_os.h', 'pg_config_manual.h'
|
|
|
|
);
|
2007-09-27 23:13:11 +02:00
|
|
|
lcopy('src/include/libpq/libpq-fs.h', $target . '/include/libpq/')
|
2007-03-29 22:48:26 +02:00
|
|
|
|| croak 'Could not copy libpq-fs.h';
|
|
|
|
|
|
|
|
CopyFiles('Libpq headers', $target . '/include/', 'src/interfaces/libpq/', 'libpq-fe.h');
|
|
|
|
CopyFiles(
|
|
|
|
'Libpq internal headers',
|
2007-04-25 20:58:33 +02:00
|
|
|
$target .'/include/internal/',
|
2007-03-29 22:48:26 +02:00
|
|
|
'src/interfaces/libpq/', 'libpq-int.h', 'pqexpbuffer.h'
|
|
|
|
);
|
|
|
|
|
|
|
|
CopyFiles(
|
|
|
|
'Internal headers',
|
2007-04-25 20:58:33 +02:00
|
|
|
$target . '/include/internal/',
|
2007-03-29 22:48:26 +02:00
|
|
|
'src/include/', 'c.h', 'port.h', 'postgres_fe.h'
|
|
|
|
);
|
2007-09-27 23:13:11 +02:00
|
|
|
lcopy('src/include/libpq/pqcomm.h', $target . '/include/internal/libpq/')
|
2007-03-29 22:48:26 +02:00
|
|
|
|| croak 'Could not copy pqcomm.h';
|
|
|
|
|
|
|
|
CopyFiles(
|
|
|
|
'Server headers',
|
2007-04-25 20:58:33 +02:00
|
|
|
$target . '/include/server/',
|
2007-03-29 22:48:26 +02:00
|
|
|
'src/include/', 'pg_config.h', 'pg_config_os.h'
|
|
|
|
);
|
2007-09-22 22:38:10 +02:00
|
|
|
CopySetOfFiles('',
|
|
|
|
[ glob( "src\\include\\*.h" ) ],
|
|
|
|
$target . '/include/server/');
|
2007-03-29 22:48:26 +02:00
|
|
|
my $D;
|
|
|
|
opendir($D, 'src/include') || croak "Could not opendir on src/include!\n";
|
|
|
|
|
|
|
|
while (my $d = readdir($D))
|
|
|
|
{
|
|
|
|
next if ($d =~ /^\./);
|
|
|
|
next if ($d eq 'CVS');
|
|
|
|
next unless (-d 'src/include/' . $d);
|
|
|
|
|
2007-04-25 20:58:33 +02:00
|
|
|
EnsureDirectories($target . '/include/server', $d);
|
2007-03-29 22:48:26 +02:00
|
|
|
system(
|
2007-04-25 20:58:33 +02:00
|
|
|
"xcopy /s /i /q /r /y src\\include\\$d\\*.h \"$target\\include\\server\\$d\\\"")
|
2007-03-29 22:48:26 +02:00
|
|
|
&& croak("Failed to copy include directory $d\n");
|
|
|
|
}
|
|
|
|
closedir($D);
|
|
|
|
|
|
|
|
my $mf = read_file('src/interfaces/ecpg/include/Makefile');
|
|
|
|
$mf =~ s{\\s*[\r\n]+}{}mg;
|
|
|
|
$mf =~ /^ecpg_headers\s*=\s*(.*)$/m || croak "Could not find ecpg_headers line\n";
|
|
|
|
CopyFiles(
|
|
|
|
'ECPG headers',
|
|
|
|
$target . '/include/',
|
|
|
|
'src/interfaces/ecpg/include/',
|
|
|
|
'ecpg_config.h', split /\s+/,$1
|
|
|
|
);
|
|
|
|
$mf =~ /^informix_headers\s*=\s*(.*)$/m || croak "Could not find informix_headers line\n";
|
2007-04-25 20:58:33 +02:00
|
|
|
EnsureDirectories($target . '/include', 'informix', 'informix/esql');
|
2007-03-29 22:48:26 +02:00
|
|
|
CopyFiles(
|
|
|
|
'ECPG informix headers',
|
2007-04-25 20:58:33 +02:00
|
|
|
$target .'/include/informix/esql/',
|
2007-03-29 22:48:26 +02:00
|
|
|
'src/interfaces/ecpg/include/',
|
|
|
|
split /\s+/,$1
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2007-03-24 23:16:49 +01:00
|
|
|
sub GenerateNLSFiles
|
|
|
|
{
|
|
|
|
my $target = shift;
|
|
|
|
my $nlspath = shift;
|
|
|
|
|
|
|
|
print "Installing NLS files...";
|
|
|
|
EnsureDirectories($target, "share/locale");
|
2007-09-22 22:38:10 +02:00
|
|
|
my @flist;
|
|
|
|
File::Find::find({wanted =>
|
|
|
|
sub { /^nls\.mk\z/s &&
|
|
|
|
! push(@flist, $File::Find::name);
|
|
|
|
}
|
2007-09-23 22:32:40 +02:00
|
|
|
}, "src");
|
2007-09-22 22:38:10 +02:00
|
|
|
foreach (@flist)
|
2007-03-24 23:16:49 +01:00
|
|
|
{
|
|
|
|
s/nls.mk/po/;
|
|
|
|
my $dir = $_;
|
|
|
|
next unless ($dir =~ /([^\\]+)\\po$/);
|
|
|
|
my $prgm = $1;
|
|
|
|
$prgm = 'postgres' if ($prgm eq 'backend');
|
2007-09-22 22:38:10 +02:00
|
|
|
foreach (glob("$dir/*.po"))
|
2007-03-24 23:16:49 +01:00
|
|
|
{
|
|
|
|
my $lang;
|
|
|
|
next unless /^(.*)\.po/;
|
|
|
|
$lang = $1;
|
|
|
|
|
|
|
|
EnsureDirectories($target, "share/locale/$lang", "share/locale/$lang/LC_MESSAGES");
|
|
|
|
system(
|
|
|
|
"$nlspath\\bin\\msgfmt -o $target\\share\\locale\\$lang\\LC_MESSAGES\\$prgm.mo $dir\\$_"
|
|
|
|
)
|
|
|
|
&& croak("Could not run msgfmt on $dir\\$_");
|
|
|
|
print ".";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
print "\n";
|
|
|
|
}
|
|
|
|
|
2007-03-17 14:50:42 +01:00
|
|
|
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;
|
|
|
|
|
|
|
|
return $txt;
|
|
|
|
}
|
|
|
|
|
|
|
|
1;
|