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.
- package/BSDmakefile +6 -0
- package/Makefile +16 -0
- package/README.md +14 -11
- package/configure +18 -0
- package/configure.bat +22 -0
- package/dist/native.js +0 -8
- package/lib/application.ts +98 -0
- package/lib/authentication.ts +3 -0
- package/lib/build.py +50 -0
- package/lib/bus.ts +30 -0
- package/lib/cancellable.ts +33 -0
- package/lib/child.ts +15 -0
- package/lib/crash.ts +11 -0
- package/lib/device.ts +329 -0
- package/lib/device_manager.ts +69 -0
- package/lib/endpoint_parameters.ts +56 -0
- package/lib/icon.ts +15 -0
- package/lib/index.ts +311 -0
- package/lib/iostream.ts +78 -0
- package/lib/meson.build +53 -0
- package/lib/native.ts +9 -0
- package/lib/portal_membership.ts +10 -0
- package/lib/portal_service.ts +105 -0
- package/lib/process.ts +57 -0
- package/lib/relay.ts +44 -0
- package/lib/script.ts +352 -0
- package/lib/session.ts +113 -0
- package/lib/signals.ts +45 -0
- package/lib/socket_address.ts +35 -0
- package/lib/spawn.ts +4 -0
- package/lib/system_parameters.ts +78 -0
- package/make.bat +23 -0
- package/meson.build +160 -0
- package/meson.options +11 -0
- package/package.json +27 -6
- package/releng/deps.py +1133 -0
- package/releng/deps.toml +391 -0
- package/releng/devkit-assets/frida-core-example-unix.c +188 -0
- package/releng/devkit-assets/frida-core-example-windows.c +197 -0
- package/releng/devkit-assets/frida-core-example.sln +28 -0
- package/releng/devkit-assets/frida-core-example.vcxproj +157 -0
- package/releng/devkit-assets/frida-core-example.vcxproj.filters +27 -0
- package/releng/devkit-assets/frida-gum-example-unix.c +122 -0
- package/releng/devkit-assets/frida-gum-example-windows.c +132 -0
- package/releng/devkit-assets/frida-gum-example.sln +28 -0
- package/releng/devkit-assets/frida-gum-example.vcxproj +157 -0
- package/releng/devkit-assets/frida-gum-example.vcxproj.filters +27 -0
- package/releng/devkit-assets/frida-gumjs-example-unix.c +84 -0
- package/releng/devkit-assets/frida-gumjs-example-windows.c +91 -0
- package/releng/devkit-assets/frida-gumjs-example.sln +28 -0
- package/releng/devkit-assets/frida-gumjs-example.vcxproj +157 -0
- package/releng/devkit-assets/frida-gumjs-example.vcxproj.filters +27 -0
- package/releng/devkit.py +535 -0
- package/releng/env.py +420 -0
- package/releng/env_android.py +150 -0
- package/releng/env_apple.py +176 -0
- package/releng/env_generic.py +373 -0
- package/releng/frida_version.py +69 -0
- package/releng/machine_file.py +44 -0
- package/releng/machine_spec.py +290 -0
- package/releng/meson/meson.py +27 -0
- package/releng/meson/mesonbuild/__init__.py +0 -0
- package/releng/meson/mesonbuild/_pathlib.py +63 -0
- package/releng/meson/mesonbuild/_typing.py +69 -0
- package/releng/meson/mesonbuild/arglist.py +321 -0
- package/releng/meson/mesonbuild/ast/__init__.py +23 -0
- package/releng/meson/mesonbuild/ast/interpreter.py +441 -0
- package/releng/meson/mesonbuild/ast/introspection.py +374 -0
- package/releng/meson/mesonbuild/ast/postprocess.py +109 -0
- package/releng/meson/mesonbuild/ast/printer.py +620 -0
- package/releng/meson/mesonbuild/ast/visitor.py +161 -0
- package/releng/meson/mesonbuild/backend/__init__.py +0 -0
- package/releng/meson/mesonbuild/backend/backends.py +2047 -0
- package/releng/meson/mesonbuild/backend/ninjabackend.py +3808 -0
- package/releng/meson/mesonbuild/backend/nonebackend.py +26 -0
- package/releng/meson/mesonbuild/backend/vs2010backend.py +2078 -0
- package/releng/meson/mesonbuild/backend/vs2012backend.py +35 -0
- package/releng/meson/mesonbuild/backend/vs2013backend.py +34 -0
- package/releng/meson/mesonbuild/backend/vs2015backend.py +35 -0
- package/releng/meson/mesonbuild/backend/vs2017backend.py +59 -0
- package/releng/meson/mesonbuild/backend/vs2019backend.py +54 -0
- package/releng/meson/mesonbuild/backend/vs2022backend.py +54 -0
- package/releng/meson/mesonbuild/backend/xcodebackend.py +1781 -0
- package/releng/meson/mesonbuild/build.py +3249 -0
- package/releng/meson/mesonbuild/cargo/__init__.py +5 -0
- package/releng/meson/mesonbuild/cargo/builder.py +238 -0
- package/releng/meson/mesonbuild/cargo/cfg.py +274 -0
- package/releng/meson/mesonbuild/cargo/interpreter.py +733 -0
- package/releng/meson/mesonbuild/cargo/manifest.py +227 -0
- package/releng/meson/mesonbuild/cargo/version.py +95 -0
- package/releng/meson/mesonbuild/cmake/__init__.py +28 -0
- package/releng/meson/mesonbuild/cmake/common.py +331 -0
- package/releng/meson/mesonbuild/cmake/data/__init__.py +0 -0
- package/releng/meson/mesonbuild/cmake/data/preload.cmake +82 -0
- package/releng/meson/mesonbuild/cmake/executor.py +241 -0
- package/releng/meson/mesonbuild/cmake/fileapi.py +324 -0
- package/releng/meson/mesonbuild/cmake/generator.py +186 -0
- package/releng/meson/mesonbuild/cmake/interpreter.py +1267 -0
- package/releng/meson/mesonbuild/cmake/toolchain.py +248 -0
- package/releng/meson/mesonbuild/cmake/traceparser.py +814 -0
- package/releng/meson/mesonbuild/cmake/tracetargets.py +161 -0
- package/releng/meson/mesonbuild/compilers/__init__.py +86 -0
- package/releng/meson/mesonbuild/compilers/asm.py +307 -0
- package/releng/meson/mesonbuild/compilers/c.py +788 -0
- package/releng/meson/mesonbuild/compilers/c_function_attributes.py +143 -0
- package/releng/meson/mesonbuild/compilers/compilers.py +1388 -0
- package/releng/meson/mesonbuild/compilers/cpp.py +1035 -0
- package/releng/meson/mesonbuild/compilers/cs.py +136 -0
- package/releng/meson/mesonbuild/compilers/cuda.py +806 -0
- package/releng/meson/mesonbuild/compilers/cython.py +91 -0
- package/releng/meson/mesonbuild/compilers/d.py +861 -0
- package/releng/meson/mesonbuild/compilers/detect.py +1396 -0
- package/releng/meson/mesonbuild/compilers/fortran.py +523 -0
- package/releng/meson/mesonbuild/compilers/java.py +113 -0
- package/releng/meson/mesonbuild/compilers/mixins/__init__.py +0 -0
- package/releng/meson/mesonbuild/compilers/mixins/arm.py +167 -0
- package/releng/meson/mesonbuild/compilers/mixins/ccrx.py +113 -0
- package/releng/meson/mesonbuild/compilers/mixins/clang.py +170 -0
- package/releng/meson/mesonbuild/compilers/mixins/clike.py +1330 -0
- package/releng/meson/mesonbuild/compilers/mixins/compcert.py +117 -0
- package/releng/meson/mesonbuild/compilers/mixins/elbrus.py +93 -0
- package/releng/meson/mesonbuild/compilers/mixins/emscripten.py +89 -0
- package/releng/meson/mesonbuild/compilers/mixins/gnu.py +629 -0
- package/releng/meson/mesonbuild/compilers/mixins/intel.py +167 -0
- package/releng/meson/mesonbuild/compilers/mixins/islinker.py +120 -0
- package/releng/meson/mesonbuild/compilers/mixins/metrowerks.py +279 -0
- package/releng/meson/mesonbuild/compilers/mixins/pgi.py +88 -0
- package/releng/meson/mesonbuild/compilers/mixins/ti.py +130 -0
- package/releng/meson/mesonbuild/compilers/mixins/visualstudio.py +458 -0
- package/releng/meson/mesonbuild/compilers/mixins/xc16.py +111 -0
- package/releng/meson/mesonbuild/compilers/objc.py +120 -0
- package/releng/meson/mesonbuild/compilers/objcpp.py +102 -0
- package/releng/meson/mesonbuild/compilers/rust.py +230 -0
- package/releng/meson/mesonbuild/compilers/swift.py +131 -0
- package/releng/meson/mesonbuild/compilers/vala.py +121 -0
- package/releng/meson/mesonbuild/coredata.py +1532 -0
- package/releng/meson/mesonbuild/dependencies/__init__.py +252 -0
- package/releng/meson/mesonbuild/dependencies/base.py +663 -0
- package/releng/meson/mesonbuild/dependencies/boost.py +1083 -0
- package/releng/meson/mesonbuild/dependencies/cmake.py +656 -0
- package/releng/meson/mesonbuild/dependencies/coarrays.py +80 -0
- package/releng/meson/mesonbuild/dependencies/configtool.py +163 -0
- package/releng/meson/mesonbuild/dependencies/cuda.py +295 -0
- package/releng/meson/mesonbuild/dependencies/data/CMakeLists.txt +102 -0
- package/releng/meson/mesonbuild/dependencies/data/CMakeListsLLVM.txt +204 -0
- package/releng/meson/mesonbuild/dependencies/data/CMakePathInfo.txt +31 -0
- package/releng/meson/mesonbuild/dependencies/data/__init__.py +0 -0
- package/releng/meson/mesonbuild/dependencies/detect.py +225 -0
- package/releng/meson/mesonbuild/dependencies/dev.py +707 -0
- package/releng/meson/mesonbuild/dependencies/dub.py +424 -0
- package/releng/meson/mesonbuild/dependencies/factory.py +146 -0
- package/releng/meson/mesonbuild/dependencies/framework.py +111 -0
- package/releng/meson/mesonbuild/dependencies/hdf5.py +168 -0
- package/releng/meson/mesonbuild/dependencies/misc.py +618 -0
- package/releng/meson/mesonbuild/dependencies/mpi.py +231 -0
- package/releng/meson/mesonbuild/dependencies/pkgconfig.py +570 -0
- package/releng/meson/mesonbuild/dependencies/platform.py +52 -0
- package/releng/meson/mesonbuild/dependencies/python.py +431 -0
- package/releng/meson/mesonbuild/dependencies/qt.py +484 -0
- package/releng/meson/mesonbuild/dependencies/scalapack.py +142 -0
- package/releng/meson/mesonbuild/dependencies/ui.py +281 -0
- package/releng/meson/mesonbuild/depfile.py +82 -0
- package/releng/meson/mesonbuild/envconfig.py +480 -0
- package/releng/meson/mesonbuild/environment.py +987 -0
- package/releng/meson/mesonbuild/interpreter/__init__.py +47 -0
- package/releng/meson/mesonbuild/interpreter/compiler.py +900 -0
- package/releng/meson/mesonbuild/interpreter/dependencyfallbacks.py +386 -0
- package/releng/meson/mesonbuild/interpreter/interpreter.py +3595 -0
- package/releng/meson/mesonbuild/interpreter/interpreterobjects.py +1096 -0
- package/releng/meson/mesonbuild/interpreter/kwargs.py +479 -0
- package/releng/meson/mesonbuild/interpreter/mesonmain.py +487 -0
- package/releng/meson/mesonbuild/interpreter/primitives/__init__.py +29 -0
- package/releng/meson/mesonbuild/interpreter/primitives/array.py +108 -0
- package/releng/meson/mesonbuild/interpreter/primitives/boolean.py +52 -0
- package/releng/meson/mesonbuild/interpreter/primitives/dict.py +88 -0
- package/releng/meson/mesonbuild/interpreter/primitives/integer.py +86 -0
- package/releng/meson/mesonbuild/interpreter/primitives/range.py +38 -0
- package/releng/meson/mesonbuild/interpreter/primitives/string.py +247 -0
- package/releng/meson/mesonbuild/interpreter/type_checking.py +853 -0
- package/releng/meson/mesonbuild/interpreterbase/__init__.py +126 -0
- package/releng/meson/mesonbuild/interpreterbase/_unholder.py +25 -0
- package/releng/meson/mesonbuild/interpreterbase/baseobjects.py +174 -0
- package/releng/meson/mesonbuild/interpreterbase/decorators.py +806 -0
- package/releng/meson/mesonbuild/interpreterbase/disabler.py +35 -0
- package/releng/meson/mesonbuild/interpreterbase/exceptions.py +22 -0
- package/releng/meson/mesonbuild/interpreterbase/helpers.py +67 -0
- package/releng/meson/mesonbuild/interpreterbase/interpreterbase.py +665 -0
- package/releng/meson/mesonbuild/interpreterbase/operator.py +32 -0
- package/releng/meson/mesonbuild/linkers/__init__.py +20 -0
- package/releng/meson/mesonbuild/linkers/base.py +39 -0
- package/releng/meson/mesonbuild/linkers/detect.py +229 -0
- package/releng/meson/mesonbuild/linkers/linkers.py +1614 -0
- package/releng/meson/mesonbuild/mcompile.py +380 -0
- package/releng/meson/mesonbuild/mconf.py +368 -0
- package/releng/meson/mesonbuild/mdevenv.py +234 -0
- package/releng/meson/mesonbuild/mdist.py +376 -0
- package/releng/meson/mesonbuild/mesondata.py +38 -0
- package/releng/meson/mesonbuild/mesonlib.py +23 -0
- package/releng/meson/mesonbuild/mesonmain.py +289 -0
- package/releng/meson/mesonbuild/minit.py +204 -0
- package/releng/meson/mesonbuild/minstall.py +864 -0
- package/releng/meson/mesonbuild/mintro.py +667 -0
- package/releng/meson/mesonbuild/mlog.py +542 -0
- package/releng/meson/mesonbuild/modules/__init__.py +270 -0
- package/releng/meson/mesonbuild/modules/cmake.py +442 -0
- package/releng/meson/mesonbuild/modules/cuda.py +377 -0
- package/releng/meson/mesonbuild/modules/dlang.py +117 -0
- package/releng/meson/mesonbuild/modules/external_project.py +306 -0
- package/releng/meson/mesonbuild/modules/fs.py +323 -0
- package/releng/meson/mesonbuild/modules/gnome.py +2215 -0
- package/releng/meson/mesonbuild/modules/hotdoc.py +487 -0
- package/releng/meson/mesonbuild/modules/i18n.py +405 -0
- package/releng/meson/mesonbuild/modules/icestorm.py +123 -0
- package/releng/meson/mesonbuild/modules/java.py +112 -0
- package/releng/meson/mesonbuild/modules/keyval.py +65 -0
- package/releng/meson/mesonbuild/modules/modtest.py +33 -0
- package/releng/meson/mesonbuild/modules/pkgconfig.py +744 -0
- package/releng/meson/mesonbuild/modules/python.py +556 -0
- package/releng/meson/mesonbuild/modules/python3.py +85 -0
- package/releng/meson/mesonbuild/modules/qt.py +621 -0
- package/releng/meson/mesonbuild/modules/qt4.py +23 -0
- package/releng/meson/mesonbuild/modules/qt5.py +23 -0
- package/releng/meson/mesonbuild/modules/qt6.py +22 -0
- package/releng/meson/mesonbuild/modules/rust.py +355 -0
- package/releng/meson/mesonbuild/modules/simd.py +114 -0
- package/releng/meson/mesonbuild/modules/sourceset.py +291 -0
- package/releng/meson/mesonbuild/modules/wayland.py +151 -0
- package/releng/meson/mesonbuild/modules/windows.py +207 -0
- package/releng/meson/mesonbuild/mparser.py +1114 -0
- package/releng/meson/mesonbuild/msetup.py +365 -0
- package/releng/meson/mesonbuild/msubprojects.py +764 -0
- package/releng/meson/mesonbuild/mtest.py +2201 -0
- package/releng/meson/mesonbuild/munstable_coredata.py +107 -0
- package/releng/meson/mesonbuild/optinterpreter.py +276 -0
- package/releng/meson/mesonbuild/programs.py +367 -0
- package/releng/meson/mesonbuild/rewriter.py +1075 -0
- package/releng/meson/mesonbuild/scripts/__init__.py +10 -0
- package/releng/meson/mesonbuild/scripts/clangformat.py +55 -0
- package/releng/meson/mesonbuild/scripts/clangtidy.py +30 -0
- package/releng/meson/mesonbuild/scripts/cleantrees.py +35 -0
- package/releng/meson/mesonbuild/scripts/cmake_run_ctgt.py +103 -0
- package/releng/meson/mesonbuild/scripts/cmd_or_ps.ps1 +17 -0
- package/releng/meson/mesonbuild/scripts/copy.py +19 -0
- package/releng/meson/mesonbuild/scripts/coverage.py +214 -0
- package/releng/meson/mesonbuild/scripts/delwithsuffix.py +27 -0
- package/releng/meson/mesonbuild/scripts/depfixer.py +495 -0
- package/releng/meson/mesonbuild/scripts/depscan.py +198 -0
- package/releng/meson/mesonbuild/scripts/dirchanger.py +20 -0
- package/releng/meson/mesonbuild/scripts/env2mfile.py +402 -0
- package/releng/meson/mesonbuild/scripts/externalproject.py +106 -0
- package/releng/meson/mesonbuild/scripts/gettext.py +86 -0
- package/releng/meson/mesonbuild/scripts/gtkdochelper.py +286 -0
- package/releng/meson/mesonbuild/scripts/hotdochelper.py +40 -0
- package/releng/meson/mesonbuild/scripts/itstool.py +77 -0
- package/releng/meson/mesonbuild/scripts/meson_exe.py +115 -0
- package/releng/meson/mesonbuild/scripts/msgfmthelper.py +29 -0
- package/releng/meson/mesonbuild/scripts/pycompile.py +54 -0
- package/releng/meson/mesonbuild/scripts/python_info.py +121 -0
- package/releng/meson/mesonbuild/scripts/regen_checker.py +55 -0
- package/releng/meson/mesonbuild/scripts/run_tool.py +58 -0
- package/releng/meson/mesonbuild/scripts/scanbuild.py +57 -0
- package/releng/meson/mesonbuild/scripts/symbolextractor.py +322 -0
- package/releng/meson/mesonbuild/scripts/tags.py +44 -0
- package/releng/meson/mesonbuild/scripts/test_loaded_modules.py +14 -0
- package/releng/meson/mesonbuild/scripts/uninstall.py +41 -0
- package/releng/meson/mesonbuild/scripts/vcstagger.py +35 -0
- package/releng/meson/mesonbuild/scripts/yasm.py +24 -0
- package/releng/meson/mesonbuild/templates/__init__.py +0 -0
- package/releng/meson/mesonbuild/templates/cpptemplates.py +143 -0
- package/releng/meson/mesonbuild/templates/cstemplates.py +90 -0
- package/releng/meson/mesonbuild/templates/ctemplates.py +126 -0
- package/releng/meson/mesonbuild/templates/cudatemplates.py +143 -0
- package/releng/meson/mesonbuild/templates/dlangtemplates.py +109 -0
- package/releng/meson/mesonbuild/templates/fortrantemplates.py +101 -0
- package/releng/meson/mesonbuild/templates/javatemplates.py +94 -0
- package/releng/meson/mesonbuild/templates/mesontemplates.py +70 -0
- package/releng/meson/mesonbuild/templates/objcpptemplates.py +126 -0
- package/releng/meson/mesonbuild/templates/objctemplates.py +126 -0
- package/releng/meson/mesonbuild/templates/rusttemplates.py +79 -0
- package/releng/meson/mesonbuild/templates/samplefactory.py +41 -0
- package/releng/meson/mesonbuild/templates/sampleimpl.py +160 -0
- package/releng/meson/mesonbuild/templates/valatemplates.py +82 -0
- package/releng/meson/mesonbuild/utils/__init__.py +0 -0
- package/releng/meson/mesonbuild/utils/core.py +166 -0
- package/releng/meson/mesonbuild/utils/platform.py +27 -0
- package/releng/meson/mesonbuild/utils/posix.py +32 -0
- package/releng/meson/mesonbuild/utils/universal.py +2445 -0
- package/releng/meson/mesonbuild/utils/vsenv.py +126 -0
- package/releng/meson/mesonbuild/utils/win32.py +29 -0
- package/releng/meson/mesonbuild/wrap/__init__.py +59 -0
- package/releng/meson/mesonbuild/wrap/wrap.py +846 -0
- package/releng/meson/mesonbuild/wrap/wraptool.py +198 -0
- package/releng/meson-scripts/BSDmakefile +6 -0
- package/releng/meson-scripts/Makefile +16 -0
- package/releng/meson-scripts/configure +18 -0
- package/releng/meson-scripts/configure.bat +22 -0
- package/releng/meson-scripts/make.bat +23 -0
- package/releng/meson_configure.py +506 -0
- package/releng/meson_make.py +131 -0
- package/releng/mkdevkit.py +107 -0
- package/releng/mkfatmacho.py +54 -0
- package/releng/post-process-oabi.py +97 -0
- package/releng/progress.py +14 -0
- package/releng/sync-from-upstream.py +185 -0
- package/releng/tomlkit/tomlkit/__init__.py +59 -0
- package/releng/tomlkit/tomlkit/_compat.py +22 -0
- package/releng/tomlkit/tomlkit/_types.py +83 -0
- package/releng/tomlkit/tomlkit/_utils.py +158 -0
- package/releng/tomlkit/tomlkit/api.py +308 -0
- package/releng/tomlkit/tomlkit/container.py +875 -0
- package/releng/tomlkit/tomlkit/exceptions.py +227 -0
- package/releng/tomlkit/tomlkit/items.py +1967 -0
- package/releng/tomlkit/tomlkit/parser.py +1141 -0
- package/releng/tomlkit/tomlkit/py.typed +0 -0
- package/releng/tomlkit/tomlkit/source.py +180 -0
- package/releng/tomlkit/tomlkit/toml_char.py +52 -0
- package/releng/tomlkit/tomlkit/toml_document.py +7 -0
- package/releng/tomlkit/tomlkit/toml_file.py +58 -0
- package/releng/winenv.py +140 -0
- package/scripts/adjust-version.py +19 -0
- package/scripts/detect-version.py +40 -0
- package/scripts/fetch-abi-bits.py +343 -0
- package/scripts/install.js +23 -0
- package/scripts/package.py +15 -0
- package/src/addon.cc +76 -0
- package/src/application.cc +148 -0
- package/src/application.h +31 -0
- package/src/authentication.cc +174 -0
- package/src/authentication.h +24 -0
- package/src/bus.cc +167 -0
- package/src/bus.h +33 -0
- package/src/cancellable.cc +117 -0
- package/src/cancellable.h +31 -0
- package/src/child.cc +150 -0
- package/src/child.h +32 -0
- package/src/crash.cc +122 -0
- package/src/crash.h +30 -0
- package/src/device.cc +1302 -0
- package/src/device.h +55 -0
- package/src/device_manager.cc +362 -0
- package/src/device_manager.h +35 -0
- package/src/endpoint_parameters.cc +171 -0
- package/src/endpoint_parameters.h +28 -0
- package/src/glib_context.cc +62 -0
- package/src/glib_context.h +29 -0
- package/src/glib_object.cc +25 -0
- package/src/glib_object.h +37 -0
- package/src/iostream.cc +247 -0
- package/src/iostream.h +30 -0
- package/src/meson.build +26 -0
- package/src/operation.h +94 -0
- package/src/portal_membership.cc +100 -0
- package/src/portal_membership.h +26 -0
- package/src/portal_service.cc +401 -0
- package/src/portal_service.h +40 -0
- package/src/process.cc +135 -0
- package/src/process.h +30 -0
- package/src/relay.cc +139 -0
- package/src/relay.h +31 -0
- package/src/runtime.cc +443 -0
- package/src/runtime.h +64 -0
- package/src/script.cc +301 -0
- package/src/script.h +36 -0
- package/src/session.cc +860 -0
- package/src/session.h +42 -0
- package/src/signals.cc +334 -0
- package/src/signals.h +47 -0
- package/src/spawn.cc +95 -0
- package/src/spawn.h +27 -0
- package/src/usage_monitor.h +117 -0
- package/src/uv_context.cc +118 -0
- package/src/uv_context.h +40 -0
- package/src/win_delay_load_hook.cc +63 -0
- package/subprojects/frida-core.wrap +8 -0
- package/subprojects/nan.wrap +9 -0
- package/subprojects/packagefiles/nan.patch +13 -0
- package/test/data/index.ts +13 -0
- package/test/data/unixvictim-linux-x86 +0 -0
- package/test/data/unixvictim-linux-x86_64 +0 -0
- package/test/data/unixvictim-macos +0 -0
- package/test/device.ts +27 -0
- package/test/device_manager.ts +16 -0
- package/test/labrat.ts +32 -0
- package/test/script.ts +176 -0
- package/test/session.ts +73 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Copyright 2012-2021 The Meson development team
|
|
3
|
+
# Copyright © 2021-2024 Intel Corporation
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import copy
|
|
7
|
+
import os
|
|
8
|
+
import typing as T
|
|
9
|
+
|
|
10
|
+
from .. import mesonlib
|
|
11
|
+
from .. import dependencies
|
|
12
|
+
from .. import build
|
|
13
|
+
from .. import mlog, coredata
|
|
14
|
+
|
|
15
|
+
from ..mesonlib import MachineChoice, OptionKey
|
|
16
|
+
from ..programs import OverrideProgram, ExternalProgram
|
|
17
|
+
from ..interpreter.type_checking import ENV_KW, ENV_METHOD_KW, ENV_SEPARATOR_KW, env_convertor_with_method
|
|
18
|
+
from ..interpreterbase import (MesonInterpreterObject, FeatureNew, FeatureDeprecated,
|
|
19
|
+
typed_pos_args, noArgsFlattening, noPosargs, noKwargs,
|
|
20
|
+
typed_kwargs, KwargInfo, InterpreterException)
|
|
21
|
+
from .primitives import MesonVersionString
|
|
22
|
+
from .type_checking import NATIVE_KW, NoneType
|
|
23
|
+
|
|
24
|
+
if T.TYPE_CHECKING:
|
|
25
|
+
from typing_extensions import Literal, TypedDict
|
|
26
|
+
|
|
27
|
+
from ..compilers import Compiler
|
|
28
|
+
from ..interpreterbase import TYPE_kwargs, TYPE_var
|
|
29
|
+
from ..mesonlib import ExecutableSerialisation
|
|
30
|
+
from .interpreter import Interpreter
|
|
31
|
+
|
|
32
|
+
class FuncOverrideDependency(TypedDict):
|
|
33
|
+
|
|
34
|
+
native: mesonlib.MachineChoice
|
|
35
|
+
static: T.Optional[bool]
|
|
36
|
+
|
|
37
|
+
class AddInstallScriptKW(TypedDict):
|
|
38
|
+
|
|
39
|
+
skip_if_destdir: bool
|
|
40
|
+
install_tag: str
|
|
41
|
+
dry_run: bool
|
|
42
|
+
|
|
43
|
+
class NativeKW(TypedDict):
|
|
44
|
+
|
|
45
|
+
native: mesonlib.MachineChoice
|
|
46
|
+
|
|
47
|
+
class AddDevenvKW(TypedDict):
|
|
48
|
+
method: Literal['set', 'prepend', 'append']
|
|
49
|
+
separator: str
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class MesonMain(MesonInterpreterObject):
|
|
53
|
+
def __init__(self, build: 'build.Build', interpreter: 'Interpreter'):
|
|
54
|
+
super().__init__(subproject=interpreter.subproject)
|
|
55
|
+
self.build = build
|
|
56
|
+
self.interpreter = interpreter
|
|
57
|
+
self.methods.update({'add_devenv': self.add_devenv_method,
|
|
58
|
+
'add_dist_script': self.add_dist_script_method,
|
|
59
|
+
'add_install_script': self.add_install_script_method,
|
|
60
|
+
'add_postconf_script': self.add_postconf_script_method,
|
|
61
|
+
'backend': self.backend_method,
|
|
62
|
+
'build_options': self.build_options_method,
|
|
63
|
+
'build_root': self.build_root_method,
|
|
64
|
+
'can_run_host_binaries': self.can_run_host_binaries_method,
|
|
65
|
+
'current_source_dir': self.current_source_dir_method,
|
|
66
|
+
'current_build_dir': self.current_build_dir_method,
|
|
67
|
+
'get_compiler': self.get_compiler_method,
|
|
68
|
+
'get_cross_property': self.get_cross_property_method,
|
|
69
|
+
'get_external_property': self.get_external_property_method,
|
|
70
|
+
'global_build_root': self.global_build_root_method,
|
|
71
|
+
'global_source_root': self.global_source_root_method,
|
|
72
|
+
'has_exe_wrapper': self.has_exe_wrapper_method,
|
|
73
|
+
'has_external_property': self.has_external_property_method,
|
|
74
|
+
'install_dependency_manifest': self.install_dependency_manifest_method,
|
|
75
|
+
'is_cross_build': self.is_cross_build_method,
|
|
76
|
+
'is_subproject': self.is_subproject_method,
|
|
77
|
+
'is_unity': self.is_unity_method,
|
|
78
|
+
'override_dependency': self.override_dependency_method,
|
|
79
|
+
'override_find_program': self.override_find_program_method,
|
|
80
|
+
'project_build_root': self.project_build_root_method,
|
|
81
|
+
'project_license': self.project_license_method,
|
|
82
|
+
'project_license_files': self.project_license_files_method,
|
|
83
|
+
'project_name': self.project_name_method,
|
|
84
|
+
'project_source_root': self.project_source_root_method,
|
|
85
|
+
'project_version': self.project_version_method,
|
|
86
|
+
'source_root': self.source_root_method,
|
|
87
|
+
'version': self.version_method,
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
def _find_source_script(
|
|
91
|
+
self, name: str, prog: T.Union[str, mesonlib.File, build.Executable, ExternalProgram],
|
|
92
|
+
args: T.List[str]) -> 'ExecutableSerialisation':
|
|
93
|
+
largs: T.List[T.Union[str, build.Executable, ExternalProgram]] = []
|
|
94
|
+
|
|
95
|
+
if isinstance(prog, (build.Executable, ExternalProgram)):
|
|
96
|
+
FeatureNew.single_use(f'Passing executable/found program object to script parameter of {name}',
|
|
97
|
+
'0.55.0', self.subproject, location=self.current_node)
|
|
98
|
+
largs.append(prog)
|
|
99
|
+
else:
|
|
100
|
+
if isinstance(prog, mesonlib.File):
|
|
101
|
+
FeatureNew.single_use(f'Passing file object to script parameter of {name}',
|
|
102
|
+
'0.57.0', self.subproject, location=self.current_node)
|
|
103
|
+
found = self.interpreter.find_program_impl([prog])
|
|
104
|
+
largs.append(found)
|
|
105
|
+
|
|
106
|
+
largs.extend(args)
|
|
107
|
+
es = self.interpreter.backend.get_executable_serialisation(largs, verbose=True)
|
|
108
|
+
es.subproject = self.interpreter.subproject
|
|
109
|
+
return es
|
|
110
|
+
|
|
111
|
+
def _process_script_args(
|
|
112
|
+
self, name: str, args: T.Sequence[T.Union[
|
|
113
|
+
str, mesonlib.File, build.BuildTarget, build.CustomTarget,
|
|
114
|
+
build.CustomTargetIndex,
|
|
115
|
+
ExternalProgram,
|
|
116
|
+
]]) -> T.List[str]:
|
|
117
|
+
script_args = [] # T.List[str]
|
|
118
|
+
new = False
|
|
119
|
+
for a in args:
|
|
120
|
+
if isinstance(a, str):
|
|
121
|
+
script_args.append(a)
|
|
122
|
+
elif isinstance(a, mesonlib.File):
|
|
123
|
+
new = True
|
|
124
|
+
script_args.append(a.rel_to_builddir(self.interpreter.environment.source_dir))
|
|
125
|
+
elif isinstance(a, (build.BuildTarget, build.CustomTarget, build.CustomTargetIndex)):
|
|
126
|
+
new = True
|
|
127
|
+
script_args.extend([os.path.join(a.get_source_subdir(), o) for o in a.get_outputs()])
|
|
128
|
+
|
|
129
|
+
# This feels really hacky, but I'm not sure how else to fix
|
|
130
|
+
# this without completely rewriting install script handling.
|
|
131
|
+
# This is complicated by the fact that the install target
|
|
132
|
+
# depends on all.
|
|
133
|
+
if isinstance(a, build.CustomTargetIndex):
|
|
134
|
+
a.target.build_by_default = True
|
|
135
|
+
else:
|
|
136
|
+
a.build_by_default = True
|
|
137
|
+
else:
|
|
138
|
+
script_args.extend(a.command)
|
|
139
|
+
new = True
|
|
140
|
+
|
|
141
|
+
if new:
|
|
142
|
+
FeatureNew.single_use(
|
|
143
|
+
f'Calling "{name}" with File, CustomTarget, Index of CustomTarget, '
|
|
144
|
+
'Executable, or ExternalProgram',
|
|
145
|
+
'0.55.0', self.interpreter.subproject, location=self.current_node)
|
|
146
|
+
return script_args
|
|
147
|
+
|
|
148
|
+
@typed_pos_args(
|
|
149
|
+
'meson.add_install_script',
|
|
150
|
+
(str, mesonlib.File, build.Executable, ExternalProgram),
|
|
151
|
+
varargs=(str, mesonlib.File, build.BuildTarget, build.CustomTarget, build.CustomTargetIndex, ExternalProgram)
|
|
152
|
+
)
|
|
153
|
+
@typed_kwargs(
|
|
154
|
+
'meson.add_install_script',
|
|
155
|
+
KwargInfo('skip_if_destdir', bool, default=False, since='0.57.0'),
|
|
156
|
+
KwargInfo('install_tag', (str, NoneType), since='0.60.0'),
|
|
157
|
+
KwargInfo('dry_run', bool, default=False, since='1.1.0'),
|
|
158
|
+
)
|
|
159
|
+
def add_install_script_method(
|
|
160
|
+
self,
|
|
161
|
+
args: T.Tuple[T.Union[str, mesonlib.File, build.Executable, ExternalProgram],
|
|
162
|
+
T.List[T.Union[str, mesonlib.File, build.BuildTarget, build.CustomTarget, build.CustomTargetIndex, ExternalProgram]]],
|
|
163
|
+
kwargs: 'AddInstallScriptKW') -> None:
|
|
164
|
+
script_args = self._process_script_args('add_install_script', args[1])
|
|
165
|
+
script = self._find_source_script('add_install_script', args[0], script_args)
|
|
166
|
+
script.skip_if_destdir = kwargs['skip_if_destdir']
|
|
167
|
+
script.tag = kwargs['install_tag']
|
|
168
|
+
script.dry_run = kwargs['dry_run']
|
|
169
|
+
self.build.install_scripts.append(script)
|
|
170
|
+
|
|
171
|
+
@typed_pos_args(
|
|
172
|
+
'meson.add_postconf_script',
|
|
173
|
+
(str, mesonlib.File, ExternalProgram),
|
|
174
|
+
varargs=(str, mesonlib.File, ExternalProgram)
|
|
175
|
+
)
|
|
176
|
+
@noKwargs
|
|
177
|
+
def add_postconf_script_method(
|
|
178
|
+
self,
|
|
179
|
+
args: T.Tuple[T.Union[str, mesonlib.File, ExternalProgram],
|
|
180
|
+
T.List[T.Union[str, mesonlib.File, ExternalProgram]]],
|
|
181
|
+
kwargs: 'TYPE_kwargs') -> None:
|
|
182
|
+
script_args = self._process_script_args('add_postconf_script', args[1])
|
|
183
|
+
script = self._find_source_script('add_postconf_script', args[0], script_args)
|
|
184
|
+
self.build.postconf_scripts.append(script)
|
|
185
|
+
|
|
186
|
+
@typed_pos_args(
|
|
187
|
+
'meson.add_dist_script',
|
|
188
|
+
(str, mesonlib.File, ExternalProgram),
|
|
189
|
+
varargs=(str, mesonlib.File, ExternalProgram)
|
|
190
|
+
)
|
|
191
|
+
@noKwargs
|
|
192
|
+
@FeatureNew('meson.add_dist_script', '0.48.0')
|
|
193
|
+
def add_dist_script_method(
|
|
194
|
+
self,
|
|
195
|
+
args: T.Tuple[T.Union[str, mesonlib.File, ExternalProgram],
|
|
196
|
+
T.List[T.Union[str, mesonlib.File, ExternalProgram]]],
|
|
197
|
+
kwargs: 'TYPE_kwargs') -> None:
|
|
198
|
+
if args[1]:
|
|
199
|
+
FeatureNew.single_use('Calling "add_dist_script" with multiple arguments',
|
|
200
|
+
'0.49.0', self.interpreter.subproject, location=self.current_node)
|
|
201
|
+
if self.interpreter.subproject != '':
|
|
202
|
+
FeatureNew.single_use('Calling "add_dist_script" in a subproject',
|
|
203
|
+
'0.58.0', self.interpreter.subproject, location=self.current_node)
|
|
204
|
+
script_args = self._process_script_args('add_dist_script', args[1])
|
|
205
|
+
script = self._find_source_script('add_dist_script', args[0], script_args)
|
|
206
|
+
self.build.dist_scripts.append(script)
|
|
207
|
+
|
|
208
|
+
@noPosargs
|
|
209
|
+
@noKwargs
|
|
210
|
+
def current_source_dir_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
|
|
211
|
+
src = self.interpreter.environment.source_dir
|
|
212
|
+
sub = self.interpreter.subdir
|
|
213
|
+
if sub == '':
|
|
214
|
+
return src
|
|
215
|
+
return os.path.join(src, sub)
|
|
216
|
+
|
|
217
|
+
@noPosargs
|
|
218
|
+
@noKwargs
|
|
219
|
+
def current_build_dir_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
|
|
220
|
+
sub = self.interpreter.subdir
|
|
221
|
+
if sub == '':
|
|
222
|
+
return self.interpreter.environment.build_dir
|
|
223
|
+
return self.interpreter.absolute_builddir_path_for(sub)
|
|
224
|
+
|
|
225
|
+
@noPosargs
|
|
226
|
+
@noKwargs
|
|
227
|
+
def backend_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
|
|
228
|
+
return self.interpreter.backend.name
|
|
229
|
+
|
|
230
|
+
@noPosargs
|
|
231
|
+
@noKwargs
|
|
232
|
+
@FeatureDeprecated('meson.source_root', '0.56.0', 'use meson.project_source_root() or meson.global_source_root() instead.')
|
|
233
|
+
def source_root_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
|
|
234
|
+
return self.interpreter.environment.source_dir
|
|
235
|
+
|
|
236
|
+
@noPosargs
|
|
237
|
+
@noKwargs
|
|
238
|
+
@FeatureDeprecated('meson.build_root', '0.56.0', 'use meson.project_build_root() or meson.global_build_root() instead.')
|
|
239
|
+
def build_root_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
|
|
240
|
+
return self.interpreter.environment.build_dir
|
|
241
|
+
|
|
242
|
+
@noPosargs
|
|
243
|
+
@noKwargs
|
|
244
|
+
@FeatureNew('meson.project_source_root', '0.56.0')
|
|
245
|
+
def project_source_root_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
|
|
246
|
+
src = self.interpreter.environment.source_dir
|
|
247
|
+
sub = self.interpreter.root_subdir
|
|
248
|
+
if sub == '':
|
|
249
|
+
return src
|
|
250
|
+
return os.path.join(src, sub)
|
|
251
|
+
|
|
252
|
+
@noPosargs
|
|
253
|
+
@noKwargs
|
|
254
|
+
@FeatureNew('meson.project_build_root', '0.56.0')
|
|
255
|
+
def project_build_root_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
|
|
256
|
+
src = self.interpreter.environment.build_dir
|
|
257
|
+
sub = self.interpreter.root_subdir
|
|
258
|
+
if sub == '':
|
|
259
|
+
return src
|
|
260
|
+
return os.path.join(src, sub)
|
|
261
|
+
|
|
262
|
+
@noPosargs
|
|
263
|
+
@noKwargs
|
|
264
|
+
@FeatureNew('meson.global_source_root', '0.58.0')
|
|
265
|
+
def global_source_root_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
|
|
266
|
+
return self.interpreter.environment.source_dir
|
|
267
|
+
|
|
268
|
+
@noPosargs
|
|
269
|
+
@noKwargs
|
|
270
|
+
@FeatureNew('meson.global_build_root', '0.58.0')
|
|
271
|
+
def global_build_root_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
|
|
272
|
+
return self.interpreter.environment.build_dir
|
|
273
|
+
|
|
274
|
+
@noPosargs
|
|
275
|
+
@noKwargs
|
|
276
|
+
@FeatureDeprecated('meson.has_exe_wrapper', '0.55.0', 'use meson.can_run_host_binaries instead.')
|
|
277
|
+
def has_exe_wrapper_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> bool:
|
|
278
|
+
return self._can_run_host_binaries_impl()
|
|
279
|
+
|
|
280
|
+
@noPosargs
|
|
281
|
+
@noKwargs
|
|
282
|
+
@FeatureNew('meson.can_run_host_binaries', '0.55.0')
|
|
283
|
+
def can_run_host_binaries_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> bool:
|
|
284
|
+
return self._can_run_host_binaries_impl()
|
|
285
|
+
|
|
286
|
+
def _can_run_host_binaries_impl(self) -> bool:
|
|
287
|
+
return not (
|
|
288
|
+
self.build.environment.is_cross_build() and
|
|
289
|
+
self.build.environment.need_exe_wrapper() and
|
|
290
|
+
self.build.environment.exe_wrapper is None
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
@noPosargs
|
|
294
|
+
@noKwargs
|
|
295
|
+
def is_cross_build_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> bool:
|
|
296
|
+
return self.build.environment.is_cross_build()
|
|
297
|
+
|
|
298
|
+
@typed_pos_args('meson.get_compiler', str)
|
|
299
|
+
@typed_kwargs('meson.get_compiler', NATIVE_KW)
|
|
300
|
+
def get_compiler_method(self, args: T.Tuple[str], kwargs: 'NativeKW') -> 'Compiler':
|
|
301
|
+
cname = args[0]
|
|
302
|
+
for_machine = kwargs['native']
|
|
303
|
+
clist = self.interpreter.coredata.compilers[for_machine]
|
|
304
|
+
try:
|
|
305
|
+
return clist[cname]
|
|
306
|
+
except KeyError:
|
|
307
|
+
raise InterpreterException(f'Tried to access compiler for language "{cname}", not specified for {for_machine.get_lower_case_name()} machine.')
|
|
308
|
+
|
|
309
|
+
@noPosargs
|
|
310
|
+
@noKwargs
|
|
311
|
+
def is_unity_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> bool:
|
|
312
|
+
optval = self.interpreter.environment.coredata.get_option(OptionKey('unity'))
|
|
313
|
+
return optval == 'on' or (optval == 'subprojects' and self.interpreter.is_subproject())
|
|
314
|
+
|
|
315
|
+
@noPosargs
|
|
316
|
+
@noKwargs
|
|
317
|
+
def is_subproject_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> bool:
|
|
318
|
+
return self.interpreter.is_subproject()
|
|
319
|
+
|
|
320
|
+
@typed_pos_args('meson.install_dependency_manifest', str)
|
|
321
|
+
@noKwargs
|
|
322
|
+
def install_dependency_manifest_method(self, args: T.Tuple[str], kwargs: 'TYPE_kwargs') -> None:
|
|
323
|
+
self.build.dep_manifest_name = args[0]
|
|
324
|
+
|
|
325
|
+
@FeatureNew('meson.override_find_program', '0.46.0')
|
|
326
|
+
@typed_pos_args('meson.override_find_program', str, (mesonlib.File, ExternalProgram, build.Executable))
|
|
327
|
+
@typed_kwargs('meson.override_find_program', NATIVE_KW.evolve(since='1.3.0'))
|
|
328
|
+
def override_find_program_method(self, args: T.Tuple[str, T.Union[mesonlib.File, ExternalProgram, build.Executable]], kwargs: NativeKW) -> None:
|
|
329
|
+
name, exe = args
|
|
330
|
+
if isinstance(exe, mesonlib.File):
|
|
331
|
+
abspath = exe.absolute_path(self.interpreter.environment.source_dir,
|
|
332
|
+
self.interpreter.environment.build_dir)
|
|
333
|
+
if not os.path.exists(abspath):
|
|
334
|
+
raise InterpreterException(f'Tried to override {name} with a file that does not exist.')
|
|
335
|
+
exe = OverrideProgram(name, [abspath])
|
|
336
|
+
self.interpreter.add_find_program_override(name, exe, kwargs['native'])
|
|
337
|
+
|
|
338
|
+
@typed_kwargs(
|
|
339
|
+
'meson.override_dependency',
|
|
340
|
+
NATIVE_KW,
|
|
341
|
+
KwargInfo('static', (bool, NoneType), since='0.60.0'),
|
|
342
|
+
)
|
|
343
|
+
@typed_pos_args('meson.override_dependency', str, dependencies.Dependency)
|
|
344
|
+
@FeatureNew('meson.override_dependency', '0.54.0')
|
|
345
|
+
def override_dependency_method(self, args: T.Tuple[str, dependencies.Dependency], kwargs: 'FuncOverrideDependency') -> None:
|
|
346
|
+
name, dep = args
|
|
347
|
+
if not name:
|
|
348
|
+
raise InterpreterException('First argument must be a string and cannot be empty')
|
|
349
|
+
|
|
350
|
+
# Make a copy since we're going to mutate.
|
|
351
|
+
#
|
|
352
|
+
# dep = declare_dependency()
|
|
353
|
+
# meson.override_dependency('foo', dep)
|
|
354
|
+
# meson.override_dependency('foo-1.0', dep)
|
|
355
|
+
# dep = dependency('foo')
|
|
356
|
+
# dep.name() # == 'foo-1.0'
|
|
357
|
+
dep = copy.copy(dep)
|
|
358
|
+
dep.name = name
|
|
359
|
+
|
|
360
|
+
optkey = OptionKey('default_library', subproject=self.interpreter.subproject)
|
|
361
|
+
default_library = self.interpreter.coredata.get_option(optkey)
|
|
362
|
+
assert isinstance(default_library, str), 'for mypy'
|
|
363
|
+
static = kwargs['static']
|
|
364
|
+
if static is None:
|
|
365
|
+
# We don't know if dep represents a static or shared library, could
|
|
366
|
+
# be a mix of both. We assume it is following default_library
|
|
367
|
+
# value.
|
|
368
|
+
self._override_dependency_impl(name, dep, kwargs, static=None)
|
|
369
|
+
if default_library == 'static':
|
|
370
|
+
self._override_dependency_impl(name, dep, kwargs, static=True)
|
|
371
|
+
elif default_library == 'shared':
|
|
372
|
+
self._override_dependency_impl(name, dep, kwargs, static=False)
|
|
373
|
+
else:
|
|
374
|
+
self._override_dependency_impl(name, dep, kwargs, static=True)
|
|
375
|
+
self._override_dependency_impl(name, dep, kwargs, static=False)
|
|
376
|
+
else:
|
|
377
|
+
# dependency('foo') without specifying static kwarg should find this
|
|
378
|
+
# override regardless of the static value here. But do not raise error
|
|
379
|
+
# if it has already been overridden, which would happen when overriding
|
|
380
|
+
# static and shared separately:
|
|
381
|
+
# meson.override_dependency('foo', shared_dep, static: false)
|
|
382
|
+
# meson.override_dependency('foo', static_dep, static: true)
|
|
383
|
+
# In that case dependency('foo') would return the first override.
|
|
384
|
+
self._override_dependency_impl(name, dep, kwargs, static=None, permissive=True)
|
|
385
|
+
self._override_dependency_impl(name, dep, kwargs, static=static)
|
|
386
|
+
|
|
387
|
+
def _override_dependency_impl(self, name: str, dep: dependencies.Dependency, kwargs: 'FuncOverrideDependency',
|
|
388
|
+
static: T.Optional[bool], permissive: bool = False) -> None:
|
|
389
|
+
# We need the cast here as get_dep_identifier works on such a dict,
|
|
390
|
+
# which FuncOverrideDependency is, but mypy can't figure that out
|
|
391
|
+
nkwargs = T.cast('T.Dict[str, T.Any]', kwargs.copy())
|
|
392
|
+
if static is None:
|
|
393
|
+
del nkwargs['static']
|
|
394
|
+
else:
|
|
395
|
+
nkwargs['static'] = static
|
|
396
|
+
identifier = dependencies.get_dep_identifier(name, nkwargs)
|
|
397
|
+
for_machine = kwargs['native']
|
|
398
|
+
override = self.build.dependency_overrides[for_machine].get(identifier)
|
|
399
|
+
if override:
|
|
400
|
+
if permissive:
|
|
401
|
+
return
|
|
402
|
+
m = 'Tried to override dependency {!r} which has already been resolved or overridden at {}'
|
|
403
|
+
location = mlog.get_error_location_string(override.node.filename, override.node.lineno)
|
|
404
|
+
raise InterpreterException(m.format(name, location))
|
|
405
|
+
self.build.dependency_overrides[for_machine][identifier] = \
|
|
406
|
+
build.DependencyOverride(dep, self.interpreter.current_node)
|
|
407
|
+
|
|
408
|
+
@noPosargs
|
|
409
|
+
@noKwargs
|
|
410
|
+
def project_version_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
|
|
411
|
+
return self.build.dep_manifest[self.interpreter.active_projectname].version
|
|
412
|
+
|
|
413
|
+
@FeatureNew('meson.project_license()', '0.45.0')
|
|
414
|
+
@noPosargs
|
|
415
|
+
@noKwargs
|
|
416
|
+
def project_license_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> T.List[str]:
|
|
417
|
+
return self.build.dep_manifest[self.interpreter.active_projectname].license
|
|
418
|
+
|
|
419
|
+
@FeatureNew('meson.project_license_files()', '1.1.0')
|
|
420
|
+
@noPosargs
|
|
421
|
+
@noKwargs
|
|
422
|
+
def project_license_files_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> T.List[mesonlib.File]:
|
|
423
|
+
return [l[1] for l in self.build.dep_manifest[self.interpreter.active_projectname].license_files]
|
|
424
|
+
|
|
425
|
+
@noPosargs
|
|
426
|
+
@noKwargs
|
|
427
|
+
def version_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> MesonVersionString:
|
|
428
|
+
return MesonVersionString(self.interpreter.coredata.version)
|
|
429
|
+
|
|
430
|
+
@noPosargs
|
|
431
|
+
@noKwargs
|
|
432
|
+
def project_name_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
|
|
433
|
+
return self.interpreter.active_projectname
|
|
434
|
+
|
|
435
|
+
def __get_external_property_impl(self, propname: str, fallback: T.Optional[object], machine: MachineChoice) -> object:
|
|
436
|
+
"""Shared implementation for get_cross_property and get_external_property."""
|
|
437
|
+
try:
|
|
438
|
+
return self.interpreter.environment.properties[machine][propname]
|
|
439
|
+
except KeyError:
|
|
440
|
+
if fallback is not None:
|
|
441
|
+
return fallback
|
|
442
|
+
raise InterpreterException(f'Unknown property for {machine.get_lower_case_name()} machine: {propname}')
|
|
443
|
+
|
|
444
|
+
@noArgsFlattening
|
|
445
|
+
@FeatureDeprecated('meson.get_cross_property', '0.58.0', 'Use meson.get_external_property() instead')
|
|
446
|
+
@typed_pos_args('meson.get_cross_property', str, optargs=[object])
|
|
447
|
+
@noKwargs
|
|
448
|
+
def get_cross_property_method(self, args: T.Tuple[str, T.Optional[object]], kwargs: 'TYPE_kwargs') -> object:
|
|
449
|
+
propname, fallback = args
|
|
450
|
+
return self.__get_external_property_impl(propname, fallback, MachineChoice.HOST)
|
|
451
|
+
|
|
452
|
+
@noArgsFlattening
|
|
453
|
+
@FeatureNew('meson.get_external_property', '0.54.0')
|
|
454
|
+
@typed_pos_args('meson.get_external_property', str, optargs=[object])
|
|
455
|
+
@typed_kwargs('meson.get_external_property', NATIVE_KW)
|
|
456
|
+
def get_external_property_method(self, args: T.Tuple[str, T.Optional[object]], kwargs: 'NativeKW') -> object:
|
|
457
|
+
propname, fallback = args
|
|
458
|
+
return self.__get_external_property_impl(propname, fallback, kwargs['native'])
|
|
459
|
+
|
|
460
|
+
@FeatureNew('meson.has_external_property', '0.58.0')
|
|
461
|
+
@typed_pos_args('meson.has_external_property', str)
|
|
462
|
+
@typed_kwargs('meson.has_external_property', NATIVE_KW)
|
|
463
|
+
def has_external_property_method(self, args: T.Tuple[str], kwargs: 'NativeKW') -> bool:
|
|
464
|
+
prop_name = args[0]
|
|
465
|
+
return prop_name in self.interpreter.environment.properties[kwargs['native']]
|
|
466
|
+
|
|
467
|
+
@FeatureNew('add_devenv', '0.58.0')
|
|
468
|
+
@typed_kwargs('environment', ENV_METHOD_KW, ENV_SEPARATOR_KW.evolve(since='0.62.0'))
|
|
469
|
+
@typed_pos_args('add_devenv', (str, list, dict, mesonlib.EnvironmentVariables))
|
|
470
|
+
def add_devenv_method(self, args: T.Tuple[T.Union[str, list, dict, mesonlib.EnvironmentVariables]],
|
|
471
|
+
kwargs: 'AddDevenvKW') -> None:
|
|
472
|
+
env = args[0]
|
|
473
|
+
msg = ENV_KW.validator(env)
|
|
474
|
+
if msg:
|
|
475
|
+
raise build.InvalidArguments(f'"add_devenv": {msg}')
|
|
476
|
+
converted = env_convertor_with_method(env, kwargs['method'], kwargs['separator'])
|
|
477
|
+
assert isinstance(converted, mesonlib.EnvironmentVariables)
|
|
478
|
+
self.build.devenv.append(converted)
|
|
479
|
+
|
|
480
|
+
@noPosargs
|
|
481
|
+
@noKwargs
|
|
482
|
+
@FeatureNew('meson.build_options', '1.1.0')
|
|
483
|
+
def build_options_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> str:
|
|
484
|
+
options = self.interpreter.user_defined_options
|
|
485
|
+
if options is None:
|
|
486
|
+
return ''
|
|
487
|
+
return coredata.format_cmd_line_options(options)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Copyright 2021 The Meson development team
|
|
3
|
+
|
|
4
|
+
__all__ = [
|
|
5
|
+
'ArrayHolder',
|
|
6
|
+
'BooleanHolder',
|
|
7
|
+
'DictHolder',
|
|
8
|
+
'IntegerHolder',
|
|
9
|
+
'RangeHolder',
|
|
10
|
+
'StringHolder',
|
|
11
|
+
'MesonVersionString',
|
|
12
|
+
'MesonVersionStringHolder',
|
|
13
|
+
'DependencyVariableString',
|
|
14
|
+
'DependencyVariableStringHolder',
|
|
15
|
+
'OptionString',
|
|
16
|
+
'OptionStringHolder',
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
from .array import ArrayHolder
|
|
20
|
+
from .boolean import BooleanHolder
|
|
21
|
+
from .dict import DictHolder
|
|
22
|
+
from .integer import IntegerHolder
|
|
23
|
+
from .range import RangeHolder
|
|
24
|
+
from .string import (
|
|
25
|
+
StringHolder,
|
|
26
|
+
MesonVersionString, MesonVersionStringHolder,
|
|
27
|
+
DependencyVariableString, DependencyVariableStringHolder,
|
|
28
|
+
OptionString, OptionStringHolder,
|
|
29
|
+
)
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Copyright 2021 The Meson development team
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import typing as T
|
|
6
|
+
|
|
7
|
+
from ...interpreterbase import (
|
|
8
|
+
ObjectHolder,
|
|
9
|
+
IterableObject,
|
|
10
|
+
MesonOperator,
|
|
11
|
+
typed_operator,
|
|
12
|
+
noKwargs,
|
|
13
|
+
noPosargs,
|
|
14
|
+
noArgsFlattening,
|
|
15
|
+
typed_pos_args,
|
|
16
|
+
FeatureNew,
|
|
17
|
+
|
|
18
|
+
TYPE_var,
|
|
19
|
+
|
|
20
|
+
InvalidArguments,
|
|
21
|
+
)
|
|
22
|
+
from ...mparser import PlusAssignmentNode
|
|
23
|
+
|
|
24
|
+
if T.TYPE_CHECKING:
|
|
25
|
+
# Object holders need the actual interpreter
|
|
26
|
+
from ...interpreter import Interpreter
|
|
27
|
+
from ...interpreterbase import TYPE_kwargs
|
|
28
|
+
|
|
29
|
+
class ArrayHolder(ObjectHolder[T.List[TYPE_var]], IterableObject):
|
|
30
|
+
def __init__(self, obj: T.List[TYPE_var], interpreter: 'Interpreter') -> None:
|
|
31
|
+
super().__init__(obj, interpreter)
|
|
32
|
+
self.methods.update({
|
|
33
|
+
'contains': self.contains_method,
|
|
34
|
+
'length': self.length_method,
|
|
35
|
+
'get': self.get_method,
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
self.trivial_operators.update({
|
|
39
|
+
MesonOperator.EQUALS: (list, lambda x: self.held_object == x),
|
|
40
|
+
MesonOperator.NOT_EQUALS: (list, lambda x: self.held_object != x),
|
|
41
|
+
MesonOperator.IN: (object, lambda x: x in self.held_object),
|
|
42
|
+
MesonOperator.NOT_IN: (object, lambda x: x not in self.held_object),
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
# Use actual methods for functions that require additional checks
|
|
46
|
+
self.operators.update({
|
|
47
|
+
MesonOperator.PLUS: self.op_plus,
|
|
48
|
+
MesonOperator.INDEX: self.op_index,
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
def display_name(self) -> str:
|
|
52
|
+
return 'array'
|
|
53
|
+
|
|
54
|
+
def iter_tuple_size(self) -> None:
|
|
55
|
+
return None
|
|
56
|
+
|
|
57
|
+
def iter_self(self) -> T.Iterator[TYPE_var]:
|
|
58
|
+
return iter(self.held_object)
|
|
59
|
+
|
|
60
|
+
def size(self) -> int:
|
|
61
|
+
return len(self.held_object)
|
|
62
|
+
|
|
63
|
+
@noArgsFlattening
|
|
64
|
+
@noKwargs
|
|
65
|
+
@typed_pos_args('array.contains', object)
|
|
66
|
+
def contains_method(self, args: T.Tuple[object], kwargs: TYPE_kwargs) -> bool:
|
|
67
|
+
def check_contains(el: T.List[TYPE_var]) -> bool:
|
|
68
|
+
for element in el:
|
|
69
|
+
if isinstance(element, list):
|
|
70
|
+
found = check_contains(element)
|
|
71
|
+
if found:
|
|
72
|
+
return True
|
|
73
|
+
if element == args[0]:
|
|
74
|
+
return True
|
|
75
|
+
return False
|
|
76
|
+
return check_contains(self.held_object)
|
|
77
|
+
|
|
78
|
+
@noKwargs
|
|
79
|
+
@noPosargs
|
|
80
|
+
def length_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> int:
|
|
81
|
+
return len(self.held_object)
|
|
82
|
+
|
|
83
|
+
@noArgsFlattening
|
|
84
|
+
@noKwargs
|
|
85
|
+
@typed_pos_args('array.get', int, optargs=[object])
|
|
86
|
+
def get_method(self, args: T.Tuple[int, T.Optional[TYPE_var]], kwargs: TYPE_kwargs) -> TYPE_var:
|
|
87
|
+
index = args[0]
|
|
88
|
+
if index < -len(self.held_object) or index >= len(self.held_object):
|
|
89
|
+
if args[1] is None:
|
|
90
|
+
raise InvalidArguments(f'Array index {index} is out of bounds for array of size {len(self.held_object)}.')
|
|
91
|
+
return args[1]
|
|
92
|
+
return self.held_object[index]
|
|
93
|
+
|
|
94
|
+
@typed_operator(MesonOperator.PLUS, object)
|
|
95
|
+
def op_plus(self, other: TYPE_var) -> T.List[TYPE_var]:
|
|
96
|
+
if not isinstance(other, list):
|
|
97
|
+
if not isinstance(self.current_node, PlusAssignmentNode):
|
|
98
|
+
FeatureNew.single_use('list.<plus>', '0.60.0', self.subproject, 'The right hand operand was not a list.',
|
|
99
|
+
location=self.current_node)
|
|
100
|
+
other = [other]
|
|
101
|
+
return self.held_object + other
|
|
102
|
+
|
|
103
|
+
@typed_operator(MesonOperator.INDEX, int)
|
|
104
|
+
def op_index(self, other: int) -> TYPE_var:
|
|
105
|
+
try:
|
|
106
|
+
return self.held_object[other]
|
|
107
|
+
except IndexError:
|
|
108
|
+
raise InvalidArguments(f'Index {other} out of bounds of array of size {len(self.held_object)}.')
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Copyright 2021 The Meson development team
|
|
2
|
+
# SPDX-license-identifier: Apache-2.0
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from ...interpreterbase import (
|
|
6
|
+
ObjectHolder,
|
|
7
|
+
MesonOperator,
|
|
8
|
+
typed_pos_args,
|
|
9
|
+
noKwargs,
|
|
10
|
+
noPosargs,
|
|
11
|
+
|
|
12
|
+
InvalidArguments
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
import typing as T
|
|
16
|
+
|
|
17
|
+
if T.TYPE_CHECKING:
|
|
18
|
+
# Object holders need the actual interpreter
|
|
19
|
+
from ...interpreter import Interpreter
|
|
20
|
+
from ...interpreterbase import TYPE_var, TYPE_kwargs
|
|
21
|
+
|
|
22
|
+
class BooleanHolder(ObjectHolder[bool]):
|
|
23
|
+
def __init__(self, obj: bool, interpreter: 'Interpreter') -> None:
|
|
24
|
+
super().__init__(obj, interpreter)
|
|
25
|
+
self.methods.update({
|
|
26
|
+
'to_int': self.to_int_method,
|
|
27
|
+
'to_string': self.to_string_method,
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
self.trivial_operators.update({
|
|
31
|
+
MesonOperator.BOOL: (None, lambda x: self.held_object),
|
|
32
|
+
MesonOperator.NOT: (None, lambda x: not self.held_object),
|
|
33
|
+
MesonOperator.EQUALS: (bool, lambda x: self.held_object == x),
|
|
34
|
+
MesonOperator.NOT_EQUALS: (bool, lambda x: self.held_object != x),
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
def display_name(self) -> str:
|
|
38
|
+
return 'bool'
|
|
39
|
+
|
|
40
|
+
@noKwargs
|
|
41
|
+
@noPosargs
|
|
42
|
+
def to_int_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> int:
|
|
43
|
+
return 1 if self.held_object else 0
|
|
44
|
+
|
|
45
|
+
@noKwargs
|
|
46
|
+
@typed_pos_args('bool.to_string', optargs=[str, str])
|
|
47
|
+
def to_string_method(self, args: T.Tuple[T.Optional[str], T.Optional[str]], kwargs: TYPE_kwargs) -> str:
|
|
48
|
+
true_str = args[0] or 'true'
|
|
49
|
+
false_str = args[1] or 'false'
|
|
50
|
+
if any(x is not None for x in args) and not all(x is not None for x in args):
|
|
51
|
+
raise InvalidArguments('bool.to_string() must have either no arguments or exactly two string arguments that signify what values to return for true and false.')
|
|
52
|
+
return true_str if self.held_object else false_str
|