diff options
| author | ruki <[email protected]> | 2017-06-17 23:40:03 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2017-06-17 23:40:03 +0800 |
| commit | e701b9cbef180ca6b222327abab7b92cdf661fe1 (patch) | |
| tree | 152f5bac1956abe945054345f68db59c43b6e438 /xmake/modules/lib | |
| parent | f66d8f33bbfbcde8be896f63ef42048a931f7f13 (diff) | |
add find_toolname
Diffstat (limited to 'xmake/modules/lib')
| -rw-r--r-- | xmake/modules/lib/detect/find_toolname.lua | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/xmake/modules/lib/detect/find_toolname.lua b/xmake/modules/lib/detect/find_toolname.lua new file mode 100644 index 000000000..1d8ce4d04 --- /dev/null +++ b/xmake/modules/lib/detect/find_toolname.lua @@ -0,0 +1,102 @@ +--!The Make-like Build Utility based on Lua +-- +-- Licensed to the Apache Software Foundation (ASF) under one +-- or more contributor license agreements. See the NOTICE file +-- distributed with this work for additional information +-- regarding copyright ownership. The ASF licenses this file +-- to you under the Apache License, Version 2.0 (the +-- "License"); you may not use this file except in compliance +-- with the License. You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- Copyright (C) 2015 - 2017, TBOOX Open Source Group. +-- +-- @author ruki +-- @file find_toolname.lua +-- + +-- find tool name from the given program +function _find(program) + + -- get file name first + name = path.filename(program):lower() + + -- remove arguments: " -xxx" or " --xxx" + name = name:gsub("%s%-+%w+", " ") + + -- get the last name by ' ': xxx xxx toolname + local names = name:split("%s") + if #names > 0 then + name = names[#names] + end + + -- remove suffix: ".xxx" + name = name:gsub("%.%w+", "") + + -- get tool directory + local tooldir = path.join(os.programdir(), "modules", "detect", "tool") + + -- find_toolname.lua exists? found + local toolname = name:gsub("[%+%-]", function (ch) return ifelse(ch == "+", "x", "_") end) + if os.isfile(path.join(tooldir, "find_" .. toolname .. ".lua")) then + return toolname + end + + -- get the last valid name: xxx-xxx-toolname-5 + local partnames = {} + for partname in name:gmatch("([%a%+]+)") do + table.insert(partnames, partname) + end + if #partnames > 0 then + name = partnames[#partnames] + end + + -- find_toolname.lua exists? found + toolname = name:gsub("%+", "x") + if os.isfile(path.join(tooldir, "find_" .. toolname .. ".lua")) then + return toolname + end +end + +-- find tool name +-- +-- .e.g +-- "xcrun -sdk macosx clang": clang +-- "/usr/bin/arm-linux-gcc": gcc +-- "link.exe -lib": link +-- "gcc-5": gcc +-- "arm-android-clang++": clangxx +-- "pkg-config": pkg_config +-- +-- @param program the program path or name +-- +-- @return the tool name +-- +function main(program) + + -- init cache + local toolnames = _g._TOOLNAMES or {} + + -- get it from the cache first + local toolname = toolnames[program] + if toolname ~= nil then + return ifelse(toolname, toolname, nil) + end + + -- find the tool name + toolname = _find(program) + + -- save result to cache + toolnames[program] = ifelse(toolname, toolname, false) + _g._TOOLNAMES = toolnames + + -- found? + return toolname +end |
