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