aboutsummaryrefslogtreecommitdiff
path: root/src/GlobalLib.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/GlobalLib.cpp')
-rw-r--r--src/GlobalLib.cpp89
1 files changed, 33 insertions, 56 deletions
diff --git a/src/GlobalLib.cpp b/src/GlobalLib.cpp
index 8ad1678..b390571 100644
--- a/src/GlobalLib.cpp
+++ b/src/GlobalLib.cpp
@@ -15,25 +15,20 @@ namespace sibs
{
Result<bool> GlobalLib::validatePackageExists(const FileString &globalLibRootDir, const std::string &name)
{
- FileString packageDir = globalLibRootDir + TINYDIR_STRING("/");
-#if OS_FAMILY == OS_FAMILY_POSIX
- packageDir += name;
-#else
- packageDir += utf8To16(name);
-#endif
- FileType packageDirFileType = getFileType(packageDir.c_str());
+ Path packageDir = Path(globalLibRootDir).join(toFileString(name));
+ FileType packageDirFileType = getFileType(packageDir.data.c_str());
switch(packageDirFileType)
{
case FileType::FILE_NOT_FOUND:
{
string errMsg = "Global lib dependency not found: ";
- errMsg += toUtf8(packageDir);
+ errMsg += toUtf8(packageDir.data);
return Result<bool>::Err(errMsg, DependencyError::DEPENDENCY_NOT_FOUND);
}
case FileType::REGULAR:
{
string errMsg = "Corrupt library directory. ";
- errMsg += toUtf8(packageDir);
+ errMsg += toUtf8(packageDir.data);
errMsg += " is a file, expected it to be a directory";
return Result<bool>::Err(errMsg);
}
@@ -54,10 +49,8 @@ namespace sibs
if (!libPathResult)
return Result<bool>::Err(libPathResult);
- FileString libArchivedFilePath = libPathResult.unwrap();
- libArchivedFilePath += TINYDIR_STRING("/.cache/sibs/archive/");
- libArchivedFilePath += toFileString(name);
- FileType archive_path_file_type = getFileType(libArchivedFilePath.c_str());
+ Path libArchivedFilePath = Path(libPathResult.unwrap()).join(".cache/sibs/archive").join(toFileString(name));
+ FileType archive_path_file_type = getFileType(libArchivedFilePath.data.c_str());
if(archive_path_file_type == FileType::FILE_NOT_FOUND)
return Result<bool>::Ok(true);
@@ -66,7 +59,7 @@ namespace sibs
return Result<bool>::Err("A previous download of package is corrupt, attempting to redownload...");
bool isEmpty = true;
- walkDir(libArchivedFilePath.c_str(), [&isEmpty](tinydir_file *file)
+ walkDir(libArchivedFilePath.data.c_str(), [&isEmpty](tinydir_file *file)
{
isEmpty = false;
return false;
@@ -78,13 +71,13 @@ namespace sibs
return Result<bool>::Ok(true);
}
- Result<bool> GlobalLib::getLibs(const std::vector<PackageListDependency*> &libs, const SibsConfig &parentConfig, const FileString &globalLibRootDir, LinkerFlagCallbackFunc staticLinkerFlagCallbackFunc, LinkerFlagCallbackFunc dynamicLinkerFlagCallbackFunc, GlobalIncludeDirCallbackFunc globalIncludeDirCallback)
+ Result<bool> GlobalLib::getLibs(const std::vector<PackageListDependency> &libs, const SibsConfig &parentConfig, const FileString &globalLibRootDir, LinkerFlagCallbackFunc staticLinkerFlagCallbackFunc, LinkerFlagCallbackFunc dynamicLinkerFlagCallbackFunc, GlobalIncludeDirCallbackFunc globalIncludeDirCallback)
{
- for(PackageListDependency *globalLibDependency : libs)
+ for(const PackageListDependency &globalLibDependency : libs)
{
if(!parentConfig.packaging)
- printf("Dependency %s in version range %s is missing from pkg-config, trying global lib\n", globalLibDependency->name.c_str(), globalLibDependency->version.toString().c_str());
- Result<bool> globalLibLinkerFlagsResult = GlobalLib::getLibsLinkerFlags(parentConfig, globalLibRootDir, globalLibDependency->name, globalLibDependency->version, staticLinkerFlagCallbackFunc, dynamicLinkerFlagCallbackFunc, globalIncludeDirCallback);
+ printf("Dependency %s in version range %s is missing from pkg-config, trying global lib\n", globalLibDependency.name.c_str(), globalLibDependency.version.toString().c_str());
+ Result<bool> globalLibLinkerFlagsResult = GlobalLib::getLibsLinkerFlags(parentConfig, globalLibRootDir, globalLibDependency.name, globalLibDependency.version, staticLinkerFlagCallbackFunc, dynamicLinkerFlagCallbackFunc, globalIncludeDirCallback);
if(!globalLibLinkerFlagsResult)
{
if(globalLibLinkerFlagsResult.getErrorCode() == GlobalLib::DependencyError::DEPENDENCY_NOT_FOUND || globalLibLinkerFlagsResult.getErrorCode() == GlobalLib::DependencyError::DEPENDENCY_VERSION_NO_MATCH)
@@ -103,7 +96,7 @@ namespace sibs
if(!downloadDependencyResult)
return downloadDependencyResult;
- globalLibLinkerFlagsResult = GlobalLib::getLibsLinkerFlags(parentConfig, globalLibRootDir, globalLibDependency->name, globalLibDependency->version, staticLinkerFlagCallbackFunc, dynamicLinkerFlagCallbackFunc, globalIncludeDirCallback);
+ globalLibLinkerFlagsResult = GlobalLib::getLibsLinkerFlags(parentConfig, globalLibRootDir, globalLibDependency.name, globalLibDependency.version, staticLinkerFlagCallbackFunc, dynamicLinkerFlagCallbackFunc, globalIncludeDirCallback);
if(!globalLibLinkerFlagsResult)
return globalLibLinkerFlagsResult;
}
@@ -122,17 +115,9 @@ namespace sibs
if (packageExistsResult.isErr())
return packageExistsResult;
-#if OS_FAMILY == OS_FAMILY_POSIX
- FileString namePlatformNative = name;
-#else
- FileString namePlatformNative = utf8To16(name);
-#endif
-
- FileString packageDir = globalLibRootDir + TINYDIR_STRING("/");
- packageDir += namePlatformNative;
-
+ Path packageDir = Path(globalLibRootDir).join(toFileString(name));
FileString foundVersion;
- walkDir(packageDir.c_str(), [&foundVersion, &versionRange](tinydir_file *file)
+ walkDir(packageDir.data.c_str(), [&foundVersion, &versionRange](tinydir_file *file)
{
if(file->is_dir)
{
@@ -150,10 +135,8 @@ namespace sibs
if(foundVersion.empty())
return Result<bool>::Err("Global lib dependency found, but version isn't in range of version", DependencyError::DEPENDENCY_VERSION_NO_MATCH);
- packageDir += TINYDIR_STRING("/");
- packageDir += foundVersion;
-
- return GlobalLib::getLibsLinkerFlagsCommon(parentConfig, packageDir, name, staticLinkerFlagCallbackFunc, dynamicLinkerFlagCallbackFunc, globalIncludeDirCallback);
+ packageDir.join(foundVersion);
+ return GlobalLib::getLibsLinkerFlagsCommon(parentConfig, packageDir.data, name, staticLinkerFlagCallbackFunc, dynamicLinkerFlagCallbackFunc, globalIncludeDirCallback);
}
Result<bool> GlobalLib::getLibsLinkerFlagsCommon(const SibsConfig &parentConfig, const FileString &packageDir, const string &dependencyName, LinkerFlagCallbackFunc staticLinkerFlagCallbackFunc, LinkerFlagCallbackFunc dynamicLinkerFlagCallbackFunc, GlobalIncludeDirCallbackFunc globalIncludeDirCallback)
@@ -237,9 +220,9 @@ namespace sibs
}
}
- Result<bool> GlobalLib::downloadDependency(PackageListDependency *dependency, Platform platform)
+ Result<bool> GlobalLib::downloadDependency(const PackageListDependency &dependency, Platform platform)
{
- Result<PackageMetadata> packageResult = Package::getPackage(dependency->name.c_str(), dependency->version, platform);
+ Result<PackageMetadata> packageResult = Package::getPackage(dependency.name.c_str(), dependency.version, platform);
if(!packageResult)
return Result<bool>::Err(packageResult);
@@ -248,41 +231,35 @@ namespace sibs
Result<FileString> libPathResult = getHomeDir();
if (!libPathResult)
return Result<bool>::Err(libPathResult);
- FileString libPath = libPathResult.unwrap();
- libPath += TINYDIR_STRING("/.cache/sibs/lib/");
- libPath += toFileString(asString(platform));
- libPath += TINYDIR_STRING("/");
- libPath += toFileString(dependency->name);
- libPath += TINYDIR_STRING("/");
- libPath += toFileString(package.version.toString());
+ Path libPath = Path(libPathResult.unwrap())
+ .join(TINYDIR_STRING(".cache/sibs/lib"))
+ .join(toFileString(asString(platform)))
+ .join(toFileString(dependency.name))
+ .join(toFileString(package.version.toString()));
- FileString libArchivedFilePath = libPathResult.unwrap();
- libArchivedFilePath += TINYDIR_STRING("/.cache/sibs/archive/");
- libArchivedFilePath += toFileString(dependency->name);
- Result<bool> createArchiveDirResult = createDirectoryRecursive(libArchivedFilePath.c_str());
+ Path libArchivedFilePath = Path(libPathResult.unwrap()).join(TINYDIR_STRING("/.cache/sibs/archive/")).join(toFileString(dependency.name));
+ Result<bool> createArchiveDirResult = createDirectoryRecursive(libArchivedFilePath.data.c_str());
if(!createArchiveDirResult)
return createArchiveDirResult;
- FileString libArchivedDir = libArchivedFilePath;
- libArchivedFilePath += TINYDIR_STRING("/");
- libArchivedFilePath += toFileString(package.version.toString());
- Result<bool> downloadResult = curl::downloadFile(package.urls[0].c_str(), libArchivedFilePath.c_str());
+ Path libArchivedDir = Path(libArchivedFilePath).join(toFileString(package.version.toString()));
+ Result<bool> downloadResult = curl::downloadFile(package.urls[0].c_str(), libArchivedFilePath.data.c_str());
if(!downloadResult)
return downloadResult;
// Create build path. This is done here because we dont want to create it if download fails
- Result<bool> createLibDirResult = createDirectoryRecursive(libPath.c_str());
+ Result<bool> createLibDirResult = createDirectoryRecursive(libPath.data.c_str());
if(!createLibDirResult)
return createLibDirResult;
- Result<bool> archiveExtractResult = Archive::extract(libArchivedFilePath.c_str(), libPath.c_str());
+ Result<bool> archiveExtractResult = Archive::extract(libArchivedFilePath.data.c_str(), libPath.data.c_str());
// We have extracted the archive, we dont need to cache it. If remove fails, it doesn't really matter, user can remove it himself
#if OS_FAMILY == OS_FAMILY_POSIX
- remove(libArchivedFilePath.c_str());
- remove(libArchivedDir.c_str());
+ remove(libArchivedFilePath.data.c_str());
+ remove(libArchivedDir.data.c_str());
#else
- _wremove(libArchivedFilePath.c_str());
- _wremove(libArchivedDir.c_str());
+ _wremove(libArchivedFilePath.data.c_str());
+ _wremove(libArchivedDir.data.c_str());
#endif
return archiveExtractResult;
}