--- /dev/null
+# 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
+)
+
###
+###
+# CMake Custom Modules Path
+#
+
+set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/Lib/CMake/" )
+
+
###
# Module Overrides (Used in the buildall.bash script)
# 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()
+
###