Skip to content

Commit 9a70cba

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

File tree

4 files changed

+94
-157
lines changed

4 files changed

+94
-157
lines changed

CMakeLists.txt

Lines changed: 36 additions & 106 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,39 +64,19 @@ 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)
75-
option(ENABLE_QT6 "Build using Qt 6" ON)
76-
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)
82-
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)
89-
endif ()
90-
9172
option(ENABLE_CRASH_REPORTS "Enable built-in crash reporting (official builds only)" OFF)
9273
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)
94-
95-
if (ENABLE_SPELLCHECK)
96-
find_package(Hunspell 1.5.0 REQUIRED)
97-
endif ()
74+
option(ENABLE_SPELLCHECK "Enable Hunspell based spell checking" OFF)
75+
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)
9878

99-
set_package_properties(Hunspell PROPERTIES URL "https://hunspell.github.io/" DESCRIPTION "Generic spell checking support" TYPE OPTIONAL)
79+
include(cmake/Dependencies.cmake)
10080

10181
set(OTTER_SOURCES
10282
src/main.cpp
@@ -308,7 +288,7 @@ set(OTTER_SOURCES
308288
3rdparty/qrcodegen/qrcodegen.cpp
309289
)
310290

311-
set(OTTER_UI_SOURCES
291+
qt_wrap_ui(OTTER_UI
312292
src/ui/AcceptCookieDialog.ui
313293
src/ui/ActionParametersDialog.ui
314294
src/ui/AuthenticationDialog.ui
@@ -382,41 +362,17 @@ set(OTTER_UI_SOURCES
382362
src/modules/windows/windows/WindowsContentsWidget.ui
383363
)
384364

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 ()
365+
qt_add_resources(OTTER_RESOURCES
366+
resources/resources.qrc
367+
)
402368

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 ()
369+
foreach (_dir ${QT_MAJOR_VERSION}Widgets_PRIVATE_INCLUDE_DIRS})
370+
if (EXISTS "${_dir}/private/qpixmapfilter_p.h")
371+
add_definitions(-DOTTER_ENABLE_STARTPAGEBLUR)
372+
include_directories(${QT_MAJOR_VERSION}Widgets_PRIVATE_INCLUDE_DIRS})
373+
break ()
374+
endif ()
375+
endforeach ()
420376

421377
if (ENABLE_QTWEBENGINE)
422378
include(src/modules/backends/web/qtwebengine/CMakeLists.txt)
@@ -489,10 +445,6 @@ endif ()
489445
if (WIN32)
490446
add_definitions(-DUNICODE -D_UNICODE)
491447

492-
if (NOT ENABLE_QT6)
493-
find_package(Qt5 ${MIN_VERSION_QT5} QUIET COMPONENTS WinExtras)
494-
endif ()
495-
496448
if (MSVC)
497449
set(CMAKE_PREFIX_PATH $ENV{QTDIR})
498450
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MP")
@@ -513,10 +465,6 @@ if (WIN32)
513465
src/modules/platforms/windows/WindowsPlatformStyle.cpp
514466
)
515467
elseif (APPLE)
516-
if (NOT ENABLE_QT6)
517-
find_package(Qt5 ${MIN_VERSION_QT5} QUIET COMPONENTS MacExtras)
518-
endif ()
519-
520468
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.13)
521469
set(MACOSX_BUNDLE_BUNDLE_NAME "Otter Browser")
522470
set(MACOSX_BUNDLE_BUNDLE_VERSION ${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION})
@@ -534,16 +482,8 @@ elseif (APPLE)
534482

535483
set_source_files_properties(resources/icons/otter-browser.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
536484
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 ()
485+
if (TARGET ${QT_MAJOR_VERSION}::DBus AND ENABLE_DBUS)
486+
add_definitions(-DOTTER_ENABLE_DBUS)
547487
endif ()
548488

549489
set(OTTER_SOURCES
@@ -616,27 +556,13 @@ foreach (_library ${OTTER_LINK_LIBRARIES})
616556
target_link_libraries(otter-browser ${_library})
617557
endforeach ()
618558

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-
633559
if (TARGET Hunspell::Hunspell AND ENABLE_SPELLCHECK)
634560
target_link_libraries(otter-browser Hunspell::Hunspell)
635561
endif ()
636562

637563
if (WIN32)
638564
if (NOT ENABLE_QT6)
639-
target_link_libraries(Qt5::WinExtras)
565+
target_link_libraries(${QT_MAJOR_VERSION}::WinExtras)
640566
endif ()
641567
target_link_libraries(otter-browser ole32 shell32 advapi32 user32)
642568
elseif (APPLE)
@@ -646,29 +572,33 @@ elseif (APPLE)
646572
set_target_properties(otter-browser PROPERTIES OUTPUT_NAME "Otter Browser")
647573

648574
if (NOT ENABLE_QT6)
649-
target_link_libraries(otter-browser Qt5::MacExtras ${FRAMEWORK_Cocoa} ${FRAMEWORK_Foundation})
575+
target_link_libraries(otter-browser ${QT_MAJOR_VERSION}::MacExtras ${FRAMEWORK_Cocoa} ${FRAMEWORK_Foundation})
650576
endif ()
651577
target_link_libraries(otter-browser ${FRAMEWORK_Cocoa} ${FRAMEWORK_Foundation})
652578
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 ()
579+
if (TARGET ${QT_MAJOR_VERSION}::DBus AND ENABLE_DBUS)
580+
target_link_libraries(otter-browser ${QT_MAJOR_VERSION}::DBus)
661581
endif ()
662582

663583
if (ENABLE_CRASH_REPORTS)
664584
target_link_libraries(otter-browser -lpthread)
665585
endif ()
666586
endif ()
667587

588+
target_link_libraries(
589+
otter-browser
590+
${QT_MAJOR_VERSION}::Core
591+
${QT_MAJOR_VERSION}::Gui
592+
${QT_MAJOR_VERSION}::Multimedia
593+
${QT_MAJOR_VERSION}::Network
594+
${QT_MAJOR_VERSION}::PrintSupport
595+
${QT_MAJOR_VERSION}::Qml
596+
${QT_MAJOR_VERSION}::Svg
597+
${QT_MAJOR_VERSION}::Widgets
598+
)
599+
668600
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)
601+
target_link_libraries(otter-browser ${QT_MAJOR_VERSION}::Core5Compat)
672602
endif ()
673603

674604
set(XDG_APPS_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/applications CACHE FILEPATH "Install path for .desktop files")

cmake/Dependencies.cmake

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
if (NOT ENABLE_QT6)
2+
set(QT_MAJOR_VERSION Qt5)
3+
set(QT_MINIMUM_VERSION 5.15)
4+
set(QT_MINIMUM_VERSION_WEBKIT 5.212)
5+
else ()
6+
set(QT_MAJOR_VERSION Qt6)
7+
set(QT_MINIMUM_VERSION 6.2)
8+
endif ()
9+
10+
find_package(${QT_MAJOR_VERSION} REQUIRED COMPONENTS Core Gui Multimedia Network PrintSupport Qml Svg Widgets)
11+
find_package(${QT_MAJOR_VERSION} REQUIRED COMPONENTS Core5Compat)
12+
13+
if (ENABLE_SPELLCHECK)
14+
find_package(Hunspell 1.5.0 REQUIRED)
15+
set_package_properties(Hunspell PROPERTIES URL "https://hunspell.github.io/" DESCRIPTION "Generic spell checking support" TYPE OPTIONAL)
16+
endif ()
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(${QT_MAJOR_VERSION} ${QT_MINIMUM_VERSION}} 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(${QT_MAJOR_VERSION} ${QT_MINIMUM_VERSION} QUIET COMPONENTS MacExtras)
39+
endif ()
40+
elseif (UNIX)
41+
find_package(${QT_MAJOR_VERSION} ${QT_MINIMUM_VERSION} QUIET 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)