NAME
    copyright-update - Update Copyright information in files

SYNOPSIS
      copyright-update [options] FILE [FILE ...]
      copyright-update [options] --recursive PATH [PATH ...]

DESCRIPTION
    Update the copyright information in set of files, possibly recursively,
    matching content criteria. The updating affects copyright year, GPL
    address information etc.

    The line must have word "Copyright", a space, three characters '(C)' (or
    a U+00A9 UTF copyright sign), a space, and the range of years. Varying
    amount of spaces and tabs are permitted, but there must be no spaces
    around the dash-character in YEAR-YEAR. Examples:

                A whitespace, or multiple, required
                |   |           No space between years
                |   |           |
       Copyright (C)        YYYY-YYYY
       Copyright: (C)       YYYY-YYYY
                |
                A colon is optional

    By default certain files and paths are always ignored; like version
    control directories, backups files, object files and binary files
    according to Perl's "-T" file test. Run program with option
    --help-exclude to see exclude path list.

OPTIONS
  Run options
    -a, --auto
        In automatic mode, the author's name is read from environment
        variable NAME and only lines matching 'Copyright.*$NAME' are
        affected. If NAME is not set, read information from EMAIL.

        If neither NAME nor EMAIL exists in evenvironemt, or if their values
        are not in a recognizable formats (see section ENVIRONMENT), this
        options does nothing.

        This option effectively tries to preset value for the --line option.

    -c, --code
        Preset --include to match common code files: .c, .h, .cc, .hh, .cpp,
        .c++, .hpp, .C, .pl, .py, .sh and .rb

    -d, --debug LEVEL
        Turn on debug. Level can be in range 0-10.

    -f, --fsf-address
        Change License paragraphs that refer to FSF address. The FSF's
        current recommendation is to redirect inquiries about licences to
        their URL.

        Effectively replace paragraphs:

          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

          You should have received a copy of the GNU General Public License
          along with this package; if not, write to the Free Software
          Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301USA

        With this:

          You should have received a copy of the GNU General Public License
          along with this program. If not, see <http://www.gnu.org/licenses/>.

    -i, --include REGEXP
        Include files matching regexp. The match is done against whole path.

        If this option is not supplied, every file is automatically
        included. The matches can be further filtered by using option
        --exclude.

        This option can be used multiple times. See also option --code.

    -l, --line REGEXP
        Change only lines which match REGEXP. The match is case-insensitive.

    -r, --recursive
        Recursively search all directories given in command line.

    -R, --regexp REGEXP
        Change only files whose content matches REGEXP. The file is read in
        as a one big string so that it's possible to match using Perl
        regular expressions across the whole file. An example:
        '(?smi)This.*multi.*line.*match'. See perlre(1) for more information
        about 'smi' and other modifiers.

        This option can be used as a preliminary *Content criteria*, to
        select files before --line option finds the correct Copyright lines.

    -t, --test, --dry-run
        Run in test mode. Show what would happen. No files are changed.

    -v, --verbose LEVEL
        Print informational messages. Increase numeric LEVEL for more
        verbosity.

    -x, --exclude REGEXP
        Ignore files matching regexp. The match is done against whole path.
        The option can be used multiple times.

        This option is applied after possible --include matches.

    -y, --year YEAR
        Update files using YEAR. Value must be four digits.

        The default operation is to use currect year, so this option is not
        necessary in normal use. Use case: you plan to take a long holiday
        before year's end and want to update the next year's value
        beforehand.

    -Y, --no-year
        Disable updating year.

  Miscellaneus options
    -h, --help
        Display help.

    --help-exclude
        Display default values used to exclude paths and files.

    --help-html
        Display help in HTML format.

    --help-man
        Display help in manual page man(1) format.

    -V, --version
        Display contact and version information.

EXAMPLES
    The primary use is to update files to reflect current year; option
    --year is implicit:

       copyright-update *

    To test what would happen:

       copyright-update --verbose 1 --test *

    Update only C-code file:

       copyright-update --verbose 1 --include '\.[ch]$' --recursive .

    It is possible to restrict updating files recursively to only those
    files whose content match regexp. Here, the lines affected are those
    that match --line regular expression.

       copyright-update \
            --regexp  '(?i)Author:.*John.*Doe' \
            --line    '\bFoo\b' \
            --ignore  '\.(bak|bup|[~#]])$' \
            --verbose 1 \
            --year    2013 \
            --test \
            --recursive \
            .

TROUBLESHOOTING
    See option --debug.

ENVIRONMENT
    EMAIL
        In the form "firstname.lastname@example.com"; that is, without the
        angles <>. If set, the value is used in option --auto only if
        environment variable NAME is not set.

        In order to find first and lastname, the localpart in email address
        must match case insensitive regexp '^[a-z-]+\.[a-z-]+@':

            address@example.com            Not used, not in form First.Last
            +------ +----------

            mr.first.lastname@example.com  Not used, likewise
            +---------------- +----------
            |                 |
            Localpart         Domain part

    NAME
        In the form "Firstname Lastname". If set, the value is used in
        option --auto.

FILES
    None.

EXIT STATUS
    Not defined.

SEE ALSO
    licensecheck(1)

DEPENDENCIES
    Uses only standard Perl modules.

BUGS AND LIMITATIONS
    The Copyright stanzas searched with option --fsf-address must be exactly
    like in the FSF recommendation in order for them to be noticed. See
    STANDARDS.

STANDARDS
    "How to use GNU licenses for your own software"
    http://www.gnu.org/copyleft/gpl-howto.html

    "Information for maintainers of GNU software (6.5 Copyright Notices)"
    http://www.gnu.org/prep/maintain/html_node/Copyright-Notices.html

    "Information for maintainers of GNU software (6.6 License Notices)"
    http://www.gnu.org/prep/maintain/html_node/License-Notices.html#License-
    Notices

AVAILABILITY
    Homepage is at http://freecode.com/projects/copyright-update

AUTHOR
    Jari Aalto

LICENSE AND COPYRIGHT
    Copyright (C) 2000-2016 Jari Aalto

    This program is free software; you can redistribute and/or modify
    program under the terms of GNU General Public license either version 2
    of the License, or (at your option) any later version. For more
    information, see see <http://www.gnu.org/licenses/>.

