xref: /btstack/tool/misc/update_copyright.py (revision 03b8223bf91e76473e6b43da65cb1be9c3515199)
15c544019SMatthias Ringwald#!/usr/bin/env python3
2070c8da6SMatthias Ringwaldimport os
3070c8da6SMatthias Ringwaldimport re
45b2fa894SMilanka Ringwaldimport sys
5070c8da6SMatthias Ringwald
65b2fa894SMilanka RingwaldcopyrightTitle = ".*(Copyright).*(BlueKitchen GmbH)"
7*03b8223bSMilanka RingwaldcopyrightEndString = "Please inquire about"
8070c8da6SMatthias Ringwald
95b2fa894SMilanka RingwaldfindAndReplace = {
105b2fa894SMilanka Ringwald	"MATTHIAS" : "BLUEKITCHEN",
115b2fa894SMilanka Ringwald	"RINGWALD" : "GMBH"
125b2fa894SMilanka Ringwald}
13070c8da6SMatthias Ringwald
145b2fa894SMilanka RingwaldignoreFolders = ["cpputest", "test", "docs", "3rd-party"]
155b2fa894SMilanka RingwaldignoreFiles = ["ant_cmds.h", "btstack_config.h", "bluetoothdrv.h", "bluetoothdrv-stub.c", "BTstackDaemonRespawn.c"]
165b2fa894SMilanka Ringwald
17070c8da6SMatthias Ringwald
18070c8da6SMatthias Ringwaldclass State:
195b2fa894SMilanka Ringwald	SearchStartCopyright = 0
205b2fa894SMilanka Ringwald	SearchEndCopyright = 1
215b2fa894SMilanka Ringwald	CopyrightEnd = 2
22070c8da6SMatthias Ringwald
23070c8da6SMatthias Ringwalddef updateCopyright(dir_name, file_name):
24*03b8223bSMilanka Ringwald	global copyrightTitle
255b2fa894SMilanka Ringwald
26070c8da6SMatthias Ringwald	infile = dir_name + "/" + file_name
27070c8da6SMatthias Ringwald	outfile = dir_name + "/tmp_" + file_name
28070c8da6SMatthias Ringwald
29070c8da6SMatthias Ringwald	with open(outfile, 'wt') as fout:
30070c8da6SMatthias Ringwald		bufferComment = ""
315b2fa894SMilanka Ringwald		state = State.SearchStartCopyright
32070c8da6SMatthias Ringwald
33070c8da6SMatthias Ringwald		with open(infile, 'rt') as fin:
34070c8da6SMatthias Ringwald			for line in fin:
355b2fa894SMilanka Ringwald				# search Copyright start
365b2fa894SMilanka Ringwald				if state == State.SearchStartCopyright:
375b2fa894SMilanka Ringwald					fout.write(line)
385b2fa894SMilanka Ringwald					parts = re.match(copyrightTitle, line)
39070c8da6SMatthias Ringwald					if parts:
405b2fa894SMilanka Ringwald						state = State.SearchEndCopyright
415b2fa894SMilanka Ringwald						continue
425b2fa894SMilanka Ringwald
435b2fa894SMilanka Ringwald				if state == State.SearchEndCopyright:
445b2fa894SMilanka Ringwald					# search end of Copyright
455b2fa894SMilanka Ringwald					parts = re.match('\s*(\*\/)\s*',line)
465b2fa894SMilanka Ringwald					if parts:
475b2fa894SMilanka Ringwald						state = State.CopyrightEnd
485b2fa894SMilanka Ringwald					else:
495b2fa894SMilanka Ringwald						for key, value in findAndReplace.items():
505b2fa894SMilanka Ringwald							line = line.replace(key, value)
515b2fa894SMilanka Ringwald
52070c8da6SMatthias Ringwald					fout.write(line)
53070c8da6SMatthias Ringwald					continue
54070c8da6SMatthias Ringwald
555b2fa894SMilanka Ringwald				# write rest of the file
565b2fa894SMilanka Ringwald				if state == State.CopyrightEnd:
57070c8da6SMatthias Ringwald					fout.write(line)
58070c8da6SMatthias Ringwald
59070c8da6SMatthias Ringwald	os.rename(outfile, infile)
60070c8da6SMatthias Ringwald
61070c8da6SMatthias Ringwald
62070c8da6SMatthias Ringwalddef requiresCopyrightUpdate(file_name):
63*03b8223bSMilanka Ringwald	global copyrightTitle, copyrightEndString
64070c8da6SMatthias Ringwald
655b2fa894SMilanka Ringwald	state = State.SearchStartCopyright
665c544019SMatthias Ringwald	with open(file_name, "rt") as fin:
675b2fa894SMilanka Ringwald		try:
68070c8da6SMatthias Ringwald			for line in fin:
695b2fa894SMilanka Ringwald				if state == State.SearchStartCopyright:
705b2fa894SMilanka Ringwald					parts = re.match(copyrightTitle, line)
71070c8da6SMatthias Ringwald					if parts:
725b2fa894SMilanka Ringwald						state = State.SearchEndCopyright
73070c8da6SMatthias Ringwald						continue
745b2fa894SMilanka Ringwald				if state == State.SearchEndCopyright:
75*03b8223bSMilanka Ringwald					parts = re.match(copyrightEndString, line)
765b2fa894SMilanka Ringwald					if parts:
775b2fa894SMilanka Ringwald						return False
78070c8da6SMatthias Ringwald					return True
79070c8da6SMatthias Ringwald
805b2fa894SMilanka Ringwald		except UnicodeDecodeError:
81070c8da6SMatthias Ringwald			return False
82070c8da6SMatthias Ringwald
83070c8da6SMatthias Ringwald	return False
84070c8da6SMatthias Ringwald
85070c8da6SMatthias Ringwald
86*03b8223bSMilanka Ringwaldbtstack_root = os.path.abspath(os.path.dirname(sys.argv[0])) + "/../../"
87070c8da6SMatthias Ringwald
88*03b8223bSMilanka Ringwald# file_name = btstack_root + "/panu_demo.c"
895b2fa894SMilanka Ringwald# if requiresCopyrightUpdate(file_name):
905b2fa894SMilanka Ringwald#  	print(file_name, ": update")
91*03b8223bSMilanka Ringwald# 	# updateCopyright(btstack_root + "/example", "panu_demo.c")
925b2fa894SMilanka Ringwald
935b2fa894SMilanka Ringwald
9441e404d3SMilanka Ringwaldfor root, dirs, files in os.walk(btstack_root, topdown=True):
95070c8da6SMatthias Ringwald	dirs[:] = [d for d in dirs if d not in ignoreFolders]
96070c8da6SMatthias Ringwald	files[:] = [f for f in files if f not in ignoreFiles]
97070c8da6SMatthias Ringwald	for f in files:
98070c8da6SMatthias Ringwald		if f.endswith(".h") or f.endswith(".c"):
99070c8da6SMatthias Ringwald			file_name = root + "/" + f
100070c8da6SMatthias Ringwald			if requiresCopyrightUpdate(file_name):
1015b2fa894SMilanka Ringwald				print(file_name)
102070c8da6SMatthias Ringwald				updateCopyright(root, f)
103070c8da6SMatthias Ringwald