diff options
| author | ruki <[email protected]> | 2021-06-01 00:45:57 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-06-01 00:45:57 +0800 |
| commit | 3c1335a5ef10f4f406db3599b1ec8af95da53676 (patch) | |
| tree | 7e5bda9075d7e9429d154d9a71591b11f6019920 | |
| parent | 0e7407de833067b88721bceb934999fe7fa0da8f (diff) | |
improve find vcpkgdir
| -rw-r--r-- | xmake/modules/detect/sdks/find_vcpkgdir.lua | 64 | ||||
| -rw-r--r-- | xmake/modules/detect/tools/find_vcpkg.lua | 11 | ||||
| -rw-r--r-- | xmake/modules/package/manager/vcpkg/find_package.lua | 36 |
3 files changed, 70 insertions, 41 deletions
diff --git a/xmake/modules/detect/sdks/find_vcpkgdir.lua b/xmake/modules/detect/sdks/find_vcpkgdir.lua new file mode 100644 index 000000000..d2f6bd3fd --- /dev/null +++ b/xmake/modules/detect/sdks/find_vcpkgdir.lua @@ -0,0 +1,64 @@ +--!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 find_vcpkgdir.lua +-- + +-- imports +import("core.base.option") +import("core.base.global") +import("core.project.config") +import("core.cache.detectcache") +import("lib.detect.find_tool") + +-- find vcpkgdir +function main() + local vcpkgdir = detectcache:get("detect.sdks.find_vcpkgdir") + if vcpkgdir == nil then + if not vcpkgdir then + vcpkgdir = config.get("vcpkg") or global.get("vcpkg") + if vcpkgdir then + if os.isfile(vcpkgdir) then + vcpkgdir = path.directory(vcpkgdir) + end + end + end + if not vcpkgdir then + vcpkgdir = os.getenv("VCPKG_ROOT") or os.getenv("VCPKG_INSTALLATION_ROOT") + end + if not vcpkgdir and is_host("macosx", "linux") then + local brew = find_tool("brew") + if brew then + dir = try + { + function () + return os.iorunv(brew.program, {"--prefix", "vcpkg"}) + end + } + end + if dir then + dir = path.join(dir:trim(), "libexec") + if os.isdir(path.join(dir, "installed")) then + vcpkgdir = dir + end + end + end + detectcache:set("detect.sdks.find_vcpkgdir", vcpkgdir or false) + detectcache:save() + end + return vcpkgdir or nil +end diff --git a/xmake/modules/detect/tools/find_vcpkg.lua b/xmake/modules/detect/tools/find_vcpkg.lua index 13eb032dd..46ae1ea36 100644 --- a/xmake/modules/detect/tools/find_vcpkg.lua +++ b/xmake/modules/detect/tools/find_vcpkg.lua @@ -21,8 +21,8 @@ -- imports import("lib.detect.find_file") import("lib.detect.find_program") -import("core.base.global") import("core.project.config") +import("detect.sdks.find_vcpkgdir") -- find vcpkg -- @@ -46,12 +46,9 @@ function main(opt) -- init the search directories local paths = {} - local vcpkg = config.get("vcpkg") or global.get("vcpkg") - if vcpkg then - if os.isfile(vcpkg) then - vcpkg = path.directory(vcpkg) - end - table.insert(paths, vcpkg) + local vcpkgdir = find_vcpkgdir() + if vcpkgdir then + table.insert(paths, vcpkgdir) end if is_host("windows") then -- attempt to read path info after running `vcpkg integrate install` diff --git a/xmake/modules/package/manager/vcpkg/find_package.lua b/xmake/modules/package/manager/vcpkg/find_package.lua index 601b36f48..6fe68c8ed 100644 --- a/xmake/modules/package/manager/vcpkg/find_package.lua +++ b/xmake/modules/package/manager/vcpkg/find_package.lua @@ -24,39 +24,7 @@ import("lib.detect.find_library") import("lib.detect.find_tool") import("core.project.config") import("core.project.target") - --- find vcpkg root directory -function _find_vcpkgdir() - local vcpkgdir = _g.vcpkgdir - if vcpkgdir == nil then - local vcpkg = find_tool("vcpkg") - if vcpkg then - local dir = path.directory(vcpkg.program) - if os.isdir(path.join(dir, "installed")) then - vcpkgdir = dir - elseif is_host("macosx", "linux") then - local brew = find_tool("brew") - if brew then - dir = try - { - function () - return os.iorunv(brew.program, {"--prefix", "vcpkg"}) - end - } - end - if dir then - dir = path.join(dir:trim(), "libexec") - if os.isdir(path.join(dir, "installed")) then - vcpkgdir = dir - end - end - - end - end - _g.vcpkgdir = vcpkgdir or false - end - return vcpkgdir or nil -end +import("detect.sdks.find_vcpkgdir") -- find package from the vcpkg package manager -- @@ -66,7 +34,7 @@ end function main(name, opt) -- attempt to find vcpkg directory - local vcpkgdir = _find_vcpkgdir() + local vcpkgdir = find_vcpkgdir() if not vcpkgdir then return end |
