1 # genout.cmake.in 2 # Generate .out from .c with awk (generic), based upon the automake logic. 3 4 # Copyright (C) 2016 Glenn Randers-Pehrson 5 # Written by Roger Leigh, 2016 6 7 # This code is released under the libpng license. 8 # For conditions of distribution and use, see the disclaimer 9 # and license in png.h 10 11 # Variables substituted from CMakeLists.txt 12 set(SRCDIR "@CMAKE_CURRENT_SOURCE_DIR@") 13 set(BINDIR "@CMAKE_CURRENT_BINARY_DIR@") 14 15 set(AWK "@AWK@") 16 set(CMAKE_C_COMPILER "@CMAKE_C_COMPILER@") 17 set(CMAKE_C_FLAGS @CMAKE_C_FLAGS@) 18 set(INCDIR "@CMAKE_CURRENT_BINARY_DIR@") 19 set(PNG_PREFIX "@PNG_PREFIX@") 20 set(PNGLIB_MAJOR "@PNGLIB_MAJOR@") 21 set(PNGLIB_MINOR "@PNGLIB_MINOR@") 22 set(PNGLIB_VERSION "@PNGLIB_VERSION@") 23 set(ZLIBINCDIR "@ZLIB_INCLUDE_DIR@") 24 25 set(PLATFORM_C_FLAGS) 26 if(APPLE) 27 set(CMAKE_OSX_ARCHITECTURES "@CMAKE_OSX_ARCHITECTURES@") 28 set(CMAKE_OSX_SYSROOT "@CMAKE_OSX_SYSROOT@") 29 if(CMAKE_OSX_ARCHITECTURES) 30 set(PLATFORM_C_FLAGS ${PLATFORM_C_FLAGS} -arch ${CMAKE_OSX_ARCHITECTURES}) 31 endif() 32 if(CMAKE_OSX_SYSROOT) 33 set(PLATFORM_C_FLAGS ${PLATFORM_C_FLAGS} -isysroot ${CMAKE_OSX_SYSROOT}) 34 endif() 35 endif() 36 37 get_filename_component(INPUTEXT "${INPUT}" EXT) 38 get_filename_component(OUTPUTEXT "${OUTPUT}" EXT) 39 get_filename_component(INPUTBASE "${INPUT}" NAME_WE) 40 get_filename_component(OUTPUTBASE "${OUTPUT}" NAME_WE) 41 get_filename_component(INPUTDIR "${INPUT}" PATH) 42 get_filename_component(OUTPUTDIR "${OUTPUT}" PATH) 43 44 if ("${INPUTEXT}" STREQUAL ".c" AND "${OUTPUTEXT}" STREQUAL ".out") 45 get_filename_component(GENDIR "${OUTPUT}" PATH) 46 file(MAKE_DIRECTORY "${GENDIR}") 47 48 file(REMOVE "${OUTPUT}.tf1" "${OUTPUT}.tf2") 49 50 set(INCLUDES "-I${INCDIR}") 51 if(ZLIBINCDIR) 52 foreach(dir ${ZLIBINCDIR}) 53 list(APPEND INCLUDES "-I${dir}") 54 endforeach() 55 endif() 56 57 if(PNG_PREFIX) 58 set(PNG_PREFIX_DEF "-DPNG_PREFIX=${PNG_PREFIX}") 59 endif() 60 61 execute_process(COMMAND "${CMAKE_C_COMPILER}" "-E" 62 ${CMAKE_C_FLAGS} 63 ${PLATFORM_C_FLAGS} 64 "-I${SRCDIR}" 65 "-I${BINDIR}" 66 ${INCLUDES} 67 "-DPNGLIB_LIBNAME=PNG${PNGLIB_MAJOR}${PNGLIB_MINOR}_0" 68 "-DPNGLIB_VERSION=${PNGLIB_VERSION}" 69 "-DSYMBOL_PREFIX=${SYMBOL_PREFIX}" 70 "-DPNG_NO_USE_READ_MACROS" 71 "-DPNG_BUILDING_SYMBOL_TABLE" 72 ${PNG_PREFIX_DEF} 73 "${INPUT}" 74 OUTPUT_FILE "${OUTPUT}.tf1" 75 WORKING_DIRECTORY "${BINDIR}" 76 RESULT_VARIABLE CPP_FAIL) 77 if(CPP_FAIL) 78 message(FATAL_ERROR "Failed to generate ${OUTPUT}.tf1") 79 endif() 80 81 execute_process(COMMAND "${AWK}" -f "${SRCDIR}/scripts/dfn.awk" 82 "out=${OUTPUT}.tf2" "${OUTPUT}.tf1" 83 WORKING_DIRECTORY "${BINDIR}" 84 RESULT_VARIABLE AWK_FAIL) 85 if(AWK_FAIL) 86 message(FATAL_ERROR "Failed to generate ${OUTPUT}.tf2") 87 endif() 88 89 file(REMOVE "${OUTPUT}.tf1") 90 file(RENAME "${OUTPUT}.tf2" "${OUTPUT}") 91 else() 92 message(FATAL_ERROR "Unsupported conversion: ${INPUTEXT} to ${OUTPUTEXT}") 93 endif() 94