That sounds like a great idea. I've been through a few variations of how to
work round this
problem, all of which were/are pretty nasty. Would this be v3 only or v2 as
well?
Rob
Derek Cicerone wrote:
> There has been a lot of demand for a way to easily author simple
> variations on a single component template very quickly. The need for
> such a solution is evident if you’ve ever wanted to create a single
> component in multiple language versions or for multiple platforms and
> found yourself try to get it working in the preprocessor or manually
> authoring all the variations. Here is a proposal for how I believe this
> could be done with a preprocessor extension which I’m currently calling
> WixPivotsExtension™ J
>
>
>
> Desired result:
>
> <Fragment>
>
> <DirectoryRef Id="TARGETDIR">
>
> <Component Id="MyComponent.*x86.en_us*"
> Guid="*{22B5A745-4784-407c-9D76-DAA07495993C}*" Win64=”*no*”>
>
> <File Id="File1.*x86.en_us*" Name="test.txt"
> Source="SourceDir\*x86\en_us*\test.txt" KeyPath="yes" />
>
> <File Id="File2.*x86.en_us*" Name="test2.txt"
> Source="SourceDir\*x86\en_us*\test2.txt" />
>
> <RegistryValue Root="HKLM" Key="Software\MyProduct"
> Name="*en_us*" Value="1" Type="integer" />
>
> </Component>
>
> </Directory>
>
> </Fragment>
>
>
>
> <Fragment>
>
> <DirectoryRef Id="TARGETDIR">
>
> <Component Id="MyComponent.*x86.he_il*"
> Guid="*{6ABEA558-276D-4aa1-AADC-D6D415431154}*" Win64=”*no*”>
>
> <File Id="File1.*x86.he_il*" Name="test.txt"
> Source="SourceDir\*x86\he_il*\test.txt" KeyPath="yes" />
>
> <File Id="File2.*x86.he_il*" Name="test2.txt"
> Source="SourceDir\*x86\he_il*\test2.txt" />
>
> <RegistryValue Root="HKLM" Key="Software\MyProduct"
> Name="*he_il*" Value="1" Type="integer" />
>
> </Component>
>
> </Directory>
>
> </Fragment>
>
>
>
> <Fragment>
>
> <DirectoryRef Id="TARGETDIR">
>
> <Component Id="MyComponent.*x64.en_us*"
> Guid="*{4BBD4239-19CC-4792-8738-D196929367D3}*" Win64=”*yes*”>
>
> <File Id="File1.*x64.en_us*" Name="test.txt"
> Source="SourceDir\*x64\en_us*\test.txt" KeyPath="yes" />
>
> <File Id="File2.*x64.en_us*" Name="test2.txt"
> Source="SourceDir\*x64\en_us*\test2.txt" />
>
> <RegistryValue Root="HKLM" Key="Software\MyProduct"
> Name="*en_us*" Value="1" Type="integer" />
>
> </Component>
>
> </Directory>
>
> </Fragment>
>
>
>
> <Fragment>
>
> <DirectoryRef Id="TARGETDIR">
>
> <Component Id="MyComponent.*x64.he_il*"
> Guid="*{CE2D5AAC-CD05-4fee-B310-9522E6F6615F}*" Win64=”*yes*”>
>
> <File Id="File1.*x64.he_il*" Name="test.txt"
> Source="SourceDir\*x64\he_il*\test.txt" KeyPath="yes" />
>
> <File Id="File2.*x64.he_il*" Name="test2.txt"
> Source="SourceDir\*x64\he_il*\test2.txt" />
>
> <RegistryValue Root="HKLM" Key="Software\MyProduct"
> Name="*he_il*" Value="1" Type="integer" />
>
> </Component>
>
> </Directory>
>
> </Fragment>
>
>
>
>
>
> Here’s what the template might look like (MyComponent.wxs):
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
>
>
>
> * <?foreach pivot in MyComponentPivots.xml?>*
>
> <Fragment>
>
> <DirectoryRef Id="TARGETDIR">
>
> <Component Id="MyComponent.*$(var.Pivot.Suffix)*"
> Guid="*$(var.Pivot.Guid)*" Win64="*$(var.Pivot.Win64)*">
>
> <File Id="File1.*$(var.Pivot.Suffix)*"
> Name="test.txt" Source="*$(var.Pivot.FilePrefix)*\test.txt" KeyPath="yes" />
>
> <File Id="File2.*$(var.Pivot.Suffix)*"
> Name="test2.txt" Source="*$(var.Pivot.FilePrefix)*\test2.txt" />
>
> <RegistryValue Root="HKLM" Key="Software\MyProduct"
> Name="*$(var.Pivot.Culture)*" Value="1" Type="integer" />
>
> </Component>
>
> </Directory>
>
> </Fragment>
>
> * <?endforeach?>*
>
>
>
> </Wix>
>
>
>
> And here’s how the values are specified (MyComponentPivots.xml):
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> <Pivots Suffix=".$(var.Pivot.Platform).$(var.Pivot.Culture)"
> FilePrefix="SourceDir\$(var.Pivot.Platform)\$(var.Pivot.Culture)">
>
> <Pivot Platform="x86" Win64="no">
>
> <Pivot Culture="en_us"
> Guid="{22B5A745-4784-407c-9D76-DAA07495993C}" />
>
> <Pivot Culture="he_il"
> Guid="{6ABEA558-276D-4aa1-AADC-D6D415431154}" />
>
> <Pivot>
>
> <Pivot Platform="x64" Win64="yes">
>
> <Pivot Culture="en_us"
> Guid="{4BBD4239-19CC-4792-8738-D196929367D3}" />
>
> <Pivot Culture="he_il"
> Guid="{CE2D5AAC-CD05-4fee-B310-9522E6F6615F}" />
>
> <Pivot>
>
> </Pivots>
>
>
>
>
>
> So basically, there would be a preprocessor extension that runs before
> the normal WiX preprocessor and expands out the foreach statement into
> different views on the component using the various pivots from the xml file.
>
>
>
> Here’s the details of how it would work:
>
> 1. Find <?foreach?> statements and their corresponding pivots.xml files.
> 2. For each leaf node in the pivots.xml file, create a view of the
> Fragment inside the <?foreach?>. (In the example above, there are
> 4 leaf nodes and thus 4 views on the component).
> 3. Traverse the xml from the document element down to the leaf node
> turning all the attributes encountered along the way into
> preprocessor variables (those which are set multiple times will be
> overridden by the children – so inheritance is possible).
> 4. All variables are set with “Pivot.” In front of them to avoid
> collisions with variables that may be specified on the candle
> command line and via <?define?> statements. (I’m flexible on
> whether this is important or not – we could also just set the
> variables directly which would mean less typing in the WiX source
> file to use the variables).
> 5. Run the normal WiX preprocessor over the now expanded authoring,
> thus resulting in the desired authoring above.
>
>
>
> Note that this system is completely flexible in terms of the naming
> conventions for the variables which are set – you can use whatever names
> you like. I’ve used “Platform” and “Culture” but you could use
> “Processor” and “Language” or whatever else is appropriate for your
> organization. You could just have one pivot if language is all that
> matters of add as many more as you want as necessary. You can even
> define meta-variables for suffixes of identifiers and prefixes of file
> paths.
>
>
>
> I look forward to hearing your feedback.
>
>
>
> Thanks,
>
> Derek
>
>
> ------------------------------------------------------------------------
>
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys -- and earn cash
> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> WiX-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/wix-users
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
WiX-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users