From 44d56a7e183cdc3dd570db6f9cac6d7a2ae3c667 Mon Sep 17 00:00:00 2001 From: Lucie Scarlet Date: Fri, 12 Jul 2024 12:21:27 +0200 Subject: [PATCH] Added support for C Added flag `-c' for C generation --- CMakeLists.txt.ctmpl | 77 ++++++++++++++++++++++++++++++++++++++++++++ cmakegen | 6 +++- 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 CMakeLists.txt.ctmpl diff --git a/CMakeLists.txt.ctmpl b/CMakeLists.txt.ctmpl new file mode 100644 index 0000000..b2face5 --- /dev/null +++ b/CMakeLists.txt.ctmpl @@ -0,0 +1,77 @@ +cmake_minimum_required(VERSION 3.30) + +project(PROJECT_TEMPLATE_NAME C) + +set(BUILD_MODE "release") +set(PROJECT_IDENTIFIER "") +string(TOUPPER "${PROJECT_NAME}" PROJECT_IDENTIFIER) + +execute_process( + COMMAND git status --porcelain=v1 --ignored=no + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_ISCOMMITTED + OUTPUT_STRIP_TRAILING_WHITESPACE) +string(COMPARE EQUAL "${GIT_ISCOMMITTED}" "" is_committed) + +execute_process( + COMMAND git rev-parse --short HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE) + +execute_process( + COMMAND git log -1 --pretty=%B + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_MSG + OUTPUT_STRIP_TRAILING_WHITESPACE) + +execute_process( + COMMAND git log -1 --pretty=%cD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_DATE + OUTPUT_STRIP_TRAILING_WHITESPACE) + +execute_process( + COMMAND git log -1 --pretty="%cN <%ce>" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_AUTHOR + OUTPUT_STRIP_TRAILING_WHITESPACE) + +if(NOT is_committed) + set(GIT_COMMIT_HASH "${GIT_COMMIT_HASH}-dev") + set(BUILD_MODE "dev") + set(GIT_COMMIT_DATE "Not committed yet") +endif() + +set(CMAKE_C_STANDARD 23) + +file(GLOB PROJECT_SOURCES src/*.c) +file(GLOB PROJECT_HEADERS src/*.h) + +if("${BUILD_MODE}" STREQUAL "dev") + set(BUILD_NAME "${PROJECT_NAME}-${BUILD_MODE}") +elseif(NOT "$ENV{${PROJECT_IDENTIFIER}_RELEASE}" STREQUAL "" AND NOT "${BUILD_MODE}" STREQUAL + "dev") + set(BUILD_MODE "$ENV{${PROJECT_IDENTIFIER}_RELEASE}") + set(BUILD_NAME "${PROJECT_NAME}-${BUILD_MODE}") +else() + set(BUILD_NAME "${PROJECT_NAME}") +endif() + +add_compile_options(-Wall -Wextra -Werror) +add_executable(${BUILD_NAME} ${PROJECT_SOURCES} ${PROJECT_HEADERS}) + +target_compile_definitions(${BUILD_NAME} PRIVATE + "-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"") + +string(REPLACE "\n" "\\n" GIT_COMMIT_MSG "${GIT_COMMIT_MSG}") +string(REPLACE "\"" "" GIT_COMMIT_AUTHOR "${GIT_COMMIT_AUTHOR}") + +target_compile_definitions(${BUILD_NAME} PRIVATE + "-DGIT_COMMIT_MSG=\"${GIT_COMMIT_MSG}\"") + +target_compile_definitions(${BUILD_NAME} PRIVATE "-DGIT_COMMIT_DATE=\"${GIT_COMMIT_DATE}\"") + +target_compile_definitions(${BUILD_NAME} PRIVATE "-DGIT_COMMIT_AUTHOR=\"${GIT_COMMIT_AUTHOR}\"") + +install(TARGETS ${BUILD_NAME} RUNTIME DESTINATION bin) diff --git a/cmakegen b/cmakegen index 8cb8913..738dc02 100755 --- a/cmakegen +++ b/cmakegen @@ -1,14 +1,18 @@ #!/usr/bin/env python3 from os import getcwd from os.path import dirname +from sys import argv CMAKE_TEMPLATE = dirname(__file__) + "/CMakeLists.txt.tmpl" +CMAKE_C_TEMPLATE = dirname(__file__) + "/CMakeLists.txt.ctmpl" CMAKE_FILE = getcwd() + "/CMakeLists.txt" def main() -> int: cmake_contents: str project_name : str = getcwd().split("/")[-1] - with open(CMAKE_TEMPLATE, "r") as f: + is_c: bool = True if argv[1] in ("-c",) else False + template = CMAKE_C_TEMPLATE if is_c else CMAKE_TEMPLATE + with open(template, "r") as f: cmake_contents = f.read() cmake_contents = cmake_contents.replace("PROJECT_TEMPLATE_NAME", project_name) with open(CMAKE_FILE, "w") as f: -- 2.45.2