diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ea134df --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,56 @@ +name: C/C++ CI + +on: + push: + branches: + - main + - dev + pull_request: + branches: + - main + - dev + +jobs: + # Linux Job + linux: + runs-on: ubuntu-latest + strategy: + matrix: + include: + - api: jack + APIcmake: JACK + deps: libjack-dev + - api: alsa + APIcmake: ALSA + deps: libasound-dev + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y build-essential cmake autoconf-archive ${{ matrix.deps }} + - name: Build with CMake (Linux) + run: | + mkdir -p build + cd build + cmake .. -DCMAKE_BUILD_TYPE=Release -DRTMIDI_API_JACK=OFF -DRTMIDI_API_ALSA=OFF -DRTMIDI_API_${{ matrix.APIcmake }}=ON + cmake --build . --config Release + + # macOS Job + macos: + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Install dependencies (macOS) + run: | + brew install cmake autoconf-archive automake + - name: Build with CMake (macOS) + run: | + mkdir -p build + cd build + cmake .. -DCMAKE_BUILD_TYPE=Release + cmake --build . --config Release diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ea489c..7f05de0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,5 @@ -# ---------------------------------- -# Project -# ---------------------------------- cmake_minimum_required(VERSION 3.17) -project(cpp-pinyin VERSION 1.0.0.0 LANGUAGES CXX) +project(cpp-pinyin VERSION 1.0.1 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) @@ -44,7 +41,7 @@ if (CPP_PINYIN_INSTALL) include(CMakePackageConfigHelpers) endif () # ---------------------------------- -# Main Project +# Project sources and targets # ---------------------------------- file(GLOB_RECURSE _src include/*.h src/*.h src/*.cpp src/*/*.h src/*/*.cpp) @@ -65,17 +62,17 @@ if (CPP_PINYIN_BUILD_TESTS) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory - ${CMAKE_CURRENT_SOURCE_DIR}/res/${dict} - ${CMAKE_BINARY_DIR}/tests/${dict} + ${CMAKE_CURRENT_SOURCE_DIR}/res/dict + ${CMAKE_BINARY_DIR}/tests/dict ) install( - DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/res/${dict} + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/res/dict DESTINATION . ) endif () # ---------------------------------- -# Add platform specific +# Add platform-specific settings # ---------------------------------- if (WIN32) set(RC_DESCRIPTION "A lightweight Chinese/Cantonese to Pinyin library.") @@ -84,7 +81,7 @@ if (WIN32) endif () # ---------------------------------- -# link libraries +# Link libraries # ---------------------------------- target_include_directories(${PROJECT_NAME} PRIVATE include src src/toneUtil) target_include_directories(${PROJECT_NAME} PUBLIC @@ -92,17 +89,17 @@ target_include_directories(${PROJECT_NAME} PUBLIC ) # ---------------------------------- -# copy dictionary +# Copy dictionary files # ---------------------------------- add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory - ${CMAKE_CURRENT_SOURCE_DIR}/res/${dict} - ${CMAKE_BINARY_DIR}/bin/${dict} + ${CMAKE_CURRENT_SOURCE_DIR}/res/dict + ${CMAKE_BINARY_DIR}/bin/dict ) # ---------------------------------- -# install +# Install settings # ---------------------------------- if (CPP_PINYIN_INSTALL) target_include_directories(${PROJECT_NAME} PUBLIC @@ -146,15 +143,35 @@ if (CPP_PINYIN_INSTALL) DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" ) - if (NOT DEFINED VCPKG_DICT_DIR) + if (NOT DEFINED CPP_PINYIN_VCPKG_DICT_DIR) + set(dictdir ${CMAKE_INSTALL_LIBDIR}/dict) install( - DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/res/${dict} + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/res/dict DESTINATION ${CMAKE_INSTALL_LIBDIR} ) else () + set(dictdir ${CPP_PINYIN_VCPKG_DICT_DIR}/dict) install( - DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/res/${dict} - DESTINATION ${VCPKG_DICT_DIR} + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/res/dict + DESTINATION ${CPP_PINYIN_VCPKG_DICT_DIR} ) endif () -endif () \ No newline at end of file +endif () + +# ---------------------------------- +# Package config (.pc file) generation +# ---------------------------------- +set(version ${PROJECT_VERSION}) + +# Configure the .pc file +configure_file( + ${CMAKE_CURRENT_LIST_DIR}/cpp-pinyin.pc.in + ${CMAKE_BINARY_DIR}/cpp-pinyin.pc + @ONLY +) + +# Install the .pc file +install( + FILES ${CMAKE_BINARY_DIR}/cpp-pinyin.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig +) diff --git a/cmake/winrc.cmake b/cmake/winrc.cmake index 5886ba6..d114f53 100644 --- a/cmake/winrc.cmake +++ b/cmake/winrc.cmake @@ -8,8 +8,8 @@ set(_rc_content "#include #define STRINGIFY(x) _STRINGIFY(x) VS_VERSION_INFO VERSIONINFO - FILEVERSION ${PROJECT_VERSION_MAJOR},${PROJECT_VERSION_MINOR},${PROJECT_VERSION_PATCH},${PROJECT_VERSION_TWEAK} - PRODUCTVERSION ${PROJECT_VERSION_MAJOR},${PROJECT_VERSION_MINOR},${PROJECT_VERSION_PATCH},${PROJECT_VERSION_TWEAK} + FILEVERSION ${PROJECT_VERSION_MAJOR},${PROJECT_VERSION_MINOR},${PROJECT_VERSION_PATCH} + PRODUCTVERSION ${PROJECT_VERSION_MAJOR},${PROJECT_VERSION_MINOR},${PROJECT_VERSION_PATCH} { BLOCK \"StringFileInfo\" { diff --git a/cpp-pinyin.pc.in b/cpp-pinyin.pc.in new file mode 100644 index 0000000..1973df5 --- /dev/null +++ b/cpp-pinyin.pc.in @@ -0,0 +1,19 @@ +prefix=${pcfiledir}/../.. + +# cpp-pinyin pkg-config file + +exec_prefix=${prefix}/bin +libdir=${prefix}/lib +includedir=${prefix}/include + +dictdir=${prefix}/share/cpp-pinyin/dict + +Name: cpp-pinyin +Description: A lightweight Chinese/Cantonese to Pinyin library. +Version: @version@ +Requires: +Conflicts: + +Cflags: -I${includedir} +Libs: -L${libdir} -lcpp-pinyin +