mirror of
https://github.com/erkin/ponysay.git
synced 2024-11-22 12:27:59 +01:00
some work on configurations
This commit is contained in:
parent
19a0fc8c82
commit
907507ca8a
2 changed files with 149 additions and 56 deletions
4
ponysay
4
ponysay
|
@ -864,8 +864,8 @@ class ArgParser():
|
||||||
elif dashed: self.files.append(arg)
|
elif dashed: self.files.append(arg)
|
||||||
elif arg == '++': tmpdashed = True
|
elif arg == '++': tmpdashed = True
|
||||||
elif arg == '--': dashed = True
|
elif arg == '--': dashed = True
|
||||||
elif (len(arg) > 1) and ((arg[0] == '-') or (arg[0] == '+')):
|
elif (len(arg) > 1) and (arg[0] in ('-', '+')):
|
||||||
if (len(arg) > 2) and ((arg[:2] == '--') or (arg[:2] == '++')):
|
if (len(arg) > 2) and (arg[:2] in ('--', '++')):
|
||||||
if dontget > 0:
|
if dontget > 0:
|
||||||
dontget -= 1
|
dontget -= 1
|
||||||
elif (arg in self.optmap) and (self.optmap[arg][1] == ARGUMENTLESS):
|
elif (arg in self.optmap) and (self.optmap[arg][1] == ARGUMENTLESS):
|
||||||
|
|
183
setup.py
183
setup.py
|
@ -6,11 +6,16 @@ import sys
|
||||||
from subprocess import Popen, PIPE
|
from subprocess import Popen, PIPE
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PONYSAY_VERSION = '2.5'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Setup():
|
class Setup():
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
usage_script = '\033[34;1msetup.py\033[21;39m'
|
usage_script = '\033[34;1msetup.py\033[21;39m'
|
||||||
usage_help = '(--version | --help)'
|
usage_help = '(version | help)'
|
||||||
usage_proc = '\033[4mconfigurations\033[24m ([build] | prebuilt | install | (uninstall|clean)[-old])'
|
usage_proc = '[\033[4mconfigurations\033[24m] ([build] | prebuilt | install | (uninstall|clean)[-old])'
|
||||||
|
|
||||||
usage = '%s %s\n%s %s' % (usage_script, usage_help, usage_script, usage_proc)
|
usage = '%s %s\n%s %s' % (usage_script, usage_help, usage_script, usage_proc)
|
||||||
|
|
||||||
|
@ -23,12 +28,13 @@ class Setup():
|
||||||
description = 'installer for ponysay',
|
description = 'installer for ponysay',
|
||||||
usage = usage)
|
usage = usage)
|
||||||
|
|
||||||
opts.add_argumentless(alternatives = ['-h', '--help'])
|
opts.add_argumentless(alternatives = ['--help'])
|
||||||
opts.add_argumentless(alternatives = ['-v', '--version'])
|
opts.add_argumentless(alternatives = ['--version'])
|
||||||
|
|
||||||
opts.add_argumentless(help = 'Install everything that is not explicity excluded', alternatives = ['--everything', '--with-everything'])
|
opts.add_argumentless(help = 'Install everything that is not explicity excluded', alternatives = ['--everything', '--with-everything'])
|
||||||
opts.add_argumentless(help = 'Install only the essentials\nNote that this can vary depedning on version', alternatives = ['--minimal'])
|
opts.add_argumentless(help = 'Install only the essentials\nNote that this can vary depedning on version', alternatives = ['--minimal'])
|
||||||
opts.add_argumentless(help = 'Install nothing that is not explicity included', alternatives = ['--nothing', '--with-nothing'])
|
opts.add_argumentless(help = 'Install nothing that is not explicity included', alternatives = ['--nothing', '--with-nothing'])
|
||||||
|
|
||||||
opts.add_argumentless(help = 'Do not install ponysay command', alternatives = ['--without-ponysay'])
|
opts.add_argumentless(help = 'Do not install ponysay command', alternatives = ['--without-ponysay'])
|
||||||
opts.add_argumentless(help = 'Install ponysay command', alternatives = ['--with-ponysay'])
|
opts.add_argumentless(help = 'Install ponysay command', alternatives = ['--with-ponysay'])
|
||||||
opts.add_argumentless(help = 'Do not install ponythink command', alternatives = ['--without-ponythink'])
|
opts.add_argumentless(help = 'Do not install ponythink command', alternatives = ['--without-ponythink'])
|
||||||
|
@ -99,10 +105,120 @@ class Setup():
|
||||||
opts.add_argumented (help = 'Set the system\'s directory for resource files\nDefault = $PREFIX/share', alternatives = ['--share-dir'], arg='SHAREDIR')
|
opts.add_argumented (help = 'Set the system\'s directory for resource files\nDefault = $PREFIX/share', alternatives = ['--share-dir'], arg='SHAREDIR')
|
||||||
opts.add_argumented (help = 'Set the system\'s directory for cache directories\nDefault = /var/cache', alternatives = ['--cache-dir'], arg='CACHEDIR')
|
opts.add_argumented (help = 'Set the system\'s directory for cache directories\nDefault = /var/cache', alternatives = ['--cache-dir'], arg='CACHEDIR')
|
||||||
|
|
||||||
opts.parse()
|
opts.add_argumented (help = 'Set off environment for installation\nEmpty by default', alternatives = ['--dest-dir'], arg='DESTDIR')
|
||||||
opts.help()
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
opts.parse()
|
||||||
|
|
||||||
|
if len(opts.files) > 1) or (opts.opts['--help'] is not None) or ((len(opts.files) == 1) and (opts.files[0] == 'help')):
|
||||||
|
opts.help()
|
||||||
|
elif (opts.opts['--version'] is not None) or ((len(opts.files) == 1) and (opts.files[0] == 'version')):
|
||||||
|
print('Ponysay %s installer' % (PONYSAY_VERSION))
|
||||||
|
else:
|
||||||
|
if len(opts.files) == 0:
|
||||||
|
opts.files = ['build']
|
||||||
|
method = opts.files[0]
|
||||||
|
conf = self.configure(opts.opts)
|
||||||
|
if method == 'build': Setup.build (conf)
|
||||||
|
elif method == 'prebuilt': Setup.install (conf)
|
||||||
|
elif method == 'install': Setup.build (conf); Setup.install(conf)
|
||||||
|
elif method == 'uninstall': Setup.uninstall (conf)
|
||||||
|
elif method == 'uninstall-old': Setup.uninstallOld(conf)
|
||||||
|
elif method == 'clean': Setup.clean (conf)
|
||||||
|
elif method == 'clean-old': Setup.cleanOld (conf)
|
||||||
|
else:
|
||||||
|
opts.help()
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
Parses configurations
|
||||||
|
'''
|
||||||
|
def configure(self, opts):
|
||||||
|
(defaults, conf) = ({}, {})
|
||||||
|
|
||||||
|
manpages = (('en', 'English'), ('es', 'Spanish')) #'en' must be first
|
||||||
|
sharedirs = ('ponies', 'ttyponies', 'extraponies', 'extrattyponies', 'quotes', 'balloons')
|
||||||
|
sharefiles = (('ucs', 'ucsmap'))
|
||||||
|
commands = ('ponysay', 'ponythink')
|
||||||
|
shells = (('bash', '/usr/share/bash-completion/completions/ponysay'),
|
||||||
|
('fish', '/usr/share/fish/completions/ponysay.fish'),
|
||||||
|
('zsh', '/usr/share/zsh/site-functions/_ponysay'))
|
||||||
|
mansections = (('ponysay', '6'), ('cowsay', '1'), ('fortune', '6'))
|
||||||
|
|
||||||
|
for command in commands:
|
||||||
|
conf[command] = True
|
||||||
|
conf['shared-cache'] = '/var/cache/ponysay'
|
||||||
|
for shell in shells:
|
||||||
|
conf[shell[0]] = shell[1]
|
||||||
|
conf['pdf'] = '/usr/doc'
|
||||||
|
conf['pdf-compression'] = 'gz'
|
||||||
|
conf['info'] = '/usr/share/info'
|
||||||
|
conf['info-install'] = True
|
||||||
|
conf['info-compression'] = 'gz'
|
||||||
|
for manpage in manpages:
|
||||||
|
conf['man-' + manpage[0]] = '/usr/share/man'
|
||||||
|
conf['man-' + manpage[0] + '-compression'] = 'gz'
|
||||||
|
for sharedir in sharedirs:
|
||||||
|
conf[sharedir] = '/usr/share/ponysay/' + sharedir
|
||||||
|
for sharefile in sharefiles:
|
||||||
|
conf[sharefile[0]] = '/usr/share/ponysay/' + sharefile[1]
|
||||||
|
conf['custom-env-python'] = 'python3'
|
||||||
|
|
||||||
|
for key in conf:
|
||||||
|
defaults[key] = conf[key]
|
||||||
|
|
||||||
|
for key in ('pdf', 'pdf-compression', 'custom-env-python'):
|
||||||
|
conf[key] = None
|
||||||
|
|
||||||
|
for manpage in manpages:
|
||||||
|
if manpage is not manpage[0]:
|
||||||
|
for key in ('man-' + manpage[0], 'man-' + manpage[0] + '-compression'):
|
||||||
|
conf[key] = None
|
||||||
|
|
||||||
|
for coll in (('shell', '/usr/share', [item[0] for item in shells]),
|
||||||
|
('man', '/usr/share/man', ['man-' + item[0] for item in manpages]),
|
||||||
|
('man-compression', 'gz', ['man-' + item[0] + '-compression' for item in manpages])
|
||||||
|
):
|
||||||
|
if opts['--without-' + coll[0]] is not None:
|
||||||
|
for item in coll[2]:
|
||||||
|
conf[item] = None
|
||||||
|
if opts['--with-' + coll[0]] is not None:
|
||||||
|
for item in coll[2]:
|
||||||
|
defaults[item] = conf[item] = defaults[item].replace(coll[1], coll[1] if opts['--with-' + coll[0]][0] is None else opts['--with-' + coll[0]][0]);
|
||||||
|
|
||||||
|
for key in conf:
|
||||||
|
if opts['--with-' + key] is not None:
|
||||||
|
if defaults[key] in (False, True):
|
||||||
|
conf[key] = True
|
||||||
|
else:
|
||||||
|
conf[key] = defaults[key] if opts['--with-' + key][0] is None else opts['--with-' + key][0]
|
||||||
|
if opts['--without-' + key] is not None:
|
||||||
|
conf[key] = False if defaults[key] in (False, True) else None
|
||||||
|
|
||||||
|
for pair in (('pdf', 'pdf-compression'), ('info', 'info-install'), ('info', 'info-compression'), ('man-es', 'man-es-compression')):
|
||||||
|
if (conf[pair[0]] in (False, None)) and (conf[pair[1]] not in (False, None)):
|
||||||
|
conf[pair[0]] = defaults[pair[0]]
|
||||||
|
|
||||||
|
for mansection in mansections:
|
||||||
|
if opts['--man-section-' + mansection[0]] is not None:
|
||||||
|
conf['man-section-' + mansection[0]] = opts['--man-section-' + mansection[0]]
|
||||||
|
else:
|
||||||
|
conf['man-section-' + mansection[0]] = mansection[1]
|
||||||
|
|
||||||
|
return conf
|
||||||
|
|
||||||
|
# opts.add_argumented (help = 'Set a prefix to all implicit directories\nDefault = /usr', alternatives = ['--prefix'], arg='PREFIX')
|
||||||
|
# opts.add_argumentless(help = 'Change all implicit configurations to fit local user a installation for the current user', alternatives = ['--private'])
|
||||||
|
# opts.add_argumentless(help = 'Change all implicit directories to fit installation to /opt', alternatives = ['--opt'])
|
||||||
|
# opts.add_argumented (help = 'Set the system\'s directory for command executables\nDefault = $PREFIX/bin', alternatives = ['--bin-dir'], arg='BINDIR')
|
||||||
|
# opts.add_argumented (help = 'Set the system\'s directory for non-command executables\nDefault = $PREFIX/lib\nNot used.', alternatives = ['--lib-dir'], arg='LIBDIR')
|
||||||
|
# opts.add_argumented (help = 'Set the system\'s directory for resource files\nDefault = $PREFIX/share', alternatives = ['--share-dir'], arg='SHAREDIR')
|
||||||
|
# opts.add_argumented (help = 'Set the system\'s directory for cache directories\nDefault = /var/cache', alternatives = ['--cache-dir'], arg='CACHEDIR')
|
||||||
|
#
|
||||||
|
# opts.add_argumented (help = 'Set off environment for installation\nEmpty by default', alternatives = ['--dest-dir'], arg='DESTDIR')
|
||||||
|
#
|
||||||
|
# opts.add_argumentless(help = 'Install everything that is not explicity excluded', alternatives = ['--everything', '--with-everything'])
|
||||||
|
# opts.add_argumentless(help = 'Install only the essentials\nNote that this can vary depedning on version', alternatives = ['--minimal'])
|
||||||
|
# opts.add_argumentless(help = 'Install nothing that is not explicity included', alternatives = ['--nothing', '--with-nothing'])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -147,27 +263,18 @@ class ArgParser():
|
||||||
def parse(self, argv = sys.argv):
|
def parse(self, argv = sys.argv):
|
||||||
self.argcount = len(argv) - 1
|
self.argcount = len(argv) - 1
|
||||||
self.files = []
|
self.files = []
|
||||||
(dashed, get, dontget) = (False, 0, 0)
|
(argqueue, optqueue, get) = ([], [], False)
|
||||||
(argqueue, optqueue, deque) = ([], [], [])
|
|
||||||
for arg in argv[1:]:
|
|
||||||
deque.append(arg)
|
|
||||||
|
|
||||||
def unrecognised(arg):
|
for arg in argv:
|
||||||
sys.stderr.write('%s: fatal: unrecognised option %s. see --help or the manual\n' % (self.__program, arg))
|
if get:
|
||||||
exit(-1)
|
get = False
|
||||||
|
if (len(arg) > 2) and (arg[:2] in ('--', '++')):
|
||||||
while len(deque) != 0:
|
argqueue.append(None)
|
||||||
(arg, deque) = (deque[0], deque[1:])
|
else:
|
||||||
if (get > 0) and (dontget == 0):
|
|
||||||
get -= 1
|
|
||||||
argqueue.append(arg)
|
argqueue.append(arg)
|
||||||
elif dashed: self.files.append(arg)
|
continue
|
||||||
elif arg == '--': dashed = True
|
if (len(arg) > 2) and (arg[:2] in ('--', '++')):
|
||||||
elif (len(arg) > 1) and ((arg[0] == '-') or (arg[0] == '+')):
|
if (arg in self.optmap) and (self.optmap[arg][1] == ARGUMENTLESS):
|
||||||
if (len(arg) > 2) and ((arg[:2] == '--') or (arg[:2] == '++')):
|
|
||||||
if dontget > 0:
|
|
||||||
dontget -= 1
|
|
||||||
elif (arg in self.optmap) and (self.optmap[arg][1] == ARGUMENTLESS):
|
|
||||||
optqueue.append(arg)
|
optqueue.append(arg)
|
||||||
argqueue.append(None)
|
argqueue.append(None)
|
||||||
elif '=' in arg:
|
elif '=' in arg:
|
||||||
|
@ -179,36 +286,22 @@ class ArgParser():
|
||||||
unrecognised(arg)
|
unrecognised(arg)
|
||||||
elif (arg in self.optmap) and (self.optmap[arg][1] == ARGUMENTED):
|
elif (arg in self.optmap) and (self.optmap[arg][1] == ARGUMENTED):
|
||||||
optqueue.append(arg)
|
optqueue.append(arg)
|
||||||
get += 1
|
get = True
|
||||||
else:
|
else:
|
||||||
unrecognised(arg)
|
sys.stderr.write('%s: fatal: unrecognised option %s. see --help or the manual\n' % (self.__program, arg))
|
||||||
else:
|
exit(-1)
|
||||||
(i, n, sign) = (1, len(arg), arg[0])
|
|
||||||
while i < n:
|
|
||||||
(narg, i) = (sign + arg[i], i + 1)
|
|
||||||
if narg in self.optmap:
|
|
||||||
optqueue.append(narg)
|
|
||||||
if self.optmap[narg][1] == ARGUMENTLESS:
|
|
||||||
argqueue.append(None)
|
|
||||||
else:
|
|
||||||
nargarg = arg[i:]
|
|
||||||
if len(nargarg) == 0: get += 1
|
|
||||||
else: argqueue.append(nargarg)
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
unrecognised(arg)
|
|
||||||
else:
|
else:
|
||||||
self.files.append(arg)
|
self.files.append(arg)
|
||||||
|
|
||||||
(i, n) = (0, len(optqueue))
|
(i, n) = (0, len(optqueue))
|
||||||
|
if len(argqueue) < n:
|
||||||
|
argqueue.append(None)
|
||||||
while i < n:
|
while i < n:
|
||||||
(opt, arg, i) = (optqueue[i], argqueue[i], i + 1)
|
(opt, arg, i) = (optqueue[i], argqueue[i], i + 1)
|
||||||
opt = self.optmap[opt][0]
|
opt = self.optmap[opt][0]
|
||||||
if (opt not in self.opts) or (self.opts[opt] is None):
|
if (opt not in self.opts) or (self.opts[opt] is None):
|
||||||
self.opts[opt] = []
|
self.opts[opt] = []
|
||||||
self.opts[opt].append(arg)
|
self.opts[opt].append(arg)
|
||||||
self.message = ' '.join(self.files) if len(self.files) > 0 else None
|
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Prints a colourful help message
|
Prints a colourful help message
|
||||||
|
|
Loading…
Reference in a new issue