diff options
| author | ruki <[email protected]> | 2020-05-02 21:36:40 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2020-05-02 21:42:01 +0800 |
| commit | 6f2c2183fb68dba467e8b0b781d8ecb9054ee716 (patch) | |
| tree | 3f1ce560c82e89fa2e24324ae391ca091791bde9 | |
| parent | 5a60c8f0d02f3624909f85dff8d5231af63807d3 (diff) | |
add target:get_from_xxx
| -rw-r--r-- | xmake/core/project/target.lua | 41 | ||||
| -rw-r--r-- | xmake/core/tool/builder.lua | 48 | ||||
| -rw-r--r-- | xmake/plugins/project/cmake/cmakelists.lua | 73 | ||||
| -rw-r--r-- | xmake/plugins/project/vsxmake/getinfo.lua | 43 | ||||
| -rw-r--r-- | xmake/rules/utils/check_targets/check_targets.lua | 26 | ||||
| -rw-r--r-- | xmake/rules/utils/inherit_links/inherit_links.lua | 26 |
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 |
