1 #! /usr/bin/perl -w 2 # 3 # CDDL HEADER START 4 # 5 # The contents of this file are subject to the terms of the 6 # Common Development and Distribution License (the "License"). 7 # You may not use this file except in compliance with the License. 8 # 9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 # or http://www.opensolaris.org/os/licensing. 11 # See the License for the specific language governing permissions 12 # and limitations under the License. 13 # 14 # When distributing Covered Code, include this CDDL HEADER in each 15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 # If applicable, add the following below this CDDL HEADER, with the 17 # fields enclosed by brackets "[]" replaced with your own identifying 18 # information: Portions Copyright [yyyy] [name of copyright owner] 19 # 20 # CDDL HEADER END 21 # 22 23 # 24 # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. 25 # 26 27 # 28 # Create THIRDPARTYLICENSE files using the index file in $CODEMGR_WS. 29 # 30 31 use Cwd; 32 use Env; 33 use strict; 34 use vars qw($opt_c); 35 use Getopt::Std; 36 37 # -c: only generate crypto license file 38 my $usage = "mktpl [-c] license-list-file"; 39 40 my $top = $ENV{"CODEMGR_WS"}; 41 if (! $top) { 42 die "CODEMGR_WS must be set.\n"; 43 } 44 45 if (! getopts('c')) { 46 die "usage: $usage\n"; 47 } 48 if (@ARGV != 1) { 49 die "usage: $usage\n"; 50 } 51 52 my $indexfile = $ARGV[0]; 53 54 my $exitstatus = 0; 55 56 # 57 # Create a THIRDPARTYLICENSE file from the given license list and suffix. 58 # 59 sub maketpl { 60 my ($suffix, @tpllist) = @_; 61 my $licnum = 1; 62 my $tplname = "$top/THIRDPARTYLICENSE.$suffix"; 63 64 if (! @tpllist) { 65 unlink $tplname; 66 return; 67 } 68 69 open(TPL, ">$tplname") or die "Can't create $tplname: $!\n"; 70 71 print TPL "DO NOT TRANSLATE OR LOCALIZE.\n\n"; 72 73 foreach my $licfile (@tpllist) { 74 my $descrip = `cat "$licfile.descrip"`; 75 if (! $descrip) { 76 warn "Missing description for $licfile\n"; 77 $exitstatus = 1; 78 $descrip = "(MISSING DESCRIPTION for $licfile)\n"; 79 } 80 print TPL "$licnum) The following software may be included ", 81 "in this product:\n\n"; 82 print TPL "\t$descrip\n"; 83 print TPL " Use of this software is governed by the ", 84 "terms of the following license:\n"; 85 print TPL "\n"; 86 if (open(LIC, "<$licfile")) { 87 while (<LIC>) { 88 print TPL " " . $_; 89 } 90 close LIC; 91 } else { 92 warn "Can't open $licfile: $!\n"; 93 $exitstatus = 1; 94 print TPL " (MISSING LICENSE: $licfile)\n"; 95 } 96 print TPL "\n"; 97 $licnum++; 98 } 99 100 close TPL or die "I/O error on $tplname: $!\n"; 101 } 102 103 # 104 # Return non-zero if we expect the crypto for the given 105 # third-party license file to be signed. Else, return zero. 106 # 107 my $hashes = qr"/(rng|md4|md5|sha1/sha2)/"; 108 sub signedcrypto { 109 my ($licpath) = @_; 110 111 return 0 if $licpath =~ m#$hashes#; 112 return 1; 113 } 114 115 # 116 # Make file list for each TPL file. 117 # 118 119 chdir($top) or die "Can't chdir to $top: $!\n"; 120 $top = getcwd(); 121 122 my $isclosed = qr"^usr/closed"; 123 my $iscrypto = qr"(^usr/src/common/crypto)|(^usr/src/lib/pkcs11)"; 124 125 my @closedlist; 126 my @cryptolist; 127 128 open(IX, "<$indexfile") or die "Can't open $indexfile: $!\n"; 129 while (<IX>) { 130 chomp; 131 my $lic = $_; 132 if (! $opt_c && $lic =~ /$isclosed/) { 133 push @closedlist, $lic; 134 } 135 if ($lic =~ /$iscrypto/ && signedcrypto($lic)) { 136 push @cryptolist, $lic; 137 } 138 } 139 close IX; 140 141 # 142 # Generate each TPL file. 143 # 144 145 maketpl("ON-BINARIES", @closedlist); 146 maketpl("ON-CRYPTO", @cryptolist); 147 148 exit $exitstatus;