Skip to content

Commit 6ac9007

Browse files
committed
cmake: simplify version checks and general logic
1 parent 86132ea commit 6ac9007

File tree

3 files changed

+87
-151
lines changed

3 files changed

+87
-151
lines changed

CMakeLists.txt

Lines changed: 45 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.7.0)
1+
cmake_minimum_required(VERSION 3.16)
22

33
project(otter-browser)
44

@@ -64,40 +64,35 @@ set(CMAKE_AUTOMOC ON)
6464
set(CMAKE_CXX_EXTENSIONS OFF)
6565
set(CMAKE_CXX_STANDARD 11)
6666
set(CMAKE_CXX_STANDARD_REQUIRED ON)
67-
set(MIN_VERSION_QT5 5.15)
68-
set(MIN_VERSION_QT6 6.2)
69-
set(MIN_VERSION_QTWEBKIT 5.212)
7067

7168
include(FeatureSummary)
7269
include(GNUInstallDirs)
7370

7471
option(ALLOW_WITHOUT_WEB_BACKENDS "Allow to build without any web backends (build testing only)" OFF)
72+
option(ENABLE_CRASH_REPORTS "Enable built-in crash reporting (official builds only)" OFF)
73+
option(ENABLE_DBUS "Enable D-Bus based integration for notifications (only freedesktop.org compatible platforms)" ON)
74+
option(ENABLE_SPELLCHECK "Enable Hunspell based spell checking" OFF)
7575
option(ENABLE_QT6 "Build using Qt 6" ON)
76+
option(ENABLE_QTWEBENGINE "Enable QtWebEngine backend (requires Qt WebEngine version ${QT_MINIMUM_VERSION} or higher)" ON)
77+
option(ENABLE_QTWEBKIT "Enable QtWebKit backend (requires QtWebKit ${QT_MINIMUM_VERSION_WEBKIT})" OFF)
7678

77-
if (ENABLE_QT6)
78-
if (NOT ALLOW_WITHOUT_WEB_BACKENDS)
79-
option(ENABLE_QTWEBENGINE "Enable QtWebEngine backend (requires QtWebEngine version ${MIN_VERSION_QT6} or higher)" ON)
80-
endif ()
81-
find_package(Qt6 ${MIN_VERSION_QT6} REQUIRED COMPONENTS Core Core5Compat Gui Multimedia Network PrintSupport Qml Svg WebEngineWidgets Widgets)
79+
if (NOT ENABLE_QT6)
80+
set(QT_MAJOR_VERSION Qt5)
81+
set(QT_MINIMUM_VERSION 5.15)
82+
set(QT_MINIMUM_VERSION_WEBKIT 5.212)
8283
else ()
83-
if (NOT ALLOW_WITHOUT_WEB_BACKENDS)
84-
option(ENABLE_QTWEBENGINE "Enable QtWebEngine backend (requires QtWebEngine ${MIN_VERSION_QT5})" ON)
85-
option(ENABLE_QTWEBKIT "Enable QtWebKit backend (requires QtWebKit ${MIN_VERSION_QTWEBKIT})" ON)
86-
endif ()
87-
find_package(Qt5 ${MIN_VERSION_QT5} REQUIRED COMPONENTS Core Gui Multimedia Network PrintSupport Qml Svg Widgets)
88-
find_package(Qt5WebKitWidgets ${MIN_VERSION_QTWEBKIT} QUIET)
84+
set(QT_MAJOR_VERSION Qt6)
85+
set(QT_MINIMUM_VERSION 6.2)
86+
find_package(${QT_MAJOR_VERSION} REQUIRED COMPONENTS Core5Compat)
8987
endif ()
9088

91-
option(ENABLE_CRASH_REPORTS "Enable built-in crash reporting (official builds only)" OFF)
92-
option(ENABLE_DBUS "Enable D-Bus based integration for notifications (only freedesktop.org compatible platforms)" ON)
93-
option(ENABLE_SPELLCHECK "Enable Hunspell based spell checking" ON)
89+
find_package(${QT_MAJOR_VERSION} REQUIRED COMPONENTS Core Gui Multimedia Network PrintSupport Qml Svg Widgets)
9490

9591
if (ENABLE_SPELLCHECK)
9692
find_package(Hunspell 1.5.0 REQUIRED)
93+
set_package_properties(Hunspell PROPERTIES URL "https://hunspell.github.io/" DESCRIPTION "Generic spell checking support" TYPE OPTIONAL)
9794
endif ()
9895

99-
set_package_properties(Hunspell PROPERTIES URL "https://hunspell.github.io/" DESCRIPTION "Generic spell checking support" TYPE OPTIONAL)
100-
10196
set(OTTER_SOURCES
10297
src/main.cpp
10398
src/core/ActionExecutor.cpp
@@ -308,7 +303,7 @@ set(OTTER_SOURCES
308303
3rdparty/qrcodegen/qrcodegen.cpp
309304
)
310305

311-
set(OTTER_UI_SOURCES
306+
qt_wrap_ui(OTTER_UI
312307
src/ui/AcceptCookieDialog.ui
313308
src/ui/ActionParametersDialog.ui
314309
src/ui/AuthenticationDialog.ui
@@ -382,41 +377,17 @@ set(OTTER_UI_SOURCES
382377
src/modules/windows/windows/WindowsContentsWidget.ui
383378
)
384379

385-
if (ENABLE_QT6)
386-
qt6_add_resources(OTTER_RESOURCES
387-
resources/resources.qrc
388-
)
389-
390-
qt6_wrap_ui(OTTER_UI
391-
${OTTER_UI_SOURCES}
392-
)
393-
else ()
394-
qt5_add_resources(OTTER_RESOURCES
395-
resources/resources.qrc
396-
)
397-
398-
qt5_wrap_ui(OTTER_UI
399-
${OTTER_UI_SOURCES}
400-
)
401-
endif ()
380+
qt_add_resources(OTTER_RESOURCES
381+
resources/resources.qrc
382+
)
402383

403-
if (ENABLE_QT6)
404-
foreach (_current_dir ${Qt6Widgets_PRIVATE_INCLUDE_DIRS})
405-
if (EXISTS "${_current_dir}/private/qpixmapfilter_p.h")
406-
add_definitions(-DOTTER_ENABLE_STARTPAGEBLUR)
407-
include_directories(${Qt6Widgets_PRIVATE_INCLUDE_DIRS})
408-
break ()
409-
endif ()
410-
endforeach ()
411-
else ()
412-
foreach (_dir ${Qt5Widgets_PRIVATE_INCLUDE_DIRS})
413-
if (EXISTS "${_dir}/private/qpixmapfilter_p.h")
414-
add_definitions(-DOTTER_ENABLE_STARTPAGEBLUR)
415-
include_directories(${Qt5Widgets_PRIVATE_INCLUDE_DIRS})
416-
break ()
417-
endif ()
418-
endforeach ()
419-
endif ()
384+
foreach (_dir ${QT_MAJOR_VERSION}Widgets_PRIVATE_INCLUDE_DIRS})
385+
if (EXISTS "${_dir}/private/qpixmapfilter_p.h")
386+
add_definitions(-DOTTER_ENABLE_STARTPAGEBLUR)
387+
include_directories(${QT_MAJOR_VERSION}Widgets_PRIVATE_INCLUDE_DIRS})
388+
break ()
389+
endif ()
390+
endforeach ()
420391

421392
if (ENABLE_QTWEBENGINE)
422393
include(src/modules/backends/web/qtwebengine/CMakeLists.txt)
@@ -489,10 +460,6 @@ endif ()
489460
if (WIN32)
490461
add_definitions(-DUNICODE -D_UNICODE)
491462

492-
if (NOT ENABLE_QT6)
493-
find_package(Qt5 ${MIN_VERSION_QT5} QUIET COMPONENTS WinExtras)
494-
endif ()
495-
496463
if (MSVC)
497464
set(CMAKE_PREFIX_PATH $ENV{QTDIR})
498465
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MP")
@@ -513,10 +480,6 @@ if (WIN32)
513480
src/modules/platforms/windows/WindowsPlatformStyle.cpp
514481
)
515482
elseif (APPLE)
516-
if (NOT ENABLE_QT6)
517-
find_package(Qt5 ${MIN_VERSION_QT5} QUIET COMPONENTS MacExtras)
518-
endif ()
519-
520483
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.13)
521484
set(MACOSX_BUNDLE_BUNDLE_NAME "Otter Browser")
522485
set(MACOSX_BUNDLE_BUNDLE_VERSION ${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION})
@@ -534,16 +497,8 @@ elseif (APPLE)
534497

535498
set_source_files_properties(resources/icons/otter-browser.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
536499
elseif (UNIX)
537-
if (ENABLE_QT6)
538-
find_package(Qt6 ${MIN_VERSION_QT6} QUIET COMPONENTS DBus)
539-
if (TARGET Qt6::DBus AND ENABLE_DBUS)
540-
add_definitions(-DOTTER_ENABLE_DBUS)
541-
endif ()
542-
else ()
543-
find_package(Qt5 ${MIN_VERSION_QT5} QUIET COMPONENTS DBus)
544-
if (TARGET Qt5::DBus AND ENABLE_DBUS)
545-
add_definitions(-DOTTER_ENABLE_DBUS)
546-
endif ()
500+
if (TARGET ${QT_MAJOR_VERSION}::DBus AND ENABLE_DBUS)
501+
add_definitions(-DOTTER_ENABLE_DBUS)
547502
endif ()
548503

549504
set(OTTER_SOURCES
@@ -616,27 +571,13 @@ foreach (_library ${OTTER_LINK_LIBRARIES})
616571
target_link_libraries(otter-browser ${_library})
617572
endforeach ()
618573

619-
if (ENABLE_QT6)
620-
if (TARGET Qt6::WebEngineWidgets AND ENABLE_QTWEBENGINE)
621-
target_link_libraries(otter-browser Qt6::WebEngineCore Qt6::WebEngineWidgets)
622-
endif ()
623-
else ()
624-
if (TARGET Qt5::WebEngineWidgets AND ENABLE_QTWEBENGINE)
625-
target_link_libraries(otter-browser Qt5::WebEngineCore Qt5::WebEngineWidgets)
626-
endif ()
627-
endif ()
628-
629-
if (TARGET Qt5::WebKitWidgets AND ENABLE_QTWEBKIT)
630-
target_link_libraries(otter-browser Qt5::WebKit Qt5::WebKitWidgets)
631-
endif ()
632-
633574
if (TARGET Hunspell::Hunspell AND ENABLE_SPELLCHECK)
634575
target_link_libraries(otter-browser Hunspell::Hunspell)
635576
endif ()
636577

637578
if (WIN32)
638579
if (NOT ENABLE_QT6)
639-
target_link_libraries(Qt5::WinExtras)
580+
target_link_libraries(${QT_MAJOR_VERSION}::WinExtras)
640581
endif ()
641582
target_link_libraries(otter-browser ole32 shell32 advapi32 user32)
642583
elseif (APPLE)
@@ -646,29 +587,33 @@ elseif (APPLE)
646587
set_target_properties(otter-browser PROPERTIES OUTPUT_NAME "Otter Browser")
647588

648589
if (NOT ENABLE_QT6)
649-
target_link_libraries(otter-browser Qt5::MacExtras ${FRAMEWORK_Cocoa} ${FRAMEWORK_Foundation})
590+
target_link_libraries(otter-browser ${QT_MAJOR_VERSION}::MacExtras ${FRAMEWORK_Cocoa} ${FRAMEWORK_Foundation})
650591
endif ()
651592
target_link_libraries(otter-browser ${FRAMEWORK_Cocoa} ${FRAMEWORK_Foundation})
652593
elseif (UNIX)
653-
if (ENABLE_QT6)
654-
if (TARGET Qt6::DBus AND ENABLE_DBUS)
655-
target_link_libraries(otter-browser Qt6::DBus)
656-
endif ()
657-
else ()
658-
if (TARGET Qt5::DBus AND ENABLE_DBUS)
659-
target_link_libraries(otter-browser Qt5::DBus)
660-
endif ()
594+
if (TARGET ${QT_MAJOR_VERSION}::DBus AND ENABLE_DBUS)
595+
target_link_libraries(otter-browser ${QT_MAJOR_VERSION}::DBus)
661596
endif ()
662597

663598
if (ENABLE_CRASH_REPORTS)
664599
target_link_libraries(otter-browser -lpthread)
665600
endif ()
666601
endif ()
667602

603+
target_link_libraries(
604+
otter-browser
605+
${QT_MAJOR_VERSION}::Core
606+
${QT_MAJOR_VERSION}::Gui
607+
${QT_MAJOR_VERSION}::Multimedia
608+
${QT_MAJOR_VERSION}::Network
609+
${QT_MAJOR_VERSION}::PrintSupport
610+
${QT_MAJOR_VERSION}::Qml
611+
${QT_MAJOR_VERSION}::Svg
612+
${QT_MAJOR_VERSION}::Widgets
613+
)
614+
668615
if (ENABLE_QT6)
669-
target_link_libraries(otter-browser Qt6::Core Qt6::Core5Compat Qt6::Gui Qt6::Multimedia Qt6::Network Qt6::PrintSupport Qt6::Qml Qt6::Svg Qt6::Widgets)
670-
else ()
671-
target_link_libraries(otter-browser Qt5::Core Qt5::Gui Qt5::Multimedia Qt5::Network Qt5::PrintSupport Qt5::Qml Qt5::Svg Qt5::Widgets)
616+
target_link_libraries(otter-browser ${QT_MAJOR_VERSION}::Core5Compat)
672617
endif ()
673618

674619
set(XDG_APPS_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/applications CACHE FILEPATH "Install path for .desktop files")
Lines changed: 32 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,42 @@
1-
if (ENABLE_QT6)
2-
find_package(Qt6 ${MIN_VERSION_QT6} QUIET COMPONENTS WebEngineWidgets)
1+
if (NOT ENABLE_QTWEBENGINE)
2+
return ()
3+
endif ()
34

4-
set_package_properties(Qt6WebEngineCore PROPERTIES URL "https://www.qt.io/" DESCRIPTION "QtWebEngine based backend (core)" TYPE OPTIONAL)
5-
set_package_properties(Qt6WebEngineWidgets PROPERTIES URL "https://www.qt.io/" DESCRIPTION "QtWebEngine based backend (widgets)" TYPE OPTIONAL)
5+
find_package(${QT_MAJOR_VERSION} ${QT_MINIMUM_VERSION} REQUIRED COMPONENTS WebEngineCore WebEngineWidgets)
66

7-
if (NOT TARGET Qt6::WebEngineWidgets)
8-
return ()
9-
endif ()
7+
set_package_properties(${QT_MAJOR_VERSION}WebEngineCore PROPERTIES URL "https://www.qt.io/" DESCRIPTION "QtWebEngine based backend (core)" TYPE OPTIONAL)
8+
set_package_properties(${QT_MAJOR_VERSION}WebEngineWidgets PROPERTIES URL "https://www.qt.io/" DESCRIPTION "QtWebEngine based backend (widgets)" TYPE OPTIONAL)
109

11-
add_definitions(-DOTTER_ENABLE_QTWEBENGINE)
10+
if (NOT TARGET ${QT_MAJOR_VERSION}::WebEngineWidgets)
11+
return ()
12+
endif ()
1213

13-
list(APPEND OTTER_BACKENDS_WEB "QtWebEngine")
14-
list(APPEND OTTER_LINK_LIBRARIES Qt6::WebEngineCore Qt6::WebEngineWidgets)
14+
add_definitions(-DOTTER_ENABLE_QTWEBENGINE)
1515

16-
set(OTTER_SOURCES
17-
${OTTER_SOURCES}
18-
src/modules/backends/web/qtwebengine/QtWebEnginePage.cpp
19-
src/modules/backends/web/qtwebengine/QtWebEngineUrlRequestInterceptor.cpp
20-
src/modules/backends/web/qtwebengine/QtWebEngineTransfer.cpp
21-
src/modules/backends/web/qtwebengine/QtWebEngineWebBackend.cpp
22-
src/modules/backends/web/qtwebengine/QtWebEngineWebWidget.cpp
23-
)
16+
list(APPEND OTTER_BACKENDS_WEB "QtWebEngine")
17+
list(APPEND OTTER_LINK_LIBRARIES ${QT_MAJOR_VERSION}::WebEngineCore ${QT_MAJOR_VERSION}::WebEngineWidgets)
2418

25-
qt6_add_resources(OTTER_RESOURCES
26-
src/modules/backends/web/qtwebengine/QtWebEngineResources.qrc
27-
)
28-
else ()
29-
find_package(Qt5 ${MIN_VERSION_QT5} QUIET COMPONENTS WebEngineWidgets)
19+
set(OTTER_SOURCES
20+
${OTTER_SOURCES}
21+
src/modules/backends/web/qtwebengine/QtWebEnginePage.cpp
22+
src/modules/backends/web/qtwebengine/QtWebEngineUrlRequestInterceptor.cpp
23+
src/modules/backends/web/qtwebengine/QtWebEngineTransfer.cpp
24+
src/modules/backends/web/qtwebengine/QtWebEngineWebBackend.cpp
25+
src/modules/backends/web/qtwebengine/QtWebEngineWebWidget.cpp
26+
)
3027

31-
set_package_properties(Qt5WebEngineCore PROPERTIES URL "https://www.qt.io/" DESCRIPTION "QtWebEngine based backend (core)" TYPE OPTIONAL)
32-
set_package_properties(Qt5WebEngineWidgets PROPERTIES URL "https://www.qt.io/" DESCRIPTION "QtWebEngine based backend (widgets)" TYPE OPTIONAL)
28+
qt_add_resources(OTTER_RESOURCES
29+
src/modules/backends/web/qtwebengine/QtWebEngineResources.qrc
30+
)
3331

34-
if (NOT TARGET Qt5::WebEngineWidgets)
35-
return ()
32+
if (WIN32)
33+
if (NOT ENABLE_QT6)
34+
find_package(Qt5 QUIET COMPONENTS WinExtras)
3635
endif ()
37-
38-
add_definitions(-DOTTER_ENABLE_QTWEBENGINE)
39-
40-
list(APPEND OTTER_BACKENDS_WEB "QtWebEngine")
41-
list(APPEND OTTER_LINK_LIBRARIES Qt5::WebEngineCore Qt5::WebEngineWidgets)
42-
43-
set(OTTER_SOURCES
44-
${OTTER_SOURCES}
45-
src/modules/backends/web/qtwebengine/QtWebEnginePage.cpp
46-
src/modules/backends/web/qtwebengine/QtWebEngineUrlRequestInterceptor.cpp
47-
src/modules/backends/web/qtwebengine/QtWebEngineTransfer.cpp
48-
src/modules/backends/web/qtwebengine/QtWebEngineWebBackend.cpp
49-
src/modules/backends/web/qtwebengine/QtWebEngineWebWidget.cpp
50-
)
51-
52-
qt5_add_resources(OTTER_RESOURCES
53-
src/modules/backends/web/qtwebengine/QtWebEngineResources.qrc
54-
)
36+
elseif (APPLE)
37+
if (NOT ENABLE_QT6)
38+
find_package(Qt5 QUIET COMPONENTS MacExtras)
39+
endif ()
40+
elseif (UNIX AND ENABLE_DBUS)
41+
find_package(${QT_MAJOR_VERSION} ${QT_MINIMUM_VERSION} REQUIRED COMPONENTS DBus)
5542
endif ()

src/modules/backends/web/qtwebkit/CMakeLists.txt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
1-
find_package(Qt5WebKitWidgets 5.212.0 QUIET)
1+
if (NOT ENABLE_QTWEBKIT)
2+
return ()
3+
endif ()
4+
5+
find_package(${QT_MAJOR_VERSION}WebKitWidgets ${QT_MINIMUM_VERSION_WEBKIT} REQUIRED)
26

3-
set_package_properties(Qt5WebKit PROPERTIES URL "https://qtwebkit.github.io/" DESCRIPTION "QtWebKit based backend (core)" TYPE OPTIONAL)
4-
set_package_properties(Qt5WebKitWidgets PROPERTIES URL "https://qtwebkit.github.io/" DESCRIPTION "QtWebKit based backend (widgets)" TYPE OPTIONAL)
7+
set_package_properties(${QT_MAJOR_VERSION}WebKit PROPERTIES URL "https://qtwebkit.github.io/" DESCRIPTION "QtWebKit based backend (core)" OPTIONAL)
8+
set_package_properties(${QT_MAJOR_VERSION}WebKitWidgets PROPERTIES URL "https://qtwebkit.github.io/" DESCRIPTION "QtWebKit based backend (widgets)" TYPE OPTIONAL)
59

6-
if (NOT TARGET Qt5::WebKitWidgets)
10+
if (NOT TARGET ${QT_MAJOR_VERSION}::WebKitWidgets)
711
return ()
812
endif ()
913

1014
add_definitions(-DOTTER_ENABLE_QTWEBKIT -DOTTER_QTWEBKIT_PLUGINS_AVAILABLE -DQT_STATICPLUGIN)
1115

1216
list(APPEND OTTER_BACKENDS_WEB "QtWebKit")
13-
list(APPEND OTTER_LINK_LIBRARIES Qt5::WebKit Qt5::WebKitWidgets)
17+
list(APPEND OTTER_LINK_LIBRARIES ${QT_MAJOR_VERSION}::WebKit ${QT_MAJOR_VERSION}::WebKitWidgets)
1418

1519
set(OTTER_SOURCES
1620
${OTTER_SOURCES}
@@ -36,6 +40,6 @@ if (TARGET Hunspell::Hunspell AND ENABLE_SPELLCHECK)
3640
)
3741
endif ()
3842

39-
qt5_add_resources(OTTER_RESOURCES
43+
qt_add_resources(OTTER_RESOURCES
4044
src/modules/backends/web/qtwebkit/QtWebKitResources.qrc
4145
)

0 commit comments

Comments
 (0)