diff options
| author | ruki <[email protected]> | 2018-10-09 22:56:09 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2018-10-09 11:37:00 +0800 |
| commit | 73ce4108bed43f4844be5b7a9fb0d25c612cb4ff (patch) | |
| tree | dd86387184c66f41a92aba3e6ad58d038f2d8119 /xmake/core/base/winos.lua | |
| parent | aecf4e3f816fcd2432522f1a6d337df5a1257739 (diff) | |
improve winos.version comparator
Diffstat (limited to 'xmake/core/base/winos.lua')
| -rw-r--r-- | xmake/core/base/winos.lua | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/xmake/core/base/winos.lua b/xmake/core/base/winos.lua index 40bcf3823..07f838faa 100644 --- a/xmake/core/base/winos.lua +++ b/xmake/core/base/winos.lua @@ -29,6 +29,71 @@ local winos = winos or {} local os = require("base/os") local semver = require("base/semver") +-- get windows version from name +function winos._version_from_name(name) + + -- make defined values + winos._VERSIONS = winos._VERSIONS or + { + nt4 = "4.0" + , win2k = "5.0" + , winxp = "5.1" + , ws03 = "5.2" + , win6 = "6.0" + , vista = "6.0" + , ws08 = "6.0" + , longhorn = "6.0" + , win7 = "6.1" + , win8 = "6.2" + , winblue = "6.3" + , win81 = "6.3" + , win10 = "10.0" + } + return winos._VERSIONS[name] +end + +-- v1 == v2 with name (winxp, win10, ..)? +function winos._version_eq(self, version) + if type(version) == "string" then + local namever = winos._version_from_name(version) + if namever then + return semver.compare(self:major() .. '.' .. self:minor(), namever) == 0 + else + return semver.compare(self:rawstr(), version) == 0 + end + elseif type(version) == "table" then + return semver.compare(self:rawstr(), version:rawstr()) == 0 + end +end + +-- v1 < v2 with name (winxp, win10, ..)? +function winos._version_lt(self, version) + if type(version) == "string" then + local namever = winos._version_from_name(version) + if namever then + return semver.compare(self:major() .. '.' .. self:minor(), namever) < 0 + else + return semver.compare(self:rawstr(), version) < 0 + end + elseif type(version) == "table" then + return semver.compare(self:rawstr(), version:rawstr()) < 0 + end +end + +-- v1 <= v2 with name (winxp, win10, ..)? +function winos._version_le(self, version) + if type(version) == "string" then + local namever = winos._version_from_name(version) + if namever then + return semver.compare(self:major() .. '.' .. self:minor(), namever) <= 0 + else + return semver.compare(self:rawstr(), version) <= 0 + end + elseif type(version) == "table" then + return semver.compare(self:rawstr(), version:rawstr()) <= 0 + end +end + -- get system version function winos.version() @@ -48,6 +113,13 @@ function winos.version() winver = semver.new(winver) end + -- rewrite comparator + if winver then + winver.eq = winos._version_eq + winver.lt = winos._version_lt + winver.le = winos._version_le + end + -- save to cache winos._VERSION = winver or false |
