@point3/node-rdkafka 3.6.0-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (707) hide show
  1. package/LICENSE.txt +20 -0
  2. package/README.md +636 -0
  3. package/binding.gyp +154 -0
  4. package/deps/librdkafka/.clang-format +136 -0
  5. package/deps/librdkafka/.clang-format-cpp +103 -0
  6. package/deps/librdkafka/.dir-locals.el +10 -0
  7. package/deps/librdkafka/.formatignore +33 -0
  8. package/deps/librdkafka/.gdbmacros +19 -0
  9. package/deps/librdkafka/.github/CODEOWNERS +1 -0
  10. package/deps/librdkafka/.github/ISSUE_TEMPLATE +34 -0
  11. package/deps/librdkafka/.semaphore/run-all-tests.yml +77 -0
  12. package/deps/librdkafka/.semaphore/semaphore-integration.yml +250 -0
  13. package/deps/librdkafka/.semaphore/semaphore.yml +378 -0
  14. package/deps/librdkafka/.semaphore/verify-linux-packages.yml +41 -0
  15. package/deps/librdkafka/CHANGELOG.md +2208 -0
  16. package/deps/librdkafka/CMakeLists.txt +291 -0
  17. package/deps/librdkafka/CODE_OF_CONDUCT.md +46 -0
  18. package/deps/librdkafka/CONFIGURATION.md +209 -0
  19. package/deps/librdkafka/CONTRIBUTING.md +431 -0
  20. package/deps/librdkafka/Doxyfile +2375 -0
  21. package/deps/librdkafka/INTRODUCTION.md +2481 -0
  22. package/deps/librdkafka/LICENSE +26 -0
  23. package/deps/librdkafka/LICENSE.cjson +22 -0
  24. package/deps/librdkafka/LICENSE.crc32c +28 -0
  25. package/deps/librdkafka/LICENSE.fnv1a +18 -0
  26. package/deps/librdkafka/LICENSE.hdrhistogram +27 -0
  27. package/deps/librdkafka/LICENSE.lz4 +26 -0
  28. package/deps/librdkafka/LICENSE.murmur2 +25 -0
  29. package/deps/librdkafka/LICENSE.nanopb +22 -0
  30. package/deps/librdkafka/LICENSE.opentelemetry +203 -0
  31. package/deps/librdkafka/LICENSE.pycrc +23 -0
  32. package/deps/librdkafka/LICENSE.queue +31 -0
  33. package/deps/librdkafka/LICENSE.regexp +5 -0
  34. package/deps/librdkafka/LICENSE.snappy +36 -0
  35. package/deps/librdkafka/LICENSE.tinycthread +26 -0
  36. package/deps/librdkafka/LICENSE.wingetopt +49 -0
  37. package/deps/librdkafka/LICENSES.txt +625 -0
  38. package/deps/librdkafka/Makefile +125 -0
  39. package/deps/librdkafka/README.md +199 -0
  40. package/deps/librdkafka/README.win32 +26 -0
  41. package/deps/librdkafka/STATISTICS.md +624 -0
  42. package/deps/librdkafka/configure +214 -0
  43. package/deps/librdkafka/configure.self +331 -0
  44. package/deps/librdkafka/debian/changelog +111 -0
  45. package/deps/librdkafka/debian/compat +1 -0
  46. package/deps/librdkafka/debian/control +71 -0
  47. package/deps/librdkafka/debian/copyright +99 -0
  48. package/deps/librdkafka/debian/gbp.conf +9 -0
  49. package/deps/librdkafka/debian/librdkafka++1.install +1 -0
  50. package/deps/librdkafka/debian/librdkafka-dev.examples +2 -0
  51. package/deps/librdkafka/debian/librdkafka-dev.install +9 -0
  52. package/deps/librdkafka/debian/librdkafka1.docs +5 -0
  53. package/deps/librdkafka/debian/librdkafka1.install +1 -0
  54. package/deps/librdkafka/debian/librdkafka1.symbols +135 -0
  55. package/deps/librdkafka/debian/rules +19 -0
  56. package/deps/librdkafka/debian/source/format +1 -0
  57. package/deps/librdkafka/debian/watch +2 -0
  58. package/deps/librdkafka/dev-conf.sh +123 -0
  59. package/deps/librdkafka/examples/CMakeLists.txt +79 -0
  60. package/deps/librdkafka/examples/Makefile +167 -0
  61. package/deps/librdkafka/examples/README.md +42 -0
  62. package/deps/librdkafka/examples/alter_consumer_group_offsets.c +338 -0
  63. package/deps/librdkafka/examples/consumer.c +271 -0
  64. package/deps/librdkafka/examples/delete_records.c +233 -0
  65. package/deps/librdkafka/examples/describe_cluster.c +322 -0
  66. package/deps/librdkafka/examples/describe_consumer_groups.c +455 -0
  67. package/deps/librdkafka/examples/describe_topics.c +427 -0
  68. package/deps/librdkafka/examples/elect_leaders.c +317 -0
  69. package/deps/librdkafka/examples/globals.json +11 -0
  70. package/deps/librdkafka/examples/idempotent_producer.c +344 -0
  71. package/deps/librdkafka/examples/incremental_alter_configs.c +347 -0
  72. package/deps/librdkafka/examples/kafkatest_verifiable_client.cpp +945 -0
  73. package/deps/librdkafka/examples/list_consumer_group_offsets.c +359 -0
  74. package/deps/librdkafka/examples/list_consumer_groups.c +365 -0
  75. package/deps/librdkafka/examples/list_offsets.c +327 -0
  76. package/deps/librdkafka/examples/misc.c +287 -0
  77. package/deps/librdkafka/examples/openssl_engine_example.cpp +248 -0
  78. package/deps/librdkafka/examples/producer.c +251 -0
  79. package/deps/librdkafka/examples/producer.cpp +228 -0
  80. package/deps/librdkafka/examples/rdkafka_complex_consumer_example.c +617 -0
  81. package/deps/librdkafka/examples/rdkafka_complex_consumer_example.cpp +467 -0
  82. package/deps/librdkafka/examples/rdkafka_consume_batch.cpp +264 -0
  83. package/deps/librdkafka/examples/rdkafka_example.c +853 -0
  84. package/deps/librdkafka/examples/rdkafka_example.cpp +679 -0
  85. package/deps/librdkafka/examples/rdkafka_performance.c +1781 -0
  86. package/deps/librdkafka/examples/transactions-older-broker.c +668 -0
  87. package/deps/librdkafka/examples/transactions.c +665 -0
  88. package/deps/librdkafka/examples/user_scram.c +491 -0
  89. package/deps/librdkafka/examples/win_ssl_cert_store.cpp +396 -0
  90. package/deps/librdkafka/lds-gen.py +73 -0
  91. package/deps/librdkafka/mainpage.doxy +40 -0
  92. package/deps/librdkafka/mklove/Makefile.base +329 -0
  93. package/deps/librdkafka/mklove/modules/configure.atomics +144 -0
  94. package/deps/librdkafka/mklove/modules/configure.base +2484 -0
  95. package/deps/librdkafka/mklove/modules/configure.builtin +70 -0
  96. package/deps/librdkafka/mklove/modules/configure.cc +186 -0
  97. package/deps/librdkafka/mklove/modules/configure.cxx +8 -0
  98. package/deps/librdkafka/mklove/modules/configure.fileversion +65 -0
  99. package/deps/librdkafka/mklove/modules/configure.gitversion +29 -0
  100. package/deps/librdkafka/mklove/modules/configure.good_cflags +18 -0
  101. package/deps/librdkafka/mklove/modules/configure.host +132 -0
  102. package/deps/librdkafka/mklove/modules/configure.lib +49 -0
  103. package/deps/librdkafka/mklove/modules/configure.libcurl +99 -0
  104. package/deps/librdkafka/mklove/modules/configure.libsasl2 +36 -0
  105. package/deps/librdkafka/mklove/modules/configure.libssl +147 -0
  106. package/deps/librdkafka/mklove/modules/configure.libzstd +58 -0
  107. package/deps/librdkafka/mklove/modules/configure.parseversion +95 -0
  108. package/deps/librdkafka/mklove/modules/configure.pic +16 -0
  109. package/deps/librdkafka/mklove/modules/configure.socket +20 -0
  110. package/deps/librdkafka/mklove/modules/configure.zlib +61 -0
  111. package/deps/librdkafka/mklove/modules/patches/README.md +8 -0
  112. package/deps/librdkafka/mklove/modules/patches/libcurl.0000-no-runtime-linking-check.patch +11 -0
  113. package/deps/librdkafka/mklove/modules/patches/libssl.0000-osx-rand-include-fix-OpenSSL-PR16409.patch +56 -0
  114. package/deps/librdkafka/packaging/RELEASE.md +319 -0
  115. package/deps/librdkafka/packaging/alpine/build-alpine.sh +38 -0
  116. package/deps/librdkafka/packaging/archlinux/PKGBUILD +30 -0
  117. package/deps/librdkafka/packaging/cmake/Config.cmake.in +37 -0
  118. package/deps/librdkafka/packaging/cmake/Modules/FindLZ4.cmake +38 -0
  119. package/deps/librdkafka/packaging/cmake/Modules/FindZSTD.cmake +27 -0
  120. package/deps/librdkafka/packaging/cmake/Modules/LICENSE.FindZstd +178 -0
  121. package/deps/librdkafka/packaging/cmake/README.md +38 -0
  122. package/deps/librdkafka/packaging/cmake/config.h.in +52 -0
  123. package/deps/librdkafka/packaging/cmake/parseversion.cmake +60 -0
  124. package/deps/librdkafka/packaging/cmake/rdkafka.pc.in +12 -0
  125. package/deps/librdkafka/packaging/cmake/try_compile/atomic_32_test.c +8 -0
  126. package/deps/librdkafka/packaging/cmake/try_compile/atomic_64_test.c +8 -0
  127. package/deps/librdkafka/packaging/cmake/try_compile/c11threads_test.c +14 -0
  128. package/deps/librdkafka/packaging/cmake/try_compile/crc32c_hw_test.c +27 -0
  129. package/deps/librdkafka/packaging/cmake/try_compile/dlopen_test.c +11 -0
  130. package/deps/librdkafka/packaging/cmake/try_compile/libsasl2_test.c +7 -0
  131. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_darwin_test.c +6 -0
  132. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_freebsd_test.c +7 -0
  133. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_gnu_test.c +5 -0
  134. package/deps/librdkafka/packaging/cmake/try_compile/rand_r_test.c +7 -0
  135. package/deps/librdkafka/packaging/cmake/try_compile/rdkafka_setup.cmake +122 -0
  136. package/deps/librdkafka/packaging/cmake/try_compile/regex_test.c +10 -0
  137. package/deps/librdkafka/packaging/cmake/try_compile/strndup_test.c +5 -0
  138. package/deps/librdkafka/packaging/cmake/try_compile/sync_32_test.c +8 -0
  139. package/deps/librdkafka/packaging/cmake/try_compile/sync_64_test.c +8 -0
  140. package/deps/librdkafka/packaging/cp/README.md +16 -0
  141. package/deps/librdkafka/packaging/cp/check_features.c +72 -0
  142. package/deps/librdkafka/packaging/cp/verify-deb.sh +33 -0
  143. package/deps/librdkafka/packaging/cp/verify-packages.sh +69 -0
  144. package/deps/librdkafka/packaging/cp/verify-rpm.sh +32 -0
  145. package/deps/librdkafka/packaging/debian/changelog +66 -0
  146. package/deps/librdkafka/packaging/debian/compat +1 -0
  147. package/deps/librdkafka/packaging/debian/control +49 -0
  148. package/deps/librdkafka/packaging/debian/copyright +84 -0
  149. package/deps/librdkafka/packaging/debian/docs +5 -0
  150. package/deps/librdkafka/packaging/debian/gbp.conf +9 -0
  151. package/deps/librdkafka/packaging/debian/librdkafka-dev.dirs +2 -0
  152. package/deps/librdkafka/packaging/debian/librdkafka-dev.examples +2 -0
  153. package/deps/librdkafka/packaging/debian/librdkafka-dev.install +6 -0
  154. package/deps/librdkafka/packaging/debian/librdkafka-dev.substvars +1 -0
  155. package/deps/librdkafka/packaging/debian/librdkafka.dsc +16 -0
  156. package/deps/librdkafka/packaging/debian/librdkafka1-dbg.substvars +1 -0
  157. package/deps/librdkafka/packaging/debian/librdkafka1.dirs +1 -0
  158. package/deps/librdkafka/packaging/debian/librdkafka1.install +2 -0
  159. package/deps/librdkafka/packaging/debian/librdkafka1.postinst.debhelper +5 -0
  160. package/deps/librdkafka/packaging/debian/librdkafka1.postrm.debhelper +5 -0
  161. package/deps/librdkafka/packaging/debian/librdkafka1.symbols +64 -0
  162. package/deps/librdkafka/packaging/debian/rules +19 -0
  163. package/deps/librdkafka/packaging/debian/source/format +1 -0
  164. package/deps/librdkafka/packaging/debian/watch +2 -0
  165. package/deps/librdkafka/packaging/get_version.py +21 -0
  166. package/deps/librdkafka/packaging/homebrew/README.md +15 -0
  167. package/deps/librdkafka/packaging/homebrew/brew-update-pr.sh +31 -0
  168. package/deps/librdkafka/packaging/mingw-w64/configure-build-msys2-mingw-static.sh +52 -0
  169. package/deps/librdkafka/packaging/mingw-w64/configure-build-msys2-mingw.sh +21 -0
  170. package/deps/librdkafka/packaging/mingw-w64/export-variables.sh +13 -0
  171. package/deps/librdkafka/packaging/mingw-w64/run-tests.sh +6 -0
  172. package/deps/librdkafka/packaging/mingw-w64/semaphoreci-build.sh +38 -0
  173. package/deps/librdkafka/packaging/nuget/README.md +84 -0
  174. package/deps/librdkafka/packaging/nuget/artifact.py +177 -0
  175. package/deps/librdkafka/packaging/nuget/cleanup-s3.py +143 -0
  176. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-win32__bldtype-Release/msvcr120.zip +0 -0
  177. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-win32__bldtype-Release/msvcr140.zip +0 -0
  178. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-x64__bldtype-Release/msvcr120.zip +0 -0
  179. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-x64__bldtype-Release/msvcr140.zip +0 -0
  180. package/deps/librdkafka/packaging/nuget/nuget.sh +21 -0
  181. package/deps/librdkafka/packaging/nuget/nugetpackage.py +278 -0
  182. package/deps/librdkafka/packaging/nuget/packaging.py +448 -0
  183. package/deps/librdkafka/packaging/nuget/push-to-nuget.sh +21 -0
  184. package/deps/librdkafka/packaging/nuget/release.py +167 -0
  185. package/deps/librdkafka/packaging/nuget/requirements.txt +3 -0
  186. package/deps/librdkafka/packaging/nuget/staticpackage.py +178 -0
  187. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.nuspec +21 -0
  188. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.props +18 -0
  189. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.targets +19 -0
  190. package/deps/librdkafka/packaging/nuget/zfile/__init__.py +0 -0
  191. package/deps/librdkafka/packaging/nuget/zfile/zfile.py +98 -0
  192. package/deps/librdkafka/packaging/rpm/Makefile +92 -0
  193. package/deps/librdkafka/packaging/rpm/README.md +23 -0
  194. package/deps/librdkafka/packaging/rpm/el7-x86_64.cfg +40 -0
  195. package/deps/librdkafka/packaging/rpm/librdkafka.spec +118 -0
  196. package/deps/librdkafka/packaging/rpm/mock-on-docker.sh +96 -0
  197. package/deps/librdkafka/packaging/rpm/tests/Makefile +25 -0
  198. package/deps/librdkafka/packaging/rpm/tests/README.md +8 -0
  199. package/deps/librdkafka/packaging/rpm/tests/run-test.sh +42 -0
  200. package/deps/librdkafka/packaging/rpm/tests/test-on-docker.sh +56 -0
  201. package/deps/librdkafka/packaging/rpm/tests/test.c +77 -0
  202. package/deps/librdkafka/packaging/rpm/tests/test.cpp +34 -0
  203. package/deps/librdkafka/packaging/tools/Dockerfile +31 -0
  204. package/deps/librdkafka/packaging/tools/build-configurations-checks.sh +12 -0
  205. package/deps/librdkafka/packaging/tools/build-deb-package.sh +64 -0
  206. package/deps/librdkafka/packaging/tools/build-debian.sh +65 -0
  207. package/deps/librdkafka/packaging/tools/build-manylinux.sh +68 -0
  208. package/deps/librdkafka/packaging/tools/build-release-artifacts.sh +139 -0
  209. package/deps/librdkafka/packaging/tools/distro-build.sh +38 -0
  210. package/deps/librdkafka/packaging/tools/gh-release-checksums.py +39 -0
  211. package/deps/librdkafka/packaging/tools/rdutcoverage.sh +25 -0
  212. package/deps/librdkafka/packaging/tools/requirements.txt +2 -0
  213. package/deps/librdkafka/packaging/tools/run-in-docker.sh +28 -0
  214. package/deps/librdkafka/packaging/tools/run-integration-tests.sh +31 -0
  215. package/deps/librdkafka/packaging/tools/run-style-check.sh +4 -0
  216. package/deps/librdkafka/packaging/tools/style-format.sh +149 -0
  217. package/deps/librdkafka/packaging/tools/update_rpcs_max_versions.py +100 -0
  218. package/deps/librdkafka/service.yml +172 -0
  219. package/deps/librdkafka/src/CMakeLists.txt +374 -0
  220. package/deps/librdkafka/src/Makefile +103 -0
  221. package/deps/librdkafka/src/README.lz4.md +30 -0
  222. package/deps/librdkafka/src/cJSON.c +2834 -0
  223. package/deps/librdkafka/src/cJSON.h +398 -0
  224. package/deps/librdkafka/src/crc32c.c +430 -0
  225. package/deps/librdkafka/src/crc32c.h +38 -0
  226. package/deps/librdkafka/src/generate_proto.sh +66 -0
  227. package/deps/librdkafka/src/librdkafka_cgrp_synch.png +0 -0
  228. package/deps/librdkafka/src/lz4.c +2727 -0
  229. package/deps/librdkafka/src/lz4.h +842 -0
  230. package/deps/librdkafka/src/lz4frame.c +2078 -0
  231. package/deps/librdkafka/src/lz4frame.h +692 -0
  232. package/deps/librdkafka/src/lz4frame_static.h +47 -0
  233. package/deps/librdkafka/src/lz4hc.c +1631 -0
  234. package/deps/librdkafka/src/lz4hc.h +413 -0
  235. package/deps/librdkafka/src/nanopb/pb.h +917 -0
  236. package/deps/librdkafka/src/nanopb/pb_common.c +388 -0
  237. package/deps/librdkafka/src/nanopb/pb_common.h +49 -0
  238. package/deps/librdkafka/src/nanopb/pb_decode.c +1727 -0
  239. package/deps/librdkafka/src/nanopb/pb_decode.h +193 -0
  240. package/deps/librdkafka/src/nanopb/pb_encode.c +1000 -0
  241. package/deps/librdkafka/src/nanopb/pb_encode.h +185 -0
  242. package/deps/librdkafka/src/opentelemetry/common.pb.c +32 -0
  243. package/deps/librdkafka/src/opentelemetry/common.pb.h +170 -0
  244. package/deps/librdkafka/src/opentelemetry/metrics.options +2 -0
  245. package/deps/librdkafka/src/opentelemetry/metrics.pb.c +67 -0
  246. package/deps/librdkafka/src/opentelemetry/metrics.pb.h +966 -0
  247. package/deps/librdkafka/src/opentelemetry/resource.pb.c +12 -0
  248. package/deps/librdkafka/src/opentelemetry/resource.pb.h +58 -0
  249. package/deps/librdkafka/src/queue.h +850 -0
  250. package/deps/librdkafka/src/rd.h +584 -0
  251. package/deps/librdkafka/src/rdaddr.c +255 -0
  252. package/deps/librdkafka/src/rdaddr.h +202 -0
  253. package/deps/librdkafka/src/rdatomic.h +230 -0
  254. package/deps/librdkafka/src/rdavg.h +260 -0
  255. package/deps/librdkafka/src/rdavl.c +210 -0
  256. package/deps/librdkafka/src/rdavl.h +250 -0
  257. package/deps/librdkafka/src/rdbase64.c +200 -0
  258. package/deps/librdkafka/src/rdbase64.h +43 -0
  259. package/deps/librdkafka/src/rdbuf.c +1884 -0
  260. package/deps/librdkafka/src/rdbuf.h +375 -0
  261. package/deps/librdkafka/src/rdcrc32.c +114 -0
  262. package/deps/librdkafka/src/rdcrc32.h +170 -0
  263. package/deps/librdkafka/src/rddl.c +179 -0
  264. package/deps/librdkafka/src/rddl.h +43 -0
  265. package/deps/librdkafka/src/rdendian.h +175 -0
  266. package/deps/librdkafka/src/rdfloat.h +67 -0
  267. package/deps/librdkafka/src/rdfnv1a.c +113 -0
  268. package/deps/librdkafka/src/rdfnv1a.h +35 -0
  269. package/deps/librdkafka/src/rdgz.c +120 -0
  270. package/deps/librdkafka/src/rdgz.h +46 -0
  271. package/deps/librdkafka/src/rdhdrhistogram.c +721 -0
  272. package/deps/librdkafka/src/rdhdrhistogram.h +87 -0
  273. package/deps/librdkafka/src/rdhttp.c +830 -0
  274. package/deps/librdkafka/src/rdhttp.h +101 -0
  275. package/deps/librdkafka/src/rdinterval.h +177 -0
  276. package/deps/librdkafka/src/rdkafka.c +5505 -0
  277. package/deps/librdkafka/src/rdkafka.h +10686 -0
  278. package/deps/librdkafka/src/rdkafka_admin.c +9794 -0
  279. package/deps/librdkafka/src/rdkafka_admin.h +661 -0
  280. package/deps/librdkafka/src/rdkafka_assignment.c +1010 -0
  281. package/deps/librdkafka/src/rdkafka_assignment.h +73 -0
  282. package/deps/librdkafka/src/rdkafka_assignor.c +1786 -0
  283. package/deps/librdkafka/src/rdkafka_assignor.h +402 -0
  284. package/deps/librdkafka/src/rdkafka_aux.c +409 -0
  285. package/deps/librdkafka/src/rdkafka_aux.h +174 -0
  286. package/deps/librdkafka/src/rdkafka_background.c +221 -0
  287. package/deps/librdkafka/src/rdkafka_broker.c +6337 -0
  288. package/deps/librdkafka/src/rdkafka_broker.h +744 -0
  289. package/deps/librdkafka/src/rdkafka_buf.c +543 -0
  290. package/deps/librdkafka/src/rdkafka_buf.h +1525 -0
  291. package/deps/librdkafka/src/rdkafka_cert.c +576 -0
  292. package/deps/librdkafka/src/rdkafka_cert.h +62 -0
  293. package/deps/librdkafka/src/rdkafka_cgrp.c +7587 -0
  294. package/deps/librdkafka/src/rdkafka_cgrp.h +477 -0
  295. package/deps/librdkafka/src/rdkafka_conf.c +4880 -0
  296. package/deps/librdkafka/src/rdkafka_conf.h +732 -0
  297. package/deps/librdkafka/src/rdkafka_confval.h +97 -0
  298. package/deps/librdkafka/src/rdkafka_coord.c +623 -0
  299. package/deps/librdkafka/src/rdkafka_coord.h +132 -0
  300. package/deps/librdkafka/src/rdkafka_error.c +228 -0
  301. package/deps/librdkafka/src/rdkafka_error.h +80 -0
  302. package/deps/librdkafka/src/rdkafka_event.c +502 -0
  303. package/deps/librdkafka/src/rdkafka_event.h +126 -0
  304. package/deps/librdkafka/src/rdkafka_feature.c +898 -0
  305. package/deps/librdkafka/src/rdkafka_feature.h +104 -0
  306. package/deps/librdkafka/src/rdkafka_fetcher.c +1422 -0
  307. package/deps/librdkafka/src/rdkafka_fetcher.h +44 -0
  308. package/deps/librdkafka/src/rdkafka_header.c +220 -0
  309. package/deps/librdkafka/src/rdkafka_header.h +76 -0
  310. package/deps/librdkafka/src/rdkafka_idempotence.c +807 -0
  311. package/deps/librdkafka/src/rdkafka_idempotence.h +144 -0
  312. package/deps/librdkafka/src/rdkafka_int.h +1260 -0
  313. package/deps/librdkafka/src/rdkafka_interceptor.c +819 -0
  314. package/deps/librdkafka/src/rdkafka_interceptor.h +104 -0
  315. package/deps/librdkafka/src/rdkafka_lz4.c +450 -0
  316. package/deps/librdkafka/src/rdkafka_lz4.h +49 -0
  317. package/deps/librdkafka/src/rdkafka_metadata.c +2209 -0
  318. package/deps/librdkafka/src/rdkafka_metadata.h +345 -0
  319. package/deps/librdkafka/src/rdkafka_metadata_cache.c +1183 -0
  320. package/deps/librdkafka/src/rdkafka_mock.c +3661 -0
  321. package/deps/librdkafka/src/rdkafka_mock.h +610 -0
  322. package/deps/librdkafka/src/rdkafka_mock_cgrp.c +1876 -0
  323. package/deps/librdkafka/src/rdkafka_mock_handlers.c +3113 -0
  324. package/deps/librdkafka/src/rdkafka_mock_int.h +710 -0
  325. package/deps/librdkafka/src/rdkafka_msg.c +2589 -0
  326. package/deps/librdkafka/src/rdkafka_msg.h +614 -0
  327. package/deps/librdkafka/src/rdkafka_msgbatch.h +62 -0
  328. package/deps/librdkafka/src/rdkafka_msgset.h +98 -0
  329. package/deps/librdkafka/src/rdkafka_msgset_reader.c +1806 -0
  330. package/deps/librdkafka/src/rdkafka_msgset_writer.c +1474 -0
  331. package/deps/librdkafka/src/rdkafka_offset.c +1565 -0
  332. package/deps/librdkafka/src/rdkafka_offset.h +150 -0
  333. package/deps/librdkafka/src/rdkafka_op.c +997 -0
  334. package/deps/librdkafka/src/rdkafka_op.h +858 -0
  335. package/deps/librdkafka/src/rdkafka_partition.c +4896 -0
  336. package/deps/librdkafka/src/rdkafka_partition.h +1182 -0
  337. package/deps/librdkafka/src/rdkafka_pattern.c +228 -0
  338. package/deps/librdkafka/src/rdkafka_pattern.h +70 -0
  339. package/deps/librdkafka/src/rdkafka_plugin.c +213 -0
  340. package/deps/librdkafka/src/rdkafka_plugin.h +41 -0
  341. package/deps/librdkafka/src/rdkafka_proto.h +736 -0
  342. package/deps/librdkafka/src/rdkafka_protocol.h +128 -0
  343. package/deps/librdkafka/src/rdkafka_queue.c +1230 -0
  344. package/deps/librdkafka/src/rdkafka_queue.h +1220 -0
  345. package/deps/librdkafka/src/rdkafka_range_assignor.c +1748 -0
  346. package/deps/librdkafka/src/rdkafka_request.c +7089 -0
  347. package/deps/librdkafka/src/rdkafka_request.h +732 -0
  348. package/deps/librdkafka/src/rdkafka_roundrobin_assignor.c +123 -0
  349. package/deps/librdkafka/src/rdkafka_sasl.c +530 -0
  350. package/deps/librdkafka/src/rdkafka_sasl.h +63 -0
  351. package/deps/librdkafka/src/rdkafka_sasl_cyrus.c +722 -0
  352. package/deps/librdkafka/src/rdkafka_sasl_int.h +89 -0
  353. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.c +1833 -0
  354. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.h +52 -0
  355. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.c +1666 -0
  356. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +47 -0
  357. package/deps/librdkafka/src/rdkafka_sasl_plain.c +142 -0
  358. package/deps/librdkafka/src/rdkafka_sasl_scram.c +858 -0
  359. package/deps/librdkafka/src/rdkafka_sasl_win32.c +550 -0
  360. package/deps/librdkafka/src/rdkafka_ssl.c +2129 -0
  361. package/deps/librdkafka/src/rdkafka_ssl.h +86 -0
  362. package/deps/librdkafka/src/rdkafka_sticky_assignor.c +4785 -0
  363. package/deps/librdkafka/src/rdkafka_subscription.c +278 -0
  364. package/deps/librdkafka/src/rdkafka_telemetry.c +760 -0
  365. package/deps/librdkafka/src/rdkafka_telemetry.h +52 -0
  366. package/deps/librdkafka/src/rdkafka_telemetry_decode.c +1053 -0
  367. package/deps/librdkafka/src/rdkafka_telemetry_decode.h +59 -0
  368. package/deps/librdkafka/src/rdkafka_telemetry_encode.c +997 -0
  369. package/deps/librdkafka/src/rdkafka_telemetry_encode.h +301 -0
  370. package/deps/librdkafka/src/rdkafka_timer.c +402 -0
  371. package/deps/librdkafka/src/rdkafka_timer.h +117 -0
  372. package/deps/librdkafka/src/rdkafka_topic.c +2161 -0
  373. package/deps/librdkafka/src/rdkafka_topic.h +334 -0
  374. package/deps/librdkafka/src/rdkafka_transport.c +1309 -0
  375. package/deps/librdkafka/src/rdkafka_transport.h +99 -0
  376. package/deps/librdkafka/src/rdkafka_transport_int.h +100 -0
  377. package/deps/librdkafka/src/rdkafka_txnmgr.c +3256 -0
  378. package/deps/librdkafka/src/rdkafka_txnmgr.h +171 -0
  379. package/deps/librdkafka/src/rdkafka_zstd.c +226 -0
  380. package/deps/librdkafka/src/rdkafka_zstd.h +57 -0
  381. package/deps/librdkafka/src/rdlist.c +576 -0
  382. package/deps/librdkafka/src/rdlist.h +434 -0
  383. package/deps/librdkafka/src/rdlog.c +89 -0
  384. package/deps/librdkafka/src/rdlog.h +41 -0
  385. package/deps/librdkafka/src/rdmap.c +508 -0
  386. package/deps/librdkafka/src/rdmap.h +492 -0
  387. package/deps/librdkafka/src/rdmurmur2.c +167 -0
  388. package/deps/librdkafka/src/rdmurmur2.h +35 -0
  389. package/deps/librdkafka/src/rdports.c +61 -0
  390. package/deps/librdkafka/src/rdports.h +38 -0
  391. package/deps/librdkafka/src/rdposix.h +250 -0
  392. package/deps/librdkafka/src/rdrand.c +80 -0
  393. package/deps/librdkafka/src/rdrand.h +43 -0
  394. package/deps/librdkafka/src/rdregex.c +156 -0
  395. package/deps/librdkafka/src/rdregex.h +43 -0
  396. package/deps/librdkafka/src/rdsignal.h +57 -0
  397. package/deps/librdkafka/src/rdstring.c +645 -0
  398. package/deps/librdkafka/src/rdstring.h +98 -0
  399. package/deps/librdkafka/src/rdsysqueue.h +404 -0
  400. package/deps/librdkafka/src/rdtime.h +356 -0
  401. package/deps/librdkafka/src/rdtypes.h +86 -0
  402. package/deps/librdkafka/src/rdunittest.c +549 -0
  403. package/deps/librdkafka/src/rdunittest.h +232 -0
  404. package/deps/librdkafka/src/rdvarint.c +134 -0
  405. package/deps/librdkafka/src/rdvarint.h +165 -0
  406. package/deps/librdkafka/src/rdwin32.h +382 -0
  407. package/deps/librdkafka/src/rdxxhash.c +1030 -0
  408. package/deps/librdkafka/src/rdxxhash.h +328 -0
  409. package/deps/librdkafka/src/regexp.c +1352 -0
  410. package/deps/librdkafka/src/regexp.h +41 -0
  411. package/deps/librdkafka/src/snappy.c +1866 -0
  412. package/deps/librdkafka/src/snappy.h +62 -0
  413. package/deps/librdkafka/src/snappy_compat.h +138 -0
  414. package/deps/librdkafka/src/statistics_schema.json +444 -0
  415. package/deps/librdkafka/src/tinycthread.c +932 -0
  416. package/deps/librdkafka/src/tinycthread.h +503 -0
  417. package/deps/librdkafka/src/tinycthread_extra.c +199 -0
  418. package/deps/librdkafka/src/tinycthread_extra.h +212 -0
  419. package/deps/librdkafka/src/win32_config.h +58 -0
  420. package/deps/librdkafka/src-cpp/CMakeLists.txt +90 -0
  421. package/deps/librdkafka/src-cpp/ConfImpl.cpp +84 -0
  422. package/deps/librdkafka/src-cpp/ConsumerImpl.cpp +244 -0
  423. package/deps/librdkafka/src-cpp/HandleImpl.cpp +436 -0
  424. package/deps/librdkafka/src-cpp/HeadersImpl.cpp +48 -0
  425. package/deps/librdkafka/src-cpp/KafkaConsumerImpl.cpp +296 -0
  426. package/deps/librdkafka/src-cpp/Makefile +55 -0
  427. package/deps/librdkafka/src-cpp/MessageImpl.cpp +38 -0
  428. package/deps/librdkafka/src-cpp/MetadataImpl.cpp +170 -0
  429. package/deps/librdkafka/src-cpp/ProducerImpl.cpp +197 -0
  430. package/deps/librdkafka/src-cpp/QueueImpl.cpp +70 -0
  431. package/deps/librdkafka/src-cpp/README.md +16 -0
  432. package/deps/librdkafka/src-cpp/RdKafka.cpp +59 -0
  433. package/deps/librdkafka/src-cpp/TopicImpl.cpp +124 -0
  434. package/deps/librdkafka/src-cpp/TopicPartitionImpl.cpp +57 -0
  435. package/deps/librdkafka/src-cpp/rdkafkacpp.h +3797 -0
  436. package/deps/librdkafka/src-cpp/rdkafkacpp_int.h +1641 -0
  437. package/deps/librdkafka/tests/0000-unittests.c +72 -0
  438. package/deps/librdkafka/tests/0001-multiobj.c +102 -0
  439. package/deps/librdkafka/tests/0002-unkpart.c +244 -0
  440. package/deps/librdkafka/tests/0003-msgmaxsize.c +173 -0
  441. package/deps/librdkafka/tests/0004-conf.c +934 -0
  442. package/deps/librdkafka/tests/0005-order.c +133 -0
  443. package/deps/librdkafka/tests/0006-symbols.c +163 -0
  444. package/deps/librdkafka/tests/0007-autotopic.c +136 -0
  445. package/deps/librdkafka/tests/0008-reqacks.c +179 -0
  446. package/deps/librdkafka/tests/0009-mock_cluster.c +97 -0
  447. package/deps/librdkafka/tests/0011-produce_batch.c +753 -0
  448. package/deps/librdkafka/tests/0012-produce_consume.c +537 -0
  449. package/deps/librdkafka/tests/0013-null-msgs.c +473 -0
  450. package/deps/librdkafka/tests/0014-reconsume-191.c +512 -0
  451. package/deps/librdkafka/tests/0015-offset_seeks.c +172 -0
  452. package/deps/librdkafka/tests/0016-client_swname.c +181 -0
  453. package/deps/librdkafka/tests/0017-compression.c +140 -0
  454. package/deps/librdkafka/tests/0018-cgrp_term.c +338 -0
  455. package/deps/librdkafka/tests/0019-list_groups.c +289 -0
  456. package/deps/librdkafka/tests/0020-destroy_hang.c +162 -0
  457. package/deps/librdkafka/tests/0021-rkt_destroy.c +72 -0
  458. package/deps/librdkafka/tests/0022-consume_batch.c +279 -0
  459. package/deps/librdkafka/tests/0025-timers.c +147 -0
  460. package/deps/librdkafka/tests/0026-consume_pause.c +547 -0
  461. package/deps/librdkafka/tests/0028-long_topicnames.c +79 -0
  462. package/deps/librdkafka/tests/0029-assign_offset.c +202 -0
  463. package/deps/librdkafka/tests/0030-offset_commit.c +589 -0
  464. package/deps/librdkafka/tests/0031-get_offsets.c +235 -0
  465. package/deps/librdkafka/tests/0033-regex_subscribe.c +536 -0
  466. package/deps/librdkafka/tests/0034-offset_reset.c +398 -0
  467. package/deps/librdkafka/tests/0035-api_version.c +73 -0
  468. package/deps/librdkafka/tests/0036-partial_fetch.c +87 -0
  469. package/deps/librdkafka/tests/0037-destroy_hang_local.c +85 -0
  470. package/deps/librdkafka/tests/0038-performance.c +121 -0
  471. package/deps/librdkafka/tests/0039-event.c +284 -0
  472. package/deps/librdkafka/tests/0040-io_event.c +257 -0
  473. package/deps/librdkafka/tests/0041-fetch_max_bytes.c +97 -0
  474. package/deps/librdkafka/tests/0042-many_topics.c +252 -0
  475. package/deps/librdkafka/tests/0043-no_connection.c +77 -0
  476. package/deps/librdkafka/tests/0044-partition_cnt.c +94 -0
  477. package/deps/librdkafka/tests/0045-subscribe_update.c +1010 -0
  478. package/deps/librdkafka/tests/0046-rkt_cache.c +65 -0
  479. package/deps/librdkafka/tests/0047-partial_buf_tmout.c +98 -0
  480. package/deps/librdkafka/tests/0048-partitioner.c +283 -0
  481. package/deps/librdkafka/tests/0049-consume_conn_close.c +162 -0
  482. package/deps/librdkafka/tests/0050-subscribe_adds.c +145 -0
  483. package/deps/librdkafka/tests/0051-assign_adds.c +126 -0
  484. package/deps/librdkafka/tests/0052-msg_timestamps.c +238 -0
  485. package/deps/librdkafka/tests/0053-stats_cb.cpp +527 -0
  486. package/deps/librdkafka/tests/0054-offset_time.cpp +236 -0
  487. package/deps/librdkafka/tests/0055-producer_latency.c +539 -0
  488. package/deps/librdkafka/tests/0056-balanced_group_mt.c +315 -0
  489. package/deps/librdkafka/tests/0057-invalid_topic.cpp +112 -0
  490. package/deps/librdkafka/tests/0058-log.cpp +123 -0
  491. package/deps/librdkafka/tests/0059-bsearch.cpp +241 -0
  492. package/deps/librdkafka/tests/0060-op_prio.cpp +163 -0
  493. package/deps/librdkafka/tests/0061-consumer_lag.cpp +295 -0
  494. package/deps/librdkafka/tests/0062-stats_event.c +126 -0
  495. package/deps/librdkafka/tests/0063-clusterid.cpp +180 -0
  496. package/deps/librdkafka/tests/0064-interceptors.c +481 -0
  497. package/deps/librdkafka/tests/0065-yield.cpp +140 -0
  498. package/deps/librdkafka/tests/0066-plugins.cpp +129 -0
  499. package/deps/librdkafka/tests/0067-empty_topic.cpp +151 -0
  500. package/deps/librdkafka/tests/0068-produce_timeout.c +136 -0
  501. package/deps/librdkafka/tests/0069-consumer_add_parts.c +119 -0
  502. package/deps/librdkafka/tests/0070-null_empty.cpp +197 -0
  503. package/deps/librdkafka/tests/0072-headers_ut.c +448 -0
  504. package/deps/librdkafka/tests/0073-headers.c +381 -0
  505. package/deps/librdkafka/tests/0074-producev.c +87 -0
  506. package/deps/librdkafka/tests/0075-retry.c +290 -0
  507. package/deps/librdkafka/tests/0076-produce_retry.c +452 -0
  508. package/deps/librdkafka/tests/0077-compaction.c +363 -0
  509. package/deps/librdkafka/tests/0078-c_from_cpp.cpp +96 -0
  510. package/deps/librdkafka/tests/0079-fork.c +93 -0
  511. package/deps/librdkafka/tests/0080-admin_ut.c +3095 -0
  512. package/deps/librdkafka/tests/0081-admin.c +5633 -0
  513. package/deps/librdkafka/tests/0082-fetch_max_bytes.cpp +137 -0
  514. package/deps/librdkafka/tests/0083-cb_event.c +233 -0
  515. package/deps/librdkafka/tests/0084-destroy_flags.c +208 -0
  516. package/deps/librdkafka/tests/0085-headers.cpp +392 -0
  517. package/deps/librdkafka/tests/0086-purge.c +368 -0
  518. package/deps/librdkafka/tests/0088-produce_metadata_timeout.c +162 -0
  519. package/deps/librdkafka/tests/0089-max_poll_interval.c +511 -0
  520. package/deps/librdkafka/tests/0090-idempotence.c +171 -0
  521. package/deps/librdkafka/tests/0091-max_poll_interval_timeout.c +295 -0
  522. package/deps/librdkafka/tests/0092-mixed_msgver.c +103 -0
  523. package/deps/librdkafka/tests/0093-holb.c +200 -0
  524. package/deps/librdkafka/tests/0094-idempotence_msg_timeout.c +231 -0
  525. package/deps/librdkafka/tests/0095-all_brokers_down.cpp +122 -0
  526. package/deps/librdkafka/tests/0097-ssl_verify.cpp +658 -0
  527. package/deps/librdkafka/tests/0098-consumer-txn.cpp +1218 -0
  528. package/deps/librdkafka/tests/0099-commit_metadata.c +194 -0
  529. package/deps/librdkafka/tests/0100-thread_interceptors.cpp +195 -0
  530. package/deps/librdkafka/tests/0101-fetch-from-follower.cpp +446 -0
  531. package/deps/librdkafka/tests/0102-static_group_rebalance.c +836 -0
  532. package/deps/librdkafka/tests/0103-transactions.c +1383 -0
  533. package/deps/librdkafka/tests/0104-fetch_from_follower_mock.c +625 -0
  534. package/deps/librdkafka/tests/0105-transactions_mock.c +3930 -0
  535. package/deps/librdkafka/tests/0106-cgrp_sess_timeout.c +318 -0
  536. package/deps/librdkafka/tests/0107-topic_recreate.c +259 -0
  537. package/deps/librdkafka/tests/0109-auto_create_topics.cpp +278 -0
  538. package/deps/librdkafka/tests/0110-batch_size.cpp +182 -0
  539. package/deps/librdkafka/tests/0111-delay_create_topics.cpp +127 -0
  540. package/deps/librdkafka/tests/0112-assign_unknown_part.c +87 -0
  541. package/deps/librdkafka/tests/0113-cooperative_rebalance.cpp +3473 -0
  542. package/deps/librdkafka/tests/0114-sticky_partitioning.cpp +176 -0
  543. package/deps/librdkafka/tests/0115-producer_auth.cpp +182 -0
  544. package/deps/librdkafka/tests/0116-kafkaconsumer_close.cpp +216 -0
  545. package/deps/librdkafka/tests/0117-mock_errors.c +331 -0
  546. package/deps/librdkafka/tests/0118-commit_rebalance.c +154 -0
  547. package/deps/librdkafka/tests/0119-consumer_auth.cpp +167 -0
  548. package/deps/librdkafka/tests/0120-asymmetric_subscription.c +185 -0
  549. package/deps/librdkafka/tests/0121-clusterid.c +115 -0
  550. package/deps/librdkafka/tests/0122-buffer_cleaning_after_rebalance.c +227 -0
  551. package/deps/librdkafka/tests/0123-connections_max_idle.c +98 -0
  552. package/deps/librdkafka/tests/0124-openssl_invalid_engine.c +69 -0
  553. package/deps/librdkafka/tests/0125-immediate_flush.c +144 -0
  554. package/deps/librdkafka/tests/0126-oauthbearer_oidc.c +528 -0
  555. package/deps/librdkafka/tests/0127-fetch_queue_backoff.cpp +165 -0
  556. package/deps/librdkafka/tests/0128-sasl_callback_queue.cpp +125 -0
  557. package/deps/librdkafka/tests/0129-fetch_aborted_msgs.c +79 -0
  558. package/deps/librdkafka/tests/0130-store_offsets.c +178 -0
  559. package/deps/librdkafka/tests/0131-connect_timeout.c +81 -0
  560. package/deps/librdkafka/tests/0132-strategy_ordering.c +179 -0
  561. package/deps/librdkafka/tests/0133-ssl_keys.c +150 -0
  562. package/deps/librdkafka/tests/0134-ssl_provider.c +92 -0
  563. package/deps/librdkafka/tests/0135-sasl_credentials.cpp +143 -0
  564. package/deps/librdkafka/tests/0136-resolve_cb.c +181 -0
  565. package/deps/librdkafka/tests/0137-barrier_batch_consume.c +619 -0
  566. package/deps/librdkafka/tests/0138-admin_mock.c +281 -0
  567. package/deps/librdkafka/tests/0139-offset_validation_mock.c +950 -0
  568. package/deps/librdkafka/tests/0140-commit_metadata.cpp +108 -0
  569. package/deps/librdkafka/tests/0142-reauthentication.c +515 -0
  570. package/deps/librdkafka/tests/0143-exponential_backoff_mock.c +552 -0
  571. package/deps/librdkafka/tests/0144-idempotence_mock.c +373 -0
  572. package/deps/librdkafka/tests/0145-pause_resume_mock.c +119 -0
  573. package/deps/librdkafka/tests/0146-metadata_mock.c +505 -0
  574. package/deps/librdkafka/tests/0147-consumer_group_consumer_mock.c +952 -0
  575. package/deps/librdkafka/tests/0148-offset_fetch_commit_error_mock.c +563 -0
  576. package/deps/librdkafka/tests/0149-broker-same-host-port.c +140 -0
  577. package/deps/librdkafka/tests/0150-telemetry_mock.c +651 -0
  578. package/deps/librdkafka/tests/0151-purge-brokers.c +566 -0
  579. package/deps/librdkafka/tests/0152-rebootstrap.c +59 -0
  580. package/deps/librdkafka/tests/0153-memberid.c +128 -0
  581. package/deps/librdkafka/tests/1000-unktopic.c +164 -0
  582. package/deps/librdkafka/tests/8000-idle.cpp +60 -0
  583. package/deps/librdkafka/tests/8001-fetch_from_follower_mock_manual.c +113 -0
  584. package/deps/librdkafka/tests/CMakeLists.txt +170 -0
  585. package/deps/librdkafka/tests/LibrdkafkaTestApp.py +291 -0
  586. package/deps/librdkafka/tests/Makefile +182 -0
  587. package/deps/librdkafka/tests/README.md +509 -0
  588. package/deps/librdkafka/tests/autotest.sh +33 -0
  589. package/deps/librdkafka/tests/backtrace.gdb +30 -0
  590. package/deps/librdkafka/tests/broker_version_tests.py +315 -0
  591. package/deps/librdkafka/tests/buildbox.sh +17 -0
  592. package/deps/librdkafka/tests/cleanup-checker-tests.sh +20 -0
  593. package/deps/librdkafka/tests/cluster_testing.py +191 -0
  594. package/deps/librdkafka/tests/delete-test-topics.sh +56 -0
  595. package/deps/librdkafka/tests/fixtures/oauthbearer/jwt_assertion_template.json +10 -0
  596. package/deps/librdkafka/tests/fixtures/ssl/Makefile +8 -0
  597. package/deps/librdkafka/tests/fixtures/ssl/README.md +13 -0
  598. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.intermediate.p12 +0 -0
  599. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.p12 +0 -0
  600. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.intermediate.pem +72 -0
  601. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.pem +50 -0
  602. package/deps/librdkafka/tests/fixtures/ssl/client2.intermediate.key +46 -0
  603. package/deps/librdkafka/tests/fixtures/ssl/client2.key +46 -0
  604. package/deps/librdkafka/tests/fixtures/ssl/create_keys.sh +168 -0
  605. package/deps/librdkafka/tests/fuzzers/Makefile +12 -0
  606. package/deps/librdkafka/tests/fuzzers/README.md +31 -0
  607. package/deps/librdkafka/tests/fuzzers/fuzz_regex.c +74 -0
  608. package/deps/librdkafka/tests/fuzzers/helpers.h +90 -0
  609. package/deps/librdkafka/tests/gen-ssl-certs.sh +165 -0
  610. package/deps/librdkafka/tests/interactive_broker_version.py +170 -0
  611. package/deps/librdkafka/tests/interceptor_test/CMakeLists.txt +16 -0
  612. package/deps/librdkafka/tests/interceptor_test/Makefile +22 -0
  613. package/deps/librdkafka/tests/interceptor_test/interceptor_test.c +314 -0
  614. package/deps/librdkafka/tests/interceptor_test/interceptor_test.h +54 -0
  615. package/deps/librdkafka/tests/java/IncrementalRebalanceCli.java +97 -0
  616. package/deps/librdkafka/tests/java/Makefile +13 -0
  617. package/deps/librdkafka/tests/java/Murmur2Cli.java +46 -0
  618. package/deps/librdkafka/tests/java/README.md +14 -0
  619. package/deps/librdkafka/tests/java/TransactionProducerCli.java +162 -0
  620. package/deps/librdkafka/tests/java/run-class.sh +11 -0
  621. package/deps/librdkafka/tests/librdkafka.suppressions +483 -0
  622. package/deps/librdkafka/tests/lz4_manual_test.sh +59 -0
  623. package/deps/librdkafka/tests/multi-broker-version-test.sh +50 -0
  624. package/deps/librdkafka/tests/parse-refcnt.sh +43 -0
  625. package/deps/librdkafka/tests/performance_plot.py +115 -0
  626. package/deps/librdkafka/tests/plugin_test/Makefile +19 -0
  627. package/deps/librdkafka/tests/plugin_test/plugin_test.c +58 -0
  628. package/deps/librdkafka/tests/requirements.txt +2 -0
  629. package/deps/librdkafka/tests/run-all-tests.sh +79 -0
  630. package/deps/librdkafka/tests/run-consumer-tests.sh +16 -0
  631. package/deps/librdkafka/tests/run-producer-tests.sh +16 -0
  632. package/deps/librdkafka/tests/run-test-batches.py +157 -0
  633. package/deps/librdkafka/tests/run-test.sh +140 -0
  634. package/deps/librdkafka/tests/rusage.c +249 -0
  635. package/deps/librdkafka/tests/sasl_test.py +289 -0
  636. package/deps/librdkafka/tests/scenarios/README.md +6 -0
  637. package/deps/librdkafka/tests/scenarios/ak23.json +6 -0
  638. package/deps/librdkafka/tests/scenarios/default.json +5 -0
  639. package/deps/librdkafka/tests/scenarios/noautocreate.json +5 -0
  640. package/deps/librdkafka/tests/sockem.c +801 -0
  641. package/deps/librdkafka/tests/sockem.h +85 -0
  642. package/deps/librdkafka/tests/sockem_ctrl.c +145 -0
  643. package/deps/librdkafka/tests/sockem_ctrl.h +61 -0
  644. package/deps/librdkafka/tests/test.c +7778 -0
  645. package/deps/librdkafka/tests/test.conf.example +27 -0
  646. package/deps/librdkafka/tests/test.h +1028 -0
  647. package/deps/librdkafka/tests/testcpp.cpp +131 -0
  648. package/deps/librdkafka/tests/testcpp.h +388 -0
  649. package/deps/librdkafka/tests/testshared.h +416 -0
  650. package/deps/librdkafka/tests/tools/README.md +4 -0
  651. package/deps/librdkafka/tests/tools/stats/README.md +21 -0
  652. package/deps/librdkafka/tests/tools/stats/filter.jq +42 -0
  653. package/deps/librdkafka/tests/tools/stats/graph.py +150 -0
  654. package/deps/librdkafka/tests/tools/stats/requirements.txt +3 -0
  655. package/deps/librdkafka/tests/tools/stats/to_csv.py +124 -0
  656. package/deps/librdkafka/tests/trivup/trivup-0.14.0.tar.gz +0 -0
  657. package/deps/librdkafka/tests/until-fail.sh +87 -0
  658. package/deps/librdkafka/tests/xxxx-assign_partition.c +122 -0
  659. package/deps/librdkafka/tests/xxxx-metadata.cpp +159 -0
  660. package/deps/librdkafka/vcpkg.json +23 -0
  661. package/deps/librdkafka/win32/README.md +5 -0
  662. package/deps/librdkafka/win32/build-package.bat +3 -0
  663. package/deps/librdkafka/win32/build.bat +19 -0
  664. package/deps/librdkafka/win32/common.vcxproj +84 -0
  665. package/deps/librdkafka/win32/interceptor_test/interceptor_test.vcxproj +87 -0
  666. package/deps/librdkafka/win32/librdkafka.autopkg.template +54 -0
  667. package/deps/librdkafka/win32/librdkafka.master.testing.targets +13 -0
  668. package/deps/librdkafka/win32/librdkafka.sln +226 -0
  669. package/deps/librdkafka/win32/librdkafka.vcxproj +276 -0
  670. package/deps/librdkafka/win32/librdkafkacpp/librdkafkacpp.vcxproj +104 -0
  671. package/deps/librdkafka/win32/msbuild.ps1 +15 -0
  672. package/deps/librdkafka/win32/openssl_engine_example/openssl_engine_example.vcxproj +132 -0
  673. package/deps/librdkafka/win32/package-zip.ps1 +46 -0
  674. package/deps/librdkafka/win32/packages/repositories.config +4 -0
  675. package/deps/librdkafka/win32/push-package.bat +4 -0
  676. package/deps/librdkafka/win32/rdkafka_complex_consumer_example_cpp/rdkafka_complex_consumer_example_cpp.vcxproj +67 -0
  677. package/deps/librdkafka/win32/rdkafka_example/rdkafka_example.vcxproj +97 -0
  678. package/deps/librdkafka/win32/rdkafka_performance/rdkafka_performance.vcxproj +97 -0
  679. package/deps/librdkafka/win32/setup-msys2.ps1 +47 -0
  680. package/deps/librdkafka/win32/setup-vcpkg.ps1 +34 -0
  681. package/deps/librdkafka/win32/tests/test.conf.example +25 -0
  682. package/deps/librdkafka/win32/tests/tests.vcxproj +253 -0
  683. package/deps/librdkafka/win32/win_ssl_cert_store/win_ssl_cert_store.vcxproj +132 -0
  684. package/deps/librdkafka/win32/wingetopt.c +564 -0
  685. package/deps/librdkafka/win32/wingetopt.h +101 -0
  686. package/deps/librdkafka/win32/wintime.h +33 -0
  687. package/deps/librdkafka.gyp +62 -0
  688. package/lib/admin.js +233 -0
  689. package/lib/client.js +573 -0
  690. package/lib/error.js +500 -0
  691. package/lib/index.js +34 -0
  692. package/lib/kafka-consumer-stream.js +397 -0
  693. package/lib/kafka-consumer.js +698 -0
  694. package/lib/producer/high-level-producer.js +323 -0
  695. package/lib/producer-stream.js +307 -0
  696. package/lib/producer.js +375 -0
  697. package/lib/tools/ref-counter.js +52 -0
  698. package/lib/topic-partition.js +88 -0
  699. package/lib/topic.js +42 -0
  700. package/lib/util.js +29 -0
  701. package/package.json +61 -0
  702. package/prebuilds/darwin-arm64/@point3+node-rdkafka.node +0 -0
  703. package/prebuilds/linux-x64/@point3+node-rdkafka.node +0 -0
  704. package/util/configure.js +30 -0
  705. package/util/get-env.js +6 -0
  706. package/util/test-compile.js +11 -0
  707. package/util/test-producer-delivery.js +100 -0
@@ -0,0 +1,2484 @@
1
+ #!/bin/bash
2
+ #
3
+ #
4
+ # mklove base configure module, implements the mklove configure framework
5
+ #
6
+
7
+ MKL_MODULES="base"
8
+ MKL_CACHEVARS="CFLAGS LDFLAGS PKG_CONFIG_PATH"
9
+ MKL_MKVARS=""
10
+ MKL_DEFINES=""
11
+ MKL_CHECKS=""
12
+ MKL_LOAD_STACK=""
13
+
14
+ MKL_IDNEXT=1
15
+
16
+ # Default mklove directory to PWD/mklove
17
+ [[ -z "$MKLOVE_DIR" ]] && MKLOVE_DIR="$PWD/mklove"
18
+
19
+ MKL_OUTMK="$PWD/_mklout.mk"
20
+ MKL_OUTH="$PWD/_mklout.h"
21
+ MKL_OUTDBG="$PWD/config.log"
22
+
23
+ MKL_GENERATORS="base:mkl_generate_late_vars"
24
+ MKL_CLEANERS=""
25
+
26
+ MKL_FAILS=""
27
+ MKL_LATE_VARS=""
28
+
29
+ MKL_OPTS_SET=""
30
+
31
+ MKL_RED=""
32
+ MKL_GREEN=""
33
+ MKL_YELLOW=""
34
+ MKL_BLUE=""
35
+ MKL_CLR_RESET=""
36
+
37
+
38
+ MKL_NO_DOWNLOAD=0
39
+ MKL_INSTALL_DEPS=n
40
+ MKL_SOURCE_DEPS_ONLY=n
41
+
42
+ MKL_DESTDIR_ADDED=n
43
+
44
+ if [[ -z "$MKL_REPO_URL" ]]; then
45
+ MKL_REPO_URL="http://github.com/edenhill/mklove/raw/master"
46
+ fi
47
+
48
+
49
+
50
+ ###########################################################################
51
+ #
52
+ # Variable types:
53
+ # env - Standard environment variables.
54
+ # var - mklove runtime variable, cached or not.
55
+ # mkvar - Makefile variables, also sets runvar
56
+ # define - config.h variables/defines
57
+ #
58
+ ###########################################################################
59
+
60
+ # Low level variable assignment
61
+ # Arguments:
62
+ # variable name
63
+ # variable value
64
+ function mkl_var0_set {
65
+ export "$1"="$2"
66
+ }
67
+
68
+ # Sets a runtime variable (only used during configure)
69
+ # If "cache" is provided these variables are cached to config.cache.
70
+ # Arguments:
71
+ # variable name
72
+ # variable value
73
+ # [ "cache" ]
74
+ function mkl_var_set {
75
+ mkl_var0_set "$1" "$2"
76
+ if [[ $3 == "cache" ]]; then
77
+ if ! mkl_in_list "$MKL_CACHEVARS" "$1" ; then
78
+ MKL_CACHEVARS="$MKL_CACHEVARS $1"
79
+ fi
80
+ fi
81
+ }
82
+
83
+ # Unsets a mkl variable
84
+ # Arguments:
85
+ # variable name
86
+ function mkl_var_unset {
87
+ unset $1
88
+ }
89
+
90
+ # Appends to a mkl variable (space delimited)
91
+ # Arguments:
92
+ # variable name
93
+ # variable value
94
+ function mkl_var_append {
95
+ if [[ -z ${!1} ]]; then
96
+ mkl_var_set "$1" "$2"
97
+ else
98
+ mkl_var0_set "$1" "${!1} $2"
99
+ fi
100
+ }
101
+
102
+
103
+ # Prepends to a mkl variable (space delimited)
104
+ # Arguments:
105
+ # variable name
106
+ # variable value
107
+ function mkl_var_prepend {
108
+ if [[ -z ${!1} ]]; then
109
+ mkl_var_set "$1" "$2"
110
+ else
111
+ mkl_var0_set "$1" "$2 ${!1}"
112
+ fi
113
+ }
114
+
115
+ # Shift the first word off a variable.
116
+ # Arguments:
117
+ # variable name
118
+ function mkl_var_shift {
119
+ local n="${!1}"
120
+ mkl_var0_set "$1" "${n#* }"
121
+ return 0
122
+ }
123
+
124
+
125
+ # Returns the contents of mkl variable
126
+ # Arguments:
127
+ # variable name
128
+ function mkl_var_get {
129
+ echo "${!1}"
130
+ }
131
+
132
+
133
+
134
+
135
+ # Set environment variable (runtime)
136
+ # These variables are not cached nor written to any of the output files,
137
+ # its just simply a helper wrapper for standard envs.
138
+ # Arguments:
139
+ # varname
140
+ # varvalue
141
+ function mkl_env_set {
142
+ mkl_var0_set "$1" "$2"
143
+ }
144
+
145
+ # Append to environment variable
146
+ # Arguments:
147
+ # varname
148
+ # varvalue
149
+ # [ separator (" ") ]
150
+ function mkl_env_append {
151
+ local sep=" "
152
+ if [[ -z ${!1} ]]; then
153
+ mkl_env_set "$1" "$2"
154
+ else
155
+ [ ! -z ${3} ] && sep="$3"
156
+ mkl_var0_set "$1" "${!1}${sep}$2"
157
+ fi
158
+
159
+ }
160
+
161
+ # Prepend to environment variable
162
+ # Arguments:
163
+ # varname
164
+ # varvalue
165
+ # [ separator (" ") ]
166
+ function mkl_env_prepend {
167
+ local sep=" "
168
+ if [[ -z ${!1} ]]; then
169
+ mkl_env_set "$1" "$2"
170
+ else
171
+ [ ! -z ${3} ] && sep="$3"
172
+ mkl_var0_set "$1" "$2${sep}${!1}"
173
+ fi
174
+
175
+ }
176
+
177
+
178
+
179
+
180
+ # Set a make variable (Makefile.config)
181
+ # Arguments:
182
+ # config name
183
+ # variable name
184
+ # value
185
+ function mkl_mkvar_set {
186
+ if [[ ! -z $2 ]]; then
187
+ mkl_env_set "$2" "$3"
188
+ mkl_in_list "$MKL_MKVARS" "$2"|| mkl_env_append MKL_MKVARS $2
189
+ fi
190
+ }
191
+
192
+
193
+ # Prepends to a make variable (Makefile.config)
194
+ # Arguments:
195
+ # config name
196
+ # variable name
197
+ # value
198
+ # [ separator (" ") ]
199
+ function mkl_mkvar_prepend {
200
+ if [[ ! -z $2 ]]; then
201
+ mkl_env_prepend "$2" "$3" "$4"
202
+ mkl_in_list "$MKL_MKVARS" "$2"|| mkl_env_append MKL_MKVARS $2
203
+ fi
204
+ }
205
+
206
+
207
+ # Appends to a make variable (Makefile.config)
208
+ # Arguments:
209
+ # config name
210
+ # variable name
211
+ # value
212
+ # [ separator (" ") ]
213
+ function mkl_mkvar_append {
214
+ if [[ ! -z $2 ]]; then
215
+ mkl_env_append "$2" "$3" "$4"
216
+ mkl_in_list "$MKL_MKVARS" "$2"|| mkl_env_append MKL_MKVARS $2
217
+ fi
218
+ }
219
+
220
+
221
+ # Prepends to a make variable (Makefile.config)
222
+ # Arguments:
223
+ # config name
224
+ # variable name
225
+ # value
226
+ # [ separator (" ") ]
227
+ function mkl_mkvar_prepend {
228
+ if [[ ! -z $2 ]]; then
229
+ mkl_env_prepend "$2" "$3" "$4"
230
+ mkl_in_list "$MKL_MKVARS" "$2"|| mkl_env_append MKL_MKVARS $2
231
+ fi
232
+ }
233
+
234
+ # Return mkvar variable value
235
+ # Arguments:
236
+ # variable name
237
+ function mkl_mkvar_get {
238
+ [[ -z ${!1} ]] && return 1
239
+ echo ${!1}
240
+ return 0
241
+ }
242
+
243
+
244
+
245
+ # Defines a config header define (config.h)
246
+ # Arguments:
247
+ # config name
248
+ # define name
249
+ # define value (optional, default: 1)
250
+ # if value starts with code: then no "" are added
251
+ function mkl_define_set {
252
+
253
+ if [[ -z $2 ]]; then
254
+ return 0
255
+ fi
256
+
257
+ local stmt=""
258
+ local defid=
259
+ if [[ $2 = *\(* ]]; then
260
+ # macro
261
+ defid="def_${2%%(*}"
262
+ else
263
+ # define
264
+ defid="def_$2"
265
+ fi
266
+
267
+ [[ -z $1 ]] || stmt="// $1\n"
268
+
269
+ local val="$3"
270
+ if [[ -z "$val" ]]; then
271
+ val="$(mkl_def $2 1)"
272
+ fi
273
+
274
+ # Define as code, string or integer?
275
+ if [[ $val == code:* ]]; then
276
+ # Code block, copy verbatim without quotes, strip code: prefix
277
+ val=${val#code:}
278
+ elif [[ ! ( "$val" =~ ^[0-9]+([lL]?[lL][dDuU]?)?$ || \
279
+ "$val" =~ ^0x[0-9a-fA-F]+([lL]?[lL][dDuU]?)?$ ) ]]; then
280
+ # String: quote
281
+ val="\"$val\""
282
+ fi
283
+ # else: unquoted integer/hex
284
+
285
+ stmt="${stmt}#define $2 $val"
286
+ mkl_env_set "$defid" "$stmt"
287
+ mkl_env_append MKL_DEFINES "$defid"
288
+ }
289
+
290
+
291
+
292
+
293
+
294
+ # Sets "all" configuration variables, that is:
295
+ # for name set: Makefile variable, config.h define
296
+ # Will convert value "y"|"n" to 1|0 for config.h
297
+ # Arguments:
298
+ # config name
299
+ # variable name
300
+ # value
301
+ function mkl_allvar_set {
302
+ mkl_mkvar_set "$1" "$2" "$3"
303
+ local val=$3
304
+ if [[ $3 = "y" ]]; then
305
+ val=1
306
+ elif [[ $3 = "n" ]]; then
307
+ val=0
308
+ fi
309
+ mkl_define_set "$1" "$2" "$val"
310
+ }
311
+
312
+
313
+ ###########################################################################
314
+ #
315
+ # Dependency installation, et.al.
316
+ #
317
+ #
318
+ ###########################################################################
319
+
320
+ # Returns the local dependency directory.
321
+ function mkl_depdir {
322
+ local dir="$MKLOVE_DIR/deps"
323
+ [[ -d $dir ]] || mkdir -p "$dir"
324
+ if ! grep -q ^deps$ "$MKLOVE_DIR/.gitignore" 2>/dev/null ; then
325
+ echo "deps" >> "$MKLOVE_DIR/.gitignore"
326
+ fi
327
+
328
+ echo "$dir"
329
+ }
330
+
331
+ # Returns the package's installation directory / DESTDIR.
332
+ function mkl_dep_destdir {
333
+ echo "$(mkl_depdir)/dest"
334
+ }
335
+
336
+ # Returns the package's source directory.
337
+ function mkl_dep_srcdir {
338
+ echo "$(mkl_depdir)/src/$1"
339
+ }
340
+
341
+
342
+ # Get the static library file name(s) for a package.
343
+ function mkl_lib_static_fnames {
344
+ local name=$1
345
+ mkl_meta_get $name "static" ""
346
+ }
347
+
348
+
349
+ # Returns true if previous ./configure ran a dep install for this package.
350
+ function mkl_dep_install_cached {
351
+ local name=$1
352
+
353
+ if [[ -n $(mkl_var_get "MKL_STATUS_${1}_INSTALL") ]] ||
354
+ [[ -n $(mkl_var_get "MKL_STATUS_${1}_INSTALL_SRC") ]]; then
355
+ return 0 # true
356
+ else
357
+ return 1 # false
358
+ fi
359
+ }
360
+
361
+ # Install an external dependency using the platform's native
362
+ # package manager.
363
+ # Should only be called from mkl_dep_install
364
+ #
365
+ # Param 1: config name
366
+ function mkl_dep_install_pkg {
367
+ local name=$1
368
+ local iname="${name}_INSTALL"
369
+ local retcode=1 # default to fail
370
+ local method="none"
371
+ local pkgs
372
+ local cmd
373
+
374
+ mkl_dbg "Attempting native install of dependency $name on $MKL_DISTRO with effective user $EUID"
375
+
376
+
377
+ # Try the platform specific installer first.
378
+ case ${MKL_DISTRO}-${EUID} in
379
+ debian-0|ubuntu-0)
380
+ method=apt
381
+ pkgs=$(mkl_meta_get $name deb)
382
+ cmd="apt install -y $pkgs"
383
+ ;;
384
+
385
+ centos-0|rhel-0|redhat-0|fedora-0)
386
+ method=yum
387
+ pkgs=$(mkl_meta_get $name rpm)
388
+ cmd="yum install -y $pkgs"
389
+ ;;
390
+
391
+ alpine-0)
392
+ method=apk
393
+ pkgs=$(mkl_meta_get $name apk)
394
+ cmd="apk add $pkgs"
395
+ ;;
396
+
397
+ osx-*)
398
+ method=brew
399
+ pkgs=$(mkl_meta_get $name brew)
400
+ cmd="brew install $pkgs"
401
+ ;;
402
+
403
+ *)
404
+ mkl_dbg "$name: No native installer set for $name on $MKL_DISTRO (euid $EUID)"
405
+ return 1
406
+ ;;
407
+ esac
408
+
409
+ if [[ -z $pkgs ]]; then
410
+ mkl_dbg "$name: No packages to install ($method)"
411
+ return 1
412
+ fi
413
+
414
+ mkl_check_begin --verb "installing dependencies ($cmd)" $iname "" no-cache "$name"
415
+ $cmd >>$MKL_OUTDBG 2>&1
416
+ retcode=$?
417
+
418
+ if [[ $retcode -eq 0 ]]; then
419
+ mkl_dbg "Native install of $name (using $method, $cmd) succeeded"
420
+ mkl_check_done "$iname" "" cont "using $method"
421
+ mkl_meta_set $name installed_with "$method"
422
+ elif [[ $method != "none" ]]; then
423
+ mkl_dbg "Native install of $name (using $method, $cmd) failed: retcode $retcode"
424
+ mkl_check_failed "$iname" "" cont "using $method"
425
+ fi
426
+
427
+ return $retcode
428
+ }
429
+
430
+
431
+ # Returns 0 (yes) if this dependency has a source builder, else 1 (no)
432
+ function mkl_dep_has_builder {
433
+ local name=$1
434
+ local func="${name}_install_source"
435
+ mkl_func_exists $func
436
+ }
437
+
438
+
439
+ # Returns 0 (yes) if this dependency has a package installer, else 1 (no)
440
+ function mkl_dep_has_installer {
441
+ local name=$1
442
+ if mkl_dep_has_builder "$name" || \
443
+ [[ -n $(mkl_meta_get $name deb) ]] || \
444
+ [[ -n $(mkl_meta_get $name rpm) ]] || \
445
+ [[ -n $(mkl_meta_get $name brew) ]] || \
446
+ [[ -n $(mkl_meta_get $name apk) ]]; then
447
+ return 0
448
+ else
449
+ return 1
450
+ fi
451
+ }
452
+
453
+
454
+ # Install an external dependency from source.
455
+ #
456
+ # The resulting libraries must be installed in $ddir/usr/lib (or lib64),
457
+ # and include files in $ddir/usr/include.
458
+ #
459
+ # Any dependency installed from source will be linked statically
460
+ # regardless of --enable-static, if the build produced static libraries.
461
+
462
+ #
463
+ # Param 1: config name
464
+ function mkl_dep_install_source {
465
+ local name=$1
466
+ local iname="${name}_INSTALL_SRC"
467
+ local retcode=
468
+
469
+ local func="${name}_install_source"
470
+
471
+ if ! mkl_dep_has_builder $name ; then
472
+ mkl_dbg "No source builder for $name ($func) available"
473
+ return 1
474
+ fi
475
+
476
+ mkl_check_begin --verb "building dependency" $iname "" no-cache "$name"
477
+
478
+ # Create install directory / DESTDIR
479
+ local ddir=$(mkl_dep_destdir $name)
480
+ [[ -d $ddir ]] || mkdir -p "$ddir"
481
+
482
+ # Create and go to source directory
483
+ local sdir=$(mkl_dep_srcdir $name)
484
+ [[ -d $sdir ]] || mkdir -p "$sdir"
485
+ mkl_pushd "$sdir"
486
+
487
+ local ilog="${sdir}/_mkl_install.log"
488
+
489
+ # Build and install
490
+ mkl_dbg "Building $name from source in $sdir (func $func)"
491
+
492
+ libdir="/usr/lib" $func $name "$ddir" >$ilog 2>&1
493
+ retcode=$?
494
+
495
+ mkl_popd # $sdir
496
+
497
+ if [[ $retcode -eq 0 ]]; then
498
+ mkl_dbg "Source install of $name succeeded"
499
+ mkl_check_done "$iname" "" cont "ok" "from source"
500
+ mkl_meta_set $name installed_with "source"
501
+ else
502
+ mkl_dbg "Source install of $name failed"
503
+ mkl_check_failed "$iname" "" disable "source installer failed (see $ilog)"
504
+ mkl_err "$name source build failed, see $ilog for details. First 50 and last 50 lines:"
505
+ head -50 "$ilog"
506
+ echo " .... and last 50 lines ...."
507
+ tail -50 "$ilog"
508
+ fi
509
+
510
+ return $retcode
511
+ }
512
+
513
+
514
+ # Tries to resolve/find full paths to static libraries for a module,
515
+ # using the provided scan dir path.
516
+ # Any found libraries are set as STATIC_LIB_.. defines.
517
+ #
518
+ # Param 1: config name
519
+ # Param 2: scandir
520
+ #
521
+ # Returns 0 if libraries were found, else 1.
522
+ function mkl_resolve_static_libs {
523
+ local name="$1"
524
+ local scandir="$2"
525
+ local stlibfnames=$(mkl_lib_static_fnames $name)
526
+ local stlibvar="STATIC_LIB_${name}"
527
+
528
+ if [[ -z $stlibfnames || -n "${!stlibvar}" ]]; then
529
+ mkl_dbg "$name: not resolving static libraries (stlibfnames=$stlibfnames, $stlibvar=${!stlibvar})"
530
+ mkl_allvar_set "$name" "WITH_STATIC_LIB_$name" y
531
+ return 1
532
+ fi
533
+
534
+ local fname=
535
+ local stlibs=""
536
+ mkl_dbg "$name: resolving static libraries from $stlibfnames in $scandir"
537
+ for fname in $stlibfnames ; do
538
+ local stlib=$(find "${scandir}" -name "$fname" 2>/dev/null | head -1)
539
+ if [[ -n $stlib ]]; then
540
+ stlibs="${stlibs} $stlib"
541
+ fi
542
+ done
543
+
544
+ # Trim leading whitespaces
545
+ stlibs=${stlibs# }
546
+
547
+ if [[ -n $stlibs ]]; then
548
+ mkl_dbg "$name: $stlibvar: found static libs: $stlibs"
549
+ mkl_var_set $stlibvar "$stlibs" "cache"
550
+ mkl_allvar_set "$name" "WITH_STATIC_LIB_$name" y
551
+ return 0
552
+ else
553
+ mkl_dbg "$name: did not find any static libraries for $stlibfnames in ${scandir}"
554
+ return 1
555
+ fi
556
+ }
557
+
558
+
559
+ # Install an external dependecy
560
+ #
561
+ # Param 1: config name (e.g zstd)
562
+ function mkl_dep_install {
563
+ local name=$1
564
+ local retcode=
565
+
566
+ local ddir=$(mkl_dep_destdir $name)
567
+
568
+ if [[ $MKL_SOURCE_DEPS_ONLY != y ]] || ! mkl_dep_has_builder $name ; then
569
+ #
570
+ # Try native package manager first, or if no source builder
571
+ # is available for this dependency.
572
+ #
573
+ mkl_dep_install_pkg $name
574
+ retcode=$?
575
+
576
+ if [[ $retcode -eq 0 ]]; then
577
+ return $retcode
578
+ fi
579
+ fi
580
+
581
+ #
582
+ # Try source installer.
583
+ #
584
+ mkl_dep_install_source $name
585
+ retcode=$?
586
+
587
+ if [[ $retcode -ne 0 ]]; then
588
+ if [[ $MKL_SOURCE_DEPS_ONLY == y ]]; then
589
+ # Require dependencies, regardless of original action,
590
+ # if --source-deps-only is specified, to ensure
591
+ # that we do indeed link with the desired library.
592
+ mkl_fail "$name" "" fail "Failed to install dependency $name"
593
+ fi
594
+ return $retcode
595
+ fi
596
+
597
+ local ddir=$(mkl_dep_destdir $name)
598
+
599
+ # Find the static library(s), if any.
600
+ if ! mkl_resolve_static_libs "$name" "${ddir}/usr"; then
601
+ # No static libraries found, set up dynamic linker path
602
+ mkl_mkvar_prepend LDFLAGS LDFLAGS "-L${ddir}/usr/lib64 -L${ddir}/usr/lib"
603
+ fi
604
+
605
+ # Add the deps destdir to various build flags so that tools can pick
606
+ # up the artifacts (.pc files, includes, libs, etc) they need.
607
+ if [[ $MKL_DESTDIR_ADDED == n ]]; then
608
+ # Add environment variables so that later built dependencies
609
+ # can find this one.
610
+ mkl_env_prepend LDFLAGS "-L${ddir}/usr/lib64 -L${ddir}/usr/lib"
611
+ mkl_env_prepend CPPFLAGS "-I${ddir}/usr/include"
612
+ mkl_env_prepend PKG_CONFIG_PATH "${ddir}/usr/lib/pkgconfig" ":"
613
+ # And tell pkg-config to get static linker flags.
614
+ mkl_env_set PKG_CONFIG "${PKG_CONFIG} --static"
615
+ MKL_DESTDIR_ADDED=y
616
+ fi
617
+
618
+ # Append the package's install path to compiler and linker flags.
619
+ mkl_dbg "$name: Adding install-deps paths ($ddir) to compiler and linker flags"
620
+ mkl_mkvar_prepend CPPFLAGS CPPFLAGS "-I${ddir}/usr/include"
621
+
622
+ return $retcode
623
+ }
624
+
625
+
626
+ # Apply patch to a source dependency.
627
+ #
628
+ # Param 1: config name (e.g. libssl)
629
+ # Param 2: patch number (optional, else all)
630
+ #
631
+ # Returns 0 on success or 1 on error.
632
+ function mkl_patch {
633
+ local name=$1
634
+ local patchnr="$2"
635
+
636
+ if [[ -z $patchnr ]]; then
637
+ patchnr="????"
638
+ fi
639
+
640
+ local patchfile=
641
+ local cnt=0
642
+ for patchfile in $(echo ${MKLOVE_DIR}/modules/patches/${name}.${patchnr}-*.patch | sort); do
643
+ mkl_dbg "$1: applying patch $patchfile"
644
+ patch -p1 < $patchfile
645
+ local retcode=$?
646
+ if [[ $retcode != 0 ]]; then
647
+ mkl_err "mkl_patch: $1: failed to apply patch $patchfile: see source dep build log for details"
648
+ return 1
649
+ fi
650
+ cnt=$(($cnt + 1))
651
+ done
652
+
653
+ if [[ $cnt -lt 1 ]]; then
654
+ mkl_err "mkl_patch: $1: no patches matchign $patchnr found"
655
+ return 1
656
+ fi
657
+
658
+ return 0
659
+ }
660
+
661
+
662
+ ###########################################################################
663
+ #
664
+ #
665
+ # Check failure functionality
666
+ #
667
+ #
668
+ ###########################################################################
669
+
670
+
671
+ # Summarize all fatal failures and then exits.
672
+ function mkl_fail_summary {
673
+ echo "
674
+
675
+ "
676
+
677
+ local pkg_cmd=""
678
+ local install_pkgs=""
679
+ mkl_err "###########################################################"
680
+ mkl_err "### Configure failed ###"
681
+ mkl_err "###########################################################"
682
+ mkl_err "### Accumulated failures: ###"
683
+ mkl_err "###########################################################"
684
+ local n
685
+ for n in $MKL_FAILS ; do
686
+ local conf=$(mkl_var_get MKL_FAIL__${n}__conf)
687
+ mkl_err " $conf ($(mkl_var_get MKL_FAIL__${n}__define)) $(mkl_meta_get $conf name)"
688
+ if mkl_meta_exists $conf desc; then
689
+ mkl_err0 " desc: $MKL_YELLOW$(mkl_meta_get $conf desc)$MKL_CLR_RESET"
690
+ fi
691
+ mkl_err0 " module: $(mkl_var_get MKL_FAIL__${n}__module)"
692
+ mkl_err0 " action: $(mkl_var_get MKL_FAIL__${n}__action)"
693
+ mkl_err0 " reason:
694
+ $(mkl_var_get MKL_FAIL__${n}__reason)
695
+ "
696
+ # Dig up some metadata to assist the user
697
+ case $MKL_DISTRO in
698
+ debian|ubuntu)
699
+ local debs=$(mkl_meta_get $conf "deb")
700
+ pkg_cmd="sudo apt install -y"
701
+ if [[ ${#debs} > 0 ]]; then
702
+ install_pkgs="$install_pkgs $debs"
703
+ fi
704
+ ;;
705
+ centos|rhel|redhat|fedora)
706
+ local rpms=$(mkl_meta_get $conf "rpm")
707
+ pkg_cmd="sudo yum install -y"
708
+ if [[ ${#rpms} > 0 ]]; then
709
+ install_pkgs="$install_pkgs $rpms"
710
+ fi
711
+ ;;
712
+ alpine)
713
+ local apks=$(mkl_meta_get $conf "apk")
714
+ pkg_cmd="apk add "
715
+ if [[ ${#apks} > 0 ]]; then
716
+ install_pkgs="$install_pkgs $apks"
717
+ fi
718
+ ;;
719
+ osx)
720
+ local pkgs=$(mkl_meta_get $conf "brew")
721
+ pkg_cmd="brew install"
722
+ if [[ ${#pkgs} > 0 ]]; then
723
+ install_pkgs="$install_pkgs $pkgs"
724
+ fi
725
+ ;;
726
+ esac
727
+ done
728
+
729
+ if [[ ! -z $install_pkgs ]]; then
730
+ mkl_err "###########################################################"
731
+ mkl_err "### Installing the following packages might help: ###"
732
+ mkl_err "###########################################################"
733
+ mkl_err0 "$pkg_cmd $install_pkgs"
734
+ mkl_err0 ""
735
+ fi
736
+ exit 1
737
+ }
738
+
739
+
740
+ # Checks if there were failures.
741
+ # Returns 0 if there were no failures, else calls failure summary and exits.
742
+ function mkl_check_fails {
743
+ if [[ ${#MKL_FAILS} = 0 ]]; then
744
+ return 0
745
+ fi
746
+ mkl_fail_summary
747
+ }
748
+
749
+ # A check has failed but we want to carry on (and we should!).
750
+ # We fail it all later.
751
+ # Arguments:
752
+ # config name
753
+ # define name
754
+ # action
755
+ # reason
756
+ function mkl_fail {
757
+ local n="$(mkl_env_esc "$1")"
758
+ mkl_var_set "MKL_FAIL__${n}__conf" "$1"
759
+ mkl_var_set "MKL_FAIL__${n}__module" $MKL_MODULE
760
+ mkl_var_set "MKL_FAIL__${n}__define" $2
761
+ mkl_var_set "MKL_FAIL__${n}__action" "$3"
762
+ if [[ -z $(mkl_var_get "MKL_FAIL__${n}__reason") ]]; then
763
+ mkl_var_set "MKL_FAIL__${n}__reason" "$4"
764
+ else
765
+ mkl_var_append "MKL_FAIL__${n}__reason" "
766
+ And also:
767
+ $4"
768
+ fi
769
+ mkl_in_list "$MKL_FAILS" "$n" || mkl_var_append MKL_FAILS "$n"
770
+ }
771
+
772
+
773
+ # A check failed, handle it
774
+ # Arguments:
775
+ # config name
776
+ # define name
777
+ # action (fail|disable|ignore|cont)
778
+ # reason
779
+ function mkl_check_failed {
780
+ # Override action based on require directives, unless the action is
781
+ # set to cont (for fallthrough to sub-sequent tests).
782
+ local action="$3"
783
+ if [[ $3 != "cont" ]]; then
784
+ action=$(mkl_meta_get "MOD__$MKL_MODULE" "override_action" $3)
785
+ fi
786
+
787
+ # --fail-fatal option
788
+ [[ $MKL_FAILFATAL ]] && action="fail"
789
+
790
+ mkl_check_done "$1" "$2" "$action" "failed"
791
+ mkl_dbg "Check $1 ($2, action $action (originally $3)) failed: $4"
792
+
793
+
794
+ case $action in
795
+ fail)
796
+ # Check failed fatally, fail everything eventually
797
+ mkl_fail "$1" "$2" "$3" "$4"
798
+ return 1
799
+ ;;
800
+
801
+ disable)
802
+ # Check failed, disable
803
+ [[ ! -z $2 ]] && mkl_mkvar_set "$1" "$2" "n"
804
+ return 1
805
+ ;;
806
+ ignore)
807
+ # Check failed but we ignore the results and set it anyway.
808
+ [[ ! -z $2 ]] && mkl_define_set "$1" "$2" "1"
809
+ [[ ! -z $2 ]] && mkl_mkvar_set "$1" "$2" "y"
810
+ return 1
811
+ ;;
812
+ cont)
813
+ # Check failed but we ignore the results and do nothing.
814
+ return 0
815
+ ;;
816
+ esac
817
+ }
818
+
819
+
820
+
821
+
822
+ ###########################################################################
823
+ #
824
+ #
825
+ # Output generators
826
+ #
827
+ #
828
+ ###########################################################################
829
+
830
+ # Generate late variables.
831
+ # Late variables are those referenced in command line option defaults
832
+ # but then never set by --option.
833
+ function mkl_generate_late_vars {
834
+ local n
835
+ for n in $MKL_LATE_VARS ; do
836
+ local func=${n%:*}
837
+ local safeopt=${func#opt_}
838
+ local val=${n#*:}
839
+ if mkl_in_list "$MKL_OPTS_SET" "$safeopt" ; then
840
+ # Skip options set explicitly with --option
841
+ continue
842
+ fi
843
+ # Expand variable references "\$foo" by calling eval
844
+ # and pass it opt_... function.
845
+ $func "$(eval echo $val)"
846
+ done
847
+ }
848
+
849
+
850
+ # Generate MKL_DYNAMIC_LIBS and MKL_STATIC_LIBS for Makefile.config
851
+ #
852
+ # Params: $LIBS
853
+ function mkl_generate_libs {
854
+ while [[ $# -gt 0 ]]; do
855
+ if [[ $1 == -l* ]]; then
856
+ mkl_mkvar_append "" MKL_DYNAMIC_LIBS $1
857
+ elif [[ $1 == *.a ]]; then
858
+ mkl_mkvar_append "" MKL_STATIC_LIBS $1
859
+ elif [[ $1 == -framework ]]; then
860
+ mkl_mkvar_append "" MKL_DYNAMIC_LIBS "$1 $2"
861
+ shift # two args
862
+ else
863
+ mkl_dbg "Ignoring arg $1 from LIBS while building STATIC and DYNAMIC lists"
864
+ fi
865
+ shift # remove arg
866
+ done
867
+ }
868
+
869
+ # Generate output files.
870
+ # Must be called following a succesful configure run.
871
+ function mkl_generate {
872
+
873
+ # Generate MKL_STATIC_LIBS and MKL_DYNAMIC_LIBS from LIBS
874
+ mkl_generate_libs $LIBS
875
+
876
+ local mf=
877
+ for mf in $MKL_GENERATORS ; do
878
+ MKL_MODULE=${mf%:*}
879
+ local func=${mf#*:}
880
+ $func || exit 1
881
+ done
882
+
883
+ # Generate a built-in options define based on WITH_..=y
884
+ local with_y=
885
+ for n in $MKL_MKVARS ; do
886
+ if [[ $n == WITH_* ]] && [[ $n != WITH_STATIC_LIB_* ]] && [[ ${!n} == y ]]; then
887
+ with_y="$with_y ${n#WITH_}"
888
+ fi
889
+ done
890
+ with_y="${with_y# }"
891
+
892
+ mkl_allvar_set "BUILT_WITH" "BUILT_WITH" "$with_y"
893
+
894
+ mkl_write_mk "# Automatically generated by $0 $*"
895
+ mkl_write_mk "# Config variables"
896
+ mkl_write_mk "#"
897
+ mkl_write_mk "# Generated by:"
898
+ mkl_write_mk "# $MKL_CONFIGURE_ARGS"
899
+ mkl_write_mk ""
900
+
901
+ # This variable is used by Makefile.base to avoid multiple inclusions.
902
+ mkl_write_mk "MKL_MAKEFILE_CONFIG=y"
903
+
904
+ # Export colors to Makefile.config
905
+ mkl_write_mk "MKL_RED=\t${MKL_RED}"
906
+ mkl_write_mk "MKL_GREEN=\t${MKL_GREEN}"
907
+ mkl_write_mk "MKL_YELLOW=\t${MKL_YELLOW}"
908
+ mkl_write_mk "MKL_BLUE=\t${MKL_BLUE}"
909
+ mkl_write_mk "MKL_CLR_RESET=\t${MKL_CLR_RESET}"
910
+
911
+ local n=
912
+ for n in $MKL_MKVARS ; do
913
+ # Some special variables should be prefixable by the caller, so
914
+ # define them in the makefile as appends.
915
+ local op="="
916
+ case $n in
917
+ CFLAGS|CPPFLAGS|CXXFLAGS|LDFLAGS|LIBS)
918
+ op="+="
919
+ ;;
920
+ esac
921
+ mkl_write_mk "$n$op\t${!n}"
922
+ done
923
+ mkl_write_mk "# End of config variables"
924
+
925
+ MKL_OUTMK_FINAL=Makefile.config
926
+ mv $MKL_OUTMK $MKL_OUTMK_FINAL
927
+
928
+ echo "Generated $MKL_OUTMK_FINAL"
929
+
930
+ # Generate config.h
931
+ mkl_write_h "// Automatically generated by $0 $*"
932
+ mkl_write_h "#ifndef _CONFIG_H_"
933
+ mkl_write_h "#define _CONFIG_H_"
934
+ for n in $MKL_DEFINES ; do
935
+ mkl_write_h "${!n}"
936
+ done
937
+ mkl_write_h "#endif /* _CONFIG_H_ */"
938
+
939
+ MKL_OUTH_FINAL=config.h
940
+ mv $MKL_OUTH $MKL_OUTH_FINAL
941
+
942
+ echo "Generated $MKL_OUTH_FINAL"
943
+ }
944
+
945
+ # Remove file noisily, if it exists
946
+ function mkl_rm {
947
+ if [[ -f $fname ]]; then
948
+ echo "Removing $fname"
949
+ rm -f "$fname"
950
+ fi
951
+ }
952
+
953
+ # Remove files generated by configure
954
+ function mkl_clean {
955
+ for fname in Makefile.config config.h config.cache config.log ; do
956
+ mkl_rm "$fname"
957
+ done
958
+
959
+ local mf=
960
+ for mf in $MKL_CLEANERS ; do
961
+ MKL_MODULE=${mf%:*}
962
+ local func=${mf#*:}
963
+ $func || exit 1
964
+ done
965
+
966
+ }
967
+
968
+
969
+ # Print summary of succesful configure run
970
+ function mkl_summary {
971
+
972
+ echo "
973
+ Configuration summary:"
974
+ local n=
975
+ for n in $MKL_MKVARS ; do
976
+ # Skip the boring booleans
977
+ if [[ $n == ENABLE_* || $n == WITH_* || $n == WITHOUT_* || $n == HAVE_* || $n == def_* ]]; then
978
+ continue
979
+ fi
980
+ printf " %-24s %s\n" "$n" "${!n}"
981
+ done
982
+ }
983
+
984
+
985
+
986
+ # Write to mk file
987
+ # Argument:
988
+ # string ..
989
+ function mkl_write_mk {
990
+ echo -e "$*" >> $MKL_OUTMK
991
+ }
992
+
993
+ # Write to header file
994
+ # Argument:
995
+ # string ..
996
+ function mkl_write_h {
997
+ echo -e "$*" >> $MKL_OUTH
998
+ }
999
+
1000
+
1001
+
1002
+ ###########################################################################
1003
+ #
1004
+ #
1005
+ # Logging and debugging
1006
+ #
1007
+ #
1008
+ ###########################################################################
1009
+
1010
+ # Debug print
1011
+ # Only visible on terminal if MKL_DEBUG is set.
1012
+ # Always written to config.log
1013
+ # Argument:
1014
+ # string ..
1015
+ function mkl_dbg {
1016
+ if [[ ! -z $MKL_DEBUG ]]; then
1017
+ echo -e "${MKL_BLUE}DBG:$$: $*${MKL_CLR_RESET}" 1>&2
1018
+ fi
1019
+ echo "DBG $$: $*" >> $MKL_OUTDBG
1020
+ }
1021
+
1022
+ # Error print (with color)
1023
+ # Always printed to terminal and config.log
1024
+ # Argument:
1025
+ # string ..
1026
+ function mkl_err {
1027
+ echo -e "${MKL_RED}$*${MKL_CLR_RESET}" 1>&2
1028
+ echo "$*" >> $MKL_OUTDBG
1029
+ }
1030
+
1031
+ # Same as mkl_err but without coloring
1032
+ # Argument:
1033
+ # string ..
1034
+ function mkl_err0 {
1035
+ echo -e "$*" 1>&2
1036
+ echo "$*" >> $MKL_OUTDBG
1037
+ }
1038
+
1039
+ # Standard print
1040
+ # Always printed to terminal and config.log
1041
+ # Argument:
1042
+ # string ..
1043
+ function mkl_info {
1044
+ echo -e "$*" 1>&2
1045
+ echo -e "$*" >> $MKL_OUTDBG
1046
+ }
1047
+
1048
+
1049
+
1050
+
1051
+
1052
+
1053
+
1054
+ ###########################################################################
1055
+ #
1056
+ #
1057
+ # Misc helpers
1058
+ #
1059
+ #
1060
+ ###########################################################################
1061
+
1062
+ # Returns the absolute path (but not necesarily canonical) of the first argument
1063
+ function mkl_abspath {
1064
+ echo $1 | sed -e "s|^\([^/]\)|$PWD/\1|"
1065
+ }
1066
+
1067
+ # Returns true (0) if function $1 exists, else false (1)
1068
+ function mkl_func_exists {
1069
+ declare -f "$1" > /dev/null
1070
+ return $?
1071
+ }
1072
+
1073
+ # Rename function.
1074
+ # Returns 0 on success or 1 if old function (origname) was not defined.
1075
+ # Arguments:
1076
+ # origname
1077
+ # newname
1078
+ function mkl_func_rename {
1079
+ if ! mkl_func_exists $1 ; then
1080
+ return 1
1081
+ fi
1082
+ local orig=$(declare -f $1)
1083
+ local new="$2${orig#$1}"
1084
+ eval "$new"
1085
+ unset -f "$1"
1086
+ return 0
1087
+ }
1088
+
1089
+
1090
+ # Push module function for later call by mklove.
1091
+ # The function is renamed to an internal name.
1092
+ # Arguments:
1093
+ # list variable name
1094
+ # module name
1095
+ # function name
1096
+ function mkl_func_push {
1097
+ local newfunc="__mkl__f_${2}_$(( MKL_IDNEXT++ ))"
1098
+ if mkl_func_rename "$3" "$newfunc" ; then
1099
+ mkl_var_append "$1" "$2:$newfunc"
1100
+ fi
1101
+ }
1102
+
1103
+
1104
+
1105
+ # Returns value, or the default string if value is empty.
1106
+ # Arguments:
1107
+ # value
1108
+ # default
1109
+ function mkl_def {
1110
+ if [[ ! -z $1 ]]; then
1111
+ echo $1
1112
+ else
1113
+ echo $2
1114
+ fi
1115
+ }
1116
+
1117
+
1118
+ # Render a string (e.g., evaluate its $varrefs)
1119
+ # Arguments:
1120
+ # string
1121
+ function mkl_render {
1122
+ if [[ $* == *\$* ]]; then
1123
+ eval "echo $*"
1124
+ else
1125
+ echo "$*"
1126
+ fi
1127
+ }
1128
+
1129
+ # Escape a string so that it becomes suitable for being an env variable.
1130
+ # This is a destructive operation and the original string cannot be restored.
1131
+ function mkl_env_esc {
1132
+ echo $* | LC_ALL=C sed -e 's/[^a-zA-Z0-9_]/_/g'
1133
+ }
1134
+
1135
+ # Convert arguments to upper case
1136
+ function mkl_upper {
1137
+ echo "$*" | tr '[:lower:]' '[:upper:]'
1138
+ }
1139
+
1140
+ # Convert arguments to lower case
1141
+ function mkl_lower {
1142
+ echo "$*" | tr '[:upper:]' '[:lower:]'
1143
+ }
1144
+
1145
+
1146
+ # Checks if element is in list
1147
+ # Arguments:
1148
+ # list
1149
+ # element
1150
+ function mkl_in_list {
1151
+ local n
1152
+ for n in $1 ; do
1153
+ [[ $n == $2 ]] && return 0
1154
+ done
1155
+ return 1
1156
+ }
1157
+
1158
+
1159
+ # Silent versions of pushd and popd
1160
+ function mkl_pushd {
1161
+ pushd "$1" >/dev/null
1162
+ }
1163
+
1164
+ function mkl_popd {
1165
+ popd >/dev/null
1166
+ }
1167
+
1168
+
1169
+ ###########################################################################
1170
+ #
1171
+ #
1172
+ # Cache functionality
1173
+ #
1174
+ #
1175
+ ###########################################################################
1176
+
1177
+
1178
+ # Write cache file
1179
+ function mkl_cache_write {
1180
+ [[ ! -z "$MKL_NOCACHE" ]] && return 0
1181
+ echo "# mklove configure cache file generated at $(date)" > config.cache
1182
+ for n in $MKL_CACHEVARS ; do
1183
+ echo "$n=${!n}" >> config.cache
1184
+ done
1185
+ echo "Generated config.cache"
1186
+ }
1187
+
1188
+
1189
+ # Read cache file
1190
+ function mkl_cache_read {
1191
+ [[ ! -z "$MKL_NOCACHE" ]] && return 0
1192
+ [ -f config.cache ] || return 1
1193
+
1194
+ echo "using cache file config.cache"
1195
+
1196
+ local ORIG_IFS=$IFS
1197
+ IFS="$IFS="
1198
+ while read -r n v ; do
1199
+ [[ -z $n || $n = \#* || -z $v ]] && continue
1200
+ # Don't let cache overwrite variables
1201
+ [[ -n ${n+r} ]] || mkl_var_set $n $v cache
1202
+ done < config.cache
1203
+ IFS=$ORIG_IFS
1204
+ }
1205
+
1206
+
1207
+ ###########################################################################
1208
+ #
1209
+ #
1210
+ # Config name meta data
1211
+ #
1212
+ #
1213
+ ###########################################################################
1214
+
1215
+ # Set metadata for config name
1216
+ # This metadata is used by mkl in various situations
1217
+ # Arguments:
1218
+ # config name
1219
+ # metadata key
1220
+ # metadata value (appended)
1221
+ function mkl_meta_set {
1222
+ local metaname="mkl__$1__$2"
1223
+ eval "$metaname=\"\$$metaname $3\""
1224
+ }
1225
+
1226
+ # Returns metadata for config name
1227
+ # Arguments:
1228
+ # config name
1229
+ # metadata key
1230
+ # default (optional)
1231
+ function mkl_meta_get {
1232
+ local metaname="mkl__$1__$2"
1233
+ if [[ ! -z ${!metaname} ]]; then
1234
+ echo ${!metaname}
1235
+ else
1236
+ echo "$3"
1237
+ fi
1238
+ }
1239
+
1240
+ # Checks if metadata exists
1241
+ # Arguments:
1242
+ # config name
1243
+ # metadata key
1244
+ function mkl_meta_exists {
1245
+ local metaname="mkl__$1__$2"
1246
+ if [[ ! -z ${!metaname} ]]; then
1247
+ return 0
1248
+ else
1249
+ return 1
1250
+ fi
1251
+ }
1252
+
1253
+
1254
+
1255
+
1256
+
1257
+ ###########################################################################
1258
+ #
1259
+ #
1260
+ # Check framework
1261
+ #
1262
+ #
1263
+ ###########################################################################
1264
+
1265
+
1266
+ # Print that a check is beginning to run
1267
+ # Returns 0 if a cached result was used (do not continue with your tests),
1268
+ # else 1.
1269
+ #
1270
+ # If the check should not be cachable then specify argument 3 as "no-cache",
1271
+ # this is useful when a check not only checks but actually sets config
1272
+ # variables itself (which is not recommended, but desired sometimes).
1273
+ #
1274
+ # Arguments:
1275
+ # [ --verb "verb.." ] (replace "checking for")
1276
+ # config name
1277
+ # define name
1278
+ # action (fail,cont,disable or no-cache)
1279
+ # [ display name ]
1280
+ function mkl_check_begin {
1281
+ local verb="checking for"
1282
+ if [[ $1 == "--verb" ]]; then
1283
+ verb="$2"
1284
+ shift
1285
+ shift
1286
+ fi
1287
+
1288
+ local name=$(mkl_meta_get $1 name "$4")
1289
+ [[ -z $name ]] && name="$1"
1290
+
1291
+ echo -n "$verb $name..."
1292
+ if [[ $3 != "no-cache" ]]; then
1293
+ local status=$(mkl_var_get "MKL_STATUS_$1")
1294
+ # Check cache (from previous run or this one).
1295
+ # Only used cached value if the cached check succeeded:
1296
+ # it is more likely that a failed check has been fixed than the other
1297
+ # way around.
1298
+ if [[ ! -z $status && ( $status = "ok" ) ]]; then
1299
+ mkl_check_done "$1" "$2" "$3" $status "cached"
1300
+ return 0
1301
+ fi
1302
+ fi
1303
+ return 1
1304
+ }
1305
+
1306
+
1307
+ # Calls the manual_checks function for the given module.
1308
+ # Use this for modules that provide check hooks that require
1309
+ # certain call ordering, such as dependent library checks.
1310
+ #
1311
+ # Param 1: module name
1312
+ function mkl_check {
1313
+ local modname=$1
1314
+
1315
+ local func="${modname}_manual_checks"
1316
+ if ! mkl_func_exists "$func" ; then
1317
+ mkl_fail "Check function for module $modname not found: missing mkl_require $modname ?"
1318
+ return 1
1319
+ fi
1320
+
1321
+ $func
1322
+ return $?
1323
+ }
1324
+
1325
+
1326
+ # Print that a check is done
1327
+ # Arguments:
1328
+ # config name
1329
+ # define name
1330
+ # action
1331
+ # status (ok|failed)
1332
+ # extra-info (optional)
1333
+ function mkl_check_done {
1334
+ # Clean up configname to be a safe varname
1335
+ local cname=${1//-/_}
1336
+ mkl_var_set "MKL_STATUS_$cname" "$4" cache
1337
+
1338
+ mkl_dbg "Setting $1 ($cname) status to $4 (action $3)"
1339
+
1340
+ local extra=""
1341
+ if [[ $4 = "failed" ]]; then
1342
+ local clr=$MKL_YELLOW
1343
+ extra=" ($3)"
1344
+ case "$3" in
1345
+ fail)
1346
+ clr=$MKL_RED
1347
+ ;;
1348
+ cont)
1349
+ extra=""
1350
+ ;;
1351
+ esac
1352
+ echo -e " $clr$4$MKL_CLR_RESET${extra}"
1353
+ else
1354
+ [[ ! -z $2 ]] && mkl_define_set "$cname" "$2" "1"
1355
+ [[ ! -z $2 ]] && mkl_mkvar_set "$cname" "$2" "y"
1356
+ [ ! -z "$5" ] && extra=" ($5)"
1357
+ echo -e " $MKL_GREEN$4${MKL_CLR_RESET}$extra"
1358
+ fi
1359
+ }
1360
+
1361
+
1362
+ # Perform configure check by compiling source snippet
1363
+ # Arguments:
1364
+ # [--sub] (run checker as a sub-check, not doing begin/fail/ok)
1365
+ # [--ldflags="..." ] (appended after "compiler arguments" below)
1366
+ # config name
1367
+ # define name
1368
+ # action (fail|disable)
1369
+ # compiler (CC|CXX)
1370
+ # compiler arguments (optional "", example: "-lzookeeper")
1371
+ # source snippet
1372
+ function mkl_compile_check {
1373
+
1374
+ local sub=0
1375
+ if [[ $1 == --sub ]]; then
1376
+ sub=1
1377
+ shift
1378
+ fi
1379
+
1380
+ local ldf=
1381
+ if [[ $1 == --ldflags=* ]]; then
1382
+ ldf=${1#*=}
1383
+ shift
1384
+ fi
1385
+
1386
+ if [[ $sub -eq 0 ]]; then
1387
+ mkl_check_begin "$1" "$2" "$3" "$1 (by compile)" && return $?
1388
+ fi
1389
+
1390
+ local cflags=
1391
+
1392
+ if [[ $4 = "CXX" ]]; then
1393
+ local ext=cpp
1394
+ cflags="$(mkl_mkvar_get CXXFLAGS)"
1395
+ else
1396
+ local ext=c
1397
+ cflags="$(mkl_mkvar_get CFLAGS)"
1398
+ fi
1399
+
1400
+ local srcfile=$(mktemp _mkltmpXXXXXX)
1401
+ mv "$srcfile" "${srcfile}.$ext"
1402
+ srcfile="$srcfile.$ext"
1403
+ echo "$6" > $srcfile
1404
+ echo "
1405
+ int main () { return 0; }
1406
+ " >> $srcfile
1407
+
1408
+ local cmd="${!4} $cflags $(mkl_mkvar_get CPPFLAGS) -Wall -Werror $srcfile -o ${srcfile}.o $ldf $(mkl_mkvar_get LDFLAGS) $5 $(mkl_mkvar_get LIBS)";
1409
+ mkl_dbg "Compile check $1 ($2) (sub=$sub): $cmd"
1410
+
1411
+ local output
1412
+ output=$($cmd 2>&1)
1413
+
1414
+ if [[ $? != 0 ]] ; then
1415
+ mkl_dbg "compile check for $1 ($2) failed: $cmd: $output"
1416
+ [[ $sub -eq 0 ]] && mkl_check_failed "$1" "$2" "$3" "compile check failed:
1417
+ CC: $4
1418
+ flags: $5
1419
+ $cmd:
1420
+ $output
1421
+ source: $6"
1422
+ local ret=1
1423
+ else
1424
+ [[ $sub -eq 0 ]] && mkl_check_done "$1" "$2" "$3" "ok"
1425
+ local ret=0
1426
+ fi
1427
+
1428
+ # OSX XCode toolchain creates dSYM directories when -g is set,
1429
+ # delete them specifically.
1430
+ rm -rf "$srcfile" "${srcfile}.o" "$srcfile*dSYM"
1431
+
1432
+ return $ret
1433
+ }
1434
+
1435
+
1436
+ # Low-level: Try to link with a library.
1437
+ # Arguments:
1438
+ # linker flags (e.g. "-lpthreads")
1439
+ function mkl_link_check0 {
1440
+ local libs=$1
1441
+ local srcfile=$(mktemp _mktmpXXXXXX)
1442
+ echo "#include <stdio.h>
1443
+ int main () { FILE *fp = stderr; return fp ? 0 : 0; }" > ${srcfile}.c
1444
+
1445
+ local cmd="${CC} $(mkl_mkvar_get CFLAGS) $(mkl_mkvar_get LDFLAGS) ${srcfile}.c -o ${srcfile}_out $libs";
1446
+ mkl_dbg "Link check for $1: $cmd"
1447
+
1448
+ local output
1449
+ output=$($cmd 2>&1)
1450
+ local retcode=$?
1451
+
1452
+ if [[ $retcode -ne 0 ]] ; then
1453
+ mkl_dbg "Link check for $1 failed: $output"
1454
+ fi
1455
+
1456
+ rm -f $srcfile*
1457
+ return $retcode
1458
+ }
1459
+
1460
+
1461
+ # Try to link with a library.
1462
+ # Arguments:
1463
+ # config name
1464
+ # define name
1465
+ # action (fail|disable)
1466
+ # linker flags (e.g. "-lpthreads")
1467
+ function mkl_link_check {
1468
+ mkl_check_begin "$1" "$2" "$3" "$1 (by linking)" && return $?
1469
+
1470
+ if mkl_link_check0 "$4" ; then
1471
+ mkl_check_done "$1" "$2" "$3" "ok" "$4"
1472
+ return 0
1473
+ else
1474
+ mkl_dbg "link check for $1 ($2) failed: $output"
1475
+ mkl_check_failed "$1" "$2" "$3" "compile check failed:
1476
+ $output"
1477
+ return 1
1478
+ fi
1479
+ }
1480
+
1481
+
1482
+
1483
+ # Tries to figure out if we can use a static library or not.
1484
+ #
1485
+ # WARNING: This function must not emit any stdout output other than the
1486
+ # updated list of libs. Do not use any stdout-printing checker.
1487
+ #
1488
+ # Arguments:
1489
+ # config name (e.g., zstd)
1490
+ # compiler flags (optional "", e.g: "-lzstd")
1491
+ # Returns/outputs:
1492
+ # New list of compiler flags
1493
+ function mkl_lib_check_static {
1494
+ local configname=$1
1495
+ local libs=$2
1496
+ local arfile_var=STATIC_LIB_${configname}
1497
+ local stfnames=$(mkl_lib_static_fnames $configname)
1498
+
1499
+ mkl_dbg "$configname: Check for static library (libs $libs, arfile variable $arfile_var=${!arfile_var}, static filenames $stfnames)"
1500
+
1501
+ # If STATIC_LIB_<configname> specifies .a file(s) we use that instead.
1502
+ if [[ -n ${!arfile_var} ]]; then
1503
+ libs="${!arfile_var}"
1504
+
1505
+ elif [[ $WITH_STATIC_LINKING != y ]]; then
1506
+ # Static linking not enabled
1507
+ echo ""
1508
+ return
1509
+
1510
+ elif [[ $HAS_LDFLAGS_STATIC == y ]] && [[ -n $stfnames ]]; then
1511
+ local libname
1512
+ local stlibs=
1513
+ for libname in $stfnames; do
1514
+ # Convert the static filename to a linker flag:
1515
+ # libzstd.a -> -lzstd
1516
+ libname=${libname#lib}
1517
+ libname="-l${libname%.a}"
1518
+ stlibs="${stlibs}${libname} "
1519
+ done
1520
+ libs="${LDFLAGS_STATIC} $stlibs ${LDFLAGS_DYNAMIC}"
1521
+ mkl_dbg "$configname: after replacing libs: $libs"
1522
+
1523
+ elif [[ $libs == *-L* ]]; then
1524
+ # Try to resolve full static paths using any -Lpaths in $libs
1525
+ local lpath
1526
+ for lpath in $libs; do
1527
+ [[ $lpath == -L* ]] || continue
1528
+
1529
+ lpath="${lpath#-L}"
1530
+ [[ -d $lpath ]] || continue
1531
+
1532
+ if mkl_resolve_static_libs "$configname" "$lpath"; then
1533
+ break
1534
+ fi
1535
+ done
1536
+
1537
+ libs="${!arfile_var}"
1538
+ mkl_dbg "$configname: after -L resolve, libs is $libs"
1539
+
1540
+ else
1541
+ mkl_dbg "$configname: Neither $arfile_var=/path/to/libname.a specified nor static linker flags supported: static linking probably won't work"
1542
+ libs=""
1543
+ fi
1544
+
1545
+ if [[ -z $libs ]]; then
1546
+ echo ""
1547
+ return
1548
+ fi
1549
+
1550
+ # Attempt to link a small program with these static libraries
1551
+ mkl_dbg "$configname: verifying that linking \"$libs\" works"
1552
+ if ! mkl_link_check0 "$libs" ; then
1553
+ mkl_dbg "$configname: Could not use static libray flags: $libs"
1554
+ echo ""
1555
+ return
1556
+ fi
1557
+
1558
+ mkl_allvar_set "$configname" "${configname}_STATIC" "y"
1559
+
1560
+ echo $libs
1561
+ }
1562
+
1563
+
1564
+ # Checks that the specified lib is available through a number of methods.
1565
+ # compiler flags are automatically appended to "LIBS" mkvar on success.
1566
+ #
1567
+ # If STATIC_LIB_<libname_without_-l> is set to the path of an <libname>.a file
1568
+ # it will be used instead of -l<libname>.
1569
+ #
1570
+ # <definename>_STATIC will be automatically defined (for both Makefile.config
1571
+ # and config.h) if the library is to be linked statically, or was installed
1572
+ # with a source dependency installer.
1573
+ #
1574
+ # Arguments:
1575
+ # [--override-action=<action>] (internal use, overrides action argument)
1576
+ # [--no-static] (do not attempt to link the library statically)
1577
+ # [--libname=<lib>] (library name if different from config name, such as
1578
+ # when the libname includes a dash)
1579
+ # config name (library name (for pkg-config))
1580
+ # define name
1581
+ # action (fail|disable|cont)
1582
+ # compiler (CC|CXX)
1583
+ # compiler flags (optional "", e.g: "-lyajl")
1584
+ # source snippet
1585
+ function mkl_lib_check0 {
1586
+
1587
+ local override_action=
1588
+ local nostaticopt=
1589
+ local libnameopt=
1590
+ local libname=
1591
+
1592
+ while [[ $1 == --* ]]; do
1593
+ if [[ $1 == --override-action=* ]]; then
1594
+ override_action=${1#*=}
1595
+ elif [[ $1 == --no-static ]]; then
1596
+ nostaticopt=$1
1597
+ elif [[ $1 == --libname* ]]; then
1598
+ libnameopt=$1
1599
+ libname="${libnameopt#*=}"
1600
+ else
1601
+ mkl_err "mkl_lib_check: invalid option $1"
1602
+ exit 1
1603
+ fi
1604
+ shift
1605
+ done
1606
+
1607
+ if [[ -z $libname ]]; then
1608
+ libname=$1
1609
+ fi
1610
+
1611
+ local action=$3
1612
+ if [[ -n $override_action ]]; then
1613
+ action=$override_action
1614
+ fi
1615
+
1616
+ # pkg-config result (0=ok)
1617
+ local pkg_conf_failed=1
1618
+ if [[ $WITH_PKGCONFIG == "y" ]]; then
1619
+ # Let pkg-config populate CFLAGS, et.al.
1620
+ # Return on success.
1621
+ mkl_pkg_config_check $nostaticopt $libnameopt "$1" "$2" cont "$4" "$6" && return $?
1622
+ fi
1623
+
1624
+ local libs="$5"
1625
+ local is_static=0
1626
+
1627
+ if [[ -z $nostaticopt ]]; then
1628
+ local stlibs=$(mkl_lib_check_static $1 "$libs")
1629
+ if [[ -n $stlibs ]]; then
1630
+ libs=$stlibs
1631
+ is_static=1
1632
+ fi
1633
+ fi
1634
+
1635
+ if ! mkl_compile_check "$1" "$2" "$action" "$4" "$libs" "$6"; then
1636
+ return 1
1637
+ fi
1638
+
1639
+ if [[ -n $libs ]]; then
1640
+ # Add libraries in reverse order to make sure inter-dependencies
1641
+ # are resolved in the correct order.
1642
+ # E.g., check for crypto and then ssl should result in -lssl -lcrypto
1643
+ mkl_dbg "$1: from lib_check: LIBS: prepend $libs"
1644
+ mkl_mkvar_prepend "$1" LIBS "$libs"
1645
+ if [[ $is_static == 0 ]]; then
1646
+ # Static libraries are automatically bundled with
1647
+ # librdkafka-static.a so there is no need to add them as an
1648
+ # external linkage dependency.
1649
+ mkl_mkvar_prepend "$1" MKL_PKGCONFIG_LIBS_PRIVATE "$libs"
1650
+ fi
1651
+ fi
1652
+
1653
+ return 0
1654
+ }
1655
+
1656
+
1657
+ # Wrapper for mkl_lib_check0 which attempts dependency installation
1658
+ # if --install-deps is specified.
1659
+ #
1660
+ # See mkl_lib_check0 for arguments and details.
1661
+ function mkl_lib_check {
1662
+
1663
+ local arg=
1664
+ local name=
1665
+
1666
+ # Find config name parameter (first non-option (--...))
1667
+ for arg in $* ; do
1668
+ if [[ $arg == --* ]]; then
1669
+ continue
1670
+ fi
1671
+ name=$arg
1672
+ break
1673
+ done
1674
+
1675
+ if [[ $MKL_INSTALL_DEPS != y ]] || ! mkl_dep_has_installer "$name" ; then
1676
+ mkl_lib_check0 "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8"
1677
+ return $?
1678
+ fi
1679
+
1680
+
1681
+ # Automatic dependency installation mode:
1682
+ # First pass is lib check with cont,
1683
+ # if it fails, attempt dependency installation,
1684
+ # and then make second with caller's fail-action.
1685
+
1686
+ local retcode=
1687
+
1688
+ # With --source-deps-only we want to make sure the dependency
1689
+ # being used is in-fact from the dependency builder (if supported),
1690
+ # rather than a system installed alternative, so skip the pre-check and
1691
+ # go directly to dependency installation/build below.
1692
+ if [[ $MKL_SOURCE_DEPS_ONLY != y ]] || ! mkl_dep_has_builder $name ; then
1693
+ mkl_lib_check0 --override-action=cont "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8"
1694
+ retcode=$?
1695
+ if [[ $retcode -eq 0 ]]; then
1696
+ # Successful on first pass
1697
+ return $retcode
1698
+ fi
1699
+ else
1700
+ mkl_dbg "$name: skipping dependency pre-check in favour of --source-deps-only"
1701
+ fi
1702
+
1703
+ # Install dependency
1704
+ if ! mkl_dep_install "$name" ; then
1705
+ return 1
1706
+ fi
1707
+
1708
+ # Second pass: check again, this time fail hard
1709
+ mkl_lib_check0 --override-action=fail "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8"
1710
+ return $?
1711
+ }
1712
+
1713
+
1714
+
1715
+ # Check for library with pkg-config
1716
+ # Automatically sets CFLAGS and LIBS from pkg-config information.
1717
+ # Arguments:
1718
+ # [--no-static] (do not attempt to link the library statically)
1719
+ # [--libname=<lib>] (library name if different from config name, such as
1720
+ # when the libname includes a dash)
1721
+ # config name
1722
+ # define name
1723
+ # action (fail|disable|ignore|cont)
1724
+ # compiler (CC|CXX)
1725
+ # source snippet
1726
+ function mkl_pkg_config_check {
1727
+
1728
+ local nostaticopt=
1729
+ if [[ $1 == --no-static ]]; then
1730
+ nostaticopt=$1
1731
+ shift
1732
+ fi
1733
+
1734
+ local libname=$1
1735
+ if [[ $1 == --libname* ]]; then
1736
+ libname="${libnameopt#*=}"
1737
+ shift
1738
+ fi
1739
+
1740
+ local cname="${1}_PKGCONFIG"
1741
+ mkl_check_begin "$cname" "$2" "no-cache" "$1 (by pkg-config)" && return $?
1742
+
1743
+ local cflags=
1744
+ local cmd="${PKG_CONFIG} --short-errors --cflags $libname"
1745
+ mkl_dbg "pkg-config check $libname for CFLAGS ($2): $cmd"
1746
+
1747
+ cflags=$($cmd 2>&1)
1748
+ if [[ $? != 0 ]]; then
1749
+ mkl_dbg "'$cmd' failed: $cflags"
1750
+ # Clear define name ($2): caller may have additional checks
1751
+ mkl_check_failed "$cname" "" "$3" "'$cmd' failed:
1752
+ $cflags"
1753
+ return 1
1754
+ fi
1755
+
1756
+ if [[ $(mkl_meta_get $1 installed_with) == "source" && \
1757
+ $WITH_STATIC_LINKING == y && \
1758
+ $MKL_SOURCE_DEPS_ONLY == y ]]; then
1759
+ # If attempting static linking and we're using source-only
1760
+ # dependencies, then there is no need for pkg-config since
1761
+ # the source installer will have set the required flags.
1762
+ mkl_check_failed "$cname" "" "ignore" "pkg-config ignored for static build"
1763
+ return 1
1764
+ fi
1765
+
1766
+ local libs=
1767
+ cmd="${PKG_CONFIG} --short-errors --libs $libname"
1768
+ mkl_dbg "pkg-config check $libname for LIBS ($2): $cmd"
1769
+ libs=$($cmd 2>&1)
1770
+ if [[ $? != 0 ]]; then
1771
+ mkl_dbg "${PKG_CONFIG} --libs $libname failed: $libs"
1772
+ # Clear define name ($2): caller may have additional checks
1773
+ mkl_check_failed "$cname" "" "$3" "pkg-config --libs failed"
1774
+ return 1
1775
+ fi
1776
+
1777
+ mkl_dbg "$1: from pkg-config: CFLAGS '$CFLAGS', LIBS '$LIBS'"
1778
+
1779
+ local snippet="$5"
1780
+ if [[ -n $snippet ]]; then
1781
+ mkl_dbg "$1: performing compile check using pkg-config info"
1782
+
1783
+ if ! mkl_compile_check --sub "$1" "$2" "no-cache" "$4" "$cflags $libs" "$snippet"; then
1784
+ mkl_check_failed "$cname" "" "$3" "compile check failed"
1785
+ return 1
1786
+ fi
1787
+ fi
1788
+
1789
+ mkl_mkvar_append $1 "MKL_PKGCONFIG_REQUIRES_PRIVATE" "$libname"
1790
+
1791
+ mkl_mkvar_append $1 "CFLAGS" "$cflags"
1792
+
1793
+ if [[ -z $nostaticopt ]]; then
1794
+ local stlibs=$(mkl_lib_check_static $1 "$libs")
1795
+ if [[ -n $stlibs ]]; then
1796
+ libs=$stlibs
1797
+ else
1798
+ # if we don't find a static library to bundle into the
1799
+ # -static.a, we need to export a pkgconfig dependency
1800
+ # so it can be resolved when linking downstream packages
1801
+ mkl_mkvar_append $1 "MKL_PKGCONFIG_REQUIRES" "$libname"
1802
+ fi
1803
+ fi
1804
+
1805
+ mkl_dbg "$1: from pkg-config: LIBS: prepend $libs"
1806
+ mkl_mkvar_prepend "$1" LIBS "$libs"
1807
+
1808
+ mkl_check_done "$1" "$2" "$3" "ok"
1809
+
1810
+ return 0
1811
+ }
1812
+
1813
+
1814
+ # Check that a command runs and exits succesfully.
1815
+ # Arguments:
1816
+ # config name
1817
+ # define name (optional, can be empty)
1818
+ # action
1819
+ # command
1820
+ function mkl_command_check {
1821
+ mkl_check_begin "$1" "$2" "$3" "$1 (by command)" && return $?
1822
+
1823
+ local out=
1824
+ out=$($4 2>&1)
1825
+ if [[ $? != 0 ]]; then
1826
+ mkl_dbg "$1: $2: $4 failed: $out"
1827
+ mkl_check_failed "$1" "$2" "$3" "command '$4' failed:
1828
+ $out"
1829
+ return 1
1830
+ fi
1831
+
1832
+ mkl_check_done "$1" "$2" "$3" "ok"
1833
+
1834
+ return 0
1835
+ }
1836
+
1837
+
1838
+ # Check that a program is executable, but will not execute it.
1839
+ # Arguments:
1840
+ # config name
1841
+ # define name (optional, can be empty)
1842
+ # action
1843
+ # program name (e.g, objdump)
1844
+ function mkl_prog_check {
1845
+ mkl_check_begin --verb "checking executable" "$1" "$2" "$3" "$1" && return $?
1846
+
1847
+ local out=
1848
+ out=$(command -v "$4" 2>&1)
1849
+ if [[ $? != 0 ]]; then
1850
+ mkl_dbg "$1: $2: $4 is not executable: $out"
1851
+ mkl_check_failed "$1" "$2" "$3" "$4 is not executable"
1852
+ return 1
1853
+ fi
1854
+
1855
+ mkl_check_done "$1" "$2" "$3" "ok"
1856
+
1857
+ return 0
1858
+ }
1859
+
1860
+
1861
+
1862
+
1863
+ # Checks that the check for the given config name passed.
1864
+ # This does not behave like the other checks, if the given config name passed
1865
+ # its test then nothing is printed. Else the configure will fail.
1866
+ # Arguments:
1867
+ # checked config name
1868
+ function mkl_config_check {
1869
+ local status=$(mkl_var_get "MKL_STATUS_$1")
1870
+ [[ $status = "ok" ]] && return 0
1871
+ mkl_fail $1 "" "fail" "$MKL_MODULE requires $1"
1872
+ return 1
1873
+ }
1874
+
1875
+
1876
+ # Checks that all provided config names are set.
1877
+ # Arguments:
1878
+ # config name
1879
+ # define name
1880
+ # action
1881
+ # check_config_name1
1882
+ # check_config_name2..
1883
+ function mkl_config_check_all {
1884
+ local cname=
1885
+ local res="ok"
1886
+ echo start this now for $1
1887
+ for cname in ${@:4}; do
1888
+ local st=$(mkl_var_get "MKL_STATUS_$cname")
1889
+ [[ $status = "ok" ]] && continue
1890
+ mkl_fail $1 $2 $3 "depends on $cname"
1891
+ res="failed"
1892
+ done
1893
+
1894
+ echo "try res $res"
1895
+ mkl_check_done "$1" "$2" "$3" $res
1896
+ }
1897
+
1898
+
1899
+ # Check environment variable
1900
+ # Arguments:
1901
+ # config name
1902
+ # define name
1903
+ # action
1904
+ # environment variable
1905
+ function mkl_env_check {
1906
+ mkl_check_begin "$1" "$2" "$3" "$1 (by env $4)" && return $?
1907
+
1908
+ if [[ -z ${!4} ]]; then
1909
+ mkl_check_failed "$1" "$2" "$3" "environment variable $4 not set"
1910
+ return 1
1911
+ fi
1912
+
1913
+ mkl_check_done "$1" "$2" "$3" "ok" "${!4}"
1914
+
1915
+ return 0
1916
+ }
1917
+
1918
+
1919
+ # Run all checks
1920
+ function mkl_checks_run {
1921
+ # Set up common variables
1922
+ mkl_allvar_set "" MKL_APP_NAME $(mkl_meta_get description name)
1923
+ mkl_allvar_set "" MKL_APP_DESC_ONELINE "$(mkl_meta_get description oneline)"
1924
+
1925
+ # Call checks functions in dependency order
1926
+ local mf
1927
+ for mf in $MKL_CHECKS ; do
1928
+ MKL_MODULE=${mf%:*}
1929
+ local func=${mf#*:}
1930
+
1931
+ if mkl_func_exists $func ; then
1932
+ $func
1933
+ else
1934
+ mkl_err "Check function $func from $MKL_MODULE disappeared ($mf)"
1935
+ fi
1936
+ unset MKL_MODULE
1937
+ done
1938
+ }
1939
+
1940
+
1941
+ # Check for color support in terminal.
1942
+ # If the terminal supports colors, the function will alter
1943
+ # MKL_RED
1944
+ # MKL_GREEN
1945
+ # MKL_YELLOW
1946
+ # MKL_BLUE
1947
+ # MKL_CLR_RESET
1948
+ function mkl_check_terminal_color_support {
1949
+ local use_color=false
1950
+ local has_tput=false
1951
+
1952
+ if [[ -z ${TERM} ]]; then
1953
+ # tput and dircolors require $TERM
1954
+ mkl_dbg "\$TERM is not set! Cannot check for color support in terminal."
1955
+ return 1
1956
+ elif hash tput 2>/dev/null; then
1957
+ has_tput=true
1958
+ [[ $(tput colors 2>/dev/null) -ge 8 ]] && use_color=true
1959
+ mkl_dbg "tput reports color support: ${use_color}"
1960
+ elif hash dircolors 2>/dev/null; then
1961
+ # Enable color support only on colorful terminals.
1962
+ # dircolors --print-database uses its own built-in database
1963
+ # instead of using /etc/DIR_COLORS. Try to use the external file
1964
+ # first to take advantage of user additions.
1965
+ local safe_term=${TERM//[^[:alnum:]]/?}
1966
+ local match_lhs=""
1967
+ [[ -f ~/.dir_colors ]] && match_lhs="${match_lhs}$(<~/.dir_colors)"
1968
+ [[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(</etc/DIR_COLORS)"
1969
+ [[ -z ${match_lhs} ]] && match_lhs=$(dircolors --print-database)
1970
+ [[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true
1971
+ mkl_dbg "dircolors reports color support: ${use_color}"
1972
+ fi
1973
+
1974
+ if ${use_color}; then
1975
+ if ${has_tput}; then
1976
+ # In theory, user could have set different escape sequences
1977
+ # Because tput is available we can use it to query the right values ...
1978
+ mkl_dbg "Using color escape sequences from tput"
1979
+ MKL_RED=$(tput setaf 1)
1980
+ MKL_GREEN=$(tput setaf 2)
1981
+ MKL_YELLOW=$(tput setaf 3)
1982
+ MKL_BLUE=$(tput setaf 4)
1983
+ MKL_CLR_RESET=$(tput sgr0)
1984
+ else
1985
+ mkl_dbg "Using hard-code ANSI color escape sequences"
1986
+ MKL_RED="\033[031m"
1987
+ MKL_GREEN="\033[032m"
1988
+ MKL_YELLOW="\033[033m"
1989
+ MKL_BLUE="\033[034m"
1990
+ MKL_CLR_RESET="\033[0m"
1991
+ fi
1992
+ else
1993
+ mkl_dbg "Did not detect color support in \"$TERM\" terminal!"
1994
+ fi
1995
+
1996
+ return 0
1997
+ }
1998
+
1999
+
2000
+
2001
+
2002
+ ###########################################################################
2003
+ #
2004
+ #
2005
+ # Module functionality
2006
+ #
2007
+ #
2008
+ ###########################################################################
2009
+
2010
+ # Downloads module from repository.
2011
+ # Arguments:
2012
+ # module name
2013
+ # Returns:
2014
+ # module file name
2015
+ function mkl_module_download {
2016
+ local modname="$1"
2017
+ local url="$MKL_REPO_URL/modules/configure.$modname"
2018
+ local tmpfile=""
2019
+
2020
+ fname="${MKLOVE_DIR}/modules/configure.$modname"
2021
+
2022
+ if [[ $url != http*://* ]]; then
2023
+ # Local path, just copy file.
2024
+ if [[ ! -f $url ]]; then
2025
+ mkl_err "Module $modname not found at $url"
2026
+ return 1
2027
+ fi
2028
+
2029
+ if ! cp "$url" "$fname" ; then
2030
+ mkl_err "Failed to copy $url to $fname"
2031
+ return 1
2032
+ fi
2033
+
2034
+ echo "$fname"
2035
+ return 0
2036
+ fi
2037
+
2038
+ # Download
2039
+ mkl_info "${MKL_BLUE}downloading missing module $modname from $url${MKL_CLR_RESET}"
2040
+
2041
+ tmpfile=$(mktemp _mkltmpXXXXXX)
2042
+ local out=
2043
+ out=$(curl -fLs -o "$tmpfile" "$url" 2>&1)
2044
+
2045
+ if [[ $? -ne 0 ]]; then
2046
+ rm -f "$tmpfile"
2047
+ mkl_err "Failed to download $modname:"
2048
+ mkl_err0 $out
2049
+ return 1
2050
+ fi
2051
+
2052
+ # Move downloaded file into place replacing the old file.
2053
+ mv "$tmpfile" "$fname" || return 1
2054
+
2055
+ # "Return" filename
2056
+ echo "$fname"
2057
+
2058
+ return 0
2059
+ }
2060
+
2061
+
2062
+ # Load module by name or filename
2063
+ # Arguments:
2064
+ # "require"|"try"
2065
+ # filename
2066
+ # [ module arguments ]
2067
+ function mkl_module_load {
2068
+ local try=$1
2069
+ shift
2070
+ local fname=$1
2071
+ shift
2072
+ local modname=${fname#*configure.}
2073
+ local bypath=1
2074
+
2075
+ # Check if already loaded
2076
+ if mkl_in_list "$MKL_MODULES" "$modname"; then
2077
+ return 0
2078
+ fi
2079
+
2080
+ if [[ $fname = $modname ]]; then
2081
+ # Module specified by name, find the file.
2082
+ bypath=0
2083
+ for fname in configure.$modname \
2084
+ ${MKLOVE_DIR}/modules/configure.$modname ; do
2085
+ [[ -s $fname ]] && break
2086
+ done
2087
+ fi
2088
+
2089
+ # Calling module
2090
+ local cmod=$MKL_MODULE
2091
+ [[ -z $cmod ]] && cmod="base"
2092
+
2093
+ if [[ ! -s $fname ]]; then
2094
+ # Attempt to download module, if permitted
2095
+ if [[ $MKL_NO_DOWNLOAD != 0 || $bypath == 1 ]]; then
2096
+ mkl_err "Module $modname not found at $fname (required by $cmod) and downloads disabled"
2097
+ if [[ $try = "require" ]]; then
2098
+ mkl_fail "$modname" "none" "fail" \
2099
+ "Module $modname not found (required by $cmod) and downloads disabled"
2100
+ fi
2101
+ return 1
2102
+ fi
2103
+
2104
+ fname=$(mkl_module_download "$modname")
2105
+ if [[ $? -ne 0 ]]; then
2106
+ mkl_err "Module $modname not found (required by $cmod)"
2107
+ if [[ $try = "require" ]]; then
2108
+ mkl_fail "$modname" "none" "fail" \
2109
+ "Module $modname not found (required by $cmod)"
2110
+ return 1
2111
+ fi
2112
+ fi
2113
+
2114
+ # Now downloaded, try loading the module again.
2115
+ mkl_module_load $try "$fname" "$@"
2116
+ return $?
2117
+ fi
2118
+
2119
+ # Set current module
2120
+ local save_MKL_MODULE=$MKL_MODULE
2121
+ MKL_MODULE=$modname
2122
+
2123
+ mkl_dbg "Loading module $modname (required by $cmod) from $fname"
2124
+
2125
+ # Source module file (positional arguments are available to module)
2126
+ source $fname
2127
+
2128
+ # Restore current module (might be recursive)
2129
+ MKL_MODULE=$save_MKL_MODULE
2130
+
2131
+ # Add module to list of modules
2132
+ mkl_var_append MKL_MODULES $modname
2133
+
2134
+ # Rename module's special functions so we can call them separetely later.
2135
+ mkl_func_rename "options" "${modname}_options"
2136
+ mkl_func_rename "install_source" "${modname}_install_source"
2137
+ mkl_func_rename "manual_checks" "${modname}_manual_checks"
2138
+ mkl_func_push MKL_CHECKS "$modname" "checks"
2139
+ mkl_func_push MKL_GENERATORS "$modname" "generate"
2140
+ mkl_func_push MKL_CLEANERS "$modname" "clean"
2141
+ }
2142
+
2143
+
2144
+ # Require and load module
2145
+ # Must only be called from module file outside any function.
2146
+ # Arguments:
2147
+ # [ --try ] Dont fail if module doesn't exist
2148
+ # module1
2149
+ # [ "must" "pass" ]
2150
+ # [ module arguments ... ]
2151
+ function mkl_require {
2152
+ local try="require"
2153
+ if [[ $1 = "--try" ]]; then
2154
+ local try="try"
2155
+ shift
2156
+ fi
2157
+
2158
+ local mod=$1
2159
+ shift
2160
+ local override_action=
2161
+
2162
+ # Check for cyclic dependencies
2163
+ if mkl_in_list "$MKL_LOAD_STACK" "$mod"; then
2164
+ mkl_err "Cyclic dependency detected while loading $mod module:"
2165
+ local cmod=
2166
+ local lmod=$mod
2167
+ for cmod in $MKL_LOAD_STACK ; do
2168
+ mkl_err " $lmod required by $cmod"
2169
+ lmod=$cmod
2170
+ done
2171
+ mkl_fail base "" fail "Cyclic dependency detected while loading module $mod"
2172
+ return 1
2173
+ fi
2174
+
2175
+ mkl_var_prepend MKL_LOAD_STACK "$mod"
2176
+
2177
+
2178
+ if [[ "$1 $2" == "must pass" ]]; then
2179
+ shift
2180
+ shift
2181
+ override_action="fail"
2182
+ fi
2183
+
2184
+ if [[ ! -z $override_action ]]; then
2185
+ mkl_meta_set "MOD__$mod" "override_action" "$override_action"
2186
+ fi
2187
+
2188
+
2189
+ mkl_module_load $try $mod "$@"
2190
+ local ret=$?
2191
+
2192
+ mkl_var_shift MKL_LOAD_STACK
2193
+
2194
+ return $ret
2195
+ }
2196
+
2197
+
2198
+
2199
+ ###########################################################################
2200
+ #
2201
+ #
2202
+ # Usage options
2203
+ #
2204
+ #
2205
+ ###########################################################################
2206
+
2207
+
2208
+ MKL_USAGE="Usage: ./configure [OPTIONS...]
2209
+
2210
+ mklove configure script - mklove, not autoconf
2211
+ Copyright (c) 2014-2023, Magnus Edenhill - https://github.com/edenhill/mklove
2212
+ "
2213
+
2214
+ function mkl_usage {
2215
+ echo "$MKL_USAGE"
2216
+ local name=$(mkl_meta_get description name)
2217
+
2218
+ if [[ ! -z ${name} ]]; then
2219
+ echo " $name - $(mkl_meta_get description oneline)
2220
+ $(mkl_meta_get description copyright)
2221
+ "
2222
+ fi
2223
+
2224
+ local og
2225
+ for og in $MKL_USAGE_GROUPS ; do
2226
+ og="MKL_USAGE_GROUP__$og"
2227
+ echo "${!og}"
2228
+ done
2229
+
2230
+ echo "Honoured environment variables:
2231
+ CC, CPP, CXX, CFLAGS, CPPFLAGS, CXXFLAGS, LDFLAGS, LIBS,
2232
+ LD, NM, OBJDUMP, STRIP, RANLIB, PKG_CONFIG, PKG_CONFIG_PATH,
2233
+ STATIC_LIB_<libname>=.../libname.a
2234
+
2235
+ "
2236
+
2237
+ }
2238
+
2239
+
2240
+
2241
+ # Add usage option informative text
2242
+ # Arguments:
2243
+ # text
2244
+ function mkl_usage_info {
2245
+ MKL_USAGE="$MKL_USAGE
2246
+ $1"
2247
+ }
2248
+
2249
+
2250
+ # Add option to usage output
2251
+ # Arguments:
2252
+ # option group ("Standard", "Cross-Compilation", etc..)
2253
+ # variable name
2254
+ # option ("--foo", "--foo=*", "--foo=args_required")
2255
+ # help
2256
+ # default (optional)
2257
+ # assignvalue (optional, default:"y")
2258
+ # function block (optional)
2259
+ #
2260
+ # If option takes the form --foo=* then arguments are optional.
2261
+ function mkl_option {
2262
+ local optgroup=$1
2263
+ local varname=$2
2264
+
2265
+ # Fixed width between option name and help in usage output
2266
+ local pad=" "
2267
+ if [[ ${#3} -lt ${#pad} ]]; then
2268
+ pad=${pad:0:$(expr ${#pad} - ${#3})}
2269
+ else
2270
+ pad=""
2271
+ fi
2272
+
2273
+ # Add to usage output
2274
+ local optgroup_safe=$(mkl_env_esc $optgroup)
2275
+ if ! mkl_in_list "$MKL_USAGE_GROUPS" "$optgroup_safe" ; then
2276
+ mkl_env_append MKL_USAGE_GROUPS "$optgroup_safe"
2277
+ mkl_env_set "MKL_USAGE_GROUP__$optgroup_safe" "$optgroup options:
2278
+ "
2279
+ fi
2280
+
2281
+ local defstr=""
2282
+ [[ ! -z $5 ]] && defstr=" [$5]"
2283
+ mkl_env_append "MKL_USAGE_GROUP__$optgroup_safe" " $3 $pad $4$defstr
2284
+ "
2285
+
2286
+ local optname="${3#--}"
2287
+ local safeopt=
2288
+ local optval=""
2289
+ if [[ $3 == *=* ]]; then
2290
+ optname="${optname%=*}"
2291
+ optval="${3#*=}"
2292
+ if [[ $optval == '*' ]]; then
2293
+ # Avoid globbing of --foo=* optional arguments
2294
+ optval='\*'
2295
+ fi
2296
+ fi
2297
+
2298
+ safeopt=$(mkl_env_esc $optname)
2299
+
2300
+ mkl_meta_set "MKL_OPT_ARGS" "$safeopt" "$optval"
2301
+
2302
+ #
2303
+ # Optional variable scoping by prefix: "env:", "mk:", "def:"
2304
+ #
2305
+ local setallvar="mkl_allvar_set ''"
2306
+ local setmkvar="mkl_mkvar_set ''"
2307
+
2308
+ if [[ $varname = env:* ]]; then
2309
+ # Set environment variable (during configure runtime only)
2310
+ varname=${varname#*:}
2311
+ setallvar=mkl_env_set
2312
+ setmkvar=mkl_env_set
2313
+ elif [[ $varname = mk:* ]]; then
2314
+ # Set Makefile.config variable
2315
+ varname=${varname#*:}
2316
+ setallvar="mkl_mkvar_append ''"
2317
+ setmkvar="mkl_mkvar_append ''"
2318
+ elif [[ $varname = def:* ]]; then
2319
+ # Set config.h define
2320
+ varname=${varname#*:}
2321
+ setallvar="mkl_define_set ''"
2322
+ setmkvar="mkl_define_set ''"
2323
+ fi
2324
+
2325
+
2326
+ if [[ ! -z $7 ]]; then
2327
+ # Function block specified.
2328
+ eval "function opt_$safeopt { $7 }"
2329
+ else
2330
+ # Add default implementation of function simply setting the value.
2331
+ # Application may override this by redefining the function after calling
2332
+ # mkl_option.
2333
+ if [[ $optval = "PATH" ]]; then
2334
+ # PATH argument: make it an absolute path.
2335
+ # Only set the make variable (not config.h)
2336
+ eval "function opt_$safeopt { $setmkvar $varname \"\$(mkl_abspath \$(mkl_render \$1))\"; }"
2337
+ else
2338
+ # Standard argument: simply set the value
2339
+ if [[ -z "$6" ]]; then
2340
+ eval "function opt_$safeopt { $setallvar $varname \"\$1\"; }"
2341
+ else
2342
+ eval "function opt_$safeopt { $setallvar $varname \"$6\"; }"
2343
+ fi
2344
+ fi
2345
+ fi
2346
+
2347
+ # If default value is provided and does not start with "$" (variable ref)
2348
+ # then set it right away.
2349
+ # $ variable refs are set after all checks have run during the
2350
+ # generating step.
2351
+ if [[ ${#5} != 0 ]] ; then
2352
+ if [[ $5 = *\$* ]]; then
2353
+ mkl_var_append "MKL_LATE_VARS" "opt_$safeopt:$5"
2354
+ else
2355
+ opt_$safeopt $5
2356
+ fi
2357
+ fi
2358
+
2359
+ if [[ ! -z $varname ]]; then
2360
+ # Add variable to list
2361
+ MKL_CONFVARS="$MKL_CONFVARS $varname"
2362
+ fi
2363
+
2364
+ }
2365
+
2366
+
2367
+
2368
+ # Adds a toggle (--enable-X, --disable-X) option.
2369
+ # Arguments:
2370
+ # option group ("Standard", ..)
2371
+ # variable name (WITH_FOO)
2372
+ # option (--enable-foo, --enable-foo=*, or --enable-foo=req)
2373
+ # help ("foo.." ("Enable" and "Disable" will be prepended))
2374
+ # default (y or n)
2375
+
2376
+ function mkl_toggle_option {
2377
+
2378
+ # Add option argument
2379
+ mkl_option "$1" "$2" "$3" "$4" "$5"
2380
+
2381
+ # Add corresponding "--disable-foo" option for "--enable-foo".
2382
+ local disname="${3/--enable/--disable}"
2383
+ local dishelp="${4/Enable/Disable}"
2384
+ mkl_option "$1" "$2" "$disname" "$dishelp" "" "n"
2385
+ }
2386
+
2387
+ # Adds a toggle (--enable-X, --disable-X) option with builtin checker.
2388
+ # This is the library version.
2389
+ # Arguments:
2390
+ # option group ("Standard", ..)
2391
+ # config name (foo, must be same as pkg-config name)
2392
+ # variable name (WITH_FOO)
2393
+ # action (fail or disable)
2394
+ # option (--enable-foo)
2395
+ # help (defaults to "Enable <config name>")
2396
+ # linker flags (-lfoo)
2397
+ # default (y or n)
2398
+
2399
+ function mkl_toggle_option_lib {
2400
+
2401
+ local help="$6"
2402
+ [[ -z "$help" ]] && help="Enable $2"
2403
+
2404
+ # Add option argument
2405
+ mkl_option "$1" "$3" "$5" "$help" "$8"
2406
+
2407
+ # Add corresponding "--disable-foo" option for "--enable-foo".
2408
+ local disname="${5/--enable/--disable}"
2409
+ local dishelp="${help/Enable/Disable}"
2410
+ mkl_option "$1" "$3" "$disname" "$dishelp" "" "n"
2411
+
2412
+ # Create checks
2413
+ eval "function _tmp_func { mkl_lib_check \"$2\" \"$3\" \"$4\" CC \"$7\"; }"
2414
+ mkl_func_push MKL_CHECKS "$MKL_MODULE" _tmp_func
2415
+ }
2416
+
2417
+
2418
+
2419
+ # Downloads, verifies checksum, and extracts an archive to
2420
+ # the current directory.
2421
+ #
2422
+ # Arguments:
2423
+ # url Archive URL
2424
+ # shabits The SHA algorithm bit count used to verify the checksum. E.g., "256".
2425
+ # checksum Expected checksum of archive (use "" to not perform check)
2426
+ function mkl_download_archive {
2427
+ local url="$1"
2428
+ local shabits="$2"
2429
+ local exp_checksum="$3"
2430
+
2431
+ local tmpfile=$(mktemp _mkltmpXXXXXX)
2432
+
2433
+ # Try both wget and curl
2434
+ if ! wget -nv -O "$tmpfile" "$url" ; then
2435
+ if ! curl -fLsS -o "$tmpfile" "$url" ; then
2436
+ rm -f "$tmpfile"
2437
+ echo -e "ERROR: Download of $url failed" 1>&2
2438
+ return 1
2439
+ fi
2440
+ fi
2441
+
2442
+ if [[ -n $exp_checksum ]]; then
2443
+ # Verify checksum
2444
+
2445
+ local checksum_tool=""
2446
+
2447
+ # OSX has shasum by default, on Linux it is typically in
2448
+ # some Perl package that may or may not be installed.
2449
+ if $(which shasum >/dev/null 2>&1); then
2450
+ checksum_tool="shasum -b -a ${shabits}"
2451
+ else
2452
+ # shaXsum is available in Linux coreutils
2453
+ checksum_tool="sha${shabits}sum"
2454
+ fi
2455
+
2456
+ local checksum=$($checksum_tool "$tmpfile" | cut -d' ' -f1)
2457
+ if [[ $? -ne 0 ]]; then
2458
+ rm -f "$tmpfile"
2459
+ echo "ERROR: Failed to verify checksum of $url with $checksum_tool" 1>&2
2460
+ return 1
2461
+ fi
2462
+
2463
+ if [[ $checksum != $exp_checksum ]]; then
2464
+ rm -f "$tmpfile"
2465
+ echo "ERROR: $url: $checksum_tool: Checksum mismatch: expected $exp_checksum, calculated $checksum" 1>&2
2466
+ return 1
2467
+ fi
2468
+
2469
+ echo "### Checksum of $url verified ($checksum_tool):"
2470
+ echo "### Expected: $exp_checksum"
2471
+ echo "### Calculated: $checksum"
2472
+ fi
2473
+
2474
+ tar xzf "$tmpfile" --strip-components 1
2475
+ if [[ $? -ne 0 ]]; then
2476
+ rm -f "$tmpfile"
2477
+ echo "ERROR: $url: failed to extract archive" 1>&2
2478
+ return 1
2479
+ fi
2480
+
2481
+
2482
+ rm -f "$tmpfile"
2483
+ return 0
2484
+ }