NAME
sloccount - count source lines of code (SLOC)
SYNOPSIS
sloccount [--version]
[--cached] [--append] [ --datadir
directory ] [--follow] [--duplicates]
[--crossdups] [--autogen] [--multiproject]
[--filecount] [--wide] [--details] [
--effort F E ] [ --schedule F
E ] [ --personcost cost ] [ --overhead
overhead ] [ --addlang language ] [
--addlangall ] [--] directories
DESCRIPTION
sloccount counts the physical source lines of code (SLOC)
contained in descendants of the specified set of directories. It
automatically determines which files are source code files, and it
automatically determines the computer language used in each file.
By default it summarizes the SLOC results and presents various
estimates (such as effort and cost to develop), but its output can
be controlled by various options.
If you give sloccount a list of two or more directories, the
counts will be broken up according to that list. There is one
important limitation: the basenames of the directories given as
parameters must be different, because those names are used to group
summary information. Thus, you can't run "sloccount /usr/src/hello
/usr/local/src/hello". This limitation only applies to parameters
of sloccount - subdirectories descended from the top directories
can have the same basename.
If you give sloccount only a single directory, sloccount tries
to automatically find a reasonable breakdown for purposes of
reporting (so it'll produce a useful report). In this case, if the
directory has at least two subdirectories, then those
subdirectories will be used as the breakdown. If the single
directory contains files as well as directories (or if you give
sloccount some files as parameters), those files will be assigned
to the directory "top_dir" so you can tell them apart from other
contents. Finally, if there's a subdirectory named "src", then that
subdirectory is again broken down, with all the further
subdirectories prefixed with "src_". Thus, if directory "X" has a
subdirectory "src", which contains subdirectory "modules",
sloccount will report a separate count for "src_modules".
sloccount normally considers all descendants of these
directories, though unless told otherwise it ignores symbolic
links.
sloccount is the usual front-end of the package of tools named
"SLOCCount". Note that the name of the entire package has capital
letters, while the name of this front-end program does not.
sloccount will normally report estimates of schedule time,
effort, and cost, and for single projects it also estimates the
average number of active developers. These are merely estimates,
not etched in stone; you can modify the parameters used to improve
the estimates.
OPTIONS
- --version
- Report the version number of SLOCCount and immediately exit.
This option can't be usefully combined with any other option.
- --cached
- Do not recalculate; instead, use cached results from a previous
execution. Without the --cached or --append option, sloccount
automatically removes the data directory and recreates it.
- --append
- Do not remove previous calculations from the data directory;
instead, add the analysis to the current contents of the data
directory.
- --datadir directory
- Store or use cached data in the given data directory; default
value is "~/.slocdata".
- --follow
- Follow symbolic links.
- --duplicates
- Count all duplicates. Normally, if files have equal content (as
determined using MD5 hash values), only one is counted.
- --crossdups
- Count duplicates if they occur in different portions of the
breakdown. Thus, if the top directory contains many different
projects, and you want the duplicates in different projects to
count in each project, choose this option.
- --autogen
- Count source code files that appear to be automatically
generated. Normally these are excluded.
- --multiproject
- The different directories represent different projects;
otherwise, it's assumed that all of the source code belongs to a
single project. This doesn't change the total number of files or
SLOC values, but it does affect the effort and schedule estimates.
Given this option, effort is computed separately for each project
(and then summed), and the schedule is the estimated schedule of
the largest project.
- --filecount
- Display counts of files instead of SLOC.
- --wide
- Display in the "wide" (tab-separated) format.
- --details
- Display details, that is, results for every source code file.
- --effort F E
- Change the factor and exponent for the effort model. Effort (in
person-months) is computed as F*(SLOC/1000)^E.
- --schedule F E
- Change the factor and exponent for the schedule model. Schedule
(in months) is computed as F*(effort)^E.
- --personcost cost
- Change the average annual salary to cost.
- --overhead overhead
- Change the overhead value to overhead. Estimated cost is
computed as effort * personcost * overhead.
- --addlang language
- Add a language not considered by default to be a ``language''
to be reported. Currently the only legal values for language are
"makefile", "sql", and "html". These files are not normally
included in the SLOC counts, although their SLOCs are internally
calculated and they are shown in the file counts. If you want to
include more than one such language, do it by passing --addlang
more than once, e.g., --addlang makefile --addlang sql.
- --addlangall
- Add all languages not normally included in final
reports.
NOTES
As with many other programs using Unix-like options,
directories whose names begin with a dash (``-'') can be
misinterpreted as options. If the directories to be analyzed might
begin with a dash, use the double-dash (``- -'') to indicate
the end of the option list before listing the directories.
BUGS
Filenames with embedded newlines (in the directories
or their descendants) won't be handled correctly; they will be
interpreted as separate filenames where the newlines are inserted.
An attacker could prevent sloccount from working by creating
filenames of the form /normal/directory ... NEWLINE/dev/zero. Such
filenames are exceedingly rare in source code because they're a
pain to work with using other tools, too. Future versions of
sloccount may internally use NUL-separated filenames (like GNU
find's -print0 command) to fix this.
There are many more languages not yet handled by SLOCCount.
SLOCCount only reports physical source lines of code. It would
be very useful if it could also report logical lines of code, and
perhaps other common metrics such as McCabe's complexity measures
and complexity density (complexity/SLOC for each function or
procedure).
SEE ALSO
See the SLOCCount website at http://www.dwheeler.com/sloccount.
Note that more detailed documentation is available both on the
website and with the SLOCCount package.
AUTHOR
David A. Wheeler (dwheeler@dwheeler.com).