llvm-mirror/utils/llvmdo
Reid Spencer a11dd3baf9 Allow a sequence of digits at the end of the directory name when trying to
determine the top directory. This allows the tool to find the correct top
directory when you have something like:

   /x/llvm
   /x/llvm2
   /x/llvm3

Previously the scripts would always find /x/llvm even if you were in the
llvm2 or llvm3 directory because the pattern didn't allow the digits at
the end of the path.

llvm-svn: 26751
2006-03-14 06:08:05 +00:00

114 lines
3.6 KiB
Bash
Executable File

#!/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[0-9]*\).*#\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 'Lexer.cpp' \
\! -name 'llvmAsmParser.cpp' \
\! -name 'llvmAsmParser.h' \
\! -name 'FileLexer.cpp' \
\! -name 'FileParser.cpp' \
\! -name 'FileParser.h' \
\! -name 'StackerParser.h' \
\! -name 'StackerParser.cpp' \
\! -name 'ConfigLexer.cpp' \
-exec $PROGRAM "$@" {} \; \
\)
else
echo "Can't find LLVM top directory in $TOPDIR"
fi