]> Git repositories of Lucie Scarlet - cmakegen.git/commitdiff
Added support for C
authorLucie Scarlet <lucie@scarlet.moe>
Fri, 12 Jul 2024 10:21:27 +0000 (12:21 +0200)
committerLucie Scarlet <lucie@scarlet.moe>
Fri, 12 Jul 2024 10:21:27 +0000 (12:21 +0200)
Added flag `-c' for C generation

CMakeLists.txt.ctmpl [new file with mode: 0644]
cmakegen

diff --git a/CMakeLists.txt.ctmpl b/CMakeLists.txt.ctmpl
new file mode 100644 (file)
index 0000000..b2face5
--- /dev/null
@@ -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)
index 8cb8913c91d1a44d36ae7bde8da4317510c6aed6..738dc02e5b5735f5fb2c3f888012696f5fcc42e2 100755 (executable)
--- 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: