From: Lucie Scarlet Date: Thu, 4 Jul 2024 18:50:20 +0000 (+0200) Subject: Initial commit X-Git-Url: https://git.chaotic.ninja/gitweb/lucie/?a=commitdiff_plain;h=5c91792fc8f7445e53e08f9376d71be048afee78;p=cmakegen.git Initial commit --- 5c91792fc8f7445e53e08f9376d71be048afee78 diff --git a/CMakeLists.txt.tmpl b/CMakeLists.txt.tmpl new file mode 100644 index 0000000..6d4fc5b --- /dev/null +++ b/CMakeLists.txt.tmpl @@ -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 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())