Files
fastfetch/src/common/init.c
T

459 lines
15 KiB
C
Raw Normal View History

2021-04-09 14:07:05 +02:00
#include "fastfetch.h"
2022-07-30 23:30:46 +02:00
#include "common/parsing.h"
#include "common/thread.h"
2022-09-06 15:42:37 +02:00
#include "detection/displayserver/displayserver.h"
2022-12-06 17:03:31 +08:00
#include "util/textModifier.h"
#include "logo/logo.h"
2021-04-09 14:07:05 +02:00
2022-06-18 14:25:31 +02:00
#include <stdlib.h>
2021-04-09 14:07:05 +02:00
#include <unistd.h>
2021-05-08 12:14:55 +02:00
#include <sys/stat.h>
2022-10-13 18:12:54 +08:00
#ifdef _WIN32
2023-03-24 23:21:39 +08:00
#include <windows.h>
2022-10-13 18:12:54 +08:00
#include <locale.h>
#include "util/windows/unicode.h"
2022-10-13 18:12:54 +08:00
#else
#include <signal.h>
#endif
2021-04-09 14:07:05 +02:00
2023-03-07 16:13:53 +08:00
#include "modules/modules.h"
2023-03-07 14:56:13 +08:00
2021-04-09 14:07:05 +02:00
static void initState(FFstate* state)
{
2022-04-06 14:02:05 +02:00
state->logoWidth = 0;
2022-04-02 14:35:43 +02:00
state->logoHeight = 0;
state->keysHeight = 0;
2023-03-09 18:11:03 +08:00
state->titleLength = 0;
2023-01-14 16:38:34 +01:00
2023-01-15 15:57:26 +01:00
ffPlatformInit(&state->platform);
2021-04-09 14:07:05 +02:00
}
2022-06-17 18:15:36 +02:00
static void initModuleArg(FFModuleArgs* args)
{
2022-10-19 15:03:59 +08:00
ffStrbufInit(&args->key);
ffStrbufInit(&args->outputFormat);
ffStrbufInit(&args->errorFormat);
2022-06-17 18:15:36 +02:00
}
2021-06-13 14:23:35 +02:00
static void defaultConfig(FFinstance* instance)
2021-04-09 14:07:05 +02:00
{
ffInitLogoOptions(&instance->config.logo);
2022-12-22 02:07:35 +08:00
2022-09-07 19:50:10 +02:00
ffStrbufInit(&instance->config.colorKeys);
ffStrbufInit(&instance->config.colorTitle);
ffStrbufInit(&instance->config.keyValueSeparator);
ffStrbufAppendS(&instance->config.keyValueSeparator, ": ");
2022-01-12 01:02:14 +01:00
2021-06-13 14:23:35 +02:00
instance->config.showErrors = false;
instance->config.recache = false;
instance->config.allowSlowOperations = false;
2021-06-17 13:49:25 +02:00
instance->config.disableLinewrap = true;
instance->config.hideCursor = true;
2022-06-02 23:06:49 +02:00
instance->config.escapeBedrock = true;
2022-08-26 16:02:04 +02:00
instance->config.binaryPrefixType = FF_BINARY_PREFIX_TYPE_IEC;
2022-06-04 15:21:34 +02:00
instance->config.glType = FF_GL_TYPE_AUTO;
2022-06-06 14:02:21 +02:00
instance->config.pipe = false;
2022-07-25 15:01:11 +02:00
instance->config.multithreading = true;
2022-12-14 11:30:50 +08:00
instance->config.stat = false;
2021-06-13 14:23:35 +02:00
2023-03-09 18:11:03 +08:00
ffInitTitleOptions(&instance->config.title);
2023-03-07 14:56:13 +08:00
ffInitOSOptions(&instance->config.os);
2023-03-10 11:26:53 +08:00
ffInitHostOptions(&instance->config.host);
2023-03-10 14:48:09 +08:00
ffInitBiosOptions(&instance->config.bios);
2023-03-13 18:54:57 +08:00
ffInitBoardOptions(&instance->config.board);
2023-03-14 15:29:47 +08:00
ffInitBrightnessOptions(&instance->config.brightness);
2022-12-24 22:48:10 +08:00
initModuleArg(&instance->config.chassis);
2023-03-07 19:27:49 +08:00
ffInitCommandOptions(&instance->config.command);
2023-03-20 15:46:00 +08:00
ffInitCustomOptions(&instance->config.custom);
2023-03-10 14:14:32 +08:00
ffInitKernelOptions(&instance->config.kernel);
2022-06-17 18:15:36 +02:00
initModuleArg(&instance->config.uptime);
initModuleArg(&instance->config.processes);
initModuleArg(&instance->config.packages);
initModuleArg(&instance->config.shell);
2023-03-10 10:56:36 +08:00
ffInitDisplayOptions(&instance->config.display);
2022-06-17 18:15:36 +02:00
initModuleArg(&instance->config.de);
initModuleArg(&instance->config.wm);
initModuleArg(&instance->config.wmTheme);
initModuleArg(&instance->config.theme);
initModuleArg(&instance->config.icons);
2023-04-04 12:28:52 +08:00
ffInitFontOptions(&instance->config.font);
2023-03-20 14:57:46 +08:00
ffInitCursorOptions(&instance->config.cursor);
2022-06-17 18:15:36 +02:00
initModuleArg(&instance->config.terminal);
initModuleArg(&instance->config.terminalFont);
2023-03-15 18:17:24 +08:00
ffInitCPUOptions(&instance->config.cpu);
2023-03-17 17:56:31 +08:00
ffInitCPUUsageOptions(&instance->config.cpuUsage);
2023-03-26 20:42:18 +08:00
ffInitGPUOptions(&instance->config.gpu);
2022-06-17 18:15:36 +02:00
initModuleArg(&instance->config.memory);
2022-09-08 14:51:31 +02:00
initModuleArg(&instance->config.swap);
2023-04-02 00:13:11 +08:00
ffInitDiskOptions(&instance->config.disk);
2023-03-07 16:13:53 +08:00
ffInitBatteryOptions(&instance->config.battery);
initModuleArg(&instance->config.powerAdapter);
2023-04-04 17:47:42 +08:00
ffInitLocaleOptions(&instance->config.locale);
2023-04-04 20:46:50 +08:00
ffInitLocalIpOptions(&instance->config.localIP);
2022-06-17 18:15:36 +02:00
initModuleArg(&instance->config.publicIP);
2022-09-29 17:05:01 +08:00
initModuleArg(&instance->config.weather);
2022-11-26 18:23:08 +08:00
initModuleArg(&instance->config.wifi);
2022-06-17 18:15:36 +02:00
initModuleArg(&instance->config.player);
initModuleArg(&instance->config.media);
2023-03-09 19:38:03 +08:00
ffInitDateTimeOptions(&instance->config.dateTime);
2022-06-17 18:15:36 +02:00
initModuleArg(&instance->config.vulkan);
2023-06-06 15:48:24 +08:00
initModuleArg(&instance->config.wallpaper);
2022-06-17 18:15:36 +02:00
initModuleArg(&instance->config.openGL);
initModuleArg(&instance->config.openCL);
2022-09-26 23:45:46 +08:00
initModuleArg(&instance->config.users);
2023-03-13 17:36:48 +08:00
ffInitBluetoothOptions(&instance->config.bluetooth);
2023-04-12 14:05:09 +08:00
ffInitSoundOptions(&instance->config.sound);
2023-03-09 17:00:37 +08:00
ffInitSeparatorOptions(&instance->config.separator);
2023-04-04 11:01:42 +08:00
ffInitGamepadOptions(&instance->config.gamepad);
2021-11-16 12:54:49 +01:00
ffStrbufInitA(&instance->config.libPCI, 0);
ffStrbufInitA(&instance->config.libVulkan, 0);
2022-01-05 14:40:57 +01:00
ffStrbufInitA(&instance->config.libWayland, 0);
ffStrbufInitA(&instance->config.libXcbRandr, 0);
ffStrbufInitA(&instance->config.libXcb, 0);
2021-11-16 12:54:49 +01:00
ffStrbufInitA(&instance->config.libXrandr, 0);
2022-01-05 14:40:57 +01:00
ffStrbufInitA(&instance->config.libX11, 0);
2021-11-16 12:54:49 +01:00
ffStrbufInitA(&instance->config.libGIO, 0);
ffStrbufInitA(&instance->config.libDConf, 0);
2022-02-13 23:51:13 +01:00
ffStrbufInitA(&instance->config.libDBus, 0);
2021-11-16 12:54:49 +01:00
ffStrbufInitA(&instance->config.libXFConf, 0);
2022-05-23 19:30:02 +02:00
ffStrbufInitA(&instance->config.libSQLite3, 0);
2022-05-24 13:36:33 +02:00
ffStrbufInitA(&instance->config.librpm, 0);
2022-04-06 14:02:05 +02:00
ffStrbufInitA(&instance->config.libImageMagick, 0);
2022-04-14 15:11:14 +02:00
ffStrbufInitA(&instance->config.libZ, 0);
2022-04-28 19:15:46 +02:00
ffStrbufInitA(&instance->config.libChafa, 0);
2022-06-04 15:21:34 +02:00
ffStrbufInitA(&instance->config.libEGL, 0);
ffStrbufInitA(&instance->config.libGLX, 0);
2022-06-04 19:30:26 +02:00
ffStrbufInitA(&instance->config.libOSMesa, 0);
2022-06-05 00:18:40 +02:00
ffStrbufInitA(&instance->config.libOpenCL, 0);
ffStrbufInitA(&instance->config.libJSONC, 0);
2022-09-26 23:07:18 +08:00
ffStrbufInitA(&instance->config.libfreetype, 0);
2023-01-26 15:48:28 +01:00
ffStrbufInit(&instance->config.libPulse);
2022-11-27 16:00:56 +08:00
ffStrbufInit(&instance->config.libwlanapi);
ffStrbufInit(&instance->config.libnm);
2021-11-16 12:54:49 +01:00
instance->config.shellVersion = true;
instance->config.terminalVersion = true;
2022-01-12 19:16:49 +01:00
instance->config.publicIpTimeout = 0;
ffStrbufInit(&instance->config.publicIpUrl);
2022-01-18 18:56:37 +01:00
2022-09-29 17:05:01 +08:00
instance->config.weatherTimeout = 0;
ffStrbufInitS(&instance->config.weatherOutputFormat, "%t+-+%C+(%l)");
2022-02-13 23:51:13 +01:00
ffStrbufInitA(&instance->config.playerName, 0);
instance->config.percentType = 1;
2021-04-09 14:07:05 +02:00
}
void ffInitInstance(FFinstance* instance)
{
2023-01-15 15:57:26 +01:00
#ifdef WIN32
//https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/setlocale-wsetlocale?source=recommendations&view=msvc-170#utf-8-support
setlocale(LC_ALL, ".UTF8");
#endif
2021-04-09 14:07:05 +02:00
initState(&instance->state);
2021-06-13 14:23:35 +02:00
defaultConfig(instance);
2021-04-09 14:07:05 +02:00
}
#if defined(FF_HAVE_THREADS) && !(defined(__APPLE__) || defined(_WIN32) || defined(__ANDROID__))
2022-07-25 15:01:11 +02:00
2023-02-14 17:46:21 +08:00
#include "detection/gtk_qt/gtk_qt.h"
#define FF_START_DETECTION_THREADS
2022-07-25 15:01:11 +02:00
FF_THREAD_ENTRY_DECL_WRAPPER(ffConnectDisplayServer, FFinstance*)
FF_THREAD_ENTRY_DECL_WRAPPER(ffDetectQt, FFinstance*)
FF_THREAD_ENTRY_DECL_WRAPPER(ffDetectGTK2, FFinstance*)
FF_THREAD_ENTRY_DECL_WRAPPER(ffDetectGTK3, FFinstance*)
FF_THREAD_ENTRY_DECL_WRAPPER(ffDetectGTK4, FFinstance*)
2022-07-25 15:01:11 +02:00
void startDetectionThreads(FFinstance* instance)
{
ffThreadDetach(ffThreadCreate(ffConnectDisplayServerThreadMain, instance));
ffThreadDetach(ffThreadCreate(ffDetectQtThreadMain, instance));
ffThreadDetach(ffThreadCreate(ffDetectGTK2ThreadMain, instance));
ffThreadDetach(ffThreadCreate(ffDetectGTK3ThreadMain, instance));
ffThreadDetach(ffThreadCreate(ffDetectGTK4ThreadMain, instance));
2022-09-15 11:59:06 +02:00
}
#endif //FF_HAVE_THREADS
2022-06-06 14:02:21 +02:00
static volatile bool ffDisableLinewrap = true;
static volatile bool ffHideCursor = true;
static void resetConsole()
2021-10-23 15:48:24 +02:00
{
2022-06-06 14:02:21 +02:00
if(ffDisableLinewrap)
2021-10-23 15:48:24 +02:00
fputs("\033[?7h", stdout);
2022-06-06 14:02:21 +02:00
if(ffHideCursor)
2021-10-23 15:48:24 +02:00
fputs("\033[?25h", stdout);
#if defined(_WIN32) && defined(FF_ENABLE_BUFFER)
fflush(stdout);
#endif
2021-10-23 15:48:24 +02:00
}
2022-10-13 18:12:54 +08:00
#ifdef _WIN32
BOOL WINAPI consoleHandler(DWORD signal)
{
FF_UNUSED(signal);
resetConsole();
exit(0);
2022-10-13 18:12:54 +08:00
}
#else
2021-10-23 15:48:24 +02:00
static void exitSignalHandler(int signal)
{
FF_UNUSED(signal);
2022-06-06 14:02:21 +02:00
resetConsole();
2021-10-23 15:48:24 +02:00
exit(0);
}
2022-10-13 18:12:54 +08:00
#endif
2021-10-23 15:48:24 +02:00
2021-06-17 13:49:25 +02:00
void ffStart(FFinstance* instance)
{
#ifdef FF_START_DETECTION_THREADS
if(instance->config.multithreading)
startDetectionThreads(instance);
#endif
2022-07-25 15:01:11 +02:00
2022-06-06 14:02:21 +02:00
ffDisableLinewrap = instance->config.disableLinewrap && !instance->config.pipe;
ffHideCursor = instance->config.hideCursor && !instance->config.pipe;
2021-10-23 15:48:24 +02:00
2022-10-13 18:12:54 +08:00
#ifdef _WIN32
2022-12-14 16:27:04 +08:00
#ifdef FF_ENABLE_BUFFER
setvbuf(stdout, NULL, _IOFBF, 4096);
#endif
2022-10-13 18:12:54 +08:00
SetConsoleCtrlHandler(consoleHandler, TRUE);
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD mode = 0;
GetConsoleMode(hStdout, &mode);
SetConsoleMode(hStdout, mode | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
2022-12-10 22:21:11 +08:00
SetConsoleOutputCP(CP_UTF8);
2022-10-13 18:12:54 +08:00
#else
2022-12-14 16:27:04 +08:00
#ifndef FF_ENABLE_BUFFER
setvbuf(stdout, NULL, _IONBF, 0);
#endif
2022-10-13 18:12:54 +08:00
struct sigaction action = { .sa_handler = exitSignalHandler };
2021-10-23 15:48:24 +02:00
sigaction(SIGINT, &action, NULL);
sigaction(SIGTERM, &action, NULL);
sigaction(SIGQUIT, &action, NULL);
2022-10-13 18:12:54 +08:00
#endif
2021-10-23 15:48:24 +02:00
2022-04-02 14:35:43 +02:00
//reset everything to default before we start printing
2022-06-06 14:02:21 +02:00
if(!instance->config.pipe)
fputs(FASTFETCH_TEXT_MODIFIER_RESET, stdout);
2022-04-02 14:35:43 +02:00
2022-06-06 14:02:21 +02:00
if(ffHideCursor)
2021-06-17 13:49:25 +02:00
fputs("\033[?25l", stdout);
2022-06-06 14:02:21 +02:00
if(ffDisableLinewrap)
2021-06-17 13:49:25 +02:00
fputs("\033[?7l", stdout);
2022-04-02 14:35:43 +02:00
2022-06-08 10:59:33 +02:00
ffLogoPrint(instance);
2021-06-17 13:49:25 +02:00
}
2021-04-09 14:07:05 +02:00
void ffFinish(FFinstance* instance)
{
2022-07-10 18:28:17 +02:00
if(instance->config.logo.printRemaining)
2022-06-08 10:59:33 +02:00
ffLogoPrintRemaining(instance);
2022-06-06 14:02:21 +02:00
resetConsole();
2022-09-22 22:02:58 +02:00
}
2022-09-22 21:28:20 +08:00
2022-10-09 13:34:55 +02:00
static void destroyModuleArg(FFModuleArgs* args)
2022-09-22 22:02:58 +02:00
{
2022-10-09 13:34:55 +02:00
ffStrbufDestroy(&args->key);
ffStrbufDestroy(&args->outputFormat);
ffStrbufDestroy(&args->errorFormat);
}
2022-09-22 22:02:58 +02:00
2022-10-09 13:34:55 +02:00
static void destroyConfig(FFinstance* instance)
{
ffDestroyLogoOptions(&instance->config.logo);
2022-09-22 21:28:20 +08:00
ffStrbufDestroy(&instance->config.colorKeys);
ffStrbufDestroy(&instance->config.colorTitle);
ffStrbufDestroy(&instance->config.keyValueSeparator);
2022-10-09 13:34:55 +02:00
2023-03-09 18:11:03 +08:00
ffDestroyTitleOptions(&instance->config.title);
2023-03-07 14:56:13 +08:00
ffDestroyOSOptions(&instance->config.os);
2023-03-10 11:26:53 +08:00
ffDestroyHostOptions(&instance->config.host);
2023-03-10 14:48:09 +08:00
ffDestroyBiosOptions(&instance->config.bios);
2023-03-13 18:54:57 +08:00
ffDestroyBoardOptions(&instance->config.board);
2023-03-14 15:29:47 +08:00
ffDestroyBrightnessOptions(&instance->config.brightness);
2023-06-09 10:10:03 +08:00
destroyModuleArg(&instance->config.chassis);
2023-03-07 19:27:49 +08:00
ffDestroyCommandOptions(&instance->config.command);
2023-03-20 15:46:00 +08:00
ffDestroyCustomOptions(&instance->config.custom);
2023-03-10 14:14:32 +08:00
ffDestroyKernelOptions(&instance->config.kernel);
2022-10-09 13:34:55 +02:00
destroyModuleArg(&instance->config.uptime);
destroyModuleArg(&instance->config.processes);
destroyModuleArg(&instance->config.packages);
destroyModuleArg(&instance->config.shell);
2023-03-10 10:56:36 +08:00
ffDestroyDisplayOptions(&instance->config.display);
2022-10-09 13:34:55 +02:00
destroyModuleArg(&instance->config.de);
destroyModuleArg(&instance->config.wm);
destroyModuleArg(&instance->config.wmTheme);
destroyModuleArg(&instance->config.theme);
destroyModuleArg(&instance->config.icons);
2023-04-04 12:28:52 +08:00
ffDestroyFontOptions(&instance->config.font);
2023-03-20 14:57:46 +08:00
ffDestroyCursorOptions(&instance->config.cursor);
2022-10-09 13:34:55 +02:00
destroyModuleArg(&instance->config.terminal);
destroyModuleArg(&instance->config.terminalFont);
2023-03-15 18:17:24 +08:00
ffDestroyCPUOptions(&instance->config.cpu);
2023-03-17 17:56:31 +08:00
ffDestroyCPUUsageOptions(&instance->config.cpuUsage);
2023-03-26 20:42:18 +08:00
ffDestroyGPUOptions(&instance->config.gpu);
2022-10-09 13:34:55 +02:00
destroyModuleArg(&instance->config.memory);
destroyModuleArg(&instance->config.swap);
2023-04-02 00:13:11 +08:00
ffDestroyDiskOptions(&instance->config.disk);
2023-03-07 16:13:53 +08:00
ffDestroyBatteryOptions(&instance->config.battery);
2022-10-09 13:34:55 +02:00
destroyModuleArg(&instance->config.powerAdapter);
2023-04-04 17:47:42 +08:00
ffDestroyLocaleOptions(&instance->config.locale);
2023-04-04 20:46:50 +08:00
ffDestroyLocalIpOptions(&instance->config.localIP);
2022-10-09 13:34:55 +02:00
destroyModuleArg(&instance->config.publicIP);
2023-06-06 15:48:24 +08:00
destroyModuleArg(&instance->config.wallpaper);
2022-10-09 13:34:55 +02:00
destroyModuleArg(&instance->config.weather);
2022-11-26 18:23:08 +08:00
destroyModuleArg(&instance->config.wifi);
2022-10-09 13:34:55 +02:00
destroyModuleArg(&instance->config.player);
destroyModuleArg(&instance->config.media);
2023-03-09 19:38:03 +08:00
ffDestroyDateTimeOptions(&instance->config.dateTime);
2022-10-09 13:34:55 +02:00
destroyModuleArg(&instance->config.vulkan);
destroyModuleArg(&instance->config.openGL);
destroyModuleArg(&instance->config.openCL);
destroyModuleArg(&instance->config.users);
2023-03-13 17:36:48 +08:00
ffDestroyBluetoothOptions(&instance->config.bluetooth);
2023-03-09 17:00:37 +08:00
ffDestroySeparatorOptions(&instance->config.separator);
2023-04-12 14:05:09 +08:00
ffDestroySoundOptions(&instance->config.sound);
2023-04-04 11:01:42 +08:00
ffDestroyGamepadOptions(&instance->config.gamepad);
2022-10-09 13:34:55 +02:00
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.libJSONC);
2022-10-09 13:34:55 +02:00
ffStrbufDestroy(&instance->config.libfreetype);
2023-01-26 15:48:28 +01:00
ffStrbufDestroy(&instance->config.libPulse);
2022-11-27 16:00:56 +08:00
ffStrbufDestroy(&instance->config.libwlanapi);
ffStrbufDestroy(&instance->config.libnm);
2022-10-09 13:34:55 +02:00
ffStrbufDestroy(&instance->config.publicIpUrl);
ffStrbufDestroy(&instance->config.weatherOutputFormat);
ffStrbufDestroy(&instance->config.playerName);
}
static void destroyState(FFinstance* instance)
{
2023-01-15 15:57:26 +01:00
ffPlatformDestroy(&instance->state.platform);
2022-10-09 13:34:55 +02:00
}
void ffDestroyInstance(FFinstance* instance)
{
destroyConfig(instance);
destroyState(instance);
2021-04-09 14:07:05 +02:00
}
2022-02-13 23:51:13 +01:00
2022-04-02 14:35:43 +02:00
//Must be in a file compiled with the libfastfetch target, because the FF_HAVE* macros are not defined for the executable targets
2022-02-13 23:51:13 +01:00
void ffListFeatures()
{
fputs(
#ifdef FF_HAVE_THREADS
"threads\n"
#endif
2022-02-13 23:51:13 +01:00
#ifdef FF_HAVE_LIBPCI
"libpci\n"
#endif
#ifdef FF_HAVE_VULKAN
"vulkan\n"
#endif
#ifdef FF_HAVE_WAYLAND
"wayland\n"
#endif
#ifdef FF_HAVE_XCB_RANDR
"xcb-randr\n"
#endif
#ifdef FF_HAVE_XCB
"xcb\n"
#endif
#ifdef FF_HAVE_XRANDR
"xrandr\n"
#endif
#ifdef FF_HAVE_X11
"x11\n"
#endif
#ifdef FF_HAVE_GIO
"gio\n"
#endif
#ifdef FF_HAVE_DCONF
"dconf\n"
#endif
#ifdef FF_HAVE_DBUS
"dbus\n"
#endif
#ifdef FF_HAVE_IMAGEMAGICK7
"imagemagick7\n"
#endif
#ifdef FF_HAVE_IMAGEMAGICK6
"imagemagick6\n"
2022-04-06 14:54:39 +02:00
#endif
2022-04-29 14:11:22 +02:00
#ifdef FF_HAVE_CHAFA
"chafa\n"
#endif
2022-04-14 15:11:14 +02:00
#ifdef FF_HAVE_ZLIB
"zlib\n"
#endif
2022-02-13 23:51:13 +01:00
#ifdef FF_HAVE_XFCONF
"xfconf\n"
#endif
2022-05-23 19:30:02 +02:00
#ifdef FF_HAVE_SQLITE3
"sqlite3\n"
2022-02-13 23:51:13 +01:00
#endif
2022-05-24 13:36:33 +02:00
#ifdef FF_HAVE_RPM
"rpm\n"
#endif
2022-06-04 15:21:34 +02:00
#ifdef FF_HAVE_EGL
"egl\n"
#endif
#ifdef FF_HAVE_GLX
"glx\n"
#endif
2022-06-04 19:30:26 +02:00
#ifdef FF_HAVE_OSMESA
"osmesa\n"
#endif
2022-06-05 00:18:40 +02:00
#ifdef FF_HAVE_OPENCL
"opencl\n"
#endif
#ifdef FF_HAVE_LIBJSONC
"json-c\n"
2022-09-27 13:59:26 +08:00
#endif
#ifdef FF_HAVE_FREETYPE
"freetype\n"
#endif
2023-01-26 15:48:28 +01:00
#ifdef FF_HAVE_PULSE
"libpulse\n"
2023-01-26 00:49:43 +08:00
#endif
#ifdef FF_HAVE_LIBNM
"libnm\n"
2022-09-27 13:59:26 +08:00
#endif
2022-02-13 23:51:13 +01:00
""
, stdout);
}