From 5f6bedf514c9fa30ce5f3f3e88e95f77a2bde91c Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Wed, 22 Aug 2018 16:04:47 -0700 Subject: [PATCH v1 2/4] Remove test for VA_ARGS, implied by C99. Author: Andres Freund Discussion: https://postgr.es/m/97d4b165-192d-3605-749c-f614a0c4e783@2ndquadrant.com --- config/c-compiler.m4 | 19 -- configure | 34 +--- configure.in | 1 - doc/src/sgml/install-windows.sgml | 26 +-- src/include/pg_config.h.in | 3 - src/include/pg_config.h.win32 | 3 - src/include/utils/elog.h | 8 +- src/pl/plpython/plpy_elog.h | 4 - src/tools/msvc/MSBuildProject.pm | 76 +------- src/tools/msvc/README | 12 +- src/tools/msvc/Solution.pm | 102 ---------- src/tools/msvc/VCBuildProject.pm | 309 ------------------------------ src/tools/msvc/VSObjectFactory.pm | 37 +--- 13 files changed, 27 insertions(+), 607 deletions(-) delete mode 100644 src/tools/msvc/VCBuildProject.pm diff --git a/config/c-compiler.m4 b/config/c-compiler.m4 index 67675a31bb6..eedaf12d69c 100644 --- a/config/c-compiler.m4 +++ b/config/c-compiler.m4 @@ -415,25 +415,6 @@ fi])# PGAC_C_COMPUTED_GOTO -# PGAC_C_VA_ARGS -# -------------- -# Check if the C compiler understands C99-style variadic macros, -# and define HAVE__VA_ARGS if so. -AC_DEFUN([PGAC_C_VA_ARGS], -[AC_CACHE_CHECK(for __VA_ARGS__, pgac_cv__va_args, -[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ], -[#define debug(...) fprintf(stderr, __VA_ARGS__) -debug("%s", "blarg"); -])], -[pgac_cv__va_args=yes], -[pgac_cv__va_args=no])]) -if test x"$pgac_cv__va_args" = xyes ; then -AC_DEFINE(HAVE__VA_ARGS, 1, - [Define to 1 if your compiler understands __VA_ARGS__ in macros.]) -fi])# PGAC_C_VA_ARGS - - - # PGAC_PROG_VARCC_VARFLAGS_OPT # ----------------------- # Given a compiler, variable name and a string, check if the compiler diff --git a/configure b/configure index dd439ddd2f6..af090ffb08f 100755 --- a/configure +++ b/configure @@ -13962,38 +13962,6 @@ if test x"$pgac_cv_computed_goto" = xyes ; then $as_echo "#define HAVE_COMPUTED_GOTO 1" >>confdefs.h -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __VA_ARGS__" >&5 -$as_echo_n "checking for __VA_ARGS__... " >&6; } -if ${pgac_cv__va_args+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -#define debug(...) fprintf(stderr, __VA_ARGS__) -debug("%s", "blarg"); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - pgac_cv__va_args=yes -else - pgac_cv__va_args=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv__va_args" >&5 -$as_echo "$pgac_cv__va_args" >&6; } -if test x"$pgac_cv__va_args" = xyes ; then - -$as_echo "#define HAVE__VA_ARGS 1" >>confdefs.h - fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } @@ -19635,7 +19603,7 @@ PostgreSQL config.status 12devel configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." diff --git a/configure.in b/configure.in index 5869ab7c5bc..3280afa0dab 100644 --- a/configure.in +++ b/configure.in @@ -1434,7 +1434,6 @@ PGAC_C_BUILTIN_BSWAP64 PGAC_C_BUILTIN_CONSTANT_P PGAC_C_BUILTIN_UNREACHABLE PGAC_C_COMPUTED_GOTO -PGAC_C_VA_ARGS PGAC_STRUCT_TIMEZONE PGAC_UNION_SEMUN PGAC_STRUCT_SOCKADDR_UN diff --git a/doc/src/sgml/install-windows.sgml b/doc/src/sgml/install-windows.sgml index 9597bc35a14..22a2ffd55ee 100644 --- a/doc/src/sgml/install-windows.sgml +++ b/doc/src/sgml/install-windows.sgml @@ -22,7 +22,7 @@ Microsoft tools is to install Visual Studio Express 2017 for Windows Desktop and use the included compiler. It is also possible to build with the full - Microsoft Visual C++ 2005 to 2017. + Microsoft Visual C++ 2013 to 2017. In some cases that requires the installation of the Windows SDK in addition to the compiler. @@ -77,20 +77,24 @@ Both 32-bit and 64-bit builds are possible with the Microsoft Compiler suite. 32-bit PostgreSQL builds are possible with - Visual Studio 2005 to + Visual Studio 2013 to Visual Studio 2017 (including Express editions), as well as standalone Windows SDK releases 6.0 to 8.1. 64-bit PostgreSQL builds are supported with Microsoft Windows SDK version 6.0a to 8.1 or - Visual Studio 2008 and above. Compilation - is supported down to Windows XP and - Windows Server 2003 when building with - Visual Studio 2005 to - Visual Studio 2013. Building with - Visual Studio 2015 is supported down to - Windows Vista and Windows Server 2008. - Building with Visual Studio 2017 is supported - down to Windows 7 SP1 and Windows Server 2008 R2 SP1. + Visual Studio 2013 and above. Compilation + is supported down to Windows 7 and + Windows Server 2008 R2 SP1 when building with + Visual Studio 2013 to + Visual Studio 2017. + diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index 827574ee40d..37649d77d67 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -754,9 +754,6 @@ /* Define to 1 if your compiler understands _Static_assert. */ #undef HAVE__STATIC_ASSERT -/* Define to 1 if your compiler understands __VA_ARGS__ in macros. */ -#undef HAVE__VA_ARGS - /* Define to 1 if you have the `__strtoll' function. */ #undef HAVE___STRTOLL diff --git a/src/include/pg_config.h.win32 b/src/include/pg_config.h.win32 index 46ce49def2f..4e2bd3c1352 100644 --- a/src/include/pg_config.h.win32 +++ b/src/include/pg_config.h.win32 @@ -597,9 +597,6 @@ /* Define to 1 if your compiler understands _Static_assert. */ /* #undef HAVE__STATIC_ASSERT */ -/* Define to 1 if your compiler understands __VA_ARGS__ in macros. */ -#define HAVE__VA_ARGS 1 - /* Define to the appropriate printf length modifier for 64-bit ints. */ #define INT64_MODIFIER "ll" diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h index 4350b120aab..33c6b53e278 100644 --- a/src/include/utils/elog.h +++ b/src/include/utils/elog.h @@ -207,9 +207,8 @@ extern int getinternalerrposition(void); * elog(ERROR, "portal \"%s\" not found", stmt->portalname); *---------- */ -#ifdef HAVE__VA_ARGS /* - * If we have variadic macros, we can give the compiler a hint about the + * Using variadic macros, we can give the compiler a hint about the * call not returning when elevel >= ERROR. See comments for ereport(). * Note that historically elog() has called elog_start (which saves errno) * before evaluating "elevel", so we preserve that behavior here. @@ -236,11 +235,6 @@ extern int getinternalerrposition(void); } \ } while(0) #endif /* HAVE__BUILTIN_CONSTANT_P */ -#else /* !HAVE__VA_ARGS */ -#define elog \ - elog_start(__FILE__, __LINE__, PG_FUNCNAME_MACRO), \ - elog_finish -#endif /* HAVE__VA_ARGS */ extern void elog_start(const char *filename, int lineno, const char *funcname); extern void elog_finish(int elevel, const char *fmt,...) pg_attribute_printf(2, 3); diff --git a/src/pl/plpython/plpy_elog.h b/src/pl/plpython/plpy_elog.h index e4b30c3cca1..b56ac412476 100644 --- a/src/pl/plpython/plpy_elog.h +++ b/src/pl/plpython/plpy_elog.h @@ -15,7 +15,6 @@ extern PyObject *PLy_exc_spi_error; * * See comments at elog() about the compiler hinting. */ -#ifdef HAVE__VA_ARGS #ifdef HAVE__BUILTIN_CONSTANT_P #define PLy_elog(elevel, ...) \ do { \ @@ -32,9 +31,6 @@ extern PyObject *PLy_exc_spi_error; pg_unreachable(); \ } while(0) #endif /* HAVE__BUILTIN_CONSTANT_P */ -#else /* !HAVE__VA_ARGS */ -#define PLy_elog PLy_elog_impl -#endif /* HAVE__VA_ARGS */ extern void PLy_elog_impl(int elevel, const char *fmt,...) pg_attribute_printf(2, 3); diff --git a/src/tools/msvc/MSBuildProject.pm b/src/tools/msvc/MSBuildProject.pm index dd6a610e5b2..149213378cf 100644 --- a/src/tools/msvc/MSBuildProject.pm +++ b/src/tools/msvc/MSBuildProject.pm @@ -257,6 +257,7 @@ sub WriteConfigurationPropertyGroup false MultiByte $p->{wholeopt} + $self->{PlatformToolset} EOF return; @@ -391,75 +392,6 @@ EOF return; } -package VC2010Project; - -# -# Package that encapsulates a Visual C++ 2010 project file -# - -use strict; -use warnings; -use base qw(MSBuildProject); - -no warnings qw(redefine); ## no critic - -sub new -{ - my $classname = shift; - my $self = $classname->SUPER::_new(@_); - bless($self, $classname); - - $self->{vcver} = '10.00'; - - return $self; -} - -package VC2012Project; - -# -# Package that encapsulates a Visual C++ 2012 project file -# - -use strict; -use warnings; -use base qw(MSBuildProject); - -no warnings qw(redefine); ## no critic - -sub new -{ - my $classname = shift; - my $self = $classname->SUPER::_new(@_); - bless($self, $classname); - - $self->{vcver} = '11.00'; - $self->{PlatformToolset} = 'v110'; - - return $self; -} - -# This override adds the element -# to the PropertyGroup labeled "Configuration" -sub WriteConfigurationPropertyGroup -{ - my ($self, $f, $cfgname, $p) = @_; - my $cfgtype = - ($self->{type} eq "exe") - ? 'Application' - : ($self->{type} eq "dll" ? 'DynamicLibrary' : 'StaticLibrary'); - - print $f < - $cfgtype - false - MultiByte - $p->{wholeopt} - $self->{PlatformToolset} - -EOF - return; -} - package VC2013Project; # @@ -468,7 +400,7 @@ package VC2013Project; use strict; use warnings; -use base qw(VC2012Project); +use base qw(MSBuildProject); no warnings qw(redefine); ## no critic @@ -493,7 +425,7 @@ package VC2015Project; use strict; use warnings; -use base qw(VC2012Project); +use base qw(MSBuildProject); no warnings qw(redefine); ## no critic @@ -518,7 +450,7 @@ package VC2017Project; use strict; use warnings; -use base qw(VC2012Project); +use base qw(MSBuildProject); no warnings qw(redefine); ## no critic diff --git a/src/tools/msvc/README b/src/tools/msvc/README index 2827d76b2d1..4ab81d3402f 100644 --- a/src/tools/msvc/README +++ b/src/tools/msvc/README @@ -4,7 +4,7 @@ MSVC build ========== This directory contains the tools required to build PostgreSQL using -Microsoft Visual Studio 2005 - 2017. This builds the whole backend, not just +Microsoft Visual Studio 2013 - 2017. This builds the whole backend, not just the libpq frontend library. For more information, see the documentation chapter "Installation on Windows" and the description below. @@ -73,8 +73,6 @@ Project.pm module containing the common code to generate the common interface of all project file generators Solution.pm module containing the code to generate the Visual Studio solution files. -VCBuildProject.pm module containing the code to generate VCBuild based - project files (Visual Studio 2005/2008) VSObjectFactory.pm factory module providing the code to create the appropriate project/solution files for the current environment @@ -90,13 +88,11 @@ config_default.pl to create the configuration arguments. These configuration arguments are passed over to Mkvcbuild::mkvcbuild (Mkvcbuild.pm) which creates the Visual Studio project and solution files. It does this by using VSObjectFactory::CreateSolution to create an object -implementing the Solution interface (this could be either a VS2005Solution, -a VS2008Solution, a VS2010Solution or a VS2012Solution or a VS2013Solution, +implementing the Solution interface (this could be either a VS2013Solution, or a VS2015Solution or a VS2017Solution, all in Solution.pm, depending on the user's build environment) and adding objects implementing the corresponding -Project interface (VC2005Project or VC2008Project from VCBuildProject.pm or -VC2010Project or VC2012Project or VC2013Project or VC2015Project or VC2017Project -from MSBuildProject.pm) to it. +Project interface (VC2013Project or VC2015Project or VC2017Project from +MSBuildProject.pm) to it. When Solution::Save is called, the implementations of Solution and Project save their content in the appropriate format. The final step of starting the appropriate build program (msbuild) is diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index 78db247b291..7d7ce8b0312 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -760,108 +760,6 @@ sub GetFakeConfigure return $cfg; } -package VS2005Solution; - -# -# Package that encapsulates a Visual Studio 2005 solution file -# - -use strict; -use warnings; -use base qw(Solution); - -no warnings qw(redefine); ## no critic - -sub new -{ - my $classname = shift; - my $self = $classname->SUPER::_new(@_); - bless($self, $classname); - - $self->{solutionFileVersion} = '9.00'; - $self->{vcver} = '8.00'; - $self->{visualStudioName} = 'Visual Studio 2005'; - - return $self; -} - -package VS2008Solution; - -# -# Package that encapsulates a Visual Studio 2008 solution file -# - -use strict; -use warnings; -use base qw(Solution); - -no warnings qw(redefine); ## no critic - -sub new -{ - my $classname = shift; - my $self = $classname->SUPER::_new(@_); - bless($self, $classname); - - $self->{solutionFileVersion} = '10.00'; - $self->{vcver} = '9.00'; - $self->{visualStudioName} = 'Visual Studio 2008'; - - return $self; -} - -package VS2010Solution; - -# -# Package that encapsulates a Visual Studio 2010 solution file -# - -use Carp; -use strict; -use warnings; -use base qw(Solution); - -no warnings qw(redefine); ## no critic - -sub new -{ - my $classname = shift; - my $self = $classname->SUPER::_new(@_); - bless($self, $classname); - - $self->{solutionFileVersion} = '11.00'; - $self->{vcver} = '10.00'; - $self->{visualStudioName} = 'Visual Studio 2010'; - - return $self; -} - -package VS2012Solution; - -# -# Package that encapsulates a Visual Studio 2012 solution file -# - -use Carp; -use strict; -use warnings; -use base qw(Solution); - -no warnings qw(redefine); ## no critic - -sub new -{ - my $classname = shift; - my $self = $classname->SUPER::_new(@_); - bless($self, $classname); - - $self->{solutionFileVersion} = '12.00'; - $self->{vcver} = '11.00'; - $self->{visualStudioName} = 'Visual Studio 2012'; - - return $self; -} - package VS2013Solution; # diff --git a/src/tools/msvc/VCBuildProject.pm b/src/tools/msvc/VCBuildProject.pm deleted file mode 100644 index 6cdf822a637..00000000000 --- a/src/tools/msvc/VCBuildProject.pm +++ /dev/null @@ -1,309 +0,0 @@ -package VCBuildProject; - -# -# Package that encapsulates a VCBuild (Visual C++ 2005/2008) project file -# -# src/tools/msvc/VCBuildProject.pm -# - -use Carp; -use strict; -use warnings; -use base qw(Project); - -no warnings qw(redefine); ## no critic - -sub _new -{ - my $classname = shift; - my $self = $classname->SUPER::_new(@_); - bless($self, $classname); - - $self->{filenameExtension} = '.vcproj'; - - return $self; -} - -sub WriteHeader -{ - my ($self, $f) = @_; - - print $f < - - - -EOF - - $self->WriteConfiguration( - $f, 'Debug', - { - defs => "_DEBUG;DEBUG=1", - wholeopt => 0, - opt => 0, - strpool => 'false', - runtime => 3 - }); - $self->WriteConfiguration( - $f, - 'Release', - { - defs => "", - wholeopt => 0, - opt => 3, - strpool => 'true', - runtime => 2 - }); - print $f < -EOF - $self->WriteReferences($f); - return; -} - -sub WriteFiles -{ - my ($self, $f) = @_; - print $f < -EOF - my @dirstack = (); - my %uniquefiles; - foreach my $fileNameWithPath (sort keys %{ $self->{files} }) - { - confess "Bad format filename '$fileNameWithPath'\n" - unless ($fileNameWithPath =~ m!^(.*)/([^/]+)\.(c|cpp|y|l|rc)$!); - my $dir = $1; - my $file = $2; - - # Walk backwards down the directory stack and close any dirs - # we're done with. - while ($#dirstack >= 0) - { - if (join('/', @dirstack) eq - substr($dir, 0, length(join('/', @dirstack)))) - { - last if (length($dir) == length(join('/', @dirstack))); - last - if (substr($dir, length(join('/', @dirstack)), 1) eq '/'); - } - print $f ' ' x $#dirstack . " \n"; - pop @dirstack; - } - - # Now walk forwards and create whatever directories are needed - while (join('/', @dirstack) ne $dir) - { - my $left = substr($dir, length(join('/', @dirstack))); - $left =~ s/^\///; - my @pieces = split /\//, $left; - push @dirstack, $pieces[0]; - print $f ' ' x $#dirstack - . " \n"; - } - - # VC builds do not like file paths with forward slashes. - my $fileNameWithPathFormatted = $fileNameWithPath; - $fileNameWithPathFormatted =~ s/\//\\/g; - - print $f ' ' x $#dirstack - . " ' - . $self->GenerateCustomTool( - 'Running bison on ' . $fileNameWithPath, - "perl src/tools/msvc/pgbison.pl $fileNameWithPath", $of) - . '' . "\n"; - } - elsif ($fileNameWithPath =~ /\.l$/) - { - my $of = $fileNameWithPath; - $of =~ s/\.l$/.c/; - print $f '>' - . $self->GenerateCustomTool( - 'Running flex on ' . $fileNameWithPath, - "perl src/tools/msvc/pgflex.pl $fileNameWithPath", $of) - . '' . "\n"; - } - elsif (defined($uniquefiles{$file})) - { - - # File already exists, so fake a new name - my $obj = $dir; - $obj =~ s!/!_!g; - print $f - ">{platform}\">{name}\\$obj" - . "_$file.obj\" />{platform}\">{name}\\$obj" - . "_$file.obj\" />\n"; - } - else - { - $uniquefiles{$file} = 1; - print $f " />\n"; - } - } - while ($#dirstack >= 0) - { - print $f ' ' x $#dirstack . " \n"; - pop @dirstack; - } - print $f < -EOF - return; -} - -sub Footer -{ - my ($self, $f) = @_; - - print $f < - -EOF - return; -} - -sub WriteConfiguration -{ - my ($self, $f, $cfgname, $p) = @_; - my $cfgtype = - ($self->{type} eq "exe") ? 1 : ($self->{type} eq "dll" ? 2 : 4); - my $libs = $self->GetAdditionalLinkerDependencies($cfgname, ' '); - - my $targetmachine = $self->{platform} eq 'Win32' ? 1 : 17; - - print $f < - - {disablelinkerwarnings}) - { - print $f - "\t\tAdditionalOptions=\"/ignore:$self->{disablelinkerwarnings}\"\n"; - } - if ($self->{implib}) - { - my $l = $self->{implib}; - $l =~ s/__CFGNAME__/$cfgname/g; - print $f "\t\tImportLibrary=\"$l\"\n"; - } - if ($self->{def}) - { - my $d = $self->{def}; - $d =~ s/__CFGNAME__/$cfgname/g; - print $f "\t\tModuleDefinitionFile=\"$d\"\n"; - } - - print $f "\t/>\n"; - print $f - "\t{name}\\$self->{name}.lib\" IgnoreDefaultLibraryNames=\"libc\" />\n"; - print $f - "\t\n"; - if ($self->{builddef}) - { - print $f - "\t{name} $self->{platform}\" />\n"; - } - print $f < -EOF - return; -} - -sub WriteReferences -{ - my ($self, $f) = @_; - print $f " \n"; - foreach my $ref (@{ $self->{references} }) - { - print $f - " {guid}\" Name=\"$ref->{name}\" />\n"; - } - print $f " \n"; - return; -} - -sub GenerateCustomTool -{ - my ($self, $desc, $tool, $output, $cfg) = @_; - if (!defined($cfg)) - { - return $self->GenerateCustomTool($desc, $tool, $output, 'Debug') - . $self->GenerateCustomTool($desc, $tool, $output, 'Release'); - } - return - "{platform}\">"; -} - -package VC2005Project; - -# -# Package that encapsulates a Visual C++ 2005 project file -# - -use strict; -use warnings; -use base qw(VCBuildProject); - -no warnings qw(redefine); ## no critic - -sub new -{ - my $classname = shift; - my $self = $classname->SUPER::_new(@_); - bless($self, $classname); - - $self->{vcver} = '8.00'; - - return $self; -} - -package VC2008Project; - -# -# Package that encapsulates a Visual C++ 2008 project file -# - -use strict; -use warnings; -use base qw(VCBuildProject); - -no warnings qw(redefine); ## no critic - -sub new -{ - my $classname = shift; - my $self = $classname->SUPER::_new(@_); - bless($self, $classname); - - $self->{vcver} = '9.00'; - - return $self; -} - -1; diff --git a/src/tools/msvc/VSObjectFactory.pm b/src/tools/msvc/VSObjectFactory.pm index 92a4fb6841f..1a94cd866ee 100644 --- a/src/tools/msvc/VSObjectFactory.pm +++ b/src/tools/msvc/VSObjectFactory.pm @@ -13,7 +13,6 @@ use warnings; use Exporter; use Project; use Solution; -use VCBuildProject; use MSBuildProject; our (@ISA, @EXPORT); @@ -31,23 +30,7 @@ sub CreateSolution $visualStudioVersion = DetermineVisualStudioVersion(); } - if ($visualStudioVersion eq '8.00') - { - return new VS2005Solution(@_); - } - elsif ($visualStudioVersion eq '9.00') - { - return new VS2008Solution(@_); - } - elsif ($visualStudioVersion eq '10.00') - { - return new VS2010Solution(@_); - } - elsif ($visualStudioVersion eq '11.00') - { - return new VS2012Solution(@_); - } - elsif ($visualStudioVersion eq '12.00') + if ($visualStudioVersion eq '12.00') { return new VS2013Solution(@_); } @@ -78,23 +61,7 @@ sub CreateProject $visualStudioVersion = DetermineVisualStudioVersion(); } - if ($visualStudioVersion eq '8.00') - { - return new VC2005Project(@_); - } - elsif ($visualStudioVersion eq '9.00') - { - return new VC2008Project(@_); - } - elsif ($visualStudioVersion eq '10.00') - { - return new VC2010Project(@_); - } - elsif ($visualStudioVersion eq '11.00') - { - return new VC2012Project(@_); - } - elsif ($visualStudioVersion eq '12.00') + if ($visualStudioVersion eq '12.00') { return new VC2013Project(@_); } -- 2.18.0.rc2.dirty