11package Mkvcbuild ;
2+
23#
34# Package that generates build files for msvc build
45#
5- # $PostgreSQL: pgsql/src/tools/msvc/Mkvcbuild.pm,v 1.4 2007/03/21 14:39:23 mha Exp $
6+ # $PostgreSQL: pgsql/src/tools/msvc/Mkvcbuild.pm,v 1.5 2007/03/23 09:53:33 mha Exp $
67#
78use Carp;
89use Win32;
@@ -249,6 +250,8 @@ sub mkvcbuild
249250 }
250251 $pgcrypto -> AddReference($postgres );
251252 $pgcrypto -> AddLibrary(' wsock32.lib' );
253+ my $mf = Project::read_file(' contrib/pgcrypto/Makefile' );
254+ GenerateContribSqlFiles(' pgcrypto' , $mf );
252255
253256 my $D ;
254257 opendir ($D , ' contrib' ) || croak " Could not opendir on contrib!\n " ;
@@ -384,7 +387,6 @@ sub AddContrib
384387 }
385388 }
386389 AdjustContribProj($proj );
387- return $proj ;
388390 }
389391 elsif ($mf =~ / ^MODULES\s *=\s *(.*)$ /mg )
390392 {
@@ -395,7 +397,6 @@ sub AddContrib
395397 $proj -> AddReference($postgres );
396398 AdjustContribProj($proj );
397399 }
398- return undef ;
399400 }
400401 elsif ($mf =~ / ^PROGRAM\s *=\s *(.*)$ /mg )
401402 {
@@ -407,12 +408,62 @@ sub AddContrib
407408 $proj -> AddFile(' contrib\\ ' . $n . ' \\ ' . $o );
408409 }
409410 AdjustContribProj($proj );
410- return $proj ;
411411 }
412412 else
413413 {
414414 croak " Could not determine contrib module type for $n \n " ;
415415 }
416+
417+ # Are there any output data files to build?
418+ GenerateContribSqlFiles($n , $mf );
419+ }
420+
421+ sub GenerateContribSqlFiles
422+ {
423+ my $n = shift ;
424+ my $mf = shift ;
425+ if ($mf =~ / ^DATA_built\s *=\s *(.*)$ /mg )
426+ {
427+ my $l = $1 ;
428+
429+ # Strip out $(addsuffix) rules
430+ if (index ($l , ' $(addsuffix ' ) >= 0)
431+ {
432+ my $pcount = 0;
433+ my $i ;
434+ for ($i = index ($l , ' $(addsuffix ' ) + 12; $i < length ($l ); $i ++)
435+ {
436+ $pcount ++ if (substr ($l , $i , 1) eq ' (' );
437+ $pcount -- if (substr ($l , $i , 1) eq ' )' );
438+ last if ($pcount < 0);
439+ }
440+ $l = substr ($l , 0, index ($l , ' $(addsuffix ' )) . substr ($l , $i +1);
441+ }
442+
443+ # Special case for contrib/spi
444+ $l = " autoinc.sql insert_username.sql moddatetime.sql refint.sql timetravel.sql"
445+ if ($n eq ' spi' );
446+
447+ foreach my $d (split /\s +/, $l )
448+ {
449+ my $in = " $d .in" ;
450+ my $out = " $d " ;
451+
452+ # tsearch2 uses inconsistent naming
453+ $in = " tsearch.sql.in" if ($in eq " tsearch2.sql.in" );
454+ $in = " untsearch.sql.in" if ($in eq " uninstall_tsearch2.sql.in" );
455+ if (Solution::IsNewer(" contrib/$n /$out " , " contrib/$n /$in " ))
456+ {
457+ print " Building $out from $in (contrib/$n )...\n " ;
458+ my $cont = Project::read_file(" contrib/$n /$in " );
459+ $cont =~ s / MODULE_PATHNAME/ \$ libdir\/ $n / g ;
460+ my $o ;
461+ open ($o ," >contrib/$n /$out " ) || croak " Could not write to contrib/$n /$d " ;
462+ print $o $cont ;
463+ close ($o );
464+ }
465+ }
466+ }
416467}
417468
418469sub AdjustContribProj
0 commit comments