changeset 168:9634b9824391

Adding support for ctags generation during cmake generation. - Added executable detection script - Build will still work fine if ctags isn't installed
author Jacob Alexander <haata@kiibohd.com>
date Sat, 28 Jun 2014 13:48:49 -0700
parents 81f0936706ab
children 7962a42dbda0
files Lib/CMake/FindCtags.cmake Lib/CMake/modules.cmake
diffstat 2 files changed, 71 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Lib/CMake/FindCtags.cmake	Sat Jun 28 13:48:49 2014 -0700
@@ -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
+)
+
--- a/Lib/CMake/modules.cmake	Sat Jun 28 11:26:43 2014 -0700
+++ b/Lib/CMake/modules.cmake	Sat Jun 28 13:48:49 2014 -0700
@@ -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 @@
 # 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()
+
 
 
 ###