diff options
| author | ruki <[email protected]> | 2021-04-11 22:03:13 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-04-11 22:03:13 +0800 |
| commit | d2a9b2bf6d08ef5fcc70958f23df744581334c60 (patch) | |
| tree | 9b58da90acba40225314ef190664b7b7f974bd09 | |
| parent | ec1735efd25891c14e488097cfb7f9d12933bbbe (diff) | |
add apt::find_package
| -rw-r--r-- | xmake/modules/package/manager/apt/find_package.lua | 87 | ||||
| -rw-r--r-- | xmake/modules/package/manager/conda/find_package.lua | 5 |
2 files changed, 88 insertions, 4 deletions
diff --git a/xmake/modules/package/manager/apt/find_package.lua b/xmake/modules/package/manager/apt/find_package.lua new file mode 100644 index 000000000..dd017924e --- /dev/null +++ b/xmake/modules/package/manager/apt/find_package.lua @@ -0,0 +1,87 @@ +--!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_package.lua +-- + +-- imports +import("core.base.option") +import("core.project.config") +import("core.project.target") +import("lib.detect.find_tool") + +-- find package using the dpkg package manager +-- +-- @param name the package name +-- @param opt the options, e.g. {verbose = true, version = "1.12.0") +-- +function main(name, opt) + + -- check + opt = opt or {} + if not is_host(opt.plat) or os.arch() ~= opt.arch then + return + end + + -- find dpkg + local dpkg = find_tool("dpkg") + if not dpkg then + raise("dpkg not found!") + end + + -- find package + local result = nil + local listinfo = try {function () return os.iorunv(dpkg.program, {"--listfiles", name}) end} + if listinfo then + for _, line in ipairs(listinfo:split('\n', {plain = true})) do + line = line:trim() + + -- get includedirs + local pos = line:find("include/", 1, true) + if pos then + result = result or {} + result.includedirs = result.includedirs or {} + table.insert(result.includedirs, line:sub(1, pos + 7)) + end + + -- get linkdirs and links + if line:endswith(".a") or line:endswith(".so") then + result = result or {} + result.links = result.links or {} + result.linkdirs = result.linkdirs or {} + result.libfiles = result.libfiles or {} + table.insert(result.linkdirs, path.directory(line)) + table.insert(result.links, target.linkname(path.filename(line))) + table.insert(result.libfiles, path.join(path.directory(line), path.filename(line))) + end + end + end + + -- remove repeat + if result then + if result.links then + result.links = table.unique(result.links) + end + if result.linkdirs then + result.linkdirs = table.unique(result.linkdirs) + end + if result.includedirs then + result.includedirs = table.unique(result.includedirs) + end + end + return result +end diff --git a/xmake/modules/package/manager/conda/find_package.lua b/xmake/modules/package/manager/conda/find_package.lua index 77d531f9b..b7637a685 100644 --- a/xmake/modules/package/manager/conda/find_package.lua +++ b/xmake/modules/package/manager/conda/find_package.lua @@ -108,9 +108,6 @@ function main(name, opt) local packagedir = metainfo.extracted_package_dir for _, line in ipairs(metainfo.files) do line = line:trim() - if plat == "windows" then - line = line:lower() - end -- get includedirs local pos = line:find("include/", 1, true) @@ -132,7 +129,7 @@ function main(name, opt) end -- add shared library directory (/bin/) to linkdirs for running with PATH on windows - if plat == "windows" and line:endswith(".dll") then + if opt.plat == "windows" and line:endswith(".dll") then result = result or {} result.linkdirs = result.linkdirs or {} result.libfiles = result.libfiles or {} |
