From 91ab79f1475371e6e57d00f24f98bccb7749d15a Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sun, 14 Jan 2018 18:36:20 +0100 Subject: Add git dependencies --- include/Conf.hpp | 17 ++++++++++++---- include/Dependency.hpp | 51 +++++++++++++++++++++++++++++++++++++++++++++++ include/GitRepository.hpp | 16 +++++++++++++++ include/GlobalLib.hpp | 12 ++++++++--- include/PkgConfig.hpp | 11 +++++----- 5 files changed, 95 insertions(+), 12 deletions(-) create mode 100644 include/GitRepository.hpp (limited to 'include') diff --git a/include/Conf.hpp b/include/Conf.hpp index 90f150a..13245c1 100644 --- a/include/Conf.hpp +++ b/include/Conf.hpp @@ -228,7 +228,9 @@ namespace sibs } } - virtual ~SibsConfig(){} + SibsConfig operator=(SibsConfig &other) = delete; + + virtual ~SibsConfig(); Compiler getCompiler() const { @@ -257,9 +259,14 @@ namespace sibs this->testPath = testPath; } - virtual const std::vector& getDependencies() const + virtual const std::vector& getPackageListDependencies() const + { + return packageListDependencies; + } + + virtual const std::vector& getGitDependencies() const { - return dependencies; + return gitDependencies; } virtual const FileString& getProjectPath() const @@ -380,6 +387,7 @@ namespace sibs protected: virtual void processObject(StringView name) override; virtual void processField(StringView name, const ConfigValue &value) override; + void parseDependencies(const StringView &name, const ConfigValue &value); virtual void finished() override; void failInvalidFieldUnderObject(const StringView &fieldName) const; void validatePackageTypeDefined() const; @@ -399,7 +407,8 @@ namespace sibs std::string packageName; FileString testPath; PackageType packageType; - std::vector dependencies; + std::vector packageListDependencies; + std::vector gitDependencies; std::vector includeDirs; std::vector exposeIncludeDirs; std::vector platforms; diff --git a/include/Dependency.hpp b/include/Dependency.hpp index b97c362..7c8bbf1 100644 --- a/include/Dependency.hpp +++ b/include/Dependency.hpp @@ -2,15 +2,66 @@ #define SIBS_DEPENDENCY_HPP #include +#include namespace sibs { + class PackageListDependency; + class GitDependency; + class Dependency { public: + enum class Source + { + PACKAGE_LIST, + GIT + }; + + virtual ~Dependency(){} + + virtual Source getSource() const = 0; + + const PackageListDependency* asPackageListDependency() const + { + assert(getSource() == Source::PACKAGE_LIST); + return (PackageListDependency*)this; + } + + const GitDependency* asGitDependency() const + { + assert(getSource() == Source::GIT); + return (GitDependency*)this; + } + }; + + class PackageListDependency : public Dependency + { + public: + virtual ~PackageListDependency(){} + virtual Source getSource() const + { + return Source::PACKAGE_LIST; + } + std::string name; std::string version; }; + + class GitDependency : public Dependency + { + public: + virtual ~GitDependency(){} + virtual Source getSource() const + { + return Source::GIT; + } + + std::string name; + std::string url; + std::string branch; + std::string revision; + }; } #endif //SIBS_DEPENDENCY_HPP diff --git a/include/GitRepository.hpp b/include/GitRepository.hpp new file mode 100644 index 0000000..98399a0 --- /dev/null +++ b/include/GitRepository.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "Result.hpp" +#include "FileUtil.hpp" + +namespace sibs +{ + class GitDependency; + + class GitRepository + { + public: + static Result clone(GitDependency *gitDependency, const FileString &repoDirPath); + static Result pull(GitDependency *gitDependency, const FileString &repoDirPath); + }; +} diff --git a/include/GlobalLib.hpp b/include/GlobalLib.hpp index e0cc25c..8647a65 100644 --- a/include/GlobalLib.hpp +++ b/include/GlobalLib.hpp @@ -3,11 +3,13 @@ #include "Result.hpp" #include "Linker.hpp" -#include "Dependency.hpp" #include "Conf.hpp" namespace sibs { + class PackageListDependency; + class GitDependency; + class GlobalLib { public: @@ -17,10 +19,14 @@ namespace sibs DEPENDENCY_VERSION_NO_MATCH = 20 }; - static Result getLibs(const std::vector &libs, const SibsConfig &parentConfig, const FileString &globalLibRootDir, LinkerFlagCallbackFunc staticLinkerFlagCallbackFunc, LinkerFlagCallbackFunc dynamicLinkerFlagCallbackFunc, GlobalIncludeDirCallbackFunc globalIncludeDirCallback); + static Result getLibs(const std::vector &libs, const SibsConfig &parentConfig, const FileString &globalLibRootDir, LinkerFlagCallbackFunc staticLinkerFlagCallbackFunc, LinkerFlagCallbackFunc dynamicLinkerFlagCallbackFunc, GlobalIncludeDirCallbackFunc globalIncludeDirCallback); static Result validatePackageExists(const FileString &globalLibRootDir, const std::string &name); static Result getLibsLinkerFlags(const SibsConfig &parentConfig, const FileString &globalLibRootDir, const std::string &name, const std::string &version, LinkerFlagCallbackFunc staticLinkerFlagCallbackFunc, LinkerFlagCallbackFunc dynamicLinkerFlagCallbackFunc, GlobalIncludeDirCallbackFunc globalIncludeDirCallback); - static Result downloadDependency(const Dependency &dependency); + static Result getLibsLinkerFlags(const SibsConfig &parentConfig, const FileString &globalLibRootDir, GitDependency *gitDependency, LinkerFlagCallbackFunc staticLinkerFlagCallbackFunc, LinkerFlagCallbackFunc dynamicLinkerFlagCallbackFunc, GlobalIncludeDirCallbackFunc globalIncludeDirCallback); + static Result downloadDependency(PackageListDependency *dependency); + static Result downloadDependency(GitDependency *dependency); + private: + static Result getLibsLinkerFlagsCommon(const SibsConfig &parentConfig, const FileString &packageDir, const std::string &dependencyName, LinkerFlagCallbackFunc staticLinkerFlagCallbackFunc, LinkerFlagCallbackFunc dynamicLinkerFlagCallbackFunc, GlobalIncludeDirCallbackFunc globalIncludeDirCallback); }; } diff --git a/include/PkgConfig.hpp b/include/PkgConfig.hpp index e41b216..43f7d91 100644 --- a/include/PkgConfig.hpp +++ b/include/PkgConfig.hpp @@ -4,12 +4,13 @@ #include "env.hpp" #if OS_FAMILY == OS_FAMILY_POSIX #include "Result.hpp" -#include "Dependency.hpp" #include #include namespace sibs { + class PackageListDependency; + struct PkgConfigFlags { std::string linkerFlags; @@ -19,12 +20,12 @@ namespace sibs class PkgConfig { public: - static Result validatePkgConfigPackageVersionExists(const Dependency &dependency); + static Result validatePkgConfigPackageVersionExists(PackageListDependency *dependency); static Result validatePackageExists(const std::string &name); static Result validatePackageVersionAtLeast(const std::string &name, const std::string &version); - static Result getDynamicLibsLinkerFlags(const std::vector &libs); - static Result getDynamicLibsCflags(const std::vector &libs); - static Result getDynamicLibsFlags(const std::vector &libs); + static Result getDynamicLibsLinkerFlags(const std::vector &libs); + static Result getDynamicLibsCflags(const std::vector &libs); + static Result getDynamicLibsFlags(const std::vector &libs); }; } #endif // OS_FAMILY_POSIX -- cgit v1.2.3