$OpenBSD: patch-share_tools_create_manpage_completions_py,v 1.1.1.1 2017/12/16 05:14:32 abieber Exp $

This can be removed when 3.0 is released:
https://github.com/fish-shell/fish-shell/pull/4584/

Index: share/tools/create_manpage_completions.py
--- share/tools/create_manpage_completions.py.orig
+++ share/tools/create_manpage_completions.py
@@ -857,7 +857,7 @@ def parse_and_output_man_pages(paths, output_directory
     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:
