Hello,I am currently packaging PETSc and have noticed some peculiar behavior when attempting to override CFLAGS, CXXFLAGS, and FFLAGS.
Firstly, when calling ./configure with CFLAGS="args" as its argument, it seems to completely override the flag detection system in config/BuildSystem/config/compilerOptions.py (and presumably other places). Same holds true for CXXFLAGS and FFLAGS. This is not desirable for me. With the underlying compiler detected as GCC, I would normally get -fvisibility=hidden and a bunch of extra warnings. These all get lost when CFLAGS or CXXFLAGS is overridden. Is there a way to simply append flags instead of overriding them? Losing flags such as -fvisibility=hidden can severely affect the compiled library.
Other build systems usually differentiate between mandatory flags that will get included no matter what and overridable flags which may be replaced. It looks like such a system even exists in PETSc, because -fPIC gets included in C flags even when CFLAGS is set. I understand that the situation here is a bit more complex, as PETSc must support a plethora of compilers which use differing flags and compiler wrappers like mpicc are prevalent.
I assume that the same issue occurs for FFLAGS. I do not know Fortran, so I cannot evaluate the risks of omitting flags that are included when FFLAGS isn't specified, but I assume that some of the "lost" flags are also of importance.
Another issue, which I find more severe, is that the overridden flags get included in cflags_extra, cxxflags_extra, and fflags_extra of the generated pkg-config file. This is highly undesirable because the flags used to build PETSc should not be used for compiling user programs. My package template provides flags like -ffile-prefix-map, which make sense when PETSc is being built in a fake destdir to be packaged but do not make sense for user programs.
The pkg-config file generated by PETSc is something I've never seen before. It took me a considerable amount of time to comprehend the extra keys set there, but I now understand that they are used in the sample Makefile and CMake build definition file.
I am not 100% certain why this system is in place. Why does the pkg-config file need to provide extra flags and set compilers? I've seen no other pkg-config file which does such things.
Is there a way to fix the pkg-config file (apart from manually removing cflags_extra, cxxflags_extra, and fflags_extra from the .pc file)?
Thanks in advance
OpenPGP_0x1A14CB3464CBE5BF.asc
Description: OpenPGP public key
OpenPGP_signature.asc
Description: OpenPGP digital signature