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 +