#!/usr/bin/env python #TODO: Delete the old files to support removing a man page import glob import os import sys import subprocess from glob import glob import shutil from optparse import OptionParser usage = "usage: %prog [options]" parser = OptionParser(usage=usage) parser.add_option("--prefix", dest="PREFIX", help="Specify the location of the Perl modules") (options, args) = parser.parse_args() POD2RST="pod2rst" def cmd_exists(cmd): return subprocess.call("type " + cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) == 0 prefix_path = None prefix_lib_path = None if options.PREFIX: if '~' in options.PREFIX: # else assume full path is provided prefix_path = os.path.expanduser(options.PREFIX) else: prefix_path = options.PREFIX if not cmd_exists("%s/bin/pod2rst" %(prefix_path)): print "ERROR, %s requires pod2rst, not found in %s/bin/" %(os.path.basename(__file__), prefix_path) parser.print_help() sys.exit(1) prefix_lib_path = "%s/lib" %(prefix_path) if not os.path.isdir(prefix_lib_path): prefix_lib_path = "%s/lib64" %(prefix_path) if not os.path.isdir(prefix_lib_path): print "ERROR, Cannot find the Perl lib directory in %s/lib or %s/lib64" %(prefix_path, prefix_path) sys.exit(1) else: if not cmd_exists(POD2RST): print "ERROR, %s requires pod2rst to continue!" %(os.path.basename(__file__)) parser.print_help() sys.exit(1) # the location relativate to xcat-core where the man pages will go MANPAGE_DEST="./docs/source/guides/admin-guides/references/man" # # add the following to delete the generate files before creating them # essentially this allows us to remove man pages and they will be # removed in the generation print "Cleaning up the generated man pages in %s" %(MANPAGE_DEST) allfiles = glob("%s*/*.rst" %(MANPAGE_DEST)) for d in allfiles: # Skip over the index.rst file if not "index.rst" in d: print "Removing file %s" %(d) os.remove(d) # The database man pages are created in the perl-xCAT subdirectory # using the db2man script def build_db_man_pages(): thepwd = os.getcwd() os.chdir("perl-xCAT") cmd = "./db2man" os.system(cmd) os.chdir(thepwd) def cleanup_db_man_pages_dir(): shutil.rmtree("perl-xCAT/pods") shutil.rmtree("perl-xCAT/share") def fix_vertical_bar(rst_file): # Verical bar can not appear with spaces around it, otherwise # it gets displayed as a link in .html sed_cmd = "sed 's/\*\*\\\ |\\\ \*\*/ | /g' %s > %s.sed1" %(rst_file, rst_file) os.system(sed_cmd) def fix_double_dash(rst_file): # -- gets displayed in .html as a sinle long dash, need to insert # a non bold space between 2 dashes sed_cmd = "sed '/\*\*/s/--/-\*\*\\\ \*\*-/g' %s.sed1 > %s" %(rst_file, rst_file) os.system(sed_cmd) #remove intermediate .sed1 file rm_sed1file_cmd = "rm %s.sed1" %(rst_file) os.system(rm_sed1file_cmd) build_db_man_pages() # List the xCAT component directory which contain pod pages COMPONENTS = ['xCAT-SoftLayer', 'xCAT-test', 'xCAT-client', 'xCAT-vlan', 'perl-xCAT', 'xCAT-buildkit'] for component in COMPONENTS: for root,dirs,files in os.walk("%s" %(component)): for file in files: # only interested in .pod files if file.endswith(".pod"): pod_input = os.path.join(root,file) filename = os.path.basename(pod_input) # get the man version (1,3,5,8,etc) man_ver = filename.split('.')[1] # title is needed to pass to pod2rst title = filename.split('.')[0] DESTINATION = "%s%s" %(MANPAGE_DEST, man_ver) try: os.stat(DESTINATION) except: # Create the directory if it does not exist os.mkdir(DESTINATION) outputFile = filename.replace("pod", "rst") rst_output = "%s/%s" %(DESTINATION, outputFile) # generate the pod2rst command cmd = "%s" %(POD2RST) if options.PREFIX: cmd = "perl -I %s/share/perl5 %s/bin/%s " %(prefix_path, prefix_path, POD2RST) cmd += " --infile=%s --outfile=%s --title=%s.%s" %(pod_input, rst_output, title, man_ver) # print cmd os.system(cmd) if man_ver == '1' or man_ver == '8': fix_vertical_bar(rst_output) fix_double_dash(rst_output) cleanup_db_man_pages_dir()