configure

changeset 71
0bdb910478cc
child 72
7e58e0f74e50
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/configure	Sun Oct 01 12:53:35 2023 +0200
     1.3 @@ -0,0 +1,431 @@
     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 +BUILDDIR=`pwd`/build
    1.36 +
    1.37 +# features
    1.38 +
    1.39 +# clean abort
    1.40 +abort_configure()
    1.41 +{
    1.42 +    rm -Rf "$TEMP_DIR"
    1.43 +    exit 1
    1.44 +}
    1.45 +
    1.46 +# help text
    1.47 +printhelp()
    1.48 +{
    1.49 +    echo "Usage: $0 [OPTIONS]..."
    1.50 +    cat << __EOF__
    1.51 +Installation directories:
    1.52 +  --prefix=PREFIX         path prefix for architecture-independent files
    1.53 +                          [/usr]
    1.54 +  --exec-prefix=EPREFIX   path prefix for architecture-dependent files
    1.55 +                          [PREFIX]
    1.56 +
    1.57 +  --bindir=DIR            user executables [EPREFIX/bin]
    1.58 +  --sbindir=DIR           system admin executables [EPREFIX/sbin]
    1.59 +  --libexecdir=DIR        program executables [EPREFIX/libexec]
    1.60 +  --sysconfdir=DIR        system configuration files [PREFIX/etc]
    1.61 +  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
    1.62 +  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
    1.63 +  --libdir=DIR            object code libraries [EPREFIX/lib]
    1.64 +  --includedir=DIR        C header files [PREFIX/include]
    1.65 +  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
    1.66 +  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
    1.67 +  --infodir=DIR           info documentation [DATAROOTDIR/info]
    1.68 +  --mandir=DIR            man documentation [DATAROOTDIR/man]
    1.69 +
    1.70 +__EOF__
    1.71 +}
    1.72 +
    1.73 +#
    1.74 +# parse arguments
    1.75 +#
    1.76 +BUILD_TYPE="default"
    1.77 +for ARG in "$@"
    1.78 +do
    1.79 +    case "$ARG" in
    1.80 +        "--prefix="*)         PREFIX=${ARG#--prefix=} ;;
    1.81 +        "--exec-prefix="*)    EPREFIX=${ARG#--exec-prefix=} ;;
    1.82 +        "--bindir="*)         BINDIR=${ARG#----bindir=} ;;
    1.83 +        "--sbindir="*)        SBINDIR=${ARG#--sbindir=} ;;
    1.84 +        "--libdir="*)         LIBDIR=${ARG#--libdir=} ;;
    1.85 +        "--libexecdir="*)     LIBEXECDIR=${ARG#--libexecdir=} ;;
    1.86 +        "--datadir="*)        DATADIR=${ARG#--datadir=} ;;
    1.87 +        "--sysconfdir="*)     SYSCONFDIR=${ARG#--sysconfdir=} ;;
    1.88 +        "--sharedstatedir="*) SHAREDSTATEDIR=${ARG#--sharedstatedir=} ;;
    1.89 +        "--localstatedir="*)  LOCALSTATEDIR=${ARG#--localstatedir=} ;;
    1.90 +        "--includedir="*)     INCLUDEDIR=${ARG#--includedir=} ;;
    1.91 +        "--infodir="*)        INFODIR=${ARG#--infodir=} ;;
    1.92 +        "--mandir"*)          MANDIR=${ARG#--mandir} ;;
    1.93 +        "--help"*) printhelp; abort_configure ;;
    1.94 +        "--debug")           BUILD_TYPE="debug" ;;
    1.95 +        "--release")         BUILD_TYPE="release" ;;
    1.96 +        "-"*) echo "unknown option: $ARG"; abort_configure ;;
    1.97 +    esac
    1.98 +done
    1.99 +
   1.100 +
   1.101 +# set dir variables
   1.102 +: ${EPREFIX:="$PREFIX"}
   1.103 +: ${BINDIR:="$EPREFIX/bin"}
   1.104 +: ${SBINDIR:="$EPREFIX/sbin"}
   1.105 +: ${LIBDIR:="$EPREFIX/lib"}
   1.106 +: ${LIBEXECDIR:="$EPREFIX/libexec"}
   1.107 +: ${DATADIR:="$PREFIX/share"}
   1.108 +: ${SYSCONFDIR:="$PREFIX/etc"}
   1.109 +: ${SHAREDSTATEDIR:="$PREFIX/com"}
   1.110 +: ${LOCALSTATEDIR:="$PREFIX/var"}
   1.111 +: ${INCLUDEDIR:="$PREFIX/include"}
   1.112 +: ${INFODIR:="$PREFIX/info"}
   1.113 +: ${MANDIR:="$PREFIX/man"}
   1.114 +
   1.115 +# Test for availability of pkg-config
   1.116 +PKG_CONFIG=`command -v pkg-config`
   1.117 +: ${PKG_CONFIG:="false"}
   1.118 +
   1.119 +# Simple uname based platform detection
   1.120 +# $PLATFORM is used for platform dependent dependency selection
   1.121 +OS=`uname -s`
   1.122 +OS_VERSION=`uname -r`
   1.123 +printf "detect platform... "
   1.124 +if [ "$OS" = "SunOS" ]; then
   1.125 +    PLATFORM="solaris sunos unix svr4"
   1.126 +fi
   1.127 +if [ "$OS" = "Linux" ]; then
   1.128 +    PLATFORM="linux unix"
   1.129 +fi
   1.130 +if [ "$OS" = "FreeBSD" ]; then
   1.131 +    PLATFORM="freebsd bsd unix"
   1.132 +fi
   1.133 +if [ "$OS" = "Darwin" ]; then
   1.134 +    PLATFORM="macos osx bsd unix"
   1.135 +fi
   1.136 +if echo "$OS" | grep -i "MINGW" > /dev/null; then
   1.137 +    PLATFORM="windows mingw"
   1.138 +fi
   1.139 +: ${PLATFORM:="unix"}
   1.140 +
   1.141 +PLATFORM_NAME=`echo "$PLATFORM" | cut -f1 -d' ' -`
   1.142 +echo "$PLATFORM_NAME"
   1.143 +
   1.144 +isplatform()
   1.145 +{
   1.146 +    for p in $PLATFORM
   1.147 +    do
   1.148 +        if [ "$p" = "$1" ]; then
   1.149 +            return 0
   1.150 +        fi
   1.151 +    done
   1.152 +    return 1
   1.153 +}
   1.154 +notisplatform()
   1.155 +{
   1.156 +    for p in $PLATFORM
   1.157 +    do
   1.158 +        if [ "$p" = "$1" ]; then
   1.159 +            return 1
   1.160 +        fi
   1.161 +    done
   1.162 +    return 0
   1.163 +}
   1.164 +
   1.165 +
   1.166 +# generate vars.mk
   1.167 +cat > "$TEMP_DIR/vars.mk" << __EOF__
   1.168 +PREFIX=$PREFIX
   1.169 +EPREFIX=$EPREFIX
   1.170 +BINDIR=$BINDIR
   1.171 +SBINDIR=$SBINDIR
   1.172 +LIBDIR=$LIBDIR
   1.173 +LIBEXECDIR=$LIBEXECDIR
   1.174 +DATADIR=$DATADIR
   1.175 +SYSCONFDIR=$SYSCONFDIR
   1.176 +SHAREDSTATEDIR=$SHAREDSTATEDIR
   1.177 +LOCALSTATEDIR=$LOCALSTATEDIR
   1.178 +INCLUDEDIR=$INCLUDEDIR
   1.179 +INFODIR=$INFODIR
   1.180 +MANDIR=$MANDIR
   1.181 +BUILDDIR=$BUILDDIR
   1.182 +__EOF__
   1.183 +sort -u -o "$TEMP_DIR/vars.mk" "$TEMP_DIR/vars.mk"
   1.184 +
   1.185 +
   1.186 +# toolchain detection utilities
   1.187 +. make/toolchain.sh
   1.188 +
   1.189 +#
   1.190 +# DEPENDENCIES
   1.191 +#
   1.192 +
   1.193 +# check languages
   1.194 +lang_c=
   1.195 +lang_cpp=
   1.196 +if detect_c_compiler ; then
   1.197 +    lang_c=1
   1.198 +fi
   1.199 +
   1.200 +# create buffer for make variables required by dependencies
   1.201 +echo > "$TEMP_DIR/make.mk"
   1.202 +
   1.203 +test_pkg_config()
   1.204 +{
   1.205 +    if "$PKG_CONFIG" --exists "$1" ; then :
   1.206 +    else return 1 ; fi
   1.207 +    if [ -z "$2" ] || "$PKG_CONFIG" --atleast-version="$2" "$1" ; then :
   1.208 +    else return 1 ; fi
   1.209 +    if [ -z "$3" ] || "$PKG_CONFIG" --exact-version="$3" "$1" ; then :
   1.210 +    else return 1 ; fi
   1.211 +    if [ -z "$4" ] || "$PKG_CONFIG" --max-version="$4" "$1" ; then :
   1.212 +    else return 1 ; fi
   1.213 +    return 0
   1.214 +}
   1.215 +
   1.216 +dependency_error_archiver()
   1.217 +{
   1.218 +    printf "checking for archiver... "
   1.219 +    # dependency archiver
   1.220 +    while true
   1.221 +    do
   1.222 +        if command -v ar > /dev/null ; then
   1.223 +            :
   1.224 +        else
   1.225 +            break
   1.226 +        fi
   1.227 +        cat >> $TEMP_DIR/make.mk << __EOF__
   1.228 +# Dependency: archiver
   1.229 +AR = ar
   1.230 +ARFLAGS = -r
   1.231 +
   1.232 +__EOF__
   1.233 +        echo yes
   1.234 +        return 1
   1.235 +    done
   1.236 +
   1.237 +    echo no
   1.238 +    return 0
   1.239 +}
   1.240 +dependency_error_rmdir()
   1.241 +{
   1.242 +    printf "checking for rmdir... "
   1.243 +    # dependency rmdir
   1.244 +    while true
   1.245 +    do
   1.246 +        if command -v rm > /dev/null ; then
   1.247 +            :
   1.248 +        else
   1.249 +            break
   1.250 +        fi
   1.251 +        cat >> $TEMP_DIR/make.mk << __EOF__
   1.252 +# Dependency: rmdir
   1.253 +RM = rm
   1.254 +RMFLAGS = -f -R
   1.255 +
   1.256 +__EOF__
   1.257 +        echo yes
   1.258 +        return 1
   1.259 +    done
   1.260 +
   1.261 +    echo no
   1.262 +    return 0
   1.263 +}
   1.264 +dependency_error_ncurses()
   1.265 +{
   1.266 +    printf "checking for ncurses... "
   1.267 +    # dependency ncurses
   1.268 +    while true
   1.269 +    do
   1.270 +        if [ -z "$PKG_CONFIG" ]; then
   1.271 +            break
   1.272 +        fi
   1.273 +        if test_pkg_config "ncursesw" "" "" "" ; then
   1.274 +            TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags ncursesw`"
   1.275 +            TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs ncursesw`"
   1.276 +        else
   1.277 +            break
   1.278 +        fi
   1.279 +        echo yes
   1.280 +        return 1
   1.281 +    done
   1.282 +
   1.283 +    echo no
   1.284 +    return 0
   1.285 +}
   1.286 +dependency_error_mkdir()
   1.287 +{
   1.288 +    printf "checking for mkdir... "
   1.289 +    # dependency mkdir
   1.290 +    while true
   1.291 +    do
   1.292 +        if command -v mkdir > /dev/null ; then
   1.293 +            :
   1.294 +        else
   1.295 +            break
   1.296 +        fi
   1.297 +        cat >> $TEMP_DIR/make.mk << __EOF__
   1.298 +# Dependency: mkdir
   1.299 +MKDIR = mkdir
   1.300 +MKDIRFLAGS = -p
   1.301 +
   1.302 +__EOF__
   1.303 +        echo yes
   1.304 +        return 1
   1.305 +    done
   1.306 +
   1.307 +    echo no
   1.308 +    return 0
   1.309 +}
   1.310 +
   1.311 +
   1.312 +
   1.313 +
   1.314 +# start collecting dependency information
   1.315 +echo > "$TEMP_DIR/flags.mk"
   1.316 +
   1.317 +DEPENDENCIES_FAILED=
   1.318 +ERROR=0
   1.319 +# unnamed dependencies
   1.320 +TEMP_CFLAGS=
   1.321 +TEMP_CXXFLAGS=
   1.322 +TEMP_LDFLAGS=
   1.323 +while true
   1.324 +do
   1.325 +    while true
   1.326 +    do
   1.327 +        if [ -z "$lang_c" ] ; then
   1.328 +            ERROR=1
   1.329 +            break
   1.330 +        fi
   1.331 +
   1.332 +        cat >> "$TEMP_DIR/make.mk" << __EOF__
   1.333 +LIB_EXT = .a
   1.334 +OBJ_EXT = .o
   1.335 +
   1.336 +__EOF__
   1.337 +        break
   1.338 +    done
   1.339 +    break
   1.340 +done
   1.341 +
   1.342 +# add general dependency flags to flags.mk
   1.343 +echo "# general flags" >> "$TEMP_DIR/flags.mk"
   1.344 +if [ -n "${TEMP_CFLAGS}" ]; then
   1.345 +    echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
   1.346 +fi
   1.347 +if [ -n "${TEMP_CXXFLAGS}" ]; then
   1.348 +    echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
   1.349 +fi
   1.350 +if [ -n "${TEMP_LDFLAGS}" ]; then
   1.351 +    echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
   1.352 +fi
   1.353 +
   1.354 +#
   1.355 +# OPTION VALUES
   1.356 +#
   1.357 +
   1.358 +#
   1.359 +# TARGETS
   1.360 +#
   1.361 +
   1.362 +echo >> "$TEMP_DIR/flags.mk"
   1.363 +# Target: default
   1.364 +echo "# flags for target default" >> "$TEMP_DIR/flags.mk"
   1.365 +TEMP_CFLAGS=
   1.366 +TEMP_CXXFLAGS=
   1.367 +TEMP_LDFLAGS=
   1.368 +
   1.369 +if dependency_error_archiver; then
   1.370 +    DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED archiver "
   1.371 +    ERROR=1
   1.372 +fi
   1.373 +if dependency_error_rmdir; then
   1.374 +    DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED rmdir "
   1.375 +    ERROR=1
   1.376 +fi
   1.377 +if dependency_error_ncurses; then
   1.378 +    DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ncurses "
   1.379 +    ERROR=1
   1.380 +fi
   1.381 +if dependency_error_mkdir; then
   1.382 +    DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED mkdir "
   1.383 +    ERROR=1
   1.384 +fi
   1.385 +
   1.386 +# Features
   1.387 +
   1.388 +
   1.389 +if [ -n "${TEMP_CFLAGS}" ]; then
   1.390 +    echo "CFLAGS  += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
   1.391 +fi
   1.392 +if [ -n "${TEMP_CXXFLAGS}" ]; then
   1.393 +    echo "CXXFLAGS  += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
   1.394 +fi
   1.395 +if [ "$BUILD_TYPE" = "debug" ]; then
   1.396 +    echo 'CFLAGS += ${DEBUG_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
   1.397 +    echo 'CXXFLAGS += ${DEBUG_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
   1.398 +fi
   1.399 +if [ "$BUILD_TYPE" = "release" ]; then
   1.400 +    echo 'CFLAGS += ${RELEASE_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
   1.401 +    echo 'CXXFLAGS += ${RELEASE_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
   1.402 +fi
   1.403 +if [ -n "${TEMP_LDFLAGS}" ]; then
   1.404 +    echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
   1.405 +fi
   1.406 +
   1.407 +
   1.408 +# final result
   1.409 +if [ $ERROR -ne 0 ]; then
   1.410 +    echo
   1.411 +    echo "Error: Unresolved dependencies"
   1.412 +    echo "$DEPENDENCIES_FAILED"
   1.413 +    abort_configure
   1.414 +fi
   1.415 +
   1.416 +echo "configure finished"
   1.417 +echo
   1.418 +echo "Build Config:"
   1.419 +echo "  PREFIX:    $PREFIX"
   1.420 +echo "  TOOLCHAIN: $TOOLCHAIN_NAME"
   1.421 +echo
   1.422 +
   1.423 +# generate the config.mk file
   1.424 +cat > "$TEMP_DIR/config.mk" << __EOF__
   1.425 +#
   1.426 +# config.mk generated by configure
   1.427 +#
   1.428 +
   1.429 +__EOF__
   1.430 +write_toolchain_defaults "$TEMP_DIR/toolchain.mk"
   1.431 +cat "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk
   1.432 +rm -Rf "$TEMP_DIR"
   1.433 +
   1.434 +

mercurial