From 7c05eed48798c0d4c349c19858b9c46c34dd579f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?kleines=20Filmr=C3=B6llchen?= Date: Tue, 30 Aug 2022 12:44:33 +0200 Subject: [PATCH] Kernel: Bake version information into the Kernel This is done by generating a Kernel/Version.h header with major version, minor version, and git hash. --- Kernel/CMakeLists.txt | 13 ++++++++++++ Kernel/generate-version-file.sh | 37 +++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100755 Kernel/generate-version-file.sh diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index 56104ff750..cf30b1cd20 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -410,6 +410,18 @@ set(ELF_SOURCES ../Userland/Libraries/LibELF/Validation.cpp ) +add_custom_command( + COMMAND "${SerenityOS_SOURCE_DIR}/Kernel/generate-version-file.sh" "${CMAKE_CURRENT_BINARY_DIR}/Version.h.tmp" + COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${CMAKE_CURRENT_BINARY_DIR}/Version.h.tmp" "${CMAKE_CURRENT_BINARY_DIR}/Version.h" + COMMAND "${CMAKE_COMMAND}" -E remove "${CMAKE_CURRENT_BINARY_DIR}/Version.h.tmp" + WORKING_DIRECTORY "${SerenityOS_SOURCE_DIR}" + COMMENT "Generating SerenityOS version information" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/Version.h" + VERBATIM +) +add_custom_target(generate_version_header ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/Version.h") +set(GENERATED_SOURCES "${CMAKE_CURRENT_BINARY_DIR}/Version.h") + generate_state_machine(../Userland/Libraries/LibVT/StateMachine.txt ../Userland/Libraries/LibVT/EscapeSequenceStateMachine.h) set(VT_SOURCES @@ -437,6 +449,7 @@ set(SOURCES if (NOT "${SERENITY_ARCH}" STREQUAL "aarch64") set(SOURCES ${KERNEL_SOURCES} + ${GENERATED_SOURCES} ${SOURCES} ${EDID_SOURCES} ${ELF_SOURCES} diff --git a/Kernel/generate-version-file.sh b/Kernel/generate-version-file.sh new file mode 100755 index 0000000000..98d02b7ae5 --- /dev/null +++ b/Kernel/generate-version-file.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +set -e + +OUTPUT_FILE=$1 + +if command -v git >/dev/null; then + if git status >/dev/null 2>&1; then + GIT_HASH=$( (git log --pretty=format:'%h' -n 1 | cut -c1-7) || true ) + # There is at least one modified file as reported by git. + if git status --porcelain=v2 | head | grep -Ei '^1' >/dev/null; then + GIT_HASH="${GIT_HASH}-modified" + fi + else + GIT_HASH=unknown + fi +else + GIT_HASH=unknown +fi + + +cat << EOF > "$OUTPUT_FILE" +/* + * Automatically generated by Kernel/generate-version-file.sh + */ + +#pragma once +#include + +namespace Kernel { + +constexpr unsigned SERENITY_MAJOR_REVISION = 1; +constexpr unsigned SERENITY_MINOR_REVISION = 0; +constexpr StringView SERENITY_VERSION = "${GIT_HASH}"sv; + +} +EOF