The version number you specify here should not be the version of the base release from which you expect the package to come from, but the version of the package you are using. You should only write down use directives for the packages you need directly. The release tools will take care of calculating the transitive closure of uses. Avoid creating cyclic dependencies among packages, or for that matter, among individual libraries. It is always possible to construct a design that needs no cycles.
Cycles are utterly bad, and almost always imply that the interface design is incorrect.
The surge of cycles is one of the first symptoms that something is going severely wrong in the design. It is not an indication that your linker is dumb and you just have to find a way to beat it into submission.