| # 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 <file> OUTPUT <file> [DEPENDS <deps>...]) |
| function(generate_chk) |
| set(options) |
| set(oneValueArgs INPUT OUTPUT) |
| set(multiValueArgs DEPENDS) |
| cmake_parse_arguments(_GENCHK "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) |
| if(NOT _GENCHK_INPUT) |
| message(FATAL_ERROR "generate_chk: Missing INPUT argument") |
| endif() |
| if(NOT _GENCHK_OUTPUT) |
| message(FATAL_ERROR "generate_chk: Missing OUTPUT argument") |
| endif() |
| |
| # Run genchk.cmake to generate the .chk file. |
| add_custom_command(OUTPUT "${_GENCHK_OUTPUT}" |
| COMMAND "${CMAKE_COMMAND}" |
| "-DINPUT=${_GENCHK_INPUT}" |
| "-DOUTPUT=${_GENCHK_OUTPUT}" |
| -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genchk.cmake" |
| DEPENDS "${_GENCHK_INPUT}" ${_GENCHK_DEPENDS} |
| WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") |
| endfunction() |
| |
| # Generate .out from C source file with awk: |
| # generate_out(INPUT <file> OUTPUT <file> [DEPENDS <deps>...]) |
| function(generate_out) |
| set(options) |
| set(oneValueArgs INPUT OUTPUT) |
| set(multiValueArgs DEPENDS) |
| cmake_parse_arguments(_GENOUT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) |
| if(NOT _GENOUT_INPUT) |
| message(FATAL_ERROR "generate_out: Missing INPUT argument") |
| endif() |
| if(NOT _GENOUT_OUTPUT) |
| message(FATAL_ERROR "generate_out: Missing OUTPUT argument") |
| endif() |
| |
| # Run genout.cmake to generate the .out file. |
| add_custom_command(OUTPUT "${_GENOUT_OUTPUT}" |
| COMMAND "${CMAKE_COMMAND}" |
| "-DINPUT=${_GENOUT_INPUT}" |
| "-DOUTPUT=${_GENOUT_OUTPUT}" |
| -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genout.cmake" |
| DEPENDS "${_GENOUT_INPUT}" ${_GENOUT_DEPENDS} |
| WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") |
| endfunction() |
| |
| # Generate a source file with awk: |
| # generate_source(OUTPUT <file> [DEPENDS <deps>...]) |
| function(generate_source) |
| set(options) |
| set(oneValueArgs OUTPUT) |
| set(multiValueArgs DEPENDS) |
| cmake_parse_arguments(_GENSRC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) |
| if(NOT _GENSRC_OUTPUT) |
| message(FATAL_ERROR "generate_source: Missing OUTPUT argument") |
| endif() |
| |
| # Run gensrc.cmake to generate the source file. |
| add_custom_command(OUTPUT "${_GENSRC_OUTPUT}" |
| COMMAND "${CMAKE_COMMAND}" |
| "-DOUTPUT=${_GENSRC_OUTPUT}" |
| -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/gensrc.cmake" |
| DEPENDS ${_GENSRC_DEPENDS} |
| WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") |
| endfunction() |
| |
| # Generate an identical file copy: |
| # generate_copy(INPUT <file> OUTPUT <file> [DEPENDS <deps>...]) |
| function(generate_copy) |
| set(options) |
| set(oneValueArgs INPUT OUTPUT) |
| set(multiValueArgs DEPENDS) |
| cmake_parse_arguments(_GENCPY "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) |
| if(NOT _GENCPY_INPUT) |
| message(FATAL_ERROR "generate_copy: Missing INPUT argument") |
| endif() |
| if(NOT _GENCPY_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 "${_GENCPY_OUTPUT}" |
| COMMAND "${CMAKE_COMMAND}" |
| -E remove "${_GENCPY_OUTPUT}" |
| COMMAND "${CMAKE_COMMAND}" |
| -E copy "${_GENCPY_INPUT}" "${_GENCPY_OUTPUT}" |
| DEPENDS "${_GENCPY_INPUT}" ${_GENCPY_DEPENDS}) |
| endfunction() |