Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/mumble.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikkel Krautz <mikkel@krautz.dk>2017-02-05 21:20:34 +0300
committerMikkel Krautz <mikkel@krautz.dk>2017-02-05 21:20:34 +0300
commitc895dad88962dc88691520c977151f1d16e7522e (patch)
treef23819f5d4aac50cf530a73cf3636e9285d1132d /installer
parentcef2324812294a13f28d4f644bd85b0aef5f37d1 (diff)
installer: ship app-local copies of UCRT DLLs.
MSVC2015 uses a new CRT called the Universal CRT. This CRT is distributed in different ways, depending on your OS. For Windows XP, the official distribution is a VCRedist installer. (Or, for Windows XP only -- merge modules). For Vista through 8.1, UCRT is distributed via Windows Update. For Windows 10, it's shipped as part of Windows. This commit amends our installer to install an app-local copy of the Universal CRT. This is the sanest way for us to distribute the Universal CRT across all supported targets. Even if we could drop Windows XP support, the fact that earlier Windows versions deploy the Universal CRT through Windows Update makes it a hard pill to swallow. People's hacked up machines might not be able to get the update from Windows Update for whatever reason. (Maybe they disabled the Windows Update service for performance reasons, because a guide on the web told them to?) So, for now, this is what we'll do. Perhaps it makes more sense to statically link the UCRT instead of this massive soup of DLLs. But this is a quick fix to keep our snapshots going until we can work out the details for statically linking UCRT. Note: Because Murmur is outside the versioned root-dir, we ship a separate CRT copy for Murmur. Now that we have to ship the UCRT as well, that's suddenly a lot more files we'll have to carry. That's also an unfortunate side-effect of the UCRT. But if you look at it from the perspective that shipping the VCRUNTIME+UCRT on MSVC2015 "the same thing" as shipping MSVCRT on MSVC2013, we're not really doing anything much different. Except, we're being "punished" by the fact that Microsoft decided to split up the CRT into tiny pieces. Future work: Ideally, we wouldn't include these .wxi files in the repo, and instead depend on gen-ucrt.py being run before building the installer. However, that would require buildenv changes, and require us to redeploy buildenvs, which takes time. To get the UCRT fix out into a snapshot, let's add them to the repo for now, and we can clean it up later.
Diffstat (limited to 'installer')
-rw-r--r--installer/Files.wxs7
-rw-r--r--installer/MumbleUCRTComponentRefs.wxi48
-rw-r--r--installer/MumbleUCRTComponents.wxi130
-rw-r--r--installer/MurmurUCRTComponentRefs.wxi48
-rw-r--r--installer/MurmurUCRTComponents.wxi130
-rw-r--r--installer/Product.wxs7
-rw-r--r--installer/Settings.wxi12
-rw-r--r--installer/gen-ucrt.py74
8 files changed, 456 insertions, 0 deletions
diff --git a/installer/Files.wxs b/installer/Files.wxs
index 52a7c5c35..b60ffa82d 100644
--- a/installer/Files.wxs
+++ b/installer/Files.wxs
@@ -75,6 +75,10 @@
</Component>
<?endif ?>
+ <?ifdef RedistDirUCRT ?>
+ <?include "MumbleUCRTComponents.wxi" ?>
+ <?endif ?>
+
<Component Id="dbghelp.dll">
<File Source="$(var.DebugToolsDir)\dbghelp.dll" KeyPath="yes" />
</Component>
@@ -143,6 +147,9 @@
<File Id="Murmur_vcruntime140.dll" Source="$(var.RedistDirVC14)\vcruntime140.dll" KeyPath="yes" />
</Component>
<?endif ?>
+ <?ifdef RedistDirUCRT ?>
+ <?include "MurmurUCRTComponents.wxi" ?>
+ <?endif ?>
<Component Id="Murmur_dbghelp.dll">
<File Id="Murmur_dbghelp.dll" Source="$(var.DebugToolsDir)\dbghelp.dll" KeyPath="yes" />
</Component>
diff --git a/installer/MumbleUCRTComponentRefs.wxi b/installer/MumbleUCRTComponentRefs.wxi
new file mode 100644
index 000000000..70dcbcb12
--- /dev/null
+++ b/installer/MumbleUCRTComponentRefs.wxi
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Include>
+
+<!-- This file is auto-generated via gen-ucrt.py. Please don't touch by hand -->
+
+<ComponentRef Id="api_ms_win_core_console_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_datetime_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_debug_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_errorhandling_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_file_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_file_l1_2_0.dll" />
+<ComponentRef Id="api_ms_win_core_file_l2_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_handle_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_heap_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_interlocked_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_libraryloader_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_localization_l1_2_0.dll" />
+<ComponentRef Id="api_ms_win_core_memory_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_namedpipe_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_processenvironment_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_processthreads_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_processthreads_l1_1_1.dll" />
+<ComponentRef Id="api_ms_win_core_profile_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_rtlsupport_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_string_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_synch_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_synch_l1_2_0.dll" />
+<ComponentRef Id="api_ms_win_core_sysinfo_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_timezone_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_core_util_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_crt_conio_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_crt_convert_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_crt_environment_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_crt_filesystem_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_crt_heap_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_crt_locale_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_crt_math_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_crt_multibyte_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_crt_private_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_crt_process_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_crt_runtime_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_crt_stdio_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_crt_string_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_crt_time_l1_1_0.dll" />
+<ComponentRef Id="api_ms_win_crt_utility_l1_1_0.dll" />
+<ComponentRef Id="ucrtbase.dll" />
+
+</Include>
diff --git a/installer/MumbleUCRTComponents.wxi b/installer/MumbleUCRTComponents.wxi
new file mode 100644
index 000000000..083f88ae2
--- /dev/null
+++ b/installer/MumbleUCRTComponents.wxi
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Include>
+
+<!-- This file is auto-generated via gen-ucrt.py. Please don't touch by hand -->
+
+<Component Id="api_ms_win_core_console_l1_1_0.dll">
+ <File Id="api_ms_win_core_console_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-console-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_datetime_l1_1_0.dll">
+ <File Id="api_ms_win_core_datetime_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-datetime-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_debug_l1_1_0.dll">
+ <File Id="api_ms_win_core_debug_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-debug-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_errorhandling_l1_1_0.dll">
+ <File Id="api_ms_win_core_errorhandling_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-errorhandling-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_file_l1_1_0.dll">
+ <File Id="api_ms_win_core_file_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-file-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_file_l1_2_0.dll">
+ <File Id="api_ms_win_core_file_l1_2_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-file-l1-2-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_file_l2_1_0.dll">
+ <File Id="api_ms_win_core_file_l2_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-file-l2-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_handle_l1_1_0.dll">
+ <File Id="api_ms_win_core_handle_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-handle-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_heap_l1_1_0.dll">
+ <File Id="api_ms_win_core_heap_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-heap-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_interlocked_l1_1_0.dll">
+ <File Id="api_ms_win_core_interlocked_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-interlocked-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_libraryloader_l1_1_0.dll">
+ <File Id="api_ms_win_core_libraryloader_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-libraryloader-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_localization_l1_2_0.dll">
+ <File Id="api_ms_win_core_localization_l1_2_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-localization-l1-2-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_memory_l1_1_0.dll">
+ <File Id="api_ms_win_core_memory_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-memory-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_namedpipe_l1_1_0.dll">
+ <File Id="api_ms_win_core_namedpipe_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-namedpipe-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_processenvironment_l1_1_0.dll">
+ <File Id="api_ms_win_core_processenvironment_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-processenvironment-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_processthreads_l1_1_0.dll">
+ <File Id="api_ms_win_core_processthreads_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-processthreads-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_processthreads_l1_1_1.dll">
+ <File Id="api_ms_win_core_processthreads_l1_1_1.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-processthreads-l1-1-1.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_profile_l1_1_0.dll">
+ <File Id="api_ms_win_core_profile_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-profile-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_rtlsupport_l1_1_0.dll">
+ <File Id="api_ms_win_core_rtlsupport_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-rtlsupport-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_string_l1_1_0.dll">
+ <File Id="api_ms_win_core_string_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-string-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_synch_l1_1_0.dll">
+ <File Id="api_ms_win_core_synch_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-synch-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_synch_l1_2_0.dll">
+ <File Id="api_ms_win_core_synch_l1_2_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-synch-l1-2-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_sysinfo_l1_1_0.dll">
+ <File Id="api_ms_win_core_sysinfo_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-sysinfo-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_timezone_l1_1_0.dll">
+ <File Id="api_ms_win_core_timezone_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-timezone-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_core_util_l1_1_0.dll">
+ <File Id="api_ms_win_core_util_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-util-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_crt_conio_l1_1_0.dll">
+ <File Id="api_ms_win_crt_conio_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-conio-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_crt_convert_l1_1_0.dll">
+ <File Id="api_ms_win_crt_convert_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-convert-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_crt_environment_l1_1_0.dll">
+ <File Id="api_ms_win_crt_environment_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-environment-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_crt_filesystem_l1_1_0.dll">
+ <File Id="api_ms_win_crt_filesystem_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-filesystem-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_crt_heap_l1_1_0.dll">
+ <File Id="api_ms_win_crt_heap_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-heap-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_crt_locale_l1_1_0.dll">
+ <File Id="api_ms_win_crt_locale_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-locale-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_crt_math_l1_1_0.dll">
+ <File Id="api_ms_win_crt_math_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-math-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_crt_multibyte_l1_1_0.dll">
+ <File Id="api_ms_win_crt_multibyte_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-multibyte-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_crt_private_l1_1_0.dll">
+ <File Id="api_ms_win_crt_private_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-private-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_crt_process_l1_1_0.dll">
+ <File Id="api_ms_win_crt_process_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-process-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_crt_runtime_l1_1_0.dll">
+ <File Id="api_ms_win_crt_runtime_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-runtime-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_crt_stdio_l1_1_0.dll">
+ <File Id="api_ms_win_crt_stdio_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-stdio-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_crt_string_l1_1_0.dll">
+ <File Id="api_ms_win_crt_string_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-string-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_crt_time_l1_1_0.dll">
+ <File Id="api_ms_win_crt_time_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-time-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="api_ms_win_crt_utility_l1_1_0.dll">
+ <File Id="api_ms_win_crt_utility_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-utility-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="ucrtbase.dll">
+ <File Id="ucrtbase.dll" Source="$(var.RedistDirUCRT)\ucrtbase.dll" KeyPath="yes" />
+</Component>
+
+</Include>
diff --git a/installer/MurmurUCRTComponentRefs.wxi b/installer/MurmurUCRTComponentRefs.wxi
new file mode 100644
index 000000000..cf5280e73
--- /dev/null
+++ b/installer/MurmurUCRTComponentRefs.wxi
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Include>
+
+<!-- This file is auto-generated via gen-ucrt.py. Please don't touch by hand -->
+
+<ComponentRef Id="Murmur_api_ms_win_core_console_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_datetime_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_debug_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_errorhandling_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_file_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_file_l1_2_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_file_l2_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_handle_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_heap_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_interlocked_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_libraryloader_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_localization_l1_2_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_memory_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_namedpipe_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_processenvironment_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_processthreads_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_processthreads_l1_1_1.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_profile_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_rtlsupport_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_string_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_synch_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_synch_l1_2_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_sysinfo_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_timezone_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_core_util_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_crt_conio_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_crt_convert_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_crt_environment_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_crt_filesystem_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_crt_heap_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_crt_locale_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_crt_math_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_crt_multibyte_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_crt_private_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_crt_process_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_crt_runtime_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_crt_stdio_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_crt_string_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_crt_time_l1_1_0.dll" />
+<ComponentRef Id="Murmur_api_ms_win_crt_utility_l1_1_0.dll" />
+<ComponentRef Id="Murmur_ucrtbase.dll" />
+
+</Include>
diff --git a/installer/MurmurUCRTComponents.wxi b/installer/MurmurUCRTComponents.wxi
new file mode 100644
index 000000000..775c83f00
--- /dev/null
+++ b/installer/MurmurUCRTComponents.wxi
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Include>
+
+<!-- This file is auto-generated via gen-ucrt.py. Please don't touch by hand -->
+
+<Component Id="Murmur_api_ms_win_core_console_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_console_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-console-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_datetime_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_datetime_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-datetime-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_debug_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_debug_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-debug-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_errorhandling_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_errorhandling_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-errorhandling-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_file_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_file_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-file-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_file_l1_2_0.dll">
+ <File Id="Murmur_api_ms_win_core_file_l1_2_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-file-l1-2-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_file_l2_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_file_l2_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-file-l2-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_handle_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_handle_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-handle-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_heap_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_heap_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-heap-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_interlocked_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_interlocked_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-interlocked-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_libraryloader_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_libraryloader_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-libraryloader-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_localization_l1_2_0.dll">
+ <File Id="Murmur_api_ms_win_core_localization_l1_2_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-localization-l1-2-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_memory_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_memory_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-memory-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_namedpipe_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_namedpipe_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-namedpipe-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_processenvironment_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_processenvironment_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-processenvironment-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_processthreads_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_processthreads_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-processthreads-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_processthreads_l1_1_1.dll">
+ <File Id="Murmur_api_ms_win_core_processthreads_l1_1_1.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-processthreads-l1-1-1.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_profile_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_profile_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-profile-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_rtlsupport_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_rtlsupport_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-rtlsupport-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_string_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_string_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-string-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_synch_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_synch_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-synch-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_synch_l1_2_0.dll">
+ <File Id="Murmur_api_ms_win_core_synch_l1_2_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-synch-l1-2-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_sysinfo_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_sysinfo_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-sysinfo-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_timezone_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_timezone_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-timezone-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_core_util_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_core_util_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-core-util-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_crt_conio_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_crt_conio_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-conio-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_crt_convert_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_crt_convert_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-convert-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_crt_environment_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_crt_environment_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-environment-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_crt_filesystem_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_crt_filesystem_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-filesystem-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_crt_heap_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_crt_heap_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-heap-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_crt_locale_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_crt_locale_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-locale-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_crt_math_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_crt_math_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-math-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_crt_multibyte_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_crt_multibyte_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-multibyte-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_crt_private_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_crt_private_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-private-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_crt_process_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_crt_process_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-process-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_crt_runtime_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_crt_runtime_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-runtime-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_crt_stdio_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_crt_stdio_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-stdio-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_crt_string_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_crt_string_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-string-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_crt_time_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_crt_time_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-time-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_api_ms_win_crt_utility_l1_1_0.dll">
+ <File Id="Murmur_api_ms_win_crt_utility_l1_1_0.dll" Source="$(var.RedistDirUCRT)\api-ms-win-crt-utility-l1-1-0.dll" KeyPath="yes" />
+</Component>
+<Component Id="Murmur_ucrtbase.dll">
+ <File Id="Murmur_ucrtbase.dll" Source="$(var.RedistDirUCRT)\ucrtbase.dll" KeyPath="yes" />
+</Component>
+
+</Include>
diff --git a/installer/Product.wxs b/installer/Product.wxs
index d166a2199..e591be454 100644
--- a/installer/Product.wxs
+++ b/installer/Product.wxs
@@ -137,6 +137,10 @@
<ComponentRef Id="vcruntime140.dll" />
<?endif ?>
+ <?ifdef RedistDirUCRT ?>
+ <?include "MumbleUCRTComponentRefs.wxi" ?>
+ <?endif ?>
+
<ComponentRef Id="dbghelp.dll" />
<Feature Id="MumbleDesktopShortcutFeature" Title="!(loc.MUMBLE_SEC_DesktopShortcut)" Description="!(loc.DESC_DesktopShortcut)" InstallDefault="followParent" AllowAdvertise="no">
@@ -154,6 +158,9 @@
<ComponentRef Id="Murmur_msvcp140.dll" />
<ComponentRef Id="Murmur_vcruntime140.dll" />
<?endif ?>
+ <?ifdef RedistDirUCRT ?>
+ <?include "MurmurUCRTComponentRefs.wxi" ?>
+ <?endif ?>
<ComponentRef Id="Murmur_dbghelp.dll" />
<?endif ?>
diff --git a/installer/Settings.wxi b/installer/Settings.wxi
index 2347ef269..7533866b0 100644
--- a/installer/Settings.wxi
+++ b/installer/Settings.wxi
@@ -92,6 +92,7 @@
<!-- Don't embed VCRedist files if MumbleNoEmbedVCRedist env var is set. -->
<?ifndef env.MumbleNoEmbedVCRedist ?>
+ <!-- VC CRT -->
<?ifndef env.MumbleRedistDirVC14 ?>
<?if $(sys.BUILDARCH) = "x86" ?>
<?define RedistDirVC14 = "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x86\Microsoft.VC140.CRT" ?>
@@ -101,6 +102,17 @@
<?else ?>
<?define RedistDirVC14 = "$(env.MumbleRedistDirVC14)" ?>
<?endif ?>
+
+ <!-- Universal CRT -->
+ <?ifndef env.MumbleRedistDirUCRT ?>
+ <?if $(sys.BUILDARCH) = "x86" ?>
+ <?define RedistDirUCRT = "C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x86" ?>
+ <?elseif $(sys.BUILDARCH) = "x64" ?>
+ <?define RedistDirUCRT = "C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x64" ?>
+ <?endif ?>
+ <?else ?>
+ <?define RedistDirUCRT = "$(env.MumbleRedistDirUCRT)" ?>
+ <?endif ?>
<?endif ?>
<?define Win81SDKDir = "C:\Program Files (x86)\Windows Kits\8.1" ?>
diff --git a/installer/gen-ucrt.py b/installer/gen-ucrt.py
new file mode 100644
index 000000000..5494e630d
--- /dev/null
+++ b/installer/gen-ucrt.py
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+# Copyright 2005-2017 The Mumble Developers. All rights reserved.
+# Use of this source code is governed by a BSD-style license
+# that can be found in the LICENSE file at the root of the
+# Mumble source tree or at <https://www.mumble.info/LICENSE>.
+
+from __future__ import (unicode_literals, print_function, division)
+
+import os
+import codecs
+
+def mangleComponentId(fn):
+ # Component IDs in WiX can't contain dashes. Mangle them with _ instead.
+ return fn.replace('-', '_')
+
+def fileHeader(f):
+ f.write('<?xml version="1.0" encoding="utf-8"?>\r\n')
+ f.write('<Include>\r\n')
+ f.write('\r\n')
+ f.write('<!-- This file is auto-generated via gen-ucrt.py. Please don\'t touch by hand -->\r\n')
+ f.write('\r\n')
+
+def fileFooter(f):
+ f.write('\r\n')
+ f.write('</Include>\r\n')
+
+def gencomponents(f, files, prefix=''):
+ for fn in files:
+ f.write('<Component Id="{0}">\r\n'.format(mangleComponentId(prefix+fn)))
+ f.write(' <File Id="{0}" Source="$(var.RedistDirUCRT)\{1}" KeyPath="yes" />\r\n'.format(mangleComponentId(prefix+fn), fn))
+ f.write('</Component>\r\n')
+
+def gencomponentrefs(f, files, prefix=''):
+ for fn in files:
+ f.write('''<ComponentRef Id="{0}" />\r\n'''.format(mangleComponentId(prefix+fn)))
+
+def main():
+ ucrtx64 = 'C:\\Program Files (x86)\\Windows Kits\\10\\Redist\\ucrt\\DLLs\\x64'
+ ucrtx86 = 'C:\\Program Files (x86)\\Windows Kits\\10\\Redist\\ucrt\\DLLs\\x86'
+
+ filesx86 = os.listdir(ucrtx86)
+ filesx64 = os.listdir(ucrtx64)
+
+ # Perform a quick sanity test to ensure that both x86 and x64 UCRT variants
+ # use the same filenames.
+ if set(filesx86) != set(filesx64):
+ raise Exception('Fatal error: x86 UCRT files are not equivalent to x64 UCRT files')
+
+ # ...Since they're the same, let's just use the
+ # filenames from x86.
+ files = filesx86
+
+ with codecs.open('MumbleUCRTComponents.wxi', 'wb', 'utf-8') as f:
+ fileHeader(f)
+ gencomponents(f, files)
+ fileFooter(f)
+
+ with codecs.open('MurmurUCRTComponents.wxi', 'wb', 'utf-8') as f:
+ fileHeader(f)
+ gencomponents(f, files, 'Murmur_')
+ fileFooter(f)
+
+ with codecs.open('MumbleUCRTComponentRefs.wxi', 'wb', 'utf-8') as f:
+ fileHeader(f)
+ gencomponentrefs(f, files)
+ fileFooter(f)
+
+ with codecs.open('MurmurUCRTComponentRefs.wxi', 'wb', 'utf-8') as f:
+ fileHeader(f)
+ gencomponentrefs(f, files, 'Murmur_')
+ fileFooter(f)
+
+if __name__ == '__main__':
+ main()