PROJECT(lexgen)

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})

GET_TARGET_PROPERTY(MKSKEL_EXE mkskel LOCATION)

ADD_CUSTOM_COMMAND(
	OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lexer_cpp.inc
	COMMAND ${MKSKEL_EXE} ${CMAKE_CURRENT_SOURCE_DIR}/lexer_cpp.skel ${CMAKE_CURRENT_BINARY_DIR}/lexer_cpp.inc
	DEPENDS mkskel
	MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/lexer_cpp.skel
)

ADD_CUSTOM_COMMAND(
	OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lexer_h.inc
	COMMAND ${MKSKEL_EXE} ${CMAKE_CURRENT_SOURCE_DIR}/lexer_h.skel ${CMAKE_CURRENT_BINARY_DIR}/lexer_h.inc
	DEPENDS mkskel
	MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/lexer_h.skel
)

ADD_CUSTOM_COMMAND(
	OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/action.inc
	COMMAND ${MKSKEL_EXE} ${CMAKE_CURRENT_SOURCE_DIR}/action.skel ${CMAKE_CURRENT_BINARY_DIR}/action.inc
	DEPENDS mkskel
	MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/action.skel
)	

ADD_LIBRARY(
	lexgen STATIC
	lexgen.cpp lexgen.h
	NfaEpsilon.cpp NfaEpsilon.h
	NfaChar.cpp NfaChar.h
	NfaCharClass.cpp NfaCharClass.h
	NfaClosure.cpp NfaClosure.h
	NfaConcatenation.cpp NfaConcatenation.h
	NfaInsensitiveString.cpp NfaInsensitiveString.h
	NfaNegatedCharClass.cpp NfaNegatedCharClass.h
	NfaOption.cpp NfaOption.h
	NfaPositiveClosure.cpp NfaPositiveClosure.h
	NfaString.cpp NfaString.h
	NfaUnion.cpp NfaUnion.h
	NfaState.cpp NfaState.h
	Nfa.h
	${CMAKE_CURRENT_BINARY_DIR}/lexer_cpp.inc
	${CMAKE_CURRENT_BINARY_DIR}/lexer_h.inc
	${CMAKE_CURRENT_BINARY_DIR}/action.inc
)

SET_SOURCE_FILES_PROPERTIES(
	${CMAKE_CURRENT_BINARY_DIR}/lexer_cpp.inc
	${CMAKE_CURRENT_BINARY_DIR}/lexer_h.inc
	${CMAKE_CURRENT_BINARY_DIR}/action.inc
	PROPERTIES
	GENERATED TRUE
	HEADER_FILE_ONLY TRUE
)