genout.cmake.in 3.1 KB

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