forked from qt-creator/qt-creator
		
	* Make sure all scripts come with a license * Update the license in the scripts * Add scripts to help with license changes Change-Id: I38a25aa1287ee8a75e0f0307d1b30320d781ad1f Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
		
			
				
	
	
		
			233 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			233 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl -w
 | |
| 
 | |
| ############################################################################
 | |
| #
 | |
| # Copyright (C) 2016 The Qt Company Ltd.
 | |
| # Contact: https://www.qt.io/licensing/
 | |
| #
 | |
| # This file is part of Qt Creator.
 | |
| #
 | |
| # Commercial License Usage
 | |
| # Licensees holding valid commercial Qt licenses may use this file in
 | |
| # accordance with the commercial license agreement provided with the
 | |
| # Software or, alternatively, in accordance with the terms contained in
 | |
| # a written agreement between you and The Qt Company. For licensing terms
 | |
| # and conditions see https://www.qt.io/terms-conditions. For further
 | |
| # information use the contact form at https://www.qt.io/contact-us.
 | |
| #
 | |
| # GNU General Public License Usage
 | |
| # Alternatively, this file may be used under the terms of the GNU
 | |
| # General Public License version 3 as published by the Free Software
 | |
| # Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
 | |
| # included in the packaging of this file. Please review the following
 | |
| # information to ensure the GNU General Public License requirements will
 | |
| # be met: https://www.gnu.org/licenses/gpl-3.0.html.
 | |
| #
 | |
| ############################################################################
 | |
| 
 | |
| use strict;
 | |
| 
 | |
| my $old_template = shift @ARGV;
 | |
| my $new_template = shift @ARGV;
 | |
| my $file = shift @ARGV;
 | |
| 
 | |
| # Usage: git grep "(C) " | cut -d':' -f1 | sort -u | xargs -L 1 scripts/updateCopyright.pl old.header new.header
 | |
| 
 | |
| # This will remove a verbatim copy of old.header from the file
 | |
| # given as the last argument and then inserts the new.header
 | |
| # instead. It may retain copyright year, copyright holder, author
 | |
| # lines or "this file is part of" information.
 | |
| 
 | |
| # All lines of the old.header are compared to the lines in the file.
 | |
| # Exceptions are lines matching "Copyright (C) (\d+) ", "Author: " or
 | |
| # "file is part of" which will must also match both the old.template
 | |
| # as well as the file-line to be considered a match.
 | |
| 
 | |
| # If there is no match between old.header and the start of file, then
 | |
| # the file is skipped.
 | |
| 
 | |
| ### Set which information to keep from the file here:
 | |
| my $keepYear = 0;
 | |
| my $keepHolder = 1;
 | |
| my $keepContact = 1;
 | |
| my $keepPartOf = 1;
 | |
| my $keepAuthors = 1;
 | |
| 
 | |
| ### Do not edit below this line...
 | |
| 
 | |
| die "Usage: $0 /path/to/oldtemplate /path/to/newtemplate /path/to/file\n" unless $file;
 | |
| 
 | |
| open TEMPLATE, "<$old_template" or die $!;
 | |
| my @oldT = <TEMPLATE>;
 | |
| close TEMPLATE;
 | |
| 
 | |
| open TEMPLATE, "<$new_template" or die $!;
 | |
| my @newT = <TEMPLATE>;
 | |
| close TEMPLATE;
 | |
| 
 | |
| open FILE, "<$file" or die $!;
 | |
| my @contents = <FILE>;
 | |
| close FILE;
 | |
| 
 | |
| my $currentLineNo = -1;
 | |
| my $oldLineNo = -1;
 | |
| my @copyrightYear;
 | |
| my @copyrightHolder;
 | |
| my @authors;
 | |
| my $contactInfo = "";
 | |
| my $partOf = "";
 | |
| 
 | |
| my $matched = 1;
 | |
| 
 | |
| my $hadCopyright = 0;
 | |
| my $hadAuthors = 0;
 | |
| 
 | |
| foreach (@contents) {
 | |
|     last unless $matched;
 | |
| 
 | |
|     my $currentLine = $_;
 | |
|     ++$currentLineNo;
 | |
|     ++$oldLineNo unless $hadCopyright or $hadAuthors;
 | |
| 
 | |
|     last if $oldLineNo == @oldT;
 | |
| 
 | |
|     my $oldLine = $oldT[$oldLineNo];
 | |
| 
 | |
|     # print "$currentLineNo: $currentLine";
 | |
|     # print "old: $oldLine";
 | |
| 
 | |
|     if ($currentLine =~ / Copyright .C. (\d+) (.*)$/i) {
 | |
|         $hadAuthors = 0;
 | |
| 
 | |
|         push(@copyrightYear, $1);
 | |
|         my $holder = $2;
 | |
|         # sanitize "Copyright (C) 2014 - 2016 whoever"
 | |
|         if ($holder =~ /^- \d\d\d\d (.*)$/) { $holder = $1; }
 | |
|         push(@copyrightHolder, $holder);
 | |
| 
 | |
|         ## print "  Found copyright ($1, $2)...\n";
 | |
| 
 | |
|         if (!$hadCopyright) {
 | |
|             $hadCopyright = 1;
 | |
|             ++$oldLineNo;
 | |
|             $matched = 0 unless $oldLine =~ / Copyright .C. \d+ /i;
 | |
|             ### print "    matched copyright: $matched\n";
 | |
|         }
 | |
|         next;
 | |
|     }
 | |
|     $hadCopyright = 0;
 | |
| 
 | |
|     if ($currentLine =~ / Author: (.*)$/i) {
 | |
|         push(@authors, $1);
 | |
| 
 | |
|         ## print "  Found author...\n";
 | |
| 
 | |
|         if (!$hadAuthors) {
 | |
|             $hadAuthors = 1;
 | |
|             ++$oldLineNo;
 | |
|             $matched = 0 unless $oldLine =~ / Author: /i;
 | |
|             ### print "    matched author: $matched\n";
 | |
|         }
 | |
|         next;
 | |
|     }
 | |
|     $hadAuthors = 0;
 | |
| 
 | |
|     if ($currentLine =~ / Contact: (.*)$/i) {
 | |
|         $contactInfo = $1;
 | |
|         ## print "  Found contact...\n";
 | |
|         $matched = 0 unless $oldLine =~ / Contact: /i;
 | |
|         ### print "    matched contact: $matched\n";
 | |
|         next;
 | |
|     }
 | |
|     if ($currentLine =~ / file is part of (.*)$/) {
 | |
|         $partOf = $1;
 | |
|         ## print "  Found part of...\n";
 | |
|         $matched = 0 unless $oldLine =~ / file is part of /;
 | |
|         ### print "    matched partOf: $matched\n";
 | |
|         next;
 | |
|     }
 | |
|     $matched = 0 unless $oldLine eq $currentLine;
 | |
|     ### print "    GENERIC: $matched\n";
 | |
| }
 | |
| 
 | |
| if (!$matched) {
 | |
|     print "$file: did not match input template. Skipping.\n";
 | |
|     exit 0;
 | |
| }
 | |
| 
 | |
| # remove empty lines...
 | |
| ++$currentLineNo while ($currentLineNo < @contents and $contents[$currentLineNo] =~ /^\s*$/);
 | |
| 
 | |
| splice @contents, 0, $currentLineNo;
 | |
| 
 | |
| print "Contents found in $file:\n";
 | |
| print "Copyright:\n";
 | |
| for (my $i = 0; $i < @copyrightYear; ++$i) {
 | |
|     print "    " . $copyrightYear[$i] . " - " . $copyrightHolder[$i] . ".\n";
 | |
| }
 | |
| print "Authors:\n";
 | |
| foreach (@authors) { print "    $_...\n"; }
 | |
| print "Contact: $contactInfo...\n";
 | |
| 
 | |
| ### Write file:
 | |
| my $hasEmptyLine = 0;
 | |
| open FILE, ">$file" or die "Failed to write into $file: $!.\n";
 | |
| 
 | |
| foreach (@newT) {
 | |
|     my $currentLine = $_;
 | |
| 
 | |
|     $hasEmptyLine = ($currentLine =~ /^\s*$/);
 | |
| 
 | |
|     if ($currentLine =~ /^(.* Copyright .C.) (\d+) (.*)$/i) {
 | |
|         my $prefix = $1;
 | |
|         my $year = $2;
 | |
|         my $holder = $3;
 | |
|         if ($keepYear || $keepHolder) {
 | |
|             for (my $i = 0; $i < @copyrightYear; ++$i) {
 | |
|                 my $y = $year;
 | |
|                 $y = $copyrightYear[$i] if $keepYear;
 | |
|                 my $h = $holder;
 | |
|                 $h = $copyrightHolder[$i] if $keepHolder;
 | |
|                 print FILE "$prefix $y $h\n";
 | |
|             }
 | |
|             next;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     if ($currentLine =~ /^(.* Author:) (.*)$/i) {
 | |
|         my $prefix = $1;
 | |
|         my $author = $2;
 | |
| 
 | |
|         if ($keepAuthors) {
 | |
|             foreach (@authors) { print FILE "$prefix $_\n"; }
 | |
|             next;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     if ($currentLine =~ /^(.* Contact:) (.*)$/i) {
 | |
|         my $prefix = $1;
 | |
|         $contactInfo = $2 unless $contactInfo;
 | |
|         if ($keepContact) {
 | |
|             print FILE "$prefix $contactInfo\n";
 | |
|             next;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     if ($currentLine =~ /^(.* file is part of) (.*)$/) {
 | |
|         my $prefix = $1;
 | |
|         if ($keepPartOf) {
 | |
|             $partOf = $2 unless $partOf;
 | |
|             print FILE "$prefix $partOf\n";
 | |
|             next;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     print FILE $currentLine;
 | |
| }
 | |
| 
 | |
| print FILE "\n" unless ($hasEmptyLine);
 | |
| 
 | |
| foreach (@contents) { print FILE $_; }
 | |
| 
 | |
| close FILE;
 |