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)