# Copyright 2017 the Monicelli project authors. All rights reserved.
# Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
find_program(RAGEL ragel)
if (${RAGEL} STREQUAL "RAGEL-NOTFOUND")
message(FATAL_ERROR "Please install ragel to compile Monicelli.")
else()
message(STATUS "Found ragel: ${RAGEL}")
endif()
function(add_ragel_library name source header)
set(generated_cpp "${source}.cpp")
add_custom_command(
OUTPUT "${generated_cpp}"
MAIN_DEPENDENCY "${source}"
DEPENDS "${header}"
COMMAND ${RAGEL} -G2 "${CMAKE_CURRENT_SOURCE_DIR}/${source}" -o "${generated_cpp}"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
VERBATIM
)
add_library(${name} "${generated_cpp}")
set_target_properties(${name}
PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED true
# The lexer uses implicit fallthroughs all over, but it's OK.
target_compile_options(${name} PRIVATE -Wno-implicit-fallthrough)
target_include_directories(${name} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
endfunction()