diff options
Diffstat (limited to 'cmake/Modules/GlibMkenums.cmake')
| -rw-r--r-- | cmake/Modules/GlibMkenums.cmake | 93 |
1 files changed, 57 insertions, 36 deletions
diff --git a/cmake/Modules/GlibMkenums.cmake b/cmake/Modules/GlibMkenums.cmake index 58ae4ee..c3d75e6 100644 --- a/cmake/Modules/GlibMkenums.cmake +++ b/cmake/Modules/GlibMkenums.cmake @@ -21,58 +21,79 @@ function(target_add_glib_enums TARGET) ) if(NOT TARGET "${TARGET}") - message(FATAL_ERROR "Target '${TARGET}' does not exist") + message(FATAL_ERROR "GlibMkenums: Target '${TARGET}' does not exist") endif() if(NOT _HEADERS) - message(FATAL_ERROR "Missing enum headers") + message(FATAL_ERROR "GlibMkenums: No headers to be parsed were specified") endif() - if(NOT _HEADER_TEMPLATE OR NOT _SOURCE_TEMPLATE) - message(FATAL_ERROR "Missing templates") + if(NOT _HEADER_TEMPLATE) + message(STATUS "GlibMkenums: no header template was provided, skipping header generation") + set(_SKIP_HEADER YES) endif() - if(NOT _OUTPUT_NAME) - message(FATAL_ERROR "Missing output name") + if(NOT _SOURCE_TEMPLATE) + message(STATUS "GlibMkenums: no source template was provided, skipping header generation") + set(_SKIP_SOURCE YES) + endif() + + if(NOT _OUTPUT_NAME) + message(FATAL_ERROR "GlibMkenums: No output name was specified") + endif() + + if(_SKIP_HEADER AND _SKIP_SOURCE) + message(AUTHOR_WARNING "GlibMkenums: No templates were specified, skipping all generation") + return() endif() set(SOURCE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/src/${_OUTPUT_NAME}.c") set(HEADER_FILE "${CMAKE_CURRENT_SOURCE_DIR}/src/${_OUTPUT_NAME}.h") - add_custom_command(OUTPUT - ${SOURCE_FILE} - ${HEADER_FILE} - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - COMMAND "${GLIB_MKENUMS_BIN}" - ARGS - "--template=${_SOURCE_TEMPLATE}" - "--output=${SOURCE_FILE}" - ${_HEADERS} - COMMAND "${GLIB_MKENUMS_BIN}" - ARGS - "--template=${_HEADER_TEMPLATE}" - "--output=${HEADER_FILE}" - ${_HEADERS} - VERBATIM - COMMENT "Generating enum sources" - DEPENDS - ${_HEADERS} - ${_SOURCE_TEMPLATE} - ${_HEADER_TEMPLATE} - ) + if(NOT _SKIP_HEADER) + add_custom_command(OUTPUT + ${HEADER_FILE} + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMAND "${GLIB_MKENUMS_BIN}" + ARGS + "--template=${_HEADER_TEMPLATE}" + "--output=${HEADER_FILE}" + ${_HEADERS} + VERBATIM + COMMENT "Generating enum interface header" + DEPENDS + ${_HEADERS} + ${_HEADER_TEMPLATE} + ) + endif() + + if(NOT _SKIP_SOURCE) + add_custom_command(OUTPUT + ${SOURCE_FILE} + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMAND "${GLIB_MKENUMS_BIN}" + ARGS + "--template=${_SOURCE_TEMPLATE}" + "--output=${SOURCE_FILE}" + ${_HEADERS} + VERBATIM + COMMENT "Generating enum interface source" + DEPENDS + ${_HEADERS} + ${_SOURCE_TEMPLATE} + ) + endif() target_sources("${TARGET}" PRIVATE "${SOURCE_FILE}" ) - target_sources("${TARGET}" PUBLIC - FILE_SET HEADERS - FILES - "${HEADER_FILE}" - ) - - target_include_directories("${TARGET}" PUBLIC - "${CMAKE_CURRENT_BINARY_DIR}" - ) + if(NOT _SKIP_HEADER) + target_sources("${TARGET}" PUBLIC + FILE_SET HEADERS + FILES + "${HEADER_FILE}" + ) + endif() endfunction() |
