]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
Adds uac manifest to all executable test files to prevent the Windows 740 error when...
authorRalf Habacker <ralf.habacker@freenet.de>
Wed, 5 Dec 2018 06:56:22 +0000 (07:56 +0100)
committerRalf Habacker <ralf.habacker@freenet.de>
Wed, 5 Dec 2018 14:58:48 +0000 (15:58 +0100)
The case occurred during test-pending-call-dispatch. To avoid further
applications being affected in the future, the manifest is added to
all test applications.

Windows Error 740 is defined as 'The Requested Operation Requires Elevation'

cmake/modules/Macros.cmake
cmake/tools/CMakeLists.txt

index 63b2171b96676d90bd6cb4cf4066b7689094d92d..46664ef447a705e11f974ecc0dfb175980310dcb 100644 (file)
@@ -31,7 +31,12 @@ if(DBUS_BUILD_TESTS AND CMAKE_CROSSCOMPILING AND CMAKE_SYSTEM_NAME STREQUAL "Win
 endif()
 
 macro(add_test_executable _target _source)
-    add_executable(${_target} ${_source})
+    set(_sources "${_source}")
+    if(WIN32 AND NOT MSVC)
+        # avoid triggering UAC
+        add_uac_manifest(_sources)
+    endif()
+    add_executable(${_target} ${_sources})
     target_link_libraries(${_target} ${ARGN})
     if (CMAKE_CROSSCOMPILING AND CMAKE_SYSTEM_NAME STREQUAL "Windows")
         # run tests with binfmt_misc
@@ -58,7 +63,12 @@ macro(add_test_executable _target _source)
 endmacro(add_test_executable)
 
 macro(add_helper_executable _target _source)
-    add_executable(${_target} ${_source})
+    set(_sources "${_source}")
+    if(WIN32 AND NOT MSVC)
+        # avoid triggering UAC
+        add_uac_manifest(_sources)
+    endif()
+    add_executable(${_target} ${_sources})
     target_link_libraries(${_target} ${ARGN})
 endmacro(add_helper_executable)
 
@@ -115,3 +125,23 @@ macro(generate_warning_cflags target warnings disabled_warnings error_warnings)
         message("generate_warning_cflags return: ${${target}}")
     endif()
 endmacro()
+
+#
+# Avoid triggering UAC
+#
+# This macro adds an rc file to _sources that is
+# linked to a target and prevents UAC from making
+# requests for administrator access.
+#
+macro(add_uac_manifest _sources)
+    # 1 is the resource ID, ID_MANIFEST
+    # 24 is the resource type, RT_MANIFEST
+    # constants are used because of a bug in windres
+    # see https://stackoverflow.com/questions/33000158/embed-manifest-file-to-require-administrator-execution-level-with-mingw32
+    get_filename_component(UAC_FILE ${CMAKE_SOURCE_DIR}/../tools/Win32.Manifest REALPATH)
+    set(outfile ${CMAKE_BINARY_DIR}/disable-uac.rc)
+    if(NOT EXISTS outfile)
+        file(WRITE ${outfile} "1 24 \"${UAC_FILE}\"\n")
+    endif()
+    list(APPEND ${_sources} ${outfile})
+endmacro()
index 704e3a49914078a1cd0c35528d107c24a4011549..72fa67271442f59b233e3d9022edd8e7f8364008 100644 (file)
@@ -91,13 +91,7 @@ if(WIN32)
     list(APPEND dbus_update_activation_environment_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/versioninfo-${DBUS_VER_INTERNAL_NAME}.rc)
 endif()
 if(WIN32 AND NOT MSVC)
-    # avoid dbus-update-activation-environment triggering UAC
-    # 1 is the resource ID, ID_MANIFEST
-    # 24 is the resource type, RT_MANIFEST
-    # constants are used because of a bug in windres
-    # see https://stackoverflow.com/questions/33000158/embed-manifest-file-to-require-administrator-execution-level-with-mingw32
-    file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/disable-uac.rc "1 24 \"${CMAKE_SOURCE_DIR}/../tools/Win32.Manifest\"\n")
-    list(APPEND dbus_update_activation_environment_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/disable-uac.rc)
+    add_uac_manifest(dbus_update_activation_environment_SOURCES)
 endif()
 add_executable(dbus-update-activation-environment ${dbus_update_activation_environment_SOURCES})
 target_link_libraries(dbus-update-activation-environment ${DBUS_LIBRARIES})