1 #! /usr/perl5/bin/perl
2 #
3 # This file and its contents are supplied under the terms of the
4 # Common Development and Distribution License ("CDDL"), version 1.0.
5 # You may only use this file in accordance with the terms version
6 # 1.0 of the CDDL.
7 #
8 # A full copy of the text of the CDDL should have accompanied this
9 # source. A copy is of the CDDL is also available via the Internet
10 # at http://www.illumos.org/license/CDDL.
11 #
12
13 #
14 # Copyright 2010 Nexenta Systems, Inc. All rights reserved.
15 #
16
17 #
18 # This extracts all the BSD copyrights (excluding the CDDL licenses)
19 # for use in a THIRDPARTYLICENSE file. It tries hard to avoid duplicates.
20 #
21
22 use strict;
23 use warnings;
24 use File::Find;
25
26 my %LICENSE = ();
27
28 sub dofile
29 {
30 my $file = shift;
31 my $comment = 0;
32 my @license = ();
33 my @block = ();;
34 my $copyr = 0;
35 open(FILE, $file);
36 while (<FILE>) {
37 if (/^\/\*$/) {
38 $comment = 1;
39 $copyr = 0;
40 @block = ();
41 next;
42 }
43 if (!$comment) {
44 next;
45 }
46 #
47 # We don't want to know about CDDL files. They don't
48 # require an explicit THIRDPARTYLICENSE file.
49 #
50 if (/CDDL/) {
51 #print "$file is CDDL.\n";
52 close(FILE);
53 return;
54 }
55 if (/Copyright/) {
56 $copyr = 1;
57 }
58 if (!/^ \*\//) {
59 push(@block, $_);
60 next;
61 }
62 #
63 # We have reached the end of the comment now.
64 #
65 $comment = 0;
66
67 # Check to see if we saw a copyright.
68 if (!$copyr) {
69 next;
70 }
71 my $line;
72 foreach $line (@block) {
73 chomp $line;
74 $line =~ s/^ \* //;
75 $line =~ s/^ \*//;
76 $line =~ s/^ \*$//;
77 push(@license, $line);
78 }
79 }
80
81 if ($#license > 0) {
82 my $lic = join "\n", @license;
83 push (@{$LICENSE{$lic}}, $file);
84 }
85
86 close(FILE);
87 }
88
89 my @FILES;
90
91 sub wanted {
92 my $path = $File::Find::name;
93
94 if (!-f $path) {
95 if ($path =~ /\.[chs]$/) {
96 push(@FILES, $path);
97 }
98 }
99
100 }
101 foreach $a (@ARGV) {
102 if (-d $a) {
103 find(\&wanted, $a);
104 } elsif (-f $a) {
105 push(@FILES, $a);
106 }
107 }
108
109 foreach $a (@FILES) {
110 dofile($a);
111 }
112
113 foreach my $lic (keys %LICENSE) {
114 my @files = @{$LICENSE{$lic}};
115 print "\nThe following files from the C library:\n";
116 foreach my $f (@files) {
117 print(" $f\n");
118 }
119 print "are provided under the following terms:\n\n";
120 print "$lic\n";
121 }