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;