Skip to content
Snippets Groups Projects
Commit 16c40444 authored by Vladislav Shpilevoy's avatar Vladislav Shpilevoy Committed by Kirill Yukhin
Browse files

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
parent 2125b626
No related branches found
No related tags found
No related merge requests found
Showing
with 4 additions and 27 deletions
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment