Home | History | Annotate | Download | only in scripts
      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
     12 set(SRCDIR "@CMAKE_CURRENT_SOURCE_DIR@")
     13 set(BINDIR "@CMAKE_CURRENT_BINARY_DIR@")
     14 
     15 set(AWK "@AWK@")
     16 set(DFA_XTRA "@DFA_XTRA@")
     17 set(PNG_PREFIX "@PNG_PREFIX@")
     18 set(PNGLIB_VERSION "@PNGLIB_VERSION@")
     19 
     20 if("${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 
     48 elseif ("${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 
     75 elseif ("${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 
    104 elseif ("${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 
    126 elseif("${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 
    136 else()
    137   message(FATAL_ERROR "Unsupported output: ${OUTPUT}")
    138 endif()
    139