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