Skip to content

Genbindings on Qt 6.8.1 errors #152

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
Ahuge opened this issue Jan 27, 2025 · 6 comments
Open

Genbindings on Qt 6.8.1 errors #152

Ahuge opened this issue Jan 27, 2025 · 6 comments
Labels

Comments

@Ahuge
Copy link

Ahuge commented Jan 27, 2025

I noticed that the genbindings script is running against the latest qt6 available in bookworm which at this point in time appears to be 6.4.2.
With the work being done in #118 to update for clang 19, I figured it may be worth seeing if Qt6.8.1 has any issues in genbindings as well.

Here is my modified genbindings.Dockerfile. I have switched to using aqtinstall to install Qt and just for this test, removed the Qt5 builder

genbindings.Dockerfile

genbindings.Dockerfile

diff --git a/docker/genbindings.Dockerfile b/docker/genbindings.Dockerfile
index 36ea65d9..d2166653 100644
--- a/docker/genbindings.Dockerfile
+++ b/docker/genbindings.Dockerfile
@@ -1,43 +1,30 @@
 FROM debian:bookworm
 
+ENV QT6_VERSION=6.8.1
+
 RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
     apt-get install --no-install-recommends -qyy \
+        python3 \
+        python3-pip \
+        python3.11-venv \
         golang-go \
-        qtbase5-dev \
-        qtmultimedia5-dev \
-        qtscript5-dev \
-        libqt5svg5-dev \
-        libqt5webkit5-dev \
-        qtwebengine5-dev \
-        qt6-base-dev \
-        qt6-multimedia-dev \
-        qt6-svg-dev \
-        qt6-webengine-dev \
-        libqscintilla2-qt5-dev \
         libqscintilla2-qt6-dev \
         clang \
         git \
         ca-certificates \
         pkg-config \
+        wget \
         build-essential && \
     apt-get clean
-    
-RUN mkdir -p /usr/local/src/scintilla && \
-    git clone 'https://github.com/mirror/scintilla.git' /usr/local/src/scintilla && \
-    git -C /usr/local/src/scintilla checkout rel-5-5-2
-    
-RUN \
-    cd /usr/local/src/scintilla/qt/ScintillaEditBase && \
-    qmake && \
-    make && \
-    cd /usr/local/src/scintilla/qt/ScintillaEdit && \
-    python3 WidgetGen.py && \
-    qmake && \
-    make
 
-RUN mkdir -p /usr/local/lib/pkgconfig
+RUN python3 -m venv /opt/virtualenvironment
+ENV PATH="/opt/virtualenvironment/bin:$PATH"
+RUN python3 -m pip install aqtinstall
 
-COPY pkg-config/QScintilla.pc.example /usr/local/lib/pkgconfig/QScintilla.pc
-COPY pkg-config/ScintillaEdit.pc.example /usr/local/lib/pkgconfig/ScintillaEdit.pc
+RUN aqt install-qt linux desktop $QT6_VERSION linux_gcc_64 --outputdir /opt/Qt
+ENV PATH=/opt/Qt/$QT6_VERSION/gcc_64/bin:$PATH
+ENV LD_LIBRARY_PATH=/opt/Qt/$QT6_VERSION/gcc_64/lib
+ENV QT_PLUGIN_PATH=/opt/Qt/$QT6_VERSION/gcc_64/plugins
+ENV QTDIR=/opt/Qt/$QT6_VERSION/gcc_64
 
 ENV GOFLAGS=-buildvcs=false
cmd/genbindings/config-allowlist.go

cmd/genbindings/config-allowlist.go

diff --git a/cmd/genbindings/config-allowlist.go b/cmd/genbindings/config-allowlist.go
index c39ff30b..26981830 100644
--- a/cmd/genbindings/config-allowlist.go
+++ b/cmd/genbindings/config-allowlist.go
@@ -62,6 +62,12 @@ func InsertTypedefs(qt6 bool) {
 				ParameterType: "int",
 			},
 		}}
+        KnownEnums["Qt::TimerId"] = lookupResultEnum{"qt6", CppEnum{
+            EnumName: "Qt::TimerId",
+            UnderlyingType: CppParameter{
+                ParameterType: "int",
+            },
+        }}
 	}
 
 }
cmd/genbindings/config-libraries.go

cmd/genbindings/config-libraries.go

diff --git a/cmd/genbindings/config-libraries.go b/cmd/genbindings/config-libraries.go
index 944c98c7..7e4a7f4a 100644
--- a/cmd/genbindings/config-libraries.go
+++ b/cmd/genbindings/config-libraries.go
@@ -10,188 +10,188 @@ func ProcessLibraries(clangBin, outDir, extraLibsDir string) {
 	AllowAllHeaders := func(string) bool { return true }
 
 	flushKnownTypes()
-	InsertTypedefs(false)
-
-	generate(
-		"qt",
-		[]string{
-			"/usr/include/x86_64-linux-gnu/qt5/QtCore",
-			"/usr/include/x86_64-linux-gnu/qt5/QtGui",
-			"/usr/include/x86_64-linux-gnu/qt5/QtWidgets",
-		},
-		func(fullpath string) bool {
-			// Block cbor and generate it separately
-			fname := filepath.Base(fullpath)
-			if strings.HasPrefix(fname, "qcbor") {
-				return false
-			}
-
-			return Widgets_AllowHeader(fullpath)
-		},
-		clangBin,
-		pkgConfigCflags("Qt5Widgets"),
-		outDir,
-		ClangMatchSameHeaderDefinitionOnly,
-	)
-
-	generate(
-		"qt/cbor",
-		[]string{
-			"/usr/include/x86_64-linux-gnu/qt5/QtCore",
-		},
-		func(fullpath string) bool {
-			// Only include the same json, xml, cbor files excluded above
-			fname := filepath.Base(fullpath)
-			return strings.HasPrefix(fname, "qcbor")
-		},
-		clangBin,
-		pkgConfigCflags("Qt5Core"),
-		outDir,
-		ClangMatchSameHeaderDefinitionOnly,
-	)
-
-	generate(
-		"qt/printsupport",
-		[]string{
-			"/usr/include/x86_64-linux-gnu/qt5/QtPrintSupport",
-		},
-		AllowAllHeaders,
-		clangBin,
-		pkgConfigCflags("Qt5PrintSupport"),
-		outDir,
-		ClangMatchSameHeaderDefinitionOnly,
-	)
-
-	generate(
-		"qt/svg",
-		[]string{
-			"/usr/include/x86_64-linux-gnu/qt5/QtSvg",
-		},
-		AllowAllHeaders,
-		clangBin,
-		pkgConfigCflags("Qt5Svg"),
-		outDir,
-		ClangMatchSameHeaderDefinitionOnly,
-	)
-
-	generate(
-		"qt/network",
-		[]string{
-			"/usr/include/x86_64-linux-gnu/qt5/QtNetwork",
-		},
-		AllowAllHeaders,
-		clangBin,
-		pkgConfigCflags("Qt5Network"),
-		outDir,
-		ClangMatchSameHeaderDefinitionOnly,
-	)
-
-	generate(
-		"qt/multimedia",
-		[]string{
-			// Theoretically, QtMultimediaWidgets and QtMultimedia are different
-			// packages, but QtMultimedia qcamera.h has a dependency on qvideowidget.
-			// Bind them together since our base /qt/ package is Widgets anyway.
-			"/usr/include/x86_64-linux-gnu/qt5/QtMultimedia",
-			"/usr/include/x86_64-linux-gnu/qt5/QtMultimediaWidgets",
-		},
-		AllowAllHeaders,
-		clangBin,
-		pkgConfigCflags("Qt5MultimediaWidgets"),
-		outDir,
-		ClangMatchSameHeaderDefinitionOnly,
-	)
-
-	generate(
-		"qt/script",
-		[]string{
-			"/usr/include/x86_64-linux-gnu/qt5/QtScript",
-		},
-		AllowAllHeaders,
-		clangBin,
-		pkgConfigCflags("Qt5Script"),
-		outDir,
-		ClangMatchSameHeaderDefinitionOnly,
-	)
-
-	// Qt 5 QWebkit: depends on Qt5PrintSupport but only at runtime, not at
-	// codegen time
-	generate(
-		"qt/webkit",
-		[]string{
-			"/usr/include/x86_64-linux-gnu/qt5/QtWebKit",
-			"/usr/include/x86_64-linux-gnu/qt5/QtWebKitWidgets",
-		},
-		AllowAllHeaders,
-		clangBin,
-		pkgConfigCflags("Qt5WebKitWidgets"),
-		outDir,
-		ClangMatchSameHeaderDefinitionOnly,
-	)
-
-	// Qt 5 QWebChannel
-	generate(
-		"qt/webchannel",
-		[]string{
-			"/usr/include/x86_64-linux-gnu/qt5/QtWebChannel",
-		},
-		AllowAllHeaders,
-		clangBin,
-		pkgConfigCflags("Qt5WebChannel"),
-		outDir,
-		ClangMatchSameHeaderDefinitionOnly,
-	)
-
-	// Qt 5 QWebEngine
-	generate(
-		"qt/webengine",
-		[]string{
-			"/usr/include/x86_64-linux-gnu/qt5/QtWebEngine",
-			"/usr/include/x86_64-linux-gnu/qt5/QtWebEngineCore",
-			"/usr/include/x86_64-linux-gnu/qt5/QtWebEngineWidgets",
-		},
-
-		func(fullpath string) bool {
-			baseName := filepath.Base(fullpath)
-			if baseName == "qquickwebengineprofile.h" || baseName == "qquickwebenginescript.h" {
-				return false
-			}
-			return true
-		},
-		clangBin,
-		pkgConfigCflags("Qt5WebEngineWidgets"),
-		outDir,
-		ClangMatchSameHeaderDefinitionOnly,
-	)
-
-	// Depends on QtCore/Gui/Widgets, QPrintSupport
-	generate(
-		"qt-restricted-extras/qscintilla",
-		[]string{
-			"/usr/include/x86_64-linux-gnu/qt5/Qsci",
-		},
-		AllowAllHeaders,
-		clangBin,
-		pkgConfigCflags("Qt5PrintSupport"),
-		outDir,
-		ClangMatchSameHeaderDefinitionOnly,
-	)
-
-	// Depends on QtCore/Gui/Widgets
-	generate(
-		"qt-extras/scintillaedit",
-		[]string{
-			filepath.Join(extraLibsDir, "scintilla/qt/ScintillaEdit/ScintillaEdit.h"),
-		},
-		AllowAllHeaders,
-		clangBin,
-		"--std=c++1z "+pkgConfigCflags("ScintillaEdit"),
-		outDir,
-		(&clangMatchUnderPath{filepath.Join(extraLibsDir, "scintilla")}).Match,
-	)
-
-	// FLUSH all known typedefs / ...
-
+	//	InsertTypedefs(false)
+	//
+	//	generate(
+	//		"qt",
+	//		[]string{
+	//			"/opt/Qt/6.8.1/gcc_64/include/QtCore",
+	//			"/opt/Qt/6.8.1/gcc_64/include/QtGui",
+	//			"/opt/Qt/6.8.1/gcc_64/include/QtWidgets",
+	//		},
+	//		func(fullpath string) bool {
+	//			// Block cbor and generate it separately
+	//			fname := filepath.Base(fullpath)
+	//			if strings.HasPrefix(fname, "qcbor") {
+	//				return false
+	//			}
+	//
+	//			return Widgets_AllowHeader(fullpath)
+	//		},
+	//		clangBin,
+	//		pkgConfigCflags("Qt5Widgets"),
+	//		outDir,
+	//		ClangMatchSameHeaderDefinitionOnly,
+	//	)
+	//
+	//	generate(
+	//		"qt/cbor",
+	//		[]string{
+	//			"/opt/Qt/6.8.1/gcc_64/include/QtCore",
+	//		},
+	//		func(fullpath string) bool {
+	//			// Only include the same json, xml, cbor files excluded above
+	//			fname := filepath.Base(fullpath)
+	//			return strings.HasPrefix(fname, "qcbor")
+	//		},
+	//		clangBin,
+	//		pkgConfigCflags("Qt5Core"),
+	//		outDir,
+	//		ClangMatchSameHeaderDefinitionOnly,
+	//	)
+	//
+	//	generate(
+	//		"qt/printsupport",
+	//		[]string{
+	//			"/opt/Qt/6.8.1/gcc_64/include/QtPrintSupport",
+	//		},
+	//		AllowAllHeaders,
+	//		clangBin,
+	//		pkgConfigCflags("Qt5PrintSupport"),
+	//		outDir,
+	//		ClangMatchSameHeaderDefinitionOnly,
+	//	)
+	//
+	//	generate(
+	//		"qt/svg",
+	//		[]string{
+	//			"/opt/Qt/6.8.1/gcc_64/include/QtSvg",
+	//		},
+	//		AllowAllHeaders,
+	//		clangBin,
+	//		pkgConfigCflags("Qt5Svg"),
+	//		outDir,
+	//		ClangMatchSameHeaderDefinitionOnly,
+	//	)
+	//
+	//	generate(
+	//		"qt/network",
+	//		[]string{
+	//			"/opt/Qt/6.8.1/gcc_64/include/QtNetwork",
+	//		},
+	//		AllowAllHeaders,
+	//		clangBin,
+	//		pkgConfigCflags("Qt5Network"),
+	//		outDir,
+	//		ClangMatchSameHeaderDefinitionOnly,
+	//	)
+	//
+	//	generate(
+	//		"qt/multimedia",
+	//		[]string{
+	//			// Theoretically, QtMultimediaWidgets and QtMultimedia are different
+	//			// packages, but QtMultimedia qcamera.h has a dependency on qvideowidget.
+	//			// Bind them together since our base /qt/ package is Widgets anyway.
+	//			"/opt/Qt/6.8.1/gcc_64/include/QtMultimedia",
+	//			"/opt/Qt/6.8.1/gcc_64/include/QtMultimediaWidgets",
+	//		},
+	//		AllowAllHeaders,
+	//		clangBin,
+	//		pkgConfigCflags("Qt5MultimediaWidgets"),
+	//		outDir,
+	//		ClangMatchSameHeaderDefinitionOnly,
+	//	)
+	//
+	//	generate(
+	//		"qt/script",
+	//		[]string{
+	//			"/opt/Qt/6.8.1/gcc_64/include/QtScript",
+	//		},
+	//		AllowAllHeaders,
+	//		clangBin,
+	//		pkgConfigCflags("Qt5Script"),
+	//		outDir,
+	//		ClangMatchSameHeaderDefinitionOnly,
+	//	)
+	//
+	//	// Qt 5 QWebkit: depends on Qt5PrintSupport but only at runtime, not at
+	//	// codegen time
+	//	generate(
+	//		"qt/webkit",
+	//		[]string{
+	//			"/opt/Qt/6.8.1/gcc_64/include/QtWebKit",
+	//			"/opt/Qt/6.8.1/gcc_64/include/QtWebKitWidgets",
+	//		},
+	//		AllowAllHeaders,
+	//		clangBin,
+	//		pkgConfigCflags("Qt5WebKitWidgets"),
+	//		outDir,
+	//		ClangMatchSameHeaderDefinitionOnly,
+	//	)
+	//
+	//	// Qt 5 QWebChannel
+	//	generate(
+	//		"qt/webchannel",
+	//		[]string{
+	//			"/opt/Qt/6.8.1/gcc_64/include/QtWebChannel",
+	//		},
+	//		AllowAllHeaders,
+	//		clangBin,
+	//		pkgConfigCflags("Qt5WebChannel"),
+	//		outDir,
+	//		ClangMatchSameHeaderDefinitionOnly,
+	//	)
+	//
+	//	// Qt 5 QWebEngine
+	//	generate(
+	//		"qt/webengine",
+	//		[]string{
+	//			"/opt/Qt/6.8.1/gcc_64/include/QtWebEngine",
+	//			"/opt/Qt/6.8.1/gcc_64/include/QtWebEngineCore",
+	//			"/opt/Qt/6.8.1/gcc_64/include/QtWebEngineWidgets",
+	//		},
+	//
+	//		func(fullpath string) bool {
+	//			baseName := filepath.Base(fullpath)
+	//			if baseName == "qquickwebengineprofile.h" || baseName == "qquickwebenginescript.h" {
+	//				return false
+	//			}
+	//			return true
+	//		},
+	//		clangBin,
+	//		pkgConfigCflags("Qt5WebEngineWidgets"),
+	//		outDir,
+	//		ClangMatchSameHeaderDefinitionOnly,
+	//	)
+	//
+	//	// Depends on QtCore/Gui/Widgets, QPrintSupport
+	//	generate(
+	//		"qt-restricted-extras/qscintilla",
+	//		[]string{
+	//			"/opt/Qt/6.8.1/gcc_64/include/Qsci",
+	//		},
+	//		AllowAllHeaders,
+	//		clangBin,
+	//		pkgConfigCflags("Qt5PrintSupport"),
+	//		outDir,
+	//		ClangMatchSameHeaderDefinitionOnly,
+	//	)
+	//
+	//	// Depends on QtCore/Gui/Widgets
+	//	generate(
+	//		"qt-extras/scintillaedit",
+	//		[]string{
+	//			filepath.Join(extraLibsDir, "scintilla/qt/ScintillaEdit/ScintillaEdit.h"),
+	//		},
+	//		AllowAllHeaders,
+	//		clangBin,
+	//		"--std=c++1z "+pkgConfigCflags("ScintillaEdit"),
+	//		outDir,
+	//		(&clangMatchUnderPath{filepath.Join(extraLibsDir, "scintilla")}).Match,
+	//	)
+	//
+	//	// FLUSH all known typedefs / ...
+	//
 	flushKnownTypes()
 	InsertTypedefs(true)
 
@@ -199,9 +199,9 @@ func ProcessLibraries(clangBin, outDir, extraLibsDir string) {
 	generate(
 		"qt6",
 		[]string{
-			"/usr/include/x86_64-linux-gnu/qt6/QtCore",
-			"/usr/include/x86_64-linux-gnu/qt6/QtGui",
-			"/usr/include/x86_64-linux-gnu/qt6/QtWidgets",
+			"/opt/Qt/6.8.1/gcc_64/include/QtCore",
+			"/opt/Qt/6.8.1/gcc_64/include/QtGui",
+			"/opt/Qt/6.8.1/gcc_64/include/QtWidgets",
 		},
 		func(fullpath string) bool {
 			// Block cbor and generate it separately
@@ -221,7 +221,7 @@ func ProcessLibraries(clangBin, outDir, extraLibsDir string) {
 	generate(
 		"qt6/cbor",
 		[]string{
-			"/usr/include/x86_64-linux-gnu/qt6/QtCore",
+			"/opt/Qt/6.8.1/gcc_64/include/QtCore",
 		},
 		func(fullpath string) bool {
 			// Only include the same json, xml, cbor files excluded above
@@ -238,7 +238,7 @@ func ProcessLibraries(clangBin, outDir, extraLibsDir string) {
 	generate(
 		"qt6/printsupport",
 		[]string{
-			"/usr/include/x86_64-linux-gnu/qt6/QtPrintSupport",
+			"/opt/Qt/6.8.1/gcc_64/include/QtPrintSupport",
 		},
 		AllowAllHeaders,
 		clangBin,
@@ -251,8 +251,8 @@ func ProcessLibraries(clangBin, outDir, extraLibsDir string) {
 	generate(
 		"qt6/svg",
 		[]string{
-			"/usr/include/x86_64-linux-gnu/qt6/QtSvg",
-			"/usr/include/x86_64-linux-gnu/qt6/QtSvgWidgets",
+			"/opt/Qt/6.8.1/gcc_64/include/QtSvg",
+			"/opt/Qt/6.8.1/gcc_64/include/QtSvgWidgets",
 		},
 		AllowAllHeaders,
 		clangBin,
@@ -265,7 +265,7 @@ func ProcessLibraries(clangBin, outDir, extraLibsDir string) {
 	generate(
 		"qt6/network",
 		[]string{
-			"/usr/include/x86_64-linux-gnu/qt6/QtNetwork",
+			"/opt/Qt/6.8.1/gcc_64/include/QtNetwork",
 		},
 		func(fullpath string) bool {
 			fname := filepath.Base(fullpath)
@@ -281,8 +281,8 @@ func ProcessLibraries(clangBin, outDir, extraLibsDir string) {
 	generate(
 		"qt6/multimedia",
 		[]string{
-			"/usr/include/x86_64-linux-gnu/qt6/QtMultimedia",
-			"/usr/include/x86_64-linux-gnu/qt6/QtMultimediaWidgets",
+			"/opt/Qt/6.8.1/gcc_64/include/QtMultimedia",
+			"/opt/Qt/6.8.1/gcc_64/include/QtMultimediaWidgets",
 		},
 		AllowAllHeaders,
 		clangBin,
@@ -295,7 +295,7 @@ func ProcessLibraries(clangBin, outDir, extraLibsDir string) {
 	generate(
 		"qt6/spatialaudio",
 		[]string{
-			"/usr/include/x86_64-linux-gnu/qt6/QtSpatialAudio",
+			"/opt/Qt/6.8.1/gcc_64/include/QtSpatialAudio",
 		},
 		AllowAllHeaders,
 		clangBin,
@@ -308,7 +308,7 @@ func ProcessLibraries(clangBin, outDir, extraLibsDir string) {
 	generate(
 		"qt6/webchannel",
 		[]string{
-			"/usr/include/x86_64-linux-gnu/qt6/QtWebChannel",
+			"/opt/Qt/6.8.1/gcc_64/include/QtWebChannel",
 		},
 		AllowAllHeaders,
 		clangBin,
@@ -321,8 +321,8 @@ func ProcessLibraries(clangBin, outDir, extraLibsDir string) {
 	generate(
 		"qt6/webengine",
 		[]string{
-			"/usr/include/x86_64-linux-gnu/qt6/QtWebEngineCore",
-			"/usr/include/x86_64-linux-gnu/qt6/QtWebEngineWidgets",
+			"/opt/Qt/6.8.1/gcc_64/include/QtWebEngineCore",
+			"/opt/Qt/6.8.1/gcc_64/include/QtWebEngineWidgets",
 		},
 		func(fullpath string) bool {
 			baseName := filepath.Base(fullpath)
@@ -342,7 +342,7 @@ func ProcessLibraries(clangBin, outDir, extraLibsDir string) {
 	generate(
 		"qt-restricted-extras/qscintilla6",
 		[]string{
-			"/usr/include/x86_64-linux-gnu/qt6/Qsci",
+			"/opt/Qt/6.8.1/gcc_64/include/Qsci",
 		},
 		AllowAllHeaders,
 		clangBin,

When I run make genbindings I get the following errors now:

  • /opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:35:13: error: no type named 'TimerId' in namespace 'Qt'
  • /opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:150:26: error: no type named 'strong_ordering' in namespace 'Qt'

And then some issues cascading downstream from those.

I have tried (as you can see above) to add Qt::TimerId to KnownEnums but it hasn't seemed to have done anything

+        KnownEnums["Qt::TimerId"] = lookupResultEnum{"qt6", CppEnum{
+            EnumName: "Qt::TimerId",
+            UnderlyingType: CppParameter{
+                ParameterType: "int",
+            },
+        }}

I'm finding this library super helpful so I am trying to find ways to help contribute so I appreciate any help you give me

make genbindings log

make genbindings log

mkdir -p ~/.cache/go-build
docker run --user $(id -u):$(id -g) -v ~/.cache/go-build:/.cache/go-build -v $PWD:/src -w /src miqt/genbindings:latest /bin/bash -c 'cd cmd/genbindings && go build && ./genbindings'
Found 474 header files to process.
Cleaning up output directory "../../qt6"...
Removed 0 file(s).
Clang worker: starting
Clang worker: starting
No AST cache for file "qabstracteventdispatcher.h", running clang...
Clang worker got message for file "/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h"
No AST cache for file "qabstractitemmodel.h", running clang...
Clang worker got message for file "/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h"
No AST cache for file "qabstractnativeeventfilter.h", running clang...
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:35:13: error: no type named 'TimerId' in namespace 'Qt'
        Qt::TimerId timerId;
        ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:49:9: error: no type named 'TimerId' in namespace 'Qt'
    Qt::TimerId registerTimer(Duration interval, Qt::TimerType timerType, QObject *object);
    ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:61:28: error: no type named 'TimerId' in namespace 'Qt'
    void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType, QObject *object);
                       ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:62:30: error: no type named 'TimerId' in namespace 'Qt'
    bool unregisterTimer(Qt::TimerId timerId);
                         ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:64:32: error: no type named 'TimerId' in namespace 'Qt'
    Duration remainingTime(Qt::TimerId timerId) const;
                           ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:106:36: error: no type named 'TimerId' in namespace 'Qt'
    virtual void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType,
                               ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:108:38: error: no type named 'TimerId' in namespace 'Qt'
    virtual bool unregisterTimer(Qt::TimerId timerId) = 0;
                                 ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:110:40: error: no type named 'TimerId' in namespace 'Qt'
    virtual Duration remainingTime(Qt::TimerId timerId) const = 0;
                                   ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:111:82: error: unknown type name 'QDeadlineTimer'
    virtual bool processEventsWithDeadline(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline); // reserved for 6.9
                                                                                 ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:150:26: error: no type named 'strong_ordering' in namespace 'Qt'
    friend constexpr Qt::strong_ordering compareThreeWay(const QModelIndex &lhs, const QModelIndex &rhs) noexcept
                     ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:162:5: error: unknown type name 'Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE'
    Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE(QModelIndex)
    ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:162:57: error: expected ';' at end of declaration list
    Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE(QModelIndex)
                                                        ^
                                                        ;
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:170:9: error: no template named 'totally_ordered_wrapper' in namespace 'Qt'
    Qt::totally_ordered_wrapper<const QAbstractItemModel *> m;
    ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:128:47: error: member initializer 'r' does not name a non-static data member or base class
    constexpr inline QModelIndex() noexcept : r(-1), c(-1), i(0), m(nullptr) {}
                                              ^~~~~
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:128:54: error: member initializer 'c' does not name a non-static data member or base class
    constexpr inline QModelIndex() noexcept : r(-1), c(-1), i(0), m(nullptr) {}
                                                     ^~~~~
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:130:56: error: use of undeclared identifier 'r'
    constexpr inline int row() const noexcept { return r; }
                                                       ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:131:59: error: use of undeclared identifier 'c'
    constexpr inline int column() const noexcept { return c; }
                                                          ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:142:48: error: no return statement in constexpr function
    constexpr inline const QAbstractItemModel *model() const noexcept { return m.get(); }
                                               ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:143:62: error: use of undeclared identifier 'r'
    constexpr inline bool isValid() const noexcept { return (r >= 0) && (c >= 0) && (m != nullptr); }
                                                             ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:143:74: error: use of undeclared identifier 'c'
    constexpr inline bool isValid() const noexcept { return (r >= 0) && (c >= 0) && (m != nullptr); }
                                                                         ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:143:27: error: no return statement in constexpr function
    constexpr inline bool isValid() const noexcept { return (r >= 0) && (c >= 0) && (m != nullptr); }
                          ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:20: error: no member named 'r' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
               ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:29: error: no member named 'r' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
                        ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:38: error: no member named 'c' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
                                 ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:47: error: no member named 'c' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
                                          ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:152:48: error: no member named 'r' in 'QModelIndex'
        if (auto val = Qt::compareThreeWay(lhs.r, rhs.r); !is_eq(val))
                                           ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:152:55: error: no member named 'r' in 'QModelIndex'
        if (auto val = Qt::compareThreeWay(lhs.r, rhs.r); !is_eq(val))
                                                  ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:152:28: error: no member named 'compareThreeWay' in namespace 'Qt'
        if (auto val = Qt::compareThreeWay(lhs.r, rhs.r); !is_eq(val))
                       ~~~~^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
9 errors generated.
20 errors generated.
WARNING: Clang execution failed: Command: exit status 1
WARNING: Clang execution failed: Command: exit status 1
Retrying...
Retrying...
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:35:13: error: no type named 'TimerId' in namespace 'Qt'
        Qt::TimerId timerId;
        ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:49:9: error: no type named 'TimerId' in namespace 'Qt'
    Qt::TimerId registerTimer(Duration interval, Qt::TimerType timerType, QObject *object);
    ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:61:28: error: no type named 'TimerId' in namespace 'Qt'
    void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType, QObject *object);
                       ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:62:30: error: no type named 'TimerId' in namespace 'Qt'
    bool unregisterTimer(Qt::TimerId timerId);
                         ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:64:32: error: no type named 'TimerId' in namespace 'Qt'
    Duration remainingTime(Qt::TimerId timerId) const;
                           ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:106:36: error: no type named 'TimerId' in namespace 'Qt'
    virtual void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType,
                               ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:108:38: error: no type named 'TimerId' in namespace 'Qt'
    virtual bool unregisterTimer(Qt::TimerId timerId) = 0;
                                 ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:110:40: error: no type named 'TimerId' in namespace 'Qt'
    virtual Duration remainingTime(Qt::TimerId timerId) const = 0;
                                   ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:111:82: error: unknown type name 'QDeadlineTimer'
    virtual bool processEventsWithDeadline(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline); // reserved for 6.9
                                                                                 ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:150:26: error: no type named 'strong_ordering' in namespace 'Qt'
    friend constexpr Qt::strong_ordering compareThreeWay(const QModelIndex &lhs, const QModelIndex &rhs) noexcept
                     ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:162:5: error: unknown type name 'Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE'
    Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE(QModelIndex)
    ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:162:57: error: expected ';' at end of declaration list
    Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE(QModelIndex)
                                                        ^
                                                        ;
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:170:9: error: no template named 'totally_ordered_wrapper' in namespace 'Qt'
    Qt::totally_ordered_wrapper<const QAbstractItemModel *> m;
    ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:128:47: error: member initializer 'r' does not name a non-static data member or base class
    constexpr inline QModelIndex() noexcept : r(-1), c(-1), i(0), m(nullptr) {}
                                              ^~~~~
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:128:54: error: member initializer 'c' does not name a non-static data member or base class
    constexpr inline QModelIndex() noexcept : r(-1), c(-1), i(0), m(nullptr) {}
                                                     ^~~~~
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:130:56: error: use of undeclared identifier 'r'
    constexpr inline int row() const noexcept { return r; }
                                                       ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:131:59: error: use of undeclared identifier 'c'
    constexpr inline int column() const noexcept { return c; }
                                                          ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:142:48: error: no return statement in constexpr function
    constexpr inline const QAbstractItemModel *model() const noexcept { return m.get(); }
                                               ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:143:62: error: use of undeclared identifier 'r'
    constexpr inline bool isValid() const noexcept { return (r >= 0) && (c >= 0) && (m != nullptr); }
                                                             ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:143:74: error: use of undeclared identifier 'c'
    constexpr inline bool isValid() const noexcept { return (r >= 0) && (c >= 0) && (m != nullptr); }
                                                                         ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:143:27: error: no return statement in constexpr function
    constexpr inline bool isValid() const noexcept { return (r >= 0) && (c >= 0) && (m != nullptr); }
                          ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:20: error: no member named 'r' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
               ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:29: error: no member named 'r' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
                        ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:38: error: no member named 'c' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
                                 ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:47: error: no member named 'c' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
                                          ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:152:48: error: no member named 'r' in 'QModelIndex'
        if (auto val = Qt::compareThreeWay(lhs.r, rhs.r); !is_eq(val))
                                           ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:152:55: error: no member named 'r' in 'QModelIndex'
        if (auto val = Qt::compareThreeWay(lhs.r, rhs.r); !is_eq(val))
                                                  ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:152:28: error: no member named 'compareThreeWay' in namespace 'Qt'
        if (auto val = Qt::compareThreeWay(lhs.r, rhs.r); !is_eq(val))
                       ~~~~^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
9 errors generated.
20 errors generated.
WARNING: Clang execution failed: Command: exit status 1
WARNING: Clang execution failed: Command: exit status 1
Retrying...
Retrying...
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:35:13: error: no type named 'TimerId' in namespace 'Qt'
        Qt::TimerId timerId;
        ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:49:9: error: no type named 'TimerId' in namespace 'Qt'
    Qt::TimerId registerTimer(Duration interval, Qt::TimerType timerType, QObject *object);
    ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:61:28: error: no type named 'TimerId' in namespace 'Qt'
    void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType, QObject *object);
                       ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:62:30: error: no type named 'TimerId' in namespace 'Qt'
    bool unregisterTimer(Qt::TimerId timerId);
                         ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:64:32: error: no type named 'TimerId' in namespace 'Qt'
    Duration remainingTime(Qt::TimerId timerId) const;
                           ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:106:36: error: no type named 'TimerId' in namespace 'Qt'
    virtual void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType,
                               ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:108:38: error: no type named 'TimerId' in namespace 'Qt'
    virtual bool unregisterTimer(Qt::TimerId timerId) = 0;
                                 ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:110:40: error: no type named 'TimerId' in namespace 'Qt'
    virtual Duration remainingTime(Qt::TimerId timerId) const = 0;
                                   ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:111:82: error: unknown type name 'QDeadlineTimer'
    virtual bool processEventsWithDeadline(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline); // reserved for 6.9
                                                                                 ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:150:26: error: no type named 'strong_ordering' in namespace 'Qt'
    friend constexpr Qt::strong_ordering compareThreeWay(const QModelIndex &lhs, const QModelIndex &rhs) noexcept
                     ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:162:5: error: unknown type name 'Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE'
    Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE(QModelIndex)
    ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:162:57: error: expected ';' at end of declaration list
    Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE(QModelIndex)
                                                        ^
                                                        ;
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:170:9: error: no template named 'totally_ordered_wrapper' in namespace 'Qt'
    Qt::totally_ordered_wrapper<const QAbstractItemModel *> m;
    ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:128:47: error: member initializer 'r' does not name a non-static data member or base class
    constexpr inline QModelIndex() noexcept : r(-1), c(-1), i(0), m(nullptr) {}
                                              ^~~~~
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:128:54: error: member initializer 'c' does not name a non-static data member or base class
    constexpr inline QModelIndex() noexcept : r(-1), c(-1), i(0), m(nullptr) {}
                                                     ^~~~~
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:130:56: error: use of undeclared identifier 'r'
    constexpr inline int row() const noexcept { return r; }
                                                       ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:131:59: error: use of undeclared identifier 'c'
    constexpr inline int column() const noexcept { return c; }
                                                          ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:142:48: error: no return statement in constexpr function
    constexpr inline const QAbstractItemModel *model() const noexcept { return m.get(); }
                                               ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:143:62: error: use of undeclared identifier 'r'
    constexpr inline bool isValid() const noexcept { return (r >= 0) && (c >= 0) && (m != nullptr); }
                                                             ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:143:74: error: use of undeclared identifier 'c'
    constexpr inline bool isValid() const noexcept { return (r >= 0) && (c >= 0) && (m != nullptr); }
                                                                         ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:143:27: error: no return statement in constexpr function
    constexpr inline bool isValid() const noexcept { return (r >= 0) && (c >= 0) && (m != nullptr); }
                          ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:20: error: no member named 'r' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
               ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:29: error: no member named 'r' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
                        ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:38: error: no member named 'c' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
                                 ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:47: error: no member named 'c' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
                                          ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:152:48: error: no member named 'r' in 'QModelIndex'
        if (auto val = Qt::compareThreeWay(lhs.r, rhs.r); !is_eq(val))
                                           ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:152:55: error: no member named 'r' in 'QModelIndex'
        if (auto val = Qt::compareThreeWay(lhs.r, rhs.r); !is_eq(val))
                                                  ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:152:28: error: no member named 'compareThreeWay' in namespace 'Qt'
        if (auto val = Qt::compareThreeWay(lhs.r, rhs.r); !is_eq(val))
                       ~~~~^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
9 errors generated.
20 errors generated.
WARNING: Clang execution failed: Command: exit status 1
WARNING: Clang execution failed: Command: exit status 1
Retrying...
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:35:13: error: no type named 'TimerId' in namespace 'Qt'
        Qt::TimerId timerId;
        ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:49:9: error: no type named 'TimerId' in namespace 'Qt'
    Qt::TimerId registerTimer(Duration interval, Qt::TimerType timerType, QObject *object);
    ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:61:28: error: no type named 'TimerId' in namespace 'Qt'
    void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType, QObject *object);
                       ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:62:30: error: no type named 'TimerId' in namespace 'Qt'
    bool unregisterTimer(Qt::TimerId timerId);
                         ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:64:32: error: no type named 'TimerId' in namespace 'Qt'
    Duration remainingTime(Qt::TimerId timerId) const;
                           ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:106:36: error: no type named 'TimerId' in namespace 'Qt'
    virtual void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType,
                               ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:108:38: error: no type named 'TimerId' in namespace 'Qt'
    virtual bool unregisterTimer(Qt::TimerId timerId) = 0;
                                 ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:110:40: error: no type named 'TimerId' in namespace 'Qt'
    virtual Duration remainingTime(Qt::TimerId timerId) const = 0;
                                   ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:111:82: error: unknown type name 'QDeadlineTimer'
    virtual bool processEventsWithDeadline(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline); // reserved for 6.9
                                                                                 ^
Retrying...
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:150:26: error: no type named 'strong_ordering' in namespace 'Qt'
    friend constexpr Qt::strong_ordering compareThreeWay(const QModelIndex &lhs, const QModelIndex &rhs) noexcept
                     ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:162:5: error: unknown type name 'Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE'
    Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE(QModelIndex)
    ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:162:57: error: expected ';' at end of declaration list
    Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE(QModelIndex)
                                                        ^
                                                        ;
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:170:9: error: no template named 'totally_ordered_wrapper' in namespace 'Qt'
    Qt::totally_ordered_wrapper<const QAbstractItemModel *> m;
    ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:128:47: error: member initializer 'r' does not name a non-static data member or base class
    constexpr inline QModelIndex() noexcept : r(-1), c(-1), i(0), m(nullptr) {}
                                              ^~~~~
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:128:54: error: member initializer 'c' does not name a non-static data member or base class
    constexpr inline QModelIndex() noexcept : r(-1), c(-1), i(0), m(nullptr) {}
                                                     ^~~~~
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:130:56: error: use of undeclared identifier 'r'
    constexpr inline int row() const noexcept { return r; }
                                                       ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:131:59: error: use of undeclared identifier 'c'
    constexpr inline int column() const noexcept { return c; }
                                                          ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:142:48: error: no return statement in constexpr function
    constexpr inline const QAbstractItemModel *model() const noexcept { return m.get(); }
                                               ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:143:62: error: use of undeclared identifier 'r'
    constexpr inline bool isValid() const noexcept { return (r >= 0) && (c >= 0) && (m != nullptr); }
                                                             ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:143:74: error: use of undeclared identifier 'c'
    constexpr inline bool isValid() const noexcept { return (r >= 0) && (c >= 0) && (m != nullptr); }
                                                                         ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:143:27: error: no return statement in constexpr function
    constexpr inline bool isValid() const noexcept { return (r >= 0) && (c >= 0) && (m != nullptr); }
                          ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:20: error: no member named 'r' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
               ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:29: error: no member named 'r' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
                        ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:38: error: no member named 'c' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
                                 ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:47: error: no member named 'c' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
                                          ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:152:48: error: no member named 'r' in 'QModelIndex'
        if (auto val = Qt::compareThreeWay(lhs.r, rhs.r); !is_eq(val))
                                           ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:152:55: error: no member named 'r' in 'QModelIndex'
        if (auto val = Qt::compareThreeWay(lhs.r, rhs.r); !is_eq(val))
                                                  ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:152:28: error: no member named 'compareThreeWay' in namespace 'Qt'
        if (auto val = Qt::compareThreeWay(lhs.r, rhs.r); !is_eq(val))
                       ~~~~^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
9 errors generated.
20 errors generated.
WARNING: Clang execution failed: Command: exit status 1
WARNING: Clang execution failed: Command: exit status 1
Retrying...
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:35:13: error: no type named 'TimerId' in namespace 'Qt'
        Qt::TimerId timerId;
        ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:49:9: error: no type named 'TimerId' in namespace 'Qt'
    Qt::TimerId registerTimer(Duration interval, Qt::TimerType timerType, QObject *object);
    ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:61:28: error: no type named 'TimerId' in namespace 'Qt'
    void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType, QObject *object);
                       ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:62:30: error: no type named 'TimerId' in namespace 'Qt'
    bool unregisterTimer(Qt::TimerId timerId);
                         ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:64:32: error: no type named 'TimerId' in namespace 'Qt'
    Duration remainingTime(Qt::TimerId timerId) const;
                           ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:106:36: error: no type named 'TimerId' in namespace 'Qt'
    virtual void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType,
                               ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:108:38: error: no type named 'TimerId' in namespace 'Qt'
    virtual bool unregisterTimer(Qt::TimerId timerId) = 0;
                                 ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:110:40: error: no type named 'TimerId' in namespace 'Qt'
    virtual Duration remainingTime(Qt::TimerId timerId) const = 0;
                                   ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h:111:82: error: unknown type name 'QDeadlineTimer'
    virtual bool processEventsWithDeadline(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline); // reserved for 6.9
                                                                                 ^
Retrying...
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:150:26: error: no type named 'strong_ordering' in namespace 'Qt'
    friend constexpr Qt::strong_ordering compareThreeWay(const QModelIndex &lhs, const QModelIndex &rhs) noexcept
                     ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:162:5: error: unknown type name 'Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE'
    Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE(QModelIndex)
    ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:162:57: error: expected ';' at end of declaration list
    Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE(QModelIndex)
                                                        ^
                                                        ;
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:170:9: error: no template named 'totally_ordered_wrapper' in namespace 'Qt'
    Qt::totally_ordered_wrapper<const QAbstractItemModel *> m;
    ~~~~^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:128:47: error: member initializer 'r' does not name a non-static data member or base class
    constexpr inline QModelIndex() noexcept : r(-1), c(-1), i(0), m(nullptr) {}
                                              ^~~~~
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:128:54: error: member initializer 'c' does not name a non-static data member or base class
    constexpr inline QModelIndex() noexcept : r(-1), c(-1), i(0), m(nullptr) {}
                                                     ^~~~~
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:130:56: error: use of undeclared identifier 'r'
    constexpr inline int row() const noexcept { return r; }
                                                       ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:131:59: error: use of undeclared identifier 'c'
    constexpr inline int column() const noexcept { return c; }
                                                          ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:142:48: error: no return statement in constexpr function
    constexpr inline const QAbstractItemModel *model() const noexcept { return m.get(); }
                                               ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:143:62: error: use of undeclared identifier 'r'
    constexpr inline bool isValid() const noexcept { return (r >= 0) && (c >= 0) && (m != nullptr); }
                                                             ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:143:74: error: use of undeclared identifier 'c'
    constexpr inline bool isValid() const noexcept { return (r >= 0) && (c >= 0) && (m != nullptr); }
                                                                         ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:143:27: error: no return statement in constexpr function
    constexpr inline bool isValid() const noexcept { return (r >= 0) && (c >= 0) && (m != nullptr); }
                          ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:20: error: no member named 'r' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
               ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:29: error: no member named 'r' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
                        ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:38: error: no member named 'c' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
                                 ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:148:47: error: no member named 'c' in 'QModelIndex'
        return lhs.r == rhs.r && lhs.c == rhs.c && lhs.i == rhs.i && lhs.m == rhs.m;
                                          ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:152:48: error: no member named 'r' in 'QModelIndex'
        if (auto val = Qt::compareThreeWay(lhs.r, rhs.r); !is_eq(val))
                                           ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:152:55: error: no member named 'r' in 'QModelIndex'
        if (auto val = Qt::compareThreeWay(lhs.r, rhs.r); !is_eq(val))
                                                  ~~~ ^
/opt/Qt/6.8.1/gcc_64/include/QtCore/qabstractitemmodel.h:152:28: error: no member named 'compareThreeWay' in namespace 'Qt'
        if (auto val = Qt::compareThreeWay(lhs.r, rhs.r); !is_eq(val))
                       ~~~~^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
9 errors generated.
20 errors generated.
WARNING: Clang execution failed: Command: exit status 1
WARNING: Clang execution failed: Command: exit status 1
Retrying...
panic: Clang failed 5x parsing file /opt/Qt/6.8.1/gcc_64/include/QtCore/qabstracteventdispatcher.h

goroutine 18 [running]:
main.mustClangExec({0x602e60, 0xc00001e050}, {0x5b6c86, 0x5}, {0xc000154180, 0x3e}, {0xc00017c000, 0x9, 0x9}, 0x5c5ff8)
        /src/cmd/genbindings/clangexec.go:100 +0x16b
main.generateClangCaches.func1()
        /src/cmd/genbindings/main.go:291 +0x1d7
created by main.generateClangCaches
        /src/cmd/genbindings/main.go:277 +0xa5
make: *** [Makefile:16: genbindings] Error 2
@Ahuge
Copy link
Author

Ahuge commented Jan 27, 2025

I might just make a branch with my changes because I am looking at switching to aqt so that you can target specific versions.

I don't know if that would be beneficial or not, but I found it easier to use aqt when I am building software consuming miqt internally

@mappu
Copy link
Owner

mappu commented Jan 30, 2025

Thanks for trying this out! This level of problem is pretty normal for changing the Qt version, it will take a few attempts of adding typedefs and allowlist changes, but it should be solveable.

The KnownEnums thing looks correct to me, i'm not sure yet why it didn't work. As some other workarounds, can you try making it a KnownTypedef to int? Or else, blocklisting the type in config-allowlist.go AllowType until it can be resolved later?

I would like to keep generating miqt against 6.4 headers (or even older 6.2 - #139). Qt has forwards ABI compatibility, a binary compiled against older Qt 6.4 headers can successfully use a newer Qt 6.8 dll/so library at runtime. This gives all the benefits of Qt's latest internal improvements and bugfixes, while still allowing users with an older "system qt" (i.e. Linux distros) to still run a release binary.

The only downside is missing bindings for any newly introduced functions. A middle ground would be to generate these separately into some additional (e.g.) qt68 directory. If aqt can install multiple Qt versions side-by-side that would be really interesting.

@mappu
Copy link
Owner

mappu commented Jan 30, 2025

Cross-referencing #112 for the last attempt to upgrade genbindings to scan the Qt 6.7 headers,

@mappu mappu added the wishlist label Jan 30, 2025
@Ahuge
Copy link
Author

Ahuge commented Jan 30, 2025

Thanks mappu,

aqt can install multiple versions side by side, I'll change my branch to target the older version of Qt from #139 and see if aqt install works as expected.

Which version of 5.x would you ideally like to support?

@mappu
Copy link
Owner

mappu commented Jan 31, 2025

Which version of 5.x would you ideally like to support?

5.15. My reasoning was based on what version of Qt is shipped in supported distros - although it's true that Ubuntu 20.04 is still supported while offering only Qt 5.12, I think in 2025, it's more than enough to draw the line at Qt 5.15.

@VelorumS
Copy link
Contributor

VelorumS commented Apr 1, 2025

With 6.8.3

No issues with Qt::TimerId. Probably it's a Qt header error in 6.8.1.

Generation

Manjaro/Arch stuff

/usr/include/ instead of /usr/include/x86_64-linux-gnu. Maybe this part needs another pkgConfig.

Possibly Manjaro/Arch stuff

Some private headers are in -I/usr/include/qt6/QtGui/6.8.3/ -I/usr/include/qt6/QtCore/6.8.3/. Get it from pkg-config somehow?

qcomparehelpers.h

Had to disallow.

QAtomicInt, QDBus, QTest

Had to disallow in Widgets_AllowHeader().

Processing "/usr/include/qt6/QtCore/qatomic.h"...
panic: Class QAtomicInt inherits from unknown class QAtomicInteger<int>

Processing "/usr/include/qt6/QtGui/bus_interface.h"...
panic: Class OrgA11yBusInterface inherits from unknown class QDBusAbstractInterface

Processing "/usr/include/qt6/QtGui/cache_adaptor.h"...
panic: Class CacheAdaptor inherits from unknown class QDBusAbstractAdaptor

Processing "/usr/include/qt6/QtGui/deviceeventcontroller_adaptor.h"...
panic: Class DeviceEventControllerAdaptor inherits from unknown class QDBusAbstractAdaptor

Processing "/usr/include/qt6/QtGui/properties_interface.h"...
panic: Class OrgFreedesktopDBusPropertiesInterface inherits from unknown class QDBusAbstractInterface

Processing "/usr/include/qt6/QtGui/socket_interface.h"...
panic: Class OrgA11yAtspiSocketInterface inherits from unknown class QDBusAbstractInterface

Processing "/usr/include/qt6/QtWidgets/qtestsupport_widgets.h"...
panic: Class QTest::QTouchEventWidgetSequence inherits from unknown class QTouchEventSequence

Namespace aliases

Had to ignore.

Multimedia namespace QtAudio = QAudio; in /usr/include/qt6/QtMultimedia/qaudio.h:42:

Clang worker got message for file "/usr/include/qt6/QtMultimediaWidgets/qvideowidget.h"
-> Processing class "QAbstractVideoBuffer"...
-> Processing class "QAbstractVideoBuffer::MapData"...
-> Processing class "QAbstractVideoBuffer::MapData::MapData"...
-> Skipping inner class because: There's no content to include
==> NOT IMPLEMENTED "FieldDecl"
==> NOT IMPLEMENTED "FieldDecl"
==> NOT IMPLEMENTED "FieldDecl"
==> NOT IMPLEMENTED "FieldDecl"
-> Processing class "QString"...
-> Skipping (There's no content to include)
panic: missing handling for clang ast node type "NamespaceAliasDecl"

Build helloworld6

qt6/gen_qregion.go, "const" and templates?

			func (this *QRegion) SetRectsWithQSpanLesserconstQRectGreater(r QSpan<const QRect>)  {
				 C.QRegion_setRectsWithQSpanLesserconstQRectGreater(this.h, r)
}
			
			func (this *QRegion) Rects() QSpan<const QRect> {
				int /* TODO  */}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants