aboutsummaryrefslogtreecommitdiff
path: root/tools/lib.sh
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2024-01-02 17:28:59 -0300
committerEuAndreh <eu@euandre.org>2024-01-05 05:43:22 -0300
commit2e96fc06f325110af8c7177c0c60694eed5fd245 (patch)
treeba4e2ae8c50136cbf2f00a0edc8f31c90901bb64 /tools/lib.sh
parentsrc/internal/version.h: Check-in file with fixed value for compilation (diff)
downloadgrovel-2e96fc06f325110af8c7177c0c60694eed5fd245.tar.gz
grovel-2e96fc06f325110af8c7177c0c60694eed5fd245.tar.xz
Fix the build system.
The improvements are: - use most of the default "Makefile" for standard packaging; - also use the default ".gitignore" with for the derived assets; - don't impose so many $CFLAGS on the user. GCC still needs to be given the `-ffreestanding` flag explicitly for us to get a good binary; - stop using ad-hoc tools/* scripts, and avoid the code-generation anti-pattern overall on the build. Some of the generated files were checked-in, and some were removed; - remove empty files; - use POSIX make(1) over gmake; - add fuzz targets; - partial "install" and "uninstall" targets; - complete "clean" target. The shortcomings are: - only working on x86_64. More platforms coming soon; - code is still messy: way too many warnings, GNU/BSD specific extensions, inline assembly, and all kinds of unportable code; - still only works with GCC and GCC-like compilers, and completly fails with tcc(1) and cproc(1); - the `deps.mk` file is being maintained manually. As I work on the source files I'll finish automating its generation with `mkdeps.sh`; - still seems to be coupled with Linux; - still is missing tests setup; - still uses `#include <$NAME.h>` instead of the correct `#include "$NAME.h"` form. The generated libgrovel.a did match the previous lib/libc.a 100%.
Diffstat (limited to 'tools/lib.sh')
-rw-r--r--tools/lib.sh49
1 files changed, 49 insertions, 0 deletions
diff --git a/tools/lib.sh b/tools/lib.sh
new file mode 100644
index 00000000..0412d7c6
--- /dev/null
+++ b/tools/lib.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+
+assert_arg() {
+ if [ -z "$1" ]; then
+ printf 'Missing %s.\n\n' "$2" >&2
+ cat <<-'EOF'
+ usage >&2
+ exit 2
+ EOF
+ fi
+}
+
+uuid() {
+ od -xN20 /dev/urandom |
+ head -n1 |
+ awk '{OFS="-"; print $2$3,$4,$5,$6,$7$8$9}'
+}
+
+tmpname() {
+ echo "${TMPDIR:-/tmp}/uuid-tmpname with spaces.$(uuid)"
+}
+
+mkstemp() {
+ name="$(tmpname)"
+ touch "$name"
+ echo "$name"
+}
+
+mkdtemp() {
+ name="$(tmpname)"
+ mkdir "$name"
+ echo "$name"
+}
+
+END="\033[0m"
+yellow() {
+ YELLOW="\033[0;33m"
+ printf "${YELLOW}${1}${END}"
+}
+
+green() {
+ GREEN="\033[0;32m"
+ printf "${GREEN}${1}${END}"
+}
+
+red() {
+ RED="\033[0;31m"
+ printf "${RED}${1}${END}"
+}