diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b40424c923..d1573340e1 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -816,10 +816,10 @@ dist-store-weekly:
- win32-ps
cache: []
script:
- - build\windows\store\3_dist-gimp-winsdk.ps1 | Out-File -FilePath store.log
+ - build\windows\store\3_dist-gimp-winsdk.ps1 | Out-File -FilePath winsdk.log
artifacts:
expose_as: 'Windows msix'
paths:
- build/windows/store/_Output/
- - store.log
+ - winsdk.log
expire_in: 8 days
diff --git a/build/windows/store/3_dist-gimp-winsdk.ps1 b/build/windows/store/3_dist-gimp-winsdk.ps1
index d3cca725eb..ca7e703a80 100644
--- a/build/windows/store/3_dist-gimp-winsdk.ps1
+++ b/build/windows/store/3_dist-gimp-winsdk.ps1
@@ -1,227 +1,218 @@
#!/usr/bin/env pwsh
# Parameters
-param ($gimp_version,
- $gimp_app_version,
- $arch_a64 = 'gimp-a64',
- $arch_x64 = 'gimp-x64')
+param ($build_dir = '_build',
+ $a64_bundle = 'gimp-a64',
+ $x64_bundle = 'gimp-x64')
+# Autodetects latest WinSDK installed
+if ($Env:PROCESSOR_ARCHITECTURE -eq 'ARM64')
+ {
+ $cpu_arch = 'arm64'
+ }
+else
+ {
+ $cpu_arch = 'x64'
+ }
+$win_sdk_path = Resolve-Path "C:\Program Files (x86)\Windows Kits\10\bin\*\$cpu_arch" | Select-Object -Last 1
+
# Needed tools from Windows SDK
-Set-Alias -Name 'makepri' -Value "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\makepri.exe"
-Set-Alias -Name 'makeappx' -Value 'C:\Program Files (x86)\Windows Kits\10\App Certification Kit\MakeAppx.exe'
-Set-Alias -Name 'signtool' -Value 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe'
+Set-Alias 'makepri' "$win_sdk_path\makepri.exe"
+Set-Alias 'makeappx' 'C:\Program Files (x86)\Windows Kits\10\App Certification Kit\MakeAppx.exe'
+Set-Alias 'signtool' "$win_sdk_path\signtool.exe"
# Global variables
-$config_path = '_build\config.h'
+$config_path = "$build_dir\config.h"
-## Identity Name (internal) and Display Name (in the Store)
-$gimp_unstable = Get-Content -Path "$config_path" | Select-String 'GIMP_UNSTABLE' |
+## Get Identity Name (the dir shown in Explorer)
+$GIMP_UNSTABLE = Get-Content "$CONFIG_PATH" | Select-String 'GIMP_UNSTABLE' |
Foreach-Object {$_ -replace '#define GIMP_UNSTABLE ',''}
-if ($gimp_unstable -ne '1')
+if ($GIMP_UNSTABLE -eq '1')
{
- $identity_name="GIMP.GIMP"
- $display_name="GIMP"
+ $IDENTITY_NAME="GIMP.GIMPPreview"
}
else
{
- $identity_name="GIMP.GIMPPreview"
- $display_name="GIMP (Preview)"
+ $IDENTITY_NAME="GIMP.GIMP"
}
-## GIMP version (major.minor.micro)
-if (-Not $gimp_version)
+## Get GIMP version (major.minor.micro)
+$GIMP_VERSION = Get-Content "$CONFIG_PATH" | Select-String 'GIMP_VERSION' |
+ Foreach-Object {$_ -replace '#define GIMP_VERSION "',''} | Foreach-Object {$_ -replace '"',''}
+
+
+# Autodetects what arch bundles will be packaged
+Copy-Item .gitignore .gitignore.bak
+$supported_archs = "$a64_bundle","$x64_bundle"
+foreach ($bundle in $supported_archs)
{
- $gimp_version = Get-Content -Path "$config_path" | Select-String 'GIMP_VERSION' |
- Foreach-Object {$_ -replace '#define GIMP_VERSION "',''} | Foreach-Object {$_ -replace '"',''}
- }
-
-## GIMP app version (major.minor)
-if (-Not $gimp_app_version)
- {
- $gimp_app_version = Get-Content -Path "$config_path" | Select-String 'GIMP_APP_VERSION "' |
- Foreach-Object {$_ -replace '#define GIMP_APP_VERSION "',''} | Foreach-Object {$_ -replace '"',''}
- }
-
-## GIMP API version (stable_major.0)
-if (-Not $gimp_api_version)
- {
- $gimp_api_version = Get-Content -Path "$config_path" | Select-String 'GIMP_PKGCONFIG_VERSION "' |
- Foreach-Object {$_ -replace '#define GIMP_PKGCONFIG_VERSION "',''} | Foreach-Object {$_ -replace '"',''}
- }
-
-## GIMP arch folders
-$vfs_a64 = "$arch_a64\VFS\ProgramFilesX64\GIMP ${gimp_app_version}"
-$vfs_x64 = "$arch_x64\VFS\ProgramFilesX64\GIMP ${gimp_app_version}"
-$archsArray = "$arch_a64","$arch_x64"
-$vfsArray = "$vfs_a64","$vfs_x64"
-
-Set-Location build\windows\store\
-New-Item -Path "." -Name ".gitignore" -ItemType "File" -Force
-Set-Content ".gitignore" "$arch_a64`n$arch_x64`n_TempOutput`n_Output"
-
-
-# 1. CONFIGURE MANIFEST
-function Configure-Arch ([string]$arch, [string]$arch_msix)
-{
- New-Item -ItemType Directory -Path $arch
- Copy-Item AppxManifest.xml $arch
-
- ## Set Identity Name
- (Get-Content -Path "$arch\AppxManifest.xml") | Foreach-Object {$_ -replace "@IDENTITY_NAME@","$identity_name"} |
- Set-Content -Path "$arch\AppxManifest.xml"
-
- ## Set Display Name
- (Get-Content -Path "$arch\AppxManifest.xml") | Foreach-Object {$_ -replace "@DISPLAY_NAME@","$display_name"} |
- Set-Content -Path "$arch\AppxManifest.xml"
-
- ## Set GIMP version
- (Get-Content -Path "$arch\AppxManifest.xml") | Foreach-Object {$_ -replace "@GIMP_VERSION@","$gimp_version"} |
- Set-Content -Path "$arch\AppxManifest.xml"
-
- ## Set GIMP app version
- (Get-Content -Path "$arch\AppxManifest.xml") | Foreach-Object {$_ -replace "@GIMP_APP_VERSION@","$gimp_app_version"} |
- Set-Content -Path "$arch\AppxManifest.xml"
-
- ## Set arch
- (Get-Content -Path "$arch\AppxManifest.xml") | Foreach-Object {$_ -replace "neutral","$arch_msix"} |
- Set-Content -Path "$arch\AppxManifest.xml"
-
- ## Match supported filetypes
- $file_types = Get-Content -Path '..\installer\data_associations.list' | Foreach-Object {" ." + $_} |
- Foreach-Object {$_ + ""} | Where-Object {$_ -notmatch 'xcf'}
- (Get-Content -Path "$arch\AppxManifest.xml") | Foreach-Object {$_ -replace "@FILE_TYPES@","$file_types"} |
- Set-Content -Path "$arch\AppxManifest.xml"
-}
-
-Configure-Arch "$arch_a64" 'arm64'
-Configure-Arch "$arch_x64" 'x64'
-
-
-# 2. CREATE ASSETS
-
-## Copy pre-generated icons to each arch
-$icons_path = '..\..\..\_build\build\windows\store\Assets'
-if (Test-Path -Path "$icons_path")
- {
- foreach ($arch in $archsArray)
+ if (Test-Path "$bundle")
{
- New-Item -ItemType Directory -Path "$arch\Assets\"
- Copy-Item -Path "$icons_path\*.png" -Destination "$arch\Assets\" -Recurse
+ if (("$bundle" -like '*a64*') -or ("$bundle" -like '*aarch64*') -or ("$bundle" -like '*arm64*'))
+ {
+ $msix_arch = 'arm64'
+ }
+ else
+ {
+ $msix_arch = 'x64'
+ }
+
+ $ig_content = "`n$bundle`n$msix_arch`n*.appxsym`n*.zip"
+ if (Test-Path .gitignore -Type Leaf)
+ {
+ Add-Content .gitignore "$ig_content"
+ }
+ else
+ {
+ New-Item .gitignore
+ Set-Content .gitignore "$ig_content"
+ }
+
+ New-Item $msix_arch -ItemType Directory
+
+
+ # 1. CONFIGURE MANIFEST
+ Copy-Item build\windows\store\AppxManifest.xml $msix_arch
+
+ ## Set Identity Name
+ (Get-Content $msix_arch\AppxManifest.xml) | Foreach-Object {$_ -replace "@IDENTITY_NAME@","$IDENTITY_NAME"} |
+ Set-Content $msix_arch\AppxManifest.xml
+
+ ## Set Display Name (the name shown in MS Store)
+ if ($GIMP_UNSTABLE -eq '1')
+ {
+ $display_name='GIMP (Preview)'
+ }
+ else
+ {
+ $display_name='GIMP'
+ }
+ (Get-Content $msix_arch\AppxManifest.xml) | Foreach-Object {$_ -replace "@DISPLAY_NAME@","$display_name"} |
+ Set-Content $msix_arch\AppxManifest.xml
+
+ ## Set GIMP version
+ (Get-Content $msix_arch\AppxManifest.xml) | Foreach-Object {$_ -replace "@GIMP_VERSION@","$GIMP_VERSION"} |
+ Set-Content $msix_arch\AppxManifest.xml
+
+ ## Set GIMP app version (major.minor)
+ $gimp_app_version = Get-Content "$CONFIG_PATH" | Select-String 'GIMP_APP_VERSION "' |
+ Foreach-Object {$_ -replace '#define GIMP_APP_VERSION "',''} | Foreach-Object {$_ -replace '"',''}
+ (Get-Content $msix_arch\AppxManifest.xml) | Foreach-Object {$_ -replace "@GIMP_APP_VERSION@","$gimp_app_version"} |
+ Set-Content $msix_arch\AppxManifest.xml
+
+ ## Set msix_arch
+ (Get-Content $msix_arch\AppxManifest.xml) | Foreach-Object {$_ -replace "neutral","$msix_arch"} |
+ Set-Content $msix_arch\AppxManifest.xml
+
+ ## Match supported filetypes
+ $file_types = Get-Content 'build\windows\installer\data_associations.list' | Foreach-Object {" ." + $_} |
+ Foreach-Object {$_ + ""} | Where-Object {$_ -notmatch 'xcf'}
+ (Get-Content $msix_arch\AppxManifest.xml) | Foreach-Object {$_ -replace "@FILE_TYPES@","$file_types"} |
+ Set-Content $msix_arch\AppxManifest.xml
+
+
+ # 2. CREATE ASSETS
+
+ ## Copy pre-generated icons to each msix_arch
+ $icons_path = "$build_dir\build\windows\store\Assets"
+ if (Test-Path "$icons_path")
+ {
+ New-Item $msix_arch\Assets -ItemType Directory
+ Copy-Item "$icons_path\*.png" $msix_arch\Assets\ -Recurse
+ }
+ else
+ {
+ "(ERROR): MS Store icons not found. You can build them with '-Dms-store=true'"
+ exit 1
+ }
+
+ ## Generate resources.pri
+ Set-Location $msix_arch
+ makepri createconfig /cf priconfig.xml /dq lang-en-US /pv 10.0.0
+ Set-Location ..\
+ makepri new /pr $msix_arch /cf $msix_arch\priconfig.xml /of $msix_arch
+ Remove-Item $msix_arch\priconfig.xml
+
+
+ # 3. COPY GIMP FILES
+ $vfs = "$msix_arch\VFS\ProgramFilesX64\GIMP"
+
+ ## Copy files into VFS folder (to support external 3P plug-ins)
+ Copy-Item "$bundle" "$vfs" -Recurse -Force
+
+ ## Remove uneeded files (to match the Inno Windows Installer artifact)
+ Remove-Item "$vfs\gimp.cmd"
+
+ ## Disable Update check (ONLY FOR RELEASES)
+ if ($CI_COMMIT_TAG -or ($GIMP_CI_MS_STORE -eq 'MSIXUPLOAD'))
+ {
+ Add-Content "$vfs\share\gimp\*\gimp-release" 'check-update=false'
+ }
+
+ ## Remove uncompliant files (to avoid WACK/'signtool' issues)
+ Get-ChildItem "$vfs" -Recurse -Include ("*.debug", "*.tar") | Remove-Item -Recurse
+
+
+ # 4. MAKE .MSIX AND CORRESPONDING .APPXSYM
+ $MSIX_ARTIFACT = "${IDENTITY_NAME}_${GIMP_VERSION}.0_$msix_arch.msix"
+ $APPXSYM = $MSIX_ARTIFACT -replace '.msix','.appxsym'
+
+ ## Make .appxsym for each msix_arch (ONLY FOR RELEASES)
+ #if ($CI_COMMIT_TAG -or ($GIMP_CI_MS_STORE -eq 'MSIXUPLOAD'))
+ # {
+ # Get-ChildItem $msix_arch -Filter *.pdb -Recurse |
+ # Compress-Archive -DestinationPath "${IDENTITY_NAME}_${GIMP_VERSION}.0_$msix_arch.zip"
+ # Get-ChildItem *.zip | Rename-Item -NewName $APPXSYM
+ # Get-ChildItem $msix_arch -Include *.pdb -Recurse -Force | Remove-Item -Recurse -Force
+ # }
+
+ ## Make .msix from each msix_arch
+ makeappx pack /d $msix_arch /p $MSIX_ARTIFACT
+ Remove-Item $msix_arch/ -Recurse
+ } #END of 'if (Test-Path...'
+ } #END of 'foreach ($msix_arch...'
+
+
+# 5. MAKE .MSIXBUNDLE AND SUBSEQUENT .MSIXUPLOAD
+if ((Get-ChildItem *.msix -Recurse).Count -gt 1)
+ {
+ ## Make .msixbundle with all archs
+ ## (This is needed not only for easier multi-arch testing but
+ ## also to make sure against Partner Center getting confused)
+ $MSIX_ARTIFACT = "${IDENTITY_NAME}_${GIMP_VERSION}.0_neutral.msixbundle"
+ New-Item _TempOutput -ItemType Directory
+ Move-Item *.msix _TempOutput/
+ makeappx bundle /bv "${GIMP_VERSION}.0" /d _TempOutput /p $MSIX_ARTIFACT
+ Remove-Item _TempOutput/ -Recurse
+
+ ## Make .msixupload (ONLY FOR RELEASES)
+ if ($CI_COMMIT_TAG -or ($GIMP_CI_MS_STORE -eq 'MSIXUPLOAD'))
+ {
+ $MSIX_ARTIFACT = "${IDENTITY_NAME}_${GIMP_VERSION}.0_x64_arm64_bundle.msixupload"
+ Get-ChildItem *.msixbundle | ForEach-Object { Compress-Archive -Path "$($_.Basename).msixbundle" -DestinationPath "$($_.Basename).zip" }
+ Get-ChildItem *.zip | Rename-Item -NewName $MSIX_ARTIFACT
+ #Get-ChildItem *.appxsym | Remove-Item -Recurse -Force
+ Get-ChildItem *.msixbundle | Remove-Item -Recurse -Force
}
}
-else
+
+
+# 5. SIGN .MSIX OR .MSIXBUNDLE (FOR TESTING ONLY) AND DO OTHER STUFF
+if (-not $CI_COMMIT_TAG -and ($GIMP_CI_MS_STORE -ne 'MSIXUPLOAD') -and ($MSIX_ARTIFACT -notlike "*msixupload"))
+ {
+ signtool sign /fd sha256 /a /f build\windows\store\pseudo-gimp.pfx /p eek $MSIX_ARTIFACT
+ Copy-Item build\windows\store\pseudo-gimp.pfx .\ -Recurse
+ }
+
+if ($GITLAB_CI)
{
- "MS Store icons not found. You can generate them adding '-Dms-store=true' option"
- "at meson configure time."
- exit 1
+ # GitLab doesn't support wildcards when using "expose_as" so let's move to a dir
+ New-Item build\windows\store\_Output -ItemType Directory
+ Move-Item $MSIX_ARTIFACT build\windows\store\_Output
+ Get-ChildItem pseudo-gimp.pfx | Move-Item -Destination build\windows\store\_Output
}
-## Generate resources.pri
-foreach ($arch in $archsArray)
- {
- Set-Location $arch
- makepri createconfig /cf priconfig.xml /dq lang-en-US /pv 10.0.0
- Set-Location ..\
- makepri new /pr $arch /cf $arch\priconfig.xml /of $arch
- Remove-Item "$arch\priconfig.xml"
- }
-
-
-# 3. COPY GIMP FILES
-
-## Copy files into VFS folder (to support external 3P plug-ins)
-Copy-Item -Path "..\..\..\$arch_a64" -Destination "$vfs_a64" -Recurse
-Copy-Item -Path "..\..\..\$arch_x64" -Destination "$vfs_x64" -Recurse
-
-## Remove uneeded files (to match the Inno Windows Installer artifact)
-Remove-Item "$vfs_a64\gimp.cmd"
-Remove-Item "$vfs_x64\gimp.cmd"
-
-## Disable Update check (since the package is auto updated)
-foreach ($vfs in $vfsArray)
- {
- Add-Content $vfs\share\gimp\$gimp_api_version\gimp-release "check-update=false"
- }
-
-## Remove uncompliant files (to fix 'signtool' issues)
-$corrections = ("*.debug", "*.tar")
-foreach ($vfs in $vfsArray)
- {
- Get-ChildItem $vfs -Recurse -Include $corrections | Remove-Item -Recurse
- }
-
-
-# 4. MAKE .MSIXUPLOAD (ONLY FOR RELEASES)
-New-Item -ItemType Directory -Path "_TempOutput"
-New-Item -ItemType Directory -Path "_Output"
-$archsArray_limited = $archsArray -replace "gimp-", ""
-
-## Make .appxsym for each arch
-#if ($CI_COMMIT_TAG -or ($GIMP_CI_MS_STORE -eq 'MSIXUPLOAD'))
-# {
-# foreach ($arch in $archsArray_limited)
-# {
-# Get-ChildItem -Path "gimp-$arch" -Filter "*.pdb" -Recurse |
-# Compress-Archive -DestinationPath "_Output\${identity_name}_${gimp_version}.0_$arch.zip"
-# Get-ChildItem "_Output\*.zip" | Rename-Item -NewName { $_.Name -replace '.zip','.appxsym' }
-# }
-# }
-
-## Make .msix for each arch (this is needed to make the .msixbundle too)
-foreach ($arch in $archsArray_limited)
- {
- #Get-ChildItem "gimp-$arch" -Include "*.pdb" -Recurse -Force | Remove-Item -Recurse -Force
- makeappx pack /d "gimp-$arch" /p "_TempOutput\${identity_name}_${gimp_version}.0_$arch.msix"
- Remove-Item "gimp-$arch" -Recurse
- }
-
-## Make .msixbundle with all archs
-## (This is needed not only for local testing but also
-## to make sure against Partner Center getting confused)
-makeappx bundle /bv "${gimp_version}.0" /d "_TempOutput\" /p "_Output\${identity_name}_${gimp_version}.0_neutral.msixbundle"
-Remove-Item "_TempOutput\" -Recurse -Force
-
-## Make .msixupload
-if ($CI_COMMIT_TAG -or ($GIMP_CI_MS_STORE -eq 'MSIXUPLOAD'))
- {
- Compress-Archive -Path "_Output\*" "_Output\${identity_name}_${gimp_version}.0_x64_arm64_bundle.zip"
- Get-ChildItem "_Output\*.zip" | Rename-Item -NewName { $_.Name -replace '.zip','.msixupload' }
- #Get-ChildItem "_Output\*.appxsym" | Remove-Item -Recurse -Force
- }
-
-
-# 5. SIGN .MSIXBUNDLE (FOR TESTING)
-Copy-Item -Path "pseudo-gimp.pfx" -Destination "_Output\" -Recurse
-SignTool sign /fd sha256 /a /f _Output\pseudo-gimp.pfx /p eek "_Output\${identity_name}_${gimp_version}.0_neutral.msixbundle"
-
-
-# 6. TEST .MSIXUPLOAD OR .MSIXBUNDLE
-if ($CI_COMMIT_TAG -or ($GIMP_CI_MS_STORE -eq 'MSIXUPLOAD'))
- {
- $MSIX_ARTIFACT="${identity_name}_${gimp_version}.0_x64_arm64_bundle.msixupload"
- }
-else
- {
- $MSIX_ARTIFACT="${identity_name}_${gimp_version}.0_neutral.msixbundle"
- }
-
-if (Test-Path -Path "_Output\${MSIX_ARTIFACT}" -PathType Leaf)
- {
- Set-Location _Output\
- Get-FileHash $MSIX_ARTIFACT -Algorithm SHA256 | Out-File -FilePath "${MSIX_ARTIFACT}.SHA256SUMS"
- Get-FileHash $MSIX_ARTIFACT -Algorithm SHA512 | Out-File -FilePath "${MSIX_ARTIFACT}.SHA512SUMS"
-
- ### Return to git golder
- Set-Location ..\..\..\..\
-
- exit 0
- }
-else
- {
- ### Return to git golder
- Set-Location ..\..\..\
-
- exit 1
- }
+Remove-Item .gitignore
+Rename-Item .gitignore.bak .gitignore
diff --git a/build/windows/store/AppxManifest.xml b/build/windows/store/AppxManifest.xml
index 92ed134ec3..72d65cb295 100644
--- a/build/windows/store/AppxManifest.xml
+++ b/build/windows/store/AppxManifest.xml
@@ -29,7 +29,7 @@
-
+
@@ -71,7 +71,7 @@
-
+