update uwproj and start development of version 4.0.1

Wed, 21 Jan 2026 21:25:32 +0100

author
Mike Becker <universe@uap-core.de>
date
Wed, 21 Jan 2026 21:25:32 +0100
changeset 1698
1ba637f64695
parent 1697
ca825e816a50
child 1699
79c32b67c815

update uwproj and start development of version 4.0.1

CHANGELOG file | annotate | diff | comparison | revisions
configure file | annotate | diff | comparison | revisions
docs/Writerside/topics/about.md file | annotate | diff | comparison | revisions
docs/Writerside/writerside.cfg file | annotate | diff | comparison | revisions
make/cc.mk file | annotate | diff | comparison | revisions
make/clang.mk file | annotate | diff | comparison | revisions
make/configure.vm file | annotate | diff | comparison | revisions
make/gcc.mk file | annotate | diff | comparison | revisions
make/project.xml file | annotate | diff | comparison | revisions
make/suncc.mk file | annotate | diff | comparison | revisions
make/toolchain.sh file | annotate | diff | comparison | revisions
--- a/CHANGELOG	Wed Dec 31 16:32:36 2025 +0100
+++ b/CHANGELOG	Wed Jan 21 21:25:32 2026 +0100
@@ -1,5 +1,10 @@
-Version 4.0 - 2025-12-31
-------------------------
+Version 4.0.1 - 2025-12-31
+--------------------------
+
+
+
+Version 4.0.0 - 2025-12-31
+--------------------------
 
  * adds cx_system_page_size() to allocator.h
  * adds cx_compare_func2 function pointer that supports compare functions with custom data
@@ -52,8 +57,8 @@
  * removes the complicated wrapping of pointer lists
  * removes cxIteratorRef()
 
-Version 3.2 - 2025-11-30
-------------------------
+Version 3.2.0 - 2025-11-30
+--------------------------
 
  * adds cxMempoolTransfer() and cxMempoolTransferObject()
  * adds support for different destruction strategies in CxMempool
@@ -112,8 +117,8 @@
  * removes all functions that create mutating iterators in favor of making all iterators possibly mutating
  * removes the use of C23 attributes because they don't mix well with GNU attributes in GCC 15
 
-Version 3.1 - 2025-02-11
-------------------------
+Version 3.1.0 - 2025-02-11
+--------------------------
 
  * adds properties.h
  * adds tree.h
@@ -161,8 +166,8 @@
  * fixes critical bug that produced wrong results when comparing lists of different type but same size
  * ends UCX 2.1 long term support
 
-Version 3.0 - 2023-07-09
-------------------------
+Version 3.0.0 - 2023-07-09
+--------------------------
 
  * complete redesign from scratch
  * collections can now store copies of objects and not just pointers
@@ -174,8 +179,8 @@
  * removes testing implementation from the lib
 
 
-Version 2.1 - 2019-12-30
-------------------------
+Version 2.1.0 - 2019-12-30
+--------------------------
 
 * adds string replace functions
 * adds set operations for UcxList and UcxMap
@@ -192,8 +197,8 @@
 * adds scstr_t - a const char* variant for sstr_t
 * renames utility compare functions
 
-Version 1.1 - 2018-05-14
-------------------------
+Version 1.1.0 - 2018-05-14
+--------------------------
 
 * adds missing 32 bit support to integer overflow checks
 * adds ucx_buffer_to_sstr() macro
@@ -208,7 +213,7 @@
 * some bug fixes
 * adds integer overflow checks
 
-Version 1.0 - 2017-10-28
-------------------------
+Version 1.0.0 - 2017-10-28
+--------------------------
 
 * first stable version of UCX released
--- a/configure	Wed Dec 31 16:32:36 2025 +0100
+++ b/configure	Wed Jan 21 21:25:32 2026 +0100
@@ -85,29 +85,32 @@
 printhelp()
 {
     echo "Usage: $0 [OPTIONS]..."
-    echo 'Configuration:'
+    if [ $has_overridable_config_vars__ -eq 1 ] ; then
+        echo
+        echo "Configuration:"
+    fi
 if true \
       ; then
     :
-    if test -z "$prefix__described__"; then
+    if [ -z "$prefix__described__" ] ; then
         prefix__described__=1
         cat << '__EOF__'
   --prefix                path prefix for architecture-independent files [/usr]
 __EOF__
     fi
-    if test -z "$exec_prefix__described__"; then
+    if [ -z "$exec_prefix__described__" ] ; then
         exec_prefix__described__=1
         cat << '__EOF__'
   --exec-prefix           path prefix for architecture-dependent files [PREFIX]
 __EOF__
     fi
-    if test -z "$libdir__described__"; then
+    if [ -z "$libdir__described__" ] ; then
         libdir__described__=1
         cat << '__EOF__'
   --libdir                object code libraries [EPREFIX/lib]
 __EOF__
     fi
-    if test -z "$includedir__described__"; then
+    if [ -z "$includedir__described__" ] ; then
         includedir__described__=1
         cat << '__EOF__'
   --includedir            C header files [PREFIX/include]
@@ -118,7 +121,7 @@
     && isplatform "freebsd" \
       ; then
     :
-    if test -z "$pkgconfigdir__described__"; then
+    if [ -z "$pkgconfigdir__described__" ] ; then
         pkgconfigdir__described__=1
         cat << '__EOF__'
   --pkgconfigdir          location of the *.pc files
@@ -129,7 +132,7 @@
       && notisplatform "freebsd" \
       ; then
     :
-    if test -z "$pkgconfigdir__described__"; then
+    if [ -z "$pkgconfigdir__described__" ] ; then
         pkgconfigdir__described__=1
         cat << '__EOF__'
   --pkgconfigdir          location of the *.pc files
@@ -139,7 +142,7 @@
 if true \
       ; then
     :
-    if test -z "$DOXYGEN__described__"; then
+    if [ -z "$DOXYGEN__described__" ] ; then
         DOXYGEN__described__=1
         cat << '__EOF__'
   --doxygen               path of the Doxygen executable
@@ -181,74 +184,79 @@
 touch "$TEMP_DIR/features"
 
 # config variables
+has_overridable_config_vars__=0
 if true \
       ; then
     :
-    if test -z "$prefix__initialized__"; then
+    if [ -z "$prefix__initialized__" ] ; then
+        has_overridable_config_vars__=1
         prefix__initialized__=1
         prefix='/usr'
     fi
-    if test -z "$exec_prefix__initialized__"; then
+    if [ -z "$exec_prefix__initialized__" ] ; then
+        has_overridable_config_vars__=1
         exec_prefix__initialized__=1
         exec_prefix=''
     fi
-    if test -z "$libdir__initialized__"; then
+    if [ -z "$libdir__initialized__" ] ; then
+        has_overridable_config_vars__=1
         libdir__initialized__=1
         libdir=''
     fi
-    if test -z "$includedir__initialized__"; then
+    if [ -z "$includedir__initialized__" ] ; then
+        has_overridable_config_vars__=1
         includedir__initialized__=1
         includedir=''
     fi
-    if test -z "$VERSION__initialized__"; then
+    if [ -z "$VERSION__initialized__" ] ; then
         VERSION__initialized__=1
         VERSION='4.0.0'
     fi
-    if test -z "$LIBVERSION__initialized__"; then
+    if [ -z "$LIBVERSION__initialized__" ] ; then
         LIBVERSION__initialized__=1
         LIBVERSION='7.0.0'
     fi
-    if test -z "$LIBVERSION_MAJOR__initialized__"; then
+    if [ -z "$LIBVERSION_MAJOR__initialized__" ] ; then
         LIBVERSION_MAJOR__initialized__=1
         LIBVERSION_MAJOR='7'
     fi
-    if test -z "$root_dir__initialized__"; then
+    if [ -z "$root_dir__initialized__" ] ; then
         root_dir__initialized__=1
         root_dir=`pwd`
     fi
-    if test -z "$build_dir__initialized__"; then
+    if [ -z "$build_dir__initialized__" ] ; then
         build_dir__initialized__=1
         build_dir='${root_dir}/build'
     fi
-    if test -z "$docs_dir__initialized__"; then
+    if [ -z "$docs_dir__initialized__" ] ; then
         docs_dir__initialized__=1
         docs_dir='${root_dir}/build/docs'
     fi
-    if test -z "$dist_dir__initialized__"; then
+    if [ -z "$dist_dir__initialized__" ] ; then
         dist_dir__initialized__=1
         dist_dir='${root_dir}/dist'
     fi
-    if test -z "$MKDIR__initialized__"; then
+    if [ -z "$MKDIR__initialized__" ] ; then
         MKDIR__initialized__=1
         MKDIR='/bin/mkdir -p'
     fi
-    if test -z "$RMFILE__initialized__"; then
+    if [ -z "$RMFILE__initialized__" ] ; then
         RMFILE__initialized__=1
         RMFILE='/bin/rm -f'
     fi
-    if test -z "$RMDIR__initialized__"; then
+    if [ -z "$RMDIR__initialized__" ] ; then
         RMDIR__initialized__=1
         RMDIR='/bin/rm -f -R'
     fi
-    if test -z "$COPYFILE__initialized__"; then
+    if [ -z "$COPYFILE__initialized__" ] ; then
         COPYFILE__initialized__=1
         COPYFILE='/bin/cp -f'
     fi
-    if test -z "$COPYALL__initialized__"; then
+    if [ -z "$COPYALL__initialized__" ] ; then
         COPYALL__initialized__=1
         COPYALL='/bin/cp -f -R'
     fi
-    if test -z "$SYMLINK__initialized__"; then
+    if [ -z "$SYMLINK__initialized__" ] ; then
         SYMLINK__initialized__=1
         SYMLINK='/bin/ln -s'
     fi
@@ -257,7 +265,8 @@
     && isplatform "freebsd" \
       ; then
     :
-    if test -z "$pkgconfigdir__initialized__"; then
+    if [ -z "$pkgconfigdir__initialized__" ] ; then
+        has_overridable_config_vars__=1
         pkgconfigdir__initialized__=1
         pkgconfigdir='${exec_prefix}/libdata/pkgconfig'
     fi
@@ -266,7 +275,8 @@
       && notisplatform "freebsd" \
       ; then
     :
-    if test -z "$pkgconfigdir__initialized__"; then
+    if [ -z "$pkgconfigdir__initialized__" ] ; then
+        has_overridable_config_vars__=1
         pkgconfigdir__initialized__=1
         pkgconfigdir='${libdir}/pkgconfig'
     fi
@@ -274,7 +284,8 @@
 if true \
       ; then
     :
-    if test -z "$DOXYGEN__initialized__"; then
+    if [ -z "$DOXYGEN__initialized__" ] ; then
+        has_overridable_config_vars__=1
         DOXYGEN__initialized__=1
         DOXYGEN=`command -v doxygen || echo '/bin/false'`
     fi
@@ -424,35 +435,32 @@
 
 
 # generate vars.mk
-cat > "$TEMP_DIR/vars.mk" << __EOF__
-prefix=$prefix
-exec_prefix=$exec_prefix
-libdir=$libdir
-includedir=$includedir
-VERSION=$VERSION
-LIBVERSION=$LIBVERSION
-LIBVERSION_MAJOR=$LIBVERSION_MAJOR
-root_dir=$root_dir
-build_dir=$build_dir
-docs_dir=$docs_dir
-dist_dir=$dist_dir
-MKDIR=$MKDIR
-RMFILE=$RMFILE
-RMDIR=$RMDIR
-COPYFILE=$COPYFILE
-COPYALL=$COPYALL
-SYMLINK=$SYMLINK
-pkgconfigdir=$pkgconfigdir
-DOXYGEN=$DOXYGEN
-__EOF__
-
+echo '# configuration' > "$TEMP_DIR/vars.mk"
+echo "prefix=$prefix" >> "$TEMP_DIR/vars.mk"
+echo "exec_prefix=$exec_prefix" >> "$TEMP_DIR/vars.mk"
+echo "libdir=$libdir" >> "$TEMP_DIR/vars.mk"
+echo "includedir=$includedir" >> "$TEMP_DIR/vars.mk"
+echo "VERSION=$VERSION" >> "$TEMP_DIR/vars.mk"
+echo "LIBVERSION=$LIBVERSION" >> "$TEMP_DIR/vars.mk"
+echo "LIBVERSION_MAJOR=$LIBVERSION_MAJOR" >> "$TEMP_DIR/vars.mk"
+echo "root_dir=$root_dir" >> "$TEMP_DIR/vars.mk"
+echo "build_dir=$build_dir" >> "$TEMP_DIR/vars.mk"
+echo "docs_dir=$docs_dir" >> "$TEMP_DIR/vars.mk"
+echo "dist_dir=$dist_dir" >> "$TEMP_DIR/vars.mk"
+echo "MKDIR=$MKDIR" >> "$TEMP_DIR/vars.mk"
+echo "RMFILE=$RMFILE" >> "$TEMP_DIR/vars.mk"
+echo "RMDIR=$RMDIR" >> "$TEMP_DIR/vars.mk"
+echo "COPYFILE=$COPYFILE" >> "$TEMP_DIR/vars.mk"
+echo "COPYALL=$COPYALL" >> "$TEMP_DIR/vars.mk"
+echo "SYMLINK=$SYMLINK" >> "$TEMP_DIR/vars.mk"
+echo "pkgconfigdir=$pkgconfigdir" >> "$TEMP_DIR/vars.mk"
+echo "DOXYGEN=$DOXYGEN" >> "$TEMP_DIR/vars.mk"
+echo >> "$TEMP_DIR/vars.mk"
 
 #
 # DEPENDENCIES
 #
 
-
-
 # create buffer for make variables required by dependencies
 echo > "$TEMP_DIR/make.mk"
 
@@ -1037,20 +1045,34 @@
 if [ -n "$TOOLCHAIN_CSTD" ]; then
     echo "  default C std:  $TOOLCHAIN_CSTD"
 fi
-echo
-echo "Config:"
-    printf '  %-16s' 'prefix:'
-    echo "$prefix"
-    printf '  %-16s' 'exec-prefix:'
-    echo "$exec_prefix"
-    printf '  %-16s' 'libdir:'
-    echo "$libdir"
-    printf '  %-16s' 'includedir:'
-    echo "$includedir"
-    printf '  %-16s' 'pkgconfigdir:'
-    echo "$pkgconfigdir"
-    printf '  %-16s' 'doxygen:'
-    echo "$DOXYGEN"
+if [ $has_overridable_config_vars__ -eq 1 ]; then
+    echo
+    echo "Config:"
+    if [ -n "$prefix__initialized__" ]; then
+        printf '  %-16s' 'prefix:'
+        echo "$prefix"
+    fi
+    if [ -n "$exec_prefix__initialized__" ]; then
+        printf '  %-16s' 'exec-prefix:'
+        echo "$exec_prefix"
+    fi
+    if [ -n "$libdir__initialized__" ]; then
+        printf '  %-16s' 'libdir:'
+        echo "$libdir"
+    fi
+    if [ -n "$includedir__initialized__" ]; then
+        printf '  %-16s' 'includedir:'
+        echo "$includedir"
+    fi
+    if [ -n "$pkgconfigdir__initialized__" ]; then
+        printf '  %-16s' 'pkgconfigdir:'
+        echo "$pkgconfigdir"
+    fi
+    if [ -n "$DOXYGEN__initialized__" ]; then
+        printf '  %-16s' 'doxygen:'
+        echo "$DOXYGEN"
+    fi
+fi
 echo
 echo "Features:"
 printf '  %-16s' 'api-docs:'
--- a/docs/Writerside/topics/about.md	Wed Dec 31 16:32:36 2025 +0100
+++ b/docs/Writerside/topics/about.md	Wed Jan 21 21:25:32 2026 +0100
@@ -26,7 +26,11 @@
 
 ## Changelog
 
-### Version 4.0 - 2025-12-31 {collapsible="true"}
+### Version 4.0.1 - 2025-12-31 {collapsible="true"}
+
+
+
+### Version 4.0.0 - 2025-12-31 {collapsible="true"}
 
 * adds cx_system_page_size() to allocator.h
 * adds cx_compare_func2 function pointer that supports compare functions with custom data
@@ -79,7 +83,7 @@
 * removes the complicated wrapping of pointer lists
 * removes cxIteratorRef()
 
-### Version 3.2 - 2025-11-30 {collapsible="true"}
+### Version 3.2.0 - 2025-11-30 {collapsible="true"}
 
 * adds cxMempoolTransfer() and cxMempoolTransferObject()
 * adds support for different destruction strategies in CxMempool
@@ -138,7 +142,7 @@
 * removes all functions that create mutating iterators in favor of making all iterators possibly mutating
 * removes the use of C23 attributes because they don't mix well with GNU attributes in GCC 15
 
-### Version 3.1 - 2025-02-11 {collapsible="true"}
+### Version 3.1.0 - 2025-02-11 {collapsible="true"}
 
 * adds properties.h
 * adds tree.h
@@ -186,7 +190,7 @@
 * fixes critical bug that produced wrong results when comparing lists of different type but same size
 * ends UCX 2.1 long term support
 
-### Version 3.0 - 2023-07-09 {collapsible="true"}
+### Version 3.0.0 - 2023-07-09 {collapsible="true"}
 
 * complete redesign from scratch
 * collections can now store copies of objects and not just pointers
@@ -197,7 +201,7 @@
 * drops some other, rarely used, features
 * removes testing implementation from the lib
 
-### Version 2.1 - 2019-12-30 {collapsible="true"}
+### Version 2.1.0 - 2019-12-30 {collapsible="true"}
 
 * adds string replace functions
 * adds set operations for ` UcxList` and `UcxMap`
@@ -206,14 +210,14 @@
 * adds `UcxArray` data type
 * adds support for CMake builds, but main build system is still autotools
 
-### Version 2.0 - 2018-12-28 {collapsible="true"}
+### Version 2.0.0 - 2018-12-28 {collapsible="true"}
 
 * some uncritical bug fixes
 * overflow of `sstrnlen` now returns `SIZE_MAX` instead of zero
 * adds `scstr_t` - a `const char*` variant for sstr_t
 * renames utility compare functions
 
-### Version 1.1 - 2018-05-14 {collapsible="true"}
+### Version 1.1.0 - 2018-05-14 {collapsible="true"}
 
 * adds missing 32 bit support to integer overflow checks
 * adds `ucx_buffer_to_sstr()` macro
@@ -227,6 +231,6 @@
 * some bug fixes
 * adds integer overflow checks
 
-### Version 1.0 - 2017-10-28 {collapsible="true"}
+### Version 1.0.0 - 2017-10-28 {collapsible="true"}
 
 * first stable version of UCX released
--- a/docs/Writerside/writerside.cfg	Wed Dec 31 16:32:36 2025 +0100
+++ b/docs/Writerside/writerside.cfg	Wed Jan 21 21:25:32 2026 +0100
@@ -5,5 +5,5 @@
     <topics dir="topics" web-path="topics"/>
     <categories src="c.list"/>
     <images dir="images" web-path="images"/>
-    <instance src="ucx.tree" version="4.0"/>
+    <instance src="ucx.tree" version="4.0.1"/>
 </ihp>
\ No newline at end of file
--- a/make/cc.mk	Wed Dec 31 16:32:36 2025 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-#
-# cc toolchain config
-#
-
-CFLAGS =
-DEBUG_CFLAGS = -g
-RELEASE_CFLAGS = -O3 -DNDEBUG
-LDFLAGS =
-
-SHLIB_CFLAGS = -fPIC
-SHLIB_LDFLAGS = -shared
--- a/make/clang.mk	Wed Dec 31 16:32:36 2025 +0100
+++ b/make/clang.mk	Wed Jan 21 21:25:32 2026 +0100
@@ -2,11 +2,5 @@
 # clang toolchain config
 #
 
-CFLAGS =
 CXXFLAGS = -fpermissive
 DEBUG_CFLAGS = -g -Wall -Wextra -pedantic
-RELEASE_CFLAGS = -O3 -DNDEBUG
-LDFLAGS =
-
-SHLIB_CFLAGS = -fPIC
-SHLIB_LDFLAGS = -shared
--- a/make/configure.vm	Wed Dec 31 16:32:36 2025 +0100
+++ b/make/configure.vm	Wed Jan 21 21:25:32 2026 +0100
@@ -86,7 +86,10 @@
 printhelp()
 {
     echo "Usage: $0 [OPTIONS]..."
-    echo 'Configuration:'
+    if [ $has_overridable_config_vars__ -eq 1 ] ; then
+        echo
+        echo "Configuration:"
+    fi
 #foreach( $cfg in $config )
 if true \
 #if( $cfg.platform )
@@ -99,7 +102,7 @@
     :
     #foreach( $var in $cfg.vars )
     #if( $var.overridable )
-    if test -z "${D}${var.varName}__described__"; then
+    if [ -z "${D}${var.varName}__described__" ] ; then
         ${var.varName}__described__=1
         cat << '__EOF__'
 ${var.helpText}
@@ -147,6 +150,7 @@
 touch "$TEMP_DIR/features"
 
 # config variables
+has_overridable_config_vars__=0
 #foreach( $cfg in $config )
 if true \
 #if( $cfg.platform )
@@ -158,7 +162,10 @@
       ; then
     :
     #foreach( $var in $cfg.vars )
-    if test -z "${D}${var.varName}__initialized__"; then
+    if [ -z "${D}${var.varName}__initialized__" ] ; then
+        #if( $var.overridable )
+        has_overridable_config_vars__=1
+        #end
         ${var.varName}__initialized__=1
         #if( $var.exec )
         ${var.varName}=`${var.value}`
@@ -304,19 +311,16 @@
 ## End of unparsed content **
 
 # generate vars.mk
-cat > "$TEMP_DIR/vars.mk" << __EOF__
+echo '# configuration' > "$TEMP_DIR/vars.mk"
 #foreach( $var in $vars )
-${var.varName}=${D}${var.varName}
+echo "${var.varName}=${D}${var.varName}" >> "$TEMP_DIR/vars.mk"
 #end
-__EOF__
-
+echo >> "$TEMP_DIR/vars.mk"
 
 #
 # DEPENDENCIES
 #
 
-
-
 # create buffer for make variables required by dependencies
 echo > "$TEMP_DIR/make.mk"
 
@@ -714,14 +718,18 @@
 if [ -n "$TOOLCHAIN_CSTD" ]; then
     echo "  default C std:  $TOOLCHAIN_CSTD"
 fi
-echo
-echo "Config:"
+if [ ${D}has_overridable_config_vars__ -eq 1 ]; then
+    echo
+    echo "Config:"
 #foreach( $var in $vars )
 #if ($var.overridable)
-    printf '  %-16s' '${var.arg}:'
-    echo "${D}${var.varName}"
+    if [ -n "${D}${var.varName}__initialized__" ]; then
+        printf '  %-16s' '${var.arg}:'
+        echo "${D}${var.varName}"
+    fi
 #end
 #end
+fi
 #if ( $options.size() > 0 )
 echo
 echo "Options:"
--- a/make/gcc.mk	Wed Dec 31 16:32:36 2025 +0100
+++ b/make/gcc.mk	Wed Jan 21 21:25:32 2026 +0100
@@ -2,14 +2,8 @@
 # gcc toolchain config
 #
 
-CFLAGS =
 CXXFLAGS = -fpermissive
 DEBUG_CFLAGS = -g -Wall -Wextra -pedantic
-RELEASE_CFLAGS = -O3 -DNDEBUG
-LDFLAGS =
-
-SHLIB_CFLAGS = -fPIC
-SHLIB_LDFLAGS = -shared
 
 COVERAGE_CFLAGS = --coverage -DNDEBUG
 COVERAGE_LDFLAGS =  --coverage
--- a/make/project.xml	Wed Dec 31 16:32:36 2025 +0100
+++ b/make/project.xml	Wed Jan 21 21:25:32 2026 +0100
@@ -5,8 +5,8 @@
         <exec-prefix/>
         <libdir/>
         <includedir/>
-        <var name="VERSION">4.0.0</var>
-        <var name="LIBVERSION">7.0.0</var>
+        <var name="VERSION">4.0.1</var>
+        <var name="LIBVERSION">7.0.1</var>
         <var name="LIBVERSION_MAJOR">7</var>
         <var name="root_dir" exec="true">pwd</var>
         <var name="build_dir">${root_dir}/build</var>
--- a/make/suncc.mk	Wed Dec 31 16:32:36 2025 +0100
+++ b/make/suncc.mk	Wed Jan 21 21:25:32 2026 +0100
@@ -2,10 +2,5 @@
 # suncc toolchain
 #
 
-CFLAGS =
-DEBUG_CFLAGS = -g
-RELEASE_CFLAGS = -O3 -DNDEBUG
-LDFLAGS =
-
 SHLIB_CFLAGS = -Kpic
 SHLIB_LDFLAGS = -G
--- a/make/toolchain.sh	Wed Dec 31 16:32:36 2025 +0100
+++ b/make/toolchain.sh	Wed Jan 21 21:25:32 2026 +0100
@@ -162,21 +162,66 @@
   fi
 }
 
+is_flag_not_specified()
+{
+  # 1: flag to test
+  # 2: toolchain.mk file
+  if [ -n "$2" ] && grep "^ *$1 *=" "$2" > /dev/null; then
+    return 1
+  else
+    return 0
+  fi
+}
+
 write_toolchain_defaults()
 {
+  if [ -f "make/${TOOLCHAIN_NAME}.mk" ]; then
+    mkfile="make/${TOOLCHAIN_NAME}.mk"
+  elif [ -f 'make/cc.mk' ]; then
+    mkfile='make/cc.mk'
+  else
+    mkfile=''
+  fi
+
   echo "# toolchain" >> "$1"
   if [ -n "$TOOLCHAIN_CC" ]; then
     echo "CC = ${TOOLCHAIN_CC}" >> "$1"
+    if is_flag_not_specified 'CFLAGS' "$mkfile"; then
+      echo 'CFLAGS =' >> "$1"
+    fi
+    if is_flag_not_specified 'DEBUG_CFLAGS' "$mkfile"; then
+      echo 'DEBUG_CFLAGS = -g' >> "$1"
+    fi
+    if is_flag_not_specified 'RELEASE_CFLAGS' "$mkfile"; then
+      echo 'RELEASE_CFLAGS = -O3 -DNDEBUG' >> "$1"
+    fi
+    if is_flag_not_specified 'SHLIB_CFLAGS' "$mkfile"; then
+      echo 'SHLIB_CFLAGS = -fPIC' >> "$1"
+    fi
   fi
   if [ -n "$TOOLCHAIN_CXX" ]; then
     echo "CXX = ${TOOLCHAIN_CXX}" >> "$1"
+    if is_flag_not_specified 'CXXFLAGS' "$mkfile"; then
+      echo 'CXXFLAGS =' >> "$1"
+    fi
+    if is_flag_not_specified 'DEBUG_CXXFLAGS' "$mkfile"; then
+      echo 'DEBUG_CXXFLAGS = -g' >> "$1"
+    fi
+    if is_flag_not_specified 'RELEASE_CXXFLAGS' "$mkfile"; then
+      echo 'RELEASE_CXXFLAGS = -O3 -DNDEBUG' >> "$1"
+    fi
+    if is_flag_not_specified 'SHLIB_CXXFLAGS' "$mkfile"; then
+      echo 'SHLIB_CXXFLAGS = -fPIC' >> "$1"
+    fi
+  fi
+  if is_flag_not_specified 'LDFLAGS' "$mkfile"; then
+    echo 'LDFLAGS =' >> "$1"
+  fi
+  if is_flag_not_specified 'SHLIB_LDFLAGS' "$mkfile"; then
+    echo 'SHLIB_LDFLAGS = -shared' >> "$1"
   fi
   echo >> "$1"
-  if [ -f "make/${TOOLCHAIN_NAME}.mk" ]; then
-    cat "make/${TOOLCHAIN_NAME}.mk" >> "$1"
-  elif [ -f "make/cc.mk" ]; then
-    cat "make/cc.mk" >> "$1"
-  else
-    echo "!!! WARNING !!! Default toolchain flags not found. Configuration might be incomplete."
+  if [ -n "$mkfile" ]; then
+    cat "$mkfile" >> "$1"
   fi
 }

mercurial