xref: /aosp_15_r20/external/libpng/scripts/cmake/genout.cmake.in (revision a67afe4df73cf47866eedc69947994b8ff839aba)
1*a67afe4dSAndroid Build Coastguard Worker# genout.cmake.in
2*a67afe4dSAndroid Build Coastguard Worker# Generate .out from .c with awk (generic), based upon the automake logic.
3*a67afe4dSAndroid Build Coastguard Worker
4*a67afe4dSAndroid Build Coastguard Worker# Copyright (c) 2022-2024 Cosmin Truta
5*a67afe4dSAndroid Build Coastguard Worker# Copyright (c) 2016 Glenn Randers-Pehrson
6*a67afe4dSAndroid Build Coastguard Worker# Written by Roger Leigh, 2016
7*a67afe4dSAndroid Build Coastguard Worker#
8*a67afe4dSAndroid Build Coastguard Worker# Use, modification and distribution are subject to
9*a67afe4dSAndroid Build Coastguard Worker# the same licensing terms and conditions as libpng.
10*a67afe4dSAndroid Build Coastguard Worker# Please see the copyright notice in png.h or visit
11*a67afe4dSAndroid Build Coastguard Worker# http://libpng.org/pub/png/src/libpng-LICENSE.txt
12*a67afe4dSAndroid Build Coastguard Worker#
13*a67afe4dSAndroid Build Coastguard Worker# SPDX-License-Identifier: libpng-2.0
14*a67afe4dSAndroid Build Coastguard Worker
15*a67afe4dSAndroid Build Coastguard Worker# Variables substituted from CMakeLists.txt
16*a67afe4dSAndroid Build Coastguard Workerset(SRCDIR "@CMAKE_CURRENT_SOURCE_DIR@")
17*a67afe4dSAndroid Build Coastguard Workerset(BINDIR "@CMAKE_CURRENT_BINARY_DIR@")
18*a67afe4dSAndroid Build Coastguard Worker
19*a67afe4dSAndroid Build Coastguard Workerset(AWK "@AWK@")
20*a67afe4dSAndroid Build Coastguard Workerset(CMAKE_C_COMPILER "@CMAKE_C_COMPILER@")
21*a67afe4dSAndroid Build Coastguard Workerset(CMAKE_C_FLAGS @CMAKE_C_FLAGS@)
22*a67afe4dSAndroid Build Coastguard Workerset(CMAKE_SYSROOT @CMAKE_SYSROOT@)
23*a67afe4dSAndroid Build Coastguard Workerset(INCDIR "@CMAKE_CURRENT_BINARY_DIR@")
24*a67afe4dSAndroid Build Coastguard Workerset(PNG_PREFIX "@PNG_PREFIX@")
25*a67afe4dSAndroid Build Coastguard Workerset(PNGLIB_MAJOR "@PNGLIB_MAJOR@")
26*a67afe4dSAndroid Build Coastguard Workerset(PNGLIB_MINOR "@PNGLIB_MINOR@")
27*a67afe4dSAndroid Build Coastguard Workerset(PNGLIB_VERSION "@PNGLIB_VERSION@")
28*a67afe4dSAndroid Build Coastguard Workerset(ZLIBINCDIR "@ZLIB_INCLUDE_DIRS@")
29*a67afe4dSAndroid Build Coastguard Worker
30*a67afe4dSAndroid Build Coastguard Workerset(PLATFORM_C_FLAGS)
31*a67afe4dSAndroid Build Coastguard Workerif(APPLE)
32*a67afe4dSAndroid Build Coastguard Worker  set(CMAKE_OSX_INTERNAL_ARCHITECTURES "@CMAKE_OSX_INTERNAL_ARCHITECTURES@")
33*a67afe4dSAndroid Build Coastguard Worker  set(CMAKE_OSX_SYSROOT "@CMAKE_OSX_SYSROOT@")
34*a67afe4dSAndroid Build Coastguard Worker  if(CMAKE_OSX_INTERNAL_ARCHITECTURES)
35*a67afe4dSAndroid Build Coastguard Worker    set(PLATFORM_C_FLAGS ${PLATFORM_C_FLAGS} -arch ${CMAKE_OSX_INTERNAL_ARCHITECTURES})
36*a67afe4dSAndroid Build Coastguard Worker  endif()
37*a67afe4dSAndroid Build Coastguard Worker  if(CMAKE_OSX_SYSROOT)
38*a67afe4dSAndroid Build Coastguard Worker    set(PLATFORM_C_FLAGS ${PLATFORM_C_FLAGS} -isysroot ${CMAKE_OSX_SYSROOT})
39*a67afe4dSAndroid Build Coastguard Worker  endif()
40*a67afe4dSAndroid Build Coastguard Workerendif()
41*a67afe4dSAndroid Build Coastguard Worker
42*a67afe4dSAndroid Build Coastguard Workerif(CMAKE_SYSROOT)
43*a67afe4dSAndroid Build Coastguard Worker  set(PLATFORM_C_FLAGS ${PLATFORM_C_FLAGS} "--sysroot=${CMAKE_SYSROOT}")
44*a67afe4dSAndroid Build Coastguard Workerendif()
45*a67afe4dSAndroid Build Coastguard Worker
46*a67afe4dSAndroid Build Coastguard Workerget_filename_component(INPUTEXT "${INPUT}" EXT)
47*a67afe4dSAndroid Build Coastguard Workerget_filename_component(OUTPUTEXT "${OUTPUT}" EXT)
48*a67afe4dSAndroid Build Coastguard Workerget_filename_component(INPUTBASE "${INPUT}" NAME_WE)
49*a67afe4dSAndroid Build Coastguard Workerget_filename_component(OUTPUTBASE "${OUTPUT}" NAME_WE)
50*a67afe4dSAndroid Build Coastguard Workerget_filename_component(INPUTDIR "${INPUT}" PATH)
51*a67afe4dSAndroid Build Coastguard Workerget_filename_component(OUTPUTDIR "${OUTPUT}" PATH)
52*a67afe4dSAndroid Build Coastguard Worker
53*a67afe4dSAndroid Build Coastguard Workerif(INPUTEXT STREQUAL ".c" AND OUTPUTEXT STREQUAL ".out")
54*a67afe4dSAndroid Build Coastguard Worker  get_filename_component(GENDIR "${OUTPUT}" PATH)
55*a67afe4dSAndroid Build Coastguard Worker  file(MAKE_DIRECTORY "${GENDIR}")
56*a67afe4dSAndroid Build Coastguard Worker
57*a67afe4dSAndroid Build Coastguard Worker  file(REMOVE "${OUTPUT}.tf1" "${OUTPUT}.tf2")
58*a67afe4dSAndroid Build Coastguard Worker
59*a67afe4dSAndroid Build Coastguard Worker  set(INCLUDES "-I${INCDIR}")
60*a67afe4dSAndroid Build Coastguard Worker  if(ZLIBINCDIR)
61*a67afe4dSAndroid Build Coastguard Worker    foreach(dir ${ZLIBINCDIR})
62*a67afe4dSAndroid Build Coastguard Worker      list(APPEND INCLUDES "-I${dir}")
63*a67afe4dSAndroid Build Coastguard Worker    endforeach()
64*a67afe4dSAndroid Build Coastguard Worker  endif()
65*a67afe4dSAndroid Build Coastguard Worker
66*a67afe4dSAndroid Build Coastguard Worker  if(PNG_PREFIX)
67*a67afe4dSAndroid Build Coastguard Worker    set(PNG_PREFIX_DEF "-DPNG_PREFIX=${PNG_PREFIX}")
68*a67afe4dSAndroid Build Coastguard Worker  endif()
69*a67afe4dSAndroid Build Coastguard Worker
70*a67afe4dSAndroid Build Coastguard Worker  execute_process(COMMAND "${CMAKE_C_COMPILER}" "-E"
71*a67afe4dSAndroid Build Coastguard Worker                          ${CMAKE_C_FLAGS}
72*a67afe4dSAndroid Build Coastguard Worker                          ${PLATFORM_C_FLAGS}
73*a67afe4dSAndroid Build Coastguard Worker                          "-I${SRCDIR}"
74*a67afe4dSAndroid Build Coastguard Worker                          "-I${BINDIR}"
75*a67afe4dSAndroid Build Coastguard Worker                          ${INCLUDES}
76*a67afe4dSAndroid Build Coastguard Worker                          "-DPNGLIB_LIBNAME=PNG${PNGLIB_MAJOR}${PNGLIB_MINOR}_0"
77*a67afe4dSAndroid Build Coastguard Worker                          "-DPNGLIB_VERSION=${PNGLIB_VERSION}"
78*a67afe4dSAndroid Build Coastguard Worker                          "-DSYMBOL_PREFIX=${SYMBOL_PREFIX}"
79*a67afe4dSAndroid Build Coastguard Worker                          "-DPNG_NO_USE_READ_MACROS"
80*a67afe4dSAndroid Build Coastguard Worker                          "-DPNG_BUILDING_SYMBOL_TABLE"
81*a67afe4dSAndroid Build Coastguard Worker                          ${PNG_PREFIX_DEF}
82*a67afe4dSAndroid Build Coastguard Worker                          "${INPUT}"
83*a67afe4dSAndroid Build Coastguard Worker                  OUTPUT_FILE "${OUTPUT}.tf1"
84*a67afe4dSAndroid Build Coastguard Worker                  WORKING_DIRECTORY "${BINDIR}"
85*a67afe4dSAndroid Build Coastguard Worker                  RESULT_VARIABLE CPP_FAIL)
86*a67afe4dSAndroid Build Coastguard Worker  if(CPP_FAIL)
87*a67afe4dSAndroid Build Coastguard Worker    message(FATAL_ERROR "Failed to generate ${OUTPUT}.tf1")
88*a67afe4dSAndroid Build Coastguard Worker  endif()
89*a67afe4dSAndroid Build Coastguard Worker
90*a67afe4dSAndroid Build Coastguard Worker  execute_process(COMMAND "${AWK}" -f "${SRCDIR}/scripts/dfn.awk"
91*a67afe4dSAndroid Build Coastguard Worker                          "out=${OUTPUT}.tf2" "${OUTPUT}.tf1"
92*a67afe4dSAndroid Build Coastguard Worker                  WORKING_DIRECTORY "${BINDIR}"
93*a67afe4dSAndroid Build Coastguard Worker                  RESULT_VARIABLE AWK_FAIL)
94*a67afe4dSAndroid Build Coastguard Worker  if(AWK_FAIL)
95*a67afe4dSAndroid Build Coastguard Worker    message(FATAL_ERROR "Failed to generate ${OUTPUT}.tf2")
96*a67afe4dSAndroid Build Coastguard Worker  endif()
97*a67afe4dSAndroid Build Coastguard Worker
98*a67afe4dSAndroid Build Coastguard Worker  file(REMOVE "${OUTPUT}.tf1")
99*a67afe4dSAndroid Build Coastguard Worker  file(RENAME "${OUTPUT}.tf2" "${OUTPUT}")
100*a67afe4dSAndroid Build Coastguard Workerelse()
101*a67afe4dSAndroid Build Coastguard Worker  message(FATAL_ERROR "Unsupported conversion: ${INPUTEXT} to ${OUTPUTEXT}")
102*a67afe4dSAndroid Build Coastguard Workerendif()
103