diff options
author | Rosen Matev <r.matev@gmail.com> | 2019-05-10 12:37:39 (GMT) |
---|---|---|
committer | Rosen Matev <r.matev@gmail.com> | 2019-05-14 13:58:00 (GMT) |
commit | 9f76961de87d8911d13867d469c38087e47a0b60 (patch) | |
tree | 13cf78b16bcbf13e6a4aef6b6963c38137083b21 /Source/cmAddCustomCommandCommand.cxx | |
parent | 5a2023f904c5da80a4614c133b7d7d8f4f719e96 (diff) | |
download | CMake-9f76961de87d8911d13867d469c38087e47a0b60.zip CMake-9f76961de87d8911d13867d469c38087e47a0b60.tar.gz CMake-9f76961de87d8911d13867d469c38087e47a0b60.tar.bz2 |
Support job pools in custom commands and targets
Provide a way for custom commands and targets to set the pool variable
of the ninja build statement. Setting `JOB_POOL` is not compatible with
`USES_TERMINAL`, which implies the `console` pool.
The option is silently ignored with other generators.
Closes: #18483
Diffstat (limited to 'Source/cmAddCustomCommandCommand.cxx')
-rw-r--r-- | Source/cmAddCustomCommandCommand.cxx | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/Source/cmAddCustomCommandCommand.cxx b/Source/cmAddCustomCommandCommand.cxx index a840f17..0be3c85 100644 --- a/Source/cmAddCustomCommandCommand.cxx +++ b/Source/cmAddCustomCommandCommand.cxx @@ -31,7 +31,7 @@ bool cmAddCustomCommandCommand::InitialPass( return false; } - std::string source, target, main_dependency, working, depfile; + std::string source, target, main_dependency, working, depfile, job_pool; std::string comment_buffer; const char* comment = nullptr; std::vector<std::string> depends, outputs, output, byproducts; @@ -65,6 +65,7 @@ bool cmAddCustomCommandCommand::InitialPass( doing_comment, doing_working_directory, doing_depfile, + doing_job_pool, doing_nothing }; @@ -81,6 +82,7 @@ bool cmAddCustomCommandCommand::InitialPass( MAKE_STATIC_KEYWORD(DEPENDS); MAKE_STATIC_KEYWORD(DEPFILE); MAKE_STATIC_KEYWORD(IMPLICIT_DEPENDS); + MAKE_STATIC_KEYWORD(JOB_POOL); MAKE_STATIC_KEYWORD(MAIN_DEPENDENCY); MAKE_STATIC_KEYWORD(OUTPUT); MAKE_STATIC_KEYWORD(OUTPUTS); @@ -104,6 +106,7 @@ bool cmAddCustomCommandCommand::InitialPass( keywords.insert(keyDEPENDS); keywords.insert(keyDEPFILE); keywords.insert(keyIMPLICIT_DEPENDS); + keywords.insert(keyJOB_POOL); keywords.insert(keyMAIN_DEPENDENCY); keywords.insert(keyOUTPUT); keywords.insert(keyOUTPUTS); @@ -170,6 +173,8 @@ bool cmAddCustomCommandCommand::InitialPass( this->Makefile->GetGlobalGenerator()->GetName()); return false; } + } else if (copy == keyJOB_POOL) { + doing = doing_job_pool; } } else { std::string filename; @@ -211,6 +216,9 @@ bool cmAddCustomCommandCommand::InitialPass( case doing_depfile: depfile = copy; break; + case doing_job_pool: + job_pool = copy; + break; case doing_working_directory: working = copy; break; @@ -318,6 +326,11 @@ bool cmAddCustomCommandCommand::InitialPass( return false; } + if (uses_terminal && !job_pool.empty()) { + this->SetError("JOB_POOL is shadowed by USES_TERMINAL."); + return false; + } + // Choose which mode of the command to use. bool escapeOldStyle = !verbatim; if (source.empty() && output.empty()) { @@ -325,14 +338,14 @@ bool cmAddCustomCommandCommand::InitialPass( std::vector<std::string> no_depends; this->Makefile->AddCustomCommandToTarget( target, byproducts, no_depends, commandLines, cctype, comment, - working.c_str(), escapeOldStyle, uses_terminal, depfile, + working.c_str(), escapeOldStyle, uses_terminal, depfile, job_pool, command_expand_lists); } else if (target.empty()) { // Target is empty, use the output. this->Makefile->AddCustomCommandToOutput( output, byproducts, depends, main_dependency, commandLines, comment, working.c_str(), false, escapeOldStyle, uses_terminal, - command_expand_lists, depfile); + command_expand_lists, depfile, job_pool); // Add implicit dependency scanning requests if any were given. if (!implicit_depends.empty()) { |