use uwproj for build config generation

Sun, 24 Sep 2023 18:43:58 +0200

author
Mike Becker <universe@uap-core.de>
date
Sun, 24 Sep 2023 18:43:58 +0200
changeset 72
b533da8e7411
parent 71
d5af9261231d
child 73
072fa3e165f0

use uwproj for build config generation

.hgignore file | annotate | diff | comparison | revisions
Makefile file | annotate | diff | comparison | revisions
clang.mk file | annotate | diff | comparison | revisions
configure file | annotate | diff | comparison | revisions
gcc.mk file | annotate | diff | comparison | revisions
make/cc.mk file | annotate | diff | comparison | revisions
make/configure.vm file | annotate | diff | comparison | revisions
make/project.xml file | annotate | diff | comparison | revisions
make/toolchain.sh file | annotate | diff | comparison | revisions
make/uwproj.xsd file | annotate | diff | comparison | revisions
     1.1 --- a/.hgignore	Sun Jun 11 15:21:44 2023 +0200
     1.2 +++ b/.hgignore	Sun Sep 24 18:43:58 2023 +0200
     1.3 @@ -6,4 +6,5 @@
     1.4  ^build/.*$
     1.5  ^nbproject/.*$
     1.6  .idea/
     1.7 +^config.mk$
     1.8  
     2.1 --- a/Makefile	Sun Jun 11 15:21:44 2023 +0200
     2.2 +++ b/Makefile	Sun Sep 24 18:43:58 2023 +0200
     2.3 @@ -26,30 +26,27 @@
     2.4  # POSSIBILITY OF SUCH DAMAGE.
     2.5  #
     2.6  
     2.7 -# available configs: gcc, clang
     2.8 -CONF=gcc
     2.9 -
    2.10 -include $(CONF).mk
    2.11 +include config.mk
    2.12  
    2.13  SRC  = frontend.c
    2.14  SRC += c2html.c
    2.15  SRC += highlighter.c
    2.16  
    2.17 -OBJ = $(SRC:%.c=build/%$(OBJ_EXT))
    2.18 +OBJ = $(SRC:%.c=build/%.o)
    2.19  
    2.20  all: build build/c2html
    2.21  	
    2.22  build/c2html: $(OBJ)
    2.23 -	$(LD) -o $@ $^ $(LDFLAGS)
    2.24 +	$(CC) -o $@ $^ $(LDFLAGS)
    2.25  	
    2.26 -build/%$(OBJ_EXT): src/%.c
    2.27 +build/%.o: src/%.c
    2.28  	$(CC) -o $@ $(CFLAGS) -c $<
    2.29  
    2.30  build:
    2.31  	$(MKDIR) $@
    2.32  	
    2.33 -test: all
    2.34 +check: all
    2.35  	cd test && $(MAKE)
    2.36  	
    2.37  clean:
    2.38 -	$(RM) $(RMFLAGS) build
    2.39 +	$(RMDIR) build
     3.1 --- a/clang.mk	Sun Jun 11 15:21:44 2023 +0200
     3.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.3 @@ -1,39 +0,0 @@
     3.4 -#
     3.5 -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
     3.6 -#
     3.7 -# Copyright 2016 Mike Becker. All rights reserved.
     3.8 -#
     3.9 -# Redistribution and use in source and binary forms, with or without
    3.10 -# modification, are permitted provided that the following conditions are met:
    3.11 -#
    3.12 -#   1. Redistributions of source code must retain the above copyright
    3.13 -#      notice, this list of conditions and the following disclaimer.
    3.14 -#
    3.15 -#   2. Redistributions in binary form must reproduce the above copyright
    3.16 -#      notice, this list of conditions and the following disclaimer in the
    3.17 -#      documentation and/or other materials provided with the distribution.
    3.18 -#
    3.19 -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    3.20 -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    3.21 -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    3.22 -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
    3.23 -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    3.24 -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    3.25 -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    3.26 -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    3.27 -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    3.28 -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    3.29 -# POSSIBILITY OF SUCH DAMAGE.
    3.30 -#
    3.31 -
    3.32 -# system related
    3.33 -MKDIR   = mkdir -p
    3.34 -RM      = rm
    3.35 -RMFLAGS = -fR
    3.36 -
    3.37 -# build related
    3.38 -CC      = clang
    3.39 -CFLAGS  = -O2
    3.40 -LD      = clang
    3.41 -LDFLAGS = -lucx
    3.42 -OBJ_EXT = .o
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/configure	Sun Sep 24 18:43:58 2023 +0200
     4.3 @@ -0,0 +1,341 @@
     4.4 +#!/bin/sh
     4.5 +
     4.6 +# create temporary directory
     4.7 +TEMP_DIR=".tmp-`uname -n`"
     4.8 +rm -Rf "$TEMP_DIR"
     4.9 +if mkdir -p "$TEMP_DIR"; then
    4.10 +    :
    4.11 +else
    4.12 +    echo "Cannot create tmp dir $TEMP_DIR"
    4.13 +    echo "Abort"
    4.14 +    exit 1
    4.15 +fi
    4.16 +touch "$TEMP_DIR/options"
    4.17 +touch "$TEMP_DIR/features"
    4.18 +
    4.19 +# define standard variables
    4.20 +PREFIX=/usr
    4.21 +EPREFIX=
    4.22 +BINDIR=
    4.23 +SBINDIR=
    4.24 +LIBDIR=
    4.25 +LIBEXECDIR=
    4.26 +DATADIR=
    4.27 +SYSCONFDIR=
    4.28 +SHAREDSTATEDIR=
    4.29 +LOCALSTATEDIR=
    4.30 +INCLUDEDIR=
    4.31 +INFODIR=
    4.32 +MANDIR=
    4.33 +
    4.34 +# custom variables
    4.35 +MKDIR="mkdir -p"
    4.36 +RMDIR="rm -fR"
    4.37 +
    4.38 +# features
    4.39 +
    4.40 +# clean abort
    4.41 +abort_configure()
    4.42 +{
    4.43 +    rm -Rf "$TEMP_DIR"
    4.44 +    exit 1
    4.45 +}
    4.46 +
    4.47 +# help text
    4.48 +printhelp()
    4.49 +{
    4.50 +    echo "Usage: $0 [OPTIONS]..."
    4.51 +    cat << __EOF__
    4.52 +Installation directories:
    4.53 +  --prefix=PREFIX         path prefix for architecture-independent files
    4.54 +                          [/usr]
    4.55 +  --exec-prefix=EPREFIX   path prefix for architecture-dependent files
    4.56 +                          [PREFIX]
    4.57 +
    4.58 +  --bindir=DIR            user executables [EPREFIX/bin]
    4.59 +  --sbindir=DIR           system admin executables [EPREFIX/sbin]
    4.60 +  --libexecdir=DIR        program executables [EPREFIX/libexec]
    4.61 +  --sysconfdir=DIR        system configuration files [PREFIX/etc]
    4.62 +  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
    4.63 +  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
    4.64 +  --libdir=DIR            object code libraries [EPREFIX/lib]
    4.65 +  --includedir=DIR        C header files [PREFIX/include]
    4.66 +  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
    4.67 +  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
    4.68 +  --infodir=DIR           info documentation [DATAROOTDIR/info]
    4.69 +  --mandir=DIR            man documentation [DATAROOTDIR/man]
    4.70 +
    4.71 +__EOF__
    4.72 +}
    4.73 +
    4.74 +#
    4.75 +# parse arguments
    4.76 +#
    4.77 +BUILD_TYPE="default"
    4.78 +for ARG in "$@"
    4.79 +do
    4.80 +    case "$ARG" in
    4.81 +        "--prefix="*)         PREFIX=${ARG#--prefix=} ;;
    4.82 +        "--exec-prefix="*)    EPREFIX=${ARG#--exec-prefix=} ;;
    4.83 +        "--bindir="*)         BINDIR=${ARG#----bindir=} ;;
    4.84 +        "--sbindir="*)        SBINDIR=${ARG#--sbindir=} ;;
    4.85 +        "--libdir="*)         LIBDIR=${ARG#--libdir=} ;;
    4.86 +        "--libexecdir="*)     LIBEXECDIR=${ARG#--libexecdir=} ;;
    4.87 +        "--datadir="*)        DATADIR=${ARG#--datadir=} ;;
    4.88 +        "--sysconfdir="*)     SYSCONFDIR=${ARG#--sysconfdir=} ;;
    4.89 +        "--sharedstatedir="*) SHAREDSTATEDIR=${ARG#--sharedstatedir=} ;;
    4.90 +        "--localstatedir="*)  LOCALSTATEDIR=${ARG#--localstatedir=} ;;
    4.91 +        "--includedir="*)     INCLUDEDIR=${ARG#--includedir=} ;;
    4.92 +        "--infodir="*)        INFODIR=${ARG#--infodir=} ;;
    4.93 +        "--mandir"*)          MANDIR=${ARG#--mandir} ;;
    4.94 +        "--help"*) printhelp; abort_configure ;;
    4.95 +        "--debug")           BUILD_TYPE="debug" ;;
    4.96 +        "--release")         BUILD_TYPE="release" ;;
    4.97 +        "-"*) echo "unknown option: $ARG"; abort_configure ;;
    4.98 +    esac
    4.99 +done
   4.100 +
   4.101 +
   4.102 +# set dir variables
   4.103 +: ${EPREFIX:="$PREFIX"}
   4.104 +: ${BINDIR:="$EPREFIX/bin"}
   4.105 +: ${SBINDIR:="$EPREFIX/sbin"}
   4.106 +: ${LIBDIR:="$EPREFIX/lib"}
   4.107 +: ${LIBEXECDIR:="$EPREFIX/libexec"}
   4.108 +: ${DATADIR:="$PREFIX/share"}
   4.109 +: ${SYSCONFDIR:="$PREFIX/etc"}
   4.110 +: ${SHAREDSTATEDIR:="$PREFIX/com"}
   4.111 +: ${LOCALSTATEDIR:="$PREFIX/var"}
   4.112 +: ${INCLUDEDIR:="$PREFIX/include"}
   4.113 +: ${INFODIR:="$PREFIX/info"}
   4.114 +: ${MANDIR:="$PREFIX/man"}
   4.115 +
   4.116 +# Test for availability of pkg-config
   4.117 +PKG_CONFIG=`command -v pkg-config`
   4.118 +: ${PKG_CONFIG:="false"}
   4.119 +
   4.120 +# Simple uname based platform detection
   4.121 +# $PLATFORM is used for platform dependent dependency selection
   4.122 +OS=`uname -s`
   4.123 +OS_VERSION=`uname -r`
   4.124 +printf "detect platform... "
   4.125 +if [ "$OS" = "SunOS" ]; then
   4.126 +    PLATFORM="solaris sunos unix svr4"
   4.127 +fi
   4.128 +if [ "$OS" = "Linux" ]; then
   4.129 +    PLATFORM="linux unix"
   4.130 +fi
   4.131 +if [ "$OS" = "FreeBSD" ]; then
   4.132 +    PLATFORM="freebsd bsd unix"
   4.133 +fi
   4.134 +if [ "$OS" = "Darwin" ]; then
   4.135 +    PLATFORM="macos osx bsd unix"
   4.136 +fi
   4.137 +if echo "$OS" | grep -i "MINGW" > /dev/null; then
   4.138 +    PLATFORM="windows mingw"
   4.139 +fi
   4.140 +: ${PLATFORM:="unix"}
   4.141 +
   4.142 +PLATFORM_NAME=`echo "$PLATFORM" | cut -f1 -d' ' -`
   4.143 +echo "$PLATFORM_NAME"
   4.144 +
   4.145 +isplatform()
   4.146 +{
   4.147 +    for p in $PLATFORM
   4.148 +    do
   4.149 +        if [ "$p" = "$1" ]; then
   4.150 +            return 0
   4.151 +        fi
   4.152 +    done
   4.153 +    return 1
   4.154 +}
   4.155 +notisplatform()
   4.156 +{
   4.157 +    for p in $PLATFORM
   4.158 +    do
   4.159 +        if [ "$p" = "$1" ]; then
   4.160 +            return 1
   4.161 +        fi
   4.162 +    done
   4.163 +    return 0
   4.164 +}
   4.165 +
   4.166 +
   4.167 +# generate vars.mk
   4.168 +cat > "$TEMP_DIR/vars.mk" << __EOF__
   4.169 +PREFIX="$PREFIX"
   4.170 +EPREFIX="$EPREFIX"
   4.171 +BINDIR="$BINDIR"
   4.172 +SBINDIR="$SBINDIR"
   4.173 +LIBDIR="$LIBDIR"
   4.174 +LIBEXECDIR="$LIBEXECDIR"
   4.175 +DATADIR="$DATADIR"
   4.176 +SYSCONFDIR="$SYSCONFDIR"
   4.177 +SHAREDSTATEDIR="$SHAREDSTATEDIR"
   4.178 +LOCALSTATEDIR="$LOCALSTATEDIR"
   4.179 +INCLUDEDIR="$INCLUDEDIR"
   4.180 +INFODIR="$INFODIR"
   4.181 +MANDIR="$MANDIR"
   4.182 +MKDIR=$MKDIR
   4.183 +RMDIR=$RMDIR
   4.184 +__EOF__
   4.185 +sort -u -o "$TEMP_DIR/vars.mk" "$TEMP_DIR/vars.mk"
   4.186 +
   4.187 +
   4.188 +# toolchain detection utilities
   4.189 +. make/toolchain.sh
   4.190 +
   4.191 +#
   4.192 +# DEPENDENCIES
   4.193 +#
   4.194 +
   4.195 +# check languages
   4.196 +lang_c=
   4.197 +lang_cpp=
   4.198 +if detect_c_compiler ; then
   4.199 +    lang_c=1
   4.200 +fi
   4.201 +
   4.202 +# create buffer for make variables required by dependencies
   4.203 +echo > "$TEMP_DIR/make.mk"
   4.204 +
   4.205 +test_pkg_config()
   4.206 +{
   4.207 +    if "$PKG_CONFIG" --exists "$1" ; then :
   4.208 +    else return 1 ; fi
   4.209 +    if [ -z "$2" ] || "$PKG_CONFIG" --atleast-version="$2" "$1" ; then :
   4.210 +    else return 1 ; fi
   4.211 +    if [ -z "$3" ] || "$PKG_CONFIG" --exact-version="$3" "$1" ; then :
   4.212 +    else return 1 ; fi
   4.213 +    if [ -z "$4" ] || "$PKG_CONFIG" --max-version="$4" "$1" ; then :
   4.214 +    else return 1 ; fi
   4.215 +    return 0
   4.216 +}
   4.217 +
   4.218 +dependency_error_ucx()
   4.219 +{
   4.220 +    printf "checking for ucx... "
   4.221 +    # dependency ucx
   4.222 +    while true
   4.223 +    do
   4.224 +        if check_lib ucx cx/list.h > /dev/null ; then
   4.225 +            :
   4.226 +        else
   4.227 +            break
   4.228 +        fi
   4.229 +        TEMP_LDFLAGS="$TEMP_LDFLAGS -lucx"
   4.230 +        echo yes
   4.231 +        return 1
   4.232 +    done
   4.233 +
   4.234 +    echo no
   4.235 +    return 0
   4.236 +}
   4.237 +
   4.238 +
   4.239 +
   4.240 +
   4.241 +# start collecting dependency information
   4.242 +echo > "$TEMP_DIR/flags.mk"
   4.243 +
   4.244 +DEPENDENCIES_FAILED=
   4.245 +ERROR=0
   4.246 +# unnamed dependencies
   4.247 +TEMP_CFLAGS=
   4.248 +TEMP_CXXFLAGS=
   4.249 +TEMP_LDFLAGS=
   4.250 +while true
   4.251 +do
   4.252 +    while true
   4.253 +    do
   4.254 +        if [ -z "$lang_c" ] ; then
   4.255 +            ERROR=1
   4.256 +            break
   4.257 +        fi
   4.258 +
   4.259 +        break
   4.260 +    done
   4.261 +    break
   4.262 +done
   4.263 +
   4.264 +# add general dependency flags to flags.mk
   4.265 +echo "# general flags" >> "$TEMP_DIR/flags.mk"
   4.266 +if [ -n "${TEMP_CFLAGS}" ]; then
   4.267 +    echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
   4.268 +fi
   4.269 +if [ -n "${TEMP_CXXFLAGS}" ]; then
   4.270 +    echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
   4.271 +fi
   4.272 +if [ -n "${TEMP_LDFLAGS}" ]; then
   4.273 +    echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
   4.274 +fi
   4.275 +
   4.276 +#
   4.277 +# OPTION VALUES
   4.278 +#
   4.279 +
   4.280 +#
   4.281 +# TARGETS
   4.282 +#
   4.283 +
   4.284 +echo >> "$TEMP_DIR/flags.mk"
   4.285 +# Target: default
   4.286 +echo "# flags for target default" >> "$TEMP_DIR/flags.mk"
   4.287 +TEMP_CFLAGS=
   4.288 +TEMP_CXXFLAGS=
   4.289 +TEMP_LDFLAGS=
   4.290 +
   4.291 +if dependency_error_ucx; then
   4.292 +    DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ucx "
   4.293 +    ERROR=1
   4.294 +fi
   4.295 +
   4.296 +# Features
   4.297 +
   4.298 +
   4.299 +if [ -n "${TEMP_CFLAGS}" ]; then
   4.300 +    echo "CFLAGS  += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
   4.301 +fi
   4.302 +if [ -n "${TEMP_CXXFLAGS}" ]; then
   4.303 +    echo "CXXFLAGS  += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
   4.304 +fi
   4.305 +if [ "$BUILD_TYPE" = "debug" ]; then
   4.306 +    echo 'CFLAGS += ${DEBUG_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
   4.307 +    echo 'CXXFLAGS += ${DEBUG_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
   4.308 +fi
   4.309 +if [ "$BUILD_TYPE" = "release" ]; then
   4.310 +    echo 'CFLAGS += ${RELEASE_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
   4.311 +    echo 'CXXFLAGS += ${RELEASE_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
   4.312 +fi
   4.313 +if [ -n "${TEMP_LDFLAGS}" ]; then
   4.314 +    echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
   4.315 +fi
   4.316 +
   4.317 +
   4.318 +# final result
   4.319 +if [ $ERROR -ne 0 ]; then
   4.320 +    echo
   4.321 +    echo "Error: Unresolved dependencies"
   4.322 +    echo "$DEPENDENCIES_FAILED"
   4.323 +    abort_configure
   4.324 +fi
   4.325 +
   4.326 +echo "configure finished"
   4.327 +echo
   4.328 +echo "Build Config:"
   4.329 +echo "  PREFIX:    $PREFIX"
   4.330 +echo "  TOOLCHAIN: $TOOLCHAIN_NAME"
   4.331 +echo
   4.332 +
   4.333 +# generate the config.mk file
   4.334 +cat > "$TEMP_DIR/config.mk" << __EOF__
   4.335 +#
   4.336 +# config.mk generated by configure
   4.337 +#
   4.338 +
   4.339 +__EOF__
   4.340 +write_toolchain_defaults "$TEMP_DIR/toolchain.mk"
   4.341 +cat "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk
   4.342 +rm -Rf "$TEMP_DIR"
   4.343 +
   4.344 +
     5.1 --- a/gcc.mk	Sun Jun 11 15:21:44 2023 +0200
     5.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.3 @@ -1,39 +0,0 @@
     5.4 -#
     5.5 -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
     5.6 -#
     5.7 -# Copyright 2016 Mike Becker. All rights reserved.
     5.8 -#
     5.9 -# Redistribution and use in source and binary forms, with or without
    5.10 -# modification, are permitted provided that the following conditions are met:
    5.11 -#
    5.12 -#   1. Redistributions of source code must retain the above copyright
    5.13 -#      notice, this list of conditions and the following disclaimer.
    5.14 -#
    5.15 -#   2. Redistributions in binary form must reproduce the above copyright
    5.16 -#      notice, this list of conditions and the following disclaimer in the
    5.17 -#      documentation and/or other materials provided with the distribution.
    5.18 -#
    5.19 -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    5.20 -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    5.21 -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    5.22 -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
    5.23 -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    5.24 -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    5.25 -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    5.26 -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    5.27 -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    5.28 -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    5.29 -# POSSIBILITY OF SUCH DAMAGE.
    5.30 -#
    5.31 -
    5.32 -# system related
    5.33 -MKDIR   = mkdir -p
    5.34 -RM      = rm
    5.35 -RMFLAGS = -fR
    5.36 -
    5.37 -# build related
    5.38 -CC      = gcc
    5.39 -CFLAGS  = -O2 -std=gnu99
    5.40 -LD      = gcc
    5.41 -LDFLAGS = -lucx
    5.42 -OBJ_EXT = .o
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/make/cc.mk	Sun Sep 24 18:43:58 2023 +0200
     6.3 @@ -0,0 +1,8 @@
     6.4 +#
     6.5 +# cc toolchain config
     6.6 +#
     6.7 +
     6.8 +CFLAGS =
     6.9 +DEBUG_CC_FLAGS = -g
    6.10 +RELEASE_CC_FLAGS = -O3 -DNDEBUG
    6.11 +LDFLAGS =
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/make/configure.vm	Sun Sep 24 18:43:58 2023 +0200
     7.3 @@ -0,0 +1,597 @@
     7.4 +#!/bin/sh
     7.5 +
     7.6 +# create temporary directory
     7.7 +TEMP_DIR=".tmp-`uname -n`"
     7.8 +rm -Rf "$TEMP_DIR"
     7.9 +if mkdir -p "$TEMP_DIR"; then
    7.10 +    :
    7.11 +else
    7.12 +    echo "Cannot create tmp dir $TEMP_DIR"
    7.13 +    echo "Abort"
    7.14 +    exit 1
    7.15 +fi
    7.16 +touch "$TEMP_DIR/options"
    7.17 +touch "$TEMP_DIR/features"
    7.18 +
    7.19 +# define standard variables
    7.20 +PREFIX=/usr
    7.21 +EPREFIX=
    7.22 +BINDIR=
    7.23 +SBINDIR=
    7.24 +LIBDIR=
    7.25 +LIBEXECDIR=
    7.26 +DATADIR=
    7.27 +SYSCONFDIR=
    7.28 +SHAREDSTATEDIR=
    7.29 +LOCALSTATEDIR=
    7.30 +INCLUDEDIR=
    7.31 +INFODIR=
    7.32 +MANDIR=
    7.33 +
    7.34 +# custom variables
    7.35 +#foreach( $var in $vars )
    7.36 +#if( $var.exec )
    7.37 +${var.varName}=`${var.value}`
    7.38 +#else
    7.39 +${var.varName}="${var.value}"
    7.40 +#end
    7.41 +#end
    7.42 +
    7.43 +# features
    7.44 +#foreach( $feature in $features )
    7.45 +#if( ${feature.isDefault()} )
    7.46 +${feature.getVarName()}=auto
    7.47 +#end
    7.48 +#end
    7.49 +
    7.50 +# clean abort
    7.51 +abort_configure()
    7.52 +{
    7.53 +    rm -Rf "$TEMP_DIR"
    7.54 +    exit 1
    7.55 +}
    7.56 +
    7.57 +# help text
    7.58 +printhelp()
    7.59 +{
    7.60 +    echo "Usage: $0 [OPTIONS]..."
    7.61 +    cat << __EOF__
    7.62 +Installation directories:
    7.63 +  --prefix=PREFIX         path prefix for architecture-independent files
    7.64 +                          [/usr]
    7.65 +  --exec-prefix=EPREFIX   path prefix for architecture-dependent files
    7.66 +                          [PREFIX]
    7.67 +
    7.68 +  --bindir=DIR            user executables [EPREFIX/bin]
    7.69 +  --sbindir=DIR           system admin executables [EPREFIX/sbin]
    7.70 +  --libexecdir=DIR        program executables [EPREFIX/libexec]
    7.71 +  --sysconfdir=DIR        system configuration files [PREFIX/etc]
    7.72 +  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
    7.73 +  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
    7.74 +  --libdir=DIR            object code libraries [EPREFIX/lib]
    7.75 +  --includedir=DIR        C header files [PREFIX/include]
    7.76 +  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
    7.77 +  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
    7.78 +  --infodir=DIR           info documentation [DATAROOTDIR/info]
    7.79 +  --mandir=DIR            man documentation [DATAROOTDIR/man]
    7.80 +
    7.81 +#if( $options.size() > 0 )
    7.82 +Options:
    7.83 +  --debug                 add extra compile flags for debug builds
    7.84 +  --release               add extra compile flags for release builds
    7.85 +#foreach( $opt in $options )
    7.86 +  --${opt.getArgument()}=${opt.getValuesString()}
    7.87 +#end
    7.88 +
    7.89 +#end
    7.90 +#if( $features.size() > 0 )
    7.91 +Optional Features:
    7.92 +#foreach( $feature in $features )
    7.93 +#if( $feature.default )
    7.94 +  --disable-${feature.arg}
    7.95 +#else
    7.96 +  --enable-${feature.arg}
    7.97 +#end
    7.98 +#end
    7.99 +
   7.100 +#end
   7.101 +__EOF__
   7.102 +}
   7.103 +
   7.104 +#
   7.105 +# parse arguments
   7.106 +#
   7.107 +BUILD_TYPE="default"
   7.108 +#set( $D = '$' )
   7.109 +for ARG in "$@"
   7.110 +do
   7.111 +    case "$ARG" in
   7.112 +        "--prefix="*)         PREFIX=${D}{ARG#--prefix=} ;;
   7.113 +        "--exec-prefix="*)    EPREFIX=${D}{ARG#--exec-prefix=} ;;
   7.114 +        "--bindir="*)         BINDIR=${D}{ARG#----bindir=} ;;
   7.115 +        "--sbindir="*)        SBINDIR=${D}{ARG#--sbindir=} ;;
   7.116 +        "--libdir="*)         LIBDIR=${D}{ARG#--libdir=} ;;
   7.117 +        "--libexecdir="*)     LIBEXECDIR=${D}{ARG#--libexecdir=} ;;
   7.118 +        "--datadir="*)        DATADIR=${D}{ARG#--datadir=} ;;
   7.119 +        "--sysconfdir="*)     SYSCONFDIR=${D}{ARG#--sysconfdir=} ;;
   7.120 +        "--sharedstatedir="*) SHAREDSTATEDIR=${D}{ARG#--sharedstatedir=} ;;
   7.121 +        "--localstatedir="*)  LOCALSTATEDIR=${D}{ARG#--localstatedir=} ;;
   7.122 +        "--includedir="*)     INCLUDEDIR=${D}{ARG#--includedir=} ;;
   7.123 +        "--infodir="*)        INFODIR=${D}{ARG#--infodir=} ;;
   7.124 +        "--mandir"*)          MANDIR=${D}{ARG#--mandir} ;;
   7.125 +        "--help"*) printhelp; abort_configure ;;
   7.126 +        "--debug")           BUILD_TYPE="debug" ;;
   7.127 +        "--release")         BUILD_TYPE="release" ;;
   7.128 +    #foreach( $opt in $options )
   7.129 +        "--${opt.getArgument()}="*) ${opt.getVarName()}=${D}{ARG#--${opt.getArgument()}=} ;;
   7.130 +    #end
   7.131 +    #foreach( $feature in $features )
   7.132 +        "--enable-${feature.arg}") ${feature.getVarName()}=on ;;
   7.133 +        "--disable-${feature.arg}") unset ${feature.getVarName()} ;;
   7.134 +    #end
   7.135 +        "-"*) echo "unknown option: $ARG"; abort_configure ;;
   7.136 +    esac
   7.137 +done
   7.138 +
   7.139 +## Begin unparsed content. **
   7.140 +#[[
   7.141 +# set dir variables
   7.142 +: ${EPREFIX:="$PREFIX"}
   7.143 +: ${BINDIR:="$EPREFIX/bin"}
   7.144 +: ${SBINDIR:="$EPREFIX/sbin"}
   7.145 +: ${LIBDIR:="$EPREFIX/lib"}
   7.146 +: ${LIBEXECDIR:="$EPREFIX/libexec"}
   7.147 +: ${DATADIR:="$PREFIX/share"}
   7.148 +: ${SYSCONFDIR:="$PREFIX/etc"}
   7.149 +: ${SHAREDSTATEDIR:="$PREFIX/com"}
   7.150 +: ${LOCALSTATEDIR:="$PREFIX/var"}
   7.151 +: ${INCLUDEDIR:="$PREFIX/include"}
   7.152 +: ${INFODIR:="$PREFIX/info"}
   7.153 +: ${MANDIR:="$PREFIX/man"}
   7.154 +
   7.155 +# Test for availability of pkg-config
   7.156 +PKG_CONFIG=`command -v pkg-config`
   7.157 +: ${PKG_CONFIG:="false"}
   7.158 +
   7.159 +# Simple uname based platform detection
   7.160 +# $PLATFORM is used for platform dependent dependency selection
   7.161 +OS=`uname -s`
   7.162 +OS_VERSION=`uname -r`
   7.163 +printf "detect platform... "
   7.164 +if [ "$OS" = "SunOS" ]; then
   7.165 +    PLATFORM="solaris sunos unix svr4"
   7.166 +fi
   7.167 +if [ "$OS" = "Linux" ]; then
   7.168 +    PLATFORM="linux unix"
   7.169 +fi
   7.170 +if [ "$OS" = "FreeBSD" ]; then
   7.171 +    PLATFORM="freebsd bsd unix"
   7.172 +fi
   7.173 +if [ "$OS" = "Darwin" ]; then
   7.174 +    PLATFORM="macos osx bsd unix"
   7.175 +fi
   7.176 +if echo "$OS" | grep -i "MINGW" > /dev/null; then
   7.177 +    PLATFORM="windows mingw"
   7.178 +fi
   7.179 +: ${PLATFORM:="unix"}
   7.180 +
   7.181 +PLATFORM_NAME=`echo "$PLATFORM" | cut -f1 -d' ' -`
   7.182 +echo "$PLATFORM_NAME"
   7.183 +
   7.184 +isplatform()
   7.185 +{
   7.186 +    for p in $PLATFORM
   7.187 +    do
   7.188 +        if [ "$p" = "$1" ]; then
   7.189 +            return 0
   7.190 +        fi
   7.191 +    done
   7.192 +    return 1
   7.193 +}
   7.194 +notisplatform()
   7.195 +{
   7.196 +    for p in $PLATFORM
   7.197 +    do
   7.198 +        if [ "$p" = "$1" ]; then
   7.199 +            return 1
   7.200 +        fi
   7.201 +    done
   7.202 +    return 0
   7.203 +}
   7.204 +]]#
   7.205 +## End of unparsed content **
   7.206 +
   7.207 +# generate vars.mk
   7.208 +cat > "$TEMP_DIR/vars.mk" << __EOF__
   7.209 +PREFIX="$PREFIX"
   7.210 +EPREFIX="$EPREFIX"
   7.211 +BINDIR="$BINDIR"
   7.212 +SBINDIR="$SBINDIR"
   7.213 +LIBDIR="$LIBDIR"
   7.214 +LIBEXECDIR="$LIBEXECDIR"
   7.215 +DATADIR="$DATADIR"
   7.216 +SYSCONFDIR="$SYSCONFDIR"
   7.217 +SHAREDSTATEDIR="$SHAREDSTATEDIR"
   7.218 +LOCALSTATEDIR="$LOCALSTATEDIR"
   7.219 +INCLUDEDIR="$INCLUDEDIR"
   7.220 +INFODIR="$INFODIR"
   7.221 +MANDIR="$MANDIR"
   7.222 +#foreach( $var in $vars )
   7.223 +${var.varName}="$${var.varName}"
   7.224 +#end
   7.225 +__EOF__
   7.226 +sort -u -o "$TEMP_DIR/vars.mk" "$TEMP_DIR/vars.mk"
   7.227 +
   7.228 +
   7.229 +# toolchain detection utilities
   7.230 +. make/toolchain.sh
   7.231 +
   7.232 +#
   7.233 +# DEPENDENCIES
   7.234 +#
   7.235 +
   7.236 +# check languages
   7.237 +lang_c=
   7.238 +lang_cpp=
   7.239 +#foreach( $lang in $languages )
   7.240 +if detect_${lang}_compiler ; then
   7.241 +    lang_${lang}=1
   7.242 +fi
   7.243 +#end
   7.244 +
   7.245 +# create buffer for make variables required by dependencies
   7.246 +echo > "$TEMP_DIR/make.mk"
   7.247 +
   7.248 +test_pkg_config()
   7.249 +{
   7.250 +    if "$PKG_CONFIG" --exists "$1" ; then :
   7.251 +    else return 1 ; fi
   7.252 +    if [ -z "$2" ] || "$PKG_CONFIG" --atleast-version="$2" "$1" ; then :
   7.253 +    else return 1 ; fi
   7.254 +    if [ -z "$3" ] || "$PKG_CONFIG" --exact-version="$3" "$1" ; then :
   7.255 +    else return 1 ; fi
   7.256 +    if [ -z "$4" ] || "$PKG_CONFIG" --max-version="$4" "$1" ; then :
   7.257 +    else return 1 ; fi
   7.258 +    return 0
   7.259 +}
   7.260 +
   7.261 +#foreach( $dependency in $namedDependencies )
   7.262 +dependency_error_${dependency.name}()
   7.263 +{
   7.264 +    printf "checking for ${dependency.name}... "
   7.265 +    #foreach( $sub in $dependency.getSubdependencies() )
   7.266 +    # dependency $sub.getFullName()
   7.267 +    while true
   7.268 +    do
   7.269 +        #if( $sub.platform )
   7.270 +        if notisplatform "${sub.platform}"; then
   7.271 +            break
   7.272 +        fi
   7.273 +        #end
   7.274 +        #foreach( $np in $sub.getNotList() )
   7.275 +        if isplatform "${np}"; then
   7.276 +            break
   7.277 +        fi
   7.278 +        #end
   7.279 +        #foreach( $lang in $sub.lang )
   7.280 +        if [ -z "$lang_${lang}" ] ; then
   7.281 +            break
   7.282 +        fi
   7.283 +        #end
   7.284 +        #if( $sub.pkgconfig.size() > 0 )
   7.285 +        if [ -z "$PKG_CONFIG" ]; then
   7.286 +            break
   7.287 +        fi
   7.288 +        #end
   7.289 +        #foreach( $test in $sub.tests )
   7.290 +        if $test > /dev/null ; then
   7.291 +            :
   7.292 +        else
   7.293 +            break
   7.294 +        fi
   7.295 +        #end
   7.296 +        #foreach( $pkg in $sub.pkgconfig )
   7.297 +        if test_pkg_config "$pkg.name" "$pkg.atleast" "$pkg.exact" "$pkg.max" ; then
   7.298 +            TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags $pkg.name`"
   7.299 +            TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs $pkg.name`"
   7.300 +        else
   7.301 +            break
   7.302 +        fi
   7.303 +        #end
   7.304 +        #foreach( $flags in $sub.flags )
   7.305 +        #if( $flags.exec )
   7.306 +        if tmp_flags=`$flags.value` ; then
   7.307 +            TEMP_$flags.varName="$TEMP_$flags.varName $tmp_flags"
   7.308 +        else
   7.309 +            break
   7.310 +        fi
   7.311 +        #else
   7.312 +        TEMP_$flags.varName="$TEMP_$flags.varName $flags.value"
   7.313 +        #end
   7.314 +        #end
   7.315 +        #if ( $sub.make.length() > 0 )
   7.316 +        cat >> $TEMP_DIR/make.mk << __EOF__
   7.317 +# Dependency: $dependency.name
   7.318 +$sub.make
   7.319 +__EOF__
   7.320 +        #end
   7.321 +        echo yes
   7.322 +        return 1
   7.323 +    done
   7.324 +
   7.325 +    #end
   7.326 +    echo no
   7.327 +    return 0
   7.328 +}
   7.329 +#end
   7.330 +
   7.331 +
   7.332 +
   7.333 +
   7.334 +# start collecting dependency information
   7.335 +echo > "$TEMP_DIR/flags.mk"
   7.336 +
   7.337 +DEPENDENCIES_FAILED=
   7.338 +ERROR=0
   7.339 +#if( $dependencies.size() > 0 )
   7.340 +# unnamed dependencies
   7.341 +TEMP_CFLAGS=
   7.342 +TEMP_CXXFLAGS=
   7.343 +TEMP_LDFLAGS=
   7.344 +#foreach( $dependency in $dependencies )
   7.345 +while true
   7.346 +do
   7.347 +    #if( $dependency.platform )
   7.348 +    if notisplatform "${dependency.platform}"; then
   7.349 +        break
   7.350 +    fi
   7.351 +    #end
   7.352 +    #foreach( $np in $dependency.getNotList() )
   7.353 +    if isplatform "${np}"; then
   7.354 +        break
   7.355 +    fi
   7.356 +    #end
   7.357 +    while true
   7.358 +    do
   7.359 +        #foreach( $lang in $dependency.lang )
   7.360 +        if [ -z "$lang_${lang}" ] ; then
   7.361 +            ERROR=1
   7.362 +            break
   7.363 +        fi
   7.364 +        #end
   7.365 +        #if( $dependency.pkgconfig.size() > 0 )
   7.366 +        if [ -z "$PKG_CONFIG" ]; then
   7.367 +            ERROR=1
   7.368 +            break
   7.369 +        fi
   7.370 +        #end
   7.371 +        #foreach( $pkg in $dependency.pkgconfig )
   7.372 +        printf "checking for pkg-config package $pkg.name... "
   7.373 +        if test_pkg_config "$pkg.name" "$pkg.atleast" "$pkg.exact" "$pkg.max" ; then
   7.374 +            echo yes
   7.375 +            TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags $pkg.name`"
   7.376 +            TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs $pkg.name`"
   7.377 +        else
   7.378 +            echo no
   7.379 +            ERROR=1
   7.380 +            break
   7.381 +        fi
   7.382 +        #end
   7.383 +
   7.384 +        #foreach( $flags in $dependency.flags )
   7.385 +        #if( $flags.exec )
   7.386 +        $flags.value > /dev/null
   7.387 +        if tmp_flags=`$flags.value` ; then
   7.388 +            TEMP_$flags.varName="$TEMP_$flags.varName $tmp_flags"
   7.389 +        else
   7.390 +            ERROR=1
   7.391 +            break
   7.392 +        fi
   7.393 +        #else
   7.394 +        TEMP_$flags.varName="$TEMP_$flags.varName $flags.value"
   7.395 +        #end
   7.396 +        #end
   7.397 +        #if ( $dependency.make.length() > 0 )
   7.398 +        cat >> "$TEMP_DIR/make.mk" << __EOF__
   7.399 +$dependency.make
   7.400 +__EOF__
   7.401 +        #end
   7.402 +        break
   7.403 +    done
   7.404 +    break
   7.405 +done
   7.406 +#end
   7.407 +
   7.408 +# add general dependency flags to flags.mk
   7.409 +echo "# general flags" >> "$TEMP_DIR/flags.mk"
   7.410 +if [ -n "${TEMP_CFLAGS}" ]; then
   7.411 +    echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
   7.412 +fi
   7.413 +if [ -n "${TEMP_CXXFLAGS}" ]; then
   7.414 +    echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
   7.415 +fi
   7.416 +if [ -n "${TEMP_LDFLAGS}" ]; then
   7.417 +    echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
   7.418 +fi
   7.419 +#end
   7.420 +
   7.421 +#
   7.422 +# OPTION VALUES
   7.423 +#
   7.424 +#foreach( $opt in $options )
   7.425 +#foreach( $val in $opt.values )
   7.426 +${val.func}()
   7.427 +{
   7.428 +    VERR=0
   7.429 +    #foreach( $dep in $val.dependencies )
   7.430 +    if dependency_error_$dep ; then
   7.431 +        VERR=1
   7.432 +    fi
   7.433 +    #end
   7.434 +    if [ $VERR -ne 0 ]; then
   7.435 +        return 1
   7.436 +    fi
   7.437 +    #foreach( $def in $val.defines )
   7.438 +        TEMP_CFLAGS="$TEMP_CFLAGS ${def.toFlags()}"
   7.439 +        TEMP_CXXFLAGS="$TEMP_CXXFLAGS ${def.toFlags()}"
   7.440 +    #end
   7.441 +    #if( $val.hasMake() )
   7.442 +    cat >> "$TEMP_DIR/make.mk" << __EOF__
   7.443 +$val.make
   7.444 +__EOF__
   7.445 +    #end
   7.446 +    return 0
   7.447 +}
   7.448 +#end
   7.449 +#end
   7.450 +
   7.451 +#
   7.452 +# TARGETS
   7.453 +#
   7.454 +
   7.455 +#foreach( $target in $targets )
   7.456 +echo >> "$TEMP_DIR/flags.mk"
   7.457 +#if ( $target.name )
   7.458 +# Target: $target.name
   7.459 +echo "# flags for target $target.name" >> "$TEMP_DIR/flags.mk"
   7.460 +#else
   7.461 +# Target
   7.462 +echo "# flags for unnamed target" >> "$TEMP_DIR/flags.mk"
   7.463 +#end
   7.464 +TEMP_CFLAGS=
   7.465 +TEMP_CXXFLAGS=
   7.466 +TEMP_LDFLAGS=
   7.467 +
   7.468 +#foreach( $dependency in $target.dependencies )
   7.469 +if dependency_error_$dependency; then
   7.470 +    DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ${dependency} "
   7.471 +    ERROR=1
   7.472 +fi
   7.473 +#end
   7.474 +
   7.475 +# Features
   7.476 +#foreach( $feature in $target.features )
   7.477 +if [ -n "$${feature.getVarName()}" ]; then
   7.478 +#foreach( $dependency in $feature.dependencies )
   7.479 +    # check dependency
   7.480 +    if dependency_error_$dependency ; then
   7.481 +        # "auto" features can fail and are just disabled in this case
   7.482 +        if [ "$${feature.getVarName()}" = "auto" ]; then
   7.483 +            DISABLE_${feature.getVarName()}=1
   7.484 +        else
   7.485 +            DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ${dependency} "
   7.486 +            ERROR=1
   7.487 +        fi
   7.488 +    fi
   7.489 +#end
   7.490 +    if [ -n "$DISABLE_${feature.getVarName()}" ]; then
   7.491 +        unset ${feature.getVarName()}
   7.492 +    fi
   7.493 +fi
   7.494 +#end
   7.495 +
   7.496 +#foreach( $opt in $target.options )
   7.497 +# Option: --${opt.argument}
   7.498 +if [ -z ${D}${opt.getVarName()} ]; then
   7.499 +    SAVED_ERROR="$ERROR"
   7.500 +    SAVED_DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED"
   7.501 +    ERROR=1
   7.502 +    while true
   7.503 +    do
   7.504 +        #foreach( $optdef in $opt.defaults )
   7.505 +        #if( $optdef.platform )
   7.506 +        if isplatform "$optdef.platform"; then
   7.507 +        #end
   7.508 +        if $optdef.func ; then
   7.509 +            echo "  ${opt.argument}: ${optdef.valueName}" >> "$TEMP_DIR/options"
   7.510 +            ERROR=0
   7.511 +            break
   7.512 +        fi
   7.513 +        #if( $optdef.platform )
   7.514 +        fi
   7.515 +        #end
   7.516 +        #end
   7.517 +        break
   7.518 +    done
   7.519 +    if [ $ERROR -ne 0 ]; then
   7.520 +        SAVED_ERROR=1
   7.521 +    fi
   7.522 +    ERROR="$SAVED_ERROR"
   7.523 +    DEPENDENCIES_FAILED="$SAVED_DEPENDENCIES_FAILED"
   7.524 +else
   7.525 +    if false; then
   7.526 +        false
   7.527 +    #foreach( $optval in $opt.values )
   7.528 +    elif [ "${D}${opt.getVarName()}" = "${optval.value}" ]; then
   7.529 +        echo "  ${opt.argument}: ${D}${opt.getVarName()}" >> $TEMP_DIR/options
   7.530 +        if $optval.func ; then
   7.531 +            :
   7.532 +        else
   7.533 +            ERROR=1
   7.534 +        fi
   7.535 +    #end
   7.536 +    fi
   7.537 +fi
   7.538 +#end
   7.539 +
   7.540 +if [ -n "${TEMP_CFLAGS}" ]; then
   7.541 +    echo "${target.getCFlags()}  += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
   7.542 +fi
   7.543 +if [ -n "${TEMP_CXXFLAGS}" ]; then
   7.544 +    echo "${target.getCXXFlags()}  += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
   7.545 +fi
   7.546 +if [ "$BUILD_TYPE" = "debug" ]; then
   7.547 +    echo '${target.getCFlags()} += ${DEBUG_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
   7.548 +    echo '${target.getCXXFlags()} += ${DEBUG_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
   7.549 +fi
   7.550 +if [ "$BUILD_TYPE" = "release" ]; then
   7.551 +    echo '${target.getCFlags()} += ${RELEASE_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
   7.552 +    echo '${target.getCXXFlags()} += ${RELEASE_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
   7.553 +fi
   7.554 +if [ -n "${TEMP_LDFLAGS}" ]; then
   7.555 +    echo "${target.getLDFlags()} += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
   7.556 +fi
   7.557 +
   7.558 +#end
   7.559 +
   7.560 +# final result
   7.561 +if [ $ERROR -ne 0 ]; then
   7.562 +    echo
   7.563 +    echo "Error: Unresolved dependencies"
   7.564 +    echo "$DEPENDENCIES_FAILED"
   7.565 +    abort_configure
   7.566 +fi
   7.567 +
   7.568 +echo "configure finished"
   7.569 +echo
   7.570 +echo "Build Config:"
   7.571 +echo "  PREFIX:    $PREFIX"
   7.572 +echo "  TOOLCHAIN: $TOOLCHAIN_NAME"
   7.573 +#if ( $options.size() > 0 )
   7.574 +echo "Options:"
   7.575 +cat "$TEMP_DIR/options"
   7.576 +#end
   7.577 +#if ( $features.size() > 0 )
   7.578 +echo "Features:"
   7.579 +#foreach( $feature in $features )
   7.580 +if [ -n "$${feature.getVarName()}" ]; then
   7.581 +echo "  $feature.name: on"
   7.582 +else
   7.583 +echo "  $feature.name: off"
   7.584 +fi
   7.585 +#end
   7.586 +#end
   7.587 +echo
   7.588 +
   7.589 +# generate the config.mk file
   7.590 +cat > "$TEMP_DIR/config.mk" << __EOF__
   7.591 +#
   7.592 +# config.mk generated by configure
   7.593 +#
   7.594 +
   7.595 +__EOF__
   7.596 +write_toolchain_defaults "$TEMP_DIR/toolchain.mk"
   7.597 +cat "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk
   7.598 +rm -Rf "$TEMP_DIR"
   7.599 +
   7.600 +
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/make/project.xml	Sun Sep 24 18:43:58 2023 +0200
     8.3 @@ -0,0 +1,15 @@
     8.4 +<?xml version="1.0" encoding="UTF-8"?>
     8.5 +<project xmlns="http://unixwork.de/uwproj">
     8.6 +	<config>
     8.7 +		<var name="MKDIR">mkdir -p</var>
     8.8 +		<var name="RMDIR">rm -fR</var>
     8.9 +	</config>
    8.10 +	<dependency>
    8.11 +		<lang>c</lang>
    8.12 +	</dependency>
    8.13 +	<dependency name="ucx">
    8.14 +		<test>check_lib ucx cx/list.h</test>
    8.15 +		<ldflags>-lucx</ldflags>
    8.16 +	</dependency>
    8.17 +</project>
    8.18 +
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/make/toolchain.sh	Sun Sep 24 18:43:58 2023 +0200
     9.3 @@ -0,0 +1,186 @@
     9.4 +#!/bin/sh
     9.5 +#
     9.6 +# toolchain detection
     9.7 +#
     9.8 +
     9.9 +C_COMPILERS="gcc clang suncc cc"
    9.10 +CPP_COMPILERS="g++ clang++ sunCC CC"
    9.11 +unset TOOLCHAIN_NAME
    9.12 +unset TOOLCHAIN_CC
    9.13 +unset TOOLCHAIN_CXX
    9.14 +
    9.15 +check_c_compiler()
    9.16 +{
    9.17 +	cat > "$TEMP_DIR/test.c" << __EOF__
    9.18 +/* test file */
    9.19 +#include <stdio.h>
    9.20 +int main(int argc, char **argv) {
    9.21 +#if defined(__clang__)
    9.22 +	printf("clang\n");
    9.23 +#elif defined(__GNUC__)
    9.24 +	printf("gcc\n");
    9.25 +#elif defined(__sun)
    9.26 +	printf("suncc\n");
    9.27 +#else
    9.28 +	printf("unknown\n");
    9.29 +#endif
    9.30 +	return 0;
    9.31 +}
    9.32 +__EOF__
    9.33 +	rm -f "$TEMP_DIR/checkcc"
    9.34 +	$1 -o "$TEMP_DIR/checkcc" $CFLAGS $LDFLAGS "$TEMP_DIR/test.c" 2> /dev/null
    9.35 +}
    9.36 +
    9.37 +check_cpp_compiler()
    9.38 +{
    9.39 +	cat > "$TEMP_DIR/test.cpp" << __EOF__
    9.40 +/* test file */
    9.41 +#include <iostream>
    9.42 +int main(int argc, char **argv) {
    9.43 +#if defined(__clang__)
    9.44 +	std::cout << "clang" << std::endl;
    9.45 +#elif defined(__GNUC__)
    9.46 +	std::cout << "gcc" << std::endl;
    9.47 +#elif defined(__sun)
    9.48 +	std::cout << "suncc" << std::endl;
    9.49 +#else
    9.50 +	std::cout << "cc" << std::endl;
    9.51 +#endif
    9.52 +	return 0;
    9.53 +}
    9.54 +__EOF__
    9.55 +	rm -f "$TEMP_DIR/checkcc"
    9.56 +	$1 -o "$TEMP_DIR/checkcc" $CXXFLAGS $LDFLAGS "$TEMP_DIR/test.cpp" 2> /dev/null
    9.57 +}
    9.58 +
    9.59 +create_libtest_source()
    9.60 +{
    9.61 +  # $1: filename
    9.62 +  # $2: optional include
    9.63 +	cat > "$TEMP_DIR/$1" << __EOF__
    9.64 +/* libtest file */
    9.65 +int main(int argc, char **argv) {
    9.66 +	return 0;
    9.67 +}
    9.68 +__EOF__
    9.69 +  if [ -n "$2" ]; then
    9.70 +    echo "#include <$2>" >> "$TEMP_DIR/$1"
    9.71 +  fi
    9.72 +}
    9.73 +
    9.74 +check_c_lib()
    9.75 +{
    9.76 +  # $1: libname
    9.77 +  # $2: optional include
    9.78 +  if [ -z "$TOOLCHAIN_CC" ]; then
    9.79 +    return 1
    9.80 +  fi
    9.81 +  create_libtest_source "test.c" "$2"
    9.82 +  rm -f "$TEMP_DIR/checklib"
    9.83 +	$TOOLCHAIN_CC -o "$TEMP_DIR/checklib" $CFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.c" 2> /dev/null
    9.84 +}
    9.85 +
    9.86 +check_cpp_lib()
    9.87 +{
    9.88 +  # $1: libname
    9.89 +  # $2: optional include
    9.90 +  if [ -z "$TOOLCHAIN_CXX" ]; then
    9.91 +    return 1
    9.92 +  fi
    9.93 +	create_libtest_source "test.cpp" "$2"
    9.94 +  rm -f "$TEMP_DIR/checklib"
    9.95 +	$TOOLCHAIN_CXX -o "$TEMP_DIR/checklib" $CXXFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.cpp" 2> /dev/null
    9.96 +}
    9.97 +
    9.98 +check_lib()
    9.99 +{
   9.100 +  # $1: libname
   9.101 +  # $2: optional include
   9.102 +	if [ -n "$TOOLCHAIN_CC" ]; then
   9.103 +		check_c_lib "$1" "$2"
   9.104 +	elif  [ -n "$TOOLCHAIN_CXX" ]; then
   9.105 +	  check_cpp_lib "$1" "$2"
   9.106 +	fi
   9.107 +}
   9.108 +
   9.109 +detect_c_compiler()
   9.110 +{
   9.111 +  if [ -n "$TOOLCHAIN_CC" ]; then
   9.112 +    return 0
   9.113 +  fi
   9.114 +  printf "detect C compiler... "
   9.115 +  if [ -n "$CC" ]; then
   9.116 +    if check_c_compiler "$CC"; then
   9.117 +      TOOLCHAIN_CC=$CC
   9.118 +      TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
   9.119 +      echo "$CC"
   9.120 +      return 0
   9.121 +    else
   9.122 +      echo "$CC is not a working C compiler"
   9.123 +      return 1
   9.124 +    fi
   9.125 +  else
   9.126 +    for COMP in $C_COMPILERS
   9.127 +    do
   9.128 +      if check_c_compiler "$COMP"; then
   9.129 +        TOOLCHAIN_CC=$COMP
   9.130 +        TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
   9.131 +        echo "$COMP"
   9.132 +        return 0
   9.133 +      fi
   9.134 +    done
   9.135 +    echo "not found"
   9.136 +    return 1
   9.137 +  fi
   9.138 +}
   9.139 +
   9.140 +detect_cpp_compiler()
   9.141 +{
   9.142 +  if [ -n "$TOOLCHAIN_CXX" ]; then
   9.143 +    return 0
   9.144 +  fi
   9.145 +  printf "detect C++ compiler... "
   9.146 +
   9.147 +  if [ -n "$CXX" ]; then
   9.148 +    if check_cpp_compiler "$CXX"; then
   9.149 +      TOOLCHAIN_CXX=$CXX
   9.150 +      TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
   9.151 +      echo "$CXX"
   9.152 +      return 0
   9.153 +    else
   9.154 +      echo "$CXX is not a working C++ compiler"
   9.155 +      return 1
   9.156 +    fi
   9.157 +  else
   9.158 +    for COMP in $CPP_COMPILERS
   9.159 +    do
   9.160 +      if check_cpp_compiler "$COMP"; then
   9.161 +        TOOLCHAIN_CXX=$COMP
   9.162 +        TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
   9.163 +        echo "$COMP"
   9.164 +        return 0
   9.165 +      fi
   9.166 +    done
   9.167 +    echo "${TOOLCHAIN_CXX:-"not found"}"
   9.168 +    return 1
   9.169 +  fi
   9.170 +}
   9.171 +
   9.172 +write_toolchain_defaults()
   9.173 +{
   9.174 +  echo "# toolchain" >> "$1"
   9.175 +  if [ -n "$TOOLCHAIN_CC" ]; then
   9.176 +    echo "CC = ${TOOLCHAIN_CC}" >> "$1"
   9.177 +  fi
   9.178 +  if [ -n "$TOOLCHAIN_CXX" ]; then
   9.179 +    echo "CXX = ${TOOLCHAIN_CXX}" >> "$1"
   9.180 +  fi
   9.181 +  echo >> "$1"
   9.182 +  if [ -f "make/${TOOLCHAIN_NAME}.mk" ]; then
   9.183 +    cat "make/${TOOLCHAIN_NAME}.mk" >> "$1"
   9.184 +  elif [ -f "make/cc.mk" ]; then
   9.185 +    cat "make/cc.mk" >> "$1"
   9.186 +  else
   9.187 +    echo "!!! WARNING !!! Default toolchain flags not found. Configuration might be incomplete."
   9.188 +  fi
   9.189 +}
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/make/uwproj.xsd	Sun Sep 24 18:43:58 2023 +0200
    10.3 @@ -0,0 +1,131 @@
    10.4 +<?xml version="1.0" encoding="UTF-8"?>
    10.5 +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    10.6 +           xmlns="http://unixwork.de/uwproj"
    10.7 +           targetNamespace="http://unixwork.de/uwproj"
    10.8 +           elementFormDefault="qualified"
    10.9 +           version="0.1"
   10.10 +>
   10.11 +    <xs:element name="project" type="ProjectType"/>
   10.12 +
   10.13 +    <xs:complexType name="ProjectType">
   10.14 +        <xs:sequence>
   10.15 +            <xs:element name="config" type="ConfigType" minOccurs="0"/>
   10.16 +            <xs:element name="dependency" type="DependencyType" minOccurs="0" maxOccurs="unbounded"/>
   10.17 +            <xs:element name="target" type="TargetType" minOccurs="0" maxOccurs="unbounded"/>
   10.18 +        </xs:sequence>
   10.19 +    </xs:complexType>
   10.20 +
   10.21 +    <xs:complexType name="ConfigType">
   10.22 +        <xs:sequence>
   10.23 +            <xs:element name="var" type="ConfigVarType" minOccurs="0" maxOccurs="unbounded"/>
   10.24 +        </xs:sequence>
   10.25 +    </xs:complexType>
   10.26 +
   10.27 +    <xs:complexType name="ConfigVarType">
   10.28 +        <xs:simpleContent>
   10.29 +            <xs:extension base="xs:string">
   10.30 +                <xs:attribute name="name" type="xs:string" use="required"/>
   10.31 +                <xs:attribute name="exec" type="xs:boolean" default="false"/>
   10.32 +            </xs:extension>
   10.33 +        </xs:simpleContent>
   10.34 +    </xs:complexType>
   10.35 +
   10.36 +    <xs:complexType name="PkgConfigType">
   10.37 +        <xs:simpleContent>
   10.38 +            <xs:extension base="xs:string">
   10.39 +                <xs:attribute name="atleast" type="xs:string"/>
   10.40 +                <xs:attribute name="exact" type="xs:string"/>
   10.41 +                <xs:attribute name="max" type="xs:string"/>
   10.42 +            </xs:extension>
   10.43 +        </xs:simpleContent>
   10.44 +    </xs:complexType>
   10.45 +
   10.46 +    <xs:simpleType name="LangType">
   10.47 +        <xs:restriction base="xs:string">
   10.48 +            <xs:enumeration value="c"/>
   10.49 +            <xs:enumeration value="cpp"/>
   10.50 +        </xs:restriction>
   10.51 +    </xs:simpleType>
   10.52 +
   10.53 +    <xs:complexType name="DependencyType">
   10.54 +        <xs:choice minOccurs="0" maxOccurs="unbounded">
   10.55 +            <xs:element name="lang" type="LangType"/>
   10.56 +            <xs:element name="cflags" type="FlagsType"/>
   10.57 +            <xs:element name="cxxflags" type="FlagsType"/>
   10.58 +            <xs:element name="ldflags" type="FlagsType"/>
   10.59 +            <xs:element name="pkgconfig" type="PkgConfigType"/>
   10.60 +            <xs:element name="test" type="xs:string"/>
   10.61 +            <xs:element name="make" type="xs:string"/>
   10.62 +        </xs:choice>
   10.63 +        <xs:attribute name="name" type="xs:string"/>
   10.64 +        <xs:attribute name="platform" type="xs:string"/>
   10.65 +        <xs:attribute name="not" type="xs:string"/>
   10.66 +    </xs:complexType>
   10.67 +
   10.68 +    <xs:complexType name="FlagsType">
   10.69 +        <xs:simpleContent>
   10.70 +            <xs:extension base="xs:string">
   10.71 +                <xs:attribute name="exec" type="xs:boolean" default="false"/>
   10.72 +            </xs:extension>
   10.73 +        </xs:simpleContent>
   10.74 +    </xs:complexType>
   10.75 +
   10.76 +    <xs:complexType name="TargetType">
   10.77 +        <xs:choice minOccurs="0" maxOccurs="unbounded">
   10.78 +            <xs:element name="feature" type="FeatureType"/>
   10.79 +            <xs:element name="option" type="OptionType"/>
   10.80 +            <xs:element name="define" type="DefineType"/>
   10.81 +            <xs:element name="dependencies" type="DependenciesType"/>
   10.82 +            <xs:element name="alldependencies">
   10.83 +                <xs:complexType/>
   10.84 +            </xs:element>
   10.85 +        </xs:choice>
   10.86 +        <xs:attribute name="name" type="xs:string"/>
   10.87 +    </xs:complexType>
   10.88 +
   10.89 +    <xs:complexType name="FeatureType">
   10.90 +        <xs:choice minOccurs="0" maxOccurs="unbounded">
   10.91 +            <xs:group ref="TargetDataGroup"/>
   10.92 +        </xs:choice>
   10.93 +        <xs:attribute name="name" type="xs:string" use="required"/>
   10.94 +        <xs:attribute name="arg" type="xs:string"/>
   10.95 +        <xs:attribute name="default" type="xs:boolean" default="false"/>
   10.96 +    </xs:complexType>
   10.97 +
   10.98 +    <xs:complexType name="OptionType">
   10.99 +        <xs:sequence>
  10.100 +            <xs:element name="value" type="OptionValueType" minOccurs="0" maxOccurs="unbounded"/>
  10.101 +            <xs:element name="default" type="OptionDefaultType" minOccurs="0" maxOccurs="unbounded"/>
  10.102 +        </xs:sequence>
  10.103 +        <xs:attribute name="arg" type="xs:string"/>
  10.104 +    </xs:complexType>
  10.105 +
  10.106 +    <xs:complexType name="OptionValueType">
  10.107 +        <xs:choice minOccurs="0" maxOccurs="unbounded">
  10.108 +            <xs:group ref="TargetDataGroup"/>
  10.109 +        </xs:choice>
  10.110 +        <xs:attribute name="str" type="xs:string" use="required"/>
  10.111 +    </xs:complexType>
  10.112 +
  10.113 +    <xs:complexType name="OptionDefaultType">
  10.114 +        <xs:attribute name="value" type="xs:string" use="required"/>
  10.115 +        <xs:attribute name="platform" type="xs:string"/>
  10.116 +    </xs:complexType>
  10.117 +
  10.118 +    <xs:group name="TargetDataGroup">
  10.119 +        <xs:choice>
  10.120 +            <xs:element name="define" type="DefineType" minOccurs="0" maxOccurs="unbounded"/>
  10.121 +            <xs:element name="dependencies" type="DependenciesType" minOccurs="0" maxOccurs="unbounded"/>
  10.122 +            <xs:element name="make" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
  10.123 +        </xs:choice>
  10.124 +    </xs:group>
  10.125 +
  10.126 +    <xs:complexType name="DefineType">
  10.127 +        <xs:attribute name="name" type="xs:string" use="required"/>
  10.128 +        <xs:attribute name="value" type="xs:string"/>
  10.129 +    </xs:complexType>
  10.130 +
  10.131 +    <xs:simpleType name="DependenciesType">
  10.132 +        <xs:restriction base="xs:string"/>
  10.133 +    </xs:simpleType>
  10.134 +</xs:schema>
  10.135 \ No newline at end of file

mercurial