#! /usr/bin/env python3

# Copyright (C) 2011-2022 Free Software Foundation, Inc.
#
# This file is part of GDB.
#
# 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 3 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, see <http://www.gnu.org/licenses/>.

"""copyright.py

This script updates the list of years in the copyright notices in
most files maintained by the GDB project.

Usage: cd src/gdb && python copyright.py

Always review the output of this script before committing it!
A useful command to review the output is:
    % filterdiff -x \*.c -x \*.cc -x \*.h -x \*.exp updates.diff
This removes the bulk of the changes which are most likely to be correct.
"""

import datetime
import locale
import os
import os.path
import subprocess
import sys


def get_update_list():
    """Return the list of files to update.

    Assumes that the current working directory when called is the root
    of the GDB source tree (NOT the gdb/ subdirectory!).  The names of
    the files are relative to that root directory.
    """
    result = []
    for gdb_dir in (
        "gdb",
        "gdbserver",
        "gdbsupport",
        "gnulib",
        "sim",
        "include/gdb",
    ):
        for root, dirs, files in os.walk(gdb_dir, topdown=True):
            for dirname in dirs:
                reldirname = "%s/%s" % (root, dirname)
                if (
                    dirname in EXCLUDE_ALL_LIST
                    or reldirname in EXCLUDE_LIST
                    or reldirname in NOT_FSF_LIST
                    or reldirname in BY_HAND
                ):
                    # Prune this directory from our search list.
                    dirs.remove(dirname)
            for filename in files:
                relpath = "%s/%s" % (root, filename)
                if (
                    filename in EXCLUDE_ALL_LIST
                    or relpath in EXCLUDE_LIST
                    or relpath in NOT_FSF_LIST
                    or relpath in BY_HAND
                ):
                    # Ignore this file.
                    pass
                else:
                    result.append(relpath)
    return result


def update_files(update_list):
    """Update the copyright header of the files in the given list.

    We use gnulib's update-copyright script for that.
    """
    # We want to use year intervals in the copyright notices, and
    # all years should be collapsed to one single year interval,
    # even if there are "holes" in the list of years found in the
    # original copyright notice (OK'ed by the FSF, case [gnu.org #719834]).
    os.environ["UPDATE_COPYRIGHT_USE_INTERVALS"] = "2"

    # Perform the update, and save the output in a string.
    update_cmd = ["bash", "gnulib/import/extra/update-copyright"]
    update_cmd += update_list

    p = subprocess.Popen(
        update_cmd,
        stdout=subprocess.PIPE,
        stderr=subprocess.STDOUT,
        encoding=locale.getpreferredencoding(),
    )
    update_out = p.communicate()[0]

    # Process the output.  Typically, a lot of files do not have
    # a copyright notice :-(.  The update-copyright script prints
    # a well defined warning when it did not find the copyright notice.
    # For each of those, do a sanity check and see if they may in fact
    # have one.  For the files that are found not to have one, we filter
    # the line out from the output, since there is nothing more to do,
    # short of looking at each file and seeing which notice is appropriate.
    # Too much work! (~4,000 files listed as of 2012-01-03).
    update_out = update_out.splitlines(keepends=False)
    warning_string = ": warning: copyright statement not found"
    warning_len = len(warning_string)

    for line in update_out:
        if line.endswith(warning_string):
            filename = line[:-warning_len]
            if may_have_copyright_notice(filename):
                print(line)
        else:
            # Unrecognized file format. !?!
            print("*** " + line)


def may_have_copyright_notice(filename):
    """Check that the given file does not seem to have a copyright notice.

    The filename is relative to the root directory.
    This function assumes that the current working directory is that root
    directory.

    The algorithm is fairly crude, meaning that it might return
    some false positives.  I do not think it will return any false
    negatives...  We might improve this function to handle more
    complex cases later...
    """
    # For now, it may have a copyright notice if we find the word
    # "Copyright" at the (reasonable) start of the given file, say
    # 50 lines...
    MAX_LINES = 50

    # We don't really know what encoding each file might be following,
    # so just open the file as a byte stream. We only need to search
    # for a pattern that should be the same regardless of encoding,
    # so that should be good enough.
    fd = open(filename, "rb")

    lineno = 1
    for line in fd:
        if b"Copyright" in line:
            return True
        lineno += 1
        if lineno > 50:
            return False
    return False


def main():
    """The main subprogram."""
    root_dir = os.path.dirname(os.getcwd())
    os.chdir(root_dir)

    if not (
        os.path.isdir("gdb") and os.path.isfile("gnulib/import/extra/update-copyright")
    ):
        print("Error: This script must be called from the gdb directory.")
        sys.exit(1)

    update_list = get_update_list()
    update_files(update_list)

    # Remind the user that some files need to be updated by HAND...

    if MULTIPLE_COPYRIGHT_HEADERS:
        print()
        print(
            "\033[31m"
            "REMINDER: Multiple copyright headers must be updated by hand:"
            "\033[0m"
        )
        for filename in MULTIPLE_COPYRIGHT_HEADERS:
            print("  ", filename)

    if BY_HAND:
        print()
        print(
            "\033[31mREMINDER: The following files must be updated by hand." "\033[0m"
        )
        for filename in BY_HAND:
            print("  ", filename)


############################################################################
#
# Some constants, placed at the end because they take up a lot of room.
# The actual value of these constants is not significant to the understanding
# of the script.
#
############################################################################

# Files which should not be modified, either because they are
# generated, non-FSF, or otherwise special (e.g. license text,
# or test cases which must be sensitive to line numbering).
#
# Filenames are relative to the root directory.
EXCLUDE_LIST = (
    "gdb/nat/glibc_thread_db.h",
    "gdb/CONTRIBUTE",
    "gdbsupport/Makefile.in",
    "gnulib/import",
    "gnulib/config.in",
    "gnulib/Makefile.in",
)

# Files which should not be modified, either because they are
# generated, non-FSF, or otherwise special (e.g. license text,
# or test cases which must be sensitive to line numbering).
#
# Matches any file or directory name anywhere.  Use with caution.
# This is mostly for files that can be found in multiple directories.
# Eg: We want all files named COPYING to be left untouched.

EXCLUDE_ALL_LIST = (
    "COPYING",
    "COPYING.LIB",
    "CVS",
    "configure",
    "copying.c",
    "fdl.texi",
    "gpl.texi",
    "aclocal.m4",
)

# The list of files to update by hand.
BY_HAND = (
    # Nothing at the moment :-).
)

# Files containing multiple copyright headers.  This script is only
# fixing the first one it finds, so we need to finish the update
# by hand.
MULTIPLE_COPYRIGHT_HEADERS = (
    "gdb/doc/gdb.texinfo",
    "gdb/doc/refcard.tex",
    "gdb/syscalls/update-netbsd.sh",
)

# The list of file which have a copyright, but not held by the FSF.
# Filenames are relative to the root directory.
NOT_FSF_LIST = (
    "gdb/exc_request.defs",
    "gdb/gdbtk",
    "gdb/testsuite/gdb.gdbtk/",
    "sim/arm/armemu.h",
    "sim/arm/armos.c",
    "sim/arm/gdbhost.c",
    "sim/arm/dbg_hif.h",
    "sim/arm/dbg_conf.h",
    "sim/arm/communicate.h",
    "sim/arm/armos.h",
    "sim/arm/armcopro.c",
    "sim/arm/armemu.c",
    "sim/arm/kid.c",
    "sim/arm/thumbemu.c",
    "sim/arm/armdefs.h",
    "sim/arm/armopts.h",
    "sim/arm/dbg_cp.h",
    "sim/arm/dbg_rdi.h",
    "sim/arm/parent.c",
    "sim/arm/armsupp.c",
    "sim/arm/armrdi.c",
    "sim/arm/bag.c",
    "sim/arm/armvirt.c",
    "sim/arm/main.c",
    "sim/arm/bag.h",
    "sim/arm/communicate.c",
    "sim/arm/gdbhost.h",
    "sim/arm/armfpe.h",
    "sim/arm/arminit.c",
    "sim/common/cgen-fpu.c",
    "sim/common/cgen-fpu.h",
    "sim/common/cgen-accfp.c",
    "sim/mips/m16run.c",
    "sim/mips/sim-main.c",
    "sim/moxie/moxie-gdb.dts",
    # Not a single file in sim/ppc/ appears to be copyright FSF :-(.
    "sim/ppc/filter.h",
    "sim/ppc/gen-support.h",
    "sim/ppc/ld-insn.h",
    "sim/ppc/hw_sem.c",
    "sim/ppc/hw_disk.c",
    "sim/ppc/idecode_branch.h",
    "sim/ppc/sim-endian.h",
    "sim/ppc/table.c",
    "sim/ppc/hw_core.c",
    "sim/ppc/gen-support.c",
    "sim/ppc/gen-semantics.h",
    "sim/ppc/cpu.h",
    "sim/ppc/sim_callbacks.h",
    "sim/ppc/RUN",
    "sim/ppc/Makefile.in",
    "sim/ppc/emul_chirp.c",
    "sim/ppc/hw_nvram.c",
    "sim/ppc/dc-test.01",
    "sim/ppc/hw_phb.c",
    "sim/ppc/hw_eeprom.c",
    "sim/ppc/bits.h",
    "sim/ppc/hw_vm.c",
    "sim/ppc/cap.h",
    "sim/ppc/os_emul.h",
    "sim/ppc/options.h",
    "sim/ppc/gen-idecode.c",
    "sim/ppc/filter.c",
    "sim/ppc/corefile-n.h",
    "sim/ppc/std-config.h",
    "sim/ppc/ld-decode.h",
    "sim/ppc/filter_filename.h",
    "sim/ppc/hw_shm.c",
    "sim/ppc/pk_disklabel.c",
    "sim/ppc/dc-simple",
    "sim/ppc/misc.h",
    "sim/ppc/device_table.h",
    "sim/ppc/ld-insn.c",
    "sim/ppc/inline.c",
    "sim/ppc/emul_bugapi.h",
    "sim/ppc/hw_cpu.h",
    "sim/ppc/debug.h",
    "sim/ppc/hw_ide.c",
    "sim/ppc/debug.c",
    "sim/ppc/gen-itable.h",
    "sim/ppc/interrupts.c",
    "sim/ppc/hw_glue.c",
    "sim/ppc/emul_unix.c",
    "sim/ppc/sim_calls.c",
    "sim/ppc/dc-complex",
    "sim/ppc/ld-cache.c",
    "sim/ppc/registers.h",
    "sim/ppc/dc-test.02",
    "sim/ppc/options.c",
    "sim/ppc/igen.h",
    "sim/ppc/registers.c",
    "sim/ppc/device.h",
    "sim/ppc/emul_chirp.h",
    "sim/ppc/hw_register.c",
    "sim/ppc/hw_init.c",
    "sim/ppc/sim-endian-n.h",
    "sim/ppc/filter_filename.c",
    "sim/ppc/bits.c",
    "sim/ppc/idecode_fields.h",
    "sim/ppc/hw_memory.c",
    "sim/ppc/misc.c",
    "sim/ppc/double.c",
    "sim/ppc/psim.h",
    "sim/ppc/hw_trace.c",
    "sim/ppc/emul_netbsd.h",
    "sim/ppc/psim.c",
    "sim/ppc/ppc-instructions",
    "sim/ppc/tree.h",
    "sim/ppc/README",
    "sim/ppc/gen-icache.h",
    "sim/ppc/gen-model.h",
    "sim/ppc/ld-cache.h",
    "sim/ppc/mon.c",
    "sim/ppc/corefile.h",
    "sim/ppc/vm.c",
    "sim/ppc/INSTALL",
    "sim/ppc/gen-model.c",
    "sim/ppc/hw_cpu.c",
    "sim/ppc/corefile.c",
    "sim/ppc/hw_opic.c",
    "sim/ppc/gen-icache.c",
    "sim/ppc/events.h",
    "sim/ppc/os_emul.c",
    "sim/ppc/emul_generic.c",
    "sim/ppc/main.c",
    "sim/ppc/hw_com.c",
    "sim/ppc/gen-semantics.c",
    "sim/ppc/emul_bugapi.c",
    "sim/ppc/device.c",
    "sim/ppc/emul_generic.h",
    "sim/ppc/tree.c",
    "sim/ppc/mon.h",
    "sim/ppc/interrupts.h",
    "sim/ppc/cap.c",
    "sim/ppc/cpu.c",
    "sim/ppc/hw_phb.h",
    "sim/ppc/device_table.c",
    "sim/ppc/lf.c",
    "sim/ppc/lf.c",
    "sim/ppc/dc-stupid",
    "sim/ppc/hw_pal.c",
    "sim/ppc/ppc-spr-table",
    "sim/ppc/emul_unix.h",
    "sim/ppc/words.h",
    "sim/ppc/basics.h",
    "sim/ppc/hw_htab.c",
    "sim/ppc/lf.h",
    "sim/ppc/ld-decode.c",
    "sim/ppc/sim-endian.c",
    "sim/ppc/gen-itable.c",
    "sim/ppc/idecode_expression.h",
    "sim/ppc/table.h",
    "sim/ppc/dgen.c",
    "sim/ppc/events.c",
    "sim/ppc/gen-idecode.h",
    "sim/ppc/emul_netbsd.c",
    "sim/ppc/igen.c",
    "sim/ppc/vm_n.h",
    "sim/ppc/vm.h",
    "sim/ppc/hw_iobus.c",
    "sim/ppc/inline.h",
    "sim/testsuite/mips/mips32-dsp2.s",
)

if __name__ == "__main__":
    main()
