[Tarantool-patches] [PATCH 1/1] Fix build on Mac with gcc and XCode 11
Kirill Yukhin
kyukhin at tarantool.org
Tue Dec 10 17:15:24 MSK 2019
Hello,
On 01 дек 21:59, Vladislav Shpilevoy wrote:
> 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
> ---
> Issue: https://github.com/tarantool/tarantool/issues/4580
> Branch: https://github.com/tarantool/tarantool/tree/gerold103/gh-4580-mac-build
I've checked your patch into master.
--
Regards, Kirill
More information about the Tarantool-patches
mailing list