1#!/usr/bin/perl 2 3use strict; 4use warnings; 5 6use vars qw( 7 $OPENSSL_RELEASE 8 $X_EXT_SECT 9 $X_EXT_NAME 10 $X_POD2MAN 11 $MANSUFFIX 12 $TMPROOT 13 $INSTALL_OWNER 14 $INSTALL_GROUP 15 %FILE_BLACKLIST 16 ); 17 18$MANSUFFIX = "ssl"; 19$TMPROOT = $ENV{'TEMP_FILES_DIR'}; 20$INSTALL_OWNER = $ENV{'INSTALL_OWNER'}; 21$INSTALL_GROUP = $ENV{'INSTALL_GROUP'}; 22%FILE_BLACKLIST = ( ); 23 24use File::Basename; 25use File::Path; 26 27sub make_manpage($$$$$) 28{ 29 my $manname = shift; 30 my $sec = shift; 31 my $pfile = shift; 32 my $mfile = shift; 33 my $mm = shift; 34 35 qx{$X_POD2MAN -s $sec -c OpenSSL -r $OPENSSL_RELEASE $pfile > "$TMPROOT/$manname"}; 36 exit 1 if $?; 37 38 qx{install -o "$INSTALL_OWNER" -g "$INSTALL_GROUP" -m $mm "$TMPROOT/$manname" "$mfile"}; 39 exit 1 if $?; 40} 41 42sub make_link($$) 43{ 44 my $linkname = shift; 45 my $manfile = shift; 46 47 qx{ln -fs "$linkname" "$manfile"}; 48 exit 1 if $?; 49} 50 51sub do_man($$$) 52{ 53 my $src = shift; 54 my $dst = shift; 55 my $sec = shift; 56 57 my @files = (); 58 59 chdir($src); 60 open(LS, "ls -1 *.pod |"); 61 while(<LS>) 62 { 63 chomp; 64 push(@files, $_); 65 } 66 close(LS); 67 68 printf("Looking for pods: \"%s\":\n", $src); 69 foreach my $podfile (@files) 70 { 71 my ($f_name, $f_path, $f_suffix) = fileparse($podfile, "\.pod"); 72 my $fn = $f_name.$f_suffix; 73 74 my @sect_names = qx{perl $X_EXT_NAME < $podfile}; 75 return -1 if $?; 76 my @sect_numbs = qx{perl $X_EXT_SECT $sec < $podfile}; 77 return -1 if $?; 78 79 if(defined $FILE_BLACKLIST{uc($f_name)}) 80 { 81 printf("\t%s: blacklisted\n", $f_name); 82 next; 83 } 84 85 foreach my $s_numb (@sect_numbs) 86 { 87 chomp($s_numb); 88 89 foreach my $s_name (@sect_names) 90 { 91 chomp($s_name); 92 93 my $manname = $s_name.".".$s_numb.$MANSUFFIX; 94 my $linkname = $f_name.".".$s_numb.$MANSUFFIX; 95 my $manfile = $dst."/man".$s_numb."/".$manname; 96 my $linkfile = $dst."/man".$s_numb."/".$linkname; 97 98 my $exists = -e $manfile ? "exists" : ""; 99 my $issym = -l $manfile ? "symlink" : ""; 100 101 if ( $s_name eq $f_name ) 102 { 103 printf("\t%s(%s): make %s %s %s\n", $f_name, $s_numb, $manname, $exists, $issym); 104 &make_manpage($s_name, $s_numb, $podfile, $manfile, "0644"); 105 } else { 106 if ( uc($s_name) ne uc($f_name) ) 107 { 108 printf("\t%s(%s): link %s -> %s %s %s", $f_name, $s_numb, $manname, $linkname, $exists, $issym); 109 if( ! -e $linkfile ) 110 { 111 printf("(also generating manpage)"); 112 &make_manpage($f_name, $s_numb, $podfile, $linkfile, "0644"); 113 } 114 printf("\n"); 115 116 &make_link($linkname, $manfile); 117 } else { 118 printf("Detected a case-base file name collision: %s\n", $s_name); 119 $s_name = lc($s_name); 120 $manname = $s_name.".".$s_numb.$MANSUFFIX; 121 $manfile = $dst."/man".$s_numb."/".$manname; 122 &make_manpage($s_name, $s_numb, $podfile, $manfile, "0644"); 123 } 124 } 125 } 126 } 127 } 128} 129 130################################################################################ 131# MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN # 132################################################################################ 133 134# Source directory, where tarball was expanded. 135my $srcdir = $ENV{'SRCROOT'}."/src"; 136 137# Install prefix 138my $dstroot = $ENV{'DSTROOT'}; 139 140# Release number, i.e. 0.9.8 141$OPENSSL_RELEASE = $ENV{'DYLIB_CURRENT_VERSION'}; 142 143if (!defined $srcdir || !$srcdir) 144{ 145 printf("Man source directory not given.\n"); 146 exit(1); 147} else { 148 if( ! -d $srcdir ) 149 { 150 printf("Man source directory incorrect \"%s\"\n", $srcdir); 151 exit(1); 152 } 153} 154$X_EXT_SECT = $srcdir."/util/extract-section.pl"; 155$X_EXT_NAME = $srcdir."/util/extract-names.pl"; 156 157 158if ( !defined $dstroot || !$dstroot ) 159{ 160 printf("Dest directory not given.\n"); 161 exit(1); 162} else { 163 if (! -d $dstroot ) 164 { 165 mkpath($dstroot); 166 } 167} 168 169if ( !defined $OPENSSL_RELEASE || !$OPENSSL_RELEASE ) 170{ 171 printf("No release given."); 172 exit(1); 173} 174 175$X_POD2MAN = qx{cd $srcdir/util && perl ./pod2mantest}; 176chomp($X_POD2MAN); 177printf("Using pod2man: \"%s\".\n", $X_POD2MAN); 178 179# verify all man directories are created, ususally done by B&I 180$dstroot .= "/usr/share/man"; 181 182my $retval = 0; 183$retval = &do_man($srcdir."/doc/apps", $dstroot, 1); 184exit $retval if $retval; 185 186$retval = &do_man($srcdir."/doc/crypto", $dstroot, 3); 187exit $retval if $retval; 188 189$retval = &do_man($srcdir."/doc/ssl", $dstroot, 3); 190exit $retval if $retval; 191 192 193 194my @remove_files = ( 195 "man1/dgst.1ssl", 196 "man1/md2.1ssl", 197 "man1/md4.1ssl", 198 "man1/md5.1ssl", 199 "man1/mdc2.1ssl", 200 "man1/ripemd160.1ssl", 201 "man1/sha.1ssl", 202 "man1/sha1.1ssl" 203); 204 205foreach my $rf (@remove_files) 206{ 207 my $rff = $dstroot."/".$rf; 208 printf("Removing %s.\n", $rff); 209 qx{rm -f "$rff"}; 210} 211