| 
					
				 | 
			
			
				@@ -28,7 +28,6 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "cm_sys_stat.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include "cmAlgorithms.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "cmArgumentParser.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "cmArgumentParserTypes.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "cmCMakePath.h" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3211,7 +3210,8 @@ bool HandleConfigureCommand(std::vector<std::string> const& args, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     cm::optional<std::string> Content; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     bool EscapeQuotes = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     bool AtOnly = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    std::string NewlineStyle; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // "NEWLINE_STYLE" requires one value, but we use a custom check below. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ArgumentParser::Maybe<std::string> NewlineStyle; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   static auto const parser = 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3236,15 +3236,10 @@ bool HandleConfigureCommand(std::vector<std::string> const& args, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // Arguments that are allowed to be empty lists.  Keep entries sorted! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  static const std::vector<cm::string_view> LIST_ARGS = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    "NEWLINE_STYLE"_s, // Filter here so we can issue a custom error below. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  auto kwbegin = keywordsMissingValues.cbegin(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  auto kwend = cmRemoveMatching(keywordsMissingValues, LIST_ARGS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (kwend != kwbegin) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    status.SetError(cmStrCat("CONFIGURE keywords missing values:\n  ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                             cmJoin(cmMakeRange(kwbegin, kwend), "\n  "))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (!keywordsMissingValues.empty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    status.SetError( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      cmStrCat("CONFIGURE keywords missing values:\n  ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               cmJoin(cmMakeRange(keywordsMissingValues), "\n  "))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     cmSystemTools::SetFatalErrorOccurred(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3347,7 +3342,10 @@ bool HandleArchiveCreateCommand(std::vector<std::string> const& args, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     std::string Format; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     std::string Compression; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     std::string CompressionLevel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    std::string MTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // "MTIME" should require one value, but it has long been accidentally 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // accepted without one and treated as if an empty value were given. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Fixing this would require a policy. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ArgumentParser::Maybe<std::string> MTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     bool Verbose = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // "PATHS" requires at least one value, but use a custom check below. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ArgumentParser::MaybeEmpty<std::vector<std::string>> Paths; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3375,18 +3373,10 @@ bool HandleArchiveCreateCommand(std::vector<std::string> const& args, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // Arguments that are allowed to be empty lists.  Keep entries sorted! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  static const std::vector<cm::string_view> LIST_ARGS = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    "MTIME"_s, // "MTIME" should not be in this list because it requires one 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               // value, but it has long been accidentally accepted without 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               // one and treated as if an empty value were given. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               // Fixing this would require a policy. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  auto kwbegin = keywordsMissingValues.cbegin(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  auto kwend = cmRemoveMatching(keywordsMissingValues, LIST_ARGS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (kwend != kwbegin) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    status.SetError(cmStrCat("Keywords missing values:\n  ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                             cmJoin(cmMakeRange(kwbegin, kwend), "\n  "))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (!keywordsMissingValues.empty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    status.SetError( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      cmStrCat("Keywords missing values:\n  ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               cmJoin(cmMakeRange(keywordsMissingValues), "\n  "))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     cmSystemTools::SetFatalErrorOccurred(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 |