-#! /usr/bin/env python
+#! /usr/bin/env python3
-# Copyright (C) 2011-2012 Free Software Foundation, Inc.
+# Copyright (C) 2011-2022 Free Software Foundation, Inc.
#
# This file is part of GDB.
#
"""
import datetime
+import locale
import os
import os.path
import subprocess
+import sys
def get_update_list():
the files are relative to that root directory.
"""
result = []
- for gdb_dir in ('gdb', 'sim', 'include/gdb'):
+ 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
+ if (
+ dirname in EXCLUDE_ALL_LIST
or reldirname in EXCLUDE_LIST
or reldirname in NOT_FSF_LIST
- or reldirname in BY_HAND):
+ 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
+ if (
+ filename in EXCLUDE_ALL_LIST
or relpath in EXCLUDE_LIST
or relpath in NOT_FSF_LIST
- or relpath in BY_HAND):
+ or relpath in BY_HAND
+ ):
# Ignore this file.
pass
else:
# 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'
+ os.environ["UPDATE_COPYRIGHT_USE_INTERVALS"] = "2"
# Perform the update, and save the output in a string.
- update_cmd = ['bash', 'gdb/gnulib/extra/update-copyright'] + update_list
- p = subprocess.Popen(update_cmd, stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT)
+ 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
# 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()
- warning_string = ': warning: copyright statement not found'
+ 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('\n'):
- line = line[:-1]
if line.endswith(warning_string):
filename = line[:-warning_len]
if may_have_copyright_notice(filename):
- print line
+ print(line)
else:
# Unrecognized file format. !?!
- print "*** " + line
+ print("*** " + line)
def may_have_copyright_notice(filename):
This function assumes that the current working directory is that root
directory.
- The algorigthm is fairly crude, meaning that it might return
+ 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...
# 50 lines...
MAX_LINES = 50
- fd = open(filename)
+ # 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 'Copyright' in line:
+ if b"Copyright" in line:
return True
lineno += 1
if lineno > 50:
return False
-def main ():
+def main():
"""The main subprogram."""
- if not os.path.isfile("gnulib/extra/update-copyright"):
- print "Error: This script must be called from the gdb directory."
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)
+ 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 + MULTIPLE_COPYRIGHT_HEADERS:
- print " ", filename
+ print()
+ print(
+ "\033[31mREMINDER: The following files must be updated by hand." "\033[0m"
+ )
+ for filename in BY_HAND:
+ print(" ", filename)
+
############################################################################
#
#
# Filenames are relative to the root directory.
EXCLUDE_LIST = (
- 'gdb/gdbarch.c', 'gdb/gdbarch.h',
- 'gdb/gnulib'
+ "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
# 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",
+ "COPYING",
+ "COPYING.LIB",
+ "CVS",
+ "configure",
+ "copying.c",
+ "fdl.texi",
+ "gpl.texi",
+ "aclocal.m4",
)
# The list of files to update by hand.
BY_HAND = (
- # These files are sensitive to line numbering.
- "gdb/testsuite/gdb.base/step-line.inp",
- "gdb/testsuite/gdb.base/step-line.c",
+ # Nothing at the moment :-).
)
# Files containing multiple copyright headers. This script is only
MULTIPLE_COPYRIGHT_HEADERS = (
"gdb/doc/gdb.texinfo",
"gdb/doc/refcard.tex",
+ "gdb/gdbarch.sh",
+ "gdb/syscalls/update-netbsd.sh",
)
-# The list of file which have a copyright, but not head by the FSF.
+# 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/osf-share",
"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/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-fpu.h",
- "sim/common/cgen-accfp.c", "sim/common/sim-fpu.c",
- "sim/erc32/sis.h", "sim/erc32/erc32.c", "sim/erc32/func.c",
- "sim/erc32/float.c", "sim/erc32/interf.c", "sim/erc32/sis.c",
- "sim/erc32/exec.c",
- "sim/mips/m16run.c", "sim/mips/sim-main.c",
- "sim/mn10300/sim-main.h",
+ "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/sim/bfin/s21.s", "sim/testsuite/sim/mips/mips32-dsp2.s",
+ "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()
-