make/configure.vm

changeset 74
ed9a5ffd1f13
parent 68
ae763178ee1e
     1.1 --- a/make/configure.vm	Sun Oct 01 14:25:26 2023 +0200
     1.2 +++ b/make/configure.vm	Tue Oct 10 20:34:51 2023 +0200
     1.3 @@ -14,33 +14,37 @@
     1.4  touch "$TEMP_DIR/features"
     1.5  
     1.6  # define standard variables
     1.7 -PREFIX=/usr
     1.8 -EPREFIX=
     1.9 -BINDIR=
    1.10 -SBINDIR=
    1.11 -LIBDIR=
    1.12 -LIBEXECDIR=
    1.13 -DATADIR=
    1.14 -SYSCONFDIR=
    1.15 -SHAREDSTATEDIR=
    1.16 -LOCALSTATEDIR=
    1.17 -INCLUDEDIR=
    1.18 -INFODIR=
    1.19 -MANDIR=
    1.20 +# also define standard prefix (this is where we will search for config.site)
    1.21 +prefix=/usr
    1.22 +exec_prefix=
    1.23 +bindir=
    1.24 +sbindir=
    1.25 +libdir=
    1.26 +libexecdir=
    1.27 +datarootdir=
    1.28 +datadir=
    1.29 +sysconfdir=
    1.30 +sharedstatedir=
    1.31 +localstatedir=
    1.32 +runstatedir=
    1.33 +includedir=
    1.34 +infodir=
    1.35 +localedir=
    1.36 +mandir=
    1.37  
    1.38  # custom variables
    1.39  #foreach( $var in $vars )
    1.40  #if( $var.exec )
    1.41  ${var.varName}=`${var.value}`
    1.42  #else
    1.43 -${var.varName}=${var.value}
    1.44 +${var.varName}="${var.value}"
    1.45  #end
    1.46  #end
    1.47  
    1.48  # features
    1.49  #foreach( $feature in $features )
    1.50 -#if( ${feature.isDefault()} )
    1.51 -${feature.getVarName()}=auto
    1.52 +#if( ${feature.auto} )
    1.53 +${feature.varName}=auto
    1.54  #end
    1.55  #end
    1.56  
    1.57 @@ -68,26 +72,28 @@
    1.58    --sysconfdir=DIR        system configuration files [PREFIX/etc]
    1.59    --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
    1.60    --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
    1.61 +  --runstatedir=DIR       run-time variable data [LOCALSTATEDIR/run]
    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 +  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
    1.69  
    1.70  #if( $options.size() > 0 )
    1.71  Options:
    1.72    --debug                 add extra compile flags for debug builds
    1.73    --release               add extra compile flags for release builds
    1.74  #foreach( $opt in $options )
    1.75 -  --${opt.getArgument()}=${opt.getValuesString()}
    1.76 +  --${opt.argument}=${opt.valuesString}
    1.77  #end
    1.78  
    1.79  #end
    1.80  #if( $features.size() > 0 )
    1.81  Optional Features:
    1.82  #foreach( $feature in $features )
    1.83 -#if( $feature.default )
    1.84 +#if( $feature.auto )
    1.85    --disable-${feature.arg}
    1.86  #else
    1.87    --enable-${feature.arg}
    1.88 @@ -106,28 +112,30 @@
    1.89  for ARG in "$@"
    1.90  do
    1.91      case "$ARG" in
    1.92 -        "--prefix="*)         PREFIX=${D}{ARG#--prefix=} ;;
    1.93 -        "--exec-prefix="*)    EPREFIX=${D}{ARG#--exec-prefix=} ;;
    1.94 -        "--bindir="*)         BINDIR=${D}{ARG#----bindir=} ;;
    1.95 -        "--sbindir="*)        SBINDIR=${D}{ARG#--sbindir=} ;;
    1.96 -        "--libdir="*)         LIBDIR=${D}{ARG#--libdir=} ;;
    1.97 -        "--libexecdir="*)     LIBEXECDIR=${D}{ARG#--libexecdir=} ;;
    1.98 -        "--datadir="*)        DATADIR=${D}{ARG#--datadir=} ;;
    1.99 -        "--sysconfdir="*)     SYSCONFDIR=${D}{ARG#--sysconfdir=} ;;
   1.100 -        "--sharedstatedir="*) SHAREDSTATEDIR=${D}{ARG#--sharedstatedir=} ;;
   1.101 -        "--localstatedir="*)  LOCALSTATEDIR=${D}{ARG#--localstatedir=} ;;
   1.102 -        "--includedir="*)     INCLUDEDIR=${D}{ARG#--includedir=} ;;
   1.103 -        "--infodir="*)        INFODIR=${D}{ARG#--infodir=} ;;
   1.104 -        "--mandir"*)          MANDIR=${D}{ARG#--mandir} ;;
   1.105 +        "--prefix="*)         prefix=${D}{ARG#--prefix=} ;;
   1.106 +        "--exec-prefix="*)    exec_prefix=${D}{ARG#--exec-prefix=} ;;
   1.107 +        "--bindir="*)         bindir=${D}{ARG#----bindir=} ;;
   1.108 +        "--sbindir="*)        sbindir=${D}{ARG#--sbindir=} ;;
   1.109 +        "--libdir="*)         libdir=${D}{ARG#--libdir=} ;;
   1.110 +        "--libexecdir="*)     libexecdir=${D}{ARG#--libexecdir=} ;;
   1.111 +        "--datarootdir="*)    datarootdir=${D}{ARG#--datarootdir=} ;;
   1.112 +        "--datadir="*)        datadir=${D}{ARG#--datadir=} ;;
   1.113 +        "--sysconfdir="*)     sysconfdir=${D}{ARG#--sysconfdir=} ;;
   1.114 +        "--sharedstatedir="*) sharedstatedir=${D}{ARG#--sharedstatedir=} ;;
   1.115 +        "--localstatedir="*)  localstatedir=${D}{ARG#--localstatedir=} ;;
   1.116 +        "--includedir="*)     includedir=${D}{ARG#--includedir=} ;;
   1.117 +        "--infodir="*)        infodir=${D}{ARG#--infodir=} ;;
   1.118 +        "--mandir"*)          mandir=${D}{ARG#--mandir} ;;
   1.119 +        "--localedir"*)       localedir=${D}{ARG#--localedir} ;;
   1.120          "--help"*) printhelp; abort_configure ;;
   1.121          "--debug")           BUILD_TYPE="debug" ;;
   1.122          "--release")         BUILD_TYPE="release" ;;
   1.123      #foreach( $opt in $options )
   1.124 -        "--${opt.getArgument()}="*) ${opt.getVarName()}=${D}{ARG#--${opt.getArgument()}=} ;;
   1.125 +        "--${opt.argument}="*) ${opt.varName}=${D}{ARG#--${opt.argument}=} ;;
   1.126      #end
   1.127      #foreach( $feature in $features )
   1.128 -        "--enable-${feature.arg}") ${feature.getVarName()}=on ;;
   1.129 -        "--disable-${feature.arg}") unset ${feature.getVarName()} ;;
   1.130 +        "--enable-${feature.arg}") ${feature.varName}=on ;;
   1.131 +        "--disable-${feature.arg}") unset ${feature.varName} ;;
   1.132      #end
   1.133          "-"*) echo "unknown option: $ARG"; abort_configure ;;
   1.134      esac
   1.135 @@ -135,19 +143,41 @@
   1.136  
   1.137  ## Begin unparsed content. **
   1.138  #[[
   1.139 -# set dir variables
   1.140 -: ${EPREFIX:="$PREFIX"}
   1.141 -: ${BINDIR:="$EPREFIX/bin"}
   1.142 -: ${SBINDIR:="$EPREFIX/sbin"}
   1.143 -: ${LIBDIR:="$EPREFIX/lib"}
   1.144 -: ${LIBEXECDIR:="$EPREFIX/libexec"}
   1.145 -: ${DATADIR:="$PREFIX/share"}
   1.146 -: ${SYSCONFDIR:="$PREFIX/etc"}
   1.147 -: ${SHAREDSTATEDIR:="$PREFIX/com"}
   1.148 -: ${LOCALSTATEDIR:="$PREFIX/var"}
   1.149 -: ${INCLUDEDIR:="$PREFIX/include"}
   1.150 -: ${INFODIR:="$PREFIX/info"}
   1.151 -: ${MANDIR:="$PREFIX/man"}
   1.152 +
   1.153 +# set defaults for dir variables
   1.154 +: ${exec_prefix:="$prefix"}
   1.155 +: ${bindir:='${exec_prefix}/bin'}
   1.156 +: ${sbindir:='${exec_prefix}/sbin'}
   1.157 +: ${libdir:='${exec_prefix}/lib'}
   1.158 +: ${libexecdir:='${exec_prefix}/libexec'}
   1.159 +: ${datarootdir:='${prefix}/share'}
   1.160 +: ${datadir:='${datarootdir}'}
   1.161 +: ${sysconfdir:='${prefix}/etc'}
   1.162 +: ${sharedstatedir:='${prefix}/com'}
   1.163 +: ${localstatedir:='${prefix}/var'}
   1.164 +: ${runstatedir:='${localstatedir}/run'}
   1.165 +: ${includedir:='${prefix}/include'}
   1.166 +: ${infodir:='${datarootdir}/info'}
   1.167 +: ${mandir:='${datarootdir}/man'}
   1.168 +: ${localedir:='${datarootdir}/locale'}
   1.169 +
   1.170 +# check if a config.site exists and load it
   1.171 +if [ -n "$CONFIG_SITE" ]; then
   1.172 +    # CONFIG_SITE may contain space separated file names
   1.173 +    for cs in $CONFIG_SITE; do
   1.174 +        printf "loading defaults from $cs... "
   1.175 +        . "$cs"
   1.176 +        echo ok
   1.177 +    done
   1.178 +elif [ -f "$prefix/share/config.site" ]; then
   1.179 +    printf "loading site defaults... "
   1.180 +    . "$prefix/share/config.site"
   1.181 +    echo ok
   1.182 +elif [ -f "$prefix/etc/config.site" ]; then
   1.183 +    printf "loading site defaults... "
   1.184 +    . "$prefix/etc/config.site"
   1.185 +    echo ok
   1.186 +fi
   1.187  
   1.188  # Test for availability of pkg-config
   1.189  PKG_CONFIG=`command -v pkg-config`
   1.190 @@ -203,25 +233,26 @@
   1.191  
   1.192  # generate vars.mk
   1.193  cat > "$TEMP_DIR/vars.mk" << __EOF__
   1.194 -PREFIX=$PREFIX
   1.195 -EPREFIX=$EPREFIX
   1.196 -BINDIR=$BINDIR
   1.197 -SBINDIR=$SBINDIR
   1.198 -LIBDIR=$LIBDIR
   1.199 -LIBEXECDIR=$LIBEXECDIR
   1.200 -DATADIR=$DATADIR
   1.201 -SYSCONFDIR=$SYSCONFDIR
   1.202 -SHAREDSTATEDIR=$SHAREDSTATEDIR
   1.203 -LOCALSTATEDIR=$LOCALSTATEDIR
   1.204 -INCLUDEDIR=$INCLUDEDIR
   1.205 -INFODIR=$INFODIR
   1.206 -MANDIR=$MANDIR
   1.207 +prefix="$prefix"
   1.208 +exec_prefix="$exec_prefix"
   1.209 +bindir="$bindir"
   1.210 +sbindir="$sbindir"
   1.211 +libdir="$libdir"
   1.212 +libexecdir="$libexecdir"
   1.213 +datarootdir="$datarootdir"
   1.214 +datadir="$datadir"
   1.215 +sysconfdir="$sysconfdir"
   1.216 +sharedstatedir="$sharedstatedir"
   1.217 +localstatedir="$localstatedir"
   1.218 +runstatedir="$runstatedir"
   1.219 +includedir="$includedir"
   1.220 +infodir="$infodir"
   1.221 +mandir="$mandir"
   1.222 +localedir="$localedir"
   1.223  #foreach( $var in $vars )
   1.224 -${var.varName}=$${var.varName}
   1.225 +${var.varName}="${D}${var.varName}"
   1.226  #end
   1.227  __EOF__
   1.228 -sort -u -o "$TEMP_DIR/vars.mk" "$TEMP_DIR/vars.mk"
   1.229 -
   1.230  
   1.231  # toolchain detection utilities
   1.232  . make/toolchain.sh
   1.233 @@ -256,11 +287,11 @@
   1.234  }
   1.235  
   1.236  #foreach( $dependency in $namedDependencies )
   1.237 -dependency_error_${dependency.name}()
   1.238 +dependency_error_${dependency.id}()
   1.239  {
   1.240      printf "checking for ${dependency.name}... "
   1.241 -    #foreach( $sub in $dependency.getSubdependencies() )
   1.242 -    # dependency $sub.getFullName()
   1.243 +    #foreach( $sub in $dependency.subdependencies )
   1.244 +    # dependency $sub.fullName
   1.245      while true
   1.246      do
   1.247          #if( $sub.platform )
   1.248 @@ -268,7 +299,7 @@
   1.249              break
   1.250          fi
   1.251          #end
   1.252 -        #foreach( $np in $sub.getNotList() )
   1.253 +        #foreach( $np in $sub.notList )
   1.254          if isplatform "${np}"; then
   1.255              break
   1.256          fi
   1.257 @@ -346,7 +377,7 @@
   1.258          break
   1.259      fi
   1.260      #end
   1.261 -    #foreach( $np in $dependency.getNotList() )
   1.262 +    #foreach( $np in $dependency.notList )
   1.263      if isplatform "${np}"; then
   1.264          break
   1.265      fi
   1.266 @@ -404,10 +435,10 @@
   1.267  
   1.268  # add general dependency flags to flags.mk
   1.269  echo "# general flags" >> "$TEMP_DIR/flags.mk"
   1.270 -if [ -n "${TEMP_CFLAGS}" ]; then
   1.271 +if [ -n "${TEMP_CFLAGS}" -a -n "$lang_c" ]; then
   1.272      echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
   1.273  fi
   1.274 -if [ -n "${TEMP_CXXFLAGS}" ]; then
   1.275 +if [ -n "${TEMP_CXXFLAGS}" -a -n "$lang_cpp" ]; then
   1.276      echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
   1.277  fi
   1.278  if [ -n "${TEMP_LDFLAGS}" ]; then
   1.279 @@ -452,10 +483,10 @@
   1.280  #foreach( $target in $targets )
   1.281  echo >> "$TEMP_DIR/flags.mk"
   1.282  #if ( $target.name )
   1.283 -# Target: $target.name
   1.284 +echo "configuring target: $target.name"
   1.285  echo "# flags for target $target.name" >> "$TEMP_DIR/flags.mk"
   1.286  #else
   1.287 -# Target
   1.288 +echo "configuring global target"
   1.289  echo "# flags for unnamed target" >> "$TEMP_DIR/flags.mk"
   1.290  #end
   1.291  TEMP_CFLAGS=
   1.292 @@ -471,28 +502,29 @@
   1.293  
   1.294  # Features
   1.295  #foreach( $feature in $target.features )
   1.296 -if [ -n "$${feature.getVarName()}" ]; then
   1.297 +if [ -n "${D}${feature.varName}" ]; then
   1.298  #foreach( $dependency in $feature.dependencies )
   1.299      # check dependency
   1.300      if dependency_error_$dependency ; then
   1.301          # "auto" features can fail and are just disabled in this case
   1.302 -        if [ "$${feature.getVarName()}" = "auto" ]; then
   1.303 -            DISABLE_${feature.getVarName()}=1
   1.304 +        if [ "${D}${feature.varName}" = "auto" ]; then
   1.305 +            DISABLE_${feature.varName}=1
   1.306          else
   1.307              DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ${dependency} "
   1.308              ERROR=1
   1.309          fi
   1.310      fi
   1.311  #end
   1.312 -    if [ -n "$DISABLE_${feature.getVarName()}" ]; then
   1.313 -        unset ${feature.getVarName()}
   1.314 +    if [ -n "$DISABLE_${feature.varName}" ]; then
   1.315 +        unset ${feature.varName}
   1.316      fi
   1.317  fi
   1.318  #end
   1.319  
   1.320  #foreach( $opt in $target.options )
   1.321  # Option: --${opt.argument}
   1.322 -if [ -z ${D}${opt.getVarName()} ]; then
   1.323 +if [ -z "${D}${opt.varName}" ]; then
   1.324 +    echo "auto-detecting option '${opt.argument}'"
   1.325      SAVED_ERROR="$ERROR"
   1.326      SAVED_DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED"
   1.327      ERROR=1
   1.328 @@ -515,41 +547,52 @@
   1.329      done
   1.330      if [ $ERROR -ne 0 ]; then
   1.331          SAVED_ERROR=1
   1.332 +        SAVED_DEPENDENCIES_FAILED="option '${opt.argument}' $SAVED_DEPENDENCIES_FAILED"
   1.333      fi
   1.334      ERROR="$SAVED_ERROR"
   1.335      DEPENDENCIES_FAILED="$SAVED_DEPENDENCIES_FAILED"
   1.336  else
   1.337 +    echo "checking option ${opt.argument} = ${D}${opt.varName}"
   1.338      if false; then
   1.339          false
   1.340      #foreach( $optval in $opt.values )
   1.341 -    elif [ "${D}${opt.getVarName()}" = "${optval.value}" ]; then
   1.342 -        echo "  ${opt.argument}: ${D}${opt.getVarName()}" >> $TEMP_DIR/options
   1.343 +    elif [ "${D}${opt.varName}" = "${optval.value}" ]; then
   1.344 +        echo "  ${opt.argument}: ${D}${opt.varName}" >> $TEMP_DIR/options
   1.345          if $optval.func ; then
   1.346              :
   1.347          else
   1.348              ERROR=1
   1.349 +            DEPENDENCIES_FAILED="option '${opt.argument}' $DEPENDENCIES_FAILED"
   1.350          fi
   1.351      #end
   1.352      fi
   1.353  fi
   1.354  #end
   1.355  
   1.356 -if [ -n "${TEMP_CFLAGS}" ]; then
   1.357 -    echo "${target.getCFlags()}  += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
   1.358 +if [ -n "${TEMP_CFLAGS}" -a -n "$lang_c" ]; then
   1.359 +    echo "${target.cFlags}  += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
   1.360  fi
   1.361 -if [ -n "${TEMP_CXXFLAGS}" ]; then
   1.362 -    echo "${target.getCXXFlags()}  += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
   1.363 +if [ -n "${TEMP_CXXFLAGS}" -a -n "$lang_cpp" ]; then
   1.364 +    echo "${target.cxxFlags}  += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
   1.365  fi
   1.366  if [ "$BUILD_TYPE" = "debug" ]; then
   1.367 -    echo '${target.getCFlags()} += ${DEBUG_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
   1.368 -    echo '${target.getCXXFlags()} += ${DEBUG_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
   1.369 +    if [ -n "$lang_c" ]; then
   1.370 +        echo '${target.cFlags} += ${DEBUG_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
   1.371 +    fi
   1.372 +    if [ -n "$lang_cpp" ]; then
   1.373 +        echo '${target.cxxFlags} += ${DEBUG_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
   1.374 +    fi
   1.375  fi
   1.376  if [ "$BUILD_TYPE" = "release" ]; then
   1.377 -    echo '${target.getCFlags()} += ${RELEASE_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
   1.378 -    echo '${target.getCXXFlags()} += ${RELEASE_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
   1.379 +    if [ -n "$lang_c" ]; then
   1.380 +        echo '${target.cFlags} += ${RELEASE_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
   1.381 +    fi
   1.382 +    if [ -n "$lang_cpp" ]; then
   1.383 +        echo '${target.cxxFlags} += ${RELEASE_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
   1.384 +    fi
   1.385  fi
   1.386  if [ -n "${TEMP_LDFLAGS}" ]; then
   1.387 -    echo "${target.getLDFlags()} += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
   1.388 +    echo "${target.ldFlags} += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
   1.389  fi
   1.390  
   1.391  #end
   1.392 @@ -565,8 +608,8 @@
   1.393  echo "configure finished"
   1.394  echo
   1.395  echo "Build Config:"
   1.396 -echo "  PREFIX:    $PREFIX"
   1.397 -echo "  TOOLCHAIN: $TOOLCHAIN_NAME"
   1.398 +echo "  PREFIX:      $prefix"
   1.399 +echo "  TOOLCHAIN:   $TOOLCHAIN_NAME"
   1.400  #if ( $options.size() > 0 )
   1.401  echo "Options:"
   1.402  cat "$TEMP_DIR/options"
   1.403 @@ -574,7 +617,7 @@
   1.404  #if ( $features.size() > 0 )
   1.405  echo "Features:"
   1.406  #foreach( $feature in $features )
   1.407 -if [ -n "$${feature.getVarName()}" ]; then
   1.408 +if [ -n "${D}${feature.varName}" ]; then
   1.409  echo "  $feature.name: on"
   1.410  else
   1.411  echo "  $feature.name: off"

mercurial