diff options
| author | ruki <[email protected]> | 2024-05-28 11:47:47 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-05-28 11:47:47 +0800 |
| commit | 640945711f7d089a382e62cc6f46decc793bc525 (patch) | |
| tree | 85a184230a823ef42c24e6f99a4e28fd036ef749 | |
| parent | 81351ffb4cae056e11f9063ec983956044164560 (diff) | |
| parent | a4600c92868523942d60068076d8cf51e5503f16 (diff) | |
Merge pull request #5155 from xmake-io/source
add on_source for package
| -rw-r--r-- | xmake/core/package/package.lua | 47 | ||||
| -rw-r--r-- | xmake/modules/private/action/require/impl/package.lua | 14 |
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 |
