mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-26 08:55:24 +00:00 
			
		
		
		
	git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@3859 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			173 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			173 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl
 | |
| # IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
 | |
| 
 | |
| # First builds the xCAT summary man page from Synopsis of each man page.
 | |
| # Then converts all of the pod man pages into html (including links to each other)
 | |
| 
 | |
| # We assume that this script is run in the xCAT-client-2.0 dir, so everything is
 | |
| # done relative to that.
 | |
| 
 | |
| use strict;
 | |
| #use lib '.';
 | |
| use Pod::Man;
 | |
| use Pod::Html;
 | |
| 
 | |
| my $poddir = 'pods';
 | |
| my $mandir = 'share/man';
 | |
| my $htmldir = 'share/doc';
 | |
| my $cachedir = '/tmp';
 | |
| 
 | |
| my @pods = getPodList($poddir);
 | |
| #foreach (@pods) { print "$_\n"; } exit;
 | |
| 
 | |
| # Build the cmd overview page.
 | |
| writesummarypage("$poddir/man1/xcat.1.pod", @pods);
 | |
| push @pods, "$poddir/man1/xcat.1.pod";
 | |
| 
 | |
| # Build the man page for each pod.
 | |
| #mkdir($mandir) or die "Error: could not create $mandir.\n";
 | |
| print "Converting PODs to man pages...\n";
 | |
| foreach my $podfile (@pods) {
 | |
|     my $manfile = $podfile;
 | |
|     $manfile =~ s/^$poddir/$mandir/;      # change the beginning of the path
 | |
|     $manfile =~ s/\.pod$//;			# change the ending
 | |
|     my $mdir = $manfile;
 | |
|     $mdir =~ s|/[^/]*$||;			# get rid of the basename part
 | |
| 	if (system("mkdir -p $mdir")) { die "Error: could not create $mdir.\n"; }
 | |
| 	my ($section) = $podfile =~ /\.(\d+)\.pod$/;
 | |
|     convertpod2man($podfile, $manfile, $section);
 | |
| }
 | |
| 
 | |
| #TODO: to enable linking between the cmd man pages and the db man pages, need to:
 | |
| #	grep thru the cmd pods searching for references (L<>) to any section 5 man page
 | |
| #	if that pod does not exist, create a minimal one that will satisfy pod2html
 | |
| #	keep track of all dummy pods created
 | |
| #	convert all original pod pages
 | |
| #	remove the dummy pods
 | |
| 
 | |
| # Build the html page for each pod.
 | |
| #mkdir($htmldir) or die "Error: could not create $htmldir.\n";
 | |
| print "Converting PODs to HTML pages...\n";
 | |
| # have to clear the cache, because old entries can cause a problem
 | |
| unlink("$cachedir/pod2htmd.tmp", "$cachedir/pod2htmi.tmp");
 | |
| foreach my $podfile (@pods) {
 | |
|     my $htmlfile = $podfile;
 | |
|     $htmlfile =~ s/^$poddir/$htmldir/;      # change the beginning of the path
 | |
|     $htmlfile =~ s/\.pod$/\.html/;			# change the ending
 | |
|     my $hdir = $htmlfile;
 | |
|     $hdir =~ s|/[^/]*$||;			# get rid of the basename part
 | |
| 	if (system("mkdir -p $hdir")) { die "Error: could not create $hdir.\n"; }
 | |
|     #print "$podfile, $htmlfile, $poddir, $htmldir\n";
 | |
|     convertpod2html($podfile, $htmlfile, $poddir, $htmldir);
 | |
| }
 | |
| 
 | |
| exit;
 | |
| 
 | |
| 
 | |
| # Recursively get the list of pod man page files.
 | |
| sub getPodList {
 | |
| 	my $poddir = shift;
 | |
| 	my @files;
 | |
| 
 | |
| 	# 1st get toplevel dir listing
 | |
| 	opendir(DIR, $poddir) or die "Error: could not read $poddir.\n";
 | |
| 	my @topdir = grep !/^\./, readdir(DIR);		# /
 | |
| 	close(DIR);
 | |
| 
 | |
| 	# Now go thru each subdir (these are man1, man3, etc.)
 | |
| 	foreach my $mandir (@topdir) {
 | |
| 		opendir(DIR, "$poddir/$mandir") or die "Error: could not read $poddir/$mandir.\n";
 | |
| 		my @dir = grep !/^\./, readdir(DIR);		# /
 | |
| 		close(DIR);
 | |
| 		foreach my $file (@dir) {
 | |
| 			push @files, "$poddir/$mandir/$file";
 | |
| 		}
 | |
| 	}
 | |
| 	return sort @files;
 | |
| }
 | |
| 
 | |
| 
 | |
| # Create the xcat man page that gives a summary description of each xcat cmd.
 | |
| sub writesummarypage {
 | |
| 	my $file = shift;       # relative path file name of the man page
 | |
| 	# the rest of @_ contains the pod files that describe each cmd
 | |
| 
 | |
| 	open(FILE, ">$file") or die "Error: could not open $file for writing.\n";
 | |
| 
 | |
| 	print FILE <<'EOS1';
 | |
| =head1 NAME
 | |
| 
 | |
| B<xcat> - extreme Cluster Administration Tool.
 | |
| 
 | |
| =head1 DESCRIPTION
 | |
| 
 | |
| Extreme Cluster Administration Toolkit (xCAT). xCAT is a scalable distributed computing management
 | |
| and provisioning tool that provides a unified interface for hardware control, discovery, and
 | |
| OS diskful/diskfree deployment.
 | |
| 
 | |
| 
 | |
| =head1 XCAT DATABASE
 | |
| 
 | |
| All of the cluster configuration information is in the xCAT database.  See B<xcatdb(5)> for
 | |
| descriptions of every table in the database.
 | |
| 
 | |
| =head1 XCAT COMMANDS
 | |
| 
 | |
| What follows is a short description of each xCAT command.  To get more information about a particular
 | |
| command, see its man page.  Note that the commands are listed in alphabetical order B<within each section>,
 | |
| i.e. all the commands in section 1, then the commands in section 3, etc.
 | |
| 
 | |
| =over 12
 | |
| EOS1
 | |
| 
 | |
| # extract the summary for each cmd from its man page
 | |
| foreach my $manpage (@_) {
 | |
| 	my ($sectionnum) = $manpage =~ /\.(\d+)\.pod$/;
 | |
| 	# Suck in the whole file, then we will parse it.
 | |
| 	open(MANPAGE, "$manpage") or die "Error: could not open $manpage for reading.\n";
 | |
| 	my @contents = <MANPAGE>;
 | |
| 	my $wholemanpage = join('', @contents);
 | |
| 	close(MANPAGE);
 | |
| 	# This regex matches: optional space, =head1, space, title, space, cmd, space, description, newline
 | |
| 	my ($cmd, $description) = $wholemanpage =~ /^\s*=head1\s+\S+\s+(\S+)\s+(.+?)\n/si;
 | |
| 	if (!defined($cmd)) { print "Warning: $manpage is not in a recognized structure.  It will be ignored.\n"; next; }
 | |
| 	if (!defined($description)) { print "Warning: $manpage does not have a description for $cmd.  It will be ignored.\n"; next; }
 | |
| 	$cmd =~ s/^.<(.+)>$/$1/;		# if the cmd name has pod formatting around it, strip it off
 | |
| 	$description =~ s/^-\s*//;		# if the description has a leading hypen, strip it off
 | |
| 	print FILE "\n=item L<$cmd($sectionnum)|$cmd.$sectionnum>\n\n".$description."\n";
 | |
| }
 | |
| 
 | |
| 	print FILE <<"EOS3";
 | |
| 
 | |
| =back
 | |
| EOS3
 | |
| 
 | |
| 	close FILE;
 | |
| }
 | |
| 
 | |
| 
 | |
| # Create the html page for one pod.
 | |
| sub convertpod2html {
 | |
| 	my ($podfile, $htmlfile, $poddir, $htmldir) = @_;
 | |
| 
 | |
| 	#TODO: use --css=<stylesheet> and --title=<pagetitle> to make the pages look better
 | |
| 	pod2html($podfile,
 | |
| 			"--outfile=$htmlfile",
 | |
| 			"--podpath=man1:man3:man5:man8",
 | |
| 			"--podroot=$poddir",
 | |
| 			"--htmldir=$htmldir",
 | |
| 			"--recurse",
 | |
| 			"--cachedir=$cachedir",
 | |
| 			);
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| # Create the man page for one pod.
 | |
| sub convertpod2man {
 | |
| 	my ($podfile, $manfile, $section) = @_;
 | |
| 
 | |
| 	my $parser = Pod::Man->new(section => $section);
 | |
|     $parser->parse_from_file($podfile, $manfile);
 | |
| }
 |