Skip to content

Commit

Permalink
Merge pull request #21433 from fuzzard/cmake_taglib
Browse files Browse the repository at this point in the history
[cmake] ENABLE_INTERNAL_TAGLIB to build taglib internally
  • Loading branch information
fuzzard committed May 26, 2022
2 parents 6e1f254 + a00836e commit 209222e
Show file tree
Hide file tree
Showing 14 changed files with 113 additions and 35 deletions.
6 changes: 4 additions & 2 deletions CMakeLists.txt
Expand Up @@ -42,7 +42,7 @@ core_find_versions()
include(cmake/scripts/common/PathSetup.cmake)
include(cmake/scripts/common/CompilerSettings.cmake)
include(ExternalProject)

include(CMakeDependentOption)

# general
option(VERBOSE "Enable verbose output?" OFF)
Expand All @@ -56,11 +56,14 @@ option(ENABLE_OPTICAL "Enable optical support?" ON)
option(ENABLE_PYTHON "Enable python support?" ON)
option(ENABLE_TESTING "Enable testing support?" ON)

# Internal Depends - supported on all platforms
option(ENABLE_INTERNAL_CROSSGUID "Enable internal crossguid?" ON)
# use ffmpeg from depends or system
option(ENABLE_INTERNAL_FFMPEG "Enable internal ffmpeg?" OFF)
option(ENABLE_INTERNAL_RapidJSON "Enable internal rapidjson?" ON)
cmake_dependent_option(ENABLE_INTERNAL_TAGLIB "Enable internal taglib?" OFF "DEFINED USE_INTERNAL_LIBS;NOT USE_INTERNAL_LIBS" ON)

# Internal Depends - supported on UNIX platforms
if(UNIX)
option(FFMPEG_PATH "Path to external ffmpeg?" "")
option(ENABLE_INTERNAL_FMT "Enable internal fmt?" OFF)
Expand All @@ -72,7 +75,6 @@ if(UNIX)
option(ENABLE_INTERNAL_SPDLOG "Enable internal spdlog?" OFF)
endif()
# prefer kissfft from xbmc/contrib but let use system one on unices
include(CMakeDependentOption)
cmake_dependent_option(ENABLE_INTERNAL_KISSFFT "Enable internal kissfft?" ON "UNIX" ON)
# System options
if(NOT WIN32)
Expand Down
55 changes: 46 additions & 9 deletions cmake/modules/FindTagLib.cmake
Expand Up @@ -13,17 +13,54 @@
#
# TagLib::TagLib - The TagLib library

if(PKG_CONFIG_FOUND)
pkg_check_modules(PC_TAGLIB taglib>=1.9.0 QUIET)
endif()
if(ENABLE_INTERNAL_TAGLIB)
include(cmake/scripts/common/ModuleHelpers.cmake)

set(MODULE_LC taglib)

# Debug postfix only used for windows
if(WIN32 OR WINDOWS_STORE)
set(TAGLIB_DEBUG_POSTFIX "d")
else()
set(TAGLIB_DEBUG_POSTFIX "")
endif()

SETUP_BUILD_VARS()

find_path(TAGLIB_INCLUDE_DIR taglib/tag.h
PATHS ${PC_TAGLIB_INCLUDEDIR})
find_library(TAGLIB_LIBRARY_RELEASE NAMES tag
set(TAGLIB_VERSION ${${MODULE}_VER})

if(WIN32 OR WINDOWS_STORE)
# find the path to the patch executable
find_package(Patch MODULE REQUIRED)

set(patch ${CMAKE_SOURCE_DIR}/tools/depends/target/${MODULE_LC}/001-cmake-pdb-debug.patch)
PATCH_LF_CHECK(${patch})

set(PATCH_COMMAND ${PATCH_EXECUTABLE} -p1 -i ${patch})
endif()

set(CMAKE_ARGS -DBUILD_SHARED_LIBS=OFF
-DBUILD_BINDINGS=OFF)

BUILD_DEP_TARGET()

# Add target to libkodi to build
set_property(GLOBAL APPEND PROPERTY INTERNAL_DEPS_PROP taglib)
else()

if(PKG_CONFIG_FOUND)
pkg_check_modules(PC_TAGLIB taglib>=1.9.0 QUIET)
endif()

find_path(TAGLIB_INCLUDE_DIR taglib/tag.h
PATHS ${PC_TAGLIB_INCLUDEDIR})
find_library(TAGLIB_LIBRARY_RELEASE NAMES tag
PATHS ${PC_TAGLIB_LIBDIR})
find_library(TAGLIB_LIBRARY_DEBUG NAMES tagd
PATHS ${PC_TAGLIB_LIBDIR})
find_library(TAGLIB_LIBRARY_DEBUG NAMES tagd
PATHS ${PC_TAGLIB_LIBDIR})
set(TAGLIB_VERSION ${PC_TAGLIB_VERSION})
set(TAGLIB_VERSION ${PC_TAGLIB_VERSION})

endif()

include(SelectLibraryConfigurations)
select_library_configurations(TAGLIB)
Expand Down
9 changes: 4 additions & 5 deletions cmake/scripts/common/ModuleHelpers.cmake
Expand Up @@ -49,25 +49,24 @@ function(get_versionfile_data module_name)

if(${UPPER_MODULE_NAME}_BYPRODUCT)
# strip the extension, if debug, add DEBUG_POSTFIX and then add the extension back
if(${UPPER_MODULE_NAME}_DEBUG_POSTFIX)
if(DEFINED ${UPPER_MODULE_NAME}_DEBUG_POSTFIX)
set(_POSTFIX ${${UPPER_MODULE_NAME}_DEBUG_POSTFIX})
else()
set(_POSTFIX ${DEBUG_POSTFIX})
endif()

# Only add debug postfix if platform or module supply a DEBUG_POSTFIX
if(NOT _POSTFIX STREQUAL "")
if(DEFINED _POSTFIX AND NOT _POSTFIX STREQUAL "")
string(REGEX REPLACE "\\.[^.]*$" "" ${UPPER_MODULE_NAME}_BYPRODUCT_DEBUG ${${UPPER_MODULE_NAME}_BYPRODUCT})
if(WIN32 OR WINDOWS_STORE)
set(${UPPER_MODULE_NAME}_BYPRODUCT_DEBUG "${${UPPER_MODULE_NAME}_BYPRODUCT_DEBUG}${_POSTFIX}.lib")
else()
set(${UPPER_MODULE_NAME}_BYPRODUCT_DEBUG "${${UPPER_MODULE_NAME}_BYPRODUCT_DEBUG}${_POSTFIX}.a")
endif()

# Set Debug and Release library names
# Set Debug library names
set(${UPPER_MODULE_NAME}_LIBRARY_DEBUG ${DEPENDS_PATH}/lib/${${UPPER_MODULE_NAME}_BYPRODUCT_DEBUG} PARENT_SCOPE)
set(${UPPER_MODULE_NAME}_LIBRARY_RELEASE ${DEPENDS_PATH}/lib/${${UPPER_MODULE_NAME}_BYPRODUCT} PARENT_SCOPE)
endif()
set(${UPPER_MODULE_NAME}_LIBRARY_RELEASE ${DEPENDS_PATH}/lib/${${UPPER_MODULE_NAME}_BYPRODUCT} PARENT_SCOPE)
set(${UPPER_MODULE_NAME}_LIBRARY ${DEPENDS_PATH}/lib/${${UPPER_MODULE_NAME}_BYPRODUCT} PARENT_SCOPE)
endif()

Expand Down
9 changes: 9 additions & 0 deletions cmake/scripts/freebsd/ArchSetup.cmake
Expand Up @@ -35,3 +35,12 @@ endif()

# Additional SYSTEM_DEFINES
list(APPEND SYSTEM_DEFINES -DHAS_POSIX_NETWORK -DHAS_FREEBSD_NETWORK)

# Build internal libs
if(NOT USE_INTERNAL_LIBS)
if(KODI_DEPENDSBUILD)
set(USE_INTERNAL_LIBS ON)
else()
set(USE_INTERNAL_LIBS OFF)
endif()
endif()
9 changes: 9 additions & 0 deletions cmake/scripts/linux/ArchSetup.cmake
Expand Up @@ -190,3 +190,12 @@ if(ARCH_IS_BIGENDIAN)
else()
message(STATUS "Host architecture is little-endian")
endif()

# Build internal libs
if(NOT USE_INTERNAL_LIBS)
if(KODI_DEPENDSBUILD)
set(USE_INTERNAL_LIBS ON)
else()
set(USE_INTERNAL_LIBS OFF)
endif()
endif()
Expand Up @@ -37,6 +37,5 @@ pycryptodome-3.9.4-win10-arm-v142-20200803.7z
python-3.8.5-win10-arm-v142-20210211.7z
spdlog-1.5.0-win10-arm-v141-20200320-2.7z
sqlite-3300100-win10-arm-v141-20200105.7z
taglib-1.11.1-win10-arm-v141-20200105.7z
tinyxml-2.6.2-win10-arm-v141-20200105.7z
zlib-1.2.11-win10-arm-v141-20200105.7z
Expand Up @@ -37,6 +37,5 @@ pycryptodome-3.9.4-win10-win32-v142-20200803.7z
python-3.8.5-win10-win32-v142-20210211.7z
spdlog-1.5.0-win10-win32-v141-20200320-2.7z
sqlite-3300100-win10-win32-v141-20200105.7z
taglib-1.11.1-win10-win32-v141-20200105.7z
tinyxml-2.6.2-win10-win32-v141-20200105.7z
zlib-1.2.11-win10-win32-v141-20200105.7z
Expand Up @@ -37,6 +37,5 @@ pycryptodome-3.9.4-win10-x64-v142-20200803.7z
python-3.8.5-win10-x64-v142-20210211.7z
spdlog-1.5.0-win10-x64-v141-20200320.7z
sqlite-3300100-win10-x64-v141-20200105.7z
taglib-1.11.1-win10-x64-v141-20200105.7z
tinyxml-2.6.2-win10-x64-v141-20200105.7z
zlib-1.2.11-win10-x64-v141-20200105.7z
Expand Up @@ -45,6 +45,5 @@ python-3.8.5-win32-v142-20210211.7z
shairplay-ce80e00-win32-v141-20200105.7z
spdlog-1.5.0-win32-v141-20200320-2.7z
sqlite-3300100-win32-v141-20200105.7z
taglib-1.11.1-win32-v141-20200105.7z
tinyxml-2.6.2-win32-v141-20200105.7z
zlib-1.2.11-win32-v141-20200105.7z
Expand Up @@ -42,6 +42,5 @@ python-3.8.5-x64-v142-20210211.7z
shairplay-ce80e00-x64-v141-20200105.7z
spdlog-1.5.0-x64-v141-20200320.7z
sqlite-3300100-x64-v141-20200105.7z
taglib-1.11.1-x64-v141-20200105.7z
tinyxml-2.6.2-x64-v141-20200105.7z
zlib-1.2.11-x64-v141-20200105.7z
1 change: 0 additions & 1 deletion tools/depends/target/Makefile
Expand Up @@ -54,7 +54,6 @@ DEPENDS = \
pythonmodule-setuptools \
spdlog \
sqlite3 \
taglib \
tinyxml \
udfread \
xz
Expand Down
29 changes: 29 additions & 0 deletions tools/depends/target/taglib/001-cmake-pdb-debug.patch
@@ -0,0 +1,29 @@
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -58,6 +58,11 @@
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
endif()

+set(CMAKE_DEBUG_POSTFIX "d")
+if(MSVC)
+ add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
+endif()
+
if(MSVC AND ENABLE_STATIC_RUNTIME)
foreach(flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
--- a/taglib/CMakeLists.txt
+++ b/taglib/CMakeLists.txt
@@ -341,6 +341,12 @@
target_link_libraries(tag ${ZLIB_LIBRARIES})
endif()

+if(MSVC)
+ set_target_properties(tag PROPERTIES COMPILE_PDB_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} COMPILE_PDB_NAME tag COMPILE_PDB_NAME_DEBUG tagd)
+ install(FILES ${PROJECT_BINARY_DIR}/RelWithDebInfo/tag.pdb DESTINATION lib CONFIGURATIONS RelWithDebInfo)
+ install(FILES ${PROJECT_BINARY_DIR}/Debug/tagd.pdb DESTINATION lib CONFIGURATIONS Debug)
+endif(MSVC)
+
set_target_properties(tag PROPERTIES
VERSION ${TAGLIB_SOVERSION_MAJOR}.${TAGLIB_SOVERSION_MINOR}.${TAGLIB_SOVERSION_PATCH}
SOVERSION ${TAGLIB_SOVERSION_MAJOR}
19 changes: 6 additions & 13 deletions tools/depends/target/taglib/Makefile
@@ -1,29 +1,22 @@
include ../../Makefile.include
DEPS = ../../Makefile.include Makefile ../../download-files.include
include ../../Makefile.include TAGLIB-VERSION ../../download-files.include
DEPS = ../../Makefile.include Makefile TAGLIB-VERSION ../../download-files.include \
001-cmake-pdb-debug.patch

LIBNAME=taglib
VERSION=1.12
SOURCE=$(LIBNAME)-$(VERSION)
ARCHIVE=$(LIBNAME)-$(VERSION).tar.gz
SHA512=7e369faa5e3c6c6401052b7a19e35b0cf8c1e5ed9597053ac731a7718791d5d4803d1b18a93e903ec8c3fc6cb92e34d9616daa2ae4d326965d4c4d5624dcdaba
include ../../download-files.include

LIBDYLIB=$(PLATFORM)/build/$(LIBNAME)/libtag.a
LIBDYLIB=$(PLATFORM)/build/$(LIBNAME)/$(BYPRODUCT)
all: .installed-$(PLATFORM)


$(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE).$(HASH_TYPE) $(DEPS)
rm -rf $(PLATFORM); mkdir -p $(PLATFORM)
cd $(PLATFORM); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
cd $(PLATFORM); rm -rf build; mkdir -p build
cd $(PLATFORM)/build; $(CMAKE) -DCMAKE_LIBRARY_PATH=$(TOOLCHAIN)/lib/$(HOST) -DCMAKE_CXX_FLAGS="$(CXXFLAGS) -std=c++11" -DBUILD_SHARED_LIBS=OFF ..
cd $(PLATFORM)/build; $(CMAKE) -DBUILD_SHARED_LIBS=OFF -DBUILD_BINDINGS=OFF -DCMAKE_BUILD_TYPE=Debug ..

$(LIBDYLIB): $(PLATFORM)
$(MAKE) -C $(PLATFORM)/build
touch $@

.installed-$(PLATFORM): $(LIBDYLIB)
$(MAKE) -C $(PLATFORM)/build install
rm -f $(PREFIX)/lib/libtag_c.*
touch $@

clean:
Expand Down
6 changes: 6 additions & 0 deletions tools/depends/target/taglib/TAGLIB-VERSION
@@ -0,0 +1,6 @@
LIBNAME=taglib
VERSION=1.12
ARCHIVE=$(LIBNAME)-$(VERSION).tar.gz
SHA512=7e369faa5e3c6c6401052b7a19e35b0cf8c1e5ed9597053ac731a7718791d5d4803d1b18a93e903ec8c3fc6cb92e34d9616daa2ae4d326965d4c4d5624dcdaba
BYPRODUCT=libtag.a
BYPRODUCT_WIN=tag.lib

0 comments on commit 209222e

Please sign in to comment.