From 0b3bf3c273b146bb262f68781819918388904b2d Mon Sep 17 00:00:00 2001 From: Linus Dierheimer Date: Tue, 6 Sep 2022 15:42:37 +0200 Subject: [PATCH] Only build display server code on linux --- CMakeLists.txt | 15 +++-- src/common/init.c | 4 +- src/detection/displayserver/displayserver.c | 11 ++++ .../{ => displayserver}/displayserver.h | 0 .../displayserver/displayserver_android.c | 14 +++++ .../displayserver/displayserver_apple.c | 14 +++++ .../displayserver_linux.c} | 58 +++++++------------ .../displayserver_linux.h} | 3 +- .../displayserver/{ => linux}/wayland.c | 2 +- .../displayserver/{ => linux}/wmde.c | 2 +- src/detection/displayserver/{ => linux}/xcb.c | 2 +- .../displayserver/{ => linux}/xlib.c | 2 +- src/detection/gpu/gpu_apple.c | 2 +- src/detection/gtk.c | 2 +- src/detection/qt.c | 2 +- src/modules/cursor.c | 2 +- src/modules/de.c | 2 +- src/modules/font.c | 2 +- src/modules/icons.c | 2 +- src/modules/resolution.c | 2 +- src/modules/terminalfont.c | 2 +- src/modules/theme.c | 2 +- src/modules/wm.c | 2 +- src/modules/wmtheme.c | 2 +- 24 files changed, 88 insertions(+), 63 deletions(-) create mode 100644 src/detection/displayserver/displayserver.c rename src/detection/{ => displayserver}/displayserver.h (100%) create mode 100644 src/detection/displayserver/displayserver_android.c create mode 100644 src/detection/displayserver/displayserver_apple.c rename src/detection/displayserver/{displayServer.c => linux/displayserver_linux.c} (67%) rename src/detection/displayserver/{displayServer.h => linux/displayserver_linux.h} (93%) rename src/detection/displayserver/{ => linux}/wayland.c (99%) rename src/detection/displayserver/{ => linux}/wmde.c (99%) rename src/detection/displayserver/{ => linux}/xcb.c (99%) rename src/detection/displayserver/{ => linux}/xlib.c (99%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4879d7fa2..4540e8d2d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -185,11 +185,7 @@ set(LIBFASTFETCH_SRC src/detection/cpu/cpu.c src/detection/gpu/gpu.c src/detection/memory/memory.c - src/detection/displayserver/displayServer.c - src/detection/displayserver/wayland.c - src/detection/displayserver/xcb.c - src/detection/displayserver/xlib.c - src/detection/displayserver/wmde.c + src/detection/displayserver/displayserver.c src/modules/break.c src/modules/custom.c src/modules/title.c @@ -238,6 +234,7 @@ if(APPLE) src/detection/cpu/cpu_apple.c src/detection/gpu/gpu_apple.c src/detection/memory/memory_apple.c + src/detection/displayserver/displayserver_apple.c ) elseif(ANDROID) list(APPEND LIBFASTFETCH_SRC @@ -246,6 +243,7 @@ elseif(ANDROID) src/detection/cpu/cpu_linux.c src/detection/gpu/gpu_android.c src/detection/memory/memory_linux.c + src/detection/displayserver/displayserver_android.c ) else() list(APPEND LIBFASTFETCH_SRC @@ -254,6 +252,11 @@ else() src/detection/cpu/cpu_linux.c src/detection/gpu/gpu_linux.c src/detection/memory/memory_linux.c + src/detection/displayserver/linux/displayserver_linux.c + src/detection/displayserver/linux/wayland.c + src/detection/displayserver/linux/xcb.c + src/detection/displayserver/linux/xlib.c + src/detection/displayserver/linux/wmde.c ) endif() @@ -289,7 +292,7 @@ ff_check_lib(VULKAN vulkan) ff_check_lib(WAYLAND wayland-client) ff_check_lib(XCB_RANDR xcb-randr) ff_check_lib(XCB xcb) -ff_check_lib(XRAND xrandr) +ff_check_lib(XRANDR xrandr) ff_check_lib(X11 x11) ff_check_lib(GIO gio-2.0) ff_check_lib(DCONF dconf) diff --git a/src/common/init.c b/src/common/init.c index f7265917e..f304ac429 100644 --- a/src/common/init.c +++ b/src/common/init.c @@ -3,7 +3,7 @@ #include "common/parsing.h" #include "detection/qt.h" #include "detection/gtk.h" -#include "detection/displayserver.h" +#include "detection/displayserver/displayserver.h" #include #include @@ -295,7 +295,7 @@ void startDetectionThreads(FFinstance* instance) //Android needs none of the things that are detected here //And using gsettings sometimes hangs the program in android for some unknown reason, //and since we don't need it we just never call it. - #ifdef __ANDROID__ + #if defined(__ANDROID__) || defined(__APPLE__) return; #endif diff --git a/src/detection/displayserver/displayserver.c b/src/detection/displayserver/displayserver.c new file mode 100644 index 000000000..7defa401e --- /dev/null +++ b/src/detection/displayserver/displayserver.c @@ -0,0 +1,11 @@ +#include "displayserver.h" +#include "detection/internal.h" + +void ffConnectDisplayServerImpl(FFDisplayServerResult* ds, const FFinstance* instance); + +const FFDisplayServerResult* ffConnectDisplayServer(const FFinstance* instance) +{ + FF_DETECTION_INTERNAL_GUARD(FFDisplayServerResult, + ffConnectDisplayServerImpl(&result, instance); + ); +} diff --git a/src/detection/displayserver.h b/src/detection/displayserver/displayserver.h similarity index 100% rename from src/detection/displayserver.h rename to src/detection/displayserver/displayserver.h diff --git a/src/detection/displayserver/displayserver_android.c b/src/detection/displayserver/displayserver_android.c new file mode 100644 index 000000000..8427c7cb2 --- /dev/null +++ b/src/detection/displayserver/displayserver_android.c @@ -0,0 +1,14 @@ +#include "displayserver.h" + +void ffConnectDisplayServerImpl(FFDisplayServerResult* ds, const FFinstance* instance) +{ + FF_UNUSED(instance); + + ffStrbufInitA(&ds->wmProcessName, 0); + ffStrbufInitA(&ds->wmPrettyName, 0); + ffStrbufInitA(&ds->wmProtocolName, 0); + ffStrbufInitA(&ds->deProcessName, 0); + ffStrbufInitA(&ds->dePrettyName, 0); + ffStrbufInitA(&ds->deVersion, 0); + ffListInitA(&ds->resolutions, sizeof(FFResolutionResult), 0); +} diff --git a/src/detection/displayserver/displayserver_apple.c b/src/detection/displayserver/displayserver_apple.c new file mode 100644 index 000000000..8427c7cb2 --- /dev/null +++ b/src/detection/displayserver/displayserver_apple.c @@ -0,0 +1,14 @@ +#include "displayserver.h" + +void ffConnectDisplayServerImpl(FFDisplayServerResult* ds, const FFinstance* instance) +{ + FF_UNUSED(instance); + + ffStrbufInitA(&ds->wmProcessName, 0); + ffStrbufInitA(&ds->wmPrettyName, 0); + ffStrbufInitA(&ds->wmProtocolName, 0); + ffStrbufInitA(&ds->deProcessName, 0); + ffStrbufInitA(&ds->dePrettyName, 0); + ffStrbufInitA(&ds->deVersion, 0); + ffListInitA(&ds->resolutions, sizeof(FFResolutionResult), 0); +} diff --git a/src/detection/displayserver/displayServer.c b/src/detection/displayserver/linux/displayserver_linux.c similarity index 67% rename from src/detection/displayserver/displayServer.c rename to src/detection/displayserver/linux/displayserver_linux.c index 087f0e2e2..906f78044 100644 --- a/src/detection/displayserver/displayServer.c +++ b/src/detection/displayserver/linux/displayserver_linux.c @@ -1,6 +1,5 @@ -#include "displayServer.h" +#include "displayserver_linux.h" -#include #include uint32_t ffdsParseRefreshRate(int32_t refreshRate) @@ -78,56 +77,41 @@ static void parseDRM(FFDisplayServerResult* result) ffStrbufDestroy(&drmDir); } -const FFDisplayServerResult* ffConnectDisplayServer(const FFinstance* instance) +void ffConnectDisplayServerImpl(FFDisplayServerResult* ds, const FFinstance* instance) { - static FFDisplayServerResult result; - - static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; - static bool init = false; - pthread_mutex_lock(&mutex); - if(init) - { - pthread_mutex_unlock(&mutex); - return &result; - } - init = true; - - ffStrbufInit(&result.wmProcessName); - ffStrbufInit(&result.wmPrettyName); - ffStrbufInit(&result.wmProtocolName); - ffStrbufInit(&result.deProcessName); - ffStrbufInit(&result.dePrettyName); - ffStrbufInit(&result.deVersion); - ffListInitA(&result.resolutions, sizeof(FFResolutionResult), 4); + ffStrbufInit(&ds->wmProcessName); + ffStrbufInit(&ds->wmPrettyName); + ffStrbufInit(&ds->wmProtocolName); + ffStrbufInit(&ds->deProcessName); + ffStrbufInit(&ds->dePrettyName); + ffStrbufInit(&ds->deVersion); + ffListInitA(&ds->resolutions, sizeof(FFResolutionResult), 4); //We try wayland as our prefered display server, as it supports the most features. //This method can't detect the name of our WM / DE - ffdsConnectWayland(instance, &result); + ffdsConnectWayland(instance, ds); //Try the x11 libs, from most feature rich to least. //We use the resolution list to detect if a connection is needed. //They respect wmProtocolName, and only detect resolution if it is set. - if(result.resolutions.length == 0) - ffdsConnectXcbRandr(instance, &result); + if(ds->resolutions.length == 0) + ffdsConnectXcbRandr(instance, ds); - if(result.resolutions.length == 0) - ffdsConnectXrandr(instance, &result); + if(ds->resolutions.length == 0) + ffdsConnectXrandr(instance, ds); - if(result.resolutions.length == 0) - ffdsConnectXcb(instance, &result); + if(ds->resolutions.length == 0) + ffdsConnectXcb(instance, ds); - if(result.resolutions.length == 0) - ffdsConnectXlib(instance, &result); + if(ds->resolutions.length == 0) + ffdsConnectXlib(instance, ds); //This resolution detection method is display server independent. //Use it if all connections failed - if(result.resolutions.length == 0) - parseDRM(&result); + if(ds->resolutions.length == 0) + parseDRM(ds); //This fills in missing information about WM / DE by using env vars and iterating processes - ffdsDetectWMDE(instance, &result); - - pthread_mutex_unlock(&mutex); - return &result; + ffdsDetectWMDE(instance, ds); } diff --git a/src/detection/displayserver/displayServer.h b/src/detection/displayserver/linux/displayserver_linux.h similarity index 93% rename from src/detection/displayserver/displayServer.h rename to src/detection/displayserver/linux/displayserver_linux.h index 74d04bb62..f08ea9a61 100644 --- a/src/detection/displayserver/displayServer.h +++ b/src/detection/displayserver/linux/displayserver_linux.h @@ -3,8 +3,7 @@ #ifndef FASTFETCH_INCLUDED_DISPLAYSERVER #define FASTFETCH_INCLUDED_DISPLAYSERVER -#include "fastfetch.h" -#include "detection/displayserver.h" +#include "detection/displayserver/displayserver.h" #define FF_DISPLAYSERVER_PROTOCOL_WAYLAND "Wayland" #define FF_DISPLAYSERVER_PROTOCOL_X11 "X11" diff --git a/src/detection/displayserver/wayland.c b/src/detection/displayserver/linux/wayland.c similarity index 99% rename from src/detection/displayserver/wayland.c rename to src/detection/displayserver/linux/wayland.c index b9dfb0a09..e529af835 100644 --- a/src/detection/displayserver/wayland.c +++ b/src/detection/displayserver/linux/wayland.c @@ -1,6 +1,6 @@ #define _GNU_SOURCE //required for struct ucred -#include "displayServer.h" +#include "displayserver_linux.h" #include #include diff --git a/src/detection/displayserver/wmde.c b/src/detection/displayserver/linux/wmde.c similarity index 99% rename from src/detection/displayserver/wmde.c rename to src/detection/displayserver/linux/wmde.c index f844e1a3c..19554f96c 100644 --- a/src/detection/displayserver/wmde.c +++ b/src/detection/displayserver/linux/wmde.c @@ -1,4 +1,4 @@ -#include "displayServer.h" +#include "displayserver_linux.h" #include "common/io.h" #include "common/properties.h" #include "common/parsing.h" diff --git a/src/detection/displayserver/xcb.c b/src/detection/displayserver/linux/xcb.c similarity index 99% rename from src/detection/displayserver/xcb.c rename to src/detection/displayserver/linux/xcb.c index 07b5fdcc6..2cff2d261 100644 --- a/src/detection/displayserver/xcb.c +++ b/src/detection/displayserver/linux/xcb.c @@ -1,4 +1,4 @@ -#include "displayServer.h" +#include "displayserver_linux.h" #ifdef FF_HAVE_XCB #include "common/library.h" diff --git a/src/detection/displayserver/xlib.c b/src/detection/displayserver/linux/xlib.c similarity index 99% rename from src/detection/displayserver/xlib.c rename to src/detection/displayserver/linux/xlib.c index 1dbcaca0c..63d376594 100644 --- a/src/detection/displayserver/xlib.c +++ b/src/detection/displayserver/linux/xlib.c @@ -1,4 +1,4 @@ -#include "displayServer.h" +#include "displayserver_linux.h" #ifdef FF_HAVE_X11 #include "common/library.h" diff --git a/src/detection/gpu/gpu_apple.c b/src/detection/gpu/gpu_apple.c index baab518be..2d9a61e58 100644 --- a/src/detection/gpu/gpu_apple.c +++ b/src/detection/gpu/gpu_apple.c @@ -8,7 +8,7 @@ void ffDetectGPUImpl(FFlist* gpus, const FFinstance* instance) { FF_UNUSED(instance); - void* iokit = dlopen("/System/Library/Frameworks/IOKit.framework/IOKit", RTLD_LAZY); + void* iokit = dlopen(FASTFETCH_TARGET_DIR_ROOT"/System/Library/Frameworks/IOKit.framework/IOKit", RTLD_LAZY); if(iokit == NULL) return; diff --git a/src/detection/gtk.c b/src/detection/gtk.c index af7488b44..c404420e2 100644 --- a/src/detection/gtk.c +++ b/src/detection/gtk.c @@ -2,7 +2,7 @@ #include "detection/gtk.h" #include "common/properties.h" #include "common/settings.h" -#include "detection/displayserver.h" +#include "detection/displayserver/displayserver.h" #include diff --git a/src/detection/qt.c b/src/detection/qt.c index 19c49768d..ec089325f 100644 --- a/src/detection/qt.c +++ b/src/detection/qt.c @@ -1,7 +1,7 @@ #include "fastfetch.h" #include "detection/qt.h" #include "common/properties.h" -#include "detection/displayserver.h" +#include "detection/displayserver/displayserver.h" #include #include diff --git a/src/modules/cursor.c b/src/modules/cursor.c index 05b54ac3d..5d6aa4d59 100644 --- a/src/modules/cursor.c +++ b/src/modules/cursor.c @@ -4,7 +4,7 @@ #include "common/parsing.h" #include "common/settings.h" #include "detection/gtk.h" -#include "detection/displayserver.h" +#include "detection/displayserver/displayserver.h" #include diff --git a/src/modules/de.c b/src/modules/de.c index c8214ce3f..eb2cb5062 100644 --- a/src/modules/de.c +++ b/src/modules/de.c @@ -1,6 +1,6 @@ #include "fastfetch.h" #include "common/printing.h" -#include "detection/displayserver.h" +#include "detection/displayserver/displayserver.h" #define FF_DE_MODULE_NAME "DE" #define FF_DE_NUM_FORMAT_ARGS 3 diff --git a/src/modules/font.c b/src/modules/font.c index 2df295e80..7abc84d22 100644 --- a/src/modules/font.c +++ b/src/modules/font.c @@ -4,7 +4,7 @@ #include "common/parsing.h" #include "detection/qt.h" #include "detection/gtk.h" -#include "detection/displayserver.h" +#include "detection/displayserver/displayserver.h" #define FF_FONT_MODULE_NAME "Font" #define FF_FONT_NUM_FORMAT_ARGS 21 diff --git a/src/modules/icons.c b/src/modules/icons.c index 2f837918c..36e12230c 100644 --- a/src/modules/icons.c +++ b/src/modules/icons.c @@ -3,7 +3,7 @@ #include "common/parsing.h" #include "detection/qt.h" #include "detection/gtk.h" -#include "detection/displayserver.h" +#include "detection/displayserver/displayserver.h" #define FF_ICONS_MODULE_NAME "Icons" #define FF_ICONS_NUM_FORMAT_ARGS 5 diff --git a/src/modules/resolution.c b/src/modules/resolution.c index 4b06e67be..396d435b1 100644 --- a/src/modules/resolution.c +++ b/src/modules/resolution.c @@ -1,6 +1,6 @@ #include "fastfetch.h" #include "common/printing.h" -#include "detection/displayserver.h" +#include "detection/displayserver/displayserver.h" #define FF_RESOLUTION_MODULE_NAME "Resolution" #define FF_RESOLUTION_NUM_FORMAT_ARGS 3 diff --git a/src/modules/terminalfont.c b/src/modules/terminalfont.c index e08977c36..561d1163c 100644 --- a/src/modules/terminalfont.c +++ b/src/modules/terminalfont.c @@ -4,7 +4,7 @@ #include "common/font.h" #include "common/settings.h" #include "common/processing.h" -#include "detection/displayserver.h" +#include "detection/displayserver/displayserver.h" #include "detection/terminalshell.h" #define FF_TERMFONT_MODULE_NAME "Terminal Font" diff --git a/src/modules/theme.c b/src/modules/theme.c index 3cec22be7..e3b2387b2 100644 --- a/src/modules/theme.c +++ b/src/modules/theme.c @@ -3,7 +3,7 @@ #include "common/parsing.h" #include "detection/qt.h" #include "detection/gtk.h" -#include "detection/displayserver.h" +#include "detection/displayserver/displayserver.h" #define FF_THEME_MODULE_NAME "Theme" #define FF_THEME_NUM_FORMAT_ARGS 7 diff --git a/src/modules/wm.c b/src/modules/wm.c index 5dcf230e4..38cf9f5a3 100644 --- a/src/modules/wm.c +++ b/src/modules/wm.c @@ -1,6 +1,6 @@ #include "fastfetch.h" #include "common/printing.h" -#include "detection/displayserver.h" +#include "detection/displayserver/displayserver.h" #define FF_WM_MODULE_NAME "WM" #define FF_WM_NUM_FORMAT_ARGS 3 diff --git a/src/modules/wmtheme.c b/src/modules/wmtheme.c index 9abe944bc..fbaf22512 100644 --- a/src/modules/wmtheme.c +++ b/src/modules/wmtheme.c @@ -4,7 +4,7 @@ #include "common/parsing.h" #include "common/settings.h" #include "detection/gtk.h" -#include "detection/displayserver.h" +#include "detection/displayserver/displayserver.h" #include #include