From 92a475f3352b7a70391843f8a66c8f63e60e7324 Mon Sep 17 00:00:00 2001 From: Rick Vogel Date: Thu, 3 Nov 2022 16:48:04 +0100 Subject: [PATCH] pkg_check_modules hunspell and pinyin --- .github/workflows/cmake.yml | 17 ++++++++++-- CMakeLists.txt | 20 ++++++++++++++ cmake/QSkinnyOptionalHunspell.cmake | 20 ++++++++++++++ cmake/QSkinnyOptionalPinyin.cmake | 20 ++++++++++++++ features/qskconfig.cmake | 4 +-- inputcontext/CMakeLists.txt | 38 +++++++++++++------------- src/CMakeLists.txt | 41 ++++++++++++++++------------- 7 files changed, 119 insertions(+), 41 deletions(-) create mode 100644 cmake/QSkinnyOptionalHunspell.cmake create mode 100644 cmake/QSkinnyOptionalPinyin.cmake diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 61107c5e..73fcb512 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -20,7 +20,7 @@ jobs: artifact: "windows_msvc.7z", build_type: "Release", cc: "cl", - cxx: "cl", + cxx: "cl", environment_script: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat", archiver: "7z a", generators: "Visual Studio 17 2022", @@ -299,6 +299,16 @@ jobs: set-env: "true" tools-only: "false" + - name: Install hunspell for Ubuntu + if: startsWith(matrix.config.name, 'Ubuntu') + run: | + sudo apt-get install -y libhunspell-dev + + - name: Install pinyin for Ubuntu + if: startsWith(matrix.config.name, 'Ubuntu') + run: | + sudo apt-get install -y libimepinyin-dev + - name: Configure shell: bash run: | @@ -310,7 +320,10 @@ jobs: -G "${{ matrix.config.generators }}" \ -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \ -DCMAKE_INSTALL_PREFIX:PATH=instdir \ - -D${{ matrix.config.cmake.qtdirkey }}:PATH="${{ matrix.config.cmake.qtdirvalue }}" + -D${{ matrix.config.cmake.qtdirkey }}:PATH="${{ matrix.config.cmake.qtdirvalue }}" \ + -DENABLE_HUNSPELL:BOOL=ON \ + -DENABLE_PINYIN:BOOL=ON + - name: Build shell: bash run: cmake --build . --config ${{ matrix.config.build_type }} diff --git a/CMakeLists.txt b/CMakeLists.txt index 99d35c38..80b552b5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,6 +58,26 @@ elseif(NOT "${Qt6_DIR}" STREQUAL "") set(Qt_VERSION_PATCH ${Qt6_VERSION_PATCH}) endif() +# optional package hunspell +if(NOT UNIX AND ENABLE_HUNSPELL) + message(WARNING "Feature 'hunspell' only available for UNIX!") + unset(ENABLE_HUNSPELL CACHE) +endif() + +# optional package pinyin +if(NOT UNIX AND ENABLE_PINYIN) + message(WARNING "Feature 'pinyin' only available for UNIX!") + unset(ENABLE_PINYIN CACHE) +endif() + +if(ENABLE_HUNSPELL) + include(cmake/QSkinnyOptionalHunspell.cmake) +endif() + +if(ENABLE_PINYIN) + include(cmake/QSkinnyOptionalPinyin.cmake) +endif() + if(TRUE) message(STATUS "\${Qt} : ${Qt}") message(STATUS "\${Qt_VERSION_MAJOR}: ${Qt_VERSION_MAJOR}") diff --git a/cmake/QSkinnyOptionalHunspell.cmake b/cmake/QSkinnyOptionalHunspell.cmake new file mode 100644 index 00000000..3b382be0 --- /dev/null +++ b/cmake/QSkinnyOptionalHunspell.cmake @@ -0,0 +1,20 @@ +find_package(PkgConfig) +pkg_check_modules(PKG_HUNSPELL QUIET hunspell) +find_path(HUNSPELL_INCLUDE_DIRS + NAMES hunspell.hxx + PATH_SUFFIXES hunspell + HINTS ${PKG_HUNSPELL_INCLUDE_DIRS}) +find_library(HUNSPELL_LIBRARIES + NAMES ${PKG_HUNSPELL_LIBRARIES} hunspell hunspell-1.8 hunspell-1.7 hunspell-1.6 libhunspell + HINTS ${PKG_HUNSPELL_LIBRARY_DIRS}) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(HUNSPELL + REQUIRED_VARS HUNSPELL_LIBRARIES HUNSPELL_INCLUDE_DIRS + VERSION_VAR PKG_HUNSPELL_VERSION) +mark_as_advanced(HUNSPELL_INCLUDE_DIRS HUNSPELL_LIBRARIES) + +add_library(hunspell SHARED IMPORTED GLOBAL) +set_target_properties(hunspell PROPERTIES IMPORTED_LOCATION ${HUNSPELL_LIBRARIES}) +target_include_directories(hunspell + INTERFACE + ${HUNSPELL_INCLUDE_DIRS}) \ No newline at end of file diff --git a/cmake/QSkinnyOptionalPinyin.cmake b/cmake/QSkinnyOptionalPinyin.cmake new file mode 100644 index 00000000..1192d517 --- /dev/null +++ b/cmake/QSkinnyOptionalPinyin.cmake @@ -0,0 +1,20 @@ +find_package(PkgConfig) +pkg_check_modules(PKG_PINYIN QUIET pinyin) +find_path(PINYIN_INCLUDE_DIRS + NAMES pinyinime.h + PATH_SUFFIXES pinyin LibIME/libime/pinyin + HINTS ${PKG_PINYIN_INCLUDE_DIRS}) +find_library(PINYIN_LIBRARIES + NAMES ${PKG_PINYIN_LIBRARIES} IMEPinyin imepinyin ime libime libimepinyin + HINTS ${PKG_PINYIN_LIBRARY_DIRS}) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(PINYIN + REQUIRED_VARS PINYIN_LIBRARIES PINYIN_INCLUDE_DIRS + VERSION_VAR PKG_PINYIN_VERSION) +mark_as_advanced(PINYIN_INCLUDE_DIRS PINYIN_LIBRARIES) + +add_library(pinyin SHARED IMPORTED GLOBAL) +set_target_properties(pinyin PROPERTIES IMPORTED_LOCATION ${PINYIN_LIBRARIES}) +target_include_directories(pinyin + INTERFACE + ${PINYIN_INCLUDE_DIRS}) \ No newline at end of file diff --git a/features/qskconfig.cmake b/features/qskconfig.cmake index c618bb16..62fd0854 100644 --- a/features/qskconfig.cmake +++ b/features/qskconfig.cmake @@ -49,8 +49,8 @@ option(BUILD_QSKDLL "Build qskinny as shared library" ON) option(BUILD_EXAMPLES "Build qskinny examples" ON) option(BUILD_PLAYGROUND "Build qskinny playground" ON) option(BUILD_SVG2QVG_STANDALONE "If 'ON' application won't be linked against qskinny library" ON) -option(ENABLE_PINYIN "Enable romanization system for standard mandarin chinese" OFF) # TODO try find pkg-config -option(ENABLE_HUNSPELL "Enable spell checker" OFF) # TODO try find pkg-config +option(ENABLE_PINYIN "UNIX ONLY OPTION: Enable romanization system for standard mandarin chinese" OFF) +option(ENABLE_HUNSPELL "UNIX ONLY OPTION: Enable spell checker" OFF) option(ENABLE_FONT_CONFIG "Enable font config for font caching" ON) option(ENABLE_ENSURE_SKINS "Enabling fall back code, that inserts some skin factories manually when not finding skin factories as plugins" ON) option(ENABLE_AUTOQVG "enable automatic qvg compilation" OFF) diff --git a/inputcontext/CMakeLists.txt b/inputcontext/CMakeLists.txt index 725a1f99..88e25f15 100644 --- a/inputcontext/CMakeLists.txt +++ b/inputcontext/CMakeLists.txt @@ -10,31 +10,33 @@ list(APPEND TARGET_OTHER_FILES metadata.json) if(ENABLE_PINYIN) - if(UNIX) - # TODO CONFIG += link_pkgconfig PKGCONFIG += pinyin - list(APPEND TARGET_HEADERS - ${CMAKE_SOURCE_DIR}/src/inputpanel/QskPinyinTextPredictor.h) - list(APPEND TARGET_SOURCES - ${CMAKE_SOURCE_DIR}/src/inputpanel/QskPinyinTextPredictor.cpp) - else() - message(WARNING "Feature 'pinyin' currently only available for UNIX!") - endif() + list(APPEND TARGET_HEADERS + ${CMAKE_SOURCE_DIR}/src/inputpanel/QskPinyinTextPredictor.h) + list(APPEND TARGET_SOURCES + ${CMAKE_SOURCE_DIR}/src/inputpanel/QskPinyinTextPredictor.cpp) endif() if(ENABLE_HUNSPELL) - if(UNIX) - # TODO CONFIG += link_pkgconfig PKGCONFIG += hunspell - list(APPEND TARGET_HEADERS - ${CMAKE_SOURCE_DIR}/src/inputpanel/QskHunspellTextPredictor.h) - list(APPEND TARGET_SOURCES - ${CMAKE_SOURCE_DIR}/src/inputpanel/QskHunspellTextPredictor.cpp) - else() - message(WARNING "Feature 'hunspell' currently only available for UNIX!") - endif() + list(APPEND TARGET_HEADERS + ${CMAKE_SOURCE_DIR}/src/inputpanel/QskHunspellTextPredictor.h) + list(APPEND TARGET_SOURCES + ${CMAKE_SOURCE_DIR}/src/inputpanel/QskHunspellTextPredictor.cpp) endif() add_library(${TARGET_NAME} SHARED ${TARGET_SOURCES} ${TARGET_HEADERS} ${TARGET_OTHER_FILES}) +if(ENABLE_PINYIN) + target_link_libraries(${TARGET_NAME} + PRIVATE + pinyin) +endif() + +if(ENABLE_HUNSPELL) + target_link_libraries(${TARGET_NAME} + PRIVATE + hunspell) +endif() + if(BUILD_QSKDLL) target_compile_definitions(${TARGET_NAME} PRIVATE diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 100bbf1a..978d62a0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -363,29 +363,18 @@ list(APPEND TARGET_SOURCES inputpanel/QskVirtualKeyboard.cpp) if(ENABLE_PINYIN) - if(UNIX) - target_compile_definitions(${TARGET_NAME} PRIVATE PINYIN) # TODO required? - # TODO CONFIG += link_pkgconfig PKGCONFIG += pinyin - list(APPEND TARGET_HEADERS - inputpanel/QskPinyinTextPredictor.h) + list(APPEND TARGET_HEADERS + inputpanel/QskPinyinTextPredictor.h) - list(APPEND TARGET_SOURCES - inputpanel/QskPinyinTextPredictor.cpp) - else() - message(WARNING "Feature 'pinyin' currently only available for UNIX!") - endif() + list(APPEND TARGET_SOURCES + inputpanel/QskPinyinTextPredictor.cpp) endif() if(ENABLE_HUNSPELL) - if(UNIX) - # TODO CONFIG += link_pkgconfig PKGCONFIG += hunspell - list(APPEND TARGET_HEADERS - inputpanel/QskHunspellTextPredictor.h) - list(APPEND TARGET_SOURCES - inputpanel/QskHunspellTextPredictor.cpp) - else() - message(WARNING "Feature 'hunspell' currently only available for UNIX!") - endif() + list(APPEND TARGET_HEADERS + inputpanel/QskHunspellTextPredictor.h) + list(APPEND TARGET_SOURCES + inputpanel/QskHunspellTextPredictor.cpp) endif() set(TARGET_NAME qskinny) @@ -433,6 +422,20 @@ if (Qt_VERSION_MAJOR VERSION_GREATER "5") ${Qt}::OpenGLPrivate) endif() +if(ENABLE_HUNSPELL) + target_link_libraries(${TARGET_NAME} + PRIVATE + hunspell) +endif() + +if(ENABLE_PINYIN) + target_compile_definitions(${TARGET_NAME} PRIVATE PINYIN) + + target_link_libraries(${TARGET_NAME} + PRIVATE + pinyin) +endif() + set_target_properties(${TARGET_NAME} PROPERTIES AUTOMOC ON