* [Tarantool-patches] [PATCH 1/1] Fix build on Mac with gcc and XCode 11
@ 2019-12-01 20:59 Vladislav Shpilevoy
2019-12-10 14:15 ` Kirill Yukhin
0 siblings, 1 reply; 2+ messages in thread
From: Vladislav Shpilevoy @ 2019-12-01 20:59 UTC (permalink / raw)
To: tarantool-patches, kyukhin
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@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)
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [Tarantool-patches] [PATCH 1/1] Fix build on Mac with gcc and XCode 11
2019-12-01 20:59 [Tarantool-patches] [PATCH 1/1] Fix build on Mac with gcc and XCode 11 Vladislav Shpilevoy
@ 2019-12-10 14:15 ` Kirill Yukhin
0 siblings, 0 replies; 2+ messages in thread
From: Kirill Yukhin @ 2019-12-10 14:15 UTC (permalink / raw)
To: Vladislav Shpilevoy; +Cc: tarantool-patches
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
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-12-10 14:15 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-01 20:59 [Tarantool-patches] [PATCH 1/1] Fix build on Mac with gcc and XCode 11 Vladislav Shpilevoy
2019-12-10 14:15 ` Kirill Yukhin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox