From 8d019bbb8d40de2cbed7ad6d3367c6a46a561fab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingo=20Kl=C3=B6cker?= Date: Tue, 11 Oct 2022 10:14:53 +0200 Subject: build,qt: Allow building QGpgME for Qt 6 * configure.ac: Look for Qt 5 and/or Qt 6. Require C++17 if Qt 6 binding is built. Build cmake files QGpgmeConfig* for Qt 5 and QGpgmeQt6Config* for Qt 6. (available_languages): Add "qt5" and "qt6". (WANT_QT5, WANT_QT6): New conditionals. * lang/qt/src/Makefile.am: Keep building libqgpgme for Qt 5. Build libqgpgmeqt6 for Qt 6. * lang/qt/tests/Makefile.am: Build tests for Qt 5 or Qt 6. * lang/qt/src/QGpgmeQt6Config-w32.cmake.in.in, lang/qt/src/QGpgmeQt6Config.cmake.in.in, lang/qt/src/QGpgmeQt6ConfigVersion.cmake.in, m4/qt6.m4: New. -- This makes it possible to build QGpgME optionally for Qt 6.4.0 or later. By default or if the language "qt" is enabled, then QGpgME is built either for Qt 5 (if found) or Qt 6. A build for Qt 5 or Qt 6 can be requested by explicitly enabling the language "qt5" or "qt6". Building QGpgME for Qt 5 and Qt 6 simultaneously is not supported. --- m4/qt6.m4 | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 m4/qt6.m4 (limited to 'm4') diff --git a/m4/qt6.m4 b/m4/qt6.m4 new file mode 100644 index 00000000..6e864fb1 --- /dev/null +++ b/m4/qt6.m4 @@ -0,0 +1,82 @@ +dnl qt6.m4 +dnl Copyright (C) 2016 Intevation GmbH +dnl +dnl This file is part of gpgme and is provided under the same license as gpgme + +dnl Autoconf macro to find Qt6 +dnl +dnl sets GPGME_QT6_LIBS and GPGME_QT6_CFLAGS +dnl +dnl if QT6 was found have_qt6_libs is set to yes + +AC_DEFUN([FIND_QT6], +[ + have_qt6_libs="no"; + + PKG_CHECK_MODULES(GPGME_QT6, + Qt6Core >= 6.4.0, + [have_qt6_libs="yes"], + [have_qt6_libs="no"]) + + PKG_CHECK_MODULES(GPGME_QT6TEST, + Qt6Test >= 6.4.0, + [have_qt6test_libs="yes"], + [have_qt6test_libs="no"]) + + if ! test "$have_w32_system" = yes; then + if "$PKG_CONFIG" --variable qt_config Qt6Core | grep -q "reduce_relocations"; then + GPGME_QT6_CFLAGS="$GPGME_QT6_CFLAGS -fpic" + fi + fi + if test "$have_qt6_libs" = "yes"; then + # Qt6 moved moc to libexec + qt6libexecdir=$($PKG_CONFIG --variable=libexecdir 'Qt6Core >= 6.4.0') + AC_PATH_TOOL(MOC, moc, [], [$qt6libexecdir]) + AC_MSG_CHECKING([moc version]) + mocversion=`$MOC -v 2>&1` + mocversiongrep=`echo $mocversion | grep -E "Qt 6|moc 6"` + if test x"$mocversiongrep" != x"$mocversion"; then + AC_MSG_RESULT([no]) + # moc was not the qt6 one, try with moc-qt6 + AC_CHECK_TOOL(MOC2, moc-qt6) + mocversion=`$MOC2 -v 2>&1` + mocversiongrep=`echo $mocversion | grep -E "Qt 6|moc-qt6 6|moc 6"` + if test x"$mocversiongrep" != x"$mocversion"; then + AC_CHECK_TOOL(QTCHOOSER, qtchooser) + qt6tooldir=`QT_SELECT=qt6 qtchooser -print-env | grep QTTOOLDIR | cut -d '=' -f 2 | cut -d \" -f 2` + mocversion=`$qt6tooldir/moc -v 2>&1` + mocversiongrep=`echo $mocversion | grep -E "Qt 6|moc 6"` + if test x"$mocversiongrep" != x"$mocversion"; then + # no valid moc found + have_qt6_libs="no"; + else + MOC=$qt6tooldir/moc + fi + else + MOC=$MOC2 + fi + fi + AC_MSG_RESULT([$mocversion]) + dnl Check that a binary can actually be build with this qt. + dnl pkg-config may be set up in a way that it looks also for libraries + dnl of the build system and not only for the host system. In that case + dnl we check here that we can actually compile / link a qt application + dnl for host. + OLDCPPFLAGS=$CPPFLAGS + CPPFLAGS=$GPGME_QT6_CFLAGS + OLDLIBS=$LIBS + LIBS=$GPGME_QT6_LIBS + AC_LANG_PUSH(C++) + AC_MSG_CHECKING([whether a simple qt program can be built]) + AC_LINK_IFELSE([AC_LANG_SOURCE([ + #include + int main (int argc, char **argv) { + QCoreApplication app(argc, argv); + app.exec(); + }])], [have_qt6_libs='yes'], [have_qt6_libs='no']) + AC_MSG_RESULT([$have_qt6_libs]) + AC_LANG_POP() + CPPFLAGS=$OLDCPPFLAGS + LIBS=$OLDLIBS + fi +]) -- cgit v1.2.3