configure

changeset 72
b533da8e7411
child 73
072fa3e165f0
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/configure	Sun Sep 24 18:43:58 2023 +0200
     1.3 @@ -0,0 +1,341 @@
     1.4 +#!/bin/sh
     1.5 +
     1.6 +# create temporary directory
     1.7 +TEMP_DIR=".tmp-`uname -n`"
     1.8 +rm -Rf "$TEMP_DIR"
     1.9 +if mkdir -p "$TEMP_DIR"; then
    1.10 +    :
    1.11 +else
    1.12 +    echo "Cannot create tmp dir $TEMP_DIR"
    1.13 +    echo "Abort"
    1.14 +    exit 1
    1.15 +fi
    1.16 +touch "$TEMP_DIR/options"
    1.17 +touch "$TEMP_DIR/features"
    1.18 +
    1.19 +# define standard variables
    1.20 +PREFIX=/usr
    1.21 +EPREFIX=
    1.22 +BINDIR=
    1.23 +SBINDIR=
    1.24 +LIBDIR=
    1.25 +LIBEXECDIR=
    1.26 +DATADIR=
    1.27 +SYSCONFDIR=
    1.28 +SHAREDSTATEDIR=
    1.29 +LOCALSTATEDIR=
    1.30 +INCLUDEDIR=
    1.31 +INFODIR=
    1.32 +MANDIR=
    1.33 +
    1.34 +# custom variables
    1.35 +MKDIR="mkdir -p"
    1.36 +RMDIR="rm -fR"
    1.37 +
    1.38 +# features
    1.39 +
    1.40 +# clean abort
    1.41 +abort_configure()
    1.42 +{
    1.43 +    rm -Rf "$TEMP_DIR"
    1.44 +    exit 1
    1.45 +}
    1.46 +
    1.47 +# help text
    1.48 +printhelp()
    1.49 +{
    1.50 +    echo "Usage: $0 [OPTIONS]..."
    1.51 +    cat << __EOF__
    1.52 +Installation directories:
    1.53 +  --prefix=PREFIX         path prefix for architecture-independent files
    1.54 +                          [/usr]
    1.55 +  --exec-prefix=EPREFIX   path prefix for architecture-dependent files
    1.56 +                          [PREFIX]
    1.57 +
    1.58 +  --bindir=DIR            user executables [EPREFIX/bin]
    1.59 +  --sbindir=DIR           system admin executables [EPREFIX/sbin]
    1.60 +  --libexecdir=DIR        program executables [EPREFIX/libexec]
    1.61 +  --sysconfdir=DIR        system configuration files [PREFIX/etc]
    1.62 +  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
    1.63 +  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
    1.64 +  --libdir=DIR            object code libraries [EPREFIX/lib]
    1.65 +  --includedir=DIR        C header files [PREFIX/include]
    1.66 +  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
    1.67 +  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
    1.68 +  --infodir=DIR           info documentation [DATAROOTDIR/info]
    1.69 +  --mandir=DIR            man documentation [DATAROOTDIR/man]
    1.70 +
    1.71 +__EOF__
    1.72 +}
    1.73 +
    1.74 +#
    1.75 +# parse arguments
    1.76 +#
    1.77 +BUILD_TYPE="default"
    1.78 +for ARG in "$@"
    1.79 +do
    1.80 +    case "$ARG" in
    1.81 +        "--prefix="*)         PREFIX=${ARG#--prefix=} ;;
    1.82 +        "--exec-prefix="*)    EPREFIX=${ARG#--exec-prefix=} ;;
    1.83 +        "--bindir="*)         BINDIR=${ARG#----bindir=} ;;
    1.84 +        "--sbindir="*)        SBINDIR=${ARG#--sbindir=} ;;
    1.85 +        "--libdir="*)         LIBDIR=${ARG#--libdir=} ;;
    1.86 +        "--libexecdir="*)     LIBEXECDIR=${ARG#--libexecdir=} ;;
    1.87 +        "--datadir="*)        DATADIR=${ARG#--datadir=} ;;
    1.88 +        "--sysconfdir="*)     SYSCONFDIR=${ARG#--sysconfdir=} ;;
    1.89 +        "--sharedstatedir="*) SHAREDSTATEDIR=${ARG#--sharedstatedir=} ;;
    1.90 +        "--localstatedir="*)  LOCALSTATEDIR=${ARG#--localstatedir=} ;;
    1.91 +        "--includedir="*)     INCLUDEDIR=${ARG#--includedir=} ;;
    1.92 +        "--infodir="*)        INFODIR=${ARG#--infodir=} ;;
    1.93 +        "--mandir"*)          MANDIR=${ARG#--mandir} ;;
    1.94 +        "--help"*) printhelp; abort_configure ;;
    1.95 +        "--debug")           BUILD_TYPE="debug" ;;
    1.96 +        "--release")         BUILD_TYPE="release" ;;
    1.97 +        "-"*) echo "unknown option: $ARG"; abort_configure ;;
    1.98 +    esac
    1.99 +done
   1.100 +
   1.101 +
   1.102 +# set dir variables
   1.103 +: ${EPREFIX:="$PREFIX"}
   1.104 +: ${BINDIR:="$EPREFIX/bin"}
   1.105 +: ${SBINDIR:="$EPREFIX/sbin"}
   1.106 +: ${LIBDIR:="$EPREFIX/lib"}
   1.107 +: ${LIBEXECDIR:="$EPREFIX/libexec"}
   1.108 +: ${DATADIR:="$PREFIX/share"}
   1.109 +: ${SYSCONFDIR:="$PREFIX/etc"}
   1.110 +: ${SHAREDSTATEDIR:="$PREFIX/com"}
   1.111 +: ${LOCALSTATEDIR:="$PREFIX/var"}
   1.112 +: ${INCLUDEDIR:="$PREFIX/include"}
   1.113 +: ${INFODIR:="$PREFIX/info"}
   1.114 +: ${MANDIR:="$PREFIX/man"}
   1.115 +
   1.116 +# Test for availability of pkg-config
   1.117 +PKG_CONFIG=`command -v pkg-config`
   1.118 +: ${PKG_CONFIG:="false"}
   1.119 +
   1.120 +# Simple uname based platform detection
   1.121 +# $PLATFORM is used for platform dependent dependency selection
   1.122 +OS=`uname -s`
   1.123 +OS_VERSION=`uname -r`
   1.124 +printf "detect platform... "
   1.125 +if [ "$OS" = "SunOS" ]; then
   1.126 +    PLATFORM="solaris sunos unix svr4"
   1.127 +fi
   1.128 +if [ "$OS" = "Linux" ]; then
   1.129 +    PLATFORM="linux unix"
   1.130 +fi
   1.131 +if [ "$OS" = "FreeBSD" ]; then
   1.132 +    PLATFORM="freebsd bsd unix"
   1.133 +fi
   1.134 +if [ "$OS" = "Darwin" ]; then
   1.135 +    PLATFORM="macos osx bsd unix"
   1.136 +fi
   1.137 +if echo "$OS" | grep -i "MINGW" > /dev/null; then
   1.138 +    PLATFORM="windows mingw"
   1.139 +fi
   1.140 +: ${PLATFORM:="unix"}
   1.141 +
   1.142 +PLATFORM_NAME=`echo "$PLATFORM" | cut -f1 -d' ' -`
   1.143 +echo "$PLATFORM_NAME"
   1.144 +
   1.145 +isplatform()
   1.146 +{
   1.147 +    for p in $PLATFORM
   1.148 +    do
   1.149 +        if [ "$p" = "$1" ]; then
   1.150 +            return 0
   1.151 +        fi
   1.152 +    done
   1.153 +    return 1
   1.154 +}
   1.155 +notisplatform()
   1.156 +{
   1.157 +    for p in $PLATFORM
   1.158 +    do
   1.159 +        if [ "$p" = "$1" ]; then
   1.160 +            return 1
   1.161 +        fi
   1.162 +    done
   1.163 +    return 0
   1.164 +}
   1.165 +
   1.166 +
   1.167 +# generate vars.mk
   1.168 +cat > "$TEMP_DIR/vars.mk" << __EOF__
   1.169 +PREFIX="$PREFIX"
   1.170 +EPREFIX="$EPREFIX"
   1.171 +BINDIR="$BINDIR"
   1.172 +SBINDIR="$SBINDIR"
   1.173 +LIBDIR="$LIBDIR"
   1.174 +LIBEXECDIR="$LIBEXECDIR"
   1.175 +DATADIR="$DATADIR"
   1.176 +SYSCONFDIR="$SYSCONFDIR"
   1.177 +SHAREDSTATEDIR="$SHAREDSTATEDIR"
   1.178 +LOCALSTATEDIR="$LOCALSTATEDIR"
   1.179 +INCLUDEDIR="$INCLUDEDIR"
   1.180 +INFODIR="$INFODIR"
   1.181 +MANDIR="$MANDIR"
   1.182 +MKDIR=$MKDIR
   1.183 +RMDIR=$RMDIR
   1.184 +__EOF__
   1.185 +sort -u -o "$TEMP_DIR/vars.mk" "$TEMP_DIR/vars.mk"
   1.186 +
   1.187 +
   1.188 +# toolchain detection utilities
   1.189 +. make/toolchain.sh
   1.190 +
   1.191 +#
   1.192 +# DEPENDENCIES
   1.193 +#
   1.194 +
   1.195 +# check languages
   1.196 +lang_c=
   1.197 +lang_cpp=
   1.198 +if detect_c_compiler ; then
   1.199 +    lang_c=1
   1.200 +fi
   1.201 +
   1.202 +# create buffer for make variables required by dependencies
   1.203 +echo > "$TEMP_DIR/make.mk"
   1.204 +
   1.205 +test_pkg_config()
   1.206 +{
   1.207 +    if "$PKG_CONFIG" --exists "$1" ; then :
   1.208 +    else return 1 ; fi
   1.209 +    if [ -z "$2" ] || "$PKG_CONFIG" --atleast-version="$2" "$1" ; then :
   1.210 +    else return 1 ; fi
   1.211 +    if [ -z "$3" ] || "$PKG_CONFIG" --exact-version="$3" "$1" ; then :
   1.212 +    else return 1 ; fi
   1.213 +    if [ -z "$4" ] || "$PKG_CONFIG" --max-version="$4" "$1" ; then :
   1.214 +    else return 1 ; fi
   1.215 +    return 0
   1.216 +}
   1.217 +
   1.218 +dependency_error_ucx()
   1.219 +{
   1.220 +    printf "checking for ucx... "
   1.221 +    # dependency ucx
   1.222 +    while true
   1.223 +    do
   1.224 +        if check_lib ucx cx/list.h > /dev/null ; then
   1.225 +            :
   1.226 +        else
   1.227 +            break
   1.228 +        fi
   1.229 +        TEMP_LDFLAGS="$TEMP_LDFLAGS -lucx"
   1.230 +        echo yes
   1.231 +        return 1
   1.232 +    done
   1.233 +
   1.234 +    echo no
   1.235 +    return 0
   1.236 +}
   1.237 +
   1.238 +
   1.239 +
   1.240 +
   1.241 +# start collecting dependency information
   1.242 +echo > "$TEMP_DIR/flags.mk"
   1.243 +
   1.244 +DEPENDENCIES_FAILED=
   1.245 +ERROR=0
   1.246 +# unnamed dependencies
   1.247 +TEMP_CFLAGS=
   1.248 +TEMP_CXXFLAGS=
   1.249 +TEMP_LDFLAGS=
   1.250 +while true
   1.251 +do
   1.252 +    while true
   1.253 +    do
   1.254 +        if [ -z "$lang_c" ] ; then
   1.255 +            ERROR=1
   1.256 +            break
   1.257 +        fi
   1.258 +
   1.259 +        break
   1.260 +    done
   1.261 +    break
   1.262 +done
   1.263 +
   1.264 +# add general dependency flags to flags.mk
   1.265 +echo "# general flags" >> "$TEMP_DIR/flags.mk"
   1.266 +if [ -n "${TEMP_CFLAGS}" ]; then
   1.267 +    echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
   1.268 +fi
   1.269 +if [ -n "${TEMP_CXXFLAGS}" ]; then
   1.270 +    echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
   1.271 +fi
   1.272 +if [ -n "${TEMP_LDFLAGS}" ]; then
   1.273 +    echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
   1.274 +fi
   1.275 +
   1.276 +#
   1.277 +# OPTION VALUES
   1.278 +#
   1.279 +
   1.280 +#
   1.281 +# TARGETS
   1.282 +#
   1.283 +
   1.284 +echo >> "$TEMP_DIR/flags.mk"
   1.285 +# Target: default
   1.286 +echo "# flags for target default" >> "$TEMP_DIR/flags.mk"
   1.287 +TEMP_CFLAGS=
   1.288 +TEMP_CXXFLAGS=
   1.289 +TEMP_LDFLAGS=
   1.290 +
   1.291 +if dependency_error_ucx; then
   1.292 +    DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ucx "
   1.293 +    ERROR=1
   1.294 +fi
   1.295 +
   1.296 +# Features
   1.297 +
   1.298 +
   1.299 +if [ -n "${TEMP_CFLAGS}" ]; then
   1.300 +    echo "CFLAGS  += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
   1.301 +fi
   1.302 +if [ -n "${TEMP_CXXFLAGS}" ]; then
   1.303 +    echo "CXXFLAGS  += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
   1.304 +fi
   1.305 +if [ "$BUILD_TYPE" = "debug" ]; then
   1.306 +    echo 'CFLAGS += ${DEBUG_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
   1.307 +    echo 'CXXFLAGS += ${DEBUG_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
   1.308 +fi
   1.309 +if [ "$BUILD_TYPE" = "release" ]; then
   1.310 +    echo 'CFLAGS += ${RELEASE_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
   1.311 +    echo 'CXXFLAGS += ${RELEASE_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
   1.312 +fi
   1.313 +if [ -n "${TEMP_LDFLAGS}" ]; then
   1.314 +    echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
   1.315 +fi
   1.316 +
   1.317 +
   1.318 +# final result
   1.319 +if [ $ERROR -ne 0 ]; then
   1.320 +    echo
   1.321 +    echo "Error: Unresolved dependencies"
   1.322 +    echo "$DEPENDENCIES_FAILED"
   1.323 +    abort_configure
   1.324 +fi
   1.325 +
   1.326 +echo "configure finished"
   1.327 +echo
   1.328 +echo "Build Config:"
   1.329 +echo "  PREFIX:    $PREFIX"
   1.330 +echo "  TOOLCHAIN: $TOOLCHAIN_NAME"
   1.331 +echo
   1.332 +
   1.333 +# generate the config.mk file
   1.334 +cat > "$TEMP_DIR/config.mk" << __EOF__
   1.335 +#
   1.336 +# config.mk generated by configure
   1.337 +#
   1.338 +
   1.339 +__EOF__
   1.340 +write_toolchain_defaults "$TEMP_DIR/toolchain.mk"
   1.341 +cat "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk
   1.342 +rm -Rf "$TEMP_DIR"
   1.343 +
   1.344 +

mercurial