Merge topic 'bison-flex-output-directories'

c01d4e7698 FindBISON, FindFLEX: Create output directories

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !10130
This commit is contained in:
Brad King
2025-01-09 15:34:05 +00:00
committed by Kitware Robot
2 changed files with 42 additions and 2 deletions

View File

@@ -330,7 +330,27 @@ if(BISON_EXECUTABLE)
endif()
unset(_BISON_CMP0088)
# Bison cannot create output directories. Create any missing determined
# directories where the files will be generated if they don't exist yet.
set(_BisonMakeDirectoryCommand "")
foreach(output IN LISTS BISON_TARGET_outputs)
cmake_path(GET output PARENT_PATH dir)
if(dir)
list(APPEND _BisonMakeDirectoryCommand ${dir})
endif()
unset(dir)
endforeach()
if(_BisonMakeDirectoryCommand)
list(REMOVE_DUPLICATES _BisonMakeDirectoryCommand)
list(
PREPEND
_BisonMakeDirectoryCommand
COMMAND ${CMAKE_COMMAND} -E make_directory
)
endif()
add_custom_command(OUTPUT ${BISON_TARGET_outputs}
${_BisonMakeDirectoryCommand}
COMMAND ${BISON_EXECUTABLE} ${BISON_TARGET_cmdopt} -o ${BisonOutput} ${_BisonInput}
VERBATIM
DEPENDS ${_BisonInput}
@@ -350,7 +370,7 @@ if(BISON_EXECUTABLE)
set(BISON_${Name}_OUTPUT_HEADER "${BISON_TARGET_output_header}")
unset(_BisonInput)
unset(_BisonMakeDirectoryCommand)
endif()
endmacro()
#

View File

@@ -268,8 +268,28 @@ if(FLEX_EXECUTABLE)
list(APPEND _flex_EXE_OPTS --header-file=${_flex_OUTPUT_HEADER_ABS})
endif()
# Flex cannot create output directories. Create any missing determined
# directories where the files will be generated if they don't exist yet.
set(_flex_MAKE_DIRECTORY_COMMAND "")
foreach(output IN LISTS _flex_TARGET_OUTPUTS)
cmake_path(GET output PARENT_PATH dir)
if(dir)
list(APPEND _flex_MAKE_DIRECTORY_COMMAND ${dir})
endif()
unset(dir)
endforeach()
if(_flex_MAKE_DIRECTORY_COMMAND)
list(REMOVE_DUPLICATES _flex_MAKE_DIRECTORY_COMMAND)
list(
PREPEND
_flex_MAKE_DIRECTORY_COMMAND
COMMAND ${CMAKE_COMMAND} -E make_directory
)
endif()
get_filename_component(_flex_EXE_NAME_WE "${FLEX_EXECUTABLE}" NAME_WE)
add_custom_command(OUTPUT ${_flex_TARGET_OUTPUTS}
${_flex_MAKE_DIRECTORY_COMMAND}
COMMAND ${FLEX_EXECUTABLE} ${_flex_EXE_OPTS} -o${_flex_OUTPUT} ${_flex_INPUT}
VERBATIM
DEPENDS ${_flex_INPUT}
@@ -287,12 +307,12 @@ if(FLEX_EXECUTABLE)
unset(_flex_EXE_NAME_WE)
unset(_flex_EXE_OPTS)
unset(_flex_INPUT)
unset(_flex_MAKE_DIRECTORY_COMMAND)
unset(_flex_OUTPUT)
unset(_flex_OUTPUT_HEADER)
unset(_flex_OUTPUT_HEADER_ABS)
unset(_flex_TARGET_OUTPUTS)
unset(_flex_WORKING_DIR)
endif()
endmacro()
#============================================================