Your message dated Sat, 25 Jun 2022 13:50:39 +0000
with message-id <[email protected]>
and subject line Bug#1013570: fixed in pythran 0.11.0+ds-1
has caused the Debian Bug report #1013570,
regarding pythran: FTBFS: conjugate.hpp:22:36: error: type/value mismatch at 
argument 2 in template parameter list for ‘template<class T, class A> class 
xsimd::batch’
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
1013570: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1013570
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Source: pythran
Version: 0.10.0+ds2-8
Severity: serious
Justification: FTBFS
Tags: bookworm sid ftbfs
User: [email protected]
Usertags: ftbfs-20220624 ftbfs-bookworm

Hi,

During a rebuild of all packages in sid, your package failed to build
on amd64.


Relevant part (hopefully):
> make[1]: Entering directory '/<<PKGBUILDDIR>>'
> dh_auto_test
> I: pybuild pybuild:300: cp -r /<<PKGBUILDDIR>>/pythran/tests 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran
> I: pybuild base:239: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build; 
> python3.9 -m pytest pythran/tests/test_base.py
> ============================= test session starts 
> ==============================
> platform linux -- Python 3.9.13, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
> rootdir: /<<PKGBUILDDIR>>
> collected 196 items
> 
> pythran/tests/test_base.py .....................................F....... [ 
> 22%]
> .......s................................................................ [ 
> 59%]
> ........................................................................ [ 
> 96%]
> .......                                                                  
> [100%]
> 
> =================================== FAILURES 
> ===================================
> __________________________ TestBase.test_complex_conj 
> __________________________
> 
> attrs = {'cmdclass': {'bdist_rpm': <class 
> 'numpy.distutils.command.bdist_rpm.bdist_rpm'>, 'build': <class 
> 'numpy.distutils.com...t.PythranExtension('test_complex_conjugate') at 
> 0x7fc214d70e20>], 'headers': [], 'name': 'test_complex_conjugate', ...}
> klass = <class 'numpy.distutils.numpy_distribution.NumpyDistribution'>
> dist = <numpy.distutils.numpy_distribution.NumpyDistribution object at 
> 0x7fc214d70d90>
> ok = True
> 
>     def setup (**attrs):
>         """The gateway to the Distutils: do everything your setup script needs
>         to do, in a highly flexible and user-driven way.  Briefly: create a
>         Distribution instance; find and parse config files; parse the command
>         line; run each Distutils command found there, customized by the 
> options
>         supplied to 'setup()' (as keyword arguments), in config files, and on
>         the command line.
>     
>         The Distribution instance might be an instance of a class supplied via
>         the 'distclass' keyword argument to 'setup'; if no such class is
>         supplied, then the Distribution class (in dist.py) is instantiated.
>         All other arguments to 'setup' (except for 'cmdclass') are used to set
>         attributes of the Distribution instance.
>     
>         The 'cmdclass' argument, if supplied, is a dictionary mapping command
>         names to command classes.  Each command encountered on the command 
> line
>         will be turned into a command class, which is in turn instantiated; 
> any
>         class found in 'cmdclass' is used in place of the default, which is
>         (for command 'foo_bar') class 'foo_bar' in module
>         'distutils.command.foo_bar'.  The command class must provide a
>         'user_options' attribute which is a list of option specifiers for
>         'distutils.fancy_getopt'.  Any command-line options between the 
> current
>         and the next command are used to set attributes of the current command
>         object.
>     
>         When the entire command-line has been successfully parsed, calls the
>         'run()' method on each command object in turn.  This method will be
>         driven entirely by the Distribution object (which each command object
>         has a reference to, thanks to its constructor), and the
>         command-specific options that became attributes of each command
>         object.
>         """
>     
>         global _setup_stop_after, _setup_distribution
>     
>         # Determine the distribution class -- either caller-supplied or
>         # our Distribution (see below).
>         klass = attrs.get('distclass')
>         if klass:
>             del attrs['distclass']
>         else:
>             klass = Distribution
>     
>         if 'script_name' not in attrs:
>             attrs['script_name'] = os.path.basename(sys.argv[0])
>         if 'script_args'  not in attrs:
>             attrs['script_args'] = sys.argv[1:]
>     
>         # Create the Distribution instance, using the remaining arguments
>         # (ie. everything except distclass) to initialize it
>         try:
>             _setup_distribution = dist = klass(attrs)
>         except DistutilsSetupError as msg:
>             if 'name' not in attrs:
>                 raise SystemExit("error in setup command: %s" % msg)
>             else:
>                 raise SystemExit("error in %s setup command: %s" % \
>                       (attrs['name'], msg))
>     
>         if _setup_stop_after == "init":
>             return dist
>     
>         # Find and parse the config file(s): they will override options from
>         # the setup script, but be overridden by the command line.
>         dist.parse_config_files()
>     
>         if DEBUG:
>             print("options (after parsing config files):")
>             dist.dump_option_dicts()
>     
>         if _setup_stop_after == "config":
>             return dist
>     
>         # Parse the command line and override config files; any
>         # command-line errors are the end user's fault, so turn them into
>         # SystemExit to suppress tracebacks.
>         try:
>             ok = dist.parse_command_line()
>         except DistutilsArgError as msg:
>             raise SystemExit(gen_usage(dist.script_name) + "\nerror: %s" % 
> msg)
>     
>         if DEBUG:
>             print("options (after parsing command line):")
>             dist.dump_option_dicts()
>     
>         if _setup_stop_after == "commandline":
>             return dist
>     
>         # And finally, run all the commands found on the command line.
>         if ok:
>             try:
> >               dist.run_commands()
> 
> /usr/lib/python3.9/distutils/core.py:148: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <numpy.distutils.numpy_distribution.NumpyDistribution object at 
> 0x7fc214d70d90>
> 
>     def run_commands(self):
>         """Run each command that was seen on the setup script command line.
>         Uses the list of commands found and cache of command objects
>         created by 'get_command_obj()'.
>         """
>         for cmd in self.commands:
> >           self.run_command(cmd)
> 
> /usr/lib/python3.9/distutils/dist.py:966: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <numpy.distutils.numpy_distribution.NumpyDistribution object at 
> 0x7fc214d70d90>
> command = 'build_ext'
> 
>     def run_command(self, command):
>         """Do whatever it takes to run a command (including nothing at all,
>         if the command has already been run).  Specifically: if we have
>         already created and run the command named by 'command', return
>         silently without doing anything.  If the command named by 'command'
>         doesn't even have a command object yet, create one.  Then invoke
>         'run()' on that command object (or an existing one).
>         """
>         # Already been here, done that? then return silently.
>         if self.have_run.get(command):
>             return
>     
>         log.info("running %s", command)
>         cmd_obj = self.get_command_obj(command)
>         cmd_obj.ensure_finalized()
> >       cmd_obj.run()
> 
> /usr/lib/python3.9/distutils/dist.py:985: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <pythran.dist.PythranBuildExt object at 0x7fc214d893a0>
> 
>     def run(self):
>         from distutils.ccompiler import new_compiler
>     
>         # 'self.extensions', as supplied by setup.py, is a list of
>         # Extension instances.  See the documentation for Extension (in
>         # distutils.extension) for details.
>         #
>         # For backwards compatibility with Distutils 0.8.2 and earlier, we
>         # also allow the 'extensions' list to be a list of tuples:
>         #    (ext_name, build_info)
>         # where build_info is a dictionary containing everything that
>         # Extension instances do except the name, with a few things being
>         # differently named.  We convert these 2-tuples to Extension
>         # instances as needed.
>     
>         if not self.extensions:
>             return
>     
>         # If we were asked to build any C/C++ libraries, make sure that the
>         # directory where we put them is in the library search path for
>         # linking extensions.
>         if self.distribution.has_c_libraries():
>             build_clib = self.get_finalized_command('build_clib')
>             self.libraries.extend(build_clib.get_library_names() or [])
>             self.library_dirs.append(build_clib.build_clib)
>     
>         # Setup the CCompiler object that we'll use to do all the
>         # compiling and linking
>         self.compiler = new_compiler(compiler=self.compiler,
>                                      verbose=self.verbose,
>                                      dry_run=self.dry_run,
>                                      force=self.force)
>         customize_compiler(self.compiler)
>         # If we are cross-compiling, init the compiler now (if we are not
>         # cross-compiling, init would not hurt, but people may rely on
>         # late initialization of compiler even if they shouldn't...)
>         if os.name == 'nt' and self.plat_name != get_platform():
>             self.compiler.initialize(self.plat_name)
>     
>         # And make sure that any compile/link-related options (which might
>         # come from the command-line or from the setup script) are set in
>         # that CCompiler object -- that way, they automatically apply to
>         # all compiling and linking done here.
>         if self.include_dirs is not None:
>             self.compiler.set_include_dirs(self.include_dirs)
>         if self.define is not None:
>             # 'define' option is a list of (name,value) tuples
>             for (name, value) in self.define:
>                 self.compiler.define_macro(name, value)
>         if self.undef is not None:
>             for macro in self.undef:
>                 self.compiler.undefine_macro(macro)
>         if self.libraries is not None:
>             self.compiler.set_libraries(self.libraries)
>         if self.library_dirs is not None:
>             self.compiler.set_library_dirs(self.library_dirs)
>         if self.rpath is not None:
>             self.compiler.set_runtime_library_dirs(self.rpath)
>         if self.link_objects is not None:
>             self.compiler.set_link_objects(self.link_objects)
>     
>         # Now actually compile and link everything.
> >       self.build_extensions()
> 
> /usr/lib/python3.9/distutils/command/build_ext.py:340: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <pythran.dist.PythranBuildExt object at 0x7fc214d893a0>
> 
>     def build_extensions(self):
>         # First, sanity-check the 'extensions' list
>         self.check_extensions_list(self.extensions)
>         if self.parallel:
>             self._build_extensions_parallel()
>         else:
> >           self._build_extensions_serial()
> 
> /usr/lib/python3.9/distutils/command/build_ext.py:449: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <pythran.dist.PythranBuildExt object at 0x7fc214d893a0>
> 
>     def _build_extensions_serial(self):
>         for ext in self.extensions:
>             with self._filter_build_errors(ext):
> >               self.build_extension(ext)
> 
> /usr/lib/python3.9/distutils/command/build_ext.py:474: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <pythran.dist.PythranBuildExt object at 0x7fc214d893a0>
> ext = <pythran.dist.PythranExtension('test_complex_conjugate') at 
> 0x7fc214d70e20>
> 
>     def build_extension(self, ext):
>         StringTypes = str,
>     
>         def get_value(obj, key):
>             var = getattr(obj, key)
>             if isinstance(var, Iterable) and not isinstance(var, StringTypes):
>                 return var[0]
>             else:
>                 return var
>     
>         def set_value(obj, key, value):
>             var = getattr(obj, key)
>             if isinstance(var, Iterable) and not isinstance(var, StringTypes):
>                 var[0] = value
>             else:
>                 setattr(obj, key, value)
>     
>         prev = {
>                 # linux-like
>                 'preprocessor': None,
>                 'compiler_cxx': None,
>                 'compiler_so': None,
>                 'compiler': None,
>                 'linker_exe': None,
>                 'linker_so': None,
>                 # Windows-like
>                 'cc': None,
>         }
>         # Backup compiler settings
>         for key in list(prev.keys()):
>             if hasattr(self.compiler, key):
>                 prev[key] = get_value(self.compiler, key)
>             else:
>                 del prev[key]
>     
>         # try hard to modify the compiler
>         if getattr(ext, 'cxx', None) is not None:
>             for comp in prev:
>                 if hasattr(self.compiler, comp):
>                     set_value(self.compiler, comp, ext.cxx)
>     
>         find_exe = None
>         if getattr(ext, 'cc', None) is not None:
>             try:
>                 import distutils._msvccompiler as msvc
>                 # install hook
>                 find_exe = msvc._find_exe
>     
>                 def _find_exe(exe, *args, **kwargs):
>                     if exe == 'cl.exe':
>                         exe = ext.cc
>                     return find_exe(exe, *args, **kwargs)
>     
>                 msvc._find_exe = _find_exe
>             except ImportError:
>                 pass
>     
>         # In general, distutils uses -Wstrict-prototypes, but this option
>         # is not valid for C++ code, only for C.  Remove it if it's there
>         # to avoid a spurious warning on every compilation.
>         for flag in cfg.cfg.get('compiler', "ignoreflags").split():
>             for target in ('compiler_so', 'linker_so'):
>                 try:
>                     while True:
>                         getattr(self.compiler, target).remove(flag)
>                 except (AttributeError, ValueError):
>                     pass
>     
>         # Remove -arch i386 if 'x86_64' is specified, otherwise incorrect
>         # code is generated, at least on OSX
>         if hasattr(self.compiler, 'compiler_so'):
>             archs = defaultdict(list)
>             for i, flag in enumerate(self.compiler.compiler_so[1:]):
>                 if self.compiler.compiler_so[i] == '-arch':
>                     archs[flag].append(i + 1)
>             if 'x86_64' in archs and 'i386' in archs:
>                 for i in archs['i386']:
>                     self.compiler.compiler_so[i] = 'x86_64'
>     
>         try:
> >           return super(PythranBuildExtMixIn, self).build_extension(ext)
> 
> pythran/dist.py:109: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <pythran.dist.PythranBuildExt object at 0x7fc214d893a0>
> ext = <pythran.dist.PythranExtension('test_complex_conjugate') at 
> 0x7fc214d70e20>
> 
>     def build_extension(self, ext):
>         sources = ext.sources
>         if sources is None or not isinstance(sources, (list, tuple)):
>             raise DistutilsSetupError(
>                   "in 'ext_modules' option (extension '%s'), "
>                   "'sources' must be present and must be "
>                   "a list of source filenames" % ext.name)
>         # sort to make the resulting .so file build reproducible
>         sources = sorted(sources)
>     
>         ext_path = self.get_ext_fullpath(ext.name)
>         depends = sources + ext.depends
>         if not (self.force or newer_group(depends, ext_path, 'newer')):
>             log.debug("skipping '%s' extension (up-to-date)", ext.name)
>             return
>         else:
>             log.info("building '%s' extension", ext.name)
>     
>         # First, scan the sources for SWIG definition files (.i), run
>         # SWIG on 'em to create .c files, and modify the sources list
>         # accordingly.
>         sources = self.swig_sources(sources, ext)
>     
>         # Next, compile the source code to object files.
>     
>         # XXX not honouring 'define_macros' or 'undef_macros' -- the
>         # CCompiler API needs to change to accommodate this, and I
>         # want to do one thing at a time!
>     
>         # Two possible sources for extra compiler arguments:
>         #   - 'extra_compile_args' in Extension object
>         #   - CFLAGS environment variable (not particularly
>         #     elegant, but people seem to expect it and I
>         #     guess it's useful)
>         # The environment variable should take precedence, and
>         # any sensible compiler will give precedence to later
>         # command line args.  Hence we combine them in order:
>         extra_args = ext.extra_compile_args or []
>     
>         macros = ext.define_macros[:]
>         for undef in ext.undef_macros:
>             macros.append((undef,))
>     
> >       objects = self.compiler.compile(sources,
>                                          output_dir=self.build_temp,
>                                          macros=macros,
>                                          include_dirs=ext.include_dirs,
>                                          debug=self.debug,
>                                          extra_postargs=extra_args,
>                                          depends=ext.depends)
> 
> /usr/lib/python3.9/distutils/command/build_ext.py:529: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <distutils.unixccompiler.UnixCCompiler object at 0x7fc214d89580>
> args = (['/tmp/tmp686izx2b.cpp'],)
> kw = {'debug': None, 'depends': [], 'extra_postargs': ['-std=c++11', 
> '-fno-math-errno', '-fvisibility=hidden', 
> '-fno-wrapv'...ythran/build/pythran', 
> '/usr/lib/python3/dist-packages/numpy/core/include', '/usr/local/include', 
> '/usr/include'], ...}
> 
> >   m = lambda self, *args, **kw: func(self, *args, **kw)
> 
> /usr/lib/python3/dist-packages/numpy/distutils/ccompiler.py:89: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <distutils.unixccompiler.UnixCCompiler object at 0x7fc214d89580>
> sources = ['/tmp/tmp686izx2b.cpp'], output_dir = '/tmp/tmpch4dkgb_'
> macros = [('ENABLE_PYTHON_MODULE', None), ('__PYTHRAN__', '3'), 
> ('PYTHRAN_BLAS_BLAS', None)]
> include_dirs = 
> ['/<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran', 
> '/usr/lib/python3/dist-packages/numpy/core/include', '/usr/local/include', 
> '/usr/include']
> debug = None, extra_preargs = None
> extra_postargs = ['-std=c++11', '-fno-math-errno', '-fvisibility=hidden', 
> '-fno-wrapv', '-Wno-unused-function', '-Wno-int-in-bool-context', ...]
> depends = []
> 
>     def CCompiler_compile(self, sources, output_dir=None, macros=None,
>                           include_dirs=None, debug=0, extra_preargs=None,
>                           extra_postargs=None, depends=None):
>         """
>         Compile one or more source files.
>     
>         Please refer to the Python distutils API reference for more details.
>     
>         Parameters
>         ----------
>         sources : list of str
>             A list of filenames
>         output_dir : str, optional
>             Path to the output directory.
>         macros : list of tuples
>             A list of macro definitions.
>         include_dirs : list of str, optional
>             The directories to add to the default include file search path for
>             this compilation only.
>         debug : bool, optional
>             Whether or not to output debug symbols in or alongside the object
>             file(s).
>         extra_preargs, extra_postargs : ?
>             Extra pre- and post-arguments.
>         depends : list of str, optional
>             A list of file names that all targets depend on.
>     
>         Returns
>         -------
>         objects : list of str
>             A list of object file names, one per source file `sources`.
>     
>         Raises
>         ------
>         CompileError
>             If compilation fails.
>     
>         """
>         # This method is effective only with Python >=2.3 distutils.
>         # Any changes here should be applied also to fcompiler.compile
>         # method to support pre Python 2.3 distutils.
>         global _job_semaphore
>     
>         jobs = get_num_build_jobs()
>     
>         # setup semaphore to not exceed number of compile jobs when 
> parallelized at
>         # extension level (python >= 3.5)
>         with _global_lock:
>             if _job_semaphore is None:
>                 _job_semaphore = threading.Semaphore(jobs)
>     
>         if not sources:
>             return []
>         from numpy.distutils.fcompiler import (FCompiler, is_f_file,
>                                                has_f90_header)
>         if isinstance(self, FCompiler):
>             display = []
>             for fc in ['f77', 'f90', 'fix']:
>                 fcomp = getattr(self, 'compiler_'+fc)
>                 if fcomp is None:
>                     continue
>                 display.append("Fortran %s compiler: %s" % (fc, ' 
> '.join(fcomp)))
>             display = '\n'.join(display)
>         else:
>             ccomp = self.compiler_so
>             display = "C compiler: %s\n" % (' '.join(ccomp),)
>         log.info(display)
>         macros, objects, extra_postargs, pp_opts, build = \
>                 self._setup_compile(output_dir, macros, include_dirs, sources,
>                                     depends, extra_postargs)
>         cc_args = self._get_cc_args(pp_opts, debug, extra_preargs)
>         display = "compile options: '%s'" % (' '.join(cc_args))
>         if extra_postargs:
>             display += "\nextra options: '%s'" % (' '.join(extra_postargs))
>         log.info(display)
>     
>         def single_compile(args):
>             obj, (src, ext) = args
>             if not _needs_build(obj, cc_args, extra_postargs, pp_opts):
>                 return
>     
>             # check if we are currently already processing the same object
>             # happens when using the same source in multiple extensions
>             while True:
>                 # need explicit lock as there is no atomic check and add with 
> GIL
>                 with _global_lock:
>                     # file not being worked on, start working
>                     if obj not in _processing_files:
>                         _processing_files.add(obj)
>                         break
>                 # wait for the processing to end
>                 time.sleep(0.1)
>     
>             try:
>                 # retrieve slot from our #job semaphore and build
>                 with _job_semaphore:
>                     self._compile(obj, src, ext, cc_args, extra_postargs, 
> pp_opts)
>             finally:
>                 # register being done processing
>                 with _global_lock:
>                     _processing_files.remove(obj)
>     
>     
>         if isinstance(self, FCompiler):
>             objects_to_build = list(build.keys())
>             f77_objects, other_objects = [], []
>             for obj in objects:
>                 if obj in objects_to_build:
>                     src, ext = build[obj]
>                     if self.compiler_type=='absoft':
>                         obj = cyg2win32(obj)
>                         src = cyg2win32(src)
>                     if is_f_file(src) and not has_f90_header(src):
>                         f77_objects.append((obj, (src, ext)))
>                     else:
>                         other_objects.append((obj, (src, ext)))
>     
>             # f77 objects can be built in parallel
>             build_items = f77_objects
>             # build f90 modules serial, module files are generated during
>             # compilation and may be used by files later in the list so the
>             # ordering is important
>             for o in other_objects:
>                 single_compile(o)
>         else:
>             build_items = build.items()
>     
>         if len(build) > 1 and jobs > 1:
>             # build parallel
>             import multiprocessing.pool
>             pool = multiprocessing.pool.ThreadPool(jobs)
>             pool.map(single_compile, build_items)
>             pool.close()
>         else:
>             # build serial
>             for o in build_items:
> >               single_compile(o)
> 
> /usr/lib/python3/dist-packages/numpy/distutils/ccompiler.py:366: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> args = ('/tmp/tmpch4dkgb_/tmp/tmp686izx2b.o', ('/tmp/tmp686izx2b.cpp', 
> '.cpp'))
> 
>     def single_compile(args):
>         obj, (src, ext) = args
>         if not _needs_build(obj, cc_args, extra_postargs, pp_opts):
>             return
>     
>         # check if we are currently already processing the same object
>         # happens when using the same source in multiple extensions
>         while True:
>             # need explicit lock as there is no atomic check and add with GIL
>             with _global_lock:
>                 # file not being worked on, start working
>                 if obj not in _processing_files:
>                     _processing_files.add(obj)
>                     break
>             # wait for the processing to end
>             time.sleep(0.1)
>     
>         try:
>             # retrieve slot from our #job semaphore and build
>             with _job_semaphore:
> >               self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
> 
> /usr/lib/python3/dist-packages/numpy/distutils/ccompiler.py:326: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <distutils.unixccompiler.UnixCCompiler object at 0x7fc214d89580>
> args = ('/tmp/tmpch4dkgb_/tmp/tmp686izx2b.o', '/tmp/tmp686izx2b.cpp', '.cpp', 
> ['-DENABLE_PYTHON_MODULE', '-D__PYTHRAN__=3', 
> '...ython3_3.9_pythran/build/pythran', 
> '-I/usr/lib/python3/dist-packages/numpy/core/include', 
> '-I/usr/local/include', ...])
> kw = {}
> 
> >   m = lambda self, *args, **kw: func(self, *args, **kw)
> 
> /usr/lib/python3/dist-packages/numpy/distutils/ccompiler.py:89: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <distutils.unixccompiler.UnixCCompiler object at 0x7fc214d89580>
> obj = '/tmp/tmpch4dkgb_/tmp/tmp686izx2b.o', src = '/tmp/tmp686izx2b.cpp'
> ext = '.cpp'
> cc_args = ['-DENABLE_PYTHON_MODULE', '-D__PYTHRAN__=3', 
> '-DPYTHRAN_BLAS_BLAS', 
> '-I/<<PKGBUILDDIR>>/.pybu...python3_3.9_pythran/build/pythran', 
> '-I/usr/lib/python3/dist-packages/numpy/core/include', 
> '-I/usr/local/include', ...]
> extra_postargs = ['-std=c++11', '-fno-math-errno', '-fvisibility=hidden', 
> '-fno-wrapv', '-Wno-unused-function', '-Wno-int-in-bool-context', ...]
> pp_opts = ['-DENABLE_PYTHON_MODULE', '-D__PYTHRAN__=3', 
> '-DPYTHRAN_BLAS_BLAS', 
> '-I/<<PKGBUILDDIR>>/.pybu...python3_3.9_pythran/build/pythran', 
> '-I/usr/lib/python3/dist-packages/numpy/core/include', 
> '-I/usr/local/include', ...]
> 
>     def UnixCCompiler__compile(self, obj, src, ext, cc_args, extra_postargs, 
> pp_opts):
>         """Compile a single source files with a Unix-style compiler."""
>         # HP ad-hoc fix, see ticket 1383
>         ccomp = self.compiler_so
>         if ccomp[0] == 'aCC':
>             # remove flags that will trigger ANSI-C mode for aCC
>             if '-Ae' in ccomp:
>                 ccomp.remove('-Ae')
>             if '-Aa' in ccomp:
>                 ccomp.remove('-Aa')
>             # add flags for (almost) sane C++ handling
>             ccomp += ['-AA']
>             self.compiler_so = ccomp
>         # ensure OPT environment variable is read
>         if 'OPT' in os.environ:
>             # XXX who uses this?
>             from sysconfig import get_config_vars
>             opt = " ".join(os.environ['OPT'].split())
>             gcv_opt = " ".join(get_config_vars('OPT')[0].split())
>             ccomp_s = " ".join(self.compiler_so)
>             if opt not in ccomp_s:
>                 ccomp_s = ccomp_s.replace(gcv_opt, opt)
>                 self.compiler_so = ccomp_s.split()
>             llink_s = " ".join(self.linker_so)
>             if opt not in llink_s:
>                 self.linker_so = llink_s.split() + opt.split()
>     
>         display = '%s: %s' % (os.path.basename(self.compiler_so[0]), src)
>     
>         # gcc style automatic dependencies, outputs a makefile (-MF) that 
> lists
>         # all headers needed by a c file as a side effect of compilation 
> (-MMD)
>         if getattr(self, '_auto_depends', False):
>             deps = ['-MMD', '-MF', obj + '.d']
>         else:
>             deps = []
>     
>         try:
>             self.spawn(self.compiler_so + cc_args + [src, '-o', obj] + deps +
>                        extra_postargs, display = display)
>         except DistutilsExecError as e:
>             msg = str(e)
> >           raise CompileError(msg) from None
> E           distutils.errors.CompileError: Command "x86_64-linux-gnu-gcc 
> -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g 
> -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g 
> -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat 
> -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC 
> -DENABLE_PYTHON_MODULE -D__PYTHRAN__=3 -DPYTHRAN_BLAS_BLAS 
> -I/<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran 
> -I/usr/lib/python3/dist-packages/numpy/core/include -I/usr/local/include 
> -I/usr/include -I/usr/include/python3.9 -c /tmp/tmp686izx2b.cpp -o 
> /tmp/tmpch4dkgb_/tmp/tmp686izx2b.o -std=c++11 -fno-math-errno 
> -fvisibility=hidden -fno-wrapv -Wno-unused-function -Wno-int-in-bool-context 
> -Wno-unknown-warning-option -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. 
> -fstack-protector-strong -Wformat -Werror=format-security -O0 -Wall -Werror 
> -UNDEBUG -Wno-unused-function -Wno-int-in-bool-context 
> -Wno-unknown-warning-option -Wno-unused-local-typedefs -Wno-missing-braces 
> -Wno-unknown-pragmas" failed with exit status 1
> 
> /usr/lib/python3/dist-packages/numpy/distutils/unixccompiler.py:57: 
> CompileError
> 
> During handling of the above exception, another exception occurred:
> 
> module_name = 'test_complex_conjugate', cxxfile = '/tmp/tmp686izx2b.cpp'
> output_binary = None
> kwargs = {'extra_compile_args': ['-O0', '-Wall', '-Werror', '-UNDEBUG', 
> '-Wno-unused-function', '-Wno-int-in-bool-context', ...]}
> builddir = '/tmp/tmpbgv4we0u', buildtmp = '/tmp/tmpch4dkgb_'
> extension = <pythran.dist.PythranExtension('test_complex_conjugate') at 
> 0x7fc214d70e20>
> 
>     def compile_cxxfile(module_name, cxxfile, output_binary=None, **kwargs):
>         '''c++ file -> native module
>         Return the filename of the produced shared library
>         Raises CompileError on failure
>     
>         '''
>     
>         builddir = mkdtemp()
>         buildtmp = mkdtemp()
>     
>         extension = PythranExtension(module_name,
>                                      [cxxfile],
>                                      **kwargs)
>     
>         try:
> >           setup(name=module_name,
>                   ext_modules=[extension],
>                   cmdclass={"build_ext": PythranBuildExt},
>                   # fake CLI call
>                   script_name='setup.py',
>                   script_args=['--verbose'
>                                if logger.isEnabledFor(logging.INFO)
>                                else '--quiet',
>                                'build_ext',
>                                '--build-lib', builddir,
>                                '--build-temp', buildtmp]
>                   )
> 
> pythran/toolchain.py:299: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> attr = {'cmdclass': {'build_ext': <class 'pythran.dist.PythranBuildExt'>}, 
> 'ext_modules': [<pythran.dist.PythranExtension('te... 'script_args': 
> ['--verbose', 'build_ext', '--build-lib', '/tmp/tmpbgv4we0u', '--build-temp', 
> '/tmp/tmpch4dkgb_'], ...}
> cmdclass = {'bdist_rpm': <class 
> 'numpy.distutils.command.bdist_rpm.bdist_rpm'>, 'build': <class 
> 'numpy.distutils.command.build.bu...ib': <class 
> 'numpy.distutils.command.build_clib.build_clib'>, 'build_ext': <class 
> 'pythran.dist.PythranBuildExt'>, ...}
> new_attr = {'cmdclass': {'bdist_rpm': <class 
> 'numpy.distutils.command.bdist_rpm.bdist_rpm'>, 'build': <class 
> 'numpy.distutils.com...on'>, 'ext_modules': 
> [<pythran.dist.PythranExtension('test_complex_conjugate') at 
> 0x7fc214d70e20>], 'headers': [], ...}
> 
>     def setup(**attr):
>     
>         cmdclass = numpy_cmdclass.copy()
>     
>         new_attr = attr.copy()
>         if 'cmdclass' in new_attr:
>             cmdclass.update(new_attr['cmdclass'])
>         new_attr['cmdclass'] = cmdclass
>     
>         if 'configuration' in new_attr:
>             # To avoid calling configuration if there are any errors
>             # or help request in command in the line.
>             configuration = new_attr.pop('configuration')
>     
>             old_dist = distutils.core._setup_distribution
>             old_stop = distutils.core._setup_stop_after
>             distutils.core._setup_distribution = None
>             distutils.core._setup_stop_after = "commandline"
>             try:
>                 dist = setup(**new_attr)
>             finally:
>                 distutils.core._setup_distribution = old_dist
>                 distutils.core._setup_stop_after = old_stop
>             if dist.help or not _command_line_ok():
>                 # probably displayed help, skip running any commands
>                 return dist
>     
>             # create setup dictionary and append to new_attr
>             config = configuration()
>             if hasattr(config, 'todict'):
>                 config = config.todict()
>             _dict_append(new_attr, **config)
>     
>         # Move extension source libraries to libraries
>         libraries = []
>         for ext in new_attr.get('ext_modules', []):
>             new_libraries = []
>             for item in ext.libraries:
>                 if is_sequence(item):
>                     lib_name, build_info = item
>                     _check_append_ext_library(libraries, lib_name, build_info)
>                     new_libraries.append(lib_name)
>                 elif is_string(item):
>                     new_libraries.append(item)
>                 else:
>                     raise TypeError("invalid description of extension module "
>                                     "library %r" % (item,))
>             ext.libraries = new_libraries
>         if libraries:
>             if 'libraries' not in new_attr:
>                 new_attr['libraries'] = []
>             for item in libraries:
>                 _check_append_library(new_attr['libraries'], item)
>     
>         # sources in ext_modules or libraries may contain header files
>         if ('ext_modules' in new_attr or 'libraries' in new_attr) \
>            and 'headers' not in new_attr:
>             new_attr['headers'] = []
>     
>         # Use our custom NumpyDistribution class instead of distutils' one
>         new_attr['distclass'] = NumpyDistribution
>     
> >       return old_setup(**new_attr)
> 
> /usr/lib/python3/dist-packages/numpy/distutils/core.py:169: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> attrs = {'cmdclass': {'bdist_rpm': <class 
> 'numpy.distutils.command.bdist_rpm.bdist_rpm'>, 'build': <class 
> 'numpy.distutils.com...t.PythranExtension('test_complex_conjugate') at 
> 0x7fc214d70e20>], 'headers': [], 'name': 'test_complex_conjugate', ...}
> klass = <class 'numpy.distutils.numpy_distribution.NumpyDistribution'>
> dist = <numpy.distutils.numpy_distribution.NumpyDistribution object at 
> 0x7fc214d70d90>
> ok = True
> 
>     def setup (**attrs):
>         """The gateway to the Distutils: do everything your setup script needs
>         to do, in a highly flexible and user-driven way.  Briefly: create a
>         Distribution instance; find and parse config files; parse the command
>         line; run each Distutils command found there, customized by the 
> options
>         supplied to 'setup()' (as keyword arguments), in config files, and on
>         the command line.
>     
>         The Distribution instance might be an instance of a class supplied via
>         the 'distclass' keyword argument to 'setup'; if no such class is
>         supplied, then the Distribution class (in dist.py) is instantiated.
>         All other arguments to 'setup' (except for 'cmdclass') are used to set
>         attributes of the Distribution instance.
>     
>         The 'cmdclass' argument, if supplied, is a dictionary mapping command
>         names to command classes.  Each command encountered on the command 
> line
>         will be turned into a command class, which is in turn instantiated; 
> any
>         class found in 'cmdclass' is used in place of the default, which is
>         (for command 'foo_bar') class 'foo_bar' in module
>         'distutils.command.foo_bar'.  The command class must provide a
>         'user_options' attribute which is a list of option specifiers for
>         'distutils.fancy_getopt'.  Any command-line options between the 
> current
>         and the next command are used to set attributes of the current command
>         object.
>     
>         When the entire command-line has been successfully parsed, calls the
>         'run()' method on each command object in turn.  This method will be
>         driven entirely by the Distribution object (which each command object
>         has a reference to, thanks to its constructor), and the
>         command-specific options that became attributes of each command
>         object.
>         """
>     
>         global _setup_stop_after, _setup_distribution
>     
>         # Determine the distribution class -- either caller-supplied or
>         # our Distribution (see below).
>         klass = attrs.get('distclass')
>         if klass:
>             del attrs['distclass']
>         else:
>             klass = Distribution
>     
>         if 'script_name' not in attrs:
>             attrs['script_name'] = os.path.basename(sys.argv[0])
>         if 'script_args'  not in attrs:
>             attrs['script_args'] = sys.argv[1:]
>     
>         # Create the Distribution instance, using the remaining arguments
>         # (ie. everything except distclass) to initialize it
>         try:
>             _setup_distribution = dist = klass(attrs)
>         except DistutilsSetupError as msg:
>             if 'name' not in attrs:
>                 raise SystemExit("error in setup command: %s" % msg)
>             else:
>                 raise SystemExit("error in %s setup command: %s" % \
>                       (attrs['name'], msg))
>     
>         if _setup_stop_after == "init":
>             return dist
>     
>         # Find and parse the config file(s): they will override options from
>         # the setup script, but be overridden by the command line.
>         dist.parse_config_files()
>     
>         if DEBUG:
>             print("options (after parsing config files):")
>             dist.dump_option_dicts()
>     
>         if _setup_stop_after == "config":
>             return dist
>     
>         # Parse the command line and override config files; any
>         # command-line errors are the end user's fault, so turn them into
>         # SystemExit to suppress tracebacks.
>         try:
>             ok = dist.parse_command_line()
>         except DistutilsArgError as msg:
>             raise SystemExit(gen_usage(dist.script_name) + "\nerror: %s" % 
> msg)
>     
>         if DEBUG:
>             print("options (after parsing command line):")
>             dist.dump_option_dicts()
>     
>         if _setup_stop_after == "commandline":
>             return dist
>     
>         # And finally, run all the commands found on the command line.
>         if ok:
>             try:
>                 dist.run_commands()
>             except KeyboardInterrupt:
>                 raise SystemExit("interrupted")
>             except OSError as exc:
>                 if DEBUG:
>                     sys.stderr.write("error: %s\n" % (exc,))
>                     raise
>                 else:
>                     raise SystemExit("error: %s" % (exc,))
>     
>             except (DistutilsError,
>                     CCompilerError) as msg:
>                 if DEBUG:
>                     raise
>                 else:
> >                   raise SystemExit("error: " + str(msg))
> E                   SystemExit: error: Command "x86_64-linux-gnu-gcc -pthread 
> -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g 
> -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g 
> -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat 
> -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC 
> -DENABLE_PYTHON_MODULE -D__PYTHRAN__=3 -DPYTHRAN_BLAS_BLAS 
> -I/<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran 
> -I/usr/lib/python3/dist-packages/numpy/core/include -I/usr/local/include 
> -I/usr/include -I/usr/include/python3.9 -c /tmp/tmp686izx2b.cpp -o 
> /tmp/tmpch4dkgb_/tmp/tmp686izx2b.o -std=c++11 -fno-math-errno 
> -fvisibility=hidden -fno-wrapv -Wno-unused-function -Wno-int-in-bool-context 
> -Wno-unknown-warning-option -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. 
> -fstack-protector-strong -Wformat -Werror=format-security -O0 -Wall -Werror 
> -UNDEBUG -Wno-unused-function -Wno-int-in-bool-context 
> -Wno-unknown-warning-option -Wno-unused-local-typedefs -Wno-missing-braces 
> -Wno-unknown-pragmas" failed with exit status 1
> 
> /usr/lib/python3.9/distutils/core.py:163: SystemExit
> 
> During handling of the above exception, another exception occurred:
> 
> self = <pythran.tests.test_base.TestBase testMethod=test_complex_conj>
> 
>     def test_complex_conj(self):
> >       self.run_test("def complex_conjugate(c): return c.conjugate()", 
> > complex(0,1), complex_conjugate=[complex])
> 
> pythran/tests/test_base.py:540: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> pythran/tests/__init__.py:311: in run_test
>     cxx_compiled = compile_pythrancode(
> pythran/toolchain.py:414: in compile_pythrancode
>     output_file = compile_cxxcode(module_name,
> pythran/toolchain.py:354: in compile_cxxcode
>     output_binary = compile_cxxfile(module_name, fdpath,
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> module_name = 'test_complex_conjugate', cxxfile = '/tmp/tmp686izx2b.cpp'
> output_binary = None
> kwargs = {'extra_compile_args': ['-O0', '-Wall', '-Werror', '-UNDEBUG', 
> '-Wno-unused-function', '-Wno-int-in-bool-context', ...]}
> builddir = '/tmp/tmpbgv4we0u', buildtmp = '/tmp/tmpch4dkgb_'
> extension = <pythran.dist.PythranExtension('test_complex_conjugate') at 
> 0x7fc214d70e20>
> 
>     def compile_cxxfile(module_name, cxxfile, output_binary=None, **kwargs):
>         '''c++ file -> native module
>         Return the filename of the produced shared library
>         Raises CompileError on failure
>     
>         '''
>     
>         builddir = mkdtemp()
>         buildtmp = mkdtemp()
>     
>         extension = PythranExtension(module_name,
>                                      [cxxfile],
>                                      **kwargs)
>     
>         try:
>             setup(name=module_name,
>                   ext_modules=[extension],
>                   cmdclass={"build_ext": PythranBuildExt},
>                   # fake CLI call
>                   script_name='setup.py',
>                   script_args=['--verbose'
>                                if logger.isEnabledFor(logging.INFO)
>                                else '--quiet',
>                                'build_ext',
>                                '--build-lib', builddir,
>                                '--build-temp', buildtmp]
>                   )
>         except SystemExit as e:
> >           raise CompileError(str(e))
> E           distutils.errors.CompileError: error: Command 
> "x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g 
> -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat 
> -Werror=format-security -g -fwrapv -O2 -g -O2 
> -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat 
> -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC 
> -DENABLE_PYTHON_MODULE -D__PYTHRAN__=3 -DPYTHRAN_BLAS_BLAS 
> -I/<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran 
> -I/usr/lib/python3/dist-packages/numpy/core/include -I/usr/local/include 
> -I/usr/include -I/usr/include/python3.9 -c /tmp/tmp686izx2b.cpp -o 
> /tmp/tmpch4dkgb_/tmp/tmp686izx2b.o -std=c++11 -fno-math-errno 
> -fvisibility=hidden -fno-wrapv -Wno-unused-function -Wno-int-in-bool-context 
> -Wno-unknown-warning-option -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. 
> -fstack-protector-strong -Wformat -Werror=format-security -O0 -Wall -Werror 
> -UNDEBUG -Wno-unused-function -Wno-int-in-bool-context 
> -Wno-unknown-warning-option -Wno-unused-local-typedefs -Wno-missing-braces 
> -Wno-unknown-pragmas" failed with exit status 1
> 
> pythran/toolchain.py:312: CompileError
> ----------------------------- Captured stdout call 
> -----------------------------
> running build_ext
> new_compiler returns <class 'distutils.unixccompiler.UnixCCompiler'>
> building 'test_complex_conjugate' extension
> C compiler: x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare 
> -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat 
> -Werror=format-security -g -fwrapv -O2 -g -O2 
> -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat 
> -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC
> 
> creating /tmp/tmpch4dkgb_/tmp
> compile options: '-DENABLE_PYTHON_MODULE -D__PYTHRAN__=3 -DPYTHRAN_BLAS_BLAS 
> -I/<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran 
> -I/usr/lib/python3/dist-packages/numpy/core/include -I/usr/local/include 
> -I/usr/include -I/usr/include/python3.9 -c'
> extra options: '-std=c++11 -fno-math-errno -fvisibility=hidden -fno-wrapv 
> -Wno-unused-function -Wno-int-in-bool-context -Wno-unknown-warning-option -g 
> -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat 
> -Werror=format-security -O0 -Wall -Werror -UNDEBUG -Wno-unused-function 
> -Wno-int-in-bool-context -Wno-unknown-warning-option 
> -Wno-unused-local-typedefs -Wno-missing-braces -Wno-unknown-pragmas'
> x86_64-linux-gnu-gcc: /tmp/tmp686izx2b.cpp
> ----------------------------- Captured stderr call 
> -----------------------------
> In file included from 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/pythonic/include/__dispatch__/conjugate.hpp:4,
>                  from /tmp/tmp686izx2b.cpp:10:
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:22:36:
>  error: type/value mismatch at argument 2 in template parameter list for 
> ‘template<class T, class A> class xsimd::batch’
>    22 |     xsimd::batch<std::complex<T>, N>
>       |                                    ^
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:22:36:
>  note:   expected a type, got ‘N’
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:23:46:
>  error: type/value mismatch at argument 2 in template parameter list for 
> ‘template<class T, class A> class xsimd::batch’
>    23 |     conjugate(xsimd::batch<std::complex<T>, N> const &v)
>       |                                              ^
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:23:46:
>  note:   expected a type, got ‘N’
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:
>  In function ‘int {anonymous}::pythonic::numpy::wrapper::conjugate(const 
> int&)’:
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:25:25:
>  error: cannot convert ‘std::complex<double>’ to ‘int’ in return
>    25 |       return xsimd::conj(v);
>       |              ~~~~~~~~~~~^~~
>       |                         |
>       |                         std::complex<double>
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:
>  At global scope:
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:28:22:
>  error: type/value mismatch at argument 2 in template parameter list for 
> ‘template<class T, class A> class xsimd::batch’
>    28 |     xsimd::batch<T, N> conjugate(xsimd::batch<T, N> const &v)
>       |                      ^
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:28:22:
>  note:   expected a type, got ‘N’
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:28:51:
>  error: type/value mismatch at argument 2 in template parameter list for 
> ‘template<class T, class A> class xsimd::batch’
>    28 |     xsimd::batch<T, N> conjugate(xsimd::batch<T, N> const &v)
>       |                                                   ^
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:28:51:
>  note:   expected a type, got ‘N’
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:28:24:
>  error: redefinition of ‘template<class T, long unsigned int N> int 
> {anonymous}::pythonic::numpy::wrapper::conjugate(const int&)’
>    28 |     xsimd::batch<T, N> conjugate(xsimd::batch<T, N> const &v)
>       |                        ^~~~~~~~~
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:23:5:
>  note: ‘template<class T, long unsigned int N> int 
> {anonymous}::pythonic::numpy::wrapper::conjugate(const int&)’ previously 
> declared here
>    23 |     conjugate(xsimd::batch<std::complex<T>, N> const &v)
>       |     ^~~~~~~~~
> cc1plus: note: unrecognized command-line option ‘-Wno-unknown-warning-option’ 
> may have been intended to silence earlier diagnostics
> cc1plus: note: unrecognized command-line option ‘-Wno-unknown-warning-option’ 
> may have been intended to silence earlier diagnostics
> WARNING: Compilation error, trying hard to find its origin...
> WARNING: Nop, I'm going to flood you with C++ errors!
> ------------------------------ Captured log call 
> -------------------------------
> WARNING  pythran:toolchain.py:419 Compilation error, trying hard to find its 
> origin...
> WARNING  pythran:toolchain.py:422 Nop, I'm going to flood you with C++ errors!
> =============================== warnings summary 
> ===============================
> pythran/tables.py:4520
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/tables.py:4520: 
> DeprecationWarning: `np.bool` is a deprecated alias for the builtin `bool`. 
> To silence this warning, use `bool` by itself. Doing this will not modify any 
> behavior and is safe. If you specifically wanted the numpy scalar type, use 
> `np.bool_` here.
>   Deprecated in NumPy 1.20; for more details and guidance: 
> https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
>     if not hasattr(numpy, method):
> 
> pythran/tables.py:4520
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/tables.py:4520: 
> DeprecationWarning: `np.complex` is a deprecated alias for the builtin 
> `complex`. To silence this warning, use `complex` by itself. Doing this will 
> not modify any behavior and is safe. If you specifically wanted the numpy 
> scalar type, use `np.complex128` here.
>   Deprecated in NumPy 1.20; for more details and guidance: 
> https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
>     if not hasattr(numpy, method):
> 
> pythran/tables.py:4520
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/tables.py:4520: 
> DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. 
> To silence this warning, use `float` by itself. Doing this will not modify 
> any behavior and is safe. If you specifically wanted the numpy scalar type, 
> use `np.float64` here.
>   Deprecated in NumPy 1.20; for more details and guidance: 
> https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
>     if not hasattr(numpy, method):
> 
> pythran/tables.py:4553
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/tables.py:4553: 
> DeprecationWarning: `np.bool` is a deprecated alias for the builtin `bool`. 
> To silence this warning, use `bool` by itself. Doing this will not modify any 
> behavior and is safe. If you specifically wanted the numpy scalar type, use 
> `np.bool_` here.
>   Deprecated in NumPy 1.20; for more details and guidance: 
> https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
>     obj = getattr(themodule, elem)
> 
> pythran/tables.py:4553
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/tables.py:4553: 
> DeprecationWarning: `np.complex` is a deprecated alias for the builtin 
> `complex`. To silence this warning, use `complex` by itself. Doing this will 
> not modify any behavior and is safe. If you specifically wanted the numpy 
> scalar type, use `np.complex128` here.
>   Deprecated in NumPy 1.20; for more details and guidance: 
> https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
>     obj = getattr(themodule, elem)
> 
> pythran/tables.py:4553
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/tables.py:4553: 
> DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. 
> To silence this warning, use `float` by itself. Doing this will not modify 
> any behavior and is safe. If you specifically wanted the numpy scalar type, 
> use `np.float64` here.
>   Deprecated in NumPy 1.20; for more details and guidance: 
> https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
>     obj = getattr(themodule, elem)
> 
> pythran/tests/__init__.py:72
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build/pythran/tests/__init__.py:72:
>  PytestUnknownMarkWarning: Unknown pytest.mark.module - is this a typo?  You 
> can register custom marks to avoid this warning - for details, see 
> https://docs.pytest.org/en/stable/mark.html
>     module = pytest.mark.module
> 
> .pybuild/cpython3_3.9_pythran/build/pythran/tests/test_base.py::TestBase::test_declarations
> .pybuild/cpython3_3.9_pythran/build/pythran/tests/test_base.py::TestBase::test_multiple_return1
> .pybuild/cpython3_3.9_pythran/build/pythran/tests/test_base.py::TestBase::test_multiple_return2
> .pybuild/cpython3_3.9_pythran/build/pythran/tests/test_base.py::TestBase::test_multiple_return3
> .pybuild/cpython3_3.9_pythran/build/pythran/tests/test_base.py::TestBase::test_shadow_parameters
> .pybuild/cpython3_3.9_pythran/build/pythran/tests/test_base.py::TestBase::test_shadow_parameters
> .pybuild/cpython3_3.9_pythran/build/pythran/tests/test_base.py::TestBase::test_sorted1
> .pybuild/cpython3_3.9_pythran/build/pythran/tests/test_base.py::TestBase::test_sorted3
>   /usr/lib/python3.9/ast.py:407: DeprecationWarning: visit_NameConstant is 
> deprecated; add visit_Constant
>     return visitor(node)
> 
> -- Docs: https://docs.pytest.org/en/stable/warnings.html
> =========================== short test summary info 
> ============================
> FAILED pythran/tests/test_base.py::TestBase::test_complex_conj - 
> distutils.er...
> ====== 1 failed, 194 passed, 1 skipped, 15 warnings in 443.85s (0:07:23) 
> =======
> E: pybuild pybuild:369: test: plugin distutils failed with: exit code=1: cd 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9_pythran/build; python3.9 -m pytest 
> pythran/tests/test_base.py
> I: pybuild pybuild:300: cp -r /<<PKGBUILDDIR>>/pythran/tests 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran
> I: pybuild base:239: cd 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build; python3.10 -m pytest 
> pythran/tests/test_base.py
> ============================= test session starts 
> ==============================
> platform linux -- Python 3.10.5, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
> rootdir: /<<PKGBUILDDIR>>
> collected 196 items
> 
> pythran/tests/test_base.py .....................................F....... [ 
> 22%]
> .......s................................................................ [ 
> 59%]
> ........................................................................ [ 
> 96%]
> .......                                                                  
> [100%]
> 
> =================================== FAILURES 
> ===================================
> __________________________ TestBase.test_complex_conj 
> __________________________
> 
> attrs = {'cmdclass': {'bdist_rpm': <class 
> 'numpy.distutils.command.bdist_rpm.bdist_rpm'>, 'build': <class 
> 'numpy.distutils.com...t.PythranExtension('test_complex_conjugate') at 
> 0x7febbcb20580>], 'headers': [], 'name': 'test_complex_conjugate', ...}
> klass = <class 'numpy.distutils.numpy_distribution.NumpyDistribution'>
> dist = <numpy.distutils.numpy_distribution.NumpyDistribution object at 
> 0x7febbcb20970>
> ok = True
> 
>     def setup (**attrs):
>         """The gateway to the Distutils: do everything your setup script needs
>         to do, in a highly flexible and user-driven way.  Briefly: create a
>         Distribution instance; find and parse config files; parse the command
>         line; run each Distutils command found there, customized by the 
> options
>         supplied to 'setup()' (as keyword arguments), in config files, and on
>         the command line.
>     
>         The Distribution instance might be an instance of a class supplied via
>         the 'distclass' keyword argument to 'setup'; if no such class is
>         supplied, then the Distribution class (in dist.py) is instantiated.
>         All other arguments to 'setup' (except for 'cmdclass') are used to set
>         attributes of the Distribution instance.
>     
>         The 'cmdclass' argument, if supplied, is a dictionary mapping command
>         names to command classes.  Each command encountered on the command 
> line
>         will be turned into a command class, which is in turn instantiated; 
> any
>         class found in 'cmdclass' is used in place of the default, which is
>         (for command 'foo_bar') class 'foo_bar' in module
>         'distutils.command.foo_bar'.  The command class must provide a
>         'user_options' attribute which is a list of option specifiers for
>         'distutils.fancy_getopt'.  Any command-line options between the 
> current
>         and the next command are used to set attributes of the current command
>         object.
>     
>         When the entire command-line has been successfully parsed, calls the
>         'run()' method on each command object in turn.  This method will be
>         driven entirely by the Distribution object (which each command object
>         has a reference to, thanks to its constructor), and the
>         command-specific options that became attributes of each command
>         object.
>         """
>     
>         global _setup_stop_after, _setup_distribution
>     
>         # Determine the distribution class -- either caller-supplied or
>         # our Distribution (see below).
>         klass = attrs.get('distclass')
>         if klass:
>             del attrs['distclass']
>         else:
>             klass = Distribution
>     
>         if 'script_name' not in attrs:
>             attrs['script_name'] = os.path.basename(sys.argv[0])
>         if 'script_args'  not in attrs:
>             attrs['script_args'] = sys.argv[1:]
>     
>         # Create the Distribution instance, using the remaining arguments
>         # (ie. everything except distclass) to initialize it
>         try:
>             _setup_distribution = dist = klass(attrs)
>         except DistutilsSetupError as msg:
>             if 'name' not in attrs:
>                 raise SystemExit("error in setup command: %s" % msg)
>             else:
>                 raise SystemExit("error in %s setup command: %s" % \
>                       (attrs['name'], msg))
>     
>         if _setup_stop_after == "init":
>             return dist
>     
>         # Find and parse the config file(s): they will override options from
>         # the setup script, but be overridden by the command line.
>         dist.parse_config_files()
>     
>         if DEBUG:
>             print("options (after parsing config files):")
>             dist.dump_option_dicts()
>     
>         if _setup_stop_after == "config":
>             return dist
>     
>         # Parse the command line and override config files; any
>         # command-line errors are the end user's fault, so turn them into
>         # SystemExit to suppress tracebacks.
>         try:
>             ok = dist.parse_command_line()
>         except DistutilsArgError as msg:
>             raise SystemExit(gen_usage(dist.script_name) + "\nerror: %s" % 
> msg)
>     
>         if DEBUG:
>             print("options (after parsing command line):")
>             dist.dump_option_dicts()
>     
>         if _setup_stop_after == "commandline":
>             return dist
>     
>         # And finally, run all the commands found on the command line.
>         if ok:
>             try:
> >               dist.run_commands()
> 
> /usr/lib/python3.10/distutils/core.py:148: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <numpy.distutils.numpy_distribution.NumpyDistribution object at 
> 0x7febbcb20970>
> 
>     def run_commands(self):
>         """Run each command that was seen on the setup script command line.
>         Uses the list of commands found and cache of command objects
>         created by 'get_command_obj()'.
>         """
>         for cmd in self.commands:
> >           self.run_command(cmd)
> 
> /usr/lib/python3.10/distutils/dist.py:966: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <numpy.distutils.numpy_distribution.NumpyDistribution object at 
> 0x7febbcb20970>
> command = 'build_ext'
> 
>     def run_command(self, command):
>         """Do whatever it takes to run a command (including nothing at all,
>         if the command has already been run).  Specifically: if we have
>         already created and run the command named by 'command', return
>         silently without doing anything.  If the command named by 'command'
>         doesn't even have a command object yet, create one.  Then invoke
>         'run()' on that command object (or an existing one).
>         """
>         # Already been here, done that? then return silently.
>         if self.have_run.get(command):
>             return
>     
>         log.info("running %s", command)
>         cmd_obj = self.get_command_obj(command)
>         cmd_obj.ensure_finalized()
> >       cmd_obj.run()
> 
> /usr/lib/python3.10/distutils/dist.py:985: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <pythran.dist.PythranBuildExt object at 0x7febbcb22e00>
> 
>     def run(self):
>         from distutils.ccompiler import new_compiler
>     
>         # 'self.extensions', as supplied by setup.py, is a list of
>         # Extension instances.  See the documentation for Extension (in
>         # distutils.extension) for details.
>         #
>         # For backwards compatibility with Distutils 0.8.2 and earlier, we
>         # also allow the 'extensions' list to be a list of tuples:
>         #    (ext_name, build_info)
>         # where build_info is a dictionary containing everything that
>         # Extension instances do except the name, with a few things being
>         # differently named.  We convert these 2-tuples to Extension
>         # instances as needed.
>     
>         if not self.extensions:
>             return
>     
>         # If we were asked to build any C/C++ libraries, make sure that the
>         # directory where we put them is in the library search path for
>         # linking extensions.
>         if self.distribution.has_c_libraries():
>             build_clib = self.get_finalized_command('build_clib')
>             self.libraries.extend(build_clib.get_library_names() or [])
>             self.library_dirs.append(build_clib.build_clib)
>     
>         # Setup the CCompiler object that we'll use to do all the
>         # compiling and linking
>         self.compiler = new_compiler(compiler=self.compiler,
>                                      verbose=self.verbose,
>                                      dry_run=self.dry_run,
>                                      force=self.force)
>         customize_compiler(self.compiler)
>         # If we are cross-compiling, init the compiler now (if we are not
>         # cross-compiling, init would not hurt, but people may rely on
>         # late initialization of compiler even if they shouldn't...)
>         if os.name == 'nt' and self.plat_name != get_platform():
>             self.compiler.initialize(self.plat_name)
>     
>         # And make sure that any compile/link-related options (which might
>         # come from the command-line or from the setup script) are set in
>         # that CCompiler object -- that way, they automatically apply to
>         # all compiling and linking done here.
>         if self.include_dirs is not None:
>             self.compiler.set_include_dirs(self.include_dirs)
>         if self.define is not None:
>             # 'define' option is a list of (name,value) tuples
>             for (name, value) in self.define:
>                 self.compiler.define_macro(name, value)
>         if self.undef is not None:
>             for macro in self.undef:
>                 self.compiler.undefine_macro(macro)
>         if self.libraries is not None:
>             self.compiler.set_libraries(self.libraries)
>         if self.library_dirs is not None:
>             self.compiler.set_library_dirs(self.library_dirs)
>         if self.rpath is not None:
>             self.compiler.set_runtime_library_dirs(self.rpath)
>         if self.link_objects is not None:
>             self.compiler.set_link_objects(self.link_objects)
>     
>         # Now actually compile and link everything.
> >       self.build_extensions()
> 
> /usr/lib/python3.10/distutils/command/build_ext.py:340: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <pythran.dist.PythranBuildExt object at 0x7febbcb22e00>
> 
>     def build_extensions(self):
>         # First, sanity-check the 'extensions' list
>         self.check_extensions_list(self.extensions)
>         if self.parallel:
>             self._build_extensions_parallel()
>         else:
> >           self._build_extensions_serial()
> 
> /usr/lib/python3.10/distutils/command/build_ext.py:449: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <pythran.dist.PythranBuildExt object at 0x7febbcb22e00>
> 
>     def _build_extensions_serial(self):
>         for ext in self.extensions:
>             with self._filter_build_errors(ext):
> >               self.build_extension(ext)
> 
> /usr/lib/python3.10/distutils/command/build_ext.py:474: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <pythran.dist.PythranBuildExt object at 0x7febbcb22e00>
> ext = <pythran.dist.PythranExtension('test_complex_conjugate') at 
> 0x7febbcb20580>
> 
>     def build_extension(self, ext):
>         StringTypes = str,
>     
>         def get_value(obj, key):
>             var = getattr(obj, key)
>             if isinstance(var, Iterable) and not isinstance(var, StringTypes):
>                 return var[0]
>             else:
>                 return var
>     
>         def set_value(obj, key, value):
>             var = getattr(obj, key)
>             if isinstance(var, Iterable) and not isinstance(var, StringTypes):
>                 var[0] = value
>             else:
>                 setattr(obj, key, value)
>     
>         prev = {
>                 # linux-like
>                 'preprocessor': None,
>                 'compiler_cxx': None,
>                 'compiler_so': None,
>                 'compiler': None,
>                 'linker_exe': None,
>                 'linker_so': None,
>                 # Windows-like
>                 'cc': None,
>         }
>         # Backup compiler settings
>         for key in list(prev.keys()):
>             if hasattr(self.compiler, key):
>                 prev[key] = get_value(self.compiler, key)
>             else:
>                 del prev[key]
>     
>         # try hard to modify the compiler
>         if getattr(ext, 'cxx', None) is not None:
>             for comp in prev:
>                 if hasattr(self.compiler, comp):
>                     set_value(self.compiler, comp, ext.cxx)
>     
>         find_exe = None
>         if getattr(ext, 'cc', None) is not None:
>             try:
>                 import distutils._msvccompiler as msvc
>                 # install hook
>                 find_exe = msvc._find_exe
>     
>                 def _find_exe(exe, *args, **kwargs):
>                     if exe == 'cl.exe':
>                         exe = ext.cc
>                     return find_exe(exe, *args, **kwargs)
>     
>                 msvc._find_exe = _find_exe
>             except ImportError:
>                 pass
>     
>         # In general, distutils uses -Wstrict-prototypes, but this option
>         # is not valid for C++ code, only for C.  Remove it if it's there
>         # to avoid a spurious warning on every compilation.
>         for flag in cfg.cfg.get('compiler', "ignoreflags").split():
>             for target in ('compiler_so', 'linker_so'):
>                 try:
>                     while True:
>                         getattr(self.compiler, target).remove(flag)
>                 except (AttributeError, ValueError):
>                     pass
>     
>         # Remove -arch i386 if 'x86_64' is specified, otherwise incorrect
>         # code is generated, at least on OSX
>         if hasattr(self.compiler, 'compiler_so'):
>             archs = defaultdict(list)
>             for i, flag in enumerate(self.compiler.compiler_so[1:]):
>                 if self.compiler.compiler_so[i] == '-arch':
>                     archs[flag].append(i + 1)
>             if 'x86_64' in archs and 'i386' in archs:
>                 for i in archs['i386']:
>                     self.compiler.compiler_so[i] = 'x86_64'
>     
>         try:
> >           return super(PythranBuildExtMixIn, self).build_extension(ext)
> 
> pythran/dist.py:109: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <pythran.dist.PythranBuildExt object at 0x7febbcb22e00>
> ext = <pythran.dist.PythranExtension('test_complex_conjugate') at 
> 0x7febbcb20580>
> 
>     def build_extension(self, ext):
>         sources = ext.sources
>         if sources is None or not isinstance(sources, (list, tuple)):
>             raise DistutilsSetupError(
>                   "in 'ext_modules' option (extension '%s'), "
>                   "'sources' must be present and must be "
>                   "a list of source filenames" % ext.name)
>         # sort to make the resulting .so file build reproducible
>         sources = sorted(sources)
>     
>         ext_path = self.get_ext_fullpath(ext.name)
>         depends = sources + ext.depends
>         if not (self.force or newer_group(depends, ext_path, 'newer')):
>             log.debug("skipping '%s' extension (up-to-date)", ext.name)
>             return
>         else:
>             log.info("building '%s' extension", ext.name)
>     
>         # First, scan the sources for SWIG definition files (.i), run
>         # SWIG on 'em to create .c files, and modify the sources list
>         # accordingly.
>         sources = self.swig_sources(sources, ext)
>     
>         # Next, compile the source code to object files.
>     
>         # XXX not honouring 'define_macros' or 'undef_macros' -- the
>         # CCompiler API needs to change to accommodate this, and I
>         # want to do one thing at a time!
>     
>         # Two possible sources for extra compiler arguments:
>         #   - 'extra_compile_args' in Extension object
>         #   - CFLAGS environment variable (not particularly
>         #     elegant, but people seem to expect it and I
>         #     guess it's useful)
>         # The environment variable should take precedence, and
>         # any sensible compiler will give precedence to later
>         # command line args.  Hence we combine them in order:
>         extra_args = ext.extra_compile_args or []
>     
>         macros = ext.define_macros[:]
>         for undef in ext.undef_macros:
>             macros.append((undef,))
>     
> >       objects = self.compiler.compile(sources,
>                                          output_dir=self.build_temp,
>                                          macros=macros,
>                                          include_dirs=ext.include_dirs,
>                                          debug=self.debug,
>                                          extra_postargs=extra_args,
>                                          depends=ext.depends)
> 
> /usr/lib/python3.10/distutils/command/build_ext.py:529: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <distutils.unixccompiler.UnixCCompiler object at 0x7febbc6706a0>
> args = (['/tmp/tmpkcww606t.cpp'],)
> kw = {'debug': None, 'depends': [], 'extra_postargs': ['-std=c++11', 
> '-fno-math-errno', '-fvisibility=hidden', 
> '-fno-wrapv'...ythran/build/pythran', 
> '/usr/lib/python3/dist-packages/numpy/core/include', '/usr/local/include', 
> '/usr/include'], ...}
> 
> >   m = lambda self, *args, **kw: func(self, *args, **kw)
> 
> /usr/lib/python3/dist-packages/numpy/distutils/ccompiler.py:89: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <distutils.unixccompiler.UnixCCompiler object at 0x7febbc6706a0>
> sources = ['/tmp/tmpkcww606t.cpp'], output_dir = '/tmp/tmpo9ql5e8_'
> macros = [('ENABLE_PYTHON_MODULE', None), ('__PYTHRAN__', '3'), 
> ('PYTHRAN_BLAS_BLAS', None)]
> include_dirs = 
> ['/<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran', 
> '/usr/lib/python3/dist-packages/numpy/core/include', '/usr/local/include', 
> '/usr/include']
> debug = None, extra_preargs = None
> extra_postargs = ['-std=c++11', '-fno-math-errno', '-fvisibility=hidden', 
> '-fno-wrapv', '-Wno-unused-function', '-Wno-int-in-bool-context', ...]
> depends = []
> 
>     def CCompiler_compile(self, sources, output_dir=None, macros=None,
>                           include_dirs=None, debug=0, extra_preargs=None,
>                           extra_postargs=None, depends=None):
>         """
>         Compile one or more source files.
>     
>         Please refer to the Python distutils API reference for more details.
>     
>         Parameters
>         ----------
>         sources : list of str
>             A list of filenames
>         output_dir : str, optional
>             Path to the output directory.
>         macros : list of tuples
>             A list of macro definitions.
>         include_dirs : list of str, optional
>             The directories to add to the default include file search path for
>             this compilation only.
>         debug : bool, optional
>             Whether or not to output debug symbols in or alongside the object
>             file(s).
>         extra_preargs, extra_postargs : ?
>             Extra pre- and post-arguments.
>         depends : list of str, optional
>             A list of file names that all targets depend on.
>     
>         Returns
>         -------
>         objects : list of str
>             A list of object file names, one per source file `sources`.
>     
>         Raises
>         ------
>         CompileError
>             If compilation fails.
>     
>         """
>         # This method is effective only with Python >=2.3 distutils.
>         # Any changes here should be applied also to fcompiler.compile
>         # method to support pre Python 2.3 distutils.
>         global _job_semaphore
>     
>         jobs = get_num_build_jobs()
>     
>         # setup semaphore to not exceed number of compile jobs when 
> parallelized at
>         # extension level (python >= 3.5)
>         with _global_lock:
>             if _job_semaphore is None:
>                 _job_semaphore = threading.Semaphore(jobs)
>     
>         if not sources:
>             return []
>         from numpy.distutils.fcompiler import (FCompiler, is_f_file,
>                                                has_f90_header)
>         if isinstance(self, FCompiler):
>             display = []
>             for fc in ['f77', 'f90', 'fix']:
>                 fcomp = getattr(self, 'compiler_'+fc)
>                 if fcomp is None:
>                     continue
>                 display.append("Fortran %s compiler: %s" % (fc, ' 
> '.join(fcomp)))
>             display = '\n'.join(display)
>         else:
>             ccomp = self.compiler_so
>             display = "C compiler: %s\n" % (' '.join(ccomp),)
>         log.info(display)
>         macros, objects, extra_postargs, pp_opts, build = \
>                 self._setup_compile(output_dir, macros, include_dirs, sources,
>                                     depends, extra_postargs)
>         cc_args = self._get_cc_args(pp_opts, debug, extra_preargs)
>         display = "compile options: '%s'" % (' '.join(cc_args))
>         if extra_postargs:
>             display += "\nextra options: '%s'" % (' '.join(extra_postargs))
>         log.info(display)
>     
>         def single_compile(args):
>             obj, (src, ext) = args
>             if not _needs_build(obj, cc_args, extra_postargs, pp_opts):
>                 return
>     
>             # check if we are currently already processing the same object
>             # happens when using the same source in multiple extensions
>             while True:
>                 # need explicit lock as there is no atomic check and add with 
> GIL
>                 with _global_lock:
>                     # file not being worked on, start working
>                     if obj not in _processing_files:
>                         _processing_files.add(obj)
>                         break
>                 # wait for the processing to end
>                 time.sleep(0.1)
>     
>             try:
>                 # retrieve slot from our #job semaphore and build
>                 with _job_semaphore:
>                     self._compile(obj, src, ext, cc_args, extra_postargs, 
> pp_opts)
>             finally:
>                 # register being done processing
>                 with _global_lock:
>                     _processing_files.remove(obj)
>     
>     
>         if isinstance(self, FCompiler):
>             objects_to_build = list(build.keys())
>             f77_objects, other_objects = [], []
>             for obj in objects:
>                 if obj in objects_to_build:
>                     src, ext = build[obj]
>                     if self.compiler_type=='absoft':
>                         obj = cyg2win32(obj)
>                         src = cyg2win32(src)
>                     if is_f_file(src) and not has_f90_header(src):
>                         f77_objects.append((obj, (src, ext)))
>                     else:
>                         other_objects.append((obj, (src, ext)))
>     
>             # f77 objects can be built in parallel
>             build_items = f77_objects
>             # build f90 modules serial, module files are generated during
>             # compilation and may be used by files later in the list so the
>             # ordering is important
>             for o in other_objects:
>                 single_compile(o)
>         else:
>             build_items = build.items()
>     
>         if len(build) > 1 and jobs > 1:
>             # build parallel
>             import multiprocessing.pool
>             pool = multiprocessing.pool.ThreadPool(jobs)
>             pool.map(single_compile, build_items)
>             pool.close()
>         else:
>             # build serial
>             for o in build_items:
> >               single_compile(o)
> 
> /usr/lib/python3/dist-packages/numpy/distutils/ccompiler.py:366: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> args = ('/tmp/tmpo9ql5e8_/tmp/tmpkcww606t.o', ('/tmp/tmpkcww606t.cpp', 
> '.cpp'))
> 
>     def single_compile(args):
>         obj, (src, ext) = args
>         if not _needs_build(obj, cc_args, extra_postargs, pp_opts):
>             return
>     
>         # check if we are currently already processing the same object
>         # happens when using the same source in multiple extensions
>         while True:
>             # need explicit lock as there is no atomic check and add with GIL
>             with _global_lock:
>                 # file not being worked on, start working
>                 if obj not in _processing_files:
>                     _processing_files.add(obj)
>                     break
>             # wait for the processing to end
>             time.sleep(0.1)
>     
>         try:
>             # retrieve slot from our #job semaphore and build
>             with _job_semaphore:
> >               self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
> 
> /usr/lib/python3/dist-packages/numpy/distutils/ccompiler.py:326: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <distutils.unixccompiler.UnixCCompiler object at 0x7febbc6706a0>
> args = ('/tmp/tmpo9ql5e8_/tmp/tmpkcww606t.o', '/tmp/tmpkcww606t.cpp', '.cpp', 
> ['-DENABLE_PYTHON_MODULE', '-D__PYTHRAN__=3', 
> '...thon3_3.10_pythran/build/pythran', 
> '-I/usr/lib/python3/dist-packages/numpy/core/include', 
> '-I/usr/local/include', ...])
> kw = {}
> 
> >   m = lambda self, *args, **kw: func(self, *args, **kw)
> 
> /usr/lib/python3/dist-packages/numpy/distutils/ccompiler.py:89: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <distutils.unixccompiler.UnixCCompiler object at 0x7febbc6706a0>
> obj = '/tmp/tmpo9ql5e8_/tmp/tmpkcww606t.o', src = '/tmp/tmpkcww606t.cpp'
> ext = '.cpp'
> cc_args = ['-DENABLE_PYTHON_MODULE', '-D__PYTHRAN__=3', 
> '-DPYTHRAN_BLAS_BLAS', 
> '-I/<<PKGBUILDDIR>>/.pybu...ython3_3.10_pythran/build/pythran', 
> '-I/usr/lib/python3/dist-packages/numpy/core/include', 
> '-I/usr/local/include', ...]
> extra_postargs = ['-std=c++11', '-fno-math-errno', '-fvisibility=hidden', 
> '-fno-wrapv', '-Wno-unused-function', '-Wno-int-in-bool-context', ...]
> pp_opts = ['-DENABLE_PYTHON_MODULE', '-D__PYTHRAN__=3', 
> '-DPYTHRAN_BLAS_BLAS', 
> '-I/<<PKGBUILDDIR>>/.pybu...ython3_3.10_pythran/build/pythran', 
> '-I/usr/lib/python3/dist-packages/numpy/core/include', 
> '-I/usr/local/include', ...]
> 
>     def UnixCCompiler__compile(self, obj, src, ext, cc_args, extra_postargs, 
> pp_opts):
>         """Compile a single source files with a Unix-style compiler."""
>         # HP ad-hoc fix, see ticket 1383
>         ccomp = self.compiler_so
>         if ccomp[0] == 'aCC':
>             # remove flags that will trigger ANSI-C mode for aCC
>             if '-Ae' in ccomp:
>                 ccomp.remove('-Ae')
>             if '-Aa' in ccomp:
>                 ccomp.remove('-Aa')
>             # add flags for (almost) sane C++ handling
>             ccomp += ['-AA']
>             self.compiler_so = ccomp
>         # ensure OPT environment variable is read
>         if 'OPT' in os.environ:
>             # XXX who uses this?
>             from sysconfig import get_config_vars
>             opt = " ".join(os.environ['OPT'].split())
>             gcv_opt = " ".join(get_config_vars('OPT')[0].split())
>             ccomp_s = " ".join(self.compiler_so)
>             if opt not in ccomp_s:
>                 ccomp_s = ccomp_s.replace(gcv_opt, opt)
>                 self.compiler_so = ccomp_s.split()
>             llink_s = " ".join(self.linker_so)
>             if opt not in llink_s:
>                 self.linker_so = llink_s.split() + opt.split()
>     
>         display = '%s: %s' % (os.path.basename(self.compiler_so[0]), src)
>     
>         # gcc style automatic dependencies, outputs a makefile (-MF) that 
> lists
>         # all headers needed by a c file as a side effect of compilation 
> (-MMD)
>         if getattr(self, '_auto_depends', False):
>             deps = ['-MMD', '-MF', obj + '.d']
>         else:
>             deps = []
>     
>         try:
>             self.spawn(self.compiler_so + cc_args + [src, '-o', obj] + deps +
>                        extra_postargs, display = display)
>         except DistutilsExecError as e:
>             msg = str(e)
> >           raise CompileError(msg) from None
> E           distutils.errors.CompileError: Command "x86_64-linux-gnu-gcc 
> -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g 
> -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g 
> -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat 
> -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC 
> -DENABLE_PYTHON_MODULE -D__PYTHRAN__=3 -DPYTHRAN_BLAS_BLAS 
> -I/<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran 
> -I/usr/lib/python3/dist-packages/numpy/core/include -I/usr/local/include 
> -I/usr/include -I/usr/include/python3.10 -c /tmp/tmpkcww606t.cpp -o 
> /tmp/tmpo9ql5e8_/tmp/tmpkcww606t.o -std=c++11 -fno-math-errno 
> -fvisibility=hidden -fno-wrapv -Wno-unused-function -Wno-int-in-bool-context 
> -Wno-unknown-warning-option -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. 
> -fstack-protector-strong -Wformat -Werror=format-security -O0 -Wall -Werror 
> -UNDEBUG -Wno-unused-function -Wno-int-in-bool-context 
> -Wno-unknown-warning-option -Wno-unused-local-typedefs -Wno-missing-braces 
> -Wno-unknown-pragmas" failed with exit status 1
> 
> /usr/lib/python3/dist-packages/numpy/distutils/unixccompiler.py:57: 
> CompileError
> 
> During handling of the above exception, another exception occurred:
> 
> module_name = 'test_complex_conjugate', cxxfile = '/tmp/tmpkcww606t.cpp'
> output_binary = None
> kwargs = {'extra_compile_args': ['-O0', '-Wall', '-Werror', '-UNDEBUG', 
> '-Wno-unused-function', '-Wno-int-in-bool-context', ...]}
> builddir = '/tmp/tmpvzyjge_a', buildtmp = '/tmp/tmpo9ql5e8_'
> extension = <pythran.dist.PythranExtension('test_complex_conjugate') at 
> 0x7febbcb20580>
> 
>     def compile_cxxfile(module_name, cxxfile, output_binary=None, **kwargs):
>         '''c++ file -> native module
>         Return the filename of the produced shared library
>         Raises CompileError on failure
>     
>         '''
>     
>         builddir = mkdtemp()
>         buildtmp = mkdtemp()
>     
>         extension = PythranExtension(module_name,
>                                      [cxxfile],
>                                      **kwargs)
>     
>         try:
> >           setup(name=module_name,
>                   ext_modules=[extension],
>                   cmdclass={"build_ext": PythranBuildExt},
>                   # fake CLI call
>                   script_name='setup.py',
>                   script_args=['--verbose'
>                                if logger.isEnabledFor(logging.INFO)
>                                else '--quiet',
>                                'build_ext',
>                                '--build-lib', builddir,
>                                '--build-temp', buildtmp]
>                   )
> 
> pythran/toolchain.py:299: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> attr = {'cmdclass': {'build_ext': <class 'pythran.dist.PythranBuildExt'>}, 
> 'ext_modules': [<pythran.dist.PythranExtension('te... 'script_args': 
> ['--verbose', 'build_ext', '--build-lib', '/tmp/tmpvzyjge_a', '--build-temp', 
> '/tmp/tmpo9ql5e8_'], ...}
> cmdclass = {'bdist_rpm': <class 
> 'numpy.distutils.command.bdist_rpm.bdist_rpm'>, 'build': <class 
> 'numpy.distutils.command.build.bu...ib': <class 
> 'numpy.distutils.command.build_clib.build_clib'>, 'build_ext': <class 
> 'pythran.dist.PythranBuildExt'>, ...}
> new_attr = {'cmdclass': {'bdist_rpm': <class 
> 'numpy.distutils.command.bdist_rpm.bdist_rpm'>, 'build': <class 
> 'numpy.distutils.com...on'>, 'ext_modules': 
> [<pythran.dist.PythranExtension('test_complex_conjugate') at 
> 0x7febbcb20580>], 'headers': [], ...}
> 
>     def setup(**attr):
>     
>         cmdclass = numpy_cmdclass.copy()
>     
>         new_attr = attr.copy()
>         if 'cmdclass' in new_attr:
>             cmdclass.update(new_attr['cmdclass'])
>         new_attr['cmdclass'] = cmdclass
>     
>         if 'configuration' in new_attr:
>             # To avoid calling configuration if there are any errors
>             # or help request in command in the line.
>             configuration = new_attr.pop('configuration')
>     
>             old_dist = distutils.core._setup_distribution
>             old_stop = distutils.core._setup_stop_after
>             distutils.core._setup_distribution = None
>             distutils.core._setup_stop_after = "commandline"
>             try:
>                 dist = setup(**new_attr)
>             finally:
>                 distutils.core._setup_distribution = old_dist
>                 distutils.core._setup_stop_after = old_stop
>             if dist.help or not _command_line_ok():
>                 # probably displayed help, skip running any commands
>                 return dist
>     
>             # create setup dictionary and append to new_attr
>             config = configuration()
>             if hasattr(config, 'todict'):
>                 config = config.todict()
>             _dict_append(new_attr, **config)
>     
>         # Move extension source libraries to libraries
>         libraries = []
>         for ext in new_attr.get('ext_modules', []):
>             new_libraries = []
>             for item in ext.libraries:
>                 if is_sequence(item):
>                     lib_name, build_info = item
>                     _check_append_ext_library(libraries, lib_name, build_info)
>                     new_libraries.append(lib_name)
>                 elif is_string(item):
>                     new_libraries.append(item)
>                 else:
>                     raise TypeError("invalid description of extension module "
>                                     "library %r" % (item,))
>             ext.libraries = new_libraries
>         if libraries:
>             if 'libraries' not in new_attr:
>                 new_attr['libraries'] = []
>             for item in libraries:
>                 _check_append_library(new_attr['libraries'], item)
>     
>         # sources in ext_modules or libraries may contain header files
>         if ('ext_modules' in new_attr or 'libraries' in new_attr) \
>            and 'headers' not in new_attr:
>             new_attr['headers'] = []
>     
>         # Use our custom NumpyDistribution class instead of distutils' one
>         new_attr['distclass'] = NumpyDistribution
>     
> >       return old_setup(**new_attr)
> 
> /usr/lib/python3/dist-packages/numpy/distutils/core.py:169: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> attrs = {'cmdclass': {'bdist_rpm': <class 
> 'numpy.distutils.command.bdist_rpm.bdist_rpm'>, 'build': <class 
> 'numpy.distutils.com...t.PythranExtension('test_complex_conjugate') at 
> 0x7febbcb20580>], 'headers': [], 'name': 'test_complex_conjugate', ...}
> klass = <class 'numpy.distutils.numpy_distribution.NumpyDistribution'>
> dist = <numpy.distutils.numpy_distribution.NumpyDistribution object at 
> 0x7febbcb20970>
> ok = True
> 
>     def setup (**attrs):
>         """The gateway to the Distutils: do everything your setup script needs
>         to do, in a highly flexible and user-driven way.  Briefly: create a
>         Distribution instance; find and parse config files; parse the command
>         line; run each Distutils command found there, customized by the 
> options
>         supplied to 'setup()' (as keyword arguments), in config files, and on
>         the command line.
>     
>         The Distribution instance might be an instance of a class supplied via
>         the 'distclass' keyword argument to 'setup'; if no such class is
>         supplied, then the Distribution class (in dist.py) is instantiated.
>         All other arguments to 'setup' (except for 'cmdclass') are used to set
>         attributes of the Distribution instance.
>     
>         The 'cmdclass' argument, if supplied, is a dictionary mapping command
>         names to command classes.  Each command encountered on the command 
> line
>         will be turned into a command class, which is in turn instantiated; 
> any
>         class found in 'cmdclass' is used in place of the default, which is
>         (for command 'foo_bar') class 'foo_bar' in module
>         'distutils.command.foo_bar'.  The command class must provide a
>         'user_options' attribute which is a list of option specifiers for
>         'distutils.fancy_getopt'.  Any command-line options between the 
> current
>         and the next command are used to set attributes of the current command
>         object.
>     
>         When the entire command-line has been successfully parsed, calls the
>         'run()' method on each command object in turn.  This method will be
>         driven entirely by the Distribution object (which each command object
>         has a reference to, thanks to its constructor), and the
>         command-specific options that became attributes of each command
>         object.
>         """
>     
>         global _setup_stop_after, _setup_distribution
>     
>         # Determine the distribution class -- either caller-supplied or
>         # our Distribution (see below).
>         klass = attrs.get('distclass')
>         if klass:
>             del attrs['distclass']
>         else:
>             klass = Distribution
>     
>         if 'script_name' not in attrs:
>             attrs['script_name'] = os.path.basename(sys.argv[0])
>         if 'script_args'  not in attrs:
>             attrs['script_args'] = sys.argv[1:]
>     
>         # Create the Distribution instance, using the remaining arguments
>         # (ie. everything except distclass) to initialize it
>         try:
>             _setup_distribution = dist = klass(attrs)
>         except DistutilsSetupError as msg:
>             if 'name' not in attrs:
>                 raise SystemExit("error in setup command: %s" % msg)
>             else:
>                 raise SystemExit("error in %s setup command: %s" % \
>                       (attrs['name'], msg))
>     
>         if _setup_stop_after == "init":
>             return dist
>     
>         # Find and parse the config file(s): they will override options from
>         # the setup script, but be overridden by the command line.
>         dist.parse_config_files()
>     
>         if DEBUG:
>             print("options (after parsing config files):")
>             dist.dump_option_dicts()
>     
>         if _setup_stop_after == "config":
>             return dist
>     
>         # Parse the command line and override config files; any
>         # command-line errors are the end user's fault, so turn them into
>         # SystemExit to suppress tracebacks.
>         try:
>             ok = dist.parse_command_line()
>         except DistutilsArgError as msg:
>             raise SystemExit(gen_usage(dist.script_name) + "\nerror: %s" % 
> msg)
>     
>         if DEBUG:
>             print("options (after parsing command line):")
>             dist.dump_option_dicts()
>     
>         if _setup_stop_after == "commandline":
>             return dist
>     
>         # And finally, run all the commands found on the command line.
>         if ok:
>             try:
>                 dist.run_commands()
>             except KeyboardInterrupt:
>                 raise SystemExit("interrupted")
>             except OSError as exc:
>                 if DEBUG:
>                     sys.stderr.write("error: %s\n" % (exc,))
>                     raise
>                 else:
>                     raise SystemExit("error: %s" % (exc,))
>     
>             except (DistutilsError,
>                     CCompilerError) as msg:
>                 if DEBUG:
>                     raise
>                 else:
> >                   raise SystemExit("error: " + str(msg))
> E                   SystemExit: error: Command "x86_64-linux-gnu-gcc -pthread 
> -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g 
> -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g 
> -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat 
> -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC 
> -DENABLE_PYTHON_MODULE -D__PYTHRAN__=3 -DPYTHRAN_BLAS_BLAS 
> -I/<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran 
> -I/usr/lib/python3/dist-packages/numpy/core/include -I/usr/local/include 
> -I/usr/include -I/usr/include/python3.10 -c /tmp/tmpkcww606t.cpp -o 
> /tmp/tmpo9ql5e8_/tmp/tmpkcww606t.o -std=c++11 -fno-math-errno 
> -fvisibility=hidden -fno-wrapv -Wno-unused-function -Wno-int-in-bool-context 
> -Wno-unknown-warning-option -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. 
> -fstack-protector-strong -Wformat -Werror=format-security -O0 -Wall -Werror 
> -UNDEBUG -Wno-unused-function -Wno-int-in-bool-context 
> -Wno-unknown-warning-option -Wno-unused-local-typedefs -Wno-missing-braces 
> -Wno-unknown-pragmas" failed with exit status 1
> 
> /usr/lib/python3.10/distutils/core.py:163: SystemExit
> 
> During handling of the above exception, another exception occurred:
> 
> self = <pythran.tests.test_base.TestBase testMethod=test_complex_conj>
> 
>     def test_complex_conj(self):
> >       self.run_test("def complex_conjugate(c): return c.conjugate()", 
> > complex(0,1), complex_conjugate=[complex])
> 
> pythran/tests/test_base.py:540: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> pythran/tests/__init__.py:311: in run_test
>     cxx_compiled = compile_pythrancode(
> pythran/toolchain.py:414: in compile_pythrancode
>     output_file = compile_cxxcode(module_name,
> pythran/toolchain.py:354: in compile_cxxcode
>     output_binary = compile_cxxfile(module_name, fdpath,
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> module_name = 'test_complex_conjugate', cxxfile = '/tmp/tmpkcww606t.cpp'
> output_binary = None
> kwargs = {'extra_compile_args': ['-O0', '-Wall', '-Werror', '-UNDEBUG', 
> '-Wno-unused-function', '-Wno-int-in-bool-context', ...]}
> builddir = '/tmp/tmpvzyjge_a', buildtmp = '/tmp/tmpo9ql5e8_'
> extension = <pythran.dist.PythranExtension('test_complex_conjugate') at 
> 0x7febbcb20580>
> 
>     def compile_cxxfile(module_name, cxxfile, output_binary=None, **kwargs):
>         '''c++ file -> native module
>         Return the filename of the produced shared library
>         Raises CompileError on failure
>     
>         '''
>     
>         builddir = mkdtemp()
>         buildtmp = mkdtemp()
>     
>         extension = PythranExtension(module_name,
>                                      [cxxfile],
>                                      **kwargs)
>     
>         try:
>             setup(name=module_name,
>                   ext_modules=[extension],
>                   cmdclass={"build_ext": PythranBuildExt},
>                   # fake CLI call
>                   script_name='setup.py',
>                   script_args=['--verbose'
>                                if logger.isEnabledFor(logging.INFO)
>                                else '--quiet',
>                                'build_ext',
>                                '--build-lib', builddir,
>                                '--build-temp', buildtmp]
>                   )
>         except SystemExit as e:
> >           raise CompileError(str(e))
> E           distutils.errors.CompileError: error: Command 
> "x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g 
> -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat 
> -Werror=format-security -g -fwrapv -O2 -g -O2 
> -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat 
> -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC 
> -DENABLE_PYTHON_MODULE -D__PYTHRAN__=3 -DPYTHRAN_BLAS_BLAS 
> -I/<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran 
> -I/usr/lib/python3/dist-packages/numpy/core/include -I/usr/local/include 
> -I/usr/include -I/usr/include/python3.10 -c /tmp/tmpkcww606t.cpp -o 
> /tmp/tmpo9ql5e8_/tmp/tmpkcww606t.o -std=c++11 -fno-math-errno 
> -fvisibility=hidden -fno-wrapv -Wno-unused-function -Wno-int-in-bool-context 
> -Wno-unknown-warning-option -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. 
> -fstack-protector-strong -Wformat -Werror=format-security -O0 -Wall -Werror 
> -UNDEBUG -Wno-unused-function -Wno-int-in-bool-context 
> -Wno-unknown-warning-option -Wno-unused-local-typedefs -Wno-missing-braces 
> -Wno-unknown-pragmas" failed with exit status 1
> 
> pythran/toolchain.py:312: CompileError
> ----------------------------- Captured stdout call 
> -----------------------------
> running build_ext
> new_compiler returns <class 'distutils.unixccompiler.UnixCCompiler'>
> building 'test_complex_conjugate' extension
> C compiler: x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare 
> -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat 
> -Werror=format-security -g -fwrapv -O2 -g -O2 
> -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat 
> -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC
> 
> creating /tmp/tmpo9ql5e8_/tmp
> compile options: '-DENABLE_PYTHON_MODULE -D__PYTHRAN__=3 -DPYTHRAN_BLAS_BLAS 
> -I/<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran 
> -I/usr/lib/python3/dist-packages/numpy/core/include -I/usr/local/include 
> -I/usr/include -I/usr/include/python3.10 -c'
> extra options: '-std=c++11 -fno-math-errno -fvisibility=hidden -fno-wrapv 
> -Wno-unused-function -Wno-int-in-bool-context -Wno-unknown-warning-option -g 
> -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat 
> -Werror=format-security -O0 -Wall -Werror -UNDEBUG -Wno-unused-function 
> -Wno-int-in-bool-context -Wno-unknown-warning-option 
> -Wno-unused-local-typedefs -Wno-missing-braces -Wno-unknown-pragmas'
> x86_64-linux-gnu-gcc: /tmp/tmpkcww606t.cpp
> ----------------------------- Captured stderr call 
> -----------------------------
> In file included from 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/pythonic/include/__dispatch__/conjugate.hpp:4,
>                  from /tmp/tmpkcww606t.cpp:10:
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:22:36:
>  error: type/value mismatch at argument 2 in template parameter list for 
> ‘template<class T, class A> class xsimd::batch’
>    22 |     xsimd::batch<std::complex<T>, N>
>       |                                    ^
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:22:36:
>  note:   expected a type, got ‘N’
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:23:46:
>  error: type/value mismatch at argument 2 in template parameter list for 
> ‘template<class T, class A> class xsimd::batch’
>    23 |     conjugate(xsimd::batch<std::complex<T>, N> const &v)
>       |                                              ^
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:23:46:
>  note:   expected a type, got ‘N’
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:
>  In function ‘int {anonymous}::pythonic::numpy::wrapper::conjugate(const 
> int&)’:
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:25:25:
>  error: cannot convert ‘std::complex<double>’ to ‘int’ in return
>    25 |       return xsimd::conj(v);
>       |              ~~~~~~~~~~~^~~
>       |                         |
>       |                         std::complex<double>
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:
>  At global scope:
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:28:22:
>  error: type/value mismatch at argument 2 in template parameter list for 
> ‘template<class T, class A> class xsimd::batch’
>    28 |     xsimd::batch<T, N> conjugate(xsimd::batch<T, N> const &v)
>       |                      ^
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:28:22:
>  note:   expected a type, got ‘N’
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:28:51:
>  error: type/value mismatch at argument 2 in template parameter list for 
> ‘template<class T, class A> class xsimd::batch’
>    28 |     xsimd::batch<T, N> conjugate(xsimd::batch<T, N> const &v)
>       |                                                   ^
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:28:51:
>  note:   expected a type, got ‘N’
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:28:24:
>  error: redefinition of ‘template<class T, long unsigned int N> int 
> {anonymous}::pythonic::numpy::wrapper::conjugate(const int&)’
>    28 |     xsimd::batch<T, N> conjugate(xsimd::batch<T, N> const &v)
>       |                        ^~~~~~~~~
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/pythonic/include/numpy/conjugate.hpp:23:5:
>  note: ‘template<class T, long unsigned int N> int 
> {anonymous}::pythonic::numpy::wrapper::conjugate(const int&)’ previously 
> declared here
>    23 |     conjugate(xsimd::batch<std::complex<T>, N> const &v)
>       |     ^~~~~~~~~
> cc1plus: note: unrecognized command-line option ‘-Wno-unknown-warning-option’ 
> may have been intended to silence earlier diagnostics
> cc1plus: note: unrecognized command-line option ‘-Wno-unknown-warning-option’ 
> may have been intended to silence earlier diagnostics
> WARNING: Compilation error, trying hard to find its origin...
> WARNING: Nop, I'm going to flood you with C++ errors!
> ------------------------------ Captured log call 
> -------------------------------
> WARNING  pythran:toolchain.py:419 Compilation error, trying hard to find its 
> origin...
> WARNING  pythran:toolchain.py:422 Nop, I'm going to flood you with C++ errors!
> =============================== warnings summary 
> ===============================
> ../../../../../../usr/lib/python3/dist-packages/numpy/distutils/ccompiler.py:8
>   /usr/lib/python3/dist-packages/numpy/distutils/ccompiler.py:8: 
> DeprecationWarning: The distutils package is deprecated and slated for 
> removal in Python 3.12. Use setuptools or check PEP 632 for potential 
> alternatives
>     from distutils import ccompiler
> 
> ../../../../../../usr/lib/python3/dist-packages/numpy/distutils/ccompiler.py:17
>   /usr/lib/python3/dist-packages/numpy/distutils/ccompiler.py:17: 
> DeprecationWarning: The distutils.sysconfig module is deprecated, use 
> sysconfig instead
>     from distutils.sysconfig import customize_compiler
> 
> pythran/tables.py:4520
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/tables.py:4520: 
> DeprecationWarning: `np.bool` is a deprecated alias for the builtin `bool`. 
> To silence this warning, use `bool` by itself. Doing this will not modify any 
> behavior and is safe. If you specifically wanted the numpy scalar type, use 
> `np.bool_` here.
>   Deprecated in NumPy 1.20; for more details and guidance: 
> https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
>     if not hasattr(numpy, method):
> 
> pythran/tables.py:4520
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/tables.py:4520: 
> DeprecationWarning: `np.complex` is a deprecated alias for the builtin 
> `complex`. To silence this warning, use `complex` by itself. Doing this will 
> not modify any behavior and is safe. If you specifically wanted the numpy 
> scalar type, use `np.complex128` here.
>   Deprecated in NumPy 1.20; for more details and guidance: 
> https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
>     if not hasattr(numpy, method):
> 
> pythran/tables.py:4520
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/tables.py:4520: 
> DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. 
> To silence this warning, use `float` by itself. Doing this will not modify 
> any behavior and is safe. If you specifically wanted the numpy scalar type, 
> use `np.float64` here.
>   Deprecated in NumPy 1.20; for more details and guidance: 
> https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
>     if not hasattr(numpy, method):
> 
> pythran/tables.py:4553
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/tables.py:4553: 
> DeprecationWarning: `np.bool` is a deprecated alias for the builtin `bool`. 
> To silence this warning, use `bool` by itself. Doing this will not modify any 
> behavior and is safe. If you specifically wanted the numpy scalar type, use 
> `np.bool_` here.
>   Deprecated in NumPy 1.20; for more details and guidance: 
> https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
>     obj = getattr(themodule, elem)
> 
> pythran/tables.py:4553
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/tables.py:4553: 
> DeprecationWarning: `np.complex` is a deprecated alias for the builtin 
> `complex`. To silence this warning, use `complex` by itself. Doing this will 
> not modify any behavior and is safe. If you specifically wanted the numpy 
> scalar type, use `np.complex128` here.
>   Deprecated in NumPy 1.20; for more details and guidance: 
> https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
>     obj = getattr(themodule, elem)
> 
> pythran/tables.py:4553
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/tables.py:4553: 
> DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. 
> To silence this warning, use `float` by itself. Doing this will not modify 
> any behavior and is safe. If you specifically wanted the numpy scalar type, 
> use `np.float64` here.
>   Deprecated in NumPy 1.20; for more details and guidance: 
> https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
>     obj = getattr(themodule, elem)
> 
> pythran/tests/__init__.py:72
>   
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build/pythran/tests/__init__.py:72:
>  PytestUnknownMarkWarning: Unknown pytest.mark.module - is this a typo?  You 
> can register custom marks to avoid this warning - for details, see 
> https://docs.pytest.org/en/stable/mark.html
>     module = pytest.mark.module
> 
> .pybuild/cpython3_3.10_pythran/build/pythran/tests/test_base.py::TestBase::test_declarations
> .pybuild/cpython3_3.10_pythran/build/pythran/tests/test_base.py::TestBase::test_multiple_return1
> .pybuild/cpython3_3.10_pythran/build/pythran/tests/test_base.py::TestBase::test_multiple_return2
> .pybuild/cpython3_3.10_pythran/build/pythran/tests/test_base.py::TestBase::test_multiple_return3
> .pybuild/cpython3_3.10_pythran/build/pythran/tests/test_base.py::TestBase::test_shadow_parameters
> .pybuild/cpython3_3.10_pythran/build/pythran/tests/test_base.py::TestBase::test_shadow_parameters
> .pybuild/cpython3_3.10_pythran/build/pythran/tests/test_base.py::TestBase::test_sorted1
> .pybuild/cpython3_3.10_pythran/build/pythran/tests/test_base.py::TestBase::test_sorted3
>   /usr/lib/python3.10/ast.py:410: DeprecationWarning: visit_NameConstant is 
> deprecated; add visit_Constant
>     return visitor(node)
> 
> -- Docs: https://docs.pytest.org/en/stable/warnings.html
> =========================== short test summary info 
> ============================
> FAILED pythran/tests/test_base.py::TestBase::test_complex_conj - 
> distutils.er...
> ====== 1 failed, 194 passed, 1 skipped, 17 warnings in 437.16s (0:07:17) 
> =======
> E: pybuild pybuild:369: test: plugin distutils failed with: exit code=1: cd 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_pythran/build; python3.10 -m pytest 
> pythran/tests/test_base.py
> dh_auto_test: error: pybuild --test -i python{version} -p "3.9 3.10" returned 
> exit code 13
> make[1]: *** [debian/rules:30: override_dh_auto_test] Error 25


The full build log is available from:
http://qa-logs.debian.net/2022/06/24/pythran_0.10.0+ds2-8_unstable.log

All bugs filed during this archive rebuild are listed at:
https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=ftbfs-20220624;[email protected]
or:
https://udd.debian.org/bugs/?release=na&merged=ign&fnewerval=7&flastmodval=7&fusertag=only&fusertagtag=ftbfs-20220624&[email protected]&allbugs=1&cseverity=1&ctags=1&caffected=1#results

A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!

If you reassign this bug to another package, please marking it as 'affects'-ing
this package. See https://www.debian.org/Bugs/server-control#affects

If you fail to reproduce this, please provide a build log and diff it with mine
so that we can identify if something relevant changed in the meantime.

--- End Message ---
--- Begin Message ---
Source: pythran
Source-Version: 0.11.0+ds-1
Done: Drew Parsons <[email protected]>

We believe that the bug you reported is fixed in the latest version of
pythran, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to [email protected],
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Drew Parsons <[email protected]> (supplier of updated pythran package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing [email protected])


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Format: 1.8
Date: Sat, 25 Jun 2022 14:39:50 +0200
Source: pythran
Architecture: source
Version: 0.11.0+ds-1
Distribution: experimental
Urgency: medium
Maintainer: Debian Python Team <[email protected]>
Changed-By: Drew Parsons <[email protected]>
Closes: 1012437 1013570
Changes:
 pythran (0.11.0+ds-1) experimental; urgency=medium
 .
   * Team upload.
   * New upstream release.
   * update versioned Build-Depends: python3-beniget (>= 0.4.0~),
     python3-gast (>= 0.5.0~), python3-ply (>= 0.34~)
   * restrict Depends: libxsimd-dev to xsimd 0.8-supported arches only:
     amd64 arm64 kfreebsd-any. armhf and i386 still fail xsimd tests
     so don't include them yet. Closes: #1012437, #1013570.
     - Depends: libxsimd-dev (>= 8.0.5~) [amd64 arm64 kfreebsd-any]
Checksums-Sha1:
 7e5f030b414263f901b1b8dcd196b4d19e0870b6 2561 pythran_0.11.0+ds-1.dsc
 d4578efa9d23e3338a719a4ab45bf869d53d4acf 621320 pythran_0.11.0+ds.orig.tar.xz
 00b627fcb6330679340aacf2030efdd32bb5106a 13204 
pythran_0.11.0+ds-1.debian.tar.xz
Checksums-Sha256:
 f96cb9ce9a0bbefdac5667c6a8cead8a0b387c22a676b533bb9665288557d06a 2561 
pythran_0.11.0+ds-1.dsc
 adcd4e20f97c98d9c41ff127b4cdb0eb09bc832665ac7d95b4b58e78e81987c4 621320 
pythran_0.11.0+ds.orig.tar.xz
 8b14cbab73e3a0159276563050fc27ab51911a79332b7ffa39ecbf10e9b6a07b 13204 
pythran_0.11.0+ds-1.debian.tar.xz
Files:
 ceb6b8161072ca458bb7ec39917c01f0 2561 python optional pythran_0.11.0+ds-1.dsc
 580e09ad63650e3d45d2ee118b300adf 621320 python optional 
pythran_0.11.0+ds.orig.tar.xz
 88c2d01acb5d27f8c5992757986ed260 13204 python optional 
pythran_0.11.0+ds-1.debian.tar.xz

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEI8mpPlhYGekSbQo2Vz7x5L1aAfoFAmK3DKYACgkQVz7x5L1a
Afr/whAAgtZN8303hvOyeh1jtKKncY4LIJbVzIoSzrcIa4/b5qdMGTxHT4HL2zjw
0kCyQxv8vTU7IiNMgqGb/aK91bnT8ZB3/+Z2QnBxFjo+sBkfIWOzlRTc+FbufD/i
fRmJ1CPbCKEJExKCNyhiFmZkGF4pjgAGimnjDOxVQwJVaRvTbxQ2K8M3wFTMwIbG
OWzEkc8t1DlTOhmrwGvdVy6mRz+YRI2OJLik05tA5F97E9/hN6HaurBbyONKMiBv
AwfUs5+f4BWUMBx3hN+MKPJGloxp90/grWiCRtwNfeB2RjuFssG8zGjR0LZlIOlD
SUObtDIgX3xYjsieAJPw99WfI/JQib4KOhUongwsBIAJ/tuFNkDMWX5oDJt9X/K5
5+iPeCY/OAGwyjNd4gYHwbsRUh0Q37evJx8s+3jGGpeXDZcBeeme1wIMmhSwY7HO
g1VK3z7lcEn4DJYRajJp8boBEdGlQ7PWbHPFx59ERAmMhXKLJppa+nrJc+69pfb9
f9WA6sm9bZXuj1o9XvL4jq4jnTweZF4+WmEd8xMYdqzQpfWPa5ji3+mPauVrzleP
KfD4wJlqI2Z5p8ErlEkwtSpF15Kr4GE5iST8QuQxaohGyemkwdBL07uUHQ1xg3BH
iOyZiypBRDjsJyg7fjVgJPhr/x48juyoVTlpOTalAv7+HRtJshU=
=qR+Y
-----END PGP SIGNATURE-----

--- End Message ---

Reply via email to