-
Notifications
You must be signed in to change notification settings - Fork 634
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
build: Move portions from the main CMake file to separate modules
In preparation for the upcoming changes in the build system, any parts of the CMake file that are unlikely to be affected should be moved out of the way. This should facilitate an easier resync between the branch 'libpng16' and its successor(s). Specifically: * Move the functions `generate_chk`, `generate_out`, `generate_source` and `generate_copy` to scripts/cmake/PNGGenConfig.cmake. * Move the function `png_add_test` to scripts/cmake/PNGTest.cmake. * Leave the function `create_symlink` in place, but add a TODO note. As we raised the minimum required CMake version to 3.14, we should now be able to use CMake's built-in function instead.
- Loading branch information
Showing
3 changed files
with
158 additions
and
116 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
# 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(_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 <file> OUTPUT <file> [DEPENDS <deps>...]) | ||
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 <file> [DEPENDS <deps>...]) | ||
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 <file> OUTPUT <file> [DEPENDS <deps>...]) | ||
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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
# PNGTest.cmake | ||
# Utility functions for testing 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 | ||
|
||
# Add a custom target to run a test: | ||
# png_add_test(NAME <test> COMMAND <command> [OPTIONS <options>...] [FILES <files>...]) | ||
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() | ||
|
||
# Initialize the global variables used by the "${_PAT_NAME}.cmake" script. | ||
set(TEST_OPTIONS "${_PAT_OPTIONS}") | ||
set(TEST_FILES "${_PAT_FILES}") | ||
|
||
# Generate and run the "${_PAT_NAME}.cmake" script. | ||
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=$<TARGET_FILE:png_shared>" | ||
"-DTEST_COMMAND=$<TARGET_FILE:${_PAT_COMMAND}>" | ||
-P "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake") | ||
endfunction() |