[PATCH for-6.1] qga-win/msi: fix missing libstdc++-6 DLL in MSI installer

Michael Roth posted 1 patch 2 years, 9 months ago
Test checkpatch passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20210803043536.1071251-1-michael.roth@amd.com
qga/installer/qemu-ga.wxs | 4 ++++
1 file changed, 4 insertions(+)
[PATCH for-6.1] qga-win/msi: fix missing libstdc++-6 DLL in MSI installer
Posted by Michael Roth 2 years, 9 months ago
libstdc++ is required for the qga-vss.dll that provides fsfreeze
functionality. Currently it is not provided by the MSI installer,
resulting in fsfreeze being disabled in guest environments where it has
not been installed by other means.

In the future this would be better handled via gcc-cpp ComponentGroup
provided by msitools, but that would be better handled with a general
rework of DLL dependency handling in the installer build. Keep it
simple for now to fix this regression.

Tested with Fedora 34 mingw build environment.

Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Kostiantyn Kostiuk <konstantin@daynix.com>
Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
Cc: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Michael Roth <michael.roth@amd.com>
---
 qga/installer/qemu-ga.wxs | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/qga/installer/qemu-ga.wxs b/qga/installer/qemu-ga.wxs
index ce7b25b5e1..0950e8c6be 100644
--- a/qga/installer/qemu-ga.wxs
+++ b/qga/installer/qemu-ga.wxs
@@ -84,6 +84,9 @@
             <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="QEMU-GA" Wait="yes" />
           </Component>
           <?ifdef var.InstallVss?>
+          <Component Id="libstdc++_6_lib" Guid="{55E737B5-9127-4A11-9FC3-A29367714574}">
+            <File Id="libstdc++-6.lib" Name="libstdc++-6.dll" Source="$(var.Mingw_bin)/libstdc++-6.dll" KeyPath="yes" DiskId="1"/>
+          </Component>
           <Component Id="qga_vss_dll" Guid="{CB19C453-FABB-4BB1-ABAB-6B74F687BFBB}">
             <File Id="qga_vss.dll" Name="qga-vss.dll" Source="$(env.BUILD_DIR)/qga/vss-win32/qga-vss.dll" KeyPath="yes" DiskId="1"/>
           </Component>
@@ -164,6 +167,7 @@
     <Feature Id="QEMUFeature" Title="QEMU Guest Agent" Level="1">
       <ComponentRef Id="qemu_ga" />
       <?ifdef var.InstallVss?>
+      <ComponentRef Id="libstdc++_6_lib" />
       <ComponentRef Id="qga_vss_dll" />
       <ComponentRef Id="qga_vss_tlb" />
       <?endif?>
-- 
2.25.1


Re: [PATCH for-6.1] qga-win/msi: fix missing libstdc++-6 DLL in MSI installer
Posted by Marc-André Lureau 2 years, 9 months ago
On Tue, Aug 3, 2021 at 8:36 AM Michael Roth <michael.roth@amd.com> wrote:

> libstdc++ is required for the qga-vss.dll that provides fsfreeze
> functionality. Currently it is not provided by the MSI installer,
> resulting in fsfreeze being disabled in guest environments where it has
> not been installed by other means.
>
> In the future this would be better handled via gcc-cpp ComponentGroup
> provided by msitools, but that would be better handled with a general
> rework of DLL dependency handling in the installer build. Keep it
> simple for now to fix this regression.
>
> Tested with Fedora 34 mingw build environment.
>
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> Cc: Kostiantyn Kostiuk <konstantin@daynix.com>
> Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
> Cc: Philippe Mathieu-Daudé <philmd@redhat.com>
> Signed-off-by: Michael Roth <michael.roth@amd.com>
>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

---
>  qga/installer/qemu-ga.wxs | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/qga/installer/qemu-ga.wxs b/qga/installer/qemu-ga.wxs
> index ce7b25b5e1..0950e8c6be 100644
> --- a/qga/installer/qemu-ga.wxs
> +++ b/qga/installer/qemu-ga.wxs
> @@ -84,6 +84,9 @@
>              <ServiceControl Id="StartService" Start="install" Stop="both"
> Remove="uninstall" Name="QEMU-GA" Wait="yes" />
>            </Component>
>            <?ifdef var.InstallVss?>
> +          <Component Id="libstdc++_6_lib"
> Guid="{55E737B5-9127-4A11-9FC3-A29367714574}">
> +            <File Id="libstdc++-6.lib" Name="libstdc++-6.dll"
> Source="$(var.Mingw_bin)/libstdc++-6.dll" KeyPath="yes" DiskId="1"/>
> +          </Component>
>            <Component Id="qga_vss_dll"
> Guid="{CB19C453-FABB-4BB1-ABAB-6B74F687BFBB}">
>              <File Id="qga_vss.dll" Name="qga-vss.dll"
> Source="$(env.BUILD_DIR)/qga/vss-win32/qga-vss.dll" KeyPath="yes"
> DiskId="1"/>
>            </Component>
> @@ -164,6 +167,7 @@
>      <Feature Id="QEMUFeature" Title="QEMU Guest Agent" Level="1">
>        <ComponentRef Id="qemu_ga" />
>        <?ifdef var.InstallVss?>
> +      <ComponentRef Id="libstdc++_6_lib" />
>        <ComponentRef Id="qga_vss_dll" />
>        <ComponentRef Id="qga_vss_tlb" />
>        <?endif?>
> --
> 2.25.1
>
>