diff options
| author | ruki <[email protected]> | 2023-03-02 22:43:12 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2023-03-02 22:43:12 +0800 |
| commit | 38a4a383cd9df2ec732ccd78194666cd97299050 (patch) | |
| tree | fda92e77472879ac65a47dd1df793a94f2ed08b1 | |
| parent | 415c4ad77003cd20d9f4edeb813fafb6dd31b3ba (diff) | |
improve plat/arch for package
| -rw-r--r-- | xmake/core/package/package.lua | 29 | ||||
| -rw-r--r-- | xmake/core/sandbox/modules/import/core/package/package.lua | 4 | ||||
| -rw-r--r-- | xmake/modules/private/action/require/impl/package.lua | 8 |
3 files changed, 34 insertions, 7 deletions
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua index 28a130405..c0b60d289 100644 --- a/xmake/core/package/package.lua +++ b/xmake/core/package/package.lua @@ -2445,9 +2445,10 @@ function package.load_from_project(packagename, project) end -- load the package from the package directory or package description file -function package.load_from_repository(packagename, repo, packagedir, packagefile) +function package.load_from_repository(packagename, repo, packagedir, opt) -- get it directly from cache first + opt = opt or {} local instance = package._memcache():get2("packages", packagename) if instance then return instance @@ -2459,8 +2460,8 @@ function package.load_from_repository(packagename, repo, packagedir, packagefile end -- find the package script path - local scriptpath = packagefile - if not packagefile and packagedir then + local scriptpath = opt.packagefile + if not opt.packagefile and packagedir then scriptpath = path.join(packagedir, "xmake.lua") end if not scriptpath or not os.isfile(scriptpath) then @@ -2470,6 +2471,20 @@ function package.load_from_repository(packagename, repo, packagedir, packagefile -- get interpreter local interp = package._interpreter() + -- we need modify plat/arch in description scope at same time + -- if plat/arch are passed to add_requires. + -- + -- @see https://github.com/orgs/xmake-io/discussions/3439 + -- + -- e.g. add_requires("zlib~mingw", {plat = "mingw", arch = "x86_64"}) + -- + if opt.plat then + package._memcache():set("target_plat", opt.plat) + end + if opt.arch then + package._memcache():set("target_arch", opt.arch) + end + -- load script local ok, errors = interp:load(scriptpath) if not ok then @@ -2491,6 +2506,14 @@ function package.load_from_repository(packagename, repo, packagedir, packagefile -- new an instance instance = _instance.new(packagename, packageinfo, {scriptdir = path.directory(scriptpath), repo = repo}) + -- reset plat/arch + if opt.plat then + package._memcache():set("target_plat", nil) + end + if opt.arch then + package._memcache():set("target_arch", nil) + end + -- save instance to the cache package._memcache():set2("packages", instance) return instance diff --git a/xmake/core/sandbox/modules/import/core/package/package.lua b/xmake/core/sandbox/modules/import/core/package/package.lua index f1ec8799f..906033fde 100644 --- a/xmake/core/sandbox/modules/import/core/package/package.lua +++ b/xmake/core/sandbox/modules/import/core/package/package.lua @@ -52,8 +52,8 @@ function sandbox_core_package_package.load_from_system(packagename) end -- load the package from repositories -function sandbox_core_package_package.load_from_repository(packagename, repo, packagedir, packagefile) - local instance, errors = package.load_from_repository(packagename, repo, packagedir, packagefile) +function sandbox_core_package_package.load_from_repository(packagename, repo, packagedir, opt) + local instance, errors = package.load_from_repository(packagename, repo, packagedir, opt) if not instance then raise(errors) end diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua index f85a0095c..01236d4e1 100644 --- a/xmake/modules/private/action/require/impl/package.lua +++ b/xmake/modules/private/action/require/impl/package.lua @@ -212,9 +212,10 @@ end -- load package package from repositories function _load_package_from_repository(packagename, opt) + opt = opt or {} local packagedir, repo = repository.packagedir(packagename, opt) if packagedir then - return core_package.load_from_repository(packagename, repo, packagedir) + return core_package.load_from_repository(packagename, repo, packagedir, {plat = opt.plat, arch = opt.arch}) end end @@ -750,7 +751,10 @@ function _load_package(packagename, requireinfo, opt) local from_repo = false if not package then package = _load_package_from_repository(packagename, { - name = requireinfo.reponame, locked_repo = locked_requireinfo and locked_requireinfo.repo}) + plat = requireinfo.plat, + arch = requireinfo.arch, + name = requireinfo.reponame, + locked_repo = locked_requireinfo and locked_requireinfo.repo}) if package then from_repo = true end |
