configure

Tue, 10 Oct 2023 20:34:51 +0200

author
Mike Becker <universe@uap-core.de>
date
Tue, 10 Oct 2023 20:34:51 +0200
changeset 74
ed9a5ffd1f13
parent 68
ae763178ee1e
permissions
-rwxr-xr-x

update uwproj (adds support for config.site)

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

mercurial