From e2aaeba4ace6aa7c563aa09bde7ea81ab29744e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Andr=C3=A9e?= Date: Sun, 18 Aug 2013 10:55:47 +0200 Subject: [PATCH] dependency test in python that runs both on py2 and py3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- dependency-test.sh | 46 ----------------------------- setup/dependencies.py | 67 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 46 deletions(-) delete mode 100755 dependency-test.sh create mode 100755 setup/dependencies.py diff --git a/dependency-test.sh b/dependency-test.sh deleted file mode 100755 index 102a0b8d..00000000 --- a/dependency-test.sh +++ /dev/null @@ -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 - diff --git a/setup/dependencies.py b/setup/dependencies.py new file mode 100755 index 00000000..79775a66 --- /dev/null +++ b/setup/dependencies.py @@ -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) +