From 4239de9251f4b8f4196b0a27f7a28eeb14f63b08 Mon Sep 17 00:00:00 2001 From: Ludovic 'Archivist' Lagouardette Date: Wed, 8 Oct 2025 02:41:07 +0200 Subject: [PATCH] A build of the shell can now print the current version that was built if built with CMake --- CMakeLists.txt | 8 ++++++++ sh.c | 15 +++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index ed43f3d..996bc83 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,11 +18,19 @@ add_library(ink lib.c include/ink.h) add_definitions(-DINK_STEP_BATCH_COUNT=20) +execute_process( + COMMAND git rev-parse HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE) + add_executable(ink_exe main.c) target_link_libraries(ink_exe PUBLIC ink) target_include_directories(ink PUBLIC include) add_executable(inksh sh.c) +target_compile_definitions(inksh PRIVATE + "-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"") target_link_libraries(inksh PUBLIC ink) # Functional tests diff --git a/sh.c b/sh.c index ea7f312..5bdf4b6 100644 --- a/sh.c +++ b/sh.c @@ -8,6 +8,10 @@ #define INK_SH_READ_BUFF 32768 #endif // INK_SH_READ_BUFF +#ifndef GIT_COMMIT_HASH +#define GIT_COMMIT_HASH "?" +#endif + int get_type_by_name(struct context* ctx, const char* name); static void print_string(struct context* ctx, const struct elem string) { @@ -127,6 +131,16 @@ static void call_word(struct context* ctx) { ink_push_fn(ctx, frame); } +static void print_releasever(struct context* ctx) { + const char * commit = GIT_COMMIT_HASH; + + while (*commit) { + ctx->putchar(ctx, *commit++); + } + + ctx->putchar(ctx, '\n'); +} + int main(int argc, char** argv) { char read_buffer[INK_SH_READ_BUFF]; struct context* ctx; @@ -135,6 +149,7 @@ int main(int argc, char** argv) { ink_add_native(ctx, "words?", list_words); ink_add_native(ctx, "words!", resolve_word); ink_add_native(ctx, "words.call", call_word); + ink_add_native(ctx, "version", print_releasever); end_argv = argv + argc; size_t cnt; int no_exit = 1;