The branch, master has been updated via 7545e2c77b6 nsswitch: avoid calling pthread_getspecific() on an uninitialized key via 0d096931196 s4:lib/messaging: fix interaction between imessaging_context_destructor and irpc_destructor via c29c487c5ab third_party: Update waf to version 2.0.25 from dd86376294f smbd: Fix indentation
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 7545e2c77b69fc57e436e3ed298fdb68033ce49f Author: Ralph Boehme <s...@samba.org> Date: Thu Jan 5 16:25:11 2023 +0100 nsswitch: avoid calling pthread_getspecific() on an uninitialized key Found by ASAN: $ bin/stress-nss-libwbclient ... ==1639426==ERROR: AddressSanitizer: unknown-crash on address 0x7f3907d85000 at pc 0x7f3907d649fb bp 0x7ffc6545f5b0 sp 0x7ffc6545f5a8 READ of size 4 at 0x7f3907d85000 thread T0 #0 0x7f3907d649fa in winbind_close_sock ../../nsswitch/wb_common.c:220 #1 0x7f3907d65866 in winbind_destructor ../../nsswitch/wb_common.c:246 #2 0x7f3907da5d3d in _dl_fini /usr/src/debug/glibc-2.35-20.fc36.x86_64/elf/dl-fini.c:142 #3 0x7f3907241044 in __run_exit_handlers (/lib64/libc.so.6+0x41044) #4 0x7f39072411bf in exit (/lib64/libc.so.6+0x411bf) #5 0x7f3907229516 in __libc_start_call_main (/lib64/libc.so.6+0x29516) #6 0x7f39072295c8 in __libc_start_main_impl (/lib64/libc.so.6+0x295c8) #7 0x56236a2042b4 in _start (/data/git/samba/scratch3/bin/default/nsswitch/stress-nss-libwbclient+0x22b4) Address 0x7f3907d85000 is a wild pointer inside of access range of size 0x000000000004. SUMMARY: AddressSanitizer: unknown-crash ../../nsswitch/wb_common.c:220 in winbind_close_sock The pthread key in wb_global_ctx.key is only initialized if wb_thread_ctx_initialize() is called via get_wb_global_ctx() -> get_wb_thread_ctx(). Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> Autobuild-User(master): Stefan Metzmacher <me...@samba.org> Autobuild-Date(master): Fri Jan 6 15:04:46 UTC 2023 on sn-devel-184 commit 0d096931196524a2d1bf59470bc629dc9231131e Author: Stefan Metzmacher <me...@samba.org> Date: Sat Dec 31 01:24:57 2022 +0100 s4:lib/messaging: fix interaction between imessaging_context_destructor and irpc_destructor BUG: https://bugzilla.samba.org/show_bug.cgi?id=15280 Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit c29c487c5ab68560a73012a2dddad78009b08eef Author: Andreas Schneider <a...@samba.org> Date: Wed Jan 4 09:39:45 2023 +0100 third_party: Update waf to version 2.0.25 Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> ----------------------------------------------------------------------- Summary of changes: buildtools/bin/waf | 2 +- buildtools/wafsamba/wafsamba.py | 2 +- nsswitch/wb_common.c | 22 +++- source4/lib/messaging/messaging.c | 13 +++ source4/lib/messaging/messaging_internal.h | 3 + third_party/waf/waflib/Configure.py | 2 +- third_party/waf/waflib/Context.py | 6 +- third_party/waf/waflib/TaskGen.py | 2 +- third_party/waf/waflib/Tools/msvc.py | 2 +- third_party/waf/waflib/Tools/python.py | 62 ++++++----- third_party/waf/waflib/Utils.py | 15 +++ third_party/waf/waflib/extras/cpplint.py | 2 +- .../waflib/extras/{fc_nfort.py => fc_fujitsu.py} | 26 ++--- third_party/waf/waflib/extras/gccdeps.py | 2 +- third_party/waf/waflib/extras/pyqt5.py | 18 +-- third_party/waf/waflib/extras/sphinx.py | 55 +++++---- third_party/waf/waflib/extras/wafcache.py | 123 ++++++++++++++++----- 17 files changed, 243 insertions(+), 114 deletions(-) copy third_party/waf/waflib/extras/{fc_nfort.py => fc_fujitsu.py} (60%) Changeset truncated at 500 lines: diff --git a/buildtools/bin/waf b/buildtools/bin/waf index d9cba343623..f754b52a7bc 100755 --- a/buildtools/bin/waf +++ b/buildtools/bin/waf @@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE. import os, sys, inspect -VERSION="2.0.24" +VERSION="2.0.25" REVISION="x" GIT="x" INSTALL="x" diff --git a/buildtools/wafsamba/wafsamba.py b/buildtools/wafsamba/wafsamba.py index 79f352878a8..17a188f5036 100644 --- a/buildtools/wafsamba/wafsamba.py +++ b/buildtools/wafsamba/wafsamba.py @@ -38,7 +38,7 @@ LIB_PATH="shared" os.environ['PYTHONUNBUFFERED'] = '1' -if Context.HEXVERSION not in (0x2001800,): +if Context.HEXVERSION not in (0x2001900,): Logs.error(''' Please use the version of waf that comes with Samba, not a system installed version. See http://wiki.samba.org/index.php/Waf diff --git a/nsswitch/wb_common.c b/nsswitch/wb_common.c index 7ae3a11162d..d569e761ebe 100644 --- a/nsswitch/wb_common.c +++ b/nsswitch/wb_common.c @@ -43,6 +43,7 @@ struct winbindd_context { }; static struct wb_global_ctx { + bool initialized; #ifdef HAVE_PTHREAD pthread_once_t control; pthread_key_t key; @@ -141,16 +142,23 @@ static struct winbindd_context *get_wb_thread_ctx(void) static struct winbindd_context *get_wb_global_ctx(void) { -#ifdef HAVE_PTHREAD - return get_wb_thread_ctx(); -#else - static struct winbindd_context ctx = { + struct winbindd_context *ctx = NULL; +#ifndef HAVE_PTHREAD + static struct winbindd_context _ctx = { .winbindd_fd = -1, .is_privileged = false, .our_pid = 0 }; - return &ctx; #endif + +#ifdef HAVE_PTHREAD + ctx = get_wb_thread_ctx(); +#else + ctx = &_ctx; +#endif + + wb_global_ctx.initialized = true; + return ctx; } void winbind_set_client_name(const char *name) @@ -234,6 +242,10 @@ static void winbind_destructor(void) { struct winbindd_context *ctx; + if (!wb_global_ctx.initialized) { + return; + } + #ifdef HAVE_PTHREAD_H ctx = (struct winbindd_context *)pthread_getspecific(wb_global_ctx.key); if (ctx == NULL) { diff --git a/source4/lib/messaging/messaging.c b/source4/lib/messaging/messaging.c index 3705ffc5bef..3a9dccc1d48 100644 --- a/source4/lib/messaging/messaging.c +++ b/source4/lib/messaging/messaging.c @@ -48,6 +48,7 @@ a pending irpc call */ struct irpc_request { + struct irpc_request *prev, *next; struct imessaging_context *msg_ctx; int callid; struct { @@ -400,6 +401,16 @@ NTSTATUS imessaging_process_cleanup( static int imessaging_context_destructor(struct imessaging_context *msg) { + struct irpc_request *irpc = NULL; + struct irpc_request *next = NULL; + + for (irpc = msg->requests; irpc != NULL; irpc = next) { + next = irpc->next; + + DLIST_REMOVE(msg->requests, irpc); + irpc->callid = -1; + } + DLIST_REMOVE(msg_ctxs, msg); TALLOC_FREE(msg->msg_dgm_ref); return 0; @@ -1035,6 +1046,7 @@ failed: static int irpc_destructor(struct irpc_request *irpc) { if (irpc->callid != -1) { + DLIST_REMOVE(irpc->msg_ctx->requests, irpc); idr_remove(irpc->msg_ctx->idr, irpc->callid); if (irpc->msg_ctx->discard_incoming) { SMB_ASSERT(irpc->msg_ctx->num_incoming_listeners > 0); @@ -1238,6 +1250,7 @@ static struct tevent_req *irpc_bh_raw_call_send(TALLOC_CTX *mem_ctx, /* make sure we accept incoming messages */ SMB_ASSERT(state->irpc->msg_ctx->num_incoming_listeners < UINT64_MAX); state->irpc->msg_ctx->num_incoming_listeners += 1; + DLIST_ADD_END(state->irpc->msg_ctx->requests, state->irpc); talloc_set_destructor(state->irpc, irpc_destructor); /* setup the header */ diff --git a/source4/lib/messaging/messaging_internal.h b/source4/lib/messaging/messaging_internal.h index ac254c22631..6281bda82a9 100644 --- a/source4/lib/messaging/messaging_internal.h +++ b/source4/lib/messaging/messaging_internal.h @@ -19,6 +19,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ +struct irpc_request; + struct imessaging_context { struct imessaging_context *prev, *next; struct tevent_context *ev; @@ -30,6 +32,7 @@ struct imessaging_context { struct idr_context *dispatch_tree; struct irpc_list *irpc; struct idr_context *idr; + struct irpc_request *requests; struct server_id_db *names; struct timeval start_time; void *msg_dgm_ref; diff --git a/third_party/waf/waflib/Configure.py b/third_party/waf/waflib/Configure.py index e7333948489..f6fdc4e94a7 100644 --- a/third_party/waf/waflib/Configure.py +++ b/third_party/waf/waflib/Configure.py @@ -439,7 +439,7 @@ def find_program(self, filename, **kw): var = kw.get('var', '') if not var: - var = re.sub(r'[-.]', '_', filename[0].upper()) + var = re.sub(r'\W', '_', filename[0].upper()) path_list = kw.get('path_list', '') if path_list: diff --git a/third_party/waf/waflib/Context.py b/third_party/waf/waflib/Context.py index 4a0130b24a0..ee8c5c9c5df 100644 --- a/third_party/waf/waflib/Context.py +++ b/third_party/waf/waflib/Context.py @@ -18,13 +18,13 @@ else: import imp # the following 3 constants are updated on each new release (do not touch) -HEXVERSION=0x2001800 +HEXVERSION=0x2001900 """Constant updated on new releases""" -WAFVERSION="2.0.24" +WAFVERSION="2.0.25" """Constant updated on new releases""" -WAFREVISION="1af97c71f5a6756abf36d0f78ed8fd551596d7cb" +WAFREVISION="2db0b41b2805cd5db3b55476c06b23c1e46d319f" """Git revision when the waf version is updated""" WAFNAME="waf" diff --git a/third_party/waf/waflib/TaskGen.py b/third_party/waf/waflib/TaskGen.py index 89f63169910..32468f03d3c 100644 --- a/third_party/waf/waflib/TaskGen.py +++ b/third_party/waf/waflib/TaskGen.py @@ -400,7 +400,7 @@ def feature(*k): Decorator that registers a task generator method that will be executed when the object attribute ``feature`` contains the corresponding key(s):: - from waflib.Task import feature + from waflib.TaskGen import feature @feature('myfeature') def myfunction(self): print('that is my feature!') diff --git a/third_party/waf/waflib/Tools/msvc.py b/third_party/waf/waflib/Tools/msvc.py index 026a4c7fc48..d60f6702681 100644 --- a/third_party/waf/waflib/Tools/msvc.py +++ b/third_party/waf/waflib/Tools/msvc.py @@ -111,7 +111,7 @@ def options(opt): class MSVCVersion(object): def __init__(self, ver): - m = re.search('^(.*)\s+(\d+[.]\d+)', ver) + m = re.search(r'^(.*)\s+(\d+[.]\d+)', ver) if m: self.name = m.group(1) self.number = float(m.group(2)) diff --git a/third_party/waf/waflib/Tools/python.py b/third_party/waf/waflib/Tools/python.py index a23bd019335..b2dd1a9bcc3 100644 --- a/third_party/waf/waflib/Tools/python.py +++ b/third_party/waf/waflib/Tools/python.py @@ -53,7 +53,17 @@ py_compile.compile(sys.argv[1], sys.argv[2], sys.argv[3], True) Piece of Python code used in :py:class:`waflib.Tools.python.pyo` and :py:class:`waflib.Tools.python.pyc` for byte-compiling python files """ -DISTUTILS_IMP = ['from distutils.sysconfig import get_config_var, get_python_lib'] +DISTUTILS_IMP = """ +try: + from distutils.sysconfig import get_config_var, get_python_lib +except ImportError: + from sysconfig import get_config_var, get_path + def get_python_lib(*k, **kw): + keyword='platlib' if kw.get('plat_specific') else 'purelib' + if 'prefix' in kw: + return get_path(keyword, vars={'installed_base': kw['prefix'], 'platbase': kw['prefix']}) + return get_path(keyword) +""".splitlines() @before_method('process_source') @feature('py') @@ -219,7 +229,7 @@ def get_python_variables(self, variables, imports=None): try: out = self.cmd_and_log(self.env.PYTHON + ['-c', '\n'.join(program)], env=os_env) except Errors.WafError: - self.fatal('The distutils module is unusable: install "python-devel"?') + self.fatal('Could not run %r' % self.env.PYTHON) self.to_log(out) return_values = [] for s in out.splitlines(): @@ -291,7 +301,8 @@ def python_cross_compile(self, features='pyembed pyext'): @conf def check_python_headers(conf, features='pyembed pyext'): """ - Check for headers and libraries necessary to extend or embed python by using the module *distutils*. + Check for headers and libraries necessary to extend or embed python. + It may use the module *distutils* or sysconfig in newer Python versions. On success the environment variables xxx_PYEXT and xxx_PYEMBED are added: * PYEXT: for compiling python extensions @@ -439,7 +450,7 @@ def check_python_headers(conf, features='pyembed pyext'): env.LIBPATH_PYEXT = env.LIBPATH_PYEMBED env.LIB_PYEXT = env.LIB_PYEMBED - conf.to_log("Include path for Python extensions (found via distutils module): %r\n" % (dct['INCLUDEPY'],)) + conf.to_log("Found an include path for Python extensions: %r\n" % (dct['INCLUDEPY'],)) env.INCLUDES_PYEXT = [dct['INCLUDEPY']] env.INCLUDES_PYEMBED = [dct['INCLUDEPY']] @@ -452,15 +463,21 @@ def check_python_headers(conf, features='pyembed pyext'): env.append_unique('CXXFLAGS_PYEXT', ['-fno-strict-aliasing']) if env.CC_NAME == "msvc": - from distutils.msvccompiler import MSVCCompiler - dist_compiler = MSVCCompiler() - dist_compiler.initialize() - env.append_value('CFLAGS_PYEXT', dist_compiler.compile_options) - env.append_value('CXXFLAGS_PYEXT', dist_compiler.compile_options) - env.append_value('LINKFLAGS_PYEXT', dist_compiler.ldflags_shared) + try: + from distutils.msvccompiler import MSVCCompiler + except ImportError: + # From https://github.com/python/cpython/blob/main/Lib/distutils/msvccompiler.py + env.append_value('CFLAGS_PYEXT', [ '/nologo', '/Ox', '/MD', '/W3', '/GX', '/DNDEBUG']) + env.append_value('CXXFLAGS_PYEXT', [ '/nologo', '/Ox', '/MD', '/W3', '/GX', '/DNDEBUG']) + env.append_value('LINKFLAGS_PYEXT', ['/DLL', '/nologo', '/INCREMENTAL:NO']) + else: + dist_compiler = MSVCCompiler() + dist_compiler.initialize() + env.append_value('CFLAGS_PYEXT', dist_compiler.compile_options) + env.append_value('CXXFLAGS_PYEXT', dist_compiler.compile_options) + env.append_value('LINKFLAGS_PYEXT', dist_compiler.ldflags_shared) - # See if it compiles - conf.check(header_name='Python.h', define_name='HAVE_PYTHON_H', uselib='PYEMBED', fragment=FRAG, errmsg='Distutils not installed? Broken python installation? Get python-config now!') + conf.check(header_name='Python.h', define_name='HAVE_PYTHON_H', uselib='PYEMBED', fragment=FRAG, errmsg='Could not build a Python embedded interpreter') @conf def check_python_version(conf, minver=None): @@ -506,17 +523,9 @@ def check_python_version(conf, minver=None): else: # Finally, try to guess if Utils.is_win32: - (python_LIBDEST, pydir) = conf.get_python_variables( - ["get_config_var('LIBDEST') or ''", - "get_python_lib(standard_lib=0) or ''"]) + (pydir,) = conf.get_python_variables(["get_python_lib(standard_lib=0) or ''"]) else: - python_LIBDEST = None - (pydir,) = conf.get_python_variables( ["get_python_lib(standard_lib=0, prefix=%r) or ''" % conf.env.PREFIX]) - if python_LIBDEST is None: - if conf.env.LIBDIR: - python_LIBDEST = os.path.join(conf.env.LIBDIR, 'python' + pyver) - else: - python_LIBDEST = os.path.join(conf.env.PREFIX, 'lib', 'python' + pyver) + (pydir,) = conf.get_python_variables(["get_python_lib(standard_lib=0, prefix=%r) or ''" % conf.env.PREFIX]) if 'PYTHONARCHDIR' in conf.env: # Check if --pythonarchdir was specified @@ -526,7 +535,7 @@ def check_python_version(conf, minver=None): pyarchdir = conf.environ['PYTHONARCHDIR'] else: # Finally, try to guess - (pyarchdir, ) = conf.get_python_variables( ["get_python_lib(plat_specific=1, standard_lib=0, prefix=%r) or ''" % conf.env.PREFIX]) + (pyarchdir, ) = conf.get_python_variables(["get_python_lib(plat_specific=1, standard_lib=0, prefix=%r) or ''" % conf.env.PREFIX]) if not pyarchdir: pyarchdir = pydir @@ -585,13 +594,12 @@ def check_python_module(conf, module_name, condition=''): if ret == 'unknown version': conf.fatal('Could not check the %s version' % module_name) - from distutils.version import LooseVersion def num(*k): if isinstance(k[0], int): - return LooseVersion('.'.join([str(x) for x in k])) + return Utils.loose_version('.'.join([str(x) for x in k])) else: - return LooseVersion(k[0]) - d = {'num': num, 'ver': LooseVersion(ret)} + return Utils.loose_version(k[0]) + d = {'num': num, 'ver': Utils.loose_version(ret)} ev = eval(condition, {}, d) if not ev: conf.fatal('The %s version does not satisfy the requirements' % module_name) diff --git a/third_party/waf/waflib/Utils.py b/third_party/waf/waflib/Utils.py index 669490ca908..ea0f7a9db88 100644 --- a/third_party/waf/waflib/Utils.py +++ b/third_party/waf/waflib/Utils.py @@ -452,6 +452,8 @@ def console_encoding(): pass else: if codepage: + if 65001 == codepage and sys.version_info < (3, 3): + return 'utf-8' return 'cp%d' % codepage return sys.stdout.encoding or ('cp1252' if is_win32 else 'latin-1') @@ -868,6 +870,19 @@ def lib64(): return '64' return '' +def loose_version(ver_str): + # private for the time being! + # see #2402 + lst = re.split(r'([.]|\\d+|[a-zA-Z])', ver_str) + ver = [] + for i, val in enumerate(lst): + try: + ver.append(int(val)) + except ValueError: + if val != '.': + ver.append(val) + return ver + def sane_path(p): # private function for the time being! return os.path.abspath(os.path.expanduser(p)) diff --git a/third_party/waf/waflib/extras/cpplint.py b/third_party/waf/waflib/extras/cpplint.py index 8cdd6ddacb3..afc09c9472c 100644 --- a/third_party/waf/waflib/extras/cpplint.py +++ b/third_party/waf/waflib/extras/cpplint.py @@ -169,7 +169,7 @@ class cpplint(Task.Task): global critical_errors with cpplint_wrapper(get_cpplint_logger(self.env.CPPLINT_OUTPUT), self.env.CPPLINT_BREAK, self.env.CPPLINT_OUTPUT): params = {key: str(self.env[key]) for key in self.env if 'CPPLINT_' in key} - if params['CPPLINT_OUTPUT'] is 'waf': + if params['CPPLINT_OUTPUT'] == 'waf': params['CPPLINT_OUTPUT'] = 'emacs' params['CPPLINT'] = self.env.get_flat('CPPLINT') cmd = Utils.subst_vars(CPPLINT_STR, params) diff --git a/third_party/waf/waflib/extras/fc_nfort.py b/third_party/waf/waflib/extras/fc_fujitsu.py similarity index 60% copy from third_party/waf/waflib/extras/fc_nfort.py copy to third_party/waf/waflib/extras/fc_fujitsu.py index c25886b8e70..cae676c207c 100644 --- a/third_party/waf/waflib/extras/fc_nfort.py +++ b/third_party/waf/waflib/extras/fc_fujitsu.py @@ -1,22 +1,22 @@ #! /usr/bin/env python # encoding: utf-8 -# Detection of the NEC Fortran compiler for Aurora Tsubasa +# Detection of the Fujitsu Fortran compiler for ARM64FX import re from waflib.Tools import fc,fc_config,fc_scan from waflib.Configure import conf from waflib.Tools.compiler_fc import fc_compiler -fc_compiler['linux'].append('fc_nfort') +fc_compiler['linux'].append('fc_fujitsu') @conf -def find_nfort(conf): - fc=conf.find_program(['nfort'],var='FC') - conf.get_nfort_version(fc) - conf.env.FC_NAME='NFORT' +def find_fujitsu(conf): + fc=conf.find_program(['frtpx'],var='FC') + conf.get_fujitsu_version(fc) + conf.env.FC_NAME='FUJITSU' conf.env.FC_MOD_CAPITALIZATION='lower' @conf -def nfort_flags(conf): +def fujitsu_flags(conf): v=conf.env v['_FCMODOUTFLAGS']=[] v['FCFLAGS_DEBUG']=[] @@ -26,8 +26,8 @@ def nfort_flags(conf): v['FCSHLIB_MARKER']='' @conf -def get_nfort_version(conf,fc): - version_re=re.compile(r"nfort\s*\(NFORT\)\s*(?P<major>\d+)\.(?P<minor>\d+)\.",re.I).search +def get_fujitsu_version(conf,fc): + version_re=re.compile(r"frtpx\s*\(FRT\)\s*(?P<major>\d+)\.(?P<minor>\d+)\.",re.I).search cmd=fc+['--version'] out,err=fc_config.getoutput(conf,cmd,stdin=False) if out: @@ -36,17 +36,17 @@ def get_nfort_version(conf,fc): match=version_re(err) if not match: return(False) - conf.fatal('Could not determine the NEC NFORT Fortran compiler version.') + conf.fatal('Could not determine the Fujitsu FRT Fortran compiler version.') else: k=match.groupdict() conf.env['FC_VERSION']=(k['major'],k['minor']) def configure(conf): - conf.find_nfort() - conf.find_program('nar',var='AR') + conf.find_fujitsu() + conf.find_program('ar',var='AR') conf.add_os_flags('ARFLAGS') if not conf.env.ARFLAGS: conf.env.ARFLAGS=['rcs'] conf.fc_flags() conf.fc_add_flags() - conf.nfort_flags() + conf.fujitsu_flags() diff --git a/third_party/waf/waflib/extras/gccdeps.py b/third_party/waf/waflib/extras/gccdeps.py index 9e9952f2f7d..5d2f0dd230c 100644 --- a/third_party/waf/waflib/extras/gccdeps.py +++ b/third_party/waf/waflib/extras/gccdeps.py @@ -17,7 +17,7 @@ Usage:: import os, re, threading from waflib import Task, Logs, Utils, Errors -from waflib.Tools import c_preproc +from waflib.Tools import asm, c, c_preproc, cxx from waflib.TaskGen import before_method, feature lock = threading.Lock() diff --git a/third_party/waf/waflib/extras/pyqt5.py b/third_party/waf/waflib/extras/pyqt5.py index 9c941764cc2..0c083a1247a 100644 --- a/third_party/waf/waflib/extras/pyqt5.py +++ b/third_party/waf/waflib/extras/pyqt5.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # encoding: utf-8 -# Federico Pellegrin, 2016-2019 (fedepell) adapted for Python +# Federico Pellegrin, 2016-2022 (fedepell) adapted for Python """ This tool helps with finding Python Qt5 tools and libraries, @@ -137,7 +137,7 @@ class pyrcc(Task.Task): Processes ``.qrc`` files """ color = 'BLUE' - run_str = '${QT_PYRCC} ${SRC} -o ${TGT}' + run_str = '${QT_PYRCC} ${QT_PYRCC_FLAGS} ${SRC} -o ${TGT}' ext_out = ['.py'] def rcname(self): @@ -175,7 +175,7 @@ class ui5py(Task.Task): Processes ``.ui`` files for python """ color = 'BLUE' - run_str = '${QT_PYUIC} ${SRC} -o ${TGT}' + run_str = '${QT_PYUIC} ${QT_PYUIC_FLAGS} ${SRC} -o ${TGT}' ext_out = ['.py'] class ts2qm(Task.Task): @@ -216,17 +216,17 @@ def find_pyqt5_binaries(self): self.find_program(['pyrcc5'], var='QT_PYRCC') self.find_program(['pylupdate5'], var='QT_PYLUPDATE') elif getattr(Options.options, 'want_pyside2', True): - self.find_program(['pyside2-uic'], var='QT_PYUIC') - self.find_program(['pyside2-rcc'], var='QT_PYRCC') - self.find_program(['pyside2-lupdate'], var='QT_PYLUPDATE') + self.find_program(['pyside2-uic','uic-qt5'], var='QT_PYUIC') + self.find_program(['pyside2-rcc','rcc-qt5'], var='QT_PYRCC') + self.find_program(['pyside2-lupdate','lupdate-qt5'], var='QT_PYLUPDATE') -- Samba Shared Repository