Autogen: Restore AUTOGEN_PARALLEL support for numbers

Refactoring in commit d867e05892 (Autogen: Use JSON instead of CMake
script for info files, 2019-09-20, v3.16.0-rc1~57^2) broke support for
numerical values of `AUTOGEN_PARALLEL`.  Parse and verify the range.
Warn if the value is invalid.

Fixes: #20376
diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx
index 410330a..667e0f5 100644
--- a/Source/cmQtAutoGenInitializer.cxx
+++ b/Source/cmQtAutoGenInitializer.cxx
@@ -5,6 +5,7 @@
 #include <cstddef>
 #include <deque>
 #include <initializer_list>
+#include <limits>
 #include <map>
 #include <set>
 #include <sstream> // for basic_ios, istringstream
@@ -457,12 +458,23 @@
 
     // Autogen target parallel processing
     {
+      using ParallelType = decltype(this->AutogenTarget.Parallel);
+      unsigned long propInt = 0;
       std::string const& prop =
         this->GenTarget->GetSafeProperty("AUTOGEN_PARALLEL");
       if (prop.empty() || (prop == "AUTO")) {
         // Autodetect number of CPUs
         this->AutogenTarget.Parallel = GetParallelCPUCount();
+      } else if (cmStrToULong(prop, &propInt) && propInt > 0 &&
+                 propInt <= std::numeric_limits<ParallelType>::max()) {
+        this->AutogenTarget.Parallel = static_cast<ParallelType>(propInt);
       } else {
+        // Warn the project author that AUTOGEN_PARALLEL is not valid.
+        this->Makefile->IssueMessage(
+          MessageType::AUTHOR_WARNING,
+          cmStrCat("AUTOGEN_PARALLEL=\"", prop, "\" for target \"",
+                   this->GenTarget->GetName(),
+                   "\" is not valid. Using AUTOGEN_PARALLEL=1"));
         this->AutogenTarget.Parallel = 1;
       }
     }