Hi Dave, With which compiler, and even optimized? > > $ `mpif90 --showme` --version | head -n1 > GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-17) > $ cat a.f90 > use mpi > if (mpi_version == 3) call undefined() > print *, mpi_version > end > $ mpif90 a.f90 && ./a.out > 2 >
No, optimized works, actually - unoptimized is the issue. I should've added that in the beginning. Since MPI_VERSION is a parameter, the optimizer *knows* the code path won't be used, and thus it doesn't include it in the binary and life is good. Compiling with -O0 results in an issue, however, at least with Intel 15/16 compilers, and I'd guess gfortran too(?). So, once again, maybe I'm trying too hard to find a problem. ;-) If I don't ever need to build with -O0, *or* simply request the user to provide the -DMPI3 (or maybe -DMPI2, since that's the less-common one now) flag, I have no issues. Yes, not using cmake is definitely better -- people like me should be > able to build the result! With autoconf, you could run the above to get > mpi_version, or adapt it to produce a link-time error for a specific > version if cross-compiling. However, you should test for the routines > you need in the normal autoconf way. Presumably checking one is enough > for a particular standard level. > Yes, this is an option too. It's more a mild nuisance in the dissimilarity of how C/C++ can, by default, process the #defines due to the preprocessor, whereas Fortran code doesn't have the same flexibility. Autoconf to provide the -D flag is an option, indeed. > I'd hope you could modularize things and select the right modules to > link using a configure test and possibly automake. That's probably > easier for Fortran than the sort of C I encounter. > I'm only responsible for a tiny fraction of the code, none of which is the build process. I think I'm attempting to over-simplify an already fairly-simple-but-not-quite-perfect reality. ;) Thanks for the feedback and ideas! - Brian