diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f3074aad919a..d511dbb8e049d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) @@ -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) @@ -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) diff --git a/cmake/modules/FindTagLib.cmake b/cmake/modules/FindTagLib.cmake index ac7b7ec8079b4..9ee5e92a3d7a8 100644 --- a/cmake/modules/FindTagLib.cmake +++ b/cmake/modules/FindTagLib.cmake @@ -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) diff --git a/cmake/scripts/common/ModuleHelpers.cmake b/cmake/scripts/common/ModuleHelpers.cmake index fcdf292d616ec..99afc4965d3c4 100644 --- a/cmake/scripts/common/ModuleHelpers.cmake +++ b/cmake/scripts/common/ModuleHelpers.cmake @@ -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() diff --git a/cmake/scripts/freebsd/ArchSetup.cmake b/cmake/scripts/freebsd/ArchSetup.cmake index 1a8c471113387..87f4f0c9cc722 100644 --- a/cmake/scripts/freebsd/ArchSetup.cmake +++ b/cmake/scripts/freebsd/ArchSetup.cmake @@ -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() diff --git a/cmake/scripts/linux/ArchSetup.cmake b/cmake/scripts/linux/ArchSetup.cmake index b59d145fb28ed..35ab1402f535e 100644 --- a/cmake/scripts/linux/ArchSetup.cmake +++ b/cmake/scripts/linux/ArchSetup.cmake @@ -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() diff --git a/project/BuildDependencies/scripts/0_package.target-win10-arm.list b/project/BuildDependencies/scripts/0_package.target-win10-arm.list index af2cb9acc1940..204d13190a204 100644 --- a/project/BuildDependencies/scripts/0_package.target-win10-arm.list +++ b/project/BuildDependencies/scripts/0_package.target-win10-arm.list @@ -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 diff --git a/project/BuildDependencies/scripts/0_package.target-win10-win32.list b/project/BuildDependencies/scripts/0_package.target-win10-win32.list index 69fbf046e01b7..60aea4af85df7 100644 --- a/project/BuildDependencies/scripts/0_package.target-win10-win32.list +++ b/project/BuildDependencies/scripts/0_package.target-win10-win32.list @@ -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 diff --git a/project/BuildDependencies/scripts/0_package.target-win10-x64.list b/project/BuildDependencies/scripts/0_package.target-win10-x64.list index f89ff6dc14856..e07d3b9296c7f 100644 --- a/project/BuildDependencies/scripts/0_package.target-win10-x64.list +++ b/project/BuildDependencies/scripts/0_package.target-win10-x64.list @@ -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 diff --git a/project/BuildDependencies/scripts/0_package.target-win32.list b/project/BuildDependencies/scripts/0_package.target-win32.list index 6f8f9fb00d965..7a2303b61df08 100644 --- a/project/BuildDependencies/scripts/0_package.target-win32.list +++ b/project/BuildDependencies/scripts/0_package.target-win32.list @@ -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 diff --git a/project/BuildDependencies/scripts/0_package.target-x64.list b/project/BuildDependencies/scripts/0_package.target-x64.list index c2fc393b6b48b..2f8e1e674a1aa 100644 --- a/project/BuildDependencies/scripts/0_package.target-x64.list +++ b/project/BuildDependencies/scripts/0_package.target-x64.list @@ -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 diff --git a/tools/depends/target/Makefile b/tools/depends/target/Makefile index 38ffb6fc472eb..0a9e2f5dfcf1f 100644 --- a/tools/depends/target/Makefile +++ b/tools/depends/target/Makefile @@ -54,7 +54,6 @@ DEPENDS = \ pythonmodule-setuptools \ spdlog \ sqlite3 \ - taglib \ tinyxml \ udfread \ xz diff --git a/tools/depends/target/taglib/001-cmake-pdb-debug.patch b/tools/depends/target/taglib/001-cmake-pdb-debug.patch new file mode 100644 index 0000000000000..f410cc33cf800 --- /dev/null +++ b/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} diff --git a/tools/depends/target/taglib/Makefile b/tools/depends/target/taglib/Makefile index 5dcb7b3c54b35..2ae922950e7d6 100644 --- a/tools/depends/target/taglib/Makefile +++ b/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: diff --git a/tools/depends/target/taglib/TAGLIB-VERSION b/tools/depends/target/taglib/TAGLIB-VERSION new file mode 100644 index 0000000000000..8f980b0b269c7 --- /dev/null +++ b/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