summaryrefslogtreecommitdiffstats
path: root/Modules/FindBISON.cmake
diff options
context:
space:
mode:
authorEon Jeong <eonikupy@gmail.com>2016-07-15 15:54:56 (GMT)
committerBrad King <brad.king@kitware.com>2016-07-18 13:06:16 (GMT)
commitad2497aa054e40afa88b5288a59f2e6ad3a765c0 (patch)
tree6a1f7a1c5b3e537aac610027fb8eda9cdafe6526 /Modules/FindBISON.cmake
parent4bb3c4102fa40d802ab0b0d0500afe5c9887038f (diff)
downloadCMake-ad2497aa054e40afa88b5288a59f2e6ad3a765c0.zip
CMake-ad2497aa054e40afa88b5288a59f2e6ad3a765c0.tar.gz
CMake-ad2497aa054e40afa88b5288a59f2e6ad3a765c0.tar.bz2
FindBISON: Change usage of [VERBOSE <file>] to [VERBOSE [<file>]]
Diffstat (limited to 'Modules/FindBISON.cmake')
-rw-r--r--Modules/FindBISON.cmake71
1 files changed, 48 insertions, 23 deletions
diff --git a/Modules/FindBISON.cmake b/Modules/FindBISON.cmake
index 69293f5..f1df16d 100644
--- a/Modules/FindBISON.cmake
+++ b/Modules/FindBISON.cmake
@@ -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,25 +120,35 @@ 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}")
separate_arguments(BISON_TARGET_extraopts)
@@ -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}")