From ba56ee0e7c1c150a7c7d9cd1d31311d3d607b909 Mon Sep 17 00:00:00 2001 From: TaurusXin Date: Sat, 4 Oct 2025 16:47:11 +0800 Subject: [PATCH] test: new finder --- .github/workflows/autobuild.yml | 11 +++--- CMakeLists.txt | 4 +-- cmake/FindTaglib.cmake | 63 +++++++++++++++++++++------------ 3 files changed, 47 insertions(+), 31 deletions(-) diff --git a/.github/workflows/autobuild.yml b/.github/workflows/autobuild.yml index 92c5a94..f1800f7 100644 --- a/.github/workflows/autobuild.yml +++ b/.github/workflows/autobuild.yml @@ -72,7 +72,6 @@ jobs: name: build-artifact-macos path: ${{github.workspace}}/build/ncmdump - # ---------------------------------------------------------------------- # 3. Windows Build # ---------------------------------------------------------------------- @@ -90,16 +89,16 @@ jobs: - name: Install Dependencies uses: lukka/run-vcpkg@v11 - id: Vcpkg + id: vcpkg with: vcpkgJsonGlob: '**/vcpkg.json' vcpkgTriplet: ${{ env.VCPKG_TRIPLET }} - + - name: Configure CMake run: | - cmake -B ${{github.workspace}}/build - -DCMAKE_TOOLCHAIN_FILE=${{ steps.vcpkg.outputs.vcpkgToolchainFile }} - -DVCPKG_TARGET_TRIPLET=${{ env.VCPKG_TRIPLET }} + cmake -B ${{github.workspace}}/build ` + -DCMAKE_TOOLCHAIN_FILE=${{ steps.vcpkg.outputs.vcpkgToolchainFile }} ` + -DVCPKG_TARGET_TRIPLET=${{ env.VCPKG_TRIPLET }} ` -S ${{github.workspace}} - name: Build diff --git a/CMakeLists.txt b/CMakeLists.txt index eb5b1bc..0469f83 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,10 +5,8 @@ project(ncmdump LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -# Ubuntu 24 Does not contains taglib 2.x, only 1.x, find it manually. -if(UNIX AND NOT APPLE) + list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") -endif() find_package(ZLIB) find_package(TagLib REQUIRED) diff --git a/cmake/FindTaglib.cmake b/cmake/FindTaglib.cmake index f935831..68cd272 100644 --- a/cmake/FindTaglib.cmake +++ b/cmake/FindTaglib.cmake @@ -1,29 +1,46 @@ -# FindTaglib.cmake -# Try to find TagLib library and headers -# Once done, it will define: -# Taglib_FOUND -# Taglib_INCLUDE_DIRS -# Taglib_LIBRARIES -# Taglib::Taglib (imported target) - -find_path(Taglib_INCLUDE_DIR tag.h - PATH_SUFFIXES taglib - PATHS /usr/include /usr/local/include -) - -find_library(Taglib_LIBRARY NAMES tag libtag - PATHS /usr/lib /usr/local/lib /usr/lib/x86_64-linux-gnu -) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Taglib DEFAULT_MSG - Taglib_LIBRARY Taglib_INCLUDE_DIR -) - +# --- Try official config first (Taglib 2.x) --- +find_package(Taglib CONFIG QUIET) if(Taglib_FOUND) + message(STATUS "Using system Taglib (CMake config found)") + return() +endif() + +# --- Try pkg-config (common on Linux) --- +find_package(PkgConfig QUIET) +if(PkgConfig_FOUND) + pkg_check_modules(TAGLIB taglib) +endif() + +# --- Manual search fallback --- +if(TAGLIB_FOUND) + set(Taglib_INCLUDE_DIRS ${TAGLIB_INCLUDE_DIRS}) + set(Taglib_LIBRARIES ${TAGLIB_LIBRARIES}) + message(STATUS "Using Taglib from pkg-config: ${Taglib_LIBRARIES}") +else() + message(STATUS "Falling back to manual search for Taglib...") + + find_path(Taglib_INCLUDE_DIR tag.h + PATH_SUFFIXES taglib + PATHS + /usr/include + /usr/local/include + /usr/include/taglib + ) + + find_library(Taglib_LIBRARY NAMES tag taglib + PATHS + /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64 + /usr/lib/x86_64-linux-gnu /usr/lib/aarch64-linux-gnu + ) + set(Taglib_INCLUDE_DIRS ${Taglib_INCLUDE_DIR}) set(Taglib_LIBRARIES ${Taglib_LIBRARY}) +endif() +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Taglib DEFAULT_MSG Taglib_LIBRARY Taglib_INCLUDE_DIR) + +if(Taglib_FOUND) if(NOT TARGET Taglib::Taglib) add_library(Taglib::Taglib UNKNOWN IMPORTED) set_target_properties(Taglib::Taglib PROPERTIES @@ -31,4 +48,6 @@ if(Taglib_FOUND) INTERFACE_INCLUDE_DIRECTORIES ${Taglib_INCLUDE_DIR} ) endif() +else() + message(WARNING "Taglib not found! Try: sudo apt install libtag1v5-dev") endif()