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,227 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright © 2022-2023 Intel Corporation
3
+
4
+ """Type definitions for cargo manifest files."""
5
+
6
+ from __future__ import annotations
7
+ import typing as T
8
+
9
+ from typing_extensions import Literal, TypedDict, Required
10
+
11
+ EDITION = Literal['2015', '2018', '2021']
12
+ CRATE_TYPE = Literal['bin', 'lib', 'dylib', 'staticlib', 'cdylib', 'rlib', 'proc-macro']
13
+
14
+ Package = TypedDict(
15
+ 'Package',
16
+ {
17
+ 'name': Required[str],
18
+ 'version': Required[str],
19
+ 'authors': T.List[str],
20
+ 'edition': EDITION,
21
+ 'rust-version': str,
22
+ 'description': str,
23
+ 'readme': str,
24
+ 'license': str,
25
+ 'license-file': str,
26
+ 'keywords': T.List[str],
27
+ 'categories': T.List[str],
28
+ 'workspace': str,
29
+ 'build': str,
30
+ 'links': str,
31
+ 'include': T.List[str],
32
+ 'exclude': T.List[str],
33
+ 'publish': bool,
34
+ 'metadata': T.Dict[str, T.Dict[str, str]],
35
+ 'default-run': str,
36
+ 'autobins': bool,
37
+ 'autoexamples': bool,
38
+ 'autotests': bool,
39
+ 'autobenches': bool,
40
+ },
41
+ total=False,
42
+ )
43
+ """A description of the Package Dictionary."""
44
+
45
+ class FixedPackage(TypedDict, total=False):
46
+
47
+ """A description of the Package Dictionary, fixed up."""
48
+
49
+ name: Required[str]
50
+ version: Required[str]
51
+ authors: T.List[str]
52
+ edition: EDITION
53
+ rust_version: str
54
+ description: str
55
+ readme: str
56
+ license: str
57
+ license_file: str
58
+ keywords: T.List[str]
59
+ categories: T.List[str]
60
+ workspace: str
61
+ build: str
62
+ links: str
63
+ include: T.List[str]
64
+ exclude: T.List[str]
65
+ publish: bool
66
+ metadata: T.Dict[str, T.Dict[str, str]]
67
+ default_run: str
68
+ autobins: bool
69
+ autoexamples: bool
70
+ autotests: bool
71
+ autobenches: bool
72
+
73
+
74
+ class Badge(TypedDict):
75
+
76
+ """An entry in the badge section."""
77
+
78
+ status: Literal['actively-developed', 'passively-developed', 'as-is', 'experimental', 'deprecated', 'none']
79
+
80
+
81
+ Dependency = TypedDict(
82
+ 'Dependency',
83
+ {
84
+ 'version': str,
85
+ 'registry': str,
86
+ 'git': str,
87
+ 'branch': str,
88
+ 'rev': str,
89
+ 'path': str,
90
+ 'optional': bool,
91
+ 'package': str,
92
+ 'default-features': bool,
93
+ 'features': T.List[str],
94
+ },
95
+ total=False,
96
+ )
97
+ """An entry in the *dependencies sections."""
98
+
99
+
100
+ class FixedDependency(TypedDict, total=False):
101
+
102
+ """An entry in the *dependencies sections, fixed up."""
103
+
104
+ version: T.List[str]
105
+ registry: str
106
+ git: str
107
+ branch: str
108
+ rev: str
109
+ path: str
110
+ optional: bool
111
+ package: str
112
+ default_features: bool
113
+ features: T.List[str]
114
+
115
+
116
+ DependencyV = T.Union[Dependency, str]
117
+ """A Dependency entry, either a string or a Dependency Dict."""
118
+
119
+
120
+ _BaseBuildTarget = TypedDict(
121
+ '_BaseBuildTarget',
122
+ {
123
+ 'path': str,
124
+ 'test': bool,
125
+ 'doctest': bool,
126
+ 'bench': bool,
127
+ 'doc': bool,
128
+ 'plugin': bool,
129
+ 'proc-macro': bool,
130
+ 'harness': bool,
131
+ 'edition': EDITION,
132
+ 'crate-type': T.List[CRATE_TYPE],
133
+ 'required-features': T.List[str],
134
+ },
135
+ total=False,
136
+ )
137
+
138
+
139
+ class BuildTarget(_BaseBuildTarget, total=False):
140
+
141
+ name: Required[str]
142
+
143
+ class LibTarget(_BaseBuildTarget, total=False):
144
+
145
+ name: str
146
+
147
+
148
+ class _BaseFixedBuildTarget(TypedDict, total=False):
149
+ path: str
150
+ test: bool
151
+ doctest: bool
152
+ bench: bool
153
+ doc: bool
154
+ plugin: bool
155
+ harness: bool
156
+ edition: EDITION
157
+ crate_type: T.List[CRATE_TYPE]
158
+ required_features: T.List[str]
159
+
160
+
161
+ class FixedBuildTarget(_BaseFixedBuildTarget, total=False):
162
+
163
+ name: str
164
+
165
+ class FixedLibTarget(_BaseFixedBuildTarget, total=False):
166
+
167
+ name: Required[str]
168
+ proc_macro: bool
169
+
170
+
171
+ class Target(TypedDict):
172
+
173
+ """Target entry in the Manifest File."""
174
+
175
+ dependencies: T.Dict[str, DependencyV]
176
+
177
+
178
+ class Workspace(TypedDict):
179
+
180
+ """The representation of a workspace.
181
+
182
+ In a vritual manifest the :attribute:`members` is always present, but in a
183
+ project manifest, an empty workspace may be provided, in which case the
184
+ workspace is implicitly filled in by values from the path based dependencies.
185
+
186
+ the :attribute:`exclude` is always optional
187
+ """
188
+
189
+ members: T.List[str]
190
+ exclude: T.List[str]
191
+
192
+
193
+ Manifest = TypedDict(
194
+ 'Manifest',
195
+ {
196
+ 'package': Package,
197
+ 'badges': T.Dict[str, Badge],
198
+ 'dependencies': T.Dict[str, DependencyV],
199
+ 'dev-dependencies': T.Dict[str, DependencyV],
200
+ 'build-dependencies': T.Dict[str, DependencyV],
201
+ 'lib': LibTarget,
202
+ 'bin': T.List[BuildTarget],
203
+ 'test': T.List[BuildTarget],
204
+ 'bench': T.List[BuildTarget],
205
+ 'example': T.List[BuildTarget],
206
+ 'features': T.Dict[str, T.List[str]],
207
+ 'target': T.Dict[str, Target],
208
+ 'workspace': Workspace,
209
+
210
+ # TODO: patch?
211
+ # TODO: replace?
212
+ },
213
+ total=False,
214
+ )
215
+ """The Cargo Manifest format."""
216
+
217
+
218
+ class VirtualManifest(TypedDict):
219
+
220
+ """The Representation of a virtual manifest.
221
+
222
+ Cargo allows a root manifest that contains only a workspace, this is called
223
+ a virtual manifest. This doesn't really map 1:1 with any meson concept,
224
+ except perhaps the proposed "meta project".
225
+ """
226
+
227
+ workspace: Workspace
@@ -0,0 +1,95 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright © 2022-2023 Intel Corporation
3
+
4
+ """Convert Cargo versions into Meson compatible ones."""
5
+
6
+ from __future__ import annotations
7
+ import typing as T
8
+
9
+
10
+ def convert(cargo_ver: str) -> T.List[str]:
11
+ """Convert a Cargo compatible version into a Meson compatible one.
12
+
13
+ :param cargo_ver: The version, as Cargo specifies
14
+ :return: A list of version constraints, as Meson understands them
15
+ """
16
+ # Cleanup, just for safety
17
+ cargo_ver = cargo_ver.strip()
18
+ cargo_vers = [c.strip() for c in cargo_ver.split(',')]
19
+
20
+ out: T.List[str] = []
21
+
22
+ for ver in cargo_vers:
23
+ # This covers >= and =< as well
24
+ # https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#comparison-requirements
25
+ if ver.startswith(('>', '<', '=')):
26
+ out.append(ver)
27
+
28
+ elif ver.startswith('~'):
29
+ # Rust has these tilde requirements, which means that it is >= to
30
+ # the version, but less than the next version
31
+ # https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#tilde-requirements
32
+ # we convert those into a pair of constraints
33
+ v = ver[1:].split('.')
34
+ out.append(f'>= {".".join(v)}')
35
+ if len(v) == 3:
36
+ out.append(f'< {v[0]}.{int(v[1]) + 1}.0')
37
+ elif len(v) == 2:
38
+ out.append(f'< {v[0]}.{int(v[1]) + 1}')
39
+ else:
40
+ out.append(f'< {int(v[0]) + 1}')
41
+
42
+ elif '*' in ver:
43
+ # Rust has astrisk requirements,, which are like 1.* == ~1
44
+ # https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#wildcard-requirements
45
+ v = ver.split('.')[:-1]
46
+ if v:
47
+ out.append(f'>= {".".join(v)}')
48
+ if len(v) == 2:
49
+ out.append(f'< {v[0]}.{int(v[1]) + 1}')
50
+ elif len(v) == 1:
51
+ out.append(f'< {int(v[0]) + 1}')
52
+
53
+ else:
54
+ # a Caret version is equivalent to the default strategy
55
+ # https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#caret-requirements
56
+ if ver.startswith('^'):
57
+ ver = ver[1:]
58
+
59
+ # If there is no qualifier, then it means this or the next non-zero version
60
+ # That means that if this is `1.1.0``, then we need `>= 1.1.0` && `< 2.0.0`
61
+ # Or if we have `0.1.0`, then we need `>= 0.1.0` && `< 0.2.0`
62
+ # Or if we have `0.1`, then we need `>= 0.1.0` && `< 0.2.0`
63
+ # Or if we have `0.0.0`, then we need `< 1.0.0`
64
+ # Or if we have `0.0`, then we need `< 1.0.0`
65
+ # Or if we have `0`, then we need `< 1.0.0`
66
+ # Or if we have `0.0.3`, then we need `>= 0.0.3` && `< 0.0.4`
67
+ # https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#specifying-dependencies-from-cratesio
68
+ #
69
+ # this works much like the ~ versions, but in reverse. Tilde starts
70
+ # at the patch version and works up, to the major version, while
71
+ # bare numbers start at the major version and work down to the patch
72
+ # version
73
+ vers = ver.split('.')
74
+ min_: T.List[str] = []
75
+ max_: T.List[str] = []
76
+ bumped = False
77
+ for v_ in vers:
78
+ if v_ != '0' and not bumped:
79
+ min_.append(v_)
80
+ max_.append(str(int(v_) + 1))
81
+ bumped = True
82
+ else:
83
+ min_.append(v_)
84
+ if not bumped:
85
+ max_.append('0')
86
+
87
+ # If there is no minimum, don't emit one
88
+ if set(min_) != {'0'}:
89
+ out.append('>= {}'.format('.'.join(min_)))
90
+ if set(max_) != {'0'}:
91
+ out.append('< {}'.format('.'.join(max_)))
92
+ else:
93
+ out.append('< 1')
94
+
95
+ return out
@@ -0,0 +1,28 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2019 The Meson development team
3
+
4
+ # This class contains the basic functionality needed to run any interpreter
5
+ # or an interpreter-based tool.
6
+
7
+ __all__ = [
8
+ 'CMakeExecutor',
9
+ 'CMakeExecScope',
10
+ 'CMakeException',
11
+ 'CMakeInterpreter',
12
+ 'CMakeTarget',
13
+ 'CMakeToolchain',
14
+ 'CMakeTraceParser',
15
+ 'TargetOptions',
16
+ 'language_map',
17
+ 'cmake_defines_to_args',
18
+ 'check_cmake_args',
19
+ 'cmake_is_debug',
20
+ 'resolve_cmake_trace_targets',
21
+ ]
22
+
23
+ from .common import CMakeException, TargetOptions, cmake_defines_to_args, language_map, check_cmake_args, cmake_is_debug
24
+ from .executor import CMakeExecutor
25
+ from .interpreter import CMakeInterpreter
26
+ from .toolchain import CMakeToolchain, CMakeExecScope
27
+ from .traceparser import CMakeTarget, CMakeTraceParser
28
+ from .tracetargets import resolve_cmake_trace_targets
@@ -0,0 +1,331 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2019 The Meson development team
3
+
4
+ from __future__ import annotations
5
+
6
+ from ..mesonlib import MesonException, OptionKey
7
+ from .. import mlog
8
+ from pathlib import Path
9
+ import typing as T
10
+
11
+ if T.TYPE_CHECKING:
12
+ from ..environment import Environment
13
+ from ..interpreterbase import TYPE_var
14
+
15
+ language_map = {
16
+ 'c': 'C',
17
+ 'cpp': 'CXX',
18
+ 'cuda': 'CUDA',
19
+ 'objc': 'OBJC',
20
+ 'objcpp': 'OBJCXX',
21
+ 'cs': 'CSharp',
22
+ 'java': 'Java',
23
+ 'fortran': 'Fortran',
24
+ 'swift': 'Swift',
25
+ }
26
+
27
+ backend_generator_map = {
28
+ 'ninja': 'Ninja',
29
+ 'xcode': 'Xcode',
30
+ 'vs2010': 'Visual Studio 10 2010',
31
+ 'vs2012': 'Visual Studio 11 2012',
32
+ 'vs2013': 'Visual Studio 12 2013',
33
+ 'vs2015': 'Visual Studio 14 2015',
34
+ 'vs2017': 'Visual Studio 15 2017',
35
+ 'vs2019': 'Visual Studio 16 2019',
36
+ 'vs2022': 'Visual Studio 17 2022',
37
+ }
38
+
39
+ blacklist_cmake_defs = [
40
+ 'CMAKE_TOOLCHAIN_FILE',
41
+ 'CMAKE_PROJECT_INCLUDE',
42
+ 'MESON_PRELOAD_FILE',
43
+ 'MESON_PS_CMAKE_CURRENT_BINARY_DIR',
44
+ 'MESON_PS_CMAKE_CURRENT_SOURCE_DIR',
45
+ 'MESON_PS_DELAYED_CALLS',
46
+ 'MESON_PS_LOADED',
47
+ 'MESON_FIND_ROOT_PATH',
48
+ 'MESON_CMAKE_SYSROOT',
49
+ 'MESON_PATHS_LIST',
50
+ 'MESON_CMAKE_ROOT',
51
+ ]
52
+
53
+ def cmake_is_debug(env: 'Environment') -> bool:
54
+ if OptionKey('b_vscrt') in env.coredata.options:
55
+ is_debug = env.coredata.get_option(OptionKey('buildtype')) == 'debug'
56
+ if env.coredata.options[OptionKey('b_vscrt')].value in {'mdd', 'mtd'}:
57
+ is_debug = True
58
+ return is_debug
59
+ else:
60
+ # Don't directly assign to is_debug to make mypy happy
61
+ debug_opt = env.coredata.get_option(OptionKey('debug'))
62
+ assert isinstance(debug_opt, bool)
63
+ return debug_opt
64
+
65
+ class CMakeException(MesonException):
66
+ pass
67
+
68
+ class CMakeBuildFile:
69
+ def __init__(self, file: Path, is_cmake: bool, is_temp: bool) -> None:
70
+ self.file = file
71
+ self.is_cmake = is_cmake
72
+ self.is_temp = is_temp
73
+
74
+ def __repr__(self) -> str:
75
+ return f'<{self.__class__.__name__}: {self.file}; cmake={self.is_cmake}; temp={self.is_temp}>'
76
+
77
+ def _flags_to_list(raw: str) -> T.List[str]:
78
+ # Convert a raw commandline string into a list of strings
79
+ res = []
80
+ curr = ''
81
+ escape = False
82
+ in_string = False
83
+ for i in raw:
84
+ if escape:
85
+ # If the current char is not a quote, the '\' is probably important
86
+ if i not in ['"', "'"]:
87
+ curr += '\\'
88
+ curr += i
89
+ escape = False
90
+ elif i == '\\':
91
+ escape = True
92
+ elif i in {'"', "'"}:
93
+ in_string = not in_string
94
+ elif i in {' ', '\n'}:
95
+ if in_string:
96
+ curr += i
97
+ else:
98
+ res += [curr]
99
+ curr = ''
100
+ else:
101
+ curr += i
102
+ res += [curr]
103
+ res = [r for r in res if len(r) > 0]
104
+ return res
105
+
106
+ def cmake_get_generator_args(env: 'Environment') -> T.List[str]:
107
+ backend_name = env.coredata.get_option(OptionKey('backend'))
108
+ assert isinstance(backend_name, str)
109
+ assert backend_name in backend_generator_map
110
+ return ['-G', backend_generator_map[backend_name]]
111
+
112
+ def cmake_defines_to_args(raw: T.List[T.Dict[str, TYPE_var]], permissive: bool = False) -> T.List[str]:
113
+ res: T.List[str] = []
114
+
115
+ for i in raw:
116
+ for key, val in i.items():
117
+ if key in blacklist_cmake_defs:
118
+ mlog.warning('Setting', mlog.bold(key), 'is not supported. See the meson docs for cross compilation support:')
119
+ mlog.warning(' - URL: https://mesonbuild.com/CMake-module.html#cross-compilation')
120
+ mlog.warning(' --> Ignoring this option')
121
+ continue
122
+ if isinstance(val, (str, int, float)):
123
+ res += [f'-D{key}={val}']
124
+ elif isinstance(val, bool):
125
+ val_str = 'ON' if val else 'OFF'
126
+ res += [f'-D{key}={val_str}']
127
+ else:
128
+ raise MesonException('Type "{}" of "{}" is not supported as for a CMake define value'.format(type(val).__name__, key))
129
+
130
+ return res
131
+
132
+ # TODO: this function will become obsolete once the `cmake_args` kwarg is dropped
133
+ def check_cmake_args(args: T.List[str]) -> T.List[str]:
134
+ res: T.List[str] = []
135
+ dis = ['-D' + x for x in blacklist_cmake_defs]
136
+ assert dis # Ensure that dis is not empty.
137
+ for i in args:
138
+ if any(i.startswith(x) for x in dis):
139
+ mlog.warning('Setting', mlog.bold(i), 'is not supported. See the meson docs for cross compilation support:')
140
+ mlog.warning(' - URL: https://mesonbuild.com/CMake-module.html#cross-compilation')
141
+ mlog.warning(' --> Ignoring this option')
142
+ continue
143
+ res += [i]
144
+ return res
145
+
146
+ class CMakeInclude:
147
+ def __init__(self, path: Path, isSystem: bool = False):
148
+ self.path = path
149
+ self.isSystem = isSystem
150
+
151
+ def __repr__(self) -> str:
152
+ return f'<CMakeInclude: {self.path} -- isSystem = {self.isSystem}>'
153
+
154
+ class CMakeFileGroup:
155
+ def __init__(self, data: T.Dict[str, T.Any]) -> None:
156
+ self.defines: str = data.get('defines', '')
157
+ self.flags = _flags_to_list(data.get('compileFlags', ''))
158
+ self.is_generated: bool = data.get('isGenerated', False)
159
+ self.language: str = data.get('language', 'C')
160
+ self.sources = [Path(x) for x in data.get('sources', [])]
161
+
162
+ # Fix the include directories
163
+ self.includes: T.List[CMakeInclude] = []
164
+ for i in data.get('includePath', []):
165
+ if isinstance(i, dict) and 'path' in i:
166
+ isSystem = i.get('isSystem', False)
167
+ assert isinstance(isSystem, bool)
168
+ assert isinstance(i['path'], str)
169
+ self.includes += [CMakeInclude(Path(i['path']), isSystem)]
170
+ elif isinstance(i, str):
171
+ self.includes += [CMakeInclude(Path(i))]
172
+
173
+ def log(self) -> None:
174
+ mlog.log('flags =', mlog.bold(', '.join(self.flags)))
175
+ mlog.log('defines =', mlog.bold(', '.join(self.defines)))
176
+ mlog.log('includes =', mlog.bold(', '.join([str(x) for x in self.includes])))
177
+ mlog.log('is_generated =', mlog.bold('true' if self.is_generated else 'false'))
178
+ mlog.log('language =', mlog.bold(self.language))
179
+ mlog.log('sources:')
180
+ for i in self.sources:
181
+ with mlog.nested():
182
+ mlog.log(i.as_posix())
183
+
184
+ class CMakeTarget:
185
+ def __init__(self, data: T.Dict[str, T.Any]) -> None:
186
+ self.artifacts = [Path(x) for x in data.get('artifacts', [])]
187
+ self.src_dir = Path(data.get('sourceDirectory', ''))
188
+ self.build_dir = Path(data.get('buildDirectory', ''))
189
+ self.name: str = data.get('name', '')
190
+ self.full_name: str = data.get('fullName', '')
191
+ self.install: bool = data.get('hasInstallRule', False)
192
+ self.install_paths = [Path(x) for x in set(data.get('installPaths', []))]
193
+ self.link_lang: str = data.get('linkerLanguage', '')
194
+ self.link_libraries = _flags_to_list(data.get('linkLibraries', ''))
195
+ self.link_flags = _flags_to_list(data.get('linkFlags', ''))
196
+ self.link_lang_flags = _flags_to_list(data.get('linkLanguageFlags', ''))
197
+ # self.link_path = Path(data.get('linkPath', ''))
198
+ self.type: str = data.get('type', 'EXECUTABLE')
199
+ # self.is_generator_provided: bool = data.get('isGeneratorProvided', False)
200
+ self.files: T.List[CMakeFileGroup] = []
201
+
202
+ for i in data.get('fileGroups', []):
203
+ self.files += [CMakeFileGroup(i)]
204
+
205
+ def log(self) -> None:
206
+ mlog.log('artifacts =', mlog.bold(', '.join([x.as_posix() for x in self.artifacts])))
207
+ mlog.log('src_dir =', mlog.bold(self.src_dir.as_posix()))
208
+ mlog.log('build_dir =', mlog.bold(self.build_dir.as_posix()))
209
+ mlog.log('name =', mlog.bold(self.name))
210
+ mlog.log('full_name =', mlog.bold(self.full_name))
211
+ mlog.log('install =', mlog.bold('true' if self.install else 'false'))
212
+ mlog.log('install_paths =', mlog.bold(', '.join([x.as_posix() for x in self.install_paths])))
213
+ mlog.log('link_lang =', mlog.bold(self.link_lang))
214
+ mlog.log('link_libraries =', mlog.bold(', '.join(self.link_libraries)))
215
+ mlog.log('link_flags =', mlog.bold(', '.join(self.link_flags)))
216
+ mlog.log('link_lang_flags =', mlog.bold(', '.join(self.link_lang_flags)))
217
+ # mlog.log('link_path =', mlog.bold(self.link_path))
218
+ mlog.log('type =', mlog.bold(self.type))
219
+ # mlog.log('is_generator_provided =', mlog.bold('true' if self.is_generator_provided else 'false'))
220
+ for idx, i in enumerate(self.files):
221
+ mlog.log(f'Files {idx}:')
222
+ with mlog.nested():
223
+ i.log()
224
+
225
+ class CMakeProject:
226
+ def __init__(self, data: T.Dict[str, T.Any]) -> None:
227
+ self.src_dir = Path(data.get('sourceDirectory', ''))
228
+ self.build_dir = Path(data.get('buildDirectory', ''))
229
+ self.name: str = data.get('name', '')
230
+ self.targets: T.List[CMakeTarget] = []
231
+
232
+ for i in data.get('targets', []):
233
+ self.targets += [CMakeTarget(i)]
234
+
235
+ def log(self) -> None:
236
+ mlog.log('src_dir =', mlog.bold(self.src_dir.as_posix()))
237
+ mlog.log('build_dir =', mlog.bold(self.build_dir.as_posix()))
238
+ mlog.log('name =', mlog.bold(self.name))
239
+ for idx, i in enumerate(self.targets):
240
+ mlog.log(f'Target {idx}:')
241
+ with mlog.nested():
242
+ i.log()
243
+
244
+ class CMakeConfiguration:
245
+ def __init__(self, data: T.Dict[str, T.Any]) -> None:
246
+ self.name: str = data.get('name', '')
247
+ self.projects: T.List[CMakeProject] = []
248
+ for i in data.get('projects', []):
249
+ self.projects += [CMakeProject(i)]
250
+
251
+ def log(self) -> None:
252
+ mlog.log('name =', mlog.bold(self.name))
253
+ for idx, i in enumerate(self.projects):
254
+ mlog.log(f'Project {idx}:')
255
+ with mlog.nested():
256
+ i.log()
257
+
258
+ class SingleTargetOptions:
259
+ def __init__(self) -> None:
260
+ self.opts: T.Dict[str, str] = {}
261
+ self.lang_args: T.Dict[str, T.List[str]] = {}
262
+ self.link_args: T.List[str] = []
263
+ self.install = 'preserve'
264
+
265
+ def set_opt(self, opt: str, val: str) -> None:
266
+ self.opts[opt] = val
267
+
268
+ def append_args(self, lang: str, args: T.List[str]) -> None:
269
+ if lang not in self.lang_args:
270
+ self.lang_args[lang] = []
271
+ self.lang_args[lang] += args
272
+
273
+ def append_link_args(self, args: T.List[str]) -> None:
274
+ self.link_args += args
275
+
276
+ def set_install(self, install: bool) -> None:
277
+ self.install = 'true' if install else 'false'
278
+
279
+ def get_override_options(self, initial: T.List[str]) -> T.List[str]:
280
+ res: T.List[str] = []
281
+ for i in initial:
282
+ opt = i[:i.find('=')]
283
+ if opt not in self.opts:
284
+ res += [i]
285
+ res += [f'{k}={v}' for k, v in self.opts.items()]
286
+ return res
287
+
288
+ def get_compile_args(self, lang: str, initial: T.List[str]) -> T.List[str]:
289
+ if lang in self.lang_args:
290
+ return initial + self.lang_args[lang]
291
+ return initial
292
+
293
+ def get_link_args(self, initial: T.List[str]) -> T.List[str]:
294
+ return initial + self.link_args
295
+
296
+ def get_install(self, initial: bool) -> bool:
297
+ return {'preserve': initial, 'true': True, 'false': False}[self.install]
298
+
299
+ class TargetOptions:
300
+ def __init__(self) -> None:
301
+ self.global_options = SingleTargetOptions()
302
+ self.target_options: T.Dict[str, SingleTargetOptions] = {}
303
+
304
+ def __getitem__(self, tgt: str) -> SingleTargetOptions:
305
+ if tgt not in self.target_options:
306
+ self.target_options[tgt] = SingleTargetOptions()
307
+ return self.target_options[tgt]
308
+
309
+ def get_override_options(self, tgt: str, initial: T.List[str]) -> T.List[str]:
310
+ initial = self.global_options.get_override_options(initial)
311
+ if tgt in self.target_options:
312
+ initial = self.target_options[tgt].get_override_options(initial)
313
+ return initial
314
+
315
+ def get_compile_args(self, tgt: str, lang: str, initial: T.List[str]) -> T.List[str]:
316
+ initial = self.global_options.get_compile_args(lang, initial)
317
+ if tgt in self.target_options:
318
+ initial = self.target_options[tgt].get_compile_args(lang, initial)
319
+ return initial
320
+
321
+ def get_link_args(self, tgt: str, initial: T.List[str]) -> T.List[str]:
322
+ initial = self.global_options.get_link_args(initial)
323
+ if tgt in self.target_options:
324
+ initial = self.target_options[tgt].get_link_args(initial)
325
+ return initial
326
+
327
+ def get_install(self, tgt: str, initial: bool) -> bool:
328
+ initial = self.global_options.get_install(initial)
329
+ if tgt in self.target_options:
330
+ initial = self.target_options[tgt].get_install(initial)
331
+ return initial
File without changes