From 7d3ade7ae1a96497435a553a27baa339e87ec653 Mon Sep 17 00:00:00 2001 From: "jonas@jkvinge.net" Date: Sun, 16 May 2021 21:12:41 +0200 Subject: [PATCH] Automatically detect Qt version --- CMakeLists.txt | 103 +++++++++++++++++++---------------- dist/unix/strawberry.spec.in | 42 +++++++------- 2 files changed, 76 insertions(+), 69 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c21ad00..1a2b3383 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -132,65 +132,72 @@ find_package(FFTW3) find_package(GTest) find_library(GMOCK_LIBRARY gmock) -if(NOT QT_DEFAULT_MAJOR_VERSION) - set(QT_DEFAULT_MAJOR_VERSION 5) -endif() -set(QT_MAJOR_VERSION ${QT_DEFAULT_MAJOR_VERSION} CACHE STRING "Qt version to use (5 or 6), defaults to ${QT_DEFAULT_MAJOR_VERSION}") - -option(BUILD_WITH_QT5 "Use Qt 5" OFF) -option(BUILD_WITH_QT6 "Use Qt 6" OFF) +option(QT_VERSION_MAJOR "Qt version to use (5 or 6)") +option(BUILD_WITH_QT5 "Build with Qt 5" OFF) +option(BUILD_WITH_QT6 "Build with Qt 6" OFF) if(WITH_QT6) set(BUILD_WITH_QT6 ON) endif() - -if(BUILD_WITH_QT5) - set(QT_MAJOR_VERSION 5) -elseif(BUILD_WITH_QT6) - set(QT_MAJOR_VERSION 6) -else() - if(QT_MAJOR_VERSION EQUAL 5) - set(BUILD_WITH_QT5 ON) - elseif(QT_MAJOR_VERSION EQUAL 6) - set(BUILD_WITH_QT6 ON) - else() - set(BUILD_WITH_QT5 ON) - set(QT_MAJOR_VERSION 5) - endif() +if(QT_MAJOR_VERSION) + set(QT_VERSION_MAJOR ${QT_MAJOR_VERSION}) endif() +if(QT_VERSION_MAJOR) + set(QT_DEFAULT_MAJOR_VERSION ${QT_VERSION_MAJOR}) +endif() set(QT_COMPONENTS Core Concurrent Widgets Network Sql) -set(QT_OPTIONAL_COMPONENTS Test) - -if(QT_MAJOR_VERSION EQUAL 5) - set(QT_MIN_VERSION 5.8) -endif() - if(DBUS_FOUND AND NOT WIN32) list(APPEND QT_COMPONENTS DBus) endif() +set(QT_OPTIONAL_COMPONENTS Test) +set(QT_MIN_VERSION 5.8) -find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} REQUIRED COMPONENTS ${QT_COMPONENTS} OPTIONAL_COMPONENTS ${QT_OPTIONAL_COMPONENTS}) - -set(QtCore_LIBRARIES Qt${QT_MAJOR_VERSION}::Core) -set(QtConcurrent_LIBRARIES Qt${QT_MAJOR_VERSION}::Concurrent) -set(QtGui_LIBRARIES Qt${QT_MAJOR_VERSION}::Gui) -set(QtWidgets_LIBRARIES Qt${QT_MAJOR_VERSION}::Widgets) -set(QtNetwork_LIBRARIES Qt${QT_MAJOR_VERSION}::Network) -set(QtSql_LIBRARIES Qt${QT_MAJOR_VERSION}::Sql) -set(QT_LIBRARIES Qt${QT_MAJOR_VERSION}::Core Qt${QT_MAJOR_VERSION}::Concurrent Qt${QT_MAJOR_VERSION}::Gui Qt${QT_MAJOR_VERSION}::Widgets Qt${QT_MAJOR_VERSION}::Network Qt${QT_MAJOR_VERSION}::Sql) -if(Qt${QT_MAJOR_VERSION}DBus_FOUND) - set(QtDBus_LIBRARIES Qt${QT_MAJOR_VERSION}::DBus) - list(APPEND QT_LIBRARIES Qt${QT_MAJOR_VERSION}::DBus) - get_target_property(QT_DBUSXML2CPP_EXECUTABLE Qt${QT_MAJOR_VERSION}::qdbusxml2cpp LOCATION) -endif() -if(Qt${QT_MAJOR_VERSION}Test_FOUND) - set(QtTest_LIBRARIES Qt${QT_MAJOR_VERSION}::Test) +if(BUILD_WITH_QT6 OR QT_VERSION_MAJOR EQUAL 6) + set(QT_VERSION_MAJOR 6 CACHE STRING "" FORCE) + set(BUILD_WITH_QT6 ON CACHE BOOL "" FORCE) +elseif(BUILD_WITH_QT5 OR QT_VERSION_MAJOR EQUAL 5) + set(QT_VERSION_MAJOR 5 CACHE STRING "" FORCE) + set(BUILD_WITH_QT5 ON CACHE BOOL "" FORCE) +else() + # Automatically detect Qt version. + find_package(QT NAMES Qt6 Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED) + if(QT_FOUND AND QT_VERSION_MAJOR EQUAL 6) + set(BUILD_WITH_QT6 ON CACHE BOOL "" FORCE) + set(QT_VERSION_MAJOR 6 CACHE STRING "" FORCE) + elseif(QT_FOUND AND QT_VERSION_MAJOR EQUAL 5) + set(BUILD_WITH_QT5 ON CACHE BOOL "" FORCE) + set(QT_VERSION_MAJOR 5 CACHE STRING "" FORCE) + else() + message(FATAL_ERROR "Missing Qt.") + endif() endif() -find_package(Qt${QT_MAJOR_VERSION} QUIET COMPONENTS LinguistTools CONFIG) -if(Qt${QT_MAJOR_VERSION}LinguistTools_FOUND) - set(QT_LCONVERT_EXECUTABLE Qt${QT_MAJOR_VERSION}::lconvert) +if(QT_VERSION_MAJOR) + set(QT_DEFAULT_MAJOR_VERSION ${QT_VERSION_MAJOR}) +endif() + +find_package(Qt${QT_VERSION_MAJOR} ${QT_MIN_VERSION} REQUIRED COMPONENTS ${QT_COMPONENTS} OPTIONAL_COMPONENTS ${QT_OPTIONAL_COMPONENTS}) + +set(QtCore_LIBRARIES Qt${QT_VERSION_MAJOR}::Core) +set(QtConcurrent_LIBRARIES Qt${QT_VERSION_MAJOR}::Concurrent) +set(QtGui_LIBRARIES Qt${QT_VERSION_MAJOR}::Gui) +set(QtWidgets_LIBRARIES Qt${QT_VERSION_MAJOR}::Widgets) +set(QtNetwork_LIBRARIES Qt${QT_VERSION_MAJOR}::Network) +set(QtSql_LIBRARIES Qt${QT_VERSION_MAJOR}::Sql) +set(QT_LIBRARIES Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Concurrent Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::Sql) +if(Qt${QT_VERSION_MAJOR}DBus_FOUND) + set(QtDBus_LIBRARIES Qt${QT_VERSION_MAJOR}::DBus) + list(APPEND QT_LIBRARIES Qt${QT_VERSION_MAJOR}::DBus) + get_target_property(QT_DBUSXML2CPP_EXECUTABLE Qt${QT_VERSION_MAJOR}::qdbusxml2cpp LOCATION) +endif() +if(Qt${QT_VERSION_MAJOR}Test_FOUND) + set(QtTest_LIBRARIES Qt${QT_VERSION_MAJOR}::Test) +endif() + +find_package(Qt${QT_VERSION_MAJOR} QUIET COMPONENTS LinguistTools CONFIG) +if(Qt${QT_VERSION_MAJOR}LinguistTools_FOUND) + set(QT_LCONVERT_EXECUTABLE Qt${QT_VERSION_MAJOR}::lconvert) endif() if(X11_FOUND) @@ -207,10 +214,10 @@ if(X11_FOUND) message(WARNING, "Missing X11/XF86keysym.h") endif() - find_path(QPA_QPLATFORMNATIVEINTERFACE_H qpa/qplatformnativeinterface.h PATHS ${Qt${QT_MAJOR_VERSION}Gui_PRIVATE_INCLUDE_DIRS}) + find_path(QPA_QPLATFORMNATIVEINTERFACE_H qpa/qplatformnativeinterface.h PATHS ${Qt${QT_VERSION_MAJOR}Gui_PRIVATE_INCLUDE_DIRS}) if(QPA_QPLATFORMNATIVEINTERFACE_H) set(HAVE_QPA_QPLATFORMNATIVEINTERFACE_H ON) - include_directories(${Qt${QT_MAJOR_VERSION}Gui_PRIVATE_INCLUDE_DIRS}) + include_directories(${Qt${QT_VERSION_MAJOR}Gui_PRIVATE_INCLUDE_DIRS}) message(STATUS "Have qpa/qplatformnativeinterface.h header.") else() message(STATUS "Missing qpa/qplatformnativeinterface.h header.") diff --git a/dist/unix/strawberry.spec.in b/dist/unix/strawberry.spec.in index 1516b42e..8ad87d0f 100644 --- a/dist/unix/strawberry.spec.in +++ b/dist/unix/strawberry.spec.in @@ -49,27 +49,27 @@ BuildRequires: pkgconfig(sqlite3) >= 3.9 BuildRequires: pkgconfig(taglib) %endif BuildRequires: pkgconfig(fftw3) -%if "@QT_MAJOR_VERSION@" == "5" && ( 0%{?fedora} || 0%{?rhel_version} || 0%{?centos} ) -BuildRequires: pkgconfig(Qt@QT_MAJOR_VERSION@Core) -BuildRequires: pkgconfig(Qt@QT_MAJOR_VERSION@Gui) -BuildRequires: pkgconfig(Qt@QT_MAJOR_VERSION@Widgets) -BuildRequires: pkgconfig(Qt@QT_MAJOR_VERSION@Concurrent) -BuildRequires: pkgconfig(Qt@QT_MAJOR_VERSION@Network) -BuildRequires: pkgconfig(Qt@QT_MAJOR_VERSION@Sql) -BuildRequires: pkgconfig(Qt@QT_MAJOR_VERSION@DBus) -BuildRequires: pkgconfig(Qt@QT_MAJOR_VERSION@Test) +%if "@QT_VERSION_MAJOR@" == "5" && ( 0%{?fedora} || 0%{?rhel_version} || 0%{?centos} ) +BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@Core) +BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@Gui) +BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@Widgets) +BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@Concurrent) +BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@Network) +BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@Sql) +BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@DBus) +BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@Test) %else -BuildRequires: cmake(Qt@QT_MAJOR_VERSION@Core) -BuildRequires: cmake(Qt@QT_MAJOR_VERSION@Gui) -BuildRequires: cmake(Qt@QT_MAJOR_VERSION@Widgets) -BuildRequires: cmake(Qt@QT_MAJOR_VERSION@Concurrent) -BuildRequires: cmake(Qt@QT_MAJOR_VERSION@Network) -BuildRequires: cmake(Qt@QT_MAJOR_VERSION@Sql) -BuildRequires: cmake(Qt@QT_MAJOR_VERSION@DBus) -BuildRequires: cmake(Qt@QT_MAJOR_VERSION@Test) +BuildRequires: cmake(Qt@QT_VERSION_MAJOR@Core) +BuildRequires: cmake(Qt@QT_VERSION_MAJOR@Gui) +BuildRequires: cmake(Qt@QT_VERSION_MAJOR@Widgets) +BuildRequires: cmake(Qt@QT_VERSION_MAJOR@Concurrent) +BuildRequires: cmake(Qt@QT_VERSION_MAJOR@Network) +BuildRequires: cmake(Qt@QT_VERSION_MAJOR@Sql) +BuildRequires: cmake(Qt@QT_VERSION_MAJOR@DBus) +BuildRequires: cmake(Qt@QT_VERSION_MAJOR@Test) %endif %if 0%{?suse_version} || 0%{?fedora_version} || 0%{?mageia} -BuildRequires: cmake(Qt@QT_MAJOR_VERSION@LinguistTools) +BuildRequires: cmake(Qt@QT_VERSION_MAJOR@LinguistTools) %endif BuildRequires: pkgconfig(gstreamer-1.0) BuildRequires: pkgconfig(gstreamer-app-1.0) @@ -88,10 +88,10 @@ BuildRequires: pkgconfig(libvlc) %endif %if 0%{?suse_version} - %if "@QT_MAJOR_VERSION@" == "6" + %if "@QT_VERSION_MAJOR@" == "6" Requires: qt6-sql-sqlite %endif - %if "@QT_MAJOR_VERSION@" == "5" + %if "@QT_VERSION_MAJOR@" == "5" Requires: libQt5Sql5-sqlite %endif %endif @@ -130,7 +130,7 @@ Features: %if 0%{?fedora} || 0%{?rhel_version} || 0%{?centos} export CXXFLAGS="-fPIC $RPM_OPT_FLAGS" %endif -%{cmake} -DCMAKE_BUILD_TYPE:STRING=Release -DQT_MAJOR_VERSION=@QT_MAJOR_VERSION@ +%{cmake} -DCMAKE_BUILD_TYPE:STRING=Release -DQT_VERSION_MAJOR=@QT_VERSION_MAJOR@ %if 0%{?centos} || (0%{?mageia} && 0%{?mageia} <= 7) %make_build %else