summaryrefslogtreecommitdiff
path: root/tools/minicargo/manifest.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/minicargo/manifest.h')
-rw-r--r--tools/minicargo/manifest.h39
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);
};