From 16c40444c1c8fd2ed31a0821cae2b2b2f836f0e0 Mon Sep 17 00:00:00 2001 From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> Date: Sun, 1 Dec 2019 21:36:35 +0100 Subject: [PATCH] Fix build on Mac with gcc and XCode 11 There is a bug in XCode 11 which makes some standard C headers not self sufficient when compile with gcc. At least <stdlib.h> and <algorithm> are affected. When they are included first, compilation fails with creepy errors like this: In file included from /Applications/Xcode.app/Contents/Developer/ Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/ sys/wait.h:110, from /Applications/Xcode.app/Contents/Developer/ Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/ stdlib.h:66, from tarantool/third_party/zstd/lib/common/zstd_common.c:16: /Applications/Xcode.app/Content/Developer/ Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/ sys/resource.h: In function 'getiopolicy_np': /Applications/Xcode.app/Contents/Developer/ Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/ sys/resource.h:447:34: error: expected declaration specifiers before '__OSX_AVAILABLE_STARTING' 447 | int getiopolicy_np(int, int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); The patch workarounds the bug by deleting the buggy header includes where possible, and by changing include order in other cases. Also there was a second compilation problem. This was about different definitions of the same standard functions: via extern "C" and without. It looked like this: In file included from tarantool/src/trivia/util.h:36, from tarantool/src/tt_pthread.h:35, from tarantool/src/lib/core/fiber.h:38, from tarantool/src/lib/core/coio.h:33, from tarantool/src/lib/core/coio.cc:31: /usr/local/Cellar/gcc/9.2.0_1/lib/gcc/9/gcc/x86_64-apple-darwin18/9.2.0 include-fixed/stdio.h:222:7: error: conflicting declaration of 'char* ctermid(char*)' with 'C' linkage 222 | char *ctermid(char *); | ^~~~~~~ In file included from /Applications/Xcode.app/Contents/Developer/Platforms/ MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/unistd.h:525, from tarantool/src/lib/core/fiber.h:37, from tarantool/src/lib/core/coio.h:33, from tarantool/src/lib/core/coio.cc:31: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/ Developer/SDKs/MacOSX.sdk/usr/include/_ctermid.h:26:10: note: previous declaration with 'C++' linkage 26 | char *ctermid(char *); | ^~~~~~~ This bug is workarounded by deletion of the conflicting includes, because anyway they appeared to be not needed. Closes #4580 Conflicts: third_party/decNumber --- src/box/blackhole.c | 2 -- src/box/sql/tokenize.c | 1 - src/box/vclock.h | 1 - src/lib/core/fiber.h | 1 - src/lib/salad/rope.c | 3 ++- test/unit/bitset_basic.c | 1 - test/unit/bitset_index.c | 1 - test/unit/bitset_iterator.c | 1 - test/unit/bps_tree.cc | 1 - test/unit/bps_tree_iterator.cc | 1 - test/unit/guava.c | 1 - test/unit/heap.c | 1 - test/unit/heap_iterator.c | 1 - test/unit/histogram.c | 1 - test/unit/light.cc | 1 - test/unit/ratelimit.c | 1 - test/unit/rtree.cc | 1 - test/unit/rtree_iterator.cc | 1 - test/unit/rtree_multidim.cc | 7 +------ test/unit/unit.h | 3 +-- third_party/tarantool_ev.h | 1 - 21 files changed, 4 insertions(+), 28 deletions(-) diff --git a/src/box/blackhole.c b/src/box/blackhole.c index 4f6ea9ab95..69f1deba17 100644 --- a/src/box/blackhole.c +++ b/src/box/blackhole.c @@ -30,8 +30,6 @@ */ #include "blackhole.h" -#include <stddef.h> -#include <stdlib.h> #include <small/rlist.h> #include "diag.h" diff --git a/src/box/sql/tokenize.c b/src/box/sql/tokenize.c index 9fa069d09a..2855e9dece 100644 --- a/src/box/sql/tokenize.c +++ b/src/box/sql/tokenize.c @@ -36,7 +36,6 @@ * individual tokens and sends those tokens one-by-one over to the * parser for analysis. */ -#include <stdlib.h> #include <unicode/utf8.h> #include <unicode/uchar.h> diff --git a/src/box/vclock.h b/src/box/vclock.h index f9633ac903..b5eddcf8b9 100644 --- a/src/box/vclock.h +++ b/src/box/vclock.h @@ -30,7 +30,6 @@ * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ -#include <stdlib.h> #include <string.h> #include <stdint.h> #include <stdbool.h> diff --git a/src/lib/core/fiber.h b/src/lib/core/fiber.h index c5b9755134..faaf2e0daf 100644 --- a/src/lib/core/fiber.h +++ b/src/lib/core/fiber.h @@ -34,7 +34,6 @@ #include <stdbool.h> #include <stdint.h> -#include <unistd.h> #include "tt_pthread.h" #include "third_party/tarantool_ev.h" #include "diag.h" diff --git a/src/lib/salad/rope.c b/src/lib/salad/rope.c index 5de951c78c..39db466e88 100644 --- a/src/lib/salad/rope.c +++ b/src/lib/salad/rope.c @@ -42,7 +42,6 @@ * * Author: Hans-J. Boehm (boehm@parc.xerox.com) */ -#include <stdlib.h> /** * This macro helps to implement some common rope functions, not @@ -54,6 +53,8 @@ #define rope_ctx_t void * #include "rope.h" +#include <stdlib.h> + static inline int avl_node_height(struct avl_node *node) { diff --git a/test/unit/bitset_basic.c b/test/unit/bitset_basic.c index a2cbce4a05..fe4b6ab076 100644 --- a/test/unit/bitset_basic.c +++ b/test/unit/bitset_basic.c @@ -1,4 +1,3 @@ -#include <stdlib.h> #include <stdio.h> #include <time.h> diff --git a/test/unit/bitset_index.c b/test/unit/bitset_index.c index 8343317af3..c077fae49f 100644 --- a/test/unit/bitset_index.c +++ b/test/unit/bitset_index.c @@ -1,4 +1,3 @@ -#include <stdlib.h> #include <stdint.h> #include <stdio.h> #include <stdbool.h> diff --git a/test/unit/bitset_iterator.c b/test/unit/bitset_iterator.c index 3830fff2cb..04f2f9f72c 100644 --- a/test/unit/bitset_iterator.c +++ b/test/unit/bitset_iterator.c @@ -1,4 +1,3 @@ -#include <stdlib.h> #include <stdint.h> #include <stdbool.h> #include <stdio.h> diff --git a/test/unit/bps_tree.cc b/test/unit/bps_tree.cc index cf3789af67..ef374deb19 100644 --- a/test/unit/bps_tree.cc +++ b/test/unit/bps_tree.cc @@ -1,4 +1,3 @@ -#include <stdlib.h> #include <stdint.h> #include <stdio.h> #include <stdbool.h> diff --git a/test/unit/bps_tree_iterator.cc b/test/unit/bps_tree_iterator.cc index 56b13bb87f..5c800bc695 100644 --- a/test/unit/bps_tree_iterator.cc +++ b/test/unit/bps_tree_iterator.cc @@ -1,4 +1,3 @@ -#include <stdlib.h> #include <stdint.h> #include <stdio.h> #include <stdbool.h> diff --git a/test/unit/guava.c b/test/unit/guava.c index 6b38871db3..4e3ced76a6 100644 --- a/test/unit/guava.c +++ b/test/unit/guava.c @@ -1,4 +1,3 @@ -#include <stdlib.h> #include <stdio.h> #include <time.h> diff --git a/test/unit/heap.c b/test/unit/heap.c index 5cf32802a5..89806c6330 100644 --- a/test/unit/heap.c +++ b/test/unit/heap.c @@ -1,4 +1,3 @@ -#include <stdlib.h> #include <stdint.h> #include <limits.h> #include <stdio.h> diff --git a/test/unit/heap_iterator.c b/test/unit/heap_iterator.c index 3dfb8e77c5..4fde39dfec 100644 --- a/test/unit/heap_iterator.c +++ b/test/unit/heap_iterator.c @@ -1,4 +1,3 @@ -#include <stdlib.h> #include <stdint.h> #include <limits.h> #include <stdio.h> diff --git a/test/unit/histogram.c b/test/unit/histogram.c index a026be263a..3056d20fe8 100644 --- a/test/unit/histogram.c +++ b/test/unit/histogram.c @@ -1,4 +1,3 @@ -#include <stdlib.h> #include <stdint.h> #include <time.h> diff --git a/test/unit/light.cc b/test/unit/light.cc index f4c42bb0d0..6d89938b40 100644 --- a/test/unit/light.cc +++ b/test/unit/light.cc @@ -1,4 +1,3 @@ -#include <stdlib.h> #include <stdint.h> #include <stdio.h> #include <stdbool.h> diff --git a/test/unit/ratelimit.c b/test/unit/ratelimit.c index 3dfbe485d0..e47151bb9f 100644 --- a/test/unit/ratelimit.c +++ b/test/unit/ratelimit.c @@ -1,4 +1,3 @@ -#include <stdlib.h> #include <time.h> #include "unit.h" diff --git a/test/unit/rtree.cc b/test/unit/rtree.cc index 81a9947e4d..02ca9cdd63 100644 --- a/test/unit/rtree.cc +++ b/test/unit/rtree.cc @@ -1,4 +1,3 @@ -#include <stdlib.h> #include <stdint.h> #include <stdio.h> #include <stdbool.h> diff --git a/test/unit/rtree_iterator.cc b/test/unit/rtree_iterator.cc index 5ab5b4f489..b3c8695e9d 100644 --- a/test/unit/rtree_iterator.cc +++ b/test/unit/rtree_iterator.cc @@ -1,4 +1,3 @@ -#include <stdlib.h> #include <stdint.h> #include <stdio.h> #include <stdbool.h> diff --git a/test/unit/rtree_multidim.cc b/test/unit/rtree_multidim.cc index 843b437e3a..e09f6190b9 100644 --- a/test/unit/rtree_multidim.cc +++ b/test/unit/rtree_multidim.cc @@ -1,11 +1,6 @@ -#include <algorithm> - -#include <stdlib.h> #include <stdint.h> -#include <stdio.h> -#include <stdbool.h> -#include <inttypes.h> #include <time.h> +#include <algorithm> #include "unit.h" #include "salad/rtree.h" diff --git a/test/unit/unit.h b/test/unit/unit.h index 89ad7a57ba..43c301b28a 100644 --- a/test/unit/unit.h +++ b/test/unit/unit.h @@ -30,9 +30,8 @@ * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ -#include <unistd.h> -#include <stdlib.h> /* exit() */ #include <stdio.h> +#include <stdlib.h> /* exit() */ #define header() printf("\t*** %s ***\n", __func__) #define footer() printf("\t*** %s: done ***\n", __func__) diff --git a/third_party/tarantool_ev.h b/third_party/tarantool_ev.h index 2fea76e6b5..9fac941e35 100644 --- a/third_party/tarantool_ev.h +++ b/third_party/tarantool_ev.h @@ -32,7 +32,6 @@ #include <time.h> #include <sys/types.h> #include <sys/stat.h> -#include <unistd.h> #define EV_MULTIPLICITY 1 #define EV_COMPAT3 0 -- GitLab