diff options
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | Justfile | 15 | ||||
| -rwxr-xr-x | scripts/gen-version.sh | 40 | ||||
| -rw-r--r-- | src/version.c | 19 | ||||
| -rw-r--r-- | src/version.h | 15 |
5 files changed, 84 insertions, 6 deletions
@@ -5,3 +5,4 @@ build/ *.out compile_commands.json .cache/ +src/version_gen.h @@ -13,23 +13,26 @@ default: build: build-static build-shared -build-static: +gen-version type="release": + ./scripts/gen-version.sh {{type}} + +build-static: (gen-version "release") mkdir -p {{build_dir}} cd {{build_dir}} && {{cc}} {{cflags}} {{extra_cflags}} -c ../{{src_dir}}/*.c ar rcs {{build_dir}}/lib{{lib}}.a {{build_dir}}/*.o -build-shared: +build-shared: (gen-version "release") mkdir -p {{build_dir}} cd {{build_dir}} && {{cc}} {{cflags}} {{extra_cflags}} -c ../{{src_dir}}/*.c {{cc}} -shared -o {{build_dir}}/lib{{lib}}.so {{build_dir}}/*.o {{lflags}} -build-release: +build-release: (gen-version "release") mkdir -p {{build_dir}} cd {{build_dir}} && {{cc}} {{cflags}} {{extra_cflags}} -O3 -DNDEBUG -c ../{{src_dir}}/*.c ar rcs {{build_dir}}/lib{{lib}}-release.a {{build_dir}}/*.o {{cc}} -shared -o {{build_dir}}/lib{{lib}}-release.so {{build_dir}}/*.o {{lflags}} -build-debug: +build-debug: (gen-version "debug") mkdir -p {{build_dir}} cd {{build_dir}} && {{cc}} {{cflags}} {{extra_cflags}} -g -O0 -fsanitize=address,undefined -fno-omit-frame-pointer -c ../{{src_dir}}/*.c ar rcs {{build_dir}}/lib{{lib}}-debug.a {{build_dir}}/*.o @@ -76,12 +79,12 @@ install-vendor dir: build uninstall-vendor dir: rm -rf {{dir}}/vendor/{{lib}} -test-all: +test-all: (gen-version "debug") mkdir -p {{build_dir}} {{cc}} {{cflags}} {{extra_cflags}} {{test_dir}}/*.c {{src_dir}}/*.c -o {{build_dir}}/test -lcriterion {{lflags}} ./{{build_dir}}/test -coverage: +coverage: (gen-version "debug") mkdir -p {{build_dir}}/cov-src {{build_dir}}/cov-tests cd {{build_dir}}/cov-src && {{cc}} {{cflags}} --coverage -c ../../{{src_dir}}/*.c cd {{build_dir}}/cov-tests && {{cc}} {{cflags}} --coverage -c ../../{{test_dir}}/*.c diff --git a/scripts/gen-version.sh b/scripts/gen-version.sh new file mode 100755 index 0000000..ffe7f43 --- /dev/null +++ b/scripts/gen-version.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +set -euo pipefail + +cd "$(dirname "$0")/.." + +build_type="${1:-release}" +out="src/version_gen.h" +tmp="$(mktemp)" + +tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0") +version="${tag#v}" +major="${version%%.*}" +rest="${version#*.}" +minor="${rest%%.*}" +patch="${rest#*.}" +patch="${patch%%-*}" + +commit=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown") +if ! git diff --quiet 2>/dev/null || ! git diff --cached --quiet 2>/dev/null; then + commit="${commit}-dirty" +fi + +cat > "$tmp" <<EOF +#pragma once + +#define STEEZ_VERSION_MAJOR $major +#define STEEZ_VERSION_MINOR $minor +#define STEEZ_VERSION_PATCH $patch +#define STEEZ_VERSION_STRING "$version" +#define STEEZ_GIT_COMMIT "$commit" +#define STEEZ_BUILD_DATE "$(date +%Y-%m-%d)" +#define STEEZ_BUILD_TIME "$(date +%H:%M:%S)" +#define STEEZ_BUILD_TYPE "$build_type" +EOF + +if ! cmp -s "$tmp" "$out" 2>/dev/null; then + mv "$tmp" "$out" +else + rm "$tmp" +fi diff --git a/src/version.c b/src/version.c new file mode 100644 index 0000000..df10b08 --- /dev/null +++ b/src/version.c @@ -0,0 +1,19 @@ +#include "version.h" +#include "version_gen.h" + +char const *steez_version_string(void) { + return STEEZ_VERSION_STRING; +} + +steez_build_info_t steez_build_info(void) { + return (steez_build_info_t){ + .major = STEEZ_VERSION_MAJOR, + .minor = STEEZ_VERSION_MINOR, + .patch = STEEZ_VERSION_PATCH, + .string = STEEZ_VERSION_STRING, + .git_commit = STEEZ_GIT_COMMIT, + .build_date = STEEZ_BUILD_DATE, + .build_time = STEEZ_BUILD_TIME, + .build_type = STEEZ_BUILD_TYPE, + }; +} diff --git a/src/version.h b/src/version.h new file mode 100644 index 0000000..6042d27 --- /dev/null +++ b/src/version.h @@ -0,0 +1,15 @@ +#pragma once + +#include "common.h" + +typedef struct { + i32 major, minor, patch; + char const *string; + char const *git_commit; + char const *build_date; + char const *build_time; + char const *build_type; +} steez_build_info_t; + +char const *steez_version_string(void); +steez_build_info_t steez_build_info(void); |