test/configure

changeset 66
dc758dcd4645
parent 63
ac47c2fb2c4a
child 67
e43d30273f74
--- a/test/configure	Mon Sep 18 22:49:54 2023 +0200
+++ b/test/configure	Mon Sep 18 23:20:29 2023 +0200
@@ -29,12 +29,9 @@
 MANDIR=
 
 # custom variables
-HOST=`uname -n`
-PREFIX=`pwd`/work
-INSTALL_DIR=$PREFIX
 
 # features
-FEATURE_PG=auto
+FEATURE_DB=auto
 
 # clean abort
 abort_configure()
@@ -67,8 +64,14 @@
   --infodir=DIR           info documentation [DATAROOTDIR/info]
   --mandir=DIR            man documentation [DATAROOTDIR/man]
 
+Options:
+  --debug                 add extra compile flags for debug builds
+  --release               add extra compile flags for release builds
+  --toolkit=(gtk3|cli|gtk2|wpf)
+
 Optional Features:
-  --disable-pg
+  --disable-db
+  --enable-gui
 
 __EOF__
 }
@@ -96,8 +99,11 @@
         "--help"*) printhelp; abort_configure ;;
         "--debug")           BUILD_TYPE="debug" ;;
         "--release")         BUILD_TYPE="release" ;;
-        "--enable-pg") FEATURE_PG=on ;;
-        "--disable-pg") unset FEATURE_PG ;;
+        "--toolkit="*) OPT_TOOLKIT=${ARG#--toolkit=} ;;
+        "--enable-db") FEATURE_DB=on ;;
+        "--disable-db") unset FEATURE_DB ;;
+        "--enable-gui") FEATURE_GUI=on ;;
+        "--disable-gui") unset FEATURE_GUI ;;
         "-"*) echo "unknown option: $ARG"; abort_configure ;;
     esac
 done
@@ -167,7 +173,7 @@
 }
 
 
-# generate config.mk
+# generate vars.mk
 cat > "$TEMP_DIR/vars.mk" << __EOF__
 PREFIX=$PREFIX
 EPREFIX=$EPREFIX
@@ -182,26 +188,12 @@
 INCLUDEDIR=$INCLUDEDIR
 INFODIR=$INFODIR
 MANDIR=$MANDIR
-HOST=$HOST
-PREFIX=$PREFIX
-INSTALL_DIR=$INSTALL_DIR
 __EOF__
-cat > "$TEMP_DIR/config.mk" << __EOF__
-#
-# config.mk generated by configure
-#
-__EOF__
-sort -u "$TEMP_DIR/vars.mk" >> "$TEMP_DIR/config.mk"
+sort -u -o "$TEMP_DIR/vars.mk" "$TEMP_DIR/vars.mk"
 
 
-# toolchain detection
-# this will insert make vars to config.mk
+# toolchain detection utilities
 . make/toolchain.sh
-if [ -n "$TOOLCHAIN_ERROR" ]; then
-    echo "Toolchain error: $TOOLCHAIN_ERROR"
-    echo "Abort."
-    abort_configure
-fi
 
 #
 # DEPENDENCIES
@@ -214,27 +206,77 @@
 {
     if "$PKG_CONFIG" --exists "$1" ; then :
     else return 1 ; fi
-    if [ -n "$2" ] && "$PKG_CONFIG" --atleast-version="$2" "$1" ; then :
+    if [ -z "$2" ] || "$PKG_CONFIG" --atleast-version="$2" "$1" ; then :
     else return 1 ; fi
-    if [ -n "$3" ] && "$PKG_CONFIG" --exact-version="$3" "$1" ; then :
+    if [ -z "$3" ] || "$PKG_CONFIG" --exact-version="$3" "$1" ; then :
     else return 1 ; fi
-    if [ -n "$4" ] && "$PKG_CONFIG" --max-version="$4" "$1" ; then :
+    if [ -z "$4" ] || "$PKG_CONFIG" --max-version="$4" "$1" ; then :
     else return 1 ; fi
     return 0
 }
 
-dependency_error_libpq()
+dependency_error_qt4()
+{
+    printf "checking for qt4... "
+    # dependency qt4
+    while true
+    do
+        if which qmake-qt4 > /dev/null ; then
+            :
+        else
+            break
+        fi
+        echo yes
+        return 1
+    done
+
+    echo no
+    return 0
+}
+dependency_error_curl()
 {
-    printf "checking for libpq... "
-    # dependency libpq
+    printf "checking for curl... "
+    # dependency curl platform="windows"
+    while true
+    do
+        if notisplatform "windows"; then
+            break
+        fi
+        TEMP_CFLAGS="$TEMP_CFLAGS -I/mingw/include"
+        TEMP_LDFLAGS="$TEMP_LDFLAGS -lcurl"
+        echo yes
+        return 1
+    done
+
+    # dependency curl platform="macos"
+    while true
+    do
+        if notisplatform "macos"; then
+            break
+        fi
+        if tmp_flags=`curl-config --cflags` ; then
+            TEMP_CFLAGS="$TEMP_CFLAGS $tmp_flags"
+        else
+            break
+        fi
+        if tmp_flags=`curl-config --ldflags` ; then
+            TEMP_LDFLAGS="$TEMP_LDFLAGS $tmp_flags"
+        else
+            break
+        fi
+        echo yes
+        return 1
+    done
+
+    # dependency curl
     while true
     do
         if [ -z "$PKG_CONFIG" ]; then
             break
         fi
-        if test_pkg_config "libpq" "" "" "" ; then
-            TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags libpq`"
-            TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs libpq`"
+        if test_pkg_config "libcurl" "" "" "" ; then
+            TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags libcurl`"
+            TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs libcurl`"
         else
             break
         fi
@@ -245,18 +287,40 @@
     echo no
     return 0
 }
-dependency_error_openssl()
+dependency_error_gtk2()
 {
-    printf "checking for openssl... "
-    # dependency openssl
+    printf "checking for gtk2... "
+    # dependency gtk2
     while true
     do
         if [ -z "$PKG_CONFIG" ]; then
             break
         fi
-        if test_pkg_config "openssl" "" "" "" ; then
-            TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags openssl`"
-            TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs openssl`"
+        if test_pkg_config "gtk+-2.0" "" "" "" ; then
+            TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags gtk+-2.0`"
+            TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs gtk+-2.0`"
+        else
+            break
+        fi
+        echo yes
+        return 1
+    done
+
+    echo no
+    return 0
+}
+dependency_error_sqlite()
+{
+    printf "checking for sqlite... "
+    # dependency sqlite
+    while true
+    do
+        if [ -z "$PKG_CONFIG" ]; then
+            break
+        fi
+        if test_pkg_config "sqlite3" "" "" "" ; then
+            TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags sqlite3`"
+            TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs sqlite3`"
         else
             break
         fi
@@ -264,13 +328,66 @@
         return 1
     done
 
-    # dependency openssl platform="bsd"
+    echo no
+    return 0
+}
+dependency_error_test()
+{
+    printf "checking for test... "
+    # dependency test platform="bsd"
     while true
     do
         if notisplatform "bsd"; then
             break
         fi
-        TEMP_LDFLAGS="$TEMP_LDFLAGS -lssl -lcrypto"
+        if isplatform "macos"; then
+            break
+        fi
+        TEMP_CFLAGS="$TEMP_CFLAGS -DBSD"
+        echo yes
+        return 1
+    done
+
+    # dependency test
+    while true
+    do
+        TEMP_CFLAGS="$TEMP_CFLAGS -DTEST"
+        echo yes
+        return 1
+    done
+
+    echo no
+    return 0
+}
+dependency_error_gtk3()
+{
+    printf "checking for gtk3... "
+    # dependency gtk3
+    while true
+    do
+        if [ -z "$PKG_CONFIG" ]; then
+            break
+        fi
+        if test_pkg_config "gtk+-5.0" "" "" "" ; then
+            TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags gtk+-5.0`"
+            TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs gtk+-5.0`"
+        else
+            break
+        fi
+        echo yes
+        return 1
+    done
+
+    echo no
+    return 0
+}
+dependency_error_deptest()
+{
+    printf "checking for deptest... "
+    # dependency deptest
+    while true
+    do
+        TEMP_CFLAGS="$TEMP_CFLAGS -DDEPTEST"
         echo yes
         return 1
     done
@@ -281,38 +398,23 @@
 dependency_error_libxml2()
 {
     printf "checking for libxml2... "
-    # dependency libxml2 platform="macos"
-    while true
-    do
-        if notisplatform "macos"; then
-            break
-        fi
-        if tmp_flags=`xml2-config --cflags` ; then
-            TEMP_CFLAGS="$TEMP_CFLAGS $tmp_flags"
-        else
-            break
-        fi
-        if tmp_flags=`xml2-config --libs` ; then
-            TEMP_LDFLAGS="$TEMP_LDFLAGS $tmp_flags"
-        else
-            break
-        fi
-        echo yes
-        return 1
-    done
-
     # dependency libxml2
     while true
     do
         if [ -z "$PKG_CONFIG" ]; then
             break
         fi
-        if test_pkg_config "libxml-2.0" "" "" "" ; then
+        if test_pkg_config "libxml-2.0" "2.8" "" "" ; then
             TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags libxml-2.0`"
             TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs libxml-2.0`"
         else
             break
         fi
+        cat >> $TEMP_DIR/make.mk << __EOF__
+# Dependency: libxml2
+xml = libxml2
+
+__EOF__
         echo yes
         return 1
     done
@@ -321,80 +423,273 @@
     return 0
 }
 
+# start collecting dependency information
+echo > "$TEMP_DIR/flags.mk"
+
 DEPENDENCIES_FAILED=
 ERROR=0
 # unnamed dependencies
 TEMP_CFLAGS=
+TEMP_CXXFLAGS=
 TEMP_LDFLAGS=
 while true
 do
     while true
     do
+        if detect_c_compiler ; then
+            :
+        else
+            ERROR=1
+            break
+        fi
 
+        cat >> "$TEMP_DIR/make.mk" << __EOF__
+MVAR = 123
+MVAR += 123
+
+__EOF__
         break
     done
     break
 done
 
-# add unnamed dependency flags to config.mk
-echo >> "$TEMP_DIR/config.mk"
+# add general dependency flags to flags.mk
+echo "# general flags" >> "$TEMP_DIR/flags.mk"
 if [ -n "${TEMP_CFLAGS}" ]; then
-    echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/config.mk"
+    echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
+fi
+if [ -n "${TEMP_CXXFLAGS}" ]; then
+    echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
 fi
 if [ -n "${TEMP_LDFLAGS}" ]; then
-    echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/config.mk"
+    echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
 fi
 
 #
 # OPTION VALUES
 #
+checkopt_toolkit_gtk3()
+{
+    VERR=0
+    if dependency_error_gtk3 ; then
+        VERR=1
+    fi
+    if [ $VERR -ne 0 ]; then
+        return 1
+    fi
+        TEMP_CFLAGS="$TEMP_CFLAGS -Da=b"
+        TEMP_CXXFLAGS="$TEMP_CXXFLAGS -Da=b"
+    cat >> "$TEMP_DIR/make.mk" << __EOF__
+UIOBJ += graphics_cairo.o
+
+__EOF__
+    return 0
+}
+checkopt_toolkit_cli()
+{
+    VERR=0
+    if dependency_error_curl ; then
+        VERR=1
+    fi
+    if dependency_error_test ; then
+        VERR=1
+    fi
+    if [ $VERR -ne 0 ]; then
+        return 1
+    fi
+    return 0
+}
+checkopt_toolkit_gtk2()
+{
+    VERR=0
+    if dependency_error_gtk2 ; then
+        VERR=1
+    fi
+    if [ $VERR -ne 0 ]; then
+        return 1
+    fi
+    return 0
+}
+checkopt_toolkit_wpf()
+{
+    VERR=0
+    if dependency_error_test ; then
+        VERR=1
+    fi
+    if [ $VERR -ne 0 ]; then
+        return 1
+    fi
+    return 0
+}
 
 #
 # TARGETS
 #
 
-# Target
+echo >> "$TEMP_DIR/flags.mk"
+# Target: dav
+echo "# flags for target dav" >> "$TEMP_DIR/flags.mk"
 TEMP_CFLAGS=
+TEMP_CXXFLAGS=
 TEMP_LDFLAGS=
 
+if dependency_error_curl; then
+    DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED curl "
+    ERROR=1
+fi
 if dependency_error_libxml2; then
     DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED libxml2 "
     ERROR=1
 fi
-if dependency_error_openssl; then
-    DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED openssl "
+if dependency_error_test; then
+    DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED test "
     ERROR=1
 fi
 
 # Features
-if [ -n "$FEATURE_PG" ]; then
+if [ -n "$FEATURE_DB" ]; then
     # check dependency
-    if dependency_error_libpq ; then
+    if dependency_error_sqlite ; then
         # "auto" features can fail and are just disabled in this case
-        if [ "$FEATURE_PG" = "auto" ]; then
-            unset FEATURE_PG
+        if [ "$FEATURE_DB" = "auto" ]; then
+            unset FEATURE_DB
 		else
-            DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED libpq "
+            DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED sqlite "
+            ERROR=1
+        fi
+    fi
+fi
+if [ -n "$FEATURE_GUI" ]; then
+    # check dependency
+    if dependency_error_gtk3 ; then
+        # "auto" features can fail and are just disabled in this case
+        if [ "$FEATURE_GUI" = "auto" ]; then
+            unset FEATURE_GUI
+		else
+            DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED gtk3 "
             ERROR=1
         fi
     fi
 fi
 
+# Option: --toolkit
+if [ -z $OPT_TOOLKIT ]; then
+    SAVED_ERROR="$ERROR"
+    SAVED_DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED"
+    ERROR=1
+    while true
+    do
+        if isplatform "windows"; then
+        if checkopt_toolkit_wpf ; then
+            echo "  toolkit: wpf" >> "$TEMP_DIR/options"
+            ERROR=0
+            break
+        fi
+        fi
+        if checkopt_toolkit_gtk3 ; then
+            echo "  toolkit: gtk3" >> "$TEMP_DIR/options"
+            ERROR=0
+            break
+        fi
+        if checkopt_toolkit_gtk2 ; then
+            echo "  toolkit: gtk2" >> "$TEMP_DIR/options"
+            ERROR=0
+            break
+        fi
+        break
+    done
+    if [ $ERROR -ne 0 ]; then
+        SAVED_ERROR=1
+    fi
+    ERROR="$SAVED_ERROR"
+    DEPENDENCIES_FAILED="$SAVED_DEPENDENCIES_FAILED"
+else
+    if false; then
+        false
+    elif [ "$OPT_TOOLKIT" = "gtk3" ]; then
+        echo "  toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options
+        if checkopt_toolkit_gtk3 ; then
+            :
+        else
+            ERROR=1
+        fi
+    elif [ "$OPT_TOOLKIT" = "cli" ]; then
+        echo "  toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options
+        if checkopt_toolkit_cli ; then
+            :
+        else
+            ERROR=1
+        fi
+    elif [ "$OPT_TOOLKIT" = "gtk2" ]; then
+        echo "  toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options
+        if checkopt_toolkit_gtk2 ; then
+            :
+        else
+            ERROR=1
+        fi
+    elif [ "$OPT_TOOLKIT" = "wpf" ]; then
+        echo "  toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options
+        if checkopt_toolkit_wpf ; then
+            :
+        else
+            ERROR=1
+        fi
+    fi
+fi
 
-echo >> "$TEMP_DIR/config.mk"
 if [ -n "${TEMP_CFLAGS}" ]; then
-    echo "CFLAGS  += $TEMP_CFLAGS" >> "$TEMP_DIR/config.mk"
+    echo "DAV_CFLAGS  += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
+fi
+if [ -n "${TEMP_CXXFLAGS}" ]; then
+    echo "DAV_CXXFLAGS  += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
 fi
 if [ "$BUILD_TYPE" = "debug" ]; then
-    echo 'CFLAGS += ${DEBUG_FLAGS}' >> "$TEMP_DIR/config.mk"
+    echo 'DAV_CFLAGS += ${DEBUG_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
+    echo 'DAV_CXXFLAGS += ${DEBUG_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
 fi
 if [ "$BUILD_TYPE" = "release" ]; then
-    echo 'CFLAGS += ${RELEASE_FLAGS}' >> "$TEMP_DIR/config.mk"
+    echo 'DAV_CFLAGS += ${RELEASE_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
+    echo 'DAV_CXXFLAGS += ${RELEASE_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
 fi
 if [ -n "${TEMP_LDFLAGS}" ]; then
-    echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/config.mk"
+    echo "DAV_LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
+fi
+
+echo >> "$TEMP_DIR/flags.mk"
+# Target
+echo "# flags for unnamed target" >> "$TEMP_DIR/flags.mk"
+TEMP_CFLAGS=
+TEMP_CXXFLAGS=
+TEMP_LDFLAGS=
+
+if dependency_error_deptest; then
+    DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED deptest "
+    ERROR=1
 fi
 
+# Features
+
+
+if [ -n "${TEMP_CFLAGS}" ]; then
+    echo "CFLAGS  += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
+fi
+if [ -n "${TEMP_CXXFLAGS}" ]; then
+    echo "CXXFLAGS  += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
+fi
+if [ "$BUILD_TYPE" = "debug" ]; then
+    echo 'CFLAGS += ${DEBUG_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
+    echo 'CXXFLAGS += ${DEBUG_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
+fi
+if [ "$BUILD_TYPE" = "release" ]; then
+    echo 'CFLAGS += ${RELEASE_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
+    echo 'CXXFLAGS += ${RELEASE_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
+fi
+if [ -n "${TEMP_LDFLAGS}" ]; then
+    echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
+fi
+
+
+# final result
 if [ $ERROR -ne 0 ]; then
     echo
     echo "Error: Unresolved dependencies"
@@ -407,14 +702,30 @@
 echo "Build Config:"
 echo "  PREFIX:    $PREFIX"
 echo "  TOOLCHAIN: $TOOLCHAIN_NAME"
+echo "Options:"
+cat "$TEMP_DIR/options"
 echo "Features:"
-if [ -n "$FEATURE_PG" ]; then
-echo "  pg: on"
+if [ -n "$FEATURE_DB" ]; then
+echo "  db: on"
 else
-echo "  pg: off"
+echo "  db: off"
+fi
+if [ -n "$FEATURE_GUI" ]; then
+echo "  gui: on"
+else
+echo "  gui: off"
 fi
 echo
-cat "$TEMP_DIR/config.mk" "$TEMP_DIR/make.mk" > config.mk
+
+# generate the config.mk file
+cat > "$TEMP_DIR/config.mk" << __EOF__
+#
+# config.mk generated by configure
+#
+
+__EOF__
+write_toolchain_defaults "$TEMP_DIR/config.mk"
+cat "$TEMP_DIR/config.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk
 rm -Rf "$TEMP_DIR"
 
 

mercurial