[vlc-commits] [Git][videolan/vlc][3.0.x] configure: detect Qt6 using QMake
Steve Lhomme (@robUx4)
gitlab at videolan.org
Fri Dec 12 16:02:25 UTC 2025
Steve Lhomme pushed to branch 3.0.x at VideoLAN / VLC
Commits:
c41cacc6 by Steve Lhomme at 2025-12-12T16:41:55+01:00
configure: detect Qt6 using QMake
This is similar to how it's done in VLC4 before python scripts were used.
- - - - -
4 changed files:
- configure.ac
- modules/gui/qt/Makefile.am
- + modules/gui/qt/private-gui.pro
- + modules/gui/qt/qt6.pro
Changes:
=====================================
configure.ac
=====================================
@@ -3865,12 +3865,106 @@ AS_IF([test "${enable_qt}" != "no"], [
AC_PATH_PROGS(RCC, [rcc-qt5 rcc], rcc, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
AC_PATH_PROGS(UIC, [uic-qt5 uic], uic, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
], [
- AS_IF([test -n "${enable_qt}"],[
- AC_MSG_ERROR([${QT_PKG_ERRORS}.])
+ dnl use any qmake that is available, including from contrib tools
+ AC_PATH_PROGS(QMAKE6, [qmake6 qmake], qmake6, ["${CONTRIB_DIR}/../bin:$PATH"])
+
+ AC_ARG_WITH([qtconf],
+ AS_HELP_STRING([--with-qtconf=PATH], [location of Qt6 qt.conf file (auto)])
+ )
+ AS_IF([test -z "${with_qtconf}"], [
+ AC_MSG_CHECKING([if contribs provide target_qt.conf])
+ AS_IF([test -e "${CONTRIB_DIR}/bin/target_qt.conf"], [
+ with_qtconf=${CONTRIB_DIR}/bin/target_qt.conf
+ AC_MSG_RESULT([yes])
+ ],[
+ AC_MSG_RESULT([no])
+ ])
+ ])
+
+ QT_PATHS=${QMAKE6}
+ AS_IF([test -n "${QMAKE6}"], [
+ AS_IF([test -n "${with_qtconf}"], [
+ QT_BIN_DIRECTORY="$(${QMAKE6} -qtconf ${with_qtconf} -query QT_HOST_BINS 2>/dev/null)"
+ AC_MSG_CHECKING([if qmake6 is found with qtconf])
+ AS_IF([test -n "${QT_BIN_DIRECTORY}" -a -x "${QT_BIN_DIRECTORY}/qmake6"], [
+ QMAKE6="${QT_BIN_DIRECTORY}/qmake6"
+ AC_MSG_RESULT([yes])
+ ],[
+ AC_MSG_RESULT([no])
+ AC_MSG_CHECKING([if qmake is found with qtconf])
+ AS_IF([test -n "${QT_BIN_DIRECTORY}" -a -x "${QT_BIN_DIRECTORY}/qmake"], [
+ QMAKE6="${QT_BIN_DIRECTORY}/qmake"
+ AC_MSG_RESULT([yes])
+ ],[
+ AC_MSG_RESULT([no])
+ ])
+ ])
+ QT_PATHS="${QMAKE6} -qtconf ${with_qtconf}"
+ ])
+ ])
+
+ QMAKE="${QT_PATHS}"
+ AC_MSG_NOTICE([using ${QMAKE}])
+
+ AC_MSG_CHECKING([for Qt libraries])
+ mkdir -p ${ac_pwd}/modules/gui/qt
+ touch ${ac_pwd}/modules/gui/qt/.qmake.stash
+ QT_PKG_ERRORS=$(${QT_PATHS} ${srcdir}/modules/gui/qt/qt6.pro -o ${ac_pwd}/modules/gui/qt/qmake-qt 2>&1)
+ ac_status=$?
+ AS_IF([test $ac_status = 0 && test -f "${ac_pwd}/modules/gui/qt/qmake-qt"], [
+ echo "get_cflags:" > ${ac_pwd}/modules/gui/qt/qmake-common.mk
+ echo ' $(info $(DEFINES) $(INCPATH))' >> ${ac_pwd}/modules/gui/qt/qmake-common.mk
+ echo "get_libs:" >> ${ac_pwd}/modules/gui/qt/qmake-common.mk
+ dnl transform /foo/bar/libbaz.so arguments to -L/foo/bar -lbaz
+ dnl RS: each arguments (space separated) are treated as a new line
+ dnl FS: split fields using /[^/]* to extract the file basepath ($1)
+ dnl /lib.*\.so/ lines (arguments) will add -Lxxx if this is not the current path (p), then transform into a -lxxx argument
+ dnl other arguments are kept as-is
+ echo ' echo $(LIBS) | awk '\''BEGIN{FS="/[[^/]]*$$";RS=" ";ORS=" "}{if($$0 ~ /\/lib.*\.so/){ if(p != $$1){ print "-L" $$1; p=$$1}; sub(/.*\/lib/, "-l"); sub(/\.so.*/, "")}; print $$0}'\' >> ${ac_pwd}/modules/gui/qt/qmake-common.mk
+ echo 'get_ldflags:' >> ${ac_pwd}/modules/gui/qt/qmake-common.mk
+ echo ' echo $(LFLAGS)' >> ${ac_pwd}/modules/gui/qt/qmake-common.mk
+
+ echo "include ${ac_pwd}/modules/gui/qt/qmake-common.mk" >> ${ac_pwd}/modules/gui/qt/qmake-qt
+
+ AC_MSG_RESULT([yes])
+ QT_LIBS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-qt get_libs)
+ QT_CFLAGS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-qt get_cflags)
+ QT_LDFLAGS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-qt get_ldflags)
+ AC_SUBST([QT_LIBS])
+ AC_SUBST([QT_CFLAGS])
+ AC_SUBST([QT_LDFLAGS])
+
+ QT_PATH="$(${QT_PATHS} -query QT_INSTALL_BINS 2>/dev/null)"
+ QT_HOST_PATH="$(${QT_PATHS} -query QT_HOST_BINS 2>/dev/null)"
+ QT_HOST_LIBEXEC_DIRECTORY="$(${QT_PATHS} -query QT_HOST_LIBEXECS 2>/dev/null)"
+ QT_LIBEXEC_DIRECTORY="$(${QT_PATHS} -query QT_INSTALL_LIBEXECS 2>/dev/null)"
+ QT_VERSION="$(${QT_PATHS} -query QT_VERSION 2>/dev/null)"
+ AC_PATH_PROGS(MOC, [moc-qt5 moc], moc, ["${QT_HOST_PATH}" "${QT_PATH}/bin" "${QT_HOST_LIBEXEC_DIRECTORY}" "${QT_LIBEXEC_DIRECTORY}"])
+ AC_PATH_PROGS(RCC, [rcc-qt5 rcc], rcc, ["${QT_HOST_PATH}" "${QT_PATH}/bin" "${QT_HOST_LIBEXEC_DIRECTORY}" "${QT_LIBEXEC_DIRECTORY}"])
+ AC_PATH_PROGS(UIC, [uic-qt5 uic], uic, ["${QT_HOST_PATH}" "${QT_PATH}/bin" "${QT_HOST_LIBEXEC_DIRECTORY}" "${QT_LIBEXEC_DIRECTORY}"])
+
+ AC_MSG_CHECKING([for Qt GUI private])
+ (${QMAKE} ${srcdir}/modules/gui/qt/private-gui.pro -o ${ac_pwd}/modules/gui/qt/qmake-private-gui) 2>/dev/null
+ ac_status=$?
+ AS_IF([test $ac_status = 0 && test -f ${ac_pwd}/modules/gui/qt/qmake-private-gui],[
+ echo "include ${ac_pwd}/modules/gui/qt/qmake-common.mk" >> ${ac_pwd}/modules/gui/qt/qmake-private-gui
+
+ AC_MSG_RESULT([yes])
+ QT_GUI_PRIVATE_CFLAGS=$(cd ${ac_pwd}/modules/gui/qt && make -s -f qmake-private-gui get_cflags)
+ AC_SUBST([QT_GUI_PRIVATE_CFLAGS])
+ have_qt_gui_private="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ ])
+ rm -f ${ac_pwd}/modules/gui/qt/qmake-private-gui
],[
- AC_MSG_WARN([${QT_PKG_ERRORS}.])
+ AS_IF([test -n "${enable_qt}"],[
+ AC_MSG_ERROR([${QT_PKG_ERRORS}.])
+ ],[
+ AC_MSG_WARN([${QT_PKG_ERRORS}.])
+ ])
+ enable_qt="no"
])
- enable_qt="no"
])
])
@@ -3880,6 +3974,7 @@ AS_IF([test "${enable_qt}" != "no"], [
AC_SUBST(QT_VERSION)
AM_CONDITIONAL(ENABLE_QT, [test "$enable_qt" != "no"])
AM_CONDITIONAL([HAVE_QT5_X11], [test "${have_qt5_x11}" = "yes"])
+AM_CONDITIONAL([HAVE_QT_GUI_PRIVATE], [test "${have_qt_gui_private}" = "yes"])
dnl
dnl detect kde4-config patch (used for kde solids).
=====================================
modules/gui/qt/Makefile.am
=====================================
@@ -10,6 +10,7 @@
# - Add it to DEPS_res
SUFFIXES += .ui .h .hpp .moc.cpp
+EXTRA_DIST += qt6.pro private-gui.pro
libqt_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) \
-DQT_USE_QSTRINGBUILDER \
@@ -41,6 +42,10 @@ if UPDATE_CHECK
libqt_plugin_la_CPPFLAGS += -DUPDATE_CHECK
endif
+if HAVE_QT_GUI_PRIVATE
+libqt_plugin_la_CPPFLAGS += -DQT_GUI_PRIVATE $(QT_GUI_PRIVATE_CFLAGS)
+endif
+
libqt_plugin_la_SOURCES = \
gui/qt/qt.cpp gui/qt/qt.hpp \
gui/qt/menus.cpp gui/qt/menus.hpp \
=====================================
modules/gui/qt/private-gui.pro
=====================================
@@ -0,0 +1,3 @@
+QT = gui gui-private
+CONFIG -= debug_and_release
+CONFIG += no_include_pwd
=====================================
modules/gui/qt/qt6.pro
=====================================
@@ -0,0 +1,26 @@
+TEMPLATE = app
+
+QT = core gui svg widgets
+QTPLUGIN = qsvgicon qsvg qjpeg qico
+
+CONFIG -= entrypoint
+CONFIG -= debug_and_release
+CONFIG += no_include_pwd
+
+win32 {
+QTPLUGIN += qwindows
+
+versionAtLeast(QT_VERSION, 6.7.0) {
+QTPLUGIN += qmodernwindowsstyle
+} else {
+QTPLUGIN += qwindowsvistastyle
+}
+}
+
+linux {
+QTPLUGIN += qxcb-glx-integration qxcb-egl-integration qxcb qwayland-generic qwayland-egl qgtk3 qxdgdesktopportal xdg-shell
+}
+
+macx {
+QTPLUGIN += qcocoa qmacstyle
+}
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/c41cacc68ed1c8cfeb1c45696b90828d52d6e606
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/c41cacc68ed1c8cfeb1c45696b90828d52d6e606
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance
More information about the vlc-commits
mailing list