Update to wx3.0, add SSE optimizations based on target_cpu, fix compile warnings
[ctsim.git] / scripts / update_copyright.py
diff --git a/scripts/update_copyright.py b/scripts/update_copyright.py
new file mode 100755 (executable)
index 0000000..7354dab
--- /dev/null
@@ -0,0 +1,168 @@
+#!/usr/bin/python
+
+'''
+This script updates the copyright license lines for all files within a
+particular directory.
+
+usage:
+  $ python scripts/update_copyright.py <dir>
+'''
+
+import os
+import sys
+import re
+
+def usage():
+    print __doc__
+
+if len(sys.argv) != 2:
+    sys.stderr.write("error: please provide an input directory\n")
+    usage()
+    sys.exit(-1)
+elif sys.argv[1] in ('-h','--help'):
+    usage()
+    sys.exit(0)
+
+# new copyright
+newcopy = '''\
+Copyright (c) 2007 - 2015 Joseph Gaeddert
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.'''.splitlines()
+
+# add new line character to end of each line
+for i in xrange(len(newcopy)):
+    newcopy[i] += '\n'
+
+rootdir = sys.argv[1]
+
+# specific files to ignore
+ignore_files = ['update_copyright.py',]
+
+# directories to ignore
+ignore_directories = ['.git',]
+
+# only look at these extensions
+include_extensions = ['.h', '.c', '.md', '.tex', '.ac', '.in', '.m',]
+
+# print alignment for status
+align = 56
+
+#
+def update_copyright(filename=""):
+    """
+    Update copyright on file.
+    """
+    # try to open file
+    contents = []
+    with open( filename, 'r' ) as f:
+        # read lines from file (removing newline character at end)
+        for line in f:
+            #contents.append(line.strip('\n\r'))
+            contents.append(line)
+
+    # parse contents
+    index_start = -1
+    index_stop  = -1
+
+    # search for copyright; starts at top of file
+    for i in range(min(10, len(contents))):
+        if re.search(r'Copyright .* Joseph Gaeddert',contents[i]):
+            index_start = i
+            break
+
+    if index_start == -1:
+        print "  " + filename + ":" + " "*(align-len(filename)) + "no copyright found"
+        return
+
+    # look for end of copyright
+    #for i in range(index_start+15,index_start+15+min(10, len(contents))):
+    i = index_start + 15
+    if re.search(r'along with liquid.  If not, see',contents[i]):
+        index_stop = i
+    elif re.search(r'AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM',contents[i]):
+        print "  " + filename + ":" + " "*(align-len(filename)) + "copyright already updated"
+        return
+    else:
+        print "  " + filename + ":" + " "*(align-len(filename)) + "could not find end of copyright"
+        return
+
+    # check comment type
+    m = re.search(r'^( \*|#+) +Copyright',contents[index_start])
+    if m:
+        comment = m.group(1)
+    else:
+        raise Exception('unexpected error')
+
+    # delete items in list
+    contents.__delslice__(index_start, index_stop+1)
+
+    # insert new copyright
+    for i in range(len(newcopy)):
+        # only add space after comment characters if string is not empty
+        # (e.g. print ' *' instead of ' * ')
+        space = ' ' if len(newcopy[i].strip()) > 0 else ''
+
+        # insert new comment
+        contents.insert(index_start+i, comment + space + newcopy[i])
+
+    # open original file for writing
+    with open( filename, 'w' ) as f:
+        for line in contents:
+            f.write(line)
+            
+    print "  " + filename + ":" + " "*(align-len(filename)) + "updated"
+
+#
+for root, subFolders, files in os.walk(rootdir):
+
+    # strip off leading './' if it exists
+    if root.startswith('./'):
+        root = root[2:]
+
+    # print root directory
+    print root
+    
+    # ignore certain directories
+    if root in ignore_directories:
+        print "(skipping directory)"
+        continue
+
+    # print subfolders
+    #for folder in subFolders:
+    #    print "%s has subdirectory %s" % (root, folder)
+
+    # parse each filename in directory
+    for filename in files:
+        filePath = os.path.join(root, filename)
+
+        # check filename
+        if filePath in ignore_files:
+            print "  " + filePath + ":" + " "*(align-len(filePath)) + "ignoring this specific file"
+            continue;
+
+        # check filename extension
+        baseName, extension = os.path.splitext(filename)
+        if extension not in include_extensions:
+            print "  " + filePath + ":" + " "*(align-len(filePath)) + "improper extension; ignoring file"
+            continue;
+
+        # continue on with this file
+        update_copyright(filePath)
+
+