xref: /aosp_15_r20/external/libpng/scripts/cmake/genout.cmake.in (revision a67afe4df73cf47866eedc69947994b8ff839aba)
1# genout.cmake.in
2# Generate .out from .c with awk (generic), 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(CMAKE_C_COMPILER "@CMAKE_C_COMPILER@")
21set(CMAKE_C_FLAGS @CMAKE_C_FLAGS@)
22set(CMAKE_SYSROOT @CMAKE_SYSROOT@)
23set(INCDIR "@CMAKE_CURRENT_BINARY_DIR@")
24set(PNG_PREFIX "@PNG_PREFIX@")
25set(PNGLIB_MAJOR "@PNGLIB_MAJOR@")
26set(PNGLIB_MINOR "@PNGLIB_MINOR@")
27set(PNGLIB_VERSION "@PNGLIB_VERSION@")
28set(ZLIBINCDIR "@ZLIB_INCLUDE_DIRS@")
29
30set(PLATFORM_C_FLAGS)
31if(APPLE)
32  set(CMAKE_OSX_INTERNAL_ARCHITECTURES "@CMAKE_OSX_INTERNAL_ARCHITECTURES@")
33  set(CMAKE_OSX_SYSROOT "@CMAKE_OSX_SYSROOT@")
34  if(CMAKE_OSX_INTERNAL_ARCHITECTURES)
35    set(PLATFORM_C_FLAGS ${PLATFORM_C_FLAGS} -arch ${CMAKE_OSX_INTERNAL_ARCHITECTURES})
36  endif()
37  if(CMAKE_OSX_SYSROOT)
38    set(PLATFORM_C_FLAGS ${PLATFORM_C_FLAGS} -isysroot ${CMAKE_OSX_SYSROOT})
39  endif()
40endif()
41
42if(CMAKE_SYSROOT)
43  set(PLATFORM_C_FLAGS ${PLATFORM_C_FLAGS} "--sysroot=${CMAKE_SYSROOT}")
44endif()
45
46get_filename_component(INPUTEXT "${INPUT}" EXT)
47get_filename_component(OUTPUTEXT "${OUTPUT}" EXT)
48get_filename_component(INPUTBASE "${INPUT}" NAME_WE)
49get_filename_component(OUTPUTBASE "${OUTPUT}" NAME_WE)
50get_filename_component(INPUTDIR "${INPUT}" PATH)
51get_filename_component(OUTPUTDIR "${OUTPUT}" PATH)
52
53if(INPUTEXT STREQUAL ".c" AND OUTPUTEXT STREQUAL ".out")
54  get_filename_component(GENDIR "${OUTPUT}" PATH)
55  file(MAKE_DIRECTORY "${GENDIR}")
56
57  file(REMOVE "${OUTPUT}.tf1" "${OUTPUT}.tf2")
58
59  set(INCLUDES "-I${INCDIR}")
60  if(ZLIBINCDIR)
61    foreach(dir ${ZLIBINCDIR})
62      list(APPEND INCLUDES "-I${dir}")
63    endforeach()
64  endif()
65
66  if(PNG_PREFIX)
67    set(PNG_PREFIX_DEF "-DPNG_PREFIX=${PNG_PREFIX}")
68  endif()
69
70  execute_process(COMMAND "${CMAKE_C_COMPILER}" "-E"
71                          ${CMAKE_C_FLAGS}
72                          ${PLATFORM_C_FLAGS}
73                          "-I${SRCDIR}"
74                          "-I${BINDIR}"
75                          ${INCLUDES}
76                          "-DPNGLIB_LIBNAME=PNG${PNGLIB_MAJOR}${PNGLIB_MINOR}_0"
77                          "-DPNGLIB_VERSION=${PNGLIB_VERSION}"
78                          "-DSYMBOL_PREFIX=${SYMBOL_PREFIX}"
79                          "-DPNG_NO_USE_READ_MACROS"
80                          "-DPNG_BUILDING_SYMBOL_TABLE"
81                          ${PNG_PREFIX_DEF}
82                          "${INPUT}"
83                  OUTPUT_FILE "${OUTPUT}.tf1"
84                  WORKING_DIRECTORY "${BINDIR}"
85                  RESULT_VARIABLE CPP_FAIL)
86  if(CPP_FAIL)
87    message(FATAL_ERROR "Failed to generate ${OUTPUT}.tf1")
88  endif()
89
90  execute_process(COMMAND "${AWK}" -f "${SRCDIR}/scripts/dfn.awk"
91                          "out=${OUTPUT}.tf2" "${OUTPUT}.tf1"
92                  WORKING_DIRECTORY "${BINDIR}"
93                  RESULT_VARIABLE AWK_FAIL)
94  if(AWK_FAIL)
95    message(FATAL_ERROR "Failed to generate ${OUTPUT}.tf2")
96  endif()
97
98  file(REMOVE "${OUTPUT}.tf1")
99  file(RENAME "${OUTPUT}.tf2" "${OUTPUT}")
100else()
101  message(FATAL_ERROR "Unsupported conversion: ${INPUTEXT} to ${OUTPUTEXT}")
102endif()
103