1# gensrc.cmake.in 2# Generate source files with awk, based upon the automake logic. 3 4# Copyright (c) 2022-2024 Cosmin Truta 5# Copyright (c) 2016 Glenn Randers-Pehrson 6# Written by Roger Leigh, 2016 7# 8# Use, modification and distribution are subject to 9# the same licensing terms and conditions as libpng. 10# Please see the copyright notice in png.h or visit 11# http://libpng.org/pub/png/src/libpng-LICENSE.txt 12# 13# SPDX-License-Identifier: libpng-2.0 14 15# Variables substituted from CMakeLists.txt 16set(SRCDIR "@CMAKE_CURRENT_SOURCE_DIR@") 17set(BINDIR "@CMAKE_CURRENT_BINARY_DIR@") 18 19set(AWK "@AWK@") 20set(DFA_XTRA "@DFA_XTRA@") 21set(PNG_PREFIX "@PNG_PREFIX@") 22set(PNGLIB_VERSION "@PNGLIB_VERSION@") 23 24if(OUTPUT STREQUAL "scripts/pnglibconf.c") 25 # Generate scripts/pnglibconf.c 26 27 file(REMOVE "${BINDIR}/pnglibconf.tf6" "${BINDIR}/pnglibconf.tf7") 28 29 execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "com ${PNGLIB_VERSION} STANDARD API DEFINITION" 30 COMMAND "${AWK}" -f "${SRCDIR}/scripts/options.awk" 31 "out=pnglibconf.tf6" "logunsupported=1" "version=search" 32 "${SRCDIR}/pngconf.h" "-" 33 "${SRCDIR}/scripts/pnglibconf.dfa" 34 WORKING_DIRECTORY "${BINDIR}" 35 RESULT_VARIABLE AWK_FAIL) 36 if(AWK_FAIL) 37 message(FATAL_ERROR "Failed to generate pnglibconf.tf6") 38 endif() 39 40 execute_process(COMMAND "${AWK}" -f "${SRCDIR}/scripts/options.awk" 41 "out=pnglibconf.tf7" "pnglibconf.tf6" 42 WORKING_DIRECTORY "${BINDIR}" 43 RESULT_VARIABLE AWK_FAIL) 44 if(AWK_FAIL) 45 message(FATAL_ERROR "Failed to generate pnglibconf.tf7") 46 endif() 47 48 file(REMOVE "pnglibconf.tf6") 49 file(MAKE_DIRECTORY "${BINDIR}/scripts") 50 file(RENAME "pnglibconf.tf7" "${BINDIR}/scripts/pnglibconf.c") 51 52elseif(OUTPUT STREQUAL "pnglibconf.c") 53 # Generate pnglibconf.c 54 55 file(REMOVE "${BINDIR}/pnglibconf.tf4" "${BINDIR}/pnglibconf.tf5") 56 57 execute_process(COMMAND "${AWK}" -f "${SRCDIR}/scripts/options.awk" 58 out=pnglibconf.tf4 version=search 59 ${SRCDIR}/pngconf.h ${SRCDIR}/scripts/pnglibconf.dfa 60 ${SRCDIR}/pngusr.dfa ${DFA_XTRA} 61 WORKING_DIRECTORY "${BINDIR}" 62 RESULT_VARIABLE AWK_FAIL) 63 if(AWK_FAIL) 64 message(FATAL_ERROR "Failed to generate pnglibconf.tf4") 65 endif() 66 67 execute_process(COMMAND "${AWK}" -f "${SRCDIR}/scripts/options.awk" 68 out=pnglibconf.tf5 pnglibconf.tf4 69 WORKING_DIRECTORY "${BINDIR}" 70 RESULT_VARIABLE AWK_FAIL) 71 if(AWK_FAIL) 72 message(FATAL_ERROR "Failed to generate pnglibconf.tf5") 73 endif() 74 75 file(REMOVE "pnglibconf.tf4") 76 file(MAKE_DIRECTORY "${BINDIR}/scripts") 77 file(RENAME "pnglibconf.tf5" "${BINDIR}/pnglibconf.c") 78 79elseif(OUTPUT STREQUAL "pnglibconf.h") 80 # Generate pnglibconf.h 81 82 file(REMOVE "${BINDIR}/${OUTPUT}") 83 if(PNG_PREFIX) 84 file(REMOVE "pnglibconf.tf8") 85 86 execute_process(COMMAND "${AWK}" "s==0 && NR>1{print prev} 87 s==0{prev=\$0} 88 s==1{print \"#define\", \$1, \"${PNG_PREFIX}\" \$1} 89 s==2{print \"#define ${PNG_PREFIX}png_\" \$1, \"PNG_\" \$1} 90 END{print prev}" s=0 pnglibconf.out s=1 "${BINDIR}/scripts/prefix.out" 91 s=2 "${SRCDIR}/scripts/macro.lst" 92 OUTPUT_FILE pnglibconf.tf8 93 RESULT_VARIABLE AWK_FAIL) 94 if(AWK_FAIL) 95 message(FATAL_ERROR "Failed to generate pnglibconf.tf8") 96 endif() 97 98 file(RENAME "pnglibconf.tf8" "${BINDIR}/${OUTPUT}") 99 else() 100 execute_process(COMMAND "${CMAKE_COMMAND}" -E copy "${BINDIR}/pnglibconf.out" 101 "${BINDIR}/${OUTPUT}" 102 RESULT_VARIABLE COPY_FAIL) 103 if(COPY_FAIL) 104 message(FATAL_ERROR "Failed to create pnglibconf.h") 105 endif() 106 endif() 107 108elseif(OUTPUT STREQUAL "pngprefix.h") 109 # Generate pngprefix.h 110 111 file(REMOVE "${BINDIR}/${OUTPUT}") 112 113 if(PNG_PREFIX) 114 file(REMOVE "pngprefix.tf1") 115 116 execute_process(COMMAND "${AWK}" 117 "{print \"#define\", \$1, \"${PNG_PREFIX}\" \$1}" 118 "${BINDIR}/scripts/intprefix.out" 119 OUTPUT_FILE "pngprefix.tf1" 120 RESULT_VARIABLE AWK_FAIL) 121 if(AWK_FAIL) 122 message(FATAL_ERROR "Failed to generate pngprefix.tf1") 123 endif() 124 125 file(RENAME "pngprefix.tf1" "${BINDIR}/${OUTPUT}") 126 else() 127 file(WRITE "${BINDIR}/${OUTPUT}" "/* No libpng symbol prefix configured. */") 128 endif() 129 130elseif(OUTPUT STREQUAL "scripts/pnglibconf.h.prebuilt") 131 # Generate scripts/pnglibconf.h.prebuilt (fails build) 132 133 message(STATUS "Attempting to build scripts/pnglibconf.h.prebuilt") 134 message(STATUS "This is a machine generated file, but if you want to make") 135 message(STATUS "a new one simply build the 'png_genfiles' target, and copy") 136 message(STATUS "scripts/pnglibconf.out to scripts/pnglibconf.h.prebuilt") 137 message(STATUS "AND set PNG_ZLIB_VERNUM to 0 (you MUST do this)") 138 message(FATAL_ERROR "Stopping build") 139 140else() 141 142 message(FATAL_ERROR "Unsupported output: ${OUTPUT}") 143 144endif() 145