dependency test in python that runs both on py2 and py3

Signed-off-by: Mattias Andrée <maandree@operamail.com>
This commit is contained in:
Mattias Andrée 2013-08-18 10:55:47 +02:00
parent 38a1b564f6
commit e2aaeba4ac
2 changed files with 67 additions and 46 deletions

View file

@ -1,46 +0,0 @@
#!/usr/bin/env sh
# Compatible with bash dash zsh mksh ksh ksh93
# but not with fish
# problematic with tcsh csh
br=0 # build required
bs=0 # build recommended
bo=0 # build optional
rr=0 # runtime required
ro=0 # runtime optional
pv=0 # python version
(hash chmod 2>/dev/null) || (br=1 ; ro=1 ; echo 'Missing chmod, install coreutils [build required + runtime optional]')
(hash gzip 2>/dev/null) || (bo=1 ; echo 'Missing gzip, install gzip [build optional]')
(hash makeinfo 2>/dev/null) || (bo=1 ; echo 'Missing makeinfo, install texinfo [build optional]')
(hash install-info 2>/dev/null) || (bo=1 ; echo 'Missing install-info, install info [build optional]')
(hash auto-auto-complete 2>/dev/null) || (bo=1 ; echo 'Missing auto-auto-complete, install auto-auto-complete>=3 [build optional]')
(hash python 2>/dev/null) || (br=1 ; rr=1 ; echo 'Missing python, install python>=3 [build+runtime required]')
(hash cut 2>/dev/null) && (hash python 2>/dev/null) &&
(test ! $(env python --version 2>&1 | cut -d ' ' -f 2 | cut -d '.' -f 1) = 3) && (
(hash python3 2>/dev/null) ||
(br=1 ; rr=1 ; pv=1 ; echo 'Missing python>=3, install python (may be named python3) [build+runtime required]'))
(hash stty 2>/dev/null) || (rr=1 ; echo 'Missing stty, install coreutils [runtime required]')
(hash ponytool 2>/dev/null) || (ro=1 ; echo 'Missing ponytool, install util-say [runtime optional]')
(hash chmod 2>/dev/null) || (rr=1 ; echo 'Missing chmod, install coreutils [runtime optional]')
( (test $br = 1) || (test $rr = 1) || (test $ro = 1) || (test $pv = 1) ) && echo
(test $br = 1) && echo 'You will not be able to build and install ponysay.'
(test $rr = 1) && echo 'You will not be able to run ponysay.'
(test $pv = 1) && echo 'Unable to verify version of python.'
(test $br = 0) && (test $bs = 0) && (test $bo = 0) && (test $rr = 0) && (test $ro = 0) &&
echo && echo 'Everything appears to be in order, enjoy ponysay!'
echo

67
setup/dependencies.py Executable file
View file

@ -0,0 +1,67 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
dependencies = [
('chmod', 'coreutils', None, 2, 1),
('gzip', 'gzip', 'compression of manuals', 1, 0),
('makeinfo', 'texinfo', 'compilation of info manual', 1, 0),
('install-info', 'texinfo', 'installation of info manual', 1, 0),
('auto-auto-complete', 'auto-auto-complete>=3', 'compilation of shell tab-completion', 1, 0),
('stty', 'coreutils', None, 0, 2),
('ponytool', 'util-say>=3', 'KMS utilisation and PNG support', 0, 1),
(None, 'python>=3', None, 2, 2)
]
path = os.environ['PATH'].split(':')
build_required = True
build_optional = True
runtime_required = True
runtime_optional = True
def test(dependency):
executable = dependency[0]
if executable is None:
if sys.version_info.major == 3:
return
executable = 'python3'
for p in path:
if len(p) != 0:
if os.path.exists((p + '/' + executable).replace('//', '/')):
return
global build_required, build_optional, runtime_required, runtime_optional
requirement = ''
if dependency[3] == 2: build_required = False ; requirement += 'build required + '
if dependency[3] == 1: build_optional = False ; requirement += 'build optional + '
if dependency[4] == 2: runtime_required = False ; requirement += 'runtime required + '
if dependency[4] == 1: runtime_optional = False ; requirement += 'runtime optional + '
requirement = requirement[:len(requirement) - 3]
print('Missing %s, install %s. [%s]' % (executable, dependency[1], requirement))
if dependency[2] is not None:
print(' Required for %s.' % dependency[2])
for dependency in dependencies:
test(dependency)
rc = 0
if not build_required:
print('You will not be able to build and install ponysay.')
rc = 1
elif not build_optional:
print('You will have to tweak to installation to build and install ponysay.')
if not runtime_required:
print('You will not be able to run ponysay.')
rc = 1
elif not runtime_optional:
print('You will be missing some features in ponysay.')
if not (build_required and build_optional and runtime_required and runtime_optional):
print('\nEverything appears to be in order, enjoy ponysay!')
exit(rc)