diff options
author | Brad King <brad.king@kitware.com> | 2016-07-19 12:25:56 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2016-07-19 12:25:56 (GMT) |
commit | 922bb1fd69f5a0cb6a2bd6a9f5186bca11070196 (patch) | |
tree | 5c27c7540c3adbca769b4572084be5a0caa5b5f8 | |
parent | 34efc0a539ac8ad595f5e5b5c0e3afc6a158456e (diff) | |
parent | 33b562aa728e081513ea029fccdedbe6e5ec596c (diff) | |
download | CMake-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.rst | 5 | ||||
-rw-r--r-- | Modules/FindBISON.cmake | 135 |
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}") |