configure

changeset 1660
802ab24f67aa
parent 1620
bf5d647f939d
child 1661
a389bf17eaaa
--- a/configure	Tue Dec 23 10:00:02 2025 +0100
+++ b/configure	Tue Dec 23 10:14:13 2025 +0100
@@ -156,6 +156,7 @@
   --enable-api-docs       run Doxygen during build
   --enable-coverage       test coverage with gcov
   --enable-asan           address sanitizer
+  --enable-ubsan          undefined behavior sanitizer
   --disable-cxx-tests     the check-cxx makefile target
   --disable-szmul-builtin use custom implementation, instead
   --disable-memrchr
@@ -306,6 +307,8 @@
         "--disable-coverage") unset FEATURE_COVERAGE ;;
         "--enable-asan") FEATURE_ASAN=on ;;
         "--disable-asan") unset FEATURE_ASAN ;;
+        "--enable-ubsan") FEATURE_UBSAN=on ;;
+        "--disable-ubsan") unset FEATURE_UBSAN ;;
         "--enable-cxx-tests") FEATURE_CXX_TESTS=on ;;
         "--disable-cxx-tests") unset FEATURE_CXX_TESTS ;;
         "--enable-szmul-builtin") FEATURE_SZMUL_BUILTIN=on ;;
@@ -594,6 +597,26 @@
     dep_checked_no_coverage=1
     return 0
 }
+dependency_error_ubsan()
+{
+    print_check_msg "$dep_checked_ubsan" "checking for ubsan... "
+    # dependency ubsan toolchain="gnuc"
+    while true
+    do
+        if notistoolchain "gnuc"; then
+            break
+        fi
+        TEMP_CFLAGS="$TEMP_CFLAGS -fsanitize=undefined"
+        TEMP_LDFLAGS="$TEMP_LDFLAGS -fsanitize=undefined"
+        print_check_msg "$dep_checked_ubsan" "yes\n"
+        dep_checked_ubsan=1
+        return 1
+    done
+
+    print_check_msg "$dep_checked_ubsan" "no\n"
+    dep_checked_ubsan=1
+    return 0
+}
 dependency_error_qsort_r()
 {
     print_check_msg "$dep_checked_qsort_r" "checking for qsort_r... "
@@ -826,6 +849,26 @@
 else
     :
 fi
+if [ -n "$FEATURE_UBSAN" ]; then
+    # check dependency
+    if dependency_error_ubsan ; then
+        # "auto" features can fail and are just disabled in this case
+        if [ "$FEATURE_UBSAN" = "auto" ]; then
+            DISABLE_FEATURE_UBSAN=1
+        else
+            DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ubsan "
+            ERROR=1
+        fi
+    fi
+    if [ -n "$DISABLE_FEATURE_UBSAN" ]; then
+        unset FEATURE_UBSAN
+    fi
+fi
+if [ -n "$FEATURE_UBSAN" ]; then
+    :
+else
+    :
+fi
 if [ -n "$FEATURE_CXX_TESTS" ]; then
     # check dependency
     if dependency_error_cxx ; then
@@ -983,6 +1026,12 @@
 else
     echo 'off'
 fi
+printf '  %-16s' 'ubsan:'
+if [ -n "$FEATURE_UBSAN" ]; then
+    echo 'on'
+else
+    echo 'off'
+fi
 printf '  %-16s' 'cxx-tests:'
 if [ -n "$FEATURE_CXX_TESTS" ]; then
     echo 'on'

mercurial