From 00f251753e41bd1c65f9e4160fe5b267ce8385ba Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 30 Jun 2021 02:43:36 +0200 Subject: [PATCH 1/9] Use coeurl for networking Something is still wrong on shutdown, need to debug that. And CI will fail. --- CMakeLists.txt | 121 ++++++++++++++++++++++++++-------------- README.md | 7 ++- src/ChatPage.cpp | 4 +- src/LoginPage.cpp | 13 ++--- src/RegisterPage.cpp | 17 +++--- src/ui/RoomSettings.cpp | 2 +- 6 files changed, 97 insertions(+), 67 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ae4ce2fa..667cf29e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,29 +18,24 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON CACHE BOOL "compile as PIC by default") option(HUNTER_ENABLED "Enable Hunter package manager" OFF) include("cmake/HunterGate.cmake") HunterGate( - URL "https://github.com/cpp-pm/hunter/archive/v0.23.288.tar.gz" - SHA1 "6c9b2bc606d86ae31f96a62fc68f0a593024815b" -) + URL "https://github.com/cpp-pm/hunter/archive/v0.23.288.tar.gz" + SHA1 "6c9b2bc606d86ae31f96a62fc68f0a593024815b" + ) -option(USE_BUNDLED_BOOST "Use the bundled version of Boost." ${HUNTER_ENABLED}) -option(USE_BUNDLED_SPDLOG "Use the bundled version of spdlog." - ${HUNTER_ENABLED}) +option(USE_BUNDLED_SPDLOG "Use the bundled version of spdlog." ${HUNTER_ENABLED}) option(USE_BUNDLED_OLM "Use the bundled version of libolm." ${HUNTER_ENABLED}) -option(USE_BUNDLED_GTEST "Use the bundled version of Google Test." - ${HUNTER_ENABLED}) -option(USE_BUNDLED_CMARK "Use the bundled version of cmark." - ${HUNTER_ENABLED}) -option(USE_BUNDLED_JSON "Use the bundled version of nlohmann json." - ${HUNTER_ENABLED}) -option(USE_BUNDLED_OPENSSL "Use the bundled version of OpenSSL." - OFF) +option(USE_BUNDLED_GTEST "Use the bundled version of Google Test." ${HUNTER_ENABLED}) +option(USE_BUNDLED_CMARK "Use the bundled version of cmark." ${HUNTER_ENABLED}) +option(USE_BUNDLED_JSON "Use the bundled version of nlohmann json." ${HUNTER_ENABLED}) +option(USE_BUNDLED_OPENSSL "Use the bundled version of OpenSSL." OFF) option(USE_BUNDLED_MTXCLIENT "Use the bundled version of the Matrix Client library." ${HUNTER_ENABLED}) -option(USE_BUNDLED_LMDB "Use the bundled version of lmdb." - ${HUNTER_ENABLED}) -option(USE_BUNDLED_LMDBXX "Use the bundled version of lmdb++." - ${HUNTER_ENABLED}) -option(USE_BUNDLED_QTKEYCHAIN "Use the bundled version of Qt5Keychain." +option(USE_BUNDLED_LMDB "Use the bundled version of lmdb." ${HUNTER_ENABLED}) +option(USE_BUNDLED_LMDBXX "Use the bundled version of lmdb++." ${HUNTER_ENABLED}) +option(USE_BUNDLED_QTKEYCHAIN "Use the bundled version of Qt5Keychain." ${HUNTER_ENABLED}) +option(USE_BUNDLED_COEURL "Use a bundled version of the Curl wrapper" ${HUNTER_ENABLED}) +option(USE_BUNDLED_LIBEVENT "Use the bundled version of spdlog." ${HUNTER_ENABLED}) +option(USE_BUNDLED_LIBCURL "Use the bundled version of spdlog." ${HUNTER_ENABLED}) list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") @@ -119,6 +114,38 @@ if (BUILD_DOCS) endif (DOXYGEN_FOUND) endif() +# +## coeurl +# +## Need to repeat all libevent deps?!? +if (USE_BUNDLED_LIBEVENT) + hunter_add_package(Libevent) + find_package(Libevent CONFIG REQUIRED) +else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(libevent_core REQUIRED IMPORTED_TARGET libevent_core) + if (WIN32) + pkg_check_modules(libevent_windows REQUIRED IMPORTED_TARGET libevent_windows) + else() + pkg_check_modules(libevent_pthreads REQUIRED IMPORTED_TARGET + libevent_pthreads) + endif() +endif() + +# curl +if (USE_BUNDLED_LIBCURL) + hunter_add_package(CURL) + find_package(CURL CONFIG REQUIRED) +else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(libcurl REQUIRED IMPORTED_TARGET libcurl) +endif() + +# spdlog +if(USE_BUNDLED_SPDLOG) + hunter_add_package(spdlog) +endif() +find_package(spdlog 1.0.0 CONFIG REQUIRED) # # LMDB @@ -156,7 +183,7 @@ if (USE_BUNDLED_QTKEYCHAIN) set(BUILD_TEST_APPLICATION OFF CACHE INTERNAL "") FetchContent_MakeAvailable(qt5keychain) else() -find_package(Qt5Keychain REQUIRED) + find_package(Qt5Keychain REQUIRED) endif() if (APPLE) @@ -261,7 +288,7 @@ set(SRC_FILES # Emoji src/emoji/EmojiModel.cpp - src/emoji/Provider.cpp + src/emoji/Provider.cpp # Timeline @@ -301,8 +328,8 @@ set(SRC_FILES src/ui/ToggleButton.cpp src/ui/UserProfile.cpp - # Generic notification stuff - src/notifications/Manager.cpp + # Generic notification stuff + src/notifications/Manager.cpp src/AvatarProvider.cpp src/BlurhashProvider.cpp @@ -339,13 +366,6 @@ set(SRC_FILES include(FeatureSummary) -if(USE_BUNDLED_BOOST) - hunter_add_package(Boost COMPONENTS iostreams system thread) -endif() -find_package(Boost 1.70 REQUIRED - COMPONENTS iostreams - system - thread) if(USE_BUNDLED_OPENSSL) hunter_add_package(OpenSSL) @@ -417,10 +437,10 @@ set_package_properties(nlohmann_json PROPERTIES if(USE_BUNDLED_LMDBXX) include(FetchContent) FetchContent_Declare( - lmdbxx - URL "https://raw.githubusercontent.com/hoytech/lmdbxx/1.0.0/lmdb++.h" - DOWNLOAD_NO_EXTRACT TRUE - ) + lmdbxx + URL "https://raw.githubusercontent.com/hoytech/lmdbxx/1.0.0/lmdb++.h" + DOWNLOAD_NO_EXTRACT TRUE + ) if(NOT lmdbxx_POPULATED) FetchContent_Populate(lmdbxx) endif() @@ -604,14 +624,11 @@ target_include_directories(nheko PRIVATE src includes third_party/blurhash third # Fixup bundled keychain include dirs if (USE_BUNDLED_QTKEYCHAIN) -target_include_directories(nheko PRIVATE ${qt5keychain_SOURCE_DIR} ${qt5keychain_BINARY_DIR}) + target_include_directories(nheko PRIVATE ${qt5keychain_SOURCE_DIR} ${qt5keychain_BINARY_DIR}) endif() target_link_libraries(nheko PRIVATE MatrixClient::MatrixClient - Boost::iostreams - Boost::system - Boost::thread cmark::cmark spdlog::spdlog Qt5::Widgets @@ -628,11 +645,11 @@ target_link_libraries(nheko PRIVATE SingleApplication::SingleApplication) if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16.0") -target_precompile_headers(nheko - PRIVATE - - - ) + target_precompile_headers(nheko + PRIVATE + + + ) endif() if (TARGET PkgConfig::GSTREAMER) @@ -644,6 +661,24 @@ if (TARGET PkgConfig::GSTREAMER) endif() endif() +if(USE_BUNDLED_COEURL) + include(FetchContent) + FetchContent_Declare( + coeurl + GIT_REPOSITORY https://nheko.im/Nheko-Reborn/coeurl.git + GIT_TAG 417821a07cfe4429b08a2efed5e480a498087afd + ) + FetchContent_MakeAvailable(coeurl) + target_link_libraries(nheko PUBLIC coeurl::coeurl) +elseif(coeurl_DIR) + find_package(coeurl CONFIG REQUIRED) + target_link_libraries(nheko PUBLIC coeurl::coeurl) +else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(coeurl REQUIRED IMPORTED_TARGET coeurl) + target_link_libraries(nheko PUBLIC PkgConfig::coeurl) +endif() + if(MSVC) target_link_libraries(nheko PRIVATE ntdll) endif() diff --git a/README.md b/README.md index 9904ebd8..801716bd 100644 --- a/README.md +++ b/README.md @@ -136,10 +136,10 @@ choco install nheko-reborn - Qt5 (5.12 or greater). Required for overlapping hover handlers in Qml. - CMake 3.15 or greater. (Lower version may work, but may break boost linking) - [mtxclient](https://github.com/Nheko-Reborn/mtxclient) +- [coeurl](https://nheko.im/nheko-reborn/coeurl) - [LMDB](https://symas.com/lightning-memory-mapped-database/) - [lmdb++](https://github.com/hoytech/lmdbxx) - [cmark](https://github.com/commonmark/cmark) 0.29 or greater. -- Boost 1.70 or greater. - [libolm](https://gitlab.matrix.org/matrix-org/olm) - [spdlog](https://github.com/gabime/spdlog) - [GStreamer](https://gitlab.freedesktop.org/gstreamer) 1.18.0 or greater (optional, needed for VoIP support). @@ -163,7 +163,6 @@ If you experience build issues and you are trying to link `mtxclient` library wi The bundle flags are currently: -- USE_BUNDLED_BOOST - USE_BUNDLED_SPDLOG - USE_BUNDLED_OLM - USE_BUNDLED_GTEST @@ -173,7 +172,9 @@ The bundle flags are currently: - USE_BUNDLED_MTXCLIENT - USE_BUNDLED_LMDB - USE_BUNDLED_LMDBXX -- USE_BUNDLED_TWEENY +- USE_BUNDLED_COEURL +- USE_BUNDLED_LIBCURL +- USE_BUNDLED_LIBEVENT A note on bundled OpenSSL: You need to explicitly enable it and it will not be using your system certificate directory by default, if you enable it. You need to override that at runtime with the SSL_CERT_FILE variable. On Windows it will still be using your system certificates though, since it loads them from the system store instead of the OpenSSL directory. diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 0f16f205..ca36232e 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -550,7 +550,7 @@ ChatPage::startInitialSync() nhlog::net()->error("initial sync error: {} {} {} {}", err->parse_error, status_code, - err->error_code.message(), + err->error_code, err_code); // non http related errors @@ -677,7 +677,7 @@ ChatPage::trySync() nhlog::net()->error("initial sync error: {} {} {} {}", err->parse_error, status_code, - err->error_code.message(), + err->error_code, err_code); emit tryDelayedSyncCb(); return; diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index c914d66f..f53d81ba 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -263,9 +263,7 @@ LoginPage::onMatrixIdEntered() http::client()->well_known([this](const mtx::responses::WellKnown &res, mtx::http::RequestErr err) { if (err) { - using namespace boost::beast::http; - - if (err->status_code == status::not_found) { + if (err->status_code == 404) { nhlog::net()->info("Autodiscovery: No .well-known."); checkHomeserverVersion(); return; @@ -282,8 +280,9 @@ LoginPage::onMatrixIdEntered() emit versionErrorCb(tr("Autodiscovery failed. Unknown error when " "requesting .well-known.")); nhlog::net()->error("Autodiscovery failed. Unknown error when " - "requesting .well-known. {}", - err->error_code.message()); + "requesting .well-known. {} {}", + err->status_code, + err->error_code); return; } @@ -301,9 +300,7 @@ LoginPage::checkHomeserverVersion() http::client()->versions( [this](const mtx::responses::Versions &, mtx::http::RequestErr err) { if (err) { - using namespace boost::beast::http; - - if (err->status_code == status::not_found) { + if (err->status_code == 404) { emit versionErrorCb(tr("The required endpoints were not found. " "Possibly not a Matrix server.")); return; diff --git a/src/RegisterPage.cpp b/src/RegisterPage.cpp index 36fd71a8..1588d07d 100644 --- a/src/RegisterPage.cpp +++ b/src/RegisterPage.cpp @@ -289,7 +289,7 @@ RegisterPage::RegisterPage(QWidget *parent) } // The server requires registration flows. - if (err->status_code == boost::beast::http::status::unauthorized) { + if (err->status_code == 401) { if (err->matrix_error.unauthorized.flows.empty()) { nhlog::net()->warn( "failed to retrieve registration flows: ({}) " @@ -431,9 +431,7 @@ RegisterPage::onRegisterButtonClicked() [this, username, password](const mtx::responses::WellKnown &res, mtx::http::RequestErr err) { if (err) { - using namespace boost::beast::http; - - if (err->status_code == status::not_found) { + if (err->status_code == 404) { nhlog::net()->info("Autodiscovery: No .well-known."); checkVersionAndRegister(username, password); return; @@ -450,8 +448,9 @@ RegisterPage::onRegisterButtonClicked() emit versionErrorCb(tr("Autodiscovery failed. Unknown error when " "requesting .well-known.")); nhlog::net()->error("Autodiscovery failed. Unknown error when " - "requesting .well-known. {}", - err->error_code.message()); + "requesting .well-known. {} {}", + err->status_code, + err->error_code); return; } @@ -471,9 +470,7 @@ RegisterPage::checkVersionAndRegister(const std::string &username, const std::st http::client()->versions( [this, username, password](const mtx::responses::Versions &, mtx::http::RequestErr err) { if (err) { - using namespace boost::beast::http; - - if (err->status_code == status::not_found) { + if (err->status_code == 404) { emit versionErrorCb(tr("The required endpoints were not found. " "Possibly not a Matrix server.")); return; @@ -504,7 +501,7 @@ RegisterPage::checkVersionAndRegister(const std::string &username, const std::st } // The server requires registration flows. - if (err->status_code == boost::beast::http::status::unauthorized) { + if (err->status_code == 401) { if (err->matrix_error.unauthorized.flows.empty()) { nhlog::net()->warn( "failed to retrieve registration flows1: ({}) " diff --git a/src/ui/RoomSettings.cpp b/src/ui/RoomSettings.cpp index 0bc8759e..f78ef09b 100644 --- a/src/ui/RoomSettings.cpp +++ b/src/ui/RoomSettings.cpp @@ -181,7 +181,7 @@ RoomSettings::RoomSettings(QString roomid, QObject *parent) roomid_.toStdString(), [this](const mtx::pushrules::PushRule &rule, mtx::http::RequestErr &err) { if (err) { - if (err->status_code == boost::beast::http::status::not_found) + if (err->status_code == 404) http::client()->get_pushrules( "global", "room", From 2c307a4dee59490615ce57fac1001256ec5b5d3d Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 30 Jun 2021 12:21:57 +0200 Subject: [PATCH 2/9] Fix error message for /sync --- src/ChatPage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index ca36232e..6003eb85 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -674,7 +674,7 @@ ChatPage::trySync() return; } - nhlog::net()->error("initial sync error: {} {} {} {}", + nhlog::net()->error("sync error: {} {} {} {}", err->parse_error, status_code, err->error_code, From 590395a08b60c74c0743fd7dcce8b93ad557428d Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 30 Jun 2021 12:22:22 +0200 Subject: [PATCH 3/9] Fix too many newlines in reply fallback --- src/timeline/InputBar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp index c309daab..b0747a7c 100644 --- a/src/timeline/InputBar.cpp +++ b/src/timeline/InputBar.cpp @@ -296,7 +296,7 @@ InputBar::message(QString msg, MarkdownOverride useMarkdown, bool rainbowify) firstLine = false; body = QString("> <%1> %2\n").arg(related.quoted_user).arg(line); } else { - body = QString("%1\n> %2\n").arg(body).arg(line); + body += QString("> %1\n").arg(line); } } From 94e21ea2eae1cde38c9377072c426ade3675d587 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 30 Jun 2021 12:45:41 +0200 Subject: [PATCH 4/9] Add curl deps to CI --- .gitlab-ci.yml | 18 +++++++++++------- AppImageBuilder.yml | 3 +++ CMakeLists.txt | 4 ++-- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8c6111eb..379443fe 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -27,20 +27,21 @@ build-gcc7: - update-alternatives --install /usr/bin/g++ g++ "/usr/bin/${CXX}" 10 - update-alternatives --set gcc "/usr/bin/${CC}" - update-alternatives --set g++ "/usr/bin/${CXX}" + - rm -rf ../.hunter && mv .hunter ../.hunter || true script: - export PATH="/usr/lib/ccache:${PATH}" - export CMAKE_BUILD_PARALLEL_LEVEL=$(cat /proc/cpuinfo | awk '/^processor/{print $3}' | wc -l) - export PATH="/usr/local/bin/:${PATH}" - . "/opt/qt${QT_PKG}/bin/qt${QT_PKG}-env.sh" || true - - mkdir -p .deps/usr .hunter - - mkdir -p build - cmake -GNinja -H. -Bbuild -DCMAKE_INSTALL_PREFIX=.deps/usr - -DHUNTER_ROOT=".hunter" + -DHUNTER_ROOT="../.hunter" -DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF -DUSE_BUNDLED_OPENSSL=ON -DUSE_BUNDLED_LMDB=OFF -DCMAKE_BUILD_TYPE=Release -DHUNTER_CONFIGURATION_TYPES=Release -DCI_BUILD=ON - cmake --build build + after_script: + - mv ../.hunter .hunter cache: key: "$CI_JOB_NAME" paths: @@ -55,13 +56,14 @@ build-macos: - brew reinstall --force python3 - brew bundle --file=./.ci/macos/Brewfile --force --cleanup - pip3 install dmgbuild + - rm -rf ../.hunter && mv .hunter ../.hunter || true script: - export PATH=/usr/local/opt/qt/bin/:${PATH} - export CMAKE_PREFIX_PATH=/usr/local/opt/qt5 - cmake -GNinja -H. -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=.deps/usr - -DHUNTER_ROOT=".hunter" + -DHUNTER_ROOT="../.hunter" -DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo -DHUNTER_CONFIGURATION_TYPES=RelWithDebInfo -DUSE_BUNDLED_OPENSSL=ON @@ -69,6 +71,7 @@ build-macos: -DCI_BUILD=ON - cmake --build build after_script: + - mv ../.hunter .hunter - ./.ci/macos/deploy.sh - ./.ci/upload-nightly-gitlab.sh artifacts/nheko-${CI_COMMIT_SHORT_SHA}.dmg artifacts: @@ -164,7 +167,7 @@ appimage-amd64: # update appimage-builder (optional) - pip3 install --upgrade git+https://www.opencode.net/azubieta/appimagecraft.git - - apt-get install -y qt5-default qtdeclarative5-dev qttools5-dev qtscript5-dev qtquickcontrols2-5-dev qtmultimedia5-dev libqt5svg5-dev liblmdb-dev libssl-dev git ninja-build qt5keychain-dev libgtest-dev ccache + - apt-get install -y qt5-default qtdeclarative5-dev qttools5-dev qtscript5-dev qtquickcontrols2-5-dev qtmultimedia5-dev libqt5svg5-dev liblmdb-dev libssl-dev git ninja-build qt5keychain-dev libgtest-dev ccache libevent-pthreads-2.1-6 libcurl4-openssl-dev - wget https://github.com/Kitware/CMake/releases/download/v3.19.0/cmake-3.19.0-Linux-x86_64.sh && sh cmake-3.19.0-Linux-x86_64.sh --skip-license --prefix=/usr/local - /usr/sbin/update-ccache-symlinks script: @@ -174,7 +177,6 @@ appimage-amd64: -DHUNTER_ROOT=".hunter" -DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF -DHUNTER_CONFIGURATION_TYPES=Release - -DUSE_BUNDLED_BOOST=ON -DUSE_BUNDLED_SPDLOG=ON -DUSE_BUNDLED_OLM=ON -DUSE_BUNDLED_GTEST=OFF @@ -184,8 +186,10 @@ appimage-amd64: -DUSE_BUNDLED_MTXCLIENT=ON -DUSE_BUNDLED_LMDB=OFF -DUSE_BUNDLED_LMDBXX=ON - -DUSE_BUNDLED_TWEENY=ON -DUSE_BUNDLED_QTKEYCHAIN=OFF + -DUSE_BUNDLED_LIBEVENT=OFF + -DUSE_BUNDLED_LIBCURL=OFF + -DUSE_BUNDLED_COEURL=ON - DESTDIR=`pwd`/AppDir ninja -C build install/local - DESTDIR=`pwd`/AppDir ninja -C build _deps/cmark-build/src/install - mkdir -p AppDir/usr/lib/x86_64-linux-gnu AppDir/lib/x86_64-linux-gnu diff --git a/AppImageBuilder.yml b/AppImageBuilder.yml index fab81da9..f83ce90a 100644 --- a/AppImageBuilder.yml +++ b/AppImageBuilder.yml @@ -38,8 +38,11 @@ AppDir: - kimageformat-plugins - libbs2b0 - libbz2-1.0 + - libcurl4 - libelf1 - libexpat1 + - libevent-core-2.1-6 + - libevent-pthreads-2.1-6 - libhogweed4 - libjpeg-turbo8 - libkf5archive5 diff --git a/CMakeLists.txt b/CMakeLists.txt index 667cf29e..e18b651b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,8 +18,8 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON CACHE BOOL "compile as PIC by default") option(HUNTER_ENABLED "Enable Hunter package manager" OFF) include("cmake/HunterGate.cmake") HunterGate( - URL "https://github.com/cpp-pm/hunter/archive/v0.23.288.tar.gz" - SHA1 "6c9b2bc606d86ae31f96a62fc68f0a593024815b" + URL "https://github.com/cpp-pm/hunter/archive/v0.23.305.tar.gz" + SHA1 "fc8d7a6dac2fa23681847b3872d88d3839b657b0" ) option(USE_BUNDLED_SPDLOG "Use the bundled version of spdlog." ${HUNTER_ENABLED}) From a2c4d0875c91e955cfe1c94cdbc2e605c0599392 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 30 Jun 2021 13:05:18 +0200 Subject: [PATCH 5/9] Update mtxclient and add coeurl to flatpak --- CMakeLists.txt | 2 +- io.github.NhekoReborn.Nheko.yaml | 18 +++++++----------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e18b651b..320b4678 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -376,7 +376,7 @@ if(USE_BUNDLED_MTXCLIENT) FetchContent_Declare( MatrixClient GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git - GIT_TAG fdb2016eff4f2e91f17c343e9fcb0bfab5e78b63 + GIT_TAG 9ecaefe377d4dab688caee186e4a263cb7f105e8 ) set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "") set(BUILD_LIB_TESTS OFF CACHE INTERNAL "") diff --git a/io.github.NhekoReborn.Nheko.yaml b/io.github.NhekoReborn.Nheko.yaml index 564b08a9..3ce69e72 100644 --- a/io.github.NhekoReborn.Nheko.yaml +++ b/io.github.NhekoReborn.Nheko.yaml @@ -142,6 +142,12 @@ modules: tag: 1.18.3 type: git url: https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad.git + - buildsystem: meson + name: coeurl + sources: + - commit: 417821a07cfe4429b08a2efed5e480a498087afd + type: git + url: https://nheko.im/nheko-reborn/coeurl.git - config-opts: - -DBUILD_LIB_TESTS=OFF - -DBUILD_LIB_EXAMPLES=OFF @@ -150,19 +156,9 @@ modules: buildsystem: cmake-ninja name: mtxclient sources: - - commit: fdb2016eff4f2e91f17c343e9fcb0bfab5e78b63 + - commit: 9ecaefe377d4dab688caee186e4a263cb7f105e8 type: git url: https://github.com/Nheko-Reborn/mtxclient.git - - config-opts: - - -DCMAKE_BUILD_TYPE=Release - - -DTWEENY_BUILD_DOCUMENTATION=OFF - - -DTWEENY_BUILD_EXAMPLES=OFF - buildsystem: cmake-ninja - name: tweeny - sources: - - sha256: 482857256a7235646004682912badb6521d361ed6987c8ebdae7986bf64ce694 - type: archive - url: https://github.com/mobius3/tweeny/archive/43f4130f7e4a67c19d870b60864bc2862c19b81f.tar.gz - config-opts: - -DCMAKE_BUILD_TYPE=Release - -DLMDBXX_INCLUDE_DIR=.deps/lmdbxx From 9f7064676c238585713144d9b52b8aa789eb9fd0 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 30 Jun 2021 15:01:41 +0200 Subject: [PATCH 6/9] Get rid of boost dependency for stacktraces --- CMakeLists.txt | 9 ++++++++- cmake/nheko.h | 5 ++++- src/Olm.h | 2 -- src/main.cpp | 39 ++++++++++++++++++++++++++++++++++++--- 4 files changed, 48 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 320b4678..4b023d48 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -265,7 +265,10 @@ set(PROJECT_VERSION ${CPACK_PACKAGE_VERSION}) message(STATUS "Version: ${PROJECT_VERSION}") cmake_host_system_information(RESULT BUILD_HOST QUERY HOSTNAME) -set(BUILD_USER $ENV{USER}) + +include(CheckSymbolExists) +check_symbol_exists(backtrace_symbols_fd "execinfo.h" HAVE_BACKTRACE_SYMBOLS_FD) + configure_file(cmake/nheko.h config/nheko.h) @@ -607,6 +610,10 @@ if(WIN32) target_compile_definitions(nheko PRIVATE _WIN32_WINNT=0x0601) else() add_executable (nheko ${OS_BUNDLE} ${NHEKO_DEPS}) + + if (HAVE_BACKTRACE_SYMBOLS_FD AND NOT CMAKE_BUILD_TYPE STREQUAL "Release") + set_target_properties(nheko PROPERTIES ENABLE_EXPORTS ON) + endif() endif() if(APPLE) diff --git a/cmake/nheko.h b/cmake/nheko.h index bf1a54fe..c2329917 100644 --- a/cmake/nheko.h +++ b/cmake/nheko.h @@ -1,6 +1,9 @@ namespace nheko { constexpr auto version = "${PROJECT_VERSION}"; -constexpr auto build_user = "${BUILD_USER}@${BUILD_HOST}"; constexpr auto build_os = "${CMAKE_HOST_SYSTEM_NAME}"; constexpr auto enable_debug_log = ${SPDLOG_DEBUG_ON}; } + +// clang-format off +#define HAVE_BACKTRACE_SYMBOLS_FD ${HAVE_BACKTRACE_SYMBOLS_FD} +// clang-format on diff --git a/src/Olm.h b/src/Olm.h index d356cb55..8479f4f2 100644 --- a/src/Olm.h +++ b/src/Olm.h @@ -4,8 +4,6 @@ #pragma once -#include - #include #include #include diff --git a/src/main.cpp b/src/main.cpp index fe1a9ee3..f4484f94 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -40,15 +40,48 @@ QQmlDebuggingEnabler enabler; #endif -#if defined(Q_OS_LINUX) -#include +#if HAVE_BACKTRACE_SYMBOLS_FD #include +#include +#include +#include void stacktraceHandler(int signum) { std::signal(signum, SIG_DFL); - boost::stacktrace::safe_dump_to("./nheko-backtrace.dump"); + + // boost::stacktrace::safe_dump_to("./nheko-backtrace.dump"); + + // see + // https://stackoverflow.com/questions/77005/how-to-automatically-generate-a-stacktrace-when-my-program-crashes/77336#77336 + void *array[50]; + size_t size; + + // get void*'s for all entries on the stack + size = backtrace(array, 50); + + // print out all the frames to stderr + fprintf(stderr, "Error: signal %d:\n", signum); + backtrace_symbols_fd(array, size, STDERR_FILENO); + + int file = ::open("/tmp/nheko-crash.dump", + O_CREAT | O_WRONLY | O_TRUNC +#if defined(S_IWUSR) && defined(S_IRUSR) + , + S_IWUSR | S_IRUSR +#elif defined(S_IWRITE) && defined(S_IREAD) + , + S_IWRITE | S_IREAD +#endif + ); + if (file != -1) { + constexpr char header[] = "Error: signal\n"; + write(file, header, std::size(header) - 1); + backtrace_symbols_fd(array, size, file); + close(file); + } + std::raise(SIGABRT); } From e5776f717786c331a65366c264f0b0ff1f2d17a8 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 30 Jun 2021 15:01:59 +0200 Subject: [PATCH 7/9] Add libevent in flatpak --- io.github.NhekoReborn.Nheko.yaml | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/io.github.NhekoReborn.Nheko.yaml b/io.github.NhekoReborn.Nheko.yaml index 3ce69e72..bfc25c5c 100644 --- a/io.github.NhekoReborn.Nheko.yaml +++ b/io.github.NhekoReborn.Nheko.yaml @@ -37,6 +37,19 @@ modules: - prefix=/app no-autogen: true subdir: libraries/liblmdb + - name: libevent + buildsystem: autotools + config-opts: + - --disable-shared + - --prefix=/app + - --disable-openssl + sources: + - sha256: 92e6de1be9ec176428fd2367677e61ceffc2ee1cb119035037a27d346b0403bb + type: archive + url: https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz + make-install-args: + - prefix=/app + no-autogen: true - name: cmark buildsystem: cmake-ninja builddir: true @@ -87,16 +100,6 @@ modules: - sha256: d51a3a8d3efbb1139d7608e28782ea9efea7e7933157e8ff8184901efd8ee760 type: archive url: https://github.com/nlohmann/json/archive/v3.7.0.tar.gz - - build-commands: - - ./bootstrap.sh --with-libraries=thread,system,iostreams --prefix=/app - - ./b2 -d0 variant=release link=static threading=multi --layout=system - - ./b2 -d0 install - buildsystem: simple - name: boost - sources: - - sha256: 59c9b274bc451cf91a9ba1dd2c7fdcaf5d60b1b3aa83f2c9fa143417cc660722 - type: archive - url: https://sourceforge.net/projects/boost/files/boost/1.72.0/boost_1_72_0.tar.bz2 - buildsystem: meson name: gstreamer sources: @@ -143,6 +146,8 @@ modules: type: git url: https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad.git - buildsystem: meson + config-opts: + - -Ddefault_library=static name: coeurl sources: - commit: 417821a07cfe4429b08a2efed5e480a498087afd From 66e69d7f2b8568c304bdc280d15f543e49d1721c Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 30 Jun 2021 15:28:44 +0200 Subject: [PATCH 8/9] Ignore return value of write() in signal handler --- src/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index f4484f94..29e93d49 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -76,8 +76,8 @@ stacktraceHandler(int signum) #endif ); if (file != -1) { - constexpr char header[] = "Error: signal\n"; - write(file, header, std::size(header) - 1); + constexpr char header[] = "Error: signal\n"; + [[maybe_unused]] auto ret = write(file, header, std::size(header) - 1); backtrace_symbols_fd(array, size, file); close(file); } From bebe3300356121b7a26b57da2a11813e91d892b7 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 30 Jun 2021 15:32:54 +0200 Subject: [PATCH 9/9] Install libevent dev dependency for appimage --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 379443fe..67affd34 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -167,7 +167,7 @@ appimage-amd64: # update appimage-builder (optional) - pip3 install --upgrade git+https://www.opencode.net/azubieta/appimagecraft.git - - apt-get install -y qt5-default qtdeclarative5-dev qttools5-dev qtscript5-dev qtquickcontrols2-5-dev qtmultimedia5-dev libqt5svg5-dev liblmdb-dev libssl-dev git ninja-build qt5keychain-dev libgtest-dev ccache libevent-pthreads-2.1-6 libcurl4-openssl-dev + - apt-get install -y qt5-default qtdeclarative5-dev qttools5-dev qtscript5-dev qtquickcontrols2-5-dev qtmultimedia5-dev libqt5svg5-dev liblmdb-dev libssl-dev git ninja-build qt5keychain-dev libgtest-dev ccache libevent-dev libcurl4-openssl-dev - wget https://github.com/Kitware/CMake/releases/download/v3.19.0/cmake-3.19.0-Linux-x86_64.sh && sh cmake-3.19.0-Linux-x86_64.sh --skip-license --prefix=/usr/local - /usr/sbin/update-ccache-symlinks script: