configure

Wed, 20 Dec 2023 16:46:14 +0100

author
Mike Becker <universe@uap-core.de>
date
Wed, 20 Dec 2023 16:46:14 +0100
changeset 766
e59b76889f00
parent 759
475335643af4
child 772
4586a84c0c0b
permissions
-rwxr-xr-x

bring back UCX test - fixes #341

     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
    36 src_dir=`pwd`
    37 DOXYGEN=`command -v doxygen`
    38 PANDOC=`command -v pandoc`
    40 # features
    42 # clean abort
    43 abort_configure()
    44 {
    45     rm -Rf "$TEMP_DIR"
    46     exit 1
    47 }
    49 # help text
    50 printhelp()
    51 {
    52     echo "Usage: $0 [OPTIONS]..."
    53     cat << __EOF__
    54 Installation directories:
    55   --prefix=PREFIX         path prefix for architecture-independent files
    56                           [/usr]
    57   --exec-prefix=EPREFIX   path prefix for architecture-dependent files
    58                           [PREFIX]
    60   --bindir=DIR            user executables [EPREFIX/bin]
    61   --sbindir=DIR           system admin executables [EPREFIX/sbin]
    62   --libexecdir=DIR        program executables [EPREFIX/libexec]
    63   --sysconfdir=DIR        system configuration files [PREFIX/etc]
    64   --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
    65   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
    66   --runstatedir=DIR       run-time variable data [LOCALSTATEDIR/run]
    67   --libdir=DIR            object code libraries [EPREFIX/lib]
    68   --includedir=DIR        C header files [PREFIX/include]
    69   --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
    70   --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
    71   --infodir=DIR           info documentation [DATAROOTDIR/info]
    72   --mandir=DIR            man documentation [DATAROOTDIR/man]
    73   --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
    75 Options:
    76   --debug                 add extra compile flags for debug builds
    77   --release               add extra compile flags for release builds
    78   --with-docs=(all|html|api|none)
    80 __EOF__
    81 }
    83 #
    84 # parse arguments
    85 #
    86 BUILD_TYPE="default"
    87 for ARG in "$@"
    88 do
    89     case "$ARG" in
    90         "--prefix="*)         prefix=${ARG#--prefix=} ;;
    91         "--exec-prefix="*)    exec_prefix=${ARG#--exec-prefix=} ;;
    92         "--bindir="*)         bindir=${ARG#----bindir=} ;;
    93         "--sbindir="*)        sbindir=${ARG#--sbindir=} ;;
    94         "--libdir="*)         libdir=${ARG#--libdir=} ;;
    95         "--libexecdir="*)     libexecdir=${ARG#--libexecdir=} ;;
    96         "--datarootdir="*)    datarootdir=${ARG#--datarootdir=} ;;
    97         "--datadir="*)        datadir=${ARG#--datadir=} ;;
    98         "--sysconfdir="*)     sysconfdir=${ARG#--sysconfdir=} ;;
    99         "--sharedstatedir="*) sharedstatedir=${ARG#--sharedstatedir=} ;;
   100         "--localstatedir="*)  localstatedir=${ARG#--localstatedir=} ;;
   101         "--includedir="*)     includedir=${ARG#--includedir=} ;;
   102         "--infodir="*)        infodir=${ARG#--infodir=} ;;
   103         "--mandir"*)          mandir=${ARG#--mandir} ;;
   104         "--localedir"*)       localedir=${ARG#--localedir} ;;
   105         "--help"*) printhelp; abort_configure ;;
   106         "--debug")           BUILD_TYPE="debug" ;;
   107         "--release")         BUILD_TYPE="release" ;;
   108         "--with-docs="*) OPT_WITH_DOCS=${ARG#--with-docs=} ;;
   109         "-"*) echo "unknown option: $ARG"; abort_configure ;;
   110     esac
   111 done
   115 # set defaults for dir variables
   116 : ${exec_prefix:="$prefix"}
   117 : ${bindir:='${exec_prefix}/bin'}
   118 : ${sbindir:='${exec_prefix}/sbin'}
   119 : ${libdir:='${exec_prefix}/lib'}
   120 : ${libexecdir:='${exec_prefix}/libexec'}
   121 : ${datarootdir:='${prefix}/share'}
   122 : ${datadir:='${datarootdir}'}
   123 : ${sysconfdir:='${prefix}/etc'}
   124 : ${sharedstatedir:='${prefix}/com'}
   125 : ${localstatedir:='${prefix}/var'}
   126 : ${runstatedir:='${localstatedir}/run'}
   127 : ${includedir:='${prefix}/include'}
   128 : ${infodir:='${datarootdir}/info'}
   129 : ${mandir:='${datarootdir}/man'}
   130 : ${localedir:='${datarootdir}/locale'}
   132 # check if a config.site exists and load it
   133 if [ -n "$CONFIG_SITE" ]; then
   134     # CONFIG_SITE may contain space separated file names
   135     for cs in $CONFIG_SITE; do
   136         printf "loading defaults from $cs... "
   137         . "$cs"
   138         echo ok
   139     done
   140 elif [ -f "$prefix/share/config.site" ]; then
   141     printf "loading site defaults... "
   142     . "$prefix/share/config.site"
   143     echo ok
   144 elif [ -f "$prefix/etc/config.site" ]; then
   145     printf "loading site defaults... "
   146     . "$prefix/etc/config.site"
   147     echo ok
   148 fi
   150 # Test for availability of pkg-config
   151 PKG_CONFIG=`command -v pkg-config`
   152 : ${PKG_CONFIG:="false"}
   154 # Simple uname based platform detection
   155 # $PLATFORM is used for platform dependent dependency selection
   156 OS=`uname -s`
   157 OS_VERSION=`uname -r`
   158 printf "detect platform... "
   159 if [ "$OS" = "SunOS" ]; then
   160     PLATFORM="solaris sunos unix svr4"
   161 fi
   162 if [ "$OS" = "Linux" ]; then
   163     PLATFORM="linux unix"
   164 fi
   165 if [ "$OS" = "FreeBSD" ]; then
   166     PLATFORM="freebsd bsd unix"
   167 fi
   168 if [ "$OS" = "Darwin" ]; then
   169     PLATFORM="macos osx bsd unix"
   170 fi
   171 if echo "$OS" | grep -i "MINGW" > /dev/null; then
   172     PLATFORM="windows mingw"
   173 fi
   174 : ${PLATFORM:="unix"}
   176 PLATFORM_NAME=`echo "$PLATFORM" | cut -f1 -d' ' -`
   177 echo "$PLATFORM_NAME"
   179 isplatform()
   180 {
   181     for p in $PLATFORM
   182     do
   183         if [ "$p" = "$1" ]; then
   184             return 0
   185         fi
   186     done
   187     return 1
   188 }
   189 notisplatform()
   190 {
   191     for p in $PLATFORM
   192     do
   193         if [ "$p" = "$1" ]; then
   194             return 1
   195         fi
   196     done
   197     return 0
   198 }
   201 # generate vars.mk
   202 cat > "$TEMP_DIR/vars.mk" << __EOF__
   203 prefix="$prefix"
   204 exec_prefix="$exec_prefix"
   205 bindir="$bindir"
   206 sbindir="$sbindir"
   207 libdir="$libdir"
   208 libexecdir="$libexecdir"
   209 datarootdir="$datarootdir"
   210 datadir="$datadir"
   211 sysconfdir="$sysconfdir"
   212 sharedstatedir="$sharedstatedir"
   213 localstatedir="$localstatedir"
   214 runstatedir="$runstatedir"
   215 includedir="$includedir"
   216 infodir="$infodir"
   217 mandir="$mandir"
   218 localedir="$localedir"
   219 src_dir="$src_dir"
   220 DOXYGEN="$DOXYGEN"
   221 PANDOC="$PANDOC"
   222 __EOF__
   224 # toolchain detection utilities
   225 . make/toolchain.sh
   227 #
   228 # DEPENDENCIES
   229 #
   231 # check languages
   232 lang_c=
   233 lang_cpp=
   234 if detect_c_compiler ; then
   235     lang_c=1
   236 fi
   238 # create buffer for make variables required by dependencies
   239 echo > "$TEMP_DIR/make.mk"
   241 test_pkg_config()
   242 {
   243     if "$PKG_CONFIG" --exists "$1" ; then :
   244     else return 1 ; fi
   245     if [ -z "$2" ] || "$PKG_CONFIG" --atleast-version="$2" "$1" ; then :
   246     else return 1 ; fi
   247     if [ -z "$3" ] || "$PKG_CONFIG" --exact-version="$3" "$1" ; then :
   248     else return 1 ; fi
   249     if [ -z "$4" ] || "$PKG_CONFIG" --max-version="$4" "$1" ; then :
   250     else return 1 ; fi
   251     return 0
   252 }
   254 dependency_error_pandoc()
   255 {
   256     printf "checking for pandoc... "
   257     # dependency pandoc
   258     while true
   259     do
   260         if test -n "$PANDOC" > /dev/null ; then
   261             :
   262         else
   263             break
   264         fi
   265         echo yes
   266         return 1
   267     done
   269     echo no
   270     return 0
   271 }
   272 dependency_error_c()
   273 {
   274     printf "checking for c... "
   275     # dependency c platform="mingw"
   276     while true
   277     do
   278         if notisplatform "mingw"; then
   279             break
   280         fi
   281         if [ -z "$lang_c" ] ; then
   282             break
   283         fi
   284         cat >> $TEMP_DIR/make.mk << __EOF__
   285 # Dependency: c
   286 AR=ar
   287 ARFLAGS=r
   288 STLIB_EXT=.lib
   289 SHLIB_EXT=.dll
   291 __EOF__
   292         echo yes
   293         return 1
   294     done
   296     # dependency c platform="macos"
   297     while true
   298     do
   299         if notisplatform "macos"; then
   300             break
   301         fi
   302         if [ -z "$lang_c" ] ; then
   303             break
   304         fi
   305         cat >> $TEMP_DIR/make.mk << __EOF__
   306 # Dependency: c
   307 AR=ar
   308 ARFLAGS=r
   309 STLIB_EXT=.a
   310 SHLIB_EXT=.dylib
   312 __EOF__
   313         echo yes
   314         return 1
   315     done
   317     # dependency c platform="unix"
   318     while true
   319     do
   320         if notisplatform "unix"; then
   321             break
   322         fi
   323         if [ -z "$lang_c" ] ; then
   324             break
   325         fi
   326         cat >> $TEMP_DIR/make.mk << __EOF__
   327 # Dependency: c
   328 AR=ar
   329 ARFLAGS=r
   330 STLIB_EXT=.a
   331 SHLIB_EXT=.so
   333 __EOF__
   334         echo yes
   335         return 1
   336     done
   338     echo no
   339     return 0
   340 }
   341 dependency_error_file_tools()
   342 {
   343     printf "checking for file-tools... "
   344     # dependency file-tools
   345     while true
   346     do
   347         cat >> $TEMP_DIR/make.mk << __EOF__
   348 # Dependency: file-tools
   349 MKDIR=/bin/mkdir -p
   350 RMFILE=/bin/rm -f
   351 RMDIR=/bin/rm -f -R
   352 COPYFILE=/bin/cp -f
   353 COPYALL=/bin/cp -f -R
   354 SYMLINK=/bin/ln -s
   356 __EOF__
   357         echo yes
   358         return 1
   359     done
   361     echo no
   362     return 0
   363 }
   364 dependency_error_doxygen()
   365 {
   366     printf "checking for doxygen... "
   367     # dependency doxygen
   368     while true
   369     do
   370         if test -n "$DOXYGEN" > /dev/null ; then
   371             :
   372         else
   373             break
   374         fi
   375         echo yes
   376         return 1
   377     done
   379     echo no
   380     return 0
   381 }
   386 # start collecting dependency information
   387 echo > "$TEMP_DIR/flags.mk"
   389 DEPENDENCIES_FAILED=
   390 ERROR=0
   391 # unnamed dependencies
   392 TEMP_CFLAGS=
   393 TEMP_CXXFLAGS=
   394 TEMP_LDFLAGS=
   395 while true
   396 do
   397     while true
   398     do
   400         cat >> "$TEMP_DIR/make.mk" << __EOF__
   401 # library version
   402 VERSION=3.1.0
   403 LIBVERSION=4.1.0
   404 LIBVERSION_MAJOR=4
   406 # build directory structure !! do not change or override !!
   407 build_dir=${src_dir}/build
   408 docs_dir=${src_dir}/build/docs
   409 dist_dir=${src_dir}/dist
   411 __EOF__
   412         break
   413     done
   414     break
   415 done
   417 # add general dependency flags to flags.mk
   418 echo "# general flags" >> "$TEMP_DIR/flags.mk"
   419 if [ -n "${TEMP_CFLAGS}" -a -n "$lang_c" ]; then
   420     echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
   421 fi
   422 if [ -n "${TEMP_CXXFLAGS}" -a -n "$lang_cpp" ]; then
   423     echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
   424 fi
   425 if [ -n "${TEMP_LDFLAGS}" ]; then
   426     echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
   427 fi
   429 #
   430 # OPTION VALUES
   431 #
   432 checkopt_with_docs_all()
   433 {
   434     VERR=0
   435     if dependency_error_pandoc ; then
   436         VERR=1
   437     fi
   438     if dependency_error_doxygen ; then
   439         VERR=1
   440     fi
   441     if [ $VERR -ne 0 ]; then
   442         return 1
   443     fi
   444     cat >> "$TEMP_DIR/make.mk" << __EOF__
   445 # Documentation
   446 WITH_DOCS_API=yes
   447 WITH_DOCS_HTML=yes
   449 __EOF__
   450     return 0
   451 }
   452 checkopt_with_docs_html()
   453 {
   454     VERR=0
   455     if dependency_error_pandoc ; then
   456         VERR=1
   457     fi
   458     if [ $VERR -ne 0 ]; then
   459         return 1
   460     fi
   461     cat >> "$TEMP_DIR/make.mk" << __EOF__
   462 # Documentation
   463 WITH_DOCS_HTML=yes
   465 __EOF__
   466     return 0
   467 }
   468 checkopt_with_docs_api()
   469 {
   470     VERR=0
   471     if dependency_error_doxygen ; then
   472         VERR=1
   473     fi
   474     if [ $VERR -ne 0 ]; then
   475         return 1
   476     fi
   477     cat >> "$TEMP_DIR/make.mk" << __EOF__
   478 # Documentation
   479 WITH_DOCS_API=yes
   481 __EOF__
   482     return 0
   483 }
   484 checkopt_with_docs_none()
   485 {
   486     VERR=0
   487     if [ $VERR -ne 0 ]; then
   488         return 1
   489     fi
   490     return 0
   491 }
   493 #
   494 # TARGETS
   495 #
   497 echo >> "$TEMP_DIR/flags.mk"
   498 echo "configuring global target"
   499 echo "# flags for unnamed target" >> "$TEMP_DIR/flags.mk"
   500 TEMP_CFLAGS=
   501 TEMP_CXXFLAGS=
   502 TEMP_LDFLAGS=
   504 if dependency_error_c; then
   505     DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED c "
   506     ERROR=1
   507 fi
   508 if dependency_error_file_tools; then
   509     DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED file_tools "
   510     ERROR=1
   511 fi
   513 # Features
   515 # Option: --with-docs
   516 if [ -z "$OPT_WITH_DOCS" ]; then
   517     echo "auto-detecting option 'with-docs'"
   518     SAVED_ERROR="$ERROR"
   519     SAVED_DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED"
   520     ERROR=1
   521     while true
   522     do
   523         if checkopt_with_docs_all ; then
   524             echo "  with-docs: all" >> "$TEMP_DIR/options"
   525             ERROR=0
   526             break
   527         fi
   528         if checkopt_with_docs_html ; then
   529             echo "  with-docs: html" >> "$TEMP_DIR/options"
   530             ERROR=0
   531             break
   532         fi
   533         if checkopt_with_docs_api ; then
   534             echo "  with-docs: api" >> "$TEMP_DIR/options"
   535             ERROR=0
   536             break
   537         fi
   538         if checkopt_with_docs_none ; then
   539             echo "  with-docs: none" >> "$TEMP_DIR/options"
   540             ERROR=0
   541             break
   542         fi
   543         break
   544     done
   545     if [ $ERROR -ne 0 ]; then
   546         SAVED_ERROR=1
   547         SAVED_DEPENDENCIES_FAILED="option 'with-docs' $SAVED_DEPENDENCIES_FAILED"
   548     fi
   549     ERROR="$SAVED_ERROR"
   550     DEPENDENCIES_FAILED="$SAVED_DEPENDENCIES_FAILED"
   551 else
   552     echo "checking option with-docs = $OPT_WITH_DOCS"
   553     if false; then
   554         false
   555     elif [ "$OPT_WITH_DOCS" = "all" ]; then
   556         echo "  with-docs: $OPT_WITH_DOCS" >> $TEMP_DIR/options
   557         if checkopt_with_docs_all ; then
   558             :
   559         else
   560             ERROR=1
   561             DEPENDENCIES_FAILED="option 'with-docs' $DEPENDENCIES_FAILED"
   562         fi
   563     elif [ "$OPT_WITH_DOCS" = "html" ]; then
   564         echo "  with-docs: $OPT_WITH_DOCS" >> $TEMP_DIR/options
   565         if checkopt_with_docs_html ; then
   566             :
   567         else
   568             ERROR=1
   569             DEPENDENCIES_FAILED="option 'with-docs' $DEPENDENCIES_FAILED"
   570         fi
   571     elif [ "$OPT_WITH_DOCS" = "api" ]; then
   572         echo "  with-docs: $OPT_WITH_DOCS" >> $TEMP_DIR/options
   573         if checkopt_with_docs_api ; then
   574             :
   575         else
   576             ERROR=1
   577             DEPENDENCIES_FAILED="option 'with-docs' $DEPENDENCIES_FAILED"
   578         fi
   579     elif [ "$OPT_WITH_DOCS" = "none" ]; then
   580         echo "  with-docs: $OPT_WITH_DOCS" >> $TEMP_DIR/options
   581         if checkopt_with_docs_none ; then
   582             :
   583         else
   584             ERROR=1
   585             DEPENDENCIES_FAILED="option 'with-docs' $DEPENDENCIES_FAILED"
   586         fi
   587     fi
   588 fi
   590 if [ -n "${TEMP_CFLAGS}" -a -n "$lang_c" ]; then
   591     echo "CFLAGS  += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
   592 fi
   593 if [ -n "${TEMP_CXXFLAGS}" -a -n "$lang_cpp" ]; then
   594     echo "CXXFLAGS  += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
   595 fi
   596 if [ "$BUILD_TYPE" = "debug" ]; then
   597     if [ -n "$lang_c" ]; then
   598         echo 'CFLAGS += ${DEBUG_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
   599     fi
   600     if [ -n "$lang_cpp" ]; then
   601         echo 'CXXFLAGS += ${DEBUG_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
   602     fi
   603 fi
   604 if [ "$BUILD_TYPE" = "release" ]; then
   605     if [ -n "$lang_c" ]; then
   606         echo 'CFLAGS += ${RELEASE_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
   607     fi
   608     if [ -n "$lang_cpp" ]; then
   609         echo 'CXXFLAGS += ${RELEASE_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
   610     fi
   611 fi
   612 if [ -n "${TEMP_LDFLAGS}" ]; then
   613     echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
   614 fi
   617 # final result
   618 if [ $ERROR -ne 0 ]; then
   619     echo
   620     echo "Error: Unresolved dependencies"
   621     echo "$DEPENDENCIES_FAILED"
   622     abort_configure
   623 fi
   625 echo "configure finished"
   626 echo
   627 echo "Build Config:"
   628 echo "  PREFIX:      $prefix"
   629 echo "  TOOLCHAIN:   $TOOLCHAIN_NAME"
   630 echo "Options:"
   631 cat "$TEMP_DIR/options"
   632 echo
   634 # generate the config.mk file
   635 cat > "$TEMP_DIR/config.mk" << __EOF__
   636 #
   637 # config.mk generated by configure
   638 #
   640 __EOF__
   641 write_toolchain_defaults "$TEMP_DIR/toolchain.mk"
   642 cat "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk
   643 rm -Rf "$TEMP_DIR"

mercurial