diff options
author | KJ Tsanaktsidis <ktsanaktsidis@zendesk.com> | 2020-09-01 10:00:23 +1000 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2020-09-01 23:12:18 +0000 |
commit | 786120b55db5c3567d8c353fc399e9339c7406dd (patch) | |
tree | 99a6dde0fd342aba3d500c4c30cc13ed92b884b1 | |
parent | 717266b4c2bd178dcbd49f31048f216d8799e697 (diff) | |
download | go-786120b55db5c3567d8c353fc399e9339c7406dd.tar.gz go-786120b55db5c3567d8c353fc399e9339c7406dd.zip |
cmd/cgo: document #include <> search path behaviour
cgo effectively prepends -I${SRCDIR} to the header include path of all
preambles it processes, so when an #include <> matches a header file
both in the source directory and also another include directory, the
local copy will be used in preference.
This behaviour is surprising but unfortunately also longstanding and
relied upon by packages in the wild, so the best we can do is to
document it.
Fixes #41059
Change-Id: If6d2818294b2bd94ea0fe5fd6ce77e54b3e167a6
Reviewed-on: https://go-review.googlesource.com/c/go/+/251758
Reviewed-by: Ian Lance Taylor <iant@golang.org>
-rw-r--r-- | misc/cgo/test/test.go | 1 | ||||
-rw-r--r-- | src/cmd/cgo/doc.go | 7 |
2 files changed, 8 insertions, 0 deletions
diff --git a/misc/cgo/test/test.go b/misc/cgo/test/test.go index 35bc3a1447..05fa52b381 100644 --- a/misc/cgo/test/test.go +++ b/misc/cgo/test/test.go @@ -319,6 +319,7 @@ typedef enum { // issue 4339 // We've historically permitted #include <>, so test it here. Issue 29333. +// Also see issue 41059. #include <issue4339.h> // issue 4417 diff --git a/src/cmd/cgo/doc.go b/src/cmd/cgo/doc.go index ca18c45d9d..b3f371b08c 100644 --- a/src/cmd/cgo/doc.go +++ b/src/cmd/cgo/doc.go @@ -112,6 +112,13 @@ The default C and C++ compilers may be changed by the CC and CXX environment variables, respectively; those environment variables may include command line options. +The cgo tool will always invoke the C compiler with the source file's +directory in the include path; i.e. -I${SRCDIR} is always implied. This +means that if a header file foo/bar.h exists both in the source +directory and also in the system include directory (or some other place +specified by a -I flag), then "#include <foo/bar.h>" will always find the +local version in preference to any other version. + The cgo tool is enabled by default for native builds on systems where it is expected to work. It is disabled by default when cross-compiling. You can control this by setting the CGO_ENABLED |