1# genout.cmake.in 2# Generate .out from .c with awk (generic), 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(CMAKE_C_COMPILER "@CMAKE_C_COMPILER@") 21set(CMAKE_C_FLAGS @CMAKE_C_FLAGS@) 22set(INCDIR "@CMAKE_CURRENT_BINARY_DIR@") 23set(PNG_PREFIX "@PNG_PREFIX@") 24set(PNGLIB_MAJOR "@PNGLIB_MAJOR@") 25set(PNGLIB_MINOR "@PNGLIB_MINOR@") 26set(PNGLIB_VERSION "@PNGLIB_VERSION@") 27set(ZLIBINCDIR "@ZLIB_INCLUDE_DIRS@") 28 29set(PLATFORM_C_FLAGS) 30if(APPLE) 31 set(CMAKE_OSX_INTERNAL_ARCHITECTURES "@CMAKE_OSX_INTERNAL_ARCHITECTURES@") 32 set(CMAKE_OSX_SYSROOT "@CMAKE_OSX_SYSROOT@") 33 if(CMAKE_OSX_INTERNAL_ARCHITECTURES) 34 set(PLATFORM_C_FLAGS ${PLATFORM_C_FLAGS} -arch ${CMAKE_OSX_INTERNAL_ARCHITECTURES}) 35 endif() 36 if(CMAKE_OSX_SYSROOT) 37 set(PLATFORM_C_FLAGS ${PLATFORM_C_FLAGS} -isysroot ${CMAKE_OSX_SYSROOT}) 38 endif() 39endif() 40 41get_filename_component(INPUTEXT "${INPUT}" EXT) 42get_filename_component(OUTPUTEXT "${OUTPUT}" EXT) 43get_filename_component(INPUTBASE "${INPUT}" NAME_WE) 44get_filename_component(OUTPUTBASE "${OUTPUT}" NAME_WE) 45get_filename_component(INPUTDIR "${INPUT}" PATH) 46get_filename_component(OUTPUTDIR "${OUTPUT}" PATH) 47 48if(INPUTEXT STREQUAL ".c" AND OUTPUTEXT STREQUAL ".out") 49 get_filename_component(GENDIR "${OUTPUT}" PATH) 50 file(MAKE_DIRECTORY "${GENDIR}") 51 52 file(REMOVE "${OUTPUT}.tf1" "${OUTPUT}.tf2") 53 54 set(INCLUDES "-I${INCDIR}") 55 if(ZLIBINCDIR) 56 foreach(dir ${ZLIBINCDIR}) 57 list(APPEND INCLUDES "-I${dir}") 58 endforeach() 59 endif() 60 61 if(PNG_PREFIX) 62 set(PNG_PREFIX_DEF "-DPNG_PREFIX=${PNG_PREFIX}") 63 endif() 64 65 execute_process(COMMAND "${CMAKE_C_COMPILER}" "-E" 66 ${CMAKE_C_FLAGS} 67 ${PLATFORM_C_FLAGS} 68 "-I${SRCDIR}" 69 "-I${BINDIR}" 70 ${INCLUDES} 71 "-DPNGLIB_LIBNAME=PNG${PNGLIB_MAJOR}${PNGLIB_MINOR}_0" 72 "-DPNGLIB_VERSION=${PNGLIB_VERSION}" 73 "-DSYMBOL_PREFIX=${SYMBOL_PREFIX}" 74 "-DPNG_NO_USE_READ_MACROS" 75 "-DPNG_BUILDING_SYMBOL_TABLE" 76 ${PNG_PREFIX_DEF} 77 "${INPUT}" 78 OUTPUT_FILE "${OUTPUT}.tf1" 79 WORKING_DIRECTORY "${BINDIR}" 80 RESULT_VARIABLE CPP_FAIL) 81 if(CPP_FAIL) 82 message(FATAL_ERROR "Failed to generate ${OUTPUT}.tf1") 83 endif() 84 85 execute_process(COMMAND "${AWK}" -f "${SRCDIR}/scripts/dfn.awk" 86 "out=${OUTPUT}.tf2" "${OUTPUT}.tf1" 87 WORKING_DIRECTORY "${BINDIR}" 88 RESULT_VARIABLE AWK_FAIL) 89 if(AWK_FAIL) 90 message(FATAL_ERROR "Failed to generate ${OUTPUT}.tf2") 91 endif() 92 93 file(REMOVE "${OUTPUT}.tf1") 94 file(RENAME "${OUTPUT}.tf2" "${OUTPUT}") 95else() 96 message(FATAL_ERROR "Unsupported conversion: ${INPUTEXT} to ${OUTPUTEXT}") 97endif() 98