summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2021-11-02 22:42:36 +0800
committerruki <[email protected]>2021-11-02 22:42:36 +0800
commitf736ff4bcafeec2faf1cc95818d5fb1578b61aa6 (patch)
tree062f2640048cb5f3129b362f92579608701e5e6b
parent57ac15ded63c921ca913dd51adf039af842b8a1b (diff)
improve system::find_package
-rw-r--r--xmake/modules/package/manager/system/find_package.lua95
1 files changed, 65 insertions, 30 deletions
diff --git a/xmake/modules/package/manager/system/find_package.lua b/xmake/modules/package/manager/system/find_package.lua
index 692241309..1e0d58c77 100644
--- a/xmake/modules/package/manager/system/find_package.lua
+++ b/xmake/modules/package/manager/system/find_package.lua
@@ -26,36 +26,8 @@ import("lib.detect.pkgconfig")
import("detect.sdks.find_xcode")
import("core.project.config")
--- find package from the unix-like system directories
-function _find_package_from_unixdirs(name, links, opt)
-
- -- add default search includedirs on pc host
- local includedirs = table.wrap(opt.includedirs)
- if #includedirs == 0 then
- if opt.plat == "linux" or opt.plat == "macosx" then
- table.insert(includedirs, "/usr/local/include")
- table.insert(includedirs, "/usr/include")
- table.insert(includedirs, "/opt/local/include")
- table.insert(includedirs, "/opt/include")
- end
- end
-
- -- add default search linkdirs on pc host
- local linkdirs = table.wrap(opt.linkdirs)
- if #linkdirs == 0 then
- if opt.plat == "linux" or opt.plat == "macosx" then
- table.insert(linkdirs, "/usr/local/lib")
- table.insert(linkdirs, "/usr/lib")
- table.insert(linkdirs, "/opt/local/lib")
- table.insert(linkdirs, "/opt/lib")
- if opt.plat == "linux" and opt.arch == "x86_64" then
- table.insert(linkdirs, "/usr/local/lib/x86_64-linux-gnu")
- table.insert(linkdirs, "/usr/lib/x86_64-linux-gnu")
- table.insert(linkdirs, "/usr/lib64")
- table.insert(linkdirs, "/opt/lib64")
- end
- end
- end
+-- find package
+function _find_package(name, links, linkdirs, includedirs, opt)
-- find library
local result = nil
@@ -91,6 +63,68 @@ function _find_package_from_unixdirs(name, links, opt)
return result
end
+-- find package from the environment variables
+-- @see https://github.com/xmake-io/xmake/issues/1776
+--
+function _find_package_from_envs(name, links, opt)
+
+ -- add default search includedirs on pc host
+ local includedirs = table.wrap(opt.includedirs)
+ if #includedirs == 0 then
+ if opt.plat == "windows" then
+ table.insert(includedirs, "$(env INCLUDE)")
+ else
+ table.insert(includedirs, "$(env CPATH)")
+ table.insert(includedirs, "$(env C_INCLUDE_PATH)")
+ table.insert(includedirs, "$(env CPLUS_INCLUDE_PATH)")
+ end
+ end
+
+ -- add default search linkdirs on pc host
+ local linkdirs = table.wrap(opt.linkdirs)
+ if #linkdirs == 0 then
+ if opt.plat == "windows" then
+ table.insert(linkdirs, "$(env LIB)")
+ else
+ table.insert(linkdirs, "$(env LIBRARY_PATH)")
+ end
+ end
+ return _find_package(name, links, linkdirs, includedirs, opt)
+end
+
+-- find package from the unix-like system directories
+function _find_package_from_unixdirs(name, links, opt)
+
+ -- add default search includedirs on pc host
+ local includedirs = table.wrap(opt.includedirs)
+ if #includedirs == 0 then
+ if opt.plat == "linux" or opt.plat == "macosx" then
+ table.insert(includedirs, "/usr/local/include")
+ table.insert(includedirs, "/usr/include")
+ table.insert(includedirs, "/opt/local/include")
+ table.insert(includedirs, "/opt/include")
+ end
+ end
+
+ -- add default search linkdirs on pc host
+ local linkdirs = table.wrap(opt.linkdirs)
+ if #linkdirs == 0 then
+ if opt.plat == "linux" or opt.plat == "macosx" then
+ table.insert(linkdirs, "/usr/local/lib")
+ table.insert(linkdirs, "/usr/lib")
+ table.insert(linkdirs, "/opt/local/lib")
+ table.insert(linkdirs, "/opt/lib")
+ if opt.plat == "linux" and opt.arch == "x86_64" then
+ table.insert(linkdirs, "/usr/local/lib/x86_64-linux-gnu")
+ table.insert(linkdirs, "/usr/lib/x86_64-linux-gnu")
+ table.insert(linkdirs, "/usr/lib64")
+ table.insert(linkdirs, "/opt/lib64")
+ end
+ end
+ end
+ return _find_package(name, links, linkdirs, includedirs, opt)
+end
+
-- find package from the xcode directories
function _find_package_from_xcodedirs(name, links, opt)
@@ -166,6 +200,7 @@ function main(name, opt)
if opt.plat ~= "windows" then
table.insert(finders, _find_package_from_unixdirs)
end
+ table.insert(finders, _find_package_from_envs)
end
if opt.plat == "macosx" or opt.plat == "iphoneos" or opt.plat == "watchos" then
table.insert(finders, _find_package_from_xcodedirs)