diff options
author | John Hodge <tpg@ucc.asn.au> | 2019-01-27 11:33:20 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2019-01-27 11:33:20 +0800 |
commit | 28b71bb7098339085a85d6e4eb4813b4eee4b73d (patch) | |
tree | f5eaa6fd9fd6703027e063b98064121f9b3c571b | |
parent | 098e210150f071d5cb7d8761f79dd3e8046bc829 (diff) | |
download | mrust-28b71bb7098339085a85d6e4eb4813b4eee4b73d.tar.gz |
Minicargo - Tweaks for building cargo
-rw-r--r-- | tools/minicargo/cfg.cpp | 7 | ||||
-rw-r--r-- | tools/minicargo/manifest.cpp | 17 | ||||
-rw-r--r-- | tools/minicargo/manifest.h | 12 |
3 files changed, 33 insertions, 3 deletions
diff --git a/tools/minicargo/cfg.cpp b/tools/minicargo/cfg.cpp index e8c732d8..85bff327 100644 --- a/tools/minicargo/cfg.cpp +++ b/tools/minicargo/cfg.cpp @@ -215,6 +215,13 @@ bool CfgChecker::check_cfg(CfgParseLexer& p) const rv &= check_cfg(p); } while(p.consume_if(',')); } + else if( name == "any" ) { + rv = false; + do + { + rv |= check_cfg(p); + } while(p.consume_if(',')); + } else { TODO("Unknown fragment in cfg - " << name.to_string()); } diff --git a/tools/minicargo/manifest.cpp b/tools/minicargo/manifest.cpp index 79db0e35..8f49c538 100644 --- a/tools/minicargo/manifest.cpp +++ b/tools/minicargo/manifest.cpp @@ -865,6 +865,10 @@ PackageVersionSpec PackageVersionSpec::from_string(const ::std::string& s) // Default, compatible pos ++; break; + case '~': + ty = PackageVersionSpec::Bound::Type::MinorCompatible; + pos ++; + break; case '=': ty = PackageVersionSpec::Bound::Type::Equal; pos ++; @@ -921,6 +925,9 @@ PackageVersionSpec PackageVersionSpec::from_string(const ::std::string& s) } else { + // NOTE: This changes the behaviour of ~ rules to be bounded on the major version instead + if( ty == PackageVersionSpec::Bound::Type::MinorCompatible ) + ty = PackageVersionSpec::Bound::Type::Compatible; v.minor = 0; v.patch = 0; } @@ -943,13 +950,19 @@ bool PackageVersionSpec::accepts(const PackageVersion& v) const switch(b.ty) { case Bound::Type::Compatible: - // To be compatible, it has to be higher? - // - TODO: Isn't a patch version compatible? + // ^ rules are >= specified, and < next major/breaking if( !(v >= b.ver) ) return false; if( !(v < b.ver.next_breaking()) ) return false; break; + case Bound::Type::MinorCompatible: + // ~ rules are >= specified, and < next minor + if( !(v >= b.ver) ) + return false; + if( !(v < b.ver.next_minor()) ) + return false; + break; case Bound::Type::GreaterEqual: if( !(v >= b.ver) ) return false; diff --git a/tools/minicargo/manifest.h b/tools/minicargo/manifest.h index 4bb8b843..be19a7b1 100644 --- a/tools/minicargo/manifest.h +++ b/tools/minicargo/manifest.h @@ -26,6 +26,14 @@ struct PackageVersion static PackageVersion from_string(const ::std::string& s); + PackageVersion next_minor() const { + if(major == 0) { + return PackageVersion { 0, minor, patch+1 }; + } + else { + return PackageVersion { major, minor+1, 0 }; + } + } PackageVersion next_breaking() const { if(major == 0) { return PackageVersion { 0, minor + 1, 0 }; @@ -87,7 +95,8 @@ struct PackageVersionSpec { enum class Type { - Compatible, + Compatible, // "^" - Allows anything up to the next major version + MinorCompatible, // "~X.Y" - Allows anything up to the next minor version Greater, GreaterEqual, Equal, @@ -116,6 +125,7 @@ struct PackageVersionSpec switch(b.ty) { case Bound::Type::Compatible: os << "^"; break; + case Bound::Type::MinorCompatible: os << "~"; break; case Bound::Type::Greater: os << ">"; break; case Bound::Type::GreaterEqual: os << ">="; break; case Bound::Type::Equal: os << "="; break; |