Browse Source

Adding support for ctags generation during cmake generation.

- Added executable detection script
- Build will still work fine if ctags isn't installed
simple
Jacob Alexander 10 years ago
parent
commit
c203d23be5
2 changed files with 71 additions and 0 deletions
  1. 40
    0
      Lib/CMake/FindCtags.cmake
  2. 31
    0
      Lib/CMake/modules.cmake

+ 40
- 0
Lib/CMake/FindCtags.cmake View File

@@ -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
)


+ 31
- 0
Lib/CMake/modules.cmake View File

@@ -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()



###