Barry Smith writes: >> On Dec 23, 2014, at 6:11 PM, Sean Farley <sean.michael.far...@gmail.com> >> wrote: >> >> >> Barry Smith writes: >> >>> Sean, >>> >>> Say I am writing a PETSc package (for any generic packaging system) that >>> will use the MPICH compilers package and the BLAS/LAPACK package (and say, >>> the hdf5 package). How do I indicate to PETSc's configure the information >>> for MPICH, BLAS/LAPACK, and hdf5 so they will be correct for users when >>> they link and run their applications? That is, I don't want to randomly >>> list some hdf5 on the system but is it enough to just list the exact >>> location of the hdf5 I know the package manager will install hdf5 to? >> >> That is a hard problem. Jed and others will chime in on this problem, >> but this is why some packages have a binary / script that outputs its >> compiler / linker flags. For example, netcdf has nc-config: >> >> $ nc-config --has-hdf5 >> yes >> >> $ nc-config --libs >> -L/opt/local/lib -lnetcdf >> >> There is also pkg-config: >> >> $ pkg-config --libs libpng >> -L/opt/local/lib -lpng16 >> >> Ideally, package managers should provide this information. Currently, >> they do not. For PETSc, this would mean something akin to 'petscmpiexec' >> and / or supplying this information to pkg-config (this actually should >> be fairly easy). >> >> An end-user would then use pkg-config or a PETSc-provided script for >> compiling and linking, >> >> $ pkg-config --libs petsc >> -L/opt/local/lib -lnetcdf -lpetsc -L/opt/local/lib/mpich-mp -lmpi -lpmpi > > Yeah in theory we do this. > > But this actually doesn't answer my question; I'm also asking about the > situation when the package system (like brew) is compiling the package on the > users machine. Say I need the -I info for hdf5 to pass to PETSc's configure. > If the user has selected a nonstandard location for installs with brew(not > /usr/local) how do I know what directory to pass with the -I ? Somehow the > package system has to provide the information for me to use in calling > configure.
Ah, sorry, then I misunderstood. This is definitely dependent on the package manager system. In MacPorts, this is just listing the libraries directory: configure.args-append --with-hdf5-dir=${prefix} The requirement (of most?) package managers to have a locked-down prefix (e.g. /opt/local) is that installing something outside of the package would break the above code. In some package managers (MacPorts is an example), CPPFLAGS are set to ${prefix}/include and LDFLAGS are set to ${prefix}/lib. To prevent over-linking and help deter incorrect linking, there is a trace mode that sandboxes the whole process so that only dependencies are explicitly allowed. Is that what you were asking?