patch 9.1.1499: MS-Windows: no indication of ARM64 architecture

Problem:  MS-Windows: no indication of ARM64 architecture
Solution: Add ARM64 to version output and include in nsis installer
          (RestorerZ)

related: vim/vim-win32-installer#381
closes: #17642

Signed-off-by: RestorerZ <restorer@mail2k.ru>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/nsis/Make_mvc.mak b/nsis/Make_mvc.mak
index c5aff15..8350082 100644
--- a/nsis/Make_mvc.mak
+++ b/nsis/Make_mvc.mak
@@ -46,6 +46,10 @@
 MKNSISFLAGS = $(MKNSISFLAGS) /DWIN64=$(WIN64)
 !ENDIF
 
+!IFDEF ARM64
+MKNSISFLAGS = $(MKNSISFLAGS) /DARM64=$(ARM64)
+!ENDIF
+
 !IFDEF INCLUDE_LIBGCC
 MKNSISFLAGS = $(MKNSISFLAGS) /DINCLUDE_LIBGCC=$(INCLUDE_LIBGCC)
 !ENDIF
diff --git a/nsis/Makefile b/nsis/Makefile
index fdbc120..890ace4 100644
--- a/nsis/Makefile
+++ b/nsis/Makefile
@@ -39,6 +39,10 @@
 MKNSISFLAGS := $(MKNSISFLAGS) -DWIN64=$(WIN64)
 endif
 
+ifdef ARM64
+MKNSISFLAGS := $(MKNSISFLAGS) -DARM64=$(ARM64)
+endif
+
 ifdef INCLUDE_LIBGCC
 MKNSISFLAGS := $(MKNSISFLAGS) -DINCLUDE_LIBGCC=$(INCLUDE_LIBGCC)
 endif
diff --git a/nsis/README.txt b/nsis/README.txt
index 4b4b7a0..3bb32d4 100644
--- a/nsis/README.txt
+++ b/nsis/README.txt
@@ -101,6 +101,8 @@
     "HAVE_NLS=0"	— do not add native language support.
     "HAVE_MULTI_LANG=0" — to create an English-only the installer.
     "WIN64=1"		— to create a 64-bit the installer.
+    "ARM64=1"		— to create the installer for ARM64. The WIN64 variable
+			    must be set to 1.
     "X=<scriptcmd>"	— executes scriptcmd in script.  If multiple scriptcmd
 			    are specified, they are separated by a semicolon.
 			    Example "X=OutFile MyVim.exe;XPMode on"
diff --git a/nsis/gvim.nsi b/nsis/gvim.nsi
index eef8a12..04040b4 100644
--- a/nsis/gvim.nsi
+++ b/nsis/gvim.nsi
@@ -53,6 +53,18 @@
   !define WIN64 0
 !endif
 
+# if you want to create the installer for ARM64, use the /DARM64=1 on
+# the command line makensis.exe. This property will be set to 1.
+!ifndef ARM64
+  !define ARM64 0
+!else
+  !if ${ARM64} > 0
+    !if ${WIN64} < 1
+      !define /redef WIN64 1
+    !endif
+  !endif
+!endif
+
 # if you don't want to include libgcc_s_sjlj-1.dll in the package, use the
 # switch /DINCLUDE_LIBGCC=0 on the command line makensis.exe.
 !ifndef INCLUDE_LIBGCC
@@ -113,9 +125,13 @@
 !define UNINST_REG_KEY_VIM  "${UNINST_REG_KEY}\${PRODUCT}"
 
 !if ${WIN64}
-Name "${PRODUCT} (x64)"
+  !if ${ARM64}
+    Name "${PRODUCT} (ARM64)"
+  !else
+    Name "${PRODUCT} (x64)"
+  !endif
 !else
-Name "${PRODUCT}"
+  Name "${PRODUCT}"
 !endif
 OutFile gvim${VER_MAJOR}${VER_MINOR}.exe
 CRCCheck force
diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak
index 08016d4..64b0331 100644
--- a/src/Make_mvc.mak
+++ b/src/Make_mvc.mak
@@ -342,7 +342,11 @@
 
 ### Set the default $(WINVER) to make it work with Windows 7
 !ifndef WINVER
+! if "$(CPU)" == "ARM64"
+WINVER = 0x0A00
+! else
 WINVER = 0x0601
+! endif
 !endif
 
 # Use multiprocess build
@@ -571,7 +575,8 @@
 !  error *** ERROR Unknown target architecture "$(CPUNR)". Make aborted.
 ! endif
 !elseif "$(CPU)" == "ARM64"
-# TODO: Validate CPUNR.
+# TODO: Validate CPUNR depending on the VS version.
+CPUNR = armv8.0
 !endif
 
 # Convert processor ID to MVC-compatible number
diff --git a/src/version.c b/src/version.c
index 23a9f19..7181bae 100644
--- a/src/version.c
+++ b/src/version.c
@@ -720,6 +720,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1499,
+/**/
     1498,
 /**/
     1497,
@@ -3926,13 +3928,21 @@
 # ifdef FEAT_GUI_MSWIN
 #  ifdef VIMDLL
 #   ifdef _WIN64
-    msg_puts(_("\nMS-Windows 64-bit GUI/console version"));
+#    if defined(_M_ARM64) || defined(_M_ARM64EC)
+     msg_puts(_("\nMS-Windows ARM64 GUI/console version"));
+#    else
+     msg_puts(_("\nMS-Windows 64-bit GUI/console version"));
+#    endif
 #   else
     msg_puts(_("\nMS-Windows 32-bit GUI/console version"));
 #   endif
 #  else
 #   ifdef _WIN64
-    msg_puts(_("\nMS-Windows 64-bit GUI version"));
+#    if defined(_M_ARM64) || defined(_M_ARM64EC)
+     msg_puts(_("\nMS-Windows ARM64 GUI version"));
+#    else
+     msg_puts(_("\nMS-Windows 64-bit GUI version"));
+#    endif
 #   else
     msg_puts(_("\nMS-Windows 32-bit GUI version"));
 #   endif
@@ -3942,7 +3952,11 @@
 #  endif
 # else
 #  ifdef _WIN64
+#   if defined(_M_ARM64) || defined(_M_ARM64EC)
+    msg_puts(_("\nMS-Windows ARM64 console version"));
+#   else
     msg_puts(_("\nMS-Windows 64-bit console version"));
+#   endif
 #  else
     msg_puts(_("\nMS-Windows 32-bit console version"));
 #  endif