diff options
| author | ruki <[email protected]> | 2017-06-12 23:15:52 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2017-06-12 23:15:52 +0800 |
| commit | 0fc304af564ce6215df38fbda571d3ee204e585d (patch) | |
| tree | f410caa7920fe822204cb84659bbea4cde21ef2a | |
| parent | fe5c0e9a6b99ae6ad3ab7ab24d50018fe1c8442d (diff) | |
use brew to improve find_package()
| -rw-r--r-- | xmake/core/base/os.lua | 1 | ||||
| -rw-r--r-- | xmake/core/sandbox/modules/import/lib/detect/find_package.lua | 19 | ||||
| -rw-r--r-- | xmake/modules/detect/tool/find_brew.lua | 55 | ||||
| -rw-r--r-- | xmake/modules/lib/detect/pkg_config.lua | 14 |
4 files changed, 86 insertions, 3 deletions
diff --git a/xmake/core/base/os.lua b/xmake/core/base/os.lua index 5c7ca78e2..84af2dbed 100644 --- a/xmake/core/base/os.lua +++ b/xmake/core/base/os.lua @@ -677,7 +677,6 @@ function os.addenv(name, ...) -- append values return os.setenv(name, table.concat({...}, seperator) .. seperator .. (os.getenv(name) or "")) - end -- get the program directory diff --git a/xmake/core/sandbox/modules/import/lib/detect/find_package.lua b/xmake/core/sandbox/modules/import/lib/detect/find_package.lua index 0c19ac4e0..3062d6799 100644 --- a/xmake/core/sandbox/modules/import/lib/detect/find_package.lua +++ b/xmake/core/sandbox/modules/import/lib/detect/find_package.lua @@ -39,6 +39,7 @@ local import = require("sandbox/modules/import") local find_file = import("lib.detect.find_file") local find_library = import("lib.detect.find_library") local pkg_config = import("lib.detect.pkg_config") +local find_brew = import("detect.tool.find_brew") -- find package from repositories function sandbox_lib_detect_find_package._find_from_repositories(name, opt) @@ -60,7 +61,23 @@ end -- find package from pkg-config function sandbox_lib_detect_find_package._find_from_pkg_config(name, opt) - return pkg_config.find(name, {version = true}) + + -- get pkg-config path from brew + local brew = find_brew() + local configdirs = nil + if brew then + local ok, prefix = os.iorunv(brew, {"--prefix", name}) + if ok and prefix then + prefix = path.join(prefix:trim(), "lib", "pkgconfig") + if os.isdir(prefix) then + configdirs = prefix + end + end + end + + + -- find package + return pkg_config.find(name, {version = true, configdirs = configdirs}) end -- find package from system directories diff --git a/xmake/modules/detect/tool/find_brew.lua b/xmake/modules/detect/tool/find_brew.lua new file mode 100644 index 000000000..07fb8dae6 --- /dev/null +++ b/xmake/modules/detect/tool/find_brew.lua @@ -0,0 +1,55 @@ +--!The Make-like Build Utility based on Lua +-- +-- Licensed to the Apache Software Foundation (ASF) under one +-- or more contributor license agreements. See the NOTICE file +-- distributed with this work for additional information +-- regarding copyright ownership. The ASF licenses this file +-- to you 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 - 2017, TBOOX Open Source Group. +-- +-- @author ruki +-- @file find_brew.lua +-- + +-- imports +import("lib.detect.find_program") +import("lib.detect.find_programver") + +-- find brew +-- +-- @param opt the argument options, .e.g {version = true} +-- +-- @return program, version +-- +-- @code +-- +-- local brew = find_brew() +-- local brew, version = find_brew({version = true}) +-- +-- @endcode +-- +function main(opt) + + -- find program + local program = find_program("brew") + + -- find program version + local version = nil + if program and opt and opt.version then + version = find_programver(program) + end + + -- ok? + return program, version +end diff --git a/xmake/modules/lib/detect/pkg_config.lua b/xmake/modules/lib/detect/pkg_config.lua index 880db92a8..4a7140471 100644 --- a/xmake/modules/lib/detect/pkg_config.lua +++ b/xmake/modules/lib/detect/pkg_config.lua @@ -29,7 +29,7 @@ import("detect.tool.find_pkg_config") -- get package info -- -- @param name the package name --- @param opt the argument options, {version = true} +-- @param opt the argument options, {version = true, configdirs = {"/xxxx/pkgconfig/"}} -- -- @return {links = {"ssl", "crypto", "z"}, linkdirs = {""}, includedirs = {""}, version = ""} -- @@ -47,6 +47,13 @@ function info(name, opt) return end + -- add PKG_CONFIG_PATH + local configdirs = nil + if opt and opt.configdirs then + configdirs = os.getenv("PKG_CONFIG_PATH") + os.addenv("PKG_CONFIG_PATH", unpack(table.wrap(opt.configdirs))) + end + -- get libs and cflags local result = nil local flags = try { function () return os.iorunv(pkg_config, {"--libs", "--cflags", name}) end } @@ -92,6 +99,11 @@ function info(name, opt) end end + -- restore PKG_CONFIG_PATH + if configdirs then + os.setenv("PKG_CONFIG_PATH", configdirs) + end + -- ok? return result end |
