mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-04 00:02:52 -05:00 
			
		
		
		
	Provide for client-only installs with MSVC.
MauMau.
This commit is contained in:
		
							parent
							
								
									790eaa699e
								
							
						
					
					
						commit
						a7e5f7bf68
					
				@ -408,6 +408,14 @@ $ENV{CONFIG}="Debug";
 | 
			
		||||
   required to initialize and use the database, run the command:
 | 
			
		||||
<screen>
 | 
			
		||||
<userinput>install c:\destination\directory</userinput>
 | 
			
		||||
</screen>
 | 
			
		||||
  </para>
 | 
			
		||||
 | 
			
		||||
  <para>
 | 
			
		||||
   If you want to install only the client applications and
 | 
			
		||||
   interface libraries, then you can use these commands:
 | 
			
		||||
<screen>
 | 
			
		||||
<userinput>install c:\destination\directory client</userinput>
 | 
			
		||||
</screen>
 | 
			
		||||
  </para>
 | 
			
		||||
 </sect2>
 | 
			
		||||
 | 
			
		||||
@ -17,6 +17,16 @@ our (@ISA, @EXPORT_OK);
 | 
			
		||||
@ISA       = qw(Exporter);
 | 
			
		||||
@EXPORT_OK = qw(Install);
 | 
			
		||||
 | 
			
		||||
my $insttype;
 | 
			
		||||
my @client_contribs = ('oid2name', 'pgbench', 'vacuumlo');
 | 
			
		||||
my @client_program_files = (
 | 
			
		||||
	'clusterdb',     'createdb',       'createlang', 'createuser',
 | 
			
		||||
	'dropdb',        'droplang',       'dropuser',   'ecpg',
 | 
			
		||||
	'libecpg',       'libecpg_compat', 'libpgtypes', 'libpq',
 | 
			
		||||
	'pg_basebackup', 'pg_config',      'pg_dump',    'pg_dumpall',
 | 
			
		||||
	'pg_isready',    'pg_receivexlog', 'pg_restore', 'psql',
 | 
			
		||||
	'reindexdb',     'vacuumdb',       @client_contribs);
 | 
			
		||||
 | 
			
		||||
sub lcopy
 | 
			
		||||
{
 | 
			
		||||
	my $src    = shift;
 | 
			
		||||
@ -37,6 +47,8 @@ sub Install
 | 
			
		||||
	$| = 1;
 | 
			
		||||
 | 
			
		||||
	my $target = shift;
 | 
			
		||||
	$insttype = shift;
 | 
			
		||||
	$insttype = "all" unless ($insttype);
 | 
			
		||||
 | 
			
		||||
	# if called from vcregress, the config will be passed to us
 | 
			
		||||
	# so no need to re-include these
 | 
			
		||||
@ -65,24 +77,31 @@ sub Install
 | 
			
		||||
	my $majorver = DetermineMajorVersion();
 | 
			
		||||
	print "Installing version $majorver for $conf in $target\n";
 | 
			
		||||
 | 
			
		||||
	EnsureDirectories(
 | 
			
		||||
		$target,              'bin',
 | 
			
		||||
		'lib',                'share',
 | 
			
		||||
		'share/timezonesets', 'share/extension',
 | 
			
		||||
		'share/contrib',      'doc',
 | 
			
		||||
		'doc/extension',      'doc/contrib',
 | 
			
		||||
		'symbols',            'share/tsearch_data');
 | 
			
		||||
	my @client_dirs = ('bin', 'lib', 'share', 'symbols');
 | 
			
		||||
	my @all_dirs = (
 | 
			
		||||
		@client_dirs, 'doc', 'doc/contrib', 'doc/extension', 'share/contrib',
 | 
			
		||||
		'share/extension', 'share/timezonesets', 'share/tsearch_data');
 | 
			
		||||
	if ($insttype eq "client")
 | 
			
		||||
	{
 | 
			
		||||
		EnsureDirectories($target, @client_dirs);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		EnsureDirectories($target, @all_dirs);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	CopySolutionOutput($conf, $target);
 | 
			
		||||
	lcopy($target . '/lib/libpq.dll', $target . '/bin/libpq.dll');
 | 
			
		||||
	my $sample_files = [];
 | 
			
		||||
	my @top_dir      = ("src");
 | 
			
		||||
	@top_dir = ("src\\bin", "src\\interfaces") if ($insttype eq "client");
 | 
			
		||||
	File::Find::find(
 | 
			
		||||
		{   wanted => sub {
 | 
			
		||||
				/^.*\.sample\z/s
 | 
			
		||||
				  && push(@$sample_files, $File::Find::name);
 | 
			
		||||
			  }
 | 
			
		||||
		},
 | 
			
		||||
		"src");
 | 
			
		||||
		@top_dir);
 | 
			
		||||
	CopySetOfFiles('config files', $sample_files, $target . '/share/');
 | 
			
		||||
	CopyFiles(
 | 
			
		||||
		'Import libraries',
 | 
			
		||||
@ -95,53 +114,57 @@ sub Install
 | 
			
		||||
		"libpgport\\libpgport.lib",
 | 
			
		||||
		"libpgtypes\\libpgtypes.lib",
 | 
			
		||||
		"libecpg_compat\\libecpg_compat.lib");
 | 
			
		||||
	CopySetOfFiles(
 | 
			
		||||
		'timezone names',
 | 
			
		||||
		[ glob('src\timezone\tznames\*.txt') ],
 | 
			
		||||
		$target . '/share/timezonesets/');
 | 
			
		||||
	CopyFiles(
 | 
			
		||||
		'timezone sets',
 | 
			
		||||
		$target . '/share/timezonesets/',
 | 
			
		||||
		'src/timezone/tznames/', 'Default', 'Australia', 'India');
 | 
			
		||||
	CopySetOfFiles(
 | 
			
		||||
		'BKI files',
 | 
			
		||||
		[ glob("src\\backend\\catalog\\postgres.*") ],
 | 
			
		||||
		$target . '/share/');
 | 
			
		||||
	CopySetOfFiles(
 | 
			
		||||
		'SQL files',
 | 
			
		||||
		[ glob("src\\backend\\catalog\\*.sql") ],
 | 
			
		||||
		$target . '/share/');
 | 
			
		||||
	CopyFiles(
 | 
			
		||||
		'Information schema data', $target . '/share/',
 | 
			
		||||
		'src/backend/catalog/',    'sql_features.txt');
 | 
			
		||||
	GenerateConversionScript($target);
 | 
			
		||||
	GenerateTimezoneFiles($target, $conf);
 | 
			
		||||
	GenerateTsearchFiles($target);
 | 
			
		||||
	CopySetOfFiles(
 | 
			
		||||
		'Stopword files',
 | 
			
		||||
		[ glob("src\\backend\\snowball\\stopwords\\*.stop") ],
 | 
			
		||||
		$target . '/share/tsearch_data/');
 | 
			
		||||
	CopySetOfFiles(
 | 
			
		||||
		'Dictionaries sample files',
 | 
			
		||||
		[ glob("src\\backend\\tsearch\\*_sample.*") ],
 | 
			
		||||
		$target . '/share/tsearch_data/');
 | 
			
		||||
	CopyContribFiles($config, $target);
 | 
			
		||||
	CopyIncludeFiles($target);
 | 
			
		||||
 | 
			
		||||
	my $pl_extension_files = [];
 | 
			
		||||
	my @pldirs             = ('src/pl/plpgsql/src');
 | 
			
		||||
	push @pldirs, "src/pl/plperl"   if $config->{perl};
 | 
			
		||||
	push @pldirs, "src/pl/plpython" if $config->{python};
 | 
			
		||||
	push @pldirs, "src/pl/tcl"      if $config->{tcl};
 | 
			
		||||
	File::Find::find(
 | 
			
		||||
		{   wanted => sub {
 | 
			
		||||
				/^(.*--.*\.sql|.*\.control)\z/s
 | 
			
		||||
				  && push(@$pl_extension_files, $File::Find::name);
 | 
			
		||||
			  }
 | 
			
		||||
		},
 | 
			
		||||
		@pldirs);
 | 
			
		||||
	CopySetOfFiles('PL Extension files',
 | 
			
		||||
		$pl_extension_files, $target . '/share/extension/');
 | 
			
		||||
	if ($insttype ne "client")
 | 
			
		||||
	{
 | 
			
		||||
		CopySetOfFiles(
 | 
			
		||||
			'timezone names',
 | 
			
		||||
			[ glob('src\timezone\tznames\*.txt') ],
 | 
			
		||||
			$target . '/share/timezonesets/');
 | 
			
		||||
		CopyFiles(
 | 
			
		||||
			'timezone sets',
 | 
			
		||||
			$target . '/share/timezonesets/',
 | 
			
		||||
			'src/timezone/tznames/', 'Default', 'Australia', 'India');
 | 
			
		||||
		CopySetOfFiles(
 | 
			
		||||
			'BKI files',
 | 
			
		||||
			[ glob("src\\backend\\catalog\\postgres.*") ],
 | 
			
		||||
			$target . '/share/');
 | 
			
		||||
		CopySetOfFiles(
 | 
			
		||||
			'SQL files',
 | 
			
		||||
			[ glob("src\\backend\\catalog\\*.sql") ],
 | 
			
		||||
			$target . '/share/');
 | 
			
		||||
		CopyFiles(
 | 
			
		||||
			'Information schema data', $target . '/share/',
 | 
			
		||||
			'src/backend/catalog/',    'sql_features.txt');
 | 
			
		||||
		GenerateConversionScript($target);
 | 
			
		||||
		GenerateTimezoneFiles($target, $conf);
 | 
			
		||||
		GenerateTsearchFiles($target);
 | 
			
		||||
		CopySetOfFiles(
 | 
			
		||||
			'Stopword files',
 | 
			
		||||
			[ glob("src\\backend\\snowball\\stopwords\\*.stop") ],
 | 
			
		||||
			$target . '/share/tsearch_data/');
 | 
			
		||||
		CopySetOfFiles(
 | 
			
		||||
			'Dictionaries sample files',
 | 
			
		||||
			[ glob("src\\backend\\tsearch\\*_sample.*") ],
 | 
			
		||||
			$target . '/share/tsearch_data/');
 | 
			
		||||
 | 
			
		||||
		my $pl_extension_files = [];
 | 
			
		||||
		my @pldirs             = ('src/pl/plpgsql/src');
 | 
			
		||||
		push @pldirs, "src/pl/plperl"   if $config->{perl};
 | 
			
		||||
		push @pldirs, "src/pl/plpython" if $config->{python};
 | 
			
		||||
		push @pldirs, "src/pl/tcl"      if $config->{tcl};
 | 
			
		||||
		File::Find::find(
 | 
			
		||||
			{   wanted => sub {
 | 
			
		||||
					/^(.*--.*\.sql|.*\.control)\z/s
 | 
			
		||||
					  && push(@$pl_extension_files, $File::Find::name);
 | 
			
		||||
				  }
 | 
			
		||||
			},
 | 
			
		||||
			@pldirs);
 | 
			
		||||
		CopySetOfFiles('PL Extension files',
 | 
			
		||||
			$pl_extension_files, $target . '/share/extension/');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	GenerateNLSFiles($target, $config->{nls}, $majorver) if ($config->{nls});
 | 
			
		||||
 | 
			
		||||
@ -218,6 +241,10 @@ sub CopySolutionOutput
 | 
			
		||||
 | 
			
		||||
		$sln =~ s/$rem//;
 | 
			
		||||
 | 
			
		||||
		next
 | 
			
		||||
		  if ($insttype eq "client" && !grep { $_ eq $pf }
 | 
			
		||||
			@client_program_files);
 | 
			
		||||
 | 
			
		||||
		my $proj = read_file("$pf.$vcproj")
 | 
			
		||||
		  || croak "Could not open $pf.$vcproj\n";
 | 
			
		||||
		if ($vcproj eq 'vcproj' && $proj =~ qr{ConfigurationType="([^"]+)"})
 | 
			
		||||
@ -378,6 +405,9 @@ sub CopyContribFiles
 | 
			
		||||
	{
 | 
			
		||||
		next if ($d =~ /^\./);
 | 
			
		||||
		next unless (-f "contrib/$d/Makefile");
 | 
			
		||||
		next
 | 
			
		||||
		  if ($insttype eq "client" && !grep { $_ eq $d } @client_contribs);
 | 
			
		||||
 | 
			
		||||
		next if ($d eq "uuid-ossp" && !defined($config->{uuid}));
 | 
			
		||||
		next if ($d eq "sslinfo"   && !defined($config->{openssl}));
 | 
			
		||||
		next if ($d eq "xml2"      && !defined($config->{xml}));
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,7 @@ CALL bldenv.bat
 | 
			
		||||
del bldenv.bat
 | 
			
		||||
:nobuildenv
 | 
			
		||||
 | 
			
		||||
perl install.pl "%1"
 | 
			
		||||
perl install.pl "%1" %2
 | 
			
		||||
 | 
			
		||||
REM exit fix for pre-2003 shell especially if used on buildfarm
 | 
			
		||||
if "%XP_EXIT_FIX%" == "yes" exit %ERRORLEVEL%
 | 
			
		||||
 | 
			
		||||
@ -9,10 +9,12 @@ use warnings;
 | 
			
		||||
use Install qw(Install);
 | 
			
		||||
 | 
			
		||||
my $target = shift || Usage();
 | 
			
		||||
Install($target);
 | 
			
		||||
my $insttype = shift;
 | 
			
		||||
Install($target, $insttype);
 | 
			
		||||
 | 
			
		||||
sub Usage
 | 
			
		||||
{
 | 
			
		||||
	print "Usage: install.pl <targetdir>\n";
 | 
			
		||||
	print "Usage: install.pl <targetdir> [installtype]\n";
 | 
			
		||||
	print "installtype: client\n";
 | 
			
		||||
	exit(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -150,7 +150,7 @@ sub isolationcheck
 | 
			
		||||
{
 | 
			
		||||
	chdir "../isolation";
 | 
			
		||||
	copy("../../../$Config/isolationtester/isolationtester.exe",
 | 
			
		||||
		 "../../../$Config/pg_isolation_regress");
 | 
			
		||||
		"../../../$Config/pg_isolation_regress");
 | 
			
		||||
	my @args = (
 | 
			
		||||
		"../../../$Config/pg_isolation_regress/pg_isolation_regress",
 | 
			
		||||
		"--psqldir=../../../$Config/psql",
 | 
			
		||||
@ -252,7 +252,7 @@ sub upgradecheck
 | 
			
		||||
	(mkdir $tmp_root || die $!) unless -d $tmp_root;
 | 
			
		||||
	my $tmp_install = "$tmp_root/install";
 | 
			
		||||
	print "Setting up temp install\n\n";
 | 
			
		||||
	Install($tmp_install, $config);
 | 
			
		||||
	Install($tmp_install, "all", $config);
 | 
			
		||||
 | 
			
		||||
	# Install does a chdir, so change back after that
 | 
			
		||||
	chdir $cwd;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user