#!/usr/bin/env python # -*- coding: utf-8 -*- # vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # # Copyright (c) 2011 Raoul Snyman # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # # under the terms of the GNU General Public License as published by the Free # # Software Foundation; version 2 of the License. # # # # This program is distributed in the hope that it will be useful, but WITHOUT # # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # # more details. # # # # You should have received a copy of the GNU General Public License along # # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### """ This script is used to check dependencies of OpenLP. It checks availability of required python modules and their version. To verify availability of Python modules, simply run this script:: @:~$ ./check_dependencies.py """ import os import sys is_win = sys.platform.startswith('win') VERS = { 'Python': '2.6', 'PyQt4': '4.6', 'Qt4': '4.6', 'sqlalchemy': '0.5', # pyenchant 1.6 required on Windows 'enchant': '1.6' if is_win else '1.3' } # pywin32 WIN32_MODULES = [ 'win32com', 'win32ui', 'pywintypes', ] MODULES = [ 'PyQt4', 'PyQt4.QtCore', 'PyQt4.QtGui', 'PyQt4.QtNetwork', 'PyQt4.QtOpenGL', 'PyQt4.QtSvg', 'PyQt4.QtTest', 'PyQt4.QtWebKit', 'PyQt4.phonon', 'sqlalchemy', 'sqlite3', 'lxml', 'chardet', 'enchant', 'BeautifulSoup', 'mako', ] OPTIONAL_MODULES = [ ('sqlite', ' (SQLite 2 support)'), ('MySQLdb', ' (MySQL support)'), ('psycopg2', ' (PostgreSQL support)'), ] w = sys.stdout.write def check_vers(version, required, text): if type(version) is str: version = version.split('.') version = [int(x) for x in version] if type(required) is str: required = required.split('.') required = [int(x) for x in required] w(' %s >= %s ... ' % (text, '.'.join([str(x) for x in required]))) if version >= required: w('.'.join([str(x) for x in version]) + os.linesep) return True else: w('FAIL' + os.linesep) return False def verify_python(): if not check_vers(list(sys.version_info), VERS['Python'], text='Python'): exit(1) def verify_versions(): print('Verifying version of modules...') from PyQt4 import QtCore check_vers(QtCore.PYQT_VERSION_STR, VERS['PyQt4'], 'PyQt4') check_vers(QtCore.qVersion(), VERS['Qt4'], 'Qt4') check_vers(__import__('sqlalchemy').__version__, VERS['sqlalchemy'], 'sqlalchemy') check_vers(__import__('enchant').__version__, VERS['enchant'], 'enchant') def check_module(mod, text='', indent=' '): space = (30 - len(mod) - len(text)) * ' ' w(indent + '%s%s... ' % (mod, text) + space) try: __import__(mod) w('OK') except ImportError: w('FAIL') w(os.linesep) def main(): verify_python() print('Checking for modules...') for m in MODULES: check_module(m) print('Checking for optional modules...') for m in OPTIONAL_MODULES: check_module(m[0], text=m[1]) if sys.platform.startswith('win'): print('Checking for Windows specific modules...') for m in WIN32_MODULES: check_module(m) verify_versions() if __name__ == u'__main__': main()