This patch allows autoconf to rely on qmake for configuring qt5 too. This relies on the great work done by Enrico. If this works, I will propose to remove all the other configurations macros for qt.

This seems to work, although for some reason it does not add x11extras here.

Could you people have a go at it before I push it?

JMarc
From 43e510fd38734761f1fd2ba86fce83824092773d Mon Sep 17 00:00:00 2001
From: Jean-Marc Lasgouttes <lasgout...@lyx.org>
Date: Fri, 14 Jun 2024 19:17:27 +0200
Subject: [PATCH] WIP: support qmake with Qt5

---
 config/qt.m4 | 97 ++++++++++++++++++++++++++++++----------------------
 1 file changed, 57 insertions(+), 40 deletions(-)

diff --git a/config/qt.m4 b/config/qt.m4
index 7e7ffd6df2..90808d7cc6 100644
--- a/config/qt.m4
+++ b/config/qt.m4
@@ -168,38 +168,38 @@ AC_DEFUN([QT_DO_IT_ALL],
 
 	dnl Check if it possible to do a pkg-config
 	PKG_PROG_PKG_CONFIG
-	dnl Not possible with Qt6 (QTBUG-86080)
-	if test x$USE_QT6 = xno ; then
-	    if test -n "$PKG_CONFIG" ; then
-		    QT_DO_PKG_CONFIG
-	    fi
-	    if test "$pkg_failed" != "no" ; then
-		    QT_DO_MANUAL_CONFIG
+
+	QT_QMAKE_CONFIG([$USE_QT6])
+	if test -z "$QT_LIB"; then
+	    dnl Not possible with Qt6 (QTBUG-86080)
+	    if test x$USE_QT6 = xno ; then
+	        if test -n "$PKG_CONFIG" ; then
+	            QT_DO_PKG_CONFIG
+	        fi
 	    fi
-	else
-	    QT6_QMAKE_CONFIG
-	    if test -z "$QT_LIB"; then
-		    QT_DO_MANUAL_CONFIG
+	fi
+	if test -z "$QT_LIB"; then
+	    QT_DO_MANUAL_CONFIG
+	fi
+
+	if test -z "$QT_LIB"; then
+	    dnl Try again with Qt5 and if configuring for Qt6/5 fails
+	    if test x$USE_QT6 = xyes ; then
+	        use_qt6=NO
+	        QT_QMAKE_CONFIG([$USE_QT6])
+	        if test -z "$QT_LIB"; then
+	            if test -n "$PKG_CONFIG" ; then
+	                QT_DO_PKG_CONFIG
+	            fi
+	        fi
+	        if test -z "$QT_LIB"; then
+	            QT_DO_MANUAL_CONFIG
+	        fi
 	    fi
 	fi
 
 	if test -z "$QT_LIB"; then
-	  dnl Try again with Qt5 and if configuring for Qt6/5 fails
-	  if test x$USE_QT6 = xyes ; then
-		USE_QT6=no
-		AC_SUBST([USE_QT6])
-		if test -n "$PKG_CONFIG" ; then
-		  QT_DO_PKG_CONFIG
-		fi
-		if test "$pkg_failed" != "no" ; then
-		  QT_DO_MANUAL_CONFIG
-		fi
-		if test -z "$QT_LIB"; then
-		  AC_MSG_ERROR([cannot find qt libraries.])
-		fi
-	  else
-		AC_MSG_ERROR([cannot find qt libraries.])
-	  fi
+	    AC_MSG_ERROR([Cannot find Qt libraries.])
 	fi
 
 	dnl Check qt version
@@ -375,13 +375,20 @@ AC_DEFUN([QT_DO_MANUAL_CONFIG],
 	fi
 ])
 
-AC_DEFUN([QT6_QMAKE_CONFIG],
+dnl QT_QMAKE_CONFIG(USE_QT6)
+dnl
+AC_DEFUN([QT_QMAKE_CONFIG],
 [
-	dnl Use first suitable qmake in PATH
-	AC_CHECK_PROGS([QT_QMAKE], [qmake-qt6 qmake6], [qmake], $PATH)
-	AC_MSG_CHECKING([for Qt6])
+dnl Use first suitable qmake in PATH
+	if test $1 = "yes"; then
+	  qt_major=6
+	else
+	  qt_major=5
+	fi
+	AC_CHECK_PROGS([QT_QMAKE], [qmake-qt$qt_major qmake$qt_major qmake], [], $PATH)
+	AC_MSG_CHECKING([for Qt$qt_major])
 	qtver=`$QT_QMAKE -v | grep -o "Qt version ."`
-	if test "$qtver" = "Qt version 6"; then
+	if test "$qtver" = "Qt version $qt_major"; then
 	    qt_cv_libexec=`$QT_QMAKE -query QT_INSTALL_LIBEXECS`
 	    dnl Use a .pro file for getting qmake's variables
 	    lyx_test_qt_dir=`mktemp -d`
@@ -412,18 +419,28 @@ EOF1
 		AC_SUBST(QT_CORE_LIB)
 		cat > $lyx_test_qt_pro << EOF2
 QMAKE_EXTRA_VARIABLES = MISSING
+percent.target = %
+percent.commands = @echo -n "\$(\$(@))\ "
+QMAKE_EXTRA_TARGETS += percent
+QMAKE_PROJECT_DEPTH = 0
 qtHaveModule(core)		{QT += core} else {MISSING += core}
 qtHaveModule(concurrent)	{QT += concurrent} else {MISSING += concurrent}
 qtHaveModule(gui)		{QT += gui} else {MISSING += gui}
 qtHaveModule(gui-private)	{QT += gui-private} else {MISSING += gui-private}
 qtHaveModule(svg)		{QT += svg} else {MISSING += svg}
-qtHaveModule(svgwidgets)	{QT += svgwidgets} else {MISSING += svgwidgets}
 qtHaveModule(widgets)		{QT += widgets} else {MISSING += widgets}
-percent.target = %
-percent.commands = @echo -n "\$(\$(@))\ "
-QMAKE_EXTRA_TARGETS += percent
-QMAKE_PROJECT_DEPTH = 0
 EOF2
+	        if test "$qt_major" = 6; then
+	            cat >> $lyx_test_qt_pro << EOF3
+qtHaveModule(svgwidgets)	{QT += svgwidgets} else {MISSING += svgwidgets}
+EOF3
+	        else
+	            cat >> $lyx_test_qt_pro << EOF4
+qtHaveModule(x11extras)	{QT += x11extras}
+qtHaveModule(macextras)	{QT += macextras}
+qtHaveModule(winextras)	{QT += winextras}
+EOF4
+	        fi
 		$QT_QMAKE $lyx_test_qt_pro -o $lyx_test_qt_mak 1>/dev/null 2>&1
 		QT_INCLUDES=`cd $lyx_test_qt_dir; make -s -f $lyx_test_qt_mak INCPATH | sed 's/-I\. //g'`
 		qt_guilibs=`cd $lyx_test_qt_dir; make -s -f $lyx_test_qt_mak LIBS`
@@ -434,15 +451,15 @@ EOF2
 		else
 		    QT_LIB=`echo $qt_guilibs | tr ' ' '\n' | grep -v "^-L" | tr '\n' ' '`
 		fi
-		QTLIB_VERSION=`$QT_QMAKE -v | grep "Qt version" | sed -e 's/.*\([[0-9]]\.[[0-9]]*\.[[0-9]]\).*/\1/'`
+		QTLIB_VERSION=`$QT_QMAKE -v | grep "Qt version" | sed -e 's/.*\([[0-9]]\.[[0-9]]*\.[[0-9]]*\).*/\1/'`
 		if test -z "$QT_LIB"; then
 		    AC_MSG_RESULT(no)
 		else
 		    QT_MISSING=`cd $lyx_test_qt_dir; make -s -f $lyx_test_qt_mak EXPORT_MISSING | sed 's/^ *//'`
 		    if test -n "$QT_MISSING"; then
-			    AC_MSG_ERROR([Qt6 module(s) $QT_MISSING not found.])
+			    AC_MSG_ERROR([Qt$qt_major module(s) $QT_MISSING not found.])
 		    fi
-		    AC_MSG_RESULT(yes)
+		    AC_MSG_RESULT($QTLIB_VERSION)
 		    AC_SUBST(QT_INCLUDES)
 		    AC_SUBST(QT_LDFLAGS)
 		    AC_SUBST(QT_LIB)
-- 
2.43.0

-- 
lyx-devel mailing list
lyx-devel@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-devel

Reply via email to