summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2021-06-01 00:45:57 +0800
committerruki <[email protected]>2021-06-01 00:45:57 +0800
commit3c1335a5ef10f4f406db3599b1ec8af95da53676 (patch)
tree7e5bda9075d7e9429d154d9a71591b11f6019920
parent0e7407de833067b88721bceb934999fe7fa0da8f (diff)
improve find vcpkgdir
-rw-r--r--xmake/modules/detect/sdks/find_vcpkgdir.lua64
-rw-r--r--xmake/modules/detect/tools/find_vcpkg.lua11
-rw-r--r--xmake/modules/package/manager/vcpkg/find_package.lua36
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