summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2020-10-06 00:56:46 +0800
committerruki <[email protected]>2020-10-06 00:56:46 +0800
commitc73161f573ea50e24494114166d5ae6d25e56196 (patch)
tree468e6d79e8d1a6eb535b946b4edb8b34560a55ef
parent3b57dab66edacc4f0f17cebf20c5c726def7a993 (diff)
improve install/uninstall/package
-rw-r--r--xmake/actions/clean/main.lua3
-rw-r--r--xmake/actions/install/install.lua32
-rw-r--r--xmake/actions/package/main.lua34
-rw-r--r--xmake/actions/uninstall/uninstall.lua36
4 files changed, 29 insertions, 76 deletions
diff --git a/xmake/actions/clean/main.lua b/xmake/actions/clean/main.lua
index b1767d021..798333907 100644
--- a/xmake/actions/clean/main.lua
+++ b/xmake/actions/clean/main.lua
@@ -166,9 +166,6 @@ function main()
-- config it first
task.run("config", {target = targetname, require = false, verbose = false})
- -- init finished states
- _g.finished = {}
-
-- enter project directory
local oldir = os.cd(project.directory())
diff --git a/xmake/actions/install/install.lua b/xmake/actions/install/install.lua
index 624868f42..99bbff9b5 100644
--- a/xmake/actions/install/install.lua
+++ b/xmake/actions/install/install.lua
@@ -104,41 +104,27 @@ function _install_target(target)
os.cd(oldir)
end
--- install the given target and deps
-function _install_target_and_deps(target)
-
- -- this target have been finished?
- if _g.finished[target:name()] then
- return
- end
-
- -- install for all dependent targets
- for _, depname in ipairs(target:get("deps")) do
- _install_target_and_deps(project.target(depname))
+-- install the given targets
+function _install_targets(targets)
+ for _, target in ipairs(targets) do
+ _install_target(target)
end
-
- -- install target
- _install_target(target)
-
- -- finished
- _g.finished[target:name()] = true
end
-- install targets
function main(targetname)
- -- init finished states
- _g.finished = {}
-
-- install the given target?
if targetname and not targetname:startswith("__") then
- _install_target_and_deps(project.target(targetname))
+ local target = project.target(targetname)
+ _install_targets(target:orderdeps())
+ _install_target(target)
else
-- install default or all targets
- for _, target in pairs(project.targets()) do
+ for _, target in ipairs(project.ordertargets()) do
local default = target:get("default")
if default == nil or default == true or targetname == "__all" then
- _install_target_and_deps(target)
+ _install_target(target)
end
end
end
diff --git a/xmake/actions/package/main.lua b/xmake/actions/package/main.lua
index 0ed5a892a..fef550bd8 100644
--- a/xmake/actions/package/main.lua
+++ b/xmake/actions/package/main.lua
@@ -141,7 +141,7 @@ function _on_package_target(target)
end
-- package the given target
-function _package(target)
+function _package_target(target)
-- enter project directory
local oldir = os.cd(project.directory())
@@ -194,24 +194,11 @@ function _package(target)
os.cd(oldir)
end
--- package the given target and deps
-function _package_target_and_deps(target)
-
- -- this target have been finished?
- if _g.finished[target:name()] then
- return
- end
-
- -- package for all dependent targets
- for _, depname in ipairs(target:get("deps")) do
- _package_target_and_deps(project.target(depname))
+-- package the given targets
+function _package_targets(targets)
+ for _, target in ipairs(targets) do
+ _package_target(target)
end
-
- -- package target
- _package(target)
-
- -- finished
- _g.finished[target:name()] = true
end
-- main
@@ -236,18 +223,17 @@ function main()
-- build it first
task.run("build", {target = targetname, all = option.get("all")})
- -- init finished states
- _g.finished = {}
-
-- package the given target?
if targetname then
- _package_target_and_deps(project.target(targetname))
+ local target = project.target(targetname)
+ _package_targets(target:orderdeps())
+ _package_target(target)
else
-- package default or all targets
- for _, target in pairs(project.targets()) do
+ for _, target in ipairs(project.ordertargets()) do
local default = target:get("default")
if default == nil or default == true or option.get("all") then
- _package_target_and_deps(target)
+ _package_target(target)
end
end
end
diff --git a/xmake/actions/uninstall/uninstall.lua b/xmake/actions/uninstall/uninstall.lua
index d566d923d..b1f1aa071 100644
--- a/xmake/actions/uninstall/uninstall.lua
+++ b/xmake/actions/uninstall/uninstall.lua
@@ -104,39 +104,23 @@ function _uninstall_target(target)
os.cd(oldir)
end
--- uninstall the given target and deps
-function _uninstall_target_and_deps(target)
-
- -- this target have been finished?
- if _g.finished[target:name()] then
- return
- end
-
- -- uninstall for all dependent targets
- for _, depname in ipairs(target:get("deps")) do
- _uninstall_target_and_deps(project.target(depname))
+-- uninstall the given targets
+function _uninstall_targets(targets)
+ for _, target in ipairs(targets) do
+ _uninstall_target(target)
end
-
- -- uninstall target
- _uninstall_target(target)
-
- -- finished
- _g.finished[target:name()] = true
end
-- uninstall
function main(targetname)
- -- init finished states
- _g.finished = {}
-
- -- uninstall given target?
- if targetname then
- _uninstall_target_and_deps(project.target(targetname))
+ -- uninstall the given target?
+ if targetname and not targetname:startswith("__") then
+ local target = project.target(targetname)
+ _uninstall_targets(target:orderdeps())
+ _uninstall_target(target)
else
-- uninstall all targets
- for _, target in pairs(project.targets()) do
- _uninstall_target_and_deps(target)
- end
+ _uninstall_targets(project.ordertargets())
end
end