@@ -29,6 +29,7 @@ my $libpgcommon;
2929my $postgres ;
3030my $libpq ;
3131
32+ # Set of variables for contrib modules
3233my $contrib_defines = { ' refint' => ' REFINT_VERBOSE' };
3334my @contrib_uselibpq =
3435 (' dblink' , ' oid2name' , ' pgbench' , ' pg_upgrade' , ' postgres_fdw' , ' vacuumlo' );
@@ -48,11 +49,25 @@ my $contrib_extralibs = { 'pgbench' => ['ws2_32.lib'] };
4849my $contrib_extraincludes =
4950 { ' tsearch2' => [' contrib/tsearch2' ], ' dblink' => [' src/backend' ] };
5051my $contrib_extrasource = {
51- ' cube' => [ ' cubescan.l' , ' cubeparse.y' ],
52- ' pgbench' => [ ' exprscan.l' , ' exprparse.y' ],
53- ' seg' => [ ' segscan.l' , ' segparse.y' ], };
52+ ' cube' => [ ' contrib\cube\cubescan.l' , ' contrib\cube\cubeparse.y' ],
53+ ' pgbench' =>
54+ [ ' contrib\pgbench\exprscan.l' , ' contrib\pgbench\exprparse.y' ],
55+ ' seg' => [ ' contrib\seg\segscan.l' , ' contrib\seg\segparse.y' ], };
5456my @contrib_excludes = (' pgcrypto' , ' intagg' , ' sepgsql' );
5557
58+ # Set of variables for frontend modules
59+ my $frontend_defines = { ' initdb' => ' FRONTEND' };
60+ my @frontend_uselibpq = (' pg_ctl' , ' psql' );
61+ my $frontend_extralibs = {
62+ ' initdb' => [' ws2_32.lib' ],
63+ ' pg_restore' => [' ws2_32.lib' ],
64+ ' psql' => [' ws2_32.lib' ] };
65+ my $frontend_extraincludes = {
66+ ' initdb' => [' src\timezone' ],
67+ ' psql' => [ ' src\bin\pg_dump' , ' src\backend' ] };
68+ my $frontend_extrasource = { ' psql' => [' src\bin\psql\psqlscan.l' ] };
69+ my @frontend_excludes = (' pgevent' , ' pg_basebackup' , ' pg_dump' , ' scripts' );
70+
5671sub mkvcbuild
5772{
5873 our $config = shift ;
@@ -108,6 +123,7 @@ sub mkvcbuild
108123 $postgres -> AddFiles(' src\port' , @pgportfiles );
109124 $postgres -> AddFiles(' src\common' , @pgcommonbkndfiles );
110125 $postgres -> AddDir(' src\timezone' );
126+
111127 # We need source files from src\timezone, but that directory's resource
112128 # file pertains to "zic", not to the backend.
113129 $postgres -> RemoveFile(' src\timezone\win32ver.rc' );
@@ -122,15 +138,17 @@ sub mkvcbuild
122138 $postgres -> AddLibrary(' ws2_32.lib' );
123139 $postgres -> AddLibrary(' wldap32.lib' ) if ($solution -> {options }-> {ldap });
124140 $postgres -> FullExportDLL(' postgres.lib' );
125- # The OBJS scraper doesn't know about ifdefs, so remove be-secure-openssl.c
126- # if building without OpenSSL
141+
142+ # The OBJS scraper doesn't know about ifdefs, so remove be-secure-openssl.c
143+ # if building without OpenSSL
127144 if (!$solution -> {options }-> {openssl })
128145 {
129146 $postgres -> RemoveFile(' src\backend\libpq\be-secure-openssl.c' );
130147 }
131148
132149 my $snowball = $solution -> AddProject(' dict_snowball' , ' dll' , ' ' ,
133150 ' src\backend\snowball' );
151+
134152 # This Makefile uses VPATH to find most source files in a subdirectory.
135153 $snowball -> RelocateFiles(
136154 ' src\backend\snowball\libstemmer' ,
@@ -288,8 +306,9 @@ sub mkvcbuild
288306 $libpq -> ReplaceFile(' src\interfaces\libpq\libpqrc.c' ,
289307 ' src\interfaces\libpq\libpq.rc' );
290308 $libpq -> AddReference($libpgport );
291- # The OBJS scraper doesn't know about ifdefs, so remove fe-secure-openssl.c
292- # if building without OpenSSL
309+
310+ # The OBJS scraper doesn't know about ifdefs, so remove fe-secure-openssl.c
311+ # if building without OpenSSL
293312 if (!$solution -> {options }-> {openssl })
294313 {
295314 $libpq -> RemoveFile(' src\interfaces\libpq\fe-secure-openssl.c' );
@@ -380,11 +399,15 @@ sub mkvcbuild
380399 $pgregress_isolation -> AddReference($libpgcommon , $libpgport );
381400
382401 # src/bin
383- my $initdb = AddSimpleFrontend(' initdb' );
384- $initdb -> AddIncludeDir(' src\interfaces\libpq' );
385- $initdb -> AddIncludeDir(' src\timezone' );
386- $initdb -> AddDefine(' FRONTEND' );
387- $initdb -> AddLibrary(' ws2_32.lib' );
402+ my $D ;
403+ opendir ($D , ' src/bin' ) || croak " Could not opendir on src/bin!\n " ;
404+ while (my $d = readdir ($D ))
405+ {
406+ next if ($d =~ / ^\. / );
407+ next unless (-f " src/bin/$d /Makefile" );
408+ next if (grep { / ^$d $ / } @frontend_excludes );
409+ AddSimpleFrontend($d );
410+ }
388411
389412 my $pgbasebackup = AddSimpleFrontend(' pg_basebackup' , 1);
390413 $pgbasebackup -> AddFile(' src\bin\pg_basebackup\pg_basebackup.c' );
@@ -400,14 +423,6 @@ sub mkvcbuild
400423 $pgrecvlogical -> AddFile(' src\bin\pg_basebackup\pg_recvlogical.c' );
401424 $pgrecvlogical -> AddLibrary(' ws2_32.lib' );
402425
403- my $pgconfig = AddSimpleFrontend(' pg_config' );
404-
405- my $pgcontrol = AddSimpleFrontend(' pg_controldata' );
406-
407- my $pgctl = AddSimpleFrontend(' pg_ctl' , 1);
408-
409- my $pgreset = AddSimpleFrontend(' pg_resetxlog' );
410-
411426 my $pgevent = $solution -> AddProject(' pgevent' , ' dll' , ' bin' );
412427 $pgevent -> AddFiles(' src\bin\pgevent' , ' pgevent.c' , ' pgmsgevent.rc' );
413428 $pgevent -> AddResourceFile(' src\bin\pgevent' , ' Eventlog message formatter' ,
@@ -416,12 +431,6 @@ sub mkvcbuild
416431 $pgevent -> UseDef(' src\bin\pgevent\pgevent.def' );
417432 $pgevent -> DisableLinkerWarnings(' 4104' );
418433
419- my $psql = AddSimpleFrontend(' psql' , 1);
420- $psql -> AddIncludeDir(' src\bin\pg_dump' );
421- $psql -> AddIncludeDir(' src\backend' );
422- $psql -> AddFile(' src\bin\psql\psqlscan.l' );
423- $psql -> AddLibrary(' ws2_32.lib' );
424-
425434 my $pgdump = AddSimpleFrontend(' pg_dump' , 1);
426435 $pgdump -> AddIncludeDir(' src\backend' );
427436 $pgdump -> AddFile(' src\bin\pg_dump\pg_dump.c' );
@@ -532,7 +541,6 @@ sub mkvcbuild
532541 my $mf = Project::read_file(' contrib/pgcrypto/Makefile' );
533542 GenerateContribSqlFiles(' pgcrypto' , $mf );
534543
535- my $D ;
536544 opendir ($D , ' contrib' ) || croak " Could not opendir on contrib!\n " ;
537545 while (my $d = readdir ($D ))
538546 {
@@ -652,6 +660,10 @@ sub AddSimpleFrontend
652660 $p -> AddIncludeDir(' src\interfaces\libpq' );
653661 $p -> AddReference($libpq );
654662 }
663+
664+ # Adjust module definition using frontent variables
665+ AdjustFrontendProj($p );
666+
655667 return $p ;
656668}
657669
@@ -729,7 +741,7 @@ sub GenerateContribSqlFiles
729741 print " Building $out from $in (contrib/$n )...\n " ;
730742 my $cont = Project::read_file(" contrib/$n /$in " );
731743 my $dn = $out ;
732- $dn =~ s /\. sql$// ;
744+ $dn =~ s /\. sql$// ;
733745 $cont =~ s / MODULE_PATHNAME/ \$ libdir\/ $dn / g ;
734746 my $o ;
735747 open ($o , " >contrib/$n /$out " )
@@ -744,45 +756,74 @@ sub GenerateContribSqlFiles
744756sub AdjustContribProj
745757{
746758 my $proj = shift ;
747- my $n = $proj -> {name };
759+ AdjustModule(
760+ $proj , $contrib_defines ,
761+ \@contrib_uselibpq , \@contrib_uselibpgport ,
762+ \@contrib_uselibpgcommon , $contrib_extralibs ,
763+ $contrib_extrasource , $contrib_extraincludes );
764+ }
748765
749- if ($contrib_defines -> {$n })
766+ sub AdjustFrontendProj
767+ {
768+ my $proj = shift ;
769+ AdjustModule($proj , $frontend_defines , \@frontend_uselibpq , undef ,
770+ undef , $frontend_extralibs ,
771+ $frontend_extrasource , $frontend_extraincludes );
772+ }
773+
774+ sub AdjustModule
775+ {
776+ my $proj = shift ;
777+ my $module_defines = shift ;
778+ my $module_uselibpq = shift ;
779+ my $module_uselibpgport = shift ;
780+ my $module_uselibpgcommon = shift ;
781+ my $module_extralibs = shift ;
782+ my $module_extrasource = shift ;
783+ my $module_extraincludes = shift ;
784+ my $n = $proj -> {name };
785+
786+ if ($module_defines -> {$n })
750787 {
751- foreach my $d ($contrib_defines -> {$n })
788+ foreach my $d ($module_defines -> {$n })
752789 {
753790 $proj -> AddDefine($d );
754791 }
755792 }
756- if (grep { / ^$n $ / } @contrib_uselibpq )
793+ if (grep { / ^$n $ / } @{ $module_uselibpq } )
757794 {
758795 $proj -> AddIncludeDir(' src\interfaces\libpq' );
759796 $proj -> AddReference($libpq );
760797 }
761- if (grep { / ^$n $ / } @contrib_uselibpgport )
798+ if (grep { / ^$n $ / } @{ $module_uselibpgport } )
762799 {
763800 $proj -> AddReference($libpgport );
764801 }
765- if (grep { / ^$n $ / } @contrib_uselibpgcommon )
802+ if (grep { / ^$n $ / } @{ $module_uselibpgcommon } )
766803 {
767804 $proj -> AddReference($libpgcommon );
768805 }
769- if ($contrib_extralibs -> {$n })
806+ if ($module_extralibs -> {$n })
770807 {
771- foreach my $l (@{ $contrib_extralibs -> {$n } })
808+ foreach my $l (@{ $module_extralibs -> {$n } })
772809 {
773810 $proj -> AddLibrary($l );
774811 }
775812 }
776- if ($contrib_extraincludes -> {$n })
813+ if ($module_extraincludes -> {$n })
777814 {
778- foreach my $i (@{ $contrib_extraincludes -> {$n } })
815+ foreach my $i (@{ $module_extraincludes -> {$n } })
779816 {
780817 $proj -> AddIncludeDir($i );
781818 }
782819 }
783- if ($contrib_extrasource -> {$n })
820+ if ($module_extrasource -> {$n })
784821 {
785- $proj -> AddFiles(' contrib\\ ' . $n , @{ $contrib_extrasource -> {$n } });
822+ foreach my $i (@{ $module_extrasource -> {$n } })
823+ {
824+ print " Files $i \n " ;
825+ $proj -> AddFile($i );
826+ }
786827 }
787828}
788829
0 commit comments