(I've been not quite following, so take this with a grain of salt.)
The normal approach in pkgsrc is to set a system-wide variable to
specify the implementation, and thus to install only one of the
alternatives. We do this for pgsql and kerberos.
If the ABI of the variants is really the same, then one can flip the
variable and "make replace OLDNAME=" with the new openblas. Or just
pkg_delete -f and install the ne one.
If they are made parallel installable, sort of like guile20 and guile22,
then there can be a per-package variable to link against various
versions. However, if there is a library that links against OpenBLAS,
and then something else links against that, and also directly, or
indirectly via another library that links againat a different version,
then it gets very messy very fast. It's likely that the files will be
namespaces (/usr/pkg/openblas-{foo,bar}/lib/libopenblas.so), but much
harder to namespace the symbols. So two in one binary is very likely
not going to work.
An alternative approach is to bootstrap pkgsrc multiple time, with a
single global variable set to different implementations, and build
different packages in the the different pkg instances. While the astute
reader will note that this does not scale well to multiple difficult
packages, we don't really need scaling, but rather feasible solutions
for the actual problems of interest. Still, it seems too complicated.
Another approach is to write better tests and fix the various packages.
Without understanding the details, it seems that it is basically a bug
that multiple variants exist. But I realize coping with bugs is
sometimes easier than fixing them.
I see in wip openblas-devel and OpenBLAS, and they seem to be the same
version. Where are the various versions being considered to be
switched?