diff options
Diffstat (limited to 'vcpkg/ports/libheif')
| -rw-r--r-- | vcpkg/ports/libheif/cmake-project-include.cmake | 7 | ||||
| -rw-r--r-- | vcpkg/ports/libheif/cxx-linkage-pkgconfig.diff | 29 | ||||
| -rw-r--r-- | vcpkg/ports/libheif/find-modules.diff | 38 | ||||
| -rw-r--r-- | vcpkg/ports/libheif/gdk-pixbuf.patch | 28 | ||||
| -rw-r--r-- | vcpkg/ports/libheif/portfile.cmake | 83 | ||||
| -rw-r--r-- | vcpkg/ports/libheif/symbol-exports.diff | 57 | ||||
| -rw-r--r-- | vcpkg/ports/libheif/vcpkg.json | 66 |
7 files changed, 308 insertions, 0 deletions
diff --git a/vcpkg/ports/libheif/cmake-project-include.cmake b/vcpkg/ports/libheif/cmake-project-include.cmake new file mode 100644 index 0000000..3b08ba4 --- /dev/null +++ b/vcpkg/ports/libheif/cmake-project-include.cmake @@ -0,0 +1,7 @@ +if(WITH_X265 AND UNIX AND NOT BUILD_SHARED_LIBS AND CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|^arm64") + include(CheckLinkerFlag) + check_linker_flag(C "LINKER:-Bsymbolic" supports_bsymbolic) + if(supports_bsymbolic) + add_link_options("LINKER:-Bsymbolic") + endif() +endif() diff --git a/vcpkg/ports/libheif/cxx-linkage-pkgconfig.diff b/vcpkg/ports/libheif/cxx-linkage-pkgconfig.diff new file mode 100644 index 0000000..8e1a410 --- /dev/null +++ b/vcpkg/ports/libheif/cxx-linkage-pkgconfig.diff @@ -0,0 +1,29 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 7dfbe6f..67d31f5 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -479,13 +479,17 @@ endif() + + list(JOIN REQUIRES_PRIVATE " " REQUIRES_PRIVATE) + +-include(CheckCXXSymbolExists) +-check_cxx_symbol_exists(_LIBCPP_VERSION cstdlib HAVE_LIBCPP) +-if(HAVE_LIBCPP) +- set(LIBS_PRIVATE "-lc++") +-else() +- set(LIBS_PRIVATE "-lstdc++") +-endif() ++set(FAKE_CXX_LINKAGE "") ++foreach(lib IN LISTS CMAKE_CXX_IMPLICIT_LINK_LIBRARIES) ++ if(lib IN_LIST CMAKE_C_IMPLICIT_LINK_LIBRARIES) ++ continue() ++ elseif(EXISTS "${lib}") ++ string(APPEND FAKE_CXX_LINKAGE " ${CMAKE_LINK_LIBRARY_FILE_FLAG}${lib}") ++ else() ++ string(APPEND FAKE_CXX_LINKAGE " ${CMAKE_LINK_LIBRARY_FLAG}${lib}") ++ endif() ++endforeach() ++set(LIBS_PRIVATE "${FAKE_CXX_LINKAGE}") + + configure_file(libheif.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libheif.pc @ONLY) + diff --git a/vcpkg/ports/libheif/find-modules.diff b/vcpkg/ports/libheif/find-modules.diff new file mode 100644 index 0000000..a1652b9 --- /dev/null +++ b/vcpkg/ports/libheif/find-modules.diff @@ -0,0 +1,38 @@ +diff --git a/cmake/modules/FindAOM.cmake b/cmake/modules/FindAOM.cmake +index 61c5961..1ecf364 100644 +--- a/cmake/modules/FindAOM.cmake ++++ b/cmake/modules/FindAOM.cmake +@@ -15,6 +15,7 @@ unset(CMAKE_REQUIRED_INCLUDES) + + find_library(AOM_LIBRARY + NAMES libaom aom ++ NAMES_PER_DIR + HINTS ${AOM_PKGCONF_LIBRARY_DIRS} ${AOM_PKGCONF_LIBDIR} + ) + +diff --git a/cmake/modules/FindLIBDE265.cmake b/cmake/modules/FindLIBDE265.cmake +index c9a7fcb..95fc5bf 100644 +--- a/cmake/modules/FindLIBDE265.cmake ++++ b/cmake/modules/FindLIBDE265.cmake +@@ -9,6 +9,7 @@ find_path(LIBDE265_INCLUDE_DIR + + find_library(LIBDE265_LIBRARY + NAMES libde265 de265 ++ NAMES_PER_DIR + HINTS ${LIBDE265_PKGCONF_LIBRARY_DIRS} ${LIBDE265_PKGCONF_LIBDIR} + ) + +diff --git a/cmake/modules/FindX265.cmake b/cmake/modules/FindX265.cmake +index ae8d8be..95898fe 100644 +--- a/cmake/modules/FindX265.cmake ++++ b/cmake/modules/FindX265.cmake +@@ -8,7 +8,8 @@ find_path(X265_INCLUDE_DIR + ) + + find_library(X265_LIBRARY +- NAMES libx265 x265 ++ NAMES libx265 x265 x265-static ++ NAMES_PER_DIR + HINTS ${X265_PKGCONF_LIBRARY_DIRS} ${X265_PKGCONF_LIBDIR} + ) + diff --git a/vcpkg/ports/libheif/gdk-pixbuf.patch b/vcpkg/ports/libheif/gdk-pixbuf.patch new file mode 100644 index 0000000..257b466 --- /dev/null +++ b/vcpkg/ports/libheif/gdk-pixbuf.patch @@ -0,0 +1,28 @@ +diff --git "a/gdk-pixbuf/CMakeLists.txt" "b/gdk-pixbuf/CMakeLists.txt" +index eeb2727..20a6b16 100644 +--- "a/gdk-pixbuf/CMakeLists.txt" ++++ "b/gdk-pixbuf/CMakeLists.txt" +@@ -1,12 +1,9 @@ + if(UNIX OR MINGW) + find_package(PkgConfig) +- pkg_check_modules(GDKPIXBUF2 gdk-pixbuf-2.0) ++ pkg_check_modules(GDKPIXBUF2 gdk-pixbuf-2.0 IMPORTED_TARGET) + + if(GDKPIXBUF2_FOUND) +- execute_process( +- COMMAND ${PKG_CONFIG_EXECUTABLE} gdk-pixbuf-2.0 --variable gdk_pixbuf_moduledir +- --define-variable=prefix=${CMAKE_INSTALL_PREFIX} OUTPUT_VARIABLE GDKPIXBUF2_MODULE_DIR +- OUTPUT_STRIP_TRAILING_WHITESPACE) ++ pkg_get_variable(GDKPIXBUF2_MODULE_DIR gdk-pixbuf-2.0 gdk_pixbuf_moduledir) + + add_library(pixbufloader-heif MODULE pixbufloader-heif.c) + +@@ -14,7 +11,7 @@ if(UNIX OR MINGW) + + target_link_directories(pixbufloader-heif PRIVATE ${GDKPIXBUF2_LIBRARY_DIRS}) + +- target_link_libraries(pixbufloader-heif PUBLIC ${GDKPIXBUF2_LIBRARIES} heif) ++ target_link_libraries(pixbufloader-heif PUBLIC PkgConfig::GDKPIXBUF2 heif) + + install(TARGETS pixbufloader-heif DESTINATION ${GDKPIXBUF2_MODULE_DIR}) + endif() diff --git a/vcpkg/ports/libheif/portfile.cmake b/vcpkg/ports/libheif/portfile.cmake new file mode 100644 index 0000000..790c59b --- /dev/null +++ b/vcpkg/ports/libheif/portfile.cmake @@ -0,0 +1,83 @@ +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO strukturag/libheif + REF "v${VERSION}" + SHA512 4497d1afbccc15806cc11c22653e83d7900a009ad584a8d6b1ada6fac1ace9a70d834eb32653da567f0ddabc23ec641c5d69503282e303bf1bf2def72544b1b5 + HEAD_REF master + PATCHES + cxx-linkage-pkgconfig.diff + find-modules.diff + gdk-pixbuf.patch + symbol-exports.diff +) + +vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS + FEATURES + aom WITH_AOM_DECODER + aom WITH_AOM_ENCODER + aom VCPKG_LOCK_FIND_PACKAGE_AOM + gdk-pixbuf WITH_GDK_PIXBUF + hevc WITH_X265 + hevc VCPKG_LOCK_FIND_PACKAGE_X265 + iso23001-17 WITH_UNCOMPRESSED_CODEC + iso23001-17 VCPKG_LOCK_FIND_PACKAGE_ZLIB + jpeg WITH_JPEG_DECODER + jpeg WITH_JPEG_ENCODER + jpeg VCPKG_LOCK_FIND_PACKAGE_JPEG + openjpeg WITH_OpenJPEG_DECODER + openjpeg WITH_OpenJPEG_ENCODER + openjpeg VCPKG_LOCK_FIND_PACKAGE_OpenJPEG +) + +vcpkg_find_acquire_program(PKGCONFIG) +set(ENV{PKG_CONFIG} "${PKGCONFIG}") + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + OPTIONS + -DBUILD_TESTING=OFF + -DCMAKE_COMPILE_WARNING_AS_ERROR=OFF + "-DCMAKE_PROJECT_INCLUDE=${CURRENT_PORT_DIR}/cmake-project-include.cmake" + -DPLUGIN_DIRECTORY= # empty + -DWITH_DAV1D=OFF + -DWITH_EXAMPLES=OFF + -DWITH_LIBSHARPYUV=OFF + -DWITH_OpenH264_DECODER=OFF + -DVCPKG_LOCK_FIND_PACKAGE_Brotli=OFF + -DVCPKG_LOCK_FIND_PACKAGE_Doxygen=OFF + -DVCPKG_LOCK_FIND_PACKAGE_LIBDE265=ON # feature candidate + -DVCPKG_LOCK_FIND_PACKAGE_PNG=OFF + -DVCPKG_LOCK_FIND_PACKAGE_TIFF=OFF + ${FEATURE_OPTIONS} + OPTIONS_RELEASE + "-DPLUGIN_INSTALL_DIRECTORY=${CURRENT_PACKAGES_DIR}/plugins/libheif" + OPTIONS_DEBUG + "-DPLUGIN_INSTALL_DIRECTORY=${CURRENT_PACKAGES_DIR}/debug/plugins/libheif" + MAYBE_UNUSED_VARIABLES + VCPKG_LOCK_FIND_PACKAGE_AOM + VCPKG_LOCK_FIND_PACKAGE_Brotli + VCPKG_LOCK_FIND_PACKAGE_OpenJPEG + VCPKG_LOCK_FIND_PACKAGE_X265 + VCPKG_LOCK_FIND_PACKAGE_ZLIB +) +vcpkg_cmake_install() +vcpkg_copy_pdbs() +vcpkg_cmake_config_fixup(CONFIG_PATH "lib/cmake/libheif") +vcpkg_fixup_pkgconfig() + +if (VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic") + vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/libheif/heif_library.h" "!defined(LIBHEIF_STATIC_BUILD)" "1") +else() + vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/libheif/heif_library.h" "!defined(LIBHEIF_STATIC_BUILD)" "0") +endif() + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share") +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/lib/libheif" "${CURRENT_PACKAGES_DIR}/debug/lib/libheif") + +file(GLOB maybe_plugins "${CURRENT_PACKAGES_DIR}/plugins/libheif/*") +if(maybe_plugins STREQUAL "") + file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/plugins" "${CURRENT_PACKAGES_DIR}/debug/plugins") +endif() + +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYING") diff --git a/vcpkg/ports/libheif/symbol-exports.diff b/vcpkg/ports/libheif/symbol-exports.diff new file mode 100644 index 0000000..470148f --- /dev/null +++ b/vcpkg/ports/libheif/symbol-exports.diff @@ -0,0 +1,57 @@ +diff --git a/heifio/CMakeLists.txt b/heifio/CMakeLists.txt +index 920eeca..753bda1 100644 +--- a/heifio/CMakeLists.txt ++++ b/heifio/CMakeLists.txt +@@ -20,10 +20,7 @@ set_target_properties(heifio + VERSION ${PROJECT_VERSION}) + + +-target_compile_definitions(heifio +- PUBLIC +- LIBHEIF_EXPORTS +- HAVE_VISIBILITY) ++# static lib, not changing visibility + + find_package(TIFF) + if (TIFF_FOUND) +diff --git a/libheif/CMakeLists.txt b/libheif/CMakeLists.txt +index 55d6313..2229992 100644 +--- a/libheif/CMakeLists.txt ++++ b/libheif/CMakeLists.txt +@@ -232,10 +232,13 @@ if (BUILD_FRAMEWORK) + MACOSX_RPATH TRUE) + endif() + +-target_compile_definitions(heif +- PUBLIC +- LIBHEIF_EXPORTS +- HAVE_VISIBILITY) ++target_compile_definitions(heif PRIVATE LIBHEIF_EXPORTS) ++if(NOT BUILD_SHARED_LIBS) ++ target_compile_definitions(heif PUBLIC LIBHEIF_STATIC_BUILD) ++endif() ++if(WITH_REDUCED_VISIBILITY AND NOT MSVC) ++ target_compile_definitions(heif PRIVATE HAVE_VISIBILITY) ++endif() + + if (PLUGIN_LOADING_SUPPORTED_AND_ENABLED) + target_compile_definitions(heif PRIVATE ENABLE_PLUGIN_LOADING=1) +diff --git a/libheif/plugins/CMakeLists.txt b/libheif/plugins/CMakeLists.txt +index f7379c0..c8a3245 100644 +--- a/libheif/plugins/CMakeLists.txt ++++ b/libheif/plugins/CMakeLists.txt +@@ -13,10 +13,10 @@ macro(plugin_compilation name varName foundName optionName defineName) + VERSION ${PROJECT_VERSION} + SOVERSION ${PROJECT_VERSION_MAJOR}) + endif () +- target_compile_definitions(heif-${name} +- PUBLIC +- LIBHEIF_EXPORTS +- HAVE_VISIBILITY) ++ target_compile_definitions(heif-${name} PRIVATE LIBHEIF_EXPORTS) ++ if(WITH_REDUCED_VISIBILITY AND NOT MSVC) ++ target_compile_definitions(heif-${name} PRIVATE HAVE_VISIBILITY) ++ endif() + target_compile_definitions(heif-${name} PRIVATE PLUGIN_${defineName}=1) + target_include_directories(heif-${name} PRIVATE ${PROJECT_SOURCE_DIR} ${libheif_BINARY_DIR} ${libheif_SOURCE_DIR}/libheif ${libheif_SOURCE_DIR}/libheif/api ${${varName}_INCLUDE_DIRS}) + target_link_libraries(heif-${name} PRIVATE ${${varName}_LIBRARIES} heif) diff --git a/vcpkg/ports/libheif/vcpkg.json b/vcpkg/ports/libheif/vcpkg.json new file mode 100644 index 0000000..9bf1b45 --- /dev/null +++ b/vcpkg/ports/libheif/vcpkg.json @@ -0,0 +1,66 @@ +{ + "name": "libheif", + "version": "1.20.2", + "description": "libheif is an HEIF and AVIF file format decoder and encoder.", + "homepage": "http://www.libheif.org/", + "license": "LGPL-3.0-only", + "supports": "!xbox", + "dependencies": [ + "libde265", + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + } + ], + "default-features": [ + "hevc" + ], + "features": { + "aom": { + "description": "AVIF decoding and encoding via aom", + "license": "BSD-2-Clause", + "dependencies": [ + "aom" + ] + }, + "gdk-pixbuf": { + "description": "Plugin for gdk-pixbuf", + "supports": "!windows | mingw", + "dependencies": [ + "gdk-pixbuf" + ] + }, + "hevc": { + "description": "HEVC encoding via x265", + "license": "GPL-2.0-or-later", + "dependencies": [ + "x265" + ] + }, + "iso23001-17": { + "description": "Support for ISO23001-17 (uncompressed) codec (experimental)", + "license": "LGPL-3.0-only", + "dependencies": [ + "zlib" + ] + }, + "jpeg": { + "description": "JPEG decoding and encoding via libjpeg-turbo", + "license": "BSD-3-Clause", + "dependencies": [ + "libjpeg-turbo" + ] + }, + "openjpeg": { + "description": "JPEG-2000 decoding and encoding via OpenJPEG", + "license": "BSD-2-Clause", + "dependencies": [ + "openjpeg" + ] + } + } +} |