aboutsummaryrefslogtreecommitdiff
path: root/vcpkg-ports/libpng
diff options
context:
space:
mode:
Diffstat (limited to 'vcpkg-ports/libpng')
-rw-r--r--vcpkg-ports/libpng/cmake.patch27
-rw-r--r--vcpkg-ports/libpng/fix-export-targets.patch17
-rw-r--r--vcpkg-ports/libpng/fix-msa-support-for-mips.patch25
-rw-r--r--vcpkg-ports/libpng/macos-arch-fix.patch62
-rw-r--r--vcpkg-ports/libpng/pkgconfig.patch32
-rw-r--r--vcpkg-ports/libpng/portfile.cmake103
-rw-r--r--vcpkg-ports/libpng/usage4
-rw-r--r--vcpkg-ports/libpng/use_abort.patch17
-rw-r--r--vcpkg-ports/libpng/vcpkg-cmake-wrapper.cmake3
-rw-r--r--vcpkg-ports/libpng/vcpkg.json24
10 files changed, 314 insertions, 0 deletions
diff --git a/vcpkg-ports/libpng/cmake.patch b/vcpkg-ports/libpng/cmake.patch
new file mode 100644
index 00000000..f8cd527f
--- /dev/null
+++ b/vcpkg-ports/libpng/cmake.patch
@@ -0,0 +1,27 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index a8e5100..0ccac52 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -40,11 +40,11 @@ option(PNG_BUILD_ZLIB "Custom zlib Location, else find_package is used" OFF)
+
+ if(NOT PNG_BUILD_ZLIB)
+ find_package(ZLIB REQUIRED)
+- include_directories(${ZLIB_INCLUDE_DIR})
++ set(ZLIB_LIBRARY ZLIB::ZLIB)
+ endif()
+
+ if(UNIX AND NOT APPLE AND NOT BEOS AND NOT HAIKU)
+- find_library(M_LIBRARY m)
++ set(M_LIBRARY m)
+ else()
+ # libm is not needed and/or not available
+ set(M_LIBRARY "")
+@@ -557,7 +557,7 @@ if(PNG_STATIC)
+ # MSVC doesn't use a different file extension for shared vs. static
+ # libs. We are able to change OUTPUT_NAME to remove the _static
+ # for all other platforms.
+- if(NOT MSVC)
++ if(1)
+ set_target_properties(png_static PROPERTIES
+ OUTPUT_NAME "${PNG_LIB_NAME}"
+ CLEAN_DIRECT_OUTPUT 1)
diff --git a/vcpkg-ports/libpng/fix-export-targets.patch b/vcpkg-ports/libpng/fix-export-targets.patch
new file mode 100644
index 00000000..23812c26
--- /dev/null
+++ b/vcpkg-ports/libpng/fix-export-targets.patch
@@ -0,0 +1,17 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 3931f12..b570fa8 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -909,6 +909,12 @@ endif()
+ # Create an export file that CMake users can include() to import our targets.
+ if(NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL)
+ install(EXPORT libpng DESTINATION lib/libpng FILE lib${PNG_LIB_NAME}.cmake)
++ file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/libpng-config.cmake" "
++include(CMakeFindDependencyMacro)
++find_dependency(ZLIB)
++include(\"\${CMAKE_CURRENT_LIST_DIR}/lib${PNG_LIB_NAME}.cmake\")
++")
++ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libpng-config.cmake" DESTINATION "${CMAKE_INSTALL_LIBDIR}/libpng")
+ endif()
+
+ # what's with libpng-manual.txt and all the extra files?
diff --git a/vcpkg-ports/libpng/fix-msa-support-for-mips.patch b/vcpkg-ports/libpng/fix-msa-support-for-mips.patch
new file mode 100644
index 00000000..b3290a0f
--- /dev/null
+++ b/vcpkg-ports/libpng/fix-msa-support-for-mips.patch
@@ -0,0 +1,25 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6c1d632..a2a0d0d 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -158,8 +158,8 @@ endif()
+ # set definitions and sources for MIPS
+ if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR
+ CMAKE_SYSTEM_PROCESSOR MATCHES "mips64el*")
+- set(PNG_MIPS_MSA_POSSIBLE_VALUES on off)
+- set(PNG_MIPS_MSA "on" CACHE STRING "Enable MIPS_MSA optimizations:
++ set(PNG_MIPS_MSA_POSSIBLE_VALUES on off check)
++ set(PNG_MIPS_MSA "check" CACHE STRING "Enable MIPS_MSA optimizations:
+ off: disable the optimizations")
+ set_property(CACHE PNG_MIPS_MSA PROPERTY STRINGS
+ ${PNG_MIPS_MSA_POSSIBLE_VALUES})
+@@ -173,6 +173,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR
+ mips/filter_msa_intrinsics.c)
+ if(${PNG_MIPS_MSA} STREQUAL "on")
+ add_definitions(-DPNG_MIPS_MSA_OPT=2)
++ else()
++ add_definitions(-DPNG_MIPS_MSA_CHECK_SUPPORTED)
+ endif()
+ else()
+ add_definitions(-DPNG_MIPS_MSA_OPT=0)
+ \ No newline at end of file
diff --git a/vcpkg-ports/libpng/macos-arch-fix.patch b/vcpkg-ports/libpng/macos-arch-fix.patch
new file mode 100644
index 00000000..5dd63769
--- /dev/null
+++ b/vcpkg-ports/libpng/macos-arch-fix.patch
@@ -0,0 +1,62 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6451fcf1b..dbd5016ca 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -63,11 +63,22 @@ option(PNG_HARDWARE_OPTIMIZATIONS "Enable hardware optimizations" ON)
+ set(PNG_PREFIX "" CACHE STRING "Prefix to add to the API function names")
+ set(DFA_XTRA "" CACHE FILEPATH "File containing extra configuration settings")
+
++# CMake currently sets CMAKE_SYSTEM_PROCESSOR to one of x86_64 or arm64 on macOS,
++# based upon the OS architecture, not the target architecture. As such, we need
++# to check CMAKE_OSX_ARCHITECTURES to identify which hardware-specific flags to
++# enable. Note that this will fail if you attempt to build a universal binary in
++# a single cmake invokation.
++if (APPLE AND CMAKE_OSX_ARCHITECTURES)
++ set(TARGET_ARCH ${CMAKE_OSX_ARCHITECTURES})
++else()
++ set(TARGET_ARCH ${CMAKE_SYSTEM_PROCESSOR})
++endif()
++
+ if(PNG_HARDWARE_OPTIMIZATIONS)
+
+ # set definitions and sources for arm
+-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR
+- CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64")
++if(TARGET_ARCH MATCHES "^arm" OR
++ TARGET_ARCH MATCHES "^aarch64")
+ set(PNG_ARM_NEON_POSSIBLE_VALUES check on off)
+ set(PNG_ARM_NEON "check" CACHE STRING "Enable ARM NEON optimizations:
+ check: (default) use internal checking code;
+@@ -121,8 +132,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR
+ endif()
+
+ # set definitions and sources for intel
+-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR
+- CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*")
++if(TARGET_ARCH MATCHES "^i?86" OR
++ TARGET_ARCH MATCHES "^x86_64*")
+ set(PNG_INTEL_SSE_POSSIBLE_VALUES on off)
+ set(PNG_INTEL_SSE "on" CACHE STRING "Enable INTEL_SSE optimizations:
+ off: disable the optimizations")
+@@ -171,8 +182,8 @@ endif()
+ else(PNG_HARDWARE_OPTIMIZATIONS)
+
+ # set definitions and sources for arm
+-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR
+- CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64")
++if(TARGET_ARCH MATCHES "^arm" OR
++ TARGET_ARCH MATCHES "^aarch64")
+ add_definitions(-DPNG_ARM_NEON_OPT=0)
+ endif()
+
+@@ -183,8 +194,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR
+ endif()
+
+ # set definitions and sources for intel
+-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR
+- CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*")
++if(TARGET_ARCH MATCHES "^i?86" OR
++ TARGET_ARCH MATCHES "^x86_64")
+ add_definitions(-DPNG_INTEL_SSE_OPT=0)
+ endif()
+
diff --git a/vcpkg-ports/libpng/pkgconfig.patch b/vcpkg-ports/libpng/pkgconfig.patch
new file mode 100644
index 00000000..437c8683
--- /dev/null
+++ b/vcpkg-ports/libpng/pkgconfig.patch
@@ -0,0 +1,32 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 0ccac52..218747a 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -820,12 +820,15 @@ endif()
+ # We use the same files like ./configure, so we have to set its vars.
+ # Only do this on Windows for Cygwin - the files don't make much sense outside
+ # of a UNIX look-alike.
+-if(NOT WIN32 OR CYGWIN OR MINGW)
++if(1)
+ set(prefix ${CMAKE_INSTALL_PREFIX})
+ set(exec_prefix ${CMAKE_INSTALL_PREFIX})
+ set(libdir ${CMAKE_INSTALL_FULL_LIBDIR})
+ set(includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR})
+- set(LIBS "-lz -lm")
++ set(LIBS "")
++ if(M_LIBRARY)
++ string(APPEND LIBS "-lm")
++ endif()
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc @ONLY)
+ create_symlink(libpng.pc FILE ${PNGLIB_NAME}.pc)
+@@ -894,6 +897,9 @@ if(NOT SKIP_INSTALL_PROGRAMS AND NOT SKIP_INSTALL_ALL)
+ endif()
+
+ if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL)
++ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc
++ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
++elseif(0)
+ # Install man pages
+ if(NOT PNG_MAN_DIR)
+ set(PNG_MAN_DIR "share/man")
diff --git a/vcpkg-ports/libpng/portfile.cmake b/vcpkg-ports/libpng/portfile.cmake
new file mode 100644
index 00000000..7f681a91
--- /dev/null
+++ b/vcpkg-ports/libpng/portfile.cmake
@@ -0,0 +1,103 @@
+set(LIBPNG_VER 1.6.37)
+
+# Download the apng patch
+set(LIBPNG_APNG_PATCH_PATH "")
+set(LIBPNG_APNG_OPTION "")
+if ("apng" IN_LIST FEATURES)
+ if(VCPKG_HOST_IS_WINDOWS)
+ # Get (g)awk and gzip installed
+ vcpkg_acquire_msys(MSYS_ROOT PACKAGES gawk gzip)
+ set(AWK_EXE_PATH "${MSYS_ROOT}/usr/bin")
+ vcpkg_add_to_path("${AWK_EXE_PATH}")
+ endif()
+
+ set(LIBPNG_APNG_PATCH_NAME "libpng-${LIBPNG_VER}-apng.patch")
+ vcpkg_download_distfile(LIBPNG_APNG_PATCH_ARCHIVE
+ URLS "https://downloads.sourceforge.net/project/libpng-apng/libpng16/${LIBPNG_VER}/${LIBPNG_APNG_PATCH_NAME}.gz"
+ FILENAME "${LIBPNG_APNG_PATCH_NAME}.gz"
+ SHA512 226adcb3a8c60f2267fe2976ab531329ae43c2603dab4d0cf8f16217d64069936b879f3d6516b75d259c47d6f5c5b1f24f887602206c8e46abde0fb7f5c7946b
+ )
+ set(LIBPNG_APNG_PATCH_PATH "${CURRENT_BUILDTREES_DIR}/src/${LIBPNG_APNG_PATCH_NAME}")
+ if (NOT EXISTS "${LIBPNG_APNG_PATCH_PATH}")
+ file(INSTALL "${LIBPNG_APNG_PATCH_ARCHIVE}" DESTINATION "${CURRENT_BUILDTREES_DIR}/src")
+ vcpkg_execute_required_process(
+ COMMAND gzip -d "${LIBPNG_APNG_PATCH_NAME}.gz"
+ WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/src"
+ ALLOW_IN_DOWNLOAD_MODE
+ LOGNAME extract-patch.log
+ )
+ endif()
+ set(LIBPNG_APNG_OPTION "-DPNG_PREFIX=a")
+endif()
+
+vcpkg_from_github(
+ OUT_SOURCE_PATH SOURCE_PATH
+ REPO glennrp/libpng
+ REF v${LIBPNG_VER}
+ SHA512 ccb3705c23b2724e86d072e2ac8cfc380f41fadfd6977a248d588a8ad57b6abe0e4155e525243011f245e98d9b7afbe2e8cc7fd4ff7d82fcefb40c0f48f88918
+ HEAD_REF master
+ PATCHES
+ "${LIBPNG_APNG_PATCH_PATH}"
+ use_abort.patch
+ cmake.patch
+ fix-export-targets.patch
+ pkgconfig.patch
+ macos-arch-fix.patch
+ fix-msa-support-for-mips.patch
+)
+
+string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "dynamic" PNG_SHARED)
+string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" PNG_STATIC)
+
+vcpkg_list(SET LIBPNG_HARDWARE_OPTIMIZATIONS_OPTION)
+if(VCPKG_TARGET_IS_IOS)
+ vcpkg_list(APPEND LIBPNG_HARDWARE_OPTIMIZATIONS_OPTION "-DPNG_HARDWARE_OPTIMIZATIONS=OFF")
+endif()
+
+vcpkg_list(SET LD_VERSION_SCRIPT_OPTION)
+if(VCPKG_TARGET_IS_ANDROID)
+ vcpkg_list(APPEND LD_VERSION_SCRIPT_OPTION "-Dld-version-script=OFF")
+ # for armeabi-v7a, check whether NEON is available
+ vcpkg_list(APPEND LIBPNG_HARDWARE_OPTIMIZATIONS_OPTION "-DPNG_ARM_NEON=check")
+else()
+ vcpkg_list(APPEND LIBPNG_HARDWARE_OPTIMIZATIONS_OPTION "-DPNG_ARM_NEON=on")
+endif()
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${SOURCE_PATH}"
+ OPTIONS
+ ${LIBPNG_APNG_OPTION}
+ ${LIBPNG_HARDWARE_OPTIMIZATIONS_OPTION}
+ ${LD_VERSION_SCRIPT_OPTION}
+ -DPNG_STATIC=${PNG_STATIC}
+ -DPNG_SHARED=${PNG_SHARED}
+ -DPNG_TESTS=OFF
+ -DSKIP_INSTALL_PROGRAMS=ON
+ -DSKIP_INSTALL_EXECUTABLES=ON
+ -DSKIP_INSTALL_FILES=OFF
+ OPTIONS_DEBUG
+ -DSKIP_INSTALL_HEADERS=ON
+ MAYBE_UNUSED_VARIABLES
+ PNG_ARM_NEON
+)
+vcpkg_cmake_install()
+vcpkg_cmake_config_fixup(CONFIG_PATH lib/libpng)
+file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/png")
+
+vcpkg_fixup_pkgconfig()
+if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
+ if(NOT VCPKG_BUILD_TYPE)
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/libpng16.pc" "-lpng16" "-llibpng16d")
+ file(INSTALL "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/libpng16.pc" DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig" RENAME "libpng.pc")
+ endif()
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/lib/pkgconfig/libpng16.pc" "-lpng16" "-llibpng16")
+elseif(NOT VCPKG_BUILD_TYPE)
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/libpng16.pc" "-lpng16" "-lpng16d")
+ file(INSTALL "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/libpng16.pc" DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig" RENAME "libpng.pc")
+endif()
+file(INSTALL "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/libpng16.pc" DESTINATION "${CURRENT_PACKAGES_DIR}/lib/pkgconfig" RENAME "libpng.pc")
+
+vcpkg_copy_pdbs()
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share")
+file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
+file(INSTALL "${SOURCE_PATH}/LICENSE" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
diff --git a/vcpkg-ports/libpng/usage b/vcpkg-ports/libpng/usage
new file mode 100644
index 00000000..85e57fae
--- /dev/null
+++ b/vcpkg-ports/libpng/usage
@@ -0,0 +1,4 @@
+The package libpng is compatible with built-in CMake targets:
+
+ find_package(PNG REQUIRED)
+ target_link_libraries(main PRIVATE PNG::PNG)
diff --git a/vcpkg-ports/libpng/use_abort.patch b/vcpkg-ports/libpng/use_abort.patch
new file mode 100644
index 00000000..c52df5c2
--- /dev/null
+++ b/vcpkg-ports/libpng/use_abort.patch
@@ -0,0 +1,17 @@
+diff --git a/pngpriv.h b/pngpriv.h
+index 583c26f..135651c 100644
+--- a/pngpriv.h
++++ b/pngpriv.h
+@@ -556,11 +556,7 @@
+
+ /* Memory model/platform independent fns */
+ #ifndef PNG_ABORT
+-# ifdef _WINDOWS_
+-# define PNG_ABORT() ExitProcess(0)
+-# else
+-# define PNG_ABORT() abort()
+-# endif
++# define PNG_ABORT() abort()
+ #endif
+
+ /* These macros may need to be architecture dependent. */
diff --git a/vcpkg-ports/libpng/vcpkg-cmake-wrapper.cmake b/vcpkg-ports/libpng/vcpkg-cmake-wrapper.cmake
new file mode 100644
index 00000000..de1e087f
--- /dev/null
+++ b/vcpkg-ports/libpng/vcpkg-cmake-wrapper.cmake
@@ -0,0 +1,3 @@
+find_library(PNG_LIBRARY_RELEASE NAMES png16 libpng16 NAMES_PER_DIR PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib" NO_DEFAULT_PATH)
+find_library(PNG_LIBRARY_DEBUG NAMES png16d libpng16d NAMES_PER_DIR PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib" NO_DEFAULT_PATH)
+_find_package(${ARGS})
diff --git a/vcpkg-ports/libpng/vcpkg.json b/vcpkg-ports/libpng/vcpkg.json
new file mode 100644
index 00000000..74c0dbcb
--- /dev/null
+++ b/vcpkg-ports/libpng/vcpkg.json
@@ -0,0 +1,24 @@
+{
+ "name": "libpng",
+ "version": "1.6.37",
+ "port-version": 19,
+ "description": "libpng is a library implementing an interface for reading and writing PNG (Portable Network Graphics) format files",
+ "homepage": "https://github.com/glennrp/libpng",
+ "license": "libpng-2.0",
+ "dependencies": [
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ },
+ {
+ "name": "vcpkg-cmake-config",
+ "host": true
+ },
+ "zlib"
+ ],
+ "features": {
+ "apng": {
+ "description": "This is backward compatible with the regular libpng, both in library usage and format"
+ }
+ }
+}