@@ -56,8 +56,10 @@ sub Install
56
56
my $majorver = DetermineMajorVersion();
57
57
print " Installing version$majorver for$conf in$target \n " ;
58
58
59
- EnsureDirectories($target ,' bin' ,' lib' ,' share' ,' share/timezonesets' ,' share/contrib' ,' doc' ,
60
- ' doc/contrib' ,' symbols' ,' share/tsearch_data' );
59
+ EnsureDirectories($target ,' bin' ,' lib' ,' share' ,' share/timezonesets' ,
60
+ ' share/extension' ,' share/contrib' ,
61
+ ' doc' ,' doc/extension' ,' doc/contrib' ,
62
+ ' symbols' ,' share/tsearch_data' );
61
63
62
64
CopySolutionOutput($conf ,$target );
63
65
lcopy($target .' /lib/libpq.dll' ,$target .' /bin/libpq.dll' );
@@ -316,7 +318,27 @@ sub CopyContribFiles
316
318
317
319
my $mf = read_file(" contrib/$d /Makefile" );
318
320
$mf =~s {\\ s*[\r\n ]+} {} mg ;
321
+
322
+ # Note: we currently don't support setting MODULEDIR in the makefile
323
+ my $moduledir =' contrib' ;
324
+
319
325
my $flist =' ' ;
326
+ if ($mf =~/ ^EXTENSION\s *=\s *(.*)$ /m ) {$flist .=$1 }
327
+ if ($flist ne ' ' )
328
+ {
329
+ $moduledir =' extension' ;
330
+ $flist = ParseAndCleanRule($flist ,$mf );
331
+
332
+ foreach my $f (split /\s +/,$flist )
333
+ {
334
+ lcopy(' contrib/' .$d .' /' .$f .' .control' ,
335
+ $target .' /share/extension/' .$f .' .control' )
336
+ || croak(" Could not copy file$f .control in contrib$d " );
337
+ print ' .' ;
338
+ }
339
+ }
340
+
341
+ $flist =' ' ;
320
342
if ($mf =~/ ^DATA_built\s *=\s *(.*)$ /m ) {$flist .=$1 }
321
343
if ($mf =~/ ^DATA\s *=\s *(.*)$ /m ) {$flist .=" $1 " }
322
344
$flist =~s / ^\s *// ;# Remove leading spaces if we had only DATA_built
@@ -327,7 +349,8 @@ sub CopyContribFiles
327
349
328
350
foreach my $f (split /\s +/,$flist )
329
351
{
330
- lcopy(' contrib/' .$d .' /' .$f ,$target .' /share/contrib/' . basename($f ))
352
+ lcopy(' contrib/' .$d .' /' .$f ,
353
+ $target .' /share/' .$moduledir .' /' . basename($f ))
331
354
|| croak(" Could not copy file$f in contrib$d " );
332
355
print ' .' ;
333
356
}
@@ -341,7 +364,8 @@ sub CopyContribFiles
341
364
342
365
foreach my $f (split /\s +/,$flist )
343
366
{
344
- lcopy(' contrib/' .$d .' /' .$f ,$target .' /share/tsearch_data/' . basename($f ))
367
+ lcopy(' contrib/' .$d .' /' .$f ,
368
+ $target .' /share/tsearch_data/' . basename($f ))
345
369
|| croak(" Could not copy file$f in contrib$d " );
346
370
print ' .' ;
347
371
}
@@ -359,7 +383,8 @@ sub CopyContribFiles
359
383
if ($d eq ' spi' );
360
384
foreach my $f (split /\s +/,$flist )
361
385
{
362
- lcopy(' contrib/' .$d .' /' .$f ,$target .' /doc/contrib/' .$f )
386
+ lcopy(' contrib/' .$d .' /' .$f ,
387
+ $target .' /doc/' .$moduledir .' /' .$f )
363
388
|| croak(" Could not copy file$f in contrib$d " );
364
389
print ' .' ;
365
390
}
@@ -430,7 +455,7 @@ sub CopyIncludeFiles
430
455
' src/include/' ,' pg_config.h' ,' pg_config_os.h'
431
456
);
432
457
CopyFiles(' Grammar header' ,$target .' /include/server/parser/' ,
433
- ' src/backend/parser/' ,' gram.h' );
458
+ ' src/backend/parser/' ,' gram.h' );
434
459
CopySetOfFiles(' ' ,[glob (" src\\ include\\ *.h" ) ],$target .' /include/server/' );
435
460
my $D ;
436
461
opendir ($D ,' src/include' ) || croak" Could not opendir on src/include!\n " ;