diff options
| author | ruki <[email protected]> | 2016-01-14 09:19:14 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2016-01-14 09:19:14 +0800 |
| commit | cdcf953259aee5e7e1a06855ddbedbaabf585bc9 (patch) | |
| tree | 47b8e5de10522cca3b67354fa527b3525193e880 /xmake/scripts/tools/tools.lua | |
| parent | 8c50566e7ab2139b9f6c2976b9ce875b7ad11b7a (diff) | |
rename script directory to core
Diffstat (limited to 'xmake/scripts/tools/tools.lua')
| -rw-r--r-- | xmake/scripts/tools/tools.lua | 222 |
1 files changed, 0 insertions, 222 deletions
diff --git a/xmake/scripts/tools/tools.lua b/xmake/scripts/tools/tools.lua deleted file mode 100644 index 31a68734b..000000000 --- a/xmake/scripts/tools/tools.lua +++ /dev/null @@ -1,222 +0,0 @@ ---!The Automatic Cross-platform Build Tool --- --- XMake is free software; you can redistribute it and/or modify --- it under the terms of the GNU Lesser General Public License as published by --- the Free Software Foundation; either version 2.1 of the License, or --- (at your option) any later version. --- --- XMake is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU Lesser General Public License for more details. --- --- You should have received a copy of the GNU Lesser General Public License --- along with XMake; --- If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a> --- --- Copyright (C) 2009 - 2015, ruki All rights reserved. --- --- @author ruki --- @file tools.lua --- - --- define module: tools -local tools = tools or {} - --- load modules -local os = require("base/os") -local path = require("base/path") -local utils = require("base/utils") -local string = require("base/string") -local platform = require("platform/platform") - --- match the tool name -function tools._match(name, toolname) - - -- match full? ok - if name == toolname then return 100 end - - -- match the name for windows? ok - if name:find("^" .. toolname .. "%.exe") then return 90 end - if name:find(toolname .. "%.exe") then return 85 end - - -- match the last word? ok - if name:find(toolname .. "$") then return 80 end - - -- match the partial word? ok - if name:find("%-" .. toolname) then return 60 end - - -- contains it? ok - if name:find(toolname, 1, true) then return 30 end - - -- not matched - return 0 -end - --- find tool from the given root directory and name -function tools._find_from(root, name) - - -- attempt to get it directly first - local filepath = string.format("%s/%s.lua", root, name) - if os.isfile(filepath) then - return filepath - end - - -- make the lower name - name = name:lower() - - -- get all tool files - local file_ok = nil - local score_maxn = 0 - local files = os.match(string.format("%s/*.lua", root)) - for _, file in ipairs(files) do - - -- the tool name - local toolname = path.basename(file) - - -- found it? - if toolname and toolname ~= "tools" then - - -- match score - local score = tools._match(name, toolname:lower()) - - -- ok? - if score >= 100 then return file end - - -- select the file with the max score - if score > score_maxn then - file_ok = file - score_maxn = score - end - end - end - - -- ok? - return file_ok -end - --- probe it's absolute path if exists from the given tool name and root directory -function tools._probe(root, name) - - -- check - assert(root and name) - - -- make the tool path - local toolpath = string.format("%s/%s", root, name) - toolpath = path.translate(toolpath) - - -- the tool exists? ok - if toolpath and os.isfile(toolpath) then - return toolpath - end -end - --- find tool from the given name and directory (optional) -function tools.find(name, root) - - -- check - assert(name) - - -- init filename - local filepath = nil - - -- only find it from this directory if the given directory exists - if root then return tools._find_from(root, name) end - - -- attempt to find it from the current platform directory first - if not filepath then filepath = tools._find_from(platform.directory() .. "/tools", name) end - - -- attempt to find it from the script directory - if not filepath then filepath = tools._find_from(xmake._SCRIPTS_DIR .. "/tools", name) end - - -- ok? - return filepath -end - --- load tool from the given name and directory (optional) -function tools.load(name, root) - - -- check - assert(name) - - -- get it directly from cache dirst - tools._TOOLS = tools._TOOLS or {} - if tools._TOOLS[name] then - return tools._TOOLS[name] - end - - -- find the tool file path - local toolpath = tools.find(name, root) - - -- not exists? - if not toolpath or not os.isfile(toolpath) then - return - end - - -- load script - local script, errors = loadfile(toolpath) - if script then - - -- load tool - local tool = script() - - -- init tool - if tool and tool.init then - tool:init(name) - end - - -- save tool to the cache - tools._TOOLS[name] = tool - - -- ok? - return tool - else - utils.error(errors) - utils.error("load %s failed!", toolpath) - assert(false) - end -end - --- get the given tool script from the given kind -function tools.get(kind) - - -- get the tool name - local toolname = platform.tool(kind) - if not toolname then - utils.error("cannot get tool name for %s", kind) - return - end - - -- load it - return tools.load(toolname) -end - --- probe it's absolute path if exists from the given tool name -function tools.probe(name, dirs) - - -- check - assert(name) - - -- attempt to run it directly first - if os.execute(string.format("%s > %s 2>&1", name, xmake._NULDEV)) ~= 0x7f00 then - return name - end - - -- attempt to get it from the given directories - if dirs then - for _, dir in ipairs(utils.wrap(dirs)) do - - -- probe it - local toolpath = tools._probe(dir, name) - - -- ok? - if toolpath and os.execute(string.format("%s > %s 2>&1", toolpath, xmake._NULDEV)) ~= 0x7f00 then - return toolpath - end - end - end -end - - --- return module: tools -return tools |
