Skip to content

Commit 999b918

Browse files
Merge pull request #234 from SladeGetz/macports_expansion
Added support for MacPorts package manager
2 parents 59ebc74 + 73095ef commit 999b918

File tree

3 files changed

+46
-6
lines changed

3 files changed

+46
-6
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ AlmaLinux, Alpine, Android, Arch, Arco, Artix, Bedrock, CachyOS, CentOS, Debian,
6565

6666
##### Package managers
6767
```
68-
Pacman, dpkg, rpm, emerge, xbps, nix, Flatpak, Snap, apk, brew
68+
Pacman, dpkg, rpm, emerge, xbps, nix, Flatpak, Snap, apk, brew, MacPorts
6969
```
7070

7171
##### WM themes

src/fastfetch.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ static inline void printCommandHelp(const char* command)
114114
}
115115
else if(strcasecmp(command, "packages-format") == 0)
116116
{
117-
constructAndPrintCommandHelpFormat("packages", "{2} (pacman){?3}[{3}]{?}, {4} (dpkg), {5} (rpm), {6} (emerge), {7} (xbps), {8} (nix-system), {9} (nix-user), {10} (nix-default), {11} (apk), {12} (flatpak), {13} (snap), {14} (brew)", 14,
117+
constructAndPrintCommandHelpFormat("packages", "{2} (pacman){?3}[{3}]{?}, {4} (dpkg), {5} (rpm), {6} (emerge), {7} (xbps), {8} (nix-system), {9} (nix-user), {10} (nix-default), {11} (apk), {12} (flatpak), {13} (snap), {14} (brew), {15} (port)", 15,
118118
"Number of all packages",
119119
"Number of pacman packages",
120120
"Pacman branch on manjaro",
@@ -128,7 +128,8 @@ static inline void printCommandHelp(const char* command)
128128
"Number of apk packages",
129129
"Number of flatpak packages",
130130
"Number of snap packages",
131-
"Number of brew packages"
131+
"Number of brew packages",
132+
"Number of macports packages"
132133
);
133134
}
134135
else if(strcasecmp(command, "shell-format") == 0)

src/modules/packages.c

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
#include <sys/stat.h>
1414

1515
#define FF_PACKAGES_MODULE_NAME "Packages"
16-
#define FF_PACKAGES_NUM_FORMAT_ARGS 14
16+
#define FF_PACKAGES_NUM_FORMAT_ARGS 15
1717

1818
typedef struct PackageCounts
1919
{
@@ -28,6 +28,7 @@ typedef struct PackageCounts
2828
uint32_t flatpak;
2929
uint32_t snap;
3030
uint32_t brew;
31+
uint32_t port;
3132

3233
FFstrbuf pacmanBranch;
3334
} PackageCounts;
@@ -222,6 +223,41 @@ static uint32_t getBrewPackages(FFstrbuf* baseDir)
222223
return result;
223224
}
224225

226+
static uint32_t countMacPortsPackages(FFstrbuf* baseDir)
227+
{
228+
uint32_t result = 0;
229+
uint32_t baseDirLength = baseDir->length;
230+
231+
ffStrbufAppendS(baseDir, "/var/macports/software");
232+
result += getNumElements(baseDir->chars, DT_DIR);
233+
ffStrbufSubstrBefore(baseDir, baseDirLength);
234+
235+
return result;
236+
}
237+
238+
static uint32_t getMacPortsPackages(FFstrbuf* baseDir)
239+
{
240+
uint32_t result = 0;
241+
uint32_t baseDirLength = baseDir->length;
242+
243+
const char* prefix = getenv("MACPORTS_PREFIX");
244+
bool prefixSet = ffStrSet(prefix);
245+
246+
if(prefixSet)
247+
{
248+
ffStrbufAppendS(baseDir, prefix);
249+
result += countMacPortsPackages(baseDir);
250+
ffStrbufSubstrBefore(baseDir, baseDirLength);
251+
}
252+
253+
ffStrbufAppendS(baseDir, "/opt/local");
254+
if(!prefixSet || strcasecmp(baseDir->chars, prefix) != 0)
255+
result += countMacPortsPackages(baseDir);
256+
ffStrbufSubstrBefore(baseDir, baseDirLength);
257+
258+
return result;
259+
}
260+
225261
#endif // __APPLE__
226262

227263
#ifdef FF_HAVE_RPM
@@ -353,6 +389,7 @@ static void getPackageCounts(const FFinstance* instance, FFstrbuf* baseDir, Pack
353389

354390
//brew
355391
packageCounts->brew += getBrewPackages(baseDir);
392+
packageCounts->port += getMacPortsPackages(baseDir);
356393

357394
#endif // __APPLE__
358395
}
@@ -421,7 +458,7 @@ void ffPrintPackages(FFinstance* instance)
421458

422459
ffStrbufDestroy(&baseDir);
423460

424-
uint32_t all = counts.pacman + counts.dpkg + counts.rpm + counts.emerge + counts.xbps + counts.nixSystem + nixUser + counts.nixDefault + counts.apk + counts.flatpak + counts.snap + counts.brew;
461+
uint32_t all = counts.pacman + counts.dpkg + counts.rpm + counts.emerge + counts.xbps + counts.nixSystem + nixUser + counts.nixDefault + counts.apk + counts.flatpak + counts.snap + counts.brew + counts.port;
425462
if(all == 0)
426463
{
427464
ffPrintError(instance, FF_PACKAGES_MODULE_NAME, 0, &instance->config.packages, "No packages from known package managers found");
@@ -479,6 +516,7 @@ void ffPrintPackages(FFinstance* instance)
479516
FF_PRINT_PACKAGE(flatpak)
480517
FF_PRINT_PACKAGE(snap)
481518
FF_PRINT_PACKAGE(brew)
519+
FF_PRINT_PACKAGE(port)
482520

483521
//Fix linter warning of unused value of all
484522
(void) all;
@@ -503,7 +541,8 @@ void ffPrintPackages(FFinstance* instance)
503541
{FF_FORMAT_ARG_TYPE_UINT, &counts.apk},
504542
{FF_FORMAT_ARG_TYPE_UINT, &counts.flatpak},
505543
{FF_FORMAT_ARG_TYPE_UINT, &counts.snap},
506-
{FF_FORMAT_ARG_TYPE_UINT, &counts.brew}
544+
{FF_FORMAT_ARG_TYPE_UINT, &counts.brew},
545+
{FF_FORMAT_ARG_TYPE_UINT, &counts.port}
507546
});
508547
}
509548

0 commit comments

Comments
 (0)