summaryrefslogtreecommitdiff
path: root/cmake/bison.cmake
diff options
context:
space:
mode:
authorVladislav Vaintroub <vvaintroub@mysql.com>2009-11-09 12:32:48 +0100
committerVladislav Vaintroub <vvaintroub@mysql.com>2009-11-09 12:32:48 +0100
commit13cd7170ccadbc596146175c0674956f49aed830 (patch)
treeef650a7fd633d354f237aa267a871fce11fe48d3 /cmake/bison.cmake
parent411a6bfeb94e89f4cd4b8daaee96fe1913218a85 (diff)
downloadmariadb-git-13cd7170ccadbc596146175c0674956f49aed830.tar.gz
WL#5161 : Cross-platform build with CMake
Diffstat (limited to 'cmake/bison.cmake')
-rw-r--r--cmake/bison.cmake64
1 files changed, 64 insertions, 0 deletions
diff --git a/cmake/bison.cmake b/cmake/bison.cmake
new file mode 100644
index 00000000000..b1c2d7393fa
--- /dev/null
+++ b/cmake/bison.cmake
@@ -0,0 +1,64 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+FIND_PROGRAM(BISON_EXECUTABLE bison DOC "path to the bison executable")
+MARK_AS_ADVANCED(BISON_EXECUTABLE "")
+IF(NOT BISON_EXECUTABLE)
+ MESSAGE("Warning: Bison executable not found in PATH")
+ELSEIF(BISON_EXECUTABLE AND NOT BISON_USABLE)
+ # Check version as well
+ EXEC_PROGRAM(${BISON_EXECUTABLE} ARGS --version OUTPUT_VARIABLE BISON_VERSION_STR)
+ # Get first line in case it's multiline
+ STRING(REGEX REPLACE "([^\n]+).*" "\\1" FIRST_LINE "${BISON_VERSION_STR}")
+ # get version information
+ STRING(REGEX REPLACE ".* ([0-9]+)\\.([0-9]+)" "\\1" BISON_VERSION_MAJOR "${FIRST_LINE}")
+ STRING(REGEX REPLACE ".* ([0-9]+)\\.([0-9]+)" "\\2" BISON_VERSION_MINOR "${FIRST_LINE}")
+ IF (BISON_VERSION_MAJOR LESS 2)
+ MESSAGE("Warning: bison version is old. please update to version 2")
+ ELSE()
+ SET(BISON_USABLE 1 CACHE INTERNAL "Bison version 2 or higher")
+ ENDIF()
+ENDIF()
+
+# Use bison to generate C++ and header file
+MACRO (RUN_BISON input_yy output_cc output_h)
+ IF(BISON_TOO_OLD)
+ IF(EXISTS ${output_cc} AND EXISTS ${output_h})
+ SET(BISON_USABLE FALSE)
+ ENDIF()
+ ENDIF()
+ IF(BISON_USABLE)
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${output_cc}
+ ${output_h}
+ COMMAND bison -y -p MYSQL
+ --output=${output_cc}
+ --defines=${output_h}
+ ${input_yy}
+ DEPENDS ${input_yy}
+ )
+ ELSE()
+ # Bison is missing or not usable, e.g too old
+ IF(EXISTS ${output_cc} AND EXISTS ${output_h})
+ IF(${input_yy} IS_NEWER_THAN ${output_cc} OR ${input_yy} IS_NEWER_THAN ${output_h})
+ # Possibly timestamps are messed up in source distribution.
+ MESSAGE("Warning: no usable bison found, ${input_yy} will not be rebuilt.")
+ ENDIF()
+ ELSE()
+ # Output files are missing, bail out.
+ MESSAGE(FATAL_ERROR "Please install bison.")
+ ENDIF()
+ ENDIF()
+ENDMACRO()