From 7a6078cf4f4f28f607406f743c8482c4121d619c Mon Sep 17 00:00:00 2001 From: FireFight <2268561366@qq.com> Date: Fri, 6 Feb 2026 22:05:53 +0800 Subject: fix ‌attempt to add dependency handling for vcpkg MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/package/manager/vcpkg/find_package.lua | 151 ++++++++++++--------- 1 file changed, 88 insertions(+), 63 deletions(-) diff --git a/xmake/modules/package/manager/vcpkg/find_package.lua b/xmake/modules/package/manager/vcpkg/find_package.lua index f44f7b3f9..359e7dfa2 100644 --- a/xmake/modules/package/manager/vcpkg/find_package.lua +++ b/xmake/modules/package/manager/vcpkg/find_package.lua @@ -63,7 +63,7 @@ function _find_package_from_pkgconfig(pkgconfig_files, opt) end end -function _find_package(vcpkgdir, name, opt) +function _find_package(vcpkg, vcpkgdir, name, opt) -- get configs local configs = opt.configs or {} @@ -80,6 +80,20 @@ function _find_package(vcpkgdir, name, opt) arch = configurations.arch(arch) local triplet = configurations.triplet(configs, plat, arch) + -- find dependency package + local dependencypackage = {} + local _, dependinfo = os.iorunv(vcpkg, {"depend-info", name}) + if dependinfo then + for _, line in ipairs(dependinfo:split("\n", {plain = true})) do + if not line:startswith("vcpkg-") then + local packagename = line:match("^([^%[:]+)[^:]*:") + if packagename then + table.insert(dependencypackage, packagename) + end + end + end + end + -- get the vcpkg info directories local infodirs = {} if opt.installdir then @@ -87,80 +101,85 @@ function _find_package(vcpkgdir, name, opt) end table.join2(infodirs, path.join(vcpkgdir, "installed", "vcpkg", "info")) - -- find the package info file, e.g. zlib_1.2.11-3_x86-windows[-static].list - local infofile = find_file(format("%s_*_%s.list", name, triplet), infodirs) - if not infofile then - return - end - local installdir = path.directory(path.directory(path.directory(infofile))) - - -- save includedirs, linkdirs and links local result = nil - local pkgconfig_files = {} - local info = io.readfile(infofile) - if info then - for _, line in ipairs(info:split('\n')) do - line = line:trim() - if plat == "windows" then - line = line:lower() - end - - -- get pkgconfig files - if line:find(triplet .. (mode == "debug" and "/debug" or "") .. "/lib/pkgconfig/", 1, true) and line:endswith(".pc") then - table.insert(pkgconfig_files, line) - end + for _, dependencyname in ipairs(dependencypackage) do + -- find the package info file, e.g. zlib_1.2.11-3_x86-windows[-static].list + local infofile = find_file(format("%s_*_%s.list", dependencyname, triplet), infodirs) + if not infofile then + goto continue + -- return + end + local installdir = path.directory(path.directory(path.directory(infofile))) + + -- save includedirs, linkdirs and links + local pkgconfig_files = {} + local info = io.readfile(infofile) + if info then + for _, line in ipairs(info:split('\n')) do + line = line:trim() + if plat == "windows" then + line = line:lower() + end - -- get includedirs - if line:endswith("/include/") then - result = result or {} - result.includedirs = result.includedirs or {} - table.insert(result.includedirs, path.join(installdir, line)) - end + -- get pkgconfig files + if line:find(triplet .. (mode == "debug" and "/debug" or "") .. "/lib/pkgconfig/", 1, true) and line:endswith(".pc") then + table.insert(pkgconfig_files, line) + end - -- get linkdirs and links - if (plat == "windows" and line:endswith(".lib")) or line:endswith(".a") or line:endswith(".so") then - if line:find(triplet .. (mode == "debug" and "/debug" or "") .. "/lib/", 1, true) then + -- get includedirs + if line:endswith("/include/") then result = result or {} - result.links = result.links or {} - result.linkdirs = result.linkdirs or {} - result.libfiles = result.libfiles or {} - table.insert(result.linkdirs, path.join(installdir, path.directory(line))) - table.insert(result.links, target.linkname(path.filename(line), {plat = plat})) - table.insert(result.libfiles, path.join(installdir, path.directory(line), path.filename(line))) + result.includedirs = result.includedirs or {} + table.insert(result.includedirs, path.join(installdir, line)) end - end - -- add shared library directory (/bin/) to linkdirs for running with PATH on windows - if plat == "windows" and line:endswith(".dll") then - if line:find(plat .. (mode == "debug" and "/debug" or "") .. "/bin/", 1, true) then - result = result or {} - result.linkdirs = result.linkdirs or {} - result.libfiles = result.libfiles or {} - table.insert(result.linkdirs, path.join(installdir, path.directory(line))) - table.insert(result.libfiles, path.join(installdir, path.directory(line), path.filename(line))) + -- get linkdirs and links + if (plat == "windows" and line:endswith(".lib")) or line:endswith(".a") or line:endswith(".so") then + if line:find(triplet .. (mode == "debug" and "/debug" or "") .. "/lib/", 1, true) then + result = result or {} + result.links = result.links or {} + result.linkdirs = result.linkdirs or {} + result.libfiles = result.libfiles or {} + table.insert(result.linkdirs, path.join(installdir, path.directory(line))) + table.insert(result.links, target.linkname(path.filename(line), {plat = plat})) + table.insert(result.libfiles, path.join(installdir, path.directory(line), path.filename(line))) + end + end + + -- add shared library directory (/bin/) to linkdirs for running with PATH on windows + if plat == "windows" and line:endswith(".dll") then + if line:find(plat .. (mode == "debug" and "/debug" or "") .. "/bin/", 1, true) then + result = result or {} + result.linkdirs = result.linkdirs or {} + result.libfiles = result.libfiles or {} + table.insert(result.linkdirs, path.join(installdir, path.directory(line))) + table.insert(result.libfiles, path.join(installdir, path.directory(line), path.filename(line))) + end end end end - end - -- find result from pkgconfig first - if #pkgconfig_files > 0 then - local pkgconfig_result = _find_package_from_pkgconfig(pkgconfig_files, {installdir = installdir, linkdirs = result and result.linkdirs}) - if pkgconfig_result then - result = pkgconfig_result + -- find result from pkgconfig first + if #pkgconfig_files > 0 then + local pkgconfig_result = _find_package_from_pkgconfig(pkgconfig_files, {installdir = installdir, linkdirs = result and result.linkdirs}) + if pkgconfig_result then + result = pkgconfig_result + end end - end - -- save version - if result then - local infoname = path.basename(infofile) - local prefix = name - -- name maybe contains lua pattern characters, we need escape it. e.g. `-` - prefix = prefix:gsub("([%+%.%-%^%$%(%)%%])", "%%%1") - result.version = infoname:match(prefix .. "_(%d+%.?%d*%.?%d*.-)_" .. arch) - if not result.version then - result.version = infoname:match(prefix .. "_(%d+%.?%d*%.-)_" .. arch) + -- save version + if result then + local infoname = path.basename(infofile) + local prefix = dependencyname + -- dependencyname maybe contains lua pattern characters, we need escape it. e.g. `-` + prefix = prefix:gsub("([%+%.%-%^%$%(%)%%])", "%%%1") + result.version = infoname:match(prefix .. "_(%d+%.?%d*%.?%d*.-)_" .. arch) + if not result.version then + result.version = infoname:match(prefix .. "_(%d+%.?%d*%.-)_" .. arch) + end end + + ::continue:: end -- remove repeat @@ -192,6 +211,12 @@ function main(name, opt) return end + -- attempt to find vcpkg + local vcpkg = find_tool("vcpkg") + if not vcpkg then + raise("vcpkg not found!") + end + -- do find package - return _find_package(vcpkgdir, name, opt) + return _find_package(vcpkg.program, vcpkgdir, name, opt) end -- cgit v1.3.1 From e80c35330d2df64d4b0e70f4181a39a06af0581b Mon Sep 17 00:00:00 2001 From: FireFight <2268561366@qq.com> Date: Sat, 7 Feb 2026 21:43:18 +0800 Subject: add test for vcpkg dependency. --- tests/projects/package/vcpkg_dependency/.gitignore | 6 ++++++ tests/projects/package/vcpkg_dependency/src/main.cpp | 16 ++++++++++++++++ tests/projects/package/vcpkg_dependency/xmake.lua | 10 ++++++++++ 3 files changed, 32 insertions(+) create mode 100644 tests/projects/package/vcpkg_dependency/.gitignore create mode 100644 tests/projects/package/vcpkg_dependency/src/main.cpp create mode 100644 tests/projects/package/vcpkg_dependency/xmake.lua diff --git a/tests/projects/package/vcpkg_dependency/.gitignore b/tests/projects/package/vcpkg_dependency/.gitignore new file mode 100644 index 000000000..d66efff82 --- /dev/null +++ b/tests/projects/package/vcpkg_dependency/.gitignore @@ -0,0 +1,6 @@ +# Xmake cache +.xmake/ +build/ + +# MacOS Cache +.DS_Store diff --git a/tests/projects/package/vcpkg_dependency/src/main.cpp b/tests/projects/package/vcpkg_dependency/src/main.cpp new file mode 100644 index 000000000..e5fdd37c5 --- /dev/null +++ b/tests/projects/package/vcpkg_dependency/src/main.cpp @@ -0,0 +1,16 @@ +#include +#include +#include +#include + +using namespace std; + +int main(int argc, char** argv) +{ + namespace OCIO = OCIO_NAMESPACE; + EVP_MD_CTX* sha256 = EVP_MD_CTX_new(); + EVP_DigestInit_ex(sha256, EVP_sha256(), nullptr); + auto write_image = OIIO::ImageOutput::create("test.png"); + cout << "hello world!" << endl; + return 0; +} diff --git a/tests/projects/package/vcpkg_dependency/xmake.lua b/tests/projects/package/vcpkg_dependency/xmake.lua new file mode 100644 index 000000000..2cccc00e7 --- /dev/null +++ b/tests/projects/package/vcpkg_dependency/xmake.lua @@ -0,0 +1,10 @@ +set_languages("c++17") +set_encodings("utf-8") + +add_requires("vcpkg::openimageio", { configs = { shared = true } }) +add_requires("vcpkg::openssl[ssl3]", { configs = { shared = true } }) + +target("test") + set_kind("binary") + add_files("src/*.cpp") + add_packages("vcpkg::openimageio", "vcpkg::openssl[ssl3]") \ No newline at end of file -- cgit v1.3.1 From 0ec3e11de6b03a3ffca30da5cf0e49d5052893a4 Mon Sep 17 00:00:00 2001 From: FireFight <2268561366@qq.com> Date: Sun, 8 Feb 2026 20:16:38 +0800 Subject: fix vcpkg tests --- tests/projects/package/vcpkg/.gitignore | 2 -- tests/projects/package/vcpkg/src/main.cpp | 3 +-- tests/projects/package/vcpkg/xmake.lua | 2 ++ .../projects/package/vcpkg_dependency/src/main.cpp | 26 +++++++++++++--------- tests/projects/package/vcpkg_dependency/xmake.lua | 8 ++++--- tests/projects/package/vcpkg_manifest/.gitignore | 2 -- tests/projects/package/vcpkg_manifest/src/main.cpp | 3 +-- tests/projects/package/vcpkg_manifest/xmake.lua | 2 ++ 8 files changed, 26 insertions(+), 22 deletions(-) diff --git a/tests/projects/package/vcpkg/.gitignore b/tests/projects/package/vcpkg/.gitignore index 152105761..d66efff82 100644 --- a/tests/projects/package/vcpkg/.gitignore +++ b/tests/projects/package/vcpkg/.gitignore @@ -4,5 +4,3 @@ build/ # MacOS Cache .DS_Store - - diff --git a/tests/projects/package/vcpkg/src/main.cpp b/tests/projects/package/vcpkg/src/main.cpp index 7c435d251..e64ad9bc2 100644 --- a/tests/projects/package/vcpkg/src/main.cpp +++ b/tests/projects/package/vcpkg/src/main.cpp @@ -2,8 +2,7 @@ using namespace std; -int main(int argc, char** argv) -{ +int main(int argc, char** argv) { cout << "hello world!" << endl; return 0; } diff --git a/tests/projects/package/vcpkg/xmake.lua b/tests/projects/package/vcpkg/xmake.lua index 3f5dbcf55..3abedd205 100644 --- a/tests/projects/package/vcpkg/xmake.lua +++ b/tests/projects/package/vcpkg/xmake.lua @@ -1,3 +1,5 @@ +add_rules("mode.debug", "mode.release") + add_requires("vcpkg::zlib", "vcpkg::pcre2") add_requires("vcpkg::boost[core]", {alias = "boost"}) diff --git a/tests/projects/package/vcpkg_dependency/src/main.cpp b/tests/projects/package/vcpkg_dependency/src/main.cpp index e5fdd37c5..9a79c7c14 100644 --- a/tests/projects/package/vcpkg_dependency/src/main.cpp +++ b/tests/projects/package/vcpkg_dependency/src/main.cpp @@ -1,16 +1,20 @@ -#include -#include -#include #include +#include +#include +#include + +int main(int argc, char **argv) { + // test for opencolorio, opencolorio is one of the dependencies of openimageio. + auto transform = OCIO_NAMESPACE::ColorSpaceTransform::Create(); + + // test for openimageio. + auto write_image = OIIO::ImageInput::open("test.png"); + + // test for boost-system, boost-system is one of the dependencies of boost-system. + boost::system::error_code ec; -using namespace std; + // test for boost-filesystem. + boost::filesystem::exists("test.png", ec); -int main(int argc, char** argv) -{ - namespace OCIO = OCIO_NAMESPACE; - EVP_MD_CTX* sha256 = EVP_MD_CTX_new(); - EVP_DigestInit_ex(sha256, EVP_sha256(), nullptr); - auto write_image = OIIO::ImageOutput::create("test.png"); - cout << "hello world!" << endl; return 0; } diff --git a/tests/projects/package/vcpkg_dependency/xmake.lua b/tests/projects/package/vcpkg_dependency/xmake.lua index 2cccc00e7..ac4950c4c 100644 --- a/tests/projects/package/vcpkg_dependency/xmake.lua +++ b/tests/projects/package/vcpkg_dependency/xmake.lua @@ -1,10 +1,12 @@ set_languages("c++17") set_encodings("utf-8") -add_requires("vcpkg::openimageio", { configs = { shared = true } }) -add_requires("vcpkg::openssl[ssl3]", { configs = { shared = true } }) +add_rules("mode.debug", "mode.release") + +add_requires("vcpkg::openimageio[jpegxl,libraw,webp]", { configs = { shared = true } }) +add_requires("vcpkg::boost-filesystem", { alias = "filesystem" }) target("test") set_kind("binary") add_files("src/*.cpp") - add_packages("vcpkg::openimageio", "vcpkg::openssl[ssl3]") \ No newline at end of file + add_packages("vcpkg::openimageio[jpegxl,libraw,webp]", "filesystem") diff --git a/tests/projects/package/vcpkg_manifest/.gitignore b/tests/projects/package/vcpkg_manifest/.gitignore index 152105761..d66efff82 100644 --- a/tests/projects/package/vcpkg_manifest/.gitignore +++ b/tests/projects/package/vcpkg_manifest/.gitignore @@ -4,5 +4,3 @@ build/ # MacOS Cache .DS_Store - - diff --git a/tests/projects/package/vcpkg_manifest/src/main.cpp b/tests/projects/package/vcpkg_manifest/src/main.cpp index 7c435d251..e64ad9bc2 100644 --- a/tests/projects/package/vcpkg_manifest/src/main.cpp +++ b/tests/projects/package/vcpkg_manifest/src/main.cpp @@ -2,8 +2,7 @@ using namespace std; -int main(int argc, char** argv) -{ +int main(int argc, char** argv) { cout << "hello world!" << endl; return 0; } diff --git a/tests/projects/package/vcpkg_manifest/xmake.lua b/tests/projects/package/vcpkg_manifest/xmake.lua index 8a851328b..0814b817e 100644 --- a/tests/projects/package/vcpkg_manifest/xmake.lua +++ b/tests/projects/package/vcpkg_manifest/xmake.lua @@ -1,3 +1,5 @@ +add_rules("mode.debug", "mode.release") + add_requires("vcpkg::zlib 1.2.11+10") add_requires("vcpkg::fmt >=8.0.1", {configs = {baseline = "50fd3d9957195575849a49fa591e645f1d8e7156"}}) add_requires("vcpkg::libpng", {configs = {features = {"apng"}}}) -- cgit v1.3.1 From e592136e1836295385ef9ef725efd7e9c7c1ae93 Mon Sep 17 00:00:00 2001 From: FireFight <2268561366@qq.com> Date: Mon, 9 Feb 2026 13:11:54 +0800 Subject: fix find vcpkg package --- .../modules/package/manager/vcpkg/find_package.lua | 185 +++++++++++---------- 1 file changed, 100 insertions(+), 85 deletions(-) diff --git a/xmake/modules/package/manager/vcpkg/find_package.lua b/xmake/modules/package/manager/vcpkg/find_package.lua index 359e7dfa2..bd41e215c 100644 --- a/xmake/modules/package/manager/vcpkg/find_package.lua +++ b/xmake/modules/package/manager/vcpkg/find_package.lua @@ -63,6 +63,74 @@ function _find_package_from_pkgconfig(pkgconfig_files, opt) end end +function _get_package_info(name, triplet, infodirs, arch, plat, mode) + -- find the package info file, e.g. zlib_1.2.11-3_x86-windows[-static].list + local infofile = find_file(format("%s_*_%s.list", name, triplet), infodirs) + if not infofile then + return + end + local installdir = path.directory(path.directory(path.directory(infofile))) + + -- save includedirs, linkdirs and links + local result = nil + local pkgconfig_files = {} + local info = io.readfile(infofile) + if info then + for _, line in ipairs(info:split('\n')) do + line = line:trim() + if plat == "windows" then + line = line:lower() + end + + -- get pkgconfig files + if line:find(triplet .. (mode == "debug" and "/debug" or "") .. "/lib/pkgconfig/", 1, true) and line:endswith(".pc") then + table.insert(pkgconfig_files, line) + end + + -- get includedirs + if line:endswith("/include/") then + result = result or {} + result.includedirs = result.includedirs or {} + table.insert(result.includedirs, path.join(installdir, line)) + end + + -- get linkdirs and links + if (plat == "windows" and line:endswith(".lib")) or line:endswith(".a") or line:endswith(".so") then + if line:find(triplet .. (mode == "debug" and "/debug" or "") .. "/lib/", 1, true) then + result = result or {} + result.links = result.links or {} + result.linkdirs = result.linkdirs or {} + result.libfiles = result.libfiles or {} + table.insert(result.linkdirs, path.join(installdir, path.directory(line))) + table.insert(result.links, target.linkname(path.filename(line), {plat = plat})) + table.insert(result.libfiles, path.join(installdir, path.directory(line), path.filename(line))) + end + end + + -- add shared library directory (/bin/) to linkdirs for running with PATH on windows + if plat == "windows" and line:endswith(".dll") then + if line:find(plat .. (mode == "debug" and "/debug" or "") .. "/bin/", 1, true) then + result = result or {} + result.linkdirs = result.linkdirs or {} + result.libfiles = result.libfiles or {} + table.insert(result.linkdirs, path.join(installdir, path.directory(line))) + table.insert(result.libfiles, path.join(installdir, path.directory(line), path.filename(line))) + end + end + end + end + + -- find result from pkgconfig first + if #pkgconfig_files > 0 then + local pkgconfig_result = _find_package_from_pkgconfig(pkgconfig_files, {installdir = installdir, linkdirs = result and result.linkdirs}) + if pkgconfig_result then + result = pkgconfig_result + end + end + + return result +end + function _find_package(vcpkg, vcpkgdir, name, opt) -- get configs @@ -80,20 +148,6 @@ function _find_package(vcpkg, vcpkgdir, name, opt) arch = configurations.arch(arch) local triplet = configurations.triplet(configs, plat, arch) - -- find dependency package - local dependencypackage = {} - local _, dependinfo = os.iorunv(vcpkg, {"depend-info", name}) - if dependinfo then - for _, line in ipairs(dependinfo:split("\n", {plain = true})) do - if not line:startswith("vcpkg-") then - local packagename = line:match("^([^%[:]+)[^:]*:") - if packagename then - table.insert(dependencypackage, packagename) - end - end - end - end - -- get the vcpkg info directories local infodirs = {} if opt.installdir then @@ -101,85 +155,45 @@ function _find_package(vcpkg, vcpkgdir, name, opt) end table.join2(infodirs, path.join(vcpkgdir, "installed", "vcpkg", "info")) + -- find the package info file, e.g. zlib_1.2.11-3_x86-windows[-static].list + local infofile = find_file(format("%s_*_%s.list", name, triplet), infodirs) + if not infofile then + return + end + + -- find dependency package local result = nil - for _, dependencyname in ipairs(dependencypackage) do - -- find the package info file, e.g. zlib_1.2.11-3_x86-windows[-static].list - local infofile = find_file(format("%s_*_%s.list", dependencyname, triplet), infodirs) - if not infofile then - goto continue - -- return - end - local installdir = path.directory(path.directory(path.directory(infofile))) - - -- save includedirs, linkdirs and links - local pkgconfig_files = {} - local info = io.readfile(infofile) - if info then - for _, line in ipairs(info:split('\n')) do - line = line:trim() - if plat == "windows" then - line = line:lower() - end - - -- get pkgconfig files - if line:find(triplet .. (mode == "debug" and "/debug" or "") .. "/lib/pkgconfig/", 1, true) and line:endswith(".pc") then - table.insert(pkgconfig_files, line) - end - - -- get includedirs - if line:endswith("/include/") then - result = result or {} - result.includedirs = result.includedirs or {} - table.insert(result.includedirs, path.join(installdir, line)) - end - - -- get linkdirs and links - if (plat == "windows" and line:endswith(".lib")) or line:endswith(".a") or line:endswith(".so") then - if line:find(triplet .. (mode == "debug" and "/debug" or "") .. "/lib/", 1, true) then - result = result or {} - result.links = result.links or {} - result.linkdirs = result.linkdirs or {} - result.libfiles = result.libfiles or {} - table.insert(result.linkdirs, path.join(installdir, path.directory(line))) - table.insert(result.links, target.linkname(path.filename(line), {plat = plat})) - table.insert(result.libfiles, path.join(installdir, path.directory(line), path.filename(line))) - end - end - - -- add shared library directory (/bin/) to linkdirs for running with PATH on windows - if plat == "windows" and line:endswith(".dll") then - if line:find(plat .. (mode == "debug" and "/debug" or "") .. "/bin/", 1, true) then + local _, dependinfo = os.iorunv(vcpkg, {"depend-info", name}) + if dependinfo then + for _, line in ipairs(dependinfo:split("\n", {plain = true})) do + if not line:startswith("vcpkg-") then + local packagename = line:match("^([^%[:]+)[^:]*:") + if packagename then + local dependencyresult = _get_package_info(packagename, triplet, infodirs, arch, plat, mode) + if dependencyresult then result = result or {} - result.linkdirs = result.linkdirs or {} - result.libfiles = result.libfiles or {} - table.insert(result.linkdirs, path.join(installdir, path.directory(line))) - table.insert(result.libfiles, path.join(installdir, path.directory(line), path.filename(line))) + for key, dependencylist in pairs(dependencyresult) do + result[key] = result[key] or {} + for _, value in ipairs(dependencylist) do + table.insert(result[key], value) + end + end end end end end + end - -- find result from pkgconfig first - if #pkgconfig_files > 0 then - local pkgconfig_result = _find_package_from_pkgconfig(pkgconfig_files, {installdir = installdir, linkdirs = result and result.linkdirs}) - if pkgconfig_result then - result = pkgconfig_result - end - end - - -- save version - if result then - local infoname = path.basename(infofile) - local prefix = dependencyname - -- dependencyname maybe contains lua pattern characters, we need escape it. e.g. `-` - prefix = prefix:gsub("([%+%.%-%^%$%(%)%%])", "%%%1") - result.version = infoname:match(prefix .. "_(%d+%.?%d*%.?%d*.-)_" .. arch) - if not result.version then - result.version = infoname:match(prefix .. "_(%d+%.?%d*%.-)_" .. arch) - end + -- save version + if result then + local infoname = path.basename(infofile) + local prefix = name + -- name maybe contains lua pattern characters, we need escape it. e.g. `-` + prefix = prefix:gsub("([%+%.%-%^%$%(%)%%])", "%%%1") + result.version = infoname:match(prefix .. "_(%d+%.?%d*%.?%d*.-)_" .. arch) + if not result.version then + result.version = infoname:match(prefix .. "_(%d+%.?%d*%.-)_" .. arch) end - - ::continue:: end -- remove repeat @@ -191,6 +205,7 @@ function _find_package(vcpkg, vcpkgdir, name, opt) result.includedirs = table.unique(result.includedirs) end end + return result end -- cgit v1.3.1 From 0cca97947f2bcc453019bcedebac4a4eaf06afce Mon Sep 17 00:00:00 2001 From: FireFight <2268561366@qq.com> Date: Mon, 9 Feb 2026 22:06:00 +0800 Subject: set vcpkg order by command line arguments --- xmake/modules/package/manager/vcpkg/find_package.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmake/modules/package/manager/vcpkg/find_package.lua b/xmake/modules/package/manager/vcpkg/find_package.lua index bd41e215c..8e89bd211 100644 --- a/xmake/modules/package/manager/vcpkg/find_package.lua +++ b/xmake/modules/package/manager/vcpkg/find_package.lua @@ -163,7 +163,7 @@ function _find_package(vcpkg, vcpkgdir, name, opt) -- find dependency package local result = nil - local _, dependinfo = os.iorunv(vcpkg, {"depend-info", name}) + local _, dependinfo = os.iorunv(vcpkg, {"depend-info", name, "--sort=reverse"}) if dependinfo then for _, line in ipairs(dependinfo:split("\n", {plain = true})) do if not line:startswith("vcpkg-") then -- cgit v1.3.1 From 10153c43af376f10dfd77bf3ce26e48e62c35fbe Mon Sep 17 00:00:00 2001 From: ruki Date: Mon, 9 Feb 2026 22:38:06 +0800 Subject: Update find_package.lua --- xmake/modules/package/manager/vcpkg/find_package.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xmake/modules/package/manager/vcpkg/find_package.lua b/xmake/modules/package/manager/vcpkg/find_package.lua index 8e89bd211..fce1150a4 100644 --- a/xmake/modules/package/manager/vcpkg/find_package.lua +++ b/xmake/modules/package/manager/vcpkg/find_package.lua @@ -160,10 +160,10 @@ function _find_package(vcpkg, vcpkgdir, name, opt) if not infofile then return end - + -- find dependency package local result = nil - local _, dependinfo = os.iorunv(vcpkg, {"depend-info", name, "--sort=reverse"}) + local _, dependinfo = try { function () return os.iorunv(vcpkg, {"depend-info", name, "--sort=reverse"}) end } if dependinfo then for _, line in ipairs(dependinfo:split("\n", {plain = true})) do if not line:startswith("vcpkg-") then -- cgit v1.3.1 From 03935603aa49bc5c0dc7fd6777bd89ac05a37c91 Mon Sep 17 00:00:00 2001 From: ruki Date: Mon, 9 Feb 2026 22:38:37 +0800 Subject: Move language and encoding settings to target section --- tests/projects/package/vcpkg_dependency/xmake.lua | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/projects/package/vcpkg_dependency/xmake.lua b/tests/projects/package/vcpkg_dependency/xmake.lua index ac4950c4c..d309a3fc3 100644 --- a/tests/projects/package/vcpkg_dependency/xmake.lua +++ b/tests/projects/package/vcpkg_dependency/xmake.lua @@ -1,6 +1,3 @@ -set_languages("c++17") -set_encodings("utf-8") - add_rules("mode.debug", "mode.release") add_requires("vcpkg::openimageio[jpegxl,libraw,webp]", { configs = { shared = true } }) @@ -9,4 +6,6 @@ add_requires("vcpkg::boost-filesystem", { alias = "filesystem" }) target("test") set_kind("binary") add_files("src/*.cpp") + set_languages("c++17") + set_encodings("utf-8") add_packages("vcpkg::openimageio[jpegxl,libraw,webp]", "filesystem") -- cgit v1.3.1 From ffca998d007a44b3f14ab5548e336a9d16eb9b75 Mon Sep 17 00:00:00 2001 From: ruki Date: Mon, 9 Feb 2026 22:42:33 +0800 Subject: Update find_package.lua --- xmake/modules/package/manager/vcpkg/find_package.lua | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/xmake/modules/package/manager/vcpkg/find_package.lua b/xmake/modules/package/manager/vcpkg/find_package.lua index fce1150a4..3e2a3b828 100644 --- a/xmake/modules/package/manager/vcpkg/find_package.lua +++ b/xmake/modules/package/manager/vcpkg/find_package.lua @@ -174,9 +174,7 @@ function _find_package(vcpkg, vcpkgdir, name, opt) result = result or {} for key, dependencylist in pairs(dependencyresult) do result[key] = result[key] or {} - for _, value in ipairs(dependencylist) do - table.insert(result[key], value) - end + table.join2(result[key], dependencylist) end end end @@ -198,14 +196,14 @@ function _find_package(vcpkg, vcpkgdir, name, opt) -- remove repeat if result then - if result.linkdirs then - result.linkdirs = table.unique(result.linkdirs) - end - if result.includedirs then - result.includedirs = table.unique(result.includedirs) + for k, v in pairs(result) do + if k == "links" or k == "syslinks" or k == "frameworks" then + result[k] = table.unwrap(table.reverse_unique(v)) + else + result[k] = table.unwrap(table.unique(v)) + end end end - return result end -- cgit v1.3.1 From f59f6f76dc143b362215ba7fd53296036fb05d3a Mon Sep 17 00:00:00 2001 From: FireFight <2268561366@qq.com> Date: Mon, 9 Feb 2026 23:05:53 +0800 Subject: add triplet in vcpkg command line --- xmake/modules/package/manager/vcpkg/find_package.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmake/modules/package/manager/vcpkg/find_package.lua b/xmake/modules/package/manager/vcpkg/find_package.lua index 3e2a3b828..045adf050 100644 --- a/xmake/modules/package/manager/vcpkg/find_package.lua +++ b/xmake/modules/package/manager/vcpkg/find_package.lua @@ -163,7 +163,7 @@ function _find_package(vcpkg, vcpkgdir, name, opt) -- find dependency package local result = nil - local _, dependinfo = try { function () return os.iorunv(vcpkg, {"depend-info", name, "--sort=reverse"}) end } + local _, dependinfo = try { function () return os.iorunv(vcpkg, {"depend-info", name, "--sort=reverse", "--triplet=" .. triplet}) end } if dependinfo then for _, line in ipairs(dependinfo:split("\n", {plain = true})) do if not line:startswith("vcpkg-") then -- cgit v1.3.1 From 85b9b630211b2689df96716d1fe677aeb5d9fd6a Mon Sep 17 00:00:00 2001 From: ruki Date: Tue, 10 Feb 2026 14:24:36 +0800 Subject: Apply suggestion from @gemini-code-assist[bot] Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- tests/projects/package/vcpkg_dependency/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/projects/package/vcpkg_dependency/src/main.cpp b/tests/projects/package/vcpkg_dependency/src/main.cpp index 9a79c7c14..4955734dc 100644 --- a/tests/projects/package/vcpkg_dependency/src/main.cpp +++ b/tests/projects/package/vcpkg_dependency/src/main.cpp @@ -10,7 +10,7 @@ int main(int argc, char **argv) { // test for openimageio. auto write_image = OIIO::ImageInput::open("test.png"); - // test for boost-system, boost-system is one of the dependencies of boost-system. + // test for boost-system, boost-system is one of the dependencies of boost-filesystem. boost::system::error_code ec; // test for boost-filesystem. -- cgit v1.3.1