'Add install_req as a requirement to install.
:param parent_req_name: The name of the requirement that needed this
added. The name is used because when multiple unnamed requirements
resolve to the same name, we could otherwise end up with dependency
links that point outside the Requirements set. parent_req must
already be added. Note that None implies that this is a user
supplied requirement, vs an inferred one.
:return: Additional requirements to scan. That is either [] if
the requirement is not applicable, or [install_req] if the
requirement is applicable and has just been added.'

def add_requirement(self, install_req, parent_req_name=None):

    name = install_req.name
    if (not install_req.match_markers()):
        logger.warning("Ignoring    %s:    markers    %r    don't    match    your    environment", install_req.name, install_req.markers)
        return []
    install_req.as_egg = self.as_egg
    install_req.use_user_site = self.use_user_site
    install_req.target_dir = self.target_dir
    install_req.pycompile = self.pycompile
    if (not name):
        self.unnamed_requirements.append(install_req)
        return [install_req]
    else:
        try:
            existing_req = self.get_requirement(name)
        except KeyError:
            existing_req = None
        if ((parent_req_name is None) and existing_req and (not existing_req.constraint) and (existing_req.extras == install_req.extras) and (not (existing_req.req.specs == install_req.req.specs))):
            raise InstallationError(('Double    requirement    given:    %s    (already    in    %s,    name=%r)' % (install_req, existing_req, name)))
        if (not existing_req):
            self.requirements[name] = install_req
            if (name.lower() != name):
                self.requirement_aliases[name.lower()] = name
            result = [install_req]
        else:
            result = []
            if ((not install_req.constraint) and existing_req.constraint):
                if (install_req.link and (not (existing_req.link and (install_req.link.path == existing_req.link.path)))):
                    self.reqs_to_cleanup.append(install_req)
                    raise InstallationError(("Could    not    satisfy    constraints    for    '%s':    installation    from    path    or    url    cannot    be    constrained    to    a    version" % name))
                existing_req.constraint = False
                existing_req.extras = tuple(sorted(set(existing_req.extras).union(set(install_req.extras))))
                logger.debug('Setting    %s    extras    to:    %s', existing_req, existing_req.extras)
                result = [existing_req]
            install_req = existing_req
        if parent_req_name:
            parent_req = self.get_requirement(parent_req_name)
            self._dependencies[parent_req].append(install_req)
        return result
