diff options
| author | ruki <[email protected]> | 2021-09-29 22:38:25 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-09-29 22:38:25 +0800 |
| commit | 9b6ed10af9394ac3db541f848ab3405b7d0daf3d (patch) | |
| tree | 0231379130068a4d342d37271b250c9e30e2f979 | |
| parent | e582b4601a0821bf9a94ac1b568aff55c842131e (diff) | |
improve find_package
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 |
