Home - Summaries: (main) : (py3.11) : (py3.12) : Everything - Nightly builds - Benchmarks - RPython - Builders - About

cffi_tests.cffi0.test_zdistutils.TestDistUtilsCPython:test_tag

self = <distutils._msvccompiler.MSVCCompiler object at 0x000002287a706138>
target_desc = 'shared_object'
objects = ['d:\\pypy_stuff\\buildbot64\\slave\\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__\\Releas...\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__\\_cffi_xxtest_tagxx_gabe4f798xa2889239.obj']
output_filename = 'd:\\pypy_stuff\\buildbot64\\slave\\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__\\_cffi_xxtest_tagxx_gabe4f798xa2889239.pypy312-pp80-win_amd64.pyd'
output_dir = 'd:\\pypy_stuff\\buildbot64\\slave\\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__'
libraries = []
library_dirs = ['d:\\pypy_stuff\\buildbot64\\slave\\pypy-c-jit-win-x86-64\\venv\\pypy-venv\\libs', 'D:\\pypy_stuff\\buildbot64\\slave....34120\\ATLMFC\\lib\\x64', 'd:\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\lib\\x64', ...]
runtime_library_dirs = []
export_symbols = ['_cffi_f_test1tag', 'PyInit__cffi_xxtest_tagxx_gabe4f798xa2889239']
debug = 0, extra_preargs = None, extra_postargs = []
build_temp = 'd:\\pypy_stuff\\buildbot64\\slave\\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__\\Release\\pypy_stuff\\buildbot64\\slave\\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__'
target_lang = 'c'

    def link(
        self,
        target_desc,
        objects,
        output_filename,
        output_dir=None,
        libraries=None,
        library_dirs=None,
        runtime_library_dirs=None,
        export_symbols=None,
        debug=0,
        extra_preargs=None,
        extra_postargs=None,
        build_temp=None,
        target_lang=None,
    ):
        if not self.initialized:
            self.initialize()
        objects, output_dir = self._fix_object_args(objects, output_dir)
        fixed_args = self._fix_lib_args(libraries, library_dirs, runtime_library_dirs)
        libraries, library_dirs, runtime_library_dirs = fixed_args
    
        if runtime_library_dirs:
            self.warn(
                "I don't know what to do with 'runtime_library_dirs': "
                + str(runtime_library_dirs)
            )
    
        lib_opts = gen_lib_options(self, library_dirs, runtime_library_dirs, libraries)
        if output_dir is not None:
            output_filename = os.path.join(output_dir, output_filename)
    
        if self._need_link(objects, output_filename):
            ldflags = self._ldflags[target_desc, debug]
    
            export_opts = ["/EXPORT:" + sym for sym in (export_symbols or [])]
    
            ld_args = (
                ldflags + lib_opts + export_opts + objects + ['/OUT:' + output_filename]
            )
    
            # The MSVC linker generates .lib and .exp files, which cannot be
            # suppressed by any linker switches. The .lib files may even be
            # needed! Make sure they are generated in the temporary build
            # directory. Since they have different names for debug and release
            # builds, they can go into the same directory.
            build_temp = os.path.dirname(objects[0])
            if export_symbols is not None:
                (dll_name, dll_ext) = os.path.splitext(
                    os.path.basename(output_filename)
                )
                implib_file = os.path.join(build_temp, self.library_filename(dll_name))
                ld_args.append('/IMPLIB:' + implib_file)
    
            if extra_preargs:
                ld_args[:0] = extra_preargs
            if extra_postargs:
                ld_args.extend(extra_postargs)
    
            output_dir = os.path.dirname(os.path.abspath(output_filename))
            self.mkpath(output_dir)
            try:
                log.debug('Executing "%s" %s', self.linker, ' '.join(ld_args))
>               self.spawn([self.linker] + ld_args)

pypy-venv\Lib\site-packages\setuptools\_distutils\_msvccompiler.py:508: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <distutils._msvccompiler.MSVCCompiler object at 0x000002287a706138>
cmd = ['d:\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\bin\\HostX86\\x64\\link.exe', '/nologo', '/INCREMENTAL:NO', '/LTCG', '/DLL', '/MANIFEST:EMBED,ID=2', ...]

    def spawn(self, cmd):
        env = dict(os.environ, PATH=self._paths)
        with self._fallback_spawn(cmd, env) as fallback:
>           return super().spawn(cmd, env=env)

pypy-venv\Lib\site-packages\setuptools\_distutils\_msvccompiler.py:517: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <distutils._msvccompiler.MSVCCompiler object at 0x000002287a706138>
cmd = ['d:\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\bin\\HostX86\\x64\\link.exe', '/nologo', '/INCREMENTAL:NO', '/LTCG', '/DLL', '/MANIFEST:EMBED,ID=2', ...]
kwargs = {'env': {'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\matti\\AppData\\Roaming', 'ASL.LOG': 'Destination=file', 'CHOCOLATEYINSTALL': 'C:\\ProgramData\\chocolatey', ...}}

    def spawn(self, cmd, **kwargs):
>       spawn(cmd, dry_run=self.dry_run, **kwargs)

pypy-venv\Lib\site-packages\setuptools\_distutils\ccompiler.py:1041: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

cmd = 'd:\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\bin\\HostX86\\x64\\link.exe'
search_path = 1, verbose = 0, dry_run = 0
env = {'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\matti\\AppData\\Roaming', 'ASL.LOG': 'Destination=file', 'CHOCOLATEYINSTALL': 'C:\\ProgramData\\chocolatey', ...}

    def spawn(cmd, search_path=1, verbose=0, dry_run=0, env=None):  # noqa: C901
        """Run another program, specified as a command list 'cmd', in a new process.
    
        'cmd' is just the argument list for the new process, ie.
        cmd[0] is the program to run and cmd[1:] are the rest of its arguments.
        There is no way to run a program with a name different from that of its
        executable.
    
        If 'search_path' is true (the default), the system's executable
        search path will be used to find the program; otherwise, cmd[0]
        must be the exact path to the executable.  If 'dry_run' is true,
        the command will not actually be run.
    
        Raise DistutilsExecError if running the program fails in any way; just
        return on success.
        """
        # cmd is documented as a list, but just in case some code passes a tuple
        # in, protect our %-formatting code against horrible death
        cmd = list(cmd)
    
        log.info(subprocess.list2cmdline(cmd))
        if dry_run:
            return
    
        if search_path:
            executable = find_executable(cmd[0])
            if executable is not None:
                cmd[0] = executable
    
        env = env if env is not None else dict(os.environ)
    
        if sys.platform == 'darwin':
            from distutils.util import MACOSX_VERSION_VAR, get_macosx_target_ver
    
            macosx_target_ver = get_macosx_target_ver()
            if macosx_target_ver:
                env[MACOSX_VERSION_VAR] = macosx_target_ver
    
        try:
            proc = subprocess.Popen(cmd, env=env)
            proc.wait()
            exitcode = proc.returncode
        except OSError as exc:
            if not DEBUG:
                cmd = cmd[0]
            raise DistutilsExecError(f"command {cmd!r} failed: {exc.args[-1]}") from exc
    
        if exitcode:
            if not DEBUG:
                cmd = cmd[0]
>           raise DistutilsExecError(f"command {cmd!r} failed with exit code {exitcode}")
E           distutils.errors.DistutilsExecError: command 'd:\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\bin\\HostX86\\x64\\link.exe' failed with exit code 1104

pypy-venv\Lib\site-packages\setuptools\_distutils\spawn.py:68: DistutilsExecError

During handling of the above exception, another exception occurred:

tmpdir = 'd:\\pypy_stuff\\buildbot64\\slave\\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__'
ext = <setuptools.extension.Extension('_cffi_xxtest_tagxx_gabe4f798xa2889239') at 0x2287b5b4288>
compiler_verbose = 0, debug = 0

    def _build(tmpdir, ext, compiler_verbose=0, debug=None):
        # XXX compact but horrible :-(
        from cffi._shimmed_dist_utils import Distribution, CompileError, LinkError, set_threshold, set_verbosity
    
        dist = Distribution({'ext_modules': [ext]})
        dist.parse_config_files()
        options = dist.get_option_dict('build_ext')
        if debug is None:
            debug = sys.flags.debug
        options['debug'] = ('ffiplatform', debug)
        options['force'] = ('ffiplatform', True)
        options['build_lib'] = ('ffiplatform', tmpdir)
        options['build_temp'] = ('ffiplatform', tmpdir)
        #
        try:
            old_level = set_threshold(0) or 0
            try:
                set_verbosity(compiler_verbose)
>               dist.run_command('build_ext')

..\build\lib_pypy\cffi\ffiplatform.py:84: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <setuptools.dist.Distribution object at 0x000002287a8db558>
command = 'build_ext'

    def run_command(self, command):
        self.set_defaults()
        # Postpone defaults until all explicit configuration is considered
        # (setup() args, config files, command line and plugins)
    
>       super().run_command(command)

pypy-venv\Lib\site-packages\setuptools\dist.py:968: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <setuptools.dist.Distribution object at 0x000002287a8db558>
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()

pypy-venv\Lib\site-packages\setuptools\_distutils\dist.py:988: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <setuptools.command.build_ext.build_ext object at 0x000002287a706100>

    def run(self):
        """Build extensions in build directory, then copy if --inplace"""
        old_inplace, self.inplace = self.inplace, 0
>       _build_ext.run(self)

pypy-venv\Lib\site-packages\setuptools\command\build_ext.py:91: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <setuptools.command.build_ext.build_ext object at 0x000002287a706100>

    def run(self):  # noqa: C901
        from ..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()

pypy-venv\Lib\site-packages\setuptools\_distutils\command\build_ext.py:359: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <setuptools.command.build_ext.build_ext object at 0x000002287a706100>

    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()

pypy-venv\Lib\site-packages\setuptools\_distutils\command\build_ext.py:479: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <setuptools.command.build_ext.build_ext object at 0x000002287a706100>

    def _build_extensions_serial(self):
        for ext in self.extensions:
            with self._filter_build_errors(ext):
>               self.build_extension(ext)

pypy-venv\Lib\site-packages\setuptools\_distutils\command\build_ext.py:505: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <setuptools.command.build_ext.build_ext object at 0x000002287a706100>
ext = <setuptools.extension.Extension('_cffi_xxtest_tagxx_gabe4f798xa2889239') at 0x2287b5b4288>

    def build_extension(self, ext):
        ext._convert_pyx_sources_to_lang()
        _compiler = self.compiler
        try:
            if isinstance(ext, Library):
                self.compiler = self.shlib_compiler
>           _build_ext.build_extension(self, ext)

pypy-venv\Lib\site-packages\setuptools\command\build_ext.py:252: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <setuptools.command.build_ext.build_ext object at 0x000002287a706100>
ext = <setuptools.extension.Extension('_cffi_xxtest_tagxx_gabe4f798xa2889239') at 0x2287b5b4288>

    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,
        )
    
        # XXX outdated variable, kept here in case third-part code
        # needs it.
        self._built_objects = objects[:]
    
        # Now link the object files together into a "shared object" --
        # of course, first we have to figure out all the other things
        # that go into the mix.
        if ext.extra_objects:
            objects.extend(ext.extra_objects)
        extra_args = ext.extra_link_args or []
    
        # Detect target language, if not provided
        language = ext.language or self.compiler.detect_language(sources)
    
>       self.compiler.link_shared_object(
            objects,
            ext_path,
            libraries=self.get_libraries(ext),
            library_dirs=ext.library_dirs,
            runtime_library_dirs=ext.runtime_library_dirs,
            extra_postargs=extra_args,
            export_symbols=self.get_export_symbols(ext),
            debug=self.debug,
            build_temp=self.build_temp,
            target_lang=language,
        )

pypy-venv\Lib\site-packages\setuptools\_distutils\command\build_ext.py:584: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <distutils._msvccompiler.MSVCCompiler object at 0x000002287a706138>
objects = ['d:\\pypy_stuff\\buildbot64\\slave\\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__\\Releas...\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__\\_cffi_xxtest_tagxx_gabe4f798xa2889239.obj']
output_filename = 'd:\\pypy_stuff\\buildbot64\\slave\\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__\\_cffi_xxtest_tagxx_gabe4f798xa2889239.pypy312-pp80-win_amd64.pyd'
output_dir = None, libraries = [], library_dirs = [], runtime_library_dirs = []
export_symbols = ['_cffi_f_test1tag', 'PyInit__cffi_xxtest_tagxx_gabe4f798xa2889239']
debug = 0, extra_preargs = None, extra_postargs = []
build_temp = 'd:\\pypy_stuff\\buildbot64\\slave\\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__\\Release'
target_lang = 'c'

    def link_shared_object(
        self,
        objects,
        output_filename,
        output_dir=None,
        libraries=None,
        library_dirs=None,
        runtime_library_dirs=None,
        export_symbols=None,
        debug=0,
        extra_preargs=None,
        extra_postargs=None,
        build_temp=None,
        target_lang=None,
    ):
>       self.link(
            CCompiler.SHARED_OBJECT,
            objects,
            output_filename,
            output_dir,
            libraries,
            library_dirs,
            runtime_library_dirs,
            export_symbols,
            debug,
            extra_preargs,
            extra_postargs,
            build_temp,
            target_lang,
        )

pypy-venv\Lib\site-packages\setuptools\_distutils\ccompiler.py:752: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <distutils._msvccompiler.MSVCCompiler object at 0x000002287a706138>
target_desc = 'shared_object'
objects = ['d:\\pypy_stuff\\buildbot64\\slave\\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__\\Releas...\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__\\_cffi_xxtest_tagxx_gabe4f798xa2889239.obj']
output_filename = 'd:\\pypy_stuff\\buildbot64\\slave\\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__\\_cffi_xxtest_tagxx_gabe4f798xa2889239.pypy312-pp80-win_amd64.pyd'
output_dir = 'd:\\pypy_stuff\\buildbot64\\slave\\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__'
libraries = []
library_dirs = ['d:\\pypy_stuff\\buildbot64\\slave\\pypy-c-jit-win-x86-64\\venv\\pypy-venv\\libs', 'D:\\pypy_stuff\\buildbot64\\slave....34120\\ATLMFC\\lib\\x64', 'd:\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\lib\\x64', ...]
runtime_library_dirs = []
export_symbols = ['_cffi_f_test1tag', 'PyInit__cffi_xxtest_tagxx_gabe4f798xa2889239']
debug = 0, extra_preargs = None, extra_postargs = []
build_temp = 'd:\\pypy_stuff\\buildbot64\\slave\\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__\\Release\\pypy_stuff\\buildbot64\\slave\\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__'
target_lang = 'c'

    def link(
        self,
        target_desc,
        objects,
        output_filename,
        output_dir=None,
        libraries=None,
        library_dirs=None,
        runtime_library_dirs=None,
        export_symbols=None,
        debug=0,
        extra_preargs=None,
        extra_postargs=None,
        build_temp=None,
        target_lang=None,
    ):
        if not self.initialized:
            self.initialize()
        objects, output_dir = self._fix_object_args(objects, output_dir)
        fixed_args = self._fix_lib_args(libraries, library_dirs, runtime_library_dirs)
        libraries, library_dirs, runtime_library_dirs = fixed_args
    
        if runtime_library_dirs:
            self.warn(
                "I don't know what to do with 'runtime_library_dirs': "
                + str(runtime_library_dirs)
            )
    
        lib_opts = gen_lib_options(self, library_dirs, runtime_library_dirs, libraries)
        if output_dir is not None:
            output_filename = os.path.join(output_dir, output_filename)
    
        if self._need_link(objects, output_filename):
            ldflags = self._ldflags[target_desc, debug]
    
            export_opts = ["/EXPORT:" + sym for sym in (export_symbols or [])]
    
            ld_args = (
                ldflags + lib_opts + export_opts + objects + ['/OUT:' + output_filename]
            )
    
            # The MSVC linker generates .lib and .exp files, which cannot be
            # suppressed by any linker switches. The .lib files may even be
            # needed! Make sure they are generated in the temporary build
            # directory. Since they have different names for debug and release
            # builds, they can go into the same directory.
            build_temp = os.path.dirname(objects[0])
            if export_symbols is not None:
                (dll_name, dll_ext) = os.path.splitext(
                    os.path.basename(output_filename)
                )
                implib_file = os.path.join(build_temp, self.library_filename(dll_name))
                ld_args.append('/IMPLIB:' + implib_file)
    
            if extra_preargs:
                ld_args[:0] = extra_preargs
            if extra_postargs:
                ld_args.extend(extra_postargs)
    
            output_dir = os.path.dirname(os.path.abspath(output_filename))
            self.mkpath(output_dir)
            try:
                log.debug('Executing "%s" %s', self.linker, ' '.join(ld_args))
                self.spawn([self.linker] + ld_args)
            except DistutilsExecError as msg:
>               raise LinkError(msg)
E               distutils.errors.LinkError: command 'd:\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\bin\\HostX86\\x64\\link.exe' failed with exit code 1104

pypy-venv\Lib\site-packages\setuptools\_distutils\_msvccompiler.py:510: LinkError

During handling of the above exception, another exception occurred:

self = <extra_tests.cffi_tests.cffi0.test_zdistutils.TestDistUtilsCPython object at 0x000002287a8db4e8>

    def test_tag(self):
        ffi = FFI()
        ffi.cdef("/* %s test_tag */ double test1tag(double x);" % self)
        csrc = "double test1tag(double x) { return x - 42.0; }"
>       lib = ffi.verify(csrc, force_generic_engine=self.generic,
                         tag='xxtest_tagxx')

..\build\extra_tests\cffi_tests\cffi0\test_zdistutils.py:270: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
..\build\lib_pypy\cffi\api.py:461: in verify
    lib = self.verifier.load_library()
..\build\lib_pypy\cffi\verifier.py:105: in load_library
    self._compile_module()
..\build\lib_pypy\cffi\verifier.py:201: in _compile_module
    outputfilename = ffiplatform.compile(tmpdir, self.get_extension())
..\build\lib_pypy\cffi\ffiplatform.py:56: in compile
    outputfilename = _build(tmpdir, ext, compiler_verbose, debug)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

tmpdir = 'd:\\pypy_stuff\\buildbot64\\slave\\pypy-c-jit-win-x86-64\\build\\extra_tests\\cffi_tests\\cffi0\\__pycache__'
ext = <setuptools.extension.Extension('_cffi_xxtest_tagxx_gabe4f798xa2889239') at 0x2287b5b4288>
compiler_verbose = 0, debug = 0

    def _build(tmpdir, ext, compiler_verbose=0, debug=None):
        # XXX compact but horrible :-(
        from cffi._shimmed_dist_utils import Distribution, CompileError, LinkError, set_threshold, set_verbosity
    
        dist = Distribution({'ext_modules': [ext]})
        dist.parse_config_files()
        options = dist.get_option_dict('build_ext')
        if debug is None:
            debug = sys.flags.debug
        options['debug'] = ('ffiplatform', debug)
        options['force'] = ('ffiplatform', True)
        options['build_lib'] = ('ffiplatform', tmpdir)
        options['build_temp'] = ('ffiplatform', tmpdir)
        #
        try:
            old_level = set_threshold(0) or 0
            try:
                set_verbosity(compiler_verbose)
                dist.run_command('build_ext')
                cmd_obj = dist.get_command_obj('build_ext')
                [soname] = cmd_obj.get_outputs()
            finally:
                set_threshold(old_level)
        except (CompileError, LinkError) as e:
>           raise VerificationError('%s: %s' % (e.__class__.__name__, e))
E           cffi.VerificationError: LinkError: command 'd:\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\bin\\HostX86\\x64\\link.exe' failed with exit code 1104

..\build\lib_pypy\cffi\ffiplatform.py:90: VerificationError
builder: pypy-c-jit-win-x86-64 build #2497+
test: cffi_tests.cffi0.test_zdistutils.TestDistUtilsCPython:test_tag