+#!/usr/bin/env python
+# encoding: UTF-8
+
+from __future__ import absolute_import, division
+
+import os
+import re
+import sys
+
+MAN_NAME_RE = re.compile(r'/man/(?:[^/]+/)?man([^/]+)/[^/]+.\1$')
+MAX_LEN = 1024
+SO_RE = re.compile(r'^\.so\s+(.*)$')
+
+def process_file(name):
+ m = MAN_NAME_RE.search(name)
+ if not m:
+ return False
+ category = m.group(1)
+ dir_name = 'man' + category
+ f = open(name, 'r')
+ s = f.read(MAX_LEN+1)
+ if len(s) > MAX_LEN:
+ return False
+ s = s.strip()
+ if '\n' in s:
+ return False
+ m = SO_RE.search(s)
+ if not m:
+ return False
+ link = m.group(1)
+ if link.startswith('/') or link.count('/') > 1:
+ return False
+ if link.startswith(dir_name+'/'):
+ link = link[len(dir_name)+1:]
+ else:
+ link = '../' + link
+ os.unlink(name)
+ os.symlink(link, name)
+ print 'Converted {} into a symlink to {}'.format(name, link)
+ return True
+
+def main(args=[]):
+ try:
+ dashes = args.index('--')
+ except ValueError:
+ compressor = []
+ all_files = args
+ else:
+ compressor = args[:dashes]
+ all_files = args[dashes+1:]
+ files = []
+ for name in all_files:
+ if not process_file(name):
+ files.append(name)
+ if not compressor or not files:
+ return 0
+ os.execvp(compressor[0], compressor + files)
+ return 1
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv[1:]))