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,431 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2022 The Meson development team
3
+
4
+ from __future__ import annotations
5
+
6
+ import functools, json, os, textwrap
7
+ from pathlib import Path
8
+ import typing as T
9
+
10
+ from .. import mesonlib, mlog
11
+ from .base import process_method_kw, DependencyException, DependencyMethods, DependencyTypeName, ExternalDependency, SystemDependency
12
+ from .configtool import ConfigToolDependency
13
+ from .detect import packages
14
+ from .factory import DependencyFactory
15
+ from .framework import ExtraFrameworkDependency
16
+ from .pkgconfig import PkgConfigDependency
17
+ from ..environment import detect_cpu_family
18
+ from ..programs import ExternalProgram
19
+
20
+ if T.TYPE_CHECKING:
21
+ from typing_extensions import TypedDict
22
+
23
+ from .factory import DependencyGenerator
24
+ from ..environment import Environment
25
+ from ..mesonlib import MachineChoice
26
+
27
+ class PythonIntrospectionDict(TypedDict):
28
+
29
+ install_paths: T.Dict[str, str]
30
+ is_pypy: bool
31
+ is_venv: bool
32
+ link_libpython: bool
33
+ sysconfig_paths: T.Dict[str, str]
34
+ paths: T.Dict[str, str]
35
+ platform: str
36
+ suffix: str
37
+ limited_api_suffix: str
38
+ variables: T.Dict[str, str]
39
+ version: str
40
+
41
+ _Base = ExternalDependency
42
+ else:
43
+ _Base = object
44
+
45
+
46
+ class Pybind11ConfigToolDependency(ConfigToolDependency):
47
+
48
+ tools = ['pybind11-config']
49
+
50
+ # any version of the tool is valid, since this is header-only
51
+ allow_default_for_cross = True
52
+
53
+ # pybind11 in 2.10.4 added --version, sanity-check another flag unique to it
54
+ # in the meantime
55
+ skip_version = '--pkgconfigdir'
56
+
57
+ def __init__(self, name: str, environment: Environment, kwargs: T.Dict[str, T.Any]):
58
+ super().__init__(name, environment, kwargs)
59
+ if not self.is_found:
60
+ return
61
+ self.compile_args = self.get_config_value(['--includes'], 'compile_args')
62
+
63
+
64
+ class NumPyConfigToolDependency(ConfigToolDependency):
65
+
66
+ tools = ['numpy-config']
67
+
68
+ def __init__(self, name: str, environment: Environment, kwargs: T.Dict[str, T.Any]):
69
+ super().__init__(name, environment, kwargs)
70
+ if not self.is_found:
71
+ return
72
+ self.compile_args = self.get_config_value(['--cflags'], 'compile_args')
73
+
74
+
75
+ class BasicPythonExternalProgram(ExternalProgram):
76
+ def __init__(self, name: str, command: T.Optional[T.List[str]] = None,
77
+ ext_prog: T.Optional[ExternalProgram] = None):
78
+ if ext_prog is None:
79
+ super().__init__(name, command=command, silent=True)
80
+ else:
81
+ self.name = name
82
+ self.command = ext_prog.command
83
+ self.path = ext_prog.path
84
+ self.cached_version = None
85
+
86
+ # We want strong key values, so we always populate this with bogus data.
87
+ # Otherwise to make the type checkers happy we'd have to do .get() for
88
+ # everycall, even though we know that the introspection data will be
89
+ # complete
90
+ self.info: 'PythonIntrospectionDict' = {
91
+ 'install_paths': {},
92
+ 'is_pypy': False,
93
+ 'is_venv': False,
94
+ 'link_libpython': False,
95
+ 'sysconfig_paths': {},
96
+ 'paths': {},
97
+ 'platform': 'sentinel',
98
+ 'suffix': 'sentinel',
99
+ 'limited_api_suffix': 'sentinel',
100
+ 'variables': {},
101
+ 'version': '0.0',
102
+ }
103
+ self.pure: bool = True
104
+
105
+ def _check_version(self, version: str) -> bool:
106
+ if self.name == 'python2':
107
+ return mesonlib.version_compare(version, '< 3.0')
108
+ elif self.name == 'python3':
109
+ return mesonlib.version_compare(version, '>= 3.0')
110
+ return True
111
+
112
+ def sanity(self) -> bool:
113
+ # Sanity check, we expect to have something that at least quacks in tune
114
+
115
+ import importlib.resources
116
+
117
+ with importlib.resources.path('mesonbuild.scripts', 'python_info.py') as f:
118
+ cmd = self.get_command() + [str(f)]
119
+ env = os.environ.copy()
120
+ env['SETUPTOOLS_USE_DISTUTILS'] = 'stdlib'
121
+ p, stdout, stderr = mesonlib.Popen_safe(cmd, env=env)
122
+
123
+ try:
124
+ info = json.loads(stdout)
125
+ except json.JSONDecodeError:
126
+ info = None
127
+ mlog.debug('Could not introspect Python (%s): exit code %d' % (str(p.args), p.returncode))
128
+ mlog.debug('Program stdout:\n')
129
+ mlog.debug(stdout)
130
+ mlog.debug('Program stderr:\n')
131
+ mlog.debug(stderr)
132
+
133
+ if info is not None and self._check_version(info['version']):
134
+ self.info = T.cast('PythonIntrospectionDict', info)
135
+ return True
136
+ else:
137
+ return False
138
+
139
+
140
+ class _PythonDependencyBase(_Base):
141
+
142
+ def __init__(self, python_holder: 'BasicPythonExternalProgram', embed: bool):
143
+ self.embed = embed
144
+ self.version: str = python_holder.info['version']
145
+ self.platform = python_holder.info['platform']
146
+ self.variables = python_holder.info['variables']
147
+ self.paths = python_holder.info['paths']
148
+ self.is_pypy = python_holder.info['is_pypy']
149
+ # The "-embed" version of python.pc / python-config was introduced in 3.8,
150
+ # and distutils extension linking was changed to be considered a non embed
151
+ # usage. Before then, this dependency always uses the embed=True handling
152
+ # because that is the only one that exists.
153
+ #
154
+ # On macOS and some Linux distros (Debian) distutils doesn't link extensions
155
+ # against libpython, even on 3.7 and below. We call into distutils and
156
+ # mirror its behavior. See https://github.com/mesonbuild/meson/issues/4117
157
+ self.link_libpython = python_holder.info['link_libpython'] or embed
158
+ self.info: T.Optional[T.Dict[str, str]] = None
159
+ if mesonlib.version_compare(self.version, '>= 3.0'):
160
+ self.major_version = 3
161
+ else:
162
+ self.major_version = 2
163
+
164
+
165
+ class PythonPkgConfigDependency(PkgConfigDependency, _PythonDependencyBase):
166
+
167
+ def __init__(self, name: str, environment: 'Environment',
168
+ kwargs: T.Dict[str, T.Any], installation: 'BasicPythonExternalProgram',
169
+ libpc: bool = False):
170
+ if libpc:
171
+ mlog.debug(f'Searching for {name!r} via pkgconfig lookup in LIBPC')
172
+ else:
173
+ mlog.debug(f'Searching for {name!r} via fallback pkgconfig lookup in default paths')
174
+
175
+ PkgConfigDependency.__init__(self, name, environment, kwargs)
176
+ _PythonDependencyBase.__init__(self, installation, kwargs.get('embed', False))
177
+
178
+ if libpc and not self.is_found:
179
+ mlog.debug(f'"python-{self.version}" could not be found in LIBPC, this is likely due to a relocated python installation')
180
+
181
+ # pkg-config files are usually accurate starting with python 3.8
182
+ if not self.link_libpython and mesonlib.version_compare(self.version, '< 3.8'):
183
+ self.link_args = []
184
+
185
+
186
+ class PythonFrameworkDependency(ExtraFrameworkDependency, _PythonDependencyBase):
187
+
188
+ def __init__(self, name: str, environment: 'Environment',
189
+ kwargs: T.Dict[str, T.Any], installation: 'BasicPythonExternalProgram'):
190
+ ExtraFrameworkDependency.__init__(self, name, environment, kwargs)
191
+ _PythonDependencyBase.__init__(self, installation, kwargs.get('embed', False))
192
+
193
+
194
+ class PythonSystemDependency(SystemDependency, _PythonDependencyBase):
195
+
196
+ def __init__(self, name: str, environment: 'Environment',
197
+ kwargs: T.Dict[str, T.Any], installation: 'BasicPythonExternalProgram'):
198
+ SystemDependency.__init__(self, name, environment, kwargs)
199
+ _PythonDependencyBase.__init__(self, installation, kwargs.get('embed', False))
200
+
201
+ # match pkg-config behavior
202
+ if self.link_libpython:
203
+ # link args
204
+ if mesonlib.is_windows():
205
+ self.find_libpy_windows(environment, limited_api=False)
206
+ else:
207
+ self.find_libpy(environment)
208
+ else:
209
+ self.is_found = True
210
+
211
+ # compile args
212
+ inc_paths = mesonlib.OrderedSet([
213
+ self.variables.get('INCLUDEPY'),
214
+ self.paths.get('include'),
215
+ self.paths.get('platinclude')])
216
+
217
+ self.compile_args += ['-I' + path for path in inc_paths if path]
218
+
219
+ # https://sourceforge.net/p/mingw-w64/mailman/message/30504611/
220
+ # https://github.com/python/cpython/pull/100137
221
+ if mesonlib.is_windows() and self.get_windows_python_arch().endswith('64') and mesonlib.version_compare(self.version, '<3.12'):
222
+ self.compile_args += ['-DMS_WIN64=']
223
+
224
+ if not self.clib_compiler.has_header('Python.h', '', environment, extra_args=self.compile_args):
225
+ self.is_found = False
226
+
227
+ def find_libpy(self, environment: 'Environment') -> None:
228
+ if self.is_pypy:
229
+ if self.major_version == 3:
230
+ libname = 'pypy3-c'
231
+ else:
232
+ libname = 'pypy-c'
233
+ libdir = os.path.join(self.variables.get('base'), 'bin')
234
+ libdirs = [libdir]
235
+ else:
236
+ libname = f'python{self.version}'
237
+ if 'DEBUG_EXT' in self.variables:
238
+ libname += self.variables['DEBUG_EXT']
239
+ if 'ABIFLAGS' in self.variables:
240
+ libname += self.variables['ABIFLAGS']
241
+ libdirs = []
242
+
243
+ largs = self.clib_compiler.find_library(libname, environment, libdirs)
244
+ if largs is not None:
245
+ self.link_args = largs
246
+ self.is_found = True
247
+
248
+ def get_windows_python_arch(self) -> str:
249
+ if self.platform.startswith('mingw'):
250
+ if 'x86_64' in self.platform:
251
+ return 'x86_64'
252
+ elif 'i686' in self.platform:
253
+ return 'x86'
254
+ elif 'aarch64' in self.platform:
255
+ return 'aarch64'
256
+ else:
257
+ raise DependencyException(f'MinGW Python built with unknown platform {self.platform!r}, please file a bug')
258
+ elif self.platform == 'win32':
259
+ return 'x86'
260
+ elif self.platform in {'win64', 'win-amd64'}:
261
+ return 'x86_64'
262
+ elif self.platform in {'win-arm64'}:
263
+ return 'aarch64'
264
+ raise DependencyException('Unknown Windows Python platform {self.platform!r}')
265
+
266
+ def get_windows_link_args(self, limited_api: bool) -> T.Optional[T.List[str]]:
267
+ if self.platform.startswith('win'):
268
+ vernum = self.variables.get('py_version_nodot')
269
+ verdot = self.variables.get('py_version_short')
270
+ imp_lower = self.variables.get('implementation_lower', 'python')
271
+ if self.static:
272
+ libpath = Path('libs') / f'libpython{vernum}.a'
273
+ else:
274
+ comp = self.get_compiler()
275
+ if comp.id == "gcc":
276
+ if imp_lower == 'pypy' and verdot == '3.8':
277
+ # The naming changed between 3.8 and 3.9
278
+ libpath = Path('libpypy3-c.dll')
279
+ elif imp_lower == 'pypy':
280
+ libpath = Path(f'libpypy{verdot}-c.dll')
281
+ else:
282
+ libpath = Path(f'python{vernum}.dll')
283
+ else:
284
+ if limited_api:
285
+ vernum = vernum[0]
286
+ libpath = Path('libs') / f'python{vernum}.lib'
287
+ # For a debug build, pyconfig.h may force linking with
288
+ # pythonX_d.lib (see meson#10776). This cannot be avoided
289
+ # and won't work unless we also have a debug build of
290
+ # Python itself (except with pybind11, which has an ugly
291
+ # hack to work around this) - so emit a warning to explain
292
+ # the cause of the expected link error.
293
+ buildtype = self.env.coredata.get_option(mesonlib.OptionKey('buildtype'))
294
+ assert isinstance(buildtype, str)
295
+ debug = self.env.coredata.get_option(mesonlib.OptionKey('debug'))
296
+ # `debugoptimized` buildtype may not set debug=True currently, see gh-11645
297
+ is_debug_build = debug or buildtype == 'debug'
298
+ vscrt_debug = False
299
+ if mesonlib.OptionKey('b_vscrt') in self.env.coredata.options:
300
+ vscrt = self.env.coredata.options[mesonlib.OptionKey('b_vscrt')].value
301
+ if vscrt in {'mdd', 'mtd', 'from_buildtype', 'static_from_buildtype'}:
302
+ vscrt_debug = True
303
+ if is_debug_build and vscrt_debug and not self.variables.get('Py_DEBUG'):
304
+ mlog.warning(textwrap.dedent('''\
305
+ Using a debug build type with MSVC or an MSVC-compatible compiler
306
+ when the Python interpreter is not also a debug build will almost
307
+ certainly result in a failed build. Prefer using a release build
308
+ type or a debug Python interpreter.
309
+ '''))
310
+ # base_prefix to allow for virtualenvs.
311
+ lib = Path(self.variables.get('base_prefix')) / libpath
312
+ elif self.platform.startswith('mingw'):
313
+ if self.static:
314
+ libname = self.variables.get('LIBRARY')
315
+ else:
316
+ libname = self.variables.get('LDLIBRARY')
317
+ lib = Path(self.variables.get('LIBDIR')) / libname
318
+ else:
319
+ raise mesonlib.MesonBugException(
320
+ 'On a Windows path, but the OS doesn\'t appear to be Windows or MinGW.')
321
+ if not lib.exists():
322
+ mlog.log('Could not find Python3 library {!r}'.format(str(lib)))
323
+ return None
324
+ return [str(lib)]
325
+
326
+ def find_libpy_windows(self, env: 'Environment', limited_api: bool = False) -> None:
327
+ '''
328
+ Find python3 libraries on Windows and also verify that the arch matches
329
+ what we are building for.
330
+ '''
331
+ try:
332
+ pyarch = self.get_windows_python_arch()
333
+ except DependencyException as e:
334
+ mlog.log(str(e))
335
+ self.is_found = False
336
+ return
337
+ arch = detect_cpu_family(env.coredata.compilers.host)
338
+ if arch != pyarch:
339
+ mlog.log('Need', mlog.bold(self.name), f'for {arch}, but found {pyarch}')
340
+ self.is_found = False
341
+ return
342
+ # This can fail if the library is not found
343
+ largs = self.get_windows_link_args(limited_api)
344
+ if largs is None:
345
+ self.is_found = False
346
+ return
347
+ self.link_args = largs
348
+ self.is_found = True
349
+
350
+ @staticmethod
351
+ def log_tried() -> str:
352
+ return 'sysconfig'
353
+
354
+ def python_factory(env: 'Environment', for_machine: 'MachineChoice',
355
+ kwargs: T.Dict[str, T.Any],
356
+ installation: T.Optional['BasicPythonExternalProgram'] = None) -> T.List['DependencyGenerator']:
357
+ # We can't use the factory_methods decorator here, as we need to pass the
358
+ # extra installation argument
359
+ methods = process_method_kw({DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM}, kwargs)
360
+ embed = kwargs.get('embed', False)
361
+ candidates: T.List['DependencyGenerator'] = []
362
+ from_installation = installation is not None
363
+ # When not invoked through the python module, default installation.
364
+ if installation is None:
365
+ installation = BasicPythonExternalProgram('python3', mesonlib.python_command)
366
+ installation.sanity()
367
+ pkg_version = installation.info['variables'].get('LDVERSION') or installation.info['version']
368
+
369
+ if DependencyMethods.PKGCONFIG in methods:
370
+ if from_installation:
371
+ pkg_libdir = installation.info['variables'].get('LIBPC')
372
+ pkg_embed = '-embed' if embed and mesonlib.version_compare(installation.info['version'], '>=3.8') else ''
373
+ pkg_name = f'python-{pkg_version}{pkg_embed}'
374
+
375
+ # If python-X.Y.pc exists in LIBPC, we will try to use it
376
+ def wrap_in_pythons_pc_dir(name: str, env: 'Environment', kwargs: T.Dict[str, T.Any],
377
+ installation: 'BasicPythonExternalProgram') -> 'ExternalDependency':
378
+ if not pkg_libdir:
379
+ # there is no LIBPC, so we can't search in it
380
+ empty = ExternalDependency(DependencyTypeName('pkgconfig'), env, {})
381
+ empty.name = 'python'
382
+ return empty
383
+
384
+ old_pkg_libdir = os.environ.pop('PKG_CONFIG_LIBDIR', None)
385
+ old_pkg_path = os.environ.pop('PKG_CONFIG_PATH', None)
386
+ os.environ['PKG_CONFIG_LIBDIR'] = pkg_libdir
387
+ try:
388
+ return PythonPkgConfigDependency(name, env, kwargs, installation, True)
389
+ finally:
390
+ def set_env(name: str, value: str) -> None:
391
+ if value is not None:
392
+ os.environ[name] = value
393
+ elif name in os.environ:
394
+ del os.environ[name]
395
+ set_env('PKG_CONFIG_LIBDIR', old_pkg_libdir)
396
+ set_env('PKG_CONFIG_PATH', old_pkg_path)
397
+
398
+ candidates.append(functools.partial(wrap_in_pythons_pc_dir, pkg_name, env, kwargs, installation))
399
+ # We only need to check both, if a python install has a LIBPC. It might point to the wrong location,
400
+ # e.g. relocated / cross compilation, but the presence of LIBPC indicates we should definitely look for something.
401
+ if pkg_libdir is not None:
402
+ candidates.append(functools.partial(PythonPkgConfigDependency, pkg_name, env, kwargs, installation))
403
+ else:
404
+ candidates.append(functools.partial(PkgConfigDependency, 'python3', env, kwargs))
405
+
406
+ if DependencyMethods.SYSTEM in methods:
407
+ candidates.append(functools.partial(PythonSystemDependency, 'python', env, kwargs, installation))
408
+
409
+ if DependencyMethods.EXTRAFRAMEWORK in methods:
410
+ nkwargs = kwargs.copy()
411
+ if mesonlib.version_compare(pkg_version, '>= 3'):
412
+ # There is a python in /System/Library/Frameworks, but that's python 2.x,
413
+ # Python 3 will always be in /Library
414
+ nkwargs['paths'] = ['/Library/Frameworks']
415
+ candidates.append(functools.partial(PythonFrameworkDependency, 'Python', env, nkwargs, installation))
416
+
417
+ return candidates
418
+
419
+ packages['python3'] = python_factory
420
+
421
+ packages['pybind11'] = pybind11_factory = DependencyFactory(
422
+ 'pybind11',
423
+ [DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL, DependencyMethods.CMAKE],
424
+ configtool_class=Pybind11ConfigToolDependency,
425
+ )
426
+
427
+ packages['numpy'] = numpy_factory = DependencyFactory(
428
+ 'numpy',
429
+ [DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL],
430
+ configtool_class=NumPyConfigToolDependency,
431
+ )