def _run_setup_py(self, args, echo=True, echo2=True, ff=''):
        """Run setup.py with monkey-patched setuptools.

        The patch forces setuptools to use the file-finder 'ff'.
        If 'ff' is the empty string, the patch is not applied.

        'args' is the list of arguments that should be passed to
        setup.py.
        """
        python = self.python

        if ff:
            setup_py = '-c"%s"' % (RUN_SETUP % locals())
        else:
            setup_py = 'setup.py %s' % ' '.join(args)

        rc, lines = self.process.popen(
            '"%(python)s" %(setup_py)s' % locals(), echo=echo, echo2=echo2)

        return rc, lines
Run setup.py with monkey-patched setuptools.

        The patch forces setuptools to use the file-finder 'ff'.
        If 'ff' is the empty string, the patch is not applied.

        'args' is the list of arguments that should be passed to
        setup.py.