From f50d8bbf3a2e089ee076c2d4527d3922fd5781a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Mon, 27 Oct 2014 12:05:29 -0400 Subject: [PATCH 1/2] fix build with libuv 0.11 --- include/mbgl/map/map.hpp | 6 ------ include/mbgl/util/uv_detail.hpp | 2 +- src/map/map.cpp | 31 ++++++++++++++++--------------- 3 files changed, 17 insertions(+), 22 deletions(-) diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp index ab9775a8c..bc67e5b35 100644 --- a/include/mbgl/map/map.hpp +++ b/include/mbgl/map/map.hpp @@ -146,15 +146,9 @@ public: private: // uv async callbacks -#if UV_VERSION_MAJOR == 0 && UV_VERSION_MINOR <= 10 - static void render(uv_async_t *async, int status); - static void terminate(uv_async_t *async, int status); - static void cleanup(uv_async_t *async, int status); -#else static void render(uv_async_t *async); static void terminate(uv_async_t *async); static void cleanup(uv_async_t *async); -#endif // Setup void setup(); diff --git a/include/mbgl/util/uv_detail.hpp b/include/mbgl/util/uv_detail.hpp index b4b41f31a..3bbfa4ac5 100644 --- a/include/mbgl/util/uv_detail.hpp +++ b/include/mbgl/util/uv_detail.hpp @@ -29,7 +29,7 @@ public: if (l == nullptr) { #else l = new uv_loop_t; - if (uv_loop_init(&l) != 0) { + if (uv_loop_init(l) != 0) { #endif throw std::runtime_error("failed to initialize loop"); } diff --git a/src/map/map.cpp b/src/map/map.cpp index a7520b251..2f0dceb42 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -91,15 +91,28 @@ void Map::start() { is_stopped = false; // Setup async notifications - uv_async_init(**loop, async_terminate.get(), terminate); + +// Iron out the differences between libuv 0.10 and 0.11 +#ifdef UV_ASYNC_CALLBACK +#error Cannot overwrite UV_ASYNC_CALLBACK +#endif +#if UV_VERSION_MAJOR == 0 && UV_VERSION_MINOR <= 10 +#define UV_ASYNC_CALLBACK(name) [](uv_async_t *a, int) { return Map::name(a); } +#else +#define UV_ASYNC_CALLBACK(name) name +#endif + + uv_async_init(**loop, async_terminate.get(), UV_ASYNC_CALLBACK(terminate)); async_terminate->data = this; - uv_async_init(**loop, async_render.get(), render); + uv_async_init(**loop, async_render.get(), UV_ASYNC_CALLBACK(render)); async_render->data = this; - uv_async_init(**loop, async_cleanup.get(), cleanup); + uv_async_init(**loop, async_cleanup.get(), UV_ASYNC_CALLBACK(cleanup)); async_cleanup->data = this; +#undef UV_ASYNC_CALLBACK + uv_thread_create(*thread, [](void *arg) { Map *map = static_cast(arg); #ifndef NDEBUG @@ -198,11 +211,7 @@ void Map::cleanup() { } } -#if UV_VERSION_MAJOR == 0 && UV_VERSION_MINOR <= 10 -void Map::cleanup(uv_async_t *async, int) { -#else void Map::cleanup(uv_async_t *async) { -#endif Map *map = static_cast(async->data); map->painter.cleanup(); @@ -223,11 +232,7 @@ void Map::setReachability(bool reachable) { } } -#if UV_VERSION_MAJOR == 0 && UV_VERSION_MINOR <= 10 -void Map::render(uv_async_t *async, int) { -#else void Map::render(uv_async_t *async) { -#endif Map *map = static_cast(async->data); assert(uv_thread_self() == map->map_thread); @@ -247,11 +252,7 @@ void Map::render(uv_async_t *async) { } } -#if UV_VERSION_MAJOR == 0 && UV_VERSION_MINOR <= 10 -void Map::terminate(uv_async_t *async, int) { -#else void Map::terminate(uv_async_t *async) { -#endif // Closes all open handles on the loop. This means that the loop will automatically terminate. Map *map = static_cast(async->data); assert(uv_thread_self() == map->map_thread); From 6695d5249d495e30c7689a29d012d5a8098007ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Mon, 27 Oct 2014 12:05:39 -0400 Subject: [PATCH 2/2] bump cocoa --- ios/mapbox-gl-cocoa | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/mapbox-gl-cocoa b/ios/mapbox-gl-cocoa index 2d8fa07ab..bba56f27f 160000 --- a/ios/mapbox-gl-cocoa +++ b/ios/mapbox-gl-cocoa @@ -1 +1 @@ -Subproject commit 2d8fa07ab7dc1ff93728e656bac4a82da423e8b0 +Subproject commit bba56f27fa747409ac9ea20cf77f470f59a415a7