From db0ff0bcde0c1a63a22720b4947f626432c520a3 Mon Sep 17 00:00:00 2001 From: Aaron Bieber Date: Mon, 11 Dec 2017 07:08:02 -0700 Subject: [PATCH] Add generic parser for /etc/man.conf - Also rename get_paths_from_manpath() to get_paths_from_man_locations() --- share/tools/create_manpage_completions.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/share/tools/create_manpage_completions.py b/share/tools/create_manpage_completions.py index 598cff0a2..f0326537e 100755 --- a/share/tools/create_manpage_completions.py +++ b/share/tools/create_manpage_completions.py @@ -857,7 +857,7 @@ def parse_and_output_man_pages(paths, output_directory, show_progress): add_diagnostic("Successfully parsed %d / %d pages" % (successful_count, total_count), BRIEF_VERBOSE) flush_diagnostics(sys.stderr) -def get_paths_from_manpath(): +def get_paths_from_man_locations(): # Return all the paths to man(1) and man(8) files in the manpath import subprocess, os proc = None @@ -866,7 +866,6 @@ def get_paths_from_manpath(): parent_paths = os.getenv("MANPATH").strip().split(':') else: # Some systems have manpath, others have `man --path` (like Haiku). - # TODO: Deal with systems that have neither (OpenBSD) for prog in [['manpath'], ['man', '--path']]: try: proc = subprocess.Popen(prog, stdout=subprocess.PIPE, stderr=subprocess.PIPE) @@ -876,10 +875,18 @@ def get_paths_from_manpath(): manpath, err_data = proc.communicate() parent_paths = manpath.decode().strip().split(':') if (not parent_paths) or (proc and proc.returncode > 0): - # HACK: Use some fallback in case we can't get anything else. - # `mandoc` does not provide `manpath` or `man --path` and $MANPATH might not be set, so just use the default for mandoc (minus /usr/X11R6/man, because that's not relevant). + # HACK: Use some fallbacks in case we can't get anything else. + # `mandoc` does not provide `manpath` or `man --path` and $MANPATH might not be set. # The alternative is reading its config file (/etc/man.conf) - sys.stderr.write("Unable to get the manpath, falling back to /usr/share/man:/usr/local/share/man. Please set $MANPATH if that is not correct.\n") + if os.path.isfile('/etc/man.conf'): + data = open('/etc/man.conf', 'r') + for line in data: + if ('manpath' in line or 'MANPATH' in line): + p = line.split(' ')[1] + p = p.split()[0] + parent_paths.append(p) + if (not parent_paths): + sys.stderr.write("Unable to get the manpath, falling back to /usr/share/man:/usr/local/share/man. Please set $MANPATH if that is not correct.\n") parent_paths = ["/usr/share/man", "/usr/local/share/man"] result = [] for parent_path in parent_paths: @@ -943,8 +950,8 @@ if __name__ == "__main__": assert False, "unhandled option" if use_manpath: - # Fetch all man1 and man8 files from the manpath - file_paths.extend(get_paths_from_manpath()) + # Fetch all man1 and man8 files from the manpath or man.conf + file_paths.extend(get_paths_from_man_locations()) if cleanup_directories: for cleanup_dir in cleanup_directories: