From c203d23be5be161873b2fcf0f5996864ac97326f Mon Sep 17 00:00:00 2001 From: Jacob Alexander Date: Sat, 28 Jun 2014 13:48:49 -0700 Subject: [PATCH] Adding support for ctags generation during cmake generation. - Added executable detection script - Build will still work fine if ctags isn't installed --- Lib/CMake/FindCtags.cmake | 40 +++++++++++++++++++++++++++++++++++++++ Lib/CMake/modules.cmake | 31 ++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 Lib/CMake/FindCtags.cmake diff --git a/Lib/CMake/FindCtags.cmake b/Lib/CMake/FindCtags.cmake new file mode 100644 index 0000000..c66f378 --- /dev/null +++ b/Lib/CMake/FindCtags.cmake @@ -0,0 +1,40 @@ +# The module defines the following variables: +# CTAGS_EXECUTABLE - path to ctags command line client +# CTAGS_FOUND - true if the command line client was found +# CTAGS_VERSION_STRING - the version of ctags found (since CMake 2.8.8) +# Example usage: +# find_package( Ctags ) +# if( CTAGS_FOUND ) +# message("ctags found: ${CTAGS_EXECUTABLE}") +# endif() + +find_program( CTAGS_EXECUTABLE + NAMES ctags + DOC "ctags executable" +) +mark_as_advanced( CTAGS_EXECUTABLE ) + +if( CTAGS_EXECUTABLE ) + execute_process(COMMAND ${CTAGS_EXECUTABLE} --version + OUTPUT_VARIABLE ctags_version + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + if( ctags_version MATCHES "^Exuberant Ctags [0-9]" ) + string( REPLACE "Exuberant Ctags " "" CTAGS_VERSION_STRING "${ctags_version}" ) + string( REGEX REPLACE ",.*$" "" CTAGS_VERSION_STRING ${CTAGS_VERSION_STRING} ) + endif() + + unset( ctags_version ) +endif() + +# Handle the QUIETLY and REQUIRED arguments and set CTAGS_FOUND to TRUE if +# all listed variables are TRUE + +include( FindPackageHandleStandardArgs ) +find_package_handle_standard_args( Ctags + REQUIRED_VARS CTAGS_EXECUTABLE + VERSION_VAR CTAGS_VERSION_STRING +) + diff --git a/Lib/CMake/modules.cmake b/Lib/CMake/modules.cmake index f39e1c9..59eedde 100644 --- a/Lib/CMake/modules.cmake +++ b/Lib/CMake/modules.cmake @@ -7,6 +7,13 @@ ### +### +# CMake Custom Modules Path +# + +set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/Lib/CMake/" ) + + ### # Module Overrides (Used in the buildall.bash script) @@ -237,6 +244,30 @@ ModuleCompatibility( ${DebugModulePath} ${DebugModuleCompatibility} ) # CMake Module Checking # find_package( Git REQUIRED ) +find_package( Ctags ) # Optional + + +### +# ctag Generation +# + +if( CTAGS_EXECUTABLE ) + # Populate list of directories for ctags to parse + # NOTE: Doesn't support dots in the folder names... + foreach( filename ${SRCS} ) + string( REGEX REPLACE "/[a-zA-Z0-9_-]+.c$" "" pathglob ${filename} ) + file( GLOB filenames "${pathglob}/*.c" ) + set( CTAG_PATHS ${CTAG_PATHS} ${filenames} ) + file( GLOB filenames "${pathglob}/*.h" ) + set( CTAG_PATHS ${CTAG_PATHS} ${filenames} ) + endforeach() + + # Generate the ctags + execute_process( COMMAND ctags ${CTAG_PATHS} + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) +endif() + ###