]> git.mxchange.org Git - flightgear.git/commitdiff
Allow using the system version of flite and the HTS engine
authorTorsten Dreyer <torsten@t3r.de>
Mon, 28 Apr 2014 19:33:48 +0000 (21:33 +0200)
committerTorsten Dreyer <torsten@t3r.de>
Mon, 28 Apr 2014 19:33:48 +0000 (21:33 +0200)
By default, if the system version exists and can be used,
then it will be used. Otherwise, the local version will be used

Original patch by  Saikrishna Arcot via
https://gitorious.org/fg/flightgear/merge_requests/1582
slightly modified

3rdparty/CMakeLists.txt
3rdparty/flite_hts_engine/CMakeLists.txt
CMakeLists.txt
CMakeModules/FindFlite.cmake [new file with mode: 0644]
CMakeModules/FindHtsEngine.cmake [new file with mode: 0644]
src/Main/CMakeLists.txt

index 42c2ec590d6cc4acd1155e9adeea22d80761781d..ec9822c1c5168b1475b92338452657c7577c13f9 100644 (file)
@@ -11,6 +11,17 @@ add_subdirectory(mongoose)
 add_subdirectory(cjson)
 
 if (ENABLE_FLITE)
-    add_subdirectory(hts_engine_API)
     add_subdirectory(flite_hts_engine)
+
+    if (SYSTEM_HTS_ENGINE)
+        set(HTS_Engine_FIND_REQUIRED TRUE)
+        find_package(HtsEngine)
+
+        include_directories(${HTS_ENGINE_INCLUDE_DIR})
+        message(STATUS "Using HTS engine includes at: ${HTS_ENGINE_INCLUDE_DIR}")
+        message(STATUS "Using HTS engine libraries: ${HTS_ENGINE_LIBRARIES}")
+    else()
+        add_subdirectory(hts_engine_API)
+        include_directories(${PROJECT_SOURCE_DIR}/3rdparty/hts_engine_API/include )
+    endif()
 endif()
index 99605a24f71f1f5fc24d80cac0d27e2cb2655e9e..28f6f628cc8d71654b316a8eec132a31bac91987 100644 (file)
@@ -1,64 +1,83 @@
+if (SYSTEM_FLITE)
+    set(Flite_FIND_REQUIRED TRUE)
+    find_package(Flite)
 
-include_directories(${PROJECT_SOURCE_DIR}/3rdparty/hts_engine_API/include)
-include_directories(${PROJECT_SOURCE_DIR}/3rdparty/flite_hts_engine/include)
-include_directories(${PROJECT_SOURCE_DIR}/3rdparty/flite_hts_engine/flite/include)
-include_directories(${PROJECT_SOURCE_DIR}/3rdparty/flite_hts_engine/flite/lang/cmulex)
-include_directories(${PROJECT_SOURCE_DIR}/3rdparty/flite_hts_engine/flite/lang/usenglish)
-
-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
-)
+    include_directories(${FLITE_INCLUDE_DIR})
+    message(STATUS "Using Flite includes at: ${FLITE_INCLUDE_DIR}")
+    message(STATUS "Using Flite libraries: ${FLITE_LIBRARIES}")
+else()
+    include_directories(${PROJECT_SOURCE_DIR}/3rdparty/flite_hts_engine/flite/include)
+    include_directories(${PROJECT_SOURCE_DIR}/3rdparty/flite_hts_engine/flite/lang/cmulex)
+    include_directories(${PROJECT_SOURCE_DIR}/3rdparty/flite_hts_engine/flite/lang/usenglish)
 
-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
-)
+    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()
+
+if (SYSTEM_HTS_ENGINE)
+    set(HTS_Engine_FIND_REQUIRED TRUE)
+    find_package(HtsEngine)
+
+    include_directories(${HTS_ENGINE_INCLUDE_DIR})
+    message(STATUS "Using HTS engine includes for Flite/HTS Engine at: ${HTS_ENGINE_INCLUDE_DIR}")
+else()
+    include_directories(${PROJECT_SOURCE_DIR}/3rdparty/hts_engine_API/include)
+endif()
+
+
+include_directories(${PROJECT_SOURCE_DIR}/3rdparty/flite_hts_engine/include)
 
 add_definitions(-DFLITE_PLUS_HTS_ENGINE)
 
@@ -68,3 +87,7 @@ add_library(flite_hts STATIC
     lib/flite_hts_engine.c
 )
 
+if (SYSTEM_FLITE)
+    target_link_libraries(flite_hts ${FLITE_LIBRARIES})
+endif()
+
index 35e12ac1cdcf97c99552b830545d0e55d1bbeff8..311d5682faaea849d8d86691e197653439e5ffc2 100644 (file)
@@ -114,6 +114,16 @@ elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
     if(GSM_FOUND)
         set(SYSTEM_GSM_DEFAULT 1)
     endif(GSM_FOUND)
+
+    find_package(Flite)
+    if(FLITE_FOUND)
+        set(SYSTEM_FLITE_DEFAULT 1)
+    endif()
+
+    find_package(HtsEngine)
+    if(FLITE_FOUND)
+        set(SYSTEM_HTS_ENGINE_DEFAULT 1)
+    endif()
 endif()
 
 find_package(Git)
@@ -143,6 +153,8 @@ option(ENABLE_IAX        "Set to ON to build FlightGear with IAXClient/fgcom bui
 option(USE_DBUS          "Set to ON to build FlightGear with DBus screensaver interaction (default on Linux)" ${USE_DBUS_DEFAULT})
 option(SYSTEM_SPEEX      "Set to ON to build IAXClient with the system's speex and speexdsp library" ${SYSTEM_SPEEX_DEFAULT})
 option(SYSTEM_GSM        "Set to ON to build IAXClient with the system's GSM library" ${SYSTEM_GSM_DEFAULT})
+option(SYSTEM_FLITE      "Set to ON to build Flightgear with the system's Flite library" ${SYSTEM_FLITE_DEFAULT})
+option(SYSTEM_HTS_ENGINE "Set to ON to build Flightgear with the system's HTS Engine library" ${SYSTEM_HTS_ENGINE_DEFAULT})
 
 # additional utilities
 option(ENABLE_FGADMIN    "Set to ON to build the FGADMIN application (default)" ON)
diff --git a/CMakeModules/FindFlite.cmake b/CMakeModules/FindFlite.cmake
new file mode 100644 (file)
index 0000000..7a54708
--- /dev/null
@@ -0,0 +1,119 @@
+# - Try to find Flite
+# Once done this will define
+#
+#  FLITE_FOUND - system has Flite
+#  FLITE_INCLUDE_DIRS - the Flite include directory
+#  FLITE_LIBRARIES - Link these to use Flite
+#  FLITE_DEFINITIONS - Compiler switches required for using Flite
+#
+#  Copyright (c) 2013 Saikrishna Arcot <saiarcot895@gmail.com>
+#
+#  Redistribution and use is allowed according to the terms of the New
+#  BSD license.
+#  For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+#
+
+
+if (FLITE_LIBRARIES AND FLITE_INCLUDE_DIRS)
+  # in cache already
+  set(FLITE_FOUND TRUE)
+else (FLITE_LIBRARIES AND FLITE_INCLUDE_DIRS)
+  #set(FLITE_DEFINITIONS ${_FliteCflags})
+  set(FLITE_DEFINITIONS "")
+
+  find_path(FLITE_INCLUDE_DIR
+    NAMES
+      flite.h
+    PATHS
+      ${_FliteIncDir}
+      /usr/include
+      /usr/include/flite
+      /usr/local/include
+      /usr/local/include/flite
+      /opt/local/include
+      /opt/local/include/flite
+      /sw/include
+      /sw/include/flite
+  )
+
+  find_library(FLITE_LIBRARY
+    NAMES
+      flite
+      Flite
+    PATHS
+      ${_FliteLinkDir}
+      /usr/lib
+      /usr/local/lib
+      /opt/local/lib
+      /sw/lib
+  )
+
+  find_library(FLITE_CMU_US_KAL_LIBRARY
+    NAMES
+      flite_cmu_us_kal
+    PATHS
+      ${_FliteLinkDir}
+      /usr/lib
+      /usr/local/lib
+      /opt/local/lib
+      /sw/lib
+  )
+
+  find_library(FLITE_CMULEX_LIBRARY
+    NAMES
+      flite_cmulex
+    PATHS
+      ${_FliteLinkDir}
+      /usr/lib
+      /usr/local/lib
+      /opt/local/lib
+      /sw/lib
+  )
+
+  find_library(FLITE_USENGLISH_LIBRARY
+    NAMES
+      flite_usenglish
+    PATHS
+      ${_FliteLinkDir}
+      /usr/lib
+      /usr/local/lib
+      /opt/local/lib
+      /sw/lib
+  )
+
+  if (FLITE_LIBRARY AND FLITE_CMU_US_KAL_LIBRARY AND FLITE_CMULEX_LIBRARY AND FLITE_USENGLISH_LIBRARY)
+    set(FLITE_FOUND TRUE)
+  endif (FLITE_LIBRARY AND FLITE_CMU_US_KAL_LIBRARY AND FLITE_CMULEX_LIBRARY AND FLITE_USENGLISH_LIBRARY)
+
+  set(FLITE_INCLUDE_DIRS
+    ${FLITE_INCLUDE_DIR}
+  )
+
+  if (FLITE_FOUND)
+    set(FLITE_LIBRARIES
+      ${FLITE_LIBRARIES}
+      ${FLITE_LIBRARY}
+      ${FLITE_CMU_US_KAL_LIBRARY}
+      ${FLITE_CMULEX_LIBRARY}
+      ${FLITE_USENGLISH_LIBRARY}
+    )
+  endif (FLITE_FOUND)
+
+  if (FLITE_INCLUDE_DIRS AND FLITE_LIBRARIES)
+    set(FLITE_FOUND TRUE)
+  endif (FLITE_INCLUDE_DIRS AND FLITE_LIBRARIES)
+
+  if (FLITE_FOUND)
+    if (NOT Flite_FIND_QUIETLY)
+      message(STATUS "Found Flite and needed components: ${FLITE_LIBRARIES}")
+    endif (NOT Flite_FIND_QUIETLY)
+  else (FLITE_FOUND)
+    if (Flite_FIND_REQUIRED)
+           message(FATAL_ERROR "Could not find Flite or all components of Flite")
+    endif (Flite_FIND_REQUIRED)
+  endif (FLITE_FOUND)
+
+  # show the FLITE_INCLUDE_DIRS and FLITE_LIBRARIES variables only in the advanced view
+  mark_as_advanced(FLITE_INCLUDE_DIRS FLITE_LIBRARIES)
+
+endif (FLITE_LIBRARIES AND FLITE_INCLUDE_DIRS)
diff --git a/CMakeModules/FindHtsEngine.cmake b/CMakeModules/FindHtsEngine.cmake
new file mode 100644 (file)
index 0000000..ebd15c0
--- /dev/null
@@ -0,0 +1,78 @@
+# - Try to find HTS Engine
+# Once done this will define
+#
+#  HTS_ENGINE_FOUND - system has HTS Engine
+#  HTS_ENGINE_INCLUDE_DIRS - the HTS Engine include directory
+#  HTS_ENGINE_LIBRARIES - Link these to use HTS Engine
+#  HTS_ENGINE_DEFINITIONS - Compiler switches required for using HTS Engine
+#
+#  Copyright (c) 2013 Saikrishna Arcot <saiarcot895@gmail.com>
+#
+#  Redistribution and use is allowed according to the terms of the New
+#  BSD license.
+#  For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+#
+
+
+if (HTS_ENGINE_LIBRARIES AND HTS_ENGINE_INCLUDE_DIRS)
+  # in cache already
+  set(HTS_ENGINE_FOUND TRUE)
+else (HTS_ENGINE_LIBRARIES AND HTS_ENGINE_INCLUDE_DIRS)
+  #set(HTS_ENGINE_DEFINITIONS ${_HTS_EngineCflags})
+  set(HTS_ENGINE_DEFINITIONS "")
+
+  find_path(HTS_ENGINE_INCLUDE_DIR
+    NAMES
+    HTS_engine.h
+    PATHS
+      ${_HTS_EngineIncDir}
+      /usr/include
+      /usr/local/include
+      /opt/local/include
+      /sw/include
+  )
+
+  find_library(HTS_ENGINE_LIBRARY
+    NAMES
+      HTSEngine
+    PATHS
+      ${_HTS_EngineLinkDir}
+      /usr/lib
+      /usr/local/lib
+      /opt/local/lib
+      /sw/lib
+  )
+
+  if (HTS_ENGINE_LIBRARY)
+    set(HTS_ENGINE_FOUND TRUE)
+  endif (HTS_ENGINE_LIBRARY)
+
+  set(HTS_ENGINE_INCLUDE_DIRS
+    ${HTS_ENGINE_INCLUDE_DIR}
+  )
+
+  if (HTS_ENGINE_FOUND)
+    set(HTS_ENGINE_LIBRARIES
+      ${HTS_ENGINE_LIBRARIES}
+      ${HTS_ENGINE_LIBRARY}
+    )
+  endif (HTS_ENGINE_FOUND)
+
+  if (HTS_ENGINE_INCLUDE_DIRS AND HTS_ENGINE_LIBRARIES)
+    set(HTS_ENGINE_FOUND TRUE)
+  endif (HTS_ENGINE_INCLUDE_DIRS AND HTS_ENGINE_LIBRARIES)
+
+  if (HTS_ENGINE_FOUND)
+    if (NOT HTS_Engine_FIND_QUIETLY)
+      message(STATUS "Found HTS Engine: ${HTS_ENGINE_LIBRARIES}")
+    endif (NOT HTS_Engine_FIND_QUIETLY)
+  else (HTS_ENGINE_FOUND)
+    if (HTS_Engine_FIND_REQUIRED)
+           message(FATAL_ERROR "Could not find HTS Engine")
+    endif (HTS_Engine_FIND_REQUIRED)
+  endif (HTS_ENGINE_FOUND)
+
+  # show the HTS_ENGINE_INCLUDE_DIRS and HTS_ENGINE_LIBRARIES variables only in the advanced view
+  mark_as_advanced(HTS_ENGINE_INCLUDE_DIRS HTS_ENGINE_LIBRARIES)
+
+endif (HTS_ENGINE_LIBRARIES AND HTS_ENGINE_INCLUDE_DIRS)
index e8802239b087fe75b13bf0beded716c9a143c9cb..f799ae6081db62e784bda94f4f571720b76776f4 100644 (file)
@@ -145,7 +145,11 @@ target_link_libraries(fgfs
 )
 
 if(ENABLE_FLITE)
-    target_link_libraries(fgfs flite_hts hts_engine)
+    if(SYSTEM_HTS_ENGINE)
+        target_link_libraries(fgfs flite_hts ${HTS_ENGINE_LIBRARIES})
+    else()
+        target_link_libraries(fgfs flite_hts hts_engine)
+    endif()
 endif()
 
 if (APPLE)