Randy Abernethy created THRIFT-2014:
---------------------------------------

             Summary: Change C++ lib includes to use <namespace/> style 
throughout
                 Key: THRIFT-2014
                 URL: https://issues.apache.org/jira/browse/THRIFT-2014
             Project: Thrift
          Issue Type: Improvement
          Components: C++ - Library
    Affects Versions: 1.0
         Environment: All
            Reporter: Randy Abernethy
            Assignee: Randy Abernethy
            Priority: Minor
             Fix For: 1.0


Use #include<thrift/...> style include statements throughout C++ library (see 
Exception below)

Rational: Improve consistency and predictability in C++ library and user 
builds. Because Apache Thrift is a library, system style includes (<>) may be a 
better fit than local style includes (“”). System style includes are presently 
used predominantly (4:1) but not exclusively and the choice between the two 
often appears to have no pattern. Making the library’s approach <thrift/> 
consistent will improve build predictability (e.g local copies of include files 
will not be picked up). Using explicit thrift relative paths (i.e. namespaces 
like thrift/transport) also adds clarity and specificity (e.g. two files with 
the same name can exist in separate directories and can be included with 
obvious and predictable results, avoiding most path order dependencies). The “” 
include is commonly designated as a user include (e.g. 
gcc.gnu.org/onlinedocs/cpp/Include-Syntax.html#Include-Syntax), the search 
pattern for “” tends to vary from compiler to compiler a bit also.

bg:  POSIX compliant compilers (and many others) search only –I directories and 
then standard directories for system #include<> dependencies (good for 
libraries). A local #include “” causes local directories (typically the 
location of the including file) to be searched, then the –I, then built-in 
paths. The POSIX spec is not adhered to by all platforms/compilers and more 
complex behavior is common, making "" tricky on occasion.

Current situation:
447 instances of <thrift/...>  e.g.:
lib/cpp/src/thrift/transport/TFileTransport.h:#include 
<thrift/transport/TTransport.h>
lib/cpp/src/thrift/transport/TTransportUtils.h:#include 
<thrift/transport/TTransport.h>

116 instances of “file.h”  e.g.:
lib/cpp/src/thrift/transport/TSocket.h:#include "TTransport.h"   
   //Same header with “” and <> styles in different files 
lib/cpp/src/thrift/transport/TFileTransport.cpp:#include "TTransportUtils.h"
   //Single file including thrift headers in different ways (“” and <>)

Exceptions: A header presented with local style (“”) delimiters is a hint 
indicating that the header is designed to be locally defined or potentially 
overloaded. The config.h header (associated with HAVE_CONFIG_H) may have this 
“locally defined” semantic. The config.h is also included with <> and “” in 
different locations. Assuming we want people to be able to locally override 
config.h, #include “config.h” is the right answer. That said config.h is a 
pretty generic name to be including with "config.h" safely. If only the 
config.h in the thrift root should be allowed then <thrift/config.h> may be the 
right answer. Thoughts?


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to