summaryrefslogtreecommitdiffstats
path: root/src/tools/msvc/build.pl
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/tools/msvc/build.pl92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/tools/msvc/build.pl b/src/tools/msvc/build.pl
new file mode 100644
index 0000000..e5ce14d
--- /dev/null
+++ b/src/tools/msvc/build.pl
@@ -0,0 +1,92 @@
+# -*-perl-*- hey - emacs - this is a perl file
+
+# Copyright (c) 2021-2022, PostgreSQL Global Development Group
+
+#
+# Script that provides 'make' functionality for msvc builds.
+#
+# src/tools/msvc/build.pl
+#
+use strict;
+use warnings;
+
+use FindBin;
+use lib $FindBin::RealBin;
+
+use Cwd;
+
+use Mkvcbuild;
+
+sub usage
+{
+ die( "Usage: build.pl [ [ <configuration> ] <component> ]\n"
+ . "Options are case-insensitive.\n"
+ . " configuration: Release | Debug. This sets the configuration\n"
+ . " to build. Default is Release.\n"
+ . " component: name of component to build. An empty value means\n"
+ . " to build all components.\n");
+}
+
+chdir('../../..') if (-d '../msvc' && -d '../../../src');
+die 'Must run from root or msvc directory'
+ unless (-d 'src/tools/msvc' && -d 'src');
+
+usage() unless scalar(@ARGV) <= 2;
+
+# buildenv.pl is for specifying the build environment settings
+# it should contain lines like:
+# $ENV{PATH} = "c:/path/to/bison/bin;$ENV{PATH}";
+
+if (-e "src/tools/msvc/buildenv.pl")
+{
+ do "./src/tools/msvc/buildenv.pl";
+}
+elsif (-e "./buildenv.pl")
+{
+ do "./buildenv.pl";
+}
+
+# set up the project
+our $config;
+do "./src/tools/msvc/config_default.pl";
+do "./src/tools/msvc/config.pl" if (-f "src/tools/msvc/config.pl");
+
+my $vcver = Mkvcbuild::mkvcbuild($config);
+
+# check what sort of build we are doing
+my $bconf = $ENV{CONFIG} || "Release";
+my $msbflags = $ENV{MSBFLAGS} || "";
+my $buildwhat = $ARGV[1] || "";
+
+if (defined($ARGV[0]))
+{
+ if (uc($ARGV[0]) eq 'DEBUG')
+ {
+ $bconf = "Debug";
+ }
+ elsif (uc($ARGV[0]) ne "RELEASE")
+ {
+ $buildwhat = $ARGV[0] || "";
+ }
+}
+
+# ... and do it
+
+if ($buildwhat)
+{
+ system(
+ "msbuild $buildwhat.vcxproj /verbosity:normal $msbflags /p:Configuration=$bconf"
+ );
+}
+else
+{
+ system(
+ "msbuild pgsql.sln /verbosity:normal $msbflags /p:Configuration=$bconf"
+ );
+}
+
+# report status
+
+my $status = $? >> 8;
+
+exit $status;