Fix NSIS installer build: absolute paths via defines, space-free installed exe, BMP ICO
- makensis resolves relative -DICON/-DARTIFACT against the script directory, so CI now passes $PWD-based absolute paths (reproduced locally in the same ubuntu:24.04 container; installer builds, 7z shows step-line.exe + uninstall.exe) - Install as step-line.exe (no spaces: NSIS /oname splits on whitespace) - OutFile overridable via -DOUT - tools/generate_textures.py icon.ico now produced via ImageMagick with classic BMP entries (NSIS-compatible); PIL PNG-compressed ICOs rejected by NSIS
This commit is contained in:
1 parent
8bc84c1f36
commit
0f076205af
12 files changed
+41
-15
No files matched your search
@@ -306,12 +306,30 @@ def app_icon():
|
||||
icon("icon.png", badge, size=1024)
|
||||
icon("icon.ico", badge, size=256)
|
||||
|
||||
# ICO for Windows. Sizes stay at 16/32/48 so every entry uses classic BMP
|
||||
# (PNG-compressed entries, used by PIL at >=256px, break some NSIS builds).
|
||||
src = Image.open(os.path.join(ASSETS, "icon.png")).convert("RGBA")
|
||||
# ICO for Windows. Must be BMP-entry based: PIL's ICO serializer emits
|
||||
# PNG-compressed entries which NSIS' icon loader rejects. ImageMagick
|
||||
# writes classic BMP entries; fall back to PIL only if ImageMagick is gone
|
||||
# (flag it so a human notices).
|
||||
import subprocess
|
||||
import sys
|
||||
ico_path = os.path.join(ASSETS, "icon.ico")
|
||||
src.save(ico_path, format="ICO", sizes=[(48, 48), (32, 32), (16, 16)])
|
||||
print("wrote assets/textures/icon.ico (BMP 16/32/48)")
|
||||
src_png = os.path.join(ASSETS, "icon.png")
|
||||
ran = False
|
||||
for cmd in (
|
||||
["magick", src_png, "-background", "none", "-define", "icon:auto-resize=48,32,16", ico_path],
|
||||
["convert", src_png, "-background", "none", "-define", "icon:auto-resize=48,32,16", ico_path],
|
||||
):
|
||||
try:
|
||||
subprocess.run(cmd, check=True, capture_output=True)
|
||||
ran = True
|
||||
break
|
||||
except (FileNotFoundError, subprocess.CalledProcessError):
|
||||
continue
|
||||
if ran:
|
||||
print("wrote assets/textures/icon.ico (BMP 16/32/48 via ImageMagick)")
|
||||
else:
|
||||
print("WARNING: ImageMagick not found; writing PIL ICO (may be PNG-compressed)")
|
||||
Image.open(src_png).convert("RGBA").save(ico_path, format="ICO", sizes=[(48, 48), (32, 32), (16, 16)])
|
||||
|
||||
|
||||
def cards():
|
||||
|
||||
Reference in new issue
Block a user