#!/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

