You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

191 lines
5.2 KiB

5 months ago
# Copyright (c) 2023 Riverbank Computing Limited <info@riverbankcomputing.com>
#
# This file is part of PyQt5.
#
# This file may be used under the terms of the GNU General Public License
# version 3.0 as published by the Free Software Foundation and appearing in
# the file LICENSE included in the packaging of this file. Please review the
# following information to ensure the GNU General Public License version 3.0
# requirements will be met: http://www.gnu.org/copyleft/gpl.html.
#
# If you do not wish to use this file under the terms of the GPL version 3.0
# then you may purchase a commercial license. For more information contact
# info@riverbankcomputing.com.
#
# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
import sys
from PyQt5.QtCore import PYQT_VERSION_STR, QDir, QFile
from .pyrcc import *
# Initialise the globals.
verbose = False
compressLevel = CONSTANT_COMPRESSLEVEL_DEFAULT
compressThreshold = CONSTANT_COMPRESSTHRESHOLD_DEFAULT
resourceRoot = ''
def processResourceFile(filenamesIn, filenameOut, listFiles):
if verbose:
sys.stderr.write("PyQt5 resource compiler\n")
# Setup.
library = RCCResourceLibrary()
library.setInputFiles(filenamesIn)
library.setVerbose(verbose)
library.setCompressLevel(compressLevel)
library.setCompressThreshold(compressThreshold)
library.setResourceRoot(resourceRoot)
if not library.readFiles():
return False
if filenameOut == '-':
filenameOut = ''
if listFiles:
# Open the output file or use stdout if not specified.
if filenameOut:
try:
out_fd = open(filenameOut, 'w')
except Exception:
sys.stderr.write(
"Unable to open %s for writing\n" % filenameOut)
return False
else:
out_fd = sys.stdout
for df in library.dataFiles():
out_fd.write("%s\n" % QDir.cleanPath(df))
if out_fd is not sys.stdout:
out_fd.close()
return True
return library.output(filenameOut)
def showHelp(error):
sys.stderr.write("PyQt5 resource compiler\n")
if error:
sys.stderr.write("pyrcc5: %s\n" % error)
sys.stderr.write(
"Usage: pyrcc5 [options] <inputs>\n"
"\n"
"Options:\n"
" -o file Write output to file rather than stdout\n"
" -threshold level Threshold to consider compressing files\n"
" -compress level Compress input files by level\n"
" -root path Prefix resource access path with root path\n"
" -no-compress Disable all compression\n"
" -version Display version\n"
" -help Display this information\n")
def main():
# Parse the command line. Note that this mimics the original C++ (warts
# and all) in order to preserve backwards compatibility.
global verbose
global compressLevel
global compressThreshold
global resourceRoot
outFilename = ''
helpRequested = False
listFiles = False
files = []
errorMsg = None
argc = len(sys.argv)
i = 1
while i < argc:
arg = sys.argv[i]
i += 1
if arg[0] == '-':
opt = arg[1:]
if opt == "o":
if i >= argc:
errorMsg = "Missing output name"
break
outFilename = sys.argv[i]
i += 1
elif opt == "root":
if i >= argc:
errorMsg = "Missing root path"
break
resourceRoot = QDir.cleanPath(sys.argv[i])
i += 1
if resourceRoot == '' or resourceRoot[0] != '/':
errorMsg = "Root must start with a /"
break
elif opt == "compress":
if i >= argc:
errorMsg = "Missing compression level"
break
compressLevel = int(sys.argv[i])
i += 1
elif opt == "threshold":
if i >= argc:
errorMsg = "Missing compression threshold"
break
compressThreshold = int(sys.argv[i])
i += 1
elif opt == "verbose":
verbose = True
elif opt == "list":
listFiles = True
elif opt == "version":
sys.stderr.write("pyrcc5 v%s\n" % PYQT_VERSION_STR)
sys.exit(1)
elif opt == "help" or opt == "h":
helpRequested = True
elif opt == "no-compress":
compressLevel = -2
else:
errorMsg = "Unknown option: '%s'" % arg
break
else:
if not QFile.exists(arg):
sys.stderr.write(
"%s: File does not exist '%s'\n" % (sys.argv[0], arg))
sys.exit(1)
files.append(arg)
# Handle any errors or a request for help.
if len(files) == 0 or errorMsg is not None or helpRequested:
showHelp(errorMsg)
sys.exit(1)
if not processResourceFile(files, outFilename, listFiles):
sys.exit(1)
if __name__ == '__main__':
main()