Automatically detect Qt version

This commit is contained in:
jonas@jkvinge.net 2021-05-16 21:12:41 +02:00
parent 59897fdf55
commit 7d3ade7ae1
2 changed files with 76 additions and 69 deletions

View File

@ -132,65 +132,72 @@ find_package(FFTW3)
find_package(GTest) find_package(GTest)
find_library(GMOCK_LIBRARY gmock) find_library(GMOCK_LIBRARY gmock)
if(NOT QT_DEFAULT_MAJOR_VERSION) option(QT_VERSION_MAJOR "Qt version to use (5 or 6)")
set(QT_DEFAULT_MAJOR_VERSION 5) option(BUILD_WITH_QT5 "Build with Qt 5" OFF)
endif() option(BUILD_WITH_QT6 "Build with Qt 6" OFF)
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)
if(WITH_QT6) if(WITH_QT6)
set(BUILD_WITH_QT6 ON) set(BUILD_WITH_QT6 ON)
endif() endif()
if(QT_MAJOR_VERSION)
if(BUILD_WITH_QT5) set(QT_VERSION_MAJOR ${QT_MAJOR_VERSION})
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()
endif() endif()
if(QT_VERSION_MAJOR)
set(QT_DEFAULT_MAJOR_VERSION ${QT_VERSION_MAJOR})
endif()
set(QT_COMPONENTS Core Concurrent Widgets Network Sql) 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) if(DBUS_FOUND AND NOT WIN32)
list(APPEND QT_COMPONENTS DBus) list(APPEND QT_COMPONENTS DBus)
endif() 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}) if(BUILD_WITH_QT6 OR QT_VERSION_MAJOR EQUAL 6)
set(QT_VERSION_MAJOR 6 CACHE STRING "" FORCE)
set(QtCore_LIBRARIES Qt${QT_MAJOR_VERSION}::Core) set(BUILD_WITH_QT6 ON CACHE BOOL "" FORCE)
set(QtConcurrent_LIBRARIES Qt${QT_MAJOR_VERSION}::Concurrent) elseif(BUILD_WITH_QT5 OR QT_VERSION_MAJOR EQUAL 5)
set(QtGui_LIBRARIES Qt${QT_MAJOR_VERSION}::Gui) set(QT_VERSION_MAJOR 5 CACHE STRING "" FORCE)
set(QtWidgets_LIBRARIES Qt${QT_MAJOR_VERSION}::Widgets) set(BUILD_WITH_QT5 ON CACHE BOOL "" FORCE)
set(QtNetwork_LIBRARIES Qt${QT_MAJOR_VERSION}::Network) else()
set(QtSql_LIBRARIES Qt${QT_MAJOR_VERSION}::Sql) # Automatically detect Qt version.
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) find_package(QT NAMES Qt6 Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED)
if(Qt${QT_MAJOR_VERSION}DBus_FOUND) if(QT_FOUND AND QT_VERSION_MAJOR EQUAL 6)
set(QtDBus_LIBRARIES Qt${QT_MAJOR_VERSION}::DBus) set(BUILD_WITH_QT6 ON CACHE BOOL "" FORCE)
list(APPEND QT_LIBRARIES Qt${QT_MAJOR_VERSION}::DBus) set(QT_VERSION_MAJOR 6 CACHE STRING "" FORCE)
get_target_property(QT_DBUSXML2CPP_EXECUTABLE Qt${QT_MAJOR_VERSION}::qdbusxml2cpp LOCATION) elseif(QT_FOUND AND QT_VERSION_MAJOR EQUAL 5)
endif() set(BUILD_WITH_QT5 ON CACHE BOOL "" FORCE)
if(Qt${QT_MAJOR_VERSION}Test_FOUND) set(QT_VERSION_MAJOR 5 CACHE STRING "" FORCE)
set(QtTest_LIBRARIES Qt${QT_MAJOR_VERSION}::Test) else()
message(FATAL_ERROR "Missing Qt.")
endif()
endif() endif()
find_package(Qt${QT_MAJOR_VERSION} QUIET COMPONENTS LinguistTools CONFIG) if(QT_VERSION_MAJOR)
if(Qt${QT_MAJOR_VERSION}LinguistTools_FOUND) set(QT_DEFAULT_MAJOR_VERSION ${QT_VERSION_MAJOR})
set(QT_LCONVERT_EXECUTABLE Qt${QT_MAJOR_VERSION}::lconvert) 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() endif()
if(X11_FOUND) if(X11_FOUND)
@ -207,10 +214,10 @@ if(X11_FOUND)
message(WARNING, "Missing X11/XF86keysym.h") message(WARNING, "Missing X11/XF86keysym.h")
endif() 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) if(QPA_QPLATFORMNATIVEINTERFACE_H)
set(HAVE_QPA_QPLATFORMNATIVEINTERFACE_H ON) 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.") message(STATUS "Have qpa/qplatformnativeinterface.h header.")
else() else()
message(STATUS "Missing qpa/qplatformnativeinterface.h header.") message(STATUS "Missing qpa/qplatformnativeinterface.h header.")

View File

@ -49,27 +49,27 @@ BuildRequires: pkgconfig(sqlite3) >= 3.9
BuildRequires: pkgconfig(taglib) BuildRequires: pkgconfig(taglib)
%endif %endif
BuildRequires: pkgconfig(fftw3) BuildRequires: pkgconfig(fftw3)
%if "@QT_MAJOR_VERSION@" == "5" && ( 0%{?fedora} || 0%{?rhel_version} || 0%{?centos} ) %if "@QT_VERSION_MAJOR@" == "5" && ( 0%{?fedora} || 0%{?rhel_version} || 0%{?centos} )
BuildRequires: pkgconfig(Qt@QT_MAJOR_VERSION@Core) BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@Core)
BuildRequires: pkgconfig(Qt@QT_MAJOR_VERSION@Gui) BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@Gui)
BuildRequires: pkgconfig(Qt@QT_MAJOR_VERSION@Widgets) BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@Widgets)
BuildRequires: pkgconfig(Qt@QT_MAJOR_VERSION@Concurrent) BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@Concurrent)
BuildRequires: pkgconfig(Qt@QT_MAJOR_VERSION@Network) BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@Network)
BuildRequires: pkgconfig(Qt@QT_MAJOR_VERSION@Sql) BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@Sql)
BuildRequires: pkgconfig(Qt@QT_MAJOR_VERSION@DBus) BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@DBus)
BuildRequires: pkgconfig(Qt@QT_MAJOR_VERSION@Test) BuildRequires: pkgconfig(Qt@QT_VERSION_MAJOR@Test)
%else %else
BuildRequires: cmake(Qt@QT_MAJOR_VERSION@Core) BuildRequires: cmake(Qt@QT_VERSION_MAJOR@Core)
BuildRequires: cmake(Qt@QT_MAJOR_VERSION@Gui) BuildRequires: cmake(Qt@QT_VERSION_MAJOR@Gui)
BuildRequires: cmake(Qt@QT_MAJOR_VERSION@Widgets) BuildRequires: cmake(Qt@QT_VERSION_MAJOR@Widgets)
BuildRequires: cmake(Qt@QT_MAJOR_VERSION@Concurrent) BuildRequires: cmake(Qt@QT_VERSION_MAJOR@Concurrent)
BuildRequires: cmake(Qt@QT_MAJOR_VERSION@Network) BuildRequires: cmake(Qt@QT_VERSION_MAJOR@Network)
BuildRequires: cmake(Qt@QT_MAJOR_VERSION@Sql) BuildRequires: cmake(Qt@QT_VERSION_MAJOR@Sql)
BuildRequires: cmake(Qt@QT_MAJOR_VERSION@DBus) BuildRequires: cmake(Qt@QT_VERSION_MAJOR@DBus)
BuildRequires: cmake(Qt@QT_MAJOR_VERSION@Test) BuildRequires: cmake(Qt@QT_VERSION_MAJOR@Test)
%endif %endif
%if 0%{?suse_version} || 0%{?fedora_version} || 0%{?mageia} %if 0%{?suse_version} || 0%{?fedora_version} || 0%{?mageia}
BuildRequires: cmake(Qt@QT_MAJOR_VERSION@LinguistTools) BuildRequires: cmake(Qt@QT_VERSION_MAJOR@LinguistTools)
%endif %endif
BuildRequires: pkgconfig(gstreamer-1.0) BuildRequires: pkgconfig(gstreamer-1.0)
BuildRequires: pkgconfig(gstreamer-app-1.0) BuildRequires: pkgconfig(gstreamer-app-1.0)
@ -88,10 +88,10 @@ BuildRequires: pkgconfig(libvlc)
%endif %endif
%if 0%{?suse_version} %if 0%{?suse_version}
%if "@QT_MAJOR_VERSION@" == "6" %if "@QT_VERSION_MAJOR@" == "6"
Requires: qt6-sql-sqlite Requires: qt6-sql-sqlite
%endif %endif
%if "@QT_MAJOR_VERSION@" == "5" %if "@QT_VERSION_MAJOR@" == "5"
Requires: libQt5Sql5-sqlite Requires: libQt5Sql5-sqlite
%endif %endif
%endif %endif
@ -130,7 +130,7 @@ Features:
%if 0%{?fedora} || 0%{?rhel_version} || 0%{?centos} %if 0%{?fedora} || 0%{?rhel_version} || 0%{?centos}
export CXXFLAGS="-fPIC $RPM_OPT_FLAGS" export CXXFLAGS="-fPIC $RPM_OPT_FLAGS"
%endif %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) %if 0%{?centos} || (0%{?mageia} && 0%{?mageia} <= 7)
%make_build %make_build
%else %else