gensrc.cmake.in 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. # gensrc.cmake.in
  2. # Generate source files with awk, 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(DFA_XTRA "@DFA_XTRA@")
  13. set(PNG_PREFIX "@PNG_PREFIX@")
  14. set(PNGLIB_VERSION "@PNGLIB_VERSION@")
  15. if("${OUTPUT}" STREQUAL "scripts/pnglibconf.c")
  16. # Generate scripts/pnglibconf.c
  17. file(REMOVE "${BINDIR}/pnglibconf.tf6" "${BINDIR}/pnglibconf.tf7")
  18. execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "com ${PNGLIB_VERSION} STANDARD API DEFINITION"
  19. COMMAND "${AWK}" -f "${SRCDIR}/scripts/options.awk"
  20. "out=pnglibconf.tf6" "logunsupported=1" "version=search"
  21. "${SRCDIR}/pngconf.h" "-"
  22. "${SRCDIR}/scripts/pnglibconf.dfa"
  23. WORKING_DIRECTORY "${BINDIR}"
  24. RESULT_VARIABLE AWK_FAIL)
  25. if(AWK_FAIL)
  26. message(FATAL_ERROR "Failed to generate pnglibconf.tf6")
  27. endif()
  28. execute_process(COMMAND "${AWK}" -f "${SRCDIR}/scripts/options.awk"
  29. "out=pnglibconf.tf7" "pnglibconf.tf6"
  30. WORKING_DIRECTORY "${BINDIR}"
  31. RESULT_VARIABLE AWK_FAIL)
  32. if(AWK_FAIL)
  33. message(FATAL_ERROR "Failed to generate pnglibconf.tf7")
  34. endif()
  35. file(REMOVE "pnglibconf.tf6")
  36. file(MAKE_DIRECTORY "${BINDIR}/scripts")
  37. file(RENAME "pnglibconf.tf7" "${BINDIR}/scripts/pnglibconf.c")
  38. elseif ("${OUTPUT}" STREQUAL "pnglibconf.c")
  39. # Generate pnglibconf.c
  40. file(REMOVE "${BINDIR}/pnglibconf.tf4" "${BINDIR}/pnglibconf.tf5")
  41. execute_process(COMMAND "${AWK}" -f "${SRCDIR}/scripts/options.awk"
  42. out=pnglibconf.tf4 version=search
  43. ${SRCDIR}/pngconf.h ${SRCDIR}/scripts/pnglibconf.dfa
  44. ${SRCDIR}/pngusr.dfa ${DFA_XTRA}
  45. WORKING_DIRECTORY "${BINDIR}"
  46. RESULT_VARIABLE AWK_FAIL)
  47. if(AWK_FAIL)
  48. message(FATAL_ERROR "Failed to generate pnglibconf.tf4")
  49. endif()
  50. execute_process(COMMAND "${AWK}" -f "${SRCDIR}/scripts/options.awk"
  51. out=pnglibconf.tf5 pnglibconf.tf4
  52. WORKING_DIRECTORY "${BINDIR}"
  53. RESULT_VARIABLE AWK_FAIL)
  54. if(AWK_FAIL)
  55. message(FATAL_ERROR "Failed to generate pnglibconf.tf5")
  56. endif()
  57. file(REMOVE "pnglibconf.tf4")
  58. file(MAKE_DIRECTORY "${BINDIR}/scripts")
  59. file(RENAME "pnglibconf.tf5" "${BINDIR}/pnglibconf.c")
  60. elseif ("${OUTPUT}" STREQUAL "pnglibconf.h")
  61. # Generate pnglibconf.h
  62. file(REMOVE "${BINDIR}/${OUTPUT}")
  63. if(PNG_PREFIX)
  64. file(REMOVE "pnglibconf.tf8")
  65. execute_process(COMMAND "${AWK}" "s==0 && NR>1{print prev}
  66. s==0{prev=\$0}
  67. s==1{print \"#define\", \$1, \"${PNG_PREFIX}\" \$1}
  68. s==2{print \"#define ${PNG_PREFIX}png_\" \$1, \"PNG_\" \$1}
  69. END{print prev}" s=0 pnglibconf.out s=1 "${BINDIR}/scripts/prefix.out"
  70. s=2 "${SRCDIR}/scripts/macro.lst"
  71. OUTPUT_FILE pnglibconf.tf8
  72. RESULT_VARIABLE AWK_FAIL)
  73. if(AWK_FAIL)
  74. message(FATAL_ERROR "Failed to generate pnglibconf.tf8")
  75. endif()
  76. file(RENAME "pnglibconf.tf8" "${BINDIR}/${OUTPUT}")
  77. else()
  78. execute_process(COMMAND "${CMAKE_COMMAND}" -E copy "${BINDIR}/pnglibconf.out"
  79. "${BINDIR}/${OUTPUT}"
  80. RESULT_VARIABLE COPY_FAIL)
  81. if(COPY_FAIL)
  82. message(FATAL_ERROR "Failed to create pnglibconf.h")
  83. endif()
  84. endif()
  85. elseif ("${OUTPUT}" STREQUAL "pngprefix.h")
  86. # Generate pngprefix.h
  87. file(REMOVE "${BINDIR}/${OUTPUT}")
  88. if(PNG_PREFIX)
  89. file(REMOVE "pngprefix.tf1")
  90. execute_process(COMMAND "${AWK}"
  91. "{print \"#define\", \$1, \"${PNG_PREFIX}\" \$1}"
  92. "${BINDIR}/scripts/intprefix.out"
  93. OUTPUT_FILE "pngprefix.tf1"
  94. RESULT_VARIABLE AWK_FAIL)
  95. if(AWK_FAIL)
  96. message(FATAL_ERROR "Failed to generate pngprefix.tf1")
  97. endif()
  98. file(RENAME "pngprefix.tf1" "${BINDIR}/${OUTPUT}")
  99. else()
  100. file(WRITE "${BINDIR}/${OUTPUT}" "/* No libpng symbol prefix configured. */")
  101. endif()
  102. elseif("${OUTPUT}" STREQUAL "scripts/pnglibconf.h.prebuilt")
  103. # Generate scripts/pnglibconf.h.prebuilt (fails build)
  104. message(STATUS "Attempting to build scripts/pnglibconf.h.prebuilt")
  105. message(STATUS "This is a machine generated file, but if you want to make")
  106. message(STATUS "a new one simply build the 'genfiles' target, and copy")
  107. message(STATUS "scripts/pnglibconf.out to scripts/pnglibconf.h.prebuilt")
  108. message(STATUS "AND set PNG_ZLIB_VERNUM to 0 (you MUST do this)")
  109. message(FATAL_ERROR "Stopping build")
  110. else()
  111. message(FATAL_ERROR "Unsupported output: ${OUTPUT}")
  112. endif()