From 2c49dcceaff9c0cc863c7108d42051bd1dee39ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Wed, 25 Oct 2023 16:24:24 +0800 Subject: [PATCH] Options (Library): split code --- CMakeLists.txt | 1 + src/common/dbus.c | 2 +- src/common/init.c | 50 +---- src/common/jsonconfig.c | 73 ------- src/common/jsonconfig.h | 1 - src/common/settings.c | 8 +- src/detection/brightness/brightness_linux.c | 2 +- src/detection/displayserver/linux/wayland.c | 2 +- src/detection/displayserver/linux/xcb.c | 4 +- src/detection/displayserver/linux/xlib.c | 4 +- src/detection/gpu/gpu_linux.c | 2 +- src/detection/lm/lm_linux.c | 2 +- src/detection/opencl/opencl.c | 2 +- src/detection/opengl/opengl_linux.c | 6 +- src/detection/packages/packages_linux.c | 2 +- src/detection/sound/sound_linux.c | 2 +- .../terminalfont/terminalfont_android.c | 2 +- src/detection/vulkan/vulkan.c | 2 +- src/detection/wallpaper/wallpaper_apple.c | 2 +- src/detection/wifi/wifi_linux.c | 2 +- src/fastfetch.c | 58 +----- src/fastfetch.h | 26 +-- src/logo/image/im6.c | 2 +- src/logo/image/im7.c | 2 +- src/logo/image/image.c | 4 +- src/options/library.c | 188 ++++++++++++++++++ src/options/library.h | 36 ++++ 27 files changed, 258 insertions(+), 229 deletions(-) create mode 100644 src/options/library.c create mode 100644 src/options/library.h diff --git a/CMakeLists.txt b/CMakeLists.txt index c48b06813..76aaf7612 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -357,6 +357,7 @@ set(LIBFASTFETCH_SRC src/options/modules.c src/options/logo.c src/options/general.c + src/options/library.c src/util/edidHelper.c src/util/FFlist.c src/util/FFstrbuf.c diff --git a/src/common/dbus.c b/src/common/dbus.c index 968358a8d..05f66e402 100644 --- a/src/common/dbus.c +++ b/src/common/dbus.c @@ -7,7 +7,7 @@ static bool loadLibSymbols(FFDBusLibrary* lib) { - FF_LIBRARY_LOAD(dbus, &instance.config.libDBus, false, "libdbus-1" FF_LIBRARY_EXTENSION, 4); + FF_LIBRARY_LOAD(dbus, &instance.config.library.libDBus, false, "libdbus-1" FF_LIBRARY_EXTENSION, 4); FF_LIBRARY_LOAD_SYMBOL_PTR(dbus, lib, dbus_bus_get, false) FF_LIBRARY_LOAD_SYMBOL_PTR(dbus, lib, dbus_message_new_method_call, false) FF_LIBRARY_LOAD_SYMBOL_PTR(dbus, lib, dbus_message_iter_init, false) diff --git a/src/common/init.c b/src/common/init.c index 25e01d748..35e363a6c 100644 --- a/src/common/init.c +++ b/src/common/init.c @@ -65,30 +65,7 @@ static void defaultConfig(void) instance.config.percentType = 1; instance.config.percentNdigits = 0; - ffStrbufInit(&instance.config.libPCI); - ffStrbufInit(&instance.config.libVulkan); - ffStrbufInit(&instance.config.libWayland); - ffStrbufInit(&instance.config.libXcbRandr); - ffStrbufInit(&instance.config.libXcb); - ffStrbufInit(&instance.config.libXrandr); - ffStrbufInit(&instance.config.libX11); - ffStrbufInit(&instance.config.libGIO); - ffStrbufInit(&instance.config.libDConf); - ffStrbufInit(&instance.config.libDBus); - ffStrbufInit(&instance.config.libXFConf); - ffStrbufInit(&instance.config.libSQLite3); - ffStrbufInit(&instance.config.librpm); - ffStrbufInit(&instance.config.libImageMagick); - ffStrbufInit(&instance.config.libZ); - ffStrbufInit(&instance.config.libChafa); - ffStrbufInit(&instance.config.libEGL); - ffStrbufInit(&instance.config.libGLX); - ffStrbufInit(&instance.config.libOSMesa); - ffStrbufInit(&instance.config.libOpenCL); - ffStrbufInit(&instance.config.libfreetype); - ffStrbufInit(&instance.config.libPulse); - ffStrbufInit(&instance.config.libnm); - ffStrbufInit(&instance.config.libDdcutil); + ffOptionsInitLibrary(&instance.config.library); } void ffInitInstance(void) @@ -219,30 +196,7 @@ static void destroyConfig(void) ffStrbufDestroy(&instance.config.barCharElapsed); ffStrbufDestroy(&instance.config.barCharTotal); - ffStrbufDestroy(&instance.config.libPCI); - ffStrbufDestroy(&instance.config.libVulkan); - ffStrbufDestroy(&instance.config.libWayland); - ffStrbufDestroy(&instance.config.libXcbRandr); - ffStrbufDestroy(&instance.config.libXcb); - ffStrbufDestroy(&instance.config.libXrandr); - ffStrbufDestroy(&instance.config.libX11); - ffStrbufDestroy(&instance.config.libGIO); - ffStrbufDestroy(&instance.config.libDConf); - ffStrbufDestroy(&instance.config.libDBus); - ffStrbufDestroy(&instance.config.libXFConf); - ffStrbufDestroy(&instance.config.libSQLite3); - ffStrbufDestroy(&instance.config.librpm); - ffStrbufDestroy(&instance.config.libImageMagick); - ffStrbufDestroy(&instance.config.libZ); - ffStrbufDestroy(&instance.config.libChafa); - ffStrbufDestroy(&instance.config.libEGL); - ffStrbufDestroy(&instance.config.libGLX); - ffStrbufDestroy(&instance.config.libOSMesa); - ffStrbufDestroy(&instance.config.libOpenCL); - ffStrbufDestroy(&instance.config.libfreetype); - ffStrbufDestroy(&instance.config.libPulse); - ffStrbufDestroy(&instance.config.libnm); - ffStrbufDestroy(&instance.config.libDdcutil); + ffOptionsDestroyLibrary(&instance.config.library); } static void destroyState(void) diff --git a/src/common/jsonconfig.c b/src/common/jsonconfig.c index 384751370..5a890ba22 100644 --- a/src/common/jsonconfig.c +++ b/src/common/jsonconfig.c @@ -366,79 +366,6 @@ const char* ffParseDisplayJsonConfig(FFconfig* config) return NULL; } -const char* ffParseLibraryJsonConfig(FFconfig* config) -{ - yyjson_val* const root = yyjson_doc_get_root(instance.state.configDoc); - assert(root); - - if (!yyjson_is_obj(root)) - return "Invalid JSON config format. Root value must be an object"; - - yyjson_val* object = yyjson_obj_get(root, "library"); - if (!object) return NULL; - if (!yyjson_is_obj(object)) return "Property 'library' must be an object"; - - yyjson_val *key_, *val; - size_t idx, max; - yyjson_obj_foreach(object, idx, max, key_, val) - { - const char* key = yyjson_get_str(key_); - - if (ffStrEqualsIgnCase(key, "pci")) - ffStrbufSetS(&config->libPCI, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "vulkan")) - ffStrbufSetS(&config->libVulkan, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "freetype")) - ffStrbufSetS(&config->libfreetype, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "wayland")) - ffStrbufSetS(&config->libWayland, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "xcbRandr")) - ffStrbufSetS(&config->libXcbRandr, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "xcb")) - ffStrbufSetS(&config->libXcb, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "Xrandr")) - ffStrbufSetS(&config->libXrandr, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "X11")) - ffStrbufSetS(&config->libX11, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "gio")) - ffStrbufSetS(&config->libGIO, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "DConf")) - ffStrbufSetS(&config->libDConf, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "dbus")) - ffStrbufSetS(&config->libDBus, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "XFConf")) - ffStrbufSetS(&config->libXFConf, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "sqlite") || ffStrEqualsIgnCase(key, "sqlite3")) - ffStrbufSetS(&config->libSQLite3, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "rpm")) - ffStrbufSetS(&config->librpm, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "imagemagick")) - ffStrbufSetS(&config->libImageMagick, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "z")) - ffStrbufSetS(&config->libZ, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "chafa")) - ffStrbufSetS(&config->libChafa, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "egl")) - ffStrbufSetS(&config->libEGL, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "glx")) - ffStrbufSetS(&config->libGLX, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "osmesa")) - ffStrbufSetS(&config->libOSMesa, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "opencl")) - ffStrbufSetS(&config->libOpenCL, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "pulse")) - ffStrbufSetS(&config->libPulse, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "nm")) - ffStrbufSetS(&config->libnm, yyjson_get_str(val)); - else if (ffStrEqualsIgnCase(key, "ddcutil")) - ffStrbufSetS(&config->libDdcutil, yyjson_get_str(val)); - else - return "Unknown library property"; - } - - return NULL; -} - void ffPrintJsonConfig(bool prepare) { const char* error = printJsonConfig(prepare); diff --git a/src/common/jsonconfig.h b/src/common/jsonconfig.h index 6103d7337..2ca3fc950 100644 --- a/src/common/jsonconfig.h +++ b/src/common/jsonconfig.h @@ -6,7 +6,6 @@ bool ffJsonConfigParseModuleArgs(const char* key, yyjson_val* val, FFModuleArgs* const char* ffJsonConfigParseEnum(yyjson_val* val, int* result, FFKeyValuePair pairs[]); void ffPrintJsonConfig(bool prepare); const char* ffParseDisplayJsonConfig(FFconfig* config); -const char* ffParseLibraryJsonConfig(FFconfig* config); void ffJsonConfigGenerateModuleArgsConfig(yyjson_mut_doc* doc, yyjson_mut_val* module, FFModuleArgs* defaultModuleArgs, FFModuleArgs* moduleArgs); yyjson_api_inline bool yyjson_mut_obj_add_strbuf(yyjson_mut_doc *doc, diff --git a/src/common/settings.c b/src/common/settings.c index dda3fe62d..0e1dbeb29 100644 --- a/src/common/settings.c +++ b/src/common/settings.c @@ -99,7 +99,7 @@ typedef struct GSettingsData static const GSettingsData* getGSettingsData(void) { - FF_LIBRARY_DATA_LOAD_INIT(GSettingsData, instance.config.libGIO, "libgio-2.0" FF_LIBRARY_EXTENSION, 1); + FF_LIBRARY_DATA_LOAD_INIT(GSettingsData, instance.config.library.libGIO, "libgio-2.0" FF_LIBRARY_EXTENSION, 1); FF_LIBRARY_DATA_LOAD_SYMBOL(g_settings_schema_source_lookup) FF_LIBRARY_DATA_LOAD_SYMBOL(g_settings_schema_has_key) @@ -172,7 +172,7 @@ typedef struct DConfData static const DConfData* getDConfData(void) { - FF_LIBRARY_DATA_LOAD_INIT(DConfData, instance.config.libDConf, "libdconf" FF_LIBRARY_EXTENSION, 2); + FF_LIBRARY_DATA_LOAD_INIT(DConfData, instance.config.library.libDConf, "libdconf" FF_LIBRARY_EXTENSION, 2); FF_LIBRARY_DATA_LOAD_SYMBOL(dconf_client_read_full) FF_LIBRARY_DATA_LOAD_SYMBOL(dconf_client_new) @@ -243,7 +243,7 @@ typedef struct XFConfData static const XFConfData* getXFConfData(void) { - FF_LIBRARY_DATA_LOAD_INIT(XFConfData, instance.config.libXFConf, "libxfconf-0" FF_LIBRARY_EXTENSION, 4); + FF_LIBRARY_DATA_LOAD_INIT(XFConfData, instance.config.library.libXFConf, "libxfconf-0" FF_LIBRARY_EXTENSION, 4); FF_LIBRARY_DATA_LOAD_SYMBOL(xfconf_channel_get) FF_LIBRARY_DATA_LOAD_SYMBOL(xfconf_channel_has_property) @@ -305,7 +305,7 @@ typedef struct SQLiteData static const SQLiteData* getSQLiteData(void) { - FF_LIBRARY_DATA_LOAD_INIT(SQLiteData, instance.config.libSQLite3, "libsqlite3" FF_LIBRARY_EXTENSION, 1); + FF_LIBRARY_DATA_LOAD_INIT(SQLiteData, instance.config.library.libSQLite3, "libsqlite3" FF_LIBRARY_EXTENSION, 1); FF_LIBRARY_DATA_LOAD_SYMBOL(sqlite3_open_v2) FF_LIBRARY_DATA_LOAD_SYMBOL(sqlite3_prepare_v2) diff --git a/src/detection/brightness/brightness_linux.c b/src/detection/brightness/brightness_linux.c index 9b354c0f2..ff3843c06 100644 --- a/src/detection/brightness/brightness_linux.c +++ b/src/detection/brightness/brightness_linux.c @@ -100,7 +100,7 @@ double ddca_set_default_sleep_multiplier(double multiplier); // ddcutil 1.4 static const char* detectWithDdcci(FFBrightnessOptions* options, FFlist* result) { - FF_LIBRARY_LOAD(libddcutil, &instance.config.libDdcutil, "dlopen ddcutil failed", "libddcutil" FF_LIBRARY_EXTENSION, 5); + FF_LIBRARY_LOAD(libddcutil, &instance.config.library.libDdcutil, "dlopen ddcutil failed", "libddcutil" FF_LIBRARY_EXTENSION, 5); FF_LIBRARY_LOAD_SYMBOL_MESSAGE(libddcutil, ddca_get_display_info_list2) FF_LIBRARY_LOAD_SYMBOL_MESSAGE(libddcutil, ddca_open_display2) FF_LIBRARY_LOAD_SYMBOL_MESSAGE(libddcutil, ddca_get_any_vcp_value_using_explicit_type) diff --git a/src/detection/displayserver/linux/wayland.c b/src/detection/displayserver/linux/wayland.c index 06d7c7f75..e9bfca341 100644 --- a/src/detection/displayserver/linux/wayland.c +++ b/src/detection/displayserver/linux/wayland.c @@ -276,7 +276,7 @@ static void waylandGlobalAddListener(void* data, struct wl_registry* registry, u bool detectWayland(FFDisplayServerResult* result) { - FF_LIBRARY_LOAD(wayland, &instance.config.libWayland, false, "libwayland-client" FF_LIBRARY_EXTENSION, 1) + FF_LIBRARY_LOAD(wayland, &instance.config.library.libWayland, false, "libwayland-client" FF_LIBRARY_EXTENSION, 1) FF_LIBRARY_LOAD_SYMBOL(wayland, wl_display_connect, false) FF_LIBRARY_LOAD_SYMBOL(wayland, wl_display_get_fd, false) diff --git a/src/detection/displayserver/linux/xcb.c b/src/detection/displayserver/linux/xcb.c index d968bfbad..4a5240837 100644 --- a/src/detection/displayserver/linux/xcb.c +++ b/src/detection/displayserver/linux/xcb.c @@ -100,7 +100,7 @@ static void xcbDetectWMfromEWMH(XcbPropertyData* data, xcb_connection_t* connect void ffdsConnectXcb(FFDisplayServerResult* result) { - FF_LIBRARY_LOAD(xcb, &instance.config.libXcb, , "libxcb" FF_LIBRARY_EXTENSION, 2) + FF_LIBRARY_LOAD(xcb, &instance.config.library.libXcb, , "libxcb" FF_LIBRARY_EXTENSION, 2) FF_LIBRARY_LOAD_SYMBOL(xcb, xcb_connect,) FF_LIBRARY_LOAD_SYMBOL(xcb, xcb_get_setup,) FF_LIBRARY_LOAD_SYMBOL(xcb, xcb_setup_roots_iterator,) @@ -429,7 +429,7 @@ static void xcbRandrHandleScreen(XcbRandrData* data, xcb_screen_t* screen) void ffdsConnectXcbRandr(FFDisplayServerResult* result) { - FF_LIBRARY_LOAD(xcbRandr, &instance.config.libXcbRandr, , "libxcb-randr" FF_LIBRARY_EXTENSION, 1) + FF_LIBRARY_LOAD(xcbRandr, &instance.config.library.libXcbRandr, , "libxcb-randr" FF_LIBRARY_EXTENSION, 1) FF_LIBRARY_LOAD_SYMBOL(xcbRandr, xcb_connect,) FF_LIBRARY_LOAD_SYMBOL(xcbRandr, xcb_get_setup,) FF_LIBRARY_LOAD_SYMBOL(xcbRandr, xcb_setup_roots_iterator,) diff --git a/src/detection/displayserver/linux/xlib.c b/src/detection/displayserver/linux/xlib.c index 4c9333d88..6c52a4393 100644 --- a/src/detection/displayserver/linux/xlib.c +++ b/src/detection/displayserver/linux/xlib.c @@ -60,7 +60,7 @@ static void x11DetectWMFromEWMH(X11PropertyData* data, Display* display, FFDispl void ffdsConnectXlib(FFDisplayServerResult* result) { - FF_LIBRARY_LOAD(x11, &instance.config.libX11, , "libX11" FF_LIBRARY_EXTENSION, 7, "libX11-xcb" FF_LIBRARY_EXTENSION, 2) + FF_LIBRARY_LOAD(x11, &instance.config.library.libX11, , "libX11" FF_LIBRARY_EXTENSION, 7, "libX11-xcb" FF_LIBRARY_EXTENSION, 2) FF_LIBRARY_LOAD_SYMBOL(x11, XOpenDisplay,) FF_LIBRARY_LOAD_SYMBOL(x11, XCloseDisplay,) @@ -338,7 +338,7 @@ static void xrandrHandleScreen(XrandrData* data, Screen* screen) void ffdsConnectXrandr(FFDisplayServerResult* result) { - FF_LIBRARY_LOAD(xrandr, &instance.config.libXrandr, , "libXrandr" FF_LIBRARY_EXTENSION, 3) + FF_LIBRARY_LOAD(xrandr, &instance.config.library.libXrandr, , "libXrandr" FF_LIBRARY_EXTENSION, 3) FF_LIBRARY_LOAD_SYMBOL(xrandr, XOpenDisplay,) FF_LIBRARY_LOAD_SYMBOL(xrandr, XCloseDisplay,) diff --git a/src/detection/gpu/gpu_linux.c b/src/detection/gpu/gpu_linux.c index 72a653008..9951699c3 100644 --- a/src/detection/gpu/gpu_linux.c +++ b/src/detection/gpu/gpu_linux.c @@ -270,7 +270,7 @@ static const char* pciDetectGPUs(const FFGPUOptions* options, FFlist* gpus) { PCIData pci; - FF_LIBRARY_LOAD(libpci, &instance.config.libPCI, "dlopen libpci.so failed", "libpci" FF_LIBRARY_EXTENSION, 4); + FF_LIBRARY_LOAD(libpci, &instance.config.library.libPCI, "dlopen libpci.so failed", "libpci" FF_LIBRARY_EXTENSION, 4); FF_LIBRARY_LOAD_SYMBOL_MESSAGE(libpci, pci_alloc); FF_LIBRARY_LOAD_SYMBOL_MESSAGE(libpci, pci_init); FF_LIBRARY_LOAD_SYMBOL_MESSAGE(libpci, pci_scan_bus); diff --git a/src/detection/lm/lm_linux.c b/src/detection/lm/lm_linux.c index 6416c80a7..0fb4fdba5 100644 --- a/src/detection/lm/lm_linux.c +++ b/src/detection/lm/lm_linux.c @@ -55,7 +55,7 @@ static const char* getSshdVersion(FFstrbuf* version) static const char* getSddmVersion(FFstrbuf* version) { - FF_LIBRARY_LOAD(zlib, &instance.config.libZ, "dlopen libz failed", "libz" FF_LIBRARY_EXTENSION, 2) + FF_LIBRARY_LOAD(zlib, &instance.config.library.libZ, "dlopen libz failed", "libz" FF_LIBRARY_EXTENSION, 2) FF_LIBRARY_LOAD_SYMBOL_MESSAGE(zlib, gzopen); FF_LIBRARY_LOAD_SYMBOL_MESSAGE(zlib, gzread); FF_LIBRARY_LOAD_SYMBOL_MESSAGE(zlib, gzerror); diff --git a/src/detection/opencl/opencl.c b/src/detection/opencl/opencl.c index 0526de2e2..3402c9311 100644 --- a/src/detection/opencl/opencl.c +++ b/src/detection/opencl/opencl.c @@ -72,7 +72,7 @@ const char* ffDetectOpenCL(FFOpenCLResult* result) OpenCLData data; - FF_LIBRARY_LOAD(opencl, &instance.config.libOpenCL, "dlopen libOpenCL"FF_LIBRARY_EXTENSION" failed", + FF_LIBRARY_LOAD(opencl, &instance.config.library.libOpenCL, "dlopen libOpenCL"FF_LIBRARY_EXTENSION" failed", #ifdef _WIN32 "OpenCL"FF_LIBRARY_EXTENSION, -1, #endif diff --git a/src/detection/opengl/opengl_linux.c b/src/detection/opengl/opengl_linux.c index 8ea44355d..8ce29e7a2 100644 --- a/src/detection/opengl/opengl_linux.c +++ b/src/detection/opengl/opengl_linux.c @@ -122,7 +122,7 @@ static const char* eglPrint(FFOpenGLResult* result) { EGLData eglData; - FF_LIBRARY_LOAD(egl, &instance.config.libEGL, "dlopen egl failed", "libEGL" FF_LIBRARY_EXTENSION, 1); + FF_LIBRARY_LOAD(egl, &instance.config.library.libEGL, "dlopen egl failed", "libEGL" FF_LIBRARY_EXTENSION, 1); FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(egl, eglData, eglGetProcAddress); FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(egl, eglData, eglGetDisplay); FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(egl, eglData, eglInitialize); @@ -239,7 +239,7 @@ static const char* glxPrint(FFOpenGLResult* result) { GLXData data; - FF_LIBRARY_LOAD(glx, &instance.config.libGLX, "dlopen glx failed", "libGLX" FF_LIBRARY_EXTENSION, 1); + FF_LIBRARY_LOAD(glx, &instance.config.library.libGLX, "dlopen glx failed", "libGLX" FF_LIBRARY_EXTENSION, 1); FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(glx, data, glXGetProcAddress); FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(glx, data, XOpenDisplay); FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(glx, data, glXChooseVisual); @@ -303,7 +303,7 @@ static const char* osMesaPrint(FFOpenGLResult* result) { OSMesaData data; - FF_LIBRARY_LOAD(osmesa, &instance.config.libOSMesa, "dlopen osmesa failed", "libOSMesa" FF_LIBRARY_EXTENSION, 8); + FF_LIBRARY_LOAD(osmesa, &instance.config.library.libOSMesa, "dlopen osmesa failed", "libOSMesa" FF_LIBRARY_EXTENSION, 8); FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(osmesa, data, OSMesaGetProcAddress); FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(osmesa, data, OSMesaCreateContext); FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(osmesa, data, OSMesaMakeCurrent); diff --git a/src/detection/packages/packages_linux.c b/src/detection/packages/packages_linux.c index 93a756012..332fd3de0 100644 --- a/src/detection/packages/packages_linux.c +++ b/src/detection/packages/packages_linux.c @@ -226,7 +226,7 @@ static uint32_t getFlatpak(FFstrbuf* baseDir, const char* dirname) static uint32_t getRpmFromLibrpm(void) { - FF_LIBRARY_LOAD(rpm, &instance.config.librpm, 0, "librpm" FF_LIBRARY_EXTENSION, 12) + FF_LIBRARY_LOAD(rpm, &instance.config.library.librpm, 0, "librpm" FF_LIBRARY_EXTENSION, 12) FF_LIBRARY_LOAD_SYMBOL(rpm, rpmReadConfigFiles, 0) FF_LIBRARY_LOAD_SYMBOL(rpm, rpmtsCreate, 0) FF_LIBRARY_LOAD_SYMBOL(rpm, rpmtsInitIterator, 0) diff --git a/src/detection/sound/sound_linux.c b/src/detection/sound/sound_linux.c index 8f14ab49e..f42ea3a79 100644 --- a/src/detection/sound/sound_linux.c +++ b/src/detection/sound/sound_linux.c @@ -38,7 +38,7 @@ static void paServerInfoCallback(pa_context *c, const pa_server_info *i, void *u static const char* detectSound(FFlist* devices) { - FF_LIBRARY_LOAD(pulse, &instance.config.libPulse, "Failed to load libpulse" FF_LIBRARY_EXTENSION, "libpulse" FF_LIBRARY_EXTENSION, 0) + FF_LIBRARY_LOAD(pulse, &instance.config.library.libPulse, "Failed to load libpulse" FF_LIBRARY_EXTENSION, "libpulse" FF_LIBRARY_EXTENSION, 0) FF_LIBRARY_LOAD_SYMBOL_MESSAGE(pulse, pa_mainloop_new) FF_LIBRARY_LOAD_SYMBOL_MESSAGE(pulse, pa_mainloop_get_api) FF_LIBRARY_LOAD_SYMBOL_MESSAGE(pulse, pa_mainloop_iterate) diff --git a/src/detection/terminalfont/terminalfont_android.c b/src/detection/terminalfont/terminalfont_android.c index bced44147..72a67fb0a 100644 --- a/src/detection/terminalfont/terminalfont_android.c +++ b/src/detection/terminalfont/terminalfont_android.c @@ -15,7 +15,7 @@ const char* detectTermux(FFTerminalFontResult* terminalFont) { #ifdef FF_HAVE_FREETYPE - FF_LIBRARY_LOAD(freetype, &instance.config.libfreetype, "dlopen libfreetype"FF_LIBRARY_EXTENSION " failed", "libfreetype"FF_LIBRARY_EXTENSION, 2) + FF_LIBRARY_LOAD(freetype, &instance.config.library.libfreetype, "dlopen libfreetype"FF_LIBRARY_EXTENSION " failed", "libfreetype"FF_LIBRARY_EXTENSION, 2) FF_LIBRARY_LOAD_SYMBOL_MESSAGE(freetype, FT_Init_FreeType); FF_LIBRARY_LOAD_SYMBOL_MESSAGE(freetype, FT_New_Face); FF_LIBRARY_LOAD_SYMBOL_MESSAGE(freetype, FT_Done_Face); diff --git a/src/detection/vulkan/vulkan.c b/src/detection/vulkan/vulkan.c index 0516e1bbc..dd337e8d2 100644 --- a/src/detection/vulkan/vulkan.c +++ b/src/detection/vulkan/vulkan.c @@ -40,7 +40,7 @@ static void applyDriverName(VkPhysicalDeviceDriverProperties* properties, FFstrb static const char* detectVulkan(FFVulkanResult* result) { - FF_LIBRARY_LOAD(vulkan, &instance.config.libVulkan, "dlopen libvulkan"FF_LIBRARY_EXTENSION " failed", + FF_LIBRARY_LOAD(vulkan, &instance.config.library.libVulkan, "dlopen libvulkan"FF_LIBRARY_EXTENSION " failed", #ifdef __APPLE__ "libMoltenVK"FF_LIBRARY_EXTENSION, -1 #elif defined(_WIN32) diff --git a/src/detection/wallpaper/wallpaper_apple.c b/src/detection/wallpaper/wallpaper_apple.c index 4ec131417..87691abb4 100644 --- a/src/detection/wallpaper/wallpaper_apple.c +++ b/src/detection/wallpaper/wallpaper_apple.c @@ -24,7 +24,7 @@ const char* ffDetectWallpaper(FFstrbuf* result) #endif if (!ffOsascript("tell application \"Finder\" to get POSIX path of (get desktop picture as alias)", result)) - return "ffOsascript() failed"; + return "ffOsascript(get desktop picture) failed"; return NULL; } diff --git a/src/detection/wifi/wifi_linux.c b/src/detection/wifi/wifi_linux.c index 9a75d587e..9a5c957b9 100644 --- a/src/detection/wifi/wifi_linux.c +++ b/src/detection/wifi/wifi_linux.c @@ -22,7 +22,7 @@ static const char* detectWifiWithLibnm(FFlist* result) { - FF_LIBRARY_LOAD(nm, &instance.config.libnm, "dlopen libnm failed", "libnm" FF_LIBRARY_EXTENSION, 0); + FF_LIBRARY_LOAD(nm, &instance.config.library.libnm, "dlopen libnm failed", "libnm" FF_LIBRARY_EXTENSION, 0); FF_LIBRARY_LOAD_SYMBOL_MESSAGE(nm, nm_client_new); FF_LIBRARY_LOAD_SYMBOL_MESSAGE(nm, nm_client_get_devices); FF_LIBRARY_LOAD_SYMBOL_MESSAGE(nm, nm_device_get_iface); diff --git a/src/fastfetch.c b/src/fastfetch.c index 548eb382f..4a1cd470e 100644 --- a/src/fastfetch.c +++ b/src/fastfetch.c @@ -649,61 +649,7 @@ static void parseOption(FFdata* data, const char* key, const char* value) /////////////////// //Library options// /////////////////// - - else if(ffStrStartsWithIgnCase(key, "--lib-")) - { - const char* subkey = key + strlen("--lib-"); - if(ffStrEqualsIgnCase(subkey, "PCI")) - ffOptionParseString(key, value, &instance.config.libPCI); - else if(ffStrEqualsIgnCase(subkey, "vulkan")) - ffOptionParseString(key, value, &instance.config.libVulkan); - else if(ffStrEqualsIgnCase(subkey, "freetype")) - ffOptionParseString(key, value, &instance.config.libfreetype); - else if(ffStrEqualsIgnCase(subkey, "wayland")) - ffOptionParseString(key, value, &instance.config.libWayland); - else if(ffStrEqualsIgnCase(subkey, "xcb-randr")) - ffOptionParseString(key, value, &instance.config.libXcbRandr); - else if(ffStrEqualsIgnCase(subkey, "xcb")) - ffOptionParseString(key, value, &instance.config.libXcb); - else if(ffStrEqualsIgnCase(subkey, "Xrandr")) - ffOptionParseString(key, value, &instance.config.libXrandr); - else if(ffStrEqualsIgnCase(subkey, "X11")) - ffOptionParseString(key, value, &instance.config.libX11); - else if(ffStrEqualsIgnCase(subkey, "gio")) - ffOptionParseString(key, value, &instance.config.libGIO); - else if(ffStrEqualsIgnCase(subkey, "DConf")) - ffOptionParseString(key, value, &instance.config.libDConf); - else if(ffStrEqualsIgnCase(subkey, "dbus")) - ffOptionParseString(key, value, &instance.config.libDBus); - else if(ffStrEqualsIgnCase(subkey, "XFConf")) - ffOptionParseString(key, value, &instance.config.libXFConf); - else if(ffStrEqualsIgnCase(subkey, "sqlite") || ffStrEqualsIgnCase(subkey, "sqlite3")) - ffOptionParseString(key, value, &instance.config.libSQLite3); - else if(ffStrEqualsIgnCase(subkey, "rpm")) - ffOptionParseString(key, value, &instance.config.librpm); - else if(ffStrEqualsIgnCase(subkey, "imagemagick")) - ffOptionParseString(key, value, &instance.config.libImageMagick); - else if(ffStrEqualsIgnCase(subkey, "z")) - ffOptionParseString(key, value, &instance.config.libZ); - else if(ffStrEqualsIgnCase(subkey, "chafa")) - ffOptionParseString(key, value, &instance.config.libChafa); - else if(ffStrEqualsIgnCase(subkey, "egl")) - ffOptionParseString(key, value, &instance.config.libEGL); - else if(ffStrEqualsIgnCase(subkey, "glx")) - ffOptionParseString(key, value, &instance.config.libGLX); - else if(ffStrEqualsIgnCase(subkey, "osmesa")) - ffOptionParseString(key, value, &instance.config.libOSMesa); - else if(ffStrEqualsIgnCase(subkey, "opencl")) - ffOptionParseString(key, value, &instance.config.libOpenCL); - else if(ffStrEqualsIgnCase(subkey, "pulse")) - ffOptionParseString(key, value, &instance.config.libPulse); - else if(ffStrEqualsIgnCase(subkey, "nm")) - ffOptionParseString(key, value, &instance.config.libnm); - else if(ffStrEqualsIgnCase(subkey, "ddcutil")) - ffOptionParseString(key, value, &instance.config.libDdcutil); - else - goto error; - } + else if(ffOptionsParseLibraryCommandLine(&instance.config.library, key, value)) {} /////////////////////// //Module args options// @@ -796,7 +742,7 @@ static void run(FFdata* data) (error = ffOptionsParseLogoJsonConfig(&instance.config.logo, root)) || (error = ffOptionsParseGeneralJsonConfig(&instance.config.general, root)) || (error = ffParseDisplayJsonConfig(&instance.config)) || - (error = ffParseLibraryJsonConfig(&instance.config)) || + (error = ffOptionsParseLibraryJsonConfig(&instance.config.library, root)) || false ) { fputs(error, stderr); diff --git a/src/fastfetch.h b/src/fastfetch.h index e957adf75..7be79ab60 100644 --- a/src/fastfetch.h +++ b/src/fastfetch.h @@ -26,6 +26,7 @@ #include "options/modules.h" #include "options/logo.h" #include "options/general.h" +#include "options/library.h" typedef enum FFBinaryPrefixType { @@ -73,30 +74,7 @@ typedef struct FFconfig bool noBuffer; uint32_t keyWidth; - FFstrbuf libPCI; - FFstrbuf libVulkan; - FFstrbuf libWayland; - FFstrbuf libXcbRandr; - FFstrbuf libXcb; - FFstrbuf libXrandr; - FFstrbuf libX11; - FFstrbuf libGIO; - FFstrbuf libDConf; - FFstrbuf libDBus; - FFstrbuf libXFConf; - FFstrbuf libSQLite3; - FFstrbuf librpm; - FFstrbuf libImageMagick; - FFstrbuf libZ; - FFstrbuf libChafa; - FFstrbuf libEGL; - FFstrbuf libGLX; - FFstrbuf libOSMesa; - FFstrbuf libOpenCL; - FFstrbuf libfreetype; - FFstrbuf libPulse; - FFstrbuf libnm; - FFstrbuf libDdcutil; + FFOptionsLibrary library; } FFconfig; typedef struct FFstate diff --git a/src/logo/image/im6.c b/src/logo/image/im6.c index c9a1e56a4..a8820f53b 100644 --- a/src/logo/image/im6.c +++ b/src/logo/image/im6.c @@ -14,7 +14,7 @@ static void* logoResize(const void* image, size_t width, size_t height, void* ex FFLogoImageResult ffLogoPrintImageIM6(FFLogoRequestData* requestData) { - FF_LIBRARY_LOAD(imageMagick, &instance.config.libImageMagick, FF_LOGO_IMAGE_RESULT_INIT_ERROR, "libMagickCore-6.Q16HDRI" FF_LIBRARY_EXTENSION, 8, "libMagickCore-6.Q16" FF_LIBRARY_EXTENSION, 8) + FF_LIBRARY_LOAD(imageMagick, &instance.config.library.libImageMagick, FF_LOGO_IMAGE_RESULT_INIT_ERROR, "libMagickCore-6.Q16HDRI" FF_LIBRARY_EXTENSION, 8, "libMagickCore-6.Q16" FF_LIBRARY_EXTENSION, 8) FF_LIBRARY_LOAD_SYMBOL_ADDRESS(imageMagick, ffResizeImage, ResizeImage, FF_LOGO_IMAGE_RESULT_INIT_ERROR); return ffLogoPrintImageImpl(requestData, &(FFIMData) { diff --git a/src/logo/image/im7.c b/src/logo/image/im7.c index 394e124df..03229aacb 100644 --- a/src/logo/image/im7.c +++ b/src/logo/image/im7.c @@ -14,7 +14,7 @@ static void* logoResize(const void* image, size_t width, size_t height, void* ex FFLogoImageResult ffLogoPrintImageIM7(FFLogoRequestData* requestData) { - FF_LIBRARY_LOAD(imageMagick, &instance.config.libImageMagick, FF_LOGO_IMAGE_RESULT_INIT_ERROR, + FF_LIBRARY_LOAD(imageMagick, &instance.config.library.libImageMagick, FF_LOGO_IMAGE_RESULT_INIT_ERROR, "libMagickCore-7.Q16HDRI" FF_LIBRARY_EXTENSION, 11, "libMagickCore-7.Q16" FF_LIBRARY_EXTENSION, 11, "libMagickCore-7.Q16HDRI-10" FF_LIBRARY_EXTENSION, -1 // Required for Windows diff --git a/src/logo/image/image.c b/src/logo/image/image.c index 8756fcca9..6164585f5 100644 --- a/src/logo/image/image.c +++ b/src/logo/image/image.c @@ -222,7 +222,7 @@ static inline char* realpath(const char* restrict file_name, char* restrict reso static bool compressBlob(void** blob, size_t* length) { - FF_LIBRARY_LOAD(zlib, &instance.config.libZ, false, "libz" FF_LIBRARY_EXTENSION, 2) + FF_LIBRARY_LOAD(zlib, &instance.config.library.libZ, false, "libz" FF_LIBRARY_EXTENSION, 2) FF_LIBRARY_LOAD_SYMBOL(zlib, compressBound, false) FF_LIBRARY_LOAD_SYMBOL(zlib, compress2, false) @@ -398,7 +398,7 @@ static bool printImageKitty(FFLogoRequestData* requestData, const ImageData* ima #include static bool printImageChafa(FFLogoRequestData* requestData, const ImageData* imageData) { - FF_LIBRARY_LOAD(chafa, &instance.config.libChafa, false, + FF_LIBRARY_LOAD(chafa, &instance.config.library.libChafa, false, "libchafa" FF_LIBRARY_EXTENSION, 1, "libchafa-0" FF_LIBRARY_EXTENSION, -1 // Required for Windows ) diff --git a/src/options/library.c b/src/options/library.c new file mode 100644 index 000000000..5020891f1 --- /dev/null +++ b/src/options/library.c @@ -0,0 +1,188 @@ +#include "fastfetch.h" +#include "options/library.h" +#include "util/stringUtils.h" + +const char* ffOptionsParseLibraryJsonConfig(FFOptionsLibrary* options, yyjson_val* root) +{ + yyjson_val* object = yyjson_obj_get(root, "library"); + if (!object) return NULL; + if (!yyjson_is_obj(object)) return "Property 'library' must be an object"; + + yyjson_val *key_, *val; + size_t idx, max; + yyjson_obj_foreach(object, idx, max, key_, val) + { + const char* key = yyjson_get_str(key_); + + if (ffStrEqualsIgnCase(key, "pci")) + ffStrbufSetS(&options->libPCI, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "vulkan")) + ffStrbufSetS(&options->libVulkan, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "freetype")) + ffStrbufSetS(&options->libfreetype, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "wayland")) + ffStrbufSetS(&options->libWayland, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "xcbRandr")) + ffStrbufSetS(&options->libXcbRandr, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "xcb")) + ffStrbufSetS(&options->libXcb, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "Xrandr")) + ffStrbufSetS(&options->libXrandr, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "X11")) + ffStrbufSetS(&options->libX11, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "gio")) + ffStrbufSetS(&options->libGIO, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "DConf")) + ffStrbufSetS(&options->libDConf, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "dbus")) + ffStrbufSetS(&options->libDBus, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "XFConf")) + ffStrbufSetS(&options->libXFConf, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "sqlite") || ffStrEqualsIgnCase(key, "sqlite3")) + ffStrbufSetS(&options->libSQLite3, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "rpm")) + ffStrbufSetS(&options->librpm, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "imagemagick")) + ffStrbufSetS(&options->libImageMagick, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "z")) + ffStrbufSetS(&options->libZ, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "chafa")) + ffStrbufSetS(&options->libChafa, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "egl")) + ffStrbufSetS(&options->libEGL, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "glx")) + ffStrbufSetS(&options->libGLX, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "osmesa")) + ffStrbufSetS(&options->libOSMesa, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "opencl")) + ffStrbufSetS(&options->libOpenCL, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "pulse")) + ffStrbufSetS(&options->libPulse, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "nm")) + ffStrbufSetS(&options->libnm, yyjson_get_str(val)); + else if (ffStrEqualsIgnCase(key, "ddcutil")) + ffStrbufSetS(&options->libDdcutil, yyjson_get_str(val)); + else + return "Unknown library property"; + } + + return NULL; +} + +bool ffOptionsParseLibraryCommandLine(FFOptionsLibrary* options, const char* key, const char* value) +{ + if(ffStrStartsWithIgnCase(key, "--lib-")) + { + const char* subkey = key + strlen("--lib-"); + if(ffStrEqualsIgnCase(subkey, "PCI")) + ffOptionParseString(key, value, &options->libPCI); + else if(ffStrEqualsIgnCase(subkey, "vulkan")) + ffOptionParseString(key, value, &options->libVulkan); + else if(ffStrEqualsIgnCase(subkey, "freetype")) + ffOptionParseString(key, value, &options->libfreetype); + else if(ffStrEqualsIgnCase(subkey, "wayland")) + ffOptionParseString(key, value, &options->libWayland); + else if(ffStrEqualsIgnCase(subkey, "xcb-randr")) + ffOptionParseString(key, value, &options->libXcbRandr); + else if(ffStrEqualsIgnCase(subkey, "xcb")) + ffOptionParseString(key, value, &options->libXcb); + else if(ffStrEqualsIgnCase(subkey, "Xrandr")) + ffOptionParseString(key, value, &options->libXrandr); + else if(ffStrEqualsIgnCase(subkey, "X11")) + ffOptionParseString(key, value, &options->libX11); + else if(ffStrEqualsIgnCase(subkey, "gio")) + ffOptionParseString(key, value, &options->libGIO); + else if(ffStrEqualsIgnCase(subkey, "DConf")) + ffOptionParseString(key, value, &options->libDConf); + else if(ffStrEqualsIgnCase(subkey, "dbus")) + ffOptionParseString(key, value, &options->libDBus); + else if(ffStrEqualsIgnCase(subkey, "XFConf")) + ffOptionParseString(key, value, &options->libXFConf); + else if(ffStrEqualsIgnCase(subkey, "sqlite") || ffStrEqualsIgnCase(subkey, "sqlite3")) + ffOptionParseString(key, value, &options->libSQLite3); + else if(ffStrEqualsIgnCase(subkey, "rpm")) + ffOptionParseString(key, value, &options->librpm); + else if(ffStrEqualsIgnCase(subkey, "imagemagick")) + ffOptionParseString(key, value, &options->libImageMagick); + else if(ffStrEqualsIgnCase(subkey, "z")) + ffOptionParseString(key, value, &options->libZ); + else if(ffStrEqualsIgnCase(subkey, "chafa")) + ffOptionParseString(key, value, &options->libChafa); + else if(ffStrEqualsIgnCase(subkey, "egl")) + ffOptionParseString(key, value, &options->libEGL); + else if(ffStrEqualsIgnCase(subkey, "glx")) + ffOptionParseString(key, value, &options->libGLX); + else if(ffStrEqualsIgnCase(subkey, "osmesa")) + ffOptionParseString(key, value, &options->libOSMesa); + else if(ffStrEqualsIgnCase(subkey, "opencl")) + ffOptionParseString(key, value, &options->libOpenCL); + else if(ffStrEqualsIgnCase(subkey, "pulse")) + ffOptionParseString(key, value, &options->libPulse); + else if(ffStrEqualsIgnCase(subkey, "nm")) + ffOptionParseString(key, value, &options->libnm); + else if(ffStrEqualsIgnCase(subkey, "ddcutil")) + ffOptionParseString(key, value, &options->libDdcutil); + else + return false; + } + else + return false; + + return true; +} + +void ffOptionsInitLibrary(FFOptionsLibrary* options) +{ + ffStrbufInit(&options->libPCI); + ffStrbufInit(&options->libVulkan); + ffStrbufInit(&options->libWayland); + ffStrbufInit(&options->libXcbRandr); + ffStrbufInit(&options->libXcb); + ffStrbufInit(&options->libXrandr); + ffStrbufInit(&options->libX11); + ffStrbufInit(&options->libGIO); + ffStrbufInit(&options->libDConf); + ffStrbufInit(&options->libDBus); + ffStrbufInit(&options->libXFConf); + ffStrbufInit(&options->libSQLite3); + ffStrbufInit(&options->librpm); + ffStrbufInit(&options->libImageMagick); + ffStrbufInit(&options->libZ); + ffStrbufInit(&options->libChafa); + ffStrbufInit(&options->libEGL); + ffStrbufInit(&options->libGLX); + ffStrbufInit(&options->libOSMesa); + ffStrbufInit(&options->libOpenCL); + ffStrbufInit(&options->libfreetype); + ffStrbufInit(&options->libPulse); + ffStrbufInit(&options->libnm); + ffStrbufInit(&options->libDdcutil); +} + +void ffOptionsDestroyLibrary(FFOptionsLibrary* options) +{ + ffStrbufDestroy(&options->libPCI); + ffStrbufDestroy(&options->libVulkan); + ffStrbufDestroy(&options->libWayland); + ffStrbufDestroy(&options->libXcbRandr); + ffStrbufDestroy(&options->libXcb); + ffStrbufDestroy(&options->libXrandr); + ffStrbufDestroy(&options->libX11); + ffStrbufDestroy(&options->libGIO); + ffStrbufDestroy(&options->libDConf); + ffStrbufDestroy(&options->libDBus); + ffStrbufDestroy(&options->libXFConf); + ffStrbufDestroy(&options->libSQLite3); + ffStrbufDestroy(&options->librpm); + ffStrbufDestroy(&options->libImageMagick); + ffStrbufDestroy(&options->libZ); + ffStrbufDestroy(&options->libChafa); + ffStrbufDestroy(&options->libEGL); + ffStrbufDestroy(&options->libGLX); + ffStrbufDestroy(&options->libOSMesa); + ffStrbufDestroy(&options->libOpenCL); + ffStrbufDestroy(&options->libfreetype); + ffStrbufDestroy(&options->libPulse); + ffStrbufDestroy(&options->libnm); + ffStrbufDestroy(&options->libDdcutil); +} diff --git a/src/options/library.h b/src/options/library.h new file mode 100644 index 000000000..6cfde64a7 --- /dev/null +++ b/src/options/library.h @@ -0,0 +1,36 @@ +#pragma once + +#include "util/FFstrbuf.h" + +typedef struct FFOptionsLibrary +{ + FFstrbuf libPCI; + FFstrbuf libVulkan; + FFstrbuf libWayland; + FFstrbuf libXcbRandr; + FFstrbuf libXcb; + FFstrbuf libXrandr; + FFstrbuf libX11; + FFstrbuf libGIO; + FFstrbuf libDConf; + FFstrbuf libDBus; + FFstrbuf libXFConf; + FFstrbuf libSQLite3; + FFstrbuf librpm; + FFstrbuf libImageMagick; + FFstrbuf libZ; + FFstrbuf libChafa; + FFstrbuf libEGL; + FFstrbuf libGLX; + FFstrbuf libOSMesa; + FFstrbuf libOpenCL; + FFstrbuf libfreetype; + FFstrbuf libPulse; + FFstrbuf libnm; + FFstrbuf libDdcutil; +} FFOptionsLibrary; + +const char* ffOptionsParseLibraryJsonConfig(FFOptionsLibrary* options, yyjson_val* root); +bool ffOptionsParseLibraryCommandLine(FFOptionsLibrary* options, const char* key, const char* value); +void ffOptionsInitLibrary(FFOptionsLibrary* options); +void ffOptionsDestroyLibrary(FFOptionsLibrary* options);