aboutsummaryrefslogtreecommitdiff
path: root/src/GlobalLib.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2018-10-18 07:05:43 +0200
committerdec05eba <dec05eba@protonmail.com>2020-07-06 07:39:33 +0200
commit6bb79ef033c2a2e8f12c9da6409e3547af40417c (patch)
tree6fe6c5bea99cc0b38af92a7aa4714e5614de4868 /src/GlobalLib.cpp
parent4e38f2af2b97850ec5b395d4e0ea8310e664e52f (diff)
Use ranges for dependency version
Diffstat (limited to 'src/GlobalLib.cpp')
-rw-r--r--src/GlobalLib.cpp40
1 files changed, 21 insertions, 19 deletions
diff --git a/src/GlobalLib.cpp b/src/GlobalLib.cpp
index 242e621..61e6648 100644
--- a/src/GlobalLib.cpp
+++ b/src/GlobalLib.cpp
@@ -8,6 +8,7 @@
#include "../include/CmakeModule.hpp"
#include "../include/Dependency.hpp"
#include "../include/GitRepository.hpp"
+#include "../include/VersionParser.hpp"
using namespace std;
@@ -69,7 +70,7 @@ namespace sibs
// TODO: If return error is invalid url, then the message should be converted to
// invalid package name/version. A check should be done if it is the name or version
// that is invalid.
- Result<bool> downloadDependencyResult = GlobalLib::downloadDependency(globalLibDependency);
+ Result<bool> downloadDependencyResult = GlobalLib::downloadDependency(globalLibDependency, parentConfig.platform);
if(!downloadDependencyResult)
return downloadDependencyResult;
@@ -118,7 +119,7 @@ namespace sibs
return Result<bool>::Ok(true);
}
- Result<bool> GlobalLib::getLibsLinkerFlags(const SibsConfig &parentConfig, const FileString &globalLibRootDir, const std::string &name, const std::string &version, LinkerFlagCallbackFunc staticLinkerFlagCallbackFunc, LinkerFlagCallbackFunc dynamicLinkerFlagCallbackFunc, GlobalIncludeDirCallbackFunc globalIncludeDirCallback)
+ Result<bool> GlobalLib::getLibsLinkerFlags(const SibsConfig &parentConfig, const FileString &globalLibRootDir, const std::string &name, const PackageVersionRange &versionRange, LinkerFlagCallbackFunc staticLinkerFlagCallbackFunc, LinkerFlagCallbackFunc dynamicLinkerFlagCallbackFunc, GlobalIncludeDirCallbackFunc globalIncludeDirCallback)
{
Result<bool> packageExistsResult = validatePackageExists(globalLibRootDir, name);
if (packageExistsResult.isErr())
@@ -126,33 +127,34 @@ namespace sibs
#if OS_FAMILY == OS_FAMILY_POSIX
FileString namePlatformNative = name;
- FileString versionPlatformNative = version;
#else
FileString namePlatformNative = utf8To16(name);
- FileString versionPlatformNative = utf8To16(version);
#endif
FileString packageDir = globalLibRootDir + TINYDIR_STRING("/");
packageDir += namePlatformNative;
- // TODO: Instead of checking if version is exact match, check if package has same major version
- // and same or newer minor version
FileString foundVersion;
- walkDir(packageDir.c_str(), [&foundVersion, &versionPlatformNative](tinydir_file *file)
+ walkDir(packageDir.c_str(), [&foundVersion, &versionRange](tinydir_file *file)
{
if(file->is_dir)
{
- //printf("version: %s\n", file->name);
- if(_tinydir_strcmp(versionPlatformNative.c_str(), file->name) == 0)
+ string versionUtf8 = toUtf8(file->name);
+ Result<PackageVersion> versionResult = parsePackageVersion({ versionUtf8.data(), versionUtf8.size() }, nullptr);
+ if(versionResult && versionRange.isInRange(versionResult.unwrap()))
+ {
foundVersion = file->name;
+ return false;
+ }
}
+ return true;
});
if(foundVersion.empty())
- return Result<bool>::Err("Global lib dependency found, but version doesn't match dependency version", DependencyError::DEPENDENCY_VERSION_NO_MATCH);
+ 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 += versionPlatformNative;
+ packageDir += foundVersion;
return GlobalLib::getLibsLinkerFlagsCommon(parentConfig, packageDir, name, staticLinkerFlagCallbackFunc, dynamicLinkerFlagCallbackFunc, globalIncludeDirCallback);
}
@@ -261,13 +263,13 @@ namespace sibs
}
}
- Result<bool> GlobalLib::downloadDependency(PackageListDependency *dependency)
+ Result<bool> GlobalLib::downloadDependency(PackageListDependency *dependency, Platform platform)
{
- Result<string> packageUrlResult = Package::getPackageUrl(dependency->name.c_str(), dependency->version.c_str(), SYSTEM_PLATFORM);
- if(!packageUrlResult)
- return Result<bool>::Err(packageUrlResult);
+ Result<PackageMetadata> packageResult = Package::getPackage(dependency->name.c_str(), dependency->version, platform);
+ if(!packageResult)
+ return Result<bool>::Err(packageResult);
- const string &url = packageUrlResult.unwrap();
+ const PackageMetadata &package = packageResult.unwrap();
Result<FileString> libPathResult = getHomeDir();
if (!libPathResult)
@@ -276,7 +278,7 @@ namespace sibs
libPath += TINYDIR_STRING("/.cache/sibs/lib/");
libPath += toFileString(dependency->name);
libPath += TINYDIR_STRING("/");
- libPath += toFileString(dependency->version);
+ libPath += package.version.toString();
FileString libArchivedFilePath = libPathResult.unwrap();
libArchivedFilePath += TINYDIR_STRING("/.cache/sibs/archive/");
@@ -286,8 +288,8 @@ namespace sibs
return createArchiveDirResult;
libArchivedFilePath += TINYDIR_STRING("/");
- libArchivedFilePath += toFileString(dependency->version);
- Result<bool> downloadResult = curl::downloadFile(url.c_str(), libArchivedFilePath.c_str());
+ libArchivedFilePath += package.version.toString();
+ Result<bool> downloadResult = curl::downloadFile(package.urls[0].c_str(), libArchivedFilePath.c_str());
if(!downloadResult)
return downloadResult;