Merge topic 'FindBISON-DEFINES_FILE'
6863c0d5 Help: Add notes for topic 'FindBISON-DEFINES_FILE' 12e534c2 FindBISON: Add DEFINES_FILE option to pass --defines=FILE eb859263 FindBISON: Use CMAKE_PARSE_ARGUMENTS to parse arguments 29985ad8 FindBISON: Use BISON_TARGET macro argument names internally 801b799f FindBISON: Improve documentation formatting
This commit is contained in:
commit
31ce82d46d
6
Help/release/dev/FindBISON-DEFINES_FILE.rst
Normal file
6
Help/release/dev/FindBISON-DEFINES_FILE.rst
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
FindBISON-DEFINES_FILE
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
* The :module:`FindBISON` module ``BISON_TARGET`` macro learned a
|
||||||
|
new ``DEFINES_FILE`` option to specify a custom output header
|
||||||
|
to be generated.
|
@ -2,60 +2,75 @@
|
|||||||
# FindBISON
|
# FindBISON
|
||||||
# ---------
|
# ---------
|
||||||
#
|
#
|
||||||
# Find bison executable and provides macros to generate custom build rules
|
# Find ``bison`` executable and provide a macro to generate custom build rules.
|
||||||
#
|
#
|
||||||
# The module defines the following variables:
|
# The module defines the following variables:
|
||||||
#
|
#
|
||||||
# ::
|
# ``BISON_EXECUTABLE``
|
||||||
|
# path to the ``bison`` program
|
||||||
#
|
#
|
||||||
# BISON_EXECUTABLE - path to the bison program
|
# ``BISON_VERSION``
|
||||||
# BISON_VERSION - version of bison
|
# version of ``bison``
|
||||||
# BISON_FOUND - true if the program was found
|
|
||||||
#
|
#
|
||||||
|
# ``BISON_FOUND``
|
||||||
|
# true if the program was found
|
||||||
#
|
#
|
||||||
|
# The minimum required version of ``bison`` can be specified using the
|
||||||
|
# standard CMake syntax, e.g. ``find_package(BISON 2.1.3)``.
|
||||||
#
|
#
|
||||||
# The minimum required version of bison can be specified using the
|
# If ``bison`` is found, the module defines the macro::
|
||||||
# standard CMake syntax, e.g. find_package(BISON 2.1.3)
|
|
||||||
#
|
#
|
||||||
# If bison is found, the module defines the macros:
|
# BISON_TARGET(<Name> <YaccInput> <CodeOutput>
|
||||||
|
# [COMPILE_FLAGS <flags>]
|
||||||
|
# [DEFINES_FILE <file>]
|
||||||
|
# [VERBOSE <file>]
|
||||||
|
# )
|
||||||
#
|
#
|
||||||
# ::
|
# which will create a custom rule to generate a parser. ``<YaccInput>`` is
|
||||||
#
|
# the path to a yacc file. ``<CodeOutput>`` is the name of the source file
|
||||||
# BISON_TARGET(<Name> <YaccInput> <CodeOutput> [VERBOSE <file>]
|
|
||||||
# [COMPILE_FLAGS <string>])
|
|
||||||
#
|
|
||||||
# which will create a custom rule to generate a parser. <YaccInput> is
|
|
||||||
# the path to a yacc file. <CodeOutput> is the name of the source file
|
|
||||||
# generated by bison. A header file is also be generated, and contains
|
# generated by bison. A header file is also be generated, and contains
|
||||||
# the token list. If COMPILE_FLAGS option is specified, the next
|
# the token list.
|
||||||
# parameter is added in the bison command line. if VERBOSE option is
|
|
||||||
# specified, <file> is created and contains verbose descriptions of the
|
|
||||||
# grammar and parser. The macro defines a set of variables:
|
|
||||||
#
|
#
|
||||||
# ::
|
# The options are:
|
||||||
#
|
#
|
||||||
# BISON_${Name}_DEFINED - true is the macro ran successfully
|
# ``COMPILE_FLAGS <flags>``
|
||||||
# BISON_${Name}_INPUT - The input source file, an alias for <YaccInput>
|
# Specify flags to be added to the ``bison`` command line.
|
||||||
# BISON_${Name}_OUTPUT_SOURCE - The source file generated by bison
|
|
||||||
# BISON_${Name}_OUTPUT_HEADER - The header file generated by bison
|
|
||||||
# BISON_${Name}_OUTPUTS - The sources files generated by bison
|
|
||||||
# BISON_${Name}_COMPILE_FLAGS - Options used in the bison command line
|
|
||||||
#
|
#
|
||||||
|
# ``DEFINES_FILE <file>``
|
||||||
|
# Specify a non-default header ``<file>`` to be generated by ``bison``.
|
||||||
#
|
#
|
||||||
|
# ``VERBOSE <file>``
|
||||||
|
# Tell ``bison`` to write verbose descriptions of the grammar and
|
||||||
|
# parser to the given ``<file>``.
|
||||||
#
|
#
|
||||||
# ::
|
# The macro defines the following variables:
|
||||||
#
|
#
|
||||||
# ====================================================================
|
# ``BISON_<Name>_DEFINED``
|
||||||
# Example:
|
# true is the macro ran successfully
|
||||||
#
|
#
|
||||||
|
# ``BISON_<Name>_INPUT``
|
||||||
|
# The input source file, an alias for <YaccInput>
|
||||||
#
|
#
|
||||||
|
# ``BISON_<Name>_OUTPUT_SOURCE``
|
||||||
|
# The source file generated by bison
|
||||||
#
|
#
|
||||||
# ::
|
# ``BISON_<Name>_OUTPUT_HEADER``
|
||||||
|
# The header file generated by bison
|
||||||
|
#
|
||||||
|
# ``BISON_<Name>_OUTPUTS``
|
||||||
|
# The sources files generated by bison
|
||||||
|
#
|
||||||
|
# ``BISON_<Name>_COMPILE_FLAGS``
|
||||||
|
# Options used in the ``bison`` command line
|
||||||
|
#
|
||||||
|
# Example usage:
|
||||||
|
#
|
||||||
|
# .. code-block:: cmake
|
||||||
#
|
#
|
||||||
# find_package(BISON)
|
# find_package(BISON)
|
||||||
# BISON_TARGET(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cpp)
|
# BISON_TARGET(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cpp
|
||||||
|
# DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/parser.h)
|
||||||
# add_executable(Foo main.cpp ${BISON_MyParser_OUTPUTS})
|
# add_executable(Foo main.cpp ${BISON_MyParser_OUTPUTS})
|
||||||
# ====================================================================
|
|
||||||
|
|
||||||
#=============================================================================
|
#=============================================================================
|
||||||
# Copyright 2009 Kitware, Inc.
|
# Copyright 2009 Kitware, Inc.
|
||||||
@ -74,6 +89,8 @@
|
|||||||
find_program(BISON_EXECUTABLE NAMES bison win_bison DOC "path to the bison executable")
|
find_program(BISON_EXECUTABLE NAMES bison win_bison DOC "path to the bison executable")
|
||||||
mark_as_advanced(BISON_EXECUTABLE)
|
mark_as_advanced(BISON_EXECUTABLE)
|
||||||
|
|
||||||
|
include(CMakeParseArguments)
|
||||||
|
|
||||||
if(BISON_EXECUTABLE)
|
if(BISON_EXECUTABLE)
|
||||||
# the bison commands should be executed with the C locale, otherwise
|
# the bison commands should be executed with the C locale, otherwise
|
||||||
# the message (which are parsed) may be translated
|
# the message (which are parsed) may be translated
|
||||||
@ -128,6 +145,12 @@ if(BISON_EXECUTABLE)
|
|||||||
list(APPEND BISON_TARGET_cmdopt ${BISON_TARGET_extraopts})
|
list(APPEND BISON_TARGET_cmdopt ${BISON_TARGET_extraopts})
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
|
# internal macro
|
||||||
|
macro(BISON_TARGET_option_defines Header)
|
||||||
|
set(BISON_TARGET_output_header "${Header}")
|
||||||
|
list(APPEND BISON_TARGET_cmdopt --defines=${BISON_TARGET_output_header})
|
||||||
|
endmacro()
|
||||||
|
|
||||||
#============================================================
|
#============================================================
|
||||||
# BISON_TARGET (public macro)
|
# BISON_TARGET (public macro)
|
||||||
#============================================================
|
#============================================================
|
||||||
@ -136,51 +159,61 @@ if(BISON_EXECUTABLE)
|
|||||||
set(BISON_TARGET_output_header "")
|
set(BISON_TARGET_output_header "")
|
||||||
set(BISON_TARGET_cmdopt "")
|
set(BISON_TARGET_cmdopt "")
|
||||||
set(BISON_TARGET_outputs "${BisonOutput}")
|
set(BISON_TARGET_outputs "${BisonOutput}")
|
||||||
if(NOT ${ARGC} EQUAL 3 AND NOT ${ARGC} EQUAL 5 AND NOT ${ARGC} EQUAL 7)
|
|
||||||
|
# Parsing parameters
|
||||||
|
set(BISON_TARGET_PARAM_OPTIONS)
|
||||||
|
set(BISON_TARGET_PARAM_ONE_VALUE_KEYWORDS
|
||||||
|
VERBOSE
|
||||||
|
COMPILE_FLAGS
|
||||||
|
DEFINES_FILE
|
||||||
|
)
|
||||||
|
set(BISON_TARGET_PARAM_MULTI_VALUE_KEYWORDS)
|
||||||
|
cmake_parse_arguments(
|
||||||
|
BISON_TARGET_ARG
|
||||||
|
"${BISON_TARGET_PARAM_OPTIONS}"
|
||||||
|
"${BISON_TARGET_PARAM_ONE_VALUE_KEYWORDS}"
|
||||||
|
"${BISON_TARGET_PARAM_MULTI_VALUE_KEYWORDS}"
|
||||||
|
${ARGN}
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT "${BISON_TARGET_ARG_UNPARSED_ARGUMENTS}" STREQUAL "")
|
||||||
message(SEND_ERROR "Usage")
|
message(SEND_ERROR "Usage")
|
||||||
else()
|
else()
|
||||||
# Parsing parameters
|
if(NOT "${BISON_TARGET_ARG_VERBOSE}" STREQUAL "")
|
||||||
if(${ARGC} GREATER 5 OR ${ARGC} EQUAL 5)
|
BISON_TARGET_option_verbose(${Name} ${BisonOutput} "${BISON_TARGET_ARG_VERBOSE}")
|
||||||
if("${ARGV3}" STREQUAL "VERBOSE")
|
|
||||||
BISON_TARGET_option_verbose(${Name} ${BisonOutput} "${ARGV4}")
|
|
||||||
endif()
|
endif()
|
||||||
if("${ARGV3}" STREQUAL "COMPILE_FLAGS")
|
if(NOT "${BISON_TARGET_ARG_COMPILE_FLAGS}" STREQUAL "")
|
||||||
BISON_TARGET_option_extraopts("${ARGV4}")
|
BISON_TARGET_option_extraopts("${BISON_TARGET_ARG_COMPILE_FLAGS}")
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(${ARGC} EQUAL 7)
|
|
||||||
if("${ARGV5}" STREQUAL "VERBOSE")
|
|
||||||
BISON_TARGET_option_verbose(${Name} ${BisonOutput} "${ARGV6}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if("${ARGV5}" STREQUAL "COMPILE_FLAGS")
|
|
||||||
BISON_TARGET_option_extraopts("${ARGV6}")
|
|
||||||
endif()
|
endif()
|
||||||
|
if(NOT "${BISON_TARGET_ARG_DEFINES_FILE}" STREQUAL "")
|
||||||
|
BISON_TARGET_option_defines("${BISON_TARGET_ARG_DEFINES_FILE}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if("${BISON_TARGET_output_header}" STREQUAL "")
|
||||||
# Header's name generated by bison (see option -d)
|
# Header's name generated by bison (see option -d)
|
||||||
list(APPEND BISON_TARGET_cmdopt "-d")
|
list(APPEND BISON_TARGET_cmdopt "-d")
|
||||||
string(REGEX REPLACE "^(.*)(\\.[^.]*)$" "\\2" _fileext "${ARGV2}")
|
string(REGEX REPLACE "^(.*)(\\.[^.]*)$" "\\2" _fileext "${BisonOutput}")
|
||||||
string(REPLACE "c" "h" _fileext ${_fileext})
|
string(REPLACE "c" "h" _fileext ${_fileext})
|
||||||
string(REGEX REPLACE "^(.*)(\\.[^.]*)$" "\\1${_fileext}"
|
string(REGEX REPLACE "^(.*)(\\.[^.]*)$" "\\1${_fileext}"
|
||||||
BISON_${Name}_OUTPUT_HEADER "${ARGV2}")
|
BISON_TARGET_output_header "${BisonOutput}")
|
||||||
list(APPEND BISON_TARGET_outputs "${BISON_${Name}_OUTPUT_HEADER}")
|
endif()
|
||||||
|
list(APPEND BISON_TARGET_outputs "${BISON_TARGET_output_header}")
|
||||||
|
|
||||||
add_custom_command(OUTPUT ${BISON_TARGET_outputs}
|
add_custom_command(OUTPUT ${BISON_TARGET_outputs}
|
||||||
${BISON_TARGET_extraoutputs}
|
${BISON_TARGET_extraoutputs}
|
||||||
COMMAND ${BISON_EXECUTABLE}
|
COMMAND ${BISON_EXECUTABLE}
|
||||||
ARGS ${BISON_TARGET_cmdopt} -o ${ARGV2} ${ARGV1}
|
ARGS ${BISON_TARGET_cmdopt} -o ${BisonOutput} ${BisonInput}
|
||||||
DEPENDS ${ARGV1}
|
DEPENDS ${BisonInput}
|
||||||
COMMENT "[BISON][${Name}] Building parser with bison ${BISON_VERSION}"
|
COMMENT "[BISON][${Name}] Building parser with bison ${BISON_VERSION}"
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
# define target variables
|
# define target variables
|
||||||
set(BISON_${Name}_DEFINED TRUE)
|
set(BISON_${Name}_DEFINED TRUE)
|
||||||
set(BISON_${Name}_INPUT ${ARGV1})
|
set(BISON_${Name}_INPUT ${BisonInput})
|
||||||
set(BISON_${Name}_OUTPUTS ${BISON_TARGET_outputs})
|
set(BISON_${Name}_OUTPUTS ${BISON_TARGET_outputs})
|
||||||
set(BISON_${Name}_COMPILE_FLAGS ${BISON_TARGET_cmdopt})
|
set(BISON_${Name}_COMPILE_FLAGS ${BISON_TARGET_cmdopt})
|
||||||
set(BISON_${Name}_OUTPUT_SOURCE "${BisonOutput}")
|
set(BISON_${Name}_OUTPUT_SOURCE "${BisonOutput}")
|
||||||
|
set(BISON_${Name}_OUTPUT_HEADER "${BISON_TARGET_output_header}")
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
endmacro()
|
endmacro()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user