summaryrefslogtreecommitdiff
path: root/xmake
diff options
context:
space:
mode:
authorruki <[email protected]>2022-01-25 15:20:51 +0800
committerGitHub <[email protected]>2022-01-25 15:20:51 +0800
commite219035a8e884bc3bbae0c57c122cefa4cd66b28 (patch)
tree89d5cd2228816892edc12176fadabbea84634b11 /xmake
parentdb60a26fa1334c1175c8a2a549a67b827a01978a (diff)
parenta314a9b8d4131701a4dcd6140765836d092d3bc3 (diff)
Merge pull request #2010 from xmake-io/basepkg
Support base package
Diffstat (limited to 'xmake')
-rw-r--r--xmake/core/package/package.lua19
-rw-r--r--xmake/modules/private/action/require/impl/package.lua17
2 files changed, 32 insertions, 4 deletions
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index 379d1ddea..73b2731dd 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -68,11 +68,17 @@ function _instance:type()
return "package"
end
--- get the package configure
-function _instance:get(name)
+-- get the base package
+function _instance:base()
+ return self._BASE
+end
- -- get it from info first
+-- get the package configuration
+function _instance:get(name)
local value = self._INFO:get(name)
+ if value == nil and self:base() then
+ value = self:base():get(name)
+ end
if value ~= nil then
return value
end
@@ -90,7 +96,11 @@ end
-- get the extra configuration
function _instance:extraconf(name, item, key)
- return self._INFO:extraconf(name, item, key)
+ local conf = self._INFO:extraconf(name, item, key)
+ if conf == nil and self:base() then
+ conf = self:base():extraconf(name, item, key)
+ end
+ return conf
end
-- set the extra configuration
@@ -1811,6 +1821,7 @@ function package.apis()
, "package.set_kind"
, "package.set_plat" -- deprecated
, "package.set_arch" -- deprecated
+ , "package.set_base"
, "package.set_license"
, "package.set_homepage"
, "package.set_description"
diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua
index 07e2abc34..3534723d2 100644
--- a/xmake/modules/private/action/require/impl/package.lua
+++ b/xmake/modules/private/action/require/impl/package.lua
@@ -217,6 +217,17 @@ function _load_package_from_repository(packagename, opt)
end
end
+-- load package package from base
+function _load_package_from_base(package, basename, opt)
+ local package_base = _load_package_from_project(basename)
+ if not package_base then
+ package_base = _load_package_from_repository(basename, opt)
+ end
+ if package_base then
+ package._BASE = package_base
+ end
+end
+
-- has locked requires?
function _has_locked_requires(opt)
opt = opt or {}
@@ -700,6 +711,12 @@ function _load_package(packagename, requireinfo, opt)
end
end
+ -- load base package
+ if package and package:get("base") then
+ _load_package_from_base(package, package:get("base", {
+ name = requireinfo.reponame, locked_repo = locked_requireinfo and locked_requireinfo.repo}))
+ end
+
-- load package from system
local system = requireinfo.system
if system == nil then