2022-10-13 21:43:31 +02:00
|
|
|
#include "packages.h"
|
2022-10-13 22:02:58 +02:00
|
|
|
#include "common/parsing.h"
|
2023-02-01 18:35:06 +01:00
|
|
|
#include "util/stringUtils.h"
|
2022-10-13 22:02:58 +02:00
|
|
|
|
|
|
|
|
#include <dirent.h>
|
2022-10-13 21:43:31 +02:00
|
|
|
|
|
|
|
|
static uint32_t getNumElements(const char* dirname, unsigned char type)
|
|
|
|
|
{
|
|
|
|
|
DIR* dirp = opendir(dirname);
|
|
|
|
|
if(dirp == NULL)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
uint32_t num_elements = 0;
|
|
|
|
|
|
|
|
|
|
struct dirent *entry;
|
|
|
|
|
while((entry = readdir(dirp)) != NULL) {
|
|
|
|
|
if(entry->d_type == type)
|
|
|
|
|
++num_elements;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(type == DT_DIR)
|
|
|
|
|
num_elements -= 2; // accounting for . and ..
|
|
|
|
|
|
|
|
|
|
closedir(dirp);
|
|
|
|
|
|
|
|
|
|
return num_elements;
|
|
|
|
|
}
|
|
|
|
|
|
2022-12-13 10:57:40 +08:00
|
|
|
static void countBrewPackages(const char* dirname, FFPackagesResult* result)
|
2022-10-13 21:43:31 +02:00
|
|
|
{
|
2023-04-15 15:29:54 +08:00
|
|
|
FF_STRBUF_AUTO_DESTROY baseDir = ffStrbufCreateS(dirname);
|
2022-10-13 21:43:31 +02:00
|
|
|
|
2022-10-13 22:02:58 +02:00
|
|
|
uint32_t baseDirLength = baseDir.length;
|
2022-10-13 21:43:31 +02:00
|
|
|
|
2022-10-13 22:02:58 +02:00
|
|
|
ffStrbufAppendS(&baseDir, "/Caskroom");
|
2022-12-13 10:57:40 +08:00
|
|
|
result->brewCask += getNumElements(baseDir.chars, DT_DIR);
|
2022-10-13 22:02:58 +02:00
|
|
|
ffStrbufSubstrBefore(&baseDir, baseDirLength);
|
2022-10-13 21:43:31 +02:00
|
|
|
|
2022-10-13 22:02:58 +02:00
|
|
|
ffStrbufAppendS(&baseDir, "/Cellar");
|
2022-12-13 10:57:40 +08:00
|
|
|
result->brew += getNumElements(baseDir.chars, DT_DIR);
|
2022-10-13 22:02:58 +02:00
|
|
|
ffStrbufSubstrBefore(&baseDir, baseDirLength);
|
2022-10-13 21:43:31 +02:00
|
|
|
}
|
|
|
|
|
|
2022-12-13 10:57:40 +08:00
|
|
|
static void getBrewPackages(FFPackagesResult* result)
|
2022-10-13 21:43:31 +02:00
|
|
|
{
|
|
|
|
|
const char* prefix = getenv("HOMEBREW_PREFIX");
|
|
|
|
|
if(ffStrSet(prefix))
|
2022-12-13 10:57:40 +08:00
|
|
|
return countBrewPackages(prefix, result);
|
2022-10-13 21:43:31 +02:00
|
|
|
|
2022-12-13 10:57:40 +08:00
|
|
|
countBrewPackages(FASTFETCH_TARGET_DIR_ROOT"/opt/homebrew", result);
|
|
|
|
|
countBrewPackages(FASTFETCH_TARGET_DIR_ROOT"/usr/local", result);
|
2022-10-13 21:43:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static uint32_t countMacPortsPackages(const char* dirname)
|
|
|
|
|
{
|
2023-04-15 15:29:54 +08:00
|
|
|
FF_STRBUF_AUTO_DESTROY baseDir = ffStrbufCreateS(dirname);
|
2022-10-13 22:12:31 +02:00
|
|
|
ffStrbufAppendS(&baseDir, "/var/macports/software");
|
2022-10-13 21:43:31 +02:00
|
|
|
|
2022-11-13 00:04:34 +08:00
|
|
|
return getNumElements(baseDir.chars, DT_DIR);
|
2022-10-13 21:43:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static uint32_t getMacPortsPackages()
|
|
|
|
|
{
|
|
|
|
|
const char* prefix = getenv("MACPORTS_PREFIX");
|
|
|
|
|
if(ffStrSet(prefix))
|
2022-10-13 22:12:31 +02:00
|
|
|
return countMacPortsPackages(prefix);
|
2022-10-13 21:43:31 +02:00
|
|
|
|
|
|
|
|
return countMacPortsPackages(FASTFETCH_TARGET_DIR_ROOT"/opt/local");
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-24 10:59:53 +08:00
|
|
|
void ffDetectPackagesImpl(FFPackagesResult* result)
|
2022-10-13 21:43:31 +02:00
|
|
|
{
|
2022-12-13 10:57:40 +08:00
|
|
|
getBrewPackages(result);
|
2022-10-13 21:43:31 +02:00
|
|
|
result->port = getMacPortsPackages();
|
|
|
|
|
}
|