summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2021-09-29 22:38:25 +0800
committerruki <[email protected]>2021-09-29 22:38:25 +0800
commit9b6ed10af9394ac3db541f848ab3405b7d0daf3d (patch)
tree0231379130068a4d342d37271b250c9e30e2f979
parente582b4601a0821bf9a94ac1b568aff55c842131e (diff)
improve find_package
-rw-r--r--tests/projects/c/library_with_cmakelists/xmake.lua4
-rw-r--r--xmake/core/package/package.lua15
-rw-r--r--xmake/core/sandbox/modules/import/lib/detect/find_program.lua4
-rw-r--r--xmake/modules/package/manager/xmake/find_package.lua6
4 files changed, 25 insertions, 4 deletions
diff --git a/tests/projects/c/library_with_cmakelists/xmake.lua b/tests/projects/c/library_with_cmakelists/xmake.lua
index 4bf632e08..e27fcbafa 100644
--- a/tests/projects/c/library_with_cmakelists/xmake.lua
+++ b/tests/projects/c/library_with_cmakelists/xmake.lua
@@ -1,8 +1,12 @@
add_rules("mode.debug", "mode.release")
+local cachedir = path.join(os.scriptdir(), "build", "cache")
+local packagesdir = path.join(os.scriptdir(), "build", "packages")
package("foo")
add_deps("cmake")
set_sourcedir("foo")
+ set_cachedir(cachedir)
+ set_installdir(packagesdir)
on_install(function (package)
local configs = {}
table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index a29c4fd1f..5c7a04d34 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -521,8 +521,16 @@ end
-- get the cached directory of this package
function _instance:cachedir()
- local name = self:name():lower():gsub("::", "_")
- return path.join(package.cachedir(), name:sub(1, 1):lower(), name, self:version_str())
+ local cachedir = self._CACHEDIR
+ if not cachedir then
+ cachedir = self:get("cachedir")
+ if not cachedir then
+ local name = self:name():lower():gsub("::", "_")
+ cachedir = path.join(package.cachedir(), name:sub(1, 1):lower(), name, self:version_str())
+ end
+ self._CACHEDIR = cachedir
+ end
+ return cachedir
end
-- get the installed directory of this package
@@ -1213,6 +1221,7 @@ function _instance:find_tool(name, opt)
opt = opt or {}
self._find_tool = self._find_tool or sandbox_module.import("lib.detect.find_tool", {anonymous = true})
return self._find_tool(name, {cachekey = opt.cachekey or "fetch_package_system",
+ installdir = self:installdir(),
require_version = opt.require_version,
norun = opt.norun,
force = opt.force})
@@ -1228,6 +1237,7 @@ function _instance:find_package(name, opt)
end
return self._find_package(name, {
force = opt.force,
+ installdir = self:installdir(),
require_version = opt.require_version,
mode = self:mode(),
plat = self:plat(),
@@ -1721,6 +1731,7 @@ function package.apis()
, "package.set_description"
, "package.set_parallelize"
, "package.set_sourcedir"
+ , "package.set_cachedir"
, "package.set_installdir"
-- package.add_xxx
, "package.add_deps"
diff --git a/xmake/core/sandbox/modules/import/lib/detect/find_program.lua b/xmake/core/sandbox/modules/import/lib/detect/find_program.lua
index 4e5eadc14..59a01f746 100644
--- a/xmake/core/sandbox/modules/import/lib/detect/find_program.lua
+++ b/xmake/core/sandbox/modules/import/lib/detect/find_program.lua
@@ -139,7 +139,9 @@ end
function sandbox_lib_detect_find_program._find_from_packages(name, opt)
-- get the manifest file of package, e.g. ~/.xmake/packages/g/git/1.1.12/ed41d5327fad3fc06fe376b4a94f62ef/manifest.txt
- local manifest_file = path.join(package.installdir(), name:sub(1, 1), name, opt.require_version, opt.buildhash, "manifest.txt")
+ opt = opt or {}
+ local installdir = opt.installdir or path.join(package.installdir(), name:sub(1, 1), name, opt.require_version, opt.buildhash)
+ local manifest_file = path.join(installdir, "manifest.txt")
if not os.isfile(manifest_file) then
return
end
diff --git a/xmake/modules/package/manager/xmake/find_package.lua b/xmake/modules/package/manager/xmake/find_package.lua
index c594c8135..503d1beda 100644
--- a/xmake/modules/package/manager/xmake/find_package.lua
+++ b/xmake/modules/package/manager/xmake/find_package.lua
@@ -38,7 +38,11 @@ function _find_package_from_repo(name, opt)
-- find the manifest file of package, e.g. ~/.xmake/packages/z/zlib/1.1.12/ed41d5327fad3fc06fe376b4a94f62ef/manifest.txt
local packagedirs = {}
- table.insert(packagedirs, path.join(package.installdir(), name:lower():sub(1, 1), name:lower(), opt.require_version, opt.buildhash))
+ if opt.installdir then
+ table.insert(packagedirs, opt.installdir)
+ else
+ table.insert(packagedirs, path.join(package.installdir(), name:lower():sub(1, 1), name:lower(), opt.require_version, opt.buildhash))
+ end
local manifest_file = find_file("manifest.txt", packagedirs)
if not manifest_file then
return