PROJECT(lexgen)

INCLUDE_DIRECTORIES(${lexgen_BINARY_DIR})

GET_TARGET_PROPERTY(MKSKEL_EXE mkskel LOCATION)

ADD_CUSTOM_COMMAND(
	OUTPUT "${lexgen_BINARY_DIR}/lexer_cpp.inc"
	COMMAND "${MKSKEL_EXE}" "${lexgen_SOURCE_DIR}/lexer_cpp.skel"
	        "${lexgen_BINARY_DIR}/lexer_cpp.inc"
	DEPENDS mkskel
	MAIN_DEPENDENCY "${lexgen_SOURCE_DIR}/lexer_cpp.skel"
)

ADD_CUSTOM_COMMAND(
	OUTPUT "${lexgen_BINARY_DIR}/lexer_h.inc"
	COMMAND "${MKSKEL_EXE}" "${lexgen_SOURCE_DIR}/lexer_h.skel"
	        "${lexgen_BINARY_DIR}/lexer_h.inc"
	DEPENDS mkskel
	MAIN_DEPENDENCY "${lexgen_SOURCE_DIR}/lexer_h.skel"
)

ADD_CUSTOM_COMMAND(
	OUTPUT "${lexgen_BINARY_DIR}/action.inc"
	COMMAND "${MKSKEL_EXE}" "${lexgen_SOURCE_DIR}/action.skel"
	        "${lexgen_BINARY_DIR}/action.inc"
	DEPENDS mkskel
	MAIN_DEPENDENCY "${lexgen_SOURCE_DIR}/action.skel"
)

SET(
	skeletons
	"${lexgen_SOURCE_DIR}/lexer_cpp.skel"
	"${lexgen_SOURCE_DIR}/lexer_h.skel"
	"${lexgen_SOURCE_DIR}/action.skel"
)

SET(
	built_sources
	"${lexgen_BINARY_DIR}/lexer_cpp.inc"
	"${lexgen_BINARY_DIR}/lexer_h.inc"
	"${lexgen_BINARY_DIR}/action.inc"
)

SET_SOURCE_FILES_PROPERTIES(
	${skeletons} PROPERTIES
	HEADER_FILE_ONLY TRUE
)

SET_SOURCE_FILES_PROPERTIES(
	${built_sources} PROPERTIES
	GENERATED TRUE
	HEADER_FILE_ONLY TRUE
)

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
	${built_sources}
)
