configure

Sun, 01 Oct 2023 14:41:17 +0200

author
Mike Becker <universe@uap-core.de>
date
Sun, 01 Oct 2023 14:41:17 +0200
changeset 74
831928419249
parent 73
072fa3e165f0
permissions
-rwxr-xr-x

improve Makefiles

universe@72 1 #!/bin/sh
universe@72 2
universe@72 3 # create temporary directory
universe@72 4 TEMP_DIR=".tmp-`uname -n`"
universe@72 5 rm -Rf "$TEMP_DIR"
universe@72 6 if mkdir -p "$TEMP_DIR"; then
universe@72 7 :
universe@72 8 else
universe@72 9 echo "Cannot create tmp dir $TEMP_DIR"
universe@72 10 echo "Abort"
universe@72 11 exit 1
universe@72 12 fi
universe@72 13 touch "$TEMP_DIR/options"
universe@72 14 touch "$TEMP_DIR/features"
universe@72 15
universe@72 16 # define standard variables
universe@72 17 PREFIX=/usr
universe@72 18 EPREFIX=
universe@72 19 BINDIR=
universe@72 20 SBINDIR=
universe@72 21 LIBDIR=
universe@72 22 LIBEXECDIR=
universe@72 23 DATADIR=
universe@72 24 SYSCONFDIR=
universe@72 25 SHAREDSTATEDIR=
universe@72 26 LOCALSTATEDIR=
universe@72 27 INCLUDEDIR=
universe@72 28 INFODIR=
universe@72 29 MANDIR=
universe@72 30
universe@72 31 # custom variables
universe@72 32
universe@72 33 # features
universe@72 34
universe@72 35 # clean abort
universe@72 36 abort_configure()
universe@72 37 {
universe@72 38 rm -Rf "$TEMP_DIR"
universe@72 39 exit 1
universe@72 40 }
universe@72 41
universe@72 42 # help text
universe@72 43 printhelp()
universe@72 44 {
universe@72 45 echo "Usage: $0 [OPTIONS]..."
universe@72 46 cat << __EOF__
universe@72 47 Installation directories:
universe@72 48 --prefix=PREFIX path prefix for architecture-independent files
universe@72 49 [/usr]
universe@72 50 --exec-prefix=EPREFIX path prefix for architecture-dependent files
universe@72 51 [PREFIX]
universe@72 52
universe@72 53 --bindir=DIR user executables [EPREFIX/bin]
universe@72 54 --sbindir=DIR system admin executables [EPREFIX/sbin]
universe@72 55 --libexecdir=DIR program executables [EPREFIX/libexec]
universe@72 56 --sysconfdir=DIR system configuration files [PREFIX/etc]
universe@72 57 --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
universe@72 58 --localstatedir=DIR modifiable single-machine data [PREFIX/var]
universe@72 59 --libdir=DIR object code libraries [EPREFIX/lib]
universe@72 60 --includedir=DIR C header files [PREFIX/include]
universe@72 61 --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
universe@72 62 --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
universe@72 63 --infodir=DIR info documentation [DATAROOTDIR/info]
universe@72 64 --mandir=DIR man documentation [DATAROOTDIR/man]
universe@72 65
universe@72 66 __EOF__
universe@72 67 }
universe@72 68
universe@72 69 #
universe@72 70 # parse arguments
universe@72 71 #
universe@72 72 BUILD_TYPE="default"
universe@72 73 for ARG in "$@"
universe@72 74 do
universe@72 75 case "$ARG" in
universe@72 76 "--prefix="*) PREFIX=${ARG#--prefix=} ;;
universe@72 77 "--exec-prefix="*) EPREFIX=${ARG#--exec-prefix=} ;;
universe@72 78 "--bindir="*) BINDIR=${ARG#----bindir=} ;;
universe@72 79 "--sbindir="*) SBINDIR=${ARG#--sbindir=} ;;
universe@72 80 "--libdir="*) LIBDIR=${ARG#--libdir=} ;;
universe@72 81 "--libexecdir="*) LIBEXECDIR=${ARG#--libexecdir=} ;;
universe@72 82 "--datadir="*) DATADIR=${ARG#--datadir=} ;;
universe@72 83 "--sysconfdir="*) SYSCONFDIR=${ARG#--sysconfdir=} ;;
universe@72 84 "--sharedstatedir="*) SHAREDSTATEDIR=${ARG#--sharedstatedir=} ;;
universe@72 85 "--localstatedir="*) LOCALSTATEDIR=${ARG#--localstatedir=} ;;
universe@72 86 "--includedir="*) INCLUDEDIR=${ARG#--includedir=} ;;
universe@72 87 "--infodir="*) INFODIR=${ARG#--infodir=} ;;
universe@72 88 "--mandir"*) MANDIR=${ARG#--mandir} ;;
universe@72 89 "--help"*) printhelp; abort_configure ;;
universe@72 90 "--debug") BUILD_TYPE="debug" ;;
universe@72 91 "--release") BUILD_TYPE="release" ;;
universe@72 92 "-"*) echo "unknown option: $ARG"; abort_configure ;;
universe@72 93 esac
universe@72 94 done
universe@72 95
universe@72 96
universe@72 97 # set dir variables
universe@72 98 : ${EPREFIX:="$PREFIX"}
universe@72 99 : ${BINDIR:="$EPREFIX/bin"}
universe@72 100 : ${SBINDIR:="$EPREFIX/sbin"}
universe@72 101 : ${LIBDIR:="$EPREFIX/lib"}
universe@72 102 : ${LIBEXECDIR:="$EPREFIX/libexec"}
universe@72 103 : ${DATADIR:="$PREFIX/share"}
universe@72 104 : ${SYSCONFDIR:="$PREFIX/etc"}
universe@72 105 : ${SHAREDSTATEDIR:="$PREFIX/com"}
universe@72 106 : ${LOCALSTATEDIR:="$PREFIX/var"}
universe@72 107 : ${INCLUDEDIR:="$PREFIX/include"}
universe@72 108 : ${INFODIR:="$PREFIX/info"}
universe@72 109 : ${MANDIR:="$PREFIX/man"}
universe@72 110
universe@72 111 # Test for availability of pkg-config
universe@72 112 PKG_CONFIG=`command -v pkg-config`
universe@72 113 : ${PKG_CONFIG:="false"}
universe@72 114
universe@72 115 # Simple uname based platform detection
universe@72 116 # $PLATFORM is used for platform dependent dependency selection
universe@72 117 OS=`uname -s`
universe@72 118 OS_VERSION=`uname -r`
universe@72 119 printf "detect platform... "
universe@72 120 if [ "$OS" = "SunOS" ]; then
universe@72 121 PLATFORM="solaris sunos unix svr4"
universe@72 122 fi
universe@72 123 if [ "$OS" = "Linux" ]; then
universe@72 124 PLATFORM="linux unix"
universe@72 125 fi
universe@72 126 if [ "$OS" = "FreeBSD" ]; then
universe@72 127 PLATFORM="freebsd bsd unix"
universe@72 128 fi
universe@72 129 if [ "$OS" = "Darwin" ]; then
universe@72 130 PLATFORM="macos osx bsd unix"
universe@72 131 fi
universe@72 132 if echo "$OS" | grep -i "MINGW" > /dev/null; then
universe@72 133 PLATFORM="windows mingw"
universe@72 134 fi
universe@72 135 : ${PLATFORM:="unix"}
universe@72 136
universe@72 137 PLATFORM_NAME=`echo "$PLATFORM" | cut -f1 -d' ' -`
universe@72 138 echo "$PLATFORM_NAME"
universe@72 139
universe@72 140 isplatform()
universe@72 141 {
universe@72 142 for p in $PLATFORM
universe@72 143 do
universe@72 144 if [ "$p" = "$1" ]; then
universe@72 145 return 0
universe@72 146 fi
universe@72 147 done
universe@72 148 return 1
universe@72 149 }
universe@72 150 notisplatform()
universe@72 151 {
universe@72 152 for p in $PLATFORM
universe@72 153 do
universe@72 154 if [ "$p" = "$1" ]; then
universe@72 155 return 1
universe@72 156 fi
universe@72 157 done
universe@72 158 return 0
universe@72 159 }
universe@72 160
universe@72 161
universe@72 162 # generate vars.mk
universe@72 163 cat > "$TEMP_DIR/vars.mk" << __EOF__
universe@72 164 PREFIX="$PREFIX"
universe@72 165 EPREFIX="$EPREFIX"
universe@72 166 BINDIR="$BINDIR"
universe@72 167 SBINDIR="$SBINDIR"
universe@72 168 LIBDIR="$LIBDIR"
universe@72 169 LIBEXECDIR="$LIBEXECDIR"
universe@72 170 DATADIR="$DATADIR"
universe@72 171 SYSCONFDIR="$SYSCONFDIR"
universe@72 172 SHAREDSTATEDIR="$SHAREDSTATEDIR"
universe@72 173 LOCALSTATEDIR="$LOCALSTATEDIR"
universe@72 174 INCLUDEDIR="$INCLUDEDIR"
universe@72 175 INFODIR="$INFODIR"
universe@72 176 MANDIR="$MANDIR"
universe@72 177 __EOF__
universe@72 178 sort -u -o "$TEMP_DIR/vars.mk" "$TEMP_DIR/vars.mk"
universe@72 179
universe@72 180
universe@72 181 # toolchain detection utilities
universe@72 182 . make/toolchain.sh
universe@72 183
universe@72 184 #
universe@72 185 # DEPENDENCIES
universe@72 186 #
universe@72 187
universe@72 188 # check languages
universe@72 189 lang_c=
universe@72 190 lang_cpp=
universe@72 191 if detect_c_compiler ; then
universe@72 192 lang_c=1
universe@72 193 fi
universe@72 194
universe@72 195 # create buffer for make variables required by dependencies
universe@72 196 echo > "$TEMP_DIR/make.mk"
universe@72 197
universe@72 198 test_pkg_config()
universe@72 199 {
universe@72 200 if "$PKG_CONFIG" --exists "$1" ; then :
universe@72 201 else return 1 ; fi
universe@72 202 if [ -z "$2" ] || "$PKG_CONFIG" --atleast-version="$2" "$1" ; then :
universe@72 203 else return 1 ; fi
universe@72 204 if [ -z "$3" ] || "$PKG_CONFIG" --exact-version="$3" "$1" ; then :
universe@72 205 else return 1 ; fi
universe@72 206 if [ -z "$4" ] || "$PKG_CONFIG" --max-version="$4" "$1" ; then :
universe@72 207 else return 1 ; fi
universe@72 208 return 0
universe@72 209 }
universe@72 210
universe@72 211 dependency_error_ucx()
universe@72 212 {
universe@72 213 printf "checking for ucx... "
universe@72 214 # dependency ucx
universe@72 215 while true
universe@72 216 do
universe@72 217 if check_lib ucx cx/list.h > /dev/null ; then
universe@72 218 :
universe@72 219 else
universe@72 220 break
universe@72 221 fi
universe@72 222 TEMP_LDFLAGS="$TEMP_LDFLAGS -lucx"
universe@72 223 echo yes
universe@72 224 return 1
universe@72 225 done
universe@72 226
universe@72 227 echo no
universe@72 228 return 0
universe@72 229 }
universe@74 230 dependency_error_tools()
universe@74 231 {
universe@74 232 printf "checking for tools... "
universe@74 233 # dependency tools platform="unix"
universe@74 234 while true
universe@74 235 do
universe@74 236 if notisplatform "unix"; then
universe@74 237 break
universe@74 238 fi
universe@74 239 cat >> $TEMP_DIR/make.mk << __EOF__
universe@74 240 # Dependency: tools
universe@74 241 RMDIR=rm -fR
universe@74 242 MKDIR=mkdir -p
universe@74 243
universe@74 244 __EOF__
universe@74 245 echo yes
universe@74 246 return 1
universe@74 247 done
universe@74 248
universe@74 249 echo no
universe@74 250 return 0
universe@74 251 }
universe@72 252
universe@72 253
universe@72 254
universe@72 255
universe@72 256 # start collecting dependency information
universe@72 257 echo > "$TEMP_DIR/flags.mk"
universe@72 258
universe@72 259 DEPENDENCIES_FAILED=
universe@72 260 ERROR=0
universe@72 261 # unnamed dependencies
universe@72 262 TEMP_CFLAGS=
universe@72 263 TEMP_CXXFLAGS=
universe@72 264 TEMP_LDFLAGS=
universe@72 265 while true
universe@72 266 do
universe@72 267 while true
universe@72 268 do
universe@72 269 if [ -z "$lang_c" ] ; then
universe@72 270 ERROR=1
universe@72 271 break
universe@72 272 fi
universe@72 273
universe@72 274 break
universe@72 275 done
universe@72 276 break
universe@72 277 done
universe@72 278
universe@72 279 # add general dependency flags to flags.mk
universe@72 280 echo "# general flags" >> "$TEMP_DIR/flags.mk"
universe@72 281 if [ -n "${TEMP_CFLAGS}" ]; then
universe@72 282 echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
universe@72 283 fi
universe@72 284 if [ -n "${TEMP_CXXFLAGS}" ]; then
universe@72 285 echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
universe@72 286 fi
universe@72 287 if [ -n "${TEMP_LDFLAGS}" ]; then
universe@72 288 echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
universe@72 289 fi
universe@72 290
universe@72 291 #
universe@72 292 # OPTION VALUES
universe@72 293 #
universe@72 294
universe@72 295 #
universe@72 296 # TARGETS
universe@72 297 #
universe@72 298
universe@72 299 echo >> "$TEMP_DIR/flags.mk"
universe@72 300 # Target: default
universe@72 301 echo "# flags for target default" >> "$TEMP_DIR/flags.mk"
universe@72 302 TEMP_CFLAGS=
universe@72 303 TEMP_CXXFLAGS=
universe@72 304 TEMP_LDFLAGS=
universe@72 305
universe@72 306 if dependency_error_ucx; then
universe@72 307 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ucx "
universe@72 308 ERROR=1
universe@72 309 fi
universe@74 310 if dependency_error_tools; then
universe@74 311 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED tools "
universe@74 312 ERROR=1
universe@74 313 fi
universe@72 314
universe@72 315 # Features
universe@72 316
universe@72 317
universe@72 318 if [ -n "${TEMP_CFLAGS}" ]; then
universe@72 319 echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
universe@72 320 fi
universe@72 321 if [ -n "${TEMP_CXXFLAGS}" ]; then
universe@72 322 echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
universe@72 323 fi
universe@72 324 if [ "$BUILD_TYPE" = "debug" ]; then
universe@72 325 echo 'CFLAGS += ${DEBUG_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
universe@72 326 echo 'CXXFLAGS += ${DEBUG_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
universe@72 327 fi
universe@72 328 if [ "$BUILD_TYPE" = "release" ]; then
universe@72 329 echo 'CFLAGS += ${RELEASE_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
universe@72 330 echo 'CXXFLAGS += ${RELEASE_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
universe@72 331 fi
universe@72 332 if [ -n "${TEMP_LDFLAGS}" ]; then
universe@72 333 echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
universe@72 334 fi
universe@72 335
universe@72 336
universe@72 337 # final result
universe@72 338 if [ $ERROR -ne 0 ]; then
universe@72 339 echo
universe@72 340 echo "Error: Unresolved dependencies"
universe@72 341 echo "$DEPENDENCIES_FAILED"
universe@72 342 abort_configure
universe@72 343 fi
universe@72 344
universe@72 345 echo "configure finished"
universe@72 346 echo
universe@72 347 echo "Build Config:"
universe@72 348 echo " PREFIX: $PREFIX"
universe@72 349 echo " TOOLCHAIN: $TOOLCHAIN_NAME"
universe@72 350 echo
universe@72 351
universe@72 352 # generate the config.mk file
universe@72 353 cat > "$TEMP_DIR/config.mk" << __EOF__
universe@72 354 #
universe@72 355 # config.mk generated by configure
universe@72 356 #
universe@72 357
universe@72 358 __EOF__
universe@72 359 write_toolchain_defaults "$TEMP_DIR/toolchain.mk"
universe@72 360 cat "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk
universe@72 361 rm -Rf "$TEMP_DIR"
universe@72 362
universe@72 363

mercurial