diff options
Diffstat (limited to 'xmake/scripts')
| -rw-r--r-- | xmake/scripts/action/_config.lua | 2 | ||||
| -rw-r--r-- | xmake/scripts/base/os.lua | 45 |
2 files changed, 46 insertions, 1 deletions
diff --git a/xmake/scripts/action/_config.lua b/xmake/scripts/action/_config.lua index 1af22d27e..46e123800 100644 --- a/xmake/scripts/action/_config.lua +++ b/xmake/scripts/action/_config.lua @@ -27,7 +27,7 @@ local _config = _config or {} local utils = require("base/utils") local config = require("base/config") local makefile = require("base/makefile") - + -- done the given config function _config.done() diff --git a/xmake/scripts/base/os.lua b/xmake/scripts/base/os.lua index 7da3d9dcd..31434f37c 100644 --- a/xmake/scripts/base/os.lua +++ b/xmake/scripts/base/os.lua @@ -23,6 +23,10 @@ -- define module: os local os = os or {} +-- load modules +local path = require("base/path") +local utils = require("base/utils") + -- copy file or directory function os.cp(src, dst) @@ -139,5 +143,46 @@ function os.cd(path) return true end +-- match files or directories +-- +-- @param pattern the search pattern +-- uses "*" to match any part of a file or directory name, +-- uses "**" to recurse into subdirectories. +-- +-- @param findir true: find directory, false: find file +-- @return the result array and count +-- +-- @code +-- local dirs, count = os.match("./src/*", true) +-- local files, count = os.match("./src/**.c") +-- @endcode +-- +function os.match(pattern, findir) + + -- translate path and remove some repeat separators + pattern = path.translate(pattern) + + -- get the root directory + local rootdir = pattern + local starpos = pattern:find("%*") + if starpos then + rootdir = rootdir:sub(1, starpos - 1) + end + rootdir = path.directory(rootdir) + + -- is recurse? + local recurse = pattern:find("**", nil, true) + + -- convert pattern to a lua pattern + pattern = pattern:gsub("([%+%.%-%^%$%(%)%%])", "%%%1") + pattern = pattern:gsub("%*%*", "\001") + pattern = pattern:gsub("%*", "\002") + pattern = pattern:gsub("\001", ".*") + pattern = pattern:gsub("\002", "[^/]*") + + -- find it + return os.find(rootdir, pattern, recurse, findir) +end + -- return module: os return os |
