add WITH_MKSTEMP macro because the previous feature test did not always work

Tue, 23 Dec 2025 14:31:56 +0100

author
Mike Becker <universe@uap-core.de>
date
Tue, 23 Dec 2025 14:31:56 +0100
changeset 1661
a389bf17eaaa
parent 1660
802ab24f67aa
child 1662
527ac061b247

add WITH_MKSTEMP macro because the previous feature test did not always work

configure file | annotate | diff | comparison | revisions
make/project.xml file | annotate | diff | comparison | revisions
make/test_mkstemp.c file | annotate | diff | comparison | revisions
tests/test_properties.c file | annotate | diff | comparison | revisions
--- a/configure	Tue Dec 23 10:14:13 2025 +0100
+++ b/configure	Tue Dec 23 14:31:56 2025 +0100
@@ -160,6 +160,7 @@
   --disable-cxx-tests     the check-cxx makefile target
   --disable-szmul-builtin use custom implementation, instead
   --disable-memrchr
+  --disable-mkstemp
   --disable-qsort_r
 
 __EOF__
@@ -283,6 +284,7 @@
 FEATURE_CXX_TESTS=auto
 FEATURE_SZMUL_BUILTIN=auto
 FEATURE_MEMRCHR=auto
+FEATURE_MKSTEMP=auto
 FEATURE_QSORT_R=auto
 
 #
@@ -315,6 +317,8 @@
         "--disable-szmul-builtin") unset FEATURE_SZMUL_BUILTIN ;;
         "--enable-memrchr") FEATURE_MEMRCHR=on ;;
         "--disable-memrchr") unset FEATURE_MEMRCHR ;;
+        "--enable-mkstemp") FEATURE_MKSTEMP=on ;;
+        "--disable-mkstemp") unset FEATURE_MKSTEMP ;;
         "--enable-qsort_r") FEATURE_QSORT_R=on ;;
         "--disable-qsort_r") unset FEATURE_QSORT_R ;;
         "-"*) echo "unknown option: $ARG"; abort_configure ;;
@@ -498,6 +502,27 @@
     dep_checked_coverage=1
     return 0
 }
+dependency_error_mkstemp()
+{
+    print_check_msg "$dep_checked_mkstemp" "checking for mkstemp... "
+    # dependency mkstemp
+    while true
+    do
+        if $TOOLCHAIN_CC $CFLAGS $LDFLAGS -o /dev/null make/test_mkstemp.c > /dev/null 2>&1 ; then
+            :
+        else
+            break
+        fi
+        TEMP_CFLAGS="$TEMP_CFLAGS -DWITH_MKSTEMP"
+        print_check_msg "$dep_checked_mkstemp" "yes\n"
+        dep_checked_mkstemp=1
+        return 1
+    done
+
+    print_check_msg "$dep_checked_mkstemp" "no\n"
+    dep_checked_mkstemp=1
+    return 0
+}
 dependency_error_asan()
 {
     print_check_msg "$dep_checked_asan" "checking for asan... "
@@ -935,6 +960,26 @@
 else
     :
 fi
+if [ -n "$FEATURE_MKSTEMP" ]; then
+    # check dependency
+    if dependency_error_mkstemp ; then
+        # "auto" features can fail and are just disabled in this case
+        if [ "$FEATURE_MKSTEMP" = "auto" ]; then
+            DISABLE_FEATURE_MKSTEMP=1
+        else
+            DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED mkstemp "
+            ERROR=1
+        fi
+    fi
+    if [ -n "$DISABLE_FEATURE_MKSTEMP" ]; then
+        unset FEATURE_MKSTEMP
+    fi
+fi
+if [ -n "$FEATURE_MKSTEMP" ]; then
+    :
+else
+    :
+fi
 if [ -n "$FEATURE_QSORT_R" ]; then
     # check dependency
     if dependency_error_qsort_r ; then
@@ -1050,6 +1095,12 @@
 else
     echo 'off'
 fi
+printf '  %-16s' 'mkstemp:'
+if [ -n "$FEATURE_MKSTEMP" ]; then
+    echo 'on'
+else
+    echo 'off'
+fi
 printf '  %-16s' 'qsort_r:'
 if [ -n "$FEATURE_QSORT_R" ]; then
     echo 'on'
--- a/make/project.xml	Tue Dec 23 10:14:13 2025 +0100
+++ b/make/project.xml	Tue Dec 23 14:31:56 2025 +0100
@@ -113,6 +113,11 @@
         <cflags>-DWITH_QSORT_R</cflags>
     </dependency>
 
+    <dependency name="mkstemp">
+        <test>$TOOLCHAIN_CC $CFLAGS $LDFLAGS -o /dev/null make/test_mkstemp.c</test>
+        <cflags>-DWITH_MKSTEMP</cflags>
+    </dependency>
+
     <target>
         <feature name="api-docs">
             <dependencies>doxygen</dependencies>
@@ -152,6 +157,9 @@
         <feature name="memrchr" default="true">
             <dependencies>memrchr</dependencies>
         </feature>
+        <feature name="mkstemp" default="true">
+            <dependencies>mkstemp</dependencies>
+        </feature>
         <feature name="qsort_r" default="true">
             <dependencies>qsort_r</dependencies>
         </feature>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/test_mkstemp.c	Tue Dec 23 14:31:56 2025 +0100
@@ -0,0 +1,11 @@
+#include <stdlib.h>
+
+static void test_mkstemp() {
+    char tpl[] = "/tmp/testXXXXXX";
+    int fd = mkstemp(tpl);
+    // never called, no need to close fd
+}
+
+int main() {
+    return 0;
+}
--- a/tests/test_properties.c	Tue Dec 23 10:14:13 2025 +0100
+++ b/tests/test_properties.c	Tue Dec 23 14:31:56 2025 +0100
@@ -492,7 +492,7 @@
 }
 
 static FILE *cx_opentmp(char *tpl) {
-#if defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 200809L
+#ifdef WITH_MKSTEMP
     strcpy(tpl, "ucxtestXXXXXX");
     int fd = mkstemp(tpl);
     if (fd < 0) return NULL;

mercurial