Files
espeak-ng/cmake/data.cmake
T
2023-11-27 18:50:33 +08:00

174 lines
4.7 KiB
CMake

list(APPEND _dict_compile_list
af am an ar as az
ba be bg bn bpy bs
ca chr cmn cs cv cy
da de
el en eo es et eu
fa fi fr
ga gd gn grc gu
hak haw he hi hr ht hu hy
ia id io is it
ja jbo
ka kk kl kn kok ko ku ky
la lb lfn lt lv
mi mk ml mr ms mto mt my
nci ne nl nog no
om or
pap pa piqd pl pt py
qdb quc qu qya
ro ru
sd shn si sjn sk sl smj sq sr sv sw
ta te th tk tn tr tt
ug uk ur uz
vi
yue
)
list(APPEND _mbrola_lang_list
af1 ar1 ar2
ca cmn cr1 cs
de2 de4 de6 de8
ee1 en1 es es3 es4
fr
gr1 gr2 grc-de6
he hn1 hu1
ic1 id1 in ir1 it1 it3
jp
la1 lt
ma1 mx1 mx2
nl nz1
pl1 pt1 ptbr ptbr4
ro1
sv sv2
tl1 tr1
us us3
vz
)
set(DATA_DIST_ROOT ${CMAKE_CURRENT_BINARY_DIR})
set(DATA_DIST_DIR ${DATA_DIST_ROOT}/espeak-ng-data)
set(PHONEME_TMP_DIR ${DATA_DIST_ROOT}/phsource)
set(DICT_TMP_DIR ${DATA_DIST_ROOT}/dictsource)
set(DATA_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/espeak-ng-data)
set(PHONEME_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/phsource)
set(DICT_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/dictsource)
file(MAKE_DIRECTORY "${DATA_DIST_DIR}")
file(MAKE_DIRECTORY "${DICT_TMP_DIR}")
file(COPY "${DATA_SRC_DIR}/lang" DESTINATION "${DATA_DIST_DIR}")
file(COPY "${DATA_SRC_DIR}/voices/!v" DESTINATION "${DATA_DIST_DIR}/voices")
file(COPY "${PHONEME_SRC_DIR}" DESTINATION "${DATA_DIST_ROOT}")
set(ESPEAK_RUN_ENV ${CMAKE_COMMAND} -E env "ESPEAK_DATA_PATH=${DATA_DIST_ROOT}")
set(ESPEAK_RUN_CMD ${ESPEAK_RUN_ENV} $ENV{VALGRIND} "$<TARGET_FILE:espeak-ng-bin>")
set(espeak_ng_dll_path "$<TARGET_FILE_DIR:espeak-ng>")
add_custom_command(
OUTPUT "${DATA_DIST_DIR}/intonations"
COMMAND set "PATH=${espeak_ng_dll_path};%PATH%"
COMMAND ${ESPEAK_RUN_CMD} --compile-intonations
WORKING_DIRECTORY "${PHONEME_SRC_DIR}"
COMMENT "Compile intonations"
DEPENDS
"$<TARGET_FILE:espeak-ng-bin>"
"${PHONEME_SRC_DIR}/intonation"
)
set(_phon_deps "")
function(check_phon_deps _file)
set(_file "${PHONEME_SRC_DIR}/${_file}")
list(APPEND _phon_deps "${_file}")
file(STRINGS "${_file}" _phon_incs REGEX "include .+")
list(TRANSFORM _phon_incs REPLACE "^[ \t]*include[ \t]+" "")
foreach(_inc ${_phon_incs})
check_phon_deps(${_inc})
endforeach(_inc)
set(_phon_deps ${_phon_deps} PARENT_SCOPE)
endfunction(check_phon_deps)
check_phon_deps("phonemes")
add_custom_command(
OUTPUT
"${DATA_DIST_DIR}/phondata"
"${DATA_DIST_DIR}/phondata-manifest"
"${DATA_DIST_DIR}/phonindex"
"${DATA_DIST_DIR}/phontab"
COMMAND set "PATH=${espeak_ng_dll_path};%PATH%"
COMMAND ${ESPEAK_RUN_CMD} --compile-phonemes
WORKING_DIRECTORY "${PHONEME_SRC_DIR}"
COMMENT "Compile phonemes"
DEPENDS
"$<TARGET_FILE:espeak-ng-bin>"
${_phon_deps}
)
list(APPEND _dict_targets)
list(APPEND _mbr_targets)
foreach(_dict_name ${_dict_compile_list})
set(_dict_target "${DATA_DIST_DIR}/${_dict_name}_dict")
set(_dict_deps "")
list(APPEND _dict_targets ${_dict_target})
list(APPEND _dict_deps
"${DICT_SRC_DIR}/${_dict_name}_rules"
"${DICT_SRC_DIR}/${_dict_name}_list"
)
if(EXISTS "${DICT_SRC_DIR}/extra/${_dict_name}_listx")
option(EXTRA_${_dict_name} "Compile extra ${_dict_name} dictionary" ON)
if(EXTRA_${_dict_name})
list(APPEND _dict_deps "${DICT_SRC_DIR}/extra/${_dict_name}_listx")
else()
file(REMOVE "${DICT_TMP_DIR}/${_dict_name}_listx")
endif()
elseif(EXISTS "${DICT_SRC_DIR}/${_dict_name}_listx")
list(APPEND _dict_deps "${DICT_SRC_DIR}/${_dict_name}_listx")
endif()
if(EXISTS "${DICT_SRC_DIR}/${_dict_name}_emoji")
list(APPEND _dict_deps "${DICT_SRC_DIR}/${_dict_name}_emoji")
endif()
add_custom_command(
OUTPUT "${_dict_target}"
COMMAND set "PATH=${espeak_ng_dll_path};%PATH%"
COMMAND ${CMAKE_COMMAND} -E copy ${_dict_deps} "${DICT_TMP_DIR}/"
COMMAND ${ESPEAK_RUN_CMD} --compile=${_dict_name}
WORKING_DIRECTORY "${DICT_TMP_DIR}"
DEPENDS
"$<TARGET_FILE:espeak-ng-bin>"
"${DATA_DIST_DIR}/phondata"
"${DATA_DIST_DIR}/intonations"
${_dict_deps}
)
endforeach()
if (HAVE_MBROLA AND USE_MBROLA)
file(COPY "${DATA_SRC_DIR}/voices/mb" DESTINATION "${DATA_DIST_DIR}/voices")
file(MAKE_DIRECTORY "${DATA_DIST_DIR}/mbrola_ph")
foreach(_mbl ${_mbrola_lang_list})
set(_mbl_src "${PHONEME_SRC_DIR}/mbrola/${_mbl}")
set(_mbl_out "${DATA_DIST_DIR}/mbrola_ph/${_mbl}_phtrans")
list(APPEND _mbr_targets ${_mbl_out})
add_custom_command(
OUTPUT "${_mbl_out}"
COMMAND ${ESPEAK_RUN_CMD} --compile-mbrola="${_mbl_src}"
DEPENDS "$<TARGET_FILE:espeak-ng-bin>" "${_mbl_src}"
)
endforeach(_mbl)
endif()
add_custom_target(
data ALL
DEPENDS
"${DATA_DIST_DIR}/intonations"
"${DATA_DIST_DIR}/phondata"
${_dict_targets}
${_mbr_targets}
)
install(DIRECTORY ${DATA_DIST_DIR} DESTINATION share)