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,405 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2016 The Meson development team
3
+
4
+ from __future__ import annotations
5
+
6
+ from os import path
7
+ import shlex
8
+ import typing as T
9
+
10
+ from . import ExtensionModule, ModuleReturnValue, ModuleInfo
11
+ from .. import build
12
+ from .. import mesonlib
13
+ from .. import mlog
14
+ from ..interpreter.type_checking import CT_BUILD_BY_DEFAULT, CT_INPUT_KW, INSTALL_TAG_KW, OUTPUT_KW, INSTALL_DIR_KW, INSTALL_KW, NoneType, in_set_validator
15
+ from ..interpreterbase import FeatureNew, InvalidArguments
16
+ from ..interpreterbase.decorators import ContainerTypeInfo, KwargInfo, noPosargs, typed_kwargs, typed_pos_args
17
+ from ..programs import ExternalProgram
18
+ from ..scripts.gettext import read_linguas
19
+
20
+ if T.TYPE_CHECKING:
21
+ from typing_extensions import Literal, TypedDict
22
+
23
+ from . import ModuleState
24
+ from ..build import Target
25
+ from ..interpreter import Interpreter
26
+ from ..interpreterbase import TYPE_var
27
+
28
+ class MergeFile(TypedDict):
29
+
30
+ input: T.List[T.Union[
31
+ str, build.BuildTarget, build.CustomTarget, build.CustomTargetIndex,
32
+ build.ExtractedObjects, build.GeneratedList, ExternalProgram,
33
+ mesonlib.File]]
34
+ output: str
35
+ build_by_default: bool
36
+ install: bool
37
+ install_dir: T.Optional[str]
38
+ install_tag: T.Optional[str]
39
+ args: T.List[str]
40
+ data_dirs: T.List[str]
41
+ po_dir: str
42
+ type: Literal['xml', 'desktop']
43
+
44
+ class Gettext(TypedDict):
45
+
46
+ args: T.List[str]
47
+ data_dirs: T.List[str]
48
+ install: bool
49
+ install_dir: T.Optional[str]
50
+ languages: T.List[str]
51
+ preset: T.Optional[str]
52
+
53
+ class ItsJoinFile(TypedDict):
54
+
55
+ input: T.List[T.Union[
56
+ str, build.BuildTarget, build.CustomTarget, build.CustomTargetIndex,
57
+ build.ExtractedObjects, build.GeneratedList, ExternalProgram,
58
+ mesonlib.File]]
59
+ output: str
60
+ build_by_default: bool
61
+ install: bool
62
+ install_dir: T.Optional[str]
63
+ install_tag: T.Optional[str]
64
+ its_files: T.List[str]
65
+ mo_targets: T.List[T.Union[build.BuildTarget, build.CustomTarget, build.CustomTargetIndex]]
66
+
67
+
68
+ _ARGS: KwargInfo[T.List[str]] = KwargInfo(
69
+ 'args',
70
+ ContainerTypeInfo(list, str),
71
+ default=[],
72
+ listify=True,
73
+ )
74
+
75
+ _DATA_DIRS: KwargInfo[T.List[str]] = KwargInfo(
76
+ 'data_dirs',
77
+ ContainerTypeInfo(list, str),
78
+ default=[],
79
+ listify=True
80
+ )
81
+
82
+ PRESET_ARGS = {
83
+ 'glib': [
84
+ '--from-code=UTF-8',
85
+ '--add-comments',
86
+
87
+ # https://developer.gnome.org/glib/stable/glib-I18N.html
88
+ '--keyword=_',
89
+ '--keyword=N_',
90
+ '--keyword=C_:1c,2',
91
+ '--keyword=NC_:1c,2',
92
+ '--keyword=g_dcgettext:2',
93
+ '--keyword=g_dngettext:2,3',
94
+ '--keyword=g_dpgettext2:2c,3',
95
+
96
+ '--flag=N_:1:pass-c-format',
97
+ '--flag=C_:2:pass-c-format',
98
+ '--flag=NC_:2:pass-c-format',
99
+ '--flag=g_dngettext:2:pass-c-format',
100
+ '--flag=g_strdup_printf:1:c-format',
101
+ '--flag=g_string_printf:2:c-format',
102
+ '--flag=g_string_append_printf:2:c-format',
103
+ '--flag=g_error_new:3:c-format',
104
+ '--flag=g_set_error:4:c-format',
105
+ '--flag=g_markup_printf_escaped:1:c-format',
106
+ '--flag=g_log:3:c-format',
107
+ '--flag=g_print:1:c-format',
108
+ '--flag=g_printerr:1:c-format',
109
+ '--flag=g_printf:1:c-format',
110
+ '--flag=g_fprintf:2:c-format',
111
+ '--flag=g_sprintf:2:c-format',
112
+ '--flag=g_snprintf:3:c-format',
113
+ ]
114
+ }
115
+
116
+
117
+ class I18nModule(ExtensionModule):
118
+
119
+ INFO = ModuleInfo('i18n')
120
+
121
+ def __init__(self, interpreter: 'Interpreter'):
122
+ super().__init__(interpreter)
123
+ self.methods.update({
124
+ 'merge_file': self.merge_file,
125
+ 'gettext': self.gettext,
126
+ 'itstool_join': self.itstool_join,
127
+ })
128
+ self.tools: T.Dict[str, T.Optional[T.Union[ExternalProgram, build.Executable]]] = {
129
+ 'itstool': None,
130
+ 'msgfmt': None,
131
+ 'msginit': None,
132
+ 'msgmerge': None,
133
+ 'xgettext': None,
134
+ }
135
+
136
+ @staticmethod
137
+ def _get_data_dirs(state: 'ModuleState', dirs: T.Iterable[str]) -> T.List[str]:
138
+ """Returns source directories of relative paths"""
139
+ src_dir = path.join(state.environment.get_source_dir(), state.subdir)
140
+ return [path.join(src_dir, d) for d in dirs]
141
+
142
+ @FeatureNew('i18n.merge_file', '0.37.0')
143
+ @noPosargs
144
+ @typed_kwargs(
145
+ 'i18n.merge_file',
146
+ CT_BUILD_BY_DEFAULT,
147
+ CT_INPUT_KW,
148
+ KwargInfo('install_dir', (str, NoneType)),
149
+ INSTALL_TAG_KW,
150
+ OUTPUT_KW,
151
+ INSTALL_KW,
152
+ _ARGS.evolve(since='0.51.0'),
153
+ _DATA_DIRS.evolve(since='0.41.0'),
154
+ KwargInfo('po_dir', str, required=True),
155
+ KwargInfo('type', str, default='xml', validator=in_set_validator({'xml', 'desktop'})),
156
+ )
157
+ def merge_file(self, state: 'ModuleState', args: T.List['TYPE_var'], kwargs: 'MergeFile') -> ModuleReturnValue:
158
+ if kwargs['install'] and not kwargs['install_dir']:
159
+ raise InvalidArguments('i18n.merge_file: "install_dir" keyword argument must be set when "install" is true.')
160
+
161
+ if self.tools['msgfmt'] is None or not self.tools['msgfmt'].found():
162
+ self.tools['msgfmt'] = state.find_program('msgfmt', for_machine=mesonlib.MachineChoice.BUILD)
163
+ if isinstance(self.tools['msgfmt'], ExternalProgram):
164
+ try:
165
+ have_version = self.tools['msgfmt'].get_version()
166
+ except mesonlib.MesonException as e:
167
+ raise mesonlib.MesonException('i18n.merge_file requires GNU msgfmt') from e
168
+ want_version = '>=0.19' if kwargs['type'] == 'desktop' else '>=0.19.7'
169
+ if not mesonlib.version_compare(have_version, want_version):
170
+ msg = f'i18n.merge_file requires GNU msgfmt {want_version} to produce files of type: ' + kwargs['type'] + f' (got: {have_version})'
171
+ raise mesonlib.MesonException(msg)
172
+ podir = path.join(state.build_to_src, state.subdir, kwargs['po_dir'])
173
+
174
+ ddirs = self._get_data_dirs(state, kwargs['data_dirs'])
175
+ datadirs = '--datadirs=' + ':'.join(ddirs) if ddirs else None
176
+
177
+ command: T.List[T.Union[str, build.BuildTarget, build.CustomTarget,
178
+ build.CustomTargetIndex, 'ExternalProgram', mesonlib.File]] = []
179
+ command.extend(state.environment.get_build_command())
180
+ command.extend([
181
+ '--internal', 'msgfmthelper',
182
+ '--msgfmt=' + self.tools['msgfmt'].get_path(),
183
+ ])
184
+ if datadirs:
185
+ command.append(datadirs)
186
+ command.extend(['@INPUT@', '@OUTPUT@', kwargs['type'], podir])
187
+ if kwargs['args']:
188
+ command.append('--')
189
+ command.extend(kwargs['args'])
190
+
191
+ build_by_default = kwargs['build_by_default']
192
+ if build_by_default is None:
193
+ build_by_default = kwargs['install']
194
+
195
+ install_tag = [kwargs['install_tag']] if kwargs['install_tag'] is not None else None
196
+
197
+ ct = build.CustomTarget(
198
+ '',
199
+ state.subdir,
200
+ state.subproject,
201
+ state.environment,
202
+ command,
203
+ kwargs['input'],
204
+ [kwargs['output']],
205
+ state.is_build_only_subproject,
206
+ build_by_default=build_by_default,
207
+ install=kwargs['install'],
208
+ install_dir=[kwargs['install_dir']] if kwargs['install_dir'] is not None else None,
209
+ install_tag=install_tag,
210
+ description='Merging translations for {}',
211
+ )
212
+
213
+ return ModuleReturnValue(ct, [ct])
214
+
215
+ @typed_pos_args('i18n.gettext', str)
216
+ @typed_kwargs(
217
+ 'i18n.gettext',
218
+ _ARGS,
219
+ _DATA_DIRS.evolve(since='0.36.0'),
220
+ INSTALL_KW.evolve(default=True),
221
+ INSTALL_DIR_KW.evolve(since='0.50.0'),
222
+ KwargInfo('languages', ContainerTypeInfo(list, str), default=[], listify=True),
223
+ KwargInfo(
224
+ 'preset',
225
+ (str, NoneType),
226
+ validator=in_set_validator(set(PRESET_ARGS)),
227
+ since='0.37.0',
228
+ ),
229
+ )
230
+ def gettext(self, state: 'ModuleState', args: T.Tuple[str], kwargs: 'Gettext') -> ModuleReturnValue:
231
+ for tool, strict in [('msgfmt', True), ('msginit', False), ('msgmerge', False), ('xgettext', False)]:
232
+ if self.tools[tool] is None:
233
+ self.tools[tool] = state.find_program(tool, required=False, for_machine=mesonlib.MachineChoice.BUILD)
234
+ # still not found?
235
+ if not self.tools[tool].found():
236
+ if strict:
237
+ mlog.warning('Gettext not found, all translation (po) targets will be ignored.',
238
+ once=True, location=state.current_node)
239
+ return ModuleReturnValue(None, [])
240
+ else:
241
+ mlog.warning(f'{tool!r} not found, maintainer targets will not work',
242
+ once=True, fatal=False, location=state.current_node)
243
+ packagename = args[0]
244
+ pkg_arg = f'--pkgname={packagename}'
245
+
246
+ languages = kwargs['languages']
247
+ lang_arg = '--langs=' + '@@'.join(languages) if languages else None
248
+
249
+ _datadirs = ':'.join(self._get_data_dirs(state, kwargs['data_dirs']))
250
+ datadirs = f'--datadirs={_datadirs}' if _datadirs else None
251
+
252
+ extra_args = kwargs['args']
253
+ targets: T.List['Target'] = []
254
+ gmotargets: T.List['build.CustomTarget'] = []
255
+
256
+ preset = kwargs['preset']
257
+ if preset:
258
+ preset_args = PRESET_ARGS[preset]
259
+ extra_args = list(mesonlib.OrderedSet(preset_args + extra_args))
260
+
261
+ extra_arg = '--extra-args=' + '@@'.join(extra_args) if extra_args else None
262
+
263
+ source_root = path.join(state.source_root, state.root_subdir)
264
+ subdir = path.relpath(state.subdir, start=state.root_subdir) if state.subdir else None
265
+
266
+ potargs = state.environment.get_build_command() + ['--internal', 'gettext', 'pot', pkg_arg]
267
+ potargs.append(f'--source-root={source_root}')
268
+ if subdir:
269
+ potargs.append(f'--subdir={subdir}')
270
+ if datadirs:
271
+ potargs.append(datadirs)
272
+ if extra_arg:
273
+ potargs.append(extra_arg)
274
+ if self.tools['xgettext'].found():
275
+ potargs.append('--xgettext=' + self.tools['xgettext'].get_path())
276
+ pottarget = build.RunTarget(packagename + '-pot', potargs, [], state.subdir, state.subproject,
277
+ state.environment, default_env=False)
278
+ targets.append(pottarget)
279
+
280
+ install = kwargs['install']
281
+ install_dir = kwargs['install_dir'] or state.environment.coredata.get_option(mesonlib.OptionKey('localedir'))
282
+ assert isinstance(install_dir, str), 'for mypy'
283
+ if not languages:
284
+ languages = read_linguas(path.join(state.environment.source_dir, state.subdir))
285
+ for l in languages:
286
+ po_file = mesonlib.File.from_source_file(state.environment.source_dir,
287
+ state.subdir, l+'.po')
288
+ gmotarget = build.CustomTarget(
289
+ f'{packagename}-{l}.mo',
290
+ path.join(state.subdir, l, 'LC_MESSAGES'),
291
+ state.subproject,
292
+ state.environment,
293
+ [self.tools['msgfmt'], '-o', '@OUTPUT@', '@INPUT@'],
294
+ [po_file],
295
+ [f'{packagename}.mo'],
296
+ state.is_build_only_subproject,
297
+ install=install,
298
+ # We have multiple files all installed as packagename+'.mo' in different install subdirs.
299
+ # What we really wanted to do, probably, is have a rename: kwarg, but that's not available
300
+ # to custom_targets. Crude hack: set the build target's subdir manually.
301
+ # Bonus: the build tree has something usable as an uninstalled bindtextdomain() target dir.
302
+ install_dir=[path.join(install_dir, l, 'LC_MESSAGES')],
303
+ install_tag=['i18n'],
304
+ description='Building translation {}',
305
+ )
306
+ targets.append(gmotarget)
307
+ gmotargets.append(gmotarget)
308
+
309
+ allgmotarget = build.AliasTarget(packagename + '-gmo', gmotargets, state.subdir, state.subproject,
310
+ state.environment)
311
+ targets.append(allgmotarget)
312
+
313
+ updatepoargs = state.environment.get_build_command() + ['--internal', 'gettext', 'update_po', pkg_arg]
314
+ updatepoargs.append(f'--source-root={source_root}')
315
+ if subdir:
316
+ updatepoargs.append(f'--subdir={subdir}')
317
+ if lang_arg:
318
+ updatepoargs.append(lang_arg)
319
+ if datadirs:
320
+ updatepoargs.append(datadirs)
321
+ if extra_arg:
322
+ updatepoargs.append(extra_arg)
323
+ for tool in ['msginit', 'msgmerge']:
324
+ if self.tools[tool].found():
325
+ updatepoargs.append(f'--{tool}=' + self.tools[tool].get_path())
326
+ updatepotarget = build.RunTarget(packagename + '-update-po', updatepoargs, [], state.subdir, state.subproject,
327
+ state.environment, default_env=False)
328
+ targets.append(updatepotarget)
329
+
330
+ return ModuleReturnValue([gmotargets, pottarget, updatepotarget], targets)
331
+
332
+ @FeatureNew('i18n.itstool_join', '0.62.0')
333
+ @noPosargs
334
+ @typed_kwargs(
335
+ 'i18n.itstool_join',
336
+ CT_BUILD_BY_DEFAULT,
337
+ CT_INPUT_KW,
338
+ KwargInfo('install_dir', (str, NoneType)),
339
+ INSTALL_TAG_KW,
340
+ OUTPUT_KW,
341
+ INSTALL_KW,
342
+ _ARGS.evolve(),
343
+ KwargInfo('its_files', ContainerTypeInfo(list, str)),
344
+ KwargInfo('mo_targets', ContainerTypeInfo(list, build.CustomTarget), required=True),
345
+ )
346
+ def itstool_join(self, state: 'ModuleState', args: T.List['TYPE_var'], kwargs: 'ItsJoinFile') -> ModuleReturnValue:
347
+ if kwargs['install'] and not kwargs['install_dir']:
348
+ raise InvalidArguments('i18n.itstool_join: "install_dir" keyword argument must be set when "install" is true.')
349
+
350
+ if self.tools['itstool'] is None:
351
+ self.tools['itstool'] = state.find_program('itstool', for_machine=mesonlib.MachineChoice.BUILD)
352
+ mo_targets = kwargs['mo_targets']
353
+ its_files = kwargs.get('its_files', [])
354
+
355
+ mo_fnames = []
356
+ for target in mo_targets:
357
+ mo_fnames.append(path.join(target.get_source_subdir(), target.get_outputs()[0]))
358
+
359
+ command: T.List[T.Union[str, build.BuildTarget, build.CustomTarget,
360
+ build.CustomTargetIndex, 'ExternalProgram', mesonlib.File]] = []
361
+ command.extend(state.environment.get_build_command())
362
+
363
+ itstool_cmd = self.tools['itstool'].get_command()
364
+ # TODO: python 3.8 can use shlex.join()
365
+ command.extend([
366
+ '--internal', 'itstool', 'join',
367
+ '-i', '@INPUT@',
368
+ '-o', '@OUTPUT@',
369
+ '--itstool=' + ' '.join(shlex.quote(c) for c in itstool_cmd),
370
+ ])
371
+ if its_files:
372
+ for fname in its_files:
373
+ if not path.isabs(fname):
374
+ fname = path.join(state.environment.source_dir, state.subdir, fname)
375
+ command.extend(['--its', fname])
376
+ command.extend(mo_fnames)
377
+
378
+ build_by_default = kwargs['build_by_default']
379
+ if build_by_default is None:
380
+ build_by_default = kwargs['install']
381
+
382
+ install_tag = [kwargs['install_tag']] if kwargs['install_tag'] is not None else None
383
+
384
+ ct = build.CustomTarget(
385
+ '',
386
+ state.subdir,
387
+ state.subproject,
388
+ state.environment,
389
+ command,
390
+ kwargs['input'],
391
+ [kwargs['output']],
392
+ state.is_build_only_subproject,
393
+ build_by_default=build_by_default,
394
+ extra_depends=mo_targets,
395
+ install=kwargs['install'],
396
+ install_dir=[kwargs['install_dir']] if kwargs['install_dir'] is not None else None,
397
+ install_tag=install_tag,
398
+ description='Merging translations for {}',
399
+ )
400
+
401
+ return ModuleReturnValue(ct, [ct])
402
+
403
+
404
+ def initialize(interp: 'Interpreter') -> I18nModule:
405
+ return I18nModule(interp)
@@ -0,0 +1,123 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2017 The Meson development team
3
+
4
+ from __future__ import annotations
5
+ import itertools
6
+ import typing as T
7
+
8
+ from . import ExtensionModule, ModuleReturnValue, ModuleInfo
9
+ from .. import build
10
+ from .. import mesonlib
11
+ from ..interpreter.type_checking import CT_INPUT_KW
12
+ from ..interpreterbase.decorators import KwargInfo, typed_kwargs, typed_pos_args
13
+
14
+ if T.TYPE_CHECKING:
15
+ from typing_extensions import TypedDict
16
+
17
+ from . import ModuleState
18
+ from ..interpreter import Interpreter
19
+ from ..programs import ExternalProgram
20
+
21
+ class ProjectKwargs(TypedDict):
22
+
23
+ sources: T.List[T.Union[mesonlib.FileOrString, build.GeneratedTypes]]
24
+ constraint_file: T.Union[mesonlib.FileOrString, build.GeneratedTypes]
25
+
26
+ class IceStormModule(ExtensionModule):
27
+
28
+ INFO = ModuleInfo('FPGA/Icestorm', '0.45.0', unstable=True)
29
+
30
+ def __init__(self, interpreter: Interpreter) -> None:
31
+ super().__init__(interpreter)
32
+ self.tools: T.Dict[str, T.Union[ExternalProgram, build.Executable]] = {}
33
+ self.methods.update({
34
+ 'project': self.project,
35
+ })
36
+
37
+ def detect_tools(self, state: ModuleState) -> None:
38
+ self.tools['yosys'] = state.find_program('yosys')
39
+ self.tools['arachne'] = state.find_program('arachne-pnr')
40
+ self.tools['icepack'] = state.find_program('icepack')
41
+ self.tools['iceprog'] = state.find_program('iceprog')
42
+ self.tools['icetime'] = state.find_program('icetime')
43
+
44
+ @typed_pos_args('icestorm.project', str,
45
+ varargs=(str, mesonlib.File, build.CustomTarget, build.CustomTargetIndex,
46
+ build.GeneratedList))
47
+ @typed_kwargs(
48
+ 'icestorm.project',
49
+ CT_INPUT_KW.evolve(name='sources'),
50
+ KwargInfo(
51
+ 'constraint_file',
52
+ (str, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.GeneratedList),
53
+ required=True,
54
+ )
55
+ )
56
+ def project(self, state: ModuleState,
57
+ args: T.Tuple[str, T.List[T.Union[mesonlib.FileOrString, build.GeneratedTypes]]],
58
+ kwargs: ProjectKwargs) -> ModuleReturnValue:
59
+ if not self.tools:
60
+ self.detect_tools(state)
61
+ proj_name, arg_sources = args
62
+ all_sources = self.interpreter.source_strings_to_files(
63
+ list(itertools.chain(arg_sources, kwargs['sources'])))
64
+
65
+ blif_target = build.CustomTarget(
66
+ f'{proj_name}_blif',
67
+ state.subdir,
68
+ state.subproject,
69
+ state.environment,
70
+ [self.tools['yosys'], '-q', '-p', 'synth_ice40 -blif @OUTPUT@', '@INPUT@'],
71
+ all_sources,
72
+ [f'{proj_name}.blif'],
73
+ state.is_build_only_subproject,
74
+ )
75
+
76
+ asc_target = build.CustomTarget(
77
+ f'{proj_name}_asc',
78
+ state.subdir,
79
+ state.subproject,
80
+ state.environment,
81
+ [self.tools['arachne'], '-q', '-d', '1k', '-p', '@INPUT@', '-o', '@OUTPUT@'],
82
+ [kwargs['constraint_file'], blif_target],
83
+ [f'{proj_name}.asc'],
84
+ state.is_build_only_subproject,
85
+ )
86
+
87
+ bin_target = build.CustomTarget(
88
+ f'{proj_name}_bin',
89
+ state.subdir,
90
+ state.subproject,
91
+ state.environment,
92
+ [self.tools['icepack'], '@INPUT@', '@OUTPUT@'],
93
+ [asc_target],
94
+ [f'{proj_name}.bin'],
95
+ state.is_build_only_subproject,
96
+ build_by_default=True,
97
+ )
98
+
99
+ upload_target = build.RunTarget(
100
+ f'{proj_name}-upload',
101
+ [self.tools['iceprog'], bin_target],
102
+ [],
103
+ state.subdir,
104
+ state.subproject,
105
+ state.environment,
106
+ )
107
+
108
+ time_target = build.RunTarget(
109
+ f'{proj_name}-time',
110
+ [self.tools['icetime'], bin_target],
111
+ [],
112
+ state.subdir,
113
+ state.subproject,
114
+ state.environment,
115
+ )
116
+
117
+ return ModuleReturnValue(
118
+ None,
119
+ [blif_target, asc_target, bin_target, upload_target, time_target])
120
+
121
+
122
+ def initialize(interp: Interpreter) -> IceStormModule:
123
+ return IceStormModule(interp)
@@ -0,0 +1,112 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2021 The Meson development team
3
+
4
+ from __future__ import annotations
5
+
6
+ import pathlib
7
+ import typing as T
8
+
9
+ from mesonbuild import mesonlib
10
+ from mesonbuild.build import CustomTarget, CustomTargetIndex, GeneratedList, Target
11
+ from mesonbuild.compilers import detect_compiler_for
12
+ from mesonbuild.interpreterbase.decorators import ContainerTypeInfo, FeatureDeprecated, FeatureNew, KwargInfo, typed_pos_args, typed_kwargs
13
+ from mesonbuild.mesonlib import version_compare, MachineChoice
14
+ from . import NewExtensionModule, ModuleReturnValue, ModuleInfo
15
+ from ..interpreter.type_checking import NoneType
16
+
17
+ if T.TYPE_CHECKING:
18
+ from . import ModuleState
19
+ from ..compilers import Compiler
20
+ from ..interpreter import Interpreter
21
+
22
+ class JavaModule(NewExtensionModule):
23
+
24
+ INFO = ModuleInfo('java', '0.60.0')
25
+
26
+ def __init__(self, interpreter: Interpreter):
27
+ super().__init__()
28
+ self.methods.update({
29
+ 'generate_native_headers': self.generate_native_headers,
30
+ 'native_headers': self.native_headers,
31
+ })
32
+
33
+ def __get_java_compiler(self, state: ModuleState) -> Compiler:
34
+ if 'java' not in state.environment.coredata.compilers[MachineChoice.BUILD]:
35
+ detect_compiler_for(state.environment, 'java', MachineChoice.BUILD, False, state.subproject)
36
+ return state.environment.coredata.compilers[MachineChoice.BUILD]['java']
37
+
38
+ @FeatureNew('java.generate_native_headers', '0.62.0')
39
+ @FeatureDeprecated('java.generate_native_headers', '1.0.0')
40
+ @typed_pos_args(
41
+ 'java.generate_native_headers',
42
+ varargs=(str, mesonlib.File, Target, CustomTargetIndex, GeneratedList))
43
+ @typed_kwargs(
44
+ 'java.generate_native_headers',
45
+ KwargInfo('classes', ContainerTypeInfo(list, str), default=[], listify=True, required=True),
46
+ KwargInfo('package', (str, NoneType), default=None))
47
+ def generate_native_headers(self, state: ModuleState, args: T.Tuple[T.List[mesonlib.FileOrString]],
48
+ kwargs: T.Dict[str, T.Optional[str]]) -> ModuleReturnValue:
49
+ return self.__native_headers(state, args, kwargs)
50
+
51
+ @FeatureNew('java.native_headers', '1.0.0')
52
+ @typed_pos_args(
53
+ 'java.native_headers',
54
+ varargs=(str, mesonlib.File, Target, CustomTargetIndex, GeneratedList))
55
+ @typed_kwargs(
56
+ 'java.native_headers',
57
+ KwargInfo('classes', ContainerTypeInfo(list, str), default=[], listify=True, required=True),
58
+ KwargInfo('package', (str, NoneType), default=None))
59
+ def native_headers(self, state: ModuleState, args: T.Tuple[T.List[mesonlib.FileOrString]],
60
+ kwargs: T.Dict[str, T.Optional[str]]) -> ModuleReturnValue:
61
+ return self.__native_headers(state, args, kwargs)
62
+
63
+ def __native_headers(self, state: ModuleState, args: T.Tuple[T.List[mesonlib.FileOrString]],
64
+ kwargs: T.Dict[str, T.Optional[str]]) -> ModuleReturnValue:
65
+ classes = T.cast('T.List[str]', kwargs.get('classes'))
66
+ package = kwargs.get('package')
67
+
68
+ if package:
69
+ sanitized_package = package.replace("-", "_").replace(".", "_")
70
+
71
+ headers: T.List[str] = []
72
+ for clazz in classes:
73
+ sanitized_clazz = clazz.replace(".", "_")
74
+ if package:
75
+ headers.append(f'{sanitized_package}_{sanitized_clazz}.h')
76
+ else:
77
+ headers.append(f'{sanitized_clazz}.h')
78
+
79
+ javac = self.__get_java_compiler(state)
80
+
81
+ command = mesonlib.listify([
82
+ javac.exelist,
83
+ '-d',
84
+ '@PRIVATE_DIR@',
85
+ '-h',
86
+ state.subdir,
87
+ '@INPUT@',
88
+ ])
89
+
90
+ prefix = classes[0] if not package else package
91
+
92
+ target = CustomTarget(
93
+ f'{prefix}-native-headers',
94
+ state.subdir,
95
+ state.subproject,
96
+ state.environment,
97
+ command,
98
+ args[0],
99
+ headers,
100
+ state.is_build_only_subproject,
101
+ backend=state.backend
102
+ )
103
+
104
+ # It is only known that 1.8.0 won't pre-create the directory. 11 and 16
105
+ # do not exhibit this behavior.
106
+ if version_compare(javac.version, '1.8.0'):
107
+ pathlib.Path(state.backend.get_target_private_dir_abs(target)).mkdir(parents=True, exist_ok=True)
108
+
109
+ return ModuleReturnValue(target, [target])
110
+
111
+ def initialize(*args: T.Any, **kwargs: T.Any) -> JavaModule:
112
+ return JavaModule(*args, **kwargs)