import sys import os from subprocess import call import fileinput def gen(force=False): if sys.platform == "win32": bindir = r"c:\Python34\Lib\site-packages\PyQt5" else: bindir = "/usr/bin" if sys.platform == "win32": uic_path = os.path.join(bindir, "pyuic5.bat") rcc_path = os.path.join(bindir, "pyrcc5.exe") else: uic_path = os.path.join(bindir, "pyuic5") rcc_path = os.path.join(bindir, "pyrcc5") file_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "ui") ui_path = file_dir rc_path = file_dir out_path = os.path.join(file_dir, "..", "..", "src", "urh", "ui") ui_files = [f for f in os.listdir(ui_path) if f.endswith(".ui")] rc_files = [f for f in os.listdir(rc_path) if f.endswith(".qrc")] for f in ui_files: file_path = os.path.join(ui_path, f) outfile = "ui_" + f.replace(".ui", ".py") out_file_path = os.path.join(out_path, outfile) time_ui_file = os.path.getmtime(file_path) try: time_generated_file = os.path.getmtime(out_file_path) except os.error: time_generated_file = 0 if time_generated_file >= time_ui_file and not force: # Generated file is already there and newer than ui file, no need to recompile it continue call([uic_path, "--from-imports", file_path, "-o", out_file_path]) # Remove Line: # Form implementation generated from reading ui file '/home/joe/GIT/urh/ui/fuzzing.ui' # to avoid useless git updates when working on another computer for line in fileinput.input(out_file_path, inplace=True): if line.startswith("# Form implementation generated from reading ui file") or line.startswith( "# Created by: "): continue if line.strip().startswith("QtCore.QMetaObject.connectSlotsByName("): # disable auto slot connection, as we do not use it, and it causes crash on python 3.7 continue print(line, end='') for f in rc_files: file_path = os.path.join(rc_path, f) out_file = f.replace(".qrc", "_rc.py") out_file_path = os.path.join(out_path, out_file) time_rc_file = os.path.getmtime(file_path) try: time_generated_file = os.path.getmtime(out_file_path) except os.error: time_generated_file = 0 if time_generated_file < time_rc_file or force: # Only create, when generated file is old than rc file to prevent unneeded git pushes call([rcc_path, file_path, "-o", out_file_path]) if __name__ == "__main__": gen()