1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 11:42:57 +01:00
llvm-mirror/utils/llvmdo
Chandler Carruth ae65e281f3 Update the file headers across all of the LLVM projects in the monorepo
to reflect the new license.

We understand that people may be surprised that we're moving the header
entirely to discuss the new license. We checked this carefully with the
Foundation's lawyer and we believe this is the correct approach.

Essentially, all code in the project is now made available by the LLVM
project under our new license, so you will see that the license headers
include that license only. Some of our contributors have contributed
code under our old license, and accordingly, we have retained a copy of
our old license notice in the top-level files in each project and
repository.

llvm-svn: 351636
2019-01-19 08:50:56 +00:00

184 lines
5.0 KiB
Bash
Executable File

#!/bin/sh
##===- utils/llvmdo - Counts Lines Of Code -------------------*- Script -*-===##
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#
##===----------------------------------------------------------------------===##
#
# 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,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 [-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. 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 [-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"
shift ; shift
elif test -z "$LLVMDO_DIRS" ; then
LLVMDO_DIRS="include lib tools utils runtime autoconf docs test examples projects cmake"
fi
if test "$1" = "-code-only" ; then
CODE_ONLY="set"
shift
else
CODE_ONLY=""
fi
if test "$1" = "" ; then
echo "Missing program name to run"
exit 1
fi
PROGRAM=`which $1`
if test ! -x "$PROGRAM" ; then
echo "Can't execute $1"
exit 1
fi
shift;
paths_to_ignore="\
-path */.svn/ -o \
-path */.svn/* -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 *.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 *.cmake \
-o -name llvmdo \
-o -name llvmgrep \
-o -name check-each-file \
-o -name codgen-diff \
-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 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 *LoopSimplifyCrash.ll \
-o -name *AST-Remove.ll \
-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
# 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
$find_prog $LLVMDO_DIRS -type f \
\( $paths_to_ignore \) -prune \
-o \( \( $files_to_match \) \! \( $files_to_ignore \) \
-exec $PROGRAM "$@" {} \; \)
else
echo "Can't find LLVM top directory in $TOPDIR"
fi