summaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2022-03-04 12:49:44 +0100
committerJoerg Bornemann <joerg.bornemann@qt.io>2022-03-08 03:45:30 +0100
commit928828b54905c361ba52c8ff043c9247a25e9375 (patch)
tree27f927eb2af48072ca1d14318f61db635d4a50e2 /util
parent0dc374c9d84ecc06ea28e09ee248cf2ad29ceb04 (diff)
pro2cmake: Handle QT_(MAJOR_|MINOR_|PATCH_)VERSION conditions
Task-number: QTBUG-98852 Change-Id: I4c86fff7bbcc6c42cd04094f2409c3d04779597c Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'util')
-rwxr-xr-xutil/cmake/pro2cmake.py22
-rw-r--r--util/cmake/tests/data/conversion/qt_version_check.pro8
-rwxr-xr-xutil/cmake/tests/test_conversion.py8
3 files changed, 38 insertions, 0 deletions
diff --git a/util/cmake/pro2cmake.py b/util/cmake/pro2cmake.py
index 95027c738a..c30591591b 100755
--- a/util/cmake/pro2cmake.py
+++ b/util/cmake/pro2cmake.py
@@ -1669,6 +1669,28 @@ def map_condition(condition: str) -> str:
pattern = r"(equals|greaterThan|lessThan)\(WINDOWS_SDK_VERSION,[ ]*([0-9]+)\)"
condition = re.sub(pattern, windows_sdk_version_handler, condition)
+ def qt_version_handler(match_obj: Match):
+ operator = match_obj.group(1)
+ if operator == "equals":
+ operator = "EQUAL"
+ elif operator == "greaterThan":
+ operator = "GREATER"
+ elif operator == "lessThan":
+ operator = "LESS"
+
+ operator_prefix = "VERSION_"
+ version_variable = "QT_VERSION"
+ version_flavor = match_obj.group(2)
+ if version_flavor:
+ version_variable += "_" + version_flavor[:-1]
+ operator_prefix = ""
+
+ version = match_obj.group(3)
+ return f"({version_variable} {operator_prefix}{operator} {version})"
+
+ pattern = r"(equals|greaterThan|lessThan)\(QT_(MAJOR_|MINOR_|PATCH_)?VERSION,[ ]*([0-9.]+)\)"
+ condition = re.sub(pattern, qt_version_handler, condition)
+
# Generic lessThan|equals|lessThan()
def generic_version_handler(match_obj: Match):
diff --git a/util/cmake/tests/data/conversion/qt_version_check.pro b/util/cmake/tests/data/conversion/qt_version_check.pro
new file mode 100644
index 0000000000..cf3697bb64
--- /dev/null
+++ b/util/cmake/tests/data/conversion/qt_version_check.pro
@@ -0,0 +1,8 @@
+QT += core gui
+SOURCES += main.cpp
+greaterThan(QT_MAJOR_VERSION, 5):lessThan(QT_MINOR_VERSION, 1):equals(QT_PATCH_VERSION, 0) {
+ DEFINES += SUPER_FRESH_MAJOR_QT_RELEASE
+}
+greaterThan(QT_VERSION, 6.6.5):lessThan(QT_VERSION, 6.6.7):equals(QT_VERSION, 6.6.6): {
+ DEFINES += QT_VERSION_OF_THE_BEAST
+}
diff --git a/util/cmake/tests/test_conversion.py b/util/cmake/tests/test_conversion.py
index 54ddd35d9c..be5fdc90dd 100755
--- a/util/cmake/tests/test_conversion.py
+++ b/util/cmake/tests/test_conversion.py
@@ -81,3 +81,11 @@ def test_qt_modules():
assert(["find_package(QT NAMES Qt5 Qt6 REQUIRED COMPONENTS Core)",
"find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Network Widgets)",
"find_package(Qt${QT_VERSION_MAJOR} OPTIONAL_COMPONENTS OpenGL)"] == find_package_lines)
+
+def test_qt_version_check():
+ output = convert("qt_version_check")
+ interesting_lines = []
+ for line in output.split("\n"):
+ if line.startswith("if(") and "QT_VERSION" in line:
+ interesting_lines.append(line.strip())
+ assert(["if(( ( (QT_VERSION_MAJOR GREATER 5) ) AND (QT_VERSION_MINOR LESS 1) ) AND (QT_VERSION_PATCH EQUAL 0))", "if(( ( (QT_VERSION VERSION_GREATER 6.6.5) ) AND (QT_VERSION VERSION_LESS 6.6.7) ) AND (QT_VERSION VERSION_EQUAL 6.6.6))"] == interesting_lines)