2 # - Look for GNU Bison, the parser generator
\r
3 # Based off a news post from Andy Cedilnik at Kitware
\r
4 # Defines the following:
\r
5 # BISON_EXECUTABLE - path to the bison executable
\r
6 # BISON_FILE - parse a file with bison
\r
7 # BISON_PREFIX_OUTPUTS - Set to true to make BISON_FILE produce prefixed
\r
8 # symbols in the generated output based on filename.
\r
9 # So for ${filename}.y, you'll get ${filename}parse(), etc.
\r
10 # instead of yyparse().
\r
11 # BISON_GENERATE_DEFINES - Set to true to make BISON_FILE output the matching
\r
12 # .h file for a .c file. You want this if you're using
\r
15 IF(NOT DEFINED BISON_PREFIX_OUTPUTS)
\r
16 SET(BISON_PREFIX_OUTPUTS FALSE)
\r
17 ENDIF(NOT DEFINED BISON_PREFIX_OUTPUTS)
\r
19 IF(NOT DEFINED BISON_GENERATE_DEFINES)
\r
20 SET(BISON_GENERATE_DEFINES TRUE)
\r
21 ENDIF(NOT DEFINED BISON_GENERATE_DEFINES)
\r
23 IF(NOT BISON_EXECUTABLE)
\r
24 MESSAGE(STATUS "Looking for bison")
\r
25 FIND_PROGRAM(BISON_EXECUTABLE bison)
\r
26 IF(BISON_EXECUTABLE)
\r
27 MESSAGE(STATUS "Looking for bison -- ${BISON_EXECUTABLE}")
\r
28 ENDIF(BISON_EXECUTABLE)
\r
29 ENDIF(NOT BISON_EXECUTABLE)
\r
31 IF(BISON_EXECUTABLE)
\r
32 MACRO(BISON_FILE FILENAME)
\r
33 GET_FILENAME_COMPONENT(PATH "${FILENAME}" PATH)
\r
34 GET_FILENAME_COMPONENT(HEAD "${FILENAME}" NAME_WE)
\r
35 IF(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/${PATH}")
\r
36 FILE(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${PATH}")
\r
37 ENDIF(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/${PATH}")
\r
38 IF(BISON_PREFIX_OUTPUTS)
\r
39 SET(PREFIX "${HEAD}")
\r
40 ELSE(BISON_PREFIX_OUTPUTS)
\r
42 ENDIF(BISON_PREFIX_OUTPUTS)
\r
43 SET(OUTFILE "${CMAKE_CURRENT_BINARY_DIR}/${PATH}/${HEAD}.tab.cpp")
\r
44 IF(BISON_GENERATE_DEFINES)
\r
45 SET(HEADER "${CMAKE_CURRENT_BINARY_DIR}/${PATH}/${HEAD}.tab.hpp")
\r
47 OUTPUT "${OUTFILE}" "${HEADER}"
\r
48 COMMAND "${BISON_EXECUTABLE}"
\r
49 ARGS "--name-prefix=${PREFIX}"
\r
51 "--output-file=${OUTFILE}"
\r
53 "${CMAKE_CURRENT_SOURCE_DIR}/${FILENAME}"
\r
54 DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${FILENAME}")
\r
55 SET_SOURCE_FILES_PROPERTIES("${OUTFILE}" "${HEADER}" PROPERTIES GENERATED TRUE)
\r
56 SET_SOURCE_FILES_PROPERTIES("${HEADER}" PROPERTIES HEADER_FILE_ONLY TRUE)
\r
57 ELSE(BISON_GENERATE_DEFINES)
\r
60 COMMAND "${BISON_EXECUTABLE}"
\r
61 ARGS "--name-prefix=${PREFIX}"
\r
62 "--output-file=${OUTFILE}"
\r
64 "${CMAKE_CURRENT_SOURCE_DIR}/${FILENAME}"
\r
65 DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${FILENAME}")
\r
66 SET_SOURCE_FILES_PROPERTIES("${OUTFILE}" PROPERTIES GENERATED TRUE)
\r
67 ENDIF(BISON_GENERATE_DEFINES)
\r
68 ENDMACRO(BISON_FILE)
\r
69 ENDIF(BISON_EXECUTABLE)
\r