summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2016-07-19 12:25:56 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2016-07-19 12:25:56 (GMT)
commit922bb1fd69f5a0cb6a2bd6a9f5186bca11070196 (patch)
tree5c27c7540c3adbca769b4572084be5a0caa5b5f8
parent34efc0a539ac8ad595f5e5b5c0e3afc6a158456e (diff)
parent33b562aa728e081513ea029fccdedbe6e5ec596c (diff)
downloadCMake-922bb1fd69f5a0cb6a2bd6a9f5186bca11070196.zip
CMake-922bb1fd69f5a0cb6a2bd6a9f5186bca11070196.tar.gz
CMake-922bb1fd69f5a0cb6a2bd6a9f5186bca11070196.tar.bz2
Merge topic 'FindBISON-report-file'
33b562aa Help: Add notes for topic 'FindBISON-report-file' ab8d5d0f FindBISON: Refactor public and inner macro routines c42e63a9 FindBISON: Add REPORT_FILE option to pass --report-file=FILE ad2497aa FindBISON: Change usage of [VERBOSE <file>] to [VERBOSE [<file>]]
-rw-r--r--Help/release/dev/FindBISON-report-file.rst5
-rw-r--r--Modules/FindBISON.cmake135
2 files changed, 92 insertions, 48 deletions
diff --git a/Help/release/dev/FindBISON-report-file.rst b/Help/release/dev/FindBISON-report-file.rst
new file mode 100644
index 0000000..0b59128
--- /dev/null
+++ b/Help/release/dev/FindBISON-report-file.rst
@@ -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.
diff --git a/Modules/FindBISON.cmake b/Modules/FindBISON.cmake
index 69293f5..6b1c7bd 100644
--- a/Modules/FindBISON.cmake
+++ b/Modules/FindBISON.cmake
@@ -23,7 +23,8 @@
# BISON_TARGET(<Name> <YaccInput> <CodeOutput>
# [COMPILE_FLAGS <flags>]
# [DEFINES_FILE <file>]
-# [VERBOSE <file>]
+# [VERBOSE [<file>]]
+# [REPORT_FILE <file>]
# )
#
# which will create a custom rule to generate a parser. ``<YaccInput>`` is
@@ -39,9 +40,14 @@
# ``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 ``<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:
#
@@ -58,7 +64,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,35 +126,65 @@ if(BISON_EXECUTABLE)
endif()
# internal macro
- macro(BISON_TARGET_option_verbose Name BisonOutput filename)
- 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
+ # sets BISON_TARGET_cmdopt
macro(BISON_TARGET_option_extraopts Options)
+ set(BISON_TARGET_cmdopt "")
set(BISON_TARGET_extraopts "${Options}")
separate_arguments(BISON_TARGET_extraopts)
list(APPEND BISON_TARGET_cmdopt ${BISON_TARGET_extraopts})
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})
+ # sets BISON_TARGET_output_header and BISON_TARGET_cmdopt
+ macro(BISON_TARGET_option_defines BisonOutput 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()
#============================================================
@@ -156,18 +192,20 @@ if(BISON_EXECUTABLE)
#============================================================
#
macro(BISON_TARGET Name BisonInput BisonOutput)
- set(BISON_TARGET_output_header "")
- set(BISON_TARGET_cmdopt "")
set(BISON_TARGET_outputs "${BisonOutput}")
+ set(BISON_TARGET_extraoutputs "")
# Parsing parameters
- set(BISON_TARGET_PARAM_OPTIONS)
+ set(BISON_TARGET_PARAM_OPTIONS
+ )
set(BISON_TARGET_PARAM_ONE_VALUE_KEYWORDS
- VERBOSE
COMPILE_FLAGS
DEFINES_FILE
+ REPORT_FILE
+ )
+ set(BISON_TARGET_PARAM_MULTI_VALUE_KEYWORDS
+ VERBOSE
)
- set(BISON_TARGET_PARAM_MULTI_VALUE_KEYWORDS)
cmake_parse_arguments(
BISON_TARGET_ARG
"${BISON_TARGET_PARAM_OPTIONS}"
@@ -178,29 +216,30 @@ 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()
+
+ 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 "")
BISON_TARGET_option_verbose(${Name} ${BisonOutput} "${BISON_TARGET_ARG_VERBOSE}")
- endif()
- if(NOT "${BISON_TARGET_ARG_COMPILE_FLAGS}" STREQUAL "")
- BISON_TARGET_option_extraopts("${BISON_TARGET_ARG_COMPILE_FLAGS}")
- endif()
- if(NOT "${BISON_TARGET_ARG_DEFINES_FILE}" STREQUAL "")
- BISON_TARGET_option_defines("${BISON_TARGET_ARG_DEFINES_FILE}")
+ 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("${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}")
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 +249,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}")