summaryrefslogtreecommitdiff
path: root/sloccount
diff options
context:
space:
mode:
Diffstat (limited to 'sloccount')
-rwxr-xr-xsloccount258
1 files changed, 258 insertions, 0 deletions
diff --git a/sloccount b/sloccount
new file mode 100755
index 0000000..9491227
--- /dev/null
+++ b/sloccount
@@ -0,0 +1,258 @@
+#!/bin/sh
+
+# This is the front-end program "sloccount", part of the
+# SLOCCount tool suite by David A. Wheeler.
+# Given a list of directories, compute the SLOC count,
+# automatically creating the directory $HOME/.slocdata.
+
+# This is part of SLOCCount, a toolsuite that counts
+# source lines of code (SLOC).
+# Copyright (C) 2001-2004 David A. Wheeler.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# To contact David A. Wheeler, see his website at:
+# http://www.dwheeler.com.
+
+# See the SLOCCount documentation if you need
+# more details about the license.
+
+version=2.26
+
+if [ "$#" -eq 0 ]
+then
+ echo "Error: You must provide a directory or directories of source code."
+ exit 1
+fi
+
+startingdir=`pwd`
+
+
+# "datadir" is some suitable safe place for the data; here's the default:
+datadir=${HOME}/.slocdata
+
+details="n"
+cached="n"
+append="n" # If "append", then don't delete datadir, just add to it.
+oneprogram="--oneprogram"
+display_results="n"
+duplicate_control=""
+autogen=""
+filecount=""
+wide=""
+effort_model=""
+personcost=""
+overhead=""
+follow=""
+addlang=""
+notopfollow=""
+showother=""
+
+# Perl 5.8.0 handles the "LANG" environment variable oddly;
+# if it includes ".UTF-8" (which is does in Red Hat Linux 9 and others)
+# then it will bitterly complain about ordinary text.
+# So, we'll need to filter ".UTF-8" out of LANG.
+if [ x"$LANG" != x ]
+then
+ LANG=`echo "$LANG" | sed -e 's/\.UTF-8//'`
+ export LANG
+ # echo "New LANG variable: $LANG"
+fi
+
+while [ "$#" -gt 0 ]
+do
+ case "$1"
+ in
+ --version) echo "$version"
+ exit 0;;
+ --cached) cached="y"
+ shift;;
+ --append) append="y"
+ shift;;
+ --follow) follow="--follow"
+ shift;;
+ --notopfollow) notopfollow="--notopfollow"
+ shift;;
+ --datadir) shift
+ if [ ! -d "$1" ]
+ then
+ echo "Error: $1 is not a directory"
+ exit 1
+ fi
+ cd "$1"
+ datadir=`pwd`
+ cd $startingdir
+ shift;;
+ --duplicates) duplicate_control="$1"
+ shift;;
+ --crossdups) duplicate_control="$1"
+ shift;;
+ --autogen) autogen="$1"
+ shift;;
+ --multiproject) oneprogram=""
+ shift;;
+ --filecount) filecount="$1"
+ shift;;
+ --filecounts) filecount="$1"
+ shift;;
+ --wide) wide="$1"
+ shift;;
+ --details) details="y"
+ shift;;
+ --addlang) addlang="$addlang $1 $2"
+ shift; shift;;
+ --addlangall) addlang="--addlangall"
+ shift;;
+ --showother) showother="--showother"
+ shift;;
+ --effort) effort_model="$1 $2 $3"
+ shift; shift; shift;;
+ --schedule) schedule_model="$1 $2 $3"
+ shift; shift; shift;;
+ --personcost) personcost="$1 $2"
+ shift; shift;;
+ --overhead) overhead="$1 $2"
+ shift; shift;;
+ --) break;;
+ --*) echo "Error: no such option $1"
+ exit 1;;
+ *) break;;
+ esac
+done
+
+# --duplicates) duplicate_control="$1"
+# --autogen) autogen="$1"
+# $follow
+
+case "$cached"
+in
+ y)
+ if [ -n "$duplicate_control" -o -n "$autogen" -o -n "$follow" ]
+ then
+ echo "Warning: You cannot control what files are selected in a cache."
+ echo "The option '--cached' disables --duplicates, --crossdups,"
+ echo "--autogen, and --follow. Remove the --cached option if you"
+ echo "are changing what you wish to include in your calculations."
+ echo
+ fi
+ if [ -d "$datadir" ]
+ then
+ display_results="y"
+ else
+ echo "Sorry, data directory $datadir does not exist."
+ exit 1
+ fi;;
+ n) # Not cached -- need to compute the results.
+
+ if [ "$append" = "n" ]; then
+ if [ -r "${datadir}/sloc_noerase" ]; then
+ echo "ERROR! This data directory is marked as do-not-erase."
+ echo "Remove the file ${datadir}/sloc_noerase to erase it."
+ exit 1
+ fi
+ if [ "$#" -eq 0 ]; then
+ echo "ERROR! No directories for initial analysis supplied."
+ exit 1
+ fi
+ rm -fr "$datadir"
+ mkdir "$datadir"
+ fi
+
+ # Now that "datadir" exists, first test to make sure wc -l works.
+ wctestfile=${datadir}/.wctestfile
+ echo "" > $wctestfile
+ echo "line two" >> $wctestfile
+ echo "line three" >> $wctestfile
+ echo "line four" >> $wctestfile
+ testcount=`wc -l < ${wctestfile} | sed -e 's/ //g'`
+ if [ "$testcount" -ne 4 ]
+ then
+ echo "FAILURE! Your wc program's -l option produces wrong results."
+ echo "Update your wc (probably in a textutils package) to a correct version."
+ exit 1
+ fi
+
+
+ # Split things up if we're given only one directory on the argument line
+ # and that directory has more than one subdirectory:
+ split_things_up="n"
+ if [ "$#" -eq 1 ]
+ then
+ count=0
+ for x in $1/*
+ do
+ if [ -d "$x" ]
+ then
+ count=`expr $count + 1`
+ if [ $count -gt 1 ]
+ then
+ split_things_up="y"
+ break
+ fi
+ fi
+ done
+ fi
+ # If we're appending, don't split things up.
+ if [ "$append" = "y" ]
+ then
+ split_things_up="n"
+ fi
+
+ case $split_things_up
+ in
+ y) make_filelists $follow $notopfollow --datadir "$datadir" --skip src "$1"/* ||
+ exit 1
+ if [ -d "$1"/src ]
+ then
+ make_filelists $notopfollow --datadir "$datadir" --prefix "src_" "$1"/src/* ||
+ exit 1
+ fi
+ ;;
+ *) make_filelists $follow $notopfollow --datadir "$datadir" "$@" || exit 1
+ ;;
+ esac
+
+ cd $datadir
+ if echo "Categorizing files." &&
+ break_filelist --duplistfile sloc_hashes $duplicate_control $autogen * &&
+ echo "Computing results." &&
+ compute_all *
+ then
+ display_results=y
+ fi
+ echo
+ echo
+ ;;
+esac
+
+# If we're appending, don't display results.
+if [ "$append" = "y" ]
+then
+ display_results="n"
+ echo "To display results, use the --cached option."
+fi
+
+
+case $display_results
+in
+ y)
+ cd $datadir
+ case $details
+ in
+ y) get_sloc_details * ;;
+ *) get_sloc $addlang $showother $filecount $oneprogram $effort_model $schedule_model $personcost $overhead * ;;
+ esac;;
+esac
+