aboutsummaryrefslogtreecommitdiffstats
path: root/dln.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-06-27 00:20:21 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2022-06-27 01:08:46 +0900
commitfc8020c68eb9f640185a1bce322eba6605bde151 (patch)
treef9dabc4f90622bebc268f0824a7a4c5b01834e2d /dln.c
parent49d59215506a30c8a11766627f7af0cdfe0de9d4 (diff)
downloadruby-fc8020c68eb9f640185a1bce322eba6605bde151.tar.gz
[Bug #18879] Fix macOS version detections
macOS's AvailabilityMacros.h does not contain macros for future versions. If a version macro is not defined, consider only earlier versions to be targeted.
Diffstat (limited to 'dln.c')
-rw-r--r--dln.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/dln.c b/dln.c
index 6fa68289dd..a31cbf936f 100644
--- a/dln.c
+++ b/dln.c
@@ -294,8 +294,21 @@ dln_incompatible_library_p(void *handle, const char **libname)
COMPILER_WARNING_POP
#endif
-#if defined(MAC_OS_X_VERSION_MIN_REQUIRED) && \
- (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_11)
+#if !defined(MAC_OS_X_VERSION_MIN_REQUIRED)
+/* assume others than old Mac OS X have no problem */
+# define dln_disable_dlclose() false
+
+#elif MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_11
+/* targeting newer versions only */
+# define dln_disable_dlclose() false
+
+#elif !defined(MAC_OS_X_VERSION_10_11) || \
+ (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_11)
+/* targeting older versions only */
+# define dln_disable_dlclose() true
+
+#else
+/* support both versions, and check at runtime */
# include <sys/sysctl.h>
static bool
@@ -308,8 +321,6 @@ dln_disable_dlclose(void)
if (rev < MAC_OS_X_VERSION_10_11) return true;
return false;
}
-#else
-# define dln_disable_dlclose() false
#endif
#if defined(_WIN32) || defined(USE_DLN_DLOPEN)