Mercurial > public > ostc4
diff Documentations/setGPLHeader.py @ 29:3a98f9e7ca58
ADD script to set GPL headers
author | jDG |
---|---|
date | Tue, 23 Jan 2018 13:36:25 +0100 |
parents | |
children | 6237372f76a4 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Documentations/setGPLHeader.py Tue Jan 23 13:36:25 2018 +0100 @@ -0,0 +1,83 @@ +#! /usr/bin/env python3 + +from __future__ import print_function +import os, sys, glob,re, codecs + +############################################################################## + +OSTC4=os.getcwd() +if not os.path.exists( os.path.join(OSTC4, 'Discovery') ): + raise 'Wrong start directory...' + +############################################################################## + +def walk(OSTC4): + for dir in ['BootLoader', 'Common', 'Discovery', 'FontPack', 'Small_CPU']: + # Make sure we have the top directory... + if not os.path.exists( os.path.join(OSTC4, dir) ): + raise 'Missing ' + dir + + # Then walk in all its existing source sub-directories... + for sub in ['.', 'Inc', 'Src']: + path = os.path.join(OSTC4, dir, sub) + if not os.path.exists(path): + continue + print(path + ':') + for file in glob.iglob( os.path.join(path, '*.[chs]') ): + try: + work(file) + except Exception as e: + raise RuntimeError('Cannot process ' + file + ':\n\t' + str(e)) + +############################################################################## + +with open(os.path.join(OSTC4, 'Documentations', 'GPL_template.txt')) as f: + template = f.read() + +def work(file): + + # Unclear what is done if encoding is not yet UTF-8... + with open(file, 'rt', encoding='cp1252') as f: + lines = f.read().splitlines() + + # Set defaults + kw = {} + kw['file'] = file.replace(OSTC4+'/', '') + kw['brief'] = '' + kw['author'] = 'Heinrichs Weikamp' + kw['date'] = '2018' + + # Try to gather info from existing header, if any: + for line in lines: + # Skip files that already have a GNU license: + if 'GNU General Public License' in line: + print('(done)\t' + file) + return + + get(line, 'brief', kw) + get(line, 'author', kw) + get(line, 'date', kw) + + # Replace kw in header + header = template + for k,v in kw.items(): + header = header.replace('$'+k, v) + + # Overwrite resulting file, normalizing EOL + with open(file, 'wt', encoding='utf-8') as f: + for line in header.splitlines(): + f.write(line.rstrip() + '\n') + for line in lines: + f.write(line.rstrip() + '\n') + print('+\t' + file) + +############################################################################## + +def get(line, word, kw): + m = re.search('(@|\\\\)' + word + '\s*(.*)', line) + if m: + kw[word] = m.group(2) + +############################################################################## + +walk(OSTC4)