# PNGGenConfig.cmake # Utility functions for configuring and building libpng # Copyright (c) 2018-2025 Cosmin Truta # Copyright (c) 2016-2018 Glenn Randers-Pehrson # Written by Roger Leigh, 2016 # # 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 # # SPDX-License-Identifier: libpng-2.0 # Generate .chk from .out with awk, based upon the automake logic: # generate_chk(INPUT OUTPUT [DEPENDS ...]) function(generate_chk) set(options) set(oneValueArgs INPUT OUTPUT) set(multiValueArgs DEPENDS) cmake_parse_arguments(_GC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if(NOT _GC_INPUT) message(FATAL_ERROR "generate_chk: Missing INPUT argument") endif() if(NOT _GC_OUTPUT) message(FATAL_ERROR "generate_chk: Missing OUTPUT argument") endif() # Run genchk.cmake to generate the .chk file. add_custom_command(OUTPUT "${_GC_OUTPUT}" COMMAND "${CMAKE_COMMAND}" "-DINPUT=${_GC_INPUT}" "-DOUTPUT=${_GC_OUTPUT}" -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genchk.cmake" DEPENDS "${_GC_INPUT}" ${_GC_DEPENDS} WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") endfunction() # Generate .out from C source file with awk: # generate_out(INPUT OUTPUT [DEPENDS ...]) function(generate_out) set(options) set(oneValueArgs INPUT OUTPUT) set(multiValueArgs DEPENDS) cmake_parse_arguments(_GO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if(NOT _GO_INPUT) message(FATAL_ERROR "generate_out: Missing INPUT argument") endif() if(NOT _GO_OUTPUT) message(FATAL_ERROR "generate_out: Missing OUTPUT argument") endif() # Run genout.cmake to generate the .out file. add_custom_command(OUTPUT "${_GO_OUTPUT}" COMMAND "${CMAKE_COMMAND}" "-DINPUT=${_GO_INPUT}" "-DOUTPUT=${_GO_OUTPUT}" -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genout.cmake" DEPENDS "${_GO_INPUT}" ${_GO_DEPENDS} WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") endfunction() # Generate a source file with awk: # generate_source(OUTPUT [DEPENDS ...]) function(generate_source) set(options) set(oneValueArgs OUTPUT) set(multiValueArgs DEPENDS) cmake_parse_arguments(_GSO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if(NOT _GSO_OUTPUT) message(FATAL_ERROR "generate_source: Missing OUTPUT argument") endif() # Run gensrc.cmake to generate the source file. add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_GSO_OUTPUT}" COMMAND "${CMAKE_COMMAND}" "-DOUTPUT=${_GSO_OUTPUT}" -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/gensrc.cmake" DEPENDS ${_GSO_DEPENDS} WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") endfunction() # Generate an identical file copy: # generate_copy(INPUT OUTPUT [DEPENDS ...]) function(generate_copy) set(options) 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() # Make a forced file copy, overwriting any pre-existing output file. add_custom_command(OUTPUT "${_GCO_OUTPUT}" COMMAND "${CMAKE_COMMAND}" -E remove "${_GCO_OUTPUT}" COMMAND "${CMAKE_COMMAND}" -E copy "${_GCO_INPUT}" "${_GCO_OUTPUT}" DEPENDS "${source}" ${_GCO_DEPENDS}) endfunction()