diff --git a/build/_sandbox.py b/build/_sandbox.py index 2450c537..8d1940b0 100644 --- a/build/_sandbox.py +++ b/build/_sandbox.py @@ -26,7 +26,7 @@ def main(): print("link", sf) os.makedirs(dirname(sf), exist_ok=True) try: - os.link(abspath(f), sf) + os.symlink(abspath(f), sf) except PermissionError: shutil.copy(f, sf) diff --git a/build/_zip.py b/build/_zip.py new file mode 100755 index 00000000..f5a49d09 --- /dev/null +++ b/build/_zip.py @@ -0,0 +1,25 @@ +#!/usr/bin/python3 + +from os.path import * +import argparse +import os +from zipfile import ZipFile + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("-z", "--zipfile") + parser.add_argument("-v", "--verbose", action="store_true") + parser.add_argument("-f", "--file", nargs=2, action="append") + args = parser.parse_args() + + assert args.zipfile, "You must specify a zipfile to create" + + with ZipFile(args.zipfile, mode="w") as zf: + for zipname, filename in args.file: + if args.verbose: + print(filename, "->", zipname) + zf.write(filename, arcname=zipname) + + +main() diff --git a/extras/build.py b/extras/build.py index b70321a8..671fbb2d 100644 --- a/extras/build.py +++ b/extras/build.py @@ -1,6 +1,9 @@ from build.ab import simplerule, simplerule from build.utils import objectify from build.c import clibrary +from build.zip import zip +from glob import glob +from os.path import * icons = ["fluxfile", "hardware", "icon", "imagefile"] @@ -15,24 +18,17 @@ clibrary( ) simplerule( - name="fluxengine_iconset", + name="fluxengine_icns", ins=["./icon.png"], - outs=["=fluxengine.iconset"], + outs=["=fluxengine.icns"], commands=[ - "mkdir -p $[outs[0]]", - "sips -z 64 64 $[ins[0]] --out $[outs[0]]/icon_32x32@2x.png > /dev/null", + "mkdir -p fluxengine.iconset", + "sips -z 64 64 $[ins[0]] --out fluxengine.iconset/icon_32x32@2x.png > /dev/null", + "iconutil -c icns -o $[outs[0]] fluxengine.iconset", ], label="ICONSET", ) -simplerule( - name="fluxengine_icns", - ins=[".+fluxengine_iconset"], - outs=["=fluxengine.icns"], - commands=["iconutil -c icns -o $[outs[0]] $[ins[0]]"], - label="ICONUTIL", -) - simplerule( name="fluxengine_ico", ins=["./icon.png"], @@ -40,3 +36,18 @@ simplerule( commands=["png2ico $[outs[0]] $[ins[0]]"], label="MAKEICON", ) + +template_files = [ + f + for f in glob( + "**", recursive=True, root_dir="extras/FluxEngine.app.template" + ) + if isfile(join("extras/FluxEngine.app.template", f)) +] +zip( + name="fluxengine_template", + items={ + join("FluxEngine.app", k): join("extras/FluxEngine.app.template", k) + for k in template_files + }, +) diff --git a/src/gui/build.py b/src/gui/build.py index 1841f63b..f1cdd65c 100644 --- a/src/gui/build.py +++ b/src/gui/build.py @@ -58,38 +58,28 @@ cxxprogram( if config.osx: simplerule( name="fluxengine_pkg", - ins=[".+fluxengine_app"], - outs=["=FluxEngine.pkg"], - commands=[ - "pkgbuild --quiet --install-location /Applications --component $[ins[0]] $[outs[0]]" - ], - label="PKGBUILD", - ) - - simplerule( - name="fluxengine_app", ins=[ ".+gui", "extras+fluxengine_icns", - "extras/FluxEngine.app.template/", + "extras+fluxengine_template", ], - outs=["=FluxEngine.app"], + outs=["=FluxEngine.pkg"], commands=[ "rm -rf $[outs[0]]", - "cp -a $[ins[2]] $[outs[0]]", - "touch $[outs[0]]", - "cp $[ins[0]] $[outs[0]]/Contents/MacOS/fluxengine-gui", - "mkdir -p $[outs[0]]/Contents/Resources", - "cp $[ins[1]] $[outs[0]]/Contents/Resources/FluxEngine.icns", - "dylibbundler -of -x $[outs[0]]/Contents/MacOS/fluxengine-gui -b -d $[outs[0]]/Contents/libs -cd > /dev/null", - "cp $$(brew --prefix wxwidgets)/README.md $[outs[0]]/Contents/libs/wxWidgets.md", - "cp $$(brew --prefix protobuf)/LICENSE $[outs[0]]/Contents/libs/protobuf.txt", - "cp $$(brew --prefix fmt)/LICENSE* $[outs[0]]/Contents/libs/fmt.rst", - "cp $$(brew --prefix libpng)/LICENSE $[outs[0]]/Contents/libs/libpng.txt", - "cp $$(brew --prefix libjpeg)/README $[outs[0]]/Contents/libs/libjpeg.txt", - "cp $$(brew --prefix abseil)/LICENSE $[outs[0]]/Contents/libs/abseil.txt", - "cp $$(brew --prefix libtiff)/LICENSE.md $[outs[0]]/Contents/libs/libtiff.txt", - "cp $$(brew --prefix zstd)/LICENSE $[outs[0]]/Contents/libs/zstd.txt", + "unzip -q $[ins[2]]", # creates FluxEngine.app + "cp $[ins[0]] FluxEngine.app/Contents/MacOS/fluxengine-gui", + "mkdir -p FluxEngine.app/Contents/Resources", + "cp $[ins[1]] FluxEngine.app/Contents/Resources/FluxEngine.icns", + "dylibbundler -of -x FluxEngine.app/Contents/MacOS/fluxengine-gui -b -d FluxEngine.app/Contents/libs -cd > /dev/null", + "cp $$(brew --prefix wxwidgets)/README.md FluxEngine.app/Contents/libs/wxWidgets.md", + "cp $$(brew --prefix protobuf)/LICENSE FluxEngine.app/Contents/libs/protobuf.txt", + "cp $$(brew --prefix fmt)/LICENSE* FluxEngine.app/Contents/libs/fmt.rst", + "cp $$(brew --prefix libpng)/LICENSE FluxEngine.app/Contents/libs/libpng.txt", + "cp $$(brew --prefix libjpeg)/README FluxEngine.app/Contents/libs/libjpeg.txt", + "cp $$(brew --prefix abseil)/LICENSE FluxEngine.app/Contents/libs/abseil.txt", + "cp $$(brew --prefix libtiff)/LICENSE.md FluxEngine.app/Contents/libs/libtiff.txt", + "cp $$(brew --prefix zstd)/LICENSE FluxEngine.app/Contents/libs/zstd.txt", + "pkgbuild --quiet --install-location /Applications --component FluxEngine.app $[outs[0]]", ], label="MKAPP", )