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