Skip to content

Commit 53929db

Browse files
committed
Merge branch 'jc/doc-compat-util'
Clarify wording in the CodingGuidelines that requires <git-compat-util.h> to be the first header file. * jc/doc-compat-util: doc: clarify the wording on <git-compat-util.h> requirement
2 parents e58a4de + 4e89f0e commit 53929db

File tree

1 file changed

+35
-6
lines changed

1 file changed

+35
-6
lines changed

Documentation/CodingGuidelines

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -446,12 +446,41 @@ For C programs:
446446
detail.
447447

448448
- The first #include in C files, except in platform specific compat/
449-
implementations and sha1dc/, must be either "git-compat-util.h" or
450-
one of the approved headers that includes it first for you. (The
451-
approved headers currently include "builtin.h",
452-
"t/helper/test-tool.h", "xdiff/xinclude.h", or
453-
"reftable/system.h".) You do not have to include more than one of
454-
these.
449+
implementations and sha1dc/, must be <git-compat-util.h>. This
450+
header file insulates other header files and source files from
451+
platform differences, like which system header files must be
452+
included in what order, and what C preprocessor feature macros must
453+
be defined to trigger certain features we expect out of the system.
454+
A collorary to this is that C files should not directly include
455+
system header files themselves.
456+
457+
There are some exceptions, because certain group of files that
458+
implement an API all have to include the same header file that
459+
defines the API and it is convenient to include <git-compat-util.h>
460+
there. Namely:
461+
462+
- the implementation of the built-in commands in the "builtin/"
463+
directory that include "builtin.h" for the cmd_foo() prototype
464+
definition,
465+
466+
- the test helper programs in the "t/helper/" directory that include
467+
"t/helper/test-tool.h" for the cmd__foo() prototype definition,
468+
469+
- the xdiff implementation in the "xdiff/" directory that includes
470+
"xdiff/xinclude.h" for the xdiff machinery internals,
471+
472+
- the unit test programs in "t/unit-tests/" directory that include
473+
"t/unit-tests/test-lib.h" that gives them the unit-tests
474+
framework, and
475+
476+
- the source files that implement reftable in the "reftable/"
477+
directory that include "reftable/system.h" for the reftable
478+
internals,
479+
480+
are allowed to assume that they do not have to include
481+
<git-compat-util.h> themselves, as it is included as the first
482+
'#include' in these header files. These headers must be the first
483+
header file to be "#include"d in them, though.
455484

456485
- A C file must directly include the header files that declare the
457486
functions and the types it uses, except for the functions and types

0 commit comments

Comments
 (0)