diff options
Diffstat (limited to 'src/GlobalLib.cpp')
-rw-r--r-- | src/GlobalLib.cpp | 89 |
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; } |