summaryrefslogtreecommitdiff
path: root/make_filelists
diff options
context:
space:
mode:
authordwheeler <dwheeler@d762cc98-fd17-0410-9a0d-d09172385bc5>2006-07-07 13:36:27 +0000
committerdwheeler <dwheeler@d762cc98-fd17-0410-9a0d-d09172385bc5>2006-07-07 13:36:27 +0000
commit05095851346f52c8e918176e8e2abdf0b21de5ec (patch)
tree8de964f5eea4c7d80faf34d5d744e215a053ba8f /make_filelists
downloadsloccount-master.tar.gz
Initial import (sloccount 2.26)HEADmaster
git-svn-id: svn://svn.code.sf.net/p/sloccount/code/trunk@1 d762cc98-fd17-0410-9a0d-d09172385bc5
Diffstat (limited to 'make_filelists')
-rwxr-xr-xmake_filelists193
1 files changed, 193 insertions, 0 deletions
diff --git a/make_filelists b/make_filelists
new file mode 100755
index 0000000..5440d50
--- /dev/null
+++ b/make_filelists
@@ -0,0 +1,193 @@
+#!/bin/sh
+
+# On the command line, list the source code directories, e.g.:
+# /usr/src/redhat/BUILD/*
+# This command creates a set of directories paralleling the source code
+# directories, with a file named "filelist" listing all the files.
+
+# This script goes through some trouble to turn all relative references
+# into absolute pathnames, to make sure that the intended files
+# are always referenced. Conceivably the current directory isn't the
+# data directory and the parameters given use relative addressing,
+# and we need to fix all that here.
+
+# 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.
+#
+#
+
+
+if [ "$#" -eq 0 ]
+then
+ echo "Error: You must provide a list of directories."
+ exit 1
+fi
+
+
+follow=""
+skip=""
+prefix=""
+startingdir=`pwd`
+datadir=`pwd`
+
+while [ "$#" -gt 0 ]
+do
+ case "$1"
+ in
+ --follow) follow="-follow"
+ shift;;
+ --datadir) shift
+ if [ ! -d "$1" ]
+ then
+ echo "Error: $1 is not a directory"
+ exit 1
+ fi
+ cd "$1"
+ datadir=`pwd`
+ cd "$startingdir"
+ shift;;
+ --skip) shift
+ skip="$1"
+ shift;;
+ --prefix) shift
+ prefix="$1"
+ shift;;
+ --) shift; break;;
+ --*) echo "Error: unrecognized option $1"
+ exit 1
+ shift ;;
+ *) break;;
+ esac
+done
+
+# Non-directories will be placed into the "top_dir" data directory:
+toplevel_name="${prefix}top_dir"
+
+for possible_dir
+do
+ # Reset to starting directory each time, so that relative directory
+ # requests will be processed correctly.
+ cd "$startingdir"
+
+ # Translate "." into the name of current directory.
+ # We have to handle "." and ".." specially, because we can't place
+ # files with these names into the data directory.
+ if [ "$possible_dir" = "." ]
+ then
+ possible_dir=`pwd`
+ fi
+ if [ "$possible_dir" = ".." ]
+ then
+ cd ..
+ possible_dir=`pwd`
+ # Reset current directory.
+ cd "$startingdir"
+ fi
+
+ base=`basename "$possible_dir"`
+ if [ "$base" = "$skip" ]
+ then
+ continue
+ fi
+
+ if [ -d "$possible_dir" ]
+ then
+ # Set "dir" to real name (if possible_dir is a symlink to another
+ # directory, then "dir" and "possible_dir" may have very different values)
+ # depending on how "cd" is implemented on your shell.
+ cd "$possible_dir"
+ dir=`pwd`
+
+ # The child directory's name is derived from possible_dir, not dir --
+ # that way, directories we create will have names based on the supplied
+ # name (potentially a link), not the linked-to directory's name.
+ # Thus, symlinks can be used to disambiguate names where necessary.
+ childname="${prefix}${base}"
+
+ cd "$datadir"
+ if [ -d "$childname" ]
+ then
+ echo "WARNING! Directory $childname pre-existed when adding $possible_dir"
+ else
+ mkdir "$childname"
+ fi
+
+ echo "Creating filelist for $childname"
+ find "$dir" $follow -type f -print > "${childname}/filelist"
+
+ # If it exists, copy the PROGRAM_LICENSE.
+ if [ -s "${dir}/PROGRAM_LICENSE" ]
+ then
+ cp "${dir}/PROGRAM_LICENSE" "${childname}/PROGRAM_LICENSE"
+ fi
+ # If it exists, copy the ORIGINAL_SPEC_FILE
+ if [ -s "${dir}/ORIGINAL_SPEC_FILE" ]
+ then
+ cp "${dir}/ORIGINAL_SPEC_FILE" "${childname}/ORIGINAL_SPEC_FILE"
+ fi
+
+ # Do some error-checking.
+ if [ ! -s "${childname}/filelist" ]
+ then
+ # This is inefficient, but it doesn't matter - it's only used
+ # when we have an empty filelist (which is often an error condition)
+ saw_a_file=n
+ for x in ls "$dir"
+ do
+ saw_a_file=y
+ break
+ done
+ case $saw_a_file
+ in
+ n)
+ echo "Warning: directory ${childname} got no files."
+ echo "You may need to use the --follow option.";;
+ esac
+ fi
+
+ elif [ -f "$possible_dir" ]
+ then
+ # We have a non-directory (regular file, symlink to a file, etc.).
+ # We'll just add an absolute path to it into the toplevel_name directory.
+
+ # First, convert possible_dir into an absolute pathname if necessary:
+ pathname="$possible_dir"
+ case "$pathname"
+ in
+ /*) ;; # Already absolute pathname - do nothing.
+ *) pathname="${startingdir}/${possible_dir}" ;;
+ esac
+
+ # Add it to the toplevel_name directory (creating the directory if needed)
+ cd "$datadir"
+ if [ ! -d "$toplevel_name" ]
+ then
+ echo "Have a non-directory at the top, so creating directory $toplevel_name"
+ mkdir "$toplevel_name"
+ fi
+ echo "Adding $pathname to $toplevel_name"
+ echo "$pathname" >> "${toplevel_name}/filelist"
+ else
+ echo "WARNING!!! Not a file nor a directory (so ignored): $possible_dir"
+ fi
+done
+exit 0
+