[Tarantool-patches] [PATCH 1/1] Fix build on Mac with gcc and XCode 11

Vladislav Shpilevoy v.shpilevoy at tarantool.org
Sun Dec 1 23:59:34 MSK 2019


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

Note, the branch depends on another branch in decNumber
repository. decNumber should be pushed first, then this branch
should be updated to look at the newest 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/decNumber          | 2 +-
 third_party/tarantool_ev.h     | 1 -
 22 files changed, 5 insertions(+), 29 deletions(-)

diff --git a/src/box/blackhole.c b/src/box/blackhole.c
index 4f6ea9ab9..69f1deba1 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 9fa069d09..2855e9dec 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 f9633ac90..b5eddcf8b 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 c5b975513..faaf2e0da 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 5de951c78..39db466e8 100644
--- a/src/lib/salad/rope.c
+++ b/src/lib/salad/rope.c
@@ -42,7 +42,6 @@
  *
  * Author: Hans-J. Boehm (boehm at 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 a2cbce4a0..fe4b6ab07 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 8343317af..c077fae49 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 3830fff2c..04f2f9f72 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 cf3789af6..ef374deb1 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 56b13bb87..5c800bc69 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 6b38871db..4e3ced76a 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 5cf32802a..89806c633 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 3dfb8e77c..4fde39dfe 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 a026be263..3056d20fe 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 f4c42bb0d..6d89938b4 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 3dfbe485d..e47151bb9 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 81a9947e4..02ca9cdd6 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 5ab5b4f48..b3c8695e9 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 843b437e3..e09f6190b 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 89ad7a57b..43c301b28 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/decNumber b/third_party/decNumber
index 878ed752f..d1c6c2441 160000
--- a/third_party/decNumber
+++ b/third_party/decNumber
@@ -1 +1 @@
-Subproject commit 878ed752f2453cd5e73587e67f7782aec9181a22
+Subproject commit d1c6c24414cc165e1d990e171e2c9bd0824712e9
diff --git a/third_party/tarantool_ev.h b/third_party/tarantool_ev.h
index 2fea76e6b..9fac941e3 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
-- 
2.21.0 (Apple Git-122.2)



More information about the Tarantool-patches mailing list