Determine how the Fortran compiler mangles names



Output Effect

If no action is specified, one of the following names is defined

 If fortran names are mapped:
   lower -> lower                  F77_NAME_LOWER
   lower -> lower_                 F77_NAME_LOWER_USCORE
   lower -> UPPER                  F77_NAME_UPPER
   lower_lower -> lower__          F77_NAME_LOWER_2USCORE
   mixed -> mixed                  F77_NAME_MIXED
   mixed -> mixed_                 F77_NAME_MIXED_USCORE
If an action is specified, it is executed instead.


We assume that if lower -> lower (any underscore), upper -> upper with the same underscore behavior. Previous versions did this by compiling a Fortran program and running strings -a over it. Depending on strings is a bad idea, so instead we try compiling and linking with a C program, since that is why we are doing this anyway. A similar approach is used by FFTW, though without some of the cases we check (specifically, mixed name mangling)