diff options
| author | ruki <[email protected]> | 2025-01-11 00:02:46 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-01-11 00:02:46 +0800 |
| commit | ebc885cb9b011a8fcf18a78161b32e3dfecce3cd (patch) | |
| tree | 3752b67f3f82a864760c45afa7b31f4394fce675 | |
| parent | e470863c24280ad3566d35b16ad184d3781510af (diff) | |
| parent | aca01466c20ab4ab339df31ba507c241606bab25 (diff) | |
Merge pull request #6055 from xmake-io/pkgconfig
check pkgconfig/cmake importfiles for package
| -rw-r--r-- | xmake/core/package/package.lua | 24 | ||||
| -rw-r--r-- | xmake/modules/lib/detect/check_importfiles.lua | 75 |
2 files changed, 99 insertions, 0 deletions
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua index 741ca318c..ea33e24fa 100644 --- a/xmake/core/package/package.lua +++ b/xmake/core/package/package.lua @@ -2712,6 +2712,30 @@ function _instance:check_fcsnippets(snippets, opt) return sandbox_module.import("lib.detect.check_fcsnippets", {anonymous = true})(snippets, opt) end +-- check the given importfiles? +-- +-- @param names the import filenames (without .pc/.cmake extension), e.g. pkgconfig::libxml-2.0, cmake::CURL +-- @param opt the argument options +-- +-- @return true or false, errors +-- +function _instance:check_importfiles(names, opt) + opt = opt or {} + if opt.PKG_CONFIG_PATH == nil then + local PKG_CONFIG_PATH = {} + local linkdirs = table.wrap(self:get("linkdirs") or "lib") + local installdir = self:installdir() + for _, linkdir in ipairs(linkdirs) do + table.insert(PKG_CONFIG_PATH, path.join(installdir, linkdir, "pkgconfig")) + end + opt.PKG_CONFIG_PATH = PKG_CONFIG_PATH + end + if opt.CMAKE_PREFIX_PATH == nil then + opt.CMAKE_PREFIX_PATH = self:installdir() + end + return sandbox_module.import("lib.detect.check_importfiles", {anonymous = true})(names or ("pkgconfig::" .. self:name()), opt) +end + -- the current mode is belong to the given modes? function package._api_is_mode(interp, ...) return config.is_mode(...) diff --git a/xmake/modules/lib/detect/check_importfiles.lua b/xmake/modules/lib/detect/check_importfiles.lua new file mode 100644 index 000000000..f364c36f5 --- /dev/null +++ b/xmake/modules/lib/detect/check_importfiles.lua @@ -0,0 +1,75 @@ +--!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 check_importfiles.lua +-- + +-- imports +import("core.base.option") +import("lib.detect.pkgconfig") +import("package.manager.cmake.find_package", {alias = "cmake_find_package"}) + +-- check the given importfiles for pkgconfig/cmake +-- +-- @param names the import filenames (without .pc/.cmake suffix), e.g. pkgconfig::libxml-2.0, cmake::CURL +-- @param opt the argument options, e.g. { verbose = true, configdirs = {"lib"}} +-- +function main(names, opt) + local verbose + if opt.verbose or option.get("verbose") or option.get("diagnosis") then + verbose = true + end + for _, name in ipairs(names) do + local kind + local parts = name:split("::") + if #parts == 2 then + kind = parts[1] + name = parts[2] + end + if kind == nil then + kind = "pkgconfig" + end + if verbose then + cprint("${dim}> checking for %s/%s", kind, name) + end + if kind == "pkgconfig" then + opt.configdirs = opt.PKG_CONFIG_PATH + local result = pkgconfig.libinfo(name, opt) + if verbose and result then + print(result) + end + if not result then + return false, string.format("pkgconfig/%s.pc not found!", name) + end + elseif kind == "cmake" then + if opt.CMAKE_PREFIX_PATH then + opt.configs = opt.configs or {} + opt.configs.envs = opt.configs.envs or {} + opt.configs.envs.CMAKE_PREFIX_PATH = path.joinenv(table.wrap(opt.CMAKE_PREFIX_PATH)) + end + local result = cmake_find_package(name, opt) + if verbose and result then + print(result) + end + if not result then + return false, string.format("cmake/%s.cmake not found!", name) + end + end + end + return true +end + |
