6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore#! /usr/perl5/bin/perl
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore#
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore# This file and its contents are supplied under the terms of the
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore# Common Development and Distribution License ("CDDL"), version 1.0.
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore# You may only use this file in accordance with the terms version
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore# 1.0 of the CDDL.
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore#
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore# A full copy of the text of the CDDL should have accompanied this
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore# source. A copy is of the CDDL is also available via the Internet
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore# at http://www.illumos.org/license/CDDL.
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore#
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore#
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore# Copyright 2010 Nexenta Systems, Inc. All rights reserved.
cec7ac1b6fa4b80f0536354cbb975d004e78155bJosef 'Jeff' Sipek# Copyright 2016 Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore#
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore#
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore# This extracts all the BSD copyrights (excluding the CDDL licenses)
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore# for use in a THIRDPARTYLICENSE file. It tries hard to avoid duplicates.
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore#
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amoreuse strict;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amoreuse warnings;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amoreuse File::Find;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amoremy %LICENSE = ();
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amoresub dofile
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore{
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore my $file = shift;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore my $comment = 0;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore my @license = ();
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore my @block = ();;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore my $copyr = 0;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore open(FILE, $file);
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore while (<FILE>) {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore if (/^\/\*$/) {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore $comment = 1;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore $copyr = 0;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore @block = ();
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore next;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore }
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore if (!$comment) {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore next;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore }
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore #
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore # We don't want to know about CDDL files. They don't
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore # require an explicit THIRDPARTYLICENSE file.
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore #
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore if (/CDDL/) {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore #print "$file is CDDL.\n";
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore close(FILE);
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore return;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore }
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore if (/Copyright/) {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore $copyr = 1;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore }
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore if (!/^ \*\//) {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore push(@block, $_);
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore next;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore }
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore #
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore # We have reached the end of the comment now.
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore #
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore $comment = 0;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore # Check to see if we saw a copyright.
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore if (!$copyr) {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore next;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore }
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore my $line;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore foreach $line (@block) {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore chomp $line;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore $line =~ s/^ \* //;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore $line =~ s/^ \*//;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore $line =~ s/^ \*$//;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore push(@license, $line);
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore }
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore }
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore if ($#license > 0) {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore my $lic = join "\n", @license;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore push (@{$LICENSE{$lic}}, $file);
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore }
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore close(FILE);
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore}
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amoremy @FILES;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amoresub wanted {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore my $path = $File::Find::name;
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore if (!-f $path) {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore if ($path =~ /\.[chs]$/) {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore push(@FILES, $path);
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore }
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore }
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore}
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amoreforeach $a (@ARGV) {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore if (-d $a) {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore find(\&wanted, $a);
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore } elsif (-f $a) {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore push(@FILES, $a);
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore }
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore}
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore
cec7ac1b6fa4b80f0536354cbb975d004e78155bJosef 'Jeff' Sipek# sort files to get a stable ordering to aid wsdiff(1onbld)
cec7ac1b6fa4b80f0536354cbb975d004e78155bJosef 'Jeff' Sipek@FILES = sort @FILES;
cec7ac1b6fa4b80f0536354cbb975d004e78155bJosef 'Jeff' Sipek
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amoreforeach $a (@FILES) {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore dofile($a);
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore}
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amoreforeach my $lic (keys %LICENSE) {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore my @files = @{$LICENSE{$lic}};
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore print "\nThe following files from the C library:\n";
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore foreach my $f (@files) {
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore print(" $f\n");
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore }
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore print "are provided under the following terms:\n\n";
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore print "$lic\n";
6b5e5868e7ebf1aff3a5abd7d0c4ef0e5fbf3648Garrett D'Amore}