frida 16.2.1 → 16.2.2
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,227 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Copyright © 2022-2023 Intel Corporation
|
|
3
|
+
|
|
4
|
+
"""Type definitions for cargo manifest files."""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
import typing as T
|
|
8
|
+
|
|
9
|
+
from typing_extensions import Literal, TypedDict, Required
|
|
10
|
+
|
|
11
|
+
EDITION = Literal['2015', '2018', '2021']
|
|
12
|
+
CRATE_TYPE = Literal['bin', 'lib', 'dylib', 'staticlib', 'cdylib', 'rlib', 'proc-macro']
|
|
13
|
+
|
|
14
|
+
Package = TypedDict(
|
|
15
|
+
'Package',
|
|
16
|
+
{
|
|
17
|
+
'name': Required[str],
|
|
18
|
+
'version': Required[str],
|
|
19
|
+
'authors': T.List[str],
|
|
20
|
+
'edition': EDITION,
|
|
21
|
+
'rust-version': str,
|
|
22
|
+
'description': str,
|
|
23
|
+
'readme': str,
|
|
24
|
+
'license': str,
|
|
25
|
+
'license-file': str,
|
|
26
|
+
'keywords': T.List[str],
|
|
27
|
+
'categories': T.List[str],
|
|
28
|
+
'workspace': str,
|
|
29
|
+
'build': str,
|
|
30
|
+
'links': str,
|
|
31
|
+
'include': T.List[str],
|
|
32
|
+
'exclude': T.List[str],
|
|
33
|
+
'publish': bool,
|
|
34
|
+
'metadata': T.Dict[str, T.Dict[str, str]],
|
|
35
|
+
'default-run': str,
|
|
36
|
+
'autobins': bool,
|
|
37
|
+
'autoexamples': bool,
|
|
38
|
+
'autotests': bool,
|
|
39
|
+
'autobenches': bool,
|
|
40
|
+
},
|
|
41
|
+
total=False,
|
|
42
|
+
)
|
|
43
|
+
"""A description of the Package Dictionary."""
|
|
44
|
+
|
|
45
|
+
class FixedPackage(TypedDict, total=False):
|
|
46
|
+
|
|
47
|
+
"""A description of the Package Dictionary, fixed up."""
|
|
48
|
+
|
|
49
|
+
name: Required[str]
|
|
50
|
+
version: Required[str]
|
|
51
|
+
authors: T.List[str]
|
|
52
|
+
edition: EDITION
|
|
53
|
+
rust_version: str
|
|
54
|
+
description: str
|
|
55
|
+
readme: str
|
|
56
|
+
license: str
|
|
57
|
+
license_file: str
|
|
58
|
+
keywords: T.List[str]
|
|
59
|
+
categories: T.List[str]
|
|
60
|
+
workspace: str
|
|
61
|
+
build: str
|
|
62
|
+
links: str
|
|
63
|
+
include: T.List[str]
|
|
64
|
+
exclude: T.List[str]
|
|
65
|
+
publish: bool
|
|
66
|
+
metadata: T.Dict[str, T.Dict[str, str]]
|
|
67
|
+
default_run: str
|
|
68
|
+
autobins: bool
|
|
69
|
+
autoexamples: bool
|
|
70
|
+
autotests: bool
|
|
71
|
+
autobenches: bool
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class Badge(TypedDict):
|
|
75
|
+
|
|
76
|
+
"""An entry in the badge section."""
|
|
77
|
+
|
|
78
|
+
status: Literal['actively-developed', 'passively-developed', 'as-is', 'experimental', 'deprecated', 'none']
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
Dependency = TypedDict(
|
|
82
|
+
'Dependency',
|
|
83
|
+
{
|
|
84
|
+
'version': str,
|
|
85
|
+
'registry': str,
|
|
86
|
+
'git': str,
|
|
87
|
+
'branch': str,
|
|
88
|
+
'rev': str,
|
|
89
|
+
'path': str,
|
|
90
|
+
'optional': bool,
|
|
91
|
+
'package': str,
|
|
92
|
+
'default-features': bool,
|
|
93
|
+
'features': T.List[str],
|
|
94
|
+
},
|
|
95
|
+
total=False,
|
|
96
|
+
)
|
|
97
|
+
"""An entry in the *dependencies sections."""
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class FixedDependency(TypedDict, total=False):
|
|
101
|
+
|
|
102
|
+
"""An entry in the *dependencies sections, fixed up."""
|
|
103
|
+
|
|
104
|
+
version: T.List[str]
|
|
105
|
+
registry: str
|
|
106
|
+
git: str
|
|
107
|
+
branch: str
|
|
108
|
+
rev: str
|
|
109
|
+
path: str
|
|
110
|
+
optional: bool
|
|
111
|
+
package: str
|
|
112
|
+
default_features: bool
|
|
113
|
+
features: T.List[str]
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
DependencyV = T.Union[Dependency, str]
|
|
117
|
+
"""A Dependency entry, either a string or a Dependency Dict."""
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
_BaseBuildTarget = TypedDict(
|
|
121
|
+
'_BaseBuildTarget',
|
|
122
|
+
{
|
|
123
|
+
'path': str,
|
|
124
|
+
'test': bool,
|
|
125
|
+
'doctest': bool,
|
|
126
|
+
'bench': bool,
|
|
127
|
+
'doc': bool,
|
|
128
|
+
'plugin': bool,
|
|
129
|
+
'proc-macro': bool,
|
|
130
|
+
'harness': bool,
|
|
131
|
+
'edition': EDITION,
|
|
132
|
+
'crate-type': T.List[CRATE_TYPE],
|
|
133
|
+
'required-features': T.List[str],
|
|
134
|
+
},
|
|
135
|
+
total=False,
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
class BuildTarget(_BaseBuildTarget, total=False):
|
|
140
|
+
|
|
141
|
+
name: Required[str]
|
|
142
|
+
|
|
143
|
+
class LibTarget(_BaseBuildTarget, total=False):
|
|
144
|
+
|
|
145
|
+
name: str
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
class _BaseFixedBuildTarget(TypedDict, total=False):
|
|
149
|
+
path: str
|
|
150
|
+
test: bool
|
|
151
|
+
doctest: bool
|
|
152
|
+
bench: bool
|
|
153
|
+
doc: bool
|
|
154
|
+
plugin: bool
|
|
155
|
+
harness: bool
|
|
156
|
+
edition: EDITION
|
|
157
|
+
crate_type: T.List[CRATE_TYPE]
|
|
158
|
+
required_features: T.List[str]
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
class FixedBuildTarget(_BaseFixedBuildTarget, total=False):
|
|
162
|
+
|
|
163
|
+
name: str
|
|
164
|
+
|
|
165
|
+
class FixedLibTarget(_BaseFixedBuildTarget, total=False):
|
|
166
|
+
|
|
167
|
+
name: Required[str]
|
|
168
|
+
proc_macro: bool
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
class Target(TypedDict):
|
|
172
|
+
|
|
173
|
+
"""Target entry in the Manifest File."""
|
|
174
|
+
|
|
175
|
+
dependencies: T.Dict[str, DependencyV]
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
class Workspace(TypedDict):
|
|
179
|
+
|
|
180
|
+
"""The representation of a workspace.
|
|
181
|
+
|
|
182
|
+
In a vritual manifest the :attribute:`members` is always present, but in a
|
|
183
|
+
project manifest, an empty workspace may be provided, in which case the
|
|
184
|
+
workspace is implicitly filled in by values from the path based dependencies.
|
|
185
|
+
|
|
186
|
+
the :attribute:`exclude` is always optional
|
|
187
|
+
"""
|
|
188
|
+
|
|
189
|
+
members: T.List[str]
|
|
190
|
+
exclude: T.List[str]
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
Manifest = TypedDict(
|
|
194
|
+
'Manifest',
|
|
195
|
+
{
|
|
196
|
+
'package': Package,
|
|
197
|
+
'badges': T.Dict[str, Badge],
|
|
198
|
+
'dependencies': T.Dict[str, DependencyV],
|
|
199
|
+
'dev-dependencies': T.Dict[str, DependencyV],
|
|
200
|
+
'build-dependencies': T.Dict[str, DependencyV],
|
|
201
|
+
'lib': LibTarget,
|
|
202
|
+
'bin': T.List[BuildTarget],
|
|
203
|
+
'test': T.List[BuildTarget],
|
|
204
|
+
'bench': T.List[BuildTarget],
|
|
205
|
+
'example': T.List[BuildTarget],
|
|
206
|
+
'features': T.Dict[str, T.List[str]],
|
|
207
|
+
'target': T.Dict[str, Target],
|
|
208
|
+
'workspace': Workspace,
|
|
209
|
+
|
|
210
|
+
# TODO: patch?
|
|
211
|
+
# TODO: replace?
|
|
212
|
+
},
|
|
213
|
+
total=False,
|
|
214
|
+
)
|
|
215
|
+
"""The Cargo Manifest format."""
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
class VirtualManifest(TypedDict):
|
|
219
|
+
|
|
220
|
+
"""The Representation of a virtual manifest.
|
|
221
|
+
|
|
222
|
+
Cargo allows a root manifest that contains only a workspace, this is called
|
|
223
|
+
a virtual manifest. This doesn't really map 1:1 with any meson concept,
|
|
224
|
+
except perhaps the proposed "meta project".
|
|
225
|
+
"""
|
|
226
|
+
|
|
227
|
+
workspace: Workspace
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Copyright © 2022-2023 Intel Corporation
|
|
3
|
+
|
|
4
|
+
"""Convert Cargo versions into Meson compatible ones."""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
import typing as T
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def convert(cargo_ver: str) -> T.List[str]:
|
|
11
|
+
"""Convert a Cargo compatible version into a Meson compatible one.
|
|
12
|
+
|
|
13
|
+
:param cargo_ver: The version, as Cargo specifies
|
|
14
|
+
:return: A list of version constraints, as Meson understands them
|
|
15
|
+
"""
|
|
16
|
+
# Cleanup, just for safety
|
|
17
|
+
cargo_ver = cargo_ver.strip()
|
|
18
|
+
cargo_vers = [c.strip() for c in cargo_ver.split(',')]
|
|
19
|
+
|
|
20
|
+
out: T.List[str] = []
|
|
21
|
+
|
|
22
|
+
for ver in cargo_vers:
|
|
23
|
+
# This covers >= and =< as well
|
|
24
|
+
# https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#comparison-requirements
|
|
25
|
+
if ver.startswith(('>', '<', '=')):
|
|
26
|
+
out.append(ver)
|
|
27
|
+
|
|
28
|
+
elif ver.startswith('~'):
|
|
29
|
+
# Rust has these tilde requirements, which means that it is >= to
|
|
30
|
+
# the version, but less than the next version
|
|
31
|
+
# https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#tilde-requirements
|
|
32
|
+
# we convert those into a pair of constraints
|
|
33
|
+
v = ver[1:].split('.')
|
|
34
|
+
out.append(f'>= {".".join(v)}')
|
|
35
|
+
if len(v) == 3:
|
|
36
|
+
out.append(f'< {v[0]}.{int(v[1]) + 1}.0')
|
|
37
|
+
elif len(v) == 2:
|
|
38
|
+
out.append(f'< {v[0]}.{int(v[1]) + 1}')
|
|
39
|
+
else:
|
|
40
|
+
out.append(f'< {int(v[0]) + 1}')
|
|
41
|
+
|
|
42
|
+
elif '*' in ver:
|
|
43
|
+
# Rust has astrisk requirements,, which are like 1.* == ~1
|
|
44
|
+
# https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#wildcard-requirements
|
|
45
|
+
v = ver.split('.')[:-1]
|
|
46
|
+
if v:
|
|
47
|
+
out.append(f'>= {".".join(v)}')
|
|
48
|
+
if len(v) == 2:
|
|
49
|
+
out.append(f'< {v[0]}.{int(v[1]) + 1}')
|
|
50
|
+
elif len(v) == 1:
|
|
51
|
+
out.append(f'< {int(v[0]) + 1}')
|
|
52
|
+
|
|
53
|
+
else:
|
|
54
|
+
# a Caret version is equivalent to the default strategy
|
|
55
|
+
# https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#caret-requirements
|
|
56
|
+
if ver.startswith('^'):
|
|
57
|
+
ver = ver[1:]
|
|
58
|
+
|
|
59
|
+
# If there is no qualifier, then it means this or the next non-zero version
|
|
60
|
+
# That means that if this is `1.1.0``, then we need `>= 1.1.0` && `< 2.0.0`
|
|
61
|
+
# Or if we have `0.1.0`, then we need `>= 0.1.0` && `< 0.2.0`
|
|
62
|
+
# Or if we have `0.1`, then we need `>= 0.1.0` && `< 0.2.0`
|
|
63
|
+
# Or if we have `0.0.0`, then we need `< 1.0.0`
|
|
64
|
+
# Or if we have `0.0`, then we need `< 1.0.0`
|
|
65
|
+
# Or if we have `0`, then we need `< 1.0.0`
|
|
66
|
+
# Or if we have `0.0.3`, then we need `>= 0.0.3` && `< 0.0.4`
|
|
67
|
+
# https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#specifying-dependencies-from-cratesio
|
|
68
|
+
#
|
|
69
|
+
# this works much like the ~ versions, but in reverse. Tilde starts
|
|
70
|
+
# at the patch version and works up, to the major version, while
|
|
71
|
+
# bare numbers start at the major version and work down to the patch
|
|
72
|
+
# version
|
|
73
|
+
vers = ver.split('.')
|
|
74
|
+
min_: T.List[str] = []
|
|
75
|
+
max_: T.List[str] = []
|
|
76
|
+
bumped = False
|
|
77
|
+
for v_ in vers:
|
|
78
|
+
if v_ != '0' and not bumped:
|
|
79
|
+
min_.append(v_)
|
|
80
|
+
max_.append(str(int(v_) + 1))
|
|
81
|
+
bumped = True
|
|
82
|
+
else:
|
|
83
|
+
min_.append(v_)
|
|
84
|
+
if not bumped:
|
|
85
|
+
max_.append('0')
|
|
86
|
+
|
|
87
|
+
# If there is no minimum, don't emit one
|
|
88
|
+
if set(min_) != {'0'}:
|
|
89
|
+
out.append('>= {}'.format('.'.join(min_)))
|
|
90
|
+
if set(max_) != {'0'}:
|
|
91
|
+
out.append('< {}'.format('.'.join(max_)))
|
|
92
|
+
else:
|
|
93
|
+
out.append('< 1')
|
|
94
|
+
|
|
95
|
+
return out
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Copyright 2019 The Meson development team
|
|
3
|
+
|
|
4
|
+
# This class contains the basic functionality needed to run any interpreter
|
|
5
|
+
# or an interpreter-based tool.
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
'CMakeExecutor',
|
|
9
|
+
'CMakeExecScope',
|
|
10
|
+
'CMakeException',
|
|
11
|
+
'CMakeInterpreter',
|
|
12
|
+
'CMakeTarget',
|
|
13
|
+
'CMakeToolchain',
|
|
14
|
+
'CMakeTraceParser',
|
|
15
|
+
'TargetOptions',
|
|
16
|
+
'language_map',
|
|
17
|
+
'cmake_defines_to_args',
|
|
18
|
+
'check_cmake_args',
|
|
19
|
+
'cmake_is_debug',
|
|
20
|
+
'resolve_cmake_trace_targets',
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
from .common import CMakeException, TargetOptions, cmake_defines_to_args, language_map, check_cmake_args, cmake_is_debug
|
|
24
|
+
from .executor import CMakeExecutor
|
|
25
|
+
from .interpreter import CMakeInterpreter
|
|
26
|
+
from .toolchain import CMakeToolchain, CMakeExecScope
|
|
27
|
+
from .traceparser import CMakeTarget, CMakeTraceParser
|
|
28
|
+
from .tracetargets import resolve_cmake_trace_targets
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Copyright 2019 The Meson development team
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from ..mesonlib import MesonException, OptionKey
|
|
7
|
+
from .. import mlog
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
import typing as T
|
|
10
|
+
|
|
11
|
+
if T.TYPE_CHECKING:
|
|
12
|
+
from ..environment import Environment
|
|
13
|
+
from ..interpreterbase import TYPE_var
|
|
14
|
+
|
|
15
|
+
language_map = {
|
|
16
|
+
'c': 'C',
|
|
17
|
+
'cpp': 'CXX',
|
|
18
|
+
'cuda': 'CUDA',
|
|
19
|
+
'objc': 'OBJC',
|
|
20
|
+
'objcpp': 'OBJCXX',
|
|
21
|
+
'cs': 'CSharp',
|
|
22
|
+
'java': 'Java',
|
|
23
|
+
'fortran': 'Fortran',
|
|
24
|
+
'swift': 'Swift',
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
backend_generator_map = {
|
|
28
|
+
'ninja': 'Ninja',
|
|
29
|
+
'xcode': 'Xcode',
|
|
30
|
+
'vs2010': 'Visual Studio 10 2010',
|
|
31
|
+
'vs2012': 'Visual Studio 11 2012',
|
|
32
|
+
'vs2013': 'Visual Studio 12 2013',
|
|
33
|
+
'vs2015': 'Visual Studio 14 2015',
|
|
34
|
+
'vs2017': 'Visual Studio 15 2017',
|
|
35
|
+
'vs2019': 'Visual Studio 16 2019',
|
|
36
|
+
'vs2022': 'Visual Studio 17 2022',
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
blacklist_cmake_defs = [
|
|
40
|
+
'CMAKE_TOOLCHAIN_FILE',
|
|
41
|
+
'CMAKE_PROJECT_INCLUDE',
|
|
42
|
+
'MESON_PRELOAD_FILE',
|
|
43
|
+
'MESON_PS_CMAKE_CURRENT_BINARY_DIR',
|
|
44
|
+
'MESON_PS_CMAKE_CURRENT_SOURCE_DIR',
|
|
45
|
+
'MESON_PS_DELAYED_CALLS',
|
|
46
|
+
'MESON_PS_LOADED',
|
|
47
|
+
'MESON_FIND_ROOT_PATH',
|
|
48
|
+
'MESON_CMAKE_SYSROOT',
|
|
49
|
+
'MESON_PATHS_LIST',
|
|
50
|
+
'MESON_CMAKE_ROOT',
|
|
51
|
+
]
|
|
52
|
+
|
|
53
|
+
def cmake_is_debug(env: 'Environment') -> bool:
|
|
54
|
+
if OptionKey('b_vscrt') in env.coredata.options:
|
|
55
|
+
is_debug = env.coredata.get_option(OptionKey('buildtype')) == 'debug'
|
|
56
|
+
if env.coredata.options[OptionKey('b_vscrt')].value in {'mdd', 'mtd'}:
|
|
57
|
+
is_debug = True
|
|
58
|
+
return is_debug
|
|
59
|
+
else:
|
|
60
|
+
# Don't directly assign to is_debug to make mypy happy
|
|
61
|
+
debug_opt = env.coredata.get_option(OptionKey('debug'))
|
|
62
|
+
assert isinstance(debug_opt, bool)
|
|
63
|
+
return debug_opt
|
|
64
|
+
|
|
65
|
+
class CMakeException(MesonException):
|
|
66
|
+
pass
|
|
67
|
+
|
|
68
|
+
class CMakeBuildFile:
|
|
69
|
+
def __init__(self, file: Path, is_cmake: bool, is_temp: bool) -> None:
|
|
70
|
+
self.file = file
|
|
71
|
+
self.is_cmake = is_cmake
|
|
72
|
+
self.is_temp = is_temp
|
|
73
|
+
|
|
74
|
+
def __repr__(self) -> str:
|
|
75
|
+
return f'<{self.__class__.__name__}: {self.file}; cmake={self.is_cmake}; temp={self.is_temp}>'
|
|
76
|
+
|
|
77
|
+
def _flags_to_list(raw: str) -> T.List[str]:
|
|
78
|
+
# Convert a raw commandline string into a list of strings
|
|
79
|
+
res = []
|
|
80
|
+
curr = ''
|
|
81
|
+
escape = False
|
|
82
|
+
in_string = False
|
|
83
|
+
for i in raw:
|
|
84
|
+
if escape:
|
|
85
|
+
# If the current char is not a quote, the '\' is probably important
|
|
86
|
+
if i not in ['"', "'"]:
|
|
87
|
+
curr += '\\'
|
|
88
|
+
curr += i
|
|
89
|
+
escape = False
|
|
90
|
+
elif i == '\\':
|
|
91
|
+
escape = True
|
|
92
|
+
elif i in {'"', "'"}:
|
|
93
|
+
in_string = not in_string
|
|
94
|
+
elif i in {' ', '\n'}:
|
|
95
|
+
if in_string:
|
|
96
|
+
curr += i
|
|
97
|
+
else:
|
|
98
|
+
res += [curr]
|
|
99
|
+
curr = ''
|
|
100
|
+
else:
|
|
101
|
+
curr += i
|
|
102
|
+
res += [curr]
|
|
103
|
+
res = [r for r in res if len(r) > 0]
|
|
104
|
+
return res
|
|
105
|
+
|
|
106
|
+
def cmake_get_generator_args(env: 'Environment') -> T.List[str]:
|
|
107
|
+
backend_name = env.coredata.get_option(OptionKey('backend'))
|
|
108
|
+
assert isinstance(backend_name, str)
|
|
109
|
+
assert backend_name in backend_generator_map
|
|
110
|
+
return ['-G', backend_generator_map[backend_name]]
|
|
111
|
+
|
|
112
|
+
def cmake_defines_to_args(raw: T.List[T.Dict[str, TYPE_var]], permissive: bool = False) -> T.List[str]:
|
|
113
|
+
res: T.List[str] = []
|
|
114
|
+
|
|
115
|
+
for i in raw:
|
|
116
|
+
for key, val in i.items():
|
|
117
|
+
if key in blacklist_cmake_defs:
|
|
118
|
+
mlog.warning('Setting', mlog.bold(key), 'is not supported. See the meson docs for cross compilation support:')
|
|
119
|
+
mlog.warning(' - URL: https://mesonbuild.com/CMake-module.html#cross-compilation')
|
|
120
|
+
mlog.warning(' --> Ignoring this option')
|
|
121
|
+
continue
|
|
122
|
+
if isinstance(val, (str, int, float)):
|
|
123
|
+
res += [f'-D{key}={val}']
|
|
124
|
+
elif isinstance(val, bool):
|
|
125
|
+
val_str = 'ON' if val else 'OFF'
|
|
126
|
+
res += [f'-D{key}={val_str}']
|
|
127
|
+
else:
|
|
128
|
+
raise MesonException('Type "{}" of "{}" is not supported as for a CMake define value'.format(type(val).__name__, key))
|
|
129
|
+
|
|
130
|
+
return res
|
|
131
|
+
|
|
132
|
+
# TODO: this function will become obsolete once the `cmake_args` kwarg is dropped
|
|
133
|
+
def check_cmake_args(args: T.List[str]) -> T.List[str]:
|
|
134
|
+
res: T.List[str] = []
|
|
135
|
+
dis = ['-D' + x for x in blacklist_cmake_defs]
|
|
136
|
+
assert dis # Ensure that dis is not empty.
|
|
137
|
+
for i in args:
|
|
138
|
+
if any(i.startswith(x) for x in dis):
|
|
139
|
+
mlog.warning('Setting', mlog.bold(i), 'is not supported. See the meson docs for cross compilation support:')
|
|
140
|
+
mlog.warning(' - URL: https://mesonbuild.com/CMake-module.html#cross-compilation')
|
|
141
|
+
mlog.warning(' --> Ignoring this option')
|
|
142
|
+
continue
|
|
143
|
+
res += [i]
|
|
144
|
+
return res
|
|
145
|
+
|
|
146
|
+
class CMakeInclude:
|
|
147
|
+
def __init__(self, path: Path, isSystem: bool = False):
|
|
148
|
+
self.path = path
|
|
149
|
+
self.isSystem = isSystem
|
|
150
|
+
|
|
151
|
+
def __repr__(self) -> str:
|
|
152
|
+
return f'<CMakeInclude: {self.path} -- isSystem = {self.isSystem}>'
|
|
153
|
+
|
|
154
|
+
class CMakeFileGroup:
|
|
155
|
+
def __init__(self, data: T.Dict[str, T.Any]) -> None:
|
|
156
|
+
self.defines: str = data.get('defines', '')
|
|
157
|
+
self.flags = _flags_to_list(data.get('compileFlags', ''))
|
|
158
|
+
self.is_generated: bool = data.get('isGenerated', False)
|
|
159
|
+
self.language: str = data.get('language', 'C')
|
|
160
|
+
self.sources = [Path(x) for x in data.get('sources', [])]
|
|
161
|
+
|
|
162
|
+
# Fix the include directories
|
|
163
|
+
self.includes: T.List[CMakeInclude] = []
|
|
164
|
+
for i in data.get('includePath', []):
|
|
165
|
+
if isinstance(i, dict) and 'path' in i:
|
|
166
|
+
isSystem = i.get('isSystem', False)
|
|
167
|
+
assert isinstance(isSystem, bool)
|
|
168
|
+
assert isinstance(i['path'], str)
|
|
169
|
+
self.includes += [CMakeInclude(Path(i['path']), isSystem)]
|
|
170
|
+
elif isinstance(i, str):
|
|
171
|
+
self.includes += [CMakeInclude(Path(i))]
|
|
172
|
+
|
|
173
|
+
def log(self) -> None:
|
|
174
|
+
mlog.log('flags =', mlog.bold(', '.join(self.flags)))
|
|
175
|
+
mlog.log('defines =', mlog.bold(', '.join(self.defines)))
|
|
176
|
+
mlog.log('includes =', mlog.bold(', '.join([str(x) for x in self.includes])))
|
|
177
|
+
mlog.log('is_generated =', mlog.bold('true' if self.is_generated else 'false'))
|
|
178
|
+
mlog.log('language =', mlog.bold(self.language))
|
|
179
|
+
mlog.log('sources:')
|
|
180
|
+
for i in self.sources:
|
|
181
|
+
with mlog.nested():
|
|
182
|
+
mlog.log(i.as_posix())
|
|
183
|
+
|
|
184
|
+
class CMakeTarget:
|
|
185
|
+
def __init__(self, data: T.Dict[str, T.Any]) -> None:
|
|
186
|
+
self.artifacts = [Path(x) for x in data.get('artifacts', [])]
|
|
187
|
+
self.src_dir = Path(data.get('sourceDirectory', ''))
|
|
188
|
+
self.build_dir = Path(data.get('buildDirectory', ''))
|
|
189
|
+
self.name: str = data.get('name', '')
|
|
190
|
+
self.full_name: str = data.get('fullName', '')
|
|
191
|
+
self.install: bool = data.get('hasInstallRule', False)
|
|
192
|
+
self.install_paths = [Path(x) for x in set(data.get('installPaths', []))]
|
|
193
|
+
self.link_lang: str = data.get('linkerLanguage', '')
|
|
194
|
+
self.link_libraries = _flags_to_list(data.get('linkLibraries', ''))
|
|
195
|
+
self.link_flags = _flags_to_list(data.get('linkFlags', ''))
|
|
196
|
+
self.link_lang_flags = _flags_to_list(data.get('linkLanguageFlags', ''))
|
|
197
|
+
# self.link_path = Path(data.get('linkPath', ''))
|
|
198
|
+
self.type: str = data.get('type', 'EXECUTABLE')
|
|
199
|
+
# self.is_generator_provided: bool = data.get('isGeneratorProvided', False)
|
|
200
|
+
self.files: T.List[CMakeFileGroup] = []
|
|
201
|
+
|
|
202
|
+
for i in data.get('fileGroups', []):
|
|
203
|
+
self.files += [CMakeFileGroup(i)]
|
|
204
|
+
|
|
205
|
+
def log(self) -> None:
|
|
206
|
+
mlog.log('artifacts =', mlog.bold(', '.join([x.as_posix() for x in self.artifacts])))
|
|
207
|
+
mlog.log('src_dir =', mlog.bold(self.src_dir.as_posix()))
|
|
208
|
+
mlog.log('build_dir =', mlog.bold(self.build_dir.as_posix()))
|
|
209
|
+
mlog.log('name =', mlog.bold(self.name))
|
|
210
|
+
mlog.log('full_name =', mlog.bold(self.full_name))
|
|
211
|
+
mlog.log('install =', mlog.bold('true' if self.install else 'false'))
|
|
212
|
+
mlog.log('install_paths =', mlog.bold(', '.join([x.as_posix() for x in self.install_paths])))
|
|
213
|
+
mlog.log('link_lang =', mlog.bold(self.link_lang))
|
|
214
|
+
mlog.log('link_libraries =', mlog.bold(', '.join(self.link_libraries)))
|
|
215
|
+
mlog.log('link_flags =', mlog.bold(', '.join(self.link_flags)))
|
|
216
|
+
mlog.log('link_lang_flags =', mlog.bold(', '.join(self.link_lang_flags)))
|
|
217
|
+
# mlog.log('link_path =', mlog.bold(self.link_path))
|
|
218
|
+
mlog.log('type =', mlog.bold(self.type))
|
|
219
|
+
# mlog.log('is_generator_provided =', mlog.bold('true' if self.is_generator_provided else 'false'))
|
|
220
|
+
for idx, i in enumerate(self.files):
|
|
221
|
+
mlog.log(f'Files {idx}:')
|
|
222
|
+
with mlog.nested():
|
|
223
|
+
i.log()
|
|
224
|
+
|
|
225
|
+
class CMakeProject:
|
|
226
|
+
def __init__(self, data: T.Dict[str, T.Any]) -> None:
|
|
227
|
+
self.src_dir = Path(data.get('sourceDirectory', ''))
|
|
228
|
+
self.build_dir = Path(data.get('buildDirectory', ''))
|
|
229
|
+
self.name: str = data.get('name', '')
|
|
230
|
+
self.targets: T.List[CMakeTarget] = []
|
|
231
|
+
|
|
232
|
+
for i in data.get('targets', []):
|
|
233
|
+
self.targets += [CMakeTarget(i)]
|
|
234
|
+
|
|
235
|
+
def log(self) -> None:
|
|
236
|
+
mlog.log('src_dir =', mlog.bold(self.src_dir.as_posix()))
|
|
237
|
+
mlog.log('build_dir =', mlog.bold(self.build_dir.as_posix()))
|
|
238
|
+
mlog.log('name =', mlog.bold(self.name))
|
|
239
|
+
for idx, i in enumerate(self.targets):
|
|
240
|
+
mlog.log(f'Target {idx}:')
|
|
241
|
+
with mlog.nested():
|
|
242
|
+
i.log()
|
|
243
|
+
|
|
244
|
+
class CMakeConfiguration:
|
|
245
|
+
def __init__(self, data: T.Dict[str, T.Any]) -> None:
|
|
246
|
+
self.name: str = data.get('name', '')
|
|
247
|
+
self.projects: T.List[CMakeProject] = []
|
|
248
|
+
for i in data.get('projects', []):
|
|
249
|
+
self.projects += [CMakeProject(i)]
|
|
250
|
+
|
|
251
|
+
def log(self) -> None:
|
|
252
|
+
mlog.log('name =', mlog.bold(self.name))
|
|
253
|
+
for idx, i in enumerate(self.projects):
|
|
254
|
+
mlog.log(f'Project {idx}:')
|
|
255
|
+
with mlog.nested():
|
|
256
|
+
i.log()
|
|
257
|
+
|
|
258
|
+
class SingleTargetOptions:
|
|
259
|
+
def __init__(self) -> None:
|
|
260
|
+
self.opts: T.Dict[str, str] = {}
|
|
261
|
+
self.lang_args: T.Dict[str, T.List[str]] = {}
|
|
262
|
+
self.link_args: T.List[str] = []
|
|
263
|
+
self.install = 'preserve'
|
|
264
|
+
|
|
265
|
+
def set_opt(self, opt: str, val: str) -> None:
|
|
266
|
+
self.opts[opt] = val
|
|
267
|
+
|
|
268
|
+
def append_args(self, lang: str, args: T.List[str]) -> None:
|
|
269
|
+
if lang not in self.lang_args:
|
|
270
|
+
self.lang_args[lang] = []
|
|
271
|
+
self.lang_args[lang] += args
|
|
272
|
+
|
|
273
|
+
def append_link_args(self, args: T.List[str]) -> None:
|
|
274
|
+
self.link_args += args
|
|
275
|
+
|
|
276
|
+
def set_install(self, install: bool) -> None:
|
|
277
|
+
self.install = 'true' if install else 'false'
|
|
278
|
+
|
|
279
|
+
def get_override_options(self, initial: T.List[str]) -> T.List[str]:
|
|
280
|
+
res: T.List[str] = []
|
|
281
|
+
for i in initial:
|
|
282
|
+
opt = i[:i.find('=')]
|
|
283
|
+
if opt not in self.opts:
|
|
284
|
+
res += [i]
|
|
285
|
+
res += [f'{k}={v}' for k, v in self.opts.items()]
|
|
286
|
+
return res
|
|
287
|
+
|
|
288
|
+
def get_compile_args(self, lang: str, initial: T.List[str]) -> T.List[str]:
|
|
289
|
+
if lang in self.lang_args:
|
|
290
|
+
return initial + self.lang_args[lang]
|
|
291
|
+
return initial
|
|
292
|
+
|
|
293
|
+
def get_link_args(self, initial: T.List[str]) -> T.List[str]:
|
|
294
|
+
return initial + self.link_args
|
|
295
|
+
|
|
296
|
+
def get_install(self, initial: bool) -> bool:
|
|
297
|
+
return {'preserve': initial, 'true': True, 'false': False}[self.install]
|
|
298
|
+
|
|
299
|
+
class TargetOptions:
|
|
300
|
+
def __init__(self) -> None:
|
|
301
|
+
self.global_options = SingleTargetOptions()
|
|
302
|
+
self.target_options: T.Dict[str, SingleTargetOptions] = {}
|
|
303
|
+
|
|
304
|
+
def __getitem__(self, tgt: str) -> SingleTargetOptions:
|
|
305
|
+
if tgt not in self.target_options:
|
|
306
|
+
self.target_options[tgt] = SingleTargetOptions()
|
|
307
|
+
return self.target_options[tgt]
|
|
308
|
+
|
|
309
|
+
def get_override_options(self, tgt: str, initial: T.List[str]) -> T.List[str]:
|
|
310
|
+
initial = self.global_options.get_override_options(initial)
|
|
311
|
+
if tgt in self.target_options:
|
|
312
|
+
initial = self.target_options[tgt].get_override_options(initial)
|
|
313
|
+
return initial
|
|
314
|
+
|
|
315
|
+
def get_compile_args(self, tgt: str, lang: str, initial: T.List[str]) -> T.List[str]:
|
|
316
|
+
initial = self.global_options.get_compile_args(lang, initial)
|
|
317
|
+
if tgt in self.target_options:
|
|
318
|
+
initial = self.target_options[tgt].get_compile_args(lang, initial)
|
|
319
|
+
return initial
|
|
320
|
+
|
|
321
|
+
def get_link_args(self, tgt: str, initial: T.List[str]) -> T.List[str]:
|
|
322
|
+
initial = self.global_options.get_link_args(initial)
|
|
323
|
+
if tgt in self.target_options:
|
|
324
|
+
initial = self.target_options[tgt].get_link_args(initial)
|
|
325
|
+
return initial
|
|
326
|
+
|
|
327
|
+
def get_install(self, tgt: str, initial: bool) -> bool:
|
|
328
|
+
initial = self.global_options.get_install(initial)
|
|
329
|
+
if tgt in self.target_options:
|
|
330
|
+
initial = self.target_options[tgt].get_install(initial)
|
|
331
|
+
return initial
|
|
File without changes
|