That, unfortunately, is too convoluted to figure out without real study.
Without a clear example, I simply find the full, real path of the executable
and presume that the standard ../share/${program}/ is correct. Probably
an illuminating example would make life easier..... :-)
If a GPL'd solution is OK, I recommend libiberty. I moved GCC's
make_relative_prefix into libiberty some time ago because I kept
needing this functionality elsewhere.
You give it argv[0], BINDIR, and OTHERDIR; it computes the relative
path between bindir and otherdir, finds your application in $PATH or
similar, and works out the likely location of otherdir.