summaryrefslogtreecommitdiff
path: root/include/ruby/internal/config.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/ruby/internal/config.h')
-rw-r--r--include/ruby/internal/config.h30
1 files changed, 20 insertions, 10 deletions
diff --git a/include/ruby/internal/config.h b/include/ruby/internal/config.h
index d51c7df0be..34862ded6e 100644
--- a/include/ruby/internal/config.h
+++ b/include/ruby/internal/config.h
@@ -1,7 +1,6 @@
#ifndef RBIMPL_CONFIG_H /*-*-C++-*-vi:se ft=cpp:*/
#define RBIMPL_CONFIG_H
/**
- * @file
* @author Ruby developers <ruby-core@ruby-lang.org>
* @copyright This file is a part of the programming language Ruby.
* Permission is hereby granted, to either redistribute and/or
@@ -17,7 +16,7 @@
* recursively included from extension libraries written in C++.
* Do not expect for instance `__VA_ARGS__` is always available.
* We assume C99 for ruby itself but we don't assume languages of
- * extension libraries. They could be written in C++98.
+ * extension libraries. They could be written in C++98.
* @brief Thin wrapper to ruby/config.h
*/
#include "ruby/config.h"
@@ -28,18 +27,21 @@
#include "ruby/internal/compiler_since.h"
+#undef HAVE_PROTOTYPES
+#define HAVE_PROTOTYPES 1
+
+#undef HAVE_STDARG_PROTOTYPES
+#define HAVE_STDARG_PROTOTYPES 1
+
+#undef TOKEN_PASTE
+#define TOKEN_PASTE(x,y) x##y
+
#if defined(__cplusplus)
#/* __builtin_choose_expr and __builtin_types_compatible aren't available
# * on C++. See https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html */
# undef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P
# undef HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P
-# undef HAVE_PROTOTYPES
-# define HAVE_PROTOTYPES 1
-
-# undef HAVE_STDARG_PROTOTYPES
-# define HAVE_STDARG_PROTOTYPES 1
-
/* HAVE_VA_ARGS_MACRO is for C. C++ situations might be different. */
# undef HAVE_VA_ARGS_MACRO
# if __cplusplus >= 201103L
@@ -48,7 +50,7 @@
# define HAVE_VA_ARGS_MACRO
# elif defined(__INTEL_CXX11_MODE__)
# define HAVE_VA_ARGS_MACRO
-# elif RBIMPL_COMPILER_SINCE(MSVC, 16, 0, 0)
+# elif RBIMPL_COMPILER_IS(MSVC)
# define HAVE_VA_ARGS_MACRO
# else
# /* NG, not known. */
@@ -68,7 +70,7 @@
#endif
#if defined(__SUNPRO_CC)
-# /* Oracle Developer Studio 12.5: GCC compatiblity guide says it supports
+# /* Oracle Developer Studio 12.5: GCC compatibility guide says it supports
# * statement expressions. But to our knowledge they support the extension
# * only for C and not for C++. Prove me wrong. Am happy to support them if
# * there is a way. */
@@ -111,6 +113,8 @@
# define UNALIGNED_WORD_ACCESS 1
#elif defined(__powerpc64__)
# define UNALIGNED_WORD_ACCESS 1
+#elif defined(__POWERPC__) // __POWERPC__ is defined for ppc and ppc64 on Darwin
+# define UNALIGNED_WORD_ACCESS 1
#elif defined(__aarch64__)
# define UNALIGNED_WORD_ACCESS 1
#elif defined(__mc68020__)
@@ -123,6 +127,12 @@
#if ! defined(HAVE_VA_ARGS_MACRO)
# undef HAVE___VA_OPT__
+#elif defined(__cplusplus)
+# if __cplusplus > 201703L
+# define HAVE___VA_OPT__
+# else
+# undef HAVE___VA_OPT__
+# endif
#else
# /* Idea taken from: https://stackoverflow.com/a/48045656 */
# define RBIMPL_TEST3(q, w, e, ...) e