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