]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Enable MSVC conforming preprocessor
authorPeter Eisentraut <peter@eisentraut.org>
Tue, 1 Jul 2025 07:36:33 +0000 (09:36 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Tue, 1 Jul 2025 07:41:40 +0000 (09:41 +0200)
Switch MSVC to use the conforming preprocessor, using the
/Zc:preprocessor option.

This allows us to drop the alternative implementation of
VA_ARGS_NARGS() for the previous "traditional" preprocessor.

This also prepares the way for enabling C11 mode in the future, which
enables the conforming preprocessor by default.

This now requires Visual Studio 2019.  The installation documentation
is adjusted accordingly.

Discussion: https://www.postgresql.org/message-id/flat/01a69441-af54-4822-891b-ca28e05b215a%40eisentraut.org

doc/src/sgml/installation.sgml
meson.build
src/include/c.h

index de19f3ad92952df0b552ec5b88b38e7fbd299a91..cb53530cc4fa819a0ac8ab643a6f97ba21b6a00a 100644 (file)
@@ -3847,17 +3847,13 @@ make: *** [postgres] Error 1
    <para>
     Both 32-bit and 64-bit builds are possible with the Microsoft Compiler suite.
     32-bit PostgreSQL builds are possible with
-    <productname>Visual Studio 2015</productname> to
+    <productname>Visual Studio 2019</productname> to
     <productname>Visual Studio 2022</productname>,
     as well as standalone Windows SDK releases 10 and above.
     64-bit PostgreSQL builds are supported with
     <productname>Microsoft Windows SDK</productname> version 10 and above or
-    <productname>Visual Studio 2015</productname> and above.
+    <productname>Visual Studio 2019</productname> and above.
     <!--
-        For 2015 requirements:
-        https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2015-sysrequirements-vs
-        For 2017 requirements:
-        https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2017-system-requirements-vs
         For 2019 requirements:
         https://docs.microsoft.com/en-us/visualstudio/releases/2019/system-requirements
         For 2022 requirements:
index 36e168a1a2ace8c2b96ea857c5fe1fe1a2c4bded..91fb4756ed433299b9c6d76aa49151005d5bbf2d 100644 (file)
@@ -279,6 +279,10 @@ elif host_system == 'windows'
     # define before including <time.h> for getting localtime_r() etc. on MinGW
     cppflags += '-D_POSIX_C_SOURCE'
   endif
+  if cc.get_id() == 'msvc'
+    # required for VA_ARGS_NARGS() in c.h; requires VS 2019
+    cppflags += '/Zc:preprocessor'
+  endif
 
   export_file_format = 'win'
   export_file_suffix = 'def'
index 8cdc16a0f4a9b4d2a8638981a9e574405846cd3a..04fd23577dee7c246365e9c216e06df5ef8fb4b5 100644 (file)
  * pretty trivial: VA_ARGS_NARGS_() returns its 64th argument, and we set up
  * the call so that that is the appropriate one of the list of constants.
  * This idea is due to Laurent Deniau.
- *
- * MSVC has an implementation of __VA_ARGS__ that doesn't conform to the
- * standard unless you use the /Zc:preprocessor compiler flag, but that
- * isn't available before Visual Studio 2019.  For now, use a different
- * definition that also works on older compilers.
  */
-#ifdef _MSC_VER
-#define EXPAND(args) args
-#define VA_ARGS_NARGS(...) \
-       VA_ARGS_NARGS_ EXPAND((__VA_ARGS__, \
-                                  63,62,61,60,                   \
-                                  59,58,57,56,55,54,53,52,51,50, \
-                                  49,48,47,46,45,44,43,42,41,40, \
-                                  39,38,37,36,35,34,33,32,31,30, \
-                                  29,28,27,26,25,24,23,22,21,20, \
-                                  19,18,17,16,15,14,13,12,11,10, \
-                                  9, 8, 7, 6, 5, 4, 3, 2, 1, 0))
-#else
-
 #define VA_ARGS_NARGS(...) \
        VA_ARGS_NARGS_(__VA_ARGS__, \
                                   63,62,61,60,                   \
                                   29,28,27,26,25,24,23,22,21,20, \
                                   19,18,17,16,15,14,13,12,11,10, \
                                   9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
-#endif
 
 #define VA_ARGS_NARGS_( \
        _01,_02,_03,_04,_05,_06,_07,_08,_09,_10, \