frida 16.2.1 → 16.2.3

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,487 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2012-2021 The Meson development team
3
+ # Copyright © 2021-2024 Intel Corporation
4
+ from __future__ import annotations
5
+
6
+ import copy
7
+ import os
8
+ import typing as T
9
+
10
+ from .. import mesonlib
11
+ from .. import dependencies
12
+ from .. import build
13
+ from .. import mlog, coredata
14
+
15
+ from ..mesonlib import MachineChoice, OptionKey
16
+ from ..programs import OverrideProgram, ExternalProgram
17
+ from ..interpreter.type_checking import ENV_KW, ENV_METHOD_KW, ENV_SEPARATOR_KW, env_convertor_with_method
18
+ from ..interpreterbase import (MesonInterpreterObject, FeatureNew, FeatureDeprecated,
19
+ typed_pos_args, noArgsFlattening, noPosargs, noKwargs,
20
+ typed_kwargs, KwargInfo, InterpreterException)
21
+ from .primitives import MesonVersionString
22
+ from .type_checking import NATIVE_KW, NoneType
23
+
24
+ if T.TYPE_CHECKING:
25
+ from typing_extensions import Literal, TypedDict
26
+
27
+ from ..compilers import Compiler
28
+ from ..interpreterbase import TYPE_kwargs, TYPE_var
29
+ from ..mesonlib import ExecutableSerialisation
30
+ from .interpreter import Interpreter
31
+
32
+ class FuncOverrideDependency(TypedDict):
33
+
34
+ native: mesonlib.MachineChoice
35
+ static: T.Optional[bool]
36
+
37
+ class AddInstallScriptKW(TypedDict):
38
+
39
+ skip_if_destdir: bool
40
+ install_tag: str
41
+ dry_run: bool
42
+
43
+ class NativeKW(TypedDict):
44
+
45
+ native: mesonlib.MachineChoice
46
+
47
+ class AddDevenvKW(TypedDict):
48
+ method: Literal['set', 'prepend', 'append']
49
+ separator: str
50
+
51
+
52
+ class MesonMain(MesonInterpreterObject):
53
+ def __init__(self, build: 'build.Build', interpreter: 'Interpreter'):
54
+ super().__init__(subproject=interpreter.subproject)
55
+ self.build = build
56
+ self.interpreter = interpreter
57
+ self.methods.update({'add_devenv': self.add_devenv_method,
58
+ 'add_dist_script': self.add_dist_script_method,
59
+ 'add_install_script': self.add_install_script_method,
60
+ 'add_postconf_script': self.add_postconf_script_method,
61
+ 'backend': self.backend_method,
62
+ 'build_options': self.build_options_method,
63
+ 'build_root': self.build_root_method,
64
+ 'can_run_host_binaries': self.can_run_host_binaries_method,
65
+ 'current_source_dir': self.current_source_dir_method,
66
+ 'current_build_dir': self.current_build_dir_method,
67
+ 'get_compiler': self.get_compiler_method,
68
+ 'get_cross_property': self.get_cross_property_method,
69
+ 'get_external_property': self.get_external_property_method,
70
+ 'global_build_root': self.global_build_root_method,
71
+ 'global_source_root': self.global_source_root_method,
72
+ 'has_exe_wrapper': self.has_exe_wrapper_method,
73
+ 'has_external_property': self.has_external_property_method,
74
+ 'install_dependency_manifest': self.install_dependency_manifest_method,
75
+ 'is_cross_build': self.is_cross_build_method,
76
+ 'is_subproject': self.is_subproject_method,
77
+ 'is_unity': self.is_unity_method,
78
+ 'override_dependency': self.override_dependency_method,
79
+ 'override_find_program': self.override_find_program_method,
80
+ 'project_build_root': self.project_build_root_method,
81
+ 'project_license': self.project_license_method,
82
+ 'project_license_files': self.project_license_files_method,
83
+ 'project_name': self.project_name_method,
84
+ 'project_source_root': self.project_source_root_method,
85
+ 'project_version': self.project_version_method,
86
+ 'source_root': self.source_root_method,
87
+ 'version': self.version_method,
88
+ })
89
+
90
+ def _find_source_script(
91
+ self, name: str, prog: T.Union[str, mesonlib.File, build.Executable, ExternalProgram],
92
+ args: T.List[str]) -> 'ExecutableSerialisation':
93
+ largs: T.List[T.Union[str, build.Executable, ExternalProgram]] = []
94
+
95
+ if isinstance(prog, (build.Executable, ExternalProgram)):
96
+ FeatureNew.single_use(f'Passing executable/found program object to script parameter of {name}',
97
+ '0.55.0', self.subproject, location=self.current_node)
98
+ largs.append(prog)
99
+ else:
100
+ if isinstance(prog, mesonlib.File):
101
+ FeatureNew.single_use(f'Passing file object to script parameter of {name}',
102
+ '0.57.0', self.subproject, location=self.current_node)
103
+ found = self.interpreter.find_program_impl([prog])
104
+ largs.append(found)
105
+
106
+ largs.extend(args)
107
+ es = self.interpreter.backend.get_executable_serialisation(largs, verbose=True)
108
+ es.subproject = self.interpreter.subproject
109
+ return es
110
+
111
+ def _process_script_args(
112
+ self, name: str, args: T.Sequence[T.Union[
113
+ str, mesonlib.File, build.BuildTarget, build.CustomTarget,
114
+ build.CustomTargetIndex,
115
+ ExternalProgram,
116
+ ]]) -> T.List[str]:
117
+ script_args = [] # T.List[str]
118
+ new = False
119
+ for a in args:
120
+ if isinstance(a, str):
121
+ script_args.append(a)
122
+ elif isinstance(a, mesonlib.File):
123
+ new = True
124
+ script_args.append(a.rel_to_builddir(self.interpreter.environment.source_dir))
125
+ elif isinstance(a, (build.BuildTarget, build.CustomTarget, build.CustomTargetIndex)):
126
+ new = True
127
+ script_args.extend([os.path.join(a.get_source_subdir(), o) for o in a.get_outputs()])
128
+
129
+ # This feels really hacky, but I'm not sure how else to fix
130
+ # this without completely rewriting install script handling.
131
+ # This is complicated by the fact that the install target
132
+ # depends on all.
133
+ if isinstance(a, build.CustomTargetIndex):
134
+ a.target.build_by_default = True
135
+ else:
136
+ a.build_by_default = True
137
+ else:
138
+ script_args.extend(a.command)
139
+ new = True
140
+
141
+ if new:
142
+ FeatureNew.single_use(
143
+ f'Calling "{name}" with File, CustomTarget, Index of CustomTarget, '
144
+ 'Executable, or ExternalProgram',
145
+ '0.55.0', self.interpreter.subproject, location=self.current_node)
146
+ return script_args
147
+
148
+ @typed_pos_args(
149
+ 'meson.add_install_script',
150
+ (str, mesonlib.File, build.Executable, ExternalProgram),
151
+ varargs=(str, mesonlib.File, build.BuildTarget, build.CustomTarget, build.CustomTargetIndex, ExternalProgram)
152
+ )
153
+ @typed_kwargs(
154
+ 'meson.add_install_script',
155
+ KwargInfo('skip_if_destdir', bool, default=False, since='0.57.0'),
156
+ KwargInfo('install_tag', (str, NoneType), since='0.60.0'),
157
+ KwargInfo('dry_run', bool, default=False, since='1.1.0'),
158
+ )
159
+ def add_install_script_method(
160
+ self,
161
+ args: T.Tuple[T.Union[str, mesonlib.File, build.Executable, ExternalProgram],
162
+ T.List[T.Union[str, mesonlib.File, build.BuildTarget, build.CustomTarget, build.CustomTargetIndex, ExternalProgram]]],
163
+ kwargs: 'AddInstallScriptKW') -> None:
164
+ script_args = self._process_script_args('add_install_script', args[1])
165
+ script = self._find_source_script('add_install_script', args[0], script_args)
166
+ script.skip_if_destdir = kwargs['skip_if_destdir']
167
+ script.tag = kwargs['install_tag']
168
+ script.dry_run = kwargs['dry_run']
169
+ self.build.install_scripts.append(script)
170
+
171
+ @typed_pos_args(
172
+ 'meson.add_postconf_script',
173
+ (str, mesonlib.File, ExternalProgram),
174
+ varargs=(str, mesonlib.File, ExternalProgram)
175
+ )
176
+ @noKwargs
177
+ def add_postconf_script_method(
178
+ self,
179
+ args: T.Tuple[T.Union[str, mesonlib.File, ExternalProgram],
180
+ T.List[T.Union[str, mesonlib.File, ExternalProgram]]],
181
+ kwargs: 'TYPE_kwargs') -> None:
182
+ script_args = self._process_script_args('add_postconf_script', args[1])
183
+ script = self._find_source_script('add_postconf_script', args[0], script_args)
184
+ self.build.postconf_scripts.append(script)
185
+
186
+ @typed_pos_args(
187
+ 'meson.add_dist_script',
188
+ (str, mesonlib.File, ExternalProgram),
189
+ varargs=(str, mesonlib.File, ExternalProgram)
190
+ )
191
+ @noKwargs
192
+ @FeatureNew('meson.add_dist_script', '0.48.0')
193
+ def add_dist_script_method(
194
+ self,
195
+ args: T.Tuple[T.Union[str, mesonlib.File, ExternalProgram],
196
+ T.List[T.Union[str, mesonlib.File, ExternalProgram]]],
197
+ kwargs: 'TYPE_kwargs') -> None:
198
+ if args[1]:
199
+ FeatureNew.single_use('Calling "add_dist_script" with multiple arguments',
200
+ '0.49.0', self.interpreter.subproject, location=self.current_node)
201
+ if self.interpreter.subproject != '':
202
+ FeatureNew.single_use('Calling "add_dist_script" in a subproject',
203
+ '0.58.0', self.interpreter.subproject, location=self.current_node)
204
+ script_args = self._process_script_args('add_dist_script', args[1])
205
+ script = self._find_source_script('add_dist_script', args[0], script_args)
206
+ self.build.dist_scripts.append(script)
207
+
208
+ @noPosargs
209
+ @noKwargs
210
+ def current_source_dir_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
211
+ src = self.interpreter.environment.source_dir
212
+ sub = self.interpreter.subdir
213
+ if sub == '':
214
+ return src
215
+ return os.path.join(src, sub)
216
+
217
+ @noPosargs
218
+ @noKwargs
219
+ def current_build_dir_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
220
+ sub = self.interpreter.subdir
221
+ if sub == '':
222
+ return self.interpreter.environment.build_dir
223
+ return self.interpreter.absolute_builddir_path_for(sub)
224
+
225
+ @noPosargs
226
+ @noKwargs
227
+ def backend_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
228
+ return self.interpreter.backend.name
229
+
230
+ @noPosargs
231
+ @noKwargs
232
+ @FeatureDeprecated('meson.source_root', '0.56.0', 'use meson.project_source_root() or meson.global_source_root() instead.')
233
+ def source_root_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
234
+ return self.interpreter.environment.source_dir
235
+
236
+ @noPosargs
237
+ @noKwargs
238
+ @FeatureDeprecated('meson.build_root', '0.56.0', 'use meson.project_build_root() or meson.global_build_root() instead.')
239
+ def build_root_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
240
+ return self.interpreter.environment.build_dir
241
+
242
+ @noPosargs
243
+ @noKwargs
244
+ @FeatureNew('meson.project_source_root', '0.56.0')
245
+ def project_source_root_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
246
+ src = self.interpreter.environment.source_dir
247
+ sub = self.interpreter.root_subdir
248
+ if sub == '':
249
+ return src
250
+ return os.path.join(src, sub)
251
+
252
+ @noPosargs
253
+ @noKwargs
254
+ @FeatureNew('meson.project_build_root', '0.56.0')
255
+ def project_build_root_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
256
+ src = self.interpreter.environment.build_dir
257
+ sub = self.interpreter.root_subdir
258
+ if sub == '':
259
+ return src
260
+ return os.path.join(src, sub)
261
+
262
+ @noPosargs
263
+ @noKwargs
264
+ @FeatureNew('meson.global_source_root', '0.58.0')
265
+ def global_source_root_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
266
+ return self.interpreter.environment.source_dir
267
+
268
+ @noPosargs
269
+ @noKwargs
270
+ @FeatureNew('meson.global_build_root', '0.58.0')
271
+ def global_build_root_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
272
+ return self.interpreter.environment.build_dir
273
+
274
+ @noPosargs
275
+ @noKwargs
276
+ @FeatureDeprecated('meson.has_exe_wrapper', '0.55.0', 'use meson.can_run_host_binaries instead.')
277
+ def has_exe_wrapper_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> bool:
278
+ return self._can_run_host_binaries_impl()
279
+
280
+ @noPosargs
281
+ @noKwargs
282
+ @FeatureNew('meson.can_run_host_binaries', '0.55.0')
283
+ def can_run_host_binaries_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> bool:
284
+ return self._can_run_host_binaries_impl()
285
+
286
+ def _can_run_host_binaries_impl(self) -> bool:
287
+ return not (
288
+ self.build.environment.is_cross_build() and
289
+ self.build.environment.need_exe_wrapper() and
290
+ self.build.environment.exe_wrapper is None
291
+ )
292
+
293
+ @noPosargs
294
+ @noKwargs
295
+ def is_cross_build_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> bool:
296
+ return self.build.environment.is_cross_build()
297
+
298
+ @typed_pos_args('meson.get_compiler', str)
299
+ @typed_kwargs('meson.get_compiler', NATIVE_KW)
300
+ def get_compiler_method(self, args: T.Tuple[str], kwargs: 'NativeKW') -> 'Compiler':
301
+ cname = args[0]
302
+ for_machine = kwargs['native']
303
+ clist = self.interpreter.coredata.compilers[for_machine]
304
+ try:
305
+ return clist[cname]
306
+ except KeyError:
307
+ raise InterpreterException(f'Tried to access compiler for language "{cname}", not specified for {for_machine.get_lower_case_name()} machine.')
308
+
309
+ @noPosargs
310
+ @noKwargs
311
+ def is_unity_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> bool:
312
+ optval = self.interpreter.environment.coredata.get_option(OptionKey('unity'))
313
+ return optval == 'on' or (optval == 'subprojects' and self.interpreter.is_subproject())
314
+
315
+ @noPosargs
316
+ @noKwargs
317
+ def is_subproject_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> bool:
318
+ return self.interpreter.is_subproject()
319
+
320
+ @typed_pos_args('meson.install_dependency_manifest', str)
321
+ @noKwargs
322
+ def install_dependency_manifest_method(self, args: T.Tuple[str], kwargs: 'TYPE_kwargs') -> None:
323
+ self.build.dep_manifest_name = args[0]
324
+
325
+ @FeatureNew('meson.override_find_program', '0.46.0')
326
+ @typed_pos_args('meson.override_find_program', str, (mesonlib.File, ExternalProgram, build.Executable))
327
+ @typed_kwargs('meson.override_find_program', NATIVE_KW.evolve(since='1.3.0'))
328
+ def override_find_program_method(self, args: T.Tuple[str, T.Union[mesonlib.File, ExternalProgram, build.Executable]], kwargs: NativeKW) -> None:
329
+ name, exe = args
330
+ if isinstance(exe, mesonlib.File):
331
+ abspath = exe.absolute_path(self.interpreter.environment.source_dir,
332
+ self.interpreter.environment.build_dir)
333
+ if not os.path.exists(abspath):
334
+ raise InterpreterException(f'Tried to override {name} with a file that does not exist.')
335
+ exe = OverrideProgram(name, [abspath])
336
+ self.interpreter.add_find_program_override(name, exe, kwargs['native'])
337
+
338
+ @typed_kwargs(
339
+ 'meson.override_dependency',
340
+ NATIVE_KW,
341
+ KwargInfo('static', (bool, NoneType), since='0.60.0'),
342
+ )
343
+ @typed_pos_args('meson.override_dependency', str, dependencies.Dependency)
344
+ @FeatureNew('meson.override_dependency', '0.54.0')
345
+ def override_dependency_method(self, args: T.Tuple[str, dependencies.Dependency], kwargs: 'FuncOverrideDependency') -> None:
346
+ name, dep = args
347
+ if not name:
348
+ raise InterpreterException('First argument must be a string and cannot be empty')
349
+
350
+ # Make a copy since we're going to mutate.
351
+ #
352
+ # dep = declare_dependency()
353
+ # meson.override_dependency('foo', dep)
354
+ # meson.override_dependency('foo-1.0', dep)
355
+ # dep = dependency('foo')
356
+ # dep.name() # == 'foo-1.0'
357
+ dep = copy.copy(dep)
358
+ dep.name = name
359
+
360
+ optkey = OptionKey('default_library', subproject=self.interpreter.subproject)
361
+ default_library = self.interpreter.coredata.get_option(optkey)
362
+ assert isinstance(default_library, str), 'for mypy'
363
+ static = kwargs['static']
364
+ if static is None:
365
+ # We don't know if dep represents a static or shared library, could
366
+ # be a mix of both. We assume it is following default_library
367
+ # value.
368
+ self._override_dependency_impl(name, dep, kwargs, static=None)
369
+ if default_library == 'static':
370
+ self._override_dependency_impl(name, dep, kwargs, static=True)
371
+ elif default_library == 'shared':
372
+ self._override_dependency_impl(name, dep, kwargs, static=False)
373
+ else:
374
+ self._override_dependency_impl(name, dep, kwargs, static=True)
375
+ self._override_dependency_impl(name, dep, kwargs, static=False)
376
+ else:
377
+ # dependency('foo') without specifying static kwarg should find this
378
+ # override regardless of the static value here. But do not raise error
379
+ # if it has already been overridden, which would happen when overriding
380
+ # static and shared separately:
381
+ # meson.override_dependency('foo', shared_dep, static: false)
382
+ # meson.override_dependency('foo', static_dep, static: true)
383
+ # In that case dependency('foo') would return the first override.
384
+ self._override_dependency_impl(name, dep, kwargs, static=None, permissive=True)
385
+ self._override_dependency_impl(name, dep, kwargs, static=static)
386
+
387
+ def _override_dependency_impl(self, name: str, dep: dependencies.Dependency, kwargs: 'FuncOverrideDependency',
388
+ static: T.Optional[bool], permissive: bool = False) -> None:
389
+ # We need the cast here as get_dep_identifier works on such a dict,
390
+ # which FuncOverrideDependency is, but mypy can't figure that out
391
+ nkwargs = T.cast('T.Dict[str, T.Any]', kwargs.copy())
392
+ if static is None:
393
+ del nkwargs['static']
394
+ else:
395
+ nkwargs['static'] = static
396
+ identifier = dependencies.get_dep_identifier(name, nkwargs)
397
+ for_machine = kwargs['native']
398
+ override = self.build.dependency_overrides[for_machine].get(identifier)
399
+ if override:
400
+ if permissive:
401
+ return
402
+ m = 'Tried to override dependency {!r} which has already been resolved or overridden at {}'
403
+ location = mlog.get_error_location_string(override.node.filename, override.node.lineno)
404
+ raise InterpreterException(m.format(name, location))
405
+ self.build.dependency_overrides[for_machine][identifier] = \
406
+ build.DependencyOverride(dep, self.interpreter.current_node)
407
+
408
+ @noPosargs
409
+ @noKwargs
410
+ def project_version_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
411
+ return self.build.dep_manifest[self.interpreter.active_projectname].version
412
+
413
+ @FeatureNew('meson.project_license()', '0.45.0')
414
+ @noPosargs
415
+ @noKwargs
416
+ def project_license_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> T.List[str]:
417
+ return self.build.dep_manifest[self.interpreter.active_projectname].license
418
+
419
+ @FeatureNew('meson.project_license_files()', '1.1.0')
420
+ @noPosargs
421
+ @noKwargs
422
+ def project_license_files_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> T.List[mesonlib.File]:
423
+ return [l[1] for l in self.build.dep_manifest[self.interpreter.active_projectname].license_files]
424
+
425
+ @noPosargs
426
+ @noKwargs
427
+ def version_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> MesonVersionString:
428
+ return MesonVersionString(self.interpreter.coredata.version)
429
+
430
+ @noPosargs
431
+ @noKwargs
432
+ def project_name_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
433
+ return self.interpreter.active_projectname
434
+
435
+ def __get_external_property_impl(self, propname: str, fallback: T.Optional[object], machine: MachineChoice) -> object:
436
+ """Shared implementation for get_cross_property and get_external_property."""
437
+ try:
438
+ return self.interpreter.environment.properties[machine][propname]
439
+ except KeyError:
440
+ if fallback is not None:
441
+ return fallback
442
+ raise InterpreterException(f'Unknown property for {machine.get_lower_case_name()} machine: {propname}')
443
+
444
+ @noArgsFlattening
445
+ @FeatureDeprecated('meson.get_cross_property', '0.58.0', 'Use meson.get_external_property() instead')
446
+ @typed_pos_args('meson.get_cross_property', str, optargs=[object])
447
+ @noKwargs
448
+ def get_cross_property_method(self, args: T.Tuple[str, T.Optional[object]], kwargs: 'TYPE_kwargs') -> object:
449
+ propname, fallback = args
450
+ return self.__get_external_property_impl(propname, fallback, MachineChoice.HOST)
451
+
452
+ @noArgsFlattening
453
+ @FeatureNew('meson.get_external_property', '0.54.0')
454
+ @typed_pos_args('meson.get_external_property', str, optargs=[object])
455
+ @typed_kwargs('meson.get_external_property', NATIVE_KW)
456
+ def get_external_property_method(self, args: T.Tuple[str, T.Optional[object]], kwargs: 'NativeKW') -> object:
457
+ propname, fallback = args
458
+ return self.__get_external_property_impl(propname, fallback, kwargs['native'])
459
+
460
+ @FeatureNew('meson.has_external_property', '0.58.0')
461
+ @typed_pos_args('meson.has_external_property', str)
462
+ @typed_kwargs('meson.has_external_property', NATIVE_KW)
463
+ def has_external_property_method(self, args: T.Tuple[str], kwargs: 'NativeKW') -> bool:
464
+ prop_name = args[0]
465
+ return prop_name in self.interpreter.environment.properties[kwargs['native']]
466
+
467
+ @FeatureNew('add_devenv', '0.58.0')
468
+ @typed_kwargs('environment', ENV_METHOD_KW, ENV_SEPARATOR_KW.evolve(since='0.62.0'))
469
+ @typed_pos_args('add_devenv', (str, list, dict, mesonlib.EnvironmentVariables))
470
+ def add_devenv_method(self, args: T.Tuple[T.Union[str, list, dict, mesonlib.EnvironmentVariables]],
471
+ kwargs: 'AddDevenvKW') -> None:
472
+ env = args[0]
473
+ msg = ENV_KW.validator(env)
474
+ if msg:
475
+ raise build.InvalidArguments(f'"add_devenv": {msg}')
476
+ converted = env_convertor_with_method(env, kwargs['method'], kwargs['separator'])
477
+ assert isinstance(converted, mesonlib.EnvironmentVariables)
478
+ self.build.devenv.append(converted)
479
+
480
+ @noPosargs
481
+ @noKwargs
482
+ @FeatureNew('meson.build_options', '1.1.0')
483
+ def build_options_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
484
+ options = self.interpreter.user_defined_options
485
+ if options is None:
486
+ return ''
487
+ return coredata.format_cmd_line_options(options)
@@ -0,0 +1,29 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2021 The Meson development team
3
+
4
+ __all__ = [
5
+ 'ArrayHolder',
6
+ 'BooleanHolder',
7
+ 'DictHolder',
8
+ 'IntegerHolder',
9
+ 'RangeHolder',
10
+ 'StringHolder',
11
+ 'MesonVersionString',
12
+ 'MesonVersionStringHolder',
13
+ 'DependencyVariableString',
14
+ 'DependencyVariableStringHolder',
15
+ 'OptionString',
16
+ 'OptionStringHolder',
17
+ ]
18
+
19
+ from .array import ArrayHolder
20
+ from .boolean import BooleanHolder
21
+ from .dict import DictHolder
22
+ from .integer import IntegerHolder
23
+ from .range import RangeHolder
24
+ from .string import (
25
+ StringHolder,
26
+ MesonVersionString, MesonVersionStringHolder,
27
+ DependencyVariableString, DependencyVariableStringHolder,
28
+ OptionString, OptionStringHolder,
29
+ )
@@ -0,0 +1,108 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2021 The Meson development team
3
+ from __future__ import annotations
4
+
5
+ import typing as T
6
+
7
+ from ...interpreterbase import (
8
+ ObjectHolder,
9
+ IterableObject,
10
+ MesonOperator,
11
+ typed_operator,
12
+ noKwargs,
13
+ noPosargs,
14
+ noArgsFlattening,
15
+ typed_pos_args,
16
+ FeatureNew,
17
+
18
+ TYPE_var,
19
+
20
+ InvalidArguments,
21
+ )
22
+ from ...mparser import PlusAssignmentNode
23
+
24
+ if T.TYPE_CHECKING:
25
+ # Object holders need the actual interpreter
26
+ from ...interpreter import Interpreter
27
+ from ...interpreterbase import TYPE_kwargs
28
+
29
+ class ArrayHolder(ObjectHolder[T.List[TYPE_var]], IterableObject):
30
+ def __init__(self, obj: T.List[TYPE_var], interpreter: 'Interpreter') -> None:
31
+ super().__init__(obj, interpreter)
32
+ self.methods.update({
33
+ 'contains': self.contains_method,
34
+ 'length': self.length_method,
35
+ 'get': self.get_method,
36
+ })
37
+
38
+ self.trivial_operators.update({
39
+ MesonOperator.EQUALS: (list, lambda x: self.held_object == x),
40
+ MesonOperator.NOT_EQUALS: (list, lambda x: self.held_object != x),
41
+ MesonOperator.IN: (object, lambda x: x in self.held_object),
42
+ MesonOperator.NOT_IN: (object, lambda x: x not in self.held_object),
43
+ })
44
+
45
+ # Use actual methods for functions that require additional checks
46
+ self.operators.update({
47
+ MesonOperator.PLUS: self.op_plus,
48
+ MesonOperator.INDEX: self.op_index,
49
+ })
50
+
51
+ def display_name(self) -> str:
52
+ return 'array'
53
+
54
+ def iter_tuple_size(self) -> None:
55
+ return None
56
+
57
+ def iter_self(self) -> T.Iterator[TYPE_var]:
58
+ return iter(self.held_object)
59
+
60
+ def size(self) -> int:
61
+ return len(self.held_object)
62
+
63
+ @noArgsFlattening
64
+ @noKwargs
65
+ @typed_pos_args('array.contains', object)
66
+ def contains_method(self, args: T.Tuple[object], kwargs: TYPE_kwargs) -> bool:
67
+ def check_contains(el: T.List[TYPE_var]) -> bool:
68
+ for element in el:
69
+ if isinstance(element, list):
70
+ found = check_contains(element)
71
+ if found:
72
+ return True
73
+ if element == args[0]:
74
+ return True
75
+ return False
76
+ return check_contains(self.held_object)
77
+
78
+ @noKwargs
79
+ @noPosargs
80
+ def length_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> int:
81
+ return len(self.held_object)
82
+
83
+ @noArgsFlattening
84
+ @noKwargs
85
+ @typed_pos_args('array.get', int, optargs=[object])
86
+ def get_method(self, args: T.Tuple[int, T.Optional[TYPE_var]], kwargs: TYPE_kwargs) -> TYPE_var:
87
+ index = args[0]
88
+ if index < -len(self.held_object) or index >= len(self.held_object):
89
+ if args[1] is None:
90
+ raise InvalidArguments(f'Array index {index} is out of bounds for array of size {len(self.held_object)}.')
91
+ return args[1]
92
+ return self.held_object[index]
93
+
94
+ @typed_operator(MesonOperator.PLUS, object)
95
+ def op_plus(self, other: TYPE_var) -> T.List[TYPE_var]:
96
+ if not isinstance(other, list):
97
+ if not isinstance(self.current_node, PlusAssignmentNode):
98
+ FeatureNew.single_use('list.<plus>', '0.60.0', self.subproject, 'The right hand operand was not a list.',
99
+ location=self.current_node)
100
+ other = [other]
101
+ return self.held_object + other
102
+
103
+ @typed_operator(MesonOperator.INDEX, int)
104
+ def op_index(self, other: int) -> TYPE_var:
105
+ try:
106
+ return self.held_object[other]
107
+ except IndexError:
108
+ raise InvalidArguments(f'Index {other} out of bounds of array of size {len(self.held_object)}.')
@@ -0,0 +1,52 @@
1
+ # Copyright 2021 The Meson development team
2
+ # SPDX-license-identifier: Apache-2.0
3
+ from __future__ import annotations
4
+
5
+ from ...interpreterbase import (
6
+ ObjectHolder,
7
+ MesonOperator,
8
+ typed_pos_args,
9
+ noKwargs,
10
+ noPosargs,
11
+
12
+ InvalidArguments
13
+ )
14
+
15
+ import typing as T
16
+
17
+ if T.TYPE_CHECKING:
18
+ # Object holders need the actual interpreter
19
+ from ...interpreter import Interpreter
20
+ from ...interpreterbase import TYPE_var, TYPE_kwargs
21
+
22
+ class BooleanHolder(ObjectHolder[bool]):
23
+ def __init__(self, obj: bool, interpreter: 'Interpreter') -> None:
24
+ super().__init__(obj, interpreter)
25
+ self.methods.update({
26
+ 'to_int': self.to_int_method,
27
+ 'to_string': self.to_string_method,
28
+ })
29
+
30
+ self.trivial_operators.update({
31
+ MesonOperator.BOOL: (None, lambda x: self.held_object),
32
+ MesonOperator.NOT: (None, lambda x: not self.held_object),
33
+ MesonOperator.EQUALS: (bool, lambda x: self.held_object == x),
34
+ MesonOperator.NOT_EQUALS: (bool, lambda x: self.held_object != x),
35
+ })
36
+
37
+ def display_name(self) -> str:
38
+ return 'bool'
39
+
40
+ @noKwargs
41
+ @noPosargs
42
+ def to_int_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> int:
43
+ return 1 if self.held_object else 0
44
+
45
+ @noKwargs
46
+ @typed_pos_args('bool.to_string', optargs=[str, str])
47
+ def to_string_method(self, args: T.Tuple[T.Optional[str], T.Optional[str]], kwargs: TYPE_kwargs) -> str:
48
+ true_str = args[0] or 'true'
49
+ false_str = args[1] or 'false'
50
+ if any(x is not None for x in args) and not all(x is not None for x in args):
51
+ raise InvalidArguments('bool.to_string() must have either no arguments or exactly two string arguments that signify what values to return for true and false.')
52
+ return true_str if self.held_object else false_str