diff options
| author | ruki <[email protected]> | 2026-01-06 22:55:04 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2026-01-09 17:59:04 +0800 |
| commit | 8a1ef48e80ebd9248e1be0cf3eb6d9780dcd4855 (patch) | |
| tree | 46f1a3e1dc3ba448ebe807371ef3e4ef0326450a | |
| parent | 5f6d3db9d4294ddb3f4ba2ded516e9409eb0e9f2 (diff) | |
add current scheme for package
| -rw-r--r-- | tests/projects/package/schemes/xmake.lua | 14 | ||||
| -rw-r--r-- | xmake/core/package/package.lua | 22 |
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 |
