summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt92
-rw-r--r--cmake/Findlibhandy.cmake39
-rw-r--r--src/abaddon.cpp10
3 files changed, 102 insertions, 39 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fa56d6c..ab6eb5b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,6 +7,8 @@ set(ABADDON_RESOURCE_DIR "/usr/share/abaddon" CACHE PATH "Fallback directory for
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
+option(USE_LIBHANDY "Enable features that require libhandy (default)" ON)
+
find_package(nlohmann_json REQUIRED)
find_package(CURL)
find_package(ZLIB REQUIRED)
@@ -17,30 +19,30 @@ set(USE_TLS TRUE)
set(USE_OPEN_SSL TRUE)
find_package(IXWebSocket QUIET)
if (NOT IXWebSocket_FOUND)
- message("ixwebsocket was not found and will be included as a submodule")
- add_subdirectory(subprojects/ixwebsocket)
- include_directories(IXWEBSOCKET_INCLUDE_DIRS)
-endif()
+ message("ixwebsocket was not found and will be included as a submodule")
+ add_subdirectory(subprojects/ixwebsocket)
+ include_directories(IXWEBSOCKET_INCLUDE_DIRS)
+endif ()
-if(MINGW OR WIN32)
- link_libraries(ws2_32)
-endif()
+if (MINGW OR WIN32)
+ link_libraries(ws2_32)
+endif ()
-if(WIN32)
- add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
- add_compile_definitions(NOMINMAX)
+if (WIN32)
+ add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
+ add_compile_definitions(NOMINMAX)
- find_package(Fontconfig REQUIRED)
- link_libraries(${Fontconfig_LIBRARIES})
-endif()
+ find_package(Fontconfig REQUIRED)
+ link_libraries(${Fontconfig_LIBRARIES})
+endif ()
configure_file(${PROJECT_SOURCE_DIR}/src/config.h.in ${PROJECT_BINARY_DIR}/config.h)
file(GLOB_RECURSE ABADDON_SOURCES
- "src/*.h"
- "src/*.hpp"
- "src/*.cpp"
-)
+ "src/*.h"
+ "src/*.hpp"
+ "src/*.cpp"
+ )
add_executable(abaddon ${ABADDON_SOURCES})
target_include_directories(abaddon PUBLIC ${PROJECT_SOURCE_DIR}/src)
@@ -51,36 +53,48 @@ target_include_directories(abaddon PUBLIC ${SQLite3_INCLUDE_DIRS})
target_include_directories(abaddon PUBLIC ${NLOHMANN_JSON_INCLUDE_DIRS})
if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR
- (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
- ((CMAKE_SYSTEM_NAME STREQUAL "Linux") OR (CMAKE_CXX_COMPILER_VERSION LESS 9))))
- target_link_libraries(abaddon stdc++fs)
-endif()
+(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
+((CMAKE_SYSTEM_NAME STREQUAL "Linux") OR (CMAKE_CXX_COMPILER_VERSION LESS 9))))
+ target_link_libraries(abaddon stdc++fs)
+endif ()
if (IXWebSocket_LIBRARIES)
- target_link_libraries(abaddon ${IXWebSocket_LIBRARIES})
- find_library(MBEDTLS_X509_LIBRARY mbedx509)
- find_library(MBEDTLS_TLS_LIBRARY mbedtls)
- find_library(MBEDTLS_CRYPTO_LIBRARY mbedcrypto)
- if (MBEDTLS_TLS_LIBRARY)
- target_link_libraries(abaddon ${MBEDTLS_TLS_LIBRARY})
- endif()
- if (MBEDTLS_X509_LIBRARY)
- target_link_libraries(abaddon ${MBEDTLS_X509_LIBRARY})
- endif()
- if (MBEDTLS_CRYPTO_LIBRARY)
- target_link_libraries(abaddon ${MBEDTLS_CRYPTO_LIBRARY})
- endif()
-else()
- target_link_libraries(abaddon $<BUILD_INTERFACE:ixwebsocket>)
-endif()
+ target_link_libraries(abaddon ${IXWebSocket_LIBRARIES})
+ find_library(MBEDTLS_X509_LIBRARY mbedx509)
+ find_library(MBEDTLS_TLS_LIBRARY mbedtls)
+ find_library(MBEDTLS_CRYPTO_LIBRARY mbedcrypto)
+ if (MBEDTLS_TLS_LIBRARY)
+ target_link_libraries(abaddon ${MBEDTLS_TLS_LIBRARY})
+ endif ()
+ if (MBEDTLS_X509_LIBRARY)
+ target_link_libraries(abaddon ${MBEDTLS_X509_LIBRARY})
+ endif ()
+ if (MBEDTLS_CRYPTO_LIBRARY)
+ target_link_libraries(abaddon ${MBEDTLS_CRYPTO_LIBRARY})
+ endif ()
+else ()
+ target_link_libraries(abaddon $<BUILD_INTERFACE:ixwebsocket>)
+endif ()
find_package(Threads)
if (Threads_FOUND)
- target_link_libraries(abaddon Threads::Threads)
-endif()
+ target_link_libraries(abaddon Threads::Threads)
+endif ()
target_link_libraries(abaddon ${SQLite3_LIBRARIES})
target_link_libraries(abaddon ${GTKMM_LIBRARIES})
target_link_libraries(abaddon ${CURL_LIBRARIES})
target_link_libraries(abaddon ${ZLIB_LIBRARY})
target_link_libraries(abaddon ${NLOHMANN_JSON_LIBRARIES})
+
+if (USE_LIBHANDY)
+ find_package(libhandy)
+ if (NOT libhandy_FOUND)
+ message("libhandy could not be found. features requiring it have been disabled")
+ set(USE_LIBHANDY OFF)
+ else ()
+ target_include_directories(abaddon PUBLIC ${libhandy_INCLUDE_DIRS})
+ target_link_libraries(abaddon ${libhandy_LIBRARIES})
+ target_compile_definitions(abaddon PRIVATE WITH_LIBHANDY)
+ endif ()
+endif ()
diff --git a/cmake/Findlibhandy.cmake b/cmake/Findlibhandy.cmake
new file mode 100644
index 0000000..eb6e477
--- /dev/null
+++ b/cmake/Findlibhandy.cmake
@@ -0,0 +1,39 @@
+set(libhandy_LIBRARY_NAME libhandy-1)
+
+find_package(PkgConfig)
+if (PKG_CONFIG_FOUND)
+ pkg_check_modules(PC_libhandy QUIET ${libhandy_LIBRARY_NAME})
+ set(libhandy_DEfINITIONS ${PC_libhandy_CFLAGS_OTHER})
+endif (PKG_CONFIG_FOUND)
+
+set(libhandy_INCLUDE_HINTS ${PC_libhandy_INCLUDEDIR} ${PC_libhandy_INCLUDE_DIRS})
+set(libhandy_LIBRARY_HINTS ${PC_libhandy_LIBDIR} ${PC_libhandy_LIBRARY_DIRS})
+
+find_path(libhandy_INCLUDE_DIR
+ NAMES handy.h
+ HINTS ${libhandy_INCLUDE_HINTS}
+ /usr/include
+ /usr/local/include
+ /opt/local/include
+ PATH_SUFFIXES ${libhandy_LIBRARY_NAME})
+
+find_library(libhandy_LIBRARY
+ NAMES ${libhandy_LIBRARY_NAME}
+ HINTS ${libhandy_LIBRARY_HINTS}
+ /usr/lib
+ /usr/local/lib
+ /opt/local/lib
+ PATH_SUFFIXES ${libhandy_LIBRARY_NAME}
+ ${libhandy_LIBRARY_NAME}/include)
+
+set(libhandy_LIBRARIES ${libhandy_LIBRARY})
+set(libhandy_INCLUDE_DIRS ${libhandy_INCLUDE_DIR};${libhandy_CONFIG_INCLUDE_DIRS})
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(libhandy
+ REQUIRED_VARS
+ libhandy_LIBRARY
+ libhandy_INCLUDE_DIR
+ VERSION_VAR libhandy_VERSION)
+
+mark_as_advanced(libhandy_INCLUDE_DIR libhandy_LIBRARY)
diff --git a/src/abaddon.cpp b/src/abaddon.cpp
index af28571..baa6d45 100644
--- a/src/abaddon.cpp
+++ b/src/abaddon.cpp
@@ -17,6 +17,10 @@
#include "windows/pinnedwindow.hpp"
#include "windows/threadswindow.hpp"
+#ifdef WITH_LIBHANDY
+ #include <handy.h>
+#endif
+
#ifdef _WIN32
#pragma comment(lib, "crypt32.lib")
#endif
@@ -62,6 +66,12 @@ Abaddon &Abaddon::Get() {
int Abaddon::StartGTK() {
m_gtk_app = Gtk::Application::create("com.github.uowuo.abaddon");
+#ifdef WITH_LIBHANDY
+ m_gtk_app->signal_activate().connect([] {
+ hdy_init();
+ });
+#endif
+
m_css_provider = Gtk::CssProvider::create();
m_css_provider->signal_parsing_error().connect([](const Glib::RefPtr<const Gtk::CssSection> &section, const Glib::Error &error) {
Gtk::MessageDialog dlg("css failed parsing (" + error.what() + ")", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);