diff options
| author | ruki <[email protected]> | 2017-09-18 22:54:13 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2017-09-18 11:25:24 +0800 |
| commit | 8f55f2e39ae47b7e9bc206d5ddf62a99d25c9d0f (patch) | |
| tree | 18ddc8e1a86fe0c8123be6924ab1d02d1013e177 /xmake/core/package | |
| parent | 9e730f52fd7a2dfecefc88ca620db855d6aa668b (diff) | |
add add_imports to bulk import modules
Diffstat (limited to 'xmake/core/package')
| -rw-r--r-- | xmake/core/package/package.lua | 62 |
1 files changed, 41 insertions, 21 deletions
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua index fb07bf517..a1f19b8a5 100644 --- a/xmake/core/package/package.lua +++ b/xmake/core/package/package.lua @@ -27,19 +27,20 @@ local package = package or {} local _instance = _instance or {} -- load modules -local os = require("base/os") -local io = require("base/io") -local path = require("base/path") -local utils = require("base/utils") -local table = require("base/table") -local filter = require("base/filter") -local global = require("base/global") -local interpreter = require("base/interpreter") -local sandbox = require("sandbox/sandbox") -local config = require("project/config") -local project = require("project/project") -local platform = require("platform/platform") -local import = require("sandbox/modules/import") +local os = require("base/os") +local io = require("base/io") +local path = require("base/path") +local utils = require("base/utils") +local table = require("base/table") +local filter = require("base/filter") +local global = require("base/global") +local interpreter = require("base/interpreter") +local sandbox = require("sandbox/sandbox") +local config = require("project/config") +local project = require("project/project") +local platform = require("platform/platform") +local sandbox = require("sandbox/sandbox") +local sandbox_module = require("sandbox/modules/import/core/sandbox/module") -- new an instance function _instance.new(name, info, rootdir) @@ -230,8 +231,9 @@ function _instance:script(name, generic) -- get script local script = self:get(name) + local result = nil if type(script) == "function" then - return script + result = script elseif type(script) == "table" then -- match script for special plat and arch @@ -239,23 +241,40 @@ function _instance:script(name, generic) local pattern = plat .. '|' .. (config.get("arch") or "") for _pattern, _script in pairs(script) do if not _pattern:startswith("__") and pattern:find('^' .. _pattern .. '$') then - return _script + result = _script + break end end -- match script for special plat - for _pattern, _script in pairs(script) do - if not _pattern:startswith("__") and plat:find('^' .. _pattern .. '$') then - return _script + if result == nil then + for _pattern, _script in pairs(script) do + if not _pattern:startswith("__") and plat:find('^' .. _pattern .. '$') then + result = _script + break + end end end -- get generic script - return script["__generic__"] or generic + result = result or script["__generic__"] or generic end -- only generic script - return generic + result = result or generic + + -- imports some modules first + if result then + local scope = getfenv(result) + if scope then + for _, modulename in ipairs(table.wrap(self:get("imports"))) do + scope[sandbox_module.name(modulename)] = sandbox_module.import(modulename, {anonymous = true}) + end + end + end + + -- ok + return result end -- fetch package info from the local packages @@ -265,7 +284,7 @@ end function _instance:fetch() -- import find_package - self._find_package = self._find_package or import("lib.detect.find_package", {anonymous = true}) + self._find_package = self._find_package or sandbox_module.import("lib.detect.find_package", {anonymous = true}) -- fetch it from the package directories first local fetchfrom = self._FETCHFROM @@ -338,6 +357,7 @@ function package.apis() , "package.set_description" -- package.add_xxx , "package.add_deps" + , "package.add_imports" } , script = { |
