aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/libheif
diff options
context:
space:
mode:
Diffstat (limited to 'vcpkg/ports/libheif')
-rw-r--r--vcpkg/ports/libheif/cmake-project-include.cmake7
-rw-r--r--vcpkg/ports/libheif/cxx-linkage-pkgconfig.diff29
-rw-r--r--vcpkg/ports/libheif/find-modules.diff38
-rw-r--r--vcpkg/ports/libheif/gdk-pixbuf.patch28
-rw-r--r--vcpkg/ports/libheif/portfile.cmake83
-rw-r--r--vcpkg/ports/libheif/symbol-exports.diff57
-rw-r--r--vcpkg/ports/libheif/vcpkg.json66
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"
+ ]
+ }
+ }
+}