| From bbb03794def326c2e8ad2de523c5a61a4c8cb464 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?J=C3=B6rg=20Krause?= <joerg.krause@embedded.rocks> |
| Date: Thu, 22 Sep 2016 00:58:58 +0200 |
| Subject: [PATCH] Remove replacing -I with -isystem |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| Building OLA with a GCC 6 cross-toolchain fails: |
| |
| ``` |
| /usr/bin/arm-linux-g++ -DHAVE_CONFIG_H -I. -D_LARGEFILE_SOURCE |
| -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -I./include -I./include |
| -Wall -Wformat -W -isystem |
| /usr/arm-buildroot-linux-gnueabihf/sysroot/usr/include -pthread |
| -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os |
| -pthread -c -o libs/acn/e131_transmit_test.o |
| libs/acn/e131_transmit_test.cpp |
| /usr/bin/arm-linux-g++ -DHAVE_CONFIG_H -I. -D_LARGEFILE_SOURCE |
| -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -I./include -I./include |
| -Wall -Wformat -W -isystem |
| /usr/arm-buildroot-linux-gnueabihf/sysroot/usr/include -pthread |
| -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os |
| -pthread -c -o libs/acn/E131TestFramework.o |
| libs/acn/E131TestFramework.cpp |
| In file included from |
| /opt/ext-toolchain/arm-buildroot-linux-gnueabihf/include/c++/6.1.0/ext/string_conversions.h:41:0, |
| from |
| /opt/ext-toolchain/arm-buildroot-linux-gnueabihf/include/c++/6.1.0/bits/basic_string.h:5402, |
| from |
| /opt/ext-toolchain/arm-buildroot-linux-gnueabihf/include/c++/6.1.0/string:52, |
| from ./tools/ola_trigger/config.ypp:2: |
| /opt/ext-toolchain/arm-buildroot-linux-gnueabihf/include/c++/6.1.0/cstdlib:75:25: |
| fatal error: stdlib.h: No such file or directory |
| #include_next <stdlib.h> |
| ^ |
| compilation terminated. |
| ``` |
| |
| The C++ library in GCC 6 now provides its own `<stdlib.h>` header that |
| wraps the C library header of the same name, so in `<cstdlib>` the |
| header include |
| |
| ``` |
| #include <stdlib.h> |
| ``` |
| |
| has become |
| |
| ``` |
| #include_next <stdlib.h> |
| ``` |
| |
| `#include_next` is sensitive to the order of directories in the |
| preprocessor's search path, so if that order is changed with `-isystem` |
| then the compiler can't find the right header: |
| |
| ``` |
| [1] /usr/arm-buildroot-linux-gnueabihf/sysroot/usr/include |
| [2] /opt/ext-toolchain/arm-buildroot-linux-gnueabihf/include/c++/6.1.0 |
| [..] |
| End of search list. |
| ``` |
| |
| `<cstdlib>` is located in [2] whereas `<stdlib.h>` (C library header) is |
| in [1]. In this case, the `#include_next <stdlib.h>` statement in |
| `<cstdlib>`, located in [2], is evaluated **after** the search path [1], |
| so the compiler does not find the right system header. |
| |
| The problem is that the OLA build system replaces the `-I` in the CFLAGS |
| from libprotobuf with `-isystem` to fix some warnings treated as errors |
| in the libprotobuf header files. |
| |
| `-isystem` should be used to suppress warnings in system headers only |
| and the libprotobuf header files are not system files. |
| |
| The correct fix is to compile with less restrictions and remove |
| `-Werror` for the build. |
| |
| As using `-isystem` is reordering GCCs search path and using `-isystem` |
| is really not necessary, remove the faulty replacement of `-I`. |
| |
| Upstream status: https://github.com/OpenLightingProject/ola/pull/1126 |
| |
| Signed-off-by: Jรถrg Krause <joerg.krause@embedded.rocks> |
| --- |
| config/ola.m4 | 3 --- |
| 1 file changed, 3 deletions(-) |
| |
| diff --git a/config/ola.m4 b/config/ola.m4 |
| index 2796cfb..d3b8cc8 100644 |
| --- a/config/ola.m4 |
| +++ b/config/ola.m4 |
| @@ -24,9 +24,6 @@ AC_DEFUN([PROTOBUF_SUPPORT], |
| AC_REQUIRE_CPP() |
| PKG_CHECK_MODULES(libprotobuf, [protobuf >= $1]) |
| |
| -# We want to replace -I with -isystem here to disable errors in the .h files |
| -# See https://groups.google.com/forum/#!topic/open-lighting/39Mj0KXlCIk |
| -libprotobuf_CFLAGS=`echo $libprotobuf_CFLAGS | sed 's/-I/-isystem /'` |
| AC_SUBST([libprotobuf_CFLAGS]) |
| |
| AC_ARG_WITH([protoc], |
| -- |
| 2.10.0 |
| |