Mercurial > public > ostc4
changeset 29:3a98f9e7ca58
ADD script to set GPL headers
author | jDG |
---|---|
date | Tue, 23 Jan 2018 13:36:25 +0100 |
parents | 7eabbb5b30ac |
children | ea1003f63e44 |
files | .hgsubstate Documentations/GPL_template.txt Documentations/setGPLHeader.py |
diffstat | 3 files changed, 109 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgsubstate Wed Jan 10 19:59:50 2018 +0100 +++ b/.hgsubstate Tue Jan 23 13:36:25 2018 +0100 @@ -1,4 +1,4 @@ 109c2f7ac2a3ffa3cdc3102ebe9ea91ab76d9c06 Common 179115830b2cff4646172828a916e7364eeb9aa5 Discovery -f090f36d55adb8a624a1ca33b240450d070883a2 Small_CPU +e6486abe8bc808f0ac5a31e58a543be8f354222a Small_CPU 675b28e8f29067bcc2e747a934b24097310daa54 wiki
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Documentations/GPL_template.txt Tue Jan 23 13:36:25 2018 +0100 @@ -0,0 +1,25 @@ +/////////////////////////////////////////////////////////////////////////////// +/// -*- coding: UTF-8 -*- +/// +/// \file $file +/// \brief $brief +/// \author $author +/// \date $date +/// +/// $Id$ +/////////////////////////////////////////////////////////////////////////////// +/// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh +/// +/// This program is free software: you can redistribute it and/or modify +/// it under the terms of the GNU General Public License as published by +/// the Free Software Foundation, either version 3 of the License, or +/// (at your option) any later version. +/// +/// This program is distributed in the hope that it will be useful, +/// but WITHOUT ANY WARRANTY; without even the implied warranty of +/// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/// GNU General Public License for more details. +/// +/// You should have received a copy of the GNU General Public License +/// along with this program. If not, see <http://www.gnu.org/licenses/>. +//////////////////////////////////////////////////////////////////////////////
--- /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)