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
|
File without changes
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from copy import copy
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
from tomlkit.exceptions import ParseError
|
|
7
|
+
from tomlkit.exceptions import UnexpectedCharError
|
|
8
|
+
from tomlkit.toml_char import TOMLChar
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class _State:
|
|
12
|
+
def __init__(
|
|
13
|
+
self,
|
|
14
|
+
source: Source,
|
|
15
|
+
save_marker: bool | None = False,
|
|
16
|
+
restore: bool | None = False,
|
|
17
|
+
) -> None:
|
|
18
|
+
self._source = source
|
|
19
|
+
self._save_marker = save_marker
|
|
20
|
+
self.restore = restore
|
|
21
|
+
|
|
22
|
+
def __enter__(self) -> _State:
|
|
23
|
+
# Entering this context manager - save the state
|
|
24
|
+
self._chars = copy(self._source._chars)
|
|
25
|
+
self._idx = self._source._idx
|
|
26
|
+
self._current = self._source._current
|
|
27
|
+
self._marker = self._source._marker
|
|
28
|
+
|
|
29
|
+
return self
|
|
30
|
+
|
|
31
|
+
def __exit__(self, exception_type, exception_val, trace):
|
|
32
|
+
# Exiting this context manager - restore the prior state
|
|
33
|
+
if self.restore or exception_type:
|
|
34
|
+
self._source._chars = self._chars
|
|
35
|
+
self._source._idx = self._idx
|
|
36
|
+
self._source._current = self._current
|
|
37
|
+
if self._save_marker:
|
|
38
|
+
self._source._marker = self._marker
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class _StateHandler:
|
|
42
|
+
"""
|
|
43
|
+
State preserver for the Parser.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
def __init__(self, source: Source) -> None:
|
|
47
|
+
self._source = source
|
|
48
|
+
self._states = []
|
|
49
|
+
|
|
50
|
+
def __call__(self, *args, **kwargs):
|
|
51
|
+
return _State(self._source, *args, **kwargs)
|
|
52
|
+
|
|
53
|
+
def __enter__(self) -> _State:
|
|
54
|
+
state = self()
|
|
55
|
+
self._states.append(state)
|
|
56
|
+
return state.__enter__()
|
|
57
|
+
|
|
58
|
+
def __exit__(self, exception_type, exception_val, trace):
|
|
59
|
+
state = self._states.pop()
|
|
60
|
+
return state.__exit__(exception_type, exception_val, trace)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class Source(str):
|
|
64
|
+
EOF = TOMLChar("\0")
|
|
65
|
+
|
|
66
|
+
def __init__(self, _: str) -> None:
|
|
67
|
+
super().__init__()
|
|
68
|
+
|
|
69
|
+
# Collection of TOMLChars
|
|
70
|
+
self._chars = iter([(i, TOMLChar(c)) for i, c in enumerate(self)])
|
|
71
|
+
|
|
72
|
+
self._idx = 0
|
|
73
|
+
self._marker = 0
|
|
74
|
+
self._current = TOMLChar("")
|
|
75
|
+
|
|
76
|
+
self._state = _StateHandler(self)
|
|
77
|
+
|
|
78
|
+
self.inc()
|
|
79
|
+
|
|
80
|
+
def reset(self):
|
|
81
|
+
# initialize both idx and current
|
|
82
|
+
self.inc()
|
|
83
|
+
|
|
84
|
+
# reset marker
|
|
85
|
+
self.mark()
|
|
86
|
+
|
|
87
|
+
@property
|
|
88
|
+
def state(self) -> _StateHandler:
|
|
89
|
+
return self._state
|
|
90
|
+
|
|
91
|
+
@property
|
|
92
|
+
def idx(self) -> int:
|
|
93
|
+
return self._idx
|
|
94
|
+
|
|
95
|
+
@property
|
|
96
|
+
def current(self) -> TOMLChar:
|
|
97
|
+
return self._current
|
|
98
|
+
|
|
99
|
+
@property
|
|
100
|
+
def marker(self) -> int:
|
|
101
|
+
return self._marker
|
|
102
|
+
|
|
103
|
+
def extract(self) -> str:
|
|
104
|
+
"""
|
|
105
|
+
Extracts the value between marker and index
|
|
106
|
+
"""
|
|
107
|
+
return self[self._marker : self._idx]
|
|
108
|
+
|
|
109
|
+
def inc(self, exception: type[ParseError] | None = None) -> bool:
|
|
110
|
+
"""
|
|
111
|
+
Increments the parser if the end of the input has not been reached.
|
|
112
|
+
Returns whether or not it was able to advance.
|
|
113
|
+
"""
|
|
114
|
+
try:
|
|
115
|
+
self._idx, self._current = next(self._chars)
|
|
116
|
+
|
|
117
|
+
return True
|
|
118
|
+
except StopIteration:
|
|
119
|
+
self._idx = len(self)
|
|
120
|
+
self._current = self.EOF
|
|
121
|
+
if exception:
|
|
122
|
+
raise self.parse_error(exception)
|
|
123
|
+
|
|
124
|
+
return False
|
|
125
|
+
|
|
126
|
+
def inc_n(self, n: int, exception: type[ParseError] | None = None) -> bool:
|
|
127
|
+
"""
|
|
128
|
+
Increments the parser by n characters
|
|
129
|
+
if the end of the input has not been reached.
|
|
130
|
+
"""
|
|
131
|
+
return all(self.inc(exception=exception) for _ in range(n))
|
|
132
|
+
|
|
133
|
+
def consume(self, chars, min=0, max=-1):
|
|
134
|
+
"""
|
|
135
|
+
Consume chars until min/max is satisfied is valid.
|
|
136
|
+
"""
|
|
137
|
+
while self.current in chars and max != 0:
|
|
138
|
+
min -= 1
|
|
139
|
+
max -= 1
|
|
140
|
+
if not self.inc():
|
|
141
|
+
break
|
|
142
|
+
|
|
143
|
+
# failed to consume minimum number of characters
|
|
144
|
+
if min > 0:
|
|
145
|
+
raise self.parse_error(UnexpectedCharError, self.current)
|
|
146
|
+
|
|
147
|
+
def end(self) -> bool:
|
|
148
|
+
"""
|
|
149
|
+
Returns True if the parser has reached the end of the input.
|
|
150
|
+
"""
|
|
151
|
+
return self._current is self.EOF
|
|
152
|
+
|
|
153
|
+
def mark(self) -> None:
|
|
154
|
+
"""
|
|
155
|
+
Sets the marker to the index's current position
|
|
156
|
+
"""
|
|
157
|
+
self._marker = self._idx
|
|
158
|
+
|
|
159
|
+
def parse_error(
|
|
160
|
+
self,
|
|
161
|
+
exception: type[ParseError] = ParseError,
|
|
162
|
+
*args: Any,
|
|
163
|
+
**kwargs: Any,
|
|
164
|
+
) -> ParseError:
|
|
165
|
+
"""
|
|
166
|
+
Creates a generic "parse error" at the current position.
|
|
167
|
+
"""
|
|
168
|
+
line, col = self._to_linecol()
|
|
169
|
+
|
|
170
|
+
return exception(line, col, *args, **kwargs)
|
|
171
|
+
|
|
172
|
+
def _to_linecol(self) -> tuple[int, int]:
|
|
173
|
+
cur = 0
|
|
174
|
+
for i, line in enumerate(self.splitlines()):
|
|
175
|
+
if cur + len(line) + 1 > self.idx:
|
|
176
|
+
return (i + 1, self.idx - cur)
|
|
177
|
+
|
|
178
|
+
cur += len(line) + 1
|
|
179
|
+
|
|
180
|
+
return len(self.splitlines()), 0
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import string
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class TOMLChar(str):
|
|
5
|
+
def __init__(self, c):
|
|
6
|
+
super().__init__()
|
|
7
|
+
|
|
8
|
+
if len(self) > 1:
|
|
9
|
+
raise ValueError("A TOML character must be of length 1")
|
|
10
|
+
|
|
11
|
+
BARE = string.ascii_letters + string.digits + "-_"
|
|
12
|
+
KV = "= \t"
|
|
13
|
+
NUMBER = string.digits + "+-_.e"
|
|
14
|
+
SPACES = " \t"
|
|
15
|
+
NL = "\n\r"
|
|
16
|
+
WS = SPACES + NL
|
|
17
|
+
|
|
18
|
+
def is_bare_key_char(self) -> bool:
|
|
19
|
+
"""
|
|
20
|
+
Whether the character is a valid bare key name or not.
|
|
21
|
+
"""
|
|
22
|
+
return self in self.BARE
|
|
23
|
+
|
|
24
|
+
def is_kv_sep(self) -> bool:
|
|
25
|
+
"""
|
|
26
|
+
Whether the character is a valid key/value separator or not.
|
|
27
|
+
"""
|
|
28
|
+
return self in self.KV
|
|
29
|
+
|
|
30
|
+
def is_int_float_char(self) -> bool:
|
|
31
|
+
"""
|
|
32
|
+
Whether the character if a valid integer or float value character or not.
|
|
33
|
+
"""
|
|
34
|
+
return self in self.NUMBER
|
|
35
|
+
|
|
36
|
+
def is_ws(self) -> bool:
|
|
37
|
+
"""
|
|
38
|
+
Whether the character is a whitespace character or not.
|
|
39
|
+
"""
|
|
40
|
+
return self in self.WS
|
|
41
|
+
|
|
42
|
+
def is_nl(self) -> bool:
|
|
43
|
+
"""
|
|
44
|
+
Whether the character is a new line character or not.
|
|
45
|
+
"""
|
|
46
|
+
return self in self.NL
|
|
47
|
+
|
|
48
|
+
def is_spaces(self) -> bool:
|
|
49
|
+
"""
|
|
50
|
+
Whether the character is a space or not
|
|
51
|
+
"""
|
|
52
|
+
return self in self.SPACES
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import re
|
|
3
|
+
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
from tomlkit.api import loads
|
|
7
|
+
from tomlkit.toml_document import TOMLDocument
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from _typeshed import StrPath as _StrPath
|
|
12
|
+
else:
|
|
13
|
+
from typing import Union
|
|
14
|
+
|
|
15
|
+
_StrPath = Union[str, os.PathLike]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class TOMLFile:
|
|
19
|
+
"""
|
|
20
|
+
Represents a TOML file.
|
|
21
|
+
|
|
22
|
+
:param path: path to the TOML file
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
def __init__(self, path: _StrPath) -> None:
|
|
26
|
+
self._path = path
|
|
27
|
+
self._linesep = os.linesep
|
|
28
|
+
|
|
29
|
+
def read(self) -> TOMLDocument:
|
|
30
|
+
"""Read the file content as a :class:`tomlkit.toml_document.TOMLDocument`."""
|
|
31
|
+
with open(self._path, encoding="utf-8", newline="") as f:
|
|
32
|
+
content = f.read()
|
|
33
|
+
|
|
34
|
+
# check if consistent line endings
|
|
35
|
+
num_newline = content.count("\n")
|
|
36
|
+
if num_newline > 0:
|
|
37
|
+
num_win_eol = content.count("\r\n")
|
|
38
|
+
if num_win_eol == num_newline:
|
|
39
|
+
self._linesep = "\r\n"
|
|
40
|
+
elif num_win_eol == 0:
|
|
41
|
+
self._linesep = "\n"
|
|
42
|
+
else:
|
|
43
|
+
self._linesep = "mixed"
|
|
44
|
+
|
|
45
|
+
return loads(content)
|
|
46
|
+
|
|
47
|
+
def write(self, data: TOMLDocument) -> None:
|
|
48
|
+
"""Write the TOMLDocument to the file."""
|
|
49
|
+
content = data.as_string()
|
|
50
|
+
|
|
51
|
+
# apply linesep
|
|
52
|
+
if self._linesep == "\n":
|
|
53
|
+
content = content.replace("\r\n", "\n")
|
|
54
|
+
elif self._linesep == "\r\n":
|
|
55
|
+
content = re.sub(r"(?<!\r)\n", "\r\n", content)
|
|
56
|
+
|
|
57
|
+
with open(self._path, "w", encoding="utf-8", newline="") as f:
|
|
58
|
+
f.write(content)
|
package/releng/winenv.py
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from operator import attrgetter
|
|
3
|
+
import os
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
import platform
|
|
6
|
+
import subprocess
|
|
7
|
+
from typing import Optional
|
|
8
|
+
if platform.system() == "Windows":
|
|
9
|
+
import winreg
|
|
10
|
+
|
|
11
|
+
from .machine_spec import MachineSpec
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
cached_msvs_dir = None
|
|
15
|
+
cached_msvc_dir = None
|
|
16
|
+
cached_winsdk = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def detect_msvs_installation_dir(toolchain_prefix: Optional[Path]) -> Path:
|
|
20
|
+
global cached_msvs_dir
|
|
21
|
+
if cached_msvs_dir is None:
|
|
22
|
+
vswhere = Path(os.environ.get("ProgramFiles(x86)", os.environ["ProgramFiles"])) \
|
|
23
|
+
/ "Microsoft Visual Studio" / "Installer" / "vswhere.exe"
|
|
24
|
+
if not vswhere.exists():
|
|
25
|
+
if toolchain_prefix is None:
|
|
26
|
+
raise MissingDependencyError("unable to locate vswhere.exe")
|
|
27
|
+
vswhere = toolchain_prefix / "bin" / "vswhere.exe"
|
|
28
|
+
installations = json.loads(
|
|
29
|
+
subprocess.run([
|
|
30
|
+
vswhere,
|
|
31
|
+
"-latest",
|
|
32
|
+
"-format", "json",
|
|
33
|
+
"-property", "installationPath"
|
|
34
|
+
],
|
|
35
|
+
capture_output=True,
|
|
36
|
+
encoding="utf-8",
|
|
37
|
+
check=True).stdout
|
|
38
|
+
)
|
|
39
|
+
if len(installations) == 0:
|
|
40
|
+
raise MissingDependencyError("Visual Studio is not installed")
|
|
41
|
+
cached_msvs_dir = Path(installations[0]["installationPath"])
|
|
42
|
+
return cached_msvs_dir
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def detect_msvc_tool_dir(toolchain_prefix: Optional[Path]) -> Path:
|
|
46
|
+
global cached_msvc_dir
|
|
47
|
+
if cached_msvc_dir is None:
|
|
48
|
+
msvs_dir = detect_msvs_installation_dir(toolchain_prefix)
|
|
49
|
+
version = sorted((msvs_dir / "VC" / "Tools" / "MSVC").glob("*.*.*"),
|
|
50
|
+
key=attrgetter("name"),
|
|
51
|
+
reverse=True)[0].name
|
|
52
|
+
cached_msvc_dir = msvs_dir / "VC" / "Tools" / "MSVC" / version
|
|
53
|
+
return cached_msvc_dir
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def detect_windows_sdk() -> tuple[Path, str]:
|
|
57
|
+
global cached_winsdk
|
|
58
|
+
if cached_winsdk is None:
|
|
59
|
+
try:
|
|
60
|
+
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Windows Kits\Installed Roots")
|
|
61
|
+
try:
|
|
62
|
+
(install_dir, _) = winreg.QueryValueEx(key, "KitsRoot10")
|
|
63
|
+
install_dir = Path(install_dir)
|
|
64
|
+
version = sorted((install_dir / "Include").glob("*.*.*"),
|
|
65
|
+
key=attrgetter("name"),
|
|
66
|
+
reverse=True)[0].name
|
|
67
|
+
cached_winsdk = (install_dir, version)
|
|
68
|
+
finally:
|
|
69
|
+
winreg.CloseKey(key)
|
|
70
|
+
except Exception as e:
|
|
71
|
+
raise MissingDependencyError("Windows 10 SDK is not installed")
|
|
72
|
+
return cached_winsdk
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def detect_msvs_tool_path(machine: MachineSpec,
|
|
76
|
+
build_machine: MachineSpec,
|
|
77
|
+
tool: str,
|
|
78
|
+
toolchain_prefix: Optional[Path]) -> Path:
|
|
79
|
+
return detect_msvc_tool_dir(toolchain_prefix) / "bin" / f"Host{build_machine.msvc_platform}" \
|
|
80
|
+
/ machine.msvc_platform / tool
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def detect_msvs_runtime_path(machine: MachineSpec,
|
|
84
|
+
build_machine: MachineSpec,
|
|
85
|
+
toolchain_prefix: Optional[Path]) -> list[Path]:
|
|
86
|
+
msvc_platform = machine.msvc_platform
|
|
87
|
+
native_msvc_platform = build_machine.msvc_platform
|
|
88
|
+
|
|
89
|
+
msvc_dir = detect_msvc_tool_dir(toolchain_prefix)
|
|
90
|
+
msvc_bindir = msvc_dir / "bin" / f"Host{native_msvc_platform}" / msvc_platform
|
|
91
|
+
|
|
92
|
+
msvc_dll_dirs = []
|
|
93
|
+
if msvc_platform != native_msvc_platform:
|
|
94
|
+
msvc_dll_dirs.append(msvc_dir / "bin" / f"Host{native_msvc_platform}" / native_msvc_platform)
|
|
95
|
+
|
|
96
|
+
(winsdk_dir, winsdk_version) = detect_windows_sdk()
|
|
97
|
+
winsdk_bindir = winsdk_dir / "Bin" / winsdk_version / msvc_platform
|
|
98
|
+
|
|
99
|
+
return [winsdk_bindir, msvc_bindir] + msvc_dll_dirs
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def detect_msvs_include_path(toolchain_prefix: Optional[Path]) -> list[Path]:
|
|
103
|
+
msvc_dir = detect_msvc_tool_dir(toolchain_prefix)
|
|
104
|
+
vc_dir = detect_msvs_installation_dir(toolchain_prefix) / "VC"
|
|
105
|
+
|
|
106
|
+
(winsdk_dir, winsdk_version) = detect_windows_sdk()
|
|
107
|
+
winsdk_inc_dirs = [
|
|
108
|
+
winsdk_dir / "Include" / winsdk_version / "um",
|
|
109
|
+
winsdk_dir / "Include" / winsdk_version / "shared",
|
|
110
|
+
]
|
|
111
|
+
|
|
112
|
+
return [
|
|
113
|
+
msvc_dir / "include",
|
|
114
|
+
msvc_dir / "atlmfc" / "include",
|
|
115
|
+
vc_dir / "Auxiliary" / "VS" / "include",
|
|
116
|
+
winsdk_dir / "Include" / winsdk_version / "ucrt",
|
|
117
|
+
] + winsdk_inc_dirs
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def detect_msvs_library_path(machine: MachineSpec,
|
|
121
|
+
toolchain_prefix: Optional[Path]) -> list[Path]:
|
|
122
|
+
msvc_platform = machine.msvc_platform
|
|
123
|
+
|
|
124
|
+
msvc_dir = detect_msvc_tool_dir(toolchain_prefix)
|
|
125
|
+
vc_dir = detect_msvs_installation_dir(toolchain_prefix) / "VC"
|
|
126
|
+
|
|
127
|
+
(winsdk_dir, winsdk_version) = detect_windows_sdk()
|
|
128
|
+
winsdk_lib_dir = winsdk_dir / "Lib" / winsdk_version / "um" / msvc_platform
|
|
129
|
+
|
|
130
|
+
return [
|
|
131
|
+
msvc_dir / "lib" / msvc_platform,
|
|
132
|
+
msvc_dir / "atlmfc" / "lib" / msvc_platform,
|
|
133
|
+
vc_dir / "Auxiliary" / "VS" / "lib" / msvc_platform,
|
|
134
|
+
winsdk_dir / "Lib" / winsdk_version / "ucrt" / msvc_platform,
|
|
135
|
+
winsdk_lib_dir,
|
|
136
|
+
]
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
class MissingDependencyError(Exception):
|
|
140
|
+
pass
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
import re
|
|
3
|
+
import sys
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def main(argv: list[str]):
|
|
7
|
+
version = argv[1]
|
|
8
|
+
inpkg = Path(argv[2])
|
|
9
|
+
outpkg = Path(argv[3])
|
|
10
|
+
|
|
11
|
+
vanilla_pkg = inpkg.read_text(encoding="utf-8")
|
|
12
|
+
adjusted_pkg = re.sub(r'(?P<prefix>"version": ")[^"]+(?P<suffix>")',
|
|
13
|
+
f"\\g<prefix>{version}\\g<suffix>",
|
|
14
|
+
vanilla_pkg)
|
|
15
|
+
outpkg.write_text(adjusted_pkg, encoding="utf-8")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
if __name__ == "__main__":
|
|
19
|
+
main(sys.argv)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import os
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
import sys
|
|
5
|
+
from typing import Iterator
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
SOURCE_ROOT = Path(__file__).resolve().parent.parent
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def detect_version() -> str:
|
|
12
|
+
pkg = json.loads((SOURCE_ROOT / "package.json").read_text(encoding="utf-8"))
|
|
13
|
+
version = pkg["version"]
|
|
14
|
+
if version == "0.0.0":
|
|
15
|
+
releng_location = next(enumerate_releng_locations(), None)
|
|
16
|
+
if releng_location is not None:
|
|
17
|
+
sys.path.insert(0, str(releng_location.parent))
|
|
18
|
+
from releng.frida_version import detect
|
|
19
|
+
version = detect(SOURCE_ROOT).name
|
|
20
|
+
return version
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def enumerate_releng_locations() -> Iterator[Path]:
|
|
24
|
+
val = os.environ.get("MESON_SOURCE_ROOT")
|
|
25
|
+
if val is not None:
|
|
26
|
+
parent_releng = Path(val) / "releng"
|
|
27
|
+
if releng_location_exists(parent_releng):
|
|
28
|
+
yield parent_releng
|
|
29
|
+
|
|
30
|
+
local_releng = SOURCE_ROOT / "releng"
|
|
31
|
+
if releng_location_exists(local_releng):
|
|
32
|
+
yield local_releng
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def releng_location_exists(location: Path) -> bool:
|
|
36
|
+
return (location / "frida_version.py").exists()
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
if __name__ == "__main__":
|
|
40
|
+
print(detect_version())
|