Switched env to python
This commit is contained in:
@@ -1,69 +0,0 @@
|
|||||||
# Copyright (c) 2026 Dominic Masters
|
|
||||||
#
|
|
||||||
# This software is released under the MIT License.
|
|
||||||
# https://opensource.org/licenses/MIT
|
|
||||||
|
|
||||||
if(NOT DEFINED ENV_FILE)
|
|
||||||
message(FATAL_ERROR "ENV_FILE is not set")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT DEFINED OUT_HEADER)
|
|
||||||
message(FATAL_ERROR "OUT_HEADER is not set")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT EXISTS "${ENV_FILE}")
|
|
||||||
message(FATAL_ERROR ".env file not found: ${ENV_FILE}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
file(STRINGS "${ENV_FILE}" ENV_LINES)
|
|
||||||
|
|
||||||
set(HEADER_CONTENT "#pragma once\n#include \"dusk.h\"\n\n")
|
|
||||||
|
|
||||||
foreach(line IN LISTS ENV_LINES)
|
|
||||||
# Skip comments and empty lines (allow whitespace before # or ;)
|
|
||||||
if(line STREQUAL "" OR line MATCHES "^[ \t]*[#;]")
|
|
||||||
continue()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Expect KEY=VALUE (allow spaces around '=')
|
|
||||||
if(NOT line MATCHES "^[A-Za-z_][A-Za-z0-9_]*[ \t]*=[ \t]*")
|
|
||||||
message(WARNING "Skipping invalid line in ${ENV_FILE}: '${line}'")
|
|
||||||
continue()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Extract key
|
|
||||||
string(REGEX MATCH "^[A-Za-z_][A-Za-z0-9_]*" KEY "${line}")
|
|
||||||
string(LENGTH "${KEY}" key_len)
|
|
||||||
|
|
||||||
# Extract value (allow spaces around '=')
|
|
||||||
string(REGEX REPLACE "^[A-Za-z_][A-Za-z0-9_]*[ \t]*=[ \t]*" "" RAW_VALUE "${line}")
|
|
||||||
|
|
||||||
# Lowercase copy for boolean detection
|
|
||||||
string(TOLOWER "${RAW_VALUE}" VALUE_LC)
|
|
||||||
set(VALUE "${RAW_VALUE}")
|
|
||||||
|
|
||||||
# Determine type and format accordingly
|
|
||||||
if(VALUE_LC STREQUAL "true")
|
|
||||||
set(HEADER_CONTENT "${HEADER_CONTENT}#define ${KEY} true\n")
|
|
||||||
|
|
||||||
elseif(VALUE_LC STREQUAL "false")
|
|
||||||
set(HEADER_CONTENT "${HEADER_CONTENT}#define ${KEY} false\n")
|
|
||||||
|
|
||||||
elseif(VALUE MATCHES "^[+-]?[0-9]+$")
|
|
||||||
# Integer
|
|
||||||
set(HEADER_CONTENT "${HEADER_CONTENT}#define ${KEY} ${VALUE}\n")
|
|
||||||
|
|
||||||
elseif(VALUE MATCHES "^[+-]?[0-9]*\\.[0-9]+$")
|
|
||||||
# Float → append "f"
|
|
||||||
set(HEADER_CONTENT "${HEADER_CONTENT}#define ${KEY} ${VALUE}f\n")
|
|
||||||
|
|
||||||
else()
|
|
||||||
# String → escape for C literal
|
|
||||||
string(REPLACE "\\" "\\\\" VALUE_ESC "${VALUE}")
|
|
||||||
string(REPLACE "\"" "\\\"" VALUE_ESC "${VALUE_ESC}")
|
|
||||||
set(HEADER_CONTENT "${HEADER_CONTENT}#define ${KEY} \"${VALUE_ESC}\"\n")
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
file(WRITE "${OUT_HEADER}" "${HEADER_CONTENT}")
|
|
||||||
message(STATUS "Generated header: ${OUT_HEADER}")
|
|
||||||
@@ -16,18 +16,12 @@ function(add_asset ASSET_TYPE ASSET_PATH)
|
|||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(add_defs INPUT_PATH OUTPUT_NAME_RELATIVE)
|
function(add_defs INPUT_PATH OUTPUT_NAME_RELATIVE)
|
||||||
set(INPUT_FULL_PATH "${CMAKE_CURRENT_LIST_DIR}/${INPUT_PATH}")
|
set(DUSK_DEFS_TARGET_NAME "DUSK_DEFS_${OUTPUT_NAME_RELATIVE}")
|
||||||
set(OUTPUT_FULL_PATH "${DUSK_GENERATED_HEADERS_DIR}/${OUTPUT_NAME_RELATIVE}")
|
dusk_run_python(
|
||||||
|
${DUSK_DEFS_TARGET_NAME}
|
||||||
add_custom_command(
|
tools.envtoh
|
||||||
OUTPUT ${OUTPUT_FULL_PATH}
|
--env ${INPUT_PATH}
|
||||||
COMMAND ${CMAKE_COMMAND}
|
--output ${DUSK_BUILT_ASSETS_DIR}/${OUTPUT_NAME_RELATIVE}
|
||||||
-DENV_FILE=${INPUT_FULL_PATH}
|
|
||||||
-DOUT_HEADER=${OUTPUT_FULL_PATH}
|
|
||||||
-P ${CMAKE_SOURCE_DIR}/cmake/modules/envtoh.cmake
|
|
||||||
DEPENDS ${INPUT_FULL_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules/envtoh.cmake
|
|
||||||
COMMENT "Generating ${OUTPUT_NAME_RELATIVE}"
|
|
||||||
)
|
)
|
||||||
add_custom_target(${OUTPUT_NAME_RELATIVE}_header DEPENDS ${OUTPUT_FULL_PATH})
|
add_dependencies(${DUSK_LIBRARY_TARGET_NAME} ${DUSK_DEFS_TARGET_NAME})
|
||||||
add_dependencies(${DUSK_LIBRARY_TARGET_NAME} ${OUTPUT_NAME_RELATIVE}_header)
|
|
||||||
endfunction()
|
endfunction()
|
||||||
46
tools/envtoh/__main__.py
Normal file
46
tools/envtoh/__main__.py
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
from dotenv import load_dotenv, dotenv_values
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description="Convert .env to .h defines")
|
||||||
|
parser.add_argument("--env", required=True, help="Path to .env file")
|
||||||
|
parser.add_argument("--output", required=True, help="Path to output .h file")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# Load .env file
|
||||||
|
load_dotenv(dotenv_path=args.env)
|
||||||
|
fileDefs = dotenv_values(dotenv_path=args.env)
|
||||||
|
|
||||||
|
|
||||||
|
outHeader = ""
|
||||||
|
outHeader += "#include \"dusk.h\"\n\n"
|
||||||
|
for key, value in fileDefs.items():
|
||||||
|
# Determine type and print out appropriate C type define.
|
||||||
|
|
||||||
|
# Float
|
||||||
|
try:
|
||||||
|
asFloat = float(value)
|
||||||
|
outHeader += f"#define {key} {asFloat}f\n"
|
||||||
|
continue
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Integer
|
||||||
|
try:
|
||||||
|
asInt = int(value)
|
||||||
|
outHeader += f"#define {key} {asInt}\n"
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Boolean
|
||||||
|
if value.lower() in ['true', 'false']:
|
||||||
|
asBool = '1' if value.lower() == 'true' else '0'
|
||||||
|
outHeader += f"#define {key} {asBool}\n"
|
||||||
|
continue
|
||||||
|
|
||||||
|
# String
|
||||||
|
outHeader += f'#define {key} "{value}"\n'
|
||||||
|
|
||||||
|
# Write to output file
|
||||||
|
with open(args.output, 'w') as outFile:
|
||||||
|
outFile.write(outHeader)
|
||||||
Reference in New Issue
Block a user