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,376 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Copyright 2017 The Meson development team
|
|
3
|
+
# Copyright © 2023 Intel Corporation
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
import abc
|
|
9
|
+
import argparse
|
|
10
|
+
import gzip
|
|
11
|
+
import os
|
|
12
|
+
import sys
|
|
13
|
+
import shlex
|
|
14
|
+
import shutil
|
|
15
|
+
import subprocess
|
|
16
|
+
import tarfile
|
|
17
|
+
import tempfile
|
|
18
|
+
import hashlib
|
|
19
|
+
import typing as T
|
|
20
|
+
|
|
21
|
+
from dataclasses import dataclass
|
|
22
|
+
from glob import glob
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
from mesonbuild.environment import Environment, detect_ninja
|
|
25
|
+
from mesonbuild.mesonlib import (MesonException, RealPathAction, get_meson_command, quiet_git,
|
|
26
|
+
windows_proof_rmtree, setup_vsenv, OptionKey)
|
|
27
|
+
from mesonbuild.msetup import add_arguments as msetup_argparse
|
|
28
|
+
from mesonbuild.wrap import wrap
|
|
29
|
+
from mesonbuild import mlog, build, coredata
|
|
30
|
+
from .scripts.meson_exe import run_exe
|
|
31
|
+
|
|
32
|
+
if T.TYPE_CHECKING:
|
|
33
|
+
from ._typing import ImmutableListProtocol
|
|
34
|
+
from .interpreterbase.baseobjects import SubProject
|
|
35
|
+
from .mesonlib import ExecutableSerialisation
|
|
36
|
+
|
|
37
|
+
archive_choices = ['gztar', 'xztar', 'zip']
|
|
38
|
+
|
|
39
|
+
archive_extension = {'gztar': '.tar.gz',
|
|
40
|
+
'xztar': '.tar.xz',
|
|
41
|
+
'zip': '.zip'}
|
|
42
|
+
|
|
43
|
+
# Note: when adding arguments, please also add them to the completion
|
|
44
|
+
# scripts in $MESONSRC/data/shell-completions/
|
|
45
|
+
def add_arguments(parser: argparse.ArgumentParser) -> None:
|
|
46
|
+
parser.add_argument('-C', dest='wd', action=RealPathAction,
|
|
47
|
+
help='directory to cd into before running')
|
|
48
|
+
parser.add_argument('--allow-dirty', action='store_true',
|
|
49
|
+
help='Allow even when repository contains uncommitted changes.')
|
|
50
|
+
parser.add_argument('--formats', default='xztar',
|
|
51
|
+
help='Comma separated list of archive types to create. Supports xztar (default), gztar, and zip.')
|
|
52
|
+
parser.add_argument('--include-subprojects', action='store_true',
|
|
53
|
+
help='Include source code of subprojects that have been used for the build.')
|
|
54
|
+
parser.add_argument('--no-tests', action='store_true',
|
|
55
|
+
help='Do not build and test generated packages.')
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def create_hash(fname: str) -> None:
|
|
59
|
+
hashname = fname + '.sha256sum'
|
|
60
|
+
m = hashlib.sha256()
|
|
61
|
+
m.update(open(fname, 'rb').read())
|
|
62
|
+
with open(hashname, 'w', encoding='utf-8') as f:
|
|
63
|
+
# A space and an asterisk because that is the format defined by GNU coreutils
|
|
64
|
+
# and accepted by busybox and the Perl shasum tool.
|
|
65
|
+
f.write('{} *{}\n'.format(m.hexdigest(), os.path.basename(fname)))
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
msg_uncommitted_changes = 'Repository has uncommitted changes that will not be included in the dist tarball'
|
|
69
|
+
|
|
70
|
+
def handle_dirty_opt(msg: str, allow_dirty: bool) -> None:
|
|
71
|
+
if allow_dirty:
|
|
72
|
+
mlog.warning(msg)
|
|
73
|
+
else:
|
|
74
|
+
mlog.error(msg + '\n' + 'Use --allow-dirty to ignore the warning and proceed anyway')
|
|
75
|
+
sys.exit(1)
|
|
76
|
+
|
|
77
|
+
def is_git(src_root: str) -> bool:
|
|
78
|
+
'''
|
|
79
|
+
Checks if meson.build file at the root source directory is tracked by git.
|
|
80
|
+
It could be a subproject part of the parent project git repository.
|
|
81
|
+
'''
|
|
82
|
+
return quiet_git(['ls-files', '--error-unmatch', 'meson.build'], src_root)[0]
|
|
83
|
+
|
|
84
|
+
def is_hg(src_root: str) -> bool:
|
|
85
|
+
return os.path.isdir(os.path.join(src_root, '.hg'))
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
@dataclass
|
|
89
|
+
class Dist(metaclass=abc.ABCMeta):
|
|
90
|
+
dist_name: str
|
|
91
|
+
src_root: str
|
|
92
|
+
bld_root: str
|
|
93
|
+
dist_scripts: T.List[ExecutableSerialisation]
|
|
94
|
+
subprojects: T.Dict[SubProject, str]
|
|
95
|
+
options: argparse.Namespace
|
|
96
|
+
|
|
97
|
+
def __post_init__(self) -> None:
|
|
98
|
+
self.dist_sub = os.path.join(self.bld_root, 'meson-dist')
|
|
99
|
+
self.distdir = os.path.join(self.dist_sub, self.dist_name)
|
|
100
|
+
|
|
101
|
+
@abc.abstractmethod
|
|
102
|
+
def create_dist(self, archives: T.List[str]) -> T.List[str]:
|
|
103
|
+
pass
|
|
104
|
+
|
|
105
|
+
def run_dist_scripts(self) -> None:
|
|
106
|
+
assert os.path.isabs(self.distdir)
|
|
107
|
+
mesonrewrite = Environment.get_build_command() + ['rewrite']
|
|
108
|
+
env = {'MESON_DIST_ROOT': self.distdir,
|
|
109
|
+
'MESON_SOURCE_ROOT': self.src_root,
|
|
110
|
+
'MESON_BUILD_ROOT': self.bld_root,
|
|
111
|
+
'MESONREWRITE': ' '.join(shlex.quote(x) for x in mesonrewrite),
|
|
112
|
+
}
|
|
113
|
+
for d in self.dist_scripts:
|
|
114
|
+
if d.subproject and d.subproject not in self.subprojects:
|
|
115
|
+
continue
|
|
116
|
+
subdir = self.subprojects.get(d.subproject, '')
|
|
117
|
+
env['MESON_PROJECT_DIST_ROOT'] = os.path.join(self.distdir, subdir)
|
|
118
|
+
env['MESON_PROJECT_SOURCE_ROOT'] = os.path.join(self.src_root, subdir)
|
|
119
|
+
env['MESON_PROJECT_BUILD_ROOT'] = os.path.join(self.bld_root, subdir)
|
|
120
|
+
name = ' '.join(d.cmd_args)
|
|
121
|
+
print(f'Running custom dist script {name!r}')
|
|
122
|
+
try:
|
|
123
|
+
rc = run_exe(d, env)
|
|
124
|
+
if rc != 0:
|
|
125
|
+
sys.exit('Dist script errored out')
|
|
126
|
+
except OSError:
|
|
127
|
+
print(f'Failed to run dist script {name!r}')
|
|
128
|
+
sys.exit(1)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class GitDist(Dist):
|
|
132
|
+
def git_root(self, dir_: str) -> Path:
|
|
133
|
+
# Cannot use --show-toplevel here because git in our CI prints cygwin paths
|
|
134
|
+
# that python cannot resolve. Workaround this by taking parent of src_root.
|
|
135
|
+
prefix = quiet_git(['rev-parse', '--show-prefix'], dir_, check=True)[1].strip()
|
|
136
|
+
if not prefix:
|
|
137
|
+
return Path(dir_)
|
|
138
|
+
prefix_level = len(Path(prefix).parents)
|
|
139
|
+
return Path(dir_).parents[prefix_level - 1]
|
|
140
|
+
|
|
141
|
+
def have_dirty_index(self) -> bool:
|
|
142
|
+
'''Check whether there are uncommitted changes in git'''
|
|
143
|
+
ret = subprocess.call(['git', '-C', self.src_root, 'diff-index', '--quiet', 'HEAD'])
|
|
144
|
+
return ret == 1
|
|
145
|
+
|
|
146
|
+
def copy_git(self, src: T.Union[str, os.PathLike], distdir: str, revision: str = 'HEAD',
|
|
147
|
+
prefix: T.Optional[str] = None, subdir: T.Optional[str] = None) -> None:
|
|
148
|
+
cmd = ['git', 'archive', '--format', 'tar', revision]
|
|
149
|
+
if prefix is not None:
|
|
150
|
+
cmd.insert(2, f'--prefix={prefix}/')
|
|
151
|
+
if subdir is not None:
|
|
152
|
+
cmd.extend(['--', subdir])
|
|
153
|
+
with tempfile.TemporaryFile() as f:
|
|
154
|
+
subprocess.check_call(cmd, cwd=src, stdout=f)
|
|
155
|
+
f.seek(0)
|
|
156
|
+
t = tarfile.open(fileobj=f) # [ignore encoding]
|
|
157
|
+
t.extractall(path=distdir)
|
|
158
|
+
|
|
159
|
+
def process_git_project(self, src_root: str, distdir: str) -> None:
|
|
160
|
+
if self.have_dirty_index():
|
|
161
|
+
handle_dirty_opt(msg_uncommitted_changes, self.options.allow_dirty)
|
|
162
|
+
if os.path.exists(distdir):
|
|
163
|
+
windows_proof_rmtree(distdir)
|
|
164
|
+
repo_root = self.git_root(src_root)
|
|
165
|
+
if repo_root.samefile(src_root):
|
|
166
|
+
os.makedirs(distdir)
|
|
167
|
+
self.copy_git(src_root, distdir)
|
|
168
|
+
else:
|
|
169
|
+
subdir = Path(src_root).relative_to(repo_root)
|
|
170
|
+
tmp_distdir = distdir + '-tmp'
|
|
171
|
+
if os.path.exists(tmp_distdir):
|
|
172
|
+
windows_proof_rmtree(tmp_distdir)
|
|
173
|
+
os.makedirs(tmp_distdir)
|
|
174
|
+
self.copy_git(repo_root, tmp_distdir, subdir=str(subdir))
|
|
175
|
+
Path(tmp_distdir, subdir).rename(distdir)
|
|
176
|
+
windows_proof_rmtree(tmp_distdir)
|
|
177
|
+
self.process_submodules(src_root, distdir)
|
|
178
|
+
|
|
179
|
+
def process_submodules(self, src: str, distdir: str) -> None:
|
|
180
|
+
module_file = os.path.join(src, '.gitmodules')
|
|
181
|
+
if not os.path.exists(module_file):
|
|
182
|
+
return
|
|
183
|
+
cmd = ['git', 'submodule', 'status', '--cached', '--recursive']
|
|
184
|
+
modlist = subprocess.check_output(cmd, cwd=src, universal_newlines=True).splitlines()
|
|
185
|
+
for submodule in modlist:
|
|
186
|
+
status = submodule[:1]
|
|
187
|
+
sha1, rest = submodule[1:].split(' ', 1)
|
|
188
|
+
subpath = rest.rsplit(' ', 1)[0]
|
|
189
|
+
|
|
190
|
+
if status == '-':
|
|
191
|
+
mlog.warning(f'Submodule {subpath!r} is not checked out and cannot be added to the dist')
|
|
192
|
+
continue
|
|
193
|
+
elif status in {'+', 'U'}:
|
|
194
|
+
handle_dirty_opt(f'Submodule {subpath!r} has uncommitted changes that will not be included in the dist tarball', self.options.allow_dirty)
|
|
195
|
+
|
|
196
|
+
self.copy_git(os.path.join(src, subpath), distdir, revision=sha1, prefix=subpath)
|
|
197
|
+
|
|
198
|
+
def create_dist(self, archives: T.List[str]) -> T.List[str]:
|
|
199
|
+
self.process_git_project(self.src_root, self.distdir)
|
|
200
|
+
for path in self.subprojects.values():
|
|
201
|
+
sub_src_root = os.path.join(self.src_root, path)
|
|
202
|
+
sub_distdir = os.path.join(self.distdir, path)
|
|
203
|
+
if os.path.exists(sub_distdir):
|
|
204
|
+
continue
|
|
205
|
+
if is_git(sub_src_root):
|
|
206
|
+
self.process_git_project(sub_src_root, sub_distdir)
|
|
207
|
+
else:
|
|
208
|
+
shutil.copytree(sub_src_root, sub_distdir)
|
|
209
|
+
self.run_dist_scripts()
|
|
210
|
+
output_names = []
|
|
211
|
+
for a in archives:
|
|
212
|
+
compressed_name = self.distdir + archive_extension[a]
|
|
213
|
+
shutil.make_archive(self.distdir, a, root_dir=self.dist_sub, base_dir=self.dist_name)
|
|
214
|
+
output_names.append(compressed_name)
|
|
215
|
+
windows_proof_rmtree(self.distdir)
|
|
216
|
+
return output_names
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
class HgDist(Dist):
|
|
220
|
+
def have_dirty_index(self) -> bool:
|
|
221
|
+
'''Check whether there are uncommitted changes in hg'''
|
|
222
|
+
out = subprocess.check_output(['hg', '-R', self.src_root, 'summary'])
|
|
223
|
+
return b'commit: (clean)' not in out
|
|
224
|
+
|
|
225
|
+
def create_dist(self, archives: T.List[str]) -> T.List[str]:
|
|
226
|
+
if self.have_dirty_index():
|
|
227
|
+
handle_dirty_opt(msg_uncommitted_changes, self.options.allow_dirty)
|
|
228
|
+
if self.dist_scripts:
|
|
229
|
+
mlog.warning('dist scripts are not supported in Mercurial projects')
|
|
230
|
+
|
|
231
|
+
os.makedirs(self.dist_sub, exist_ok=True)
|
|
232
|
+
tarname = os.path.join(self.dist_sub, self.dist_name + '.tar')
|
|
233
|
+
xzname = tarname + '.xz'
|
|
234
|
+
gzname = tarname + '.gz'
|
|
235
|
+
zipname = os.path.join(self.dist_sub, self.dist_name + '.zip')
|
|
236
|
+
# Note that -X interprets relative paths using the current working
|
|
237
|
+
# directory, not the repository root, so this must be an absolute path:
|
|
238
|
+
# https://bz.mercurial-scm.org/show_bug.cgi?id=6267
|
|
239
|
+
#
|
|
240
|
+
# .hg[a-z]* is used instead of .hg* to keep .hg_archival.txt, which may
|
|
241
|
+
# be useful to link the tarball to the Mercurial revision for either
|
|
242
|
+
# manual inspection or in case any code interprets it for a --version or
|
|
243
|
+
# similar.
|
|
244
|
+
subprocess.check_call(['hg', 'archive', '-R', self.src_root, '-S', '-t', 'tar',
|
|
245
|
+
'-X', self.src_root + '/.hg[a-z]*', tarname])
|
|
246
|
+
output_names = []
|
|
247
|
+
if 'xztar' in archives:
|
|
248
|
+
import lzma
|
|
249
|
+
with lzma.open(xzname, 'wb') as xf, open(tarname, 'rb') as tf:
|
|
250
|
+
shutil.copyfileobj(tf, xf)
|
|
251
|
+
output_names.append(xzname)
|
|
252
|
+
if 'gztar' in archives:
|
|
253
|
+
with gzip.open(gzname, 'wb') as zf, open(tarname, 'rb') as tf:
|
|
254
|
+
shutil.copyfileobj(tf, zf)
|
|
255
|
+
output_names.append(gzname)
|
|
256
|
+
os.unlink(tarname)
|
|
257
|
+
if 'zip' in archives:
|
|
258
|
+
subprocess.check_call(['hg', 'archive', '-R', self.src_root, '-S', '-t', 'zip', zipname])
|
|
259
|
+
output_names.append(zipname)
|
|
260
|
+
return output_names
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
def run_dist_steps(meson_command: T.List[str], unpacked_src_dir: str, builddir: str, installdir: str, ninja_args: T.List[str]) -> int:
|
|
264
|
+
if subprocess.call(meson_command + ['--backend=ninja', unpacked_src_dir, builddir]) != 0:
|
|
265
|
+
print('Running Meson on distribution package failed')
|
|
266
|
+
return 1
|
|
267
|
+
if subprocess.call(ninja_args, cwd=builddir) != 0:
|
|
268
|
+
print('Compiling the distribution package failed')
|
|
269
|
+
return 1
|
|
270
|
+
if subprocess.call(ninja_args + ['test'], cwd=builddir) != 0:
|
|
271
|
+
print('Running unit tests on the distribution package failed')
|
|
272
|
+
return 1
|
|
273
|
+
myenv = os.environ.copy()
|
|
274
|
+
myenv['DESTDIR'] = installdir
|
|
275
|
+
if subprocess.call(ninja_args + ['install'], cwd=builddir, env=myenv) != 0:
|
|
276
|
+
print('Installing the distribution package failed')
|
|
277
|
+
return 1
|
|
278
|
+
return 0
|
|
279
|
+
|
|
280
|
+
def check_dist(packagename: str, meson_command: ImmutableListProtocol[str], extra_meson_args: T.List[str], bld_root: str, privdir: str) -> int:
|
|
281
|
+
print(f'Testing distribution package {packagename}')
|
|
282
|
+
unpackdir = os.path.join(privdir, 'dist-unpack')
|
|
283
|
+
builddir = os.path.join(privdir, 'dist-build')
|
|
284
|
+
installdir = os.path.join(privdir, 'dist-install')
|
|
285
|
+
for p in (unpackdir, builddir, installdir):
|
|
286
|
+
if os.path.exists(p):
|
|
287
|
+
windows_proof_rmtree(p)
|
|
288
|
+
os.mkdir(p)
|
|
289
|
+
ninja_args = detect_ninja()
|
|
290
|
+
shutil.unpack_archive(packagename, unpackdir)
|
|
291
|
+
unpacked_files = glob(os.path.join(unpackdir, '*'))
|
|
292
|
+
assert len(unpacked_files) == 1
|
|
293
|
+
unpacked_src_dir = unpacked_files[0]
|
|
294
|
+
meson_command += ['setup']
|
|
295
|
+
meson_command += create_cmdline_args(bld_root)
|
|
296
|
+
meson_command += extra_meson_args
|
|
297
|
+
|
|
298
|
+
ret = run_dist_steps(meson_command, unpacked_src_dir, builddir, installdir, ninja_args)
|
|
299
|
+
if ret > 0:
|
|
300
|
+
print(f'Dist check build directory was {builddir}')
|
|
301
|
+
else:
|
|
302
|
+
windows_proof_rmtree(unpackdir)
|
|
303
|
+
windows_proof_rmtree(builddir)
|
|
304
|
+
windows_proof_rmtree(installdir)
|
|
305
|
+
print(f'Distribution package {packagename} tested')
|
|
306
|
+
return ret
|
|
307
|
+
|
|
308
|
+
def create_cmdline_args(bld_root: str) -> T.List[str]:
|
|
309
|
+
parser = argparse.ArgumentParser()
|
|
310
|
+
msetup_argparse(parser)
|
|
311
|
+
args = T.cast('coredata.SharedCMDOptions', parser.parse_args([]))
|
|
312
|
+
coredata.parse_cmd_line_options(args)
|
|
313
|
+
coredata.read_cmd_line_file(bld_root, args)
|
|
314
|
+
args.cmd_line_options.pop(OptionKey('backend'), '')
|
|
315
|
+
return shlex.split(coredata.format_cmd_line_options(args))
|
|
316
|
+
|
|
317
|
+
def determine_archives_to_generate(options: argparse.Namespace) -> T.List[str]:
|
|
318
|
+
result = []
|
|
319
|
+
for i in options.formats.split(','):
|
|
320
|
+
if i not in archive_choices:
|
|
321
|
+
sys.exit(f'Value "{i}" not one of permitted values {archive_choices}.')
|
|
322
|
+
result.append(i)
|
|
323
|
+
if len(i) == 0:
|
|
324
|
+
sys.exit('No archive types specified.')
|
|
325
|
+
return result
|
|
326
|
+
|
|
327
|
+
def run(options: argparse.Namespace) -> int:
|
|
328
|
+
buildfile = Path(options.wd) / 'meson-private' / 'build.dat'
|
|
329
|
+
if not buildfile.is_file():
|
|
330
|
+
raise MesonException(f'Directory {options.wd!r} does not seem to be a Meson build directory.')
|
|
331
|
+
b = build.load(options.wd)
|
|
332
|
+
need_vsenv = T.cast('bool', b.environment.coredata.get_option(OptionKey('vsenv')))
|
|
333
|
+
setup_vsenv(need_vsenv)
|
|
334
|
+
src_root = b.environment.source_dir
|
|
335
|
+
bld_root = b.environment.build_dir
|
|
336
|
+
priv_dir = os.path.join(bld_root, 'meson-private')
|
|
337
|
+
|
|
338
|
+
dist_name = b.project_name + '-' + b.project_version
|
|
339
|
+
|
|
340
|
+
archives = determine_archives_to_generate(options)
|
|
341
|
+
|
|
342
|
+
subprojects = {}
|
|
343
|
+
extra_meson_args = []
|
|
344
|
+
if options.include_subprojects:
|
|
345
|
+
subproject_dir = os.path.join(src_root, b.subproject_dir)
|
|
346
|
+
for sub in b.subprojects.host:
|
|
347
|
+
directory = wrap.get_directory(subproject_dir, sub)
|
|
348
|
+
subprojects[sub] = os.path.join(b.subproject_dir, directory)
|
|
349
|
+
extra_meson_args.append('-Dwrap_mode=nodownload')
|
|
350
|
+
|
|
351
|
+
cls: T.Type[Dist]
|
|
352
|
+
if is_git(src_root):
|
|
353
|
+
cls = GitDist
|
|
354
|
+
elif is_hg(src_root):
|
|
355
|
+
if subprojects:
|
|
356
|
+
print('--include-subprojects option currently not supported with Mercurial')
|
|
357
|
+
return 1
|
|
358
|
+
cls = HgDist
|
|
359
|
+
else:
|
|
360
|
+
print('Dist currently only works with Git or Mercurial repos')
|
|
361
|
+
return 1
|
|
362
|
+
|
|
363
|
+
project = cls(dist_name, src_root, bld_root, b.dist_scripts, subprojects, options)
|
|
364
|
+
names = project.create_dist(archives)
|
|
365
|
+
|
|
366
|
+
if names is None:
|
|
367
|
+
return 1
|
|
368
|
+
rc = 0
|
|
369
|
+
if not options.no_tests:
|
|
370
|
+
# Check only one.
|
|
371
|
+
rc = check_dist(names[0], get_meson_command(), extra_meson_args, bld_root, priv_dir)
|
|
372
|
+
if rc == 0:
|
|
373
|
+
for name in names:
|
|
374
|
+
create_hash(name)
|
|
375
|
+
print('Created', name)
|
|
376
|
+
return rc
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Copyright 2021 The Meson development team
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
import importlib.resources
|
|
8
|
+
from pathlib import PurePosixPath, Path
|
|
9
|
+
import typing as T
|
|
10
|
+
|
|
11
|
+
if T.TYPE_CHECKING:
|
|
12
|
+
from .environment import Environment
|
|
13
|
+
|
|
14
|
+
class DataFile:
|
|
15
|
+
def __init__(self, path: str) -> None:
|
|
16
|
+
self.path = PurePosixPath(path)
|
|
17
|
+
|
|
18
|
+
def write_once(self, path: Path) -> None:
|
|
19
|
+
if not path.exists():
|
|
20
|
+
data = importlib.resources.read_text( # [ignore encoding] it's on the next lines, Mr. Lint
|
|
21
|
+
('mesonbuild' / self.path.parent).as_posix().replace('/', '.'),
|
|
22
|
+
self.path.name,
|
|
23
|
+
encoding='utf-8')
|
|
24
|
+
path.write_text(data, encoding='utf-8')
|
|
25
|
+
|
|
26
|
+
def write_to_private(self, env: 'Environment') -> Path:
|
|
27
|
+
try:
|
|
28
|
+
resource = importlib.resources.files('mesonbuild') / self.path
|
|
29
|
+
if isinstance(resource, Path):
|
|
30
|
+
return resource
|
|
31
|
+
except AttributeError:
|
|
32
|
+
# fall through to python 3.7 compatible code
|
|
33
|
+
pass
|
|
34
|
+
|
|
35
|
+
out_file = Path(env.scratch_dir) / 'data' / self.path.name
|
|
36
|
+
out_file.parent.mkdir(exist_ok=True)
|
|
37
|
+
self.write_once(out_file)
|
|
38
|
+
return out_file
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# SPDX-license-identifier: Apache-2.0
|
|
2
|
+
# Copyright 2012-2021 The Meson development team
|
|
3
|
+
# Copyright © 2021-2023 Intel Corporation
|
|
4
|
+
|
|
5
|
+
# pylint: skip-file
|
|
6
|
+
|
|
7
|
+
"""Helper functions and classes."""
|
|
8
|
+
|
|
9
|
+
import os
|
|
10
|
+
|
|
11
|
+
from .utils.core import *
|
|
12
|
+
from .utils.vsenv import *
|
|
13
|
+
|
|
14
|
+
from .utils.universal import *
|
|
15
|
+
|
|
16
|
+
# Here we import either the posix implementations, the windows implementations,
|
|
17
|
+
# or a generic no-op implementation
|
|
18
|
+
if os.name == 'posix':
|
|
19
|
+
from .utils.posix import *
|
|
20
|
+
elif os.name == 'nt':
|
|
21
|
+
from .utils.win32 import *
|
|
22
|
+
else:
|
|
23
|
+
from .utils.platform import *
|