allow to call a function defined later in the source
[bosc.git] / src / CMakeUseBison.txt
blob45a4fa817d82533d1d43c3f2a7d43e05d199f813
1 # vim: ft=cmake\r
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
13 #                           flex.\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
41       SET(PREFIX "yy")\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
46       ADD_CUSTOM_COMMAND(\r
47         OUTPUT "${OUTFILE}" "${HEADER}"\r
48         COMMAND "${BISON_EXECUTABLE}"\r
49         ARGS "--name-prefix=${PREFIX}"\r
50         "--defines"\r
51         "--output-file=${OUTFILE}"\r
52         "--debug"\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
58       ADD_CUSTOM_COMMAND(\r
59         OUTPUT "${OUTFILE}"\r
60         COMMAND "${BISON_EXECUTABLE}"\r
61         ARGS "--name-prefix=${PREFIX}"\r
62         "--output-file=${OUTFILE}"\r
63         "--debug"\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