What are the best practices for building and distributing modern
Fortran libraries, say as a Debian package? Assuming that the library
consists of a number of modules, a primary problem for distributing a
compiled library for a specific platform is that module files are
compiler-specific. For Debian it might make sense to simply
.mod files but what about other cases? The
-dev packages for such libraries might need to be compiler-specific,
libname-dev-gfortran. Might there be issues with
.mod files for commercial compilers?
Furthermore, what is the proper place to install the
The FHS states that
/usr/include is for C include files.
A strict reading would prevent Fortran mod files from
being placed there for two reasons: they are not related to C and they
are not include files. Wherever they are installed, a common location
for all packages like
/usr/lib/gfortran/modules opens up the
potential for namespace issues. Modules with the same name from
different libraries would cause conflicts. Perhaps a better location
/usr/lib/<package>/mod/ or even
/usr/lib/<package>/mod/<compiler>/? The unfortunate thing with this
setup is that the specific path will need to be given for each library
one needs to link to. Contrast this with simplicity of the usual
-I/usr/include arguments given to C and C++ compilers.
libmpich1.0-dev is an example of a Debian package of a Fortran
.mod files for this are installed in
/usr/lib/mpich/include/f90choice/. This package assumes the use of
GFortran which is reasonable for a Debian package.
There seems to be no consensus on these issues but I’ve found a few instances where they have been discussed: