]> granicus.if.org Git - postgresql/commitdiff
Install contrib sql and readme files
authorMagnus Hagander <magnus@hagander.net>
Sat, 24 Mar 2007 15:28:48 +0000 (15:28 +0000)
committerMagnus Hagander <magnus@hagander.net>
Sat, 24 Mar 2007 15:28:48 +0000 (15:28 +0000)
src/tools/msvc/Install.pm

index 099939be4570703a8eaf649c4c3c2c53c7ce316d..707006ddd18b606d95a86c3304da197f13dea921 100644 (file)
@@ -1,8 +1,9 @@
 package Install;
+
 #
 # Package that provides 'make install' functionality for msvc builds
 #
-# $PostgreSQL: pgsql/src/tools/msvc/Install.pm,v 1.2 2007/03/17 14:01:01 mha Exp $
+# $PostgreSQL: pgsql/src/tools/msvc/Install.pm,v 1.3 2007/03/24 15:28:48 mha Exp $
 #
 use strict;
 use warnings;
@@ -34,7 +35,8 @@ sub Install
     die "Could not find debug or release binaries" if ($conf eq "");
     print "Installing for $conf\n";
 
-    EnsureDirectories($target, 'bin','lib','share','share/timezonesets');
+    EnsureDirectories($target, 'bin','lib','share','share/timezonesets','share/contrib','doc',
+        'doc/contrib');
 
     CopySolutionOutput($conf, $target);
     copy($target . '/lib/libpq.dll', $target . '/bin/libpq.dll');
@@ -54,6 +56,7 @@ sub Install
     );
     GenerateConversionScript($target);
     GenerateTimezoneFiles($target,$conf);
+    CopyContribFiles($target);
 }
 
 sub EnsureDirectories
@@ -194,6 +197,83 @@ sub GenerateTimezoneFiles
     print "\n";
 }
 
+sub CopyContribFiles
+{
+    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");
+
+        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)
+            {
+                copy('contrib/' . $d . '/' . $f,$target . '/share/contrib/' . basename($f))
+                  || croak("Could not copy file $f in contrib $d");
+                print '.';
+            }
+        }
+
+        $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)
+            {
+                copy('contrib/' . $d . '/' . $f, $target . '/doc/contrib/' . $f)
+                  || croak("Coud not copy file $f in contrib $d");
+                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;
+}
+
 sub read_file
 {
     my $filename = shift;