blob: 198c23bbd90167c31897c932706c4f471402338b [file] [log] [blame]
# locate cogapp and generate source code from template
#
# find_package(Cogapp REQUIRED)
#
# COGAPP_GENERATE (public function)
# GENERATED_CODE = Variable to define with generated source files.
# TEMPLATE = Template used to generate source files.
#
# NOTE: The COGAPP_GENERATE macro & add_executable() or add_library()
# calls only work properly within the same directory.
#
find_package(PythonInterp REQUIRED)
function(COGAPP_GENERATE GENERATED_CODE)
if(NOT ARGN)
message(SEND_ERROR "Error: COGAPP_GENERATE() called without any template files")
return()
endif()
set(${GENERATED_CODE})
foreach(FIL ${ARGN})
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
file(RELATIVE_PATH FIL_REL ${CMAKE_SOURCE_DIR} ${ABS_FIL})
get_filename_component(FIL_DIR ${CMAKE_BINARY_DIR}/codegen/${FIL_REL} DIRECTORY)
file(MAKE_DIRECTORY ${FIL_DIR})
get_filename_component(FIL_WE "${CMAKE_BINARY_DIR}/codegen/${FIL_REL}" NAME_WE)
get_filename_component(FIL_EXT "${CMAKE_BINARY_DIR}/codegen/${FIL_REL}" EXT)
set(FIL_OUT "${FIL_DIR}/${FIL_WE}.cg${FIL_EXT}")
list(APPEND ${GENERATED_CODE} ${FIL_OUT})
if(NOT EXISTS ${ABS_FIL})
MESSAGE(FATAL_ERROR "file ${ABS_FIL} does not exist")
endif()
add_custom_command(
OUTPUT ${FIL_OUT}
COMMAND ${PYTHON_EXECUTABLE}
ARGS -m cogapp -d -o ${FIL_OUT} ${ABS_FIL}
DEPENDS ${ABS_FIL}
COMMENT "Running cog on ${FIL}"
VERBATIM )
endforeach()
set_source_files_properties(${${GENERATED_CODE}} PROPERTIES GENERATED TRUE)
set(${GENERATED_CODE} ${${GENERATED_CODE}} PARENT_SCOPE)
endfunction()