The comments on FSubDir appear to be completely wrong:
# If $(>) is the path to the current directory, compute the
# path (using ../../ etc) back to that root directory.
# Sets result in $(<)
I suggest the following replacement:
# Given $(<), the tokens comprising a relative path from D1 to
# a subdirectory D2, return the relative path from D2 to D1,
# using ../../ etc.