summaryrefslogtreecommitdiff
path: root/xmake/plugins/project
diff options
context:
space:
mode:
authorruki <[email protected]>2020-05-02 21:36:40 +0800
committerruki <[email protected]>2020-05-02 21:42:01 +0800
commit6f2c2183fb68dba467e8b0b781d8ecb9054ee716 (patch)
tree3f1ce560c82e89fa2e24324ae391ca091791bde9 /xmake/plugins/project
parent5a60c8f0d02f3624909f85dff8d5231af63807d3 (diff)
add target:get_from_xxx
Diffstat (limited to 'xmake/plugins/project')
-rw-r--r--xmake/plugins/project/cmake/cmakelists.lua73
-rw-r--r--xmake/plugins/project/vsxmake/getinfo.lua43
2 files changed, 25 insertions, 91 deletions
diff --git a/xmake/plugins/project/cmake/cmakelists.lua b/xmake/plugins/project/cmake/cmakelists.lua
index 4d86eebc3..7196f3d4e 100644
--- a/xmake/plugins/project/cmake/cmakelists.lua
+++ b/xmake/plugins/project/cmake/cmakelists.lua
@@ -30,41 +30,6 @@ function _get_unix_path(filepath)
return (path.translate(filepath):gsub('\\', '/'))
end
--- add values from target options
-function _add_values_from_targetopts(values, target, name)
- for _, opt in ipairs(target:orderopts()) do
- table.join2(values, table.wrap(opt:get(name)))
- end
-end
-
--- add values from target dependencies
-function _add_values_from_targetdeps(values, target, name)
- local orderdeps = target:orderdeps()
- local total = #orderdeps
- for idx, _ in ipairs(orderdeps) do
- local dep = orderdeps[total + 1 - idx]
- local depinherit = target:extraconf("deps", dep:name(), "inherit")
- if depinherit == nil or depinherit then
- table.join2(values, dep:get(name, {interface = true}))
- end
- end
-end
-
--- add values from target packages
-function _add_values_from_targetpkgs(values, target, name)
- for _, pkg in ipairs(target:orderpkgs()) do
- -- uses them instead of the builtin configs if exists extra package config
- -- e.g. `add_packages("xxx", {links = "xxx"})`
- local configinfo = target:pkgconfig(pkg:name())
- if configinfo and configinfo[name] then
- table.join2(values, configinfo[name])
- else
- -- uses the builtin package configs
- table.join2(values, pkg:get(name))
- end
- end
-end
-
-- add project info
function _add_project(cmakelists)
cmakelists:print([[# this is the build file for project %s
@@ -144,9 +109,9 @@ end
-- add target include directories
function _add_target_include_directories(cmakelists, target)
local includedirs = table.wrap(target:get("includedirs"))
- _add_values_from_targetopts(includedirs, target, "includedirs")
- _add_values_from_targetpkgs(includedirs, target, "includedirs")
- _add_values_from_targetdeps(includedirs, target, "includedirs")
+ table.join2(includedirs, target:get_from_opts("includedirs"))
+ table.join2(includedirs, target:get_from_pkgs("includedirs"))
+ table.join2(includedirs, target:get_from_deps("includedirs", {interface = true}))
includedirs = table.unique(includedirs)
if #includedirs > 0 then
cmakelists:print("target_include_directories(%s PRIVATE", target:name())
@@ -183,9 +148,9 @@ end
-- add target compile definitions
function _add_target_compile_definitions(cmakelists, target)
local defines = table.wrap(target:get("defines"))
- _add_values_from_targetopts(defines, target, "defines")
- _add_values_from_targetpkgs(defines, target, "defines")
- _add_values_from_targetdeps(defines, target, "defines")
+ table.join2(defines, target:get_from_opts("defines"))
+ table.join2(defines, target:get_from_pkgs("defines"))
+ table.join2(defines, target:get_from_deps("defines", {interface = true}))
defines = table.unique(defines)
if #defines > 0 then
cmakelists:print("target_compile_definitions(%s PRIVATE", target:name())
@@ -338,21 +303,13 @@ function _add_target_link_libraries(cmakelists, target)
-- add links
local links = table.wrap(target:get("links"))
- _add_values_from_targetopts(links, target, "links")
- _add_values_from_targetpkgs(links, target, "links")
-
- -- add links from target deps
- local targetkind = target:targetkind()
- if targetkind == "binary" or targetkind == "shared" then
- for _, dep in irpairs(target:orderdeps()) do
- local depkind = dep:targetkind()
- if depkind == "static" or depkind == "shared" then
- table.insert(links, dep:name())
- end
- end
- end
- _add_values_from_targetdeps(links, target, "links")
+ table.join2(links, target:get_from_opts("links"))
+ table.join2(links, target:get_from_pkgs("links"))
+ table.join2(links, target:get_from_deps("links", {interface = true}))
table.join2(links, target:get("syslinks"))
+ table.join2(links, target:get_from_opts("syslinks"))
+ table.join2(links, target:get_from_pkgs("syslinks"))
+ table.join2(links, target:get_from_deps("syslinks", {interface = true}))
links = table.unique(links)
if #links > 0 then
cmakelists:print("target_link_libraries(%s PRIVATE", target:name())
@@ -366,9 +323,9 @@ end
-- add target link directories
function _add_target_link_directories(cmakelists, target)
local linkdirs = table.wrap(target:get("linkdirs"))
- _add_values_from_targetopts(linkdirs, target, "linkdirs")
- _add_values_from_targetpkgs(linkdirs, target, "linkdirs")
- _add_values_from_targetdeps(linkdirs, target, "linkdirs")
+ table.join2(linkdirs, target:get_from_opts("linkdirs"))
+ table.join2(linkdirs, target:get_from_pkgs("linkdirs"))
+ table.join2(linkdirs, target:get_from_deps("linkdirs", {interface = true}))
linkdirs = table.unique(linkdirs)
if #linkdirs > 0 then
cmakelists:print("target_link_directories(%s PRIVATE", target:name())
diff --git a/xmake/plugins/project/vsxmake/getinfo.lua b/xmake/plugins/project/vsxmake/getinfo.lua
index 583e10932..cbfbf13d9 100644
--- a/xmake/plugins/project/vsxmake/getinfo.lua
+++ b/xmake/plugins/project/vsxmake/getinfo.lua
@@ -99,35 +99,12 @@ function _make_arrs(arr)
return table.concat(r, ";")
end
-function _get_values(target, name)
+-- get values from target
+function _get_values_from_target(target, name)
local values = table.wrap(target:get(name))
-
- -- from deps
- for _, dep in irpairs(target:orderdeps()) do
- local depinherit = target:extraconf("deps", dep:name(), "inherit")
- if depinherit == nil or depinherit then
- table.join2(values, dep:get(name, { interface = true }))
- end
- end
-
- -- from opts
- for _, opt in ipairs(target:orderopts()) do
- table.join2(values, table.wrap(opt:get(name)))
- end
-
- -- from packages
- for _, pkg in ipairs(target:orderpkgs()) do
- -- uses them instead of the builtin configs if exists extra package config
- -- e.g. `add_packages("xxx", {links = "xxx"})`
- local configinfo = target:pkgconfig(pkg:name())
- if configinfo and configinfo[name] then
- table.join2(values, configinfo[name])
- else
- -- uses the builtin package configs
- table.join2(values, pkg:get(name))
- end
- end
-
+ table.join2(values, target:get_from_opts(name))
+ table.join2(values, target:get_from_pkgs(name))
+ table.join2(values, target:get_from_deps(name, {interface = true}))
return table.unique(values)
end
@@ -160,13 +137,13 @@ function _make_targetinfo(mode, arch, target)
targetinfo.rundir = _make_dirs(target:get("rundir"))
targetinfo.configdir = _make_dirs(os.getenv("XMAKE_CONFIGDIR"))
targetinfo.configfiledir = _make_dirs(target:get("configdir"))
- targetinfo.includedirs = _make_dirs(_get_values(target, "includedirs"))
- targetinfo.linkdirs = _make_dirs(_get_values(target, "linkdirs"))
- targetinfo.sourcedirs = _make_dirs(_get_values(target, "values.project.vsxmake.sourcedirs"))
+ targetinfo.includedirs = _make_dirs(_get_values_from_target(target, "includedirs"))
+ targetinfo.linkdirs = _make_dirs(_get_values_from_target(target, "linkdirs"))
+ targetinfo.sourcedirs = _make_dirs(_get_values_from_target(target, "values.project.vsxmake.sourcedirs"))
-- save defines
- targetinfo.defines = _make_arrs(_get_values(target, "defines"))
- targetinfo.languages = _make_arrs(_get_values(target, "languages"))
+ targetinfo.defines = _make_arrs(_get_values_from_target(target, "defines"))
+ targetinfo.languages = _make_arrs(_get_values_from_target(target, "languages"))
local configcache = cache("local.config")
local flags = {}
for k, v in pairs(configcache:get("options_" .. target:name())) do