]> Git repositories of Lucie Scarlet - cmakegen.git/commitdiff
Initial commit
authorLucie Scarlet <lucie@scarlet.moe>
Thu, 4 Jul 2024 18:50:20 +0000 (20:50 +0200)
committerLucie Scarlet <lucie@scarlet.moe>
Thu, 4 Jul 2024 18:50:20 +0000 (20:50 +0200)
CMakeLists.txt.tmpl [new file with mode: 0644]
cmakegen [new file with mode: 0755]

diff --git a/CMakeLists.txt.tmpl b/CMakeLists.txt.tmpl
new file mode 100644 (file)
index 0000000..6d4fc5b
--- /dev/null
@@ -0,0 +1,77 @@
+cmake_minimum_required(VERSION 3.25)
+
+project(PROJECT_TEMPLATE_NAME)
+
+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_CXX_STANDARD 20)
+
+file(GLOB PROJECT_SOURCES src/*.cc)
+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
new file mode 100755 (executable)
index 0000000..8cb8913
--- /dev/null
+++ b/cmakegen
@@ -0,0 +1,22 @@
+#!/usr/bin/env python3
+from os import getcwd
+from os.path import dirname
+
+CMAKE_TEMPLATE = dirname(__file__) + "/CMakeLists.txt.tmpl"
+CMAKE_FILE = getcwd() + "/CMakeLists.txt"
+
+def main() -> int:
+    cmake_contents: str
+    project_name : str = getcwd().split("/")[-1]
+    with open(CMAKE_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:
+        f.write(cmake_contents)
+    print("-" * len(CMAKE_FILE))
+    print(CMAKE_FILE)
+    print("-" * len(CMAKE_FILE))
+    return 0
+
+if __name__ == "__main__":
+    raise SystemExit(main())