frida 16.2.1 → 16.2.2

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 (386) hide show
  1. package/BSDmakefile +6 -0
  2. package/Makefile +16 -0
  3. package/README.md +14 -11
  4. package/configure +18 -0
  5. package/configure.bat +22 -0
  6. package/dist/native.js +0 -8
  7. package/lib/application.ts +98 -0
  8. package/lib/authentication.ts +3 -0
  9. package/lib/build.py +50 -0
  10. package/lib/bus.ts +30 -0
  11. package/lib/cancellable.ts +33 -0
  12. package/lib/child.ts +15 -0
  13. package/lib/crash.ts +11 -0
  14. package/lib/device.ts +329 -0
  15. package/lib/device_manager.ts +69 -0
  16. package/lib/endpoint_parameters.ts +56 -0
  17. package/lib/icon.ts +15 -0
  18. package/lib/index.ts +311 -0
  19. package/lib/iostream.ts +78 -0
  20. package/lib/meson.build +53 -0
  21. package/lib/native.ts +9 -0
  22. package/lib/portal_membership.ts +10 -0
  23. package/lib/portal_service.ts +105 -0
  24. package/lib/process.ts +57 -0
  25. package/lib/relay.ts +44 -0
  26. package/lib/script.ts +352 -0
  27. package/lib/session.ts +113 -0
  28. package/lib/signals.ts +45 -0
  29. package/lib/socket_address.ts +35 -0
  30. package/lib/spawn.ts +4 -0
  31. package/lib/system_parameters.ts +78 -0
  32. package/make.bat +23 -0
  33. package/meson.build +160 -0
  34. package/meson.options +11 -0
  35. package/package.json +27 -6
  36. package/releng/deps.py +1133 -0
  37. package/releng/deps.toml +391 -0
  38. package/releng/devkit-assets/frida-core-example-unix.c +188 -0
  39. package/releng/devkit-assets/frida-core-example-windows.c +197 -0
  40. package/releng/devkit-assets/frida-core-example.sln +28 -0
  41. package/releng/devkit-assets/frida-core-example.vcxproj +157 -0
  42. package/releng/devkit-assets/frida-core-example.vcxproj.filters +27 -0
  43. package/releng/devkit-assets/frida-gum-example-unix.c +122 -0
  44. package/releng/devkit-assets/frida-gum-example-windows.c +132 -0
  45. package/releng/devkit-assets/frida-gum-example.sln +28 -0
  46. package/releng/devkit-assets/frida-gum-example.vcxproj +157 -0
  47. package/releng/devkit-assets/frida-gum-example.vcxproj.filters +27 -0
  48. package/releng/devkit-assets/frida-gumjs-example-unix.c +84 -0
  49. package/releng/devkit-assets/frida-gumjs-example-windows.c +91 -0
  50. package/releng/devkit-assets/frida-gumjs-example.sln +28 -0
  51. package/releng/devkit-assets/frida-gumjs-example.vcxproj +157 -0
  52. package/releng/devkit-assets/frida-gumjs-example.vcxproj.filters +27 -0
  53. package/releng/devkit.py +535 -0
  54. package/releng/env.py +420 -0
  55. package/releng/env_android.py +150 -0
  56. package/releng/env_apple.py +176 -0
  57. package/releng/env_generic.py +373 -0
  58. package/releng/frida_version.py +69 -0
  59. package/releng/machine_file.py +44 -0
  60. package/releng/machine_spec.py +290 -0
  61. package/releng/meson/meson.py +27 -0
  62. package/releng/meson/mesonbuild/__init__.py +0 -0
  63. package/releng/meson/mesonbuild/_pathlib.py +63 -0
  64. package/releng/meson/mesonbuild/_typing.py +69 -0
  65. package/releng/meson/mesonbuild/arglist.py +321 -0
  66. package/releng/meson/mesonbuild/ast/__init__.py +23 -0
  67. package/releng/meson/mesonbuild/ast/interpreter.py +441 -0
  68. package/releng/meson/mesonbuild/ast/introspection.py +374 -0
  69. package/releng/meson/mesonbuild/ast/postprocess.py +109 -0
  70. package/releng/meson/mesonbuild/ast/printer.py +620 -0
  71. package/releng/meson/mesonbuild/ast/visitor.py +161 -0
  72. package/releng/meson/mesonbuild/backend/__init__.py +0 -0
  73. package/releng/meson/mesonbuild/backend/backends.py +2047 -0
  74. package/releng/meson/mesonbuild/backend/ninjabackend.py +3808 -0
  75. package/releng/meson/mesonbuild/backend/nonebackend.py +26 -0
  76. package/releng/meson/mesonbuild/backend/vs2010backend.py +2078 -0
  77. package/releng/meson/mesonbuild/backend/vs2012backend.py +35 -0
  78. package/releng/meson/mesonbuild/backend/vs2013backend.py +34 -0
  79. package/releng/meson/mesonbuild/backend/vs2015backend.py +35 -0
  80. package/releng/meson/mesonbuild/backend/vs2017backend.py +59 -0
  81. package/releng/meson/mesonbuild/backend/vs2019backend.py +54 -0
  82. package/releng/meson/mesonbuild/backend/vs2022backend.py +54 -0
  83. package/releng/meson/mesonbuild/backend/xcodebackend.py +1781 -0
  84. package/releng/meson/mesonbuild/build.py +3249 -0
  85. package/releng/meson/mesonbuild/cargo/__init__.py +5 -0
  86. package/releng/meson/mesonbuild/cargo/builder.py +238 -0
  87. package/releng/meson/mesonbuild/cargo/cfg.py +274 -0
  88. package/releng/meson/mesonbuild/cargo/interpreter.py +733 -0
  89. package/releng/meson/mesonbuild/cargo/manifest.py +227 -0
  90. package/releng/meson/mesonbuild/cargo/version.py +95 -0
  91. package/releng/meson/mesonbuild/cmake/__init__.py +28 -0
  92. package/releng/meson/mesonbuild/cmake/common.py +331 -0
  93. package/releng/meson/mesonbuild/cmake/data/__init__.py +0 -0
  94. package/releng/meson/mesonbuild/cmake/data/preload.cmake +82 -0
  95. package/releng/meson/mesonbuild/cmake/executor.py +241 -0
  96. package/releng/meson/mesonbuild/cmake/fileapi.py +324 -0
  97. package/releng/meson/mesonbuild/cmake/generator.py +186 -0
  98. package/releng/meson/mesonbuild/cmake/interpreter.py +1267 -0
  99. package/releng/meson/mesonbuild/cmake/toolchain.py +248 -0
  100. package/releng/meson/mesonbuild/cmake/traceparser.py +814 -0
  101. package/releng/meson/mesonbuild/cmake/tracetargets.py +161 -0
  102. package/releng/meson/mesonbuild/compilers/__init__.py +86 -0
  103. package/releng/meson/mesonbuild/compilers/asm.py +307 -0
  104. package/releng/meson/mesonbuild/compilers/c.py +788 -0
  105. package/releng/meson/mesonbuild/compilers/c_function_attributes.py +143 -0
  106. package/releng/meson/mesonbuild/compilers/compilers.py +1388 -0
  107. package/releng/meson/mesonbuild/compilers/cpp.py +1035 -0
  108. package/releng/meson/mesonbuild/compilers/cs.py +136 -0
  109. package/releng/meson/mesonbuild/compilers/cuda.py +806 -0
  110. package/releng/meson/mesonbuild/compilers/cython.py +91 -0
  111. package/releng/meson/mesonbuild/compilers/d.py +861 -0
  112. package/releng/meson/mesonbuild/compilers/detect.py +1396 -0
  113. package/releng/meson/mesonbuild/compilers/fortran.py +523 -0
  114. package/releng/meson/mesonbuild/compilers/java.py +113 -0
  115. package/releng/meson/mesonbuild/compilers/mixins/__init__.py +0 -0
  116. package/releng/meson/mesonbuild/compilers/mixins/arm.py +167 -0
  117. package/releng/meson/mesonbuild/compilers/mixins/ccrx.py +113 -0
  118. package/releng/meson/mesonbuild/compilers/mixins/clang.py +170 -0
  119. package/releng/meson/mesonbuild/compilers/mixins/clike.py +1330 -0
  120. package/releng/meson/mesonbuild/compilers/mixins/compcert.py +117 -0
  121. package/releng/meson/mesonbuild/compilers/mixins/elbrus.py +93 -0
  122. package/releng/meson/mesonbuild/compilers/mixins/emscripten.py +89 -0
  123. package/releng/meson/mesonbuild/compilers/mixins/gnu.py +629 -0
  124. package/releng/meson/mesonbuild/compilers/mixins/intel.py +167 -0
  125. package/releng/meson/mesonbuild/compilers/mixins/islinker.py +120 -0
  126. package/releng/meson/mesonbuild/compilers/mixins/metrowerks.py +279 -0
  127. package/releng/meson/mesonbuild/compilers/mixins/pgi.py +88 -0
  128. package/releng/meson/mesonbuild/compilers/mixins/ti.py +130 -0
  129. package/releng/meson/mesonbuild/compilers/mixins/visualstudio.py +458 -0
  130. package/releng/meson/mesonbuild/compilers/mixins/xc16.py +111 -0
  131. package/releng/meson/mesonbuild/compilers/objc.py +120 -0
  132. package/releng/meson/mesonbuild/compilers/objcpp.py +102 -0
  133. package/releng/meson/mesonbuild/compilers/rust.py +230 -0
  134. package/releng/meson/mesonbuild/compilers/swift.py +131 -0
  135. package/releng/meson/mesonbuild/compilers/vala.py +121 -0
  136. package/releng/meson/mesonbuild/coredata.py +1532 -0
  137. package/releng/meson/mesonbuild/dependencies/__init__.py +252 -0
  138. package/releng/meson/mesonbuild/dependencies/base.py +663 -0
  139. package/releng/meson/mesonbuild/dependencies/boost.py +1083 -0
  140. package/releng/meson/mesonbuild/dependencies/cmake.py +656 -0
  141. package/releng/meson/mesonbuild/dependencies/coarrays.py +80 -0
  142. package/releng/meson/mesonbuild/dependencies/configtool.py +163 -0
  143. package/releng/meson/mesonbuild/dependencies/cuda.py +295 -0
  144. package/releng/meson/mesonbuild/dependencies/data/CMakeLists.txt +102 -0
  145. package/releng/meson/mesonbuild/dependencies/data/CMakeListsLLVM.txt +204 -0
  146. package/releng/meson/mesonbuild/dependencies/data/CMakePathInfo.txt +31 -0
  147. package/releng/meson/mesonbuild/dependencies/data/__init__.py +0 -0
  148. package/releng/meson/mesonbuild/dependencies/detect.py +225 -0
  149. package/releng/meson/mesonbuild/dependencies/dev.py +707 -0
  150. package/releng/meson/mesonbuild/dependencies/dub.py +424 -0
  151. package/releng/meson/mesonbuild/dependencies/factory.py +146 -0
  152. package/releng/meson/mesonbuild/dependencies/framework.py +111 -0
  153. package/releng/meson/mesonbuild/dependencies/hdf5.py +168 -0
  154. package/releng/meson/mesonbuild/dependencies/misc.py +618 -0
  155. package/releng/meson/mesonbuild/dependencies/mpi.py +231 -0
  156. package/releng/meson/mesonbuild/dependencies/pkgconfig.py +570 -0
  157. package/releng/meson/mesonbuild/dependencies/platform.py +52 -0
  158. package/releng/meson/mesonbuild/dependencies/python.py +431 -0
  159. package/releng/meson/mesonbuild/dependencies/qt.py +484 -0
  160. package/releng/meson/mesonbuild/dependencies/scalapack.py +142 -0
  161. package/releng/meson/mesonbuild/dependencies/ui.py +281 -0
  162. package/releng/meson/mesonbuild/depfile.py +82 -0
  163. package/releng/meson/mesonbuild/envconfig.py +480 -0
  164. package/releng/meson/mesonbuild/environment.py +987 -0
  165. package/releng/meson/mesonbuild/interpreter/__init__.py +47 -0
  166. package/releng/meson/mesonbuild/interpreter/compiler.py +900 -0
  167. package/releng/meson/mesonbuild/interpreter/dependencyfallbacks.py +386 -0
  168. package/releng/meson/mesonbuild/interpreter/interpreter.py +3595 -0
  169. package/releng/meson/mesonbuild/interpreter/interpreterobjects.py +1096 -0
  170. package/releng/meson/mesonbuild/interpreter/kwargs.py +479 -0
  171. package/releng/meson/mesonbuild/interpreter/mesonmain.py +487 -0
  172. package/releng/meson/mesonbuild/interpreter/primitives/__init__.py +29 -0
  173. package/releng/meson/mesonbuild/interpreter/primitives/array.py +108 -0
  174. package/releng/meson/mesonbuild/interpreter/primitives/boolean.py +52 -0
  175. package/releng/meson/mesonbuild/interpreter/primitives/dict.py +88 -0
  176. package/releng/meson/mesonbuild/interpreter/primitives/integer.py +86 -0
  177. package/releng/meson/mesonbuild/interpreter/primitives/range.py +38 -0
  178. package/releng/meson/mesonbuild/interpreter/primitives/string.py +247 -0
  179. package/releng/meson/mesonbuild/interpreter/type_checking.py +853 -0
  180. package/releng/meson/mesonbuild/interpreterbase/__init__.py +126 -0
  181. package/releng/meson/mesonbuild/interpreterbase/_unholder.py +25 -0
  182. package/releng/meson/mesonbuild/interpreterbase/baseobjects.py +174 -0
  183. package/releng/meson/mesonbuild/interpreterbase/decorators.py +806 -0
  184. package/releng/meson/mesonbuild/interpreterbase/disabler.py +35 -0
  185. package/releng/meson/mesonbuild/interpreterbase/exceptions.py +22 -0
  186. package/releng/meson/mesonbuild/interpreterbase/helpers.py +67 -0
  187. package/releng/meson/mesonbuild/interpreterbase/interpreterbase.py +665 -0
  188. package/releng/meson/mesonbuild/interpreterbase/operator.py +32 -0
  189. package/releng/meson/mesonbuild/linkers/__init__.py +20 -0
  190. package/releng/meson/mesonbuild/linkers/base.py +39 -0
  191. package/releng/meson/mesonbuild/linkers/detect.py +229 -0
  192. package/releng/meson/mesonbuild/linkers/linkers.py +1614 -0
  193. package/releng/meson/mesonbuild/mcompile.py +380 -0
  194. package/releng/meson/mesonbuild/mconf.py +368 -0
  195. package/releng/meson/mesonbuild/mdevenv.py +234 -0
  196. package/releng/meson/mesonbuild/mdist.py +376 -0
  197. package/releng/meson/mesonbuild/mesondata.py +38 -0
  198. package/releng/meson/mesonbuild/mesonlib.py +23 -0
  199. package/releng/meson/mesonbuild/mesonmain.py +289 -0
  200. package/releng/meson/mesonbuild/minit.py +204 -0
  201. package/releng/meson/mesonbuild/minstall.py +864 -0
  202. package/releng/meson/mesonbuild/mintro.py +667 -0
  203. package/releng/meson/mesonbuild/mlog.py +542 -0
  204. package/releng/meson/mesonbuild/modules/__init__.py +270 -0
  205. package/releng/meson/mesonbuild/modules/cmake.py +442 -0
  206. package/releng/meson/mesonbuild/modules/cuda.py +377 -0
  207. package/releng/meson/mesonbuild/modules/dlang.py +117 -0
  208. package/releng/meson/mesonbuild/modules/external_project.py +306 -0
  209. package/releng/meson/mesonbuild/modules/fs.py +323 -0
  210. package/releng/meson/mesonbuild/modules/gnome.py +2215 -0
  211. package/releng/meson/mesonbuild/modules/hotdoc.py +487 -0
  212. package/releng/meson/mesonbuild/modules/i18n.py +405 -0
  213. package/releng/meson/mesonbuild/modules/icestorm.py +123 -0
  214. package/releng/meson/mesonbuild/modules/java.py +112 -0
  215. package/releng/meson/mesonbuild/modules/keyval.py +65 -0
  216. package/releng/meson/mesonbuild/modules/modtest.py +33 -0
  217. package/releng/meson/mesonbuild/modules/pkgconfig.py +744 -0
  218. package/releng/meson/mesonbuild/modules/python.py +556 -0
  219. package/releng/meson/mesonbuild/modules/python3.py +85 -0
  220. package/releng/meson/mesonbuild/modules/qt.py +621 -0
  221. package/releng/meson/mesonbuild/modules/qt4.py +23 -0
  222. package/releng/meson/mesonbuild/modules/qt5.py +23 -0
  223. package/releng/meson/mesonbuild/modules/qt6.py +22 -0
  224. package/releng/meson/mesonbuild/modules/rust.py +355 -0
  225. package/releng/meson/mesonbuild/modules/simd.py +114 -0
  226. package/releng/meson/mesonbuild/modules/sourceset.py +291 -0
  227. package/releng/meson/mesonbuild/modules/wayland.py +151 -0
  228. package/releng/meson/mesonbuild/modules/windows.py +207 -0
  229. package/releng/meson/mesonbuild/mparser.py +1114 -0
  230. package/releng/meson/mesonbuild/msetup.py +365 -0
  231. package/releng/meson/mesonbuild/msubprojects.py +764 -0
  232. package/releng/meson/mesonbuild/mtest.py +2201 -0
  233. package/releng/meson/mesonbuild/munstable_coredata.py +107 -0
  234. package/releng/meson/mesonbuild/optinterpreter.py +276 -0
  235. package/releng/meson/mesonbuild/programs.py +367 -0
  236. package/releng/meson/mesonbuild/rewriter.py +1075 -0
  237. package/releng/meson/mesonbuild/scripts/__init__.py +10 -0
  238. package/releng/meson/mesonbuild/scripts/clangformat.py +55 -0
  239. package/releng/meson/mesonbuild/scripts/clangtidy.py +30 -0
  240. package/releng/meson/mesonbuild/scripts/cleantrees.py +35 -0
  241. package/releng/meson/mesonbuild/scripts/cmake_run_ctgt.py +103 -0
  242. package/releng/meson/mesonbuild/scripts/cmd_or_ps.ps1 +17 -0
  243. package/releng/meson/mesonbuild/scripts/copy.py +19 -0
  244. package/releng/meson/mesonbuild/scripts/coverage.py +214 -0
  245. package/releng/meson/mesonbuild/scripts/delwithsuffix.py +27 -0
  246. package/releng/meson/mesonbuild/scripts/depfixer.py +495 -0
  247. package/releng/meson/mesonbuild/scripts/depscan.py +198 -0
  248. package/releng/meson/mesonbuild/scripts/dirchanger.py +20 -0
  249. package/releng/meson/mesonbuild/scripts/env2mfile.py +402 -0
  250. package/releng/meson/mesonbuild/scripts/externalproject.py +106 -0
  251. package/releng/meson/mesonbuild/scripts/gettext.py +86 -0
  252. package/releng/meson/mesonbuild/scripts/gtkdochelper.py +286 -0
  253. package/releng/meson/mesonbuild/scripts/hotdochelper.py +40 -0
  254. package/releng/meson/mesonbuild/scripts/itstool.py +77 -0
  255. package/releng/meson/mesonbuild/scripts/meson_exe.py +115 -0
  256. package/releng/meson/mesonbuild/scripts/msgfmthelper.py +29 -0
  257. package/releng/meson/mesonbuild/scripts/pycompile.py +54 -0
  258. package/releng/meson/mesonbuild/scripts/python_info.py +121 -0
  259. package/releng/meson/mesonbuild/scripts/regen_checker.py +55 -0
  260. package/releng/meson/mesonbuild/scripts/run_tool.py +58 -0
  261. package/releng/meson/mesonbuild/scripts/scanbuild.py +57 -0
  262. package/releng/meson/mesonbuild/scripts/symbolextractor.py +322 -0
  263. package/releng/meson/mesonbuild/scripts/tags.py +44 -0
  264. package/releng/meson/mesonbuild/scripts/test_loaded_modules.py +14 -0
  265. package/releng/meson/mesonbuild/scripts/uninstall.py +41 -0
  266. package/releng/meson/mesonbuild/scripts/vcstagger.py +35 -0
  267. package/releng/meson/mesonbuild/scripts/yasm.py +24 -0
  268. package/releng/meson/mesonbuild/templates/__init__.py +0 -0
  269. package/releng/meson/mesonbuild/templates/cpptemplates.py +143 -0
  270. package/releng/meson/mesonbuild/templates/cstemplates.py +90 -0
  271. package/releng/meson/mesonbuild/templates/ctemplates.py +126 -0
  272. package/releng/meson/mesonbuild/templates/cudatemplates.py +143 -0
  273. package/releng/meson/mesonbuild/templates/dlangtemplates.py +109 -0
  274. package/releng/meson/mesonbuild/templates/fortrantemplates.py +101 -0
  275. package/releng/meson/mesonbuild/templates/javatemplates.py +94 -0
  276. package/releng/meson/mesonbuild/templates/mesontemplates.py +70 -0
  277. package/releng/meson/mesonbuild/templates/objcpptemplates.py +126 -0
  278. package/releng/meson/mesonbuild/templates/objctemplates.py +126 -0
  279. package/releng/meson/mesonbuild/templates/rusttemplates.py +79 -0
  280. package/releng/meson/mesonbuild/templates/samplefactory.py +41 -0
  281. package/releng/meson/mesonbuild/templates/sampleimpl.py +160 -0
  282. package/releng/meson/mesonbuild/templates/valatemplates.py +82 -0
  283. package/releng/meson/mesonbuild/utils/__init__.py +0 -0
  284. package/releng/meson/mesonbuild/utils/core.py +166 -0
  285. package/releng/meson/mesonbuild/utils/platform.py +27 -0
  286. package/releng/meson/mesonbuild/utils/posix.py +32 -0
  287. package/releng/meson/mesonbuild/utils/universal.py +2445 -0
  288. package/releng/meson/mesonbuild/utils/vsenv.py +126 -0
  289. package/releng/meson/mesonbuild/utils/win32.py +29 -0
  290. package/releng/meson/mesonbuild/wrap/__init__.py +59 -0
  291. package/releng/meson/mesonbuild/wrap/wrap.py +846 -0
  292. package/releng/meson/mesonbuild/wrap/wraptool.py +198 -0
  293. package/releng/meson-scripts/BSDmakefile +6 -0
  294. package/releng/meson-scripts/Makefile +16 -0
  295. package/releng/meson-scripts/configure +18 -0
  296. package/releng/meson-scripts/configure.bat +22 -0
  297. package/releng/meson-scripts/make.bat +23 -0
  298. package/releng/meson_configure.py +506 -0
  299. package/releng/meson_make.py +131 -0
  300. package/releng/mkdevkit.py +107 -0
  301. package/releng/mkfatmacho.py +54 -0
  302. package/releng/post-process-oabi.py +97 -0
  303. package/releng/progress.py +14 -0
  304. package/releng/sync-from-upstream.py +185 -0
  305. package/releng/tomlkit/tomlkit/__init__.py +59 -0
  306. package/releng/tomlkit/tomlkit/_compat.py +22 -0
  307. package/releng/tomlkit/tomlkit/_types.py +83 -0
  308. package/releng/tomlkit/tomlkit/_utils.py +158 -0
  309. package/releng/tomlkit/tomlkit/api.py +308 -0
  310. package/releng/tomlkit/tomlkit/container.py +875 -0
  311. package/releng/tomlkit/tomlkit/exceptions.py +227 -0
  312. package/releng/tomlkit/tomlkit/items.py +1967 -0
  313. package/releng/tomlkit/tomlkit/parser.py +1141 -0
  314. package/releng/tomlkit/tomlkit/py.typed +0 -0
  315. package/releng/tomlkit/tomlkit/source.py +180 -0
  316. package/releng/tomlkit/tomlkit/toml_char.py +52 -0
  317. package/releng/tomlkit/tomlkit/toml_document.py +7 -0
  318. package/releng/tomlkit/tomlkit/toml_file.py +58 -0
  319. package/releng/winenv.py +140 -0
  320. package/scripts/adjust-version.py +19 -0
  321. package/scripts/detect-version.py +40 -0
  322. package/scripts/fetch-abi-bits.py +343 -0
  323. package/scripts/install.js +23 -0
  324. package/scripts/package.py +15 -0
  325. package/src/addon.cc +76 -0
  326. package/src/application.cc +148 -0
  327. package/src/application.h +31 -0
  328. package/src/authentication.cc +174 -0
  329. package/src/authentication.h +24 -0
  330. package/src/bus.cc +167 -0
  331. package/src/bus.h +33 -0
  332. package/src/cancellable.cc +117 -0
  333. package/src/cancellable.h +31 -0
  334. package/src/child.cc +150 -0
  335. package/src/child.h +32 -0
  336. package/src/crash.cc +122 -0
  337. package/src/crash.h +30 -0
  338. package/src/device.cc +1302 -0
  339. package/src/device.h +55 -0
  340. package/src/device_manager.cc +362 -0
  341. package/src/device_manager.h +35 -0
  342. package/src/endpoint_parameters.cc +171 -0
  343. package/src/endpoint_parameters.h +28 -0
  344. package/src/glib_context.cc +62 -0
  345. package/src/glib_context.h +29 -0
  346. package/src/glib_object.cc +25 -0
  347. package/src/glib_object.h +37 -0
  348. package/src/iostream.cc +247 -0
  349. package/src/iostream.h +30 -0
  350. package/src/meson.build +26 -0
  351. package/src/operation.h +94 -0
  352. package/src/portal_membership.cc +100 -0
  353. package/src/portal_membership.h +26 -0
  354. package/src/portal_service.cc +401 -0
  355. package/src/portal_service.h +40 -0
  356. package/src/process.cc +135 -0
  357. package/src/process.h +30 -0
  358. package/src/relay.cc +139 -0
  359. package/src/relay.h +31 -0
  360. package/src/runtime.cc +443 -0
  361. package/src/runtime.h +64 -0
  362. package/src/script.cc +301 -0
  363. package/src/script.h +36 -0
  364. package/src/session.cc +860 -0
  365. package/src/session.h +42 -0
  366. package/src/signals.cc +334 -0
  367. package/src/signals.h +47 -0
  368. package/src/spawn.cc +95 -0
  369. package/src/spawn.h +27 -0
  370. package/src/usage_monitor.h +117 -0
  371. package/src/uv_context.cc +118 -0
  372. package/src/uv_context.h +40 -0
  373. package/src/win_delay_load_hook.cc +63 -0
  374. package/subprojects/frida-core.wrap +8 -0
  375. package/subprojects/nan.wrap +9 -0
  376. package/subprojects/packagefiles/nan.patch +13 -0
  377. package/test/data/index.ts +13 -0
  378. package/test/data/unixvictim-linux-x86 +0 -0
  379. package/test/data/unixvictim-linux-x86_64 +0 -0
  380. package/test/data/unixvictim-macos +0 -0
  381. package/test/device.ts +27 -0
  382. package/test/device_manager.ts +16 -0
  383. package/test/labrat.ts +32 -0
  384. package/test/script.ts +176 -0
  385. package/test/session.ts +73 -0
  386. package/tsconfig.json +18 -0
@@ -0,0 +1,1083 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2013-2020 The Meson development team
3
+
4
+ from __future__ import annotations
5
+
6
+ import re
7
+ import dataclasses
8
+ import functools
9
+ import typing as T
10
+ from pathlib import Path
11
+
12
+ from .. import mlog
13
+ from .. import mesonlib
14
+
15
+ from .base import DependencyException, SystemDependency
16
+ from .detect import packages
17
+ from .pkgconfig import PkgConfigDependency
18
+ from .misc import threads_factory
19
+
20
+ if T.TYPE_CHECKING:
21
+ from ..envconfig import Properties
22
+ from ..environment import Environment
23
+
24
+ # On windows 3 directory layouts are supported:
25
+ # * The default layout (versioned) installed:
26
+ # - $BOOST_ROOT/include/boost-x_x/boost/*.hpp
27
+ # - $BOOST_ROOT/lib/*.lib
28
+ # * The non-default layout (system) installed:
29
+ # - $BOOST_ROOT/include/boost/*.hpp
30
+ # - $BOOST_ROOT/lib/*.lib
31
+ # * The pre-built binaries from sf.net:
32
+ # - $BOOST_ROOT/boost/*.hpp
33
+ # - $BOOST_ROOT/lib<arch>-<compiler>/*.lib where arch=32/64 and compiler=msvc-14.1
34
+ #
35
+ # Note that we should also try to support:
36
+ # mingw-w64 / Windows : libboost_<module>-mt.a (location = <prefix>/mingw64/lib/)
37
+ # libboost_<module>-mt.dll.a
38
+ #
39
+ # The `modules` argument accept library names. This is because every module that
40
+ # has libraries to link against also has multiple options regarding how to
41
+ # link. See for example:
42
+ # * http://www.boost.org/doc/libs/1_65_1/libs/test/doc/html/boost_test/usage_variants.html
43
+ # * http://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html
44
+ # * http://www.boost.org/doc/libs/1_65_1/libs/math/doc/html/math_toolkit/main_tr1.html
45
+
46
+ # **On Unix**, official packaged versions of boost libraries follow the following schemes:
47
+ #
48
+ # Linux / Debian: libboost_<module>.so -> libboost_<module>.so.1.66.0
49
+ # Linux / Red Hat: libboost_<module>.so -> libboost_<module>.so.1.66.0
50
+ # Linux / OpenSuse: libboost_<module>.so -> libboost_<module>.so.1.66.0
51
+ # Win / Cygwin: libboost_<module>.dll.a (location = /usr/lib)
52
+ # libboost_<module>.a
53
+ # cygboost_<module>_1_64.dll (location = /usr/bin)
54
+ # Win / VS: boost_<module>-vc<ver>-mt[-gd]-<arch>-1_67.dll (location = C:/local/boost_1_67_0)
55
+ # Mac / homebrew: libboost_<module>.dylib + libboost_<module>-mt.dylib (location = /usr/local/lib)
56
+ # Mac / macports: libboost_<module>.dylib + libboost_<module>-mt.dylib (location = /opt/local/lib)
57
+ #
58
+ # Its not clear that any other abi tags (e.g. -gd) are used in official packages.
59
+ #
60
+ # On Linux systems, boost libs have multithreading support enabled, but without the -mt tag.
61
+ #
62
+ # Boost documentation recommends using complex abi tags like "-lboost_regex-gcc34-mt-d-1_36".
63
+ # (See http://www.boost.org/doc/libs/1_66_0/more/getting_started/unix-variants.html#library-naming)
64
+ # However, its not clear that any Unix distribution follows this scheme.
65
+ # Furthermore, the boost documentation for unix above uses examples from windows like
66
+ # "libboost_regex-vc71-mt-d-x86-1_34.lib", so apparently the abi tags may be more aimed at windows.
67
+ #
68
+ # We follow the following strategy for finding modules:
69
+ # A) Detect potential boost root directories (uses also BOOST_ROOT env var)
70
+ # B) Foreach candidate
71
+ # 1. Look for the boost headers (boost/version.pp)
72
+ # 2. Find all boost libraries
73
+ # 2.1 Add all libraries in lib*
74
+ # 2.2 Filter out non boost libraries
75
+ # 2.3 Filter the remaining libraries based on the meson requirements (static/shared, etc.)
76
+ # 2.4 Ensure that all libraries have the same boost tag (and are thus compatible)
77
+ # 3. Select the libraries matching the requested modules
78
+
79
+ @dataclasses.dataclass(eq=False, order=False)
80
+ class UnknownFileException(Exception):
81
+ path: Path
82
+
83
+ @functools.total_ordering
84
+ class BoostIncludeDir():
85
+ def __init__(self, path: Path, version_int: int):
86
+ self.path = path
87
+ self.version_int = version_int
88
+ major = int(self.version_int / 100000)
89
+ minor = int((self.version_int / 100) % 1000)
90
+ patch = int(self.version_int % 100)
91
+ self.version = f'{major}.{minor}.{patch}'
92
+ self.version_lib = f'{major}_{minor}'
93
+
94
+ def __repr__(self) -> str:
95
+ return f'<BoostIncludeDir: {self.version} -- {self.path}>'
96
+
97
+ def __lt__(self, other: object) -> bool:
98
+ if isinstance(other, BoostIncludeDir):
99
+ return (self.version_int, self.path) < (other.version_int, other.path)
100
+ return NotImplemented
101
+
102
+ @functools.total_ordering
103
+ class BoostLibraryFile():
104
+ # Python libraries are special because of the included
105
+ # minor version in the module name.
106
+ boost_python_libs = ['boost_python', 'boost_numpy']
107
+ reg_python_mod_split = re.compile(r'(boost_[a-zA-Z]+)([0-9]*)')
108
+
109
+ reg_abi_tag = re.compile(r'^s?g?y?d?p?n?$')
110
+ reg_ver_tag = re.compile(r'^[0-9_]+$')
111
+
112
+ def __init__(self, path: Path):
113
+ self.path = path
114
+ self.name = self.path.name
115
+
116
+ # Initialize default properties
117
+ self.static = False
118
+ self.toolset = ''
119
+ self.arch = ''
120
+ self.version_lib = ''
121
+ self.mt = True
122
+
123
+ self.runtime_static = False
124
+ self.runtime_debug = False
125
+ self.python_debug = False
126
+ self.debug = False
127
+ self.stlport = False
128
+ self.deprecated_iostreams = False
129
+
130
+ # Post process the library name
131
+ name_parts = self.name.split('.')
132
+ self.basename = name_parts[0]
133
+ self.suffixes = name_parts[1:]
134
+ self.vers_raw = [x for x in self.suffixes if x.isdigit()]
135
+ self.suffixes = [x for x in self.suffixes if not x.isdigit()]
136
+ self.nvsuffix = '.'.join(self.suffixes) # Used for detecting the library type
137
+ self.nametags = self.basename.split('-')
138
+ self.mod_name = self.nametags[0]
139
+ if self.mod_name.startswith('lib'):
140
+ self.mod_name = self.mod_name[3:]
141
+
142
+ # Set library version if possible
143
+ if len(self.vers_raw) >= 2:
144
+ self.version_lib = '{}_{}'.format(self.vers_raw[0], self.vers_raw[1])
145
+
146
+ # Detecting library type
147
+ if self.nvsuffix in {'so', 'dll', 'dll.a', 'dll.lib', 'dylib'}:
148
+ self.static = False
149
+ elif self.nvsuffix in {'a', 'lib'}:
150
+ self.static = True
151
+ else:
152
+ raise UnknownFileException(self.path)
153
+
154
+ # boost_.lib is the dll import library
155
+ if self.basename.startswith('boost_') and self.nvsuffix == 'lib':
156
+ self.static = False
157
+
158
+ # Process tags
159
+ tags = self.nametags[1:]
160
+ # Filter out the python version tag and fix modname
161
+ if self.is_python_lib():
162
+ tags = self.fix_python_name(tags)
163
+ if not tags:
164
+ return
165
+
166
+ # Without any tags mt is assumed, however, an absence of mt in the name
167
+ # with tags present indicates that the lib was built without mt support
168
+ self.mt = False
169
+ for i in tags:
170
+ if i == 'mt':
171
+ self.mt = True
172
+ elif len(i) == 3 and i[1:] in {'32', '64'}:
173
+ self.arch = i
174
+ elif BoostLibraryFile.reg_abi_tag.match(i):
175
+ self.runtime_static = 's' in i
176
+ self.runtime_debug = 'g' in i
177
+ self.python_debug = 'y' in i
178
+ self.debug = 'd' in i
179
+ self.stlport = 'p' in i
180
+ self.deprecated_iostreams = 'n' in i
181
+ elif BoostLibraryFile.reg_ver_tag.match(i):
182
+ self.version_lib = i
183
+ else:
184
+ self.toolset = i
185
+
186
+ def __repr__(self) -> str:
187
+ return f'<LIB: {self.abitag} {self.mod_name:<32} {self.path}>'
188
+
189
+ def __lt__(self, other: object) -> bool:
190
+ if isinstance(other, BoostLibraryFile):
191
+ return (
192
+ self.mod_name, self.static, self.version_lib, self.arch,
193
+ not self.mt, not self.runtime_static,
194
+ not self.debug, self.runtime_debug, self.python_debug,
195
+ self.stlport, self.deprecated_iostreams,
196
+ self.name,
197
+ ) < (
198
+ other.mod_name, other.static, other.version_lib, other.arch,
199
+ not other.mt, not other.runtime_static,
200
+ not other.debug, other.runtime_debug, other.python_debug,
201
+ other.stlport, other.deprecated_iostreams,
202
+ other.name,
203
+ )
204
+ return NotImplemented
205
+
206
+ def __eq__(self, other: object) -> bool:
207
+ if isinstance(other, BoostLibraryFile):
208
+ return self.name == other.name
209
+ return NotImplemented
210
+
211
+ def __hash__(self) -> int:
212
+ return hash(self.name)
213
+
214
+ @property
215
+ def abitag(self) -> str:
216
+ abitag = ''
217
+ abitag += 'S' if self.static else '-'
218
+ abitag += 'M' if self.mt else '-'
219
+ abitag += ' '
220
+ abitag += 's' if self.runtime_static else '-'
221
+ abitag += 'g' if self.runtime_debug else '-'
222
+ abitag += 'y' if self.python_debug else '-'
223
+ abitag += 'd' if self.debug else '-'
224
+ abitag += 'p' if self.stlport else '-'
225
+ abitag += 'n' if self.deprecated_iostreams else '-'
226
+ abitag += ' ' + (self.arch or '???')
227
+ abitag += ' ' + (self.toolset or '?')
228
+ abitag += ' ' + (self.version_lib or 'x_xx')
229
+ return abitag
230
+
231
+ def is_boost(self) -> bool:
232
+ return any(self.name.startswith(x) for x in ['libboost_', 'boost_'])
233
+
234
+ def is_python_lib(self) -> bool:
235
+ return any(self.mod_name.startswith(x) for x in BoostLibraryFile.boost_python_libs)
236
+
237
+ def fix_python_name(self, tags: T.List[str]) -> T.List[str]:
238
+ # Handle the boost_python naming madness.
239
+ # See https://github.com/mesonbuild/meson/issues/4788 for some distro
240
+ # specific naming variations.
241
+ other_tags: T.List[str] = []
242
+
243
+ # Split the current modname into the base name and the version
244
+ m_cur = BoostLibraryFile.reg_python_mod_split.match(self.mod_name)
245
+ cur_name = m_cur.group(1)
246
+ cur_vers = m_cur.group(2)
247
+
248
+ # Update the current version string if the new version string is longer
249
+ def update_vers(new_vers: str) -> None:
250
+ nonlocal cur_vers
251
+ new_vers = new_vers.replace('_', '')
252
+ new_vers = new_vers.replace('.', '')
253
+ if not new_vers.isdigit():
254
+ return
255
+ if len(new_vers) > len(cur_vers):
256
+ cur_vers = new_vers
257
+
258
+ for i in tags:
259
+ if i.startswith('py'):
260
+ update_vers(i[2:])
261
+ elif i.isdigit():
262
+ update_vers(i)
263
+ elif len(i) >= 3 and i[0].isdigit and i[2].isdigit() and i[1] == '.':
264
+ update_vers(i)
265
+ else:
266
+ other_tags += [i]
267
+
268
+ self.mod_name = cur_name + cur_vers
269
+ return other_tags
270
+
271
+ def mod_name_matches(self, mod_name: str) -> bool:
272
+ if self.mod_name == mod_name:
273
+ return True
274
+ if not self.is_python_lib():
275
+ return False
276
+
277
+ m_cur = BoostLibraryFile.reg_python_mod_split.match(self.mod_name)
278
+ m_arg = BoostLibraryFile.reg_python_mod_split.match(mod_name)
279
+
280
+ if not m_cur or not m_arg:
281
+ return False
282
+
283
+ if m_cur.group(1) != m_arg.group(1):
284
+ return False
285
+
286
+ cur_vers = m_cur.group(2)
287
+ arg_vers = m_arg.group(2)
288
+
289
+ # Always assume python 2 if nothing is specified
290
+ if not arg_vers:
291
+ arg_vers = '2'
292
+
293
+ return cur_vers.startswith(arg_vers)
294
+
295
+ def version_matches(self, version_lib: str) -> bool:
296
+ # If no version tag is present, assume that it fits
297
+ if not self.version_lib or not version_lib:
298
+ return True
299
+ return self.version_lib == version_lib
300
+
301
+ def arch_matches(self, arch: str) -> bool:
302
+ # If no version tag is present, assume that it fits
303
+ if not self.arch or not arch:
304
+ return True
305
+ return self.arch == arch
306
+
307
+ def vscrt_matches(self, vscrt: str) -> bool:
308
+ # If no vscrt tag present, assume that it fits ['/MD', '/MDd', '/MT', '/MTd']
309
+ if not vscrt:
310
+ return True
311
+ if vscrt in {'/MD', '-MD'}:
312
+ return not self.runtime_static and not self.runtime_debug
313
+ elif vscrt in {'/MDd', '-MDd'}:
314
+ return not self.runtime_static and self.runtime_debug
315
+ elif vscrt in {'/MT', '-MT'}:
316
+ return (self.runtime_static or not self.static) and not self.runtime_debug
317
+ elif vscrt in {'/MTd', '-MTd'}:
318
+ return (self.runtime_static or not self.static) and self.runtime_debug
319
+
320
+ mlog.warning(f'Boost: unknown vscrt tag {vscrt}. This may cause the compilation to fail. Please consider reporting this as a bug.', once=True)
321
+ return True
322
+
323
+ def get_compiler_args(self) -> T.List[str]:
324
+ args: T.List[str] = []
325
+ if self.mod_name in boost_libraries:
326
+ libdef = boost_libraries[self.mod_name]
327
+ if self.static:
328
+ args += libdef.static
329
+ else:
330
+ args += libdef.shared
331
+ if self.mt:
332
+ args += libdef.multi
333
+ else:
334
+ args += libdef.single
335
+ return args
336
+
337
+ def get_link_args(self) -> T.List[str]:
338
+ return [self.path.as_posix()]
339
+
340
+ class BoostDependency(SystemDependency):
341
+ def __init__(self, environment: Environment, kwargs: T.Dict[str, T.Any]) -> None:
342
+ super().__init__('boost', environment, kwargs, language='cpp')
343
+ buildtype = environment.coredata.get_option(mesonlib.OptionKey('buildtype'))
344
+ assert isinstance(buildtype, str)
345
+ self.debug = buildtype.startswith('debug')
346
+ self.multithreading = kwargs.get('threading', 'multi') == 'multi'
347
+
348
+ self.boost_root: T.Optional[Path] = None
349
+ self.explicit_static = 'static' in kwargs
350
+
351
+ # Extract and validate modules
352
+ self.modules: T.List[str] = mesonlib.extract_as_list(kwargs, 'modules')
353
+ for i in self.modules:
354
+ if not isinstance(i, str):
355
+ raise DependencyException('Boost module argument is not a string.')
356
+ if i.startswith('boost_'):
357
+ raise DependencyException('Boost modules must be passed without the boost_ prefix')
358
+
359
+ self.modules_found: T.List[str] = []
360
+ self.modules_missing: T.List[str] = []
361
+
362
+ # Do we need threads?
363
+ if 'thread' in self.modules:
364
+ if not self._add_sub_dependency(threads_factory(environment, self.for_machine, {})):
365
+ self.is_found = False
366
+ return
367
+
368
+ # Try figuring out the architecture tag
369
+ self.arch = environment.machines[self.for_machine].cpu_family
370
+ self.arch = boost_arch_map.get(self.arch, None)
371
+
372
+ # First, look for paths specified in a machine file
373
+ props = self.env.properties[self.for_machine]
374
+ if any(x in self.env.properties[self.for_machine] for x in
375
+ ['boost_includedir', 'boost_librarydir', 'boost_root']):
376
+ self.detect_boost_machine_file(props)
377
+ return
378
+
379
+ # Finally, look for paths from .pc files and from searching the filesystem
380
+ self.detect_roots()
381
+
382
+ def check_and_set_roots(self, roots: T.List[Path], use_system: bool) -> None:
383
+ roots = list(mesonlib.OrderedSet(roots))
384
+ for j in roots:
385
+ # 1. Look for the boost headers (boost/version.hpp)
386
+ mlog.debug(f'Checking potential boost root {j.as_posix()}')
387
+ inc_dirs = self.detect_inc_dirs(j)
388
+ inc_dirs = sorted(inc_dirs, reverse=True) # Prefer the newer versions
389
+
390
+ # Early abort when boost is not found
391
+ if not inc_dirs:
392
+ continue
393
+
394
+ lib_dirs = self.detect_lib_dirs(j, use_system)
395
+ self.is_found = self.run_check(inc_dirs, lib_dirs)
396
+ if self.is_found:
397
+ self.boost_root = j
398
+ break
399
+
400
+ def detect_boost_machine_file(self, props: 'Properties') -> None:
401
+ """Detect boost with values in the machine file or environment.
402
+
403
+ The machine file values are defaulted to the environment values.
404
+ """
405
+ # XXX: if we had a TypedDict we wouldn't need this
406
+ incdir = props.get('boost_includedir')
407
+ assert incdir is None or isinstance(incdir, str)
408
+ libdir = props.get('boost_librarydir')
409
+ assert libdir is None or isinstance(libdir, str)
410
+
411
+ if incdir and libdir:
412
+ inc_dir = Path(incdir)
413
+ lib_dir = Path(libdir)
414
+
415
+ if not inc_dir.is_absolute() or not lib_dir.is_absolute():
416
+ raise DependencyException('Paths given for boost_includedir and boost_librarydir in machine file must be absolute')
417
+
418
+ mlog.debug('Trying to find boost with:')
419
+ mlog.debug(f' - boost_includedir = {inc_dir}')
420
+ mlog.debug(f' - boost_librarydir = {lib_dir}')
421
+
422
+ return self.detect_split_root(inc_dir, lib_dir)
423
+
424
+ elif incdir or libdir:
425
+ raise DependencyException('Both boost_includedir *and* boost_librarydir have to be set in your machine file (one is not enough)')
426
+
427
+ rootdir = props.get('boost_root')
428
+ # It shouldn't be possible to get here without something in boost_root
429
+ assert rootdir
430
+
431
+ raw_paths = mesonlib.stringlistify(rootdir)
432
+ paths = [Path(x) for x in raw_paths]
433
+ if paths and any(not x.is_absolute() for x in paths):
434
+ raise DependencyException('boost_root path given in machine file must be absolute')
435
+
436
+ self.check_and_set_roots(paths, use_system=False)
437
+
438
+ def run_check(self, inc_dirs: T.List[BoostIncludeDir], lib_dirs: T.List[Path]) -> bool:
439
+ mlog.debug(' - potential library dirs: {}'.format([x.as_posix() for x in lib_dirs]))
440
+ mlog.debug(' - potential include dirs: {}'.format([x.path.as_posix() for x in inc_dirs]))
441
+
442
+ # 2. Find all boost libraries
443
+ libs: T.List[BoostLibraryFile] = []
444
+ for i in lib_dirs:
445
+ libs = self.detect_libraries(i)
446
+ if libs:
447
+ mlog.debug(f' - found boost library dir: {i}')
448
+ # mlog.debug(' - raw library list:')
449
+ # for j in libs:
450
+ # mlog.debug(' - {}'.format(j))
451
+ break
452
+ libs = sorted(set(libs))
453
+
454
+ modules = ['boost_' + x for x in self.modules]
455
+ for inc in inc_dirs:
456
+ mlog.debug(f' - found boost {inc.version} include dir: {inc.path}')
457
+ f_libs = self.filter_libraries(libs, inc.version_lib)
458
+
459
+ mlog.debug(' - filtered library list:')
460
+ for j in f_libs:
461
+ mlog.debug(f' - {j}')
462
+
463
+ # 3. Select the libraries matching the requested modules
464
+ not_found: T.List[str] = []
465
+ selected_modules: T.List[BoostLibraryFile] = []
466
+ for mod in modules:
467
+ found = False
468
+ for l in f_libs:
469
+ if l.mod_name_matches(mod):
470
+ selected_modules += [l]
471
+ found = True
472
+ break
473
+ if not found:
474
+ not_found += [mod]
475
+
476
+ # log the result
477
+ mlog.debug(' - found:')
478
+ comp_args: T.List[str] = []
479
+ link_args: T.List[str] = []
480
+ for j in selected_modules:
481
+ c_args = j.get_compiler_args()
482
+ l_args = j.get_link_args()
483
+ mlog.debug(' - {:<24} link={} comp={}'.format(j.mod_name, str(l_args), str(c_args)))
484
+ comp_args += c_args
485
+ link_args += l_args
486
+
487
+ comp_args = list(mesonlib.OrderedSet(comp_args))
488
+ link_args = list(mesonlib.OrderedSet(link_args))
489
+
490
+ self.modules_found = [x.mod_name for x in selected_modules]
491
+ self.modules_found = [x[6:] for x in self.modules_found]
492
+ self.modules_found = sorted(set(self.modules_found))
493
+ self.modules_missing = not_found
494
+ self.modules_missing = [x[6:] for x in self.modules_missing]
495
+ self.modules_missing = sorted(set(self.modules_missing))
496
+
497
+ # if we found all modules we are done
498
+ if not not_found:
499
+ self.version = inc.version
500
+ self.compile_args = ['-I' + inc.path.as_posix()]
501
+ self.compile_args += comp_args
502
+ self.compile_args += self._extra_compile_args()
503
+ self.compile_args = list(mesonlib.OrderedSet(self.compile_args))
504
+ self.link_args = link_args
505
+ mlog.debug(f' - final compile args: {self.compile_args}')
506
+ mlog.debug(f' - final link args: {self.link_args}')
507
+ return True
508
+
509
+ # in case we missed something log it and try again
510
+ mlog.debug(' - NOT found:')
511
+ for mod in not_found:
512
+ mlog.debug(f' - {mod}')
513
+
514
+ return False
515
+
516
+ def detect_inc_dirs(self, root: Path) -> T.List[BoostIncludeDir]:
517
+ candidates: T.List[Path] = []
518
+ inc_root = root / 'include'
519
+
520
+ candidates += [root / 'boost']
521
+ candidates += [inc_root / 'boost']
522
+ if inc_root.is_dir():
523
+ for i in inc_root.iterdir():
524
+ if not i.is_dir() or not i.name.startswith('boost-'):
525
+ continue
526
+ candidates += [i / 'boost']
527
+ candidates = [x for x in candidates if x.is_dir()]
528
+ candidates = [x / 'version.hpp' for x in candidates]
529
+ candidates = [x for x in candidates if x.exists()]
530
+ return [self._include_dir_from_version_header(x) for x in candidates]
531
+
532
+ def detect_lib_dirs(self, root: Path, use_system: bool) -> T.List[Path]:
533
+ # First check the system include paths. Only consider those within the
534
+ # given root path
535
+
536
+ if use_system:
537
+ system_dirs_t = self.clib_compiler.get_library_dirs(self.env)
538
+ system_dirs = [Path(x) for x in system_dirs_t]
539
+ system_dirs = [x.resolve() for x in system_dirs if x.exists()]
540
+ system_dirs = [x for x in system_dirs if mesonlib.path_is_in_root(x, root)]
541
+ system_dirs = list(mesonlib.OrderedSet(system_dirs))
542
+
543
+ if system_dirs:
544
+ return system_dirs
545
+
546
+ # No system include paths were found --> fall back to manually looking
547
+ # for library dirs in root
548
+ dirs: T.List[Path] = []
549
+ subdirs: T.List[Path] = []
550
+ for i in root.iterdir():
551
+ if i.is_dir() and i.name.startswith('lib'):
552
+ dirs += [i]
553
+
554
+ # Some distros put libraries not directly inside /usr/lib but in /usr/lib/x86_64-linux-gnu
555
+ for i in dirs:
556
+ for j in i.iterdir():
557
+ if j.is_dir() and j.name.endswith('-linux-gnu'):
558
+ subdirs += [j]
559
+
560
+ # Filter out paths that don't match the target arch to avoid finding
561
+ # the wrong libraries. See https://github.com/mesonbuild/meson/issues/7110
562
+ if not self.arch:
563
+ return dirs + subdirs
564
+
565
+ arch_list_32 = ['32', 'i386']
566
+ arch_list_64 = ['64']
567
+
568
+ raw_list = dirs + subdirs
569
+ no_arch = [x for x in raw_list if not any(y in x.name for y in arch_list_32 + arch_list_64)]
570
+
571
+ matching_arch: T.List[Path] = []
572
+ if '32' in self.arch:
573
+ matching_arch = [x for x in raw_list if any(y in x.name for y in arch_list_32)]
574
+ elif '64' in self.arch:
575
+ matching_arch = [x for x in raw_list if any(y in x.name for y in arch_list_64)]
576
+
577
+ return sorted(matching_arch) + sorted(no_arch)
578
+
579
+ def filter_libraries(self, libs: T.List[BoostLibraryFile], lib_vers: str) -> T.List[BoostLibraryFile]:
580
+ # MSVC is very picky with the library tags
581
+ vscrt = ''
582
+ try:
583
+ crt_val = self.env.coredata.options[mesonlib.OptionKey('b_vscrt')].value
584
+ buildtype = self.env.coredata.options[mesonlib.OptionKey('buildtype')].value
585
+ vscrt = self.clib_compiler.get_crt_compile_args(crt_val, buildtype)[0]
586
+ except (KeyError, IndexError, AttributeError):
587
+ pass
588
+
589
+ # mlog.debug(' - static: {}'.format(self.static))
590
+ # mlog.debug(' - not explicit static: {}'.format(not self.explicit_static))
591
+ # mlog.debug(' - mt: {}'.format(self.multithreading))
592
+ # mlog.debug(' - version: {}'.format(lib_vers))
593
+ # mlog.debug(' - arch: {}'.format(self.arch))
594
+ # mlog.debug(' - vscrt: {}'.format(vscrt))
595
+ libs = [x for x in libs if x.static == self.static or not self.explicit_static]
596
+ libs = [x for x in libs if x.mt == self.multithreading]
597
+ libs = [x for x in libs if x.version_matches(lib_vers)]
598
+ libs = [x for x in libs if x.arch_matches(self.arch)]
599
+ libs = [x for x in libs if x.vscrt_matches(vscrt)]
600
+ libs = [x for x in libs if x.nvsuffix != 'dll'] # Only link to import libraries
601
+
602
+ # Only filter by debug when we are building in release mode. Debug
603
+ # libraries are automatically preferred through sorting otherwise.
604
+ if not self.debug:
605
+ libs = [x for x in libs if not x.debug]
606
+
607
+ # Take the abitag from the first library and filter by it. This
608
+ # ensures that we have a set of libraries that are always compatible.
609
+ if not libs:
610
+ return []
611
+ abitag = libs[0].abitag
612
+ libs = [x for x in libs if x.abitag == abitag]
613
+
614
+ return libs
615
+
616
+ def detect_libraries(self, libdir: Path) -> T.List[BoostLibraryFile]:
617
+ libs: T.Set[BoostLibraryFile] = set()
618
+ for i in libdir.iterdir():
619
+ if not i.is_file():
620
+ continue
621
+ if not any(i.name.startswith(x) for x in ['libboost_', 'boost_']):
622
+ continue
623
+ # Windows binaries from SourceForge ship with PDB files alongside
624
+ # DLLs (#8325). Ignore them.
625
+ if i.name.endswith('.pdb'):
626
+ continue
627
+
628
+ try:
629
+ libs.add(BoostLibraryFile(i.resolve()))
630
+ except UnknownFileException as e:
631
+ mlog.warning('Boost: ignoring unknown file {} under lib directory'.format(e.path.name))
632
+
633
+ return [x for x in libs if x.is_boost()] # Filter out no boost libraries
634
+
635
+ def detect_split_root(self, inc_dir: Path, lib_dir: Path) -> None:
636
+ boost_inc_dir = None
637
+ for j in [inc_dir / 'version.hpp', inc_dir / 'boost' / 'version.hpp']:
638
+ if j.is_file():
639
+ boost_inc_dir = self._include_dir_from_version_header(j)
640
+ break
641
+ if not boost_inc_dir:
642
+ self.is_found = False
643
+ return
644
+
645
+ self.is_found = self.run_check([boost_inc_dir], [lib_dir])
646
+
647
+ def detect_roots(self) -> None:
648
+ roots: T.List[Path] = []
649
+
650
+ # Try getting the BOOST_ROOT from a boost.pc if it exists. This primarily
651
+ # allows BoostDependency to find boost from Conan. See #5438
652
+ try:
653
+ boost_pc = PkgConfigDependency('boost', self.env, {'required': False})
654
+ if boost_pc.found():
655
+ boost_root = boost_pc.get_variable(pkgconfig='prefix')
656
+ if boost_root:
657
+ roots += [Path(boost_root)]
658
+ except DependencyException:
659
+ pass
660
+
661
+ # Add roots from system paths
662
+ inc_paths = [Path(x) for x in self.clib_compiler.get_default_include_dirs()]
663
+ inc_paths = [x.parent for x in inc_paths if x.exists()]
664
+ inc_paths = [x.resolve() for x in inc_paths]
665
+ roots += inc_paths
666
+
667
+ # Add system paths
668
+ if self.env.machines[self.for_machine].is_windows():
669
+ # Where boost built from source actually installs it
670
+ c_root = Path('C:/Boost')
671
+ if c_root.is_dir():
672
+ roots += [c_root]
673
+
674
+ # Where boost documentation says it should be
675
+ prog_files = Path('C:/Program Files/boost')
676
+ # Where boost prebuilt binaries are
677
+ local_boost = Path('C:/local')
678
+
679
+ candidates: T.List[Path] = []
680
+ if prog_files.is_dir():
681
+ candidates += [*prog_files.iterdir()]
682
+ if local_boost.is_dir():
683
+ candidates += [*local_boost.iterdir()]
684
+
685
+ roots += [x for x in candidates if x.name.lower().startswith('boost') and x.is_dir()]
686
+ else:
687
+ tmp: T.List[Path] = []
688
+
689
+ # Add some default system paths
690
+ tmp += [Path('/opt/local')]
691
+ tmp += [Path('/usr/local/opt/boost')]
692
+ tmp += [Path('/usr/local')]
693
+ tmp += [Path('/usr')]
694
+
695
+ # Cleanup paths
696
+ tmp = [x for x in tmp if x.is_dir()]
697
+ tmp = [x.resolve() for x in tmp]
698
+ roots += tmp
699
+
700
+ self.check_and_set_roots(roots, use_system=True)
701
+
702
+ def log_details(self) -> str:
703
+ res = ''
704
+ if self.modules_found:
705
+ res += 'found: ' + ', '.join(self.modules_found)
706
+ if self.modules_missing:
707
+ if res:
708
+ res += ' | '
709
+ res += 'missing: ' + ', '.join(self.modules_missing)
710
+ return res
711
+
712
+ def log_info(self) -> str:
713
+ if self.boost_root:
714
+ return self.boost_root.as_posix()
715
+ return ''
716
+
717
+ def _include_dir_from_version_header(self, hfile: Path) -> BoostIncludeDir:
718
+ # Extract the version with a regex. Using clib_compiler.get_define would
719
+ # also work, however, this is slower (since it the compiler has to be
720
+ # invoked) and overkill since the layout of the header is always the same.
721
+ assert hfile.exists()
722
+ raw = hfile.read_text(encoding='utf-8')
723
+ m = re.search(r'#define\s+BOOST_VERSION\s+([0-9]+)', raw)
724
+ if not m:
725
+ mlog.debug(f'Failed to extract version information from {hfile}')
726
+ return BoostIncludeDir(hfile.parents[1], 0)
727
+ return BoostIncludeDir(hfile.parents[1], int(m.group(1)))
728
+
729
+ def _extra_compile_args(self) -> T.List[str]:
730
+ # BOOST_ALL_DYN_LINK should not be required with the known defines below
731
+ return ['-DBOOST_ALL_NO_LIB'] # Disable automatic linking
732
+
733
+ packages['boost'] = BoostDependency
734
+
735
+ # See https://www.boost.org/doc/libs/1_72_0/more/getting_started/unix-variants.html#library-naming
736
+ # See https://mesonbuild.com/Reference-tables.html#cpu-families
737
+ boost_arch_map = {
738
+ 'aarch64': 'a64',
739
+ 'arc': 'a32',
740
+ 'arm': 'a32',
741
+ 'ia64': 'i64',
742
+ 'mips': 'm32',
743
+ 'mips64': 'm64',
744
+ 'ppc': 'p32',
745
+ 'ppc64': 'p64',
746
+ 'sparc': 's32',
747
+ 'sparc64': 's64',
748
+ 'x86': 'x32',
749
+ 'x86_64': 'x64',
750
+ }
751
+
752
+
753
+ #### ---- BEGIN GENERATED ---- ####
754
+ # #
755
+ # Generated with tools/boost_names.py:
756
+ # - boost version: 1.73.0
757
+ # - modules found: 159
758
+ # - libraries found: 43
759
+ #
760
+
761
+ class BoostLibrary():
762
+ def __init__(self, name: str, shared: T.List[str], static: T.List[str], single: T.List[str], multi: T.List[str]):
763
+ self.name = name
764
+ self.shared = shared
765
+ self.static = static
766
+ self.single = single
767
+ self.multi = multi
768
+
769
+ class BoostModule():
770
+ def __init__(self, name: str, key: str, desc: str, libs: T.List[str]):
771
+ self.name = name
772
+ self.key = key
773
+ self.desc = desc
774
+ self.libs = libs
775
+
776
+
777
+ # dict of all know libraries with additional compile options
778
+ boost_libraries = {
779
+ 'boost_atomic': BoostLibrary(
780
+ name='boost_atomic',
781
+ shared=['-DBOOST_ATOMIC_DYN_LINK=1'],
782
+ static=['-DBOOST_ATOMIC_STATIC_LINK=1'],
783
+ single=[],
784
+ multi=[],
785
+ ),
786
+ 'boost_chrono': BoostLibrary(
787
+ name='boost_chrono',
788
+ shared=['-DBOOST_CHRONO_DYN_LINK=1'],
789
+ static=['-DBOOST_CHRONO_STATIC_LINK=1'],
790
+ single=['-DBOOST_CHRONO_THREAD_DISABLED'],
791
+ multi=[],
792
+ ),
793
+ 'boost_container': BoostLibrary(
794
+ name='boost_container',
795
+ shared=['-DBOOST_CONTAINER_DYN_LINK=1'],
796
+ static=['-DBOOST_CONTAINER_STATIC_LINK=1'],
797
+ single=[],
798
+ multi=[],
799
+ ),
800
+ 'boost_context': BoostLibrary(
801
+ name='boost_context',
802
+ shared=['-DBOOST_CONTEXT_DYN_LINK=1'],
803
+ static=[],
804
+ single=[],
805
+ multi=[],
806
+ ),
807
+ 'boost_contract': BoostLibrary(
808
+ name='boost_contract',
809
+ shared=['-DBOOST_CONTRACT_DYN_LINK'],
810
+ static=['-DBOOST_CONTRACT_STATIC_LINK'],
811
+ single=['-DBOOST_CONTRACT_DISABLE_THREADS'],
812
+ multi=[],
813
+ ),
814
+ 'boost_coroutine': BoostLibrary(
815
+ name='boost_coroutine',
816
+ shared=['-DBOOST_COROUTINES_DYN_LINK=1'],
817
+ static=[],
818
+ single=[],
819
+ multi=[],
820
+ ),
821
+ 'boost_date_time': BoostLibrary(
822
+ name='boost_date_time',
823
+ shared=['-DBOOST_DATE_TIME_DYN_LINK=1'],
824
+ static=[],
825
+ single=[],
826
+ multi=[],
827
+ ),
828
+ 'boost_exception': BoostLibrary(
829
+ name='boost_exception',
830
+ shared=[],
831
+ static=[],
832
+ single=[],
833
+ multi=[],
834
+ ),
835
+ 'boost_fiber': BoostLibrary(
836
+ name='boost_fiber',
837
+ shared=['-DBOOST_FIBERS_DYN_LINK=1'],
838
+ static=[],
839
+ single=[],
840
+ multi=[],
841
+ ),
842
+ 'boost_fiber_numa': BoostLibrary(
843
+ name='boost_fiber_numa',
844
+ shared=['-DBOOST_FIBERS_DYN_LINK=1'],
845
+ static=[],
846
+ single=[],
847
+ multi=[],
848
+ ),
849
+ 'boost_filesystem': BoostLibrary(
850
+ name='boost_filesystem',
851
+ shared=['-DBOOST_FILESYSTEM_DYN_LINK=1'],
852
+ static=['-DBOOST_FILESYSTEM_STATIC_LINK=1'],
853
+ single=[],
854
+ multi=[],
855
+ ),
856
+ 'boost_graph': BoostLibrary(
857
+ name='boost_graph',
858
+ shared=[],
859
+ static=[],
860
+ single=[],
861
+ multi=[],
862
+ ),
863
+ 'boost_iostreams': BoostLibrary(
864
+ name='boost_iostreams',
865
+ shared=['-DBOOST_IOSTREAMS_DYN_LINK=1'],
866
+ static=[],
867
+ single=[],
868
+ multi=[],
869
+ ),
870
+ 'boost_locale': BoostLibrary(
871
+ name='boost_locale',
872
+ shared=[],
873
+ static=[],
874
+ single=[],
875
+ multi=[],
876
+ ),
877
+ 'boost_log': BoostLibrary(
878
+ name='boost_log',
879
+ shared=['-DBOOST_LOG_DYN_LINK=1'],
880
+ static=[],
881
+ single=['-DBOOST_LOG_NO_THREADS'],
882
+ multi=[],
883
+ ),
884
+ 'boost_log_setup': BoostLibrary(
885
+ name='boost_log_setup',
886
+ shared=['-DBOOST_LOG_SETUP_DYN_LINK=1'],
887
+ static=[],
888
+ single=['-DBOOST_LOG_NO_THREADS'],
889
+ multi=[],
890
+ ),
891
+ 'boost_math_c99': BoostLibrary(
892
+ name='boost_math_c99',
893
+ shared=[],
894
+ static=[],
895
+ single=[],
896
+ multi=[],
897
+ ),
898
+ 'boost_math_c99f': BoostLibrary(
899
+ name='boost_math_c99f',
900
+ shared=[],
901
+ static=[],
902
+ single=[],
903
+ multi=[],
904
+ ),
905
+ 'boost_math_c99l': BoostLibrary(
906
+ name='boost_math_c99l',
907
+ shared=[],
908
+ static=[],
909
+ single=[],
910
+ multi=[],
911
+ ),
912
+ 'boost_math_tr1': BoostLibrary(
913
+ name='boost_math_tr1',
914
+ shared=[],
915
+ static=[],
916
+ single=[],
917
+ multi=[],
918
+ ),
919
+ 'boost_math_tr1f': BoostLibrary(
920
+ name='boost_math_tr1f',
921
+ shared=[],
922
+ static=[],
923
+ single=[],
924
+ multi=[],
925
+ ),
926
+ 'boost_math_tr1l': BoostLibrary(
927
+ name='boost_math_tr1l',
928
+ shared=[],
929
+ static=[],
930
+ single=[],
931
+ multi=[],
932
+ ),
933
+ 'boost_mpi': BoostLibrary(
934
+ name='boost_mpi',
935
+ shared=[],
936
+ static=[],
937
+ single=[],
938
+ multi=[],
939
+ ),
940
+ 'boost_nowide': BoostLibrary(
941
+ name='boost_nowide',
942
+ shared=['-DBOOST_NOWIDE_DYN_LINK=1'],
943
+ static=[],
944
+ single=[],
945
+ multi=[],
946
+ ),
947
+ 'boost_prg_exec_monitor': BoostLibrary(
948
+ name='boost_prg_exec_monitor',
949
+ shared=['-DBOOST_TEST_DYN_LINK=1'],
950
+ static=[],
951
+ single=[],
952
+ multi=[],
953
+ ),
954
+ 'boost_program_options': BoostLibrary(
955
+ name='boost_program_options',
956
+ shared=[],
957
+ static=[],
958
+ single=[],
959
+ multi=[],
960
+ ),
961
+ 'boost_random': BoostLibrary(
962
+ name='boost_random',
963
+ shared=['-DBOOST_RANDOM_DYN_LINK'],
964
+ static=[],
965
+ single=[],
966
+ multi=[],
967
+ ),
968
+ 'boost_regex': BoostLibrary(
969
+ name='boost_regex',
970
+ shared=[],
971
+ static=[],
972
+ single=[],
973
+ multi=[],
974
+ ),
975
+ 'boost_serialization': BoostLibrary(
976
+ name='boost_serialization',
977
+ shared=[],
978
+ static=[],
979
+ single=[],
980
+ multi=[],
981
+ ),
982
+ 'boost_stacktrace_addr2line': BoostLibrary(
983
+ name='boost_stacktrace_addr2line',
984
+ shared=[],
985
+ static=[],
986
+ single=[],
987
+ multi=[],
988
+ ),
989
+ 'boost_stacktrace_backtrace': BoostLibrary(
990
+ name='boost_stacktrace_backtrace',
991
+ shared=[],
992
+ static=[],
993
+ single=[],
994
+ multi=[],
995
+ ),
996
+ 'boost_stacktrace_basic': BoostLibrary(
997
+ name='boost_stacktrace_basic',
998
+ shared=[],
999
+ static=[],
1000
+ single=[],
1001
+ multi=[],
1002
+ ),
1003
+ 'boost_stacktrace_noop': BoostLibrary(
1004
+ name='boost_stacktrace_noop',
1005
+ shared=[],
1006
+ static=[],
1007
+ single=[],
1008
+ multi=[],
1009
+ ),
1010
+ 'boost_stacktrace_windbg': BoostLibrary(
1011
+ name='boost_stacktrace_windbg',
1012
+ shared=[],
1013
+ static=[],
1014
+ single=[],
1015
+ multi=[],
1016
+ ),
1017
+ 'boost_stacktrace_windbg_cached': BoostLibrary(
1018
+ name='boost_stacktrace_windbg_cached',
1019
+ shared=[],
1020
+ static=[],
1021
+ single=[],
1022
+ multi=[],
1023
+ ),
1024
+ 'boost_system': BoostLibrary(
1025
+ name='boost_system',
1026
+ shared=['-DBOOST_SYSTEM_DYN_LINK=1'],
1027
+ static=['-DBOOST_SYSTEM_STATIC_LINK=1'],
1028
+ single=[],
1029
+ multi=[],
1030
+ ),
1031
+ 'boost_test_exec_monitor': BoostLibrary(
1032
+ name='boost_test_exec_monitor',
1033
+ shared=['-DBOOST_TEST_DYN_LINK=1'],
1034
+ static=[],
1035
+ single=[],
1036
+ multi=[],
1037
+ ),
1038
+ 'boost_thread': BoostLibrary(
1039
+ name='boost_thread',
1040
+ shared=['-DBOOST_THREAD_BUILD_DLL=1', '-DBOOST_THREAD_USE_DLL=1'],
1041
+ static=['-DBOOST_THREAD_BUILD_LIB=1', '-DBOOST_THREAD_USE_LIB=1'],
1042
+ single=[],
1043
+ multi=[],
1044
+ ),
1045
+ 'boost_timer': BoostLibrary(
1046
+ name='boost_timer',
1047
+ shared=['-DBOOST_TIMER_DYN_LINK=1'],
1048
+ static=['-DBOOST_TIMER_STATIC_LINK=1'],
1049
+ single=[],
1050
+ multi=[],
1051
+ ),
1052
+ 'boost_type_erasure': BoostLibrary(
1053
+ name='boost_type_erasure',
1054
+ shared=['-DBOOST_TYPE_ERASURE_DYN_LINK'],
1055
+ static=[],
1056
+ single=[],
1057
+ multi=[],
1058
+ ),
1059
+ 'boost_unit_test_framework': BoostLibrary(
1060
+ name='boost_unit_test_framework',
1061
+ shared=['-DBOOST_TEST_DYN_LINK=1'],
1062
+ static=[],
1063
+ single=[],
1064
+ multi=[],
1065
+ ),
1066
+ 'boost_wave': BoostLibrary(
1067
+ name='boost_wave',
1068
+ shared=[],
1069
+ static=[],
1070
+ single=[],
1071
+ multi=[],
1072
+ ),
1073
+ 'boost_wserialization': BoostLibrary(
1074
+ name='boost_wserialization',
1075
+ shared=[],
1076
+ static=[],
1077
+ single=[],
1078
+ multi=[],
1079
+ ),
1080
+ }
1081
+
1082
+ # #
1083
+ #### ---- END GENERATED ---- ####