Merge topic 'ci-nmake-jom'

3b9975d9b5 ci: Add JOM nightly CI job
ec68e3c5c6 ci: Add NMake nightly CI job
bd00882f49 gitlab-ci: Factor out windows_vcvarsall_vs2022_x64 config block
99c335c8e8 gitlab-ci: Clarify MSVC v71 job script config block name

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Ben Boeckel <ben.boeckel@kitware.com>
Merge-request: !6742
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 7f38659..ee059dc 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -771,6 +771,34 @@
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
 
+test:windows-vs2022-x64-nmake:
+    extends:
+        - .windows_vs2022_x64_nmake
+        - .cmake_test_windows_nmake
+        - .windows_tags_concurrent_vs2022
+        - .cmake_junit_artifacts
+        - .run_dependent
+    dependencies:
+        - test:windows-vs2022-x64-ninja
+    needs:
+        - test:windows-vs2022-x64-ninja
+    variables:
+        CMAKE_CI_JOB_NIGHTLY: "true"
+
+test:windows-vs2022-x64-jom:
+    extends:
+        - .windows_vs2022_x64_jom
+        - .cmake_test_windows_jom
+        - .windows_tags_concurrent_vs2022
+        - .cmake_junit_artifacts
+        - .run_dependent
+    dependencies:
+        - test:windows-vs2022-x64-ninja
+    needs:
+        - test:windows-vs2022-x64-ninja
+    variables:
+        CMAKE_CI_JOB_NIGHTLY: "true"
+
 test:windows-borland5.5:
     extends:
         - .windows_borland5.5
@@ -802,7 +830,7 @@
 test:windows-msvc-v71-nmake:
     extends:
         - .windows_msvc_v71_nmake
-        - .cmake_test_windows_nmake
+        - .cmake_test_windows_msvc
         - .windows_tags_concurrent
         - .cmake_junit_artifacts
         - .run_dependent
diff --git a/.gitlab/ci/configure_windows_vs2022_x64_jom.cmake b/.gitlab/ci/configure_windows_vs2022_x64_jom.cmake
new file mode 100644
index 0000000..166690a
--- /dev/null
+++ b/.gitlab/ci/configure_windows_vs2022_x64_jom.cmake
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/configure_windows_msvc_common.cmake")
diff --git a/.gitlab/ci/configure_windows_vs2022_x64_nmake.cmake b/.gitlab/ci/configure_windows_vs2022_x64_nmake.cmake
new file mode 100644
index 0000000..166690a
--- /dev/null
+++ b/.gitlab/ci/configure_windows_vs2022_x64_nmake.cmake
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/configure_windows_msvc_common.cmake")
diff --git a/.gitlab/ci/jom.ps1 b/.gitlab/ci/jom.ps1
new file mode 100755
index 0000000..6c28005
--- /dev/null
+++ b/.gitlab/ci/jom.ps1
@@ -0,0 +1,15 @@
+$erroractionpreference = "stop"
+
+$sha256sum = "128FDD846FE24F8594EED37D1D8929A0EA78DF563537C0C1B1861A635013FFF8"
+$tarball = "unstable-jom-2018-12-12.zip"
+
+$outdir = $pwd.Path
+$outdir = "$outdir\.gitlab"
+$ProgressPreference = 'SilentlyContinue'
+Invoke-WebRequest -Uri "https://cmake.org/files/dependencies/$tarball" -OutFile "$outdir\$tarball"
+$hash = Get-FileHash "$outdir\$tarball" -Algorithm SHA256
+if ($hash.Hash -ne $sha256sum) {
+    exit 1
+}
+
+Expand-Archive -Path "$outdir\$tarball" -DestinationPath "$outdir\jom"
diff --git a/.gitlab/os-windows.yml b/.gitlab/os-windows.yml
index 7c578aa..e15bbe9 100644
--- a/.gitlab/os-windows.yml
+++ b/.gitlab/os-windows.yml
@@ -31,15 +31,20 @@
         CMAKE_CI_BUILD_TYPE: Release
         CTEST_NO_WARNINGS_ALLOWED: 1
 
-.windows_vs2022_x64_ninja:
-    extends: .windows_ninja
-
+.windows_vcvarsall_vs2022_x64:
     variables:
-        CMAKE_CONFIGURATION: windows_vs2022_x64_ninja
         VCVARSALL: "${VS170COMNTOOLS}\\..\\..\\VC\\Auxiliary\\Build\\vcvarsall.bat"
         VCVARSPLATFORM: "x64"
         VCVARSVERSION: "14.30.30705"
 
+.windows_vs2022_x64_ninja:
+    extends:
+        - .windows_ninja
+        - .windows_vcvarsall_vs2022_x64
+
+    variables:
+        CMAKE_CONFIGURATION: windows_vs2022_x64_ninja
+
 ### External testing
 
 .windows_vs2022_x64:
@@ -90,6 +95,30 @@
         CMAKE_CI_BUILD_TYPE: Release
         CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
 
+.windows_jom:
+    extends: .windows
+
+    variables:
+        CMAKE_GENERATOR: "NMake Makefiles JOM"
+        CMAKE_CI_BUILD_TYPE: Release
+        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+
+.windows_vs2022_x64_nmake:
+    extends:
+        - .windows_nmake
+        - .windows_vcvarsall_vs2022_x64
+
+    variables:
+        CMAKE_CONFIGURATION: windows_vs2022_x64_nmake
+
+.windows_vs2022_x64_jom:
+    extends:
+        - .windows_jom
+        - .windows_vcvarsall_vs2022_x64
+
+    variables:
+        CMAKE_CONFIGURATION: windows_vs2022_x64_jom
+
 .windows_msvc_v71_nmake:
     extends: .windows_nmake
 
@@ -201,6 +230,27 @@
 
     interruptible: true
 
+.cmake_test_windows_nmake:
+    stage: test-ext
+
+    script:
+        - Invoke-Expression -Command .gitlab/ci/vcvarsall.ps1
+        - build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_test_external.cmake
+
+    interruptible: true
+
+.cmake_test_windows_jom:
+    stage: test-ext
+
+    script:
+        - Invoke-Expression -Command .gitlab/ci/jom.ps1
+        - $pwdpath = $pwd.Path
+        - Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab\jom;$env:PATH"
+        - Invoke-Expression -Command .gitlab/ci/vcvarsall.ps1
+        - build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_test_external.cmake
+
+    interruptible: true
+
 .cmake_test_windows_borland:
     stage: test-ext
 
@@ -212,7 +262,7 @@
 
     interruptible: true
 
-.cmake_test_windows_nmake:
+.cmake_test_windows_msvc:
     stage: test-ext
 
     script: