Current implementation of a dep solving supports only strong (@Requires:@) simple (@package_name@) dependencies. In order to support strong (@Requires:@) rich (aka "boolean":http://rpm.org/user_doc/boolean_dependencies.html) dependencies an external library should be used. The suggestion is to drop the current implementation of dep solving and for any kind of a dep solving start using: - either @libdnf@ via its Python interface (python2-dnf) - or @libsolv@ via its Python bindings (python2-solv) @libdnf@ uses @libsolv@ and exposes a higher level API to a user. Both @libdnf@ and @libsolv@ requires @repodata@ to perform dep solving. Some temporary working directory should be provided to a solver to store its cache there. Use cases to keep in mind: * list dependencies for a given rpm package * list fulfilled dependencies (from a given list of available packages) for a given rpm package * validate that all the dependencies (from a given list of available packages) for a given rpm package are fulfilled. * perform dep solving against multiple repositories An example of the dep solving use case in Pulp is a @recursive@ flag during a copy: https://docs.pulpproject.org/plugins/pulp_rpm/user-guide/recipes.html?highlight=recursive#copy-errata-from-one-repository-to-another Dep solving related functionality to support: https://pulp.plan.io/issues/2478 Example usage of the @libsolv@ Python bindings: https://github.com/fedora-modularity/depchase Ping ttereshc @ttereshc for more details about examples for @libdnf@ case. Figure out which library supports all required functionality. Keep in mind that performance is important as well. There could be repositories with 100K+ packages against which dep solving can be requested.