]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Allow running src/tools/msvc/mkvcbuild.pl under not Windows
authorPeter Eisentraut <peter@eisentraut.org>
Fri, 21 Feb 2020 19:50:56 +0000 (20:50 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Fri, 21 Feb 2020 19:57:43 +0000 (20:57 +0100)
This to allow verifying the MSVC build file generation without having
to have Windows.

To do this, we avoid Windows-specific Perl modules and don't run the
"cl" compiler or "nmake".  The resulting build files won't actually be
completely correct, but it's useful enough.

Reviewed-by: Michael Paquier <michael@paquier.xyz>
Reviewed-by: Julien Rouhaud <rjuju123@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/d73b2c7b-f081-8357-8422-7564d55f1aac%402ndquadrant.com

src/tools/msvc/Mkvcbuild.pm
src/tools/msvc/Project.pm
src/tools/msvc/Solution.pm
src/tools/msvc/VSObjectFactory.pm

index 2e87d81172d0142c25170c2ce121167cb5852949..d6fc1b7d5422dc74e0c1ca4e7227b95d5b43f993 100644 (file)
@@ -6,7 +6,7 @@ package Mkvcbuild;
 # src/tools/msvc/Mkvcbuild.pm
 #
 use Carp;
-use Win32;
+use if ($^O eq "MSWin32"), 'Win32';
 use strict;
 use warnings;
 use Project;
@@ -648,9 +648,11 @@ sub mkvcbuild
                                        # 'Can't spawn "conftest.exe"'; suppress that.
                                        no warnings;
 
+                                       no strict 'subs';
+
                                        # Disable error dialog boxes like we do in the postmaster.
                                        # Here, we run code that triggers relevant errors.
-                                       use Win32API::File qw(SetErrorMode :SEM_);
+                                       use if ($^O eq "MSWin32"), 'Win32API::File', qw(SetErrorMode :SEM_);
                                        my $oldmode = SetErrorMode(
                                                SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
                                        system(".\\$exe");
index 7d25704e2c67272e8fc9129ab065460362516169..d90a996d46728b4152857f8bce4075af80f979d1 100644 (file)
@@ -22,7 +22,7 @@ sub _new
        my $self = {
                name                  => $name,
                type                  => $type,
-               guid                  => Win32::GuidGen(),
+               guid                  => $^O eq "MSWin32" ? Win32::GuidGen() : 'FAKE',
                files                 => {},
                references            => [],
                libraries             => [],
index a6b8b92c1822d22914c13982d383aa4f60dcb0bb..39470a869ed2a9fd262e37f822e2198a3cc2653f 100644 (file)
@@ -60,10 +60,17 @@ sub DeterminePlatform
 {
        my $self = shift;
 
-       # Examine CL help output to determine if we are in 32 or 64-bit mode.
-       my $output = `cl /? 2>&1`;
-       $? >> 8 == 0 or die "cl command not found";
-       $self->{platform} = ($output =~ /^\/favor:<.+AMD64/m) ? 'x64' : 'Win32';
+       if ($^O eq "MSWin32")
+       {
+               # Examine CL help output to determine if we are in 32 or 64-bit mode.
+               my $output = `cl /? 2>&1`;
+               $? >> 8 == 0 or die "cl command not found";
+               $self->{platform} = ($output =~ /^\/favor:<.+AMD64/m) ? 'x64' : 'Win32';
+       }
+       else
+       {
+               $self->{platform} = 'FAKE';
+       }
        print "Detected hardware platform: $self->{platform}\n";
        return;
 }
@@ -1061,7 +1068,7 @@ EOF
                }
                if ($fld ne "")
                {
-                       $flduid{$fld} = Win32::GuidGen();
+                       $flduid{$fld} = $^O eq "MSWin32" ? Win32::GuidGen() : 'FAKE';
                        print $sln <<EOF;
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "$fld", "$fld", "$flduid{$fld}"
 EndProject
index 610dc612866937dd1637728149a301f3062ce7bc..e6983b241fb6e550715309b742e7136e91a35157 100644 (file)
@@ -111,21 +111,28 @@ sub CreateProject
 
 sub DetermineVisualStudioVersion
 {
+       if ($^O eq "MSWin32")
+       {
+               # To determine version of Visual Studio we use nmake as it has
+               # existed for a long time and still exists in current Visual
+               # Studio versions.
+               my $output = `nmake /? 2>&1`;
+               $? >> 8 == 0
+                 or croak
+                 "Unable to determine Visual Studio version: The nmake command wasn't found.";
+               if ($output =~ /(\d+)\.(\d+)\.\d+(\.\d+)?$/m)
+               {
+                       return _GetVisualStudioVersion($1, $2);
+               }
 
-       # To determine version of Visual Studio we use nmake as it has
-       # existed for a long time and still exists in current Visual
-       # Studio versions.
-       my $output = `nmake /? 2>&1`;
-       $? >> 8 == 0
-         or croak
-         "Unable to determine Visual Studio version: The nmake command wasn't found.";
-       if ($output =~ /(\d+)\.(\d+)\.\d+(\.\d+)?$/m)
+               croak
+                 "Unable to determine Visual Studio version: The nmake version could not be determined.";
+       }
+       else
        {
-               return _GetVisualStudioVersion($1, $2);
+               # fake version
+               return '16.00';
        }
-
-       croak
-         "Unable to determine Visual Studio version: The nmake version could not be determined.";
 }
 
 sub _GetVisualStudioVersion