From 3ad52b8736482231d86d472e92c609a03d166cee Mon Sep 17 00:00:00 2001 From: Mike Sinkovsky Date: Thu, 16 Aug 2018 19:17:00 +0500 Subject: [PATCH] platform.zlib: fix + mingw + test (#1880) --- backend.native/tests/build.gradle | 6 ++++ backend.native/tests/interop/platform_zlib.kt | 21 ++++++++++++ platformLibs/src/platform/android/zlib.def | 31 ++++++++++++++++- platformLibs/src/platform/ios/zlib.def | 30 ++++++++++++++++ platformLibs/src/platform/linux/zlib.def | 33 ++++++++++++++++-- platformLibs/src/platform/mingw/zlib.def | 34 +++++++++++++++++++ platformLibs/src/platform/osx/zlib.def | 30 ++++++++++++++++ 7 files changed, 182 insertions(+), 3 deletions(-) create mode 100644 backend.native/tests/interop/platform_zlib.kt create mode 100644 platformLibs/src/platform/mingw/zlib.def diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index 149c0453560..02e1dcdd8c1 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -2841,6 +2841,12 @@ task interop_libiconv(type: RunStandaloneKonanTest) { goldValue = "72 72\n101 101\n108 108\n108 108\n111 111\n33 33\n" } +task interop_zlib(type: RunStandaloneKonanTest) { + disabled = (project.testTarget != null) + source = "interop/platform_zlib.kt" + goldValue = "Hello!\nHello!\n" +} + task produce_dynamic(type: DynamicKonanTest) { disabled = (project.testTarget != null && project.testTarget != project.hostName) source = "produce_dynamic/simple/hello.kt" diff --git a/backend.native/tests/interop/platform_zlib.kt b/backend.native/tests/interop/platform_zlib.kt new file mode 100644 index 00000000000..aeb91a05a25 --- /dev/null +++ b/backend.native/tests/interop/platform_zlib.kt @@ -0,0 +1,21 @@ +import kotlinx.cinterop.* +import platform.zlib.* + +val source = immutableBinaryBlobOf(0xF3, 0x48, 0xCD, 0xC9, 0xC9, 0x57, 0x04, 0x00).asCPointer(0)!! +val golden = immutableBinaryBlobOf(0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x21, 0x00).asCPointer(0)!! + +fun main(args: Array) = memScoped { + val buffer = allocArray(32) + + val z = alloc().apply { + next_in = source + avail_in = 8 + next_out = buffer + avail_out = 32 + }.ptr + + if (inflateInit2(z, -15) == Z_OK && inflate(z, Z_FINISH) == Z_STREAM_END && inflateEnd(z) == Z_OK) + println(buffer.toKString()) + + println(golden.toKString()) +} diff --git a/platformLibs/src/platform/android/zlib.def b/platformLibs/src/platform/android/zlib.def index bd6628a356d..69ee2779d23 100644 --- a/platformLibs/src/platform/android/zlib.def +++ b/platformLibs/src/platform/android/zlib.def @@ -1,5 +1,34 @@ depends = posix package = platform.zlib headers = zconf.h zlib.h -headerFilter = ** +headerFilter = zlib.h +compilerOpts = -DByte=uByte -DBytef=uBytef linkerOpts = -lz + +--- +#undef deflateInit +static inline int deflateInit(z_streamp strm, int level) { + return deflateInit_(strm, level, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef deflateInit2 +static inline int deflateInit2(z_streamp strm, int level, int method, + int windowBits, int memLevel, int strategy) { + return deflateInit2_(strm, level, method, windowBits, memLevel, + strategy, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef inflateInit +static inline int inflateInit(z_streamp strm) { + return inflateInit_(strm, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef inflateInit2 +static inline int inflateInit2(z_streamp strm, int windowBits) { + return inflateInit2_(strm, windowBits, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef inflateBackInit +static inline int inflateBackInit(z_streamp strm, int windowBits, unsigned char *window) { + return inflateBackInit_(strm, windowBits, window, ZLIB_VERSION, (int)sizeof(z_stream)); +} diff --git a/platformLibs/src/platform/ios/zlib.def b/platformLibs/src/platform/ios/zlib.def index b4271618f34..69ee2779d23 100644 --- a/platformLibs/src/platform/ios/zlib.def +++ b/platformLibs/src/platform/ios/zlib.def @@ -1,4 +1,34 @@ depends = posix package = platform.zlib headers = zconf.h zlib.h +headerFilter = zlib.h +compilerOpts = -DByte=uByte -DBytef=uBytef linkerOpts = -lz + +--- +#undef deflateInit +static inline int deflateInit(z_streamp strm, int level) { + return deflateInit_(strm, level, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef deflateInit2 +static inline int deflateInit2(z_streamp strm, int level, int method, + int windowBits, int memLevel, int strategy) { + return deflateInit2_(strm, level, method, windowBits, memLevel, + strategy, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef inflateInit +static inline int inflateInit(z_streamp strm) { + return inflateInit_(strm, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef inflateInit2 +static inline int inflateInit2(z_streamp strm, int windowBits) { + return inflateInit2_(strm, windowBits, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef inflateBackInit +static inline int inflateBackInit(z_streamp strm, int windowBits, unsigned char *window) { + return inflateBackInit_(strm, windowBits, window, ZLIB_VERSION, (int)sizeof(z_stream)); +} diff --git a/platformLibs/src/platform/linux/zlib.def b/platformLibs/src/platform/linux/zlib.def index fec75a8c121..04eec1ee09e 100644 --- a/platformLibs/src/platform/linux/zlib.def +++ b/platformLibs/src/platform/linux/zlib.def @@ -1,5 +1,34 @@ +depends = posix package = platform.zlib headers = zconf.h zlib.h -compilerOpts = -D_ANSI_SOURCE -D_POSIX_C_SOURCE=199309 -D_BSD_SOURCE -D_XOPEN_SOURCE=700 +headerFilter = zlib.h +compilerOpts = -DByte=uByte -DBytef=uBytef -D_ANSI_SOURCE -D_POSIX_C_SOURCE=199309 -D_BSD_SOURCE -D_XOPEN_SOURCE=700 linkerOpts = -lz -depends = posix + +--- +#undef deflateInit +static inline int deflateInit(z_streamp strm, int level) { + return deflateInit_(strm, level, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef deflateInit2 +static inline int deflateInit2(z_streamp strm, int level, int method, + int windowBits, int memLevel, int strategy) { + return deflateInit2_(strm, level, method, windowBits, memLevel, + strategy, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef inflateInit +static inline int inflateInit(z_streamp strm) { + return inflateInit_(strm, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef inflateInit2 +static inline int inflateInit2(z_streamp strm, int windowBits) { + return inflateInit2_(strm, windowBits, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef inflateBackInit +static inline int inflateBackInit(z_streamp strm, int windowBits, unsigned char *window) { + return inflateBackInit_(strm, windowBits, window, ZLIB_VERSION, (int)sizeof(z_stream)); +} diff --git a/platformLibs/src/platform/mingw/zlib.def b/platformLibs/src/platform/mingw/zlib.def new file mode 100644 index 00000000000..cdc1db7fc00 --- /dev/null +++ b/platformLibs/src/platform/mingw/zlib.def @@ -0,0 +1,34 @@ +depends = posix +package = platform.zlib +headers = zconf.h zlib.h +headerFilter = zlib.h +compilerOpts = -DByte=uByte -DBytef=uBytef +linkerOpts = -Wl,-Bstatic -lz -Wl,-Bdynamic + +--- +#undef deflateInit +static inline int deflateInit(z_streamp strm, int level) { + return deflateInit_(strm, level, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef deflateInit2 +static inline int deflateInit2(z_streamp strm, int level, int method, + int windowBits, int memLevel, int strategy) { + return deflateInit2_(strm, level, method, windowBits, memLevel, + strategy, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef inflateInit +static inline int inflateInit(z_streamp strm) { + return inflateInit_(strm, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef inflateInit2 +static inline int inflateInit2(z_streamp strm, int windowBits) { + return inflateInit2_(strm, windowBits, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef inflateBackInit +static inline int inflateBackInit(z_streamp strm, int windowBits, unsigned char *window) { + return inflateBackInit_(strm, windowBits, window, ZLIB_VERSION, (int)sizeof(z_stream)); +} diff --git a/platformLibs/src/platform/osx/zlib.def b/platformLibs/src/platform/osx/zlib.def index b4271618f34..69ee2779d23 100644 --- a/platformLibs/src/platform/osx/zlib.def +++ b/platformLibs/src/platform/osx/zlib.def @@ -1,4 +1,34 @@ depends = posix package = platform.zlib headers = zconf.h zlib.h +headerFilter = zlib.h +compilerOpts = -DByte=uByte -DBytef=uBytef linkerOpts = -lz + +--- +#undef deflateInit +static inline int deflateInit(z_streamp strm, int level) { + return deflateInit_(strm, level, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef deflateInit2 +static inline int deflateInit2(z_streamp strm, int level, int method, + int windowBits, int memLevel, int strategy) { + return deflateInit2_(strm, level, method, windowBits, memLevel, + strategy, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef inflateInit +static inline int inflateInit(z_streamp strm) { + return inflateInit_(strm, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef inflateInit2 +static inline int inflateInit2(z_streamp strm, int windowBits) { + return inflateInit2_(strm, windowBits, ZLIB_VERSION, (int)sizeof(z_stream)); +} + +#undef inflateBackInit +static inline int inflateBackInit(z_streamp strm, int windowBits, unsigned char *window) { + return inflateBackInit_(strm, windowBits, window, ZLIB_VERSION, (int)sizeof(z_stream)); +}