VirtualBox

Changeset 59390 in vbox for trunk/src/VBox/Installer/win


Ignore:
Timestamp:
Jan 19, 2016 1:29:44 AM (9 years ago)
Author:
vboxsync
Message:

Installer/win: Simplified some of the proxy stub changes, but added a little complication wrt selecting which proxy stub DLL to use on 64-bit machines (the one for W7+ or the one for legacy windowses).

Location:
trunk/src/VBox/Installer/win
Files:
4 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Installer/win/Makefile.kmk

    r59329 r59390  
    139139        $(VBOX_WIN_INST_OUT_DIR)/VirtualBox.wixobj.dep \
    140140        $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_TypeLib.wxi \
     141        $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_TypeLib_x86.wxi \
     142        $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_ProxyStub.wxi \
    141143        $(if $(VBOX_WITH_QTGUI),$(VBOX_WIN_INST_OUT_DIR)/VBoxGuiNLS.wxi) \
    142144        $(VBOX_WIN_INST_OUT_DIR)/VBoxKey.wxi \
     
    146148                $(VBOX_WIN_INST_OUT_DIR)/NLS/$(lang).mst \
    147149                $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_$(lang).wixobj \
     150                $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_$(lang).wixobj.dep \
     151                $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_$(lang).wixpdb \
    148152                $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_$(lang).msi) \
    149153        $(VBOX_WIN_INST_OUT_DIR)/DirComponentsAndFiles_DTrace.wxi \
     
    520524                -E 'VBOX_SIGNING_MODE=$(strip $(if $(VBOX_SIGNING_MODE),$(VBOX_SIGNING_MODE),none))' \
    521525                -E 'VBOX_GUI_USE_QGL=$(if $(VBOX_GUI_USE_QGL),yes,no)' \
     526                -E 'VBOX_MIDL_PROXY_CLSID=$(VBOX_MIDL_PROXY_CLSID)' \
    522527                $(if $(VBOX_WITH_MSM_INSTALL), \
    523528                        $(foreach module,$(VBOX_INSTALLER_MERGE_MODULES), \
     
    608613                -E 'VBOX_SIGNING_MODE=$(strip $(if $(VBOX_SIGNING_MODE),$(VBOX_SIGNING_MODE),none))' \
    609614                -E 'VBOX_GUI_USE_QGL=$(if $(VBOX_GUI_USE_QGL),yes,no)' \
     615                -E 'VBOX_MIDL_PROXY_CLSID=$(VBOX_MIDL_PROXY_CLSID)' \
    610616                -E 'VBOX_WINDOWS_ICON_FILE=$(subst /,\,$(VBOX_WINDOWS_ICON_FILE))' \
    611617                -E 'VBOX_WITH_32_ON_64_MAIN_API=$(if $(VBOX_WITH_32_ON_64_MAIN_API),yes,no)' \
     
    656662#
    657663$(VBOX_WIN_INST_OUT_DIR)/VirtualBox_TypeLib.wxi: \
    658                 $(PATH_SUB_CURRENT)/VirtualBox_TypeLib.xsl \
     664                $(PATH_SUB_CURRENT)/$(if-expr defined(VBOX_WITH_MIDL_PROXY_STUB),VirtualBox_TypeLibWithInterfaces.xsl,VirtualBox_TypeLib.xsl) \
    659665                $(VBOX_XIDL_FILE) \
    660666                $(MAKEFILE) \
    661                $(if-expr defined(VBOX_WITH_MIDL_PROXY_STUB),$(PATH_STAGE_BIN)/VBoxProxyStub$(if-expr "$(KBUILD_TARGET_ARCH)" == "amd64",-x86,).dll,) \
    662667                | $$(dir $$@)
    663 ifndef VBOX_WITH_MIDL_PROXY_STUB
    664         $(VBOX_XSLTPROC) -o $@ $< $(VBOX_XIDL_FILE)
    665 else
    666         $(VBOX_XSLTPROC) -o "[email protected]" $< $(VBOX_XIDL_FILE)
    667         $(VBOX_PATH_WIX)/heat.exe \
    668                 file $(PATH_STAGE_BIN)/VBoxProxyStub$(if-expr "$(KBUILD_TARGET_ARCH)" == "amd64",-x86,).dll \
    669                 -nologo -o [email protected]
    670         $(SED) -e '/\<Interface Id/!d' -e 's/^[[:space:]]*/    /' [email protected] --output [email protected]
    671         $(SED) -e '/<\/AppId>/{' -e 'r [email protected]' -e '}' "[email protected]" --output $@
    672         $(RM) -f -- "[email protected]" "[email protected]" "[email protected]"
    673 endif
     668        $(VBOX_XSLTPROC) \
     669                $(if-expr defined(VBOX_WITH_MIDL_PROXY_STUB),--stringparam "a_sProxyStubClsid" '$(VBOX_MIDL_PROXY_CLSID)',) \
     670                -o $@ $< $(VBOX_XIDL_FILE)
    674671
    675672$(VBOX_WIN_INST_OUT_DIR)/VirtualBox_TypeLib_x86.wxi: \
    676                 $(PATH_SUB_CURRENT)/VirtualBox_TypeLib.xsl \
     673                $(PATH_SUB_CURRENT)/$(if-expr defined(VBOX_WITH_MIDL_PROXY_STUB),VirtualBox_TypeLibWithInterfaces.xsl,VirtualBox_TypeLib.xsl) \
    677674                $(VBOX_XIDL_FILE) \
    678                $(if-expr defined(VBOX_WITH_MIDL_PROXY_STUB),$(PATH_STAGE_BIN)/VBoxProxyStub-x86.dll,) \
    679675                | $$(dir $$@)
    680 ifndef VBOX_WITH_MIDL_PROXY_STUB
    681         $(VBOX_XSLTPROC) --stringparam "a_sTarget" "VBoxClient-x86" -o [email protected] $< $(VBOX_XIDL_FILE)
    682         $(SED) -e 's/VBoxC/VBoxClient_x86/g' --output $@ [email protected]
    683         $(RM) -f [email protected]
    684 else
    685         $(VBOX_XSLTPROC) --stringparam "a_sTarget" "VBoxClient-x86" -o "[email protected]" $< $(VBOX_XIDL_FILE)
    686         $(SED) -e 's/VBoxC/VBoxClient_x86/g' --output "[email protected]" "[email protected]"
    687         $(VBOX_PATH_WIX)/heat.exe \
    688                 file $(PATH_STAGE_BIN)/VBoxProxyStub-x86.dll \
    689                 -nologo -o [email protected]
    690         $(SED) -e '/\<Interface Id/!d' -e 's/^[[:space:]]*/    /' [email protected] --output [email protected]
    691         $(SED) -e '/<\/AppId>/{' -e 'r [email protected]' -e '}' [email protected] --output $@
    692         $(RM) -f -- "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]"
    693 endif
     676        $(VBOX_XSLTPROC) --stringparam "a_sTarget" "VBoxClient-x86" \
     677                $(if-expr defined(VBOX_WITH_MIDL_PROXY_STUB),--stringparam "a_sProxyStubClsid" '$(VBOX_MIDL_PROXY_CLSID)',) \
     678                -o $@ $< $(VBOX_XIDL_FILE)
    694679
    695680#
  • trunk/src/VBox/Installer/win/VBoxMergeApp.wxi

    r59363 r59390  
    6464        </File>
    6565
    66         <!-- Note: This file ID *must not* be changed because of our typelib template generation file! -->
    67 <?if $(env.VBOX_WITH_MIDL_PROXY_STUB) != "yes" ?>
    6866        <!-- We set KeyPath on this file to instruct TypeLib to read the TLB resource from it
    6967             and create appropriate Interface registry entries. Note that the same TLB is present
    7068             in VBoxSVC.exe - it's just a matter of choice which one to use -->
     69        <!-- Note: This file ID *must not* be changed because of our typelib template generation file! -->
    7170        <File Id="VBoxC" Name="VBoxC.dll"
    7271              Source="$(env.PATH_OUT)\bin\VBoxC.dll" KeyPath="yes">
    7372        </File>
    74 <?else?>
    75         <File Id="VBoxC" Name="VBoxC.dll"
    76               Source="$(env.PATH_OUT)\bin\VBoxC.dll" KeyPath="no">
    77         </File>
    78 
    79         <!-- We put the typelib in the proxy stub since it's always required to be loaded and is
    80              significantly smaller than VBoxC.dll.  So, KeyPath for this element instead of the above. -->
     73
     74<?if $(env.VBOX_WITH_MIDL_PROXY_STUB) != "yes" ?>
     75        <!-- Include the auto-generated TypeLib block -->
     76        <?include $(env.PATH_TARGET)\VirtualBox_TypeLib.wxi ?>
     77<?endif?>
     78    </Component>
     79
     80<?if $(env.VBOX_WITH_MIDL_PROXY_STUB) = "yes" ?>
     81
     82    <Component Id="cp_ProxyStub" Guid="CDD09BA4-8D87-4383-DCA6-1CCCF9D11091" Win64="$(var.Property_Win64)">
     83    <?if $(env.BUILD_TARGET_ARCH) != "x86" ?>
     84        <!-- AMD64: Only install this proxy stub DLL on Windows 7 and later (OLE32 imports). -->
     85        <Condition><![CDATA[(VersionNT >= 610)]]></Condition>
     86    <?endif ?>
    8187        <File Id="file_VBoxProxyStub" Name="VBoxProxyStub.dll" KeyPath="yes"
    8288              Source="$(env.PATH_OUT)\bin\VBoxProxyStub.dll">
    83             <!-- Note! 0bb3b78c-1807-4249-5ba5-ea42d66af0bf is hardcoded in Main/Makefile.kmk and VBoxMergeCOM32On64.wxi -->
    84             <Class Id="{0bb3b78c-1807-4249-5ba5-ea42d66af0bf}" Context="InprocServer32"
    85                 Description="PSFactoryBuffer" ThreadingModel="both" >
    86             </Class>
    87         </File>
    88 <?endif?>
    89 
    90         <!-- Include the auto-generated TypeLib block -->
     89            <Class Id="$(env.VBOX_MIDL_PROXY_CLSID)" Context="InprocServer32"
     90                Description="PSFactoryBuffer" ThreadingModel="both" />
     91        </File>
    9192        <?include $(env.PATH_TARGET)\VirtualBox_TypeLib.wxi ?>
    92 
    93     </Component>
     93    </Component>
     94
     95    <?if $(env.BUILD_TARGET_ARCH) != "x86" ?>
     96    <Component Id="cp_ProxyStubLegacy" Guid="97F12055-5B6D-481C-E8CD-F41D8C733280" Win64="$(var.Property_Win64)">
     97        <!-- AMD64: Only install this proxy stub DLL pre-Windows 7 (legacy NDR stuff). -->
     98        <Condition><![CDATA[(VersionNT < 610)]]></Condition>
     99        <File Id="file_VBoxProxyStubLegacy" Name="VBoxProxyStubLegacy.dll" KeyPath="yes"
     100              Source="$(env.PATH_OUT)\bin\VBoxProxyStubLegacy.dll">
     101            <Class Id="$(env.VBOX_MIDL_PROXY_CLSID)" Context="InprocServer32"
     102                Description="PSFactoryBuffer" ThreadingModel="both" />
     103        </File>
     104        <?include $(env.PATH_TARGET)\VirtualBox_TypeLib.wxi ?>
     105    </Component>
     106    <?endif ?>
     107
     108<?endif?>
    94109
    95110    <?include $(env.PATH_TARGET)\DirComponentsAndFiles_DTrace.wxi ?>
  • trunk/src/VBox/Installer/win/VBoxMergeCOM32On64.wxi

    r59363 r59390  
    3434            <!-- Our key path, see VBoxMergeApp.wxi. -->
    3535            <File Id="file_VBoxProxyStub_x86" Name="VBoxProxyStub-x86.dll" KeyPath="yes"
    36                 Source="$(env.PATH_OUT)\bin\VBoxProxyStub-x86.dll"
     36                Source="$(env.PATH_OUT)\bin\x86\VBoxProxyStub-x86.dll"
    3737                DiskId="$(var.Property_DiskIdCommon)">
    38                 <!-- Note! 0bb3b78c-1807-4249-5ba5-ea42d66af0bf is hardcoded in Main/Makefile.kmk and VBoxMergeApp.wix -->
    39                 <Class Id="{0bb3b78c-1807-4249-5ba5-ea42d66af0bf}" Context="InprocServer32"
     38                <Class Id="$(env.VBOX_MIDL_PROXY_CLSID)" Context="InprocServer32"
    4039                    Description="PSFactoryBuffer" ThreadingModel="both" />
    4140            </File>
  • trunk/src/VBox/Installer/win/VirtualBox.wxs

    r58793 r59390  
    399399    <?endif ?>
    400400        <ComponentRef Id="cp_MainCOM" />
     401    <?if $(env.VBOX_WITH_MIDL_PROXY_STUB) = "yes" ?>
     402        <ComponentRef Id="cp_ProxyStub" />
     403        <ComponentRef Id="cp_ProxyStubLegacy" />
     404    <?endif?>
    401405        <ComponentRef Id="cp_MainBinaries" />
    402406    <?if $(env.VBOX_WITH_QTGUI) = "yes" ?>
  • trunk/src/VBox/Installer/win/VirtualBox_TypeLibWithInterfaces.xsl

    r59385 r59390  
    22
    33<!--
    4  *  A template to generate a WiX include file that contains
    5  *  type library definitions for VirtualBox COM components
    6  *  from the generic interface definition expressed in XML.
    7 
    8     Copyright (C) 2007-2015 Oracle Corporation
     4    Generates a wiX include files with Interface elements for
     5    the stuff in the proxy stub DLLs.
     6
     7    Copyright (C) 2007-2016 Oracle Corporation
    98
    109    This file is part of VirtualBox Open Source Edition (OSE), as
     
    2827
    2928<xsl:param name="a_sTarget">all</xsl:param>
     29<xsl:param name="a_sProxyStubClsid">{0BB3B78C-1807-4249-5BA5-EA42D66AF0BF}</xsl:param>
     30<xsl:variable name="g_sProxyStubClsid" select="translate($a_sProxyStubClsid,'abcdef','ABCDEF')"/>
    3031
    3132
     
    4041<xsl:template match="/idl">
    4142  <xsl:comment>
    42 /*
    43  *  DO NOT EDIT! This is a generated file.
    44  *
    45  *  WiX include script for the VirtualBox Type Library
    46  *  generated from XIDL (XML interface definition).
    47  *
    48  *  Source    : src/VBox/Main/idl/VirtualBox.xidl
    49  *  Generator : src/VBox/Installer/VirtualBox_TypeLib.xsl
    50  *  Arguments : a_sTarget=<xsl:value-of select="$a_sTarget"/>
    51  */
     43
     44    DO NOT EDIT! This is a generated file.
     45
     46    WiX include script for the VirtualBox Type Library
     47    generated from XIDL (XML interface definition).
     48
     49    Source    : src/VBox/Main/idl/VirtualBox.xidl
     50    Generator : src/VBox/Installer/win/VirtualBox_Interfaces.xsl
     51    Arguments : a_sTarget=<xsl:value-of select="$a_sTarget"/>
     52                a_sProxyStubClsid=<xsl:value-of select="$a_sProxyStubClsid"/>
     53
    5254  </xsl:comment>
    5355  <xsl:apply-templates/>
     
    5557
    5658
    57 <!--
    58  *  libraries
    59 -->
    60 <xsl:template match="idl/library">
     59<!-- - - - - - - - - - - - - - - - - - - - - - -
     60  Key for more efficiently looking up of parent interfaces.
     61 - - - - - - - - - - - - - - - - - - - - - - -->
     62
     63<xsl:key name="G_keyInterfacesByName" match="//interface[@name]" use="@name"/>
     64
     65
     66<!--
     67  Libraries.
     68-->
     69<xsl:template match="library">
    6170  <Include>
    6271    <TypeLib>
     
    8089        </xsl:choose>
    8190      </AppId>
     91      <xsl:apply-templates select="interface | if/interface">
     92        <xsl:sort select="translate(@uuid,'abcdef','ABCDEF')"/>
     93      </xsl:apply-templates>
    8294    </TypeLib>
    8395  </Include>
     
    8698
    8799<!--
    88  *  classes
     100  Classes.
    89101-->
    90102<xsl:template match="library//module/class">
     
    92104    <xsl:attribute name="Id"><xsl:value-of select="@uuid"/></xsl:attribute>
    93105    <xsl:attribute name="Description"><xsl:value-of select="@name"/> Class</xsl:attribute>
    94     <xsl:attribute name="Server"><xsl:value-of select="../@name"/></xsl:attribute>
     106    <xsl:attribute name="Server">
     107      <xsl:choose>
     108        <xsl:when test="$a_sTarget = 'VBoxClient-x86' and ../@name = 'VBoxC'"><xsl:text>VBoxClient_x86</xsl:text></xsl:when>
     109        <xsl:otherwise><xsl:value-of select="../@name"/></xsl:otherwise>
     110      </xsl:choose>
     111    </xsl:attribute>
    95112    <xsl:attribute name="Context">
    96113      <xsl:choose>
     
    145162
    146163<!--
    147  *  eat everything else not explicitly matched
     164  Interfaces.
     165-->
     166<xsl:template match="library/interface | library/if[@target='midl']/interface">
     167  <Interface>
     168<!-- Interface Id="{00C8F974-92C5-44A1-8F3F-702469FDD04B}" Name="IDHCPServer" ProxyStubClassId32="{0BB3B78C-1807-4249-5BA5-EA42D66AF0BF}" NumMethods="33" -->
     169    <xsl:attribute name="Id">
     170      <xsl:text>{</xsl:text>
     171      <xsl:value-of select="translate(@uuid,'abcdef','ABCDEF')"/>
     172      <xsl:text>}</xsl:text>
     173    </xsl:attribute>
     174    <xsl:attribute name="Name"><xsl:value-of select="@name"/></xsl:attribute>
     175    <xsl:attribute name="ProxyStubClassId32"><xsl:value-of select="$g_sProxyStubClsid"/></xsl:attribute>
     176    <xsl:attribute name="NumMethods"><xsl:call-template name="fnCountMethods"/></xsl:attribute>
     177  </Interface>
     178</xsl:template>
     179
     180
     181<!--
     182  Count the number of methods.  This must match what midl.exe initializes
     183  CInterfaceStubVtbl::header::DispatchTableCount with in VirtualBox_p.c!
     184  -->
     185<xsl:template name="fnCountMethods">
     186  <xsl:variable name="sParent" select="@extends"/>
     187
     188  <!-- Count immediate methods and attributes by kind. -->
     189  <xsl:variable name="cMethods"
     190    select="count(child::method)
     191          + count(child::if[@target='midl']/method)"/>
     192  <xsl:variable name="cReadOnlyAttributes"
     193    select="count(child::attribute[@readonly='yes'])
     194          + count(child::if[@target='midl']/attribute[@readonly='yes'])"/>
     195  <xsl:variable name="cReadWriteAttributes"
     196    select="count(child::attribute[not(@readonly) or not(@readonly='yes')])
     197          + count(child::if[@target = 'midl']/attribute[not(@readonly) or not(@readonly='yes')])"/>
     198  <xsl:variable name="cReservedMethods">
     199    <xsl:choose>
     200      <xsl:when test="not(@reservedMethods)">0</xsl:when>
     201      <xsl:otherwise><xsl:value-of select="@reservedMethods"/></xsl:otherwise>
     202    </xsl:choose>
     203  </xsl:variable>
     204  <xsl:variable name="cReservedAttributes">
     205    <xsl:choose>
     206      <xsl:when test="not(@reservedAttributes)">0</xsl:when>
     207      <xsl:otherwise><xsl:value-of select="@reservedAttributes"/></xsl:otherwise>
     208    </xsl:choose>
     209  </xsl:variable>
     210
     211  <!-- Recursively figure out the parent -->
     212  <xsl:variable name="cParent">
     213    <xsl:choose>
     214    <xsl:when test="@extends = '$unknown'">
     215      <xsl:value-of select='7'/>
     216    </xsl:when>
     217    <xsl:when test="@extends = '$errorinfo'">
     218      <xsl:value-of select='8'/> <!-- check this one! -->
     219    </xsl:when>
     220    <xsl:otherwise>
     221        <xsl:if test="count(key('G_keyInterfacesByName', $sParent)) != 1">
     222          <xsl:message terminate="yes">Couldn't find parent (<xsl:value-of select="$sParent"/>) to <xsl:value-of select="@name"/></xsl:message>
     223        </xsl:if>
     224        <xsl:for-each select="key('G_keyInterfacesByName', $sParent)">
     225          <xsl:call-template name="fnCountMethods"/>
     226        </xsl:for-each>
     227      </xsl:otherwise>
     228    </xsl:choose>
     229  </xsl:variable>
     230
     231  <!-- Compute the result. -->
     232  <xsl:value-of select="$cMethods + $cReservedMethods + $cReadOnlyAttributes + ($cReadWriteAttributes * 2) + $cReservedAttributes + $cParent"/>
     233
     234  <!-- For debugging! -->
     235  <xsl:if test="0">
     236    <xsl:message terminate="no">
     237      <xsl:text>Debug: cMethods=</xsl:text><xsl:value-of select="$cMethods"/>
     238      <xsl:text> cReadOnlyAttributes=</xsl:text><xsl:value-of select="$cReadOnlyAttributes"/>
     239      <xsl:text> cReadWriteAttributes=</xsl:text><xsl:value-of select="$cReadWriteAttributes"/>
     240      <xsl:text> cReservedMethods=</xsl:text><xsl:value-of select="$cReservedMethods"/>
     241      <xsl:text> cReservedAttributes=</xsl:text><xsl:value-of select="$cReservedAttributes"/>
     242      <xsl:text> cParent=</xsl:text><xsl:value-of select="$cParent"/>
     243      <xsl:text> name=</xsl:text><xsl:value-of select="@name"/>
     244      <xsl:text> parent=</xsl:text><xsl:value-of select="$sParent"/>
     245    </xsl:message>
     246  </xsl:if>
     247</xsl:template>
     248
     249
     250
     251<!--
     252  Eat everything else not explicitly matched.
    148253-->
    149254<xsl:template match="*">
     
    152257
    153258</xsl:stylesheet>
     259
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette