From 4935329a992e20dc14f069460fd61532e81e5502 Mon Sep 17 00:00:00 2001 From: zeldakatze Date: Sat, 11 Jul 2026 00:40:22 +0200 Subject: [PATCH 1/2] fix build for haiku --- CMakeLists.txt | 8 +++++++- cmake/Findatkmm.cmake | 3 ++- cmake/Findgdkmm.cmake | 4 +++- cmake/Findglibmm.cmake | 3 ++- cmake/Findgtkmm.cmake | 4 ++-- cmake/Findsigc++.cmake | 3 ++- 6 files changed, 18 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 304c7181..0ab52de5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,11 @@ if (MINGW OR WIN32) link_libraries(ws2_32) endif () +if (HAIKU) + link_libraries(be) + link_libraries(network) +endif () + if (WIN32) add_compile_definitions(_CRT_SECURE_NO_WARNINGS) add_compile_definitions(NOMINMAX) @@ -71,7 +76,8 @@ if (NOT (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")) target_precompile_headers(abaddon PRIVATE src/abaddon.hpp src/util.hpp) endif () -if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.1")) +if (NOT HAIKU AND +((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.1"))) target_link_libraries(abaddon stdc++fs) endif () diff --git a/cmake/Findatkmm.cmake b/cmake/Findatkmm.cmake index 68c3bc66..623d0e11 100644 --- a/cmake/Findatkmm.cmake +++ b/cmake/Findatkmm.cmake @@ -25,7 +25,8 @@ find_path(ATKMM_CONFIG_INCLUDE_DIR /usr/lib /usr/local/lib /opt/local/lib - PATH_SUFFIXES ${ATKMM_LIBRARY_NAME}/include) + PATH_SUFFIXES ${ATKMM_LIBRARY_NAME}/include + ${ATKMM_LIBRARY_NAME}) find_library(ATKMM_LIBRARY NAMES ${ATKMM_LIBRARY_NAME} diff --git a/cmake/Findgdkmm.cmake b/cmake/Findgdkmm.cmake index 5316bb79..23077cae 100644 --- a/cmake/Findgdkmm.cmake +++ b/cmake/Findgdkmm.cmake @@ -1,4 +1,5 @@ set(gdkmm_LIBRARY_NAME gdkmm-3.0) +set(gtkmm_LIBRARY_NAME gtkmm-3.0) find_package(PkgConfig) if (PKG_CONFIG_FOUND) @@ -23,7 +24,8 @@ find_path(gdkmm_CONFIG_INCLUDE_DIR /usr/lib /usr/local/lib /opt/local/lib - PATH_SUFFIXES ${gdkmm_LIBRARY_NAME}/include) + PATH_SUFFIXES ${gdkmm_LIBRARY_NAME}/include + ${gtkmm_LIBRARY_NAME}) find_library(gdkmm_LIBRARY NAMES ${gdkmm_LIBRARY_NAME} diff --git a/cmake/Findglibmm.cmake b/cmake/Findglibmm.cmake index 27220e65..11bd9969 100644 --- a/cmake/Findglibmm.cmake +++ b/cmake/Findglibmm.cmake @@ -22,7 +22,8 @@ find_path(GLIBMM_INCLUDE_DIR find_path(GLIBMM_CONFIG_INCLUDE_DIR NAMES glibmmconfig.h HINTS ${GLIBMM_LIBRARY_HINTS} - PATH_SUFFIXES ${GLIBMM_LIBRARY_NAME}/include) + PATH_SUFFIXES ${GLIBMM_LIBRARY_NAME}/include + ${GLIBMM_LIBRARY_NAME}) find_library(GLIBMM_LIBRARY NAMES ${GLIBMM_LIBRARY_NAME} diff --git a/cmake/Findgtkmm.cmake b/cmake/Findgtkmm.cmake index addbede4..aa92c9d9 100644 --- a/cmake/Findgtkmm.cmake +++ b/cmake/Findgtkmm.cmake @@ -32,12 +32,12 @@ find_path(GTKMM_INCLUDE_DIR find_path(GTKMM_CONFIG_INCLUDE_DIR NAMES gtkmmconfig.h HINTS ${GTKMM_LIBRARY_HINTS} - PATH_SUFFIXES ${GTKMM_LIBRARY_NAME}/include) + PATH_SUFFIXES ${GTKMM_LIBRARY_NAME} ${GTKMM_LIBRARY_NAME}/include) find_library(GTKMM_LIB NAMES ${GTKMM_LIBRARY_NAME} gtkmm - HINTS ${GTKMM_LIBRARY_HINTS} + HINTS ${GTKMM_LIBRARY_HINTS} ${GTKMM_INCLUDE_DIR} PATH_SUFFIXES ${GTKMM_LIBRARY_NAME} ${GTKMM_LIBRARY_NAME}/include) diff --git a/cmake/Findsigc++.cmake b/cmake/Findsigc++.cmake index e0f56c02..d81eb155 100644 --- a/cmake/Findsigc++.cmake +++ b/cmake/Findsigc++.cmake @@ -19,7 +19,8 @@ find_path(SIGC++_INCLUDE_DIR find_path(SIGC++_CONFIG_INCLUDE_DIR NAMES sigc++config.h HINTS ${SIGC++_LIBRARY_HINTS} - PATH_SUFFIXES ${SIGC++_LIBRARY_NAME}/include) + PATH_SUFFIXES ${SIGC++_LIBRARY_NAME}/include + ${SIGC++_LIBRARY_NAME}) find_library(SIGC++_LIBRARY NAMES ${SIGC++_LIBRARY_FILE} From eb04bafee6a3cecf890fdb25b40a2f94f341809c Mon Sep 17 00:00:00 2001 From: zeldakatze Date: Sat, 11 Jul 2026 00:42:56 +0200 Subject: [PATCH 2/2] add haiku platform code --- src/platform.cpp | 69 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/src/platform.cpp b/src/platform.cpp index c48f793d..1e1f4089 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -224,6 +224,75 @@ std::string Platform::FindStateCacheFolder() { return home_path; } +#elif __HAIKU__ +#include +#include +#include +#include + +std::string Platform::FindResourceFolder() { + static std::string found_path; + static bool found = false; + if(found) return found_path; + + // try the path of the packaged resource folder + dev_t volume = dev_for_path("/boot"); + char buffer[B_PATH_NAME_LENGTH+B_FILE_NAME_LENGTH] = {}; + find_directory(B_SYSTEM_DATA_DIRECTORY, volume, false, buffer, sizeof(buffer)); + strcat(buffer, "/abaddon/"); + + // check if the directory exists + BEntry entry(buffer); + if(entry.Exists() && entry.IsDirectory()) { + found = true; + found_path = std::string(buffer); + return found_path; + } + + // otherwise, fall back to the cwd + spdlog::get("discord")->warn("cant find a resources folder, will try to load from cwd"); + found_path = "."; + found = true; + return found_path; +} + +std::string Platform::FindConfigFile() { + const auto cfg = std::getenv("ABADDON_CONFIG"); + if (cfg != nullptr) return cfg; + + static std::string found_path; + static bool found = false; + if (found) return found_path; + + // generate the path of the config directory. If it does not exist, create it + dev_t volume = dev_for_path("/boot"); + char buffer[B_PATH_NAME_LENGTH+B_FILE_NAME_LENGTH] = {}; + find_directory(B_USER_SETTINGS_DIRECTORY, volume, false, buffer, sizeof(buffer)); + strcat(buffer, "/abaddon/"); + create_directory(buffer, 0777); + + strcat(buffer, "abaddon.ini"); + found_path = std::string(buffer); + return found_path; +} + +std::string Platform::FindStateCacheFolder() { + static std::string found_path; + static bool found = false; + if (found) return found_path; + + dev_t volume = dev_for_path("/boot"); + char buffer[B_PATH_NAME_LENGTH+B_FILE_NAME_LENGTH]; + find_directory(B_USER_CACHE_DIRECTORY, volume, false, buffer, sizeof(buffer)); + strcat(buffer, "/abaddon/"); + create_directory(buffer, 0777); + + + found_path = std::string(buffer); + found = true; + return found_path; +} + #else std::string Platform::FindResourceFolder() {