From fb80d99cadd91087c915a9b721a90f3ed0a83b3f Mon Sep 17 00:00:00 2001 From: TaurusXin Date: Sat, 4 Oct 2025 16:04:14 +0800 Subject: [PATCH] feat: find v1 package --- .github/workflows/autobuild.yml | 14 ++--- CMakeLists.txt | 1 + cmake/FindTaglib.cmake | 90 +++++++++++++++++++++++++++++++++ 3 files changed, 98 insertions(+), 7 deletions(-) create mode 100644 cmake/FindTaglib.cmake diff --git a/.github/workflows/autobuild.yml b/.github/workflows/autobuild.yml index aa60094..ac5dcf1 100644 --- a/.github/workflows/autobuild.yml +++ b/.github/workflows/autobuild.yml @@ -8,7 +8,7 @@ on: jobs: # ---------------------------------------------------------------------- - # 1. Linux (Ubuntu) + # 1. Linux Build # ---------------------------------------------------------------------- job_linux: name: Linux Build @@ -44,7 +44,7 @@ jobs: # 2. macOS Build # ---------------------------------------------------------------------- job_macos: - name: macOS Build (Brew) + name: macOS Build runs-on: macos-latest steps: @@ -63,10 +63,10 @@ jobs: -DCMAKE_BUILD_TYPE=Release \ -S ${{github.workspace}} - - name: 构建项目 + - name: Build run: cmake --build ${{github.workspace}}/build --config Release - - name: 上传 macOS 产物 + - name: Upload macOS Artifact uses: actions/upload-artifact@v4 with: name: build-artifact-macos @@ -99,9 +99,9 @@ jobs: run: | $toolchainFile = "${{ steps.vcpkg.outputs.vcpkgToolchainFile }}" - cmake -B ${{github.workspace}}/build ` - -DCMAKE_TOOLCHAIN_FILE=$toolchainFile ` - -DVCPKG_TARGET_TRIPLET={{VCPKG_TRIPLET}} ` + cmake -B ${{github.workspace}}/build \ + -DCMAKE_TOOLCHAIN_FILE=$toolchainFile \ + -DVCPKG_TARGET_TRIPLET={{VCPKG_TRIPLET}} \ -S ${{github.workspace}} - name: Build diff --git a/CMakeLists.txt b/CMakeLists.txt index 38e98a9..2b7950a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,7 @@ project(ncmdump LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) +list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") find_package(ZLIB) find_package(TagLib REQUIRED) diff --git a/cmake/FindTaglib.cmake b/cmake/FindTaglib.cmake new file mode 100644 index 0000000..cd1ad97 --- /dev/null +++ b/cmake/FindTaglib.cmake @@ -0,0 +1,90 @@ +# FindTaglib.cmake +# +# Cross-platform TagLib finder. +# Supports: +# - Ubuntu/Debian (libtag1v5-dev) +# - macOS (Homebrew) +# - Windows (vcpkg/manual) +# +# Defines: +# Taglib_FOUND +# Taglib_INCLUDE_DIRS +# Taglib_LIBRARIES +# Taglib::Taglib (imported target) + +# --- First: if official Config file exists (v2.x), use it directly --- +find_package(Taglib CONFIG QUIET) +if(Taglib_FOUND) + message(STATUS "Using system-provided Taglib (with CMake config).") + return() +endif() + +# --- Manual search fallback (for TagLib v1.x without config) --- +message(STATUS "No Taglib CMake config found, falling back to manual search...") + +if(WIN32) + # --- Windows --- + find_path(Taglib_INCLUDE_DIR tag.h + PATH_SUFFIXES taglib + PATHS + "C:/Program Files/taglib/include" + "C:/Program Files (x86)/taglib/include" + "${CMAKE_SOURCE_DIR}/third_party/taglib/include" + ) + find_library(Taglib_LIBRARY NAMES tag taglib + PATHS + "C:/Program Files/taglib/lib" + "C:/Program Files (x86)/taglib/lib" + "${CMAKE_SOURCE_DIR}/third_party/taglib/lib" + ) + +elseif(APPLE) + # --- macOS --- + find_path(Taglib_INCLUDE_DIR tag.h + PATH_SUFFIXES taglib + PATHS + /usr/local/include + /opt/homebrew/include + ) + find_library(Taglib_LIBRARY NAMES tag taglib + PATHS + /usr/local/lib + /opt/homebrew/lib + ) + +else() + # --- Linux / Unix --- + find_path(Taglib_INCLUDE_DIR tag.h + PATH_SUFFIXES taglib + PATHS + /usr/include + /usr/local/include + ) + find_library(Taglib_LIBRARY NAMES tag taglib + PATHS + /usr/lib /usr/lib64 + /usr/local/lib /usr/local/lib64 + /usr/lib/x86_64-linux-gnu + ) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Taglib DEFAULT_MSG + Taglib_LIBRARY Taglib_INCLUDE_DIR +) + +if(Taglib_FOUND) + set(Taglib_INCLUDE_DIRS ${Taglib_INCLUDE_DIR}) + set(Taglib_LIBRARIES ${Taglib_LIBRARY}) + + if(NOT TARGET Taglib::Taglib) + add_library(Taglib::Taglib UNKNOWN IMPORTED) + set_target_properties(Taglib::Taglib PROPERTIES + IMPORTED_LOCATION ${Taglib_LIBRARY} + INTERFACE_INCLUDE_DIRECTORIES ${Taglib_INCLUDE_DIR} + ) + endif() +else() + message(WARNING "Taglib not found. Please install libtag1v5-dev (Linux), \ +brew install taglib (macOS), or add manual path (Windows).") +endif()