cmake_minimum_required(VERSION 3.20)
project(flex VERSION 2.6.4 LANGUAGES C)

set(S "${CMAKE_CURRENT_SOURCE_DIR}/src")

# ── flex executable ──────────────────────────────────────────
add_executable(flex
    ${S}/buf.c
    ${S}/ccl.c
    ${S}/dfa.c
    ${S}/ecs.c
    ${S}/filter.c
    ${S}/gen.c
    ${S}/main.c
    ${S}/misc.c
    ${S}/nfa.c
    ${S}/options.c
    ${S}/parse.c          # pre-generated from parse.y
    ${S}/regex.c
    ${S}/scan.c           # pre-generated from scan.l
    ${S}/scanflags.c
    ${S}/scanopt.c
    ${S}/skel.c
    ${S}/sym.c
    ${S}/tables.c
    ${S}/tables_shared.c
    ${S}/tblcmp.c
    ${S}/yylex.c
)
target_include_directories(flex PRIVATE ${S} ${CMAKE_CURRENT_BINARY_DIR})
target_compile_definitions(flex PRIVATE HAVE_CONFIG_H)
target_link_libraries(flex PRIVATE m)

# ── libfl (scanner runtime library) ─────────────────────────
add_library(fl STATIC ${S}/libmain.c ${S}/libyywrap.c)
target_include_directories(fl PRIVATE ${S})

# ── install ──────────────────────────────────────────────────
install(TARGETS flex RUNTIME DESTINATION bin)
install(TARGETS fl ARCHIVE DESTINATION lib)
install(FILES ${S}/FlexLexer.h DESTINATION include)
