diff options
author | Tomás Touceda <chiiph@leap.se> | 2013-06-28 14:25:19 -0300 |
---|---|---|
committer | Tomás Touceda <chiiph@leap.se> | 2013-06-28 14:25:19 -0300 |
commit | 5b975799ce9b7a6e0a88be4bcb48bdfb90800bb3 (patch) | |
tree | bda674a79b1aeccb37b67609517bc4761db7ae07 /data/mkpyqt.py | |
parent | 9cea9c8a34343f8792d65b96f93ae22bd8685878 (diff) | |
parent | c088a1544a5f7a51359d2802019c0740aab0cc5b (diff) |
Merge branch 'release-0.2.2'0.2.2
Diffstat (limited to 'data/mkpyqt.py')
-rwxr-xr-x | data/mkpyqt.py | 271 |
1 files changed, 0 insertions, 271 deletions
diff --git a/data/mkpyqt.py b/data/mkpyqt.py deleted file mode 100755 index 1ce2cd28..00000000 --- a/data/mkpyqt.py +++ /dev/null @@ -1,271 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2007-10 Qtrac Ltd. All rights reserved. -# This program or module 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, either version 2 of the License, or -# version 3 of the License, or (at your option) any later version. It is -# provided for educational purposes and 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. - -import os -import platform -import stat -import subprocess -import sys -import PyQt4.QtCore - -__version__ = "1.0.4" - -Windows = sys.platform.lower().startswith(("win", "microsoft")) -if Windows: - PATH = os.path.join(os.path.dirname(sys.executable), - "Lib/site-packages/PyQt4") - if os.access(os.path.join(PATH, "bin"), os.R_OK): - PATH = os.path.join(PATH, "bin") -else: - app = PyQt4.QtCore.QCoreApplication([]) - PATH = unicode(app.applicationDirPath()) - del app -if sys.platform.startswith("darwin"): - i = PATH.find("Resources") - if i > -1: - PATH = PATH[:i] + "bin" -PYUIC4 = os.path.join(PATH, "pyuic4") # e.g. PYUIC4 = "/usr/bin/pyuic4" -if sys.platform.startswith("darwin"): - PYUIC4 = os.path.dirname(sys.executable) - i = PYUIC4.find("Resources") - if i > -1: - PYUIC4 = PYUIC4[:i] + "Lib/python2.5/site-packages/PyQt4/uic/pyuic.py" -PYRCC4 = os.path.join(PATH, "pyrcc4") -PYLUPDATE4 = os.path.join(PATH, "pylupdate4") -LRELEASE = "lrelease" -if Windows: - PYUIC4 = PYUIC4.replace("/", "\\") + ".bat" - PYRCC4 = PYRCC4.replace("/", "\\") + ".exe" - PYLUPDATE4 = PYLUPDATE4.replace("/", "\\") + ".exe" - -msg = [] -shell = lambda command: subprocess.Popen(['which', command], - stdout=subprocess.PIPE).communicate() - -if not os.access(PYUIC4, os.F_OK): - PYUIC4 = shell('pyuic4')[0].strip('\n') - if not os.access(PYUIC4, os.F_OK): - msg.append("failed to find pyuic4; tried %s" % PYUIC4) - -if not os.access(PYRCC4, os.F_OK): - PYRCC4 = shell('pyrcc4')[0].strip('\n') - if not os.access(PYRCC4, os.F_OK): - msg.append("failed to find pyrcc4; tried %s" % PYRCC4) - -if not os.access(PYLUPDATE4, os.F_OK): - PYLUPDATE4 = shell('pylupdate4')[0].strip('\n') - if not os.access(PYLUPDATE4, os.F_OK): - msg.append("failed to find pylupdate4; tried %s" % PYLUPDATE4) - -if msg: - print "\n".join(msg) - print "try manually editing this program to put the correct " + \ - "paths in place" - sys.exit() - -Debug = False -Verbose = False - -def usage(): - print """usage: mkpyqt.py [options] [path] - -Options (which can be given in any of the forms shown): --b --build build [default] --c --clean clean --f --force force --t --translate translate --r --recurse recurse --v --verbose verbose --D --debug debug -path defaults to . - -If executed with no arguments (or with a build argument) it does a -build, i.e., it looks for all *.ui and *.qrc files and makes sure that -the corresponding ui_*.py and qrc_*.py files exist and are up-to-date. - -If executed with clean, deletes all ui_*.py and qrc_*.py files that have -corresponding *.ui and *.qrc files, and all *.pyc and *.pyo files. - -If executed with force, it does a clean followed by a build. - -If building and the translate option is given, after building, it runs -pylupdate4 on all .py and .pyw files it encounters, and then runs lrelease -on all .ts files it encounters. It does not use a .pro file so the .ts -files must be created in the first place, e.g., using pylupdate4 on one -of the source files and using its -ts option. - -WARNING: Do not give any hand-coded files names that match ui_*.py or -qrc_*.py since these will be deleted by mkpyqt.py clean! - -NOTE: If any tool fails to run, e.g., pyuic4, then edit this program and -hard-code the path; the variables with the tool paths are near the top -of the file. - -mkpyqt.py v %s. Copyright (c) 2007-9 Qtrac Ltd. All rights reserved. -""" % __version__ - sys.exit() - - -def report_failure(command, args, process): - msg = "" - ba = process.readAllStandardError() - if not ba.isEmpty(): - msg = ": " + str(QString(ba)) - print "failed", command, " ".join(args), msg - - -def build(path): - for name in os.listdir(path): - source = os.path.join(path, name) - target = None - if source.endswith(".ui"): - target = os.path.join(path, - "ui_" + name.replace(".ui", ".py")) - command = PYUIC4 - elif source.endswith(".qrc"): - target = os.path.join(path, - "qrc_" + name.replace(".qrc", ".py")) - command = PYRCC4 - process = PyQt4.QtCore.QProcess() - if target is not None: - if not os.access(target, os.F_OK) or ( - os.stat(source)[stat.ST_MTIME] > \ - os.stat(target)[stat.ST_MTIME]): - args = ["-o", target, source] - if sys.platform.startswith("darwin") and command == PYUIC4: - command = sys.executable - args = [PYUIC4] + args - if Debug: - print "# %s %s" % (command, " ".join(args)) - else: - process.start(command, args) - if not process.waitForFinished(2 * 60 * 1000): - report_failure(command, args, process) - else: - print source, "->", target - elif Verbose: - print source, "is up-to-date" - - -def clean(path): - deletelist = [] - for name in os.listdir(path): - target = os.path.join(path, name) - source = None - if target.endswith(".py") or target.endswith(".pyc") or \ - target.endswith(".pyo"): - if name.startswith("ui_") and not name[-1] in "oc": - source = os.path.join(path, name[3:-3] + ".ui") - elif name.startswith("qrc_"): - if target[-1] in "oc": - source = os.path.join(path, name[4:-4] + ".qrc") - else: - source = os.path.join(path, name[4:-3] + ".qrc") - elif target[-1] in "oc": - source = target[:-1] - if source is not None: - if os.access(source, os.F_OK): - if Debug: - print "# delete ", target - else: - deletelist.append(target) - else: - print "will not remove '%s' since `%s' not found" % ( - target, source) - if not Debug: - for target in deletelist: - if Verbose: - print "deleted", target - os.remove(target) - - -def translate(path): - files = [] - tsfiles = [] - for name in os.listdir(path): - if name.endswith((".py", ".pyw")): - files.append(os.path.join(path, name)) - elif name.endswith(".ts"): - tsfiles.append(os.path.join(path, name)) - if not tsfiles: - return - verbose = "-verbose" if Verbose else "" - silent = "-silent" if not Verbose else "" - process = PyQt4.QtCore.QProcess() - for ts in tsfiles: - qm = ts[:-3] + ".qm" - command1 = PYLUPDATE4 - args1 = [verbose] + files + ["-ts", ts] - command2 = LRELEASE - args2 = [silent, ts, "-qm", qm] - if Debug: - print "updated", ts - print "generated", qm - else: - process.start(command1, args1) - if not process.waitForFinished(2 * 60 * 1000): - report_failure(command1, args1, process) - process.start(command2, args2) - if not process.waitForFinished(2 * 60 * 1000): - report_failure(command2, args2, process) - - -def apply(recurse, function, path): - if not recurse: - function(path) - else: - for root, dirs, files in os.walk(path): - for dir in dirs: - function(os.path.join(root, dir)) - - -def main(): - global Debug, Verbose - function = build - recurse = False - trans = False - force = False - path = "." - args = sys.argv[1:] - while args: - arg = args.pop(0) - if arg in ("-D", "--debug", "debug"): - Debug = True - elif arg in ("-b", "--build", "build"): - pass # This is the default - elif arg in ("-c", "--clean", "clean"): - function = clean - elif arg in ("-f", "--force", "force"): - force = True - elif arg in ("-t", "--translate", "translate"): - trans = True - elif arg in ("-r", "--recurse", "recurse"): - recurse = True - elif arg in ("-v", "--verbose", "verbose"): - Verbose = True - elif arg in ("-h", "--help", "help"): - usage() - else: - path = arg - if not force: - apply(recurse, function, path) - else: - apply(recurse, clean, path) - apply(recurse, build, path) - if trans and (function == build or force): - apply(recurse, translate, path) - -main() - -# 1.0.1 Fixed bug reported by Brian Downing where paths that contained -# spaces were not handled correctly. -# 1.0.2 Changed default path on Windows to match PyQt 4.4 -# 1.0.3 Tried to make the paths work on Mac OS X |