mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH] Makefile: move ctags and cscope support to a shell script
@ 2012-12-03  5:08 Antony Pavlov
  2012-12-03 10:02 ` Sascha Hauer
  0 siblings, 1 reply; 2+ messages in thread
From: Antony Pavlov @ 2012-12-03  5:08 UTC (permalink / raw)
  To: barebox

The scripts/tags.sh file copied from linux-3.6.

Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com>
---
 Makefile        |  111 +----------------------
 scripts/tags.sh |  265 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 268 insertions(+), 108 deletions(-)
 create mode 100755 scripts/tags.sh

diff --git a/Makefile b/Makefile
index 05b8be5..e3a23dd 100644
--- a/Makefile
+++ b/Makefile
@@ -1166,115 +1166,10 @@ htmldocs: Doxyfile.version
 
 # Generate tags for editors
 # ---------------------------------------------------------------------------
+quiet_cmd_tags = GEN     $@
+      cmd_tags = $(CONFIG_SHELL) $(srctree)/scripts/tags.sh $@
 
-#We want __srctree to totally vanish out when KBUILD_OUTPUT is not set
-#(which is the most common case IMHO) to avoid unneeded clutter in the big tags file.
-#Adding $(srctree) adds about 20M on i386 to the size of the output file!
-
-ifeq ($(src),$(obj))
-__srctree =
-else
-__srctree = $(srctree)/
-endif
-
-ifeq ($(ALLSOURCE_ARCHS),)
-ifeq ($(ARCH),um)
-ALLINCLUDE_ARCHS := $(ARCH) $(SUBARCH)
-else
-ALLINCLUDE_ARCHS := $(ARCH)
-endif
-else
-#Allow user to specify only ALLSOURCE_PATHS on the command line, keeping existing behavour.
-ALLINCLUDE_ARCHS := $(ALLSOURCE_ARCHS)
-endif
-
-ALLSOURCE_ARCHS := $(ARCH)
-
-define find-sources
-        ( find $(__srctree) $(RCS_FIND_IGNORE) \
-	       \( -name include -o -name arch \) -prune -o \
-	       -name $1 -print; \
-	  for ARCH in $(ALLSOURCE_ARCHS) ; do \
-	       find $(__srctree)arch/$${ARCH} $(RCS_FIND_IGNORE) \
-	            -name $1 -print; \
-	  done ; \
-	  find $(__srctree)include $(RCS_FIND_IGNORE) \
-	       \( -name config -o -name 'asm-*' \) -prune \
-	       -o -name $1 -print; \
-	  for ARCH in $(ALLINCLUDE_ARCHS) ; do \
-	       test -e $(__srctree)include/asm-$${arch} && \
-	         find $(__srctree)include/asm-$${arch} $(RCS_FIND_IGNORE) \
-	           -name $1 -print; \
-	      test -e $(__srctree)arch/$${arch}/include/asm && \
-	        find $(__srctree)arch/$${arch}/include/asm $(RCS_FIND_IGNORE) \
-	            -name $1 -print; \
-	  done ; \
-	  find $(__srctree)include/asm-generic $(RCS_FIND_IGNORE) \
-	       -name $1 -print )
-endef
-
-define all-sources
-	$(call find-sources,'*.[chS]')
-endef
-define all-kconfigs
-	$(call find-sources,'Kconfig*')
-endef
-define all-defconfigs
-	$(call find-sources,'defconfig')
-endef
-
-define xtags
-	if $1 --version 2>&1 | grep -iq exuberant; then \
-	    $(all-sources) | xargs $1 -a \
-		-I __initdata,__exitdata,__acquires,__releases \
-		-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \
-		--extra=+f --c-kinds=+px \
-		--regex-asm='/ENTRY\(([^)]*)\).*/\1/'; \
-	    $(all-kconfigs) | xargs $1 -a \
-		--langdef=kconfig \
-		--language-force=kconfig \
-		--regex-kconfig='/^[[:blank:]]*config[[:blank:]]+([[:alnum:]_]+)/\1/'; \
-	    $(all-defconfigs) | xargs -r $1 -a \
-		--langdef=dotconfig \
-		--language-force=dotconfig \
-		--regex-dotconfig='/^#?[[:blank:]]*(CONFIG_[[:alnum:]_]+)/\1/'; \
-	elif $1 --version 2>&1 | grep -iq emacs; then \
-	    $(all-sources) | xargs $1 -a; \
-	    $(all-kconfigs) | xargs $1 -a \
-		--regex='/^[ \t]*config[ \t]+\([a-zA-Z0-9_]+\)/\1/'; \
-	    $(all-defconfigs) | xargs -r $1 -a \
-		--regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/'; \
-	else \
-	    $(all-sources) | xargs $1 -a; \
-	fi
-endef
-
-quiet_cmd_cscope-file = FILELST cscope.files
-      cmd_cscope-file = (echo \-k; echo \-q; $(all-sources)) > cscope.files
-
-quiet_cmd_cscope = MAKE    cscope.out
-      cmd_cscope = cscope -b
-
-cscope: FORCE
-	$(call cmd,cscope-file)
-	$(call cmd,cscope)
-
-quiet_cmd_TAGS = MAKE   $@
-define cmd_TAGS
-	rm -f $@; \
-	$(call xtags,etags)
-endef
-
-TAGS: FORCE
-	$(call cmd,TAGS)
-
-quiet_cmd_tags = MAKE   $@
-define cmd_tags
-	rm -f $@; \
-	$(call xtags,ctags)
-endef
-
-tags: FORCE
+tags TAGS cscope: FORCE
 	$(call cmd,tags)
 
 
diff --git a/scripts/tags.sh b/scripts/tags.sh
new file mode 100755
index 0000000..79fdafb
--- /dev/null
+++ b/scripts/tags.sh
@@ -0,0 +1,265 @@
+#!/bin/sh
+# Generate tags or cscope files
+# Usage tags.sh <mode>
+#
+# mode may be any of: tags, TAGS, cscope
+#
+# Uses the following environment variables:
+# ARCH, SUBARCH, SRCARCH, srctree, src, obj
+
+if [ "$KBUILD_VERBOSE" = "1" ]; then
+	set -x
+fi
+
+# This is a duplicate of RCS_FIND_IGNORE without escaped '()'
+ignore="( -name SCCS -o -name BitKeeper -o -name .svn -o \
+          -name CVS  -o -name .pc       -o -name .hg  -o \
+          -name .git )                                   \
+          -prune -o"
+
+# Do not use full path if we do not use O=.. builds
+# Use make O=. {tags|cscope}
+# to force full paths for a non-O= build
+if [ "${KBUILD_SRC}" = "" ]; then
+	tree=
+else
+	tree=${srctree}/
+fi
+
+# Find all available archs
+find_all_archs()
+{
+	ALLSOURCE_ARCHS=""
+	for arch in `ls ${tree}arch`; do
+		ALLSOURCE_ARCHS="${ALLSOURCE_ARCHS} "${arch##\/}
+	done
+}
+
+# Detect if ALLSOURCE_ARCHS is set. If not, we assume SRCARCH
+if [ "${ALLSOURCE_ARCHS}" = "" ]; then
+	ALLSOURCE_ARCHS=${SRCARCH}
+elif [ "${ALLSOURCE_ARCHS}" = "all" ]; then
+	find_all_archs
+fi
+
+# find sources in arch/$ARCH
+find_arch_sources()
+{
+	for i in $archincludedir; do
+		prune="$prune -wholename $i -prune -o"
+	done
+	find ${tree}arch/$1 $ignore $prune -name "$2" -print;
+}
+
+# find sources in arch/$1/include
+find_arch_include_sources()
+{
+	include=$(find ${tree}arch/$1/ -name include -type d);
+	if [ -n "$include" ]; then
+		archincludedir="$archincludedir $include"
+		find $include $ignore -name "$2" -print;
+	fi
+}
+
+# find sources in include/
+find_include_sources()
+{
+	find ${tree}include $ignore -name config -prune -o -name "$1" -print;
+}
+
+# find sources in rest of tree
+# we could benefit from a list of dirs to search in here
+find_other_sources()
+{
+	find ${tree}* $ignore \
+	     \( -name include -o -name arch -o -name '.tmp_*' \) -prune -o \
+	       -name "$1" -print;
+}
+
+find_sources()
+{
+	find_arch_sources $1 "$2"
+}
+
+all_sources()
+{
+	find_arch_include_sources ${SRCARCH} '*.[chS]'
+	if [ ! -z "$archinclude" ]; then
+		find_arch_include_sources $archinclude '*.[chS]'
+	fi
+	find_include_sources '*.[chS]'
+	for arch in $ALLSOURCE_ARCHS
+	do
+		find_sources $arch '*.[chS]'
+	done
+	find_other_sources '*.[chS]'
+}
+
+all_kconfigs()
+{
+	for arch in $ALLSOURCE_ARCHS; do
+		find_sources $arch 'Kconfig*'
+	done
+	find_other_sources 'Kconfig*'
+}
+
+all_defconfigs()
+{
+	find_sources $ALLSOURCE_ARCHS "defconfig"
+}
+
+docscope()
+{
+	(echo \-k; echo \-q; all_sources) > cscope.files
+	cscope -b -f cscope.out
+}
+
+dogtags()
+{
+	all_sources | gtags -i -f -
+}
+
+exuberant()
+{
+	all_sources | xargs $1 -a                               \
+	-I __initdata,__exitdata,__acquires,__releases          \
+	-I __read_mostly,____cacheline_aligned                  \
+	-I ____cacheline_aligned_in_smp                         \
+	-I ____cacheline_internodealigned_in_smp                \
+	-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL                      \
+	-I DEFINE_TRACE,EXPORT_TRACEPOINT_SYMBOL,EXPORT_TRACEPOINT_SYMBOL_GPL \
+	--extra=+f --c-kinds=+px                                \
+	--regex-asm='/^(ENTRY|_GLOBAL)\(([^)]*)\).*/\2/'        \
+	--regex-c='/^SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/sys_\1/' \
+	--regex-c++='/^TRACE_EVENT\(([^,)]*).*/trace_\1/'		\
+	--regex-c++='/^DEFINE_EVENT\([^,)]*, *([^,)]*).*/trace_\1/'	\
+	--regex-c++='/PAGEFLAG\(([^,)]*).*/Page\1/'			\
+	--regex-c++='/PAGEFLAG\(([^,)]*).*/SetPage\1/'			\
+	--regex-c++='/PAGEFLAG\(([^,)]*).*/ClearPage\1/'		\
+	--regex-c++='/TESTSETFLAG\(([^,)]*).*/TestSetPage\1/'		\
+	--regex-c++='/TESTPAGEFLAG\(([^,)]*).*/Page\1/'			\
+	--regex-c++='/SETPAGEFLAG\(([^,)]*).*/SetPage\1/'		\
+	--regex-c++='/__SETPAGEFLAG\(([^,)]*).*/__SetPage\1/'		\
+	--regex-c++='/TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/'	\
+	--regex-c++='/__TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/'	\
+	--regex-c++='/CLEARPAGEFLAG\(([^,)]*).*/ClearPage\1/'		\
+	--regex-c++='/__CLEARPAGEFLAG\(([^,)]*).*/__ClearPage\1/'	\
+	--regex-c++='/__PAGEFLAG\(([^,)]*).*/__SetPage\1/'		\
+	--regex-c++='/__PAGEFLAG\(([^,)]*).*/__ClearPage\1/'		\
+	--regex-c++='/PAGEFLAG_FALSE\(([^,)]*).*/Page\1/'		\
+	--regex-c++='/TESTSCFLAG\(([^,)]*).*/TestSetPage\1/'		\
+	--regex-c++='/TESTSCFLAG\(([^,)]*).*/TestClearPage\1/'		\
+	--regex-c++='/SETPAGEFLAG_NOOP\(([^,)]*).*/SetPage\1/'		\
+	--regex-c++='/CLEARPAGEFLAG_NOOP\(([^,)]*).*/ClearPage\1/'	\
+	--regex-c++='/__CLEARPAGEFLAG_NOOP\(([^,)]*).*/__ClearPage\1/'	\
+	--regex-c++='/TESTCLEARFLAG_FALSE\(([^,)]*).*/TestClearPage\1/' \
+	--regex-c++='/__TESTCLEARFLAG_FALSE\(([^,)]*).*/__TestClearPage\1/' \
+	--regex-c++='/_PE\(([^,)]*).*/PEVENT_ERRNO__\1/'		\
+	--regex-c='/PCI_OP_READ\(([a-z]*[a-z]).*[1-4]\)/pci_bus_read_config_\1/' \
+	--regex-c='/PCI_OP_WRITE\(([a-z]*[a-z]).*[1-4]\)/pci_bus_write_config_\1/'
+
+	all_kconfigs | xargs $1 -a                              \
+	--langdef=kconfig --language-force=kconfig              \
+	--regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/\2/'
+
+	all_kconfigs | xargs $1 -a                              \
+	--langdef=kconfig --language-force=kconfig              \
+	--regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/CONFIG_\2/'
+
+	all_defconfigs | xargs -r $1 -a                         \
+	--langdef=dotconfig --language-force=dotconfig          \
+	--regex-dotconfig='/^#?[[:blank:]]*(CONFIG_[[:alnum:]_]+)/\1/'
+}
+
+emacs()
+{
+	all_sources | xargs $1 -a                               \
+	--regex='/^(ENTRY|_GLOBAL)(\([^)]*\)).*/\2/'            \
+	--regex='/^SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/sys_\1/'   \
+	--regex='/^TRACE_EVENT(\([^,)]*\).*/trace_\1/'		\
+	--regex='/^DEFINE_EVENT([^,)]*, *\([^,)]*\).*/trace_\1/' \
+	--regex='/PAGEFLAG\(([^,)]*).*/Page\1/'			\
+	--regex='/PAGEFLAG\(([^,)]*).*/SetPage\1/'		\
+	--regex='/PAGEFLAG\(([^,)]*).*/ClearPage\1/'		\
+	--regex='/TESTSETFLAG\(([^,)]*).*/TestSetPage\1/'	\
+	--regex='/TESTPAGEFLAG\(([^,)]*).*/Page\1/'		\
+	--regex='/SETPAGEFLAG\(([^,)]*).*/SetPage\1/'		\
+	--regex='/__SETPAGEFLAG\(([^,)]*).*/__SetPage\1/'	\
+	--regex='/TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/'	\
+	--regex='/__TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/'	\
+	--regex='/CLEARPAGEFLAG\(([^,)]*).*/ClearPage\1/'	\
+	--regex='/__CLEARPAGEFLAG\(([^,)]*).*/__ClearPage\1/'	\
+	--regex='/__PAGEFLAG\(([^,)]*).*/__SetPage\1/'		\
+	--regex='/__PAGEFLAG\(([^,)]*).*/__ClearPage\1/'	\
+	--regex='/PAGEFLAG_FALSE\(([^,)]*).*/Page\1/'		\
+	--regex='/TESTSCFLAG\(([^,)]*).*/TestSetPage\1/'	\
+	--regex='/TESTSCFLAG\(([^,)]*).*/TestClearPage\1/'	\
+	--regex='/SETPAGEFLAG_NOOP\(([^,)]*).*/SetPage\1/'	\
+	--regex='/CLEARPAGEFLAG_NOOP\(([^,)]*).*/ClearPage\1/'	\
+	--regex='/__CLEARPAGEFLAG_NOOP\(([^,)]*).*/__ClearPage\1/' \
+	--regex='/TESTCLEARFLAG_FALSE\(([^,)]*).*/TestClearPage\1/' \
+	--regex='/__TESTCLEARFLAG_FALSE\(([^,)]*).*/__TestClearPage\1/' \
+	--regex='/_PE\(([^,)]*).*/PEVENT_ERRNO__\1/'		\
+	--regex='/PCI_OP_READ\(([a-z]*[a-z]).*[1-4]\)/pci_bus_read_config_\1/' \
+	--regex='/PCI_OP_WRITE\(([a-z]*[a-z]).*[1-4]\)/pci_bus_write_config_\1/'
+
+	all_kconfigs | xargs $1 -a                              \
+	--regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/\3/'
+
+	all_kconfigs | xargs $1 -a                              \
+	--regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/CONFIG_\3/'
+
+	all_defconfigs | xargs -r $1 -a                         \
+	--regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/'
+}
+
+xtags()
+{
+	if $1 --version 2>&1 | grep -iq exuberant; then
+		exuberant $1
+	elif $1 --version 2>&1 | grep -iq emacs; then
+		emacs $1
+	else
+		all_sources | xargs $1 -a
+        fi
+}
+
+
+# Support um (which uses SUBARCH)
+if [ "${ARCH}" = "um" ]; then
+	if [ "$SUBARCH" = "i386" ]; then
+		archinclude=x86
+	elif [ "$SUBARCH" = "x86_64" ]; then
+		archinclude=x86
+	else
+		archinclude=${SUBARCH}
+	fi
+fi
+
+remove_structs=
+case "$1" in
+	"cscope")
+		docscope
+		;;
+
+	"gtags")
+		dogtags
+		;;
+
+	"tags")
+		rm -f tags
+		xtags ctags
+		remove_structs=y
+		;;
+
+	"TAGS")
+		rm -f TAGS
+		xtags etags
+		remove_structs=y
+		;;
+esac
+
+# Remove structure forward declarations.
+if [ -n "$remove_structs" ]; then
+    LANG=C sed -i -e '/^\([a-zA-Z_][a-zA-Z0-9_]*\)\t.*\t\/\^struct \1;.*\$\/;"\tx$/d' $1
+fi
-- 
1.7.10.4


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] Makefile: move ctags and cscope support to a shell script
  2012-12-03  5:08 [PATCH] Makefile: move ctags and cscope support to a shell script Antony Pavlov
@ 2012-12-03 10:02 ` Sascha Hauer
  0 siblings, 0 replies; 2+ messages in thread
From: Sascha Hauer @ 2012-12-03 10:02 UTC (permalink / raw)
  To: Antony Pavlov; +Cc: barebox

On Mon, Dec 03, 2012 at 09:08:56AM +0400, Antony Pavlov wrote:
> The scripts/tags.sh file copied from linux-3.6.
> 
> Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com>

Making the toplevel Makefile smaller is a good move.

Applied, thanks

Sascha

> ---
>  Makefile        |  111 +----------------------
>  scripts/tags.sh |  265 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 268 insertions(+), 108 deletions(-)
>  create mode 100755 scripts/tags.sh
> 
> diff --git a/Makefile b/Makefile
> index 05b8be5..e3a23dd 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1166,115 +1166,10 @@ htmldocs: Doxyfile.version
>  
>  # Generate tags for editors
>  # ---------------------------------------------------------------------------
> +quiet_cmd_tags = GEN     $@
> +      cmd_tags = $(CONFIG_SHELL) $(srctree)/scripts/tags.sh $@
>  
> -#We want __srctree to totally vanish out when KBUILD_OUTPUT is not set
> -#(which is the most common case IMHO) to avoid unneeded clutter in the big tags file.
> -#Adding $(srctree) adds about 20M on i386 to the size of the output file!
> -
> -ifeq ($(src),$(obj))
> -__srctree =
> -else
> -__srctree = $(srctree)/
> -endif
> -
> -ifeq ($(ALLSOURCE_ARCHS),)
> -ifeq ($(ARCH),um)
> -ALLINCLUDE_ARCHS := $(ARCH) $(SUBARCH)
> -else
> -ALLINCLUDE_ARCHS := $(ARCH)
> -endif
> -else
> -#Allow user to specify only ALLSOURCE_PATHS on the command line, keeping existing behavour.
> -ALLINCLUDE_ARCHS := $(ALLSOURCE_ARCHS)
> -endif
> -
> -ALLSOURCE_ARCHS := $(ARCH)
> -
> -define find-sources
> -        ( find $(__srctree) $(RCS_FIND_IGNORE) \
> -	       \( -name include -o -name arch \) -prune -o \
> -	       -name $1 -print; \
> -	  for ARCH in $(ALLSOURCE_ARCHS) ; do \
> -	       find $(__srctree)arch/$${ARCH} $(RCS_FIND_IGNORE) \
> -	            -name $1 -print; \
> -	  done ; \
> -	  find $(__srctree)include $(RCS_FIND_IGNORE) \
> -	       \( -name config -o -name 'asm-*' \) -prune \
> -	       -o -name $1 -print; \
> -	  for ARCH in $(ALLINCLUDE_ARCHS) ; do \
> -	       test -e $(__srctree)include/asm-$${arch} && \
> -	         find $(__srctree)include/asm-$${arch} $(RCS_FIND_IGNORE) \
> -	           -name $1 -print; \
> -	      test -e $(__srctree)arch/$${arch}/include/asm && \
> -	        find $(__srctree)arch/$${arch}/include/asm $(RCS_FIND_IGNORE) \
> -	            -name $1 -print; \
> -	  done ; \
> -	  find $(__srctree)include/asm-generic $(RCS_FIND_IGNORE) \
> -	       -name $1 -print )
> -endef
> -
> -define all-sources
> -	$(call find-sources,'*.[chS]')
> -endef
> -define all-kconfigs
> -	$(call find-sources,'Kconfig*')
> -endef
> -define all-defconfigs
> -	$(call find-sources,'defconfig')
> -endef
> -
> -define xtags
> -	if $1 --version 2>&1 | grep -iq exuberant; then \
> -	    $(all-sources) | xargs $1 -a \
> -		-I __initdata,__exitdata,__acquires,__releases \
> -		-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \
> -		--extra=+f --c-kinds=+px \
> -		--regex-asm='/ENTRY\(([^)]*)\).*/\1/'; \
> -	    $(all-kconfigs) | xargs $1 -a \
> -		--langdef=kconfig \
> -		--language-force=kconfig \
> -		--regex-kconfig='/^[[:blank:]]*config[[:blank:]]+([[:alnum:]_]+)/\1/'; \
> -	    $(all-defconfigs) | xargs -r $1 -a \
> -		--langdef=dotconfig \
> -		--language-force=dotconfig \
> -		--regex-dotconfig='/^#?[[:blank:]]*(CONFIG_[[:alnum:]_]+)/\1/'; \
> -	elif $1 --version 2>&1 | grep -iq emacs; then \
> -	    $(all-sources) | xargs $1 -a; \
> -	    $(all-kconfigs) | xargs $1 -a \
> -		--regex='/^[ \t]*config[ \t]+\([a-zA-Z0-9_]+\)/\1/'; \
> -	    $(all-defconfigs) | xargs -r $1 -a \
> -		--regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/'; \
> -	else \
> -	    $(all-sources) | xargs $1 -a; \
> -	fi
> -endef
> -
> -quiet_cmd_cscope-file = FILELST cscope.files
> -      cmd_cscope-file = (echo \-k; echo \-q; $(all-sources)) > cscope.files
> -
> -quiet_cmd_cscope = MAKE    cscope.out
> -      cmd_cscope = cscope -b
> -
> -cscope: FORCE
> -	$(call cmd,cscope-file)
> -	$(call cmd,cscope)
> -
> -quiet_cmd_TAGS = MAKE   $@
> -define cmd_TAGS
> -	rm -f $@; \
> -	$(call xtags,etags)
> -endef
> -
> -TAGS: FORCE
> -	$(call cmd,TAGS)
> -
> -quiet_cmd_tags = MAKE   $@
> -define cmd_tags
> -	rm -f $@; \
> -	$(call xtags,ctags)
> -endef
> -
> -tags: FORCE
> +tags TAGS cscope: FORCE
>  	$(call cmd,tags)
>  
>  
> diff --git a/scripts/tags.sh b/scripts/tags.sh
> new file mode 100755
> index 0000000..79fdafb
> --- /dev/null
> +++ b/scripts/tags.sh
> @@ -0,0 +1,265 @@
> +#!/bin/sh
> +# Generate tags or cscope files
> +# Usage tags.sh <mode>
> +#
> +# mode may be any of: tags, TAGS, cscope
> +#
> +# Uses the following environment variables:
> +# ARCH, SUBARCH, SRCARCH, srctree, src, obj
> +
> +if [ "$KBUILD_VERBOSE" = "1" ]; then
> +	set -x
> +fi
> +
> +# This is a duplicate of RCS_FIND_IGNORE without escaped '()'
> +ignore="( -name SCCS -o -name BitKeeper -o -name .svn -o \
> +          -name CVS  -o -name .pc       -o -name .hg  -o \
> +          -name .git )                                   \
> +          -prune -o"
> +
> +# Do not use full path if we do not use O=.. builds
> +# Use make O=. {tags|cscope}
> +# to force full paths for a non-O= build
> +if [ "${KBUILD_SRC}" = "" ]; then
> +	tree=
> +else
> +	tree=${srctree}/
> +fi
> +
> +# Find all available archs
> +find_all_archs()
> +{
> +	ALLSOURCE_ARCHS=""
> +	for arch in `ls ${tree}arch`; do
> +		ALLSOURCE_ARCHS="${ALLSOURCE_ARCHS} "${arch##\/}
> +	done
> +}
> +
> +# Detect if ALLSOURCE_ARCHS is set. If not, we assume SRCARCH
> +if [ "${ALLSOURCE_ARCHS}" = "" ]; then
> +	ALLSOURCE_ARCHS=${SRCARCH}
> +elif [ "${ALLSOURCE_ARCHS}" = "all" ]; then
> +	find_all_archs
> +fi
> +
> +# find sources in arch/$ARCH
> +find_arch_sources()
> +{
> +	for i in $archincludedir; do
> +		prune="$prune -wholename $i -prune -o"
> +	done
> +	find ${tree}arch/$1 $ignore $prune -name "$2" -print;
> +}
> +
> +# find sources in arch/$1/include
> +find_arch_include_sources()
> +{
> +	include=$(find ${tree}arch/$1/ -name include -type d);
> +	if [ -n "$include" ]; then
> +		archincludedir="$archincludedir $include"
> +		find $include $ignore -name "$2" -print;
> +	fi
> +}
> +
> +# find sources in include/
> +find_include_sources()
> +{
> +	find ${tree}include $ignore -name config -prune -o -name "$1" -print;
> +}
> +
> +# find sources in rest of tree
> +# we could benefit from a list of dirs to search in here
> +find_other_sources()
> +{
> +	find ${tree}* $ignore \
> +	     \( -name include -o -name arch -o -name '.tmp_*' \) -prune -o \
> +	       -name "$1" -print;
> +}
> +
> +find_sources()
> +{
> +	find_arch_sources $1 "$2"
> +}
> +
> +all_sources()
> +{
> +	find_arch_include_sources ${SRCARCH} '*.[chS]'
> +	if [ ! -z "$archinclude" ]; then
> +		find_arch_include_sources $archinclude '*.[chS]'
> +	fi
> +	find_include_sources '*.[chS]'
> +	for arch in $ALLSOURCE_ARCHS
> +	do
> +		find_sources $arch '*.[chS]'
> +	done
> +	find_other_sources '*.[chS]'
> +}
> +
> +all_kconfigs()
> +{
> +	for arch in $ALLSOURCE_ARCHS; do
> +		find_sources $arch 'Kconfig*'
> +	done
> +	find_other_sources 'Kconfig*'
> +}
> +
> +all_defconfigs()
> +{
> +	find_sources $ALLSOURCE_ARCHS "defconfig"
> +}
> +
> +docscope()
> +{
> +	(echo \-k; echo \-q; all_sources) > cscope.files
> +	cscope -b -f cscope.out
> +}
> +
> +dogtags()
> +{
> +	all_sources | gtags -i -f -
> +}
> +
> +exuberant()
> +{
> +	all_sources | xargs $1 -a                               \
> +	-I __initdata,__exitdata,__acquires,__releases          \
> +	-I __read_mostly,____cacheline_aligned                  \
> +	-I ____cacheline_aligned_in_smp                         \
> +	-I ____cacheline_internodealigned_in_smp                \
> +	-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL                      \
> +	-I DEFINE_TRACE,EXPORT_TRACEPOINT_SYMBOL,EXPORT_TRACEPOINT_SYMBOL_GPL \
> +	--extra=+f --c-kinds=+px                                \
> +	--regex-asm='/^(ENTRY|_GLOBAL)\(([^)]*)\).*/\2/'        \
> +	--regex-c='/^SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/sys_\1/' \
> +	--regex-c++='/^TRACE_EVENT\(([^,)]*).*/trace_\1/'		\
> +	--regex-c++='/^DEFINE_EVENT\([^,)]*, *([^,)]*).*/trace_\1/'	\
> +	--regex-c++='/PAGEFLAG\(([^,)]*).*/Page\1/'			\
> +	--regex-c++='/PAGEFLAG\(([^,)]*).*/SetPage\1/'			\
> +	--regex-c++='/PAGEFLAG\(([^,)]*).*/ClearPage\1/'		\
> +	--regex-c++='/TESTSETFLAG\(([^,)]*).*/TestSetPage\1/'		\
> +	--regex-c++='/TESTPAGEFLAG\(([^,)]*).*/Page\1/'			\
> +	--regex-c++='/SETPAGEFLAG\(([^,)]*).*/SetPage\1/'		\
> +	--regex-c++='/__SETPAGEFLAG\(([^,)]*).*/__SetPage\1/'		\
> +	--regex-c++='/TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/'	\
> +	--regex-c++='/__TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/'	\
> +	--regex-c++='/CLEARPAGEFLAG\(([^,)]*).*/ClearPage\1/'		\
> +	--regex-c++='/__CLEARPAGEFLAG\(([^,)]*).*/__ClearPage\1/'	\
> +	--regex-c++='/__PAGEFLAG\(([^,)]*).*/__SetPage\1/'		\
> +	--regex-c++='/__PAGEFLAG\(([^,)]*).*/__ClearPage\1/'		\
> +	--regex-c++='/PAGEFLAG_FALSE\(([^,)]*).*/Page\1/'		\
> +	--regex-c++='/TESTSCFLAG\(([^,)]*).*/TestSetPage\1/'		\
> +	--regex-c++='/TESTSCFLAG\(([^,)]*).*/TestClearPage\1/'		\
> +	--regex-c++='/SETPAGEFLAG_NOOP\(([^,)]*).*/SetPage\1/'		\
> +	--regex-c++='/CLEARPAGEFLAG_NOOP\(([^,)]*).*/ClearPage\1/'	\
> +	--regex-c++='/__CLEARPAGEFLAG_NOOP\(([^,)]*).*/__ClearPage\1/'	\
> +	--regex-c++='/TESTCLEARFLAG_FALSE\(([^,)]*).*/TestClearPage\1/' \
> +	--regex-c++='/__TESTCLEARFLAG_FALSE\(([^,)]*).*/__TestClearPage\1/' \
> +	--regex-c++='/_PE\(([^,)]*).*/PEVENT_ERRNO__\1/'		\
> +	--regex-c='/PCI_OP_READ\(([a-z]*[a-z]).*[1-4]\)/pci_bus_read_config_\1/' \
> +	--regex-c='/PCI_OP_WRITE\(([a-z]*[a-z]).*[1-4]\)/pci_bus_write_config_\1/'
> +
> +	all_kconfigs | xargs $1 -a                              \
> +	--langdef=kconfig --language-force=kconfig              \
> +	--regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/\2/'
> +
> +	all_kconfigs | xargs $1 -a                              \
> +	--langdef=kconfig --language-force=kconfig              \
> +	--regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/CONFIG_\2/'
> +
> +	all_defconfigs | xargs -r $1 -a                         \
> +	--langdef=dotconfig --language-force=dotconfig          \
> +	--regex-dotconfig='/^#?[[:blank:]]*(CONFIG_[[:alnum:]_]+)/\1/'
> +}
> +
> +emacs()
> +{
> +	all_sources | xargs $1 -a                               \
> +	--regex='/^(ENTRY|_GLOBAL)(\([^)]*\)).*/\2/'            \
> +	--regex='/^SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/sys_\1/'   \
> +	--regex='/^TRACE_EVENT(\([^,)]*\).*/trace_\1/'		\
> +	--regex='/^DEFINE_EVENT([^,)]*, *\([^,)]*\).*/trace_\1/' \
> +	--regex='/PAGEFLAG\(([^,)]*).*/Page\1/'			\
> +	--regex='/PAGEFLAG\(([^,)]*).*/SetPage\1/'		\
> +	--regex='/PAGEFLAG\(([^,)]*).*/ClearPage\1/'		\
> +	--regex='/TESTSETFLAG\(([^,)]*).*/TestSetPage\1/'	\
> +	--regex='/TESTPAGEFLAG\(([^,)]*).*/Page\1/'		\
> +	--regex='/SETPAGEFLAG\(([^,)]*).*/SetPage\1/'		\
> +	--regex='/__SETPAGEFLAG\(([^,)]*).*/__SetPage\1/'	\
> +	--regex='/TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/'	\
> +	--regex='/__TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/'	\
> +	--regex='/CLEARPAGEFLAG\(([^,)]*).*/ClearPage\1/'	\
> +	--regex='/__CLEARPAGEFLAG\(([^,)]*).*/__ClearPage\1/'	\
> +	--regex='/__PAGEFLAG\(([^,)]*).*/__SetPage\1/'		\
> +	--regex='/__PAGEFLAG\(([^,)]*).*/__ClearPage\1/'	\
> +	--regex='/PAGEFLAG_FALSE\(([^,)]*).*/Page\1/'		\
> +	--regex='/TESTSCFLAG\(([^,)]*).*/TestSetPage\1/'	\
> +	--regex='/TESTSCFLAG\(([^,)]*).*/TestClearPage\1/'	\
> +	--regex='/SETPAGEFLAG_NOOP\(([^,)]*).*/SetPage\1/'	\
> +	--regex='/CLEARPAGEFLAG_NOOP\(([^,)]*).*/ClearPage\1/'	\
> +	--regex='/__CLEARPAGEFLAG_NOOP\(([^,)]*).*/__ClearPage\1/' \
> +	--regex='/TESTCLEARFLAG_FALSE\(([^,)]*).*/TestClearPage\1/' \
> +	--regex='/__TESTCLEARFLAG_FALSE\(([^,)]*).*/__TestClearPage\1/' \
> +	--regex='/_PE\(([^,)]*).*/PEVENT_ERRNO__\1/'		\
> +	--regex='/PCI_OP_READ\(([a-z]*[a-z]).*[1-4]\)/pci_bus_read_config_\1/' \
> +	--regex='/PCI_OP_WRITE\(([a-z]*[a-z]).*[1-4]\)/pci_bus_write_config_\1/'
> +
> +	all_kconfigs | xargs $1 -a                              \
> +	--regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/\3/'
> +
> +	all_kconfigs | xargs $1 -a                              \
> +	--regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/CONFIG_\3/'
> +
> +	all_defconfigs | xargs -r $1 -a                         \
> +	--regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/'
> +}
> +
> +xtags()
> +{
> +	if $1 --version 2>&1 | grep -iq exuberant; then
> +		exuberant $1
> +	elif $1 --version 2>&1 | grep -iq emacs; then
> +		emacs $1
> +	else
> +		all_sources | xargs $1 -a
> +        fi
> +}
> +
> +
> +# Support um (which uses SUBARCH)
> +if [ "${ARCH}" = "um" ]; then
> +	if [ "$SUBARCH" = "i386" ]; then
> +		archinclude=x86
> +	elif [ "$SUBARCH" = "x86_64" ]; then
> +		archinclude=x86
> +	else
> +		archinclude=${SUBARCH}
> +	fi
> +fi
> +
> +remove_structs=
> +case "$1" in
> +	"cscope")
> +		docscope
> +		;;
> +
> +	"gtags")
> +		dogtags
> +		;;
> +
> +	"tags")
> +		rm -f tags
> +		xtags ctags
> +		remove_structs=y
> +		;;
> +
> +	"TAGS")
> +		rm -f TAGS
> +		xtags etags
> +		remove_structs=y
> +		;;
> +esac
> +
> +# Remove structure forward declarations.
> +if [ -n "$remove_structs" ]; then
> +    LANG=C sed -i -e '/^\([a-zA-Z_][a-zA-Z0-9_]*\)\t.*\t\/\^struct \1;.*\$\/;"\tx$/d' $1
> +fi
> -- 
> 1.7.10.4
> 
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2012-12-03 10:02 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-12-03  5:08 [PATCH] Makefile: move ctags and cscope support to a shell script Antony Pavlov
2012-12-03 10:02 ` Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox