diff --git a/CMakeLists.txt b/CMakeLists.txt index 5e104fe36..ccec470ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,7 +134,25 @@ if(NOT BINARY_LINK_TYPE IN_LIST BINARY_LINK_TYPE_OPTIONS) message(FATAL_ERROR "BINARY_LINK_TYPE must be one of ${BINARY_LINK_TYPE_OPTIONS}") endif() -set(PACKAGE_MANAGERS AM APPIMAGE APK BREW CHOCO DPKG EMERGE EOPKG FLATPAK GUIX LINGLONG LPKG LPKGBUILD MACPORTS NIX OPKG PACMAN PACSTALL PALUDIS PISI PKG PKGTOOL RPM SCOOP SNAP SOAR SORCERY WINGET XBPS) +set(PACKAGE_MANAGERS + AM APK APPIMAGE + BREW + CARDS CHOCO + DPKG + EMERGE EOPKG + FLATPAK + GUIX + HPKG + KISS + LINGLONG LPKG LPKGBUILD + MACPORTS MOSS MPORT + NIX + OPKG + PACMAN PACSTALL PALUDIS PISI PKG PKGSRC PKGTOOL + RPM + SCOOP SNAP SOAR SORCERY + WINGET + XBPS) foreach(package_manager ${PACKAGE_MANAGERS}) if(package_manager STREQUAL "WINGET") option(PACKAGES_DISABLE_${package_manager} "Disable ${package_manager} package manager detection by default" ON) @@ -142,6 +160,7 @@ foreach(package_manager ${PACKAGE_MANAGERS}) option(PACKAGES_DISABLE_${package_manager} "Disable ${package_manager} package manager detection by default" OFF) endif() endforeach() +option(PACKAGES_REMOVE_DISABLED "Remove disabled package managers from the build entirely, instead of just skipping them at runtime" OFF) if (LINUX) set(CUSTOM_PCI_IDS_PATH "" CACHE STRING "Custom path to file pci.ids, defaults to `/usr/share/hwdata/pci.ids`") @@ -2021,7 +2040,10 @@ else() list(TRANSFORM PACKAGES_DISABLE_LIST APPEND "_BIT") list(JOIN PACKAGES_DISABLE_LIST " | " PACKAGES_DISABLE_LIST) endif() -target_compile_definitions(libfastfetch PRIVATE FF_PACKAGES_DISABLE_LIST=${PACKAGES_DISABLE_LIST}) +target_compile_definitions(libfastfetch PRIVATE "FF_PACKAGES_DISABLE_LIST=${PACKAGES_DISABLE_LIST}") +if(PACKAGES_REMOVE_DISABLED) + target_compile_definitions(libfastfetch PRIVATE FF_PACKAGES_REMOVE_DISABLED=1) +endif() ###################### # Executable targets # diff --git a/src/detection/packages/packages.h b/src/detection/packages/packages.h index 0a2c4040b..f0d42004d 100644 --- a/src/detection/packages/packages.h +++ b/src/detection/packages/packages.h @@ -54,6 +54,12 @@ typedef struct FFPackagesResult { FFstrbuf pacmanBranch; } FFPackagesResult; +#if FF_PACKAGES_REMOVE_DISABLED + #define FF_PACKAGES_IS_ENABLED(options, pkgName) ({ (void) options; !((FF_PACKAGES_DISABLE_LIST) & (FF_PACKAGES_FLAG_ ## pkgName ## _BIT)); }) +#else + #define FF_PACKAGES_IS_ENABLED(options, pkgName) (!((options)->disabled & (FF_PACKAGES_FLAG_ ## pkgName ## _BIT))) +#endif + const char* ffDetectPackages(FFPackagesResult* result, FFPackagesOptions* options); bool ffPackagesReadCache(FFstrbuf* cacheDir, FFstrbuf* cacheContent, const char* filePath, const char* packageId, uint32_t* result); bool ffPackagesWriteCache(FFstrbuf* cacheDir, FFstrbuf* cacheContent, uint32_t num_elements); diff --git a/src/detection/packages/packages_apple.c b/src/detection/packages/packages_apple.c index fd268868c..43de97df8 100644 --- a/src/detection/packages/packages_apple.c +++ b/src/detection/packages/packages_apple.c @@ -23,7 +23,7 @@ static uint32_t getMacPortsPackages(FFstrbuf* baseDir) { void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options) { FF_STRBUF_AUTO_DESTROY baseDir = ffStrbufCreate(); - if (!(options->disabled & FF_PACKAGES_FLAG_BREW_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, BREW)) { const char* prefix = getenv("HOMEBREW_PREFIX"); if (ffStrSet(prefix)) { ffStrbufSetS(&baseDir, prefix); @@ -36,7 +36,7 @@ void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options) } countBrewPackages(&baseDir, result); } - if (!(options->disabled & FF_PACKAGES_FLAG_MACPORTS_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, MACPORTS)) { const char* prefix = getenv("MACPORTS_PREFIX"); if (ffStrSet(prefix)) { ffStrbufSetS(&baseDir, prefix); @@ -46,7 +46,7 @@ void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options) result->macports = getMacPortsPackages(&baseDir); } - if (!(options->disabled & FF_PACKAGES_FLAG_NIX_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, NIX)) { ffStrbufSetS(&baseDir, FASTFETCH_TARGET_DIR_ROOT); result->nixDefault += ffPackagesGetNix(&baseDir, "/nix/var/nix/profiles/default"); result->nixSystem += ffPackagesGetNix(&baseDir, "/run/current-system"); diff --git a/src/detection/packages/packages_bsd.c b/src/detection/packages/packages_bsd.c index 32521160f..73772ac73 100644 --- a/src/detection/packages/packages_bsd.c +++ b/src/detection/packages/packages_bsd.c @@ -19,10 +19,10 @@ static uint32_t getSQLite3Int(const char* dbPath, const char* query, const char* } void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options) { - if (!(options->disabled & FF_PACKAGES_FLAG_PKG_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, PKG)) { result->pkg = getSQLite3Int(FASTFETCH_TARGET_DIR_ROOT "/var/db/pkg/local.sqlite", "SELECT count(*) FROM packages", "pkg"); } - if (!(options->disabled & FF_PACKAGES_FLAG_MPORT_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, MPORT)) { result->mport = getSQLite3Int(FASTFETCH_TARGET_DIR_ROOT "/var/db/mport/master.db", "SELECT count(*) FROM packages", "mport"); } } diff --git a/src/detection/packages/packages_haiku.c b/src/detection/packages/packages_haiku.c index f63482107..eee14cf1c 100644 --- a/src/detection/packages/packages_haiku.c +++ b/src/detection/packages/packages_haiku.c @@ -5,7 +5,7 @@ void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options) { // TODO: Use the Package Kit C++ API instead (would account for disabled packages) - if (!(options->disabled & FF_PACKAGES_FLAG_HPKG_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, HPKG)) { result->hpkgSystem = ffPackagesGetNumElements(FASTFETCH_TARGET_DIR_ROOT "/system/packages", false); result->hpkgUser = ffPackagesGetNumElements(FASTFETCH_TARGET_DIR_ROOT "/boot/home/config/packages", false); } diff --git a/src/detection/packages/packages_linux.c b/src/detection/packages/packages_linux.c index 0f42f8a6b..79de8cb3e 100644 --- a/src/detection/packages/packages_linux.c +++ b/src/detection/packages/packages_linux.c @@ -459,85 +459,85 @@ static uint32_t getPacmanPackages(FFstrbuf* baseDir) { } static void getPackageCounts(FFstrbuf* baseDir, FFPackagesResult* packageCounts, FFPackagesOptions* options) { - if (!(options->disabled & FF_PACKAGES_FLAG_APK_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, APK)) { packageCounts->apk += getNumStrings(baseDir, "/lib/apk/db/installed", "C:Q", "apk"); } - if (!(options->disabled & FF_PACKAGES_FLAG_DPKG_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, DPKG)) { packageCounts->dpkg += getNumStrings(baseDir, "/var/lib/dpkg/status", "Status: install ok installed", "dpkg"); } - if (!(options->disabled & FF_PACKAGES_FLAG_LPKG_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, LPKG)) { packageCounts->lpkg += getNumStrings(baseDir, "/opt/Loc-OS-LPKG/installed-lpkg/Listinstalled-lpkg.list", "\n", "lpkg"); } - if (!(options->disabled & FF_PACKAGES_FLAG_EMERGE_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, EMERGE)) { packageCounts->emerge += countFilesRecursive(baseDir, "/var/db/pkg", "SIZE"); } - if (!(options->disabled & FF_PACKAGES_FLAG_EOPKG_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, EOPKG)) { packageCounts->eopkg += getNumElements(baseDir, "/var/lib/eopkg/package", true); } - if (!(options->disabled & FF_PACKAGES_FLAG_FLATPAK_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, FLATPAK)) { packageCounts->flatpakSystem += getFlatpakPackages(baseDir, "/var/lib"); } - if (!(options->disabled & FF_PACKAGES_FLAG_KISS_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, KISS)) { packageCounts->kiss += getNumElements(baseDir, "/var/db/kiss/installed", true); } - if (!(options->disabled & FF_PACKAGES_FLAG_NIX_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, NIX)) { packageCounts->nixDefault += ffPackagesGetNix(baseDir, "/nix/var/nix/profiles/default"); packageCounts->nixSystem += ffPackagesGetNix(baseDir, "/run/current-system"); } - if (!(options->disabled & FF_PACKAGES_FLAG_PACMAN_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, PACMAN)) { packageCounts->pacman += getPacmanPackages(baseDir); } - if (!(options->disabled & FF_PACKAGES_FLAG_LPKGBUILD_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, LPKGBUILD)) { packageCounts->lpkgbuild += getNumElements(baseDir, "/opt/Loc-OS-LPKG/lpkgbuild/remove", false); } - if (!(options->disabled & FF_PACKAGES_FLAG_PKGTOOL_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, PKGTOOL)) { packageCounts->pkgtool += getNumElements(baseDir, "/var/log/packages", false); } - if (!(options->disabled & FF_PACKAGES_FLAG_RPM_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, RPM)) { // `Sigmd5` is the only table that doesn't contain the virtual `gpg-pubkey` package packageCounts->rpm += getSQLite3Int(baseDir, "/var/lib/rpm/rpmdb.sqlite", "SELECT count(*) FROM Sigmd5", "rpm"); } - if (!(options->disabled & FF_PACKAGES_FLAG_SNAP_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, SNAP)) { packageCounts->snap += getSnap(baseDir); } - if (!(options->disabled & FF_PACKAGES_FLAG_XBPS_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, XBPS)) { packageCounts->xbps += getXBPS(baseDir, "/var/db/xbps"); } - if (!(options->disabled & FF_PACKAGES_FLAG_BREW_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, BREW)) { packageCounts->brewCask += getNumElements(baseDir, "/home/linuxbrew/.linuxbrew/Caskroom", true); packageCounts->brew += getNumElements(baseDir, "/home/linuxbrew/.linuxbrew/Cellar", true); } - if (!(options->disabled & FF_PACKAGES_FLAG_PALUDIS_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, PALUDIS)) { packageCounts->paludis += countFilesRecursive(baseDir, "/var/db/paludis/repositories", "environment.bz2"); } - if (!(options->disabled & FF_PACKAGES_FLAG_OPKG_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, OPKG)) { packageCounts->opkg += getNumStrings(baseDir, "/usr/lib/opkg/status", "Package:", "opkg"); // openwrt } - if (!(options->disabled & FF_PACKAGES_FLAG_AM_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, AM)) { packageCounts->amSystem = getAMSystem(baseDir); } - if (!(options->disabled & FF_PACKAGES_FLAG_SORCERY_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, SORCERY)) { packageCounts->sorcery += getNumStrings(baseDir, "/var/state/sorcery/packages", ":installed:", "sorcery"); } - if (!(options->disabled & FF_PACKAGES_FLAG_GUIX_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, GUIX)) { packageCounts->guixSystem += getGuixPackages(baseDir, "/run/current-system/profile"); } - if (!(options->disabled & FF_PACKAGES_FLAG_LINGLONG_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, LINGLONG)) { packageCounts->linglong += getNumElements(baseDir, "/var/lib/linglong/layers", true); } - if (!(options->disabled & FF_PACKAGES_FLAG_PACSTALL_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, PACSTALL)) { packageCounts->pacstall += getNumElements(baseDir, "/var/lib/pacstall/metadata", false); } - if (!(options->disabled & FF_PACKAGES_FLAG_PISI_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, PISI)) { packageCounts->pisi += getNumElements(baseDir, "/var/lib/pisi/package", true); } - if (!(options->disabled & FF_PACKAGES_FLAG_PKGSRC_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, PKGSRC)) { packageCounts->pkgsrc += getNumElements(baseDir, "/usr/pkg/pkgdb", DT_DIR); } - if (!(options->disabled & FF_PACKAGES_FLAG_MOSS_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, MOSS)) { packageCounts->moss += getSQLite3Int(baseDir, "/.moss/db/state", "SELECT COUNT(*) FROM state_selections WHERE state_id = (SELECT MAX(id) FROM state)", "moss"); } - if (!(options->disabled & FF_PACKAGES_FLAG_CARDS_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, CARDS)) { packageCounts->cards += getNumElements(baseDir, "/var/lib/pkg/DB", true); } } @@ -545,7 +545,7 @@ static void getPackageCounts(FFstrbuf* baseDir, FFPackagesResult* packageCounts, static void getPackageCountsRegular(FFstrbuf* baseDir, FFPackagesResult* packageCounts, FFPackagesOptions* options) { getPackageCounts(baseDir, packageCounts, options); - if (!(options->disabled & FF_PACKAGES_FLAG_PACMAN_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, PACMAN)) { uint32_t baseDirLength = baseDir->length; ffStrbufAppendS(baseDir, FASTFETCH_TARGET_DIR_ETC "/pacman-mirrors.conf"); if (ffParsePropFile(baseDir->chars, "Branch =", &packageCounts->pacmanBranch) && packageCounts->pacmanBranch.length == 0) { @@ -600,13 +600,13 @@ void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options) // This is needed on openSUSE, which seems to use a proprietary database file // This method doesn't work on bedrock, so we do it here. #ifdef FF_HAVE_RPM - if (!(options->disabled & FF_PACKAGES_FLAG_RPM_BIT) && result->rpm == 0) { + if (FF_PACKAGES_IS_ENABLED(options, RPM) && result->rpm == 0) { result->rpm = getRpmFromLibrpm(); } #endif ffStrbufSet(&baseDir, &instance.state.platform.homeDir); - if (!(options->disabled & FF_PACKAGES_FLAG_NIX_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, NIX)) { // Count packages from $HOME/.nix-profile result->nixUser += ffPackagesGetNix(&baseDir, ".nix-profile"); @@ -627,24 +627,24 @@ void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options) result->nixUser += ffPackagesGetNix(&userPkgsDir, instance.state.platform.userName.chars); } - if (!(options->disabled & FF_PACKAGES_FLAG_GUIX_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, GUIX)) { result->guixUser += getGuixPackages(&baseDir, ".guix-profile"); result->guixHome += getGuixPackages(&baseDir, ".guix-home/profile"); } - if (!(options->disabled & FF_PACKAGES_FLAG_FLATPAK_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, FLATPAK)) { result->flatpakUser = getFlatpakPackages(&baseDir, "/.local/share"); } - if (!(options->disabled & FF_PACKAGES_FLAG_AM_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, AM)) { result->amUser = getAMUser(); } - if (!(options->disabled & FF_PACKAGES_FLAG_SOAR_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, SOAR)) { result->soar += getSQLite3Int(&baseDir, ".local/share/soar/db/soar.db", "SELECT COUNT(DISTINCT pkg_id || pkg_name) FROM packages WHERE is_installed = true", "soar"); } - if (!(options->disabled & FF_PACKAGES_FLAG_APPIMAGE_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, APPIMAGE)) { result->appimage += getNumElementsBySuffix(&baseDir, "/AppImages", ".appimage"); result->appimage += getNumElementsBySuffix(&baseDir, "/Applications", ".appimage"); } diff --git a/src/detection/packages/packages_nbsd.c b/src/detection/packages/packages_nbsd.c index 3a96c239a..2f7912684 100644 --- a/src/detection/packages/packages_nbsd.c +++ b/src/detection/packages/packages_nbsd.c @@ -3,7 +3,7 @@ #include "common/io.h" void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options) { - if (!(options->disabled & FF_PACKAGES_FLAG_PKGSRC_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, PKGSRC)) { result->pkgsrc = ffPackagesGetNumElements(FASTFETCH_TARGET_DIR_ROOT "/usr/pkg/pkgdb", true); } } diff --git a/src/detection/packages/packages_obsd.c b/src/detection/packages/packages_obsd.c index ef37fb48b..c7b098eb1 100644 --- a/src/detection/packages/packages_obsd.c +++ b/src/detection/packages/packages_obsd.c @@ -3,7 +3,7 @@ #include "common/io.h" void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options) { - if (!(options->disabled & FF_PACKAGES_FLAG_PKG_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, PKG)) { result->pkg = ffPackagesGetNumElements(FASTFETCH_TARGET_DIR_ROOT "/var/db/pkg", true); } } diff --git a/src/detection/packages/packages_sunos.c b/src/detection/packages/packages_sunos.c index b471f0914..16b8cd7cd 100644 --- a/src/detection/packages/packages_sunos.c +++ b/src/detection/packages/packages_sunos.c @@ -2,7 +2,7 @@ #include void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options) { - if (!(options->disabled & FF_PACKAGES_FLAG_PKG_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, PKG)) { yyjson_doc* doc = yyjson_read_file(FASTFETCH_TARGET_DIR_ROOT "/var/pkg/state/installed/catalog.attrs", YYJSON_READ_NOFLAG, NULL, NULL); if (doc) { yyjson_val* packageCount = yyjson_obj_get(yyjson_doc_get_root(doc), "package-count"); @@ -11,7 +11,7 @@ void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options) } } } - if (!(options->disabled & FF_PACKAGES_FLAG_PKGSRC_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, PKGSRC)) { result->pkgsrc = ffPackagesGetNumElements(FASTFETCH_TARGET_DIR_ROOT "/usr/pkg/pkgdb", true); } } diff --git a/src/detection/packages/packages_windows.c b/src/detection/packages/packages_windows.c index 3bf4dfa72..a3faee529 100644 --- a/src/detection/packages/packages_windows.c +++ b/src/detection/packages/packages_windows.c @@ -188,16 +188,16 @@ static void detectWinget(FFPackagesResult* result) { } void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options) { - if (!(options->disabled & FF_PACKAGES_FLAG_SCOOP_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, SCOOP)) { detectScoop(result); } - if (!(options->disabled & FF_PACKAGES_FLAG_CHOCO_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, CHOCO)) { detectChoco(result); } - if (!(options->disabled & FF_PACKAGES_FLAG_PACMAN_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, PACMAN)) { detectPacman(result); } - if (!(options->disabled & FF_PACKAGES_FLAG_WINGET_BIT)) { + if (FF_PACKAGES_IS_ENABLED(options, WINGET)) { detectWinget(result); } } diff --git a/src/modules/packages/option.h b/src/modules/packages/option.h index 601849437..1e895335a 100644 --- a/src/modules/packages/option.h +++ b/src/modules/packages/option.h @@ -4,41 +4,41 @@ typedef enum FF_A_PACKED FFPackagesFlags { FF_PACKAGES_FLAG_NONE = 0, - FF_PACKAGES_FLAG_APK_BIT = 1ULL << 0, - FF_PACKAGES_FLAG_BREW_BIT = 1ULL << 1, - FF_PACKAGES_FLAG_CHOCO_BIT = 1ULL << 2, - FF_PACKAGES_FLAG_DPKG_BIT = 1ULL << 3, - FF_PACKAGES_FLAG_EMERGE_BIT = 1ULL << 4, - FF_PACKAGES_FLAG_EOPKG_BIT = 1ULL << 5, - FF_PACKAGES_FLAG_FLATPAK_BIT = 1ULL << 6, - FF_PACKAGES_FLAG_NIX_BIT = 1ULL << 7, - FF_PACKAGES_FLAG_OPKG_BIT = 1ULL << 8, - FF_PACKAGES_FLAG_PACMAN_BIT = 1ULL << 9, - FF_PACKAGES_FLAG_PALUDIS_BIT = 1ULL << 10, - FF_PACKAGES_FLAG_PKG_BIT = 1ULL << 11, - FF_PACKAGES_FLAG_PKGTOOL_BIT = 1ULL << 12, - FF_PACKAGES_FLAG_MACPORTS_BIT = 1ULL << 13, - FF_PACKAGES_FLAG_RPM_BIT = 1ULL << 14, - FF_PACKAGES_FLAG_SCOOP_BIT = 1ULL << 15, - FF_PACKAGES_FLAG_SNAP_BIT = 1ULL << 16, - FF_PACKAGES_FLAG_WINGET_BIT = 1ULL << 17, - FF_PACKAGES_FLAG_XBPS_BIT = 1ULL << 18, - FF_PACKAGES_FLAG_AM_BIT = 1ULL << 19, - FF_PACKAGES_FLAG_SORCERY_BIT = 1ULL << 20, - FF_PACKAGES_FLAG_LPKG_BIT = 1ULL << 21, - FF_PACKAGES_FLAG_LPKGBUILD_BIT = 1ULL << 22, - FF_PACKAGES_FLAG_GUIX_BIT = 1ULL << 23, - FF_PACKAGES_FLAG_LINGLONG_BIT = 1ULL << 24, - FF_PACKAGES_FLAG_PACSTALL_BIT = 1ULL << 25, - FF_PACKAGES_FLAG_MPORT_BIT = 1ULL << 26, - FF_PACKAGES_FLAG_PKGSRC_BIT = 1ULL << 27, - FF_PACKAGES_FLAG_HPKG_BIT = 1ULL << 28, - FF_PACKAGES_FLAG_PISI_BIT = 1ULL << 29, - FF_PACKAGES_FLAG_SOAR_BIT = 1ULL << 30, - FF_PACKAGES_FLAG_KISS_BIT = 1ULL << 31, - FF_PACKAGES_FLAG_MOSS_BIT = 1ULL << 32, - FF_PACKAGES_FLAG_APPIMAGE_BIT = 1ULL << 33, - FF_PACKAGES_FLAG_CARDS_BIT = 1ULL << 34, + FF_PACKAGES_FLAG_APK_BIT = UINT64_C(1) << 0U, + FF_PACKAGES_FLAG_BREW_BIT = UINT64_C(1) << 1U, + FF_PACKAGES_FLAG_CHOCO_BIT = UINT64_C(1) << 2U, + FF_PACKAGES_FLAG_DPKG_BIT = UINT64_C(1) << 3U, + FF_PACKAGES_FLAG_EMERGE_BIT = UINT64_C(1) << 4U, + FF_PACKAGES_FLAG_EOPKG_BIT = UINT64_C(1) << 5U, + FF_PACKAGES_FLAG_FLATPAK_BIT = UINT64_C(1) << 6U, + FF_PACKAGES_FLAG_NIX_BIT = UINT64_C(1) << 7U, + FF_PACKAGES_FLAG_OPKG_BIT = UINT64_C(1) << 8U, + FF_PACKAGES_FLAG_PACMAN_BIT = UINT64_C(1) << 9U, + FF_PACKAGES_FLAG_PALUDIS_BIT = UINT64_C(1) << 10U, + FF_PACKAGES_FLAG_PKG_BIT = UINT64_C(1) << 11U, + FF_PACKAGES_FLAG_PKGTOOL_BIT = UINT64_C(1) << 12U, + FF_PACKAGES_FLAG_MACPORTS_BIT = UINT64_C(1) << 13U, + FF_PACKAGES_FLAG_RPM_BIT = UINT64_C(1) << 14U, + FF_PACKAGES_FLAG_SCOOP_BIT = UINT64_C(1) << 15U, + FF_PACKAGES_FLAG_SNAP_BIT = UINT64_C(1) << 16U, + FF_PACKAGES_FLAG_WINGET_BIT = UINT64_C(1) << 17U, + FF_PACKAGES_FLAG_XBPS_BIT = UINT64_C(1) << 18U, + FF_PACKAGES_FLAG_AM_BIT = UINT64_C(1) << 19U, + FF_PACKAGES_FLAG_SORCERY_BIT = UINT64_C(1) << 20U, + FF_PACKAGES_FLAG_LPKG_BIT = UINT64_C(1) << 21U, + FF_PACKAGES_FLAG_LPKGBUILD_BIT = UINT64_C(1) << 22U, + FF_PACKAGES_FLAG_GUIX_BIT = UINT64_C(1) << 23U, + FF_PACKAGES_FLAG_LINGLONG_BIT = UINT64_C(1) << 24U, + FF_PACKAGES_FLAG_PACSTALL_BIT = UINT64_C(1) << 25U, + FF_PACKAGES_FLAG_MPORT_BIT = UINT64_C(1) << 26U, + FF_PACKAGES_FLAG_PKGSRC_BIT = UINT64_C(1) << 27U, + FF_PACKAGES_FLAG_HPKG_BIT = UINT64_C(1) << 28U, + FF_PACKAGES_FLAG_PISI_BIT = UINT64_C(1) << 29U, + FF_PACKAGES_FLAG_SOAR_BIT = UINT64_C(1) << 30U, + FF_PACKAGES_FLAG_KISS_BIT = UINT64_C(1) << 31U, + FF_PACKAGES_FLAG_MOSS_BIT = UINT64_C(1) << 32U, + FF_PACKAGES_FLAG_APPIMAGE_BIT = UINT64_C(1) << 33U, + FF_PACKAGES_FLAG_CARDS_BIT = UINT64_C(1) << 34U, FF_PACKAGES_FLAG_FORCE_UNSIGNED = UINT64_MAX, } FFPackagesFlags; static_assert(sizeof(FFPackagesFlags) == sizeof(uint64_t), ""); @@ -46,7 +46,9 @@ static_assert(sizeof(FFPackagesFlags) == sizeof(uint64_t), ""); typedef struct FFPackagesOptions { FFModuleArgs moduleArgs; +#if !FF_PACKAGES_REMOVE_DISABLED FFPackagesFlags disabled; +#endif bool combined; } FFPackagesOptions; diff --git a/src/modules/packages/packages.c b/src/modules/packages/packages.c index dc8e0be56..4ef1d049a 100644 --- a/src/modules/packages/packages.c +++ b/src/modules/packages/packages.c @@ -211,6 +211,7 @@ void ffParsePackagesJsonObject(FFPackagesOptions* options, yyjson_val* module) { continue; } +#if !FF_PACKAGES_REMOVE_DISABLED if (unsafe_yyjson_equals_str(key, "disabled")) { if (!yyjson_is_null(val) && !yyjson_is_arr(val)) { ffPrintError(FF_PACKAGES_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "Invalid JSON value for %s", unsafe_yyjson_get_str(key)); @@ -229,10 +230,10 @@ void ffParsePackagesJsonObject(FFPackagesOptions* options, yyjson_val* module) { } const char* flag = unsafe_yyjson_get_str(flagObj); -#define FF_TEST_PACKAGE_NAME(name) \ - else if (ffStrEqualsIgnCase(flag, #name)) { \ - options->disabled |= FF_PACKAGES_FLAG_##name##_BIT; \ - } + #define FF_TEST_PACKAGE_NAME(name) \ + else if (ffStrEqualsIgnCase(flag, #name)) { \ + options->disabled |= FF_PACKAGES_FLAG_##name##_BIT; \ + } switch (toupper(flag[0])) { case 'A': if (false) @@ -342,11 +343,12 @@ void ffParsePackagesJsonObject(FFPackagesOptions* options, yyjson_val* module) { FF_TEST_PACKAGE_NAME(XBPS) break; } -#undef FF_TEST_PACKAGE_NAME + #undef FF_TEST_PACKAGE_NAME } continue; } } +#endif if (unsafe_yyjson_equals_str(key, "combined")) { options->combined = yyjson_get_bool(val); @@ -360,14 +362,15 @@ void ffParsePackagesJsonObject(FFPackagesOptions* options, yyjson_val* module) { void ffGeneratePackagesJsonConfig(FFPackagesOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module) { ffJsonConfigGenerateModuleArgsConfig(doc, module, &options->moduleArgs); +#if !FF_PACKAGES_REMOVE_DISABLED FF_STRBUF_AUTO_DESTROY buf = ffStrbufCreate(); yyjson_mut_val* arr = yyjson_mut_obj_add_arr(doc, module, "disabled"); -#define FF_TEST_PACKAGE_NAME(name) \ - else if ((options->disabled & FF_PACKAGES_FLAG_##name##_BIT)) { \ - ffStrbufSetS(&buf, #name); \ - ffStrbufLowerCase(&buf); \ - yyjson_mut_arr_add_strbuf(doc, arr, &buf); \ - } + #define FF_TEST_PACKAGE_NAME(name) \ + else if ((options->disabled & FF_PACKAGES_FLAG_##name##_BIT)) { \ + ffStrbufSetS(&buf, #name); \ + ffStrbufLowerCase(&buf); \ + yyjson_mut_arr_add_strbuf(doc, arr, &buf); \ + } if (false) ; FF_TEST_PACKAGE_NAME(AM) @@ -405,12 +408,13 @@ void ffGeneratePackagesJsonConfig(FFPackagesOptions* options, yyjson_mut_doc* do FF_TEST_PACKAGE_NAME(SORCERY) FF_TEST_PACKAGE_NAME(WINGET) FF_TEST_PACKAGE_NAME(XBPS) -#undef FF_TEST_PACKAGE_NAME + #undef FF_TEST_PACKAGE_NAME +#endif yyjson_mut_obj_add_bool(doc, module, "combined", options->combined); } -bool ffGeneratePackagesJsonResult(FF_A_UNUSED FFPackagesOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module) { +bool ffGeneratePackagesJsonResult(FFPackagesOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module) { FFPackagesResult counts = {}; ffStrbufInit(&counts.pacmanBranch); @@ -481,7 +485,9 @@ bool ffGeneratePackagesJsonResult(FF_A_UNUSED FFPackagesOptions* options, yyjson void ffInitPackagesOptions(FFPackagesOptions* options) { ffOptionInitModuleArg(&options->moduleArgs, "󰏖"); + #if !FF_PACKAGES_REMOVE_DISABLED options->disabled = FF_PACKAGES_DISABLE_LIST; + #endif options->combined = false; }