summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2026-01-06 22:55:04 +0800
committerruki <[email protected]>2026-01-09 17:59:04 +0800
commit8a1ef48e80ebd9248e1be0cf3eb6d9780dcd4855 (patch)
tree46f1a3e1dc3ba448ebe807371ef3e4ef0326450a
parent5f6d3db9d4294ddb3f4ba2ded516e9409eb0e9f2 (diff)
add current scheme for package
-rw-r--r--tests/projects/package/schemes/xmake.lua14
-rw-r--r--xmake/core/package/package.lua22
2 files changed, 33 insertions, 3 deletions
diff --git a/tests/projects/package/schemes/xmake.lua b/tests/projects/package/schemes/xmake.lua
index 790b474ea..5cda14ea3 100644
--- a/tests/projects/package/schemes/xmake.lua
+++ b/tests/projects/package/schemes/xmake.lua
@@ -5,6 +5,7 @@ package("cmake")
set_homepage("https://cmake.org")
set_description("A cross-platform family of tools designed to build, test and package software")
+ local is_precompiled = true
if is_host("macosx") then
add_urls("https://cmake.org/files/v$(version).tar.gz", {version = function (version)
return table.concat(table.slice((version):split('%.'), 1, 2), '.') .. "/cmake-" .. version .. (version:ge("3.20") and "-macos-universal" or "-Darwin-x86_64")
@@ -60,11 +61,20 @@ package("cmake")
else
add_urls("https://github.com/Kitware/CMake/releases/download/v$(version)/cmake-$(version).tar.gz")
add_versions("4.2.1", "414aacfac54ba0e78e64a018720b64ed6bfca14b587047b8b3489f407a14a070")
+ is_precompiled = false
+ end
+
+ if is_precompiled then
+ add_schemes("source")
+ on_scheme("source", function (package, scheme)
+ scheme:add("urls", "https://github.com/Kitware/CMake/releases/download/v$(version)/cmake-$(version).tar.gz")
+ scheme:add("versions", "4.2.1", "414aacfac54ba0e78e64a018720b64ed6bfca14b587047b8b3489f407a14a070")
+ end)
end
on_install("@linux", "@windows", "@msys", "@cygwin", "@macosx", function (package)
- local is_default = false
- if is_default then
+ local scheme = package:current_scheme()
+ if scheme:is_default() then
raise("trigger failure when installing binaries, then we will fallback to install it from source tarball.")
else
import("core.base.option")
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index 75571f695..df24de0f2 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -2451,7 +2451,27 @@ end
-- get the given package scheme
function _instance:scheme(name)
- return self:schemes()[name]
+ if not name then
+ os.raise("scheme name is required")
+ end
+ local scheme = self:schemes()[name]
+ if not scheme then
+ os.raise("scheme %s not found", name)
+ end
+ return scheme
+end
+
+-- set current scheme
+function _instance:current_scheme_set(scheme)
+ self._CURRENT_SCHEME = scheme
+end
+
+-- get current scheme
+function _instance:current_scheme()
+ if self._CURRENT_SCHEME then
+ return self._CURRENT_SCHEME
+ end
+ return self:scheme("__default__")
end
-- get package schemes