frida 16.2.0 → 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,386 @@
1
+ from __future__ import annotations
2
+
3
+ from .interpreterobjects import extract_required_kwarg
4
+ from .. import mlog
5
+ from .. import dependencies
6
+ from .. import build
7
+ from ..wrap import WrapMode
8
+ from ..mesonlib import OptionKey, extract_as_list, stringlistify, version_compare_many, listify
9
+ from ..dependencies import Dependency, DependencyException, NotFoundDependency
10
+ from ..interpreterbase import (MesonInterpreterObject, FeatureNew,
11
+ InterpreterException, InvalidArguments)
12
+
13
+ import typing as T
14
+ if T.TYPE_CHECKING:
15
+ from .interpreter import Interpreter
16
+ from ..interpreterbase import TYPE_nkwargs, TYPE_nvar
17
+ from .interpreterobjects import SubprojectHolder
18
+ from ..utils.universal import MachineChoice
19
+
20
+
21
+ class DependencyFallbacksHolder(MesonInterpreterObject):
22
+ def __init__(self, interpreter: 'Interpreter', names: T.List[str], for_machine: MachineChoice,
23
+ allow_fallback: T.Optional[bool] = None,
24
+ default_options: T.Optional[T.Dict[OptionKey, str]] = None) -> None:
25
+ super().__init__(subproject=interpreter.subproject)
26
+ self.interpreter = interpreter
27
+ self.subproject = interpreter.subproject
28
+ self.for_machine = for_machine
29
+ self.coredata = interpreter.coredata
30
+ self.build = interpreter.build
31
+ self.environment = interpreter.environment
32
+ self.wrap_resolver = interpreter.environment.wrap_resolver
33
+ self.allow_fallback = allow_fallback
34
+ self.subproject_name: T.Optional[str] = None
35
+ self.subproject_varname: T.Optional[str] = None
36
+ self.subproject_kwargs = {'default_options': default_options or {}}
37
+ self.names: T.List[str] = []
38
+ self.forcefallback: bool = False
39
+ self.nofallback: bool = False
40
+ for name in names:
41
+ if not name:
42
+ raise InterpreterException('dependency_fallbacks empty name \'\' is not allowed')
43
+ if '<' in name or '>' in name or '=' in name:
44
+ raise InvalidArguments('Characters <, > and = are forbidden in dependency names. To specify'
45
+ 'version\n requirements use the \'version\' keyword argument instead.')
46
+ if name in self.names:
47
+ raise InterpreterException(f'dependency_fallbacks name {name!r} is duplicated')
48
+ self.names.append(name)
49
+ self._display_name = self.names[0] if self.names else '(anonymous)'
50
+
51
+ def set_fallback(self, fbinfo: T.Optional[T.Union[T.List[str], str]]) -> None:
52
+ # Legacy: This converts dependency()'s fallback kwargs.
53
+ if fbinfo is None:
54
+ return
55
+ if self.allow_fallback is not None:
56
+ raise InvalidArguments('"fallback" and "allow_fallback" arguments are mutually exclusive')
57
+ fbinfo = stringlistify(fbinfo)
58
+ if len(fbinfo) == 0:
59
+ # dependency('foo', fallback: []) is the same as dependency('foo', allow_fallback: false)
60
+ self.allow_fallback = False
61
+ return
62
+ if len(fbinfo) == 1:
63
+ FeatureNew.single_use('Fallback without variable name', '0.53.0', self.subproject)
64
+ subp_name, varname = fbinfo[0], None
65
+ elif len(fbinfo) == 2:
66
+ subp_name, varname = fbinfo
67
+ else:
68
+ raise InterpreterException('Fallback info must have one or two items.')
69
+ self._subproject_impl(subp_name, varname)
70
+
71
+ def _subproject_impl(self, subp_name: str, varname: str) -> None:
72
+ assert self.subproject_name is None
73
+ self.subproject_name = subp_name
74
+ self.subproject_varname = varname
75
+
76
+ def _do_dependency_cache(self, kwargs: TYPE_nkwargs, func_args: TYPE_nvar, func_kwargs: TYPE_nkwargs) -> T.Optional[Dependency]:
77
+ name = func_args[0]
78
+ cached_dep = self._get_cached_dep(name, kwargs)
79
+ if cached_dep:
80
+ self._verify_fallback_consistency(cached_dep)
81
+ return cached_dep
82
+
83
+ def _do_dependency(self, kwargs: TYPE_nkwargs, func_args: TYPE_nvar, func_kwargs: TYPE_nkwargs) -> T.Optional[Dependency]:
84
+ # Note that there is no df.dependency() method, this is called for names
85
+ # given as positional arguments to dependency_fallbacks(name1, ...).
86
+ # We use kwargs from the dependency() function, for things like version,
87
+ # module, etc.
88
+ name = func_args[0]
89
+ self._handle_featurenew_dependencies(name)
90
+ dep = dependencies.find_external_dependency(name, self.environment, kwargs)
91
+ if dep.found():
92
+ identifier = dependencies.get_dep_identifier(name, kwargs)
93
+ self.coredata.deps[self.for_machine].put(identifier, dep)
94
+ return dep
95
+ return None
96
+
97
+ def _do_existing_subproject(self, kwargs: TYPE_nkwargs, func_args: TYPE_nvar, func_kwargs: TYPE_nkwargs) -> T.Optional[Dependency]:
98
+ subp_name = func_args[0]
99
+ varname = self.subproject_varname
100
+ if subp_name and self._get_subproject(subp_name):
101
+ return self._get_subproject_dep(subp_name, varname, kwargs)
102
+ return None
103
+
104
+ def _do_subproject(self, kwargs: TYPE_nkwargs, func_args: TYPE_nvar, func_kwargs: TYPE_nkwargs) -> T.Optional[Dependency]:
105
+ if self.forcefallback:
106
+ mlog.log('Looking for a fallback subproject for the dependency',
107
+ mlog.bold(self._display_name), 'because:\nUse of fallback dependencies is forced.')
108
+ elif self.nofallback:
109
+ mlog.log('Not looking for a fallback subproject for the dependency',
110
+ mlog.bold(self._display_name), 'because:\nUse of fallback dependencies is disabled.')
111
+ return None
112
+ else:
113
+ mlog.log('Looking for a fallback subproject for the dependency',
114
+ mlog.bold(self._display_name))
115
+
116
+ # dependency('foo', static: true) should implicitly add
117
+ # default_options: ['default_library=static']
118
+ static = kwargs.get('static')
119
+ default_options = func_kwargs.get('default_options', {})
120
+ if static is not None and 'default_library' not in default_options:
121
+ default_library = 'static' if static else 'shared'
122
+ mlog.log(f'Building fallback subproject with default_library={default_library}')
123
+ default_options[OptionKey('default_library')] = default_library
124
+ func_kwargs['default_options'] = default_options
125
+
126
+ # Configure the subproject
127
+ subp_name = self.subproject_name
128
+ varname = self.subproject_varname
129
+ func_kwargs.setdefault('version', [])
130
+ if 'default_options' in kwargs and isinstance(kwargs['default_options'], str):
131
+ func_kwargs['default_options'] = listify(kwargs['default_options'])
132
+ self.interpreter.do_subproject(subp_name, func_kwargs)
133
+ return self._get_subproject_dep(subp_name, varname, kwargs)
134
+
135
+ def _get_subproject(self, subp_name: str) -> T.Optional[SubprojectHolder]:
136
+ sub = self.interpreter.subprojects[self.for_machine].get(subp_name)
137
+ if sub and sub.found():
138
+ return sub
139
+ return None
140
+
141
+ def _get_subproject_dep(self, subp_name: str, varname: str, kwargs: TYPE_nkwargs) -> T.Optional[Dependency]:
142
+ # Verify the subproject is found
143
+ subproject = self._get_subproject(subp_name)
144
+ if not subproject:
145
+ self._log_found(False, subproject=subp_name, extra_args=[mlog.blue('(subproject failed to configure)')])
146
+ return None
147
+
148
+ # The subproject has been configured. If for any reason the dependency
149
+ # cannot be found in this subproject we have to return not-found object
150
+ # instead of None, because we don't want to continue the lookup on the
151
+ # system.
152
+
153
+ # Check if the subproject overridden at least one of the names we got.
154
+ cached_dep = None
155
+ for name in self.names:
156
+ cached_dep = self._get_cached_dep(name, kwargs)
157
+ if cached_dep:
158
+ break
159
+
160
+ # If we have cached_dep we did all the checks and logging already in
161
+ # self._get_cached_dep().
162
+ if cached_dep:
163
+ self._verify_fallback_consistency(cached_dep)
164
+ return cached_dep
165
+
166
+ # Legacy: Use the variable name if provided instead of relying on the
167
+ # subproject to override one of our dependency names
168
+ if not varname:
169
+ # If no variable name is specified, check if the wrap file has one.
170
+ # If the wrap file has a variable name, better use it because the
171
+ # subproject most probably is not using meson.override_dependency().
172
+ for name in self.names:
173
+ varname = self.wrap_resolver.get_varname(subp_name, name)
174
+ if varname:
175
+ break
176
+ if not varname:
177
+ mlog.warning(f'Subproject {subp_name!r} did not override {self._display_name!r} dependency and no variable name specified')
178
+ self._log_found(False, subproject=subproject.subdir)
179
+ return self._notfound_dependency()
180
+
181
+ var_dep = self._get_subproject_variable(subproject, varname) or self._notfound_dependency()
182
+ if not var_dep.found():
183
+ self._log_found(False, subproject=subproject.subdir)
184
+ return var_dep
185
+
186
+ wanted = stringlistify(kwargs.get('version', []))
187
+ found = var_dep.get_version()
188
+ if not self._check_version(wanted, found):
189
+ self._log_found(False, subproject=subproject.subdir,
190
+ extra_args=['found', mlog.normal_cyan(found), 'but need:',
191
+ mlog.bold(', '.join([f"'{e}'" for e in wanted]))])
192
+ return self._notfound_dependency()
193
+
194
+ self._log_found(True, subproject=subproject.subdir,
195
+ extra_args=[mlog.normal_cyan(found) if found else None])
196
+ return var_dep
197
+
198
+ def _log_found(self, found: bool, extra_args: T.Optional[mlog.TV_LoggableList] = None,
199
+ subproject: T.Optional[str] = None) -> None:
200
+ msg: mlog.TV_LoggableList = [
201
+ 'Dependency', mlog.bold(self._display_name),
202
+ 'for', mlog.bold(self.for_machine.get_lower_case_name()), 'machine']
203
+ if subproject:
204
+ msg.extend(['from subproject', subproject])
205
+ msg.extend(['found:', mlog.red('NO') if not found else mlog.green('YES')])
206
+ if extra_args:
207
+ msg.extend(extra_args)
208
+
209
+ mlog.log(*msg)
210
+
211
+ def _get_cached_dep(self, name: str, kwargs: TYPE_nkwargs) -> T.Optional[Dependency]:
212
+ # Unlike other methods, this one returns not-found dependency instead
213
+ # of None in the case the dependency is cached as not-found, or if cached
214
+ # version does not match. In that case we don't want to continue with
215
+ # other candidates.
216
+ identifier = dependencies.get_dep_identifier(name, kwargs)
217
+ wanted_vers = stringlistify(kwargs.get('version', []))
218
+
219
+ override = self.build.dependency_overrides[self.for_machine].get(identifier)
220
+ if not override and self.subproject_name:
221
+ identifier_without_modules = tuple((k, v) for k, v in identifier if k not in {'modules', 'optional_modules'})
222
+ if identifier_without_modules != identifier:
223
+ override = self.build.dependency_overrides[self.for_machine].get(identifier_without_modules)
224
+ if override:
225
+ info = [mlog.blue('(overridden)' if override.explicit else '(cached)')]
226
+ cached_dep = override.dep
227
+ # We don't implicitly override not-found dependencies, but user could
228
+ # have explicitly called meson.override_dependency() with a not-found
229
+ # dep.
230
+ if not cached_dep.found():
231
+ self._log_found(False, extra_args=info)
232
+ return cached_dep
233
+ elif self.forcefallback and self.subproject_name:
234
+ cached_dep = None
235
+ else:
236
+ info = [mlog.blue('(cached)')]
237
+ cached_dep = self.coredata.deps[self.for_machine].get(identifier)
238
+
239
+ if cached_dep:
240
+ found_vers = cached_dep.get_version()
241
+ if not self._check_version(wanted_vers, found_vers):
242
+ if not override:
243
+ # We cached this dependency on disk from a previous run,
244
+ # but it could got updated on the system in the meantime.
245
+ return None
246
+ self._log_found(
247
+ False, extra_args=[
248
+ 'found', mlog.normal_cyan(found_vers), 'but need:',
249
+ mlog.bold(', '.join([f"'{e}'" for e in wanted_vers])),
250
+ *info])
251
+ return self._notfound_dependency()
252
+ if found_vers:
253
+ info = [mlog.normal_cyan(found_vers), *info]
254
+ self._log_found(True, extra_args=info)
255
+ return cached_dep
256
+ return None
257
+
258
+ def _get_subproject_variable(self, subproject: SubprojectHolder, varname: str) -> T.Optional[Dependency]:
259
+ try:
260
+ var_dep = subproject.get_variable_method([varname], {})
261
+ except InvalidArguments:
262
+ var_dep = None
263
+ if not isinstance(var_dep, Dependency):
264
+ mlog.warning(f'Variable {varname!r} in the subproject {subproject.subdir!r} is',
265
+ 'not found' if var_dep is None else 'not a dependency object')
266
+ return None
267
+ return var_dep
268
+
269
+ def _verify_fallback_consistency(self, cached_dep: Dependency) -> None:
270
+ subp_name = self.subproject_name
271
+ varname = self.subproject_varname
272
+ subproject = self._get_subproject(subp_name)
273
+ if subproject and varname:
274
+ var_dep = self._get_subproject_variable(subproject, varname)
275
+ if var_dep and cached_dep.found() and var_dep != cached_dep:
276
+ mlog.warning(f'Inconsistency: Subproject has overridden the dependency with another variable than {varname!r}')
277
+
278
+ def _handle_featurenew_dependencies(self, name: str) -> None:
279
+ 'Do a feature check on dependencies used by this subproject'
280
+ if name == 'mpi':
281
+ FeatureNew.single_use('MPI Dependency', '0.42.0', self.subproject)
282
+ elif name == 'pcap':
283
+ FeatureNew.single_use('Pcap Dependency', '0.42.0', self.subproject)
284
+ elif name == 'vulkan':
285
+ FeatureNew.single_use('Vulkan Dependency', '0.42.0', self.subproject)
286
+ elif name == 'libwmf':
287
+ FeatureNew.single_use('LibWMF Dependency', '0.44.0', self.subproject)
288
+ elif name == 'openmp':
289
+ FeatureNew.single_use('OpenMP Dependency', '0.46.0', self.subproject)
290
+
291
+ def _notfound_dependency(self) -> NotFoundDependency:
292
+ return NotFoundDependency(self.names[0] if self.names else '', self.environment)
293
+
294
+ @staticmethod
295
+ def _check_version(wanted: T.List[str], found: str) -> bool:
296
+ if not wanted:
297
+ return True
298
+ return not (found == 'undefined' or not version_compare_many(found, wanted)[0])
299
+
300
+ def _get_candidates(self) -> T.List[T.Tuple[T.Callable[[TYPE_nkwargs, TYPE_nvar, TYPE_nkwargs], T.Optional[Dependency]], TYPE_nvar, TYPE_nkwargs]]:
301
+ candidates = []
302
+ # 1. check if any of the names is cached already.
303
+ for name in self.names:
304
+ candidates.append((self._do_dependency_cache, [name], {}))
305
+ # 2. check if the subproject fallback has already been configured.
306
+ if self.subproject_name:
307
+ candidates.append((self._do_existing_subproject, [self.subproject_name], self.subproject_kwargs))
308
+ # 3. check external dependency if we are not forced to use subproject
309
+ if not self.forcefallback or not self.subproject_name:
310
+ for name in self.names:
311
+ candidates.append((self._do_dependency, [name], {}))
312
+ # 4. configure the subproject
313
+ if self.subproject_name:
314
+ candidates.append((self._do_subproject, [self.subproject_name], self.subproject_kwargs))
315
+ return candidates
316
+
317
+ def lookup(self, kwargs: TYPE_nkwargs, force_fallback: bool = False) -> Dependency:
318
+ mods = extract_as_list(kwargs, 'modules')
319
+ if mods:
320
+ self._display_name += ' (modules: {})'.format(', '.join(str(i) for i in mods))
321
+
322
+ disabled, required, feature = extract_required_kwarg(kwargs, self.subproject)
323
+ if disabled:
324
+ mlog.log('Dependency', mlog.bold(self._display_name),
325
+ 'for', mlog.bold(self.for_machine.get_lower_case_name()), 'machine',
326
+ 'skipped: feature', mlog.bold(feature), 'disabled')
327
+ return self._notfound_dependency()
328
+
329
+ # Check if usage of the subproject fallback is forced
330
+ wrap_mode = self.coredata.get_option(OptionKey('wrap_mode'))
331
+ assert isinstance(wrap_mode, WrapMode), 'for mypy'
332
+ force_fallback_for = self.coredata.get_option(OptionKey('force_fallback_for'))
333
+ assert isinstance(force_fallback_for, list), 'for mypy'
334
+ self.nofallback = wrap_mode == WrapMode.nofallback
335
+ self.forcefallback = (force_fallback or
336
+ wrap_mode == WrapMode.forcefallback or
337
+ any(name in force_fallback_for for name in self.names) or
338
+ self.subproject_name in force_fallback_for)
339
+
340
+ # Add an implicit subproject fallback if none has been set explicitly,
341
+ # unless implicit fallback is not allowed.
342
+ # Legacy: self.allow_fallback can be None when that kwarg is not defined
343
+ # in dependency('name'). In that case we don't want to use implicit
344
+ # fallback when required is false because user will typically fallback
345
+ # manually using cc.find_library() for example.
346
+ if not self.subproject_name and self.allow_fallback is not False:
347
+ for name in self.names:
348
+ subp_name, varname = self.wrap_resolver.find_dep_provider(name)
349
+ if subp_name:
350
+ self.forcefallback |= subp_name in force_fallback_for
351
+ if self.forcefallback or self.allow_fallback is True or required or self._get_subproject(subp_name):
352
+ self._subproject_impl(subp_name, varname)
353
+ break
354
+
355
+ candidates = self._get_candidates()
356
+
357
+ # writing just "dependency('')" is an error, because it can only fail
358
+ if not candidates and required:
359
+ raise InvalidArguments('Dependency is required but has no candidates.')
360
+
361
+ # Try all candidates, only the last one is really required.
362
+ last = len(candidates) - 1
363
+ for i, item in enumerate(candidates):
364
+ func, func_args, func_kwargs = item
365
+ func_kwargs['required'] = required and (i == last)
366
+ func_kwargs['for_machine'] = self.for_machine
367
+ kwargs['required'] = required and (i == last)
368
+ dep = func(kwargs, func_args, func_kwargs)
369
+ if dep and dep.found():
370
+ # Override this dependency to have consistent results in subsequent
371
+ # dependency lookups.
372
+ for name in self.names:
373
+ identifier = dependencies.get_dep_identifier(name, kwargs)
374
+ if identifier not in self.build.dependency_overrides[self.for_machine]:
375
+ self.build.dependency_overrides[self.for_machine][identifier] = \
376
+ build.DependencyOverride(dep, self.interpreter.current_node, explicit=False)
377
+ return dep
378
+ elif required and (dep or i == last):
379
+ # This was the last candidate or the dependency has been cached
380
+ # as not-found, or cached dependency version does not match,
381
+ # otherwise func() would have returned None instead.
382
+ raise DependencyException(f'Dependency {self._display_name!r} is required but not found.')
383
+ elif dep:
384
+ # Same as above, but the dependency is not required.
385
+ return dep
386
+ return self._notfound_dependency()