diff mbox

[v3,3/4] qemu-ga: Created a separate component for each installed file in the MSI

Message ID 1438624464-22770-4-git-send-email-leonid@daynix.com
State New
Headers show

Commit Message

Leonid Bloch Aug. 3, 2015, 5:54 p.m. UTC
This is done to follow the recommendations given here: https://msdn.microsoft.com/en-us/library/aa368269%28VS.85%29.aspx

Signed-off-by: Leonid Bloch <leonid@daynix.com>
---
 qga/installer/qemu-ga.wxs | 47 ++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 36 insertions(+), 11 deletions(-)

Comments

Marc-André Lureau Aug. 3, 2015, 8:40 p.m. UTC | #1
You could just use generated GUID with * now, with that Reviewed-by:
Marc-André Lureau <marcandre.lureau@redhat.com>
Michael Roth Aug. 25, 2015, 9:48 p.m. UTC | #2
Quoting Leonid Bloch (2015-08-03 12:54:23)
> This is done to follow the recommendations given here: https://msdn.microsoft.com/en-us/library/aa368269%28VS.85%29.aspx
> 
> Signed-off-by: Leonid Bloch <leonid@daynix.com>
> ---
>  qga/installer/qemu-ga.wxs | 47 ++++++++++++++++++++++++++++++++++++-----------
>  1 file changed, 36 insertions(+), 11 deletions(-)
> 
> diff --git a/qga/installer/qemu-ga.wxs b/qga/installer/qemu-ga.wxs
> index dac1df0..2302745 100644
> --- a/qga/installer/qemu-ga.wxs
> +++ b/qga/installer/qemu-ga.wxs
> @@ -71,16 +71,6 @@
>          <Directory Id="qemu_ga_directory" Name="Qemu-ga">
>            <Component Id="qemu_ga" Guid="{908B7199-DE2A-4DC6-A8D0-27A5AE444FEA}">
>              <File Id="qemu_ga.exe" Name="qemu-ga.exe" Source="../../qemu-ga.exe" KeyPath="yes" DiskId="1"/>
> -            <?ifdef var.InstallVss ?>
> -            <File Id="qga_vss.dll" Name="qga-vss.dll" Source="../vss-win32/qga-vss.dll" KeyPath="no" DiskId="1"/>
> -            <File Id="qga_vss.tlb" Name="qga-vss.tlb" Source="../vss-win32/qga-vss.tlb" KeyPath="no" DiskId="1"/>
> -            <?endif?>
> -            <File Id="iconv.dll" Name="iconv.dll" Source="$(var.Mingw_bin)/iconv.dll" KeyPath="no" DiskId="1"/>
> -            <File Id="libgcc_arch_lib" Name="$(var.ArchLib)" Source="$(var.Mingw_bin)/$(var.ArchLib)" KeyPath="no" DiskId="1"/>
> -            <File Id="libglib_2.0_0.dll" Name="libglib-2.0-0.dll" Source="$(var.Mingw_bin)/libglib-2.0-0.dll" KeyPath="no" DiskId="1"/>
> -            <File Id="libintl_8.dll" Name="libintl-8.dll" Source="$(var.Mingw_bin)/libintl-8.dll" KeyPath="no" DiskId="1"/>
> -            <File Id="libssp_0.dll" Name="libssp-0.dll" Source="$(var.Mingw_bin)/libssp-0.dll" KeyPath="no" DiskId="1"/>
> -            <File Id="libwinpthread_1.dll" Name="libwinpthread-1.dll" Source="$(var.Mingw_bin)/libwinpthread-1.dll" KeyPath="no" DiskId="1"/>
>              <ServiceInstall
>                Id="ServiceInstaller"
>                Type="ownProcess"
> @@ -97,7 +87,32 @@
>              </ServiceInstall>
>              <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="QEMU-GA" Wait="no" />
>            </Component>
> -
> +          <?ifdef var.InstallVss?>
> +          <Component Id="qga_vss_dll" Guid="{CB19C453-FABB-4BB1-ABAB-6B74F687BFBB}">
> +            <File Id="qga_vss.dll" Name="qga-vss.dll" Source="../vss-win32/qga-vss.dll" KeyPath="yes" DiskId="1"/>

Is there a reason these paths are seemingly relative to
qga/installer/qemu-ga.wxs? I'd imagine that works for running wixl
command within that directly, but top-level Makefile 'msi' ends up
bombing if I do 'make msi':

[mdroth@vm4 qemu-build-w64]$ ../w/qemu4.git/configure --cross-prefix=x86_64-w64-mingw32- \
  --with-vss-sdk=/home/mdroth/w/vss-win32/ --target-list=x86_64-softmmu
  --extra-cflags=-Wall --enable-guest-agent --enable-guest-agent-msi
...

[mdroth@vm4 qemu-build-w64]$ make -j4 qemu
...
  CC    trace/generated-events.o
  AR    libqemustub.a
  CC    qemu-img.o
  CC    qmp-marshal.o
  AR    libqemuutil.a
  LINK  qemu-ga.exe
  LINK  qemu-img.exe
  LINK  qemu-io.exe
...

[mdroth@vm4 qemu-build-w64]$ make msi
     LEX convert-dtsv0-lexer.lex.c
make[1]: flex: Command not found
     BISON dtc-parser.tab.c
make[1]: bison: Command not found
     LEX dtc-lexer.lex.c
make[1]: flex: Command not found
  WIXL  qemu-ga-x86_64.msi
Couldn't find file ../../qemu-ga.exe
make: *** [qemu-ga-x86_64.msi] Error 1

The fix seems simple enough, but I want to make sure I'm not doing something
stupid and have some idea of how people are using the current MSI installer
code.
Michael Roth Aug. 25, 2015, 9:58 p.m. UTC | #3
Quoting Michael Roth (2015-08-25 16:48:25)
> Quoting Leonid Bloch (2015-08-03 12:54:23)
> > This is done to follow the recommendations given here: https://msdn.microsoft.com/en-us/library/aa368269%28VS.85%29.aspx
> > 
> > Signed-off-by: Leonid Bloch <leonid@daynix.com>
> > ---
> >  qga/installer/qemu-ga.wxs | 47 ++++++++++++++++++++++++++++++++++++-----------
> >  1 file changed, 36 insertions(+), 11 deletions(-)
> > 
> > diff --git a/qga/installer/qemu-ga.wxs b/qga/installer/qemu-ga.wxs
> > index dac1df0..2302745 100644
> > --- a/qga/installer/qemu-ga.wxs
> > +++ b/qga/installer/qemu-ga.wxs
> > @@ -71,16 +71,6 @@
> >          <Directory Id="qemu_ga_directory" Name="Qemu-ga">
> >            <Component Id="qemu_ga" Guid="{908B7199-DE2A-4DC6-A8D0-27A5AE444FEA}">
> >              <File Id="qemu_ga.exe" Name="qemu-ga.exe" Source="../../qemu-ga.exe" KeyPath="yes" DiskId="1"/>
> > -            <?ifdef var.InstallVss ?>
> > -            <File Id="qga_vss.dll" Name="qga-vss.dll" Source="../vss-win32/qga-vss.dll" KeyPath="no" DiskId="1"/>
> > -            <File Id="qga_vss.tlb" Name="qga-vss.tlb" Source="../vss-win32/qga-vss.tlb" KeyPath="no" DiskId="1"/>
> > -            <?endif?>
> > -            <File Id="iconv.dll" Name="iconv.dll" Source="$(var.Mingw_bin)/iconv.dll" KeyPath="no" DiskId="1"/>
> > -            <File Id="libgcc_arch_lib" Name="$(var.ArchLib)" Source="$(var.Mingw_bin)/$(var.ArchLib)" KeyPath="no" DiskId="1"/>
> > -            <File Id="libglib_2.0_0.dll" Name="libglib-2.0-0.dll" Source="$(var.Mingw_bin)/libglib-2.0-0.dll" KeyPath="no" DiskId="1"/>
> > -            <File Id="libintl_8.dll" Name="libintl-8.dll" Source="$(var.Mingw_bin)/libintl-8.dll" KeyPath="no" DiskId="1"/>
> > -            <File Id="libssp_0.dll" Name="libssp-0.dll" Source="$(var.Mingw_bin)/libssp-0.dll" KeyPath="no" DiskId="1"/>
> > -            <File Id="libwinpthread_1.dll" Name="libwinpthread-1.dll" Source="$(var.Mingw_bin)/libwinpthread-1.dll" KeyPath="no" DiskId="1"/>
> >              <ServiceInstall
> >                Id="ServiceInstaller"
> >                Type="ownProcess"
> > @@ -97,7 +87,32 @@
> >              </ServiceInstall>
> >              <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="QEMU-GA" Wait="no" />
> >            </Component>
> > -
> > +          <?ifdef var.InstallVss?>
> > +          <Component Id="qga_vss_dll" Guid="{CB19C453-FABB-4BB1-ABAB-6B74F687BFBB}">
> > +            <File Id="qga_vss.dll" Name="qga-vss.dll" Source="../vss-win32/qga-vss.dll" KeyPath="yes" DiskId="1"/>
> 
> Is there a reason these paths are seemingly relative to
> qga/installer/qemu-ga.wxs? I'd imagine that works for running wixl
> command within that directly, but top-level Makefile 'msi' ends up

*'msi' target

*within that directory

> bombing if I do 'make msi':
> 
> [mdroth@vm4 qemu-build-w64]$ ../w/qemu4.git/configure --cross-prefix=x86_64-w64-mingw32- \
>   --with-vss-sdk=/home/mdroth/w/vss-win32/ --target-list=x86_64-softmmu
>   --extra-cflags=-Wall --enable-guest-agent --enable-guest-agent-msi
> ...
> 
> [mdroth@vm4 qemu-build-w64]$ make -j4 qemu

`make -j4` was the command, not sure how that 'qemu' slipped in.

> ...
>   CC    trace/generated-events.o
>   AR    libqemustub.a
>   CC    qemu-img.o
>   CC    qmp-marshal.o
>   AR    libqemuutil.a
>   LINK  qemu-ga.exe
>   LINK  qemu-img.exe
>   LINK  qemu-io.exe
> ...
> 
> [mdroth@vm4 qemu-build-w64]$ make msi
>      LEX convert-dtsv0-lexer.lex.c
> make[1]: flex: Command not found
>      BISON dtc-parser.tab.c
> make[1]: bison: Command not found
>      LEX dtc-lexer.lex.c
> make[1]: flex: Command not found
>   WIXL  qemu-ga-x86_64.msi
> Couldn't find file ../../qemu-ga.exe
> make: *** [qemu-ga-x86_64.msi] Error 1
> 
> The fix seems simple enough, but I want to make sure I'm not doing something
> stupid and have some idea of how people are using the current MSI installer
> code.
> 
>
Leonid Bloch Aug. 26, 2015, 9:46 a.m. UTC | #4
Thanks for pointing that out, Michael!

This indeed happens when configure is called out of tree.
But this bug was not introduced with this series of patches, so it is
irrelevant here.
We will issue another patch to address it shortly.

Thanks again,
Leonid.

On Wed, Aug 26, 2015 at 12:48 AM, Michael Roth
<mdroth@linux.vnet.ibm.com> wrote:
> Quoting Leonid Bloch (2015-08-03 12:54:23)
>> This is done to follow the recommendations given here: https://msdn.microsoft.com/en-us/library/aa368269%28VS.85%29.aspx
>>
>> Signed-off-by: Leonid Bloch <leonid@daynix.com>
>> ---
>>  qga/installer/qemu-ga.wxs | 47 ++++++++++++++++++++++++++++++++++++-----------
>>  1 file changed, 36 insertions(+), 11 deletions(-)
>>
>> diff --git a/qga/installer/qemu-ga.wxs b/qga/installer/qemu-ga.wxs
>> index dac1df0..2302745 100644
>> --- a/qga/installer/qemu-ga.wxs
>> +++ b/qga/installer/qemu-ga.wxs
>> @@ -71,16 +71,6 @@
>>          <Directory Id="qemu_ga_directory" Name="Qemu-ga">
>>            <Component Id="qemu_ga" Guid="{908B7199-DE2A-4DC6-A8D0-27A5AE444FEA}">
>>              <File Id="qemu_ga.exe" Name="qemu-ga.exe" Source="../../qemu-ga.exe" KeyPath="yes" DiskId="1"/>
>> -            <?ifdef var.InstallVss ?>
>> -            <File Id="qga_vss.dll" Name="qga-vss.dll" Source="../vss-win32/qga-vss.dll" KeyPath="no" DiskId="1"/>
>> -            <File Id="qga_vss.tlb" Name="qga-vss.tlb" Source="../vss-win32/qga-vss.tlb" KeyPath="no" DiskId="1"/>
>> -            <?endif?>
>> -            <File Id="iconv.dll" Name="iconv.dll" Source="$(var.Mingw_bin)/iconv.dll" KeyPath="no" DiskId="1"/>
>> -            <File Id="libgcc_arch_lib" Name="$(var.ArchLib)" Source="$(var.Mingw_bin)/$(var.ArchLib)" KeyPath="no" DiskId="1"/>
>> -            <File Id="libglib_2.0_0.dll" Name="libglib-2.0-0.dll" Source="$(var.Mingw_bin)/libglib-2.0-0.dll" KeyPath="no" DiskId="1"/>
>> -            <File Id="libintl_8.dll" Name="libintl-8.dll" Source="$(var.Mingw_bin)/libintl-8.dll" KeyPath="no" DiskId="1"/>
>> -            <File Id="libssp_0.dll" Name="libssp-0.dll" Source="$(var.Mingw_bin)/libssp-0.dll" KeyPath="no" DiskId="1"/>
>> -            <File Id="libwinpthread_1.dll" Name="libwinpthread-1.dll" Source="$(var.Mingw_bin)/libwinpthread-1.dll" KeyPath="no" DiskId="1"/>
>>              <ServiceInstall
>>                Id="ServiceInstaller"
>>                Type="ownProcess"
>> @@ -97,7 +87,32 @@
>>              </ServiceInstall>
>>              <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="QEMU-GA" Wait="no" />
>>            </Component>
>> -
>> +          <?ifdef var.InstallVss?>
>> +          <Component Id="qga_vss_dll" Guid="{CB19C453-FABB-4BB1-ABAB-6B74F687BFBB}">
>> +            <File Id="qga_vss.dll" Name="qga-vss.dll" Source="../vss-win32/qga-vss.dll" KeyPath="yes" DiskId="1"/>
>
> Is there a reason these paths are seemingly relative to
> qga/installer/qemu-ga.wxs? I'd imagine that works for running wixl
> command within that directly, but top-level Makefile 'msi' ends up
> bombing if I do 'make msi':
>
> [mdroth@vm4 qemu-build-w64]$ ../w/qemu4.git/configure --cross-prefix=x86_64-w64-mingw32- \
>   --with-vss-sdk=/home/mdroth/w/vss-win32/ --target-list=x86_64-softmmu
>   --extra-cflags=-Wall --enable-guest-agent --enable-guest-agent-msi
> ...
>
> [mdroth@vm4 qemu-build-w64]$ make -j4 qemu
> ...
>   CC    trace/generated-events.o
>   AR    libqemustub.a
>   CC    qemu-img.o
>   CC    qmp-marshal.o
>   AR    libqemuutil.a
>   LINK  qemu-ga.exe
>   LINK  qemu-img.exe
>   LINK  qemu-io.exe
> ...
>
> [mdroth@vm4 qemu-build-w64]$ make msi
>      LEX convert-dtsv0-lexer.lex.c
> make[1]: flex: Command not found
>      BISON dtc-parser.tab.c
> make[1]: bison: Command not found
>      LEX dtc-lexer.lex.c
> make[1]: flex: Command not found
>   WIXL  qemu-ga-x86_64.msi
> Couldn't find file ../../qemu-ga.exe
> make: *** [qemu-ga-x86_64.msi] Error 1
>
> The fix seems simple enough, but I want to make sure I'm not doing something
> stupid and have some idea of how people are using the current MSI installer
> code.
>
diff mbox

Patch

diff --git a/qga/installer/qemu-ga.wxs b/qga/installer/qemu-ga.wxs
index dac1df0..2302745 100644
--- a/qga/installer/qemu-ga.wxs
+++ b/qga/installer/qemu-ga.wxs
@@ -71,16 +71,6 @@ 
         <Directory Id="qemu_ga_directory" Name="Qemu-ga">
           <Component Id="qemu_ga" Guid="{908B7199-DE2A-4DC6-A8D0-27A5AE444FEA}">
             <File Id="qemu_ga.exe" Name="qemu-ga.exe" Source="../../qemu-ga.exe" KeyPath="yes" DiskId="1"/>
-            <?ifdef var.InstallVss ?>
-            <File Id="qga_vss.dll" Name="qga-vss.dll" Source="../vss-win32/qga-vss.dll" KeyPath="no" DiskId="1"/>
-            <File Id="qga_vss.tlb" Name="qga-vss.tlb" Source="../vss-win32/qga-vss.tlb" KeyPath="no" DiskId="1"/>
-            <?endif?>
-            <File Id="iconv.dll" Name="iconv.dll" Source="$(var.Mingw_bin)/iconv.dll" KeyPath="no" DiskId="1"/>
-            <File Id="libgcc_arch_lib" Name="$(var.ArchLib)" Source="$(var.Mingw_bin)/$(var.ArchLib)" KeyPath="no" DiskId="1"/>
-            <File Id="libglib_2.0_0.dll" Name="libglib-2.0-0.dll" Source="$(var.Mingw_bin)/libglib-2.0-0.dll" KeyPath="no" DiskId="1"/>
-            <File Id="libintl_8.dll" Name="libintl-8.dll" Source="$(var.Mingw_bin)/libintl-8.dll" KeyPath="no" DiskId="1"/>
-            <File Id="libssp_0.dll" Name="libssp-0.dll" Source="$(var.Mingw_bin)/libssp-0.dll" KeyPath="no" DiskId="1"/>
-            <File Id="libwinpthread_1.dll" Name="libwinpthread-1.dll" Source="$(var.Mingw_bin)/libwinpthread-1.dll" KeyPath="no" DiskId="1"/>
             <ServiceInstall
               Id="ServiceInstaller"
               Type="ownProcess"
@@ -97,7 +87,32 @@ 
             </ServiceInstall>
             <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="QEMU-GA" Wait="no" />
           </Component>
-
+          <?ifdef var.InstallVss?>
+          <Component Id="qga_vss_dll" Guid="{CB19C453-FABB-4BB1-ABAB-6B74F687BFBB}">
+            <File Id="qga_vss.dll" Name="qga-vss.dll" Source="../vss-win32/qga-vss.dll" KeyPath="yes" DiskId="1"/>
+          </Component>
+          <Component Id="qga_vss_tlb" Guid="{D8D584B1-59C2-4FB7-A91F-636FF7BFA66E}">
+            <File Id="qga_vss.tlb" Name="qga-vss.tlb" Source="../vss-win32/qga-vss.tlb" KeyPath="yes" DiskId="1"/>
+          </Component>
+          <?endif?>
+          <Component Id="iconv" Guid="{35EE3558-D34B-4F0A-B8BD-430FF0775246}">
+            <File Id="iconv.dll" Name="iconv.dll" Source="$(var.Mingw_bin)/iconv.dll" KeyPath="yes" DiskId="1"/>
+          </Component>
+          <Component Id="libgcc_arch_lib" Guid="{ADD4D07D-4515-4AB6-AF3E-C904961B4BB0}">
+            <File Id="libgcc_arch_lib" Name="$(var.ArchLib)" Source="$(var.Mingw_bin)/$(var.ArchLib)" KeyPath="yes" DiskId="1"/>
+          </Component>
+          <Component Id="libglib" Guid="{D31BFD83-2773-4B65-B45A-E0D2ADA58679}">
+            <File Id="libglib_2.0_0.dll" Name="libglib-2.0-0.dll" Source="$(var.Mingw_bin)/libglib-2.0-0.dll" KeyPath="yes" DiskId="1"/>
+          </Component>
+          <Component Id="libintl" Guid="{A641BC2D-A907-4A94-9149-F30ED430878F}">
+            <File Id="libintl_8.dll" Name="libintl-8.dll" Source="$(var.Mingw_bin)/libintl-8.dll" KeyPath="yes" DiskId="1"/>
+          </Component>
+          <Component Id="libssp" Guid="{7880087B-02B4-4EF6-A5D3-D18F8E3D90E1}">
+            <File Id="libssp_0.dll" Name="libssp-0.dll" Source="$(var.Mingw_bin)/libssp-0.dll" KeyPath="yes" DiskId="1"/>
+          </Component>
+          <Component Id="libwinpthread" Guid="{6C117C78-0F47-4B07-8F34-6BEE11643829}">
+            <File Id="libwinpthread_1.dll" Name="libwinpthread-1.dll" Source="$(var.Mingw_bin)/libwinpthread-1.dll" KeyPath="yes" DiskId="1"/>
+          </Component>
           <Component Id="registry_entries" Guid="{D075D109-51CA-11E3-9F8B-000C29858960}">
             <RegistryKey Root="HKLM"
                          Key="Software\$(env.QEMU_GA_MANUFACTURER)\$(env.QEMU_GA_DISTRO)\Tools\QemuGA">
@@ -131,6 +146,16 @@ 
 
     <Feature Id="QEMUFeature" Title="QEMU Guest Agent" Level="1">
       <ComponentRef Id="qemu_ga" />
+      <?ifdef var.InstallVss?>
+      <ComponentRef Id="qga_vss_dll" />
+      <ComponentRef Id="qga_vss_tlb" />
+      <?endif?>
+      <ComponentRef Id="iconv" />
+      <ComponentRef Id="libgcc_arch_lib" />
+      <ComponentRef Id="libglib" />
+      <ComponentRef Id="libintl" />
+      <ComponentRef Id="libssp" />
+      <ComponentRef Id="libwinpthread" />
       <ComponentRef Id="registry_entries" />
     </Feature>