PICARD-1669: Build Win 10 app package

This commit is contained in:
Philipp Wolfer
2019-11-14 15:15:32 +01:00
parent e75551ac7f
commit b247766614
5 changed files with 60 additions and 7 deletions

1
.gitignore vendored
View File

@@ -17,6 +17,7 @@ Thumbs.db:encryptable
*.pyc
*.pyd
*.so
appxmanifest.xml
build/
coverage.xml
dist/

36
appxmanifest.xml.in Normal file
View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities">
<Identity
Name="%(app-id)s"
Version="%(version)s"
Publisher="CN=Metabrainz Foundation Inc., O=Metabrainz Foundation Inc., L=San Luis Obispo, S=California, C=US"
ProcessorArchitecture="x64"/>
<Properties>
<DisplayName>MusicBrainz Picard</DisplayName>
<PublisherDisplayName>MetaBrainz Foundation</PublisherDisplayName>
<Description>Picard is an open-source cross-platform music tagger by MusicBrainz. It has the ability to identify audio files even without any existing metadata.</Description>
<Logo>Square70x70Logo.png</Logo>
</Properties>
<Resources>
<Resource Language="en-us"/>
</Resources>
<Dependencies>
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17135.0" MaxVersionTested="10.0.18363.0"/>
</Dependencies>
<Capabilities>
<rescap:Capability Name="runFullTrust"/>
</Capabilities>
<Applications>
<Application Id="Picard" Executable="picard.exe" EntryPoint="Windows.FullTrustApplication">
<uap:VisualElements
DisplayName="MusicBrainz Picard"
Description="Tag your music with the next generation MusicBrainz tagger"
Square150x150Logo="Square150x150Logo.png"
Square44x44Logo="Square44x44Logo.png"
BackgroundColor="#736DAB"/>
</Application>
</Applications>
</Package>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -36,9 +36,9 @@ ThrowOnExeError "setup.py build_ext -i failed"
Write-Output "Building Windows installer..."
pyinstaller --noconfirm --clean picard.spec 2>&1 | %{ "$_" }
ThrowOnExeError "PyInstaller failed"
CodeSignBinary .\dist\picard\picard.exe
CodeSignBinary .\dist\picard\fpcalc.exe
CodeSignBinary .\dist\picard\discid.dll
CodeSignBinary dist\picard\picard.exe
CodeSignBinary dist\picard\fpcalc.exe
CodeSignBinary dist\picard\discid.dll
# Workaround for https://github.com/pyinstaller/pyinstaller/issues/4429
If (Test-Path dist\picard\PyQt5\translations -PathType Container) {
@@ -52,9 +52,18 @@ Remove-Item -Path dist\picard\libssl-1_1.dll
# Build the installer
makensis.exe /INPUTCHARSET UTF8 installer\picard-setup.nsi 2>&1 | %{ "$_" }
ThrowOnExeError "NSIS failed"
CodeSignBinary .\installer\picard-setup-*.exe
CodeSignBinary installer\picard-setup-*.exe
Write-Output "Building portable exe..."
pyinstaller --noconfirm --clean --onefile picard.spec 2>&1 | %{ "$_" }
ThrowOnExeError "PyInstaller failed"
CodeSignBinary .\dist\MusicBrainz-Picard-*.exe
CodeSignBinary dist\MusicBrainz-Picard-*.exe
Write-Output "Building app package..."
ThrowOnExeError "setup.py build failed"
$PicardVersion = (python -c "import picard; print(picard.__version__)")
$PackageFile = "dist\MusicBrainz Picard $PicardVersion.msix"
Copy-Item appxmanifest.xml dist\picard
MakeAppx pack /o /d dist\picard\ /p $PackageFile
ThrowOnExeError "MakeAppx failed"
CodeSignBinary $PackageFile

View File

@@ -218,10 +218,12 @@ class picard_build(build):
log.info('generating scripts/%s from scripts/picard.in', PACKAGE_NAME)
generate_file('scripts/picard.in', 'scripts/' + PACKAGE_NAME, {'localedir': self.localedir, 'autoupdate': not self.disable_autoupdate})
if sys.platform == 'win32':
file_version = PICARD_VERSION[0:3] + PICARD_VERSION[4:]
file_version_str = '.'.join([str(v) for v in file_version])
# Temporarily setting it to this value to generate a nice name for Windows app
args['name'] = 'MusicBrainz Picard'
file_version = PICARD_VERSION[0:3] + PICARD_VERSION[4:]
args['file_version'] = '.'.join([str(v) for v in file_version])
args['file_version'] = file_version_str
if os.path.isfile('installer/picard-setup.nsi.in'):
generate_file('installer/picard-setup.nsi.in', 'installer/picard-setup.nsi', args)
version_args = {
@@ -230,6 +232,11 @@ class picard_build(build):
}
generate_file('win-version-info.txt.in', 'win-version-info.txt', {**args, **version_args})
args['name'] = 'picard'
generate_file('appxmanifest.xml.in', 'appxmanifest.xml', {
'app-id': PICARD_APP_ID,
'version': file_version_str
})
elif sys.platform == 'linux':
self.run_command('build_appdata')
build.run(self)