1dnl 2dnl Check for Qt 6 3dnl 4 5qt_min_ver=6.1.0 6 7check_qt6() { 8 AC_ARG_WITH(qmake6, 9 AC_HELP_STRING([--with-qmake6=prog],[use prog instead of looking for qmake6]), 10 [ QMAKE6="$with_qmake6" ],) 11 12 if ! test -z "$QMAKE6"; then 13 AC_MSG_CHECKING(for qmake6) 14 AC_MSG_RESULT(using supplied $QMAKE6) 15 else 16 AC_PATH_TOOL(QMAKE6, qmake6,, $PATH) 17 fi 18 19 if test x"$QMAKE6" = x; then 20 AC_MSG_CHECKING(for Qt 6) 21 AC_MSG_RESULT(no: qmake6 not found) 22 return 23 fi 24 25 qmake_dir="`mktemp -d`" 26 27 touch "$qmake_dir/configure.cpp" "$qmake_dir/configure.h" 28 29 cat > "$qmake_dir/configure.ui" <<EOT 30<?xml version="1.0" encoding="UTF-8"?> 31<ui version="4.0"> 32</ui> 33EOT 34 35 cat > "$qmake_dir/configure.qrc" <<EOT 36<?xml version='1.0' encoding='UTF-8'?> 37<!DOCTYPE RCC> 38<RCC version='1.0'> 39 <qresource> 40 <file>configure.pro</file> 41 </qresource> 42</RCC> 43EOT 44 45 cat > "$qmake_dir/configure_non_gui.pro" <<EOT 46QT = core 47 48HEADERS = configure.h 49SOURCES = configure.cpp 50EOT 51 52 cat > "$qmake_dir/configure.pro" <<EOT 53QT = core dbus gui widgets network concurrent 54 55FORMS = configure.ui 56RESOURCES = configure.qrc 57HEADERS = configure.h 58SOURCES = configure.cpp 59EOT 60 61 old_wd="$PWD" 62 cd "$qmake_dir" 63 64 "$QMAKE6" -makefile -nocache configure_non_gui.pro > /dev/null 65 result=$? 66 67 if test $result = 0; then 68 mv Makefile Makefile.non_gui 69 fi 70 71 "$QMAKE6" -makefile -nocache configure.pro > /dev/null 72 result2=$? 73 74 "$QMAKE6" -query > "$qmake_dir/configure.properties" 75 result3=$? 76 77 cd "$old_wd" 78 79 if test $result != 0 -o $result2 != 0 -o $result3 != 0; then 80 AC_MSG_CHECKING(for Qt 6) 81 AC_MSG_RESULT(no: qmake6 couldn't be run for a dummy project) 82 83 rm -rf "$qmake_dir" 84 85 return 86 fi 87 88 dnl Check its version. 89 qmake6_ver="`$ac_cv_path_EGREP '^QT_VERSION:' "$qmake_dir/configure.properties" | sed 's/^QT_VERSION://'`" 90 91 AC_MSG_CHECKING(for qmake6's version) 92 if test -z "qmake6_ver"; then 93 AC_MSG_RESULT(unknown; please contact the author) 94 return 95 elif ! check_version $qt_min_ver $qmake6_ver; then 96 AC_MSG_RESULT(too old: $qmake6_ver, neet at least $qt_mIN-ver) 97 return 98 else 99 AC_MSG_RESULT($qmake6_ver) 100 fi 101 102 qt_bindir="`$ac_cv_path_EGREP '^QT_INSTALL_BINS:' "$qmake_dir/configure.properties" | sed 's/^QT_INSTALL_BINS://'`" 103 qt_libexecdir="`$ac_cv_path_EGREP '^QT_INSTALL_LIBEXECS:' "$qmake_dir/configure.properties" | sed 's/^QT_INSTALL_LIBEXECS://'`" 104 qt_searchpath="$qt_libexecdir:$qt_bindir:$PATH" 105 106 QT_CFLAGS="`$ac_cv_path_EGREP '^DEFINES *=' "$qmake_dir/Makefile" | sed 's/^DEFINES *= *//'`" 107 QT_CFLAGS="$QT_CFLAGS `$ac_cv_path_EGREP '^CXXFLAGS *=' "$qmake_dir/Makefile" | sed -e 's/^CXXFLAGS *= *//' -e 's/-pipe//g' -e 's/-O.//g' -e 's/ -W[[^ ]]*//g' -e 's/-std=[[^ ]]*//g' -e 's/\$(DEFINES)//g'`" 108 QT_CFLAGS="$QT_CFLAGS `$ac_cv_path_EGREP '^INCPATH *=' "$qmake_dir/Makefile" | sed -e 's/^INCPATH *= *//' -e 's:-I[[^/]][[^ ]]*::g'`" 109 QT_CFLAGS="`echo $QT_CFLAGS | sed -e 's/\$(EXPORT_ARCH_ARGS)//'`" 110 QT_LIBS="`$ac_cv_path_EGREP '^LFLAGS *=' "$qmake_dir/Makefile" | sed -e 's/^LFLAGS *= *//' -e 's/-Wl,-O[[^ ]]*//g'`" 111 QT_LIBS="$QT_LIBS `$ac_cv_path_EGREP '^LIBS *=' "$qmake_dir/Makefile" | sed -e 's/^LIBS *= *//' -e 's/\$(SUBLIBS)//g' -e 's:-L[[^/]][[^ ]]*::g'`" 112 QT_LIBS="`echo $QT_LIBS | sed -e 's/\$(EXPORT_ARCH_ARGS)//'`" 113 QT_LIBS_NON_GUI="`$ac_cv_path_EGREP '^LFLAGS *=' "$qmake_dir/Makefile.non_gui" | sed -e 's/^LFLAGS *= *//' -e 's/-Wl,-O[[^ ]]*//g'`" 114 QT_LIBS_NON_GUI="$QT_LIBS_NON_GUI `$ac_cv_path_EGREP '^LIBS *=' "$qmake_dir/Makefile.non_gui" | sed -e 's/^LIBS *= *//' -e 's/\$(SUBLIBS)//g' -e 's:-L[[^/]][[^ ]]*::g'`" 115 QT_LIBS_NON_GUI="`echo $QT_LIBS_NON_GUI | sed -e 's/\$(EXPORT_ARCH_ARGS)//'`" 116 117 rm -rf "$qmake_dir" 118 119 if test x"$QT_CFLAGS" = x -o x"$QT_LIBS" = x -o x"$QT_LIBS_NON_GUI" = x; then 120 AC_MSG_CHECKING(for Qt 6) 121 AC_MSG_RESULT(no: could not extract one or more compiler flags from Makefile generated by qmake6) 122 return 123 fi 124 125 AC_PATH_PROG(LCONVERT, lconvert,, [$qt_searchpath]) 126 AC_PATH_PROG(MOC, moc,, [$qt_searchpath]) 127 AC_PATH_PROG(RCC, rcc,, [$qt_searchpath]) 128 AC_PATH_PROG(UIC, uic,, [$qt_searchpath]) 129 130 if test x"$MOC" = x; then 131 AC_MSG_CHECKING(for Qt 6) 132 AC_MSG_RESULT(no: could not find the moc executable) 133 return 134 135 elif test x"$RCC" = x; then 136 AC_MSG_CHECKING(for Qt 6) 137 AC_MSG_RESULT(no: could not find the rcc executable) 138 return 139 140 elif test x"$UIC" = x; then 141 AC_MSG_CHECKING(for Qt 6) 142 AC_MSG_RESULT(no: could not find the uic executable) 143 return 144 fi 145 146 dnl compile test program 147 AC_LANG_PUSH(C++) 148 AC_CACHE_VAL(am_cv_qt6_compilation, [ 149 ac_save_CXXFLAGS="$CXXFLAGS" 150 ac_save_LIBS="$LIBS" 151 CXXFLAGS="$STD_CXX $CXXFLAGS $QT_CFLAGS -fPIC" 152 LIBS="$LDFLAGS $QT_LIBS" 153 unset ac_cv_qt_compilation 154 155 AC_TRY_LINK([ 156#include <QtCore> 157#include <QCoreApplication> 158class Config : public QCoreApplication { 159public: 160Config(int &argc, char **argv); 161}; 162Config::Config(int &argc, char **argv) 163: QCoreApplication(argc,argv) {setApplicationName("config");} 164 ], [ 165int ai = 0; 166char **ac = 0; 167Config app(ai,ac); 168return 0; 169 ], [ am_cv_qt6_compilation=1 ], [ am_cv_qt6_compilation=0 ]) 170 171 CXXFLAGS="$ac_save_CXXFLAGS" 172 LIBS="$ac_save_LIBS" 173 ]) 174 AC_LANG_POP() 175 176 if test x"$am_cv_qt6_compilation" != x1; then 177 AC_MSG_CHECKING(for Qt 6) 178 AC_MSG_RESULT(no: could not compile a test program) 179 return 180 fi 181 182 AC_DEFINE(HAVE_QT, 1, [Define if Qt is present]) 183 AC_MSG_CHECKING(for Qt 6) 184 AC_MSG_RESULT(yes) 185 have_qt6=yes 186} 187 188AC_ARG_ENABLE([gui], 189 AC_HELP_STRING([--enable-gui],[compile the Qt-based GUI (yes)]), 190 [],[enable_gui=yes]) 191AC_ARG_ENABLE([qt6], 192 AC_HELP_STRING([--enable-qt6],[compile with Qt 6 (yes)]), 193 [],[enable_qt6=yes]) 194 195have_qt6=no 196 197if test x"$enable_qt6" != "xyes"; then 198 AC_MSG_CHECKING(for Qt 6) 199 AC_MSG_RESULT(no: disabled by user request) 200 201else 202 check_qt6 203 204 unset qmake_dir qt_bindir qt_libdir qt_searchpath 205 206 if test $have_qt6 != yes; then 207 unset QT_CFLAGS QT_LIBS QT_LIBS_NON_GUI LCONVERT MOC RCC UIC ac_cv_path_LCONVERT ac_cv_path_MOC ac_cv_path_RCC ac_cv_path_UIC 208 fi 209fi 210