diff options
author | Leah Rowe <leah@libreboot.org> | 2025-10-04 09:14:33 +0100 |
---|---|---|
committer | Leah Rowe <leah@libreboot.org> | 2025-10-04 09:20:12 +0100 |
commit | e9a910b33c7837b4b868e3abda18eb4810df7f02 (patch) | |
tree | 749e1830cb0607952df1a1afc0ae09ec1db54140 /util/sbase/scripts/mkbox | |
parent | 2cfaba181b3c68761871fa47b32725c934423c14 (diff) |
config/git: import suckless sbase
i currently use the output of sha512sum in several
places of xbmk, which is a bit unreliable in case
output changes.
other cases where i use util outputs in variables
are probably reliable, because i'm using mostly
posix utilities in those.
to mitigate this, i now import suckless sbase, which
has a reasonable sha512sum implementation.
*every* binary it builds is being placed in build.list,
because i'll probably start using more of them.
for example, i may start modifying the "date"
implementation, adding the GNU-specific options that
i need as mentioned on init.sh
i'm importing it in util/ because the sha512sum
util is needed for verifying project sources, so
if sbase itself is a "project source", that means
we can into a chicken and egg bootstrapping problem.
this is sbase at revision:
055cc1ae1b3a13c3d8f25af0a4a3316590efcd48
Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'util/sbase/scripts/mkbox')
-rwxr-xr-x | util/sbase/scripts/mkbox | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/util/sbase/scripts/mkbox b/util/sbase/scripts/mkbox new file mode 100755 index 00000000..99e40441 --- /dev/null +++ b/util/sbase/scripts/mkbox @@ -0,0 +1,103 @@ +#!/bin/sh + +trap "rm -rf build" INT QUIT TERM + +rm -rf build +mkdir -p build + +cp *.h build + +cat > build/sbase-box.c <<EOF +#include <unistd.h> + +#include <libgen.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "util.h" +#include "sbase-box.h" + +struct cmd { + char *name; + int (*fn)(int, char **); +} cmds[] = { + {"install", xinstall_main}, + {"[", test_main}, +$(grep -l ^main *.c | +while read f +do + sed -n ' + /^main/ { + s/main/'${f%.c}'_main/ + s/-/_/g + w build/'$f' + s/\(^.*\)(.*)/ {"'${f%.c}'", \1},/p + d + } + w 'build/$f $f +done) + {NULL}, +}; + +static void +install(char *path) +{ + int r; + struct cmd *bp; + char fname[FILENAME_MAX]; + + if (path == NULL) { + fputs("sbase-box [-i path] [command]\n", stderr); + exit(1); + } + + for (bp = cmds; bp->name; ++bp) { + r = snprintf(fname, sizeof(fname), "%s/%s", path, bp->name); + if (r < 0 || r >= sizeof(fname)) { + fprintf(stderr, + "sbase-box: destination path truncated for '%s'\n", + bp->name); + exit(1); + } + remove(fname); + if (symlink("sbase-box", fname) < 0) { + fprintf(stderr, + "sbase-box: %s: %s\n", + bp->name, strerror(errno)); + exit(1); + } + } +} + +int +main(int argc, char *argv[]) +{ + char *s = basename(argv[0]); + struct cmd *bp; + + if (!strcmp(s, "sbase-box") && argc > 1) { + argc--; argv++; + if (strcmp(argv[0], "-i") == 0) { + install(argv[1]); + exit(0); + } + s = basename(argv[0]); + } + + for (bp = cmds; bp->name; ++bp) { + if (strcmp(bp->name, s) == 0) + return (*bp->fn)(argc, argv); + } + + for (bp = cmds; bp->name; ++bp) + printf("%s ", bp->name); + putchar('\n'); + + return 0; +} +EOF + +sed -n 's/.* \(.*_main\).*/int \1(int, char **);/p'\ + build/sbase-box.c > build/sbase-box.h |