configure

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

mercurial