diff --git a/.github/workflows/miqt.yml b/.github/workflows/miqt.yml index 10cca52f4..9c14434b9 100644 --- a/.github/workflows/miqt.yml +++ b/.github/workflows/miqt.yml @@ -26,6 +26,9 @@ jobs: - name: Run unit tests for cmd tasks run: make test-cmd + - name: Assert cflags files are up-to-date + run: cmd/lint-cflags-files.sh + - name: Rebuild binding source run: make genbindings diff --git a/cmd/genbindings/config-libraries.go b/cmd/genbindings/config-libraries.go index e4b6300c9..5d385978a 100644 --- a/cmd/genbindings/config-libraries.go +++ b/cmd/genbindings/config-libraries.go @@ -99,6 +99,7 @@ func ProcessLibraries(clangBin, outDir, extraLibsDir string) { ) // Qt 5 Network (2/3) + // n.b. This is here for parity with Qt 6, however, it generates zero files generate( "qt/network/sctp", diff --git a/cmd/lint-cflags-files.sh b/cmd/lint-cflags-files.sh new file mode 100755 index 000000000..11c7460d9 --- /dev/null +++ b/cmd/lint-cflags-files.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# +# Check that each Qt cgo package has the expected #cgo directives for that +# version of Qt + +set -euo pipefail + +require_cflags() { + local dirname="$1" + local check="$2" + local status=0 + + for d in $(find "${dirname}" -type d | sort); do + + # allowed exceptions: + if [[ $d =~ mainthread ]] ; then + continue + fi + + if [[ ! -f $d/cflags.go ]] ; then + echo "WARNING: Package $d missing cflags.go file" >&2 + status=1 + fi + + if ! grep -Fq "$check" "$d/cflags.go" ; then + echo "WARNING: Package $d missing expected '$check'" >&2 + status=1 + fi + done + + return $status +} + +main() { + require_cflags qt '#cgo CXXFLAGS: -std=c++11' + require_cflags qt '#cgo CFLAGS: -std=gnu11' + require_cflags qt '#cgo pkg-config:' + + require_cflags qt6 '#cgo CXXFLAGS: -std=c++17' + require_cflags qt6 '#cgo pkg-config:' +} + +main "$@" diff --git a/qt/designer/cflags.go b/qt/designer/cflags.go index 93a5cc61d..6b6c01dbd 100644 --- a/qt/designer/cflags.go +++ b/qt/designer/cflags.go @@ -1,6 +1,8 @@ package designer /* +#cgo CXXFLAGS: -std=c++11 +#cgo CFLAGS: -std=gnu11 #cgo pkg-config: Qt5UiPlugin Qt5Designer */ import "C" diff --git a/qt/mainthread/mainthread.go b/qt/mainthread/mainthread.go index f44332b8c..6be2fdeaa 100644 --- a/qt/mainthread/mainthread.go +++ b/qt/mainthread/mainthread.go @@ -1,12 +1,13 @@ package mainthread import ( - "sync" "runtime/cgo" + "sync" ) /* #cgo CXXFLAGS: -std=c++11 +#cgo CFLAGS: -std=gnu11 #cgo pkg-config: Qt5Core #include "mainthread.h" diff --git a/qt/opengl/cflags.go b/qt/opengl/cflags.go index 66c2aa09f..50e19d484 100644 --- a/qt/opengl/cflags.go +++ b/qt/opengl/cflags.go @@ -1,6 +1,8 @@ package opengl /* +#cgo CXXFLAGS: -std=c++11 +#cgo CFLAGS: -std=gnu11 #cgo pkg-config: Qt5OpenGL */ import "C" diff --git a/qt/pdf/cflags.go b/qt/pdf/cflags.go index 7b7510b11..0afce3710 100644 --- a/qt/pdf/cflags.go +++ b/qt/pdf/cflags.go @@ -1,7 +1,8 @@ package pdf /* +#cgo CXXFLAGS: -std=c++11 +#cgo CFLAGS: -std=gnu11 #cgo pkg-config: Qt5PdfWidgets */ import "C" - diff --git a/qt/positioning/cflags.go b/qt/positioning/cflags.go index a60a0a2d2..9af9a845f 100644 --- a/qt/positioning/cflags.go +++ b/qt/positioning/cflags.go @@ -1,6 +1,8 @@ package positioning /* +#cgo CXXFLAGS: -std=c++11 +#cgo CFLAGS: -std=gnu11 #cgo pkg-config: Qt5Positioning */ import "C" diff --git a/qt/printsupport/cflags.go b/qt/printsupport/cflags.go index 9781b75b5..6adc4674b 100644 --- a/qt/printsupport/cflags.go +++ b/qt/printsupport/cflags.go @@ -1,6 +1,8 @@ package printsupport /* +#cgo CXXFLAGS: -std=c++11 +#cgo CFLAGS: -std=gnu11 #cgo pkg-config: Qt5PrintSupport */ import "C" diff --git a/qt/script/cflags.go b/qt/script/cflags.go index 884008729..a97c95ded 100644 --- a/qt/script/cflags.go +++ b/qt/script/cflags.go @@ -1,6 +1,8 @@ package script /* +#cgo CXXFLAGS: -std=c++11 +#cgo CFLAGS: -std=gnu11 #cgo pkg-config: Qt5Script */ import "C" diff --git a/qt/sql/cflags.go b/qt/sql/cflags.go index 5e606f3fa..cf9f65cb5 100644 --- a/qt/sql/cflags.go +++ b/qt/sql/cflags.go @@ -1,6 +1,8 @@ package sql /* +#cgo CXXFLAGS: -std=c++11 +#cgo CFLAGS: -std=gnu11 #cgo pkg-config: Qt5Sql */ import "C" diff --git a/qt/svg/cflags.go b/qt/svg/cflags.go index e9b3f840d..d5b661a6a 100644 --- a/qt/svg/cflags.go +++ b/qt/svg/cflags.go @@ -1,6 +1,8 @@ package svg /* +#cgo CXXFLAGS: -std=c++11 +#cgo CFLAGS: -std=gnu11 #cgo pkg-config: Qt5Svg */ import "C" diff --git a/qt/uiplugin/cflags.go b/qt/uiplugin/cflags.go index abd4d0dc2..52b6cad39 100644 --- a/qt/uiplugin/cflags.go +++ b/qt/uiplugin/cflags.go @@ -1,6 +1,8 @@ package uiplugin /* +#cgo CXXFLAGS: -std=c++11 +#cgo CFLAGS: -std=gnu11 #cgo pkg-config: Qt5UiPlugin Qt5Designer */ import "C" diff --git a/qt/uitools/cflags.go b/qt/uitools/cflags.go index a6fac2aa8..f685bc2a2 100644 --- a/qt/uitools/cflags.go +++ b/qt/uitools/cflags.go @@ -1,6 +1,8 @@ package uitools /* +#cgo CXXFLAGS: -std=c++11 +#cgo CFLAGS: -std=gnu11 #cgo pkg-config: Qt5UiTools */ import "C" diff --git a/qt/webchannel/cflags.go b/qt/webchannel/cflags.go index 09e7f050f..d2ee372c0 100644 --- a/qt/webchannel/cflags.go +++ b/qt/webchannel/cflags.go @@ -1,6 +1,8 @@ package webchannel /* +#cgo CXXFLAGS: -std=c++11 +#cgo CFLAGS: -std=gnu11 #cgo pkg-config: Qt5WebChannel */ import "C" diff --git a/qt/webengine/cflags.go b/qt/webengine/cflags.go index 22b7e5523..03238ad02 100644 --- a/qt/webengine/cflags.go +++ b/qt/webengine/cflags.go @@ -1,6 +1,8 @@ package webengine /* +#cgo CXXFLAGS: -std=c++11 +#cgo CFLAGS: -std=gnu11 #cgo pkg-config: Qt5WebEngineWidgets */ import "C" diff --git a/qt/webkit/cflags.go b/qt/webkit/cflags.go index 5ba3b527f..3a161c26e 100644 --- a/qt/webkit/cflags.go +++ b/qt/webkit/cflags.go @@ -1,6 +1,8 @@ package webkit /* +#cgo CXXFLAGS: -std=c++11 +#cgo CFLAGS: -std=gnu11 #cgo pkg-config: Qt5WebKitWidgets Qt5PrintSupport */ import "C" diff --git a/qt/websockets/cflags.go b/qt/websockets/cflags.go index d096dd9b0..9fdd21094 100644 --- a/qt/websockets/cflags.go +++ b/qt/websockets/cflags.go @@ -1,7 +1,8 @@ package websockets /* +#cgo CXXFLAGS: -std=c++11 +#cgo CFLAGS: -std=gnu11 #cgo pkg-config: Qt5WebSockets */ import "C" - diff --git a/qt6/cbor/cflags.go b/qt6/cbor/cflags.go index 1742dc877..2d430090e 100644 --- a/qt6/cbor/cflags.go +++ b/qt6/cbor/cflags.go @@ -1,6 +1,7 @@ package cbor /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6Core */ import "C" diff --git a/qt6/cflags.go b/qt6/cflags.go index da506dc88..b4ccfaac4 100644 --- a/qt6/cflags.go +++ b/qt6/cflags.go @@ -1,6 +1,7 @@ package qt6 /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6Widgets */ import "C" diff --git a/qt6/designer/cflags.go b/qt6/designer/cflags.go index 00510e7e5..3b8e788b1 100644 --- a/qt6/designer/cflags.go +++ b/qt6/designer/cflags.go @@ -1,6 +1,7 @@ package designer /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6UiPlugin Qt6Designer */ import "C" diff --git a/qt6/multimedia/cflags.go b/qt6/multimedia/cflags.go index e17468ab4..7f96e5765 100644 --- a/qt6/multimedia/cflags.go +++ b/qt6/multimedia/cflags.go @@ -1,6 +1,7 @@ package multimedia /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6MultimediaWidgets */ import "C" diff --git a/qt6/network/cflags.go b/qt6/network/cflags.go index 902d8379a..8f03d70ec 100644 --- a/qt6/network/cflags.go +++ b/qt6/network/cflags.go @@ -1,6 +1,7 @@ package network /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6Network */ import "C" diff --git a/qt6/network/dtls/cflags.go b/qt6/network/dtls/cflags.go index e28308a77..c76861c3c 100644 --- a/qt6/network/dtls/cflags.go +++ b/qt6/network/dtls/cflags.go @@ -1,6 +1,7 @@ package dtls /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6Network */ import "C" diff --git a/qt6/network/sctp/cflags.go b/qt6/network/sctp/cflags.go index 762b17778..925cfc262 100644 --- a/qt6/network/sctp/cflags.go +++ b/qt6/network/sctp/cflags.go @@ -1,6 +1,7 @@ package sctp /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6Network */ import "C" diff --git a/qt6/pdf/cflags.go b/qt6/pdf/cflags.go index c0810a5e9..f8e317883 100644 --- a/qt6/pdf/cflags.go +++ b/qt6/pdf/cflags.go @@ -1,7 +1,7 @@ package pdf /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6PdfWidgets */ import "C" - diff --git a/qt6/positioning/cflags.go b/qt6/positioning/cflags.go index 50ff7ed2d..e301a4731 100644 --- a/qt6/positioning/cflags.go +++ b/qt6/positioning/cflags.go @@ -1,6 +1,7 @@ package positioning /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6Positioning */ import "C" diff --git a/qt6/printsupport/cflags.go b/qt6/printsupport/cflags.go index 91dfe3fae..4280f294f 100644 --- a/qt6/printsupport/cflags.go +++ b/qt6/printsupport/cflags.go @@ -1,6 +1,7 @@ package printsupport /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6PrintSupport */ import "C" diff --git a/qt6/qml/cflags.go b/qt6/qml/cflags.go index 7ef82cd9d..dfdac2bfe 100644 --- a/qt6/qml/cflags.go +++ b/qt6/qml/cflags.go @@ -1,6 +1,7 @@ package qml /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6Qml */ import "C" diff --git a/qt6/spatialaudio/cflags.go b/qt6/spatialaudio/cflags.go index ec01d583e..b18dbe3c6 100644 --- a/qt6/spatialaudio/cflags.go +++ b/qt6/spatialaudio/cflags.go @@ -1,6 +1,7 @@ package spatialaudio /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6SpatialAudio */ import "C" diff --git a/qt6/sql/cflags.go b/qt6/sql/cflags.go index 81578214c..255e911c6 100644 --- a/qt6/sql/cflags.go +++ b/qt6/sql/cflags.go @@ -1,6 +1,7 @@ package sql /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6Sql */ import "C" diff --git a/qt6/statemachine/cflags.go b/qt6/statemachine/cflags.go index 655e92255..b77f8ff58 100644 --- a/qt6/statemachine/cflags.go +++ b/qt6/statemachine/cflags.go @@ -1,6 +1,7 @@ package statemachine /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6StateMachine Qt6StateMachineQml */ import "C" diff --git a/qt6/svg/cflags.go b/qt6/svg/cflags.go index 3854d207c..927a2ca85 100644 --- a/qt6/svg/cflags.go +++ b/qt6/svg/cflags.go @@ -1,6 +1,7 @@ package svg /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6SvgWidgets */ import "C" diff --git a/qt6/uiplugin/cflags.go b/qt6/uiplugin/cflags.go index 45de81498..25fb23655 100644 --- a/qt6/uiplugin/cflags.go +++ b/qt6/uiplugin/cflags.go @@ -1,6 +1,7 @@ package uiplugin /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6UiPlugin Qt6Designer */ import "C" diff --git a/qt6/uitools/cflags.go b/qt6/uitools/cflags.go index 9ce148c7b..4bf521794 100644 --- a/qt6/uitools/cflags.go +++ b/qt6/uitools/cflags.go @@ -1,6 +1,7 @@ package uitools /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6UiTools */ import "C" diff --git a/qt6/webchannel/cflags.go b/qt6/webchannel/cflags.go index 3b90586db..e019d2c12 100644 --- a/qt6/webchannel/cflags.go +++ b/qt6/webchannel/cflags.go @@ -1,6 +1,7 @@ package webchannel /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6WebChannel */ import "C" diff --git a/qt6/webchannel/qmlwebchannel/cflags.go b/qt6/webchannel/qmlwebchannel/cflags.go index 32207c1a7..fea5cdee1 100644 --- a/qt6/webchannel/qmlwebchannel/cflags.go +++ b/qt6/webchannel/qmlwebchannel/cflags.go @@ -1,6 +1,7 @@ package qmlwebchannel /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6WebChannel */ import "C" diff --git a/qt6/webengine/cflags.go b/qt6/webengine/cflags.go index cb165fd22..e1bfa731c 100644 --- a/qt6/webengine/cflags.go +++ b/qt6/webengine/cflags.go @@ -1,6 +1,7 @@ package webengine /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6WebEngineWidgets */ import "C" diff --git a/qt6/websockets/cflags.go b/qt6/websockets/cflags.go index bbdd61ad3..cb80a2861 100644 --- a/qt6/websockets/cflags.go +++ b/qt6/websockets/cflags.go @@ -1,7 +1,7 @@ package websockets /* +#cgo CXXFLAGS: -std=c++17 #cgo pkg-config: Qt6WebSockets */ import "C" -