10 our (@ISA,@EXPORT_OK);
12 @EXPORT_OK = qw(Install);
20 chdir("../../..") if (-f "../../../configure");
30 die "Could not find debug or release binaries" if ($conf eq "");
31 print "Installing for $conf\n";
33 EnsureDirectories($target, 'bin','lib','share','share/timezonesets');
35 CopySolutionOutput($conf, $target);
36 copy($target . '/lib/libpq.dll', $target . '/bin/libpq.dll');
37 CopySetOfFiles('config files', "*.sample", $target . '/share/');
38 CopySetOfFiles('timezone names', 'src\timezone\tznames\*.txt',$target . '/share/timezonesets/');
41 $target . '/share/timezonesets/',
42 'src/timezone/tznames/', 'Default','Australia','India'
44 CopySetOfFiles('BKI files', "src\\backend\\catalog\\postgres.*", $target .'/share/');
45 CopySetOfFiles('SQL files', "src\\backend\\catalog\\*.sql", $target . '/share/');
47 'Information schema data',
49 'src/backend/catalog/', 'sql_features.txt'
51 GenerateConversionScript($target);
52 GenerateTimezoneFiles($target,$conf);
58 mkdir $target unless -d ($target);
61 mkdir $target . '/' . $d unless -d ($target . '/' . $d);
71 print "Copying $what";
76 die "No file $f\n" if (!-f $f);
77 copy($f, $target . basename($f))
78 || croak "Could not copy $f to $target". basename($f). " to $target". basename($f) . "\n";
90 print "Copying $what";
91 open($D, "dir /b /s $spec |") || croak "Could not list $spec\n";
95 next if /regress/; # Skip temporary install in regression subdir
96 my $tgt = $target . basename($_);
98 copy($_, $tgt) || croak "Could not copy $_: $!\n";
104 sub CopySolutionOutput
108 my $rem = qr{Project\("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"\) = "([^"]+)"};
110 my $sln = read_file("pgsql.sln") || croak "Could not open pgsql.sln\n";
111 print "Copying build output files...";
120 my $proj = read_file("$pf.vcproj") || croak "Could not open $pf.vcproj\n";
121 if ($proj !~ qr{ConfigurationType="([^"]+)"})
123 croak "Could not parse $pf.vcproj\n";
138 # Static lib, such as libpgport, only used internally during build, don't install
141 copy("$conf\\$pf\\$pf.$ext","$target\\$dir\\$pf.$ext") || croak "Could not copy $pf.$ext\n";
147 sub GenerateConversionScript
153 print "Generating conversion proc script...";
154 my $mf = read_file('src/backend/utils/mb/conversion_procs/Makefile');
155 $mf =~ s{\\\s*[\r\n]+}{}mg;
156 $mf =~ /^CONVERSIONS\s*=\s*(.*)$/m
157 || die "Could not find CONVERSIONS line in conversions Makefile\n";
158 my @pieces = split /\s+/,$1;
161 my $name = shift @pieces;
162 my $se = shift @pieces;
163 my $de = shift @pieces;
164 my $func = shift @pieces;
165 my $obj = shift @pieces;
166 $sql .= "-- $se --> $de\n";
168 "CREATE OR REPLACE FUNCTION $func (INTEGER, INTEGER, CSTRING, INTERNAL, INTEGER) RETURNS VOID AS '\$libdir/$obj', '$func' LANGUAGE C STRICT;\n";
169 $sql .= "DROP CONVERSION pg_catalog.$name;\n";
170 $sql .= "CREATE DEFAULT CONVERSION pg_catalog.$name FOR '$se' TO '$de' FROM $func;\n";
172 open($F,">$target/share/conversion_create.sql")
173 || die "Could not write to conversion_create.sql\n";
179 sub GenerateTimezoneFiles
183 my $mf = read_file("src/timezone/Makefile");
184 $mf =~ s{\\\s*[\r\n]+}{}mg;
185 $mf =~ /^TZDATA\s*:?=\s*(.*)$/m || die "Could not find TZDATA row in timezone makefile\n";
186 my @tzfiles = split /\s+/,$1;
188 print "Generating timezone files...";
189 system("$conf\\zic\\zic -d $target/share/timezone " . join(" src/timezone/data/", @tzfiles));
195 my $filename = shift;
200 open($F, $filename) || die "Could not open file $filename\n";