Merge pull request 'fix(freebsd): correct platform macros, missing includes, and printf/variadic bugs' (#68) from freebsd-fixes into master

Reviewed-on: https://code.nikooneshot.ru/Sunshine/mkxp-sunshine/pulls/68
This commit is contained in:
niko 2026-08-04 10:22:03 +03:00
commit f6ad9aea4a
10 changed files with 30 additions and 13 deletions

View File

@ -153,7 +153,7 @@ elseif(LINUX)
list(APPEND MAIN_HEADERS src/xdg-user-dir-lookup.h) list(APPEND MAIN_HEADERS src/xdg-user-dir-lookup.h)
elseif(BSD) elseif(BSD)
find_package(PkgConfig REQUIRED) find_package(PkgConfig REQUIRED)
pkg_check_modules(LINUXPKGS REQUIRED gtk+-3.0) pkg_check_modules(LINUXPKGS REQUIRED gtk+-3.0 libxfconf-0)
include_directories(${LINUXPKGS_INCLUDE_DIRS}) include_directories(${LINUXPKGS_INCLUDE_DIRS})
add_compile_options(${LINUXPKGS_CFLAGS_OTHER}) add_compile_options(${LINUXPKGS_CFLAGS_OTHER})
list(APPEND PLATFORM_LIBRARIES ${LINUXPKGS_LDFLAGS}) list(APPEND PLATFORM_LIBRARIES ${LINUXPKGS_LDFLAGS})
@ -421,7 +421,7 @@ find_package(Ruby 3.0 REQUIRED COMPONENTS Development)
pkg_check_modules(VORBISFILE REQUIRED vorbisfile) pkg_check_modules(VORBISFILE REQUIRED vorbisfile)
find_package_handle_standard_args(pixman-1 DEFAULT_MSG PIXMAN_LIBRARY PIXMAN_INCLUDE_DIR) find_package_handle_standard_args(pixman-1 DEFAULT_MSG PIXMAN_LIBRARY PIXMAN_INCLUDE_DIR)
mark_as_advanced(PIXMAN_INCLUDE_DIR PIXMAN_LIBRARY) mark_as_advanced(PIXMAN_INCLUDE_DIR PIXMAN_LIBRARY)
find_package(OpenSSL CONFIG REQUIRED COMPONENTS Crypto) find_package(OpenSSL REQUIRED COMPONENTS Crypto)
pkg_check_modules(SIGC2 REQUIRED sigc++-2.0) pkg_check_modules(SIGC2 REQUIRED sigc++-2.0)
target_compile_definitions(${PROJECT_NAME} PRIVATE ${DEFINES}) target_compile_definitions(${PROJECT_NAME} PRIVATE ${DEFINES})

View File

@ -398,7 +398,7 @@ static void runCustomScript(const std::string &filename){
std::string scriptData; std::string scriptData;
if (!readFileSDL(filename.c_str(), scriptData)){ if (!readFileSDL(filename.c_str(), scriptData)){
crash(Exception::NoFileError, false, "Unable to open %s", filename); crash(Exception::NoFileError, false, "Unable to open %s", filename.c_str());
return; return;
} }
@ -430,7 +430,7 @@ static void runRMXPScripts(BacktraceData &btData){
try{ try{
scriptArray = kernelLoadDataInt(scriptPack.c_str(), false); scriptArray = kernelLoadDataInt(scriptPack.c_str(), false);
}catch (const Exception &e){ }catch (const Exception &e){
crash(Exception::IOError, false ,"Failed to read script data: %s", e.msg); crash(Exception::IOError, false, "Failed to read script data: %s", e.msg.c_str());
return; return;
} }

View File

@ -26,6 +26,7 @@
//костыль ебаный сука //костыль ебаный сука
#undef snprintf #undef snprintf
#undef inline #undef inline
#undef close
#include "exception.h" #include "exception.h"

View File

@ -19,7 +19,7 @@
#include <fcntl.h> #include <fcntl.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/types.h> #include <sys/types.h>
#ifdef OS_LINUX #ifdef __linux__
#include <sys/inotify.h> #include <sys/inotify.h>
#endif #endif
#include <unistd.h> #include <unistd.h>
@ -164,7 +164,7 @@ void journalBindingInit(){
mutex = SDL_CreateMutex(); mutex = SDL_CreateMutex();
SDL_memset((char*)lang_buffer, 0, BUFFER_SIZE); SDL_memset((char*)lang_buffer, 0, BUFFER_SIZE);
lang_buffer[0] = '_'; lang_buffer[0] = '_';
#if defined __linux #ifdef unix_like
mkfifo(PIPE_PATH.c_str(), 0666); mkfifo(PIPE_PATH.c_str(), 0666);
atexit(cleanup_pipe); atexit(cleanup_pipe);
#endif #endif

View File

@ -19,7 +19,7 @@
#include <fcntl.h> #include <fcntl.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/types.h> #include <sys/types.h>
#ifdef OS_LINUX #ifdef __linux__
#include <sys/inotify.h> #include <sys/inotify.h>
#endif #endif
#include <unistd.h> #include <unistd.h>

View File

@ -6,6 +6,10 @@
#include "sharedstate.h" #include "sharedstate.h"
#include "pipe.h" #include "pipe.h"
#if defined __FreeBSD__ || defined __DragonFly__
#include <sys/sysctl.h>
#endif
static Pipe ipc; static Pipe ipc;
static void start(){ static void start(){
@ -29,10 +33,19 @@ static void start(){
#else #else
#if defined unix_like #if defined unix_like
char path[PATH_MAX]; char path[PATH_MAX];
ssize_t len = readlink("/proc/self/exe", path, PATH_MAX); std::string exename;
if (len == -1) #if defined __FreeBSD__ || defined __DragonFly__
rb_raise(rb_eRuntimeError, "Cannot determine path of running executable"); int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1};
std::string exename = std::string(path, len); size_t size = sizeof(path);
if (sysctl(mib, 4, path, &size, NULL, 0) != 0)
rb_raise(rb_eRuntimeError, "Cannot determine path of running executable");
exename = std::string(path);
#else
ssize_t len = readlink("/proc/self/exe", path, PATH_MAX);
if (len == -1)
rb_raise(rb_eRuntimeError, "Cannot determine path of running executable");
exename = std::string(path, len);
#endif
#else #else
#endif #endif

View File

@ -284,7 +284,7 @@ int main(int argc, char *argv[]){
if (!conf.gameFolder.empty()){ if (!conf.gameFolder.empty()){
if (chdir(conf.gameFolder.c_str()) != 0){ if (chdir(conf.gameFolder.c_str()) != 0){
crash(Exception::SDLError, false, "Unable to switch into gameFolder %s", conf.gameFolder); crash(Exception::SDLError, false, "Unable to switch into gameFolder %s", conf.gameFolder.c_str());
return 0; return 0;
} }
} }

View File

@ -24,6 +24,9 @@
#include <ruby.h> #include <ruby.h>
#undef vsnprintf #undef vsnprintf
#undef snprintf #undef snprintf
#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) || defined(__NetBSD__)
#define BOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED
#endif
#include <boost/stacktrace.hpp> #include <boost/stacktrace.hpp>
#include <boost/version.hpp> #include <boost/version.hpp>
#include <zlib.h> #include <zlib.h>

View File

@ -17,7 +17,6 @@
#include <fstream> #include <fstream>
#include <openssl/sha.h> #include <openssl/sha.h>
#include <SDL3/SDL_stdinc.h> #include <SDL3/SDL_stdinc.h>
#include <zip.h>
#include <locale> #include <locale>
#include <filesystem> #include <filesystem>
#include <string> #include <string>

View File

@ -27,6 +27,7 @@
#include "xdg-user-dir-lookup.h" #include "xdg-user-dir-lookup.h"
#include <stdio.h>
#include <SDL3/SDL_stdinc.h> #include <SDL3/SDL_stdinc.h>
#include <stdio.h> #include <stdio.h>
/** /**