aboutsummaryrefslogtreecommitdiffstats
path: root/lang/qt/src
diff options
context:
space:
mode:
authorIngo Klöcker <[email protected]>2024-07-17 12:06:52 +0000
committerIngo Klöcker <[email protected]>2024-07-18 12:41:52 +0000
commite6830b58b6de6d4fa02f1055cd0e992c9310b51a (patch)
tree84dbabaae40290917547381a08e4b28f9128362b /lang/qt/src
parentbuild,qt: Remove include directories on uninstall (diff)
downloadgpgme-e6830b58b6de6d4fa02f1055cd0e992c9310b51a.tar.gz
gpgme-e6830b58b6de6d4fa02f1055cd0e992c9310b51a.zip
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
Diffstat (limited to 'lang/qt/src')
-rw-r--r--lang/qt/src/Makefile.am64
1 files changed, 51 insertions, 13 deletions
diff --git a/lang/qt/src/Makefile.am b/lang/qt/src/Makefile.am
index 56da52d5..e98e31e4 100644
--- a/lang/qt/src/Makefile.am
+++ b/lang/qt/src/Makefile.am
@@ -336,27 +336,67 @@ camelcase6includedir = $(includedir)/$(includeprefix6)/QGpgME
camelcase6include_HEADERS = $(camelcase_headers)
endif
+# generate the moc files in two steps:
+# 1. generate Qt 5/6-specific moc files in builddir with extension .moc5/.moc6;
+# this ensures correct dependencies on the source files
+# 2. generate forwarding headers in subfolders moc5/moc6 with extension .moc;
+# this ensures that the "foo.moc" includes in the source files work and
+# include the correct version of the generated moc files for Qt 5/6
+# GNU make's pattern rules would make this easier, but we don't want to use them
if WANT_QT5
-AM_CPPFLAGS = -I$(top_builddir)/lang/cpp/src -I$(top_builddir)/src \
+moc5_dir = moc5
+qgpgme_moc5_sources = $(qgpgme_moc_sources:%.moc=%.moc5)
+qgpgme_moc5_forward_headers = $(qgpgme_moc_sources:%=$(moc5_dir)/%)
+
+.h.moc5:
+ $(MOC5) `test -f '$<' || echo '$(srcdir)/'`$< -o $@
+
+$(moc5_dir):
+ mkdir $(moc5_dir)
+
+$(qgpgme_moc5_forward_headers): Makefile.am | $(moc5_dir)
+ echo "#include \"../$(notdir $@)5\"" > "$@"
+endif
+if WANT_QT6
+moc6_dir = moc6
+qgpgme_moc6_sources = $(qgpgme_moc_sources:%.moc=%.moc6)
+qgpgme_moc6_forward_headers = $(qgpgme_moc_sources:%=$(moc6_dir)/%)
+
+.h.moc6:
+ $(MOC6) `test -f '$<' || echo '$(srcdir)/'`$< -o $@
+
+$(moc6_dir):
+ mkdir $(moc6_dir)
+
+$(qgpgme_moc6_forward_headers): Makefile.am | $(moc6_dir)
+ echo "#include \"../$(notdir $@)6\"" > "$@"
+endif
+
+if WANT_QT5
+AM_CPPFLAGS = -I./$(moc5_dir) -I$(top_builddir)/lang/cpp/src -I$(top_builddir)/src \
@GPGME_QT5_CFLAGS@ @GPG_ERROR_CFLAGS@ @LIBASSUAN_CFLAGS@ \
-DBUILDING_QGPGME -Wsuggest-override \
-Wzero-as-null-pointer-constant
libqgpgme_la_SOURCES = $(qgpgme_sources) $(qgpgme_headers) $(private_qgpgme_headers)
+nodist_libqgpgme_la_SOURCES = $(qgpgme_moc5_sources) $(qgpgme_moc5_forward_headers)
+
libqgpgme_la_LIBADD = ../../cpp/src/libgpgmepp.la ../../../src/libgpgme.la \
@LIBASSUAN_LIBS@ @GPG_ERROR_LIBS@ @GPGME_QT5_LIBS@
libqgpgme_la_LDFLAGS = -no-undefined -version-info \
@LIBQGPGME_LT_CURRENT@:@LIBQGPGME_LT_REVISION@:@LIBQGPGME_LT_AGE@
endif
if WANT_QT6
-AM_CPPFLAGS = -I$(top_builddir)/lang/cpp/src -I$(top_builddir)/src \
+AM_CPPFLAGS = -I./$(moc6_dir) -I$(top_builddir)/lang/cpp/src -I$(top_builddir)/src \
@GPGME_QT6_CFLAGS@ @GPG_ERROR_CFLAGS@ @LIBASSUAN_CFLAGS@ \
-DBUILDING_QGPGME -Wsuggest-override \
-Wzero-as-null-pointer-constant
libqgpgmeqt6_la_SOURCES = $(qgpgme_sources) $(qgpgme_headers) $(private_qgpgme_headers)
+nodist_libqgpgmeqt6_la_SOURCES = $(qgpgme_moc6_sources) $(qgpgme_moc6_forward_headers)
+
libqgpgmeqt6_la_LIBADD = ../../cpp/src/libgpgmepp.la ../../../src/libgpgme.la \
@LIBASSUAN_LIBS@ @GPG_ERROR_LIBS@ @GPGME_QT6_LIBS@
libqgpgmeqt6_la_LDFLAGS = -no-undefined -version-info \
@@ -449,20 +489,18 @@ install-data-local: $(install_cmake_files_qt5) $(install_cmake_files_qt6)
uninstall-hook: $(uninstall_cmake_files_qt5) $(uninstall_cmake_files_qt6) \
$(uninstall_include_dirs_qt5) $(uninstall_include_dirs_qt6)
-BUILT_SOURCES = $(qgpgme_moc_sources) $(camelcase_headers)
+BUILT_SOURCES = $(qgpgme_moc5_sources) $(qgpgme_moc5_forward_headers) \
+ $(qgpgme_moc6_sources) $(qgpgme_moc6_forward_headers) \
+ $(camelcase_headers)
-CLEANFILES = $(qgpgme_moc_sources) $(camelcase_headers) QGpgmeConfig.cmake \
+CLEANFILES = $(qgpgme_moc5_sources) $(qgpgme_moc5_forward_headers) \
+ $(qgpgme_moc6_sources) $(qgpgme_moc6_forward_headers) \
+ $(camelcase_headers) QGpgmeConfig.cmake \
qgpgme_version.h QGpgmeConfig.cmake.in \
QGpgmeConfig-w32.cmake.in QGpgmeConfigVersion.cmake \
QGpgmeQt6Config.cmake.in QGpgmeQt6Config-w32.cmake.in \
QGpgmeQt6Config.cmake QGpgmeQt6ConfigVersion.cmake
-if WANT_QT5
-nodist_libqgpgme_la_SOURCES = $(qgpgme_moc_sources)
-endif
-if WANT_QT6
-nodist_libqgpgmeqt6_la_SOURCES = $(qgpgme_moc_sources)
-endif
-
-.h.moc:
- $(MOC) `test -f '$<' || echo '$(srcdir)/'`$< -o $@
+clean-local:
+ -test -z "$(moc5_dir)" || rm -rf $(moc5_dir)
+ -test -z "$(moc6_dir)" || rm -rf $(moc6_dir)