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