--- 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"