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,618 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2013-2019 The Meson development team
3
+
4
+ # This file contains the detection logic for miscellaneous external dependencies.
5
+ from __future__ import annotations
6
+
7
+ import functools
8
+ import re
9
+ import typing as T
10
+
11
+ from .. import mesonlib
12
+ from .. import mlog
13
+ from .base import DependencyException, DependencyMethods
14
+ from .base import BuiltinDependency, SystemDependency
15
+ from .cmake import CMakeDependency, CMakeDependencyFactory
16
+ from .configtool import ConfigToolDependency
17
+ from .detect import packages
18
+ from .factory import DependencyFactory, factory_methods
19
+ from .pkgconfig import PkgConfigDependency
20
+
21
+ if T.TYPE_CHECKING:
22
+ from ..environment import Environment
23
+ from .factory import DependencyGenerator
24
+
25
+
26
+ @factory_methods({DependencyMethods.PKGCONFIG, DependencyMethods.CMAKE})
27
+ def netcdf_factory(env: 'Environment',
28
+ for_machine: 'mesonlib.MachineChoice',
29
+ kwargs: T.Dict[str, T.Any],
30
+ methods: T.List[DependencyMethods]) -> T.List['DependencyGenerator']:
31
+ language = kwargs.get('language', 'c')
32
+ if language not in ('c', 'cpp', 'fortran'):
33
+ raise DependencyException(f'Language {language} is not supported with NetCDF.')
34
+
35
+ candidates: T.List['DependencyGenerator'] = []
36
+
37
+ if DependencyMethods.PKGCONFIG in methods:
38
+ if language == 'fortran':
39
+ pkg = 'netcdf-fortran'
40
+ else:
41
+ pkg = 'netcdf'
42
+
43
+ candidates.append(functools.partial(PkgConfigDependency, pkg, env, kwargs, language=language))
44
+
45
+ if DependencyMethods.CMAKE in methods:
46
+ candidates.append(functools.partial(CMakeDependency, 'NetCDF', env, kwargs, language=language))
47
+
48
+ return candidates
49
+
50
+ packages['netcdf'] = netcdf_factory
51
+
52
+
53
+ class DlBuiltinDependency(BuiltinDependency):
54
+ def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any]):
55
+ super().__init__(name, env, kwargs)
56
+ self.feature_since = ('0.62.0', "consider checking for `dlopen` with and without `find_library('dl')`")
57
+
58
+ if self.clib_compiler.has_function('dlopen', '#include <dlfcn.h>', env)[0]:
59
+ self.is_found = True
60
+
61
+
62
+ class DlSystemDependency(SystemDependency):
63
+ def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any]):
64
+ super().__init__(name, env, kwargs)
65
+ self.feature_since = ('0.62.0', "consider checking for `dlopen` with and without `find_library('dl')`")
66
+
67
+ h = self.clib_compiler.has_header('dlfcn.h', '', env)
68
+ self.link_args = self.clib_compiler.find_library('dl', env, [], self.libtype)
69
+
70
+ if h[0] and self.link_args:
71
+ self.is_found = True
72
+
73
+
74
+ class OpenMPDependency(SystemDependency):
75
+ # Map date of specification release (which is the macro value) to a version.
76
+ VERSIONS = {
77
+ '202111': '5.2',
78
+ '202011': '5.1',
79
+ '201811': '5.0',
80
+ '201611': '5.0-revision1', # This is supported by ICC 19.x
81
+ '201511': '4.5',
82
+ '201307': '4.0',
83
+ '201107': '3.1',
84
+ '200805': '3.0',
85
+ '200505': '2.5',
86
+ '200203': '2.0',
87
+ '199810': '1.0',
88
+ }
89
+
90
+ def __init__(self, environment: 'Environment', kwargs: T.Dict[str, T.Any]) -> None:
91
+ language = kwargs.get('language')
92
+ super().__init__('openmp', environment, kwargs, language=language)
93
+ self.is_found = False
94
+ if self.clib_compiler.get_id() == 'nagfor':
95
+ # No macro defined for OpenMP, but OpenMP 3.1 is supported.
96
+ self.version = '3.1'
97
+ self.is_found = True
98
+ self.compile_args = self.link_args = self.clib_compiler.openmp_flags()
99
+ return
100
+ if self.clib_compiler.get_id() == 'pgi':
101
+ # through at least PGI 19.4, there is no macro defined for OpenMP, but OpenMP 3.1 is supported.
102
+ self.version = '3.1'
103
+ self.is_found = True
104
+ self.compile_args = self.link_args = self.clib_compiler.openmp_flags()
105
+ return
106
+
107
+ try:
108
+ openmp_date = self.clib_compiler.get_define(
109
+ '_OPENMP', '', self.env, self.clib_compiler.openmp_flags(), [self], disable_cache=True)[0]
110
+ except mesonlib.EnvironmentException as e:
111
+ mlog.debug('OpenMP support not available in the compiler')
112
+ mlog.debug(e)
113
+ openmp_date = None
114
+
115
+ if openmp_date:
116
+ try:
117
+ self.version = self.VERSIONS[openmp_date]
118
+ except KeyError:
119
+ mlog.debug(f'Could not find an OpenMP version matching {openmp_date}')
120
+ if openmp_date == '_OPENMP':
121
+ mlog.debug('This can be caused by flags such as gcc\'s `-fdirectives-only`, which affect preprocessor behavior.')
122
+ return
123
+
124
+ if self.clib_compiler.get_id() == 'clang-cl':
125
+ # this is necessary for clang-cl, see https://github.com/mesonbuild/meson/issues/5298
126
+ clangcl_openmp_link_args = self.clib_compiler.find_library("libomp", self.env, [])
127
+ if not clangcl_openmp_link_args:
128
+ mlog.log(mlog.yellow('WARNING:'), 'OpenMP found but libomp for clang-cl missing.')
129
+ return
130
+ self.link_args.extend(clangcl_openmp_link_args)
131
+
132
+ # Flang has omp_lib.h
133
+ header_names = ('omp.h', 'omp_lib.h')
134
+ for name in header_names:
135
+ if self.clib_compiler.has_header(name, '', self.env, dependencies=[self], disable_cache=True)[0]:
136
+ self.is_found = True
137
+ self.compile_args.extend(self.clib_compiler.openmp_flags())
138
+ self.link_args.extend(self.clib_compiler.openmp_link_flags())
139
+ break
140
+ if not self.is_found:
141
+ mlog.log(mlog.yellow('WARNING:'), 'OpenMP found but omp.h missing.')
142
+
143
+ packages['openmp'] = OpenMPDependency
144
+
145
+
146
+ class ThreadDependency(SystemDependency):
147
+ def __init__(self, name: str, environment: 'Environment', kwargs: T.Dict[str, T.Any]) -> None:
148
+ super().__init__(name, environment, kwargs)
149
+ self.is_found = True
150
+ # Happens if you are using a language with threads
151
+ # concept without C, such as plain Cuda.
152
+ if not self.clib_compiler:
153
+ self.compile_args = []
154
+ self.link_args = []
155
+ else:
156
+ self.compile_args = self.clib_compiler.thread_flags(environment)
157
+ self.link_args = self.clib_compiler.thread_link_flags(environment)
158
+
159
+
160
+ class BlocksDependency(SystemDependency):
161
+ def __init__(self, environment: 'Environment', kwargs: T.Dict[str, T.Any]) -> None:
162
+ super().__init__('blocks', environment, kwargs)
163
+ self.name = 'blocks'
164
+ self.is_found = False
165
+
166
+ if self.env.machines[self.for_machine].is_darwin():
167
+ self.compile_args = []
168
+ self.link_args = []
169
+ else:
170
+ self.compile_args = ['-fblocks']
171
+ self.link_args = ['-lBlocksRuntime']
172
+
173
+ if not self.clib_compiler.has_header('Block.h', '', environment, disable_cache=True) or \
174
+ not self.clib_compiler.find_library('BlocksRuntime', environment, []):
175
+ mlog.log(mlog.red('ERROR:'), 'BlocksRuntime not found.')
176
+ return
177
+
178
+ source = '''
179
+ int main(int argc, char **argv)
180
+ {
181
+ int (^callback)(void) = ^ int (void) { return 0; };
182
+ return callback();
183
+ }'''
184
+
185
+ with self.clib_compiler.compile(source, extra_args=self.compile_args + self.link_args) as p:
186
+ if p.returncode != 0:
187
+ mlog.log(mlog.red('ERROR:'), 'Compiler does not support blocks extension.')
188
+ return
189
+
190
+ self.is_found = True
191
+
192
+ packages['blocks'] = BlocksDependency
193
+
194
+
195
+ class PcapDependencyConfigTool(ConfigToolDependency):
196
+
197
+ tools = ['pcap-config']
198
+ tool_name = 'pcap-config'
199
+
200
+ # version 1.10.2 added error checking for invalid arguments
201
+ # version 1.10.3 will hopefully add actual support for --version
202
+ skip_version = '--help'
203
+
204
+ def __init__(self, name: str, environment: 'Environment', kwargs: T.Dict[str, T.Any]):
205
+ super().__init__(name, environment, kwargs)
206
+ if not self.is_found:
207
+ return
208
+ self.compile_args = self.get_config_value(['--cflags'], 'compile_args')
209
+ self.link_args = self.get_config_value(['--libs'], 'link_args')
210
+ if self.version is None:
211
+ # older pcap-config versions don't support this
212
+ self.version = self.get_pcap_lib_version()
213
+
214
+ def get_pcap_lib_version(self) -> T.Optional[str]:
215
+ # Since we seem to need to run a program to discover the pcap version,
216
+ # we can't do that when cross-compiling
217
+ # FIXME: this should be handled if we have an exe_wrapper
218
+ if not self.env.machines.matches_build_machine(self.for_machine):
219
+ return None
220
+
221
+ v = self.clib_compiler.get_return_value('pcap_lib_version', 'string',
222
+ '#include <pcap.h>', self.env, [], [self])
223
+ v = re.sub(r'libpcap version ', '', str(v))
224
+ v = re.sub(r' -- Apple version.*$', '', v)
225
+ return v
226
+
227
+
228
+ class CupsDependencyConfigTool(ConfigToolDependency):
229
+
230
+ tools = ['cups-config']
231
+ tool_name = 'cups-config'
232
+
233
+ def __init__(self, name: str, environment: 'Environment', kwargs: T.Dict[str, T.Any]):
234
+ super().__init__(name, environment, kwargs)
235
+ if not self.is_found:
236
+ return
237
+ self.compile_args = self.get_config_value(['--cflags'], 'compile_args')
238
+ self.link_args = self.get_config_value(['--ldflags', '--libs'], 'link_args')
239
+
240
+
241
+ class LibWmfDependencyConfigTool(ConfigToolDependency):
242
+
243
+ tools = ['libwmf-config']
244
+ tool_name = 'libwmf-config'
245
+
246
+ def __init__(self, name: str, environment: 'Environment', kwargs: T.Dict[str, T.Any]):
247
+ super().__init__(name, environment, kwargs)
248
+ if not self.is_found:
249
+ return
250
+ self.compile_args = self.get_config_value(['--cflags'], 'compile_args')
251
+ self.link_args = self.get_config_value(['--libs'], 'link_args')
252
+
253
+
254
+ class LibGCryptDependencyConfigTool(ConfigToolDependency):
255
+
256
+ tools = ['libgcrypt-config']
257
+ tool_name = 'libgcrypt-config'
258
+
259
+ def __init__(self, name: str, environment: 'Environment', kwargs: T.Dict[str, T.Any]):
260
+ super().__init__(name, environment, kwargs)
261
+ if not self.is_found:
262
+ return
263
+ self.compile_args = self.get_config_value(['--cflags'], 'compile_args')
264
+ self.link_args = self.get_config_value(['--libs'], 'link_args')
265
+ self.version = self.get_config_value(['--version'], 'version')[0]
266
+
267
+
268
+ class GpgmeDependencyConfigTool(ConfigToolDependency):
269
+
270
+ tools = ['gpgme-config']
271
+ tool_name = 'gpg-config'
272
+
273
+ def __init__(self, name: str, environment: 'Environment', kwargs: T.Dict[str, T.Any]):
274
+ super().__init__(name, environment, kwargs)
275
+ if not self.is_found:
276
+ return
277
+ self.compile_args = self.get_config_value(['--cflags'], 'compile_args')
278
+ self.link_args = self.get_config_value(['--libs'], 'link_args')
279
+ self.version = self.get_config_value(['--version'], 'version')[0]
280
+
281
+
282
+ class ShadercDependency(SystemDependency):
283
+
284
+ def __init__(self, environment: 'Environment', kwargs: T.Dict[str, T.Any]):
285
+ super().__init__('shaderc', environment, kwargs)
286
+
287
+ static_lib = 'shaderc_combined'
288
+ shared_lib = 'shaderc_shared'
289
+
290
+ libs = [shared_lib, static_lib]
291
+ if self.static:
292
+ libs.reverse()
293
+
294
+ cc = self.get_compiler()
295
+
296
+ for lib in libs:
297
+ self.link_args = cc.find_library(lib, environment, [])
298
+ if self.link_args is not None:
299
+ self.is_found = True
300
+
301
+ if self.static and lib != static_lib:
302
+ mlog.warning(f'Static library {static_lib!r} not found for dependency '
303
+ f'{self.name!r}, may not be statically linked')
304
+
305
+ break
306
+
307
+
308
+ class CursesConfigToolDependency(ConfigToolDependency):
309
+
310
+ """Use the curses config tools."""
311
+
312
+ tool = 'curses-config'
313
+ # ncurses5.4-config is for macOS Catalina
314
+ tools = ['ncursesw6-config', 'ncursesw5-config', 'ncurses6-config', 'ncurses5-config', 'ncurses5.4-config']
315
+
316
+ def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any], language: T.Optional[str] = None):
317
+ super().__init__(name, env, kwargs, language)
318
+ if not self.is_found:
319
+ return
320
+ self.compile_args = self.get_config_value(['--cflags'], 'compile_args')
321
+ self.link_args = self.get_config_value(['--libs'], 'link_args')
322
+
323
+
324
+ class CursesSystemDependency(SystemDependency):
325
+
326
+ """Curses dependency the hard way.
327
+
328
+ This replaces hand rolled find_library() and has_header() calls. We
329
+ provide this for portability reasons, there are a large number of curses
330
+ implementations, and the differences between them can be very annoying.
331
+ """
332
+
333
+ def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any]):
334
+ super().__init__(name, env, kwargs)
335
+
336
+ candidates = [
337
+ ('pdcurses', ['pdcurses/curses.h']),
338
+ ('ncursesw', ['ncursesw/ncurses.h', 'ncurses.h']),
339
+ ('ncurses', ['ncurses/ncurses.h', 'ncurses/curses.h', 'ncurses.h']),
340
+ ('curses', ['curses.h']),
341
+ ]
342
+
343
+ # Not sure how else to elegantly break out of both loops
344
+ for lib, headers in candidates:
345
+ l = self.clib_compiler.find_library(lib, env, [])
346
+ if l:
347
+ for header in headers:
348
+ h = self.clib_compiler.has_header(header, '', env)
349
+ if h[0]:
350
+ self.is_found = True
351
+ self.link_args = l
352
+ # Not sure how to find version for non-ncurses curses
353
+ # implementations. The one in illumos/OpenIndiana
354
+ # doesn't seem to have a version defined in the header.
355
+ if lib.startswith('ncurses'):
356
+ v, _ = self.clib_compiler.get_define('NCURSES_VERSION', f'#include <{header}>', env, [], [self])
357
+ self.version = v.strip('"')
358
+ if lib.startswith('pdcurses'):
359
+ v_major, _ = self.clib_compiler.get_define('PDC_VER_MAJOR', f'#include <{header}>', env, [], [self])
360
+ v_minor, _ = self.clib_compiler.get_define('PDC_VER_MINOR', f'#include <{header}>', env, [], [self])
361
+ self.version = f'{v_major}.{v_minor}'
362
+
363
+ # Check the version if possible, emit a warning if we can't
364
+ req = kwargs.get('version')
365
+ if req:
366
+ if self.version:
367
+ self.is_found = mesonlib.version_compare(self.version, req)
368
+ else:
369
+ mlog.warning('Cannot determine version of curses to compare against.')
370
+
371
+ if self.is_found:
372
+ mlog.debug('Curses library:', l)
373
+ mlog.debug('Curses header:', header)
374
+ break
375
+ if self.is_found:
376
+ break
377
+
378
+
379
+ class IconvBuiltinDependency(BuiltinDependency):
380
+ def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any]):
381
+ super().__init__(name, env, kwargs)
382
+ self.feature_since = ('0.60.0', "consider checking for `iconv_open` with and without `find_library('iconv')`")
383
+ code = '''#include <iconv.h>\n\nint main() {\n iconv_open("","");\n}''' # [ignore encoding] this is C, not python, Mr. Lint
384
+
385
+ if self.clib_compiler.links(code, env)[0]:
386
+ self.is_found = True
387
+
388
+
389
+ class IconvSystemDependency(SystemDependency):
390
+ def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any]):
391
+ super().__init__(name, env, kwargs)
392
+ self.feature_since = ('0.60.0', "consider checking for `iconv_open` with and without find_library('iconv')")
393
+
394
+ h = self.clib_compiler.has_header('iconv.h', '', env)
395
+ self.link_args = self.clib_compiler.find_library('iconv', env, [], self.libtype)
396
+
397
+ if h[0] and self.link_args:
398
+ self.is_found = True
399
+
400
+
401
+ class IntlBuiltinDependency(BuiltinDependency):
402
+ def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any]):
403
+ super().__init__(name, env, kwargs)
404
+ self.feature_since = ('0.59.0', "consider checking for `ngettext` with and without `find_library('intl')`")
405
+ code = '''#include <libintl.h>\n\nint main() {\n gettext("Hello world");\n}'''
406
+
407
+ if self.clib_compiler.links(code, env)[0]:
408
+ self.is_found = True
409
+
410
+
411
+ class IntlSystemDependency(SystemDependency):
412
+ def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any]):
413
+ super().__init__(name, env, kwargs)
414
+ self.feature_since = ('0.59.0', "consider checking for `ngettext` with and without `find_library('intl')`")
415
+
416
+ h = self.clib_compiler.has_header('libintl.h', '', env)
417
+ self.link_args = self.clib_compiler.find_library('intl', env, [], self.libtype)
418
+
419
+ if h[0] and self.link_args:
420
+ self.is_found = True
421
+
422
+ if self.static:
423
+ if not self._add_sub_dependency(iconv_factory(env, self.for_machine, {'static': True})):
424
+ self.is_found = False
425
+ return
426
+
427
+
428
+ class OpensslSystemDependency(SystemDependency):
429
+ def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any]):
430
+ super().__init__(name, env, kwargs)
431
+
432
+ dependency_kwargs = {
433
+ 'method': 'system',
434
+ 'static': self.static,
435
+ }
436
+ if not self.clib_compiler.has_header('openssl/ssl.h', '', env)[0]:
437
+ return
438
+
439
+ # openssl >= 3 only
440
+ self.version = self.clib_compiler.get_define('OPENSSL_VERSION_STR', '#include <openssl/opensslv.h>', env, [], [self])[0]
441
+ # openssl < 3 only
442
+ if not self.version:
443
+ version_hex = self.clib_compiler.get_define('OPENSSL_VERSION_NUMBER', '#include <openssl/opensslv.h>', env, [], [self])[0]
444
+ if not version_hex:
445
+ return
446
+ version_hex = version_hex.rstrip('L')
447
+ version_ints = [((int(version_hex.rstrip('L'), 16) >> 4 + i) & 0xFF) for i in (24, 16, 8, 0)]
448
+ # since this is openssl, the format is 1.2.3a in four parts
449
+ self.version = '.'.join(str(i) for i in version_ints[:3]) + chr(ord('a') + version_ints[3] - 1)
450
+
451
+ if name == 'openssl':
452
+ if self._add_sub_dependency(libssl_factory(env, self.for_machine, dependency_kwargs)) and \
453
+ self._add_sub_dependency(libcrypto_factory(env, self.for_machine, dependency_kwargs)):
454
+ self.is_found = True
455
+ return
456
+ else:
457
+ self.link_args = self.clib_compiler.find_library(name.lstrip('lib'), env, [], self.libtype)
458
+ if not self.link_args:
459
+ return
460
+
461
+ if not self.static:
462
+ self.is_found = True
463
+ else:
464
+ if name == 'libssl':
465
+ if self._add_sub_dependency(libcrypto_factory(env, self.for_machine, dependency_kwargs)):
466
+ self.is_found = True
467
+ elif name == 'libcrypto':
468
+ use_threads = self.clib_compiler.has_header_symbol('openssl/opensslconf.h', 'OPENSSL_THREADS', '', env, dependencies=[self])[0]
469
+ if not use_threads or self._add_sub_dependency(threads_factory(env, self.for_machine, {})):
470
+ self.is_found = True
471
+ # only relevant on platforms where it is distributed with the libc, in which case it always succeeds
472
+ sublib = self.clib_compiler.find_library('dl', env, [], self.libtype)
473
+ if sublib:
474
+ self.link_args.extend(sublib)
475
+
476
+
477
+ @factory_methods({DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL, DependencyMethods.SYSTEM})
478
+ def curses_factory(env: 'Environment',
479
+ for_machine: 'mesonlib.MachineChoice',
480
+ kwargs: T.Dict[str, T.Any],
481
+ methods: T.List[DependencyMethods]) -> T.List['DependencyGenerator']:
482
+ candidates: T.List['DependencyGenerator'] = []
483
+
484
+ if DependencyMethods.PKGCONFIG in methods:
485
+ pkgconfig_files = ['pdcurses', 'ncursesw', 'ncurses', 'curses']
486
+ for pkg in pkgconfig_files:
487
+ candidates.append(functools.partial(PkgConfigDependency, pkg, env, kwargs))
488
+
489
+ # There are path handling problems with these methods on msys, and they
490
+ # don't apply to windows otherwise (cygwin is handled separately from
491
+ # windows)
492
+ if not env.machines[for_machine].is_windows():
493
+ if DependencyMethods.CONFIG_TOOL in methods:
494
+ candidates.append(functools.partial(CursesConfigToolDependency, 'curses', env, kwargs))
495
+
496
+ if DependencyMethods.SYSTEM in methods:
497
+ candidates.append(functools.partial(CursesSystemDependency, 'curses', env, kwargs))
498
+
499
+ return candidates
500
+ packages['curses'] = curses_factory
501
+
502
+
503
+ @factory_methods({DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM})
504
+ def shaderc_factory(env: 'Environment',
505
+ for_machine: 'mesonlib.MachineChoice',
506
+ kwargs: T.Dict[str, T.Any],
507
+ methods: T.List[DependencyMethods]) -> T.List['DependencyGenerator']:
508
+ """Custom DependencyFactory for ShaderC.
509
+
510
+ ShaderC's odd you get three different libraries from the same build
511
+ thing are just easier to represent as a separate function than
512
+ twisting DependencyFactory even more.
513
+ """
514
+ candidates: T.List['DependencyGenerator'] = []
515
+
516
+ if DependencyMethods.PKGCONFIG in methods:
517
+ # ShaderC packages their shared and static libs together
518
+ # and provides different pkg-config files for each one. We
519
+ # smooth over this difference by handling the static
520
+ # keyword before handing off to the pkg-config handler.
521
+ shared_libs = ['shaderc']
522
+ static_libs = ['shaderc_combined', 'shaderc_static']
523
+
524
+ if kwargs.get('static', env.coredata.get_option(mesonlib.OptionKey('prefer_static'))):
525
+ c = [functools.partial(PkgConfigDependency, name, env, kwargs)
526
+ for name in static_libs + shared_libs]
527
+ else:
528
+ c = [functools.partial(PkgConfigDependency, name, env, kwargs)
529
+ for name in shared_libs + static_libs]
530
+ candidates.extend(c)
531
+
532
+ if DependencyMethods.SYSTEM in methods:
533
+ candidates.append(functools.partial(ShadercDependency, env, kwargs))
534
+
535
+ return candidates
536
+ packages['shaderc'] = shaderc_factory
537
+
538
+
539
+ packages['cups'] = cups_factory = DependencyFactory(
540
+ 'cups',
541
+ [DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL, DependencyMethods.EXTRAFRAMEWORK, DependencyMethods.CMAKE],
542
+ configtool_class=CupsDependencyConfigTool,
543
+ cmake_name='Cups',
544
+ )
545
+
546
+ packages['dl'] = dl_factory = DependencyFactory(
547
+ 'dl',
548
+ [DependencyMethods.BUILTIN, DependencyMethods.SYSTEM],
549
+ builtin_class=DlBuiltinDependency,
550
+ system_class=DlSystemDependency,
551
+ )
552
+
553
+ packages['gpgme'] = gpgme_factory = DependencyFactory(
554
+ 'gpgme',
555
+ [DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL],
556
+ configtool_class=GpgmeDependencyConfigTool,
557
+ )
558
+
559
+ packages['libgcrypt'] = libgcrypt_factory = DependencyFactory(
560
+ 'libgcrypt',
561
+ [DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL],
562
+ configtool_class=LibGCryptDependencyConfigTool,
563
+ )
564
+
565
+ packages['libwmf'] = libwmf_factory = DependencyFactory(
566
+ 'libwmf',
567
+ [DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL],
568
+ configtool_class=LibWmfDependencyConfigTool,
569
+ )
570
+
571
+ packages['pcap'] = pcap_factory = DependencyFactory(
572
+ 'pcap',
573
+ [DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL],
574
+ configtool_class=PcapDependencyConfigTool,
575
+ pkgconfig_name='libpcap',
576
+ )
577
+
578
+ packages['threads'] = threads_factory = DependencyFactory(
579
+ 'threads',
580
+ [DependencyMethods.SYSTEM, DependencyMethods.CMAKE],
581
+ cmake_name='Threads',
582
+ system_class=ThreadDependency,
583
+ )
584
+
585
+ packages['iconv'] = iconv_factory = DependencyFactory(
586
+ 'iconv',
587
+ [DependencyMethods.BUILTIN, DependencyMethods.SYSTEM],
588
+ builtin_class=IconvBuiltinDependency,
589
+ system_class=IconvSystemDependency,
590
+ )
591
+
592
+ packages['intl'] = intl_factory = DependencyFactory(
593
+ 'intl',
594
+ [DependencyMethods.BUILTIN, DependencyMethods.SYSTEM],
595
+ builtin_class=IntlBuiltinDependency,
596
+ system_class=IntlSystemDependency,
597
+ )
598
+
599
+ packages['openssl'] = openssl_factory = DependencyFactory(
600
+ 'openssl',
601
+ [DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM, DependencyMethods.CMAKE],
602
+ system_class=OpensslSystemDependency,
603
+ cmake_class=CMakeDependencyFactory('OpenSSL', modules=['OpenSSL::Crypto', 'OpenSSL::SSL']),
604
+ )
605
+
606
+ packages['libcrypto'] = libcrypto_factory = DependencyFactory(
607
+ 'libcrypto',
608
+ [DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM, DependencyMethods.CMAKE],
609
+ system_class=OpensslSystemDependency,
610
+ cmake_class=CMakeDependencyFactory('OpenSSL', modules=['OpenSSL::Crypto']),
611
+ )
612
+
613
+ packages['libssl'] = libssl_factory = DependencyFactory(
614
+ 'libssl',
615
+ [DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM, DependencyMethods.CMAKE],
616
+ system_class=OpensslSystemDependency,
617
+ cmake_class=CMakeDependencyFactory('OpenSSL', modules=['OpenSSL::SSL']),
618
+ )