if (SYSTEM_FLITE)
    set(Flite_FIND_REQUIRED TRUE)
    find_package(Flite)

    message(STATUS "Using Flite includes at: ${FLITE_INCLUDE_DIR}")
    message(STATUS "Using Flite libraries: ${FLITE_LIBRARIES}")
else()
    set(FLITE_SOURCES
        flite/src/hrg/cst_ffeature.c
        flite/src/hrg/cst_item.c
        flite/src/hrg/cst_relation.c
        flite/src/hrg/cst_utterance.c

        flite/src/lexicon/cst_lexicon.c
        flite/src/lexicon/cst_lts.c

        flite/src/regex/cst_regex.c
        flite/src/regex/regexp.c

        flite/src/stats/cst_cart.c

        flite/src/synth/cst_ffeatures.c
        flite/src/synth/cst_phoneset.c
        flite/src/synth/cst_synth.c
        flite/src/synth/cst_utt_utils.c
        flite/src/synth/cst_voice.c
        flite/src/synth/flite.c

        flite/src/utils/cst_alloc.c
        flite/src/utils/cst_error.c
        flite/src/utils/cst_features.c
        flite/src/utils/cst_string.c
        flite/src/utils/cst_tokenstream.c
        flite/src/utils/cst_val.c
        flite/src/utils/cst_val_const.c
        flite/src/utils/cst_val_user.c
    )

    set(FLITE_LANG_SOURCES
        flite/lang/cmu_us_kal/cmu_us_kal.c

        flite/lang/cmulex/cmu_lex.c
        flite/lang/cmulex/cmu_lex_data.c
        flite/lang/cmulex/cmu_lex_entries.c
        flite/lang/cmulex/cmu_lts_model.c
        flite/lang/cmulex/cmu_lts_rules.c
        flite/lang/cmulex/cmu_postlex.c

        flite/lang/usenglish/us_aswd.c
        flite/lang/usenglish/us_expand.c
        flite/lang/usenglish/us_ffeatures.c
        flite/lang/usenglish/us_gpos.c
        flite/lang/usenglish/us_int_accent_cart.c
        flite/lang/usenglish/us_int_tone_cart.c
        flite/lang/usenglish/us_nums_cart.c
        flite/lang/usenglish/us_phoneset.c
        flite/lang/usenglish/us_phrasing_cart.c
        flite/lang/usenglish/us_pos_cart.c
        flite/lang/usenglish/us_text.c
        flite/lang/usenglish/usenglish.c
    )

endif()

add_library(flightgear_flite_hts STATIC 
    ${FLITE_SOURCES}
    ${FLITE_LANG_SOURCES}
    lib/flite_hts_engine.c
)

target_include_directories(flightgear_flite_hts PUBLIC ${PROJECT_SOURCE_DIR}/3rdparty/flite_hts_engine/include)
target_compile_definitions(flightgear_flite_hts PRIVATE -DNO_UNION_INITIALIZATION -DFLITE_PLUS_HTS_ENGINE)

if (X86_64)
    target_compile_definitions(flightgear_flite_hts PRIVATE -DSIZEOF_VOID_P=8)
endif()

# link against HTSEngine: either our own one, or the system one
target_link_libraries(flightgear_flite_hts PUBLIC Flightgear::HTSEngine)

if (SYSTEM_FLITE)
    target_link_libraries(flightgear_flite_hts PUBLIC Flightgear::Flite)
else()
    target_include_directories(flightgear_flite_hts PRIVATE ${PROJECT_SOURCE_DIR}/3rdparty/flite_hts_engine/flite/include)
    target_include_directories(flightgear_flite_hts PRIVATE ${PROJECT_SOURCE_DIR}/3rdparty/flite_hts_engine/flite/lang/cmulex)
    target_include_directories(flightgear_flite_hts PRIVATE ${PROJECT_SOURCE_DIR}/3rdparty/flite_hts_engine/flite/lang/usenglish)
endif()