From a7e5f7bf6890fdf14a6c6ecd0854ac3f5f308ccd Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Sun, 26 Jan 2014 17:03:13 -0500 Subject: [PATCH] Provide for client-only installs with MSVC. MauMau. --- doc/src/sgml/install-windows.sgml | 8 ++ src/tools/msvc/Install.pm | 134 ++++++++++++++++++------------ src/tools/msvc/install.bat | 2 +- src/tools/msvc/install.pl | 6 +- src/tools/msvc/vcregress.pl | 4 +- 5 files changed, 97 insertions(+), 57 deletions(-) diff --git a/doc/src/sgml/install-windows.sgml b/doc/src/sgml/install-windows.sgml index 28933b6cf5..71a5c2e963 100644 --- a/doc/src/sgml/install-windows.sgml +++ b/doc/src/sgml/install-windows.sgml @@ -408,6 +408,14 @@ $ENV{CONFIG}="Debug"; required to initialize and use the database, run the command: install c:\destination\directory + + + + + If you want to install only the client applications and + interface libraries, then you can use these commands: + +install c:\destination\directory client diff --git a/src/tools/msvc/Install.pm b/src/tools/msvc/Install.pm index a11c59b89d..55de9e55e6 100644 --- a/src/tools/msvc/Install.pm +++ b/src/tools/msvc/Install.pm @@ -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})); diff --git a/src/tools/msvc/install.bat b/src/tools/msvc/install.bat index c636cbd7f7..bed08f1e12 100644 --- a/src/tools/msvc/install.bat +++ b/src/tools/msvc/install.bat @@ -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% diff --git a/src/tools/msvc/install.pl b/src/tools/msvc/install.pl index f27a7b3f16..97e297e176 100755 --- a/src/tools/msvc/install.pl +++ b/src/tools/msvc/install.pl @@ -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 \n"; + print "Usage: install.pl [installtype]\n"; + print "installtype: client\n"; exit(1); } diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl index cbf6a4612b..447b4a1916 100644 --- a/src/tools/msvc/vcregress.pl +++ b/src/tools/msvc/vcregress.pl @@ -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; -- 2.40.0