[SCM] Samba Shared Repository - branch master updated

Stefan Metzmacher metze at samba.org
Fri Jan 6 15:05:01 UTC 2023


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 <slow at 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 <slow at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>
    
    Autobuild-User(master): Stefan Metzmacher <metze at samba.org>
    Autobuild-Date(master): Fri Jan  6 15:04:46 UTC 2023 on sn-devel-184

commit 0d096931196524a2d1bf59470bc629dc9231131e
Author: Stefan Metzmacher <metze at 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 <metze at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit c29c487c5ab68560a73012a2dddad78009b08eef
Author: Andreas Schneider <asn at 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 <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at 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



More information about the samba-cvs mailing list