1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-17 17:42:20 +03:00

Initial work on auto-generating WiX Component list

* We'll be generating EDMarketConnector.wxs, so remove it from git and
  add to .gitignore
* Initial work on using `lxml` to parse in wix/components.wxs, generated
  by heat.exe, to pick out what we need, modify it, and eventually
  stitch into a generated EDMarketConnector.wxs
This commit is contained in:
Athanasius 2021-12-07 15:27:33 +00:00
parent f3b5f2b4ed
commit 43394b17ff
No known key found for this signature in database
GPG Key ID: AE3E527847057C7D
3 changed files with 64 additions and 724 deletions

1
.gitignore vendored
View File

@ -23,3 +23,4 @@ venv
htmlcov/ htmlcov/
.ignored .ignored
.coverage .coverage
EDMarketConnector.wxs

View File

@ -1,724 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<?define PRODUCTNAME = "EDMarketConnector"?>
<?define PRODUCTLONGNAME = "Elite Dangerous Market Connector"?>
<?define PRODUCTVERSION = "!(bind.fileVersion.EDMarketConnector.exe)" ?>
<?define UPGRADECODE = "9df571ae-d56d-46e6-af79-4e72ad54efe6" ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*"
Name="$(var.PRODUCTLONGNAME)"
Version="$(var.PRODUCTVERSION)"
UpgradeCode="$(var.UPGRADECODE)"
Language="!(bind.fileLanguage.EDMarketConnector.exe)"
Manufacturer="EDCD">
<Package Id="*" Keywords="Installer"
InstallScope="perMachine"
Description="$(var.PRODUCTLONGNAME) installer"
InstallerVersion="300" Compressed="yes"
Platform="x86"
Languages="1033,1029,1031,1034,1035,1036,1038,1040,1041,1043,1045,1046,1049,1058,1062,2052,2070,2074,6170,1060,1053,18,0" />
<!-- en cs, de es fi fr hu it ja nl pl pt-BR ru uk lv zh-CN pt-PT sr-Latn sr-Latn-BA sl sv-SE ko neutral -->
<!-- https://msdn.microsoft.com/en-gb/goglobal/bb964664.aspx -->
<!-- Always reinstall since patching is problematic -->
<!-- http://www.joyofsetup.com/2010/01/16/major-upgrades-now-easier-than-ever/ -->
<MajorUpgrade AllowSameVersionUpgrades="yes" DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<Media Id="1" Cabinet="product.cab" EmbedCab="yes" />
<Icon Id="EDMarketConnector.exe" SourceFile="EDMarketConnector.ico"/>
<!-- For Add/Remove programs -->
<Property Id="ARPPRODUCTICON" Value="EDMarketConnector.exe" />
<Property Id="ARPNOMODIFY" Value="yes" Secure="yes" /> <!-- Remove modify - also set by WixUI_Minimal -->
<Property Id="ARPHELPLINK" Value="https://github.com/EDCD/EDMarketConnector/wiki" />
<!-- Set INSTALLDIR from ARPINSTALLLOCATION if replacing/upgrading -->
<!-- https://wyrdfish.wordpress.com/2012/07/20/msi-writing-guidelines-this-may-be-out-of-date/ -->
<Property Id="ARPINSTALLLOCATION">
<RegistrySearch Id="GetARPINSTALLLOCATION"
Root="HKLM"
Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[WIX_UPGRADE_DETECTED]"
Name="InstallLocation"
Type="raw" />
</Property>
<CustomAction Id="SetINSTALLDIR" Property="INSTALLDIR" Value="[ARPINSTALLLOCATION]" />
<InstallUISequence>
<Custom Action="SetINSTALLDIR" After="AppSearch">
WIX_UPGRADE_DETECTED AND ARPINSTALLLOCATION
</Custom>
</InstallUISequence>
<InstallExecuteSequence>
<Custom Action="SetINSTALLDIR" After="AppSearch">
WIX_UPGRADE_DETECTED AND ARPINSTALLLOCATION
</Custom>
</InstallExecuteSequence>
<!-- Set ARPINSTALLLOCATION from INSTALLDIR if new install -->
<!-- http://blogs.technet.com/b/alexshev/archive/2008/02/09/from-msi-to-wix-part-2.aspx -->
<CustomAction Id="SetARPINSTALLLOCATION" Property="ARPINSTALLLOCATION" Value="[INSTALLDIR]" />
<InstallExecuteSequence>
<Custom Action="SetARPINSTALLLOCATION" After="InstallValidate">
NOT Installed
</Custom>
</InstallExecuteSequence>
<!-- Launch app after upgrade -->
<Property Id="LAUNCH" Value="yes" />
<CustomAction Id="DoLaunch"
Directory="INSTALLDIR"
ExeCommand='"[INSTALLDIR]EDMarketConnector.exe"'
Return="asyncNoWait"
Execute="deferred"
Impersonate="yes"
/>
<InstallExecuteSequence>
<!-- http://alekdavis.blogspot.co.uk/2013/05/wix-woes-what-is-your-installer-doing.html -->
<Custom Action="DoLaunch" Before="InstallFinalize">
NOT Installed AND LAUNCH ~= "yes"
</Custom>
</InstallExecuteSequence>
<Directory Id="TARGETDIR" Name="SourceDir">
<!-- http://wixtoolset.org/documentation/manual/v3/howtos/files_and_registry/write_a_registry_entry.html -->
<Component Id="RegistryEntries" Guid="*">
<RegistryKey Root="HKCR" Key="edmc">
<RegistryValue Type="string" Value="$(var.PRODUCTLONGNAME)"/>
<RegistryValue Type="string" Name="URL Protocol" Value=""/>
<RegistryKey Key="DefaultIcon">
<RegistryValue Type="string" Value="[INSTALLDIR]EDMarketConnector.exe,0"/>
</RegistryKey>
<RegistryKey Key="shell">
<RegistryKey Key="open">
<RegistryKey Key="command">
<RegistryValue Type="string" Value='"[INSTALLDIR]EDMarketConnector.exe" "%1"'/>
</RegistryKey>
<RegistryKey Key="ddeexec">
<RegistryValue Type="string" Value='Open("%1")'/>
</RegistryKey>
</RegistryKey>
</RegistryKey>
</RegistryKey>
</Component>
<!-- Generate with `heat.exe dir dist.win32 -ag -sfrag -suid -out foo.wxs` -->
<!-- Sadly too late for auto-generated Component UUIDs -->
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLDIR" Name="$(var.PRODUCTNAME)">
<Component Id="MainExecutable" Guid="{D33BB66E-9664-4AB6-A044-3004B50A09B0}">
<File Id="EDMarketConnector.exe" KeyPath="yes" Source="SourceDir\EDMarketConnector.exe" />
<Shortcut Id="MainExeShortcut" Directory="ProgramMenuFolder" Name="$(var.PRODUCTLONGNAME)" Description="Downloads station data from Elite: Dangerous" WorkingDirectory="INSTALLDIR" Icon="EDMarketConnector.exe" IconIndex="0" Advertise="yes" />
</Component>
<Component Guid="{842DC919-EC3D-48EF-A6B3-9A81608E0FB9}">
<File KeyPath="yes" Source="SourceDir\_bz2.pyd" />
</Component>
<Component Guid="{433C38E1-F736-4546-AA83-FCD8B0AAA39B}">
<File KeyPath="yes" Source="SourceDir\_ctypes.pyd" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\_decimal.pyd" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\_elementtree.pyd" />
</Component>
<Component Guid="{45803711-A2A6-4DA8-8219-F625DE6DB33E}">
<File KeyPath="yes" Source="SourceDir\_hashlib.pyd" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\_lzma.pyd" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\_queue.pyd" />
</Component>
<Component Guid="{52019FB5-952D-4BA4-A6E0-F3E214F14923}">
<File KeyPath="yes" Source="SourceDir\_socket.pyd" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\_sqlite3.pyd" />
</Component>
<Component Guid="{2EA8F0B6-A104-4D31-99F0-3535ACDC26A9}">
<File KeyPath="yes" Source="SourceDir\_ssl.pyd" />
</Component>
<Component Guid="{D2F0CDD2-E934-419F-BC99-445E8FD3AF24}">
<File KeyPath="yes" Source="SourceDir\_tkinter.pyd" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\_uuid.pyd" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\_win32sysloader.pyd" />
</Component>
<Component Guid="{62DF41B7-0BE8-48F3-BB22-90E9201A6D8C}">
<File KeyPath="yes" Source="SourceDir\cacert.pem" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\ChangeLog.md" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\commodity.csv" />
</Component>
<Component Guid="{6762E871-5FA1-4C2F-A3C9-6A9954CC018C}">
<File KeyPath="yes" Source="SourceDir\EDMarketConnector.ico" />
</Component>
<Component Guid="{9A0CB8A2-7167-492F-A185-0BDF7E9F5C01}">
<File KeyPath="yes" Source="SourceDir\EDMarketConnector.VisualElementsManifest.xml" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\EDMC.exe" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\EUROCAPS.TTF" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\libcrypto-1_1.dll" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\libffi-7.dll" />
</Component>
<Component Guid="{A18814B6-B491-42AB-A433-2AD66A823AD7}">
<File KeyPath="yes" Source="SourceDir\library.zip" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\libssl-1_1.dll" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\modules.p" />
</Component>
<Component Guid="{87A99AAA-792F-4092-9D00-5106D99D00AD}">
<File KeyPath="yes" Source="SourceDir\pyexpat.pyd" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\python310.dll" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\pythoncom310.dll" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\pywintypes310.dll" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\rare_commodity.csv" />
</Component>
<Component Guid="{9DBAB544-E815-40A5-866A-391B68919344}">
<File KeyPath="yes" Source="SourceDir\select.pyd" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\ships.p" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\snd_good.wav" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\snd_bad.wav" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\sqlite3.dll" />
</Component>
<Component Guid="{30EEAD30-A43B-4A31-A209-450A8AD17AC2}">
<File KeyPath="yes" Source="SourceDir\tcl86t.dll" />
</Component>
<Component Guid="{CE5A6F3A-8F6B-4C16-BCDC-F1BB89C9F1AF}">
<File KeyPath="yes" Source="SourceDir\tk86t.dll" />
</Component>
<Component Guid="{E8E3701A-8AA1-4D46-A56D-7AF08D6AFCD4}">
<File KeyPath="yes" Source="SourceDir\unicodedata.pyd" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\win32api.pyd" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\win32com.shell.shell.pyd" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\win32evtlog.pyd" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\winsound.pyd" />
</Component>
<Component Guid="{3117D2CF-1D87-4B99-BE44-7BDDFE8C8E60}">
<File KeyPath="yes" Source="SourceDir\WinSparkle.dll" />
</Component>
<Component Id="EDMarketConnector_TRACE.bat" Guid="*">
<File KeyPath="yes" Source="SourceDir\EDMarketConnector - TRACE.bat" />
</Component>
<Component Id="EDMarketConnector_localserver_auth.bat" Guid="*">
<File KeyPath="yes" Source="SourceDir\EDMarketConnector - localserver-auth.bat" />
</Component>
<Component Id="EDMarketConnector_localserver_resetui.bat" Guid="*">
<File KeyPath="yes" Source="SourceDir\EDMarketConnector - reset-ui.bat" />
</Component>
<Component Id="gitversion" Guid="*">
<File KeyPath="yes" Source="SourceDir\.gitversion" />
</Component>
<Directory Id="L10n" Name="L10n">
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\cs.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\de.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\es.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\fi.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\fr.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\hu.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\it.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\ja.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\ko.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\lv.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\nl.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\pl.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\pt-BR.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\pt-PT.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\ru.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\sl.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\sr-Latn.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\sr-Latn-BA.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\sv-SE.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\uk.strings" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\L10n\zh-Hans.strings" Name="zh-CN.strings" />
</Component>
</Directory>
<Directory Id="lib" Name="lib">
<Directory Id="tcl" Name="tcl">
<Component Guid="{C085794D-6644-4915-B1C3-3060BE9E3F3B}">
<File KeyPath="yes" Source="SourceDir\lib\tcl\auto.tcl" />
</Component>
<Component Guid="{E7EF4423-9B28-4267-A6C9-1C5F5F732054}">
<File KeyPath="yes" Source="SourceDir\lib\tcl\clock.tcl" />
</Component>
<Component Guid="{28C0596D-8D38-4E62-BE6E-E3986E1EB854}">
<File KeyPath="yes" Source="SourceDir\lib\tcl\history.tcl" />
</Component>
<Component Guid="{3E20540F-0017-40FA-94EC-A4407C0A9B3B}">
<File KeyPath="yes" Source="SourceDir\lib\tcl\init.tcl" />
</Component>
<Component Guid="{D3750297-0753-433F-A20F-FCB309050DCE}">
<File KeyPath="yes" Source="SourceDir\lib\tcl\package.tcl" />
</Component>
<Component Guid="{8686095A-7B3D-4352-B30C-497E3DAABD57}">
<File KeyPath="yes" Source="SourceDir\lib\tcl\parray.tcl" />
</Component>
<Component Guid="{DAAAF7FC-8255-4564-B4F9-42865C1D1B74}">
<File KeyPath="yes" Source="SourceDir\lib\tcl\safe.tcl" />
</Component>
<Component Id="tclIndex_1" Guid="{52C48E34-AE8C-4461-BB3D-817EF66E859A}">
<File Id="tclIndex_1" KeyPath="yes" Source="SourceDir\lib\tcl\tclIndex" />
</Component>
<Component Guid="{84CAEEAD-0290-4895-BEDB-6CB10B8BEECE}">
<File KeyPath="yes" Source="SourceDir\lib\tcl\tm.tcl" />
</Component>
<Component Guid="{3D7917B8-E131-448F-9F2C-18705BB37313}">
<File KeyPath="yes" Source="SourceDir\lib\tcl\word.tcl" />
</Component>
<Directory Id="opt0.4" Name="opt0.4">
<Component Guid="{D8E99FE8-AD1E-4E73-A566-6D88B7E5F07E}">
<File KeyPath="yes" Source="SourceDir\lib\tcl\opt0.4\optparse.tcl" />
</Component>
<Component Id="pkgIndex.tcl_1" Guid="{9618212A-46A6-4982-AB85-599CEB0711EB}">
<File Id="pkgIndex.tcl_1" KeyPath="yes" Source="SourceDir\lib\tcl\opt0.4\pkgIndex.tcl" />
</Component>
</Directory>
</Directory>
<Directory Id="tk" Name="tk">
<Component Guid="{FCB37425-AD3A-45DA-91D7-053AF7970C28}">
<File KeyPath="yes" Source="SourceDir\lib\tk\bgerror.tcl" />
</Component>
<Component Id="button.tcl_1" Guid="{149136E1-0EAE-42B2-8509-5B6A686B023B}">
<File Id="button.tcl_1" KeyPath="yes" Source="SourceDir\lib\tk\button.tcl" />
</Component>
<Component Guid="{EAC4BD6C-40E9-4C64-A5F5-258D083D07C0}">
<File KeyPath="yes" Source="SourceDir\lib\tk\choosedir.tcl" />
</Component>
<Component Guid="{0E8924C5-7EA5-43AC-9C81-6F3029B462C8}">
<File KeyPath="yes" Source="SourceDir\lib\tk\clrpick.tcl" />
</Component>
<Component Guid="{7B5F5CA4-893A-480F-B6AF-C3E3A544DB8B}">
<File KeyPath="yes" Source="SourceDir\lib\tk\comdlg.tcl" />
</Component>
<Component Guid="{A8F00EE2-4094-4DFF-86BD-FE969D4D362A}">
<File KeyPath="yes" Source="SourceDir\lib\tk\console.tcl" />
</Component>
<Component Guid="{DFFA82C4-0949-41A3-868A-1BC4CF04CC76}">
<File KeyPath="yes" Source="SourceDir\lib\tk\dialog.tcl" />
</Component>
<Component Id="entry.tcl_1" Guid="{D3BD7C0B-06D7-4619-977B-F30908EF20ED}">
<File Id="entry.tcl_1" KeyPath="yes" Source="SourceDir\lib\tk\entry.tcl" />
</Component>
<Component Guid="{DF8A00BF-91F1-44D8-B1D4-AB1104BFD1C9}">
<File KeyPath="yes" Source="SourceDir\lib\tk\focus.tcl" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\lib\tk\fontchooser.tcl" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\lib\tk\iconlist.tcl" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\lib\tk\icons.tcl" />
</Component>
<Component Guid="{A545EB30-9E1A-4C89-866B-974C99004065}">
<File KeyPath="yes" Source="SourceDir\lib\tk\license.terms" />
</Component>
<Component Guid="{A8F779C3-8947-4C8D-9611-83F1D05482A7}">
<File KeyPath="yes" Source="SourceDir\lib\tk\listbox.tcl" />
</Component>
<Component Guid="{E492B863-5AAA-4A2A-AC0B-10F2B3A90D89}">
<File KeyPath="yes" Source="SourceDir\lib\tk\menu.tcl" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\lib\tk\megawidget.tcl" />
</Component>
<Component Guid="{9BBAC909-602C-443B-9EFE-6896D468BE3F}">
<File KeyPath="yes" Source="SourceDir\lib\tk\mkpsenc.tcl" />
</Component>
<Component Guid="{0F1A63FD-16BA-4603-8E9D-744BC4CD5C25}">
<File KeyPath="yes" Source="SourceDir\lib\tk\msgbox.tcl" />
</Component>
<Component Guid="{4EDE9077-0998-42D9-8510-E60440003628}">
<File KeyPath="yes" Source="SourceDir\lib\tk\obsolete.tcl" />
</Component>
<Component Guid="{10D09DFC-4B7D-4869-ACBC-53C864C54CD0}">
<File KeyPath="yes" Source="SourceDir\lib\tk\optMenu.tcl" />
</Component>
<Component Guid="{EA101ACF-9743-495F-B514-A28F78F23068}">
<File KeyPath="yes" Source="SourceDir\lib\tk\palette.tcl" />
</Component>
<Component Id="panedwindow.tcl_1" Guid="{7060F5A9-BAB5-4D15-A65E-04A71AE00A15}">
<File Id="panedwindow.tcl_1" KeyPath="yes" Source="SourceDir\lib\tk\panedwindow.tcl" />
</Component>
<Component Id="pkgIndex.tcl_2" Guid="{5E2762E6-F8DE-43A9-A809-32AE03522482}">
<File Id="pkgIndex.tcl_2" KeyPath="yes" Source="SourceDir\lib\tk\pkgIndex.tcl" />
</Component>
<Component Guid="{DE3DA121-B02A-43AA-9D36-99A89F26B3B4}">
<File KeyPath="yes" Source="SourceDir\lib\tk\safetk.tcl" />
</Component>
<Component Id="scale.tcl_1" Guid="{7E371EB8-CBE1-4360-A1B8-08A54DEEFAE5}">
<File Id="scale.tcl_1" KeyPath="yes" Source="SourceDir\lib\tk\scale.tcl" />
</Component>
<Component Guid="{AADDC754-698D-4439-82A1-4F47FE97FA94}">
<File KeyPath="yes" Source="SourceDir\lib\tk\scrlbar.tcl" />
</Component>
<Component Id="spinbox.tcl_1" Guid="{448FB04F-1719-4BE0-8192-9DB3551FF1CA}">
<File Id="spinbox.tcl_1" KeyPath="yes" Source="SourceDir\lib\tk\spinbox.tcl" />
</Component>
<Component Id="tclIndex_2" Guid="{CC6A73B5-7CBF-43F5-BA1D-67216081B7CD}">
<File Id="tclIndex_2" KeyPath="yes" Source="SourceDir\lib\tk\tclIndex" />
</Component>
<Component Guid="{AEAAB0BF-64DA-4729-8AA3-A964758524F2}">
<File KeyPath="yes" Source="SourceDir\lib\tk\tearoff.tcl" />
</Component>
<Component Guid="{DFCA1825-61D8-4613-A0DF-7FAFC9E8D0B7}">
<File KeyPath="yes" Source="SourceDir\lib\tk\text.tcl" />
</Component>
<Component Guid="{80245D25-A889-4EB2-9C9C-488AB3C32A32}">
<File KeyPath="yes" Source="SourceDir\lib\tk\tk.tcl" />
</Component>
<Component Guid="{50929058-A5C7-43E3-B5FE-B848A419CF93}">
<File KeyPath="yes" Source="SourceDir\lib\tk\tkfbox.tcl" />
</Component>
<Component Guid="{2B892993-9862-466F-A79B-F54246A9E7F2}">
<File KeyPath="yes" Source="SourceDir\lib\tk\unsupported.tcl" />
</Component>
<Component Guid="{F7B0AE86-0EA3-436D-83A0-61FB4AEBBDF8}">
<File KeyPath="yes" Source="SourceDir\lib\tk\xmfbox.tcl" />
</Component>
<Directory Id="ttk" Name="ttk">
<Component Guid="{153EA00B-70D3-45D5-B6C7-F900D15AF3C7}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\altTheme.tcl" />
</Component>
<Component Guid="{F97CA810-C233-4088-87FB-5DE062166893}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\aquaTheme.tcl" />
</Component>
<Component Id="button.tcl_2" Guid="{2C2F700C-7C62-4F5A-908C-A35B122A577B}">
<File Id="button.tcl_2" KeyPath="yes" Source="SourceDir\lib\tk\ttk\button.tcl" />
</Component>
<Component Guid="{9137EAD5-A5ED-4280-AB41-5B42CB76BE25}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\clamTheme.tcl" />
</Component>
<Component Guid="{B9D2363E-CBE6-4D6A-8AEC-8763FCF41309}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\classicTheme.tcl" />
</Component>
<Component Guid="{BB9DC352-388A-4424-B3A7-D0CC0799B0E8}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\combobox.tcl" />
</Component>
<Component Guid="{D5B1A052-87F1-44C9-A8D6-6FF78EC6453A}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\cursors.tcl" />
</Component>
<Component Guid="{2D4A6C0F-16CC-458F-936E-68F39BB51DC5}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\defaults.tcl" />
</Component>
<Component Id="entry.tcl_2" Guid="{5BBDDCE5-3165-431C-8A5F-88C090EB98DA}">
<File Id="entry.tcl_2" KeyPath="yes" Source="SourceDir\lib\tk\ttk\entry.tcl" />
</Component>
<Component Guid="{D0DACDE6-4F3A-4BC2-AE09-7BBF8C76ED74}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\fonts.tcl" />
</Component>
<Component Guid="{133F83FA-ACE2-44FF-B175-42F2E0A917A9}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\menubutton.tcl" />
</Component>
<Component Guid="{641B8DCD-E718-4757-84AB-6425D3CFDCD6}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\notebook.tcl" />
</Component>
<Component Id="panedwindow.tcl_2" Guid="{AF0A3619-F409-479B-A71E-1D2C08A5F510}">
<File Id="panedwindow.tcl_2" KeyPath="yes" Source="SourceDir\lib\tk\ttk\panedwindow.tcl" />
</Component>
<Component Guid="{3E9DE75A-FD32-4F7E-A3E7-59ABFBCBC9DF}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\progress.tcl" />
</Component>
<Component Id="scale.tcl_2" Guid="{165FED9E-A3F0-4005-8DA8-D25E4E144DD8}">
<File Id="scale.tcl_2" KeyPath="yes" Source="SourceDir\lib\tk\ttk\scale.tcl" />
</Component>
<Component Guid="{735AFCC5-A597-4292-B144-4DF8865B4200}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\scrollbar.tcl" />
</Component>
<Component Guid="{54AD42EB-7305-45AA-953C-574921E90BAD}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\sizegrip.tcl" />
</Component>
<Component Id="spinbox.tcl_2" Guid="{F4A91FAD-5F8D-4007-B38E-2C706E87770B}">
<File Id="spinbox.tcl_2" KeyPath="yes" Source="SourceDir\lib\tk\ttk\spinbox.tcl" />
</Component>
<Component Guid="{FC12F75C-6EF1-4AD5-BF60-55FC5E825605}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\treeview.tcl" />
</Component>
<Component Guid="{947E3D83-15D1-44E5-B8D3-5EEBDD18B343}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\ttk.tcl" />
</Component>
<Component Guid="{D5534AC6-9A1B-4CE3-90E1-6B65D4FF86D6}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\utils.tcl" />
</Component>
<Component Guid="{198ADB32-56DD-4F29-B862-817DD6E92ECA}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\vistaTheme.tcl" />
</Component>
<Component Guid="{92589FA4-E08B-4E45-856E-F266D6290E2A}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\winTheme.tcl" />
</Component>
<Component Guid="{78CB3D2B-5032-445B-82C5-CFD32584A238}">
<File KeyPath="yes" Source="SourceDir\lib\tk\ttk\xpTheme.tcl" />
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="plugins" Name="plugins">
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\plugins\coriolis.py" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\plugins\eddb.py" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\plugins\eddn.py" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\plugins\edsm.py" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\plugins\edsy.py" />
</Component>
<Component Guid="*">
<File KeyPath="yes" Source="SourceDir\plugins\inara.py" />
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder" Name="Programs">
</Directory>
</Directory>
<Feature Id='Complete' Level='1'>
<ComponentRef Id="RegistryEntries" />
<ComponentRef Id="MainExecutable" />
<ComponentRef Id="gitversion" />
<ComponentRef Id="_bz2.pyd" />
<ComponentRef Id="_ctypes.pyd" />
<ComponentRef Id="_decimal.pyd" />
<ComponentRef Id="_elementtree.pyd" />
<ComponentRef Id="_hashlib.pyd" />
<ComponentRef Id="_lzma.pyd" />
<ComponentRef Id="_queue.pyd" />
<ComponentRef Id="_socket.pyd" />
<ComponentRef Id="_sqlite3.pyd" />
<ComponentRef Id="_ssl.pyd" />
<ComponentRef Id="_tkinter.pyd" />
<ComponentRef Id="_uuid.pyd" />
<ComponentRef Id="_win32sysloader.pyd" />
<ComponentRef Id="cacert.pem" />
<ComponentRef Id="ChangeLog.md" />
<ComponentRef Id="commodity.csv" />
<ComponentRef Id="cs.strings" />
<ComponentRef Id="de.strings" />
<ComponentRef Id="EDMarketConnector.ico" />
<ComponentRef Id="EDMarketConnector.VisualElementsManifest.xml" />
<ComponentRef Id="EDMC.exe" />
<ComponentRef Id="EUROCAPS.TTF" />
<ComponentRef Id="es.strings" />
<ComponentRef Id="fi.strings" />
<ComponentRef Id="fr.strings" />
<ComponentRef Id="hu.strings" />
<ComponentRef Id="it.strings" />
<ComponentRef Id="ja.strings" />
<ComponentRef Id="ko.strings" />
<ComponentRef Id="libcrypto_1_1.dll" />
<ComponentRef Id="libffi_7.dll" />
<ComponentRef Id="library.zip" />
<ComponentRef Id="libssl_1_1.dll" />
<ComponentRef Id="modules.p" />
<ComponentRef Id="lv.strings" />
<ComponentRef Id="nl.strings" />
<ComponentRef Id="pl.strings" />
<ComponentRef Id="pt_BR.strings" />
<ComponentRef Id="pt_PT.strings" />
<ComponentRef Id="pyexpat.pyd" />
<ComponentRef Id="python310.dll" />
<ComponentRef Id="pythoncom310.dll" />
<ComponentRef Id="pywintypes310.dll" />
<ComponentRef Id="rare_commodity.csv" />
<ComponentRef Id="ru.strings" />
<ComponentRef Id="select.pyd" />
<ComponentRef Id="ships.p" />
<ComponentRef Id="sl.strings" />
<ComponentRef Id="sr_Latn.strings" />
<ComponentRef Id="sr_Latn_BA.strings" />
<ComponentRef Id="snd_good.wav" />
<ComponentRef Id="snd_bad.wav" />
<ComponentRef Id="sqlite3.dll" />
<ComponentRef Id="sv_SE.strings" />
<ComponentRef Id="tcl86t.dll" />
<ComponentRef Id="tk86t.dll" />
<ComponentRef Id="uk.strings" />
<ComponentRef Id="unicodedata.pyd" />
<ComponentRef Id="win32api.pyd" />
<ComponentRef Id="win32com.shell.shell.pyd" />
<ComponentRef Id="win32evtlog.pyd" />
<ComponentRef Id="winsound.pyd" />
<ComponentRef Id="WinSparkle.dll" />
<ComponentRef Id="EDMarketConnector_TRACE.bat" />
<ComponentRef Id="EDMarketConnector_localserver_auth.bat" />
<ComponentRef Id="EDMarketConnector_localserver_resetui.bat" />
<ComponentRef Id="zh_CN.strings" />
<ComponentRef Id="auto.tcl" />
<ComponentRef Id="clock.tcl" />
<ComponentRef Id="history.tcl" />
<ComponentRef Id="init.tcl" />
<ComponentRef Id="package.tcl" />
<ComponentRef Id="parray.tcl" />
<ComponentRef Id="safe.tcl" />
<ComponentRef Id="tclIndex_1" />
<ComponentRef Id="tm.tcl" />
<ComponentRef Id="word.tcl" />
<ComponentRef Id="optparse.tcl" />
<ComponentRef Id="pkgIndex.tcl_1" />
<ComponentRef Id="bgerror.tcl" />
<ComponentRef Id="button.tcl_1" />
<ComponentRef Id="choosedir.tcl" />
<ComponentRef Id="clrpick.tcl" />
<ComponentRef Id="comdlg.tcl" />
<ComponentRef Id="console.tcl" />
<ComponentRef Id="dialog.tcl" />
<ComponentRef Id="entry.tcl_1" />
<ComponentRef Id="focus.tcl" />
<ComponentRef Id="fontchooser.tcl" />
<ComponentRef Id="iconlist.tcl" />
<ComponentRef Id="icons.tcl" />
<ComponentRef Id="license.terms" />
<ComponentRef Id="listbox.tcl" />
<ComponentRef Id="megawidget.tcl" />
<ComponentRef Id="menu.tcl" />
<ComponentRef Id="mkpsenc.tcl" />
<ComponentRef Id="msgbox.tcl" />
<ComponentRef Id="obsolete.tcl" />
<ComponentRef Id="optMenu.tcl" />
<ComponentRef Id="palette.tcl" />
<ComponentRef Id="panedwindow.tcl_1" />
<ComponentRef Id="pkgIndex.tcl_2" />
<ComponentRef Id="safetk.tcl" />
<ComponentRef Id="scale.tcl_1" />
<ComponentRef Id="scrlbar.tcl" />
<ComponentRef Id="spinbox.tcl_1" />
<ComponentRef Id="tclIndex_2" />
<ComponentRef Id="tearoff.tcl" />
<ComponentRef Id="text.tcl" />
<ComponentRef Id="tk.tcl" />
<ComponentRef Id="tkfbox.tcl" />
<ComponentRef Id="unsupported.tcl" />
<ComponentRef Id="xmfbox.tcl" />
<ComponentRef Id="altTheme.tcl" />
<ComponentRef Id="aquaTheme.tcl" />
<ComponentRef Id="button.tcl_2" />
<ComponentRef Id="clamTheme.tcl" />
<ComponentRef Id="classicTheme.tcl" />
<ComponentRef Id="combobox.tcl" />
<ComponentRef Id="cursors.tcl" />
<ComponentRef Id="defaults.tcl" />
<ComponentRef Id="entry.tcl_2" />
<ComponentRef Id="fonts.tcl" />
<ComponentRef Id="menubutton.tcl" />
<ComponentRef Id="notebook.tcl" />
<ComponentRef Id="panedwindow.tcl_2" />
<ComponentRef Id="progress.tcl" />
<ComponentRef Id="scale.tcl_2" />
<ComponentRef Id="scrollbar.tcl" />
<ComponentRef Id="sizegrip.tcl" />
<ComponentRef Id="spinbox.tcl_2" />
<ComponentRef Id="treeview.tcl" />
<ComponentRef Id="ttk.tcl" />
<ComponentRef Id="utils.tcl" />
<ComponentRef Id="vistaTheme.tcl" />
<ComponentRef Id="winTheme.tcl" />
<ComponentRef Id="xpTheme.tcl" />
<ComponentRef Id="coriolis.py" />
<ComponentRef Id="eddb.py" />
<ComponentRef Id="eddn.py" />
<ComponentRef Id="edsm.py" />
<ComponentRef Id="edsy.py" />
<ComponentRef Id="inara.py" />
</Feature>
</Product>
</Wix>
<!-- Local Variables: -->
<!-- tab-width: 4 -->
<!-- End: -->

View File

@ -9,6 +9,7 @@ Script to build to .exe and .msi package.
import codecs import codecs
import os import os
import pathlib
import platform import platform
import re import re
import shutil import shutil
@ -18,6 +19,8 @@ from os.path import exists, isdir, join
from tempfile import gettempdir from tempfile import gettempdir
from typing import Any, Generator, Set from typing import Any, Generator, Set
from lxml import etree
from config import ( from config import (
appcmdname, applongname, appname, appversion, appversion_nobuild, copyright, git_shorthash_from_head, update_feed, appcmdname, applongname, appname, appversion, appversion_nobuild, copyright, git_shorthash_from_head, update_feed,
update_interval update_interval
@ -283,6 +286,66 @@ if sys.platform == 'darwin':
os.system(f'cd {dist_dir}; ditto -ck --keepParent --sequesterRsrc {appname}.app ../{package_filename}; cd ..') os.system(f'cd {dist_dir}; ditto -ck --keepParent --sequesterRsrc {appname}.app ../{package_filename}; cd ..')
elif sys.platform == 'win32': elif sys.platform == 'win32':
header_file = pathlib.Path('wix/header.wxs')
components_file = pathlib.Path('wix/components.wxs')
components_transformed_file = pathlib.Path(r'wix/components_transformed.wxs')
header_tree = etree.parse(header_file)
# Use heat.exe to generate the Component for all files inside dist.win32
os.system(rf'"{WIXPATH}\heat.exe" dir {dist_dir}\ -ag -sfrag -srid -suid -out {components_file}')
component_tree = etree.parse(components_file)
# 1. Change the element:
#
# <Directory Id="dist.win32" Name="dist.win32">
#
# to:
#
# <Directory Id="INSTALLDIR" Name="$(var.PRODUCTNAME)">
win32 = component_tree.find('.//{*}Directory[@Id="dist.win32"][@Name="dist.win32"]')
if not win32:
raise ValueError(f'{components_file}: Expected Directory with Id="dist.win32"')
win32.set('Id', 'INSTALLDIR')
win32.set('Name', '$(var.PRODUCTNAME)')
# 2. Change:
#
# <Component Id="EDMarketConnector.exe" Guid="*">
# <File Id="EDMarketConnector.exe" KeyPath="yes" Source="SourceDir\EDMarketConnector.exe" />
# </Component>
#
# to:
#
# <Component Id="MainExecutable" Guid="{D33BB66E-9664-4AB6-A044-3004B50A09B0}">
# <File Id="EDMarketConnector.exe" KeyPath="yes" Source="SourceDir\EDMarketConnector.exe" />
# <Shortcut Id="MainExeShortcut" Directory="ProgramMenuFolder" Name="$(var.PRODUCTLONGNAME)"
# Description="Downloads station data from Elite: Dangerous" WorkingDirectory="INSTALLDIR"
# Icon="EDMarketConnector.exe" IconIndex="0" Advertise="yes" />
# </Component>
main_executable = win32.find('.//{*}Component[@Id="EDMarketConnector.exe"]')
if not main_executable:
raise ValueError(f'{components_file}: Expected Component with Id="EDMarketConnector.exe"')
main_executable.set('Id', 'MainExecutable')
main_executable.set('Guid', '{D33BB66E-9664-4AB6-A044-3004B50A09B0}')
shortcut = etree.SubElement(
main_executable,
'Shortcut',
nsmap=main_executable.nsmap,
attrib={
'Id': 'MainExeShortcut',
'Directory': 'ProgramMenuFolder',
'Name': '$(var.PRODUCTLONGNAME)',
'Description': 'Downloads station data from Elite: Dangerous',
'WorkingDirectory': 'INSTALLDIR',
'Icon': 'EDMarketConnector.exe',
'IconIndex': '0',
'Advertise': 'yes'
}
)
# Append the Feature/ComponentRef listing to match
# Concatenate our header, this middle, and our footer.
os.system(rf'"{WIXPATH}\candle.exe" -out {dist_dir}\ {appname}.wxs') os.system(rf'"{WIXPATH}\candle.exe" -out {dist_dir}\ {appname}.wxs')
if not exists(f'{dist_dir}/{appname}.wixobj'): if not exists(f'{dist_dir}/{appname}.wixobj'):