summaryrefslogtreecommitdiff
path: root/cmake/modules/FindBison.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/modules/FindBison.cmake')
-rwxr-xr-xcmake/modules/FindBison.cmake52
1 files changed, 52 insertions, 0 deletions
diff --git a/cmake/modules/FindBison.cmake b/cmake/modules/FindBison.cmake
new file mode 100755
index 0000000000..0320ae3ce1
--- /dev/null
+++ b/cmake/modules/FindBison.cmake
@@ -0,0 +1,52 @@
+# - Try to find Bison
+# Once done this will define
+#
+# BISON_FOUND - system has Bison
+# BISON_EXECUTABLE - path of the bison executable
+# BISON_VERSION - the version string, like "2.5.31"
+#
+
+MACRO(FIND_BISON)
+ FIND_PROGRAM(BISON_EXECUTABLE NAMES bison)
+
+ IF(BISON_EXECUTABLE)
+ SET(BISON_FOUND TRUE)
+
+ EXECUTE_PROCESS(COMMAND ${BISON_EXECUTABLE} --version
+ OUTPUT_VARIABLE _BISON_VERSION
+ )
+ string (REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" BISON_VERSION "${_bison_VERSION}")
+ ENDIF(BISON_EXECUTABLE)
+
+ IF(BISON_FOUND)
+ IF(NOT Bison_FIND_QUIETLY)
+ MESSAGE(STATUS "Found Bison: ${BISON_EXECUTABLE}")
+ ENDIF(NOT Bison_FIND_QUIETLY)
+ ELSE(BISON_FOUND)
+ IF(Bison_FIND_REQUIRED)
+ MESSAGE(FATAL_ERROR "Could not find Bison")
+ ENDIF(Bison_FIND_REQUIRED)
+ ENDIF(BISON_FOUND)
+ENDMACRO(FIND_BISON)
+
+MACRO(BISON_GENERATOR _PREFIX _Y_INPUT _H_OUTPUT _CPP_OUTPUT)
+ IF(BISON_EXECUTABLE)
+ GET_FILENAME_COMPONENT(_Y_DIR ${_Y_INPUT} PATH)
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${_CPP_OUTPUT}
+ OUTPUT ${_H_OUTPUT}
+ DEPENDS ${_Y_INPUT}
+ COMMAND ${BISON_EXECUTABLE}
+ ARGS
+ -p ${_PREFIX} -o"${_CPP_OUTPUT}"
+ --defines="${_H_OUTPUT}" ${_Y_INPUT}
+ WORKING_DIRECTORY ${_Y_DIR}
+ )
+ SET_SOURCE_FILES_PROPERTIES(
+ ${_CPP_OUTPUT} ${_H_OUTPUT}
+ GENERATED
+ )
+ ELSE(BISON_EXECUTABLE)
+ MESSAGE(SEND_ERROR "Can't find bison program, and it's required")
+ ENDIF(BISON_EXECUTABLE)
+ENDMACRO(BISON_GENERATOR)