diff options
author | Michael Brown <mcb30@etherboot.org> | 2009-04-29 08:51:27 +0100 |
---|---|---|
committer | Michael Brown <mcb30@etherboot.org> | 2009-05-18 08:29:24 +0100 |
commit | 41307f2874989048679c83686527a3887ed485b3 (patch) | |
tree | 24464edc273fd4f5dab7d8d4212d3c03fca38997 /src/util/licence.pl | |
parent | a525fb7782ee41b1e9c6687ce78983ab07509892 (diff) | |
download | ipxe-41307f2874989048679c83686527a3887ed485b3.tar.gz |
[legal] Add licence.pl and %.licence make target
It is now possible to run e.g.
make bin/rtl8139.dsk.licence
in order to see a licensing assessment for any given gPXE build. The
assessment will either produce a single overall licence for the build
(based on combining all the licences used within the source files for
that build), or will exit with an error stating why a licence
assessment is not possible (for example, if there are files involved
that do not yet contain an explicit FILE_LICENCE() declaration).
Diffstat (limited to 'src/util/licence.pl')
-rwxr-xr-x | src/util/licence.pl | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/src/util/licence.pl b/src/util/licence.pl new file mode 100755 index 000000000..aca67186d --- /dev/null +++ b/src/util/licence.pl @@ -0,0 +1,124 @@ +#!/usr/bin/perl -w +# +# Copyright (C) 2008 Michael Brown <mbrown@fensystems.co.uk>. +# +# 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 2 of the +# License, or 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, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +use strict; +use warnings; +use Getopt::Long; + +# List of licences we can handle +my $known_licences = { + gpl_any => { + desc => "GPL (any version)", + can_subsume => { + public_domain => 1, + bsd3 => 1, + bsd2 => 1, + }, + }, + gpl2_or_later => { + desc => "GPL version 2 (or, at your option, any later version)", + can_subsume => { + gpl_any => 1, + public_domain => 1, + bsd3 => 1, + bsd2 => 1, + }, + }, + gpl2_only => { + desc => "GPL version 2 only", + can_subsume => { + gpl_any => 1, + gpl2_or_later => 1, + public_domain => 1, + bsd3 => 1, + bsd2 => 1, + }, + }, + public_domain => { + desc => "Public Domain", + can_subsume => {}, + }, + bsd4 => { + desc => "BSD Licence (with advertising clause)", + can_subsume => { + public_domain => 1, + bsd3 => 1, + bsd2 => 1, + }, + }, + bsd3 => { + desc => "BSD Licence (without advertising clause)", + can_subsume => { + public_domain => 1, + bsd2 => 1, + }, + }, + bsd2 => { + desc => "BSD Licence (without advertising or endorsement clauses)", + can_subsume => { + public_domain => 1, + }, + }, +}; + +# Parse command-line options +my $verbosity = 1; +Getopt::Long::Configure ( 'bundling', 'auto_abbrev' ); +GetOptions ( + 'verbose|v+' => sub { $verbosity++; }, + 'quiet|q+' => sub { $verbosity--; }, +) or die "Could not parse command-line options\n"; + +# Parse licence list from command line +my $licences = {}; +foreach my $licence ( @ARGV ) { + die "Unknown licence \"$licence\"\n" + unless exists $known_licences->{$licence}; + $licences->{$licence} = $known_licences->{$licence}; +} +die "No licences specified\n" unless %$licences; + +# Dump licence list +if ( $verbosity >= 1 ) { + print "The following licences appear within this file:\n"; + foreach my $licence ( keys %$licences ) { + print " ".$licences->{$licence}->{desc}."\n" + } +} + +# Apply licence compatibilities to reduce to a single resulting licence +foreach my $licence ( keys %$licences ) { + # Skip already-deleted licences + next unless exists $licences->{$licence}; + # Subsume any subsumable licences + foreach my $can_subsume ( keys %{$licences->{$licence}->{can_subsume}} ) { + if ( exists $licences->{$can_subsume} ) { + print $licences->{$licence}->{desc}." subsumes ". + $licences->{$can_subsume}->{desc}."\n" + if $verbosity >= 1; + delete $licences->{$can_subsume}; + } + } +} + +# Print resulting licence +die "Cannot reduce to a single resulting licence!\n" + if ( keys %$licences ) != 1; +( my $licence ) = keys %$licences; +print "The overall licence for this file is:\n " if $verbosity >= 1; +print $licences->{$licence}->{desc}."\n"; |