Merge topic 'FindBISON-report-file'
33b562aa
Help: Add notes for topic 'FindBISON-report-file'ab8d5d0f
FindBISON: Refactor public and inner macro routinesc42e63a9
FindBISON: Add REPORT_FILE option to pass --report-file=FILEad2497aa
FindBISON: Change usage of [VERBOSE <file>] to [VERBOSE [<file>]]
This commit is contained in:
commit
922bb1fd69
|
@ -0,0 +1,5 @@
|
||||||
|
FindBISON-report-file
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
* The :module:`FindBISON` module ``BISON_TARGET`` macro learned a new
|
||||||
|
``REPORT_FILE`` option to specify the bison ``--report-file=`` option.
|
|
@ -23,7 +23,8 @@
|
||||||
# BISON_TARGET(<Name> <YaccInput> <CodeOutput>
|
# BISON_TARGET(<Name> <YaccInput> <CodeOutput>
|
||||||
# [COMPILE_FLAGS <flags>]
|
# [COMPILE_FLAGS <flags>]
|
||||||
# [DEFINES_FILE <file>]
|
# [DEFINES_FILE <file>]
|
||||||
# [VERBOSE <file>]
|
# [VERBOSE [<file>]]
|
||||||
|
# [REPORT_FILE <file>]
|
||||||
# )
|
# )
|
||||||
#
|
#
|
||||||
# which will create a custom rule to generate a parser. ``<YaccInput>`` is
|
# which will create a custom rule to generate a parser. ``<YaccInput>`` is
|
||||||
|
@ -39,9 +40,14 @@
|
||||||
# ``DEFINES_FILE <file>``
|
# ``DEFINES_FILE <file>``
|
||||||
# Specify a non-default header ``<file>`` to be generated by ``bison``.
|
# Specify a non-default header ``<file>`` to be generated by ``bison``.
|
||||||
#
|
#
|
||||||
# ``VERBOSE <file>``
|
# ``VERBOSE [<file>]``
|
||||||
# Tell ``bison`` to write verbose descriptions of the grammar and
|
# Tell ``bison`` to write a report file of the grammar and parser.
|
||||||
# parser to the given ``<file>``.
|
# If ``<file>`` is given, it specifies path the report file is copied to.
|
||||||
|
# ``[<file>]`` is left for backward compatibility of this module.
|
||||||
|
# Use ``VERBOSE REPORT_FILE <file>``.
|
||||||
|
#
|
||||||
|
# ``REPORT_FILE <file>``
|
||||||
|
# Specify a non-default report ``<file>``, if generated.
|
||||||
#
|
#
|
||||||
# The macro defines the following variables:
|
# The macro defines the following variables:
|
||||||
#
|
#
|
||||||
|
@ -58,7 +64,7 @@
|
||||||
# The header file generated by bison
|
# The header file generated by bison
|
||||||
#
|
#
|
||||||
# ``BISON_<Name>_OUTPUTS``
|
# ``BISON_<Name>_OUTPUTS``
|
||||||
# The sources files generated by bison
|
# All files generated by bison including the source, the header and the report
|
||||||
#
|
#
|
||||||
# ``BISON_<Name>_COMPILE_FLAGS``
|
# ``BISON_<Name>_COMPILE_FLAGS``
|
||||||
# Options used in the ``bison`` command line
|
# Options used in the ``bison`` command line
|
||||||
|
@ -120,35 +126,65 @@ if(BISON_EXECUTABLE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# internal macro
|
# internal macro
|
||||||
macro(BISON_TARGET_option_verbose Name BisonOutput filename)
|
# sets BISON_TARGET_cmdopt
|
||||||
list(APPEND BISON_TARGET_cmdopt "--verbose")
|
|
||||||
get_filename_component(BISON_TARGET_output_path "${BisonOutput}" PATH)
|
|
||||||
get_filename_component(BISON_TARGET_output_name "${BisonOutput}" NAME_WE)
|
|
||||||
add_custom_command(OUTPUT ${filename}
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy
|
|
||||||
"${BISON_TARGET_output_path}/${BISON_TARGET_output_name}.output"
|
|
||||||
"${filename}"
|
|
||||||
VERBATIM
|
|
||||||
DEPENDS
|
|
||||||
"${BISON_TARGET_output_path}/${BISON_TARGET_output_name}.output"
|
|
||||||
COMMENT "[BISON][${Name}] Copying bison verbose table to ${filename}"
|
|
||||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
|
|
||||||
set(BISON_${Name}_VERBOSE_FILE ${filename})
|
|
||||||
list(APPEND BISON_TARGET_extraoutputs
|
|
||||||
"${BISON_TARGET_output_path}/${BISON_TARGET_output_name}.output")
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
# internal macro
|
|
||||||
macro(BISON_TARGET_option_extraopts Options)
|
macro(BISON_TARGET_option_extraopts Options)
|
||||||
|
set(BISON_TARGET_cmdopt "")
|
||||||
set(BISON_TARGET_extraopts "${Options}")
|
set(BISON_TARGET_extraopts "${Options}")
|
||||||
separate_arguments(BISON_TARGET_extraopts)
|
separate_arguments(BISON_TARGET_extraopts)
|
||||||
list(APPEND BISON_TARGET_cmdopt ${BISON_TARGET_extraopts})
|
list(APPEND BISON_TARGET_cmdopt ${BISON_TARGET_extraopts})
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
# internal macro
|
# internal macro
|
||||||
macro(BISON_TARGET_option_defines Header)
|
# sets BISON_TARGET_output_header and BISON_TARGET_cmdopt
|
||||||
set(BISON_TARGET_output_header "${Header}")
|
macro(BISON_TARGET_option_defines BisonOutput Header)
|
||||||
list(APPEND BISON_TARGET_cmdopt --defines=${BISON_TARGET_output_header})
|
if("${Header}" STREQUAL "")
|
||||||
|
# default header path generated by bison (see option -d)
|
||||||
|
string(REGEX REPLACE "^(.*)(\\.[^.]*)$" "\\2" _fileext "${BisonOutput}")
|
||||||
|
string(REPLACE "c" "h" _fileext ${_fileext})
|
||||||
|
string(REGEX REPLACE "^(.*)(\\.[^.]*)$" "\\1${_fileext}"
|
||||||
|
BISON_TARGET_output_header "${BisonOutput}")
|
||||||
|
list(APPEND BISON_TARGET_cmdopt "-d")
|
||||||
|
else()
|
||||||
|
set(BISON_TARGET_output_header "${Header}")
|
||||||
|
list(APPEND BISON_TARGET_cmdopt "--defines=${BISON_TARGET_output_header}")
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
# internal macro
|
||||||
|
# sets BISON_TARGET_verbose_file and BISON_TARGET_cmdopt
|
||||||
|
macro(BISON_TARGET_option_report_file BisonOutput ReportFile)
|
||||||
|
if("${ReportFile}" STREQUAL "")
|
||||||
|
get_filename_component(BISON_TARGET_output_path "${BisonOutput}" PATH)
|
||||||
|
get_filename_component(BISON_TARGET_output_name "${BisonOutput}" NAME_WE)
|
||||||
|
set(BISON_TARGET_verbose_file
|
||||||
|
"${BISON_TARGET_output_path}/${BISON_TARGET_output_name}.output")
|
||||||
|
else()
|
||||||
|
set(BISON_TARGET_verbose_file "${ReportFile}")
|
||||||
|
list(APPEND BISON_TARGET_cmdopt "--report-file=${BISON_TARGET_verbose_file}")
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
# internal macro
|
||||||
|
# adds a custom command and sets
|
||||||
|
# BISON_TARGET_cmdopt, BISON_TARGET_verbose_file, BISON_TARGET_extraoutputs
|
||||||
|
macro(BISON_TARGET_option_verbose Name BisonOutput filename)
|
||||||
|
list(APPEND BISON_TARGET_cmdopt "--verbose")
|
||||||
|
list(APPEND BISON_TARGET_extraoutputs
|
||||||
|
"${BISON_TARGET_verbose_file}")
|
||||||
|
if (NOT "${filename}" STREQUAL "")
|
||||||
|
add_custom_command(OUTPUT ${filename}
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy
|
||||||
|
"${BISON_TARGET_verbose_file}"
|
||||||
|
"${filename}"
|
||||||
|
VERBATIM
|
||||||
|
DEPENDS
|
||||||
|
"${BISON_TARGET_verbose_file}"
|
||||||
|
COMMENT "[BISON][${Name}] Copying bison verbose table to ${filename}"
|
||||||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
|
||||||
|
set(BISON_${Name}_VERBOSE_FILE ${filename})
|
||||||
|
list(APPEND BISON_TARGET_extraoutputs
|
||||||
|
"${filename}")
|
||||||
|
endif()
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
#============================================================
|
#============================================================
|
||||||
|
@ -156,18 +192,20 @@ if(BISON_EXECUTABLE)
|
||||||
#============================================================
|
#============================================================
|
||||||
#
|
#
|
||||||
macro(BISON_TARGET Name BisonInput BisonOutput)
|
macro(BISON_TARGET Name BisonInput BisonOutput)
|
||||||
set(BISON_TARGET_output_header "")
|
|
||||||
set(BISON_TARGET_cmdopt "")
|
|
||||||
set(BISON_TARGET_outputs "${BisonOutput}")
|
set(BISON_TARGET_outputs "${BisonOutput}")
|
||||||
|
set(BISON_TARGET_extraoutputs "")
|
||||||
|
|
||||||
# Parsing parameters
|
# Parsing parameters
|
||||||
set(BISON_TARGET_PARAM_OPTIONS)
|
set(BISON_TARGET_PARAM_OPTIONS
|
||||||
|
)
|
||||||
set(BISON_TARGET_PARAM_ONE_VALUE_KEYWORDS
|
set(BISON_TARGET_PARAM_ONE_VALUE_KEYWORDS
|
||||||
VERBOSE
|
|
||||||
COMPILE_FLAGS
|
COMPILE_FLAGS
|
||||||
DEFINES_FILE
|
DEFINES_FILE
|
||||||
|
REPORT_FILE
|
||||||
|
)
|
||||||
|
set(BISON_TARGET_PARAM_MULTI_VALUE_KEYWORDS
|
||||||
|
VERBOSE
|
||||||
)
|
)
|
||||||
set(BISON_TARGET_PARAM_MULTI_VALUE_KEYWORDS)
|
|
||||||
cmake_parse_arguments(
|
cmake_parse_arguments(
|
||||||
BISON_TARGET_ARG
|
BISON_TARGET_ARG
|
||||||
"${BISON_TARGET_PARAM_OPTIONS}"
|
"${BISON_TARGET_PARAM_OPTIONS}"
|
||||||
|
@ -178,29 +216,30 @@ if(BISON_EXECUTABLE)
|
||||||
|
|
||||||
if(NOT "${BISON_TARGET_ARG_UNPARSED_ARGUMENTS}" STREQUAL "")
|
if(NOT "${BISON_TARGET_ARG_UNPARSED_ARGUMENTS}" STREQUAL "")
|
||||||
message(SEND_ERROR "Usage")
|
message(SEND_ERROR "Usage")
|
||||||
|
elseif("${BISON_TARGET_ARG_VERBOSE}" MATCHES ";")
|
||||||
|
# [VERBOSE [<file>] hack: <file> is non-multi value by usage
|
||||||
|
message(SEND_ERROR "Usage")
|
||||||
else()
|
else()
|
||||||
|
|
||||||
|
BISON_TARGET_option_extraopts("${BISON_TARGET_ARG_COMPILE_FLAGS}")
|
||||||
|
BISON_TARGET_option_defines("${BisonOutput}" "${BISON_TARGET_ARG_DEFINES_FILE}")
|
||||||
|
BISON_TARGET_option_report_file("${BisonOutput}" "${BISON_TARGET_ARG_REPORT_FILE}")
|
||||||
if(NOT "${BISON_TARGET_ARG_VERBOSE}" STREQUAL "")
|
if(NOT "${BISON_TARGET_ARG_VERBOSE}" STREQUAL "")
|
||||||
BISON_TARGET_option_verbose(${Name} ${BisonOutput} "${BISON_TARGET_ARG_VERBOSE}")
|
BISON_TARGET_option_verbose(${Name} ${BisonOutput} "${BISON_TARGET_ARG_VERBOSE}")
|
||||||
endif()
|
else()
|
||||||
if(NOT "${BISON_TARGET_ARG_COMPILE_FLAGS}" STREQUAL "")
|
# [VERBOSE [<file>]] is used with no argument or is not used
|
||||||
BISON_TARGET_option_extraopts("${BISON_TARGET_ARG_COMPILE_FLAGS}")
|
set(BISON_TARGET_args "${ARGN}")
|
||||||
endif()
|
list(FIND BISON_TARGET_args "VERBOSE" BISON_TARGET_args_indexof_verbose)
|
||||||
if(NOT "${BISON_TARGET_ARG_DEFINES_FILE}" STREQUAL "")
|
if(${BISON_TARGET_args_indexof_verbose} GREATER -1)
|
||||||
BISON_TARGET_option_defines("${BISON_TARGET_ARG_DEFINES_FILE}")
|
# VERBOSE is used without <file>
|
||||||
|
BISON_TARGET_option_verbose(${Name} ${BisonOutput} "")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if("${BISON_TARGET_output_header}" STREQUAL "")
|
|
||||||
# Header's name generated by bison (see option -d)
|
|
||||||
list(APPEND BISON_TARGET_cmdopt "-d")
|
|
||||||
string(REGEX REPLACE "^(.*)(\\.[^.]*)$" "\\2" _fileext "${BisonOutput}")
|
|
||||||
string(REPLACE "c" "h" _fileext ${_fileext})
|
|
||||||
string(REGEX REPLACE "^(.*)(\\.[^.]*)$" "\\1${_fileext}"
|
|
||||||
BISON_TARGET_output_header "${BisonOutput}")
|
|
||||||
endif()
|
|
||||||
list(APPEND BISON_TARGET_outputs "${BISON_TARGET_output_header}")
|
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_verbose_file}
|
||||||
COMMAND ${BISON_EXECUTABLE} ${BISON_TARGET_cmdopt} -o ${BisonOutput} ${BisonInput}
|
COMMAND ${BISON_EXECUTABLE} ${BISON_TARGET_cmdopt} -o ${BisonOutput} ${BisonInput}
|
||||||
VERBATIM
|
VERBATIM
|
||||||
DEPENDS ${BisonInput}
|
DEPENDS ${BisonInput}
|
||||||
|
@ -210,7 +249,7 @@ if(BISON_EXECUTABLE)
|
||||||
# define target variables
|
# define target variables
|
||||||
set(BISON_${Name}_DEFINED TRUE)
|
set(BISON_${Name}_DEFINED TRUE)
|
||||||
set(BISON_${Name}_INPUT ${BisonInput})
|
set(BISON_${Name}_INPUT ${BisonInput})
|
||||||
set(BISON_${Name}_OUTPUTS ${BISON_TARGET_outputs})
|
set(BISON_${Name}_OUTPUTS ${BISON_TARGET_outputs} ${BISON_TARGET_extraoutputs})
|
||||||
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}")
|
set(BISON_${Name}_OUTPUT_HEADER "${BISON_TARGET_output_header}")
|
||||||
|
|
Loading…
Reference in New Issue