diff options
author | John Hodge <tpg@mutabah.net> | 2017-08-20 20:54:45 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2017-08-20 20:54:45 +0800 |
commit | 19f32ced09e7538cde01cb443b19e0a7a1c5667f (patch) | |
tree | 06a47471b98e8cf64b5fb3f529dd176f7586ebcb /tools/minicargo/manifest.h | |
parent | 4ca497d863c1c93689e5dd7581c164d1ce885569 (diff) | |
download | mrust-19f32ced09e7538cde01cb443b19e0a7a1c5667f.tar.gz |
minicargo - Dependency loading
Diffstat (limited to 'tools/minicargo/manifest.h')
-rw-r--r-- | tools/minicargo/manifest.h | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/tools/minicargo/manifest.h b/tools/minicargo/manifest.h index 054347fb..0e6c2d81 100644 --- a/tools/minicargo/manifest.h +++ b/tools/minicargo/manifest.h @@ -3,8 +3,10 @@ #include <string> #include <vector> #include <memory> +#include "helpers.h" class PackageManifest; +class Repository; struct PackageVersion { @@ -13,6 +15,15 @@ struct PackageVersion unsigned patch; static PackageVersion from_string(const ::std::string& s); + bool operator<(const PackageVersion& x) const { + if( major < x.major ) return true; + if( major > x.major ) return false; + if( minor < x.minor ) return true; + if( minor > x.minor ) return false; + if( minor < x.patch ) return true; + if( patch > x.patch ) return false; + return false; + } }; struct PackageVersionSpec { @@ -28,10 +39,14 @@ struct PackageVersionSpec Type ty; PackageVersion ver; }; + // TODO: Just upper and lower? ::std::vector<Bound> m_bounds; - // TODO: Just upper and lower? + // Construct from a string static PackageVersionSpec from_string(const ::std::string& s); + + /// Check if this spec accepts the passed version + bool accepts(const PackageVersion& v) const; }; class PackageRef @@ -40,6 +55,7 @@ class PackageRef ::std::string m_name; PackageVersionSpec m_version; + bool m_optional = false; ::std::string m_path; ::std::shared_ptr<PackageManifest> m_manifest; @@ -49,7 +65,22 @@ class PackageRef } public: - const PackageManifest& get_package() const; + const ::std::string& name() const { return m_name; } + //const ::std::string& get_repo_name() const { return m_repo; } + const PackageVersionSpec& get_version() const { return m_version; } + + bool is_optional() const { return m_optional; } + + const bool has_path() const { return m_path != ""; } + const ::std::string& path() const { return m_path; } + const bool has_git() const { return false; } + + const PackageManifest& get_package() const { + if(!m_manifest) throw ::std::runtime_error("Manifest not loaded for package " + m_name); + return *m_manifest; + } + + void load_manifest(Repository& repo, const ::helpers::path& base_path); }; struct PackageTarget @@ -98,6 +129,8 @@ class PackageManifest ::std::string m_name; PackageVersion m_version; + ::std::string m_build_script; + ::std::vector<PackageRef> m_dependencies; ::std::vector<PackageTarget> m_targets; @@ -122,4 +155,6 @@ public: const ::std::vector<PackageRef>& dependencies() const { return m_dependencies; } + + void load_dependencies(Repository& repo); }; |