From: https://github.com/avahi/avahi/pull/704 From fdc30aff1e72ba22aff11e2d9c0ab486ba63d1a6 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Fri, 30 May 2025 11:42:02 +0200 Subject: [PATCH] Enable building with Qt6 --- Makefile.am | 10 ++++++++ acinclude.m4 | 2 +- avahi-qt/Makefile.am | 22 +++++++++++++++++ avahi-qt/qt-watch.cpp | 10 ++++---- avahi-qt6.pc.in | 11 +++++++++ common/qt-pie.m4 | 55 +++++++++++++++++++++++++++++++++++++++++++ common/qt5-pie.m4 | 27 --------------------- configure.ac | 31 +++++++++++++++++++++++- 8 files changed, 135 insertions(+), 33 deletions(-) create mode 100644 avahi-qt6.pc.in create mode 100644 common/qt-pie.m4 delete mode 100644 common/qt5-pie.m4 diff --git a/Makefile.am b/Makefile.am index 352cdcf25..3df371ad3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -45,6 +45,7 @@ EXTRA_DIST = \ avahi-qt3.pc.in \ avahi-qt4.pc.in \ avahi-qt5.pc.in \ + avahi-qt6.pc.in \ avahi-sharp.pc.in \ avahi-ui-sharp.pc.in \ avahi-compat-libdns_sd.pc.in \ @@ -108,6 +109,10 @@ if HAVE_QT5 DX_INPUT += \ $(srcdir)/avahi-qt/qt-watch.h endif +if HAVE_QT6 +DX_INPUT += \ + $(srcdir)/avahi-qt/qt-watch.h +endif endif if HAVE_GLIB @@ -236,6 +241,11 @@ pkgconfig_DATA += avahi-qt5.pc CLEANFILES += avahi-qt5.pc endif +if HAVE_QT6 +pkgconfig_DATA += avahi-qt6.pc +CLEANFILES += avahi-qt6.pc +endif + if HAVE_LIBEVENT pkgconfig_DATA += avahi-libevent.pc CLEANFILES += avahi-libevent.pc diff --git a/acinclude.m4 b/acinclude.m4 index ccf2ac616..ac922456e 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -1,2 +1,2 @@ sinclude(common/doxygen.m4) -sincldue(common/qt5-pie.m4) +sincldue(common/qt-pie.m4) diff --git a/avahi-qt/Makefile.am b/avahi-qt/Makefile.am index b404810f7..78069b56c 100644 --- a/avahi-qt/Makefile.am +++ b/avahi-qt/Makefile.am @@ -87,4 +87,26 @@ libavahi_qt5_la_LIBADD = $(AM_LDADD) ../avahi-common/libavahi-common.la $(QT5_LI libavahi_qt5_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(LIBAVAHI_QT5_VERSION_INFO) endif +if HAVE_QT6 + +avahiqt6includedir=$(includedir)/avahi-qt6 +avahiqt6include_HEADERS = \ + qt-watch.h + +lib_LTLIBRARIES += \ + libavahi-qt6.la + +BUILT_SOURCES += qt-watch.moc6 + +libavahi_qt6_la_SOURCES = \ + qt-watch.cpp + +qt-watch.moc6: qt-watch.cpp + $(AM_V_GEN)$(MOC_QT6) $^ > $@ + +libavahi_qt6_la_CPPFLAGS = $(AM_CFLAGS) --std=gnu++17 $(QT6_CFLAGS) -DQT6 $(VISIBILITY_HIDDEN_CFLAGS) +libavahi_qt6_la_LIBADD = $(AM_LDADD) ../avahi-common/libavahi-common.la $(QT6_LIBS) +libavahi_qt6_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(LIBAVAHI_QT6_VERSION_INFO) +endif + CLEANFILES = $(BUILT_SOURCES) diff --git a/avahi-qt/qt-watch.cpp b/avahi-qt/qt-watch.cpp index 14e0c6e6a..cd18bee3d 100644 --- a/avahi-qt/qt-watch.cpp +++ b/avahi-qt/qt-watch.cpp @@ -18,7 +18,7 @@ ***/ #include -#if defined(QT5) || defined(QT4) +#if defined(QT6) || defined(QT5) || defined(QT4) #include #include #include @@ -114,7 +114,7 @@ AvahiTimeout::AvahiTimeout(const struct timeval* tv, AvahiTimeoutCallback callba m_callback(callback), m_userdata(userdata) { connect(&m_timer, SIGNAL(timeout()), this, SLOT(timeout())); -#if defined(QT5) || defined(QT4) +#if defined(QT6) || defined(QT5) || defined(QT4) m_timer.setSingleShot(true); #endif update(tv); @@ -125,7 +125,7 @@ void AvahiTimeout::update(const struct timeval *tv) m_timer.stop(); if (tv) { AvahiUsec u = avahi_age(tv)/1000; -#if defined(QT5) || defined(QT4) +#if defined(QT6) || defined(QT5) || defined(QT4) m_timer.start( (u>0) ? 0 : -u); #else m_timer.start( (u>0) ? 0 : -u,true); @@ -191,7 +191,9 @@ const AvahiPoll* avahi_qt_poll_get(void) return &qt_poll; } -#if defined(QT5) +#if defined(QT6) +#include "qt-watch.moc6" +#elif defined(QT5) #include "qt-watch.moc5" #elif defined(QT4) #include "qt-watch.moc4" diff --git a/avahi-qt6.pc.in b/avahi-qt6.pc.in new file mode 100644 index 000000000..ce9f13758 --- /dev/null +++ b/avahi-qt6.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=${prefix} +libdir=@libdir@ +includedir=${prefix}/include + +Name: avahi-qt6 +Description: Avahi Multicast DNS Responder (QT6 Support) +Version: @PACKAGE_VERSION@ +Requires: Qt6Core >= 6.0.0 +Libs: -L${libdir} -lavahi-qt6 +Cflags: -D_REENTRANT -I${includedir} diff --git a/common/qt-pie.m4 b/common/qt-pie.m4 new file mode 100644 index 000000000..8f35e548b --- /dev/null +++ b/common/qt-pie.m4 @@ -0,0 +1,55 @@ +AC_DEFUN([AC_AVAHI_QT5_ADD_PIC_IF_NEEDED], +[ + AC_LANG_PUSH([C++]) + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $QT5_CFLAGS" + AC_MSG_CHECKING([whether Qt works without -fPIC]) + AC_PREPROC_IFELSE( + [AC_LANG_SOURCE([[#include ]])], + [AC_MSG_RESULT(yes)], + [ + AC_MSG_RESULT(no) + AC_MSG_CHECKING([whether Qt works with -fPIC]) + CPPFLAGS="$CPPFLAGS -fPIC" + AC_PREPROC_IFELSE( + [AC_LANG_SOURCE([[#include ]])], + [ + AC_MSG_RESULT(yes) + QT5_CFLAGS="$QT5_CFLAGS -fPIC" + ], + [ + AC_MSG_RESULT(no) + AC_MSG_ERROR(Couldn't compile Qt without -fPIC nor with -fPIC) + ]) + ]) + CPPFLAGS="$save_CPPFLAGS" + AC_LANG_POP([C++]) +]) + +AC_DEFUN([AC_AVAHI_QT6_ADD_PIC_IF_NEEDED], +[ + AC_LANG_PUSH([C++]) + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $QT6_CFLAGS" + AC_MSG_CHECKING([whether Qt works without -fPIC]) + AC_PREPROC_IFELSE( + [AC_LANG_SOURCE([[#include ]])], + [AC_MSG_RESULT(yes)], + [ + AC_MSG_RESULT(no) + AC_MSG_CHECKING([whether Qt works with -fPIC]) + CPPFLAGS="$CPPFLAGS -fPIC" + AC_PREPROC_IFELSE( + [AC_LANG_SOURCE([[#include ]])], + [ + AC_MSG_RESULT(yes) + QT6_CFLAGS="$QT6_CFLAGS -fPIC" + ], + [ + AC_MSG_RESULT(no) + AC_MSG_ERROR(Couldn't compile Qt without -fPIC nor with -fPIC) + ]) + ]) + CPPFLAGS="$save_CPPFLAGS" + AC_LANG_POP([C++]) +]) diff --git a/common/qt5-pie.m4 b/common/qt5-pie.m4 deleted file mode 100644 index 10d564c8f..000000000 --- a/common/qt5-pie.m4 +++ /dev/null @@ -1,27 +0,0 @@ -AC_DEFUN([AC_AVAHI_QT_ADD_PIC_IF_NEEDED], -[ - AC_LANG_PUSH([C++]) - save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $QT5_CFLAGS" - AC_MSG_CHECKING([whether Qt works without -fPIC]) - AC_PREPROC_IFELSE( - [AC_LANG_SOURCE([[#include ]])], - [AC_MSG_RESULT(yes)], - [ - AC_MSG_RESULT(no) - AC_MSG_CHECKING([whether Qt works with -fPIC]) - CPPFLAGS="$CPPFLAGS -fPIC" - AC_PREPROC_IFELSE( - [AC_LANG_SOURCE([[#include ]])], - [ - AC_MSG_RESULT(yes) - QT5_CFLAGS="$QT5_CFLAGS -fPIC" - ], - [ - AC_MSG_RESULT(no) - AC_MSG_ERROR(Couldn't compile Qt without -fPIC nor with -fPIC) - ]) - ]) - CPPFLAGS="$save_CPPFLAGS" - AC_LANG_POP([C++]) -]) diff --git a/configure.ac b/configure.ac index 31bce3d76..5959df14e 100644 --- a/configure.ac +++ b/configure.ac @@ -36,6 +36,7 @@ AC_SUBST(LIBAVAHI_GOBJECT_VERSION_INFO, [0:5:0]) AC_SUBST(LIBAVAHI_QT3_VERSION_INFO, [1:2:0]) AC_SUBST(LIBAVAHI_QT4_VERSION_INFO, [1:2:0]) AC_SUBST(LIBAVAHI_QT5_VERSION_INFO, [1:2:0]) +AC_SUBST(LIBAVAHI_QT6_VERSION_INFO, [1:2:0]) AC_SUBST(LIBAVAHI_UI_VERSION_INFO, [1:4:1]) # Do not touch these, since they we took this version-info from upstream HOWL/Bonjour @@ -557,7 +558,7 @@ AC_ARG_ENABLE(qt5, if test "x$HAVE_QT5" = "xyes" ; then PKG_CHECK_MODULES( QT5, [ Qt5Core >= 5.0.0 ]) - AC_AVAHI_QT_ADD_PIC_IF_NEEDED + AC_AVAHI_QT5_ADD_PIC_IF_NEEDED AC_SUBST(QT5_CFLAGS) AC_SUBST(QT5_LIBS) QT5_PREFIX="`$PKG_CONFIG --variable=host_bins Qt5Core`" @@ -569,6 +570,32 @@ if test "x$HAVE_QT5" = "xyes" ; then fi AM_CONDITIONAL(HAVE_QT5, test "x$HAVE_QT5" = "xyes") +# +# Check for Qt 6 +# +AC_ARG_ENABLE(qt6, + AS_HELP_STRING([--disable-qt6],[Disable building of Qt6Core mainloop integration]), + [case "${enableval}" in + yes) HAVE_QT6=yes ;; + no) HAVE_QT6=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-qt6) ;; + esac], + [HAVE_QT6=yes]) + +if test "x$HAVE_QT6" = "xyes" ; then + PKG_CHECK_MODULES( QT6, [ Qt6Core >= 6.0.0 ]) + AC_AVAHI_QT6_ADD_PIC_IF_NEEDED + AC_SUBST(QT6_CFLAGS) + AC_SUBST(QT6_LIBS) + QT6_PREFIX="`$PKG_CONFIG --variable=libexecdir Qt6Core`" + AC_PATH_PROGS(MOC_QT6, [moc-qt6 moc], no, [$QT6_PREFIX]) + if test "$MOC_QT6" = no; then + AC_MSG_ERROR([Could not find QT6 moc]) + fi + AC_SUBST(MOC_QT6) +fi +AM_CONDITIONAL(HAVE_QT6, test "x$HAVE_QT6" = "xyes") + # # Check for GTK+ 2.0 # @@ -1222,6 +1249,7 @@ echo " Enable QT3: ${HAVE_QT3} Enable QT4: ${HAVE_QT4} Enable QT5: ${HAVE_QT5} + Enable QT6: ${HAVE_QT6} Enable Mono: ${HAVE_MONO} Enable Monodoc: ${HAVE_MONODOC} Distribution/OS: ${with_distro} @@ -1292,6 +1320,7 @@ echo "\ Building libavahi-qt3: ${HAVE_QT3} Building libavahi-qt4: ${HAVE_QT4} Building libavahi-qt5: ${HAVE_QT5} + Building libavahi-qt6: ${HAVE_QT6} Building avahi-sharp: ${HAVE_MONO} Building avahi-compat-libdns_sd: ${ENABLE_COMPAT_LIBDNS_SD} Building avahi-compat-howl: ${ENABLE_COMPAT_HOWL}