File 4761-Add-a-default-manifest-for-windows.patch of Package erlang

From 82729b957ecae151fcac7a35765a9a864cc06a77 Mon Sep 17 00:00:00 2001
From: Dan Gudmundsson <dgud@erlang.org>
Date: Thu, 3 Dec 2020 09:35:40 +0100
Subject: [PATCH] Add a default manifest for windows

Previously only erl werl and beam added the manifest.
Add it to all exe and dll's.

Specificly ./Install.exe that runs after the nsis installer,
needs it if somebody wants to run it manually.
The test runs don't want to elevate to admin for example.
---
 erts/emulator/sys/win32/erl_win_sys.h |  4 ----
 erts/etc/win32/erl.c                  |  5 +----
 erts/etc/win32/manifest.xml           | 17 +++++++++++++++++
 erts/etc/win32/win_erlexec.c          |  5 -----
 erts/etc/win32/wsl_tools/vc/ld.sh     | 10 +++++++---
 5 files changed, 25 insertions(+), 16 deletions(-)
 create mode 100644 erts/etc/win32/manifest.xml

diff --git a/erts/emulator/sys/win32/erl_win_sys.h b/erts/emulator/sys/win32/erl_win_sys.h
index b00ba287e2..4c64494ac0 100644
--- a/erts/emulator/sys/win32/erl_win_sys.h
+++ b/erts/emulator/sys/win32/erl_win_sys.h
@@ -52,10 +52,6 @@
 #include <fcntl.h>
 #include <time.h>
 #include <sys/timeb.h>
-#pragma comment(linker,"/manifestdependency:\"type='win32' "\
-		"name='Microsoft.Windows.Common-Controls' "\
-		"version='6.0.0.0' processorArchitecture='*' "\
-		"publicKeyToken='6595b64144ccf1df' language='*'\"")
 
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
diff --git a/erts/etc/win32/erl.c b/erts/etc/win32/erl.c
index 7cbd0d027c..e960fb1238 100644
--- a/erts/etc/win32/erl.c
+++ b/erts/etc/win32/erl.c
@@ -17,10 +17,7 @@
  * 
  * %CopyrightEnd%
  */
-#pragma comment(linker,"/manifestdependency:\"type='win32' "\
-		"name='Microsoft.Windows.Common-Controls' "\
-		"version='6.0.0.0' processorArchitecture='*' "\
-		"publicKeyToken='6595b64144ccf1df' language='*'\"")
+
 #include <windows.h>
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/erts/etc/win32/manifest.xml b/erts/etc/win32/manifest.xml
new file mode 100644
index 0000000000..eea364c9e9
--- /dev/null
+++ b/erts/etc/win32/manifest.xml
@@ -0,0 +1,17 @@
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+  <dependency>
+    <dependentAssembly>
+      <assemblyIdentity
+          type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0"
+          processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*">
+      </assemblyIdentity>
+    </dependentAssembly>
+  </dependency>
+ <ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2">
+  <ms_asmv2:security>
+   <ms_asmv2:requestedPrivileges>
+    <ms_asmv2:requestedExecutionLevel level="AsInvoker" uiAccess="false"></ms_asmv2:requestedExecutionLevel>
+   </ms_asmv2:requestedPrivileges>
+  </ms_asmv2:security>
+ </ms_asmv2:trustInfo>
+</assembly>
diff --git a/erts/etc/win32/win_erlexec.c b/erts/etc/win32/win_erlexec.c
index c0bb92793e..defa654ad8 100644
--- a/erts/etc/win32/win_erlexec.c
+++ b/erts/etc/win32/win_erlexec.c
@@ -22,11 +22,6 @@
  * Most of this only used when beam is run as a separate process.
  */
 
-#pragma comment(linker,"/manifestdependency:\"type='win32' "\
-		"name='Microsoft.Windows.Common-Controls' "\
-		"version='6.0.0.0' processorArchitecture='*' "\
-		"publicKeyToken='6595b64144ccf1df' language='*'\"")
-
 #include <windows.h>
 #include <winuser.h>
 #include <wincon.h>
diff --git a/erts/etc/win32/wsl_tools/vc/ld.sh b/erts/etc/win32/wsl_tools/vc/ld.sh
index fc115bec8c..a16c502cea 100755
--- a/erts/etc/win32/wsl_tools/vc/ld.sh
+++ b/erts/etc/win32/wsl_tools/vc/ld.sh
@@ -177,11 +177,16 @@ RES=$?
 
 CMANIFEST=`w32_path.sh -u $MANIFEST`
 
-if [ "$RES" = "0" -a -f "$CMANIFEST" ]; then
-    # Add stuff to manifest to turn off "virtualization"
+if [ -f "$CMANIFEST" ]; then
+    ## Add stuff to manifest to turn off "virtualization"
     sed -n -i '1h;1!H;${;g;s,<trustInfo.*</trustInfo>.,,g;p;}' $CMANIFEST 2>/dev/null
     sed -i "s/<\/assembly>/ <ms_asmv2:trustInfo xmlns:ms_asmv2=\"urn:schemas-microsoft-com:asm.v2\">\n  <ms_asmv2:security>\n   <ms_asmv2:requestedPrivileges>\n    <ms_asmv2:requestedExecutionLevel level=\"AsInvoker\" uiAccess=\"false\"\/>\n   <\/ms_asmv2:requestedPrivileges>\n  <\/ms_asmv2:security>\n <\/ms_asmv2:trustInfo>\n<\/assembly>/" $CMANIFEST 2>/dev/null
+else
+    CMANIFEST=$ERL_TOP/erts/etc/win32/manifest.xml
+    MANIFEST=`w32_path.sh -d $CMANIFEST`
+fi
 
+if [ "$RES" = "0" ]; then
     eval mt.exe -nologo -manifest "$MANIFEST" -outputresource:"$OUTPUTRES" >>/tmp/link.exe.${p}.1 2>>/tmp/link.exe.${p}.2
     RES=$?
     if [ "$RES" != "0" ]; then
@@ -192,7 +197,6 @@ if [ "$RES" = "0" -a -f "$CMANIFEST" ]; then
         echo "If you get this error, make sure Windows Defender AND Windows Search is disabled">>/tmp/link.exe.${p}.1
 	rm -f "$CREMOVE"
     fi
-    rm -f "$CMANIFEST"
 fi
 
 # This works around some strange behaviour
-- 
2.26.2

openSUSE Build Service is sponsored by