fxconv: add support for script mode (-s)

Lephenixnoir 3 years ago
parent c9dd9fad18
commit ce78d4814c
Signed by untrusted user: Lephenixnoir
GPG Key ID: 1BBA026E13FC0495
  1. 15
  2. 25

@ -18,8 +18,8 @@ dflags = -MT $@ -MMD -MP -MF $(@:%.o=%.d)
# $TARGETS is provided by Makefile.cfg.
TARGETS := $(filter-out fxconv,$(TARGETS))
TARGETS := $(TARGETS:fxsdk=fxsdk.sh)
TARGETS := $(TARGETS:fxconv=fxconv-main.py)
bin = $(TARGETS:%=bin/%)
# fxconv has no sources files because it's written in Python, and fxsdk has no
@ -30,9 +30,9 @@ obj-fxg1a := $(src-fxg1a:%=build/%.o)
# Sed command to copy install path to fxsdk.sh. On Mac OS, BSD sed is used so
# we need to do it a bit differently with a printf helper to insert a literal
# newline into the command.
sed := '/^PREFIX=\\$$/ a \$(PREFIX)'
sed := -E -e '/^PREFIX=.?.?.?\\$$/ a \$(PREFIX)'
ifeq "$(shell uname)" "Darwin"
sed := "$$(printf '/^PREFIX=/ a \\\n$(PREFIX)')"
sed := -e "$$(printf '/^PREFIX=.?.?.?/ a \\\n$(PREFIX)')"
# Symbolic targets
@ -41,11 +41,14 @@ all: $(bin)
all-fxsdk: bin/fxsdk.sh
all-fxg1a: bin/fxg1a
all-fxconv: bin/fxconv-main.py
# Explicit targets
bin/fxsdk.sh: fxsdk/fxsdk.sh | bin/
sed -e $(sed) $< > $@
sed $(sed) $< > $@
bin/fxconv-main.py: fxconv/fxconv-main.py | bin/
sed $(sed) $< > $@
bin/fxg1a: $(obj-fxg1a) | bin/
gcc $^ -o $@ $(lflags)
@ -91,11 +94,11 @@ endif
install: $(bin)
install -d $(PREFIX)/bin
install -d $(PREFIX)/share/fxsdk
install $(bin:bin/fxsdk.sh=) $(m755) $(PREFIX)/bin
install $(filter bin/fxg1a,$(bin)) $(m755) $(PREFIX)/bin
install -d $(PREFIX)/share/fxsdk/assets
install fxsdk/assets/* $(m644) $(PREFIX)/share/fxsdk/assets
install bin/fxsdk.sh $(m755) $(PREFIX)/bin/fxsdk
install fxconv/fxconv-main.py $(m755) $(PREFIX)/bin/fxconv
install bin/fxconv-main.py $(m755) $(PREFIX)/bin/fxconv
install fxconv/fxconv.py $(m644) $(PREFIX)/bin

@ -4,8 +4,13 @@ import getopt
import sys
import os
import fxconv
import subprocess
help_string = """
# Note: this line is edited at compile time to insert the install folder
help_string = f"""
usage: fxconv [-s] <python script> [files...]
fxconv -b <bin file> -o <object file> [parameters...]
fxconv -i <png file> -o <object file> (--fx|--cg) [parameters...]
@ -31,6 +36,8 @@ script. They accept parameters with a "category.key:value" syntax, for example:
When converting images, use --fx (black-and-white calculators) or --cg (16-bit
color calculators) to specify the target machine.
Install PREFIX is set to '{PREFIX}'.
# Simple error-warnings system
@ -93,10 +100,20 @@ def main():
if mode == "s":
if output is not None:
warn("option --output is ignored in script mode")
args = None if args == [] else args
err("script mode not currently implemented (TODO) x_x")
if PREFIX == "":
err("unknown or invalid install path x_x")
env = os.environ.copy()
if "PYTHONPATH" in env:
env["PYTHONPATH"] += f":{PREFIX}/bin"
env["PYTHONPATH"] = f"{PREFIX}/bin"
p = subprocess.run([ sys.executable, input ], env=env)
if p.returncode != 0:
# In shortcut conversion modes, read parameters from the command-line