summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2024-05-28 11:47:47 +0800
committerGitHub <[email protected]>2024-05-28 11:47:47 +0800
commit640945711f7d089a382e62cc6f46decc793bc525 (patch)
tree85a184230a823ef42c24e6f99a4e28fd036ef749
parent81351ffb4cae056e11f9063ec983956044164560 (diff)
parenta4600c92868523942d60068076d8cf51e5503f16 (diff)
Merge pull request #5155 from xmake-io/source
add on_source for package
-rw-r--r--xmake/core/package/package.lua47
-rw-r--r--xmake/modules/private/action/require/impl/package.lua14
2 files changed, 53 insertions, 8 deletions
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index c65f72afe..51cc9da91 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -109,11 +109,21 @@ end
-- set the value to the package info
function _instance:set(name, ...)
+ if self._SOURCE_INITED then
+ if self:_sourceset():has(name) then
+ os.raise("package:set(\"%s\", ...) can only be called in on_source().", name)
+ end
+ end
self._INFO:apival_set(name, ...)
end
-- add the value to the package info
function _instance:add(name, ...)
+ if self._SOURCE_INITED then
+ if self:_sourceset():has(name) then
+ os.raise("package:add(\"%s\", ...) can only be called in on_source().", name)
+ end
+ end
self._INFO:apival_add(name, ...)
end
@@ -976,6 +986,40 @@ function _instance:manifest_save()
end
end
+-- get the source configuration set
+function _instance:_sourceset()
+ local sourceset = self._SOURCESET
+ if sourceset == nil then
+ sourceset = hashset.of("urls", "versions", "versionfiles", "configs")
+ self._SOURCESET = sourceset
+ end
+ return sourceset
+end
+
+-- init package source
+function _instance:_init_source()
+ local inited = self._SOURCE_INITED
+ if not inited then
+ local on_source = self:script("source")
+ if on_source then
+ on_source(self)
+ end
+ end
+end
+
+-- load package
+function _instance:_load()
+ self._SOURCE_INITED = true
+ local loaded = self._LOADED
+ if not loaded then
+ local on_load = self:script("load")
+ if on_load then
+ on_load(self)
+ end
+ self._LOADED = true
+ end
+end
+
-- get the raw environments
function _instance:_rawenvs()
local envs = self._RAWENVS
@@ -2662,7 +2706,8 @@ function package.apis()
, script =
{
-- package.on_xxx
- "package.on_load"
+ "package.on_source"
+ , "package.on_load"
, "package.on_fetch"
, "package.on_check"
, "package.on_download"
diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua
index 6a860d99a..ef72c4489 100644
--- a/xmake/modules/private/action/require/impl/package.lua
+++ b/xmake/modules/private/action/require/impl/package.lua
@@ -934,6 +934,12 @@ function _load_package(packagename, requireinfo, opt)
-- finish requireinfo
_finish_requireinfo(requireinfo, package)
+ -- save require info
+ package:requireinfo_set(requireinfo)
+
+ -- init urls source
+ package:_init_source()
+
-- select package version
local version, source = _select_package_version(package, requireinfo, locked_requireinfo)
if version then
@@ -958,9 +964,6 @@ function _load_package(packagename, requireinfo, opt)
return package_cached
end
- -- save require info
- package:requireinfo_set(requireinfo)
-
-- save display name
if not displayname then
local packageid = _memcache():get2("packageids", packagename)
@@ -1002,10 +1005,7 @@ function _load_package(packagename, requireinfo, opt)
end
-- do load
- local on_load = package:script("load")
- if on_load then
- on_load(package)
- end
+ package:_load()
-- load all components
for _, component in pairs(package:components()) do