|
|
@@ -23,7 +23,7 @@
|
|
|
# BISON_TARGET(<Name> <YaccInput> <CodeOutput>
|
|
|
# [COMPILE_FLAGS <flags>]
|
|
|
# [DEFINES_FILE <file>]
|
|
|
-# [VERBOSE <file>]
|
|
|
+# [VERBOSE [<file>]]
|
|
|
# )
|
|
|
#
|
|
|
# which will create a custom rule to generate a parser. ``<YaccInput>`` is
|
|
|
@@ -39,9 +39,9 @@
|
|
|
# ``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>``.
|
|
|
+# ``VERBOSE [<file>]``
|
|
|
+# Tell ``bison`` to write a report file of the grammar and parser.
|
|
|
+# If given, the report file is copied to ``<file>``.
|
|
|
#
|
|
|
# The macro defines the following variables:
|
|
|
#
|
|
|
@@ -58,7 +58,7 @@
|
|
|
# The header file generated by bison
|
|
|
#
|
|
|
# ``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``
|
|
|
# Options used in the ``bison`` command line
|
|
|
@@ -120,24 +120,34 @@ if(BISON_EXECUTABLE)
|
|
|
endif()
|
|
|
|
|
|
# internal macro
|
|
|
- macro(BISON_TARGET_option_verbose Name BisonOutput filename)
|
|
|
- list(APPEND BISON_TARGET_cmdopt "--verbose")
|
|
|
+ macro(BISON_TARGET_set_verbose_file BisonOutput)
|
|
|
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
|
|
|
+ set(BISON_TARGET_verbose_file
|
|
|
"${BISON_TARGET_output_path}/${BISON_TARGET_output_name}.output")
|
|
|
endmacro()
|
|
|
|
|
|
+ # internal macro
|
|
|
+ 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()
|
|
|
+
|
|
|
# internal macro
|
|
|
macro(BISON_TARGET_option_extraopts Options)
|
|
|
set(BISON_TARGET_extraopts "${Options}")
|
|
|
@@ -159,15 +169,19 @@ if(BISON_EXECUTABLE)
|
|
|
set(BISON_TARGET_output_header "")
|
|
|
set(BISON_TARGET_cmdopt "")
|
|
|
set(BISON_TARGET_outputs "${BisonOutput}")
|
|
|
+ set(BISON_TARGET_extraoutputs "")
|
|
|
+ BISON_TARGET_set_verbose_file("${BisonOutput}")
|
|
|
|
|
|
# Parsing parameters
|
|
|
- set(BISON_TARGET_PARAM_OPTIONS)
|
|
|
+ set(BISON_TARGET_PARAM_OPTIONS
|
|
|
+ )
|
|
|
set(BISON_TARGET_PARAM_ONE_VALUE_KEYWORDS
|
|
|
- VERBOSE
|
|
|
COMPILE_FLAGS
|
|
|
DEFINES_FILE
|
|
|
)
|
|
|
- set(BISON_TARGET_PARAM_MULTI_VALUE_KEYWORDS)
|
|
|
+ set(BISON_TARGET_PARAM_MULTI_VALUE_KEYWORDS
|
|
|
+ VERBOSE
|
|
|
+ )
|
|
|
cmake_parse_arguments(
|
|
|
BISON_TARGET_ARG
|
|
|
"${BISON_TARGET_PARAM_OPTIONS}"
|
|
|
@@ -178,9 +192,20 @@ if(BISON_EXECUTABLE)
|
|
|
|
|
|
if(NOT "${BISON_TARGET_ARG_UNPARSED_ARGUMENTS}" STREQUAL "")
|
|
|
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()
|
|
|
if(NOT "${BISON_TARGET_ARG_VERBOSE}" STREQUAL "")
|
|
|
BISON_TARGET_option_verbose(${Name} ${BisonOutput} "${BISON_TARGET_ARG_VERBOSE}")
|
|
|
+ else()
|
|
|
+ # [VERBOSE [<file>]] is used with no argument or is not used
|
|
|
+ set(BISON_TARGET_args "${ARGN}")
|
|
|
+ list(FIND BISON_TARGET_args "VERBOSE" BISON_TARGET_args_indexof_verbose)
|
|
|
+ if(${BISON_TARGET_args_indexof_verbose} GREATER -1)
|
|
|
+ # VERBOSE is used without <file>
|
|
|
+ BISON_TARGET_option_verbose(${Name} ${BisonOutput} "")
|
|
|
+ endif()
|
|
|
endif()
|
|
|
if(NOT "${BISON_TARGET_ARG_COMPILE_FLAGS}" STREQUAL "")
|
|
|
BISON_TARGET_option_extraopts("${BISON_TARGET_ARG_COMPILE_FLAGS}")
|
|
|
@@ -200,7 +225,7 @@ if(BISON_EXECUTABLE)
|
|
|
list(APPEND BISON_TARGET_outputs "${BISON_TARGET_output_header}")
|
|
|
|
|
|
add_custom_command(OUTPUT ${BISON_TARGET_outputs}
|
|
|
- ${BISON_TARGET_extraoutputs}
|
|
|
+ ${BISON_TARGET_verbose_file}
|
|
|
COMMAND ${BISON_EXECUTABLE} ${BISON_TARGET_cmdopt} -o ${BisonOutput} ${BisonInput}
|
|
|
VERBATIM
|
|
|
DEPENDS ${BisonInput}
|
|
|
@@ -210,7 +235,7 @@ if(BISON_EXECUTABLE)
|
|
|
# define target variables
|
|
|
set(BISON_${Name}_DEFINED TRUE)
|
|
|
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}_OUTPUT_SOURCE "${BisonOutput}")
|
|
|
set(BISON_${Name}_OUTPUT_HEADER "${BISON_TARGET_output_header}")
|