summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2020-06-13 15:38:34 +0800
committerruki <[email protected]>2020-06-13 15:38:34 +0800
commitbe93ad0bc06e9913ebdd83fdc00b4a3eec87be84 (patch)
treec495879e01a7455c948c033bda681e3cac65a87c
parentd1f1fd32aeddf73071b06fbcab23856925a0017f (diff)
fix before_build for across_targets_in_parallel/false
-rw-r--r--tests/projects/other/build_deps/xmake.lua26
-rw-r--r--xmake/actions/build/build.lua6
2 files changed, 30 insertions, 2 deletions
diff --git a/tests/projects/other/build_deps/xmake.lua b/tests/projects/other/build_deps/xmake.lua
index c7beeaa59..cfafe0e9c 100644
--- a/tests/projects/other/build_deps/xmake.lua
+++ b/tests/projects/other/build_deps/xmake.lua
@@ -107,3 +107,29 @@ target("test2")
assert(os.isfile(target:targetfile()), "test2: after_link failed!")
end)
on_install(function (target) end)
+
+rule("test3")
+ before_build(function (target)
+ assert(os.isfile(target:dep("dep1"):targetfile()), "test2: before_link failed!")
+ assert(os.isfile(target:dep("dep3"):targetfile()), "test2: before_link failed!")
+ end)
+
+target("test3")
+ set_kind("binary")
+ add_deps("dep1")
+ add_rules("test3")
+ add_files("src/test.c")
+ set_policy("build.across_targets_in_parallel", false)
+ on_load(function (target)
+ os.rm(target:targetfile())
+ os.rm(target:dep("dep1"):targetfile())
+ os.rm(target:dep("dep3"):targetfile())
+ end)
+ before_build(function (target)
+ assert(os.isfile(target:dep("dep1"):targetfile()), "test2: before_link failed!")
+ assert(os.isfile(target:dep("dep3"):targetfile()), "test2: before_link failed!")
+ end)
+ after_link(function (target)
+ assert(os.isfile(target:targetfile()), "test2: after_link failed!")
+ end)
+ on_install(function (target) end)
diff --git a/xmake/actions/build/build.lua b/xmake/actions/build/build.lua
index 07a958482..ae68fd1a3 100644
--- a/xmake/actions/build/build.lua
+++ b/xmake/actions/build/build.lua
@@ -131,7 +131,7 @@ function _add_batchjobs_for_target(batchjobs, rootjob, target)
local job_build, job_build_leaf = _add_batchjobs(batchjobs, job_after_build, target)
-- add before_build job for target
- batchjobs:addjob(target:name() .. "/before_build", function (index, total)
+ local job_build_before = batchjobs:addjob(target:name() .. "/before_build", function (index, total)
-- enter the environments of the target packages
for name, values in pairs(target:pkgenvs()) do
@@ -157,7 +157,9 @@ function _add_batchjobs_for_target(batchjobs, rootjob, target)
end
end
end, job_build_leaf)
- return job_build, job_after_build
+
+ -- we need do build_before after all dependent targets if across_targets_in_parallel is disabled
+ return target:policy("build.across_targets_in_parallel") == false and job_build_before or job_build, job_after_build
end
-- add batch jobs for the given target and deps