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 +