From 42022bdfd2a00ce3bc7f20b779fecd3b8fad59db Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Sat, 5 Aug 2023 01:52:47 +0200 Subject: [PATCH] Add CMake-based build system --- CMakeLists.txt | 178 ++++++++++++++++++++++++++++++++ lib/cmark/CMakeLists.txt | 24 +++++ lib/gumbo-parser/CMakeLists.txt | 17 +++ lib/luis-l-gist/CMakeLists.txt | 7 ++ 4 files changed, 226 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 lib/cmark/CMakeLists.txt create mode 100644 lib/gumbo-parser/CMakeLists.txt create mode 100644 lib/luis-l-gist/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..b66d837 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,178 @@ +cmake_minimum_required(VERSION 3.13) + +if(NOT KRISTALL_VERSION) + execute_process(COMMAND git describe --tags --abbrev=0 + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + OUTPUT_VARIABLE KRISTALL_CMAKE_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + execute_process(COMMAND git describe --tags + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + OUTPUT_VARIABLE KRISTALL_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +endif() + +# CMake requires the following format for versions: +# [.[.[.]]]] +string(REPLACE "V" "" KRISTALL_CMAKE_VERSION ${KRISTALL_CMAKE_VERSION}) +project(kristall VERSION ${KRISTALL_CMAKE_VERSION} LANGUAGES CXX) + +set(QT_VERSION_MAJOR 5) +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +# QXmpp requires C++17. +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(QT NAMES Qt6 Qt5 COMPONENTS + Multimedia MultimediaWidgets Network Widgets REQUIRED) +find_package(Qt${QT_VERSION_MAJOR} COMPONENTS + Multimedia MultimediaWidgets Network Widgets REQUIRED) + +set(PROJECT_SOURCES + src/browsertab.cpp + src/certificatehelper.cpp + src/cryptoidentity.cpp + src/dialogs/certificateiodialog.cpp + src/dialogs/certificatemanagementdialog.cpp + src/dialogs/certificateselectiondialog.cpp + src/dialogs/newidentitiydialog.cpp + src/dialogs/settingsdialog.cpp + src/documentoutlinemodel.cpp + src/documentstyle.cpp + src/favouritecollection.cpp + src/identitycollection.cpp + src/ioutil.cpp + src/localization.cpp + src/main.cpp + src/mainwindow.cpp + src/renderers/htmlrenderer.cpp + src/renderers/markdownrenderer.cpp + src/renderers/renderhelpers.cpp + src/renderers/textstyleinstance.cpp + src/widgets/browsertabbar.cpp + src/widgets/browsertabwidget.cpp + src/widgets/kristalltextbrowser.cpp + src/widgets/mediaplayer.cpp + src/mimeparser.cpp + src/protocolhandler.cpp + src/protocols/abouthandler.cpp + src/protocols/filehandler.cpp + src/protocols/fingerclient.cpp + src/protocols/geminiclient.cpp + src/protocols/gopherclient.cpp + src/protocols/webclient.cpp + src/protocolsetup.cpp + src/renderers/geminirenderer.cpp + src/renderers/gophermaprenderer.cpp + src/renderers/plaintextrenderer.cpp + src/ssltrust.cpp + src/tabbrowsinghistory.cpp + src/trustedhost.cpp + src/trustedhostcollection.cpp + src/widgets/elidelabel.cpp + src/widgets/searchbar.cpp + src/widgets/ssltrusteditor.cpp + src/widgets/favouritepopup.cpp + src/widgets/favouritebutton.cpp + src/cachehandler.cpp + src/widgets/searchbox.cpp + src/browsertab.ui + src/dialogs/certificateiodialog.ui + src/dialogs/certificatemanagementdialog.ui + src/dialogs/certificateselectiondialog.ui + src/dialogs/newidentitiydialog.ui + src/dialogs/settingsdialog.ui + src/mainwindow.ui + src/widgets/mediaplayer.ui + src/widgets/ssltrusteditor.ui + src/fonts.qrc + lib/BreezeStyleSheets/breeze.qrc + src/builtins.qrc + src/icons.qrc +) + +if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) + qt_add_executable(${PROJECT_NAME} + MANUAL_FINALIZATION + ${PROJECT_SOURCES} + ) +# Define target properties for Android with Qt 6 as: +# set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR +# ${CMAKE_CURRENT_SOURCE_DIR}/android) +# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation +else() + if(ANDROID) + add_library(${PROJECT_NAME} SHARED + ${PROJECT_SOURCES} + ) +# Define properties for Android with Qt 5 after find_package() calls as: +# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") + else() + add_executable(${PROJECT_NAME} + ${PROJECT_SOURCES} + ) + endif() +endif() + +message(STATUS "Building Kristall ${KRISTALL_VERSION}") + +target_compile_definitions(${PROJECT_NAME} PUBLIC + KRISTALL_VERSION=${KRISTALL_VERSION}) + +add_subdirectory(lib/luis-l-gist) +target_link_libraries(${PROJECT_NAME} PRIVATE luis-l-gist) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(cmark IMPORTED_TARGET cmark) + +if(cmark_FOUND) + target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::cmark) +else() + message(STATUS "Using in-tree cmark") + add_subdirectory(lib/cmark) + target_link_libraries(${PROJECT_NAME} PRIVATE cmark) +endif() + +pkg_check_modules(gumbo-parser IMPORTED_TARGET gumbo) + +if(gumbo_FOUND) + target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::gumbo-parser) +else() + message(STATUS "Using in-tree gumbo-parser") + add_subdirectory(lib/gumbo-parser) + target_link_libraries(${PROJECT_NAME} PRIVATE gumbo-parser) +endif() + +target_link_libraries(${PROJECT_NAME} PRIVATE + Qt${QT_VERSION_MAJOR}::Multimedia + Qt${QT_VERSION_MAJOR}::MultimediaWidgets + Qt${QT_VERSION_MAJOR}::Network + Qt${QT_VERSION_MAJOR}::Widgets) + +target_include_directories(${PROJECT_NAME} PRIVATE src) + +set_target_properties(${PROJECT_NAME} PROPERTIES + MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com + MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} + MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} + MACOSX_BUNDLE TRUE + WIN32_EXECUTABLE TRUE +) + +if(QT_VERSION_MAJOR EQUAL 6) + qt_finalize_executable(${PROJECT_NAME}) +endif() + +find_package(OpenSSL 3.0 REQUIRED) +target_link_libraries(${PROJECT_NAME} PRIVATE OpenSSL::SSL) + +if(NOT UNIX) + target_link_libraries(${PROJECT_NAME} PRIVATE iconv) +endif() diff --git a/lib/cmark/CMakeLists.txt b/lib/cmark/CMakeLists.txt new file mode 100644 index 0000000..28ce594 --- /dev/null +++ b/lib/cmark/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 3.13) +project(cmark C) + +set(sources + src/blocks.c + src/buffer.c + src/cmark.c + src/cmark_ctype.c + src/commonmark.c + src/houdini_href_e.c + src/houdini_html_e.c + src/houdini_html_u.c + src/inlines.c + src/iterator.c + src/node.c + src/references.c + src/render.c + src/scanners.c + src/utf8.c + src/html.c + src/xml.c) + +add_library(${PROJECT_NAME} ${sources}) +target_include_directories(${PROJECT_NAME} PUBLIC src) diff --git a/lib/gumbo-parser/CMakeLists.txt b/lib/gumbo-parser/CMakeLists.txt new file mode 100644 index 0000000..801316a --- /dev/null +++ b/lib/gumbo-parser/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.13) +project(gumbo-parser C) +set(sources + attribute.c + char_ref.c + error.c + gumbo-utf8.c + parser.c + string_buffer.c + string_piece.c + tag.c + tokenizer.c + util.c + vector.c +) +add_library(${PROJECT_NAME} ${sources}) +target_include_directories(${PROJECT_NAME} PUBLIC include PRIVATE .) diff --git a/lib/luis-l-gist/CMakeLists.txt b/lib/luis-l-gist/CMakeLists.txt new file mode 100644 index 0000000..c714c10 --- /dev/null +++ b/lib/luis-l-gist/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.13) +project(luis-l-gist CXX) +add_library(${PROJECT_NAME} interactiveview.cpp) +target_include_directories(${PROJECT_NAME} PUBLIC .) +find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED) +find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED) +target_link_libraries(${PROJECT_NAME} PUBLIC Qt${QT_VERSION_MAJOR}::Widgets)