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