From e9a910b33c7837b4b868e3abda18eb4810df7f02 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sat, 4 Oct 2025 09:14:33 +0100 Subject: 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 --- util/sbase/scripts/mkbox | 103 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100755 util/sbase/scripts/mkbox (limited to 'util/sbase/scripts/mkbox') 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 < + +#include +#include +#include +#include +#include + +#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 -- cgit v1.2.1