FindBISON: Refactor public and inner macro routines

This commit is contained in:
Eon Jeong 2016-07-16 03:09:09 +09:00 committed by Brad King
parent c42e63a97e
commit ab8d5d0fdb
1 changed files with 42 additions and 44 deletions

View File

@ -126,14 +126,47 @@ if(BISON_EXECUTABLE)
endif() endif()
# internal macro # internal macro
macro(BISON_TARGET_set_verbose_file BisonOutput) # sets BISON_TARGET_cmdopt
get_filename_component(BISON_TARGET_output_path "${BisonOutput}" PATH) macro(BISON_TARGET_option_extraopts Options)
get_filename_component(BISON_TARGET_output_name "${BisonOutput}" NAME_WE) set(BISON_TARGET_cmdopt "")
set(BISON_TARGET_verbose_file set(BISON_TARGET_extraopts "${Options}")
"${BISON_TARGET_output_path}/${BISON_TARGET_output_name}.output") separate_arguments(BISON_TARGET_extraopts)
list(APPEND BISON_TARGET_cmdopt ${BISON_TARGET_extraopts})
endmacro() endmacro()
# internal macro # internal macro
# 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) macro(BISON_TARGET_option_verbose Name BisonOutput filename)
list(APPEND BISON_TARGET_cmdopt "--verbose") list(APPEND BISON_TARGET_cmdopt "--verbose")
list(APPEND BISON_TARGET_extraoutputs list(APPEND BISON_TARGET_extraoutputs
@ -154,35 +187,13 @@ if(BISON_EXECUTABLE)
endif() endif()
endmacro() endmacro()
# internal macro
macro(BISON_TARGET_option_extraopts Options)
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}")
endmacro()
# internal macro
macro(BISON_TARGET_option_report_file ReportFile)
set(BISON_TARGET_verbose_file "${ReportFile}")
list(APPEND BISON_TARGET_cmdopt "--report-file=${BISON_TARGET_verbose_file}")
endmacro()
#============================================================ #============================================================
# BISON_TARGET (public macro) # BISON_TARGET (public macro)
#============================================================ #============================================================
# #
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 "") set(BISON_TARGET_extraoutputs "")
BISON_TARGET_set_verbose_file("${BisonOutput}")
# Parsing parameters # Parsing parameters
set(BISON_TARGET_PARAM_OPTIONS set(BISON_TARGET_PARAM_OPTIONS
@ -209,15 +220,10 @@ if(BISON_EXECUTABLE)
# [VERBOSE [<file>] hack: <file> is non-multi value by usage # [VERBOSE [<file>] hack: <file> is non-multi value by usage
message(SEND_ERROR "Usage") message(SEND_ERROR "Usage")
else() else()
if(NOT "${BISON_TARGET_ARG_COMPILE_FLAGS}" STREQUAL "")
BISON_TARGET_option_extraopts("${BISON_TARGET_ARG_COMPILE_FLAGS}") BISON_TARGET_option_extraopts("${BISON_TARGET_ARG_COMPILE_FLAGS}")
endif() BISON_TARGET_option_defines("${BisonOutput}" "${BISON_TARGET_ARG_DEFINES_FILE}")
if(NOT "${BISON_TARGET_ARG_DEFINES_FILE}" STREQUAL "") BISON_TARGET_option_report_file("${BisonOutput}" "${BISON_TARGET_ARG_REPORT_FILE}")
BISON_TARGET_option_defines("${BISON_TARGET_ARG_DEFINES_FILE}")
endif()
if(NOT "${BISON_TARGET_ARG_REPORT_FILE}" STREQUAL "")
BISON_TARGET_option_report_file("${BISON_TARGET_ARG_REPORT_FILE}")
endif()
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}")
else() else()
@ -230,14 +236,6 @@ if(BISON_EXECUTABLE)
endif() 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}