From 7bfa40a4b350767ec8e8d2812620bb8be6ce48a4 Mon Sep 17 00:00:00 2001 From: Brian Dolbec Date: Tue, 6 Jan 2015 12:20:30 -0800 Subject: gkeys-gen: Setup.py updates for man page generation --- gkeys/setup.py | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 73 insertions(+), 3 deletions(-) (limited to 'gkeys/setup.py') diff --git a/gkeys/setup.py b/gkeys/setup.py index 23af045..d6b38af 100755 --- a/gkeys/setup.py +++ b/gkeys/setup.py @@ -1,11 +1,26 @@ #!/usr/bin/env python + +import collections import os import sys -from distutils.core import setup +from distutils.core import setup, Command +from distutils.command.build import build + from gkeys import __version__, __license__ +from gkeys import Gkeys_Map +from gkeys.action_map import Action_Map, Available_Actions + +try: + from py2man import manpages +except ImportError: + print('creating py2man symlink') + os.symlink('../py2man', 'py2man') + from py2man import manpages + + # this affects the names of all the directories we do stuff with sys.path.insert(0, './') @@ -18,6 +33,57 @@ except ImportError: EPREFIX='' +class x_build(build): + """ Build command with extra build_man call. """ + + def run(self): + build.run(self) + self.run_command('build_man') + + +class build_man(Command): + """ Perform substitutions in manpages. """ + + user_options = [ + ] + + def initialize_options(self): + self.build_base = None + + def finalize_options(self): + self.set_undefined_options('build', + ('build_base', 'build_base')) + + def run(self): + # create the main page + basepath = os.path.dirname(__file__) + docpath = os.path.join(basepath, 'doc') + templatepath = os.path.dirname(manpages.__file__) + man = manpages.ManPage('gkeys', __version__, None, + docpath, Gkeys_Map['authors']) + man.read_template(templatepath, 'command.template') + man.make_prog(Gkeys_Map) + man.read_template(templatepath, 'sub-command.template') + man.make_subpages(Action_Map, Available_Actions) + + +def get_manpages(): + linguas = os.environ.get('LINGUAS') + if linguas is not None: + linguas = linguas.split() + + for dirpath, dirnames, filenames in os.walk('doc'): + groups = collections.defaultdict(list) + for f in filenames: + fn, suffix = f.rsplit('.', 1) + groups[suffix].append(os.path.join(dirpath, f)) + + topdir = dirpath[len('doc/'):] + if not topdir or linguas is None or topdir in linguas: + for g, mans in groups.items(): + yield [os.path.join('$mandir', topdir, 'man%s' % g), mans] + + setup( name='gkeys', version=__version__, @@ -30,13 +96,17 @@ setup( download_url='', packages=['gkeys'], scripts=['bin/gkeys'], - data_files=( + data_files=list(get_manpages()) + [ (os.path.join(os.sep, EPREFIX.lstrip(os.sep), 'etc/gkeys/'), ['etc/gkeys.conf']), (os.path.join(os.sep, EPREFIX.lstrip(os.sep), 'etc/gkeys/'), ['etc/gkeys.conf.sample']), - ), + ], license=__license__, long_description=open('README.md').read(), keywords='gpg', + cmdclass = { + 'build': x_build, + 'build_man': build_man, + }, classifiers=[ 'Development Status :: 3 - Alpha', 'Intended Audience :: Developers, Users', -- cgit v1.2.3-65-gdbad