summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2017-06-12 23:15:52 +0800
committerruki <[email protected]>2017-06-12 23:15:52 +0800
commit0fc304af564ce6215df38fbda571d3ee204e585d (patch)
treef410caa7920fe822204cb84659bbea4cde21ef2a
parentfe5c0e9a6b99ae6ad3ab7ab24d50018fe1c8442d (diff)
use brew to improve find_package()
-rw-r--r--xmake/core/base/os.lua1
-rw-r--r--xmake/core/sandbox/modules/import/lib/detect/find_package.lua19
-rw-r--r--xmake/modules/detect/tool/find_brew.lua55
-rw-r--r--xmake/modules/lib/detect/pkg_config.lua14
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