cpp-utilities/cmake/modules/ShellCompletion.cmake

37 lines
1.6 KiB
CMake

if (NOT BASIC_PROJECT_CONFIG_DONE)
message(FATAL_ERROR "Before including the ShellCompletion module, the BasicConfig module must be included.")
endif ()
option(SHELL_COMPLETION_ENABLED "controls whether shell completion is enabled in general" ON)
option(BASH_COMPLETION_ENABLED "controls whether shell completion for bash is enabled" ON)
if (NOT SHELL_COMPLETION_ENABLED)
return()
endif ()
# add bash completion (currently the only supported shell completion)
if (BASH_COMPLETION_ENABLED)
# find bash-completion.sh template
include(TemplateFinder)
find_template_file("bash-completion.sh" CPP_UTILITIES BASH_COMPLETION_TEMPLATE_FILE)
# generate wrapper script for bash completion
configure_file("${BASH_COMPLETION_TEMPLATE_FILE}"
"${CMAKE_CURRENT_BINARY_DIR}/bash-completion/completions/${META_PROJECT_NAME}${META_CONFIG_SUFFIX}" @ONLY)
# add install target bash completion
if (NOT META_NO_INSTALL_TARGETS AND ENABLE_INSTALL_TARGETS)
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bash-completion/completions"
DESTINATION "share/bash-completion"
COMPONENT bash-completion)
if (NOT TARGET install-bash-completion)
add_custom_target(install-bash-completion
COMMAND "${CMAKE_COMMAND}"
-DCMAKE_INSTALL_COMPONENT=bash-completion
-P
"${CMAKE_BINARY_DIR}/cmake_install.cmake")
endif ()
endif ()
message(STATUS "Generating files for bash completion.")
endif ()