There are several ways of handling recursive targets.
I found at least
It looks that the latter has a couple of problems comparing to others.
First, it does not handle '@' in a port name.
Second, it would set FLAVOR to the empty value even if a package is not
"flavored". That can confuse some ports.
A fast demonstration of the second problem:
$ make -C /usr/ports/lang/gcc9 checksum-recursive ... ===> native-binutils-2.33.1_4,1 depends on file: /usr/local/sbin/pkg - found ===> Fetching all distfiles required by native-binutils-2.33.1_4,1 for building ...
Note how the package name is native-binutils instead of binutils.
A longer demonstration of the problem would be with the package-resursive target.
That issue was reported and analyzed some time ago, unfortunately with
no action: https://email@example.com/msg84543.html
The proposed change brings _FLAVOR_RECURSIVE_SH closer to the other
recursion methods and it should fix both of the problems.