summarylogtreecommitdiffstats
path: root/0002-cygwin-mingw-Create-UAC-manifest-files.mingw.patch
diff options
context:
space:
mode:
Diffstat (limited to '0002-cygwin-mingw-Create-UAC-manifest-files.mingw.patch')
-rw-r--r--0002-cygwin-mingw-Create-UAC-manifest-files.mingw.patch99
1 files changed, 99 insertions, 0 deletions
diff --git a/0002-cygwin-mingw-Create-UAC-manifest-files.mingw.patch b/0002-cygwin-mingw-Create-UAC-manifest-files.mingw.patch
new file mode 100644
index 000000000000..310002b8231f
--- /dev/null
+++ b/0002-cygwin-mingw-Create-UAC-manifest-files.mingw.patch
@@ -0,0 +1,99 @@
+[PATCH 2/6] [cygwin|mingw] Create UAC manifest files.
+
+* build-aux/ltmain.in (func_emit_exe_manifest): New function.
+(func_mode_link) [cygwin|mingw]: Create manifest files for wrapper
+and target exe when target name matches heuristic that triggers
+UAC problems for newer win32 OSs. Clean up $cwrapper.manifest on
+error. Ensure manifest files have executable permission.
+(func_mode_uninstall): Clean up manifest files.
+Various reports by Eric Blake, Kai Tietz, and Cesar Strauss.
+---
+ build-auxltmain.in | 50 ++++++++++++++++++++++++++++++++++++++++++-
+ 1 files changed, 48 insertions(+), 2 deletions(-)
+
+diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
+index 0418007..1821779 100644
+--- a/build-aux/ltmain.in
++++ b/build-aux/ltmain.in
+@@ -4277,6 +4277,41 @@ EOF
+ }
+ # end: func_emit_cwrapperexe_src
+
++# func_emit_exe_manifest
++# emit a Win32 UAC manifest for executable on stdout
++# Must ONLY be called from within func_mode_link because
++# it depends on a number of variable set therein.
++func_emit_exe_manifest ()
++{
++ cat <<EOF
++<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
++<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
++ <assemblyIdentity version="1.0.0.0"
++EOF
++
++ case $host in
++ i?86-*-* ) echo ' processorArchitecture="x86"' ;;
++ ia64-*-* ) echo ' processorArchitecture="ia64"' ;;
++ x86_64-*-* ) echo ' processorArchitecture="amd64"' ;;
++ *) echo ' processorArchitecture="*"' ;;
++ esac
++
++ cat <<EOF
++ name="$host_os.$PROGRAM.$outputname"
++ type="win32"/>
++
++ <!-- Identify the application security requirements. -->
++ <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
++ <security>
++ <requestedPrivileges>
++ <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
++ </requestedPrivileges>
++ </security>
++ </trustInfo>
++</assembly>
++EOF
++}
++
+ # func_win32_import_lib_p ARG
+ # True if ARG is an import lib, as indicated by $file_magic_cmd
+ func_win32_import_lib_p ()
+@@ -8237,7 +8272,7 @@ EOF
+ cwrappersource="$output_path/$objdir/lt-$output_name.c"
+ cwrapper="$output_path/$output_name.exe"
+ $RM $cwrappersource $cwrapper
+- trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
++ trap "$RM $cwrappersource $cwrapper $cwrapper.manifest; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_cwrapperexe_src > $cwrappersource
+
+@@ -8257,6 +8292,16 @@ EOF
+ $opt_dry_run || {
+ # note: this script will not be executed, so do not chmod.
+ if test "x$build" = "x$host"; then
++ # Create the UAC manifests first if necessary (but the
++ # manifest files must have executable permission regardless).
++ case $output_name in
++ *instal*|*patch*|*setup*|*update*)
++ func_emit_exe_manifest > $cwrapper.manifest
++ func_emit_exe_manifest > $output_path/$objdir/$output_name.exe.manifest
++ chmod +x $cwrapper.manifest
++ chmod +x $output_path/$objdir/$output_name.exe.manifest
++ ;;
++ esac
+ $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+ else
+ func_emit_wrapper no > $func_ltwrapper_scriptname_result
+@@ -8777,8 +8822,9 @@ func_mode_uninstall ()
+ # note $name still contains .exe if it was in $file originally
+ # as does the version of $file that was added into $rmfiles
+ func_append rmfiles " $odir/$name $odir/${name}S.$objext"
++ func_append rmfiles " ${name}.manifest $objdir/${name}.manifest"
+ if test yes = "$fast_install" && test -n "$relink_command"; then
+- func_append rmfiles " $odir/lt-$name"
++ func_append rmfiles " $odir/lt-$name $objdir/lt-${name}.manifest"
+ fi
+ if test "X$noexename" != "X$name"; then
+ func_append rmfiles " $odir/lt-$noexename.c"
+--
+1.7.1
+