8000 Update ab to the new sandboxed version. by davidgiven · Pull Request #293 · davidgiven/wordgrinder · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Update ab to the new sandboxed version. #293

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related 8000 emails.

Already on GitHub? Sign in to your account

Merged
merged 25 commits into from
Mar 16, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
d0dca53
Update ab.
davidgiven Nov 10, 2024
cb0f7d6
Merge from master.
davidgiven Mar 15, 2025
87d1d7e
Update for the new sandboxed ab.
davidgiven Mar 16, 2025
6cbb96e
Add missing build files.
davidgiven Mar 16, 2025
7f1b222
Use cp -H rather than cp --dereference to keep OSX happy.
davidgiven Mar 16, 2025
0a1c67c
Fix OSX build failure.
davidgiven Mar 16, 2025
06f8b80
Rework zip so as to not use zipnote, as it doesn't work right on olde…
davidgiven Mar 16, 2025
eaec074
Use hardlinks instead of symlinks in the sandbox; symlinks cause prob…
davidgiven Mar 16, 2025
6c28810
Cleanup.
davidgiven Mar 16, 2025
7352d82
Update the OSX package builder to work with the new improved builder.
davidgiven Mar 16, 2025
9c83eba
Copy files into the sandbox if hardlinking doesn't work.
davidgiven Mar 16, 2025
fd8f3b8
Upgrade WSL to Fedora 41.
davidgiven Mar 16, 2025
8e4ae6b
Typo fix.
davidgiven Mar 16, 2025
831b736
Another typo fix.
davidgiven Mar 16, 2025
beb41cb
Fix stray {} expansion.
davidgiven Mar 16, 2025
5a575ec
Add missing include files.
davidgiven Mar 16, 2025
beb0803
Fix {} expansions.
davidgiven Mar 16, 2025
24b05be
Add missing dependency.
davidgiven Mar 16, 2025
2e237a6
chmodding hardlinks appears to work very badly.
davidgiven Mar 16, 2025
b07a137
Add missing dependency.
davidgiven Mar 16, 2025
07ff25f
Even more dependencies.
davidgiven Mar 16, 2025
759f172
More missing dependencies.
davidgiven Mar 16, 2025
dd2ae10
Reformat. 8000
davidgiven Mar 16, 2025
f67d5db
Disable the haiku build --- it never worked right.
davidgiven Mar 16, 2025
beecebb
Update the WSL version in the release script.
davidgiven Mar 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 18 additions & 18 deletions .github/workflows/ccpp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,38 +38,38 @@ jobs:
name: ${{ github.event.repository.name }}.osx.${{ github.sha }}
path: bin/WordGrinder-0.9-setup.pkg

build-haiku:
runs-on: ubuntu-latest
container: 'docker.io/hectorm/qemu-haiku:latest'
steps:
- name: vmstart
run: 'container-init & timeout 600 vmshell exit 0'
#build-haiku:
# runs-on: ubuntu-latest
# container: 'docker.io/hectorm/qemu-haiku:latest'
# steps:
# - name: vmstart
# run: 'container-init & timeout 600 vmshell exit 0'

- name: pkgman
run: 'vmshell pkgman install -y make glfw_devel pkgconfig zlib_devel ncurses6_devel vim gcc pillow_python310'
# - name: pkgman
# run: 'vmshell pkgman install -y make glfw_devel pkgconfig zlib_devel ncurses6_devel vim gcc pillow_python310'

- uses: 'actions/checkout@main'
# - uses: 'actions/checkout@main'

- name: "copy to VM"
run: 'vmshell mkdir ./src/; tar -cf - ./ | vmshell tar -xf - -C ./src/'
# - name: "copy to VM"
# run: 'vmshell mkdir ./src/; tar -cf - ./ | vmshell tar -xf - -C ./src/'

- name: build
run: 'vmshell make -C ./src/ -j1'
# - name: build
# run: 'vmshell make -C ./src/ -j1'

build-windows:
runs-on: windows-latest

steps:
- name: setup WSL
run: |
curl -L https://github.com/WhitewaterFoundry/Fedora-Remix-for-WSL/releases/download/39.0.1/Fedora-Remix-for-WSL-SL_39.0.1.0_x64_arm64.msixbundle -o fedora.msixbundle
unzip fedora.msixbundle Fedora-Remix-for-WSL-SL_39.0.1.0_x64.msix
unzip Fedora-Remix-for-WSL-SL_39.0.1.0_x64.msix install.tar.gz
curl -L https://github.com/WhitewaterFoundry/Fedora-Remix-for-WSL/releases/download/41.0.0/Fedora-Remix-for-WSL-SL_41.0.0.0_x64_arm64.msixbundle -o fedora.msixbundle
unzip fedora.msixbundle Fedora-Remix-for-WSL-SL_41.0.0.0_x64.msix
unzip Fedora-Remix-for-WSL-SL_41.0.0.0_x64.msix install.tar.gz
wsl --update
wsl --import fedora fedora install.tar.gz
wsl --set-default fedora
wsl sh -c 'dnf -y install https://github.com/rpmsphere/noarch/raw/master/r/rpmsphere-release-38-1.noarch.rpm'
wsl sh -c 'dnf -y install --setop=install_weak_deps=False gcc gcc-c++ mingw32-gcc mingw32-gcc-c++ mingw32-zlib-static mingw32-nsis python3-pillow'
wsl sh -c 'dnf -y install https://github.com/rpmsphere/noarch/raw/master/r/rpmsphere-release-40-1.noarch.rpm'
wsl sh -c 'dnf -y install --setopt=install_weak_deps=False gcc gcc-c++ mingw32-gcc mingw32-gcc-c++ mingw32-zlib-static mingw32-nsis python3-pillow'

- name: fix line endings
run: |
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@ jobs:
steps:
- name: setup WSL
run: |
curl -L https://github.com/WhitewaterFoundry/Fedora-Remix-for-WSL/releases/download/39.0.1/Fedora-Remix-for-WSL-SL_39.0.1.0_x64_arm64.msixbundle -o fedora.msixbundle
unzip fedora.msixbundle Fedora-Remix-for-WSL-SL_39.0.1.0_x64.msix
unzip Fedora-Remix-for-WSL-SL_39.0.1.0_x64.msix install.tar.gz
curl -L https://github.com/WhitewaterFoundry/Fedora-Remix-for-WSL/releases/download/41.0.0/Fedora-Remix-for-WSL-SL_41.0.0.0_x64_arm64.msixbundle -o fedora.msixbundle
unzip fedora.msixbundle Fedora-Remix-for-WSL-SL_41.0.0.0_x64.msix
unzip Fedora-Remix-for-WSL-SL_41.0.0.0_x64.msix install.tar.gz
wsl --update
wsl --import fedora fedora install.tar.gz
wsl --set-default fedora
wsl sh -c 'dnf -y install https://github.com/rpmsphere/noarch/raw/master/r/rpmsphere-release-38-1.noarch.rpm'
wsl sh -c 'dnf -y install --setop=install_weak_deps=False gcc gcc-c++ mingw32-gcc mingw32-gcc-c++ mingw32-zlib-static mingw32-nsis python3-pillow'
wsl sh -c 'dnf -y install https://github.com/rpmsphere/noarch/raw/master/r/rpmsphere-release-40-1.noarch.rpm'
wsl sh -c 'dnf -y install --setopt=install_weak_deps=False gcc gcc-c++ mingw32-gcc mingw32-gcc-c++ mingw32-zlib-static mingw32-nsis python3-pillow'

- name: fix line endings
run: |
Expand Down
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ ifeq ($(BUILDTYPE),windows)
MAKENSIS = makensis
EXT = .exe
else
ifeq ($(BUILDTYPE),osx)
export BREW := $(shell brew --prefix)/opt
endif

export CC = gcc
export CXX = g++ -std=c++20
export CFLAGS
Expand Down
7 changes: 6 additions & 1 deletion build.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@
items={
"bin/wordgrinder$(EXT)": TEST_BINARY,
}
| ({"bin/xwordgrinder": "src/c+wordgrinder-glfw-x11"} if HAS_XWORDGRINDER else {})
| (
{"bin/xwordgrinder": "src/c+wordgrinder-glfw-x11"}
if HAS_XWORDGRINDER
else {}
)
| (
{"bin/wordgrinder-haiku": "src/c+wordgrinder-glfw-haiku"}
if HAS_HAIKU
Expand All @@ -25,6 +29,7 @@
{
"bin/wordgrinder-osx": "src/c+wordgrinder-glfw-osx",
"bin/wordgrinder-osx-ncurses": "src/c+wordgrinder-ncurses",
"bin/wordgrinder-osx.app.zip": "src/c+wordgrinder_app",
f"bin/WordGrinder-{VERSION}-setup.pkg": "src/c+wordgrinder_pkg",
}
if HAS_OSX
Expand Down
19 changes: 19 additions & 0 deletions build/_objectify.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import sys
from functools import partial

if len(sys.argv) != 3:
sys.exit("Usage: %s <file> <symbol>" % sys.argv[0])
filename = sys.argv[1]
symbol = sys.argv[2]

print("const uint8_t " + symbol + "[] = {")
n = 0
with open(filename, "rb") as in_file:
for c in iter(partial(in_file.read, 1), b""):
print("0x%02X," % ord(c), end="")
n += 1
if n % 16 == 0:
print()
print("};")

print("const size_t " + symbol + "_len = sizeof(" + symbol + ");")
44 changes: 44 additions & 0 deletions build/_sandbox.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#!/usr/bin/python3

from os.path import *
import argparse
import os
import shutil


def main():
parser = argparse.ArgumentParser()
parser.add_argument("-s", "--sandbox")
parser.add_argument("-v", "--verbose", action="store_true")
parser.add_argument("-l", "--link", action="store_true")
parser.add_argument("-e", "--export", action="store_true")
parser.add_argument("files", nargs="*")
args = parser.parse_args()

assert args.sandbox, "You must specify a sandbox directory"
assert args.link ^ args.export, "You can't link and export at the same time"

if args.link:
os.makedirs(args.sandbox, exist_ok=True)
for f in args.files:
sf = join(args.sandbox, f)
if args.verbose:
print("link", sf)
os.makedirs(dirname(sf), exist_ok=True)
try:
os.link(abspath(f), sf)
except PermissionError:
shutil.copy(f, sf)

if args.export:
for f in args.files:
sf = join(args.sandbox, f)
if args.verbose:
print("export", sf)
df = dirname(f)
if df:
os.makedirs(df, exist_ok=True)
os.rename(sf, f)


main()
25 changes: 25 additions & 0 deletions build/_zip.py
Original file line number Diff line number Diff line change
@@ -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()
11 changes: 7 additions & 4 deletions build/ab.mk
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ ifeq ($(OS), Windows_NT)
endif
EXT ?=

CWD=$(shell pwd)

ifeq ($(PROGRESSINFO),)
# The first make invocation here has to have its output discarded or else it
# produces spurious 'Leaving directory' messages... don't know why.
Expand All @@ -61,12 +63,13 @@ PROGRESSINFO = "[$(ruleindex)/$(rulecount)]$(eval ruleindex := $(shell expr $(ru
endif

PKG_CONFIG_HASHES = $(OBJ)/.pkg-config-hashes/target-$(word 1, $(shell $(PKG_CONFIG) --list-all | md5sum))
HOST_PKG_CONFIG_HASHES = $(OBJ)/.pkg-config-hashes/host-$(word 1, $(shell $(HOST_PKG_CONFIG) --list-all | md5sum))

$(OBJ)/build.mk : $(PKG_CONFIG_HASHES)
$(PKG_CONFIG_HASHES):
$(OBJ)/build.mk : $(PKG_CONFIG_HASHES) $(HOST_PKG_CONFIG_HASHES)
$(PKG_CONFIG_HASHES) $(HOST_PKG_CONFIG_HASHES) &:
$(hide) rm -rf $(OBJ)/.pkg-config-hashes
$(hide) mkdir -p $(OBJ)/.pkg-config-hashes
$(hide) rm -rf $(OBJ)/.pkg-config-hashes/target-*
$(hide) touch $(PKG_CONFIG_HASHES)
$(hide) touch $(PKG_CONFIG_HASHES) $(HOST_PKG_CONFIG_HASHES)

include $(OBJ)/build.mk

Expand Down
77 changes: 68 additions & 9 deletions build/ab.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
import string
import sys
import hashlib
import re
import ast
from collections import namedtuple

verbose = False
quiet = False
Expand All @@ -26,6 +29,22 @@
materialisingStack = []
defaultGlobals = {}

RE_FORMAT_SPEC = re.compile(
r"(?:(?P<fill>[\s\S])?(?P<align>[<>=^]))?"
r"(?P<sign>[- +])?"
r"(?P<pos_zero>z)?"
r"(?P<alt>#)?"
r"(?P<zero_padding>0)?"
r"(?P<width_str>\d+)?"
r"(?P<grouping>[_,])?"
r"(?:(?P<decimal>\.)(?P<precision_str>\d+))?"
r"(?P<type>[bcdeEfFgGnosxX%])?"
)

CommandFormatSpec = namedtuple(
"CommandFormatSpec", RE_FORMAT_SPEC.groupindex.keys()
)

sys.path += ["."]
old_import = builtins.__import__

Expand Down Expand Up @@ -80,6 +99,29 @@ def error(message):
raise ABException(message)


class BracketedFormatter(string.Formatter):
def parse(self, format_string):
while format_string:
left, *right = format_string.split("$[", 1)
if not right:
yield (left, None, None, None)
break
right = right[0]

offset = len(right) + 1
try:
ast.parse(right)
except SyntaxError as e:
if not str(e).startswith("unmatched ']'"):
raise e
offset = e.offset

expr = right[0 : offset - 1]
format_string = right[offset:]

yield (left if left else None, expr, None, None)


def Rule(func):
sig = inspect.signature(func)

Expand Down Expand Up @@ -166,7 +208,7 @@ def __repr__(self):
return f"Target('{self.name}')"

def templateexpand(selfi, s):
class Formatter(string.Formatter):
class Formatter(BracketedFormatter):
def get_field(self, name, a1, a2):
return (
eval(name, selfi.callback.__globals__, selfi.args),
Expand Down Expand Up @@ -358,10 +400,11 @@ def convert(value, target):
def _removesuffix(self, suffix):
# suffix='' should not call self[:-0].
if suffix and self.endswith(suffix):
return self[:-len(suffix)]
return self[: -len(suffix)]
else:
return self[:]


def loadbuildfile(filename):
filename = _removesuffix(filename.replace("/", "."), ".py")
builtins.__import__(filename)
Expand Down Expand Up @@ -413,8 +456,9 @@ def emit(*args, into=None):
outputFp.write(s)


def emit_rule(name, ins, outs, cmds=[], label=None):
fins = filenamesof(ins)
def emit_rule(self, ins, outs, cmds=[], label=None):
name = self.name
fins = set(filenamesof(ins))
fouts = filenamesof(outs)
nonobjs = [f for f in fouts if not f.startswith("$(OBJ)")]

Expand All @@ -440,8 +484,23 @@ def emit_rule(name, ins, outs, cmds=[], label=None):

if label:
emit("\t$(hide)", "$(ECHO) $(PROGRESSINFO)", label, into=lines)

sandbox = join(self.dir, "sandbox")
emit("\t$(hide)", f"rm -rf {sandbox}", into=lines)
emit(
"\t$(hide)",
f"$(PYTHON) build/_sandbox.py --link -s {sandbox}",
*fins,
into=lines,
)
for c in cmds:
emit("\t$(hide)", c, into=lines)
emit(f"\t$(hide) cd {sandbox} && (", c, ")", into=lines)
emit(
"\t$(hide)",
f"$(PYTHON) build/_sandbox.py --export -s {sandbox}",
*fouts,
into=lines,
)
else:
assert len(cmds) == 0, "rules with no outputs cannot have commands"
emit(name, ":", *fins, into=lines)
Expand Down Expand Up @@ -486,10 +545,10 @@ def simplerule(
cs += [self.templateexpand(c)]

emit_rule(
name=self.name,
self=self,
ins=ins + deps,
outs=outs,
label=self.templateexpand("{label} {name}") if label else None,
label=self.templateexpand("$[label] $[name]") if label else None,
cmds=cs,
)

Expand All @@ -514,7 +573,7 @@ def export(self, name=None, items: TargetsMap = {}, deps: Targets = []):
cwd=self.cwd,
ins=[srcs[0]],
outs=[destf],
commands=["$(CP) %s %s" % (srcs[0], destf)],
commands=["$(CP) -H %s %s" % (srcs[0], destf)],
label="",
)
subrule.materialise()
Expand All @@ -523,7 +582,7 @@ def export(self, name=None, items: TargetsMap = {}, deps: Targets = []):
replaces=self,
ins=outs + deps,
outs=["=sentinel"],
commands=["touch {outs[0]}"],
commands=["touch $[outs[0]]"],
label="EXPORT",
)

Expand Down
Loading
Loading
0