summaryrefslogtreecommitdiff
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
parent5a60c8f0d02f3624909f85dff8d5231af63807d3 (diff)
add target:get_from_xxx
-rw-r--r--xmake/core/project/target.lua41
-rw-r--r--xmake/core/tool/builder.lua48
-rw-r--r--xmake/plugins/project/cmake/cmakelists.lua73
-rw-r--r--xmake/plugins/project/vsxmake/getinfo.lua43
-rw-r--r--xmake/rules/utils/check_targets/check_targets.lua26
-rw-r--r--xmake/rules/utils/inherit_links/inherit_links.lua26
6 files changed, 74 insertions, 183 deletions
diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua
index f5b69de76..5e67d0f7e 100644
--- a/xmake/core/project/target.lua
+++ b/xmake/core/project/target.lua
@@ -305,6 +305,47 @@ function _instance:get(name, opt)
end
end
+-- get values from target dependencies
+function _instance:get_from_deps(name, opt)
+ local values = {}
+ local orderdeps = self:orderdeps()
+ local total = #orderdeps
+ for idx, _ in ipairs(orderdeps) do
+ local dep = orderdeps[total + 1 - idx]
+ local depinherit = self:extraconf("deps", dep:name(), "inherit")
+ if depinherit == nil or depinherit then
+ table.join2(values, dep:get(name, opt))
+ end
+ end
+ return values
+end
+
+-- get values from target options
+function _instance:get_from_opts(name)
+ local values = {}
+ for _, opt in ipairs(self:orderopts()) do
+ table.join2(values, table.wrap(opt:get(name)))
+ end
+ return values
+end
+
+-- get values from target packages
+function _instance:get_from_pkgs(name)
+ local values = {}
+ for _, pkg in ipairs(self:orderpkgs()) do
+ -- uses them instead of the builtin configs if exists extra package config
+ -- e.g. `add_packages("xxx", {links = "xxx"})`
+ local configinfo = self: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
+ return values
+end
+
-- set the value to the target info
function _instance:set(name, ...)
self._INFO:apival_set(name, ...)
diff --git a/xmake/core/tool/builder.lua b/xmake/core/tool/builder.lua
index 4d2e25a0b..a8d43299b 100644
--- a/xmake/core/tool/builder.lua
+++ b/xmake/core/tool/builder.lua
@@ -131,46 +131,6 @@ function builder:_inherit_flags_from_targetdeps(flags, target)
end
end
--- inherit values (only for public/interface) from target deps
---
--- e.g.
--- add_defines("", {public = true})
--- add_defines("", {interface = true})
---
-function builder:_inherit_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 options
-function builder:_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 packages
-function builder:_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 flags from the flagkind
function builder:_add_flags_from_flagkind(flags, target, flagkind, opt)
local targetflags = target:get(flagkind, opt)
@@ -315,8 +275,8 @@ function builder:_add_flags_from_language(flags, target, getters)
local results = {}
if target:type() == "target" then
- -- inherit flagvalues (public or interface) of all dependent targets
- self:_inherit_values_from_targetdeps(results, target, name)
+ -- get flagvalues (public or interface) of all dependent targets
+ table.join2(results, target:get_from_deps(name, {interface = true}))
-- get flagvalues of target with given flagname
table.join2(results, target:get(name))
@@ -328,8 +288,8 @@ function builder:_add_flags_from_language(flags, target, getters)
-- is target? get flagvalues of the attached options and packages
local results = {}
if target:type() == "target" then
- self:_add_values_from_targetopts(results, target, name)
- self:_add_values_from_targetpkgs(results, target, name)
+ table.join2(results, target:get_from_opts(name))
+ table.join2(results, target:get_from_pkgs(name))
-- is option? get flagvalues of option with given flagname
elseif target:type() == "option" then
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
diff --git a/xmake/rules/utils/check_targets/check_targets.lua b/xmake/rules/utils/check_targets/check_targets.lua
index fd8373d81..221dd3da9 100644
--- a/xmake/rules/utils/check_targets/check_targets.lua
+++ b/xmake/rules/utils/check_targets/check_targets.lua
@@ -18,33 +18,11 @@
-- @file check_targets.lua
--
--- 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 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
-
-- get values from target
function _get_values_from_target(target, name)
local values = table.wrap(target:get(name))
- _add_values_from_targetopts(values, target, name)
- _add_values_from_targetpkgs(values, target, name)
+ table.join2(values, target:get_from_opts(name))
+ table.join2(values, target:get_from_pkgs(name))
return values
end
diff --git a/xmake/rules/utils/inherit_links/inherit_links.lua b/xmake/rules/utils/inherit_links/inherit_links.lua
index a810df2e4..a62c81104 100644
--- a/xmake/rules/utils/inherit_links/inherit_links.lua
+++ b/xmake/rules/utils/inherit_links/inherit_links.lua
@@ -18,33 +18,11 @@
-- @file inherit_links.lua
--
--- 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 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
-
-- get values from target
function _get_values_from_target(target, name)
local values = table.wrap(target:get(name))
- _add_values_from_targetopts(values, target, name)
- _add_values_from_targetpkgs(values, target, name)
+ table.join2(values, target:get_from_opts(name))
+ table.join2(values, target:get_from_pkgs(name))
return values
end