| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- -- imports
- import("core.project.config")
- import("core.project.project")
- import("core.base.json")
- import("private.action.run.runenvs", {try = true})
- if not runenvs then
- import("private.action.run.make_runenvs")
- end
- -- config target
- function _config_target(target)
- local oldenvs = os.addenvs(target:pkgenvs())
- for _, rule in ipairs(target:orderules()) do
- local on_config = rule:script("config")
- if on_config then
- on_config(target)
- end
- end
- local on_config = target:script("config")
- if on_config then
- on_config(target)
- end
- if oldenvs then
- os.setenvs(oldenvs)
- end
- end
- -- config targets
- function _config_targets()
- for _, target in ipairs(project.ordertargets()) do
- if target:is_enabled() then
- _config_target(target)
- end
- end
- end
- -- recursively target add env
- function _add_target_pkgenvs(target, envs, targets_added)
- if targets_added[target:name()] then
- return
- end
- targets_added[target:name()] = true
- local pkgenvs = target:pkgenvs()
- if pkgenvs then
- os.addenvs(pkgenvs)
- for _, name in ipairs(table.keys(pkgenvs)) do
- envs[name] = os.getenv(name)
- end
- end
- for _, dep in ipairs(target:orderdeps()) do
- _add_target_pkgenvs(dep, envs, targets_added)
- end
- end
- -- main entry
- function main (targetname)
- -- load config
- config.load()
- if not os.isfile(os.projectfile()) then
- return
- end
- _config_targets()
- -- get target
- local target = nil
- if targetname then
- target = project.target(targetname)
- end
- if not target then
- for _, t in pairs(project.targets()) do
- local default = t:get("default")
- if (default == nil or default == true) and t:get("kind") == "binary" then
- target = t
- break
- end
- end
- end
- -- get run envs
- local envs = {}
- if target then
- local oldenvs = os.getenvs()
- _add_target_pkgenvs(target, envs, {})
- local addrunenvs, setrunenvs = runenvs and runenvs.make(target) or make_runenvs(target)
- for name, values in pairs(addrunenvs) do
- os.addenv(name, table.unpack(table.wrap(values)))
- envs[name] = os.getenv(name)
- end
- for name, value in pairs(setrunenvs) do
- os.setenv(name, table.unpack(table.wrap(value)))
- envs[name] = os.getenv(name)
- end
- os.setenvs(oldenvs)
- end
- -- convert to envirnoments for vscode
- local empty = true
- local envirnoments = {}
- for k, v in pairs(envs) do
- table.insert(envirnoments, {name = k, value = v})
- empty = false
- end
- if json.mark_as_array then
- json.mark_as_array(envirnoments)
- end
- -- denote the start of vscode information to ignore anything logging to stdout before this point
- print("__begin__")
- if not empty then
- print(json.encode(envirnoments))
- else
- print("[]")
- end
- -- print end tag to ignore other deprecated/warnings infos
- print("__end__")
- end
|