> I’m pretty -1 on having files with the same filenames in different location. I’m sure that will just break all sort of shit, including my tiny brain. I strongly agree with this.
> I’m leaning more towards Chao's proposal of cleaning up the actual mess. If we want to rename the I_ and P_ files, that’s fine too. We should figure out why the P_ files are needed. It looks like we don't need them in many cases. > We moved some stuff to a generic include directory, such that we can get away with just one single -I${topdir)/include in the compiles, and then use #include “some_major_module/P_Stuff.h”. Looks reasonable. I think I_Stuff.h or Stuff.h instead P_Stuff.h. In total, using I_/P_Net.h for example, if we really need private header file by some reason, the change would be like this? # before /iocore/net/I_Net.h /iocore/net/P_Net.h - include search path : ${topdir)/iocore/net - #include "P_Net.h" and #include "I_Net.h" are used by everywhere # after /include/iocore/net/Net.h /iocore/net/P_Net.h - include search path : ${topdir)/include - #include "P_Net.h" MUST be used only in the iocore/net submodule - other submodules MUST use #include "iocore/net/Net.h" - Masaori On Mon, May 13, 2019 at 11:39 PM Leif Hedstrom <zw...@apache.org> wrote: > > > > On May 13, 2019, at 8:33 AM, Walt Karas <wka...@verizonmedia.com.INVALID> > wrote: > > > > How about an approach using recursively nested modules? > > - Exported headers for a module are in the module directory. > > - Private headers and implementation (.cc) files are in a subdirectory > > named "private". > > - The submodules of a module are subdirectories of the module directory. > > - Module source files include their own exported headers with #include > > "../name.h" > > - Source files include exported headers of other modules with #include > > "../../module/name.h", #include "../../../module/name.h", etc. That is > to > > say, a headers name, preceded by a module name, preceded by two or more > > parent directory links (..). So that source files only include the > header > > files of modules that directly or indirectly contain them. > > > Can you please make that a little bit more complicated please? > > I’m pretty -1 on having files with the same filenames in different > location. I’m sure that will just break all sort of shit, including my tiny > brain. > > I’m leaning more towards Chao's proposal of cleaning up the actual mess. > If we want to rename the I_ and P_ files, that’s fine too. We moved some > stuff to a generic include directory, such that we can get away with just > one single -I${topdir)/include in the compiles, and then use #include > “some_major_module/P_Stuff.h”. > > Ciao, > > — leif > > > > > On Mon, May 13, 2019 at 1:20 AM Chao Xu <ok...@apache.org> wrote: > > > >> Hi Masaori, > >> > >> The functionality does not change as the file name changes: > >> > >> - The P_ files should contain any types and definitions that are > >> private to the subsystem, > >> - The public interface should be contained in a I_ prefixed header. > >> > >> Confusing private and public definitions will cause the code to have > >> circular dependencies. > >> > >> In order to solve the issue that the P_ files are included from out > >> side of subsystem, we have 2 choice: > >> > >> 1. Pulls related types and definitions from P_ files into I_ files (be > >> careful to do it). > >> 2. Do not include that P_ files (figure out why the P_ files is needed). > >> > >> If you just don't like the I_ and P_ prefix, you can rename the > >> filename as you want or put them into different directory, for > >> example: > >> > >> - Puts all those I_ prefix header files into iocore/api/ and keeps all > >> P_ prefix header files within subsystem directory. > >> - Compile with `-I iocore/api` > >> > >> Thanks. > >> > >> - Oknet Xu > >> > >> Masaori Koshiba <masa...@apache.org> 于2019年5月13日周一 上午9:57写道: > >>> > >>> We have a naming convention for header files, P_ or I_ prefix. Details > >> are > >>> described in below. > >>> > >>>> # Header files > >>>> In most subsystems, header files are named with a P_ or I_ prefix. P_ > >>> files should contain > >>>> any types and definitions that are private to the subsystem, while the > >>> public interface > >>>> should be contained in a I_-prefixed header. > >>> > >>> > >> > https://cwiki.apache.org/confluence/display/TS/Coding+Style#CodingStyle-Headerfiles > >>> > >>> But this looks obsoleted 1). many subsystem don't follow this rule, 2). > >>> even if this rule is > >>> followed, P_ files (subsystem private header files) are included from > out > >>> side of subsystem. > >>> (e.g. P_Net.h, P_EventSystem.h ) > >>> > >>> The consensus at last summit was we should remove this rule. > >>> > >>> If there’re any real use case of subsystem private header files, we can > >>> move them a directory > >>> under the subsystem and include them internally. > >>> > >>> Any thoughts? > >>> > >>> Thanks, > >>> Masaori > >> > >> > >> > >> -- > >> - Oknet Xu > >> > >