[petsc-dev] reminder never use #include "mylocalinclude.h" in PETSc source

Dmitry Karpeev karpeev at mcs.anl.gov
Mon Mar 14 09:11:53 CDT 2011


On Mon, Mar 14, 2011 at 8:44 AM, Jed Brown <jed at 59a2.org> wrote:
> On Mon, Mar 14, 2011 at 14:08, Barry Smith <bsmith at mcs.anl.gov> wrote:
>>
>> For files like aij.h if you use the localinclude.h paradigm then in aij.c
>> you would have  #include "aij.h"  but in mpiaij.h you would have #include
>> <./src/mat/impls/aij/seq/aij.h> I don't like the fact that in different
>> files the sameinclude is referenced in a different way. Now one could argue
>> that private includes used ONLY locally use the "localinclude.h"  model and
>> private includes used more than locally use the
>> <../src/path/to/localinclude.h> but why?
>
> So that they can be built independently from the source tree.
>>
>> Better the simplicity of always using the <../src/path/to/localinclude.h>
>> model.
>
> There are at least four approaches
> 1. #include "../seq/aij.h"
> 2. #include <../src/mat/impls/aij/seq/aij.h>
> 3. Have the build system add -I$PETSC_DIR/src/mat/impls/aij/seq and use
> #include <aij.h>
> 4. Move this not-truly-private header to include/private/matseqaij.h and
> #include <private/matseqaij.h>.
>
> 1 permits relocating part of the source tree and compiling (a variant of) a
> single module without changing includes. 2 requires modifying all derived
> implementations if the header is relocated and only works if the full source
> tree is available. 3 is the same, but the change is only to the build system
> and the build system is more easily "aware" of this cross-dependency. 4 is a
> direction that we have already been going over the past couple years (some
> implementation headers moved from src/dm/ to include/private)  because users
> wanted access to some internals from a prefix-install (perhaps to create
> their own derived implementation).
> Is there a good reason not to use 4 for shared headers and #include "mine.h"
> for unshared (and not intended to be derived from)?

That's what I was going to ask. In general, what are the criteria for
putting something
in include/private, rather than keeping it in the src/ tree?

Dmitry.



More information about the petsc-dev mailing list