function(add_ngram_database target ngram_database_file ngram_input_file)
    find_program(TEXT2NGRAM text2ngram REQUIRED)

    add_custom_command(OUTPUT ${ngram_database_file}
        COMMAND ${TEXT2NGRAM} -n 1 -l -f sqlite -o ${ngram_database_file} ${CMAKE_CURRENT_SOURCE_DIR}/${ngram_input_file}
        COMMAND ${TEXT2NGRAM} -n 2 -l -f sqlite -o ${ngram_database_file} ${CMAKE_CURRENT_SOURCE_DIR}/${ngram_input_file}
        COMMAND ${TEXT2NGRAM} -n 3 -l -f sqlite -o ${ngram_database_file} ${CMAKE_CURRENT_SOURCE_DIR}/${ngram_input_file}
        DEPENDS ${ngram_input_file}
        VERBATIM
    )

    add_custom_target(${target} ALL DEPENDS ${ngram_database_file})
endfunction()

add_subdirectory(westernsupport)
add_subdirectory(ar)
add_subdirectory(az)
add_subdirectory(be)
add_subdirectory(bg)
add_subdirectory(bn)
add_subdirectory(bn-probhat)
add_subdirectory(bn-avro)
add_subdirectory(bs)
add_subdirectory(ca)
add_subdirectory(cs)
add_subdirectory(da)
add_subdirectory(de)
add_subdirectory(emoji)
add_subdirectory(el)
add_subdirectory(en)
add_subdirectory(en@dv)
add_subdirectory(en-colemak)
add_subdirectory(eo)
add_subdirectory(es)
add_subdirectory(fa)
add_subdirectory(fi)
add_subdirectory(fr)
add_subdirectory(fr-ch)
add_subdirectory(gd)
add_subdirectory(he)
add_subdirectory(hr)
add_subdirectory(hu)
add_subdirectory(is)
add_subdirectory(it)
add_subdirectory(ja)
add_subdirectory(ka)
add_subdirectory(lt)
add_subdirectory(lv)
add_subdirectory(mk)
add_subdirectory(ko)
add_subdirectory(nb)
add_subdirectory(nl)
add_subdirectory(pl)
add_subdirectory(pt)
add_subdirectory(ro)
add_subdirectory(ru)
add_subdirectory(th)
add_subdirectory(tr)
add_subdirectory(sl)
add_subdirectory(sr)
add_subdirectory(sv)
add_subdirectory(uk)
if(ENABLE_PINYIN)
    add_subdirectory(pinyin)
endif()
if(ENABLE_CHEWING)
    add_subdirectory(chewing)
endif()
