diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-07-08 20:12:02 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2020-07-09 10:33:52 (GMT) |
commit | 1235f2d747770535a388cd763c95cde8c9244375 (patch) | |
tree | 5fe38c96951731f04e7904fa9fc5316d9e386207 /Source/cmSetSourceFilesPropertiesCommand.cxx | |
parent | 177052d6b8b4127a9d345830fb3d82384e9d5b50 (diff) | |
download | CMake-1235f2d747770535a388cd763c95cde8c9244375.zip CMake-1235f2d747770535a388cd763c95cde8c9244375.tar.gz CMake-1235f2d747770535a388cd763c95cde8c9244375.tar.bz2 |
set_property: Allow both DIRECTORY and TARGET_DIRECTORY together
Allow to specify both DIRECTORY and TARGET_DIRECTORY at the same time in
`set_source_files_properties()` and `set_property(SOURCE)` commands.
Add test cases and update the documentation.
Fixes: #20932
Diffstat (limited to 'Source/cmSetSourceFilesPropertiesCommand.cxx')
-rw-r--r-- | Source/cmSetSourceFilesPropertiesCommand.cxx | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/Source/cmSetSourceFilesPropertiesCommand.cxx b/Source/cmSetSourceFilesPropertiesCommand.cxx index 3135a06..c1b0c28 100644 --- a/Source/cmSetSourceFilesPropertiesCommand.cxx +++ b/Source/cmSetSourceFilesPropertiesCommand.cxx @@ -35,11 +35,11 @@ bool cmSetSourceFilesPropertiesCommand(std::vector<std::string> const& args, "OBJECT_DEPENDS", "PROPERTIES", "DIRECTORY", "TARGET_DIRECTORY" }; - auto isNotAPropertyKeyword = + auto isAPropertyKeyword = [](const std::vector<std::string>::const_iterator& arg_it) { - return std::all_of( + return std::any_of( std::begin(prop_names), std::end(prop_names), - [&arg_it](cm::string_view prop_name) { return *arg_it != prop_name; }); + [&arg_it](cm::string_view prop_name) { return *arg_it == prop_name; }); }; auto options_begin = std::find_first_of( @@ -53,21 +53,32 @@ bool cmSetSourceFilesPropertiesCommand(std::vector<std::string> const& args, bool source_file_target_option_enabled = false; std::vector<cmMakefile*> source_file_directory_makefiles; - if (options_it != args.end() && *options_it == "DIRECTORY") { - source_file_directory_option_enabled = true; - ++options_it; - while (options_it != args.end() && isNotAPropertyKeyword(options_it)) { + enum Doing + { + DoingNone, + DoingSourceDirectory, + DoingSourceTargetDirectory + }; + Doing doing = DoingNone; + for (; options_it != args.end(); ++options_it) { + if (*options_it == "DIRECTORY") { + doing = DoingSourceDirectory; + source_file_directory_option_enabled = true; + } else if (*options_it == "TARGET_DIRECTORY") { + doing = DoingSourceTargetDirectory; + source_file_target_option_enabled = true; + } else if (isAPropertyKeyword(options_it)) { + break; + } else if (doing == DoingSourceDirectory) { source_file_directories.push_back(*options_it); - ++options_it; - } - } else if (options_it != args.end() && *options_it == "TARGET_DIRECTORY") { - source_file_target_option_enabled = true; - ++options_it; - while (options_it != args.end() && isNotAPropertyKeyword(options_it)) { + } else if (doing == DoingSourceTargetDirectory) { source_file_target_directories.push_back(*options_it); - ++options_it; + } else { + status.SetError( + cmStrCat("given invalid argument \"", *options_it, "\".")); } } + const auto props_begin = options_it; bool file_scopes_handled = |