diff options
| author | ruki <[email protected]> | 2021-11-24 10:42:08 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-11-24 10:42:08 +0800 |
| commit | b25c430d5ebfce6c04e37e1cfe9edba0a7233556 (patch) | |
| tree | e7073ad91b920dcc059955230a43cdbf6d002f17 /xmake/modules/package/tools/autoconf.lua | |
| parent | ba8988915b8c25eb7b407779b5c6aac9b7ae22ee (diff) | |
Update autoconf.lua
Diffstat (limited to 'xmake/modules/package/tools/autoconf.lua')
| -rw-r--r-- | xmake/modules/package/tools/autoconf.lua | 62 |
1 files changed, 56 insertions, 6 deletions
diff --git a/xmake/modules/package/tools/autoconf.lua b/xmake/modules/package/tools/autoconf.lua index f06a18bb0..833aa2f02 100644 --- a/xmake/modules/package/tools/autoconf.lua +++ b/xmake/modules/package/tools/autoconf.lua @@ -25,12 +25,20 @@ import("core.tool.linker") import("core.tool.compiler") import("lib.detect.find_tool") --- translate path -function _translate_path(package, p) - if p and is_host("windows") and (package:is_plat("mingw") or package:is_plat("msys") or package:is_plat("cygwin")) then - p = p:gsub("\\", "/") +-- translate paths +function _translate_paths(package, paths) + if paths and is_host("windows") and (package:is_plat("mingw") or package:is_plat("msys") or package:is_plat("cygwin")) then + if type(paths) == "string" then + return (paths:gsub("\\", "/")) + elseif type(paths) == "table" then + local result = {} + for _, p in ipairs(paths) do + table.insert(result, (p:gsub("\\", "/"))) + end + return result + end end - return p + return paths end -- translate windows bin path @@ -57,7 +65,7 @@ function _get_configs(package, configs) -- add prefix local configs = configs or {} - table.insert(configs, "--prefix=" .. _translate_path(package, package:installdir())) + table.insert(configs, "--prefix=" .. _translate_paths(package, package:installdir())) -- add host for cross-complation if not configs.host and not package:is_plat(os.subhost()) then @@ -109,6 +117,40 @@ function _get_configs(package, configs) return configs end +-- get cflags from package deps +function _get_cflags_from_packagedeps(package, opt) + local result = {} + for _, depname in ipairs(opt.packagedeps) do + local dep = package:dep(depname) + if dep then + local fetchinfo = dep:fetch({external = false}) + if fetchinfo then + table.join2(result, _map_compflags(package, "cxx", "define", fetchinfo.defines)) + table.join2(result, _translate_paths(package, _map_compflags(package, "cxx", "includedir", fetchinfo.includedirs))) + table.join2(result, _translate_paths(package, _map_compflags(package, "cxx", "sysincludedir", fetchinfo.sysincludedirs))) + end + end + end + return result +end + +-- get ldflags from package deps +function _get_ldflags_from_packagedeps(package, opt) + local result = {} + for _, depname in ipairs(opt.packagedeps) do + local dep = package:dep(depname) + if dep then + local fetchinfo = dep:fetch({external = false}) + if fetchinfo then + table.join2(result, _translate_paths(package, _map_linkflags(package, "binary", {"cxx"}, "linkdir", fetchinfo.linkdirs))) + table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "link", fetchinfo.links)) + table.join2(result, _translate_paths(package, _map_linkflags(package, "binary", {"cxx"}, "syslink", fetchinfo.syslinks))) + end + end + end + return result +end + -- get the build environments function buildenvs(package, opt) opt = opt or {} @@ -132,6 +174,10 @@ function buildenvs(package, opt) table.join2(cppflags, opt.cppflags) -- @see https://github.com/xmake-io/xmake/issues/1688 table.join2(asflags, opt.asflags) table.join2(ldflags, opt.ldflags) + table.join2(cflags, _get_cflags_from_packagedeps(package, opt)) + table.join2(cxxflags, _get_cflags_from_packagedeps(package, opt)) + table.join2(cppflags, _get_cflags_from_packagedeps(package, opt)) + table.join2(ldflags, _get_ldflags_from_packagedeps(package, opt)) envs.CFLAGS = table.concat(cflags, ' ') envs.CXXFLAGS = table.concat(cxxflags, ' ') envs.CPPFLAGS = table.concat(cppflags, ' ') @@ -158,6 +204,10 @@ function buildenvs(package, opt) table.join2(asflags, opt.asflags) table.join2(ldflags, opt.ldflags) table.join2(shflags, opt.shflags) + table.join2(cflags, _get_cflags_from_packagedeps(package, opt)) + table.join2(cxxflags, _get_cflags_from_packagedeps(package, opt)) + table.join2(cppflags, _get_cflags_from_packagedeps(package, opt)) + table.join2(ldflags, _get_ldflags_from_packagedeps(package, opt)) table.join2(cflags, _map_compflags(package, "c", "define", defines)) table.join2(cflags, _map_compflags(package, "c", "includedir", includedirs)) table.join2(cflags, _map_compflags(package, "c", "sysincludedir", sysincludedirs)) |
