Skip to content

Commit

Permalink
Make all tools that use llvmdo have a -topdir option that allows the top
Browse files Browse the repository at this point in the history
source dir for LLVM to be specified explicitly. This removes the dependency
on the llvm-config script. If the option is not given, then the scripts use
llvm-config which should be both built and in the PATH. This arrangement
provides a useful default for most developers but also allows the nightly
tester to execute countloc.sh before llvm-config is built and without
altering the PATH.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29663 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
Reid Spencer committed Aug 14, 2006
1 parent e6dd6a1 commit ca7592a
Show file tree
Hide file tree
Showing 6 changed files with 186 additions and 127 deletions.
2 changes: 1 addition & 1 deletion utils/NewNightlyTest.pl
Original file line number Diff line number Diff line change
Expand Up @@ -638,7 +638,7 @@ sub SendData{

# Get the number of lines of source code. Must be here after the build is done
# because countloc.sh uses the llvm-config script which must be built.
my $LOC = `utils/countloc.sh`;
my $LOC = `utils/countloc.sh -topdir $BuildDir`;

# Get the time taken by the configure script
my $ConfigTimeU = GetRegexNum "^user", 0, "([0-9.]+)", "$BuildLog";
Expand Down
19 changes: 14 additions & 5 deletions utils/countloc.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,29 @@
# (excluding certain things), runs "wc -l" on them to get the number of lines in
# each file and then sums up and prints the total with awk.
#
# The script takes no arguments but does expect to be run from somewhere in
# the top llvm source directory.
# The script takes one optional option, -topdir, which specifies the top llvm
# source directory. If it is not specified then the llvm-config tool is
# consulted to find top source dir.
#
# Note that the implementation is based on llvmdo. See that script for more
# details.
##===----------------------------------------------------------------------===##

TOPDIR=`llvm-config --src-root`
if test $# -gt 1 ; then
if test "$1" = "-topdir" ; then
TOPDIR="$2"
shift; shift;
else
TOPDIR=`llvm-config --src-root`
fi
fi

if test -d "$TOPDIR" ; then
cd $TOPDIR
./utils/llvmdo -dirs "include lib tools test utils examples" -code-only wc -l | awk '\
./utils/llvmdo -topdir "$TOPDIR" -dirs "include lib tools test utils examples" -code-only wc -l | awk '\
BEGIN { loc=0; } \
{ loc += $1; } \
END { print loc; }'
else
echo "Can't find LLVM top directory in $TOPDIR"
echo "Can't find LLVM top directory"
fi
18 changes: 15 additions & 3 deletions utils/getsrcs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,27 @@
##===----------------------------------------------------------------------===##
#
# This script just prints out the path names for all the source files in LLVM.
# The optional -topdir option can be used to specify the top LLVM source
# directory. Without it, the llvm-config command is consulted to find the
# top source directory.
#
# Note that the implementation is based on llvmdo. See that script for more
# details.
##===----------------------------------------------------------------------===##

TOPDIR=`pwd | sed -e 's#\(.*/llvm\).*#\1#'`
if test $# -gt 1 ; then
if test "$1" = "-topdir" ; then
TOPDIR="$2"
shift; shift;
else
TOPDIR=`llvm-config --src-root`
fi
fi

if test -d "$TOPDIR" ; then
cd $TOPDIR
./utils/llvmdo -dirs "include lib tools utils examples projects" echo
./utils/llvmdo -topdir "$TOPDIR" \
-dirs "include lib tools utils examples projects" echo
else
echo "Can't find LLVM top directory in $TOPDIR"
echo "Can't find LLVM top directory"
fi
244 changes: 131 additions & 113 deletions utils/llvmdo
Original file line number Diff line number Diff line change
Expand Up @@ -11,28 +11,46 @@
# 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.
# the other find related tools (countloc.sh,llvmgrep,getsrcs.sh,userloc.sh) are
# all based on this script. 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...
# llvmdo [-topdir DIR] [-dirs "DIRNAMES..."] [-code-only] PROGRAM ARGS...
#
# The -topdir option allows you to specify the llvm source root directly. If it
# is not specified then it will be obtained with llvm-config which must be built
# and in your path.
#
# 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.
# searched. The default list of directories searched is:
# include lib tools utils runtime autoconf docs test examples projects
# Note that you must use quotes around the list of directory names.
#
# The -code-only option specifies that only those files that are considered
# "code" should be visited. HTML documentation is considered code, but things
# like README files, etc. are not.
#
# Finally, 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..."] [-code-only] PROGRAM ARGS..."
echo "Usage: llvmdo [-topdir DIR] [-dirs "DIRNAMES..."] [-code-only] PROGRAM ARGS..."
exit 1
fi

if test "$1" = "-topdir" ; then
TOPDIR="$2"
shift; shift;
else
TOPDIR=`llvm-config --src-root`
fi

if test "$1" = "-dirs" ; then
LLVMDO_DIRS="$2";
LLVMDO_DIRS="$2"
shift ; shift
elif test -z "$LLVMDO_DIRS" ; then
LLVMDO_DIRS="include lib tools utils runtime autoconf docs test examples projects"
Expand All @@ -57,115 +75,115 @@ if test ! -x "$PROGRAM" ; then
fi
shift;

TOPDIR=`llvm-config --src-root`
paths_to_ignore="\
-path */CVS -o \
-path */CVS/* -o \
-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 docs/img/* -o \
-path */.libs/* -o \
-path lib/Support/bzip2/* -o \
-path projects/llvm-test/* \
"
files_to_match="\
-name *.ac \
-o -name *.b \
-o -name *.c \
-o -name *.cc \
-o -name *.cfg \
-o -name *.cpp \
-o -name *.css \
-o -name *.def \
-o -name *.el \
-o -name *.exp \
-o -name *.footer \
-o -name *.gnuplot' \
-o -name *.h \
-o -name *.header \
-o -name *.html \
-o -name *.in \
-o -name *.inc \
-o -name *.intro \
-o -name *.l \
-o -name *.ll \
-o -name *.llx \
-o -name *.lst \
-o -name *.m4 \
-o -name *.pod \
-o -name *.pl \
-o -name *.py \
-o -name *.sh \
-o -name *.schema \
-o -name *.st \
-o -name *.tcl \
-o -name *.td \
-o -name *.tr \
-o -name *.y \
-o -name Make* \
-o -name llvmdo \
-o -name llvmgrep \
-o -name check-each-file \
-o -name codgen-diff \
-o -name cvsupdate \
-o -name llvm-native-gcc \
-o -name llvm-native-gxx \
-o -name makellvm \
-o -path include/llvm/ADT/ilist \
-o -path test/\*.ll \
-o -path test/Scripts/not \
-o -path runtime/\*.ll \
"
if test -z "$CODE_ONLY" ; then
files_to_match="$files_to_match \
-o -name *.txt \
-o -name *.TXT \
-o -name *.vim \
-o -name vimrc \
-o -name README \
-o -name COPYING.LIB \
-o -name LICENSE* "
fi
files_to_ignore="\
-name \.* \
-o -name *~ \
-o -name #* \
-o -name *.cvs \
-o -name configure \
-o -name slow.ll \
-o -name *libtool* \
-o -name ltdl* \
-o -name ltdl.m4 \
-o -name ltmain.m4 \
-o -name ltmain.sh \
-o -name aclocal.m4 \
-o -name acinclude.m4 \
-o -name *VerifierIsReallySlow.llx \
-o -name *LoopSimplifyCrash.ll \
-o -name *AST-Remove.ll \
-o -name llvmAsmParser.cpp \
-o -name llvmAsmParser.h \
-o -name Lexer.cpp \
-o -name FileLexer.cpp \
-o -name FileParser.cpp \
-o -name FileParser.h \
-o -name StackerParser.h \
-o -name StackerParser.cpp \
-o -name ConfigLexer.cpp \
-o -name PPCPerfectShuffle.h \
"

if test -d "$TOPDIR" ; then
cd $TOPDIR
# Have to use the right "find" on a per-platform basis. Most platforms have
# Gnu find as "find", but Solaris does not.
case `uname -s` in
SunOS) find_prog=gfind ;;
*) find_prog=find ;;
esac
paths_to_ignore="\
-path */CVS -o \
-path */CVS/* -o \
-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 docs/img/* -o \
-path */.libs/* -o \
-path lib/Support/bzip2/* -o \
-path projects/llvm-test/* \
"
files_to_match="\
-name *.ac \
-o -name *.b \
-o -name *.c \
-o -name *.cc \
-o -name *.cfg \
-o -name *.cpp \
-o -name *.css \
-o -name *.def \
-o -name *.el \
-o -name *.exp \
-o -name *.footer \
-o -name *.gnuplot' \
-o -name *.h \
-o -name *.header \
-o -name *.html \
-o -name *.in \
-o -name *.inc \
-o -name *.intro \
-o -name *.l \
-o -name *.ll \
-o -name *.llx \
-o -name *.lst \
-o -name *.m4 \
-o -name *.pod \
-o -name *.pl \
-o -name *.py \
-o -name *.sh \
-o -name *.schema \
-o -name *.st \
-o -name *.tcl \
-o -name *.td \
-o -name *.tr \
-o -name *.y \
-o -name Make* \
-o -name llvmdo \
-o -name llvmgrep \
-o -name check-each-file \
-o -name codgen-diff \
-o -name cvsupdate \
-o -name llvm-native-gcc \
-o -name llvm-native-gxx \
-o -name makellvm \
-o -path include/llvm/ADT/ilist \
-o -path test/\*.ll \
-o -path test/Scripts/not \
-o -path runtime/\*.ll \
"
if test -z "$CODE_ONLY" ; then
files_to_match="$files_to_match \
-o -name *.txt \
-o -name *.TXT \
-o -name *.vim \
-o -name vimrc \
-o -name README \
-o -name COPYING.LIB \
-o -name LICENSE* "
fi
files_to_ignore="\
-name \.* \
-o -name *~ \
-o -name #* \
-o -name *.cvs \
-o -name configure \
-o -name slow.ll \
-o -name *libtool* \
-o -name ltdl* \
-o -name ltdl.m4 \
-o -name ltmain.m4 \
-o -name ltmain.sh \
-o -name aclocal.m4 \
-o -name acinclude.m4 \
-o -name *VerifierIsReallySlow.llx \
-o -name *LoopSimplifyCrash.ll \
-o -name *AST-Remove.ll \
-o -name llvmAsmParser.cpp \
-o -name llvmAsmParser.h \
-o -name Lexer.cpp \
-o -name FileLexer.cpp \
-o -name FileParser.cpp \
-o -name FileParser.h \
-o -name StackerParser.h \
-o -name StackerParser.cpp \
-o -name ConfigLexer.cpp \
-o -name PPCPerfectShuffle.h \
"

# Turn off file name generation (globbing) so that substitution of the
# variables doesn't cause the shell to create lists of file names
set -f
Expand Down
15 changes: 12 additions & 3 deletions utils/llvmgrep
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,24 @@
# details.
##===----------------------------------------------------------------------===##

TOPDIR=`llvm-config --src-root`
if test $# -gt 1 ; then
if test "$1" = "-topdir" ; then
TOPDIR="$2"
shift; shift;
else
TOPDIR=`llvm-config --src-root`
fi
fi

if test -d "$TOPDIR" ; then
cd $TOPDIR
case `uname -s` in
SunOS) grep_cmd="ggrep -H -n" ;;
Linux) grep_cmd="egrep -H -n" ;;
*) grep_cmd="egrep -l -n" ;;
esac
./utils/llvmdo -dirs "include lib tools utils docs examples test projects" $grep_cmd "$*"
./utils/llvmdo -topdir "$TOPDIR" \
-dirs "include lib tools utils docs examples test projects" $grep_cmd "$*"
else
echo "Can't find LLVM top directory in $TOPDIR"
echo "Can't find LLVM top directory"
fi
Loading

0 comments on commit ca7592a

Please sign in to comment.