15c544019SMatthias Ringwald#!/usr/bin/env python3 2070c8da6SMatthias Ringwaldimport os 3070c8da6SMatthias Ringwaldimport re 4*5b2fa894SMilanka Ringwaldimport sys 5070c8da6SMatthias Ringwald 6*5b2fa894SMilanka RingwaldcopyrightTitle = ".*(Copyright).*(BlueKitchen GmbH)" 7*5b2fa894SMilanka RingwaldcopyrightSubtitle = ".*All rights reserved.*" 8070c8da6SMatthias Ringwald 9*5b2fa894SMilanka RingwaldfindAndReplace = { 10*5b2fa894SMilanka Ringwald "MATTHIAS" : "BLUEKITCHEN", 11*5b2fa894SMilanka Ringwald "RINGWALD" : "GMBH" 12*5b2fa894SMilanka Ringwald} 13070c8da6SMatthias Ringwald 14*5b2fa894SMilanka RingwaldignoreFolders = ["cpputest", "test", "docs", "3rd-party"] 15*5b2fa894SMilanka RingwaldignoreFiles = ["ant_cmds.h", "btstack_config.h", "bluetoothdrv.h", "bluetoothdrv-stub.c", "BTstackDaemonRespawn.c"] 16*5b2fa894SMilanka Ringwald 17070c8da6SMatthias Ringwald 18070c8da6SMatthias Ringwaldclass State: 19*5b2fa894SMilanka Ringwald SearchStartCopyright = 0 20*5b2fa894SMilanka Ringwald SearchEndCopyright = 1 21*5b2fa894SMilanka Ringwald CopyrightEnd = 2 22070c8da6SMatthias Ringwald 23070c8da6SMatthias Ringwalddef updateCopyright(dir_name, file_name): 24*5b2fa894SMilanka Ringwald global copyrightTitle, copyrightSubtitle 25*5b2fa894SMilanka 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 = "" 31*5b2fa894SMilanka Ringwald state = State.SearchStartCopyright 32070c8da6SMatthias Ringwald 33070c8da6SMatthias Ringwald with open(infile, 'rt') as fin: 34070c8da6SMatthias Ringwald for line in fin: 35*5b2fa894SMilanka Ringwald # search Copyright start 36*5b2fa894SMilanka Ringwald if state == State.SearchStartCopyright: 37*5b2fa894SMilanka Ringwald fout.write(line) 38*5b2fa894SMilanka Ringwald parts = re.match(copyrightTitle, line) 39070c8da6SMatthias Ringwald if parts: 40*5b2fa894SMilanka Ringwald fout.write(" * All rights reserved\n") 41*5b2fa894SMilanka Ringwald state = State.SearchEndCopyright 42*5b2fa894SMilanka Ringwald continue 43*5b2fa894SMilanka Ringwald 44*5b2fa894SMilanka Ringwald if state == State.SearchEndCopyright: 45*5b2fa894SMilanka Ringwald parts = re.match(copyrightSubtitle, line) 46*5b2fa894SMilanka Ringwald if parts: 47*5b2fa894SMilanka Ringwald continue 48*5b2fa894SMilanka Ringwald 49*5b2fa894SMilanka Ringwald # search end of Copyright 50*5b2fa894SMilanka Ringwald parts = re.match('\s*(\*\/)\s*',line) 51*5b2fa894SMilanka Ringwald if parts: 52*5b2fa894SMilanka Ringwald state = State.CopyrightEnd 53*5b2fa894SMilanka Ringwald else: 54*5b2fa894SMilanka Ringwald for key, value in findAndReplace.items(): 55*5b2fa894SMilanka Ringwald line = line.replace(key, value) 56*5b2fa894SMilanka Ringwald 57070c8da6SMatthias Ringwald fout.write(line) 58070c8da6SMatthias Ringwald continue 59070c8da6SMatthias Ringwald 60*5b2fa894SMilanka Ringwald # write rest of the file 61*5b2fa894SMilanka Ringwald if state == State.CopyrightEnd: 62070c8da6SMatthias Ringwald fout.write(line) 63070c8da6SMatthias Ringwald 64070c8da6SMatthias Ringwald os.rename(outfile, infile) 65070c8da6SMatthias Ringwald 66070c8da6SMatthias Ringwald 67070c8da6SMatthias Ringwalddef requiresCopyrightUpdate(file_name): 68*5b2fa894SMilanka Ringwald global copyrightTitle, copyrightSubtitle 69070c8da6SMatthias Ringwald 70*5b2fa894SMilanka Ringwald state = State.SearchStartCopyright 715c544019SMatthias Ringwald with open(file_name, "rt") as fin: 72*5b2fa894SMilanka Ringwald try: 73070c8da6SMatthias Ringwald for line in fin: 74*5b2fa894SMilanka Ringwald if state == State.SearchStartCopyright: 75*5b2fa894SMilanka Ringwald parts = re.match(copyrightTitle, line) 76070c8da6SMatthias Ringwald if parts: 77*5b2fa894SMilanka Ringwald state = State.SearchEndCopyright 78070c8da6SMatthias Ringwald continue 79*5b2fa894SMilanka Ringwald if state == State.SearchEndCopyright: 80*5b2fa894SMilanka Ringwald parts = re.match(copyrightSubtitle, line) 81*5b2fa894SMilanka Ringwald if parts: 82*5b2fa894SMilanka Ringwald return False 83070c8da6SMatthias Ringwald return True 84070c8da6SMatthias Ringwald 85*5b2fa894SMilanka Ringwald except UnicodeDecodeError: 86070c8da6SMatthias Ringwald return False 87070c8da6SMatthias Ringwald 88070c8da6SMatthias Ringwald return False 89070c8da6SMatthias Ringwald 90070c8da6SMatthias Ringwald 9141e404d3SMilanka Ringwaldbtstack_root = os.path.abspath(os.path.dirname(sys.argv[0]) + '/../..') 92070c8da6SMatthias Ringwald 93*5b2fa894SMilanka Ringwald# file_name = btstack_root + "/example/panu_demo.c" 94*5b2fa894SMilanka Ringwald# if requiresCopyrightUpdate(file_name): 95*5b2fa894SMilanka Ringwald# print(file_name, ": update") 96*5b2fa894SMilanka Ringwald # updateCopyright(btstack_root + "/example", "panu_demo.c") 97*5b2fa894SMilanka Ringwald 98*5b2fa894SMilanka Ringwald 9941e404d3SMilanka Ringwaldfor root, dirs, files in os.walk(btstack_root, topdown=True): 100070c8da6SMatthias Ringwald dirs[:] = [d for d in dirs if d not in ignoreFolders] 101070c8da6SMatthias Ringwald files[:] = [f for f in files if f not in ignoreFiles] 102070c8da6SMatthias Ringwald for f in files: 103070c8da6SMatthias Ringwald if f.endswith(".h") or f.endswith(".c"): 104070c8da6SMatthias Ringwald file_name = root + "/" + f 105070c8da6SMatthias Ringwald if requiresCopyrightUpdate(file_name): 106*5b2fa894SMilanka Ringwald print(file_name) 107070c8da6SMatthias Ringwald updateCopyright(root, f) 108070c8da6SMatthias Ringwald