From 309b9ca8f38df147940a37e1698ae662bd4346b3 Mon Sep 17 00:00:00 2001 From: ruki Date: Sat, 14 Aug 2021 14:03:09 +0800 Subject: add package.requires_lock policy --- xmake/core/project/policy.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/xmake/core/project/policy.lua b/xmake/core/project/policy.lua index 7040182a2..c624aed96 100644 --- a/xmake/core/project/policy.lua +++ b/xmake/core/project/policy.lua @@ -44,7 +44,9 @@ function policy.policies() -- we can compile the source files for each target in parallel ["build.across_targets_in_parallel"] = {description = "Enable compile the source files for each target in parallel.", default = true, type = "boolean"}, -- we need enable longpaths when building target or installing package - ["platform.longpaths"] = {description = "Enable long paths when building target or installing package on windows.", default = false, type = "boolean"} + ["platform.longpaths"] = {description = "Enable long paths when building target or installing package on windows.", default = false, type = "boolean"}, + -- lock required packages + ["package.requires_lock"] = {description = "Enable xmake-requires.lock to lock required packages.", default = false, type = "boolean"} } policy._POLICIES = policies end -- cgit v1.3.1 From 0795b09c48d770af91138edc417089830c1d4850 Mon Sep 17 00:00:00 2001 From: ruki Date: Sat, 14 Aug 2021 14:07:09 +0800 Subject: add project lockfile --- xmake/core/project/project.lua | 5 +++++ xmake/core/sandbox/modules/import/core/project/project.lua | 1 + 2 files changed, 6 insertions(+) diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua index fafc254bf..138e847ba 100644 --- a/xmake/core/project/project.lua +++ b/xmake/core/project/project.lua @@ -1023,6 +1023,11 @@ function project.requireconfs_str() return requireconfs_str, requireconfs_extra end +-- get requires lockfile +function project.requires_lockfile() + return path.join(project.directory(), "xmake-requires.lock") +end + -- get the given rule function project.rule(name) return project.rules()[name] diff --git a/xmake/core/sandbox/modules/import/core/project/project.lua b/xmake/core/sandbox/modules/import/core/project/project.lua index 694532527..1becb07a9 100644 --- a/xmake/core/sandbox/modules/import/core/project/project.lua +++ b/xmake/core/sandbox/modules/import/core/project/project.lua @@ -63,6 +63,7 @@ sandbox_core_project.required_package = project.required_package sandbox_core_project.required_packages = project.required_packages sandbox_core_project.requires_str = project.requires_str sandbox_core_project.requireconfs_str = project.requireconfs_str +sandbox_core_project.requires_lockfile = project.requires_lockfile sandbox_core_project.policy = project.policy sandbox_core_project.tmpdir = project.tmpdir sandbox_core_project.tmpfile = project.tmpfile -- cgit v1.3.1 From a19fc6d6da6627b5bdab702931ab6278e8cf8409 Mon Sep 17 00:00:00 2001 From: ruki Date: Sat, 14 Aug 2021 23:45:05 +0800 Subject: sort table.keys --- .../package/multiconfig/xmake-requires.lock | 5 +++ tests/projects/package/multiconfig/xmake.lua | 1 + xmake/core/base/serialize.lua | 3 +- xmake/core/base/table.lua | 15 ++++++++ xmake/core/project/project.lua | 2 +- .../modules/import/core/project/project.lua | 2 +- .../action/require/impl/install_packages.lua | 4 +++ .../private/action/require/impl/lock_packages.lua | 40 ++++++++++++++++++++++ 8 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 tests/projects/package/multiconfig/xmake-requires.lock create mode 100644 xmake/modules/private/action/require/impl/lock_packages.lua diff --git a/tests/projects/package/multiconfig/xmake-requires.lock b/tests/projects/package/multiconfig/xmake-requires.lock new file mode 100644 index 000000000..5752aa15a --- /dev/null +++ b/tests/projects/package/multiconfig/xmake-requires.lock @@ -0,0 +1,5 @@ +{ + zlib = { + buildhash = "8e5b898b0f344715bac89cc6a1577506" + } +} \ No newline at end of file diff --git a/tests/projects/package/multiconfig/xmake.lua b/tests/projects/package/multiconfig/xmake.lua index 09121e8d2..7aa2bdffb 100644 --- a/tests/projects/package/multiconfig/xmake.lua +++ b/tests/projects/package/multiconfig/xmake.lua @@ -2,6 +2,7 @@ add_requires("zlib", {system = false}) add_requires("zlib", {system = false}) -- test repeat requires add_requires("zlib~debug", {system = false, debug = true}) add_requires("zlib~shared", {system = false, configs = {shared = true}, alias = "zlib_shared"}) +set_policy("package.requires_lock", true) target("test1") set_kind("binary") diff --git a/xmake/core/base/serialize.lua b/xmake/core/base/serialize.lua index 99486bf8c..a2d7b9ff9 100644 --- a/xmake/core/base/serialize.lua +++ b/xmake/core/base/serialize.lua @@ -123,7 +123,8 @@ function serialize._maketable(obj, opt, level, pathsegs, reftab) local sformat = opt.indentstr and "[%q] = %s" or "[%q]=%s" local nformat = opt.indentstr and "[%s] = %s" or "[%s]=%s" local keywords = serialize._keywords() - for k, v in pairs(serialized) do + local makepairs = opt.orderkeys and table.orderpairs or pairs + for k, v in makepairs(serialized) do local format -- serialize key if type(k) == "string" then diff --git a/xmake/core/base/table.lua b/xmake/core/base/table.lua index c86a90988..01a6a4692 100644 --- a/xmake/core/base/table.lua +++ b/xmake/core/base/table.lua @@ -317,6 +317,21 @@ function table.orderkeys(tab) return keys end +-- order key/value iterator +-- +-- for k, v in table.orderpairs(t) do +-- TODO +-- end +function table.orderpairs(t) + local orderkeys = table.orderkeys(t) + local i = 1 + return function (t, k) + k = orderkeys[i] + i = i + 1 + return k, t[k] + end, t, nil +end + -- get values of a table function table.values(tab) diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua index 138e847ba..e2d7f996a 100644 --- a/xmake/core/project/project.lua +++ b/xmake/core/project/project.lua @@ -1024,7 +1024,7 @@ function project.requireconfs_str() end -- get requires lockfile -function project.requires_lockfile() +function project.requireslock() return path.join(project.directory(), "xmake-requires.lock") end diff --git a/xmake/core/sandbox/modules/import/core/project/project.lua b/xmake/core/sandbox/modules/import/core/project/project.lua index 1becb07a9..696bd0d91 100644 --- a/xmake/core/sandbox/modules/import/core/project/project.lua +++ b/xmake/core/sandbox/modules/import/core/project/project.lua @@ -63,7 +63,7 @@ sandbox_core_project.required_package = project.required_package sandbox_core_project.required_packages = project.required_packages sandbox_core_project.requires_str = project.requires_str sandbox_core_project.requireconfs_str = project.requireconfs_str -sandbox_core_project.requires_lockfile = project.requires_lockfile +sandbox_core_project.requireslock = project.requireslock sandbox_core_project.policy = project.policy sandbox_core_project.tmpdir = project.tmpdir sandbox_core_project.tmpfile = project.tmpfile diff --git a/xmake/modules/private/action/require/impl/install_packages.lua b/xmake/modules/private/action/require/impl/install_packages.lua index 7e83ae939..79fb71c3f 100644 --- a/xmake/modules/private/action/require/impl/install_packages.lua +++ b/xmake/modules/private/action/require/impl/install_packages.lua @@ -30,6 +30,7 @@ import("actions.install", {alias = "action_install"}) import("actions.download", {alias = "action_download"}) import("net.fasturl") import("private.action.require.impl.package") +import("private.action.require.impl.lock_packages") import("private.action.require.impl.register_packages") -- sort packages urls @@ -600,6 +601,9 @@ function main(requires, opt) -- re-register and refresh all root packages to local cache, -- because there may be some missing optional dependencies reinstalled register_packages(packages) + + -- lock packages + lock_packages(packages) return packages end diff --git a/xmake/modules/private/action/require/impl/lock_packages.lua b/xmake/modules/private/action/require/impl/lock_packages.lua new file mode 100644 index 000000000..fffb76dfa --- /dev/null +++ b/xmake/modules/private/action/require/impl/lock_packages.lua @@ -0,0 +1,40 @@ +--!A cross-platform build utility based on Lua +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- Copyright (C) 2015-present, TBOOX Open Source Group. +-- +-- @author ruki +-- @file lock_packages.lua +-- + +-- imports +import("core.project.project") + +-- lock package +function _lock_package(instance) + local result = {} + result.buildhash = instance:buildhash() + return result +end + +-- lock all required packages +function main(packages) + local results = {} + for _, instance in ipairs(packages) do + results[instance:name()] = _lock_package(instance) + end + table.sort(results, function (a, b) return a.name < b.name end) + io.writefile(project.requireslock(), string.serialize(results, {orderkeys = true})) +end + -- cgit v1.3.1 From 28c02f2323aaa4595b8474c6a01e6ffc28181396 Mon Sep 17 00:00:00 2001 From: ruki Date: Sun, 15 Aug 2021 00:05:55 +0800 Subject: update lock info --- .../package/multiconfig/xmake-requires.lock | 14 +++- .../package/toolchain_muslcc/xmake-requires.lock | 93 ++++++++++++++++++++++ tests/projects/package/toolchain_muslcc/xmake.lua | 3 + .../private/action/require/impl/lock_packages.lua | 8 +- 4 files changed, 115 insertions(+), 3 deletions(-) create mode 100644 tests/projects/package/toolchain_muslcc/xmake-requires.lock diff --git a/tests/projects/package/multiconfig/xmake-requires.lock b/tests/projects/package/multiconfig/xmake-requires.lock index 5752aa15a..c5031a33c 100644 --- a/tests/projects/package/multiconfig/xmake-requires.lock +++ b/tests/projects/package/multiconfig/xmake-requires.lock @@ -1,5 +1,17 @@ { zlib = { - buildhash = "8e5b898b0f344715bac89cc6a1577506" + buildhash = "b76a297309d14c09b42cfe3927260a51", + name = "zlib", + version = "1.2.11" + }, + ["zlib~debug"] = { + buildhash = "e6a6fa6a86ad4fc7ae3c2cf7c60cc084", + name = "zlib", + version = "1.2.11" + }, + ["zlib~shared"] = { + buildhash = "8e5b898b0f344715bac89cc6a1577506", + name = "zlib", + version = "1.2.11" } } \ No newline at end of file diff --git a/tests/projects/package/toolchain_muslcc/xmake-requires.lock b/tests/projects/package/toolchain_muslcc/xmake-requires.lock new file mode 100644 index 000000000..8fa6e9982 --- /dev/null +++ b/tests/projects/package/toolchain_muslcc/xmake-requires.lock @@ -0,0 +1,93 @@ +{ + autoconf = { + arch = "x86_64", + buildhash = "01974c48f52d4d658f58852351743754", + kind = "binary", + name = "autoconf", + plat = "macosx", + version = "2.69" + }, + automake = { + arch = "x86_64", + buildhash = "7a090c93706241f983f0d821a162e8a5", + kind = "binary", + name = "automake", + plat = "macosx", + version = "1.16.1" + }, + cmake = { + arch = "x86_64", + buildhash = "a6d18f8c0bf347d980f8bb762583c91a", + kind = "binary", + name = "cmake", + plat = "macosx", + version = "3.21.0" + }, + gmp = { + arch = "x86_64", + buildhash = "7dd9c224447e46698ac73d29f58b1d73", + name = "gmp", + plat = "macosx", + version = "6.2.1" + }, + libisl = { + arch = "x86_64", + buildhash = "f649e1fb365e442e8f79f372fd91483b", + name = "libisl", + plat = "macosx", + version = "0.22" + }, + libogg = { + arch = "arm", + buildhash = "d894fc29f2fb4c45a0f48bc2c6ece273", + name = "libogg", + plat = "cross", + version = "v1.3.4" + }, + libplist = { + arch = "arm", + buildhash = "0c01b22920be4876b1de74629194eb8f", + name = "libplist", + plat = "cross", + version = "2.2.0" + }, + libtool = { + arch = "x86_64", + buildhash = "64584ec84a4743ecb740b598b263ffa6", + kind = "binary", + name = "libtool", + plat = "macosx", + version = "2.4.6" + }, + m4 = { + arch = "x86_64", + buildhash = "fd0e83e5759b442a970327ebb1c89793", + kind = "binary", + name = "m4", + plat = "macosx", + version = "1.4.19" + }, + muslcc = { + arch = "x86_64", + buildhash = "11062c09ebeb484594488ad73ddbcd1f", + kind = "toolchain", + name = "muslcc", + plat = "macosx", + version = "20210202" + }, + ["pkg-config"] = { + arch = "x86_64", + buildhash = "84fd7f9b9f7a47709512cfc85cd9e5f7", + kind = "binary", + name = "pkg-config", + plat = "macosx", + version = "0.29.2" + }, + zlib = { + arch = "arm", + buildhash = "be90a245b8bb48e6b08a1a15bdcad467", + name = "zlib", + plat = "cross", + version = "1.2.11" + } +} \ No newline at end of file diff --git a/tests/projects/package/toolchain_muslcc/xmake.lua b/tests/projects/package/toolchain_muslcc/xmake.lua index bf5e98e8c..b111d5976 100644 --- a/tests/projects/package/toolchain_muslcc/xmake.lua +++ b/tests/projects/package/toolchain_muslcc/xmake.lua @@ -4,6 +4,9 @@ add_rules("mode.debug", "mode.release") set_plat("cross") set_arch("arm") +-- lock requires +set_policy("package.requires_lock", true) + -- add library packages -- for testing zlib/xmake, libplist/autoconf, libogg/cmake add_requires("zlib", "libogg", {system = false}) diff --git a/xmake/modules/private/action/require/impl/lock_packages.lua b/xmake/modules/private/action/require/impl/lock_packages.lua index fffb76dfa..8d1e0ebdd 100644 --- a/xmake/modules/private/action/require/impl/lock_packages.lua +++ b/xmake/modules/private/action/require/impl/lock_packages.lua @@ -24,7 +24,12 @@ import("core.project.project") -- lock package function _lock_package(instance) local result = {} + result.name = instance:name() + result.plat = instance:plat() + result.arch = instance:arch() + result.kind = instance:kind() result.buildhash = instance:buildhash() + result.version = instance:version_str() return result end @@ -32,9 +37,8 @@ end function main(packages) local results = {} for _, instance in ipairs(packages) do - results[instance:name()] = _lock_package(instance) + results[instance:displayname()] = _lock_package(instance) end - table.sort(results, function (a, b) return a.name < b.name end) io.writefile(project.requireslock(), string.serialize(results, {orderkeys = true})) end -- cgit v1.3.1 From dd717cd8219f0774ecb717f44d6ba3f182f29c99 Mon Sep 17 00:00:00 2001 From: ruki Date: Sun, 15 Aug 2021 23:38:15 +0800 Subject: improve xmake-requires.lock --- .../package/multiconfig/xmake-requires.lock | 42 ++++- .../package/toolchain_muslcc/xmake-requires.lock | 185 +++++++++++++++++++-- xmake/modules/devel/git/lastcommit.lua | 77 +++++++++ .../private/action/require/impl/lock_packages.lua | 54 +++++- .../private/action/require/impl/package.lua | 25 +-- .../action/require/impl/utils/requirekey.lua | 50 ++++++ 6 files changed, 390 insertions(+), 43 deletions(-) create mode 100644 xmake/modules/devel/git/lastcommit.lua create mode 100644 xmake/modules/private/action/require/impl/utils/requirekey.lua diff --git a/tests/projects/package/multiconfig/xmake-requires.lock b/tests/projects/package/multiconfig/xmake-requires.lock index c5031a33c..78e911112 100644 --- a/tests/projects/package/multiconfig/xmake-requires.lock +++ b/tests/projects/package/multiconfig/xmake-requires.lock @@ -1,17 +1,53 @@ { - zlib = { + ["zlib#fd74da7781d54dddb234cfb6eae7be34"] = { + arch = "x86_64", buildhash = "b76a297309d14c09b42cfe3927260a51", + configs = { + debug = false, + pic = true, + shared = false + }, + is_built = true, name = "zlib", + plat = "macosx", + repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + urls = { + "https://github.com/madler/zlib/archive/v1.2.11.tar.gz#629380c90a77b964d896ed37163f5c3a34f6e6d897311f1df2a7016355c45eff" + }, version = "1.2.11" }, - ["zlib~debug"] = { + ["zlib~debug#29572d10f2b44d76ad238aa6d9d886f0"] = { + arch = "x86_64", buildhash = "e6a6fa6a86ad4fc7ae3c2cf7c60cc084", + configs = { + debug = true, + pic = true, + shared = false + }, + is_built = true, name = "zlib", + plat = "macosx", + repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + urls = { + "https://github.com/madler/zlib/archive/v1.2.11.tar.gz#629380c90a77b964d896ed37163f5c3a34f6e6d897311f1df2a7016355c45eff" + }, version = "1.2.11" }, - ["zlib~shared"] = { + ["zlib~shared#0aa7e77905524be8bf354384c68bdde7"] = { + arch = "x86_64", buildhash = "8e5b898b0f344715bac89cc6a1577506", + configs = { + debug = false, + pic = true, + shared = true + }, + is_built = true, name = "zlib", + plat = "macosx", + repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + urls = { + "https://github.com/madler/zlib/archive/v1.2.11.tar.gz#629380c90a77b964d896ed37163f5c3a34f6e6d897311f1df2a7016355c45eff" + }, version = "1.2.11" } } \ No newline at end of file diff --git a/tests/projects/package/toolchain_muslcc/xmake-requires.lock b/tests/projects/package/toolchain_muslcc/xmake-requires.lock index 8fa6e9982..779c320ff 100644 --- a/tests/projects/package/toolchain_muslcc/xmake-requires.lock +++ b/tests/projects/package/toolchain_muslcc/xmake-requires.lock @@ -1,93 +1,254 @@ { - autoconf = { + ["autoconf#fd74da7781d54dddb234cfb6eae7be34"] = { arch = "x86_64", buildhash = "01974c48f52d4d658f58852351743754", + configs = { + debug = false, + pic = true, + shared = false + }, + deps = { + "m4#fd74da7781d54dddb234cfb6eae7be34" + }, + is_built = true, kind = "binary", name = "autoconf", plat = "macosx", + repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + urls = { + "http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz#954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969", + "https://mirrors.ustc.edu.cn/gnu/autoconf/autoconf-2.69.tar.gz#954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969", + "git://git.sv.gnu.org/autoconf#2.69" + }, version = "2.69" }, - automake = { + ["automake#fd74da7781d54dddb234cfb6eae7be34"] = { arch = "x86_64", buildhash = "7a090c93706241f983f0d821a162e8a5", + configs = { + debug = false, + pic = true, + shared = false + }, + deps = { + "autoconf#fd74da7781d54dddb234cfb6eae7be34" + }, + is_built = true, kind = "binary", name = "automake", plat = "macosx", + repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + urls = { + "http://ftp.gnu.org/gnu/automake/automake-1.16.1.tar.gz#608a97523f97db32f1f5d5615c98ca69326ced2054c9f82e65bade7fc4c9dea8", + "https://mirrors.ustc.edu.cn/gnu/automake/automake-1.16.1.tar.gz#608a97523f97db32f1f5d5615c98ca69326ced2054c9f82e65bade7fc4c9dea8" + }, version = "1.16.1" }, - cmake = { + ["cmake#fd74da7781d54dddb234cfb6eae7be34"] = { arch = "x86_64", buildhash = "a6d18f8c0bf347d980f8bb762583c91a", + configs = { + debug = false, + pic = true, + shared = false + }, + is_built = true, kind = "binary", name = "cmake", plat = "macosx", + repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + urls = { + "https://cmake.org/files/v3.21/cmake-3.21.0-macos-universal-Darwin-x86_64.tar.gz#c1c6f19dfc9c658a48b5aed22806595b2337bb3aedb71ab826552f74f568719f", + "https://github.com/Kitware/CMake/releases/download/v3.21.0/cmake-3.21.0-macos-universal.tar.gz#c1c6f19dfc9c658a48b5aed22806595b2337bb3aedb71ab826552f74f568719f" + }, version = "3.21.0" }, - gmp = { + ["gmp#fd74da7781d54dddb234cfb6eae7be34"] = { arch = "x86_64", buildhash = "7dd9c224447e46698ac73d29f58b1d73", + configs = { + debug = false, + pic = true, + shared = false + }, + deps = { + "autoconf#fd74da7781d54dddb234cfb6eae7be34" + }, + is_built = true, name = "gmp", plat = "macosx", + repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + urls = { + "https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz#fd4829912cddd12f84181c3451cc752be224643e87fac497b69edddadc49b4f2" + }, version = "6.2.1" }, - libisl = { + ["libisl 0.22#11f62b7b062648cebf81bd6623721f7d"] = { arch = "x86_64", buildhash = "f649e1fb365e442e8f79f372fd91483b", + configs = { + debug = false, + pic = true, + shared = true + }, + deps = { + "autoconf#fd74da7781d54dddb234cfb6eae7be34", + "gmp#fd74da7781d54dddb234cfb6eae7be34" + }, + is_built = true, name = "libisl", plat = "macosx", + repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + urls = { + "http://isl.gforge.inria.fr/isl-0.22.tar.xz#6c8bc56c477affecba9c59e2c9f026967ac8bad01b51bdd07916db40a517b9fa" + }, version = "0.22" }, - libogg = { + ["libogg#265260a3b33e47f189d65373131d1f08"] = { arch = "arm", buildhash = "d894fc29f2fb4c45a0f48bc2c6ece273", + configs = { + debug = false, + pic = true, + shared = false, + toolchains = "@muslcc" + }, + deps = { + "cmake#fd74da7781d54dddb234cfb6eae7be34" + }, + is_built = true, name = "libogg", plat = "cross", + repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + urls = { + "https://gitlab.xiph.org/xiph/ogg/-/archive/v1.3.4/ogg-v1.3.4.tar.gz#62cc64b9fd3cf57bde3a9033e94534ba34313d2bb9698029f623121a4e47bb9b", + "https://gitlab.xiph.org/xiph/ogg.git#v1.3.4" + }, version = "v1.3.4" }, - libplist = { + ["libplist#265260a3b33e47f189d65373131d1f08"] = { arch = "arm", buildhash = "0c01b22920be4876b1de74629194eb8f", + configs = { + debug = false, + pic = true, + shared = false, + toolchains = "@muslcc" + }, + deps = { + "autoconf#fd74da7781d54dddb234cfb6eae7be34", + "automake#fd74da7781d54dddb234cfb6eae7be34", + "libtool#fd74da7781d54dddb234cfb6eae7be34", + "pkg-config#fd74da7781d54dddb234cfb6eae7be34" + }, + is_built = true, name = "libplist", plat = "cross", + repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + urls = { + "https://github.com/libimobiledevice/libplist/archive/2.2.0.tar.gz#7e654bdd5d8b96f03240227ed09057377f06ebad08e1c37d0cfa2abe6ba0cee2", + "https://github.com/libimobiledevice/libplist.git#2.2.0" + }, version = "2.2.0" }, - libtool = { + ["libtool#fd74da7781d54dddb234cfb6eae7be34"] = { arch = "x86_64", buildhash = "64584ec84a4743ecb740b598b263ffa6", + configs = { + debug = false, + pic = true, + shared = false + }, + deps = { + "autoconf#fd74da7781d54dddb234cfb6eae7be34" + }, + is_built = true, kind = "binary", name = "libtool", plat = "macosx", + repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + urls = { + "http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz#e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3", + "https://mirrors.ustc.edu.cn/gnu/libtool/libtool-2.4.6.tar.gz#e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3", + "git://git.savannah.gnu.org/libtool.git#2.4.6" + }, version = "2.4.6" }, - m4 = { + ["m4#fd74da7781d54dddb234cfb6eae7be34"] = { arch = "x86_64", buildhash = "fd0e83e5759b442a970327ebb1c89793", + configs = { + debug = false, + pic = true, + shared = false + }, + is_built = true, kind = "binary", name = "m4", plat = "macosx", + repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + urls = { + "https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz#63aede5c6d33b6d9b13511cd0be2cac046f2e70fd0a07aa9573a04a82783af96", + "https://ftpmirror.gnu.org/m4/m4-1.4.19.tar.xz#63aede5c6d33b6d9b13511cd0be2cac046f2e70fd0a07aa9573a04a82783af96" + }, version = "1.4.19" }, - muslcc = { + ["muslcc#fd74da7781d54dddb234cfb6eae7be34"] = { arch = "x86_64", buildhash = "11062c09ebeb484594488ad73ddbcd1f", + configs = { + debug = false, + pic = true, + shared = false + }, + deps = { + "libisl 0.22#11f62b7b062648cebf81bd6623721f7d" + }, + is_built = true, kind = "toolchain", name = "muslcc", plat = "macosx", + repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + urls = { + "https://github.com/xmake-mirror/musl.cc/releases/download/20210202/arm-linux-musleabi-cross.mac.tgz#a177df3f847181c0c7f2b34b9bd7725b4c556c11a347aa0ae36e09ebf23fb480" + }, version = "20210202" }, - ["pkg-config"] = { + ["pkg-config#fd74da7781d54dddb234cfb6eae7be34"] = { arch = "x86_64", buildhash = "84fd7f9b9f7a47709512cfc85cd9e5f7", + configs = { + debug = false, + pic = true, + shared = false + }, + is_built = true, kind = "binary", name = "pkg-config", plat = "macosx", + repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + urls = { + "https://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz#6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591", + "http://fco.it.distfiles.macports.org/mirrors/macports-distfiles/pkgconfig/pkg-config-0.29.2.tar.gz#6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591" + }, version = "0.29.2" }, - zlib = { + ["zlib#265260a3b33e47f189d65373131d1f08"] = { arch = "arm", buildhash = "be90a245b8bb48e6b08a1a15bdcad467", + configs = { + debug = false, + pic = true, + shared = false, + toolchains = "@muslcc" + }, + is_built = true, name = "zlib", plat = "cross", + repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + urls = { + "https://github.com/madler/zlib/archive/v1.2.11.tar.gz#629380c90a77b964d896ed37163f5c3a34f6e6d897311f1df2a7016355c45eff" + }, version = "1.2.11" } } \ No newline at end of file diff --git a/xmake/modules/devel/git/lastcommit.lua b/xmake/modules/devel/git/lastcommit.lua new file mode 100644 index 000000000..876812f86 --- /dev/null +++ b/xmake/modules/devel/git/lastcommit.lua @@ -0,0 +1,77 @@ +--!A cross-platform build utility based on Lua +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- Copyright (C) 2015-present, TBOOX Open Source Group. +-- +-- @author ruki +-- @file lastcommit.lua +-- + +-- imports +import("core.base.option") +import("lib.detect.find_tool") +import("net.proxy") + +-- get last commit in git repository +-- +-- @param opt the options, e.g. {repodir = ..} +-- +-- @return the last commit +-- +-- @code +-- +-- import("devel.git") +-- +-- local lastcommit = git.lastcommit({repodir = ..}) +-- +-- @endcode +-- +function main(opt) + + -- find git + local git = assert(find_tool("git"), "git not found!") + + -- init arguments + local argv = {"rev-parse", "HEAD"} + + -- trace + if option.get("verbose") then + print("%s %s", git.program, os.args(argv)) + end + + -- use proxy? + local envs + local proxy_conf = proxy.config(url) + if proxy_conf then + envs = {ALL_PROXY = proxy_conf} + end + + -- enter repository directory + local oldir = nil + if opt.repodir then + oldir = os.cd(opt.repodir) + end + + -- get last commit + local lastcommit = os.iorunv(git.program, argv, {envs = envs}) + if lastcommit then + lastcommit = lastcommit:trim() + end + + -- leave repository directory + if oldir then + os.cd(oldir) + end + return lastcommit +end diff --git a/xmake/modules/private/action/require/impl/lock_packages.lua b/xmake/modules/private/action/require/impl/lock_packages.lua index 8d1e0ebdd..972c5c48b 100644 --- a/xmake/modules/private/action/require/impl/lock_packages.lua +++ b/xmake/modules/private/action/require/impl/lock_packages.lua @@ -20,16 +20,53 @@ -- imports import("core.project.project") +import("devel.git") +import("private.action.require.impl.utils.filter") +import("private.action.require.impl.utils.requirekey") + +-- get package key +function _get_packagekey(instance) + local requireinfo = instance:requireinfo() + local requirestr = requireinfo.originstr + local plat = instance:plat() + local arch = instance:arch() + local key = requirekey(requireinfo, {plat = instance:plat(), arch = instance:arch()}) + return string.format("%s#%s", requirestr, key) +end -- lock package function _lock_package(instance) - local result = {} - result.name = instance:name() - result.plat = instance:plat() - result.arch = instance:arch() - result.kind = instance:kind() - result.buildhash = instance:buildhash() - result.version = instance:version_str() + local result = {} + local repo = instance:repo() + result.name = instance:name() + result.plat = instance:plat() + result.arch = instance:arch() + result.kind = instance:kind() + result.version = instance:version_str() + result.buildhash = instance:buildhash() + result.configs = instance:configs() + result.is_built = instance:is_built() + if repo then + local lastcommit = git.lastcommit({repodir = repo:directory()}) + result.repo = repo:url() .. "#" .. lastcommit + end + for _, url in ipairs(instance:urls()) do + result.urls = result.urls or {} + local url_alias = instance:url_alias(url) + url = filter.handle(url, instance) + if git.asgiturl(url) then + local revision = instance:revision(url_alias) or instance:tag() or instance:version_str() + url = url .. "#" .. revision + else + local sourcehash = instance:sourcehash(url_alias) + url = url .. "#" .. sourcehash + end + table.insert(result.urls, url) + end + for _, dep in ipairs(instance:plaindeps()) do + result.deps = result.deps or {} + table.insert(result.deps, _get_packagekey(dep)) + end return result end @@ -37,7 +74,8 @@ end function main(packages) local results = {} for _, instance in ipairs(packages) do - results[instance:displayname()] = _lock_package(instance) + local packagekey = _get_packagekey(instance) + results[packagekey] = _lock_package(instance) end io.writefile(project.requireslock(), string.serialize(results, {orderkeys = true})) end diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua index 612911429..d94629ce8 100644 --- a/xmake/modules/private/action/require/impl/package.lua +++ b/xmake/modules/private/action/require/impl/package.lua @@ -30,6 +30,7 @@ import("core.tool.toolchain") import("core.package.package", {alias = "core_package"}) import("devel.git") import("private.action.require.impl.repository") +import("private.action.require.impl.utils.requirekey") -- get memcache function _memcache() @@ -477,26 +478,10 @@ end -- get package key function _get_packagekey(packagename, requireinfo, version) - local key = packagename .. "/" .. (version or requireinfo.version) - if requireinfo.plat then - key = key .. "/" .. requireinfo.plat - end - if requireinfo.arch then - key = key .. "/" .. requireinfo.arch - end - if requireinfo.label then - key = key .. "/" .. requireinfo.label - end - local configs = requireinfo.configs - if configs then - local configs_order = {} - for k, v in pairs(configs) do - table.insert(configs_order, k .. "=" .. tostring(v)) - end - table.sort(configs_order) - key = key .. ":" .. string.serialize(configs_order, true) - end - return key + return requirekey(requireinfo, {name = packagename, + plat = requireinfo.plat, + arch = requireinfo.arch, + version = version or requireinfo.version}) end -- inherit some builtin configs of parent package if these config values are not default value diff --git a/xmake/modules/private/action/require/impl/utils/requirekey.lua b/xmake/modules/private/action/require/impl/utils/requirekey.lua new file mode 100644 index 000000000..e39da12ba --- /dev/null +++ b/xmake/modules/private/action/require/impl/utils/requirekey.lua @@ -0,0 +1,50 @@ +--!A cross-platform build utility based on Lua +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- Copyright (C) 2015-present, TBOOX Open Source Group. +-- +-- @author ruki +-- @file requirekey.lua +-- + +-- get require key from requireinfo +function main(requireinfo, opt) + opt = opt or {} + local key = "" + if opt.name then + key = key .. "/" .. opt.name + end + if opt.plat then + key = key .. "/" .. opt.plat + end + if opt.arch then + key = key .. "/" .. opt.arch + end + if opt.version then + key = key .. "/" .. opt.version + end + if requireinfo.label then + key = key .. "/" .. requireinfo.label + end + local configs = requireinfo.configs + if configs then + local configs_order = {} + for k, v in pairs(configs) do + table.insert(configs_order, k .. "=" .. tostring(v)) + end + table.sort(configs_order) + key = key .. ":" .. string.serialize(configs_order, true) + end + return hash.uuid(key):gsub("%-", ""):lower() +end -- cgit v1.3.1 From 569ed9f2cc458d8aa9c91916e5f0dc881a64aed1 Mon Sep 17 00:00:00 2001 From: ruki Date: Tue, 17 Aug 2021 23:49:28 +0800 Subject: fix lock error --- .../package/toolchain_muslcc/xmake-requires.lock | 87 +++------------------- .../private/action/require/impl/lock_packages.lua | 17 +++-- 2 files changed, 22 insertions(+), 82 deletions(-) diff --git a/tests/projects/package/toolchain_muslcc/xmake-requires.lock b/tests/projects/package/toolchain_muslcc/xmake-requires.lock index 779c320ff..0f835d3d4 100644 --- a/tests/projects/package/toolchain_muslcc/xmake-requires.lock +++ b/tests/projects/package/toolchain_muslcc/xmake-requires.lock @@ -2,11 +2,6 @@ ["autoconf#fd74da7781d54dddb234cfb6eae7be34"] = { arch = "x86_64", buildhash = "01974c48f52d4d658f58852351743754", - configs = { - debug = false, - pic = true, - shared = false - }, deps = { "m4#fd74da7781d54dddb234cfb6eae7be34" }, @@ -14,7 +9,7 @@ kind = "binary", name = "autoconf", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", urls = { "http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz#954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969", "https://mirrors.ustc.edu.cn/gnu/autoconf/autoconf-2.69.tar.gz#954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969", @@ -25,11 +20,6 @@ ["automake#fd74da7781d54dddb234cfb6eae7be34"] = { arch = "x86_64", buildhash = "7a090c93706241f983f0d821a162e8a5", - configs = { - debug = false, - pic = true, - shared = false - }, deps = { "autoconf#fd74da7781d54dddb234cfb6eae7be34" }, @@ -37,7 +27,7 @@ kind = "binary", name = "automake", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", urls = { "http://ftp.gnu.org/gnu/automake/automake-1.16.1.tar.gz#608a97523f97db32f1f5d5615c98ca69326ced2054c9f82e65bade7fc4c9dea8", "https://mirrors.ustc.edu.cn/gnu/automake/automake-1.16.1.tar.gz#608a97523f97db32f1f5d5615c98ca69326ced2054c9f82e65bade7fc4c9dea8" @@ -47,16 +37,11 @@ ["cmake#fd74da7781d54dddb234cfb6eae7be34"] = { arch = "x86_64", buildhash = "a6d18f8c0bf347d980f8bb762583c91a", - configs = { - debug = false, - pic = true, - shared = false - }, is_built = true, kind = "binary", name = "cmake", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", urls = { "https://cmake.org/files/v3.21/cmake-3.21.0-macos-universal-Darwin-x86_64.tar.gz#c1c6f19dfc9c658a48b5aed22806595b2337bb3aedb71ab826552f74f568719f", "https://github.com/Kitware/CMake/releases/download/v3.21.0/cmake-3.21.0-macos-universal.tar.gz#c1c6f19dfc9c658a48b5aed22806595b2337bb3aedb71ab826552f74f568719f" @@ -66,18 +51,13 @@ ["gmp#fd74da7781d54dddb234cfb6eae7be34"] = { arch = "x86_64", buildhash = "7dd9c224447e46698ac73d29f58b1d73", - configs = { - debug = false, - pic = true, - shared = false - }, deps = { "autoconf#fd74da7781d54dddb234cfb6eae7be34" }, is_built = true, name = "gmp", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", urls = { "https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz#fd4829912cddd12f84181c3451cc752be224643e87fac497b69edddadc49b4f2" }, @@ -86,11 +66,6 @@ ["libisl 0.22#11f62b7b062648cebf81bd6623721f7d"] = { arch = "x86_64", buildhash = "f649e1fb365e442e8f79f372fd91483b", - configs = { - debug = false, - pic = true, - shared = true - }, deps = { "autoconf#fd74da7781d54dddb234cfb6eae7be34", "gmp#fd74da7781d54dddb234cfb6eae7be34" @@ -98,7 +73,7 @@ is_built = true, name = "libisl", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", urls = { "http://isl.gforge.inria.fr/isl-0.22.tar.xz#6c8bc56c477affecba9c59e2c9f026967ac8bad01b51bdd07916db40a517b9fa" }, @@ -107,19 +82,13 @@ ["libogg#265260a3b33e47f189d65373131d1f08"] = { arch = "arm", buildhash = "d894fc29f2fb4c45a0f48bc2c6ece273", - configs = { - debug = false, - pic = true, - shared = false, - toolchains = "@muslcc" - }, deps = { "cmake#fd74da7781d54dddb234cfb6eae7be34" }, is_built = true, name = "libogg", plat = "cross", - repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", urls = { "https://gitlab.xiph.org/xiph/ogg/-/archive/v1.3.4/ogg-v1.3.4.tar.gz#62cc64b9fd3cf57bde3a9033e94534ba34313d2bb9698029f623121a4e47bb9b", "https://gitlab.xiph.org/xiph/ogg.git#v1.3.4" @@ -129,12 +98,6 @@ ["libplist#265260a3b33e47f189d65373131d1f08"] = { arch = "arm", buildhash = "0c01b22920be4876b1de74629194eb8f", - configs = { - debug = false, - pic = true, - shared = false, - toolchains = "@muslcc" - }, deps = { "autoconf#fd74da7781d54dddb234cfb6eae7be34", "automake#fd74da7781d54dddb234cfb6eae7be34", @@ -144,7 +107,7 @@ is_built = true, name = "libplist", plat = "cross", - repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", urls = { "https://github.com/libimobiledevice/libplist/archive/2.2.0.tar.gz#7e654bdd5d8b96f03240227ed09057377f06ebad08e1c37d0cfa2abe6ba0cee2", "https://github.com/libimobiledevice/libplist.git#2.2.0" @@ -154,11 +117,6 @@ ["libtool#fd74da7781d54dddb234cfb6eae7be34"] = { arch = "x86_64", buildhash = "64584ec84a4743ecb740b598b263ffa6", - configs = { - debug = false, - pic = true, - shared = false - }, deps = { "autoconf#fd74da7781d54dddb234cfb6eae7be34" }, @@ -166,7 +124,7 @@ kind = "binary", name = "libtool", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", urls = { "http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz#e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3", "https://mirrors.ustc.edu.cn/gnu/libtool/libtool-2.4.6.tar.gz#e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3", @@ -177,16 +135,11 @@ ["m4#fd74da7781d54dddb234cfb6eae7be34"] = { arch = "x86_64", buildhash = "fd0e83e5759b442a970327ebb1c89793", - configs = { - debug = false, - pic = true, - shared = false - }, is_built = true, kind = "binary", name = "m4", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", urls = { "https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz#63aede5c6d33b6d9b13511cd0be2cac046f2e70fd0a07aa9573a04a82783af96", "https://ftpmirror.gnu.org/m4/m4-1.4.19.tar.xz#63aede5c6d33b6d9b13511cd0be2cac046f2e70fd0a07aa9573a04a82783af96" @@ -196,11 +149,6 @@ ["muslcc#fd74da7781d54dddb234cfb6eae7be34"] = { arch = "x86_64", buildhash = "11062c09ebeb484594488ad73ddbcd1f", - configs = { - debug = false, - pic = true, - shared = false - }, deps = { "libisl 0.22#11f62b7b062648cebf81bd6623721f7d" }, @@ -208,7 +156,7 @@ kind = "toolchain", name = "muslcc", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", urls = { "https://github.com/xmake-mirror/musl.cc/releases/download/20210202/arm-linux-musleabi-cross.mac.tgz#a177df3f847181c0c7f2b34b9bd7725b4c556c11a347aa0ae36e09ebf23fb480" }, @@ -217,16 +165,11 @@ ["pkg-config#fd74da7781d54dddb234cfb6eae7be34"] = { arch = "x86_64", buildhash = "84fd7f9b9f7a47709512cfc85cd9e5f7", - configs = { - debug = false, - pic = true, - shared = false - }, is_built = true, kind = "binary", name = "pkg-config", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", urls = { "https://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz#6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591", "http://fco.it.distfiles.macports.org/mirrors/macports-distfiles/pkgconfig/pkg-config-0.29.2.tar.gz#6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591" @@ -236,16 +179,10 @@ ["zlib#265260a3b33e47f189d65373131d1f08"] = { arch = "arm", buildhash = "be90a245b8bb48e6b08a1a15bdcad467", - configs = { - debug = false, - pic = true, - shared = false, - toolchains = "@muslcc" - }, is_built = true, name = "zlib", plat = "cross", - repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", + repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", urls = { "https://github.com/madler/zlib/archive/v1.2.11.tar.gz#629380c90a77b964d896ed37163f5c3a34f6e6d897311f1df2a7016355c45eff" }, diff --git a/xmake/modules/private/action/require/impl/lock_packages.lua b/xmake/modules/private/action/require/impl/lock_packages.lua index 972c5c48b..f41e3122f 100644 --- a/xmake/modules/private/action/require/impl/lock_packages.lua +++ b/xmake/modules/private/action/require/impl/lock_packages.lua @@ -44,7 +44,6 @@ function _lock_package(instance) result.kind = instance:kind() result.version = instance:version_str() result.buildhash = instance:buildhash() - result.configs = instance:configs() result.is_built = instance:is_built() if repo then local lastcommit = git.lastcommit({repodir = repo:directory()}) @@ -59,7 +58,9 @@ function _lock_package(instance) url = url .. "#" .. revision else local sourcehash = instance:sourcehash(url_alias) - url = url .. "#" .. sourcehash + if sourcehash then + url = url .. "#" .. sourcehash + end end table.insert(result.urls, url) end @@ -72,11 +73,13 @@ end -- lock all required packages function main(packages) - local results = {} - for _, instance in ipairs(packages) do - local packagekey = _get_packagekey(instance) - results[packagekey] = _lock_package(instance) + if project.policy("package.requires_lock") then + local results = {} + for _, instance in ipairs(packages) do + local packagekey = _get_packagekey(instance) + results[packagekey] = _lock_package(instance) + end + io.writefile(project.requireslock(), string.serialize(results, {orderkeys = true})) end - io.writefile(project.requireslock(), string.serialize(results, {orderkeys = true})) end -- cgit v1.3.1 From 4e14e4eca4c713eb0fd1d0f52c2f7e6f411b2f92 Mon Sep 17 00:00:00 2001 From: ruki Date: Tue, 17 Aug 2021 23:54:26 +0800 Subject: get locked requires --- .../private/action/require/impl/install_packages.lua | 4 +++- xmake/modules/private/action/require/impl/package.lua | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/xmake/modules/private/action/require/impl/install_packages.lua b/xmake/modules/private/action/require/impl/install_packages.lua index 79fb71c3f..75ca4414e 100644 --- a/xmake/modules/private/action/require/impl/install_packages.lua +++ b/xmake/modules/private/action/require/impl/install_packages.lua @@ -603,7 +603,9 @@ function main(requires, opt) register_packages(packages) -- lock packages - lock_packages(packages) + if #packages_install > 0 then + lock_packages(packages) + end return packages end diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua index d94629ce8..ed0429984 100644 --- a/xmake/modules/private/action/require/impl/package.lua +++ b/xmake/modules/private/action/require/impl/package.lua @@ -201,6 +201,25 @@ function _load_package_from_repository(packagename, reponame) end end +-- has locked requires? +function _has_locked_requires() + return project.policy("package.requires_lock") and os.isfile(project.requireslock()) +end + +-- get locked requires +function _get_locked_requires(requirekey) + local requireslock = _memcache():get("requireslock") + if requireslock == nil then + if _has_locked_requires() then + requireslock = io.load(project.requireslock()) + end + _memcache():set("requireslock", requireslock or false) + end + if requireslock then + return requireslock[requirekey] + end +end + -- sort package deps -- -- e.g. -- cgit v1.3.1 From 7f8f4ee2e1640635792ab8a57f3b53f04422205c Mon Sep 17 00:00:00 2001 From: ruki Date: Tue, 17 Aug 2021 23:58:31 +0800 Subject: add require key --- .../private/action/require/impl/lock_packages.lua | 12 +++++------ .../private/action/require/impl/package.lua | 23 +++++++++++++++++----- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/xmake/modules/private/action/require/impl/lock_packages.lua b/xmake/modules/private/action/require/impl/lock_packages.lua index f41e3122f..e624f8d1a 100644 --- a/xmake/modules/private/action/require/impl/lock_packages.lua +++ b/xmake/modules/private/action/require/impl/lock_packages.lua @@ -24,12 +24,10 @@ import("devel.git") import("private.action.require.impl.utils.filter") import("private.action.require.impl.utils.requirekey") --- get package key -function _get_packagekey(instance) +-- get locked package key +function _get_packagelock_key(instance) local requireinfo = instance:requireinfo() local requirestr = requireinfo.originstr - local plat = instance:plat() - local arch = instance:arch() local key = requirekey(requireinfo, {plat = instance:plat(), arch = instance:arch()}) return string.format("%s#%s", requirestr, key) end @@ -66,7 +64,7 @@ function _lock_package(instance) end for _, dep in ipairs(instance:plaindeps()) do result.deps = result.deps or {} - table.insert(result.deps, _get_packagekey(dep)) + table.insert(result.deps, _get_packagelock_key(dep)) end return result end @@ -76,8 +74,8 @@ function main(packages) if project.policy("package.requires_lock") then local results = {} for _, instance in ipairs(packages) do - local packagekey = _get_packagekey(instance) - results[packagekey] = _lock_package(instance) + local packagelock_key = _get_packagelock_key(instance) + results[packagelock_key] = _lock_package(instance) end io.writefile(project.requireslock(), string.serialize(results, {orderkeys = true})) end diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua index ed0429984..554033496 100644 --- a/xmake/modules/private/action/require/impl/package.lua +++ b/xmake/modules/private/action/require/impl/package.lua @@ -30,7 +30,7 @@ import("core.tool.toolchain") import("core.package.package", {alias = "core_package"}) import("devel.git") import("private.action.require.impl.repository") -import("private.action.require.impl.utils.requirekey") +import("private.action.require.impl.utils.requirekey", {alias = "_get_requirekey"}) -- get memcache function _memcache() @@ -497,10 +497,17 @@ end -- get package key function _get_packagekey(packagename, requireinfo, version) - return requirekey(requireinfo, {name = packagename, - plat = requireinfo.plat, - arch = requireinfo.arch, - version = version or requireinfo.version}) + return _get_requirekey(requireinfo, {name = packagename, + plat = requireinfo.plat, + arch = requireinfo.arch, + version = version or requireinfo.version}) +end + +-- get locked package key +function _get_packagelock_key(requireinfo) + local requirestr = requireinfo.originstr + local key = _get_requirekey(requireinfo, {plat = requireinfo.plat, arch = requireinfo.arch}) + return string.format("%s#%s", requirestr, key) end -- inherit some builtin configs of parent package if these config values are not default value @@ -655,6 +662,12 @@ function _load_package(packagename, requireinfo, opt) -- finish requireinfo _finish_requireinfo(requireinfo, package) + -- get requirekey + if _has_locked_requires() then + local requirekey = _get_packagelock_key(requireinfo) + print("requirekey", requirekey) + end + -- select package version local version, source = _select_package_version(package, requireinfo) if version then -- cgit v1.3.1 From 139d4b590a4ad763f0c9e43f59e8281383e4212b Mon Sep 17 00:00:00 2001 From: ruki Date: Wed, 18 Aug 2021 00:46:14 +0800 Subject: improve requirekey --- xmake/core/package/package.lua | 10 +++++----- xmake/modules/private/action/require/impl/lock_packages.lua | 5 ++++- xmake/modules/private/action/require/impl/package.lua | 8 ++++++-- xmake/modules/private/action/require/impl/utils/requirekey.lua | 9 ++++++++- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua index fefa4eb17..5724da656 100644 --- a/xmake/core/package/package.lua +++ b/xmake/core/package/package.lua @@ -115,10 +115,10 @@ function _instance:plat() return os.subhost() end local requireinfo = self:requireinfo() - if not plat and requireinfo and requireinfo.plat then + if requireinfo and requireinfo.plat then return requireinfo.plat end - return self:get("plat") or package._target_plat() + return package._target_plat() end -- get the architecture of package @@ -145,7 +145,7 @@ function _instance:targetarch() if requireinfo and requireinfo.arch then return requireinfo.arch end - return self:get("arch") or package._target_arch() + return package._target_arch() end -- get the build mode @@ -1703,8 +1703,8 @@ function package.apis() -- package.set_xxx "package.set_urls" , "package.set_kind" - , "package.set_plat" - , "package.set_arch" + , "package.set_plat" -- deprecated + , "package.set_arch" -- deprecated , "package.set_license" , "package.set_homepage" , "package.set_description" diff --git a/xmake/modules/private/action/require/impl/lock_packages.lua b/xmake/modules/private/action/require/impl/lock_packages.lua index e624f8d1a..7640e7562 100644 --- a/xmake/modules/private/action/require/impl/lock_packages.lua +++ b/xmake/modules/private/action/require/impl/lock_packages.lua @@ -20,15 +20,18 @@ -- imports import("core.project.project") +import("core.project.config") import("devel.git") import("private.action.require.impl.utils.filter") import("private.action.require.impl.utils.requirekey") -- get locked package key function _get_packagelock_key(instance) + local plat = config.plat() or os.subhost() + local arch = config.arch() or os.subarch() local requireinfo = instance:requireinfo() local requirestr = requireinfo.originstr - local key = requirekey(requireinfo, {plat = instance:plat(), arch = instance:arch()}) + local key = requirekey(requireinfo, {hash = true, plat = plat, arch = arch}) return string.format("%s#%s", requirestr, key) end diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua index 554033496..5dc0ff451 100644 --- a/xmake/modules/private/action/require/impl/package.lua +++ b/xmake/modules/private/action/require/impl/package.lua @@ -26,6 +26,7 @@ import("core.base.hashset") import("private.utils.progress") import("core.cache.memcache") import("core.project.project") +import("core.project.config") import("core.tool.toolchain") import("core.package.package", {alias = "core_package"}) import("devel.git") @@ -505,8 +506,10 @@ end -- get locked package key function _get_packagelock_key(requireinfo) + local plat = config.plat() or os.subhost() + local arch = config.arch() or os.subarch() local requirestr = requireinfo.originstr - local key = _get_requirekey(requireinfo, {plat = requireinfo.plat, arch = requireinfo.arch}) + local key = _get_requirekey(requireinfo, {hash = true, plat = plat, arch = arch}) return string.format("%s#%s", requirestr, key) end @@ -662,11 +665,12 @@ function _load_package(packagename, requireinfo, opt) -- finish requireinfo _finish_requireinfo(requireinfo, package) + --[[ -- get requirekey if _has_locked_requires() then local requirekey = _get_packagelock_key(requireinfo) print("requirekey", requirekey) - end + end]] -- select package version local version, source = _select_package_version(package, requireinfo) diff --git a/xmake/modules/private/action/require/impl/utils/requirekey.lua b/xmake/modules/private/action/require/impl/utils/requirekey.lua index e39da12ba..b07e4d50d 100644 --- a/xmake/modules/private/action/require/impl/utils/requirekey.lua +++ b/xmake/modules/private/action/require/impl/utils/requirekey.lua @@ -37,6 +37,9 @@ function main(requireinfo, opt) if requireinfo.label then key = key .. "/" .. requireinfo.label end + if key:startswith("/") then + key = key:sub(2) + end local configs = requireinfo.configs if configs then local configs_order = {} @@ -46,5 +49,9 @@ function main(requireinfo, opt) table.sort(configs_order) key = key .. ":" .. string.serialize(configs_order, true) end - return hash.uuid(key):gsub("%-", ""):lower() + if opt.hash then + return hash.uuid(key):gsub("%-", ""):lower() + else + return key + end end -- cgit v1.3.1 From 00107046b0c8eb07185b24783b2d32114f9ed760 Mon Sep 17 00:00:00 2001 From: ruki Date: Wed, 18 Aug 2021 00:47:49 +0800 Subject: add require --upgrade --- xmake/actions/require/main.lua | 2 +- xmake/actions/require/xmake.lua | 1 + xmake/modules/private/action/require/impl/package.lua | 4 +++- xmake/modules/private/action/require/install.lua | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/xmake/actions/require/main.lua b/xmake/actions/require/main.lua index eb0e2014e..41b9a7eac 100644 --- a/xmake/actions/require/main.lua +++ b/xmake/actions/require/main.lua @@ -118,7 +118,7 @@ function main() scan(option.get("requires")) - -- install and update all outdated package dependencies by default if no arguments + -- install and upgrade all outdated package dependencies by default if no arguments else install(option.get("requires")) end diff --git a/xmake/actions/require/xmake.lua b/xmake/actions/require/xmake.lua index a9d4db32c..f33188f77 100644 --- a/xmake/actions/require/xmake.lua +++ b/xmake/actions/require/xmake.lua @@ -72,6 +72,7 @@ task("require") , {'s', "search", "k", nil, "Search for the given packages from repositories.", "e.g.", " $ xmake require --search tbox" } + , {nil, "upgrade", "k", nil, "Upgrade the installed packages." } , {nil, "uninstall", "k", nil, "Uninstall the installed packages.", "e.g.", " $ xmake require --uninstall", diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua index 5dc0ff451..53e978f9a 100644 --- a/xmake/modules/private/action/require/impl/package.lua +++ b/xmake/modules/private/action/require/impl/package.lua @@ -204,7 +204,9 @@ end -- has locked requires? function _has_locked_requires() - return project.policy("package.requires_lock") and os.isfile(project.requireslock()) + if not option.get("upgrade") then + return project.policy("package.requires_lock") and os.isfile(project.requireslock()) + end end -- get locked requires diff --git a/xmake/modules/private/action/require/install.lua b/xmake/modules/private/action/require/install.lua index 821991dee..e27e627cb 100644 --- a/xmake/modules/private/action/require/install.lua +++ b/xmake/modules/private/action/require/install.lua @@ -76,7 +76,7 @@ function main(requires_raw) -- -- attempt to install git from the builtin-packages first if git not found -- - if git and not repository.pulled() then + if git and (not repository.pulled() or option.get("upgrade")) then task.run("repo", {update = true}) end -- cgit v1.3.1 From 723dca1ac294cccd66f5b3dd0661299fd197f476 Mon Sep 17 00:00:00 2001 From: ruki Date: Wed, 18 Aug 2021 00:53:03 +0800 Subject: improve version source --- core/src/xmake/semver/select.c | 6 +- .../package/toolchain_muslcc/xmake-requires.lock | 86 +++++++++++----------- xmake/core/package/package.lua | 39 +++++----- .../sandbox/modules/import/core/base/semver.lua | 2 +- .../private/action/require/impl/package.lua | 12 +-- 5 files changed, 72 insertions(+), 73 deletions(-) diff --git a/core/src/xmake/semver/select.c b/core/src/xmake/semver/select.c index 221baf46d..6b2a13031 100644 --- a/core/src/xmake/semver/select.c +++ b/core/src/xmake/semver/select.c @@ -68,7 +68,7 @@ static tb_bool_t xm_semver_select_from_versions_tags1(lua_State* lua, tb_int_t f lua_pushstring(lua, top.raw); lua_setfield(lua, -2, "version"); - lua_pushstring(lua, fromidx == 2? "versions" : "tags"); + lua_pushstring(lua, fromidx == 2? "version" : "tag"); lua_setfield(lua, -2, "source"); // exit the popped semver @@ -92,7 +92,7 @@ static tb_bool_t xm_semver_select_from_versions_tags2(lua_State* lua, tb_int_t f lua_createtable(lua, 0, 2); lua_pushstring(lua, source_str); lua_setfield(lua, -2, "version"); - lua_pushstring(lua, fromidx == 2? "versions" : "tags"); + lua_pushstring(lua, fromidx == 2? "version" : "tag"); lua_setfield(lua, -2, "source"); return tb_true; } @@ -162,7 +162,7 @@ static tb_bool_t xm_semver_select_latest_from_versions_tags(lua_State* lua, tb_i lua_pushstring(lua, top.raw); lua_setfield(lua, -2, "version"); - lua_pushstring(lua, fromidx == 2? "versions" : "tags"); + lua_pushstring(lua, fromidx == 2? "version" : "tag"); lua_setfield(lua, -2, "source"); // exit the popped semver diff --git a/tests/projects/package/toolchain_muslcc/xmake-requires.lock b/tests/projects/package/toolchain_muslcc/xmake-requires.lock index 0f835d3d4..5ae48eeb9 100644 --- a/tests/projects/package/toolchain_muslcc/xmake-requires.lock +++ b/tests/projects/package/toolchain_muslcc/xmake-requires.lock @@ -1,188 +1,188 @@ { - ["autoconf#fd74da7781d54dddb234cfb6eae7be34"] = { + ["autoconf#f9faf630133045aab06d08087de4bc33"] = { arch = "x86_64", buildhash = "01974c48f52d4d658f58852351743754", deps = { - "m4#fd74da7781d54dddb234cfb6eae7be34" + "m4#f9faf630133045aab06d08087de4bc33" }, is_built = true, kind = "binary", name = "autoconf", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", + repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", urls = { - "http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz#954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969", "https://mirrors.ustc.edu.cn/gnu/autoconf/autoconf-2.69.tar.gz#954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969", - "git://git.sv.gnu.org/autoconf#2.69" + "git://git.sv.gnu.org/autoconf#2.69", + "http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz#954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969" }, version = "2.69" }, - ["automake#fd74da7781d54dddb234cfb6eae7be34"] = { + ["automake#f9faf630133045aab06d08087de4bc33"] = { arch = "x86_64", buildhash = "7a090c93706241f983f0d821a162e8a5", deps = { - "autoconf#fd74da7781d54dddb234cfb6eae7be34" + "autoconf#f9faf630133045aab06d08087de4bc33" }, is_built = true, kind = "binary", name = "automake", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", + repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", urls = { - "http://ftp.gnu.org/gnu/automake/automake-1.16.1.tar.gz#608a97523f97db32f1f5d5615c98ca69326ced2054c9f82e65bade7fc4c9dea8", - "https://mirrors.ustc.edu.cn/gnu/automake/automake-1.16.1.tar.gz#608a97523f97db32f1f5d5615c98ca69326ced2054c9f82e65bade7fc4c9dea8" + "https://mirrors.ustc.edu.cn/gnu/automake/automake-1.16.1.tar.gz#608a97523f97db32f1f5d5615c98ca69326ced2054c9f82e65bade7fc4c9dea8", + "http://ftp.gnu.org/gnu/automake/automake-1.16.1.tar.gz#608a97523f97db32f1f5d5615c98ca69326ced2054c9f82e65bade7fc4c9dea8" }, version = "1.16.1" }, - ["cmake#fd74da7781d54dddb234cfb6eae7be34"] = { + ["cmake#f9faf630133045aab06d08087de4bc33"] = { arch = "x86_64", buildhash = "a6d18f8c0bf347d980f8bb762583c91a", is_built = true, kind = "binary", name = "cmake", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", + repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", urls = { - "https://cmake.org/files/v3.21/cmake-3.21.0-macos-universal-Darwin-x86_64.tar.gz#c1c6f19dfc9c658a48b5aed22806595b2337bb3aedb71ab826552f74f568719f", - "https://github.com/Kitware/CMake/releases/download/v3.21.0/cmake-3.21.0-macos-universal.tar.gz#c1c6f19dfc9c658a48b5aed22806595b2337bb3aedb71ab826552f74f568719f" + "https://github.com/Kitware/CMake/releases/download/v3.21.0/cmake-3.21.0-macos-universal.tar.gz#c1c6f19dfc9c658a48b5aed22806595b2337bb3aedb71ab826552f74f568719f", + "https://cmake.org/files/v3.21/cmake-3.21.0-macos-universal-Darwin-x86_64.tar.gz#c1c6f19dfc9c658a48b5aed22806595b2337bb3aedb71ab826552f74f568719f" }, version = "3.21.0" }, - ["gmp#fd74da7781d54dddb234cfb6eae7be34"] = { + ["gmp#f9faf630133045aab06d08087de4bc33"] = { arch = "x86_64", buildhash = "7dd9c224447e46698ac73d29f58b1d73", deps = { - "autoconf#fd74da7781d54dddb234cfb6eae7be34" + "autoconf#f9faf630133045aab06d08087de4bc33" }, is_built = true, name = "gmp", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", + repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", urls = { "https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz#fd4829912cddd12f84181c3451cc752be224643e87fac497b69edddadc49b4f2" }, version = "6.2.1" }, - ["libisl 0.22#11f62b7b062648cebf81bd6623721f7d"] = { + ["libisl 0.22#3dd996fa365042e39791030c4e1cad52"] = { arch = "x86_64", buildhash = "f649e1fb365e442e8f79f372fd91483b", deps = { - "autoconf#fd74da7781d54dddb234cfb6eae7be34", - "gmp#fd74da7781d54dddb234cfb6eae7be34" + "autoconf#f9faf630133045aab06d08087de4bc33", + "gmp#f9faf630133045aab06d08087de4bc33" }, is_built = true, name = "libisl", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", + repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", urls = { "http://isl.gforge.inria.fr/isl-0.22.tar.xz#6c8bc56c477affecba9c59e2c9f026967ac8bad01b51bdd07916db40a517b9fa" }, version = "0.22" }, - ["libogg#265260a3b33e47f189d65373131d1f08"] = { + ["libogg#30fe400ff5234914998bd7d8c177621c"] = { arch = "arm", buildhash = "d894fc29f2fb4c45a0f48bc2c6ece273", deps = { - "cmake#fd74da7781d54dddb234cfb6eae7be34" + "cmake#f9faf630133045aab06d08087de4bc33" }, is_built = true, name = "libogg", plat = "cross", - repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", + repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", urls = { "https://gitlab.xiph.org/xiph/ogg/-/archive/v1.3.4/ogg-v1.3.4.tar.gz#62cc64b9fd3cf57bde3a9033e94534ba34313d2bb9698029f623121a4e47bb9b", "https://gitlab.xiph.org/xiph/ogg.git#v1.3.4" }, version = "v1.3.4" }, - ["libplist#265260a3b33e47f189d65373131d1f08"] = { + ["libplist#30fe400ff5234914998bd7d8c177621c"] = { arch = "arm", buildhash = "0c01b22920be4876b1de74629194eb8f", deps = { - "autoconf#fd74da7781d54dddb234cfb6eae7be34", - "automake#fd74da7781d54dddb234cfb6eae7be34", - "libtool#fd74da7781d54dddb234cfb6eae7be34", - "pkg-config#fd74da7781d54dddb234cfb6eae7be34" + "autoconf#f9faf630133045aab06d08087de4bc33", + "automake#f9faf630133045aab06d08087de4bc33", + "libtool#f9faf630133045aab06d08087de4bc33", + "pkg-config#f9faf630133045aab06d08087de4bc33" }, is_built = true, name = "libplist", plat = "cross", - repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", + repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", urls = { "https://github.com/libimobiledevice/libplist/archive/2.2.0.tar.gz#7e654bdd5d8b96f03240227ed09057377f06ebad08e1c37d0cfa2abe6ba0cee2", "https://github.com/libimobiledevice/libplist.git#2.2.0" }, version = "2.2.0" }, - ["libtool#fd74da7781d54dddb234cfb6eae7be34"] = { + ["libtool#f9faf630133045aab06d08087de4bc33"] = { arch = "x86_64", buildhash = "64584ec84a4743ecb740b598b263ffa6", deps = { - "autoconf#fd74da7781d54dddb234cfb6eae7be34" + "autoconf#f9faf630133045aab06d08087de4bc33" }, is_built = true, kind = "binary", name = "libtool", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", + repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", urls = { - "http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz#e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3", "https://mirrors.ustc.edu.cn/gnu/libtool/libtool-2.4.6.tar.gz#e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3", + "http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz#e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3", "git://git.savannah.gnu.org/libtool.git#2.4.6" }, version = "2.4.6" }, - ["m4#fd74da7781d54dddb234cfb6eae7be34"] = { + ["m4#f9faf630133045aab06d08087de4bc33"] = { arch = "x86_64", buildhash = "fd0e83e5759b442a970327ebb1c89793", is_built = true, kind = "binary", name = "m4", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", + repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", urls = { "https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz#63aede5c6d33b6d9b13511cd0be2cac046f2e70fd0a07aa9573a04a82783af96", "https://ftpmirror.gnu.org/m4/m4-1.4.19.tar.xz#63aede5c6d33b6d9b13511cd0be2cac046f2e70fd0a07aa9573a04a82783af96" }, version = "1.4.19" }, - ["muslcc#fd74da7781d54dddb234cfb6eae7be34"] = { + ["muslcc#f9faf630133045aab06d08087de4bc33"] = { arch = "x86_64", buildhash = "11062c09ebeb484594488ad73ddbcd1f", deps = { - "libisl 0.22#11f62b7b062648cebf81bd6623721f7d" + "libisl 0.22#3dd996fa365042e39791030c4e1cad52" }, is_built = true, kind = "toolchain", name = "muslcc", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", + repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", urls = { "https://github.com/xmake-mirror/musl.cc/releases/download/20210202/arm-linux-musleabi-cross.mac.tgz#a177df3f847181c0c7f2b34b9bd7725b4c556c11a347aa0ae36e09ebf23fb480" }, version = "20210202" }, - ["pkg-config#fd74da7781d54dddb234cfb6eae7be34"] = { + ["pkg-config#f9faf630133045aab06d08087de4bc33"] = { arch = "x86_64", buildhash = "84fd7f9b9f7a47709512cfc85cd9e5f7", is_built = true, kind = "binary", name = "pkg-config", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", + repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", urls = { "https://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz#6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591", "http://fco.it.distfiles.macports.org/mirrors/macports-distfiles/pkgconfig/pkg-config-0.29.2.tar.gz#6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591" }, version = "0.29.2" }, - ["zlib#265260a3b33e47f189d65373131d1f08"] = { + ["zlib#30fe400ff5234914998bd7d8c177621c"] = { arch = "arm", buildhash = "be90a245b8bb48e6b08a1a15bdcad467", is_built = true, name = "zlib", plat = "cross", - repo = "https://gitee.com/tboox/xmake-repo.git#d5113078b850efb476f1730b8cd31d1f47691f00", + repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", urls = { "https://github.com/madler/zlib/archive/v1.2.11.tar.gz#629380c90a77b964d896ed37163f5c3a34f6e6d897311f1df2a7016355c45eff" }, diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua index 5724da656..f7b2b7884 100644 --- a/xmake/core/package/package.lua +++ b/xmake/core/package/package.lua @@ -855,22 +855,7 @@ function _instance:version_str() return self._VERSION_STR end --- get branch version -function _instance:branch() - return self._BRANCH -end - --- get tag version -function _instance:tag() - return self._TAG -end - --- is git ref? -function _instance:gitref() - return self:branch() or self:tag() -end - --- set the version, source: branches, tags, versions +-- set the version, source: branch, tag, version function _instance:version_set(version, source) -- save the semver version @@ -880,17 +865,31 @@ function _instance:version_set(version, source) end -- save branch and tag - if source == "branches" then + if source == "branch" then self._BRANCH = version - elseif source == "tags" then + elseif source == "tag" then self._TAG = version end - -- save source and version string - self._SOURCE = source + -- save version string self._VERSION_STR = version end +-- get branch version +function _instance:branch() + return self._BRANCH +end + +-- get tag version +function _instance:tag() + return self._TAG +end + +-- is git ref? +function _instance:gitref() + return self:branch() or self:tag() +end + -- get the require info function _instance:requireinfo() return self._REQUIREINFO diff --git a/xmake/core/sandbox/modules/import/core/base/semver.lua b/xmake/core/sandbox/modules/import/core/base/semver.lua index edaf61470..eadcfb702 100644 --- a/xmake/core/sandbox/modules/import/core/base/semver.lua +++ b/xmake/core/sandbox/modules/import/core/base/semver.lua @@ -80,7 +80,7 @@ end -- local version, source = semver.select(">=1.5.0 <1.6", {"1.5.0", "1.5.1"}, {"v1.5.0", ..}, {"master", "dev"}) -- -- @version the selected version number --- @source the version source, e.g. versions, tags, branchs +-- @source the version source, e.g. version, tag, branch -- function sandbox_core_base_semver.select(range, versions, tags, branches) local verinfo, errors = semver.select(range, table.wrap(versions), table.wrap(tags), table.wrap(branches)) diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua index 53e978f9a..fb84dea5f 100644 --- a/xmake/modules/private/action/require/impl/package.lua +++ b/xmake/modules/private/action/require/impl/package.lua @@ -293,12 +293,12 @@ function _select_package_version(package, requireinfo) -- @see https://github.com/xmake-io/xmake/issues/930 -- https://github.com/xmake-io/xmake/issues/1009 version = require_version - source = "versions" + source = "version" elseif #package:versions() > 0 then -- select version? version, source = try { function () return semver.select(require_version, package:versions()) end } end if not version and has_giturl and not require_version:find('.', 1, true) then -- select branch? - version, source = require_version ~= "latest" and require_version or "master", "branches" + version, source = require_version ~= "latest" and require_version or "master", "branch" end if not version then raise("package(%s): version(%s) not found!", package:name(), require_version) @@ -667,12 +667,12 @@ function _load_package(packagename, requireinfo, opt) -- finish requireinfo _finish_requireinfo(requireinfo, package) - --[[ - -- get requirekey + -- get locked requireinfo + local locked_requireinfo if _has_locked_requires() then local requirekey = _get_packagelock_key(requireinfo) - print("requirekey", requirekey) - end]] + locked_requireinfo = _get_locked_requires(requirekey) + end -- select package version local version, source = _select_package_version(package, requireinfo) -- cgit v1.3.1 From cfcd21ce456c3597573dd2f2324b236d4a84fcdd Mon Sep 17 00:00:00 2001 From: ruki Date: Wed, 18 Aug 2021 00:54:38 +0800 Subject: lock version --- .../package/toolchain_muslcc/xmake-requires.lock | 8 ++++---- .../private/action/require/impl/lock_packages.lua | 2 ++ xmake/modules/private/action/require/impl/package.lua | 16 ++++++++++++++-- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/tests/projects/package/toolchain_muslcc/xmake-requires.lock b/tests/projects/package/toolchain_muslcc/xmake-requires.lock index 5ae48eeb9..5aa0c0e2e 100644 --- a/tests/projects/package/toolchain_muslcc/xmake-requires.lock +++ b/tests/projects/package/toolchain_muslcc/xmake-requires.lock @@ -12,8 +12,8 @@ repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", urls = { "https://mirrors.ustc.edu.cn/gnu/autoconf/autoconf-2.69.tar.gz#954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969", - "git://git.sv.gnu.org/autoconf#2.69", - "http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz#954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969" + "http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz#954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969", + "git://git.sv.gnu.org/autoconf#2.69" }, version = "2.69" }, @@ -127,8 +127,8 @@ repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", urls = { "https://mirrors.ustc.edu.cn/gnu/libtool/libtool-2.4.6.tar.gz#e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3", - "http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz#e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3", - "git://git.savannah.gnu.org/libtool.git#2.4.6" + "git://git.savannah.gnu.org/libtool.git#2.4.6", + "http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz#e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3" }, version = "2.4.6" }, diff --git a/xmake/modules/private/action/require/impl/lock_packages.lua b/xmake/modules/private/action/require/impl/lock_packages.lua index 7640e7562..e11916db6 100644 --- a/xmake/modules/private/action/require/impl/lock_packages.lua +++ b/xmake/modules/private/action/require/impl/lock_packages.lua @@ -46,6 +46,8 @@ function _lock_package(instance) result.version = instance:version_str() result.buildhash = instance:buildhash() result.is_built = instance:is_built() + result.branch = instance:branch() + result.tag = instance:tag() if repo then local lastcommit = git.lastcommit({repodir = repo:directory()}) result.repo = repo:url() .. "#" .. lastcommit diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua index fb84dea5f..627d5e70e 100644 --- a/xmake/modules/private/action/require/impl/package.lua +++ b/xmake/modules/private/action/require/impl/package.lua @@ -269,7 +269,19 @@ function _add_package_configurations(package) end -- select package version -function _select_package_version(package, requireinfo) +function _select_package_version(package, requireinfo, locked_requireinfo) + + -- get it from the locked requireinfo + if locked_requireinfo then + local version = locked_requireinfo.version + local source = "version" + if locked_requireinfo.branch then + source = "branch" + elseif locked_requireinfo.tag then + source = "tag" + end + return version, source + end -- exists urls? otherwise be phony package (only as package group) if #package:urls() > 0 then @@ -675,7 +687,7 @@ function _load_package(packagename, requireinfo, opt) end -- select package version - local version, source = _select_package_version(package, requireinfo) + local version, source = _select_package_version(package, requireinfo, locked_requireinfo) if version then package:version_set(version, source) end -- cgit v1.3.1 From 685beaedb57bed04b1fe8ec2e68348ebb8ceaa37 Mon Sep 17 00:00:00 2001 From: ruki Date: Wed, 18 Aug 2021 00:56:30 +0800 Subject: fix tests --- tests/modules/semver/test.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/modules/semver/test.lua b/tests/modules/semver/test.lua index f39f3acde..5141f099c 100755 --- a/tests/modules/semver/test.lua +++ b/tests/modules/semver/test.lua @@ -10,21 +10,21 @@ end -- test select version function test_semver_select(t) - _check_semver_select(t, {"1.5.1", "versions"} + _check_semver_select(t, {"1.5.1", "version"} , ">=1.5.0 <1.6.0" , {"1.4.0", "1.5.0", "1.5.1"}) - _check_semver_select(t, {"1.5.1", "versions"} + _check_semver_select(t, {"1.5.1", "version"} , "^1.5.0" ,{"1.4.0", "1.5.0", "1.5.1"}) - _check_semver_select(t, {"master", "branches"} + _check_semver_select(t, {"master", "branch"} , "master" , {"1.4.0", "1.5.0", "1.5.1"} , {"v1.2.0", "v1.6.0"} , {"master", "dev"}) - _check_semver_select(t, {"1.5.1", "versions"} + _check_semver_select(t, {"1.5.1", "version"} , "latest" , {"1.4.0", "1.5.0", "1.5.1"}) end -- cgit v1.3.1 From 97df909b7731b4fa4a6bb399e6fffba4e76ce09f Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 19 Aug 2021 00:36:32 +0800 Subject: fix semver.select --- core/src/xmake/semver/select.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/xmake/semver/select.c b/core/src/xmake/semver/select.c index 6b2a13031..395dc6f37 100644 --- a/core/src/xmake/semver/select.c +++ b/core/src/xmake/semver/select.c @@ -119,7 +119,7 @@ static tb_bool_t xm_semver_select_from_branches(lua_State* lua, tb_int_t fromidx lua_pushlstring(lua, source_str, source_len); lua_setfield(lua, -2, "version"); - lua_pushstring(lua, "branches"); + lua_pushstring(lua, "branch"); lua_setfield(lua, -2, "source"); // ok -- cgit v1.3.1 From c3b21f59947f34aa38881f621d21fd76fef5f008 Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 19 Aug 2021 00:39:07 +0800 Subject: check buildhash --- xmake/modules/private/action/require/impl/lock_packages.lua | 2 -- xmake/modules/private/action/require/impl/package.lua | 5 +++++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/xmake/modules/private/action/require/impl/lock_packages.lua b/xmake/modules/private/action/require/impl/lock_packages.lua index e11916db6..a5e971b60 100644 --- a/xmake/modules/private/action/require/impl/lock_packages.lua +++ b/xmake/modules/private/action/require/impl/lock_packages.lua @@ -42,10 +42,8 @@ function _lock_package(instance) result.name = instance:name() result.plat = instance:plat() result.arch = instance:arch() - result.kind = instance:kind() result.version = instance:version_str() result.buildhash = instance:buildhash() - result.is_built = instance:is_built() result.branch = instance:branch() result.tag = instance:tag() if repo then diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua index 627d5e70e..148758c59 100644 --- a/xmake/modules/private/action/require/impl/package.lua +++ b/xmake/modules/private/action/require/impl/package.lua @@ -747,6 +747,11 @@ function _load_package(packagename, requireinfo, opt) on_load(package) end + -- check build hash + if locked_requireinfo and locked_requireinfo.buildhash ~= package:buildhash() then + wprint("package(%s): buildhash is not matched in xmake-requires.lock", package:displayname(), locked_requireinfo.buildhash, package:buildhash()) + end + -- load environments from the manifest to enable the environments of on_install() package:envs_load() -- cgit v1.3.1 From e830cca00c1d3a2761eb725003823d8660acafc8 Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 19 Aug 2021 00:43:52 +0800 Subject: check lockrequire version --- .../package/toolchain_muslcc/xmake-requires.lock | 24 +------- xmake/core/project/project.lua | 5 ++ .../modules/import/core/project/project.lua | 65 +++++++++++----------- .../private/action/require/impl/lock_packages.lua | 1 + .../private/action/require/impl/package.lua | 3 + 5 files changed, 45 insertions(+), 53 deletions(-) diff --git a/tests/projects/package/toolchain_muslcc/xmake-requires.lock b/tests/projects/package/toolchain_muslcc/xmake-requires.lock index 5aa0c0e2e..0c232a5a7 100644 --- a/tests/projects/package/toolchain_muslcc/xmake-requires.lock +++ b/tests/projects/package/toolchain_muslcc/xmake-requires.lock @@ -5,15 +5,13 @@ deps = { "m4#f9faf630133045aab06d08087de4bc33" }, - is_built = true, - kind = "binary", name = "autoconf", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", urls = { "https://mirrors.ustc.edu.cn/gnu/autoconf/autoconf-2.69.tar.gz#954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969", - "http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz#954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969", - "git://git.sv.gnu.org/autoconf#2.69" + "git://git.sv.gnu.org/autoconf#2.69", + "http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz#954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969" }, version = "2.69" }, @@ -23,8 +21,6 @@ deps = { "autoconf#f9faf630133045aab06d08087de4bc33" }, - is_built = true, - kind = "binary", name = "automake", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", @@ -37,8 +33,6 @@ ["cmake#f9faf630133045aab06d08087de4bc33"] = { arch = "x86_64", buildhash = "a6d18f8c0bf347d980f8bb762583c91a", - is_built = true, - kind = "binary", name = "cmake", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", @@ -54,7 +48,6 @@ deps = { "autoconf#f9faf630133045aab06d08087de4bc33" }, - is_built = true, name = "gmp", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", @@ -70,7 +63,6 @@ "autoconf#f9faf630133045aab06d08087de4bc33", "gmp#f9faf630133045aab06d08087de4bc33" }, - is_built = true, name = "libisl", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", @@ -85,7 +77,6 @@ deps = { "cmake#f9faf630133045aab06d08087de4bc33" }, - is_built = true, name = "libogg", plat = "cross", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", @@ -104,7 +95,6 @@ "libtool#f9faf630133045aab06d08087de4bc33", "pkg-config#f9faf630133045aab06d08087de4bc33" }, - is_built = true, name = "libplist", plat = "cross", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", @@ -120,8 +110,6 @@ deps = { "autoconf#f9faf630133045aab06d08087de4bc33" }, - is_built = true, - kind = "binary", name = "libtool", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", @@ -135,8 +123,6 @@ ["m4#f9faf630133045aab06d08087de4bc33"] = { arch = "x86_64", buildhash = "fd0e83e5759b442a970327ebb1c89793", - is_built = true, - kind = "binary", name = "m4", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", @@ -152,8 +138,6 @@ deps = { "libisl 0.22#3dd996fa365042e39791030c4e1cad52" }, - is_built = true, - kind = "toolchain", name = "muslcc", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", @@ -165,8 +149,6 @@ ["pkg-config#f9faf630133045aab06d08087de4bc33"] = { arch = "x86_64", buildhash = "84fd7f9b9f7a47709512cfc85cd9e5f7", - is_built = true, - kind = "binary", name = "pkg-config", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", @@ -176,10 +158,10 @@ }, version = "0.29.2" }, + version = "1.0", ["zlib#30fe400ff5234914998bd7d8c177621c"] = { arch = "arm", buildhash = "be90a245b8bb48e6b08a1a15bdcad467", - is_built = true, name = "zlib", plat = "cross", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua index e2d7f996a..91982e64a 100644 --- a/xmake/core/project/project.lua +++ b/xmake/core/project/project.lua @@ -1028,6 +1028,11 @@ function project.requireslock() return path.join(project.directory(), "xmake-requires.lock") end +-- get the format version of requires lockfile +function project.requireslock_version() + return "1.0" +end + -- get the given rule function project.rule(name) return project.rules()[name] diff --git a/xmake/core/sandbox/modules/import/core/project/project.lua b/xmake/core/sandbox/modules/import/core/project/project.lua index 696bd0d91..34b5fa7ac 100644 --- a/xmake/core/sandbox/modules/import/core/project/project.lua +++ b/xmake/core/sandbox/modules/import/core/project/project.lua @@ -36,38 +36,39 @@ local package = require("package/package") local import = require("sandbox/modules/import") -- export some readonly interfaces -sandbox_core_project.get = project.get -sandbox_core_project.extraconf = project.extraconf -sandbox_core_project.rule = project.rule -sandbox_core_project.rules = project.rules -sandbox_core_project.toolchain = project.toolchain -sandbox_core_project.toolchains = project.toolchains -sandbox_core_project.target = project.target -sandbox_core_project.targets = project.targets -sandbox_core_project.ordertargets = project.ordertargets -sandbox_core_project.option = project.option -sandbox_core_project.options = project.options -sandbox_core_project.rootfile = project.rootfile -sandbox_core_project.allfiles = project.allfiles -sandbox_core_project.rcfiles = project.rcfiles -sandbox_core_project.directory = project.directory -sandbox_core_project.name = project.name -sandbox_core_project.modes = project.modes -sandbox_core_project.default_arch = project.default_arch -sandbox_core_project.allowed_modes = project.allowed_modes -sandbox_core_project.allowed_plats = project.allowed_plats -sandbox_core_project.allowed_archs = project.allowed_archs -sandbox_core_project.mtimes = project.mtimes -sandbox_core_project.version = project.version -sandbox_core_project.required_package = project.required_package -sandbox_core_project.required_packages = project.required_packages -sandbox_core_project.requires_str = project.requires_str -sandbox_core_project.requireconfs_str = project.requireconfs_str -sandbox_core_project.requireslock = project.requireslock -sandbox_core_project.policy = project.policy -sandbox_core_project.tmpdir = project.tmpdir -sandbox_core_project.tmpfile = project.tmpfile -sandbox_core_project.is_loaded = project.is_loaded +sandbox_core_project.get = project.get +sandbox_core_project.extraconf = project.extraconf +sandbox_core_project.rule = project.rule +sandbox_core_project.rules = project.rules +sandbox_core_project.toolchain = project.toolchain +sandbox_core_project.toolchains = project.toolchains +sandbox_core_project.target = project.target +sandbox_core_project.targets = project.targets +sandbox_core_project.ordertargets = project.ordertargets +sandbox_core_project.option = project.option +sandbox_core_project.options = project.options +sandbox_core_project.rootfile = project.rootfile +sandbox_core_project.allfiles = project.allfiles +sandbox_core_project.rcfiles = project.rcfiles +sandbox_core_project.directory = project.directory +sandbox_core_project.name = project.name +sandbox_core_project.modes = project.modes +sandbox_core_project.default_arch = project.default_arch +sandbox_core_project.allowed_modes = project.allowed_modes +sandbox_core_project.allowed_plats = project.allowed_plats +sandbox_core_project.allowed_archs = project.allowed_archs +sandbox_core_project.mtimes = project.mtimes +sandbox_core_project.version = project.version +sandbox_core_project.required_package = project.required_package +sandbox_core_project.required_packages = project.required_packages +sandbox_core_project.requires_str = project.requires_str +sandbox_core_project.requireconfs_str = project.requireconfs_str +sandbox_core_project.requireslock = project.requireslock +sandbox_core_project.requireslock_version = project.requireslock_version +sandbox_core_project.policy = project.policy +sandbox_core_project.tmpdir = project.tmpdir +sandbox_core_project.tmpfile = project.tmpfile +sandbox_core_project.is_loaded = project.is_loaded -- check project options function sandbox_core_project.check() diff --git a/xmake/modules/private/action/require/impl/lock_packages.lua b/xmake/modules/private/action/require/impl/lock_packages.lua index a5e971b60..a02a65470 100644 --- a/xmake/modules/private/action/require/impl/lock_packages.lua +++ b/xmake/modules/private/action/require/impl/lock_packages.lua @@ -76,6 +76,7 @@ end function main(packages) if project.policy("package.requires_lock") then local results = {} + results.version = project.requireslock_version() for _, instance in ipairs(packages) do local packagelock_key = _get_packagelock_key(instance) results[packagelock_key] = _lock_package(instance) diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua index 148758c59..3d9145477 100644 --- a/xmake/modules/private/action/require/impl/package.lua +++ b/xmake/modules/private/action/require/impl/package.lua @@ -684,6 +684,9 @@ function _load_package(packagename, requireinfo, opt) if _has_locked_requires() then local requirekey = _get_packagelock_key(requireinfo) locked_requireinfo = _get_locked_requires(requirekey) + if semver.compare(project.requireslock_version(), locked_requireinfo.version) < 0 then + locked_requireinfo = nil + end end -- select package version -- cgit v1.3.1 From 7d85d8190b2e650ad02552c4935092a6d732206d Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 19 Aug 2021 00:53:05 +0800 Subject: improve requirekey --- .../package/multiconfig/xmake-requires.lock | 40 ++------- .../package/toolchain_muslcc/xmake-requires.lock | 96 +++------------------- .../private/action/require/impl/lock_packages.lua | 25 +----- .../private/action/require/impl/package.lua | 25 +++--- 4 files changed, 33 insertions(+), 153 deletions(-) diff --git a/tests/projects/package/multiconfig/xmake-requires.lock b/tests/projects/package/multiconfig/xmake-requires.lock index 78e911112..8e4e4127c 100644 --- a/tests/projects/package/multiconfig/xmake-requires.lock +++ b/tests/projects/package/multiconfig/xmake-requires.lock @@ -1,53 +1,27 @@ { - ["zlib#fd74da7781d54dddb234cfb6eae7be34"] = { + version = "1.0", + ["zlib#ddbdd8b8f76d455a8c0ef45fffe37160"] = { arch = "x86_64", buildhash = "b76a297309d14c09b42cfe3927260a51", - configs = { - debug = false, - pic = true, - shared = false - }, - is_built = true, name = "zlib", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", - urls = { - "https://github.com/madler/zlib/archive/v1.2.11.tar.gz#629380c90a77b964d896ed37163f5c3a34f6e6d897311f1df2a7016355c45eff" - }, + repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", version = "1.2.11" }, - ["zlib~debug#29572d10f2b44d76ad238aa6d9d886f0"] = { + ["zlib~debug#d72a8a937b694e449bce540c8eb65a8a"] = { arch = "x86_64", buildhash = "e6a6fa6a86ad4fc7ae3c2cf7c60cc084", - configs = { - debug = true, - pic = true, - shared = false - }, - is_built = true, name = "zlib", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", - urls = { - "https://github.com/madler/zlib/archive/v1.2.11.tar.gz#629380c90a77b964d896ed37163f5c3a34f6e6d897311f1df2a7016355c45eff" - }, + repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", version = "1.2.11" }, - ["zlib~shared#0aa7e77905524be8bf354384c68bdde7"] = { + ["zlib~shared#b286744a1898416faad2e5cab0104b2f"] = { arch = "x86_64", buildhash = "8e5b898b0f344715bac89cc6a1577506", - configs = { - debug = false, - pic = true, - shared = true - }, - is_built = true, name = "zlib", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#327b5dd6a61e5345c3e10d758e342a73a8e6c54e", - urls = { - "https://github.com/madler/zlib/archive/v1.2.11.tar.gz#629380c90a77b964d896ed37163f5c3a34f6e6d897311f1df2a7016355c45eff" - }, + repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", version = "1.2.11" } } \ No newline at end of file diff --git a/tests/projects/package/toolchain_muslcc/xmake-requires.lock b/tests/projects/package/toolchain_muslcc/xmake-requires.lock index 0c232a5a7..fb9cfad02 100644 --- a/tests/projects/package/toolchain_muslcc/xmake-requires.lock +++ b/tests/projects/package/toolchain_muslcc/xmake-requires.lock @@ -1,173 +1,99 @@ { - ["autoconf#f9faf630133045aab06d08087de4bc33"] = { + ["autoconf#ddbdd8b8f76d455a8c0ef45fffe37160"] = { arch = "x86_64", buildhash = "01974c48f52d4d658f58852351743754", - deps = { - "m4#f9faf630133045aab06d08087de4bc33" - }, name = "autoconf", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", - urls = { - "https://mirrors.ustc.edu.cn/gnu/autoconf/autoconf-2.69.tar.gz#954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969", - "git://git.sv.gnu.org/autoconf#2.69", - "http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz#954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969" - }, version = "2.69" }, - ["automake#f9faf630133045aab06d08087de4bc33"] = { + ["automake#ddbdd8b8f76d455a8c0ef45fffe37160"] = { arch = "x86_64", buildhash = "7a090c93706241f983f0d821a162e8a5", - deps = { - "autoconf#f9faf630133045aab06d08087de4bc33" - }, name = "automake", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", - urls = { - "https://mirrors.ustc.edu.cn/gnu/automake/automake-1.16.1.tar.gz#608a97523f97db32f1f5d5615c98ca69326ced2054c9f82e65bade7fc4c9dea8", - "http://ftp.gnu.org/gnu/automake/automake-1.16.1.tar.gz#608a97523f97db32f1f5d5615c98ca69326ced2054c9f82e65bade7fc4c9dea8" - }, version = "1.16.1" }, - ["cmake#f9faf630133045aab06d08087de4bc33"] = { + ["cmake#ddbdd8b8f76d455a8c0ef45fffe37160"] = { arch = "x86_64", buildhash = "a6d18f8c0bf347d980f8bb762583c91a", name = "cmake", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", - urls = { - "https://github.com/Kitware/CMake/releases/download/v3.21.0/cmake-3.21.0-macos-universal.tar.gz#c1c6f19dfc9c658a48b5aed22806595b2337bb3aedb71ab826552f74f568719f", - "https://cmake.org/files/v3.21/cmake-3.21.0-macos-universal-Darwin-x86_64.tar.gz#c1c6f19dfc9c658a48b5aed22806595b2337bb3aedb71ab826552f74f568719f" - }, version = "3.21.0" }, - ["gmp#f9faf630133045aab06d08087de4bc33"] = { + ["gmp#ddbdd8b8f76d455a8c0ef45fffe37160"] = { arch = "x86_64", buildhash = "7dd9c224447e46698ac73d29f58b1d73", - deps = { - "autoconf#f9faf630133045aab06d08087de4bc33" - }, name = "gmp", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", - urls = { - "https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz#fd4829912cddd12f84181c3451cc752be224643e87fac497b69edddadc49b4f2" - }, version = "6.2.1" }, ["libisl 0.22#3dd996fa365042e39791030c4e1cad52"] = { arch = "x86_64", buildhash = "f649e1fb365e442e8f79f372fd91483b", - deps = { - "autoconf#f9faf630133045aab06d08087de4bc33", - "gmp#f9faf630133045aab06d08087de4bc33" - }, name = "libisl", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", - urls = { - "http://isl.gforge.inria.fr/isl-0.22.tar.xz#6c8bc56c477affecba9c59e2c9f026967ac8bad01b51bdd07916db40a517b9fa" - }, version = "0.22" }, - ["libogg#30fe400ff5234914998bd7d8c177621c"] = { + ["libogg#ddbdd8b8f76d455a8c0ef45fffe37160"] = { arch = "arm", buildhash = "d894fc29f2fb4c45a0f48bc2c6ece273", - deps = { - "cmake#f9faf630133045aab06d08087de4bc33" - }, name = "libogg", plat = "cross", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", - urls = { - "https://gitlab.xiph.org/xiph/ogg/-/archive/v1.3.4/ogg-v1.3.4.tar.gz#62cc64b9fd3cf57bde3a9033e94534ba34313d2bb9698029f623121a4e47bb9b", - "https://gitlab.xiph.org/xiph/ogg.git#v1.3.4" - }, version = "v1.3.4" }, - ["libplist#30fe400ff5234914998bd7d8c177621c"] = { + ["libplist#ddbdd8b8f76d455a8c0ef45fffe37160"] = { arch = "arm", buildhash = "0c01b22920be4876b1de74629194eb8f", - deps = { - "autoconf#f9faf630133045aab06d08087de4bc33", - "automake#f9faf630133045aab06d08087de4bc33", - "libtool#f9faf630133045aab06d08087de4bc33", - "pkg-config#f9faf630133045aab06d08087de4bc33" - }, name = "libplist", plat = "cross", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", - urls = { - "https://github.com/libimobiledevice/libplist/archive/2.2.0.tar.gz#7e654bdd5d8b96f03240227ed09057377f06ebad08e1c37d0cfa2abe6ba0cee2", - "https://github.com/libimobiledevice/libplist.git#2.2.0" - }, version = "2.2.0" }, - ["libtool#f9faf630133045aab06d08087de4bc33"] = { + ["libtool#ddbdd8b8f76d455a8c0ef45fffe37160"] = { arch = "x86_64", buildhash = "64584ec84a4743ecb740b598b263ffa6", - deps = { - "autoconf#f9faf630133045aab06d08087de4bc33" - }, name = "libtool", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", - urls = { - "https://mirrors.ustc.edu.cn/gnu/libtool/libtool-2.4.6.tar.gz#e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3", - "git://git.savannah.gnu.org/libtool.git#2.4.6", - "http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz#e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3" - }, version = "2.4.6" }, - ["m4#f9faf630133045aab06d08087de4bc33"] = { + ["m4#ddbdd8b8f76d455a8c0ef45fffe37160"] = { arch = "x86_64", buildhash = "fd0e83e5759b442a970327ebb1c89793", name = "m4", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", - urls = { - "https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz#63aede5c6d33b6d9b13511cd0be2cac046f2e70fd0a07aa9573a04a82783af96", - "https://ftpmirror.gnu.org/m4/m4-1.4.19.tar.xz#63aede5c6d33b6d9b13511cd0be2cac046f2e70fd0a07aa9573a04a82783af96" - }, version = "1.4.19" }, - ["muslcc#f9faf630133045aab06d08087de4bc33"] = { + ["muslcc#ddbdd8b8f76d455a8c0ef45fffe37160"] = { arch = "x86_64", buildhash = "11062c09ebeb484594488ad73ddbcd1f", - deps = { - "libisl 0.22#3dd996fa365042e39791030c4e1cad52" - }, name = "muslcc", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", - urls = { - "https://github.com/xmake-mirror/musl.cc/releases/download/20210202/arm-linux-musleabi-cross.mac.tgz#a177df3f847181c0c7f2b34b9bd7725b4c556c11a347aa0ae36e09ebf23fb480" - }, version = "20210202" }, - ["pkg-config#f9faf630133045aab06d08087de4bc33"] = { + ["pkg-config#ddbdd8b8f76d455a8c0ef45fffe37160"] = { arch = "x86_64", buildhash = "84fd7f9b9f7a47709512cfc85cd9e5f7", name = "pkg-config", plat = "macosx", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", - urls = { - "https://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz#6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591", - "http://fco.it.distfiles.macports.org/mirrors/macports-distfiles/pkgconfig/pkg-config-0.29.2.tar.gz#6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591" - }, version = "0.29.2" }, version = "1.0", - ["zlib#30fe400ff5234914998bd7d8c177621c"] = { + ["zlib#ddbdd8b8f76d455a8c0ef45fffe37160"] = { arch = "arm", buildhash = "be90a245b8bb48e6b08a1a15bdcad467", name = "zlib", plat = "cross", repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", - urls = { - "https://github.com/madler/zlib/archive/v1.2.11.tar.gz#629380c90a77b964d896ed37163f5c3a34f6e6d897311f1df2a7016355c45eff" - }, version = "1.2.11" } } \ No newline at end of file diff --git a/xmake/modules/private/action/require/impl/lock_packages.lua b/xmake/modules/private/action/require/impl/lock_packages.lua index a02a65470..52141d7db 100644 --- a/xmake/modules/private/action/require/impl/lock_packages.lua +++ b/xmake/modules/private/action/require/impl/lock_packages.lua @@ -27,12 +27,8 @@ import("private.action.require.impl.utils.requirekey") -- get locked package key function _get_packagelock_key(instance) - local plat = config.plat() or os.subhost() - local arch = config.arch() or os.subarch() local requireinfo = instance:requireinfo() - local requirestr = requireinfo.originstr - local key = requirekey(requireinfo, {hash = true, plat = plat, arch = arch}) - return string.format("%s#%s", requirestr, key) + return requireinfo and requireinfo.requirekey end -- lock package @@ -50,25 +46,6 @@ function _lock_package(instance) local lastcommit = git.lastcommit({repodir = repo:directory()}) result.repo = repo:url() .. "#" .. lastcommit end - for _, url in ipairs(instance:urls()) do - result.urls = result.urls or {} - local url_alias = instance:url_alias(url) - url = filter.handle(url, instance) - if git.asgiturl(url) then - local revision = instance:revision(url_alias) or instance:tag() or instance:version_str() - url = url .. "#" .. revision - else - local sourcehash = instance:sourcehash(url_alias) - if sourcehash then - url = url .. "#" .. sourcehash - end - end - table.insert(result.urls, url) - end - for _, dep in ipairs(instance:plaindeps()) do - result.deps = result.deps or {} - table.insert(result.deps, _get_packagelock_key(dep)) - end return result end diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua index 3d9145477..ade76e9d9 100644 --- a/xmake/modules/private/action/require/impl/package.lua +++ b/xmake/modules/private/action/require/impl/package.lua @@ -219,7 +219,7 @@ function _get_locked_requires(requirekey) _memcache():set("requireslock", requireslock or false) end if requireslock then - return requireslock[requirekey] + return requireslock[requirekey], requireslock.version end end @@ -638,6 +638,19 @@ function _load_package(packagename, requireinfo, opt) requireinfo.label = splitinfo[2] end + -- sve requirekey + local requirekey = _get_packagelock_key(requireinfo) + requireinfo.requirekey = requirekey + + -- get locked requireinfo + local locked_requireinfo, requireslock_version + if _has_locked_requires() then + locked_requireinfo, requireslock_version = _get_locked_requires(requirekey) + if requireslock_version and semver.compare(project.requireslock_version(), requireslock_version) < 0 then + locked_requireinfo = nil + end + end + -- load package from project first local package if os.isfile(os.projectfile()) then @@ -679,16 +692,6 @@ function _load_package(packagename, requireinfo, opt) -- finish requireinfo _finish_requireinfo(requireinfo, package) - -- get locked requireinfo - local locked_requireinfo - if _has_locked_requires() then - local requirekey = _get_packagelock_key(requireinfo) - locked_requireinfo = _get_locked_requires(requirekey) - if semver.compare(project.requireslock_version(), locked_requireinfo.version) < 0 then - locked_requireinfo = nil - end - end - -- select package version local version, source = _select_package_version(package, requireinfo, locked_requireinfo) if version then -- cgit v1.3.1 From 9112276d8065c9fdc0428bb4b44cf1b5794ab6d8 Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 19 Aug 2021 22:35:29 +0800 Subject: improve xmake-requires.lock --- .../package/multiconfig/xmake-requires.lock | 22 +++++-- .../package/toolchain_muslcc/xmake-requires.lock | 76 ++++++++++++++++++---- .../private/action/require/impl/lock_packages.lua | 6 +- .../private/action/require/impl/package.lua | 2 +- 4 files changed, 85 insertions(+), 21 deletions(-) diff --git a/tests/projects/package/multiconfig/xmake-requires.lock b/tests/projects/package/multiconfig/xmake-requires.lock index 8e4e4127c..6adbab999 100644 --- a/tests/projects/package/multiconfig/xmake-requires.lock +++ b/tests/projects/package/multiconfig/xmake-requires.lock @@ -1,11 +1,17 @@ { - version = "1.0", + __meta__ = { + version = "1.0" + }, ["zlib#ddbdd8b8f76d455a8c0ef45fffe37160"] = { arch = "x86_64", buildhash = "b76a297309d14c09b42cfe3927260a51", name = "zlib", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", + repo = { + branch = "master", + commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + url = "https://gitee.com/tboox/xmake-repo.git" + }, version = "1.2.11" }, ["zlib~debug#d72a8a937b694e449bce540c8eb65a8a"] = { @@ -13,7 +19,11 @@ buildhash = "e6a6fa6a86ad4fc7ae3c2cf7c60cc084", name = "zlib", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", + repo = { + branch = "master", + commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + url = "https://gitee.com/tboox/xmake-repo.git" + }, version = "1.2.11" }, ["zlib~shared#b286744a1898416faad2e5cab0104b2f"] = { @@ -21,7 +31,11 @@ buildhash = "8e5b898b0f344715bac89cc6a1577506", name = "zlib", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", + repo = { + branch = "master", + commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + url = "https://gitee.com/tboox/xmake-repo.git" + }, version = "1.2.11" } } \ No newline at end of file diff --git a/tests/projects/package/toolchain_muslcc/xmake-requires.lock b/tests/projects/package/toolchain_muslcc/xmake-requires.lock index fb9cfad02..9509b8501 100644 --- a/tests/projects/package/toolchain_muslcc/xmake-requires.lock +++ b/tests/projects/package/toolchain_muslcc/xmake-requires.lock @@ -1,10 +1,17 @@ { + __meta__ = { + version = "1.0" + }, ["autoconf#ddbdd8b8f76d455a8c0ef45fffe37160"] = { arch = "x86_64", buildhash = "01974c48f52d4d658f58852351743754", name = "autoconf", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", + repo = { + branch = "master", + commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + url = "https://gitee.com/tboox/xmake-repo.git" + }, version = "2.69" }, ["automake#ddbdd8b8f76d455a8c0ef45fffe37160"] = { @@ -12,7 +19,11 @@ buildhash = "7a090c93706241f983f0d821a162e8a5", name = "automake", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", + repo = { + branch = "master", + commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + url = "https://gitee.com/tboox/xmake-repo.git" + }, version = "1.16.1" }, ["cmake#ddbdd8b8f76d455a8c0ef45fffe37160"] = { @@ -20,7 +31,11 @@ buildhash = "a6d18f8c0bf347d980f8bb762583c91a", name = "cmake", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", + repo = { + branch = "master", + commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + url = "https://gitee.com/tboox/xmake-repo.git" + }, version = "3.21.0" }, ["gmp#ddbdd8b8f76d455a8c0ef45fffe37160"] = { @@ -28,7 +43,11 @@ buildhash = "7dd9c224447e46698ac73d29f58b1d73", name = "gmp", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", + repo = { + branch = "master", + commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + url = "https://gitee.com/tboox/xmake-repo.git" + }, version = "6.2.1" }, ["libisl 0.22#3dd996fa365042e39791030c4e1cad52"] = { @@ -36,7 +55,11 @@ buildhash = "f649e1fb365e442e8f79f372fd91483b", name = "libisl", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", + repo = { + branch = "master", + commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + url = "https://gitee.com/tboox/xmake-repo.git" + }, version = "0.22" }, ["libogg#ddbdd8b8f76d455a8c0ef45fffe37160"] = { @@ -44,7 +67,11 @@ buildhash = "d894fc29f2fb4c45a0f48bc2c6ece273", name = "libogg", plat = "cross", - repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", + repo = { + branch = "master", + commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + url = "https://gitee.com/tboox/xmake-repo.git" + }, version = "v1.3.4" }, ["libplist#ddbdd8b8f76d455a8c0ef45fffe37160"] = { @@ -52,7 +79,11 @@ buildhash = "0c01b22920be4876b1de74629194eb8f", name = "libplist", plat = "cross", - repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", + repo = { + branch = "master", + commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + url = "https://gitee.com/tboox/xmake-repo.git" + }, version = "2.2.0" }, ["libtool#ddbdd8b8f76d455a8c0ef45fffe37160"] = { @@ -60,7 +91,11 @@ buildhash = "64584ec84a4743ecb740b598b263ffa6", name = "libtool", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", + repo = { + branch = "master", + commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + url = "https://gitee.com/tboox/xmake-repo.git" + }, version = "2.4.6" }, ["m4#ddbdd8b8f76d455a8c0ef45fffe37160"] = { @@ -68,7 +103,11 @@ buildhash = "fd0e83e5759b442a970327ebb1c89793", name = "m4", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", + repo = { + branch = "master", + commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + url = "https://gitee.com/tboox/xmake-repo.git" + }, version = "1.4.19" }, ["muslcc#ddbdd8b8f76d455a8c0ef45fffe37160"] = { @@ -76,7 +115,11 @@ buildhash = "11062c09ebeb484594488ad73ddbcd1f", name = "muslcc", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", + repo = { + branch = "master", + commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + url = "https://gitee.com/tboox/xmake-repo.git" + }, version = "20210202" }, ["pkg-config#ddbdd8b8f76d455a8c0ef45fffe37160"] = { @@ -84,16 +127,23 @@ buildhash = "84fd7f9b9f7a47709512cfc85cd9e5f7", name = "pkg-config", plat = "macosx", - repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", + repo = { + branch = "master", + commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + url = "https://gitee.com/tboox/xmake-repo.git" + }, version = "0.29.2" }, - version = "1.0", ["zlib#ddbdd8b8f76d455a8c0ef45fffe37160"] = { arch = "arm", buildhash = "be90a245b8bb48e6b08a1a15bdcad467", name = "zlib", plat = "cross", - repo = "https://gitee.com/tboox/xmake-repo.git#e87effa464611cecf28dfced70cbe491a08fe99d", + repo = { + branch = "master", + commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + url = "https://gitee.com/tboox/xmake-repo.git" + }, version = "1.2.11" } } \ No newline at end of file diff --git a/xmake/modules/private/action/require/impl/lock_packages.lua b/xmake/modules/private/action/require/impl/lock_packages.lua index 52141d7db..18dabcac4 100644 --- a/xmake/modules/private/action/require/impl/lock_packages.lua +++ b/xmake/modules/private/action/require/impl/lock_packages.lua @@ -44,7 +44,7 @@ function _lock_package(instance) result.tag = instance:tag() if repo then local lastcommit = git.lastcommit({repodir = repo:directory()}) - result.repo = repo:url() .. "#" .. lastcommit + result.repo = {url = repo:url(), commit = lastcommit, branch = repo:branch()} end return result end @@ -52,8 +52,8 @@ end -- lock all required packages function main(packages) if project.policy("package.requires_lock") then - local results = {} - results.version = project.requireslock_version() + local results = {__meta__ = {}} + results.__meta__.version = project.requireslock_version() for _, instance in ipairs(packages) do local packagelock_key = _get_packagelock_key(instance) results[packagelock_key] = _lock_package(instance) diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua index ade76e9d9..e1c8d87cb 100644 --- a/xmake/modules/private/action/require/impl/package.lua +++ b/xmake/modules/private/action/require/impl/package.lua @@ -219,7 +219,7 @@ function _get_locked_requires(requirekey) _memcache():set("requireslock", requireslock or false) end if requireslock then - return requireslock[requirekey], requireslock.version + return requireslock[requirekey], requireslock.__meta__.version end end -- cgit v1.3.1 From 41213f3589000eb245aa33407ba971dbedc95c91 Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 19 Aug 2021 23:50:02 +0800 Subject: add locked repo stub --- .../private/action/require/impl/package.lua | 7 +-- .../private/action/require/impl/repository.lua | 58 +++++++++++++++------- 2 files changed, 45 insertions(+), 20 deletions(-) diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua index e1c8d87cb..5084d2d29 100644 --- a/xmake/modules/private/action/require/impl/package.lua +++ b/xmake/modules/private/action/require/impl/package.lua @@ -195,8 +195,8 @@ function _load_package_from_project(packagename) end -- load package package from repositories -function _load_package_from_repository(packagename, reponame) - local packagedir, repo = repository.packagedir(packagename, reponame) +function _load_package_from_repository(packagename, opt) + local packagedir, repo = repository.packagedir(packagename, opt) if packagedir then return core_package.load_from_repository(packagename, repo, packagedir) end @@ -660,7 +660,8 @@ function _load_package(packagename, requireinfo, opt) -- load package from repositories local from_repo = false if not package then - package = _load_package_from_repository(packagename, requireinfo.reponame) + package = _load_package_from_repository(packagename, { + name = requireinfo.reponame, locked_repo = locked_requireinfo and locked_requireinfo.repo}) if package then from_repo = true end diff --git a/xmake/modules/private/action/require/impl/repository.lua b/xmake/modules/private/action/require/impl/repository.lua index 4dbf44e52..12a4772cf 100644 --- a/xmake/modules/private/action/require/impl/repository.lua +++ b/xmake/modules/private/action/require/impl/repository.lua @@ -22,6 +22,11 @@ import("core.base.global") import("core.package.repository") +-- get package directory from the locked repository +function _get_packagedir_from_locked_repo(packagename, locked_repo) +-- print(packagename, locked_repo) +end + -- get all repositories function repositories() if _g._REPOSITORIES then @@ -48,34 +53,53 @@ function pulled() end -- get package directory from repositories -function packagedir(packagename, reponame) +function packagedir(packagename, opt) -- strip trailng ~tag, e.g. zlib~debug + opt = opt or {} packagename = packagename:lower() if packagename:find('~', 1, true) then packagename = packagename:gsub("~.+$", "") end - -- get it from cache it - local packagedirs = _g._PACKAGEDIRS or {} - local foundir = packagedirs[packagename] - if foundir then - return foundir[1], foundir[2] + -- get cache key + local reponame = opt.name + local cachekey = packagename + local locked_repo = opt.locked_repo + if locked_repo then + cachekey = cachekey .. locked_repo.url .. locked_repo.commit .. (locked_repo.branch or "") + end + local packagedirs = _g._PACKAGEDIRS + if not packagedirs then + packagedirs = {} + _g._PACKAGEDIRS = packagedirs end - -- find the package directory from repositories - for _, repo in ipairs(repositories()) do - local dir = path.join(repo:directory(), "packages", packagename:sub(1, 1), packagename) - if os.isdir(dir) and os.isfile(path.join(dir, "xmake.lua")) and (not reponame or reponame == repo:name()) then - foundir = {dir, repo} - break + -- get the package directory + local foundir = packagedirs[cachekey] + if not foundir then + + -- find the package directory from the locked repository + if locked_repo then + local dir, repo = _get_packagedir_from_locked_repo(packagename, locked_repo) + if dir and repo then + foundir = {dir, repo} + end end + + -- find the package directory from repositories + if not foundir then + for _, repo in ipairs(repositories()) do + local dir = path.join(repo:directory(), "packages", packagename:sub(1, 1), packagename) + if os.isdir(dir) and os.isfile(path.join(dir, "xmake.lua")) and (not reponame or reponame == repo:name()) then + foundir = {dir, repo} + break + end + end + end + packagedirs[cachekey] = foundir or {} end - if foundir then - packagedirs[packagename] = foundir - _g._PACKAGEDIRS = packagedirs - return foundir[1], foundir[2] - end + return foundir[1], foundir[2] end -- get artifacts manifest from repositories -- cgit v1.3.1 From d96dd2ca564aca5ad0780feb9c14f57b76c693d2 Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 19 Aug 2021 23:56:50 +0800 Subject: lock repository --- .../modules/import/core/package/repository.lua | 19 ++------ .../private/action/require/impl/repository.lua | 54 +++++++++++++++++++++- 2 files changed, 57 insertions(+), 16 deletions(-) diff --git a/xmake/core/sandbox/modules/import/core/package/repository.lua b/xmake/core/sandbox/modules/import/core/package/repository.lua index 86f27b497..64135aa75 100644 --- a/xmake/core/sandbox/modules/import/core/package/repository.lua +++ b/xmake/core/sandbox/modules/import/core/package/repository.lua @@ -29,20 +29,13 @@ local repository = require("package/repository") local raise = require("sandbox/modules/raise") local import = require("sandbox/modules/import") --- get repository directory -function sandbox_core_package_repository.directory(is_global) - return repository.directory(is_global) -end - --- get repository url from the given name -function sandbox_core_package_repository.get(name, is_global) - return repository.get(name, is_global) -end +-- inherit some builtin interfaces +sandbox_core_package_repository.directory = repository.directory +sandbox_core_package_repository.get = repository.get +sandbox_core_package_repository.load = repository.load -- add repository url to the given name function sandbox_core_package_repository.add(name, url, branch, is_global) - - -- add it local ok, errors = repository.add(name, url, branch, is_global) if not ok then raise(errors) @@ -51,8 +44,6 @@ end -- remove repository from gobal or local directory function sandbox_core_package_repository.remove(name, is_global) - - -- remove it local ok, errors = repository.remove(name, is_global) if not ok then raise(errors) @@ -61,8 +52,6 @@ end -- clear all repositories from global or local directory function sandbox_core_package_repository.clear(is_global) - - -- clear all repositories local ok, errors = repository.clear(is_global) if not ok then raise(errors) diff --git a/xmake/modules/private/action/require/impl/repository.lua b/xmake/modules/private/action/require/impl/repository.lua index 12a4772cf..b38bc95d3 100644 --- a/xmake/modules/private/action/require/impl/repository.lua +++ b/xmake/modules/private/action/require/impl/repository.lua @@ -19,12 +19,64 @@ -- -- imports +import("core.base.option") import("core.base.global") +import("core.project.config") import("core.package.repository") +import("devel.git") -- get package directory from the locked repository function _get_packagedir_from_locked_repo(packagename, locked_repo) --- print(packagename, locked_repo) + print(packagename, locked_repo) + + -- find global repository directory + local repodir_global + for _, repo in ipairs(repositories()) do + if locked_repo.url == repo:url() and locked_repo.branch == repo:branch() then + repodir_global = repo:directory() + break + end + end + + -- clone repository to local + local reponame = path.basename(locked_repo.url) + local repodir_local = path.join(config.directory(), "repositories", reponame) + if not os.isdir(repodir_local) then + if repodir_global then + git.clone(repodir_global, {verbose = option.get("verbose"), outputdir = repodir_local}) + elseif global.get("network") ~= "private" then + git.clone(locked_repo.url, {verbose = option.get("verbose"), branch = locked_repo.branch, outputdir = repodir_local}) + else + wprint("we cannot lock repository(%s) in private network mode!", locked_repo.url) + return + end + end + + -- try checkout to the given commit + local ok = try {function () git.checkout(locked_repo.commit, {verbose = option.get("verbose"), repodir = repodir_local}); return true end} + if not ok then + if global.get("network") ~= "private" then + -- pull the latest commit + git.pull({verbose = option.get("verbose"), branch = locked_repo.branch, repodir = repodir_local}) + -- re-checkout to the given commit + ok = try {function () git.checkout(locked_repo.commit, {verbose = option.get("verbose"), repodir = repodir_local}); return true end} + else + wprint("we cannot lock repository(%s) in private network mode!", locked_repo.url) + return + end + end + + -- find package directory + local foundir + if ok then + local dir = path.join(repodir_local, "packages", packagename:sub(1, 1), packagename) + if os.isdir(dir) and os.isfile(path.join(dir, "xmake.lua")) then + local repo = repository.load(reponame, locked_repo.url, locked_repo.branch, false) + foundir = {dir, repo} + vprint("lock package(%s) in %s from repository(%s)/%s", packagename, dir, locked_repo.url, locked_repo.commit) + end + end + return foundir end -- get all repositories -- cgit v1.3.1 From 8255e9894b9d1b29ecb479190ab2e9f1e6e8388c Mon Sep 17 00:00:00 2001 From: ruki Date: Fri, 20 Aug 2021 00:30:50 +0800 Subject: improve to pull locked repo --- xmake/modules/private/action/require/impl/repository.lua | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/xmake/modules/private/action/require/impl/repository.lua b/xmake/modules/private/action/require/impl/repository.lua index b38bc95d3..a2764916d 100644 --- a/xmake/modules/private/action/require/impl/repository.lua +++ b/xmake/modules/private/action/require/impl/repository.lua @@ -27,7 +27,6 @@ import("devel.git") -- get package directory from the locked repository function _get_packagedir_from_locked_repo(packagename, locked_repo) - print(packagename, locked_repo) -- find global repository directory local repodir_global @@ -39,7 +38,7 @@ function _get_packagedir_from_locked_repo(packagename, locked_repo) end -- clone repository to local - local reponame = path.basename(locked_repo.url) + local reponame = path.basename(locked_repo.url) .. ".lock" local repodir_local = path.join(config.directory(), "repositories", reponame) if not os.isdir(repodir_local) then if repodir_global then @@ -57,7 +56,7 @@ function _get_packagedir_from_locked_repo(packagename, locked_repo) if not ok then if global.get("network") ~= "private" then -- pull the latest commit - git.pull({verbose = option.get("verbose"), branch = locked_repo.branch, repodir = repodir_local}) + git.pull({verbose = option.get("verbose"), remote = locked_repo.url, branch = locked_repo.branch, repodir = repodir_local}) -- re-checkout to the given commit ok = try {function () git.checkout(locked_repo.commit, {verbose = option.get("verbose"), repodir = repodir_local}); return true end} else -- cgit v1.3.1 From 0eac4a64692796d99a1a30f206a2d21463e0acf6 Mon Sep 17 00:00:00 2001 From: ruki Date: Fri, 20 Aug 2021 00:33:19 +0800 Subject: improve reponame --- tests/projects/package/multiconfig/xmake-requires.lock | 6 +++--- xmake/modules/private/action/require/impl/repository.lua | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/projects/package/multiconfig/xmake-requires.lock b/tests/projects/package/multiconfig/xmake-requires.lock index 6adbab999..e8621f5b3 100644 --- a/tests/projects/package/multiconfig/xmake-requires.lock +++ b/tests/projects/package/multiconfig/xmake-requires.lock @@ -9,7 +9,7 @@ plat = "macosx", repo = { branch = "master", - commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + commit = "df6cad5cf5701de3705c7afce54d732e1f5b14b9", url = "https://gitee.com/tboox/xmake-repo.git" }, version = "1.2.11" @@ -21,7 +21,7 @@ plat = "macosx", repo = { branch = "master", - commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + commit = "df6cad5cf5701de3705c7afce54d732e1f5b14b9", url = "https://gitee.com/tboox/xmake-repo.git" }, version = "1.2.11" @@ -33,7 +33,7 @@ plat = "macosx", repo = { branch = "master", - commit = "e87effa464611cecf28dfced70cbe491a08fe99d", + commit = "df6cad5cf5701de3705c7afce54d732e1f5b14b9", url = "https://gitee.com/tboox/xmake-repo.git" }, version = "1.2.11" diff --git a/xmake/modules/private/action/require/impl/repository.lua b/xmake/modules/private/action/require/impl/repository.lua index a2764916d..528aebc54 100644 --- a/xmake/modules/private/action/require/impl/repository.lua +++ b/xmake/modules/private/action/require/impl/repository.lua @@ -36,9 +36,9 @@ function _get_packagedir_from_locked_repo(packagename, locked_repo) break end end + local reponame = hash.uuid(locked_repo.url):gsub("%-", ""):lower() .. ".lock" -- clone repository to local - local reponame = path.basename(locked_repo.url) .. ".lock" local repodir_local = path.join(config.directory(), "repositories", reponame) if not os.isdir(repodir_local) then if repodir_global then -- cgit v1.3.1