From 3888af2460eb601317ccb755a9cffb9ea92ad45d Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Fri, 20 Sep 2019 13:44:39 +0300 Subject: [build] Move compression to platform It depends on platform specific compression library. --- next/CMakeLists.txt | 1 - next/platform/android/android.cmake | 1 + next/platform/ios/ios.cmake | 1 + next/platform/linux/linux.cmake | 1 + next/platform/macos/macos.cmake | 1 + next/platform/qt/qt.cmake | 1 + platform/android/core-files.json | 1 + platform/default/src/mbgl/util/compression.cpp | 104 +++++++++++++++++++++++++ platform/ios/core-files.json | 1 + platform/linux/config.cmake | 1 + platform/macos/core-files.json | 1 + src/core-files.json | 1 - src/mbgl/util/compression.cpp | 104 ------------------------- 13 files changed, 113 insertions(+), 106 deletions(-) create mode 100644 platform/default/src/mbgl/util/compression.cpp delete mode 100644 src/mbgl/util/compression.cpp diff --git a/next/CMakeLists.txt b/next/CMakeLists.txt index e1fd442d48..dae8ce09a1 100644 --- a/next/CMakeLists.txt +++ b/next/CMakeLists.txt @@ -777,7 +777,6 @@ add_library( ${MBGL_ROOT}/src/mbgl/tile/vector_tile_data.hpp ${MBGL_ROOT}/src/mbgl/util/chrono.cpp ${MBGL_ROOT}/src/mbgl/util/color.cpp - ${MBGL_ROOT}/src/mbgl/util/compression.cpp ${MBGL_ROOT}/src/mbgl/util/constants.cpp ${MBGL_ROOT}/src/mbgl/util/convert.cpp ${MBGL_ROOT}/src/mbgl/util/dtoa.cpp diff --git a/next/platform/android/android.cmake b/next/platform/android/android.cmake index 6b6a431ced..70683149d0 100644 --- a/next/platform/android/android.cmake +++ b/next/platform/android/android.cmake @@ -211,6 +211,7 @@ target_sources( ${MBGL_ROOT}/platform/default/src/mbgl/storage/online_file_source.cpp ${MBGL_ROOT}/platform/default/src/mbgl/storage/sqlite3.cpp ${MBGL_ROOT}/platform/default/src/mbgl/text/bidi.cpp + ${MBGL_ROOT}/platform/default/src/mbgl/util/compression.cpp ${MBGL_ROOT}/platform/default/src/mbgl/util/png_writer.cpp ${MBGL_ROOT}/platform/default/src/mbgl/util/thread_local.cpp ${MBGL_ROOT}/platform/default/src/mbgl/util/utf.cpp diff --git a/next/platform/ios/ios.cmake b/next/platform/ios/ios.cmake index 7be60bd387..507150fc9a 100644 --- a/next/platform/ios/ios.cmake +++ b/next/platform/ios/ios.cmake @@ -35,6 +35,7 @@ target_sources( ${MBGL_ROOT}/platform/default/src/mbgl/storage/online_file_source.cpp ${MBGL_ROOT}/platform/default/src/mbgl/storage/sqlite3.cpp ${MBGL_ROOT}/platform/default/src/mbgl/text/bidi.cpp + ${MBGL_ROOT}/platform/default/src/mbgl/util/compression.cpp ${MBGL_ROOT}/platform/default/src/mbgl/util/png_writer.cpp ${MBGL_ROOT}/platform/default/src/mbgl/util/thread_local.cpp ${MBGL_ROOT}/platform/default/src/mbgl/util/utf.cpp diff --git a/next/platform/linux/linux.cmake b/next/platform/linux/linux.cmake index 8a80da1928..9c8a3830b8 100644 --- a/next/platform/linux/linux.cmake +++ b/next/platform/linux/linux.cmake @@ -33,6 +33,7 @@ target_sources( ${MBGL_ROOT}/platform/default/src/mbgl/text/local_glyph_rasterizer.cpp ${MBGL_ROOT}/platform/default/src/mbgl/text/unaccent.cpp ${MBGL_ROOT}/platform/default/src/mbgl/util/async_task.cpp + ${MBGL_ROOT}/platform/default/src/mbgl/util/compression.cpp ${MBGL_ROOT}/platform/default/src/mbgl/util/format_number.cpp ${MBGL_ROOT}/platform/default/src/mbgl/util/image.cpp ${MBGL_ROOT}/platform/default/src/mbgl/util/jpeg_reader.cpp diff --git a/next/platform/macos/macos.cmake b/next/platform/macos/macos.cmake index 747ac5839b..d0aad9c3dc 100644 --- a/next/platform/macos/macos.cmake +++ b/next/platform/macos/macos.cmake @@ -103,6 +103,7 @@ target_sources( ${MBGL_ROOT}/platform/default/src/mbgl/storage/online_file_source.cpp ${MBGL_ROOT}/platform/default/src/mbgl/storage/sqlite3.cpp ${MBGL_ROOT}/platform/default/src/mbgl/text/bidi.cpp + ${MBGL_ROOT}/platform/default/src/mbgl/util/compression.cpp ${MBGL_ROOT}/platform/default/src/mbgl/util/png_writer.cpp ${MBGL_ROOT}/platform/default/src/mbgl/util/thread_local.cpp ${MBGL_ROOT}/platform/default/src/mbgl/util/utf.cpp diff --git a/next/platform/qt/qt.cmake b/next/platform/qt/qt.cmake index 746fd39711..a63b1cd4de 100644 --- a/next/platform/qt/qt.cmake +++ b/next/platform/qt/qt.cmake @@ -44,6 +44,7 @@ target_sources( ${MBGL_ROOT}/platform/default/src/mbgl/storage/sqlite3.cpp ${MBGL_ROOT}/platform/default/src/mbgl/text/collator.cpp ${MBGL_ROOT}/platform/default/src/mbgl/text/unaccent.cpp + ${MBGL_ROOT}/platform/default/src/mbgl/util/compression.cpp ${MBGL_ROOT}/platform/qt/src/async_task.cpp ${MBGL_ROOT}/platform/qt/src/async_task_impl.hpp ${MBGL_ROOT}/platform/qt/src/format_number.cpp diff --git a/platform/android/core-files.json b/platform/android/core-files.json index b19e5d9a93..362098dd9b 100644 --- a/platform/android/core-files.json +++ b/platform/android/core-files.json @@ -92,6 +92,7 @@ "platform/default/src/mbgl/gl/headless_backend.cpp", "platform/default/src/mbgl/map/map_snapshotter.cpp", "platform/default/src/mbgl/text/bidi.cpp", + "platform/default/src/mbgl/util/compression.cpp", "platform/default/src/mbgl/util/png_writer.cpp", "platform/default/src/mbgl/util/thread_local.cpp", "platform/default/src/mbgl/util/utf.cpp", diff --git a/platform/default/src/mbgl/util/compression.cpp b/platform/default/src/mbgl/util/compression.cpp new file mode 100644 index 0000000000..1742898f9e --- /dev/null +++ b/platform/default/src/mbgl/util/compression.cpp @@ -0,0 +1,104 @@ +#include + +#if defined(__QT__) && defined(_WIN32) && !defined(__GNUC__) +#include +#else +#include +#endif + +#include +#include +#include + +// Check zlib library version. +const static bool zlibVersionCheck __attribute__((unused)) = []() { + const char *const version = zlibVersion(); + if (version[0] != ZLIB_VERSION[0]) { + char message[96]; + snprintf(message, 96, "zlib version mismatch: headers report %s, but library reports %s", + ZLIB_VERSION, version); + throw std::runtime_error(message); + } + + return true; +}(); + +namespace mbgl { +namespace util { + +// Needed when using a zlib compiled with -DZ_PREFIX +// because it will mess with this function name and +// cause a link error. +#undef compress + +std::string compress(const std::string &raw) { + z_stream deflate_stream; + memset(&deflate_stream, 0, sizeof(deflate_stream)); + + // TODO: reuse z_streams + if (deflateInit(&deflate_stream, Z_DEFAULT_COMPRESSION) != Z_OK) { + throw std::runtime_error("failed to initialize deflate"); + } + + deflate_stream.next_in = (Bytef *)raw.data(); + deflate_stream.avail_in = uInt(raw.size()); + + std::string result; + char out[16384]; + + int code; + do { + deflate_stream.next_out = reinterpret_cast(out); + deflate_stream.avail_out = sizeof(out); + code = deflate(&deflate_stream, Z_FINISH); + if (result.size() < deflate_stream.total_out) { + // append the block to the output string + result.append(out, deflate_stream.total_out - result.size()); + } + } while (code == Z_OK); + + deflateEnd(&deflate_stream); + + if (code != Z_STREAM_END) { + throw std::runtime_error(deflate_stream.msg); + } + + return result; +} + +std::string decompress(const std::string &raw) { + z_stream inflate_stream; + memset(&inflate_stream, 0, sizeof(inflate_stream)); + + // TODO: reuse z_streams + if (inflateInit(&inflate_stream) != Z_OK) { + throw std::runtime_error("failed to initialize inflate"); + } + + inflate_stream.next_in = (Bytef *)raw.data(); + inflate_stream.avail_in = uInt(raw.size()); + + std::string result; + char out[15384]; + + int code; + do { + inflate_stream.next_out = reinterpret_cast(out); + inflate_stream.avail_out = sizeof(out); + code = inflate(&inflate_stream, 0); + // result.append(out, sizeof(out) - inflate_stream.avail_out); + if (result.size() < inflate_stream.total_out) { + result.append(out, inflate_stream.total_out - result.size()); + } + } while (code == Z_OK); + + inflateEnd(&inflate_stream); + + if (code != Z_STREAM_END) { + throw std::runtime_error(inflate_stream.msg ? inflate_stream.msg : "decompression error"); + } + + return result; +} +} // namespace util +} // namespace mbgl diff --git a/platform/ios/core-files.json b/platform/ios/core-files.json index 67edda9733..c4930b1667 100644 --- a/platform/ios/core-files.json +++ b/platform/ios/core-files.json @@ -15,6 +15,7 @@ "platform/default/src/mbgl/gl/headless_backend.cpp", "platform/default/src/mbgl/map/map_snapshotter.cpp", "platform/default/src/mbgl/text/bidi.cpp", + "platform/default/src/mbgl/util/compression.cpp", "platform/default/src/mbgl/util/png_writer.cpp", "platform/default/src/mbgl/util/thread_local.cpp", "platform/default/src/mbgl/util/utf.cpp" diff --git a/platform/linux/config.cmake b/platform/linux/config.cmake index 74860ea0d7..55e6e3c192 100644 --- a/platform/linux/config.cmake +++ b/platform/linux/config.cmake @@ -45,6 +45,7 @@ macro(mbgl_platform_core) PRIVATE platform/linux/src/gl_functions.cpp # Misc + PRIVATE platform/default/src/mbgl/util/compression.cpp PRIVATE platform/default/src/mbgl/util/logging_stderr.cpp PRIVATE platform/default/src/mbgl/util/string_stdlib.cpp PRIVATE platform/default/src/mbgl/util/thread.cpp diff --git a/platform/macos/core-files.json b/platform/macos/core-files.json index a17a48c52f..21b0e698f0 100644 --- a/platform/macos/core-files.json +++ b/platform/macos/core-files.json @@ -14,6 +14,7 @@ "platform/default/src/mbgl/gl/headless_backend.cpp", "platform/default/src/mbgl/map/map_snapshotter.cpp", "platform/default/src/mbgl/text/bidi.cpp", + "platform/default/src/mbgl/util/compression.cpp", "platform/default/src/mbgl/util/png_writer.cpp", "platform/default/src/mbgl/util/thread_local.cpp", "platform/default/src/mbgl/util/utf.cpp" diff --git a/src/core-files.json b/src/core-files.json index 4867bd3dc4..d881e6259d 100644 --- a/src/core-files.json +++ b/src/core-files.json @@ -284,7 +284,6 @@ "src/mbgl/tile/vector_tile_data.cpp", "src/mbgl/util/chrono.cpp", "src/mbgl/util/color.cpp", - "src/mbgl/util/compression.cpp", "src/mbgl/util/constants.cpp", "src/mbgl/util/convert.cpp", "src/mbgl/util/dtoa.cpp", diff --git a/src/mbgl/util/compression.cpp b/src/mbgl/util/compression.cpp deleted file mode 100644 index 1742898f9e..0000000000 --- a/src/mbgl/util/compression.cpp +++ /dev/null @@ -1,104 +0,0 @@ -#include - -#if defined(__QT__) && defined(_WIN32) && !defined(__GNUC__) -#include -#else -#include -#endif - -#include -#include -#include - -// Check zlib library version. -const static bool zlibVersionCheck __attribute__((unused)) = []() { - const char *const version = zlibVersion(); - if (version[0] != ZLIB_VERSION[0]) { - char message[96]; - snprintf(message, 96, "zlib version mismatch: headers report %s, but library reports %s", - ZLIB_VERSION, version); - throw std::runtime_error(message); - } - - return true; -}(); - -namespace mbgl { -namespace util { - -// Needed when using a zlib compiled with -DZ_PREFIX -// because it will mess with this function name and -// cause a link error. -#undef compress - -std::string compress(const std::string &raw) { - z_stream deflate_stream; - memset(&deflate_stream, 0, sizeof(deflate_stream)); - - // TODO: reuse z_streams - if (deflateInit(&deflate_stream, Z_DEFAULT_COMPRESSION) != Z_OK) { - throw std::runtime_error("failed to initialize deflate"); - } - - deflate_stream.next_in = (Bytef *)raw.data(); - deflate_stream.avail_in = uInt(raw.size()); - - std::string result; - char out[16384]; - - int code; - do { - deflate_stream.next_out = reinterpret_cast(out); - deflate_stream.avail_out = sizeof(out); - code = deflate(&deflate_stream, Z_FINISH); - if (result.size() < deflate_stream.total_out) { - // append the block to the output string - result.append(out, deflate_stream.total_out - result.size()); - } - } while (code == Z_OK); - - deflateEnd(&deflate_stream); - - if (code != Z_STREAM_END) { - throw std::runtime_error(deflate_stream.msg); - } - - return result; -} - -std::string decompress(const std::string &raw) { - z_stream inflate_stream; - memset(&inflate_stream, 0, sizeof(inflate_stream)); - - // TODO: reuse z_streams - if (inflateInit(&inflate_stream) != Z_OK) { - throw std::runtime_error("failed to initialize inflate"); - } - - inflate_stream.next_in = (Bytef *)raw.data(); - inflate_stream.avail_in = uInt(raw.size()); - - std::string result; - char out[15384]; - - int code; - do { - inflate_stream.next_out = reinterpret_cast(out); - inflate_stream.avail_out = sizeof(out); - code = inflate(&inflate_stream, 0); - // result.append(out, sizeof(out) - inflate_stream.avail_out); - if (result.size() < inflate_stream.total_out) { - result.append(out, inflate_stream.total_out - result.size()); - } - } while (code == Z_OK); - - inflateEnd(&inflate_stream); - - if (code != Z_STREAM_END) { - throw std::runtime_error(inflate_stream.msg ? inflate_stream.msg : "decompression error"); - } - - return result; -} -} // namespace util -} // namespace mbgl -- cgit v1.2.1