libsolv/yast does it ( if I understood correctly ).You can have some
virtual provides that exist as fake packages in the db, and then have a
package have a requires on it. So it cannot be installed if the hardware
is not here.
Having a fake package in DB makes it very static. I think a
dynamic (evaluated each time rpm commands are run) implementation
will be more useful for the cases like P2V and V2V.
Thanks,
Ravindra