| #!/bin/sh |
| ##===- utils/llvmdo - Counts Lines Of Code -------------------*- Script -*-===## |
| # |
| # The LLVM Compiler Infrastructure |
| # |
| # This file was developed by Reid Spencer and is distributed under the |
| # University of Illinois Open Source License. See LICENSE.TXT for details. |
| # |
| ##===----------------------------------------------------------------------===## |
| # |
| # This script is a general purpose "apply" function for the source files in LLVM |
| # It uses "find" to locate all the source files and then applies the user's |
| # command to them. As such, this command is often not used by itself much but |
| # the other find related tools (countloc.sh,llvmgrep,getsrcs.sh) are all based |
| # on the implementation. This script defines "what is a source file" in LLVM and |
| # so should be maintained if new directories, new file extensions, etc. are |
| # used in LLVM as it progresses. |
| # |
| # Usage: |
| # llvmdo [-dirs "DIRNAMES..."] PROGRAM ARGS... |
| # |
| # The -dirs argument allows you to specify the set of directories that are |
| # searched. By default, everything is searched. Note that you must use quotes |
| # around the list of directory names. After that you simply specify whatever |
| # program you want to run against each file and the arguments to give it. The |
| # PROGRAM will be given the file name as its last argument. |
| ##===----------------------------------------------------------------------===## |
| |
| if test $# -lt 1 ; then |
| echo "Usage: llvmdo [-dirs "DIRNAMES..."] PROGRAM ARGS..."; |
| exit 1; |
| fi |
| |
| if test "$1" = "-dirs" ; then |
| LLVMDO_DIRS="$2"; |
| shift ; shift |
| elif test -z "$LLVMDO_DIRS" ; then |
| LLVMDO_DIRS="include lib tools utils runtime autoconf docs test examples projects" |
| fi |
| PROGRAM=`which $1` |
| if test ! -x "$PROGRAM" ; then |
| echo "Can't execute $1" |
| exit 1 |
| fi |
| shift; |
| TOPDIR=`pwd | sed -e 's#\(.*/llvm\).*#\1#'` |
| if test -d "$TOPDIR" ; then |
| cd $TOPDIR |
| case `uname -s` in |
| SunOS) find_prog=gfind ;; |
| *) find_prog=find ;; |
| esac |
| $find_prog $LLVMDO_DIRS -type f \ |
| \( \ |
| -path 'docs/doxygen/*' -o \ |
| -path 'docs/CommandGuide/html/*' -o \ |
| -path 'docs/CommandGuide/man/*' -o \ |
| -path 'docs/CommandGuide/ps/*' -o \ |
| -path 'docs/CommandGuide/man/*' -o \ |
| -path 'docs/HistoricalNotes/*' -o \ |
| -path 'utils/Burg/*' -o \ |
| -path 'docs/img/*' -o \ |
| -path '*/.libs/*' \ |
| \) -prune -o \( \ |
| \( \ |
| -name '*.cpp' -o \ |
| -name '*.h' -o \ |
| -name '*.def' -o \ |
| -name '*.c' -o \ |
| -name '*.l' -o \ |
| -name '*.y' -o \ |
| -name '*.td' -o \ |
| -name '*.py' -o \ |
| -name '*.pl' -o \ |
| -name '*.sh' -o \ |
| -name '*.lst' -o \ |
| -name '*.pod' -o \ |
| -name '*.html' -o \ |
| -name '*.css' -o \ |
| -name '*.cfg' -o \ |
| -name '*.cc' -o \ |
| -name '*.txt' -o \ |
| -name '*.TXT' -o \ |
| -name '*.el' -o \ |
| -name '*.m4' -o \ |
| -name '*.in' -o \ |
| -name '*.ac' -o \ |
| -name '*.tr' -o \ |
| -name '*.vim' -o \ |
| -name '*.gnuplot' -o \ |
| -name 'Make*' -o \ |
| -path 'test/*.ll' -o \ |
| -path 'runtime/*.ll' \ |
| \) \ |
| \! -name '.*' \ |
| \! -name '*~' \ |
| \! -name '#*' \ |
| \! -name 'Sparc.burm.c' \ |
| \! -name 'llvmAsmParser.cpp' \ |
| \! -name 'llvmAsmParser.h' \ |
| \! -name 'FileParser.cpp' \ |
| \! -name 'FileParser.h' \ |
| \! -name 'StackerParser.h' \ |
| \! -name 'StackerParser.cpp' \ |
| -exec $PROGRAM "$@" {} \; \ |
| \) |
| else |
| echo "Can't find LLVM top directory in $TOPDIR" |
| fi |
| |