mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-10-29 16:26:39 +01:00
CMake: adds MODULE_<module> options to disable modules
This commit is contained in:
@@ -116,6 +116,14 @@ if(APPLE)
|
||||
option(ENABLE_APPLE_MEMSIZE_USABLE "Use usable memory size as total memory size in Memory module, to match other systems" OFF)
|
||||
endif()
|
||||
|
||||
file(GLOB FF_MODULE_DIRS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/src/modules" "${CMAKE_CURRENT_SOURCE_DIR}/src/modules/*/")
|
||||
foreach(FF_MODULE_DIR ${FF_MODULE_DIRS})
|
||||
if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/src/modules/${FF_MODULE_DIR}")
|
||||
string(TOUPPER "${FF_MODULE_DIR}" FF_MODULE_UPPER)
|
||||
option(MODULE_${FF_MODULE_UPPER} "Enable module ${FF_MODULE_DIR}" ON)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
set(BINARY_LINK_TYPE_OPTIONS dlopen dynamic static)
|
||||
set(BINARY_LINK_TYPE dlopen CACHE STRING "How to link fastfetch")
|
||||
set_property(CACHE BINARY_LINK_TYPE PROPERTY STRINGS ${BINARY_LINK_TYPE_OPTIONS})
|
||||
@@ -1384,6 +1392,17 @@ add_library(libfastfetch OBJECT
|
||||
${LIBFASTFETCH_SRC}
|
||||
)
|
||||
|
||||
foreach(FF_MODULE_DIR ${FF_MODULE_DIRS})
|
||||
if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/src/modules/${FF_MODULE_DIR}")
|
||||
string(TOUPPER "${FF_MODULE_DIR}" FF_MODULE_UPPER)
|
||||
if(MODULE_${FF_MODULE_UPPER})
|
||||
target_compile_definitions(libfastfetch PUBLIC FF_MODULE_${FF_MODULE_UPPER}=1)
|
||||
else()
|
||||
target_compile_definitions(libfastfetch PUBLIC FF_MODULE_${FF_MODULE_UPPER}=0)
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
include(CheckCSourceCompiles)
|
||||
check_c_source_compiles("int main(void){int arr[1];return _Countof(arr);}" COMPILER_SUPPORTS_COUNT_OF)
|
||||
if(COMPILER_SUPPORTS_COUNT_OF)
|
||||
|
||||
@@ -70,12 +70,15 @@ void ffPrepareCommandOption(FFdata* data) {
|
||||
#define FF_IF_MODULE_MATCH(moduleNameConstant) if (moduleLen == strlen(moduleNameConstant) && ffStrEqualsIgnCase(moduleType, moduleNameConstant) && !ffStrbufSeparatedContainIgnCaseS(&data->structureDisabled, moduleNameConstant, ':'))
|
||||
|
||||
switch (moduleType[0]) {
|
||||
#if FF_MODULE_CPUUSAGE
|
||||
case 'C':
|
||||
case 'c':
|
||||
FF_IF_MODULE_MATCH(FF_CPUUSAGE_MODULE_NAME)
|
||||
ffPrepareCPUUsage();
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if FF_MODULE_DISKIO
|
||||
case 'D':
|
||||
case 'd':
|
||||
FF_IF_MODULE_MATCH(FF_DISKIO_MODULE_NAME) {
|
||||
@@ -84,7 +87,9 @@ void ffPrepareCommandOption(FFdata* data) {
|
||||
ffPrepareDiskIO(&options);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if FF_MODULE_NETIO
|
||||
case 'N':
|
||||
case 'n':
|
||||
FF_IF_MODULE_MATCH(FF_NETIO_MODULE_NAME) {
|
||||
@@ -93,7 +98,9 @@ void ffPrepareCommandOption(FFdata* data) {
|
||||
ffPrepareNetIO(&options);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if FF_MODULE_PUBLICIP
|
||||
case 'P':
|
||||
case 'p':
|
||||
FF_IF_MODULE_MATCH(FF_PUBLICIP_MODULE_NAME) {
|
||||
@@ -102,7 +109,9 @@ void ffPrepareCommandOption(FFdata* data) {
|
||||
ffPreparePublicIp(&options);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if FF_MODULE_WEATHER
|
||||
case 'W':
|
||||
case 'w':
|
||||
FF_IF_MODULE_MATCH(FF_WEATHER_MODULE_NAME) {
|
||||
@@ -111,6 +120,7 @@ void ffPrepareCommandOption(FFdata* data) {
|
||||
ffPrepareWeather(&options);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
#undef FF_IF_MODULE_MATCH
|
||||
|
||||
@@ -29,6 +29,7 @@ static void initState(FFstate* state) {
|
||||
ffPlatformInit(&state->platform);
|
||||
state->dynamicInterval = 0;
|
||||
|
||||
#if FF_MODULE_TERMINALTHEME
|
||||
{
|
||||
// don't enable bright color if the terminal is in light mode
|
||||
FFTerminalThemeResult result;
|
||||
@@ -36,6 +37,7 @@ static void initState(FFstate* state) {
|
||||
state->terminalLightTheme = true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void defaultConfig(void) {
|
||||
|
||||
@@ -133,6 +133,7 @@ static bool parseModuleJsonObject(const char* type, yyjson_val* jsonVal, yyjson_
|
||||
|
||||
static void prepareModuleJsonObject(const char* type, yyjson_val* module) {
|
||||
switch (type[0]) {
|
||||
#if FF_MODULE_CPUUSAGE
|
||||
case 'c':
|
||||
case 'C': {
|
||||
if (ffStrEqualsIgnCase(type, FF_CPUUSAGE_MODULE_NAME)) {
|
||||
@@ -147,6 +148,9 @@ static void prepareModuleJsonObject(const char* type, yyjson_val* module) {
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if FF_MODULE_DISKIO
|
||||
case 'd':
|
||||
case 'D': {
|
||||
if (ffStrEqualsIgnCase(type, FF_DISKIO_MODULE_NAME)) {
|
||||
@@ -159,6 +163,9 @@ static void prepareModuleJsonObject(const char* type, yyjson_val* module) {
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if FF_MODULE_NETIO
|
||||
case 'n':
|
||||
case 'N': {
|
||||
if (ffStrEqualsIgnCase(type, FF_NETIO_MODULE_NAME)) {
|
||||
@@ -171,6 +178,9 @@ static void prepareModuleJsonObject(const char* type, yyjson_val* module) {
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if FF_MODULE_PUBLICIP
|
||||
case 'p':
|
||||
case 'P': {
|
||||
if (ffStrEqualsIgnCase(type, FF_PUBLICIP_MODULE_NAME)) {
|
||||
@@ -183,6 +193,9 @@ static void prepareModuleJsonObject(const char* type, yyjson_val* module) {
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if FF_MODULE_WEATHER
|
||||
case 'w':
|
||||
case 'W': {
|
||||
if (ffStrEqualsIgnCase(type, FF_WEATHER_MODULE_NAME)) {
|
||||
@@ -195,6 +208,7 @@ static void prepareModuleJsonObject(const char* type, yyjson_val* module) {
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -110,7 +110,9 @@ static const char* getMediaByMediaRemote(FFMediaResult* result, bool saveCover)
|
||||
return error;
|
||||
}
|
||||
|
||||
__attribute__((visibility("default"), used)) int ffPrintMediaByMediaRemote(bool saveCover) {
|
||||
#if FF_MODULE_MEDIA
|
||||
__attribute__((visibility("default"), used))
|
||||
int ffPrintMediaByMediaRemote(bool saveCover) {
|
||||
FFMediaResult media = {
|
||||
.status = ffStrbufCreate(),
|
||||
.song = ffStrbufCreate(),
|
||||
@@ -151,6 +153,7 @@ __attribute__((visibility("default"), used)) int ffPrintMediaByMediaRemote(bool
|
||||
ffStrbufDestroy(&media.cover);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static const char* getMediaByAuthorizedProcess(FFMediaResult* result, bool saveCover) {
|
||||
// #1737
|
||||
|
||||
@@ -461,6 +461,7 @@ static bool updateLogoPath(void) {
|
||||
return true;
|
||||
}
|
||||
|
||||
#if FF_MODULE_MEDIA
|
||||
if (ffStrbufIgnCaseEqualS(&options->source, "media-cover")) {
|
||||
const FFMediaResult* media = ffDetectMedia(true);
|
||||
if (media->cover.length == 0) {
|
||||
@@ -469,6 +470,7 @@ static bool updateLogoPath(void) {
|
||||
ffStrbufSet(&options->source, &media->cover);
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
FF_STRBUF_AUTO_DESTROY fullPath = ffStrbufCreateA(128);
|
||||
if (ffPathExpandEnv(options->source.chars, &fullPath) && ffPathExists(fullPath.chars, FF_PATHTYPE_FILE)) {
|
||||
@@ -637,6 +639,7 @@ void ffLogoPrint(void) {
|
||||
}
|
||||
|
||||
if (!ffStrbufEndsWithIgnCaseS(&options->source, ".txt")) {
|
||||
#if FF_MODULE_TERMINAL
|
||||
const FFTerminalResult* terminal = ffDetectTerminal();
|
||||
|
||||
bool supportsIterm2 = ffStrbufEqualS(&terminal->prettyName, "iTerm");
|
||||
@@ -658,6 +661,9 @@ void ffLogoPrint(void) {
|
||||
ffStrbufIgnCaseEqualS(&terminal->processName, "warp") ||
|
||||
#endif
|
||||
false;
|
||||
#else
|
||||
bool supportsKitty = false;
|
||||
#endif
|
||||
|
||||
// Try to load the logo as an image. If it succeeds, print it and return.
|
||||
if (logoPrintImageIfExists(supportsKitty ? FF_LOGO_TYPE_IMAGE_KITTY : FF_LOGO_TYPE_IMAGE_CHAFA, false)) {
|
||||
|
||||
@@ -1,69 +1,136 @@
|
||||
#include "modules/modules.h"
|
||||
|
||||
// Note:
|
||||
// FF_MODULE_<module> only controls if the module is registered,
|
||||
// the module code itself is still compiled.
|
||||
// We rely `LTO` to remove the unused code (only enabled in Release mode)
|
||||
|
||||
static FFModuleBaseInfo* A[] = {
|
||||
NULL,
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* B[] = {
|
||||
#if FF_MODULE_BATTERY
|
||||
&ffBatteryModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_BIOS
|
||||
&ffBiosModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_BLUETOOTH
|
||||
&ffBluetoothModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_BLUETOOTHRADIO
|
||||
&ffBluetoothRadioModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_BOARD
|
||||
&ffBoardModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_BOOTMGR
|
||||
&ffBootmgrModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_BREAK
|
||||
&ffBreakModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_BRIGHTNESS
|
||||
&ffBrightnessModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_BTRFS
|
||||
&ffBtrfsModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* C[] = {
|
||||
#if FF_MODULE_CAMERA
|
||||
&ffCameraModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_CHASSIS
|
||||
&ffChassisModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_COMMAND
|
||||
&ffCommandModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_COLORS
|
||||
&ffColorsModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_CPU
|
||||
&ffCPUModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_CPUCACHE
|
||||
&ffCPUCacheModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_CPUUSAGE
|
||||
&ffCPUUsageModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_CURSOR
|
||||
&ffCursorModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_CUSTOM
|
||||
&ffCustomModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* D[] = {
|
||||
#if FF_MODULE_DATETIME
|
||||
&ffDateTimeModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_DE
|
||||
&ffDEModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_DISPLAY
|
||||
&ffDisplayModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_DISK
|
||||
&ffDiskModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_DISKIO
|
||||
&ffDiskIOModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_DNS
|
||||
&ffDNSModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* E[] = {
|
||||
#if FF_MODULE_EDITOR
|
||||
&ffEditorModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* F[] = {
|
||||
#if FF_MODULE_FONT
|
||||
&ffFontModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* G[] = {
|
||||
#if FF_MODULE_GAMEPAD
|
||||
&ffGamepadModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_GPU
|
||||
&ffGPUModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* H[] = {
|
||||
#if FF_MODULE_HOST
|
||||
&ffHostModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* I[] = {
|
||||
#if FF_MODULE_ICONS
|
||||
&ffIconsModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_INITSYSTEM
|
||||
&ffInitSystemModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
@@ -72,48 +139,92 @@ static FFModuleBaseInfo* J[] = {
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* K[] = {
|
||||
#if FF_MODULE_KERNEL
|
||||
&ffKernelModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_KEYBOARD
|
||||
&ffKeyboardModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* L[] = {
|
||||
#if FF_MODULE_LM
|
||||
&ffLMModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_LOADAVG
|
||||
&ffLoadavgModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_LOCALE
|
||||
&ffLocaleModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_LOCALIP
|
||||
&ffLocalIPModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_LOGO
|
||||
&ffLogoModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* M[] = {
|
||||
#if FF_MODULE_MEDIA
|
||||
&ffMediaModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_MEMORY
|
||||
&ffMemoryModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_MONITOR
|
||||
&ffMonitorModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_MOUSE
|
||||
&ffMouseModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* N[] = {
|
||||
#if FF_MODULE_NETIO
|
||||
&ffNetIOModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* O[] = {
|
||||
#if FF_MODULE_OPENCL
|
||||
&ffOpenCLModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_OPENGL
|
||||
&ffOpenGLModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_OS
|
||||
&ffOSModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* P[] = {
|
||||
#if FF_MODULE_PACKAGES
|
||||
&ffPackagesModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_PHYSICALDISK
|
||||
&ffPhysicalDiskModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_PHYSICALMEMORY
|
||||
&ffPhysicalMemoryModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_PLAYER
|
||||
&ffPlayerModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_POWERADAPTER
|
||||
&ffPowerAdapterModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_PROCESSES
|
||||
&ffProcessesModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_PUBLICIP
|
||||
&ffPublicIPModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
@@ -126,42 +237,82 @@ static FFModuleBaseInfo* R[] = {
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* S[] = {
|
||||
#if FF_MODULE_SEPARATOR
|
||||
&ffSeparatorModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_SHELL
|
||||
&ffShellModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_SOUND
|
||||
&ffSoundModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_SWAP
|
||||
&ffSwapModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* T[] = {
|
||||
#if FF_MODULE_TERMINAL
|
||||
&ffTerminalModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_TERMINALFONT
|
||||
&ffTerminalFontModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_TERMINALSIZE
|
||||
&ffTerminalSizeModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_TERMINALTHEME
|
||||
&ffTerminalThemeModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_TITLE
|
||||
&ffTitleModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_THEME
|
||||
&ffThemeModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_TPM
|
||||
&ffTPMModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* U[] = {
|
||||
#if FF_MODULE_UPTIME
|
||||
&ffUptimeModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_USERS
|
||||
&ffUsersModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* V[] = {
|
||||
#if FF_MODULE_VERSION
|
||||
&ffVersionModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_VULKAN
|
||||
&ffVulkanModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* W[] = {
|
||||
#if FF_MODULE_WALLPAPER
|
||||
&ffWallpaperModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_WEATHER
|
||||
&ffWeatherModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_WM
|
||||
&ffWMModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_WIFI
|
||||
&ffWifiModuleInfo,
|
||||
#endif
|
||||
#if FF_MODULE_WMTHEME
|
||||
&ffWMThemeModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
@@ -174,7 +325,9 @@ static FFModuleBaseInfo* Y[] = {
|
||||
};
|
||||
|
||||
static FFModuleBaseInfo* Z[] = {
|
||||
#if FF_MODULE_ZPOOL
|
||||
&ffZpoolModuleInfo,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user