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,289 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2012-2021 The Meson development team
3
+
4
+ from __future__ import annotations
5
+
6
+ # Work around some pathlib bugs...
7
+
8
+ from . import _pathlib
9
+ import sys
10
+ sys.modules['pathlib'] = _pathlib
11
+
12
+ # This file is an entry point for all commands, including scripts. Include the
13
+ # strict minimum python modules for performance reasons.
14
+ import os.path
15
+ import platform
16
+ import importlib
17
+ import argparse
18
+ import typing as T
19
+
20
+ from .utils.core import MesonException, MesonBugException
21
+ from . import mlog
22
+
23
+ def errorhandler(e: Exception, command: str) -> int:
24
+ import traceback
25
+ if isinstance(e, MesonException):
26
+ mlog.exception(e)
27
+ logfile = mlog.shutdown()
28
+ if logfile is not None:
29
+ mlog.log("\nA full log can be found at", mlog.bold(logfile))
30
+ if os.environ.get('MESON_FORCE_BACKTRACE'):
31
+ raise e
32
+ return 1
33
+ else:
34
+ # We assume many types of traceback are Meson logic bugs, but most
35
+ # particularly anything coming from the interpreter during `setup`.
36
+ # Some things definitely aren't:
37
+ # - PermissionError is always a problem in the user environment
38
+ # - runpython doesn't run Meson's own code, even though it is
39
+ # dispatched by our run()
40
+ if os.environ.get('MESON_FORCE_BACKTRACE'):
41
+ raise e
42
+ traceback.print_exc()
43
+
44
+ if command == 'runpython':
45
+ return 2
46
+ elif isinstance(e, OSError):
47
+ mlog.exception(Exception("Unhandled python OSError. This is probably not a Meson bug, "
48
+ "but an issue with your build environment."))
49
+ return e.errno
50
+ else: # Exception
51
+ msg = 'Unhandled python exception'
52
+ if all(getattr(e, a, None) is not None for a in ['file', 'lineno', 'colno']):
53
+ e = MesonBugException(msg, e.file, e.lineno, e.colno) # type: ignore
54
+ else:
55
+ e = MesonBugException(msg)
56
+ mlog.exception(e)
57
+ return 2
58
+
59
+ # Note: when adding arguments, please also add them to the completion
60
+ # scripts in $MESONSRC/data/shell-completions/
61
+ class CommandLineParser:
62
+ def __init__(self) -> None:
63
+ # only import these once we do full argparse processing
64
+ from . import mconf, mdist, minit, minstall, mintro, msetup, mtest, rewriter, msubprojects, munstable_coredata, mcompile, mdevenv
65
+ from .scripts import env2mfile
66
+ from .wrap import wraptool
67
+ import shutil
68
+
69
+ self.term_width = shutil.get_terminal_size().columns
70
+ self.formatter = lambda prog: argparse.HelpFormatter(prog, max_help_position=int(self.term_width / 2), width=self.term_width)
71
+
72
+ self.commands: T.Dict[str, argparse.ArgumentParser] = {}
73
+ self.hidden_commands: T.List[str] = []
74
+ self.parser = argparse.ArgumentParser(prog='meson', formatter_class=self.formatter)
75
+ self.subparsers = self.parser.add_subparsers(title='Commands', dest='command',
76
+ description='If no command is specified it defaults to setup command.')
77
+ self.add_command('setup', msetup.add_arguments, msetup.run,
78
+ help_msg='Configure the project')
79
+ self.add_command('configure', mconf.add_arguments, mconf.run,
80
+ help_msg='Change project options',)
81
+ self.add_command('dist', mdist.add_arguments, mdist.run,
82
+ help_msg='Generate release archive',)
83
+ self.add_command('install', minstall.add_arguments, minstall.run,
84
+ help_msg='Install the project')
85
+ self.add_command('introspect', mintro.add_arguments, mintro.run,
86
+ help_msg='Introspect project')
87
+ self.add_command('init', minit.add_arguments, minit.run,
88
+ help_msg='Create a new project')
89
+ self.add_command('test', mtest.add_arguments, mtest.run,
90
+ help_msg='Run tests')
91
+ self.add_command('wrap', wraptool.add_arguments, wraptool.run,
92
+ help_msg='Wrap tools')
93
+ self.add_command('subprojects', msubprojects.add_arguments, msubprojects.run,
94
+ help_msg='Manage subprojects')
95
+ self.add_command('rewrite', lambda parser: rewriter.add_arguments(parser, self.formatter), rewriter.run,
96
+ help_msg='Modify the project definition')
97
+ self.add_command('compile', mcompile.add_arguments, mcompile.run,
98
+ help_msg='Build the project')
99
+ self.add_command('devenv', mdevenv.add_arguments, mdevenv.run,
100
+ help_msg='Run commands in developer environment')
101
+ self.add_command('env2mfile', env2mfile.add_arguments, env2mfile.run,
102
+ help_msg='Convert current environment to a cross or native file')
103
+ # Add new commands above this line to list them in help command
104
+ self.add_command('help', self.add_help_arguments, self.run_help_command,
105
+ help_msg='Print help of a subcommand')
106
+
107
+ # Hidden commands
108
+ self.add_command('runpython', self.add_runpython_arguments, self.run_runpython_command,
109
+ help_msg=argparse.SUPPRESS)
110
+ self.add_command('unstable-coredata', munstable_coredata.add_arguments, munstable_coredata.run,
111
+ help_msg=argparse.SUPPRESS)
112
+
113
+ def add_command(self, name: str, add_arguments_func: T.Callable[[argparse.ArgumentParser], None],
114
+ run_func: T.Callable[[argparse.Namespace], int], help_msg: str, aliases: T.List[str] = None) -> None:
115
+ aliases = aliases or []
116
+ # FIXME: Cannot have hidden subparser:
117
+ # https://bugs.python.org/issue22848
118
+ if help_msg == argparse.SUPPRESS:
119
+ p = argparse.ArgumentParser(prog='meson ' + name, formatter_class=self.formatter)
120
+ self.hidden_commands.append(name)
121
+ else:
122
+ p = self.subparsers.add_parser(name, help=help_msg, aliases=aliases, formatter_class=self.formatter)
123
+ add_arguments_func(p)
124
+ p.set_defaults(run_func=run_func)
125
+ for i in [name] + aliases:
126
+ self.commands[i] = p
127
+
128
+ def add_runpython_arguments(self, parser: argparse.ArgumentParser) -> None:
129
+ parser.add_argument('-c', action='store_true', dest='eval_arg', default=False)
130
+ parser.add_argument('--version', action='version', version=platform.python_version())
131
+ parser.add_argument('script_file')
132
+ parser.add_argument('script_args', nargs=argparse.REMAINDER)
133
+
134
+ def run_runpython_command(self, options: argparse.Namespace) -> int:
135
+ sys.argv[1:] = options.script_args
136
+ if options.eval_arg:
137
+ exec(options.script_file)
138
+ else:
139
+ import runpy
140
+ sys.path.insert(0, os.path.dirname(options.script_file))
141
+ runpy.run_path(options.script_file, run_name='__main__')
142
+ return 0
143
+
144
+ def add_help_arguments(self, parser: argparse.ArgumentParser) -> None:
145
+ parser.add_argument('command', nargs='?', choices=list(self.commands.keys()))
146
+
147
+ def run_help_command(self, options: argparse.Namespace) -> int:
148
+ if options.command:
149
+ self.commands[options.command].print_help()
150
+ else:
151
+ self.parser.print_help()
152
+ return 0
153
+
154
+ def run(self, args: T.List[str]) -> int:
155
+ implicit_setup_command_notice = False
156
+ # If first arg is not a known command, assume user wants to run the setup
157
+ # command.
158
+ known_commands = list(self.commands.keys()) + ['-h', '--help']
159
+ if not args or args[0] not in known_commands:
160
+ implicit_setup_command_notice = True
161
+ args = ['setup'] + args
162
+
163
+ # Hidden commands have their own parser instead of using the global one
164
+ if args[0] in self.hidden_commands:
165
+ command = args[0]
166
+ parser = self.commands[command]
167
+ args = args[1:]
168
+ else:
169
+ parser = self.parser
170
+ command = None
171
+
172
+ from . import mesonlib
173
+ args = mesonlib.expand_arguments(args)
174
+ options = parser.parse_args(args)
175
+
176
+ if command is None:
177
+ command = options.command
178
+
179
+ # Bump the version here in order to add a pre-exit warning that we are phasing out
180
+ # support for old python. If this is already the oldest supported version, then
181
+ # this can never be true and does nothing.
182
+ pending_python_deprecation_notice = \
183
+ command in {'setup', 'compile', 'test', 'install'} and sys.version_info < (3, 7)
184
+
185
+ try:
186
+ return options.run_func(options)
187
+ except Exception as e:
188
+ return errorhandler(e, command)
189
+ finally:
190
+ if implicit_setup_command_notice:
191
+ mlog.warning('Running the setup command as `meson [options]` instead of '
192
+ '`meson setup [options]` is ambiguous and deprecated.', fatal=False)
193
+ if pending_python_deprecation_notice:
194
+ mlog.notice('You are using Python 3.6 which is EOL. Starting with v0.62.0, '
195
+ 'Meson will require Python 3.7 or newer', fatal=False)
196
+ mlog.shutdown()
197
+
198
+ def run_script_command(script_name: str, script_args: T.List[str]) -> int:
199
+ # Map script name to module name for those that doesn't match
200
+ script_map = {'exe': 'meson_exe',
201
+ 'install': 'meson_install',
202
+ 'delsuffix': 'delwithsuffix',
203
+ 'gtkdoc': 'gtkdochelper',
204
+ 'hotdoc': 'hotdochelper',
205
+ 'regencheck': 'regen_checker'}
206
+ module_name = script_map.get(script_name, script_name)
207
+
208
+ try:
209
+ module = importlib.import_module('mesonbuild.scripts.' + module_name)
210
+ except ModuleNotFoundError as e:
211
+ mlog.exception(e)
212
+ return 1
213
+
214
+ try:
215
+ return module.run(script_args)
216
+ except MesonException as e:
217
+ mlog.error(f'Error in {script_name} helper script:')
218
+ mlog.exception(e)
219
+ return 1
220
+
221
+ def ensure_stdout_accepts_unicode() -> None:
222
+ if sys.stdout.encoding and not sys.stdout.encoding.upper().startswith('UTF-'):
223
+ sys.stdout.reconfigure(errors='surrogateescape') # type: ignore[attr-defined]
224
+
225
+ def set_meson_command(mainfile: str) -> None:
226
+ # Set the meson command that will be used to run scripts and so on
227
+ from . import mesonlib
228
+ mesonlib.set_meson_command(mainfile)
229
+
230
+ def run(original_args: T.List[str], mainfile: str) -> int:
231
+ if os.environ.get('MESON_SHOW_DEPRECATIONS'):
232
+ # workaround for https://bugs.python.org/issue34624
233
+ import warnings
234
+ for typ in [DeprecationWarning, SyntaxWarning, FutureWarning, PendingDeprecationWarning]:
235
+ warnings.filterwarnings('error', category=typ, module='mesonbuild')
236
+ warnings.filterwarnings('ignore', message=".*importlib-resources.*")
237
+
238
+ if sys.version_info >= (3, 10) and os.environ.get('MESON_RUNNING_IN_PROJECT_TESTS'):
239
+ # workaround for https://bugs.python.org/issue34624
240
+ import warnings
241
+ warnings.filterwarnings('error', category=EncodingWarning, module='mesonbuild')
242
+ # python 3.11 adds a warning that in 3.15, UTF-8 mode will be default.
243
+ # This is fantastic news, we'd love that. Less fantastic: this warning is silly,
244
+ # we *want* these checks to be affected. Plus, the recommended alternative API
245
+ # would (in addition to warning people when UTF-8 mode removed the problem) also
246
+ # require using a minimum python version of 3.11 (in which the warning was added)
247
+ # or add verbose if/else soup.
248
+ warnings.filterwarnings('ignore', message="UTF-8 Mode affects .*getpreferredencoding", category=EncodingWarning)
249
+
250
+ # Meson gets confused if stdout can't output Unicode, if the
251
+ # locale isn't Unicode, just force stdout to accept it. This tries
252
+ # to emulate enough of PEP 540 to work elsewhere.
253
+ ensure_stdout_accepts_unicode()
254
+
255
+ # https://github.com/mesonbuild/meson/issues/3653
256
+ if sys.platform == 'cygwin' and os.environ.get('MSYSTEM', '') not in ['MSYS', '']:
257
+ mlog.error('This python3 seems to be msys/python on MSYS2 Windows, but you are in a MinGW environment')
258
+ mlog.error('Please install and use mingw-w64-x86_64-python3 and/or mingw-w64-x86_64-meson with Pacman')
259
+ return 2
260
+
261
+ args = original_args[:]
262
+
263
+ # Special handling of internal commands called from backends, they don't
264
+ # need to go through argparse.
265
+ if len(args) >= 2 and args[0] == '--internal':
266
+ if args[1] == 'regenerate':
267
+ set_meson_command(mainfile)
268
+ from . import msetup
269
+ try:
270
+ return msetup.run(['--reconfigure'] + args[2:])
271
+ except Exception as e:
272
+ return errorhandler(e, 'setup')
273
+ else:
274
+ return run_script_command(args[1], args[2:])
275
+
276
+ set_meson_command(mainfile)
277
+ return CommandLineParser().run(args)
278
+
279
+ def main() -> int:
280
+ # Always resolve the command path so Ninja can find it for regen, tests, etc.
281
+ if 'meson.exe' in sys.executable:
282
+ assert os.path.isabs(sys.executable)
283
+ launcher = sys.executable
284
+ else:
285
+ launcher = os.path.abspath(sys.argv[0])
286
+ return run(sys.argv[1:], launcher)
287
+
288
+ if __name__ == '__main__':
289
+ sys.exit(main())
@@ -0,0 +1,204 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2017 The Meson development team
3
+
4
+ """Code that creates simple startup projects."""
5
+
6
+ from __future__ import annotations
7
+
8
+ from pathlib import Path
9
+ from enum import Enum
10
+ import subprocess
11
+ import shutil
12
+ import sys
13
+ import os
14
+ import re
15
+ from glob import glob
16
+ import typing as T
17
+
18
+ from mesonbuild import build, mesonlib, mlog
19
+ from mesonbuild.coredata import FORBIDDEN_TARGET_NAMES
20
+ from mesonbuild.environment import detect_ninja
21
+ from mesonbuild.templates.mesontemplates import create_meson_build
22
+ from mesonbuild.templates.samplefactory import sample_generator
23
+
24
+ if T.TYPE_CHECKING:
25
+ import argparse
26
+
27
+ from typing_extensions import Protocol, Literal
28
+
29
+ class Arguments(Protocol):
30
+
31
+ srcfiles: T.List[Path]
32
+ wd: str
33
+ name: str
34
+ executable: str
35
+ deps: str
36
+ language: Literal['c', 'cpp', 'cs', 'cuda', 'd', 'fortran', 'java', 'rust', 'objc', 'objcpp', 'vala']
37
+ build: bool
38
+ builddir: str
39
+ force: bool
40
+ type: Literal['executable', 'library']
41
+ version: str
42
+
43
+
44
+ FORTRAN_SUFFIXES = {'.f', '.for', '.F', '.f90', '.F90'}
45
+ LANG_SUFFIXES = {'.c', '.cc', '.cpp', '.cs', '.cu', '.d', '.m', '.mm', '.rs', '.java', '.vala'} | FORTRAN_SUFFIXES
46
+ LANG_SUPPORTED = {'c', 'cpp', 'cs', 'cuda', 'd', 'fortran', 'java', 'rust', 'objc', 'objcpp', 'vala'}
47
+
48
+ DEFAULT_PROJECT = 'executable'
49
+ DEFAULT_VERSION = '0.1'
50
+ class DEFAULT_TYPES(Enum):
51
+ EXE = 'executable'
52
+ LIB = 'library'
53
+
54
+ INFO_MESSAGE = '''Sample project created. To build it run the
55
+ following commands:
56
+
57
+ meson setup builddir
58
+ meson compile -C builddir
59
+ '''
60
+
61
+
62
+ def create_sample(options: Arguments) -> None:
63
+ '''
64
+ Based on what arguments are passed we check for a match in language
65
+ then check for project type and create new Meson samples project.
66
+ '''
67
+ sample_gen = sample_generator(options)
68
+ if options.type == DEFAULT_TYPES['EXE'].value:
69
+ sample_gen.create_executable()
70
+ elif options.type == DEFAULT_TYPES['LIB'].value:
71
+ sample_gen.create_library()
72
+ else:
73
+ raise RuntimeError('Unreachable code')
74
+ print(INFO_MESSAGE)
75
+
76
+ def autodetect_options(options: Arguments, sample: bool = False) -> None:
77
+ '''
78
+ Here we autodetect options for args not passed in so don't have to
79
+ think about it.
80
+ '''
81
+ if not options.name:
82
+ options.name = Path().resolve().stem
83
+ if not re.match('[a-zA-Z_][a-zA-Z0-9]*', options.name) and sample:
84
+ raise SystemExit(f'Name of current directory "{options.name}" is not usable as a sample project name.\n'
85
+ 'Specify a project name with --name.')
86
+ print(f'Using "{options.name}" (name of current directory) as project name.')
87
+ if not options.executable:
88
+ options.executable = options.name
89
+ print(f'Using "{options.executable}" (project name) as name of executable to build.')
90
+ if options.executable in FORBIDDEN_TARGET_NAMES:
91
+ raise mesonlib.MesonException(f'Executable name {options.executable!r} is reserved for Meson internal use. '
92
+ 'Refusing to init an invalid project.')
93
+ if sample:
94
+ # The rest of the autodetection is not applicable to generating sample projects.
95
+ return
96
+ if not options.srcfiles:
97
+ srcfiles: T.List[Path] = []
98
+ for f in (f for f in Path().iterdir() if f.is_file()):
99
+ if f.suffix in LANG_SUFFIXES:
100
+ srcfiles.append(f)
101
+ if not srcfiles:
102
+ raise SystemExit('No recognizable source files found.\n'
103
+ 'Run meson init in an empty directory to create a sample project.')
104
+ options.srcfiles = srcfiles
105
+ print("Detected source files: " + ' '.join(str(s) for s in srcfiles))
106
+ if not options.language:
107
+ for f in options.srcfiles:
108
+ if f.suffix == '.c':
109
+ options.language = 'c'
110
+ break
111
+ if f.suffix in {'.cc', '.cpp'}:
112
+ options.language = 'cpp'
113
+ break
114
+ if f.suffix == '.cs':
115
+ options.language = 'cs'
116
+ break
117
+ if f.suffix == '.cu':
118
+ options.language = 'cuda'
119
+ break
120
+ if f.suffix == '.d':
121
+ options.language = 'd'
122
+ break
123
+ if f.suffix in FORTRAN_SUFFIXES:
124
+ options.language = 'fortran'
125
+ break
126
+ if f.suffix == '.rs':
127
+ options.language = 'rust'
128
+ break
129
+ if f.suffix == '.m':
130
+ options.language = 'objc'
131
+ break
132
+ if f.suffix == '.mm':
133
+ options.language = 'objcpp'
134
+ break
135
+ if f.suffix == '.java':
136
+ options.language = 'java'
137
+ break
138
+ if f.suffix == '.vala':
139
+ options.language = 'vala'
140
+ break
141
+ if not options.language:
142
+ raise SystemExit("Can't autodetect language, please specify it with -l.")
143
+ print("Detected language: " + options.language)
144
+
145
+ # Note: when adding arguments, please also add them to the completion
146
+ # scripts in $MESONSRC/data/shell-completions/
147
+ def add_arguments(parser: 'argparse.ArgumentParser') -> None:
148
+ '''
149
+ Here we add args for that the user can passed when making a new
150
+ Meson project.
151
+ '''
152
+ parser.add_argument("srcfiles", metavar="sourcefile", nargs="*", type=Path, help="source files. default: all recognized files in current directory")
153
+ parser.add_argument('-C', dest='wd', action=mesonlib.RealPathAction,
154
+ help='directory to cd into before running')
155
+ parser.add_argument("-n", "--name", help="project name. default: name of current directory")
156
+ parser.add_argument("-e", "--executable", help="executable name. default: project name")
157
+ parser.add_argument("-d", "--deps", help="dependencies, comma-separated")
158
+ parser.add_argument("-l", "--language", choices=sorted(LANG_SUPPORTED), help="project language. default: autodetected based on source files")
159
+ parser.add_argument("-b", "--build", action='store_true', help="build after generation")
160
+ parser.add_argument("--builddir", default='build', help="directory for build")
161
+ parser.add_argument("-f", "--force", action="store_true", help="force overwrite of existing files and directories.")
162
+ parser.add_argument('--type', default=DEFAULT_PROJECT, choices=('executable', 'library'), help=f"project type. default: {DEFAULT_PROJECT} based project")
163
+ parser.add_argument('--version', default=DEFAULT_VERSION, help=f"project version. default: {DEFAULT_VERSION}")
164
+
165
+ def run(options: Arguments) -> int:
166
+ '''
167
+ Here we generate the new Meson sample project.
168
+ '''
169
+ if not Path(options.wd).exists():
170
+ sys.exit('Project source root directory not found. Run this command in source directory root.')
171
+ os.chdir(options.wd)
172
+
173
+ if not glob('*'):
174
+ autodetect_options(options, sample=True)
175
+ if not options.language:
176
+ print('Defaulting to generating a C language project.')
177
+ options.language = 'c'
178
+ create_sample(options)
179
+ else:
180
+ autodetect_options(options)
181
+ if Path('meson.build').is_file() and not options.force:
182
+ raise SystemExit('meson.build already exists. Use --force to overwrite.')
183
+ create_meson_build(options)
184
+ if options.build:
185
+ if Path(options.builddir).is_dir() and options.force:
186
+ print('Build directory already exists, deleting it.')
187
+ shutil.rmtree(options.builddir)
188
+ print('Building...')
189
+ cmd = mesonlib.get_meson_command() + ['setup', options.builddir]
190
+ ret = subprocess.run(cmd)
191
+ if ret.returncode:
192
+ raise SystemExit
193
+
194
+ b = build.load(options.builddir)
195
+ need_vsenv = T.cast('bool', b.environment.coredata.get_option(mesonlib.OptionKey('vsenv')))
196
+ vsenv_active = mesonlib.setup_vsenv(need_vsenv)
197
+ if vsenv_active:
198
+ mlog.log(mlog.green('INFO:'), 'automatically activated MSVC compiler environment')
199
+
200
+ cmd = detect_ninja() + ['-C', options.builddir]
201
+ ret = subprocess.run(cmd)
202
+ if ret.returncode:
203
+ raise SystemExit
204
+ return 0