gpgme/m4/qt5.m4
Ingo Klöcker e6830b58b6
build,qt: Decouple generation of moc files
* m4/qt5.m4: Export moc for Qt 5 in variable MOC5. Unset temporary MOC2.
* m4/qt6.m4: Export moc for Qt 6 in variable MOC6.
* lang/qt/src/Makefile.am: Generate .moc5 files from .h files. Generate
.moc forwarding headers in moc5 subfolder. Add moc5 subfolder to include
paths for Qt 5-based qgpgme library. Ditto for Qt 6. Clean up moc5 and
moc6 subfolders.
* lang/qt/tests/Makefile.am: List tests and test runners for Qt 5 and
Qt 6. Generate .moc5 files from .cpp files of tests. Generate .moc
forwarding headers in moc5 subfolder. Generate .hmoc file from
t-support.h directly in moc5 subfolder. Add moc5 subfolder to include
paths for all Qt 5-based tests and runners. Ditto for Qt 6. Specify
sources, LDADD and CPPFLAGS for all tests and test runners for Qt 5 and
Qt 6. Clean up moc5 and moc6 subfolders.
--

The output of Qt 5's moc and Qt 6's moc is incompatible. Therefore, we
need to generate different .moc files for Qt 5 and Qt 6 to support
co-building of the Qt 5 and Qt 6 bindings. The duplication of the
listing of the tests couldn't be avoided because automake doesn't
understand `the_tests5 = $(the_tests:%=%5)` and couldn't match the
tests with their _SOURCES. Maybe some m4 programming would have helped,
but that would have made the Makefiles even more unreadable.

GnuPG-bug-id: 7205
2024-07-18 14:41:52 +02:00

84 lines
2.7 KiB
Plaintext

dnl qt5.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 Qt5
dnl
dnl sets GPGME_QT5_LIBS, GPGME_QT5_CFLAGS, and MOC5
dnl
dnl if QT5 was found have_qt5_libs is set to yes
AC_DEFUN([FIND_QT5],
[
have_qt5_libs="no";
PKG_CHECK_MODULES(GPGME_QT5,
Qt5Core >= 5.0.0,
[have_qt5_libs="yes"],
[have_qt5_libs="no"])
PKG_CHECK_MODULES(GPGME_QT5TEST,
Qt5Test >= 5.0.0,
[have_qt5test_libs="yes"],
[have_qt5test_libs="no"])
if ! test "$have_w32_system" = yes; then
if "$PKG_CONFIG" --variable qt_config Qt5Core | grep -q "reduce_relocations"; then
GPGME_QT5_CFLAGS="$GPGME_QT5_CFLAGS -fpic"
fi
fi
if test "$have_qt5_libs" = "yes"; then
AC_CHECK_TOOL(MOC5, moc)
AC_MSG_CHECKING([moc version])
mocversion=`$MOC5 -v 2>&1`
mocversiongrep=`echo $mocversion | grep -E "Qt 5|moc 5"`
if test x"$mocversiongrep" != x"$mocversion"; then
AC_MSG_RESULT([no])
# moc was not the qt5 one, try with moc-qt5
AC_CHECK_TOOL(MOC2, moc-qt5)
mocversion=`$MOC2 -v 2>&1`
mocversiongrep=`echo $mocversion | grep -E "Qt 5|moc-qt5 5|moc 5"`
if test x"$mocversiongrep" != x"$mocversion"; then
AC_CHECK_TOOL(QTCHOOSER, qtchooser)
qt5tooldir=`QT_SELECT=qt5 qtchooser -print-env | grep QTTOOLDIR | cut -d '=' -f 2 | cut -d \" -f 2`
mocversion=`$qt5tooldir/moc -v 2>&1`
mocversiongrep=`echo $mocversion | grep -E "Qt 5|moc 5"`
if test x"$mocversiongrep" != x"$mocversion"; then
# no valid moc found
have_qt5_libs="no";
else
MOC5=$qt5tooldir/moc
fi
else
MOC5=$MOC2
fi
unset MOC2
fi
AC_MSG_RESULT([$mocversion])
fi
if test "$have_qt5_libs" = "yes"; then
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_QT5_CFLAGS
OLDLIBS=$LIBS
LIBS=$GPGME_QT5_LIBS
AC_LANG_PUSH(C++)
AC_MSG_CHECKING([whether a simple qt program can be built])
AC_LINK_IFELSE([AC_LANG_SOURCE([
#include <QCoreApplication>
int main (int argc, char **argv) {
QCoreApplication app(argc, argv);
app.exec();
}])], [have_qt5_libs='yes'], [have_qt5_libs='no'])
AC_MSG_RESULT([$have_qt5_libs])
AC_LANG_POP()
CPPFLAGS=$OLDCPPFLAGS
LIBS=$OLDLIBS
fi
])