From ea0e53a7f030b2fb5c0ecf1a82f6ed1d2b9ad670 Mon Sep 17 00:00:00 2001 From: Zacoh Date: Sat, 10 May 2025 15:57:20 +0800 Subject: [PATCH] IssueNo:https://gitee.com/openharmony/third_party_libpng/issues/I8T4WT Feature or Bugfix: Bugfix Binary Source:No Signed-off-by: guomengyu Signed-off-by: Zacoh --- BUILD.gn | 48 +- CVE-2018-14048.patch | 4 +- README | 2 +- README.OpenSource | 4 +- backport-libpng-1.6.37-enable-valid.patch | 22 +- huawei_libpng_CMakeList.patch | 845 ++++++++++++---------- install.py | 4 +- libpng-1.6.38.tar.gz | Bin 1523840 -> 0 bytes libpng-1.6.44.tar.gz | Bin 0 -> 1557770 bytes libpng-fix-arm-neon.patch | 9 +- libpng.spec | 13 +- 11 files changed, 538 insertions(+), 413 deletions(-) delete mode 100644 libpng-1.6.38.tar.gz create mode 100644 libpng-1.6.44.tar.gz diff --git a/BUILD.gn b/BUILD.gn index 8832c4d9a..e363891ea 100755 --- a/BUILD.gn +++ b/BUILD.gn @@ -5,27 +5,27 @@ import("//build/ohos.gni") action("libpng_action") { script = "//third_party/libpng/install.py" outputs = [ - "${target_gen_dir}/libpng-1.6.38/png.c", - "${target_gen_dir}/libpng-1.6.38/pngerror.c", - "${target_gen_dir}/libpng-1.6.38/pngget.c", - "${target_gen_dir}/libpng-1.6.38/pngmem.c", - "${target_gen_dir}/libpng-1.6.38/pngpread.c", - "${target_gen_dir}/libpng-1.6.38/pngread.c", - "${target_gen_dir}/libpng-1.6.38/pngrio.c", - "${target_gen_dir}/libpng-1.6.38/pngrtran.c", - "${target_gen_dir}/libpng-1.6.38/pngrutil.c", - "${target_gen_dir}/libpng-1.6.38/pngset.c", - "${target_gen_dir}/libpng-1.6.38/pngtrans.c", - "${target_gen_dir}/libpng-1.6.38/pngwio.c", - "${target_gen_dir}/libpng-1.6.38/pngwrite.c", - "${target_gen_dir}/libpng-1.6.38/pngwtran.c", - "${target_gen_dir}/libpng-1.6.38/pngwutil.c", - "${target_gen_dir}/libpng-1.6.38/arm/arm_init.c", - "${target_gen_dir}/libpng-1.6.38/arm/filter_neon_intrinsics.c", - "${target_gen_dir}/libpng-1.6.38/arm/palette_neon_intrinsics.c", + "${target_gen_dir}/libpng-1.6.44/png.c", + "${target_gen_dir}/libpng-1.6.44/pngerror.c", + "${target_gen_dir}/libpng-1.6.44/pngget.c", + "${target_gen_dir}/libpng-1.6.44/pngmem.c", + "${target_gen_dir}/libpng-1.6.44/pngpread.c", + "${target_gen_dir}/libpng-1.6.44/pngread.c", + "${target_gen_dir}/libpng-1.6.44/pngrio.c", + "${target_gen_dir}/libpng-1.6.44/pngrtran.c", + "${target_gen_dir}/libpng-1.6.44/pngrutil.c", + "${target_gen_dir}/libpng-1.6.44/pngset.c", + "${target_gen_dir}/libpng-1.6.44/pngtrans.c", + "${target_gen_dir}/libpng-1.6.44/pngwio.c", + "${target_gen_dir}/libpng-1.6.44/pngwrite.c", + "${target_gen_dir}/libpng-1.6.44/pngwtran.c", + "${target_gen_dir}/libpng-1.6.44/pngwutil.c", + "${target_gen_dir}/libpng-1.6.44/arm/arm_init.c", + "${target_gen_dir}/libpng-1.6.44/arm/filter_neon_intrinsics.c", + "${target_gen_dir}/libpng-1.6.44/arm/palette_neon_intrinsics.c", ] - inputs = [ "//third_party/libpng/libpng-1.6.38.tar.gz" ] + inputs = [ "//third_party/libpng/libpng-1.6.44.tar.gz" ] libpng_path = rebase_path("${target_gen_dir}", root_build_dir) libpng_source_path = rebase_path("//third_party/libpng", root_build_dir) args = [ @@ -40,7 +40,7 @@ if (defined(ohos_lite)) { import("//build/lite/config/component/lite_component.gni") config("libpng_config") { - include_dirs = [ "${target_gen_dir}/libpng-1.6.38/" ] + include_dirs = [ "${target_gen_dir}/libpng-1.6.44/" ] } libpng_source = get_target_outputs(":libpng_action") @@ -68,7 +68,7 @@ if (defined(ohos_lite)) { import("//build/ohos.gni") config("libpng_config") { - include_dirs = [ "${target_gen_dir}/libpng-1.6.38/" ] + include_dirs = [ "${target_gen_dir}/libpng-1.6.44/" ] } config("libpng_wno_config") { @@ -93,7 +93,7 @@ if (defined(ohos_lite)) { ohos_source_set("png_static") { sources = get_target_outputs(":libpng_action") - include_dirs = [ "${target_gen_dir}/libpng-1.6.38/" ] + include_dirs = [ "${target_gen_dir}/libpng-1.6.44/" ] external_deps = [ "zlib:libz" ] deps = [ ":libpng_action" ] public_configs = [ ":libpng_config" ] @@ -103,7 +103,7 @@ if (defined(ohos_lite)) { ohos_shared_library("libpng") { sources = get_target_outputs(":libpng_action") - include_dirs = [ "${target_gen_dir}/libpng-1.6.38/" ] + include_dirs = [ "${target_gen_dir}/libpng-1.6.44/" ] deps = [ ":libpng_action" ] if (is_arkui_x) { deps += [ "//third_party/zlib:libz" ] @@ -130,7 +130,7 @@ if (defined(ohos_lite)) { ohos_static_library("libpng_static") { sources = get_target_outputs(":libpng_action") - include_dirs = [ "${target_gen_dir}/libpng-1.6.38/" ] + include_dirs = [ "${target_gen_dir}/libpng-1.6.44/" ] deps = [ ":libpng_action" ] if (is_arkui_x) { deps += [ "//third_party/zlib:libz" ] diff --git a/CVE-2018-14048.patch b/CVE-2018-14048.patch index 46d4c196d..7555b36fd 100644 --- a/CVE-2018-14048.patch +++ b/CVE-2018-14048.patch @@ -2,7 +2,7 @@ diff --git a/contrib/pngminus/png2pnm.c b/contrib/pngminus/png2pnm.c index 5fef7ed14..5c8ff30f6 100644 --- a/contrib/pngminus/png2pnm.c +++ b/contrib/pngminus/png2pnm.c -@@ -208,6 +208,16 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, +@@ -193,6 +193,16 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_ if (setjmp (png_jmpbuf (png_ptr))) { png_destroy_read_struct (&png_ptr, &info_ptr, NULL); @@ -16,6 +16,6 @@ index 5fef7ed14..5c8ff30f6 100644 + free(png_pixels); + png_pixels = NULL; + } - return FALSE; + return FALSE; /* generic libpng error */ } diff --git a/README b/README index e6e72aa54..b65399d58 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -README for libpng version 1.6.38 +README for libpng version 1.6.44 ================================ See the note about version numbers near the top of png.h. diff --git a/README.OpenSource b/README.OpenSource index b47df841a..358d73399 100644 --- a/README.OpenSource +++ b/README.OpenSource @@ -3,9 +3,9 @@ "Name": "openEuler:libpng", "License": "libpng license", "License File": "LICENSE", - "Version Number": "1.6.38-2.oe2203sp3", + "Version Number": "1.6.44-1.oe2203sp1", "Owner": "shangzhi@huawei.com", - "Upstream URL": "https://repo.openeuler.org/openEuler-22.03-LTS-SP3/source/Packages/libpng-1.6.38-2.oe2203sp3.src.rpm", + "Upstream URL": "https://repo.openeuler.org/openEuler-22.03-LTS-SP3/source/Packages/libpng-1.6.44-1.oe2203sp1.src.rpm", "Description": "Reference library for supporting the Portable Network Graphics (PNG) format." } ] \ No newline at end of file diff --git a/backport-libpng-1.6.37-enable-valid.patch b/backport-libpng-1.6.37-enable-valid.patch index d6d4d9717..b2c2dbbc2 100644 --- a/backport-libpng-1.6.37-enable-valid.patch +++ b/backport-libpng-1.6.37-enable-valid.patch @@ -2,7 +2,7 @@ diff --git a/arm/arm_init.c b/arm/arm_init.c index ab22525b3..3a89998ab 100644 --- a/arm/arm_init.c +++ b/arm/arm_init.c -@@ -31,23 +31,21 @@ +@@ -31,26 +31,21 @@ * has partial support is contrib/arm-neon/linux.c - a generic Linux * implementation which reads /proc/cpufino. */ @@ -11,16 +11,19 @@ index ab22525b3..3a89998ab 100644 #ifndef PNG_ARM_NEON_FILE -# if defined(__aarch64__) || defined(_M_ARM64) - /* ARM Neon is expected to be unconditionally available on ARM64. */ --# error "PNG_ARM_NEON_CHECK_SUPPORTED must not be defined on this platform" +-# error "PNG_ARM_NEON_CHECK_SUPPORTED must not be defined on ARM64" +-# elif defined(__ARM_NEON__) || defined(__ARM_NEON) +- /* ARM Neon is expected to be available on the target CPU architecture. */ +-# error "PNG_ARM_NEON_CHECK_SUPPORTED must not be defined on this CPU arch" -# elif defined(__linux__) -# define PNG_ARM_NEON_FILE "contrib/arm-neon/linux.c" -# else -# error "No support for run-time ARM Neon checking; use compile-time options" -+# ifdef __linux__ -+# define PNG_ARM_NEON_FILE "contrib/arm-neon/linux.c" ++#ifdef __linux__ ++#define PNG_ARM_NEON_FILE "contrib/arm-neon/linux.c" # endif #endif - + -static int png_have_neon(png_structp png_ptr); #ifdef PNG_ARM_NEON_FILE -# include PNG_ARM_NEON_FILE @@ -34,7 +37,7 @@ index ab22525b3..3a89998ab 100644 +# error "PNG_ARM_NEON_FILE undefined: no support for run-time ARM NEON checks" +#endif /* PNG_ARM_NEON_FILE */ #endif /* PNG_ARM_NEON_CHECK_SUPPORTED */ - + #ifndef PNG_ALIGNED_MEMORY_SUPPORTED diff --git a/arm/palette_neon_intrinsics.c b/arm/palette_neon_intrinsics.c index 92c7d6f9f..49909d475 100644 @@ -157,13 +160,12 @@ diff --git a/pngset.c b/pngset.c index 8c372cf41..6444c0615 100644 --- a/pngset.c +++ b/pngset.c -@@ -1019,9 +1019,6 @@ png_set_tRNS(png_structrp png_ptr, png_inforp info_ptr, - info_ptr->trans_alpha = png_voidcast(png_bytep, +@@ -1008,8 +1008,6 @@ png_set_tRNS(png_structrp png_ptr, png_i png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH)); memcpy(info_ptr->trans_alpha, trans_alpha, (size_t)num_trans); -- -- info_ptr->valid |= PNG_INFO_tRNS; + - info_ptr->free_me |= PNG_FREE_TRNS; +- info_ptr->valid |= PNG_INFO_tRNS; } png_ptr->trans_alpha = info_ptr->trans_alpha; } diff --git a/huawei_libpng_CMakeList.patch b/huawei_libpng_CMakeList.patch index 0edf143d4..e82ab6796 100644 --- a/huawei_libpng_CMakeList.patch +++ b/huawei_libpng_CMakeList.patch @@ -1,125 +1,169 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 8652564b6..639554ad8 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -1,1040 +1,26 @@ --# CMakeLists.txt -- --# Copyright (c) 2018-2022 Cosmin Truta --# Copyright (c) 2007,2009-2018 Glenn Randers-Pehrson --# Written by Christian Ehrlicher, 2007 --# Revised by Roger Lowman, 2009-2010 --# Revised by Clifford Yapp, 2011-2012,2017 --# Revised by Roger Leigh, 2016 --# Revised by Andreas Franek, 2016 --# Revised by Sam Serrels, 2017 --# Revised by Vadim Barkov, 2017 --# Revised by Vicky Pfau, 2018 --# Revised by Cameron Cawley, 2018,2021 --# Revised by Kyle Bentley, 2018 --# Revised by David Callu, 2020 --# Revised by Steve Robinson, 2020 --# Revised by Simon Hausmann, 2020 --# Revised by Alex Gaynor, 2020 --# Revised by Owen Rudge, 2020 --# Revised by Gleb Mazovetskiy, 2021 --# Revised by Christopher Sean Morrison, 2022 -- --# This code is released under the libpng license. --# For conditions of distribution and use, see the disclaimer --# and license in png.h -- --cmake_minimum_required(VERSION 3.1) --cmake_policy(VERSION 3.1) -- --project(libpng C ASM) --enable_testing() -- +@@ -1,1162 +1,28 @@ + +-# CMakeLists.txt - CMake lists for libpng +-# +-# Copyright (c) 2018-2024 Cosmin Truta. +-# Copyright (c) 2007-2018 Glenn Randers-Pehrson. +-# Originally written by Christian Ehrlicher, 2007. +-# +-# Use, modification and distribution are subject to +-# the same licensing terms and conditions as libpng. +-# Please see the copyright notice in png.h or visit +-# http://libpng.org/pub/png/src/libpng-LICENSE.txt +-# +-# For copyright and licensing purposes, please see +-# the accompanying file scripts/cmake/AUTHORS.md +-# +-# SPDX-License-Identifier: libpng-2.0 ++cmake_minimum_required(VERSION 3.16.5) + +-cmake_minimum_required(VERSION 3.6) ++set(LibpngInc "${PROJECT_SOURCE_DIR}/third_party/libpng") ++set(LibpngSrc "${PROJECT_SOURCE_DIR}/third_party/libpng") + -set(PNGLIB_MAJOR 1) -set(PNGLIB_MINOR 6) --set(PNGLIB_REVISION 38) +-set(PNGLIB_REVISION 44) -set(PNGLIB_SUBREVISION 0) -#set(PNGLIB_SUBREVISION "git") --set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR}) -set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_REVISION}) --set(PNGLIB_SHARED_SOVERSION ${PNGLIB_MAJOR}${PNGLIB_MINOR}) --set(PNGLIB_SHARED_VERSION ${PNGLIB_SHARED_SOVERSION}.${PNGLIB_REVISION}.${PNGLIB_SUBREVISION}) +-set(PNGLIB_ABI_VERSION ${PNGLIB_MAJOR}${PNGLIB_MINOR}) +-set(PNGLIB_SHARED_VERSION ${PNGLIB_ABI_VERSION}.${PNGLIB_REVISION}.${PNGLIB_SUBREVISION}) - +-project(libpng +- VERSION ${PNGLIB_VERSION} +- LANGUAGES C ASM) +- +-if(POLICY CMP0074) +- # Allow find_package() to use the ZLIB_ROOT variable, if available. +- cmake_policy(SET CMP0074 NEW) +-endif() +- +-include(CheckCSourceCompiles) -include(GNUInstallDirs) - --# Allow users to specify location of zlib. --# Useful if zlib is being built alongside this as a sub-project. --option(PNG_BUILD_ZLIB "Custom zlib Location, else find_package is used" OFF) +-# Allow the users to specify an application-specific API prefix for libpng +-# vendoring purposes. A standard libpng build should have no such prefix. +-set(PNG_PREFIX "" +- CACHE STRING "Prefix to prepend to the API function names") - +-# Allow the users to override the postfix appended to debug library file names. +-# Previously, we used to set CMAKE_DEBUG_POSTFIX globally. That variable should +-# not be cached, however, because doing so would affect all projects processed +-# after libpng, in unexpected and undesirable ways. +-set(PNG_DEBUG_POSTFIX "d" +- CACHE STRING "Postfix to append to library file names under the Debug configuration") +- +-# Allow the users to import their own extra configuration settings. +-set(DFA_XTRA "" +- CACHE FILEPATH "File containing extra configuration settings") +- +-# Allow the users to switch on/off various library build types. +-option(PNG_SHARED "Build libpng as a shared library" ON) +-option(PNG_STATIC "Build libpng as a static library" ON) +-if(APPLE) +- option(PNG_FRAMEWORK "Build libpng as a framework bundle" ON) +-endif() +- +-# Allow the users to switch on/off the auxiliary build and test artifacts. +-# These artifacts are NOT part of libpng proper, and are subject to change +-# at any time. +-option(PNG_TESTS "Build the libpng tests" ON) +- +-# Same as above, but for the third-party tools. +-# Although these tools are targetted at development environments only, +-# the users are allowed to override the option to build by default. +-if (ANDROID OR IOS) +- option(PNG_TOOLS "Build the libpng tools" OFF) +-else() +- option(PNG_TOOLS "Build the libpng tools" ON) +-endif() +- +-# Maintain backwards compatibility with the deprecated option PNG_EXECUTABLES. +-option(PNG_EXECUTABLES "[Deprecated; please use PNG_TOOLS]" ON) +-if(NOT PNG_EXECUTABLES) +- message(DEPRECATION "The option PNG_EXECUTABLES has been deprecated in favour of PNG_TOOLS") +- if(PNG_TOOLS) +- message(AUTHOR_WARNING +- "Setting PNG_TOOLS to ${PNG_EXECUTABLES}, to stay compatible with PNG_EXECUTABLES") +- set(PNG_TOOLS "${PNG_EXECUTABLES}") +- endif() +-endif() +- +-# Allow the users to configure various compilation options. +-option(PNG_DEBUG "Enable debug output" OFF) +-option(PNG_HARDWARE_OPTIMIZATIONS "Enable hardware optimizations" ON) +- +-# Initialize and show the target architecture variable PNG_TARGET_ARCHITECTURE. +-# +-# NOTE: +-# On macOS, CMake sets CMAKE_SYSTEM_PROCESSOR to either "x86_64" or "arm64", +-# 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 invocation. +-if (APPLE AND CMAKE_OSX_ARCHITECTURES) +- string(TOLOWER "${CMAKE_OSX_ARCHITECTURES}" PNG_TARGET_ARCHITECTURE) +-else() +- string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" PNG_TARGET_ARCHITECTURE) +-endif() +-message(STATUS "Building for target architecture: ${PNG_TARGET_ARCHITECTURE}") +- +-# Allow the users to specify a custom location of zlib. +-# This option is deprecated, and no longer needed with CMake 3.12 and newer. +-# Under the CMake policy CMP0074, if zlib is being built alongside libpng as a +-# subproject, its location can be passed on to CMake via the ZLIB_ROOT variable. +-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_DIRS}) +-elseif(POLICY CMP0074) +- if("x${ZLIB_ROOT}" STREQUAL "x") +- message(DEPRECATION +- "The option PNG_BUILD_ZLIB has been deprecated; please use ZLIB_ROOT instead") +- else() +- message(SEND_ERROR +- "The option PNG_BUILD_ZLIB=${PNG_BUILD_ZLIB} and " +- "the variable ZLIB_ROOT=\"${ZLIB_ROOT}\" are mutually exclusive") +- endif() -endif() - -if(UNIX AND NOT APPLE AND NOT BEOS AND NOT HAIKU AND NOT EMSCRIPTEN) - find_library(M_LIBRARY m) -- if(NOT M_LIBRARY) +- if(M_LIBRARY) +- set(M_LIBRARY m) +- else() - set(M_LIBRARY "") - endif() -else() -- # libm is not needed and/or not available. -- set(M_LIBRARY "") --endif() -- --# Public CMake configuration variables. --option(PNG_SHARED "Build shared lib" ON) --option(PNG_STATIC "Build static lib" ON) --option(PNG_EXECUTABLES "Build libpng executables" ON) --option(PNG_TESTS "Build libpng tests" ON) -- --# Many more configuration options could be added here. --option(PNG_FRAMEWORK "Build OS X framework" OFF) --option(PNG_DEBUG "Build with debug output" OFF) --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 invocation. --if (APPLE AND CMAKE_OSX_ARCHITECTURES) -- set(TARGET_ARCH ${CMAKE_OSX_ARCHITECTURES}) --else() -- set(TARGET_ARCH ${CMAKE_SYSTEM_PROCESSOR}) +- # libm is not available or not needed. -endif() - -if(PNG_HARDWARE_OPTIMIZATIONS) - -# Set definitions and sources for ARM. --if(TARGET_ARCH MATCHES "^arm" OR -- TARGET_ARCH MATCHES "^aarch64") -- if(TARGET_ARCH MATCHES "^arm64" OR -- TARGET_ARCH MATCHES "^aarch64") +-if(PNG_TARGET_ARCHITECTURE MATCHES "^(arm|aarch)") +- if(PNG_TARGET_ARCHITECTURE MATCHES "^(arm64|aarch64)") - set(PNG_ARM_NEON_POSSIBLE_VALUES on off) - set(PNG_ARM_NEON "on" - CACHE STRING "Enable ARM NEON optimizations: on|off; on is default") - else() - set(PNG_ARM_NEON_POSSIBLE_VALUES check on off) -- set(PNG_ARM_NEON "check" -- CACHE STRING "Enable ARM NEON optimizations: check|on|off; check is default") +- set(PNG_ARM_NEON "off" +- CACHE STRING "Enable ARM NEON optimizations: check|on|off; off is default") - endif() - set_property(CACHE PNG_ARM_NEON - PROPERTY STRINGS ${PNG_ARM_NEON_POSSIBLE_VALUES}) - list(FIND PNG_ARM_NEON_POSSIBLE_VALUES ${PNG_ARM_NEON} index) - if(index EQUAL -1) - message(FATAL_ERROR "PNG_ARM_NEON must be one of [${PNG_ARM_NEON_POSSIBLE_VALUES}]") -- elseif(NOT ${PNG_ARM_NEON} STREQUAL "off") +- elseif(NOT PNG_ARM_NEON STREQUAL "off") - set(libpng_arm_sources - arm/arm_init.c -- arm/filter_neon.S - arm/filter_neon_intrinsics.c - arm/palette_neon_intrinsics.c) -- if(${PNG_ARM_NEON} STREQUAL "on") +- if(PNG_ARM_NEON STREQUAL "on") - add_definitions(-DPNG_ARM_NEON_OPT=2) -- elseif(${PNG_ARM_NEON} STREQUAL "check") +- elseif(PNG_ARM_NEON STREQUAL "check") - add_definitions(-DPNG_ARM_NEON_CHECK_SUPPORTED) - endif() - else() @@ -128,8 +172,7 @@ index 8652564b6..639554ad8 100644 -endif() - -# Set definitions and sources for PowerPC. --if(TARGET_ARCH MATCHES "^powerpc*" OR -- TARGET_ARCH MATCHES "^ppc64*") +-if(PNG_TARGET_ARCHITECTURE MATCHES "^(powerpc|ppc64)") - set(PNG_POWERPC_VSX_POSSIBLE_VALUES on off) - set(PNG_POWERPC_VSX "on" - CACHE STRING "Enable POWERPC VSX optimizations: on|off; on is default") @@ -138,11 +181,11 @@ index 8652564b6..639554ad8 100644 - list(FIND PNG_POWERPC_VSX_POSSIBLE_VALUES ${PNG_POWERPC_VSX} index) - if(index EQUAL -1) - message(FATAL_ERROR "PNG_POWERPC_VSX must be one of [${PNG_POWERPC_VSX_POSSIBLE_VALUES}]") -- elseif(NOT ${PNG_POWERPC_VSX} STREQUAL "off") +- elseif(NOT PNG_POWERPC_VSX STREQUAL "off") - set(libpng_powerpc_sources - powerpc/powerpc_init.c - powerpc/filter_vsx_intrinsics.c) -- if(${PNG_POWERPC_VSX} STREQUAL "on") +- if(PNG_POWERPC_VSX STREQUAL "on") - add_definitions(-DPNG_POWERPC_VSX_OPT=2) - endif() - else() @@ -151,8 +194,7 @@ index 8652564b6..639554ad8 100644 -endif() - -# Set definitions and sources for Intel. --if(TARGET_ARCH MATCHES "^i?86" OR -- TARGET_ARCH MATCHES "^x86_64*") +-if(PNG_TARGET_ARCHITECTURE MATCHES "^(i[3-6]86|x86|amd64)") - set(PNG_INTEL_SSE_POSSIBLE_VALUES on off) - set(PNG_INTEL_SSE "on" - CACHE STRING "Enable INTEL_SSE optimizations: on|off; on is default") @@ -161,11 +203,11 @@ index 8652564b6..639554ad8 100644 - list(FIND PNG_INTEL_SSE_POSSIBLE_VALUES ${PNG_INTEL_SSE} index) - if(index EQUAL -1) - message(FATAL_ERROR "PNG_INTEL_SSE must be one of [${PNG_INTEL_SSE_POSSIBLE_VALUES}]") -- elseif(NOT ${PNG_INTEL_SSE} STREQUAL "off") +- elseif(NOT PNG_INTEL_SSE STREQUAL "off") - set(libpng_intel_sources - intel/intel_init.c - intel/filter_sse2_intrinsics.c) -- if(${PNG_INTEL_SSE} STREQUAL "on") +- if(PNG_INTEL_SSE STREQUAL "on") - add_definitions(-DPNG_INTEL_SSE_OPT=1) - endif() - else() @@ -174,138 +216,162 @@ index 8652564b6..639554ad8 100644 -endif() - -# Set definitions and sources for MIPS. --if(TARGET_ARCH MATCHES "mipsel*" OR -- TARGET_ARCH MATCHES "mips64el*") +-if(PNG_TARGET_ARCHITECTURE MATCHES "^(mipsel|mips64el)") - set(PNG_MIPS_MSA_POSSIBLE_VALUES on off) - set(PNG_MIPS_MSA "on" - CACHE STRING "Enable MIPS_MSA optimizations: on|off; on is default") - set_property(CACHE PNG_MIPS_MSA - PROPERTY STRINGS ${PNG_MIPS_MSA_POSSIBLE_VALUES}) -- list(FIND PNG_MIPS_MSA_POSSIBLE_VALUES ${PNG_MIPS_MSA} index) -- if(index EQUAL -1) +- list(FIND PNG_MIPS_MSA_POSSIBLE_VALUES ${PNG_MIPS_MSA} index_msa) +- if(index_msa EQUAL -1) - message(FATAL_ERROR "PNG_MIPS_MSA must be one of [${PNG_MIPS_MSA_POSSIBLE_VALUES}]") -- elseif(NOT ${PNG_MIPS_MSA} STREQUAL "off") +- endif() +- +- set(PNG_MIPS_MMI_POSSIBLE_VALUES on off) +- set(PNG_MIPS_MMI "on" +- CACHE STRING "Enable MIPS_MMI optimizations: on|off; on is default") +- set_property(CACHE PNG_MIPS_MMI +- PROPERTY STRINGS ${PNG_MIPS_MMI_POSSIBLE_VALUES}) +- list(FIND PNG_MIPS_MMI_POSSIBLE_VALUES ${PNG_MIPS_MMI} index_mmi) +- if(index_mmi EQUAL -1) +- message(FATAL_ERROR "PNG_MIPS_MMI must be one of [${PNG_MIPS_MMI_POSSIBLE_VALUES}]") +- endif() +- +- if(PNG_MIPS_MSA STREQUAL "on" AND PNG_MIPS_MMI STREQUAL "on") +- set(libpng_mips_sources +- mips/mips_init.c +- mips/filter_msa_intrinsics.c +- mips/filter_mmi_inline_assembly.c) +- add_definitions(-DPNG_MIPS_MSA_OPT=2) +- add_definitions(-DPNG_MIPS_MMI_OPT=1) +- elseif(PNG_MIPS_MSA STREQUAL "on") - set(libpng_mips_sources - mips/mips_init.c - mips/filter_msa_intrinsics.c) -- if(${PNG_MIPS_MSA} STREQUAL "on") -- add_definitions(-DPNG_MIPS_MSA_OPT=2) +- add_definitions(-DPNG_MIPS_MSA_OPT=2) +- add_definitions(-DPNG_MIPS_MMI_OPT=0) +- elseif(PNG_MIPS_MMI STREQUAL "on") +- set(libpng_mips_sources +- mips/mips_init.c +- mips/filter_mmi_inline_assembly.c) +- add_definitions(-DPNG_MIPS_MSA_OPT=0) +- add_definitions(-DPNG_MIPS_MMI_OPT=1) +- else() +- add_definitions(-DPNG_MIPS_MSA_OPT=0) +- add_definitions(-DPNG_MIPS_MMI_OPT=0) +- endif() +-endif() +- +-# Set definitions and sources for LoongArch. +-if(PNG_TARGET_ARCHITECTURE MATCHES "^(loongarch)") +- include(CheckCCompilerFlag) +- set(PNG_LOONGARCH_LSX_POSSIBLE_VALUES on off) +- set(PNG_LOONGARCH_LSX "on" +- CACHE STRING "Enable LOONGARCH_LSX optimizations: on|off; on is default") +- set_property(CACHE PNG_LOONGARCH_LSX +- PROPERTY STRINGS ${PNG_LOONGARCH_LSX_POSSIBLE_VALUES}) +- list(FIND PNG_LOONGARCH_LSX_POSSIBLE_VALUES ${PNG_LOONGARCH_LSX} index) +- if(index EQUAL -1) +- message(FATAL_ERROR "PNG_LOONGARCH_LSX must be one of [${PNG_LOONGARCH_LSX_POSSIBLE_VALUES}]") +- elseif(NOT PNG_LOONGARCH_LSX STREQUAL "off") +- CHECK_C_COMPILER_FLAG("-mlsx" COMPILER_SUPPORTS_LSX) +- if(COMPILER_SUPPORTS_LSX) +- set(libpng_loongarch_sources +- loongarch/loongarch_lsx_init.c +- loongarch/filter_lsx_intrinsics.c) +- set_source_files_properties(${libpng_loongarch_sources} +- PROPERTIES +- COMPILE_FLAGS "-mlsx") +- add_definitions(-DPNG_LOONGARCH_LSX_OPT=1) +- else() +- message(FATAL_ERROR "Compiler does not support -mlsx option") - endif() - else() -- add_definitions(-DPNG_MIPS_MSA_OPT=0) +- add_definitions(-DPNG_LOONGARCH_LSX_OPT=0) - endif() -endif() - -else(PNG_HARDWARE_OPTIMIZATIONS) - -# Set definitions and sources for ARM. --if(TARGET_ARCH MATCHES "^arm" OR -- TARGET_ARCH MATCHES "^aarch64") +-if(PNG_TARGET_ARCHITECTURE MATCHES "^(arm|aarch)") - add_definitions(-DPNG_ARM_NEON_OPT=0) -endif() - -# Set definitions and sources for PowerPC. --if(TARGET_ARCH MATCHES "^powerpc*" OR -- TARGET_ARCH MATCHES "^ppc64*") +-if(PNG_TARGET_ARCHITECTURE MATCHES "^(powerpc|ppc64)") - add_definitions(-DPNG_POWERPC_VSX_OPT=0) -endif() - -# Set definitions and sources for Intel. --if(TARGET_ARCH MATCHES "^i?86" OR -- TARGET_ARCH MATCHES "^x86_64*") +-if(PNG_TARGET_ARCHITECTURE MATCHES "^(i[3-6]86|x86|amd64)") - add_definitions(-DPNG_INTEL_SSE_OPT=0) -endif() - -# Set definitions and sources for MIPS. --if(TARGET_ARCH MATCHES "mipsel*" OR -- TARGET_ARCH MATCHES "mips64el*") +-if(PNG_TARGET_ARCHITECTURE MATCHES "^(mipsel|mips64el)") - add_definitions(-DPNG_MIPS_MSA_OPT=0) -endif() - +-# Set definitions and sources for LoongArch. +-if(PNG_TARGET_ARCHITECTURE MATCHES "^(loongarch)") +- add_definitions(-DPNG_LOONGARCH_LSX_OPT=0) +-endif() +- -endif(PNG_HARDWARE_OPTIMIZATIONS) - --# Set PNG_LIB_NAME. --set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR}) -- --# Distinguish between debug and release builds. --set(CMAKE_DEBUG_POSTFIX "d") -- --include(CheckCSourceCompiles) -option(ld-version-script "Enable linker version script" ON) -if(ld-version-script AND NOT ANDROID AND NOT APPLE) - # Check if LD supports linker scripts. - file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map" " --VERS_1 { -- global: sym; -- local: *; --}; -- --VERS_2 { -- global: sym2; -- main; --} VERS_1; +-VERS_1 { global: sym1; local: *; }; +-VERS_2 { global: sym2; main; } VERS_1; -") -- set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) -- set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} "-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/conftest.map'") -- check_c_source_compiles("void sym(void) {} +- set(_SAVED_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) +- if(NOT CMAKE_HOST_SOLARIS) +- # Avoid using CMAKE_SHARED_LIBRARY_C_FLAGS in version script checks on +- # Solaris, because of an incompatibility with the Solaris link editor. +- list(APPEND CMAKE_REQUIRED_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS}) +- endif() +- list(APPEND CMAKE_REQUIRED_FLAGS "-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/conftest.map'") +- check_c_source_compiles(" +-void sym1(void) {} -void sym2(void) {} --int main(void) {return 0;} +-int main(void) { return 0; } -" HAVE_LD_VERSION_SCRIPT) - if(NOT HAVE_LD_VERSION_SCRIPT) -- set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE} "-Wl,-M -Wl,${CMAKE_CURRENT_BINARY_DIR}/conftest.map") -- check_c_source_compiles("void sym(void) {} +- set(CMAKE_REQUIRED_FLAGS ${_SAVED_CMAKE_REQUIRED_FLAGS}) +- if(NOT CMAKE_HOST_SOLARIS) +- # Again, avoid using CMAKE_SHARED_LIBRARY_C_FLAGS in version script +- # checks on Solaris. +- list(APPEND CMAKE_REQUIRED_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS}) +- endif() +- list(APPEND CMAKE_REQUIRED_FLAGS "-Wl,-M -Wl,${CMAKE_CURRENT_BINARY_DIR}/conftest.map") +- check_c_source_compiles(" +-void sym1(void) {} -void sym2(void) {} --int main(void) {return 0;} +-int main(void) { return 0; } -" HAVE_SOLARIS_LD_VERSION_SCRIPT) - endif() -- set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) +- set(CMAKE_REQUIRED_FLAGS ${_SAVED_CMAKE_REQUIRED_FLAGS}) - file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map") -endif() - --# Find symbol prefix. Likely obsolete and unnecessary with recent --# toolchains (it's not done in many other projects). --function(symbol_prefix) -- set(SYMBOL_PREFIX) -- -- execute_process(COMMAND "${CMAKE_C_COMPILER}" "-E" "-" -- INPUT_FILE /dev/null -- OUTPUT_VARIABLE OUT -- RESULT_VARIABLE STATUS) -- -- if(CPP_FAIL) -- message(WARNING "Failed to run the C preprocessor") -- endif() -- -- string(REPLACE "\n" ";" OUT "${OUT}") -- foreach(line ${OUT}) -- string(REGEX MATCH "^PREFIX=" found_match "${line}") -- if(found_match) -- string(REGEX REPLACE "^PREFIX=(.*\)" "\\1" prefix "${line}") -- string(REGEX MATCH "__USER_LABEL_PREFIX__" found_match "${prefix}") -- if(found_match) -- string(REGEX REPLACE "(.*)__USER_LABEL_PREFIX__(.*)" "\\1\\2" prefix "${prefix}") -- endif() -- set(SYMBOL_PREFIX "${prefix}") -- endif() -- endforeach() -- -- message(STATUS "Symbol prefix: ${SYMBOL_PREFIX}") -- set(SYMBOL_PREFIX "${SYMBOL_PREFIX}" PARENT_SCOPE) --endfunction() -- --if(UNIX) -- symbol_prefix() +-# Find an AWK language processor. +-# Start with specific AWK implementations like gawk and nawk, which are +-# known to work with our scripts, then fall back to the system awk. +-find_program(AWK NAMES gawk nawk awk) +-if(AWK) +- message(STATUS "Found AWK program: ${AWK}") +-else() +- message(STATUS "Could not find an AWK-compatible program") -endif() - --find_program(AWK NAMES gawk awk) -- --include_directories(${CMAKE_CURRENT_BINARY_DIR}) -- -if(NOT AWK OR ANDROID OR IOS) - # No awk available to generate sources; use pre-built pnglibconf.h - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt - ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h) -- add_custom_target(genfiles) # Dummy +- add_custom_target(png_genfiles) -else() - # Copy the awk scripts, converting their line endings to Unix (LF) - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/checksym.awk @@ -323,7 +389,6 @@ index 8652564b6..639554ad8 100644 - - # Generate .chk from .out with awk: - # generate_chk(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]]) -- include(CMakeParseArguments) - function(generate_chk) - set(options) - set(oneValueArgs INPUT OUTPUT) @@ -340,7 +405,7 @@ index 8652564b6..639554ad8 100644 - COMMAND "${CMAKE_COMMAND}" - "-DINPUT=${_GC_INPUT}" - "-DOUTPUT=${_GC_OUTPUT}" -- -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/genchk.cmake" +- -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genchk.cmake" - DEPENDS "${_GC_INPUT}" ${_GC_DEPENDS} - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") - endfunction() @@ -363,7 +428,7 @@ index 8652564b6..639554ad8 100644 - COMMAND "${CMAKE_COMMAND}" - "-DINPUT=${_GO_INPUT}" - "-DOUTPUT=${_GO_OUTPUT}" -- -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/genout.cmake" +- -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genout.cmake" - DEPENDS "${_GO_INPUT}" ${_GO_DEPENDS} - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") - endfunction() @@ -382,7 +447,7 @@ index 8652564b6..639554ad8 100644 - add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_GSO_OUTPUT}" - COMMAND "${CMAKE_COMMAND}" - "-DOUTPUT=${_GSO_OUTPUT}" -- -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake" +- -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/gensrc.cmake" - DEPENDS ${_GSO_DEPENDS} - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") - endfunction() @@ -394,6 +459,13 @@ index 8652564b6..639554ad8 100644 - set(oneValueArgs INPUT OUTPUT) - set(multiValueArgs DEPENDS) - cmake_parse_arguments(_GCO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) +- if(NOT _GCO_INPUT) +- message(FATAL_ERROR "generate_copy: Missing INPUT argument") +- endif() +- if(NOT _GCO_OUTPUT) +- message(FATAL_ERROR "generate_copy: Missing OUTPUT argument") +- endif() +- - add_custom_command(OUTPUT "${_GCO_OUTPUT}" - COMMAND "${CMAKE_COMMAND}" - -E remove "${_GCO_OUTPUT}" @@ -407,14 +479,16 @@ index 8652564b6..639554ad8 100644 - DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.dfa" - "${CMAKE_CURRENT_BINARY_DIR}/scripts/options.awk" - "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h") -- add_custom_target(scripts_pnglibconf_c DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/pnglibconf.c") +- add_custom_target(png_scripts_pnglibconf_c +- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/pnglibconf.c") - - # Generate pnglibconf.c - generate_source(OUTPUT "pnglibconf.c" - DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.dfa" - "${CMAKE_CURRENT_BINARY_DIR}/scripts/options.awk" - "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h") -- add_custom_target(pnglibconf_c DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c") +- add_custom_target(pnglibconf_c +- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c") - - if(PNG_PREFIX) - set(PNGLIBCONF_H_EXTRA_DEPENDS @@ -427,92 +501,100 @@ index 8652564b6..639554ad8 100644 - generate_out(INPUT "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c" - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" - DEPENDS pnglibconf_c) -- add_custom_target(pnglibconf_out DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out") +- add_custom_target(pnglibconf_out +- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out") - - # Generate pnglibconf.h - generate_source(OUTPUT "pnglibconf.h" - DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" pnglibconf_out - ${PNGLIBCONF_H_EXTRA_DEPENDS}) -- add_custom_target(pnglibconf_h DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h") +- add_custom_target(pnglibconf_h +- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h") - - generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/intprefix.c" - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out" - DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h) -- add_custom_target(scripts_intprefix_out DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out") +- add_custom_target(png_scripts_intprefix_out +- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out") - - generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/prefix.c" - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out" - DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h" - "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h" - "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" pnglibconf_out) -- add_custom_target(scripts_prefix_out DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out") +- add_custom_target(png_scripts_prefix_out +- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out") - - # Generate pngprefix.h - generate_source(OUTPUT "pngprefix.h" - DEPENDS ${PNGPREFIX_H_EXTRA_DEPENDS}) -- add_custom_target(pngprefix_h DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h") +- add_custom_target(pngprefix_h +- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h") - - generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/sym.c" - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" - DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h) -- add_custom_target(scripts_sym_out DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out") +- add_custom_target(png_scripts_sym_out +- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out") - - generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/symbols.c" - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" - DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h" - "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h" - "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt") -- add_custom_target(scripts_symbols_out DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out") +- add_custom_target(png_scripts_symbols_out +- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out") - - generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/vers.c" - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" - DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h" - "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h" - "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h) -- add_custom_target(scripts_vers_out DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out") +- add_custom_target(png_scripts_vers_out +- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out") - - generate_chk(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk" -- DEPENDS scripts_symbols_out +- DEPENDS png_scripts_symbols_out - "${CMAKE_CURRENT_BINARY_DIR}/scripts/checksym.awk" - "${CMAKE_CURRENT_SOURCE_DIR}/scripts/symbols.def") - -- add_custom_target(scripts_symbols_chk +- add_custom_target(png_scripts_symbols_chk - DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk") - - generate_copy(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym" -- DEPENDS scripts_sym_out) +- DEPENDS png_scripts_sym_out) - generate_copy(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers" -- DEPENDS scripts_vers_out) +- DEPENDS png_scripts_vers_out) - -- add_custom_target(genvers +- add_custom_target(png_genvers - DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers") -- add_custom_target(gensym +- add_custom_target(png_gensym - DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym") - -- add_custom_target("genprebuilt" +- add_custom_target(png_genprebuilt - COMMAND "${CMAKE_COMMAND}" - "-DOUTPUT=scripts/pnglibconf.h.prebuilt" -- -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake" +- -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/gensrc.cmake" - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") - - # A single target handles generation of all generated files. -- add_custom_target(genfiles -- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym" gensym -- "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers" genvers +- add_custom_target(png_genfiles +- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym" png_gensym +- "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers" png_genvers - "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c" pnglibconf_c - "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h - "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" pnglibconf_out - "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h" pngprefix_h -- "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out" scripts_intprefix_out -- "${CMAKE_CURRENT_BINARY_DIR}/scripts/pnglibconf.c" scripts_pnglibconf_c -- "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out" scripts_prefix_out -- "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" scripts_sym_out -- "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk" scripts_symbols_chk -- "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" scripts_symbols_out -- "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" scripts_vers_out) +- "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out" png_scripts_intprefix_out +- "${CMAKE_CURRENT_BINARY_DIR}/scripts/pnglibconf.c" png_scripts_pnglibconf_c +- "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out" png_scripts_prefix_out +- "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" png_scripts_sym_out +- "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk" png_scripts_symbols_chk +- "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" png_scripts_symbols_out +- "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" png_scripts_vers_out) -endif(NOT AWK OR ANDROID OR IOS) - -# List the source code files. @@ -552,6 +634,7 @@ index 8652564b6..639554ad8 100644 - ${libpng_intel_sources} - ${libpng_mips_sources} - ${libpng_powerpc_sources} +- ${libpng_loongarch_sources} -) -set(pngtest_sources - pngtest.c @@ -575,7 +658,8 @@ index 8652564b6..639554ad8 100644 - contrib/tools/png-fix-itxt.c -) - --if(MSVC) +-if(MSVC OR (WIN32 AND (CMAKE_C_COMPILER_ID MATCHES "Clang"))) +- add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) - add_definitions(-D_CRT_SECURE_NO_DEPRECATE) -endif() - @@ -583,114 +667,144 @@ index 8652564b6..639554ad8 100644 - add_definitions(-DPNG_DEBUG) -endif() - --# Now build our target. --include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${ZLIB_INCLUDE_DIRS}) +-# Now build our targets. - --unset(PNG_LIB_TARGETS) +-# Initialize the list of libpng library targets. +-set(PNG_LIBRARY_TARGETS "") +- +-# Initialize the libpng library file names. +-if(UNIX +- OR (WIN32 AND NOT CMAKE_SHARED_LIBRARY_PREFIX STREQUAL "") +- OR (WIN32 AND NOT CMAKE_STATIC_LIBRARY_PREFIX STREQUAL "")) +- # We are on a Unix or Unix-like toolchain like the GNU toolchain on Windows. +- # Library file names are expected to have an implicit prefix such as "lib". +- # Let CMake prepend and append its usual prefixes and suffixes by default. +- set(PNG_SHARED_OUTPUT_NAME "png${PNGLIB_ABI_VERSION}") +- set(PNG_STATIC_OUTPUT_NAME "png${PNGLIB_ABI_VERSION}") +-else() +- # We are, most likely, on a Windows toolchain like MSVC, Clang on Windows, +- # Borland/Embarcadero, etc. We need to specify the "libpng" name explicitly. +- # We also need to use a custom suffix, in order to distinguish between the +- # shared import library name and the static library name. +- set(PNG_SHARED_OUTPUT_NAME "libpng${PNGLIB_ABI_VERSION}") +- set(PNG_STATIC_OUTPUT_NAME "libpng${PNGLIB_ABI_VERSION}_static") +-endif() - -if(PNG_SHARED) -- add_library(png SHARED ${libpng_sources}) -- set(PNG_LIB_TARGETS png) -- set_target_properties(png PROPERTIES OUTPUT_NAME ${PNG_LIB_NAME}) -- add_dependencies(png genfiles) -- if(MSVC) -- # MVC does not append 'lib'. Do it here, to have consistent name. -- set_target_properties(png PROPERTIES PREFIX "lib") -- set_target_properties(png PROPERTIES IMPORT_PREFIX "lib") -- endif() -- target_link_libraries(png ${ZLIB_LIBRARIES} ${M_LIBRARY}) -- +- add_library(png_shared SHARED ${libpng_sources}) +- add_dependencies(png_shared png_genfiles) +- list(APPEND PNG_LIBRARY_TARGETS png_shared) +- set_target_properties(png_shared PROPERTIES +- OUTPUT_NAME "${PNG_SHARED_OUTPUT_NAME}" +- DEBUG_POSTFIX "${PNG_DEBUG_POSTFIX}" +- VERSION "${PNGLIB_SHARED_VERSION}" +- SOVERSION "${PNGLIB_ABI_VERSION}") - if(UNIX AND AWK) - if(HAVE_LD_VERSION_SCRIPT) -- set_target_properties(png PROPERTIES +- set_target_properties(png_shared PROPERTIES - LINK_FLAGS "-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/libpng.vers'") - elseif(HAVE_SOLARIS_LD_VERSION_SCRIPT) -- set_target_properties(png PROPERTIES +- set_target_properties(png_shared PROPERTIES - LINK_FLAGS "-Wl,-M -Wl,'${CMAKE_CURRENT_BINARY_DIR}/libpng.vers'") - endif() - endif() +- if(APPLE) +- # Avoid CMake's implicit compile definition "png_shared_EXPORTS". +- set_target_properties(png_shared PROPERTIES DEFINE_SYMBOL "") +- elseif(WIN32) +- # Use the explicit compile definition "PNG_BUILD_DLL" for Windows DLLs. +- set_target_properties(png_shared PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL) +- endif() +- target_include_directories(png_shared +- PUBLIC $) +- target_include_directories(png_shared +- PUBLIC $) +- target_include_directories(png_shared SYSTEM +- INTERFACE $) +- target_link_libraries(png_shared PUBLIC ZLIB::ZLIB ${M_LIBRARY}) -endif() - -if(PNG_STATIC) -- # does not work without changing name -- set(PNG_LIB_NAME_STATIC png_static) - add_library(png_static STATIC ${libpng_sources}) -- add_dependencies(png_static genfiles) -- # 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) -- set_target_properties(png_static PROPERTIES -- OUTPUT_NAME "${PNG_LIB_NAME}" -- CLEAN_DIRECT_OUTPUT 1) -- else() -- set_target_properties(png_static PROPERTIES -- OUTPUT_NAME "${PNG_LIB_NAME}_static" -- CLEAN_DIRECT_OUTPUT 1) -- endif() -- list(APPEND PNG_LIB_TARGETS png_static) -- if(MSVC) -- # MSVC does not append 'lib'. Do it here, to have consistent name. -- set_target_properties(png_static PROPERTIES PREFIX "lib") -- endif() -- target_link_libraries(png_static ${ZLIB_LIBRARIES} ${M_LIBRARY}) +- add_dependencies(png_static png_genfiles) +- list(APPEND PNG_LIBRARY_TARGETS png_static) +- set_target_properties(png_static PROPERTIES +- OUTPUT_NAME "${PNG_STATIC_OUTPUT_NAME}" +- DEBUG_POSTFIX "${PNG_DEBUG_POSTFIX}") +- target_include_directories(png_static +- PUBLIC $) +- target_include_directories(png_static +- PUBLIC $) +- target_include_directories(png_static SYSTEM +- INTERFACE $) +- target_link_libraries(png_static PUBLIC ZLIB::ZLIB ${M_LIBRARY}) +-endif() +- +-if(PNG_FRAMEWORK AND NOT APPLE) +- message(AUTHOR_WARNING +- "Setting PNG_FRAMEWORK to OFF, as it only applies to Apple systems") +- set(PNG_FRAMEWORK OFF) -endif() - -if(PNG_FRAMEWORK) -- set(PNG_LIB_NAME_FRAMEWORK png_framework) - add_library(png_framework SHARED ${libpng_sources}) -- add_dependencies(png_framework genfiles) -- list(APPEND PNG_LIB_TARGETS png_framework) +- add_dependencies(png_framework png_genfiles) +- list(APPEND PNG_LIBRARY_TARGETS png_framework) - set_target_properties(png_framework PROPERTIES - FRAMEWORK TRUE -- FRAMEWORK_VERSION ${PNGLIB_VERSION} -- MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${PNGLIB_MAJOR}.${PNGLIB_MINOR} -- MACOSX_FRAMEWORK_BUNDLE_VERSION ${PNGLIB_VERSION} -- MACOSX_FRAMEWORK_IDENTIFIER org.libpng.libpng +- FRAMEWORK_VERSION "${PNGLIB_VERSION}" +- MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${PNGLIB_MAJOR}.${PNGLIB_MINOR}" +- MACOSX_FRAMEWORK_BUNDLE_VERSION "${PNGLIB_VERSION}" +- MACOSX_FRAMEWORK_IDENTIFIER "org.libpng.libpng" - XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" - PUBLIC_HEADER "${libpng_public_hdrs}" -- OUTPUT_NAME png) -- target_link_libraries(png_framework ${ZLIB_LIBRARIES} ${M_LIBRARY}) +- OUTPUT_NAME "png" +- DEBUG_POSTFIX "${PNG_DEBUG_POSTFIX}") +- # Avoid CMake's implicit compile definition "-Dpng_framework_EXPORTS". +- set_target_properties(png_framework PROPERTIES DEFINE_SYMBOL "") +- target_include_directories(png_framework +- PUBLIC $) +- target_include_directories(png_framework +- PUBLIC $) +- target_include_directories(png_framework SYSTEM +- INTERFACE $) +- target_link_libraries(png_framework PUBLIC ZLIB::ZLIB ${M_LIBRARY}) -endif() - --if(NOT PNG_LIB_TARGETS) +-if(NOT PNG_LIBRARY_TARGETS) - message(SEND_ERROR "No library variant selected to build. " - "Please enable at least one of the following options: " -- "PNG_STATIC, PNG_SHARED, PNG_FRAMEWORK") +- "PNG_SHARED, PNG_STATIC, PNG_FRAMEWORK") -endif() - --if(PNG_SHARED AND WIN32) -- set_target_properties(png PROPERTIES -- DEFINE_SYMBOL PNG_BUILD_DLL) --endif() -- --function(png_add_test) -- set(options) -- set(oneValueArgs NAME COMMAND) -- set(multiValueArgs OPTIONS FILES) -- cmake_parse_arguments(_PAT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) -- -- if(NOT _PAT_NAME) -- message(FATAL_ERROR "png_add_test: Missing NAME argument") -- endif() -- if(NOT _PAT_COMMAND) -- message(FATAL_ERROR "png_add_test: Missing COMMAND argument") -- endif() -- -- set(TEST_OPTIONS "${_PAT_OPTIONS}") -- set(TEST_FILES "${_PAT_FILES}") -- -- configure_file("${CMAKE_CURRENT_SOURCE_DIR}/scripts/test.cmake.in" -- "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake" -- @ONLY) -- add_test(NAME "${_PAT_NAME}" -- COMMAND "${CMAKE_COMMAND}" -- "-DLIBPNG=$" -- "-DTEST_COMMAND=$" -- -P "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake") --endfunction() -- -if(PNG_TESTS AND PNG_SHARED) +- enable_testing() +- +- function(png_add_test) +- set(options) +- set(oneValueArgs NAME COMMAND) +- set(multiValueArgs OPTIONS FILES) +- cmake_parse_arguments(_PAT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) +- if(NOT _PAT_NAME) +- message(FATAL_ERROR "png_add_test: Missing NAME argument") +- endif() +- if(NOT _PAT_COMMAND) +- message(FATAL_ERROR "png_add_test: Missing COMMAND argument") +- endif() +- +- set(TEST_OPTIONS "${_PAT_OPTIONS}") +- set(TEST_FILES "${_PAT_FILES}") +- +- configure_file("${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/test.cmake.in" +- "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake" +- @ONLY) +- add_test(NAME "${_PAT_NAME}" +- COMMAND "${CMAKE_COMMAND}" +- "-DLIBPNG=$" +- "-DTEST_COMMAND=$" +- -P "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake") +- endfunction() +- - # Find test PNG files by globbing, but sort lists to ensure - # consistency between different filesystems. - file(GLOB PNGSUITE_PNGS "${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/*.png") @@ -701,14 +815,14 @@ index 8652564b6..639554ad8 100644 - set(PNGTEST_PNG "${CMAKE_CURRENT_SOURCE_DIR}/pngtest.png") - - add_executable(pngtest ${pngtest_sources}) -- target_link_libraries(pngtest png) +- target_link_libraries(pngtest PRIVATE png_shared) - - png_add_test(NAME pngtest - COMMAND pngtest - FILES "${PNGTEST_PNG}") - - add_executable(pngvalid ${pngvalid_sources}) -- target_link_libraries(pngvalid png) +- target_link_libraries(pngvalid PRIVATE png_shared) - - png_add_test(NAME pngvalid-gamma-16-to-8 - COMMAND pngvalid @@ -754,43 +868,43 @@ index 8652564b6..639554ad8 100644 - OPTIONS --transform) - - add_executable(pngstest ${pngstest_sources}) -- target_link_libraries(pngstest png) +- target_link_libraries(pngstest PRIVATE png_shared) - - foreach(gamma_type 1.8 linear none sRGB) - foreach(alpha_type none alpha) - set(PNGSTEST_FILES) - foreach(test_png ${TEST_PNGS}) -- string(REGEX MATCH ".*-linear[-.].*" TEST_PNG_LINEAR "${test_png}") -- string(REGEX MATCH ".*-sRGB[-.].*" TEST_PNG_SRGB "${test_png}") -- string(REGEX MATCH ".*-1.8[-.].*" TEST_PNG_G18 "${test_png}") -- string(REGEX MATCH ".*-alpha-.*" TEST_PNG_ALPHA "${test_png}") +- string(REGEX MATCH "-linear[-.]" TEST_PNG_LINEAR "${test_png}") +- string(REGEX MATCH "-sRGB[-.]" TEST_PNG_SRGB "${test_png}") +- string(REGEX MATCH "-1.8[-.]" TEST_PNG_G18 "${test_png}") +- string(REGEX MATCH "-alpha-" TEST_PNG_ALPHA "${test_png}") - - set(TEST_PNG_VALID TRUE) - - if(TEST_PNG_ALPHA) -- if(NOT "${alpha_type}" STREQUAL "alpha") +- if(NOT alpha_type STREQUAL "alpha") - set(TEST_PNG_VALID FALSE) - endif() - else() -- if("${alpha_type}" STREQUAL "alpha") +- if(alpha_type STREQUAL "alpha") - set(TEST_PNG_VALID FALSE) - endif() - endif() - - if(TEST_PNG_LINEAR) -- if(NOT "${gamma_type}" STREQUAL "linear") +- if(NOT gamma_type STREQUAL "linear") - set(TEST_PNG_VALID FALSE) - endif() - elseif(TEST_PNG_SRGB) -- if(NOT "${gamma_type}" STREQUAL "sRGB") +- if(NOT gamma_type STREQUAL "sRGB") - set(TEST_PNG_VALID FALSE) - endif() - elseif(TEST_PNG_G18) -- if(NOT "${gamma_type}" STREQUAL "1.8") +- if(NOT gamma_type STREQUAL "1.8") - set(TEST_PNG_VALID FALSE) - endif() - else() -- if(NOT "${gamma_type}" STREQUAL "none") +- if(NOT gamma_type STREQUAL "none") - set(TEST_PNG_VALID FALSE) - endif() - endif() @@ -809,7 +923,7 @@ index 8652564b6..639554ad8 100644 - endforeach() - - add_executable(pngunknown ${pngunknown_sources}) -- target_link_libraries(pngunknown png) +- target_link_libraries(pngunknown PRIVATE png_shared) - - png_add_test(NAME pngunknown-discard - COMMAND pngunknown @@ -841,7 +955,7 @@ index 8652564b6..639554ad8 100644 - FILES "${PNGTEST_PNG}") - - add_executable(pngimage ${pngimage_sources}) -- target_link_libraries(pngimage png) +- target_link_libraries(pngimage PRIVATE png_shared) - - png_add_test(NAME pngimage-quick - COMMAND pngimage @@ -853,79 +967,76 @@ index 8652564b6..639554ad8 100644 - FILES ${PNGSUITE_PNGS}) -endif() - --if(PNG_SHARED AND PNG_EXECUTABLES) +-if(PNG_SHARED AND PNG_TOOLS) - add_executable(pngfix ${pngfix_sources}) -- target_link_libraries(pngfix png) +- target_link_libraries(pngfix PRIVATE png_shared) - set(PNG_BIN_TARGETS pngfix) - - add_executable(png-fix-itxt ${png_fix_itxt_sources}) -- target_link_libraries(png-fix-itxt ${ZLIB_LIBRARIES} ${M_LIBRARY}) +- target_link_libraries(png-fix-itxt PRIVATE ZLIB::ZLIB ${M_LIBRARY}) - list(APPEND PNG_BIN_TARGETS png-fix-itxt) -endif() - --# Creates a symlink from src to dest (if possible), or, alternatively, --# copies src to dest if different. --include(CMakeParseArguments) +-# Create a symlink from src to dest (if possible), or, alternatively, +-# copy src to dest if different. -function(create_symlink DEST_FILE) -- cmake_parse_arguments(S "" "FILE;TARGET" "" ${ARGN}) -- -- if(NOT S_TARGET AND NOT S_FILE) -- message(FATAL_ERROR "create_symlink: Missing TARGET or FILE argument") +- cmake_parse_arguments(_SYM "" "FILE;TARGET" "" ${ARGN}) +- if(NOT _SYM_FILE AND NOT _SYM_TARGET) +- message(FATAL_ERROR "create_symlink: Missing FILE or TARGET argument") - endif() -- -- if(S_TARGET AND S_FILE) +- if(_SYM_FILE AND _SYM_TARGET) - message(FATAL_ERROR "create_symlink: " -- "Both source file ${S_FILE} and build target ${S_TARGET} arguments are present; " -- "can only have one") +- "The arguments FILE (${_SYM_FILE}) and TARGET (${_SYM_TARGET}) " +- "are mutually-exclusive") - endif() - -- if(S_FILE) +- if(_SYM_FILE) - # If we don't need to symlink something that's coming from a build target, - # we can go ahead and symlink/copy at configure time. - if(CMAKE_HOST_WIN32 AND NOT CYGWIN) - execute_process(COMMAND "${CMAKE_COMMAND}" - -E copy_if_different -- ${S_FILE} ${DEST_FILE} +- ${_SYM_FILE} ${DEST_FILE} - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") - else() - execute_process(COMMAND "${CMAKE_COMMAND}" - -E create_symlink -- ${S_FILE} ${DEST_FILE} +- ${_SYM_FILE} ${DEST_FILE} - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") - endif() - endif() - -- if(S_TARGET) +- if(_SYM_TARGET) - # We need to use generator expressions, which can be a bit tricky. - # For simplicity, make the symlink a POST_BUILD step, and use the TARGET - # signature of add_custom_command. - if(CMAKE_HOST_WIN32 AND NOT CYGWIN) -- add_custom_command(TARGET ${S_TARGET} +- add_custom_command(TARGET ${_SYM_TARGET} - POST_BUILD - COMMAND "${CMAKE_COMMAND}" - -E copy_if_different -- $ -- $/${DEST_FILE}) +- $/$ +- $/${DEST_FILE}) - else() -- add_custom_command(TARGET ${S_TARGET} +- add_custom_command(TARGET ${_SYM_TARGET} - POST_BUILD - COMMAND "${CMAKE_COMMAND}" - -E create_symlink -- $ -- $/${DEST_FILE}) +- $ +- $/${DEST_FILE}) - endif() - endif() -endfunction() - -# Create source generation scripts. --configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/genchk.cmake.in -- ${CMAKE_CURRENT_BINARY_DIR}/scripts/genchk.cmake +-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/genchk.cmake.in +- ${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genchk.cmake - @ONLY) --configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/genout.cmake.in -- ${CMAKE_CURRENT_BINARY_DIR}/scripts/genout.cmake +-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/genout.cmake.in +- ${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genout.cmake - @ONLY) --configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/gensrc.cmake.in -- ${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake +-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/gensrc.cmake.in +- ${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/gensrc.cmake - @ONLY) - -# libpng is a library so default to 'lib' @@ -944,43 +1055,29 @@ index 8652564b6..639554ad8 100644 - set(includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR}) - set(LIBS "-lz -lm") - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in -- ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc +- ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}.pc - @ONLY) -- create_symlink(libpng.pc FILE ${PNGLIB_NAME}.pc) +- create_symlink(libpng.pc FILE libpng${PNGLIB_ABI_VERSION}.pc) - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng-config.in -- ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config +- ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}-config - @ONLY) -- create_symlink(libpng-config FILE ${PNGLIB_NAME}-config) --endif() -- --# Set up links. --if(PNG_SHARED) -- set_target_properties(png PROPERTIES -- VERSION ${PNGLIB_SHARED_VERSION} -- SOVERSION ${PNGLIB_SHARED_SOVERSION} -- CLEAN_DIRECT_OUTPUT 1) +- create_symlink(libpng-config FILE libpng${PNGLIB_ABI_VERSION}-config) -endif() - -# Install. -if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL) -- install(TARGETS ${PNG_LIB_TARGETS} +- install(TARGETS ${PNG_LIBRARY_TARGETS} - EXPORT libpng -- RUNTIME DESTINATION bin +- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}) - - if(PNG_SHARED) - # Create a symlink for libpng.dll.a => libpng16.dll.a on Cygwin -- if(CYGWIN OR MINGW) -- create_symlink(libpng${CMAKE_IMPORT_LIBRARY_SUFFIX} TARGET png) -- install(FILES $/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX} -- DESTINATION ${CMAKE_INSTALL_LIBDIR}) -- endif() -- -- if(NOT WIN32) -- create_symlink(libpng${CMAKE_SHARED_LIBRARY_SUFFIX} TARGET png) -- install(FILES $/libpng${CMAKE_SHARED_LIBRARY_SUFFIX} +- if(NOT WIN32 OR CYGWIN OR MINGW) +- create_symlink(libpng${CMAKE_SHARED_LIBRARY_SUFFIX} TARGET png_shared) +- install(FILES $/libpng${CMAKE_SHARED_LIBRARY_SUFFIX} - DESTINATION ${CMAKE_INSTALL_LIBDIR}) - endif() - endif() @@ -996,22 +1093,22 @@ index 8652564b6..639554ad8 100644 - -if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL) - install(FILES ${libpng_public_hdrs} -- DESTINATION include) +- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) - install(FILES ${libpng_public_hdrs} -- DESTINATION include/${PNGLIB_NAME}) +- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libpng${PNGLIB_ABI_VERSION}) -endif() -if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL) - if(NOT WIN32 OR CYGWIN OR MINGW) - install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config -- DESTINATION bin) -- install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config -- DESTINATION bin) +- DESTINATION ${CMAKE_INSTALL_BINDIR}) +- install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}-config +- DESTINATION ${CMAKE_INSTALL_BINDIR}) - endif() -endif() - -if(NOT SKIP_INSTALL_PROGRAMS AND NOT SKIP_INSTALL_ALL) - install(TARGETS ${PNG_BIN_TARGETS} -- RUNTIME DESTINATION bin) +- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) -endif() - -if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL) @@ -1026,9 +1123,9 @@ index 8652564b6..639554ad8 100644 - DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) - install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config - DESTINATION ${CMAKE_INSTALL_BINDIR}) -- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc +- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}.pc - DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) -- install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config +- install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}-config - DESTINATION ${CMAKE_INSTALL_BINDIR}) - endif() -endif() @@ -1036,18 +1133,37 @@ index 8652564b6..639554ad8 100644 -# 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) +- DESTINATION ${CMAKE_INSTALL_LIBDIR}/libpng +- FILE libpng${PNGLIB_ABI_VERSION}.cmake) +-endif() +- +-# Create a CMake Config File that can be used via find_package(PNG CONFIG) +-if(NOT SKIP_INSTALL_CONFIG_FILE AND NOT SKIP_INSTALL_ALL) +- install(TARGETS ${PNG_LIBRARY_TARGETS} +- EXPORT PNGTargets +- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} +- FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}) +- +- include(CMakePackageConfigHelpers) +- write_basic_package_version_file(PNGConfigVersion.cmake +- VERSION ${PNGLIB_VERSION} +- COMPATIBILITY SameMinorVersion) +- +- install(EXPORT PNGTargets +- FILE PNGTargets.cmake +- NAMESPACE PNG:: +- DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PNG) +- +- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/PNGConfig.cmake +- ${CMAKE_CURRENT_BINARY_DIR}/PNGConfigVersion.cmake +- DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PNG) -endif() - -# TODO: Create MSVC import lib for MinGW-compiled shared lib. -# pexports libpng.dll > libpng.def -# lib /def:libpng.def /machine:x86 -+cmake_minimum_required(VERSION 3.16.5) -+ -+set(LibpngInc "${PROJECT_SOURCE_DIR}/third_party/libpng") -+set(LibpngSrc "${PROJECT_SOURCE_DIR}/third_party/libpng") -+ +include_directories(${LibpngInc}) +message(${LibpngSrc}) +add_library(libpng STATIC @@ -1069,3 +1185,4 @@ index 8652564b6..639554ad8 100644 + ) +target_link_libraries(libpng PUBLIC zlib) +target_include_directories(libpng PUBLIC ${LibpngInc}) ++target_include_directories(libpng PUBLIC ${LibpngInc}) diff --git a/install.py b/install.py index 1cc22ba00..c4e859b32 100755 --- a/install.py +++ b/install.py @@ -78,8 +78,8 @@ def main(): libpng_path.add_argument('--gen-dir', help='generate path of log', required=True) libpng_path.add_argument('--source-dir', help='generate path of log', required=True) args = libpng_path.parse_args() - tar_file_path = os.path.join(args.source_dir, "libpng-1.6.38.tar.gz") - target_dir = os.path.join(args.gen_dir, "libpng-1.6.38") + tar_file_path = os.path.join(args.source_dir, "libpng-1.6.44.tar.gz") + target_dir = os.path.join(args.gen_dir, "libpng-1.6.44") untar_file(tar_file_path, args.gen_dir) move_file(args.source_dir, target_dir) diff --git a/libpng-1.6.38.tar.gz b/libpng-1.6.38.tar.gz deleted file mode 100644 index 33ded2a77048d8db6f5b5c203a84aeb3fcec278e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1523840 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