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,289 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Copyright 2012-2021 The Meson development team
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
# Work around some pathlib bugs...
|
|
7
|
+
|
|
8
|
+
from . import _pathlib
|
|
9
|
+
import sys
|
|
10
|
+
sys.modules['pathlib'] = _pathlib
|
|
11
|
+
|
|
12
|
+
# This file is an entry point for all commands, including scripts. Include the
|
|
13
|
+
# strict minimum python modules for performance reasons.
|
|
14
|
+
import os.path
|
|
15
|
+
import platform
|
|
16
|
+
import importlib
|
|
17
|
+
import argparse
|
|
18
|
+
import typing as T
|
|
19
|
+
|
|
20
|
+
from .utils.core import MesonException, MesonBugException
|
|
21
|
+
from . import mlog
|
|
22
|
+
|
|
23
|
+
def errorhandler(e: Exception, command: str) -> int:
|
|
24
|
+
import traceback
|
|
25
|
+
if isinstance(e, MesonException):
|
|
26
|
+
mlog.exception(e)
|
|
27
|
+
logfile = mlog.shutdown()
|
|
28
|
+
if logfile is not None:
|
|
29
|
+
mlog.log("\nA full log can be found at", mlog.bold(logfile))
|
|
30
|
+
if os.environ.get('MESON_FORCE_BACKTRACE'):
|
|
31
|
+
raise e
|
|
32
|
+
return 1
|
|
33
|
+
else:
|
|
34
|
+
# We assume many types of traceback are Meson logic bugs, but most
|
|
35
|
+
# particularly anything coming from the interpreter during `setup`.
|
|
36
|
+
# Some things definitely aren't:
|
|
37
|
+
# - PermissionError is always a problem in the user environment
|
|
38
|
+
# - runpython doesn't run Meson's own code, even though it is
|
|
39
|
+
# dispatched by our run()
|
|
40
|
+
if os.environ.get('MESON_FORCE_BACKTRACE'):
|
|
41
|
+
raise e
|
|
42
|
+
traceback.print_exc()
|
|
43
|
+
|
|
44
|
+
if command == 'runpython':
|
|
45
|
+
return 2
|
|
46
|
+
elif isinstance(e, OSError):
|
|
47
|
+
mlog.exception(Exception("Unhandled python OSError. This is probably not a Meson bug, "
|
|
48
|
+
"but an issue with your build environment."))
|
|
49
|
+
return e.errno
|
|
50
|
+
else: # Exception
|
|
51
|
+
msg = 'Unhandled python exception'
|
|
52
|
+
if all(getattr(e, a, None) is not None for a in ['file', 'lineno', 'colno']):
|
|
53
|
+
e = MesonBugException(msg, e.file, e.lineno, e.colno) # type: ignore
|
|
54
|
+
else:
|
|
55
|
+
e = MesonBugException(msg)
|
|
56
|
+
mlog.exception(e)
|
|
57
|
+
return 2
|
|
58
|
+
|
|
59
|
+
# Note: when adding arguments, please also add them to the completion
|
|
60
|
+
# scripts in $MESONSRC/data/shell-completions/
|
|
61
|
+
class CommandLineParser:
|
|
62
|
+
def __init__(self) -> None:
|
|
63
|
+
# only import these once we do full argparse processing
|
|
64
|
+
from . import mconf, mdist, minit, minstall, mintro, msetup, mtest, rewriter, msubprojects, munstable_coredata, mcompile, mdevenv
|
|
65
|
+
from .scripts import env2mfile
|
|
66
|
+
from .wrap import wraptool
|
|
67
|
+
import shutil
|
|
68
|
+
|
|
69
|
+
self.term_width = shutil.get_terminal_size().columns
|
|
70
|
+
self.formatter = lambda prog: argparse.HelpFormatter(prog, max_help_position=int(self.term_width / 2), width=self.term_width)
|
|
71
|
+
|
|
72
|
+
self.commands: T.Dict[str, argparse.ArgumentParser] = {}
|
|
73
|
+
self.hidden_commands: T.List[str] = []
|
|
74
|
+
self.parser = argparse.ArgumentParser(prog='meson', formatter_class=self.formatter)
|
|
75
|
+
self.subparsers = self.parser.add_subparsers(title='Commands', dest='command',
|
|
76
|
+
description='If no command is specified it defaults to setup command.')
|
|
77
|
+
self.add_command('setup', msetup.add_arguments, msetup.run,
|
|
78
|
+
help_msg='Configure the project')
|
|
79
|
+
self.add_command('configure', mconf.add_arguments, mconf.run,
|
|
80
|
+
help_msg='Change project options',)
|
|
81
|
+
self.add_command('dist', mdist.add_arguments, mdist.run,
|
|
82
|
+
help_msg='Generate release archive',)
|
|
83
|
+
self.add_command('install', minstall.add_arguments, minstall.run,
|
|
84
|
+
help_msg='Install the project')
|
|
85
|
+
self.add_command('introspect', mintro.add_arguments, mintro.run,
|
|
86
|
+
help_msg='Introspect project')
|
|
87
|
+
self.add_command('init', minit.add_arguments, minit.run,
|
|
88
|
+
help_msg='Create a new project')
|
|
89
|
+
self.add_command('test', mtest.add_arguments, mtest.run,
|
|
90
|
+
help_msg='Run tests')
|
|
91
|
+
self.add_command('wrap', wraptool.add_arguments, wraptool.run,
|
|
92
|
+
help_msg='Wrap tools')
|
|
93
|
+
self.add_command('subprojects', msubprojects.add_arguments, msubprojects.run,
|
|
94
|
+
help_msg='Manage subprojects')
|
|
95
|
+
self.add_command('rewrite', lambda parser: rewriter.add_arguments(parser, self.formatter), rewriter.run,
|
|
96
|
+
help_msg='Modify the project definition')
|
|
97
|
+
self.add_command('compile', mcompile.add_arguments, mcompile.run,
|
|
98
|
+
help_msg='Build the project')
|
|
99
|
+
self.add_command('devenv', mdevenv.add_arguments, mdevenv.run,
|
|
100
|
+
help_msg='Run commands in developer environment')
|
|
101
|
+
self.add_command('env2mfile', env2mfile.add_arguments, env2mfile.run,
|
|
102
|
+
help_msg='Convert current environment to a cross or native file')
|
|
103
|
+
# Add new commands above this line to list them in help command
|
|
104
|
+
self.add_command('help', self.add_help_arguments, self.run_help_command,
|
|
105
|
+
help_msg='Print help of a subcommand')
|
|
106
|
+
|
|
107
|
+
# Hidden commands
|
|
108
|
+
self.add_command('runpython', self.add_runpython_arguments, self.run_runpython_command,
|
|
109
|
+
help_msg=argparse.SUPPRESS)
|
|
110
|
+
self.add_command('unstable-coredata', munstable_coredata.add_arguments, munstable_coredata.run,
|
|
111
|
+
help_msg=argparse.SUPPRESS)
|
|
112
|
+
|
|
113
|
+
def add_command(self, name: str, add_arguments_func: T.Callable[[argparse.ArgumentParser], None],
|
|
114
|
+
run_func: T.Callable[[argparse.Namespace], int], help_msg: str, aliases: T.List[str] = None) -> None:
|
|
115
|
+
aliases = aliases or []
|
|
116
|
+
# FIXME: Cannot have hidden subparser:
|
|
117
|
+
# https://bugs.python.org/issue22848
|
|
118
|
+
if help_msg == argparse.SUPPRESS:
|
|
119
|
+
p = argparse.ArgumentParser(prog='meson ' + name, formatter_class=self.formatter)
|
|
120
|
+
self.hidden_commands.append(name)
|
|
121
|
+
else:
|
|
122
|
+
p = self.subparsers.add_parser(name, help=help_msg, aliases=aliases, formatter_class=self.formatter)
|
|
123
|
+
add_arguments_func(p)
|
|
124
|
+
p.set_defaults(run_func=run_func)
|
|
125
|
+
for i in [name] + aliases:
|
|
126
|
+
self.commands[i] = p
|
|
127
|
+
|
|
128
|
+
def add_runpython_arguments(self, parser: argparse.ArgumentParser) -> None:
|
|
129
|
+
parser.add_argument('-c', action='store_true', dest='eval_arg', default=False)
|
|
130
|
+
parser.add_argument('--version', action='version', version=platform.python_version())
|
|
131
|
+
parser.add_argument('script_file')
|
|
132
|
+
parser.add_argument('script_args', nargs=argparse.REMAINDER)
|
|
133
|
+
|
|
134
|
+
def run_runpython_command(self, options: argparse.Namespace) -> int:
|
|
135
|
+
sys.argv[1:] = options.script_args
|
|
136
|
+
if options.eval_arg:
|
|
137
|
+
exec(options.script_file)
|
|
138
|
+
else:
|
|
139
|
+
import runpy
|
|
140
|
+
sys.path.insert(0, os.path.dirname(options.script_file))
|
|
141
|
+
runpy.run_path(options.script_file, run_name='__main__')
|
|
142
|
+
return 0
|
|
143
|
+
|
|
144
|
+
def add_help_arguments(self, parser: argparse.ArgumentParser) -> None:
|
|
145
|
+
parser.add_argument('command', nargs='?', choices=list(self.commands.keys()))
|
|
146
|
+
|
|
147
|
+
def run_help_command(self, options: argparse.Namespace) -> int:
|
|
148
|
+
if options.command:
|
|
149
|
+
self.commands[options.command].print_help()
|
|
150
|
+
else:
|
|
151
|
+
self.parser.print_help()
|
|
152
|
+
return 0
|
|
153
|
+
|
|
154
|
+
def run(self, args: T.List[str]) -> int:
|
|
155
|
+
implicit_setup_command_notice = False
|
|
156
|
+
# If first arg is not a known command, assume user wants to run the setup
|
|
157
|
+
# command.
|
|
158
|
+
known_commands = list(self.commands.keys()) + ['-h', '--help']
|
|
159
|
+
if not args or args[0] not in known_commands:
|
|
160
|
+
implicit_setup_command_notice = True
|
|
161
|
+
args = ['setup'] + args
|
|
162
|
+
|
|
163
|
+
# Hidden commands have their own parser instead of using the global one
|
|
164
|
+
if args[0] in self.hidden_commands:
|
|
165
|
+
command = args[0]
|
|
166
|
+
parser = self.commands[command]
|
|
167
|
+
args = args[1:]
|
|
168
|
+
else:
|
|
169
|
+
parser = self.parser
|
|
170
|
+
command = None
|
|
171
|
+
|
|
172
|
+
from . import mesonlib
|
|
173
|
+
args = mesonlib.expand_arguments(args)
|
|
174
|
+
options = parser.parse_args(args)
|
|
175
|
+
|
|
176
|
+
if command is None:
|
|
177
|
+
command = options.command
|
|
178
|
+
|
|
179
|
+
# Bump the version here in order to add a pre-exit warning that we are phasing out
|
|
180
|
+
# support for old python. If this is already the oldest supported version, then
|
|
181
|
+
# this can never be true and does nothing.
|
|
182
|
+
pending_python_deprecation_notice = \
|
|
183
|
+
command in {'setup', 'compile', 'test', 'install'} and sys.version_info < (3, 7)
|
|
184
|
+
|
|
185
|
+
try:
|
|
186
|
+
return options.run_func(options)
|
|
187
|
+
except Exception as e:
|
|
188
|
+
return errorhandler(e, command)
|
|
189
|
+
finally:
|
|
190
|
+
if implicit_setup_command_notice:
|
|
191
|
+
mlog.warning('Running the setup command as `meson [options]` instead of '
|
|
192
|
+
'`meson setup [options]` is ambiguous and deprecated.', fatal=False)
|
|
193
|
+
if pending_python_deprecation_notice:
|
|
194
|
+
mlog.notice('You are using Python 3.6 which is EOL. Starting with v0.62.0, '
|
|
195
|
+
'Meson will require Python 3.7 or newer', fatal=False)
|
|
196
|
+
mlog.shutdown()
|
|
197
|
+
|
|
198
|
+
def run_script_command(script_name: str, script_args: T.List[str]) -> int:
|
|
199
|
+
# Map script name to module name for those that doesn't match
|
|
200
|
+
script_map = {'exe': 'meson_exe',
|
|
201
|
+
'install': 'meson_install',
|
|
202
|
+
'delsuffix': 'delwithsuffix',
|
|
203
|
+
'gtkdoc': 'gtkdochelper',
|
|
204
|
+
'hotdoc': 'hotdochelper',
|
|
205
|
+
'regencheck': 'regen_checker'}
|
|
206
|
+
module_name = script_map.get(script_name, script_name)
|
|
207
|
+
|
|
208
|
+
try:
|
|
209
|
+
module = importlib.import_module('mesonbuild.scripts.' + module_name)
|
|
210
|
+
except ModuleNotFoundError as e:
|
|
211
|
+
mlog.exception(e)
|
|
212
|
+
return 1
|
|
213
|
+
|
|
214
|
+
try:
|
|
215
|
+
return module.run(script_args)
|
|
216
|
+
except MesonException as e:
|
|
217
|
+
mlog.error(f'Error in {script_name} helper script:')
|
|
218
|
+
mlog.exception(e)
|
|
219
|
+
return 1
|
|
220
|
+
|
|
221
|
+
def ensure_stdout_accepts_unicode() -> None:
|
|
222
|
+
if sys.stdout.encoding and not sys.stdout.encoding.upper().startswith('UTF-'):
|
|
223
|
+
sys.stdout.reconfigure(errors='surrogateescape') # type: ignore[attr-defined]
|
|
224
|
+
|
|
225
|
+
def set_meson_command(mainfile: str) -> None:
|
|
226
|
+
# Set the meson command that will be used to run scripts and so on
|
|
227
|
+
from . import mesonlib
|
|
228
|
+
mesonlib.set_meson_command(mainfile)
|
|
229
|
+
|
|
230
|
+
def run(original_args: T.List[str], mainfile: str) -> int:
|
|
231
|
+
if os.environ.get('MESON_SHOW_DEPRECATIONS'):
|
|
232
|
+
# workaround for https://bugs.python.org/issue34624
|
|
233
|
+
import warnings
|
|
234
|
+
for typ in [DeprecationWarning, SyntaxWarning, FutureWarning, PendingDeprecationWarning]:
|
|
235
|
+
warnings.filterwarnings('error', category=typ, module='mesonbuild')
|
|
236
|
+
warnings.filterwarnings('ignore', message=".*importlib-resources.*")
|
|
237
|
+
|
|
238
|
+
if sys.version_info >= (3, 10) and os.environ.get('MESON_RUNNING_IN_PROJECT_TESTS'):
|
|
239
|
+
# workaround for https://bugs.python.org/issue34624
|
|
240
|
+
import warnings
|
|
241
|
+
warnings.filterwarnings('error', category=EncodingWarning, module='mesonbuild')
|
|
242
|
+
# python 3.11 adds a warning that in 3.15, UTF-8 mode will be default.
|
|
243
|
+
# This is fantastic news, we'd love that. Less fantastic: this warning is silly,
|
|
244
|
+
# we *want* these checks to be affected. Plus, the recommended alternative API
|
|
245
|
+
# would (in addition to warning people when UTF-8 mode removed the problem) also
|
|
246
|
+
# require using a minimum python version of 3.11 (in which the warning was added)
|
|
247
|
+
# or add verbose if/else soup.
|
|
248
|
+
warnings.filterwarnings('ignore', message="UTF-8 Mode affects .*getpreferredencoding", category=EncodingWarning)
|
|
249
|
+
|
|
250
|
+
# Meson gets confused if stdout can't output Unicode, if the
|
|
251
|
+
# locale isn't Unicode, just force stdout to accept it. This tries
|
|
252
|
+
# to emulate enough of PEP 540 to work elsewhere.
|
|
253
|
+
ensure_stdout_accepts_unicode()
|
|
254
|
+
|
|
255
|
+
# https://github.com/mesonbuild/meson/issues/3653
|
|
256
|
+
if sys.platform == 'cygwin' and os.environ.get('MSYSTEM', '') not in ['MSYS', '']:
|
|
257
|
+
mlog.error('This python3 seems to be msys/python on MSYS2 Windows, but you are in a MinGW environment')
|
|
258
|
+
mlog.error('Please install and use mingw-w64-x86_64-python3 and/or mingw-w64-x86_64-meson with Pacman')
|
|
259
|
+
return 2
|
|
260
|
+
|
|
261
|
+
args = original_args[:]
|
|
262
|
+
|
|
263
|
+
# Special handling of internal commands called from backends, they don't
|
|
264
|
+
# need to go through argparse.
|
|
265
|
+
if len(args) >= 2 and args[0] == '--internal':
|
|
266
|
+
if args[1] == 'regenerate':
|
|
267
|
+
set_meson_command(mainfile)
|
|
268
|
+
from . import msetup
|
|
269
|
+
try:
|
|
270
|
+
return msetup.run(['--reconfigure'] + args[2:])
|
|
271
|
+
except Exception as e:
|
|
272
|
+
return errorhandler(e, 'setup')
|
|
273
|
+
else:
|
|
274
|
+
return run_script_command(args[1], args[2:])
|
|
275
|
+
|
|
276
|
+
set_meson_command(mainfile)
|
|
277
|
+
return CommandLineParser().run(args)
|
|
278
|
+
|
|
279
|
+
def main() -> int:
|
|
280
|
+
# Always resolve the command path so Ninja can find it for regen, tests, etc.
|
|
281
|
+
if 'meson.exe' in sys.executable:
|
|
282
|
+
assert os.path.isabs(sys.executable)
|
|
283
|
+
launcher = sys.executable
|
|
284
|
+
else:
|
|
285
|
+
launcher = os.path.abspath(sys.argv[0])
|
|
286
|
+
return run(sys.argv[1:], launcher)
|
|
287
|
+
|
|
288
|
+
if __name__ == '__main__':
|
|
289
|
+
sys.exit(main())
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Copyright 2017 The Meson development team
|
|
3
|
+
|
|
4
|
+
"""Code that creates simple startup projects."""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from enum import Enum
|
|
10
|
+
import subprocess
|
|
11
|
+
import shutil
|
|
12
|
+
import sys
|
|
13
|
+
import os
|
|
14
|
+
import re
|
|
15
|
+
from glob import glob
|
|
16
|
+
import typing as T
|
|
17
|
+
|
|
18
|
+
from mesonbuild import build, mesonlib, mlog
|
|
19
|
+
from mesonbuild.coredata import FORBIDDEN_TARGET_NAMES
|
|
20
|
+
from mesonbuild.environment import detect_ninja
|
|
21
|
+
from mesonbuild.templates.mesontemplates import create_meson_build
|
|
22
|
+
from mesonbuild.templates.samplefactory import sample_generator
|
|
23
|
+
|
|
24
|
+
if T.TYPE_CHECKING:
|
|
25
|
+
import argparse
|
|
26
|
+
|
|
27
|
+
from typing_extensions import Protocol, Literal
|
|
28
|
+
|
|
29
|
+
class Arguments(Protocol):
|
|
30
|
+
|
|
31
|
+
srcfiles: T.List[Path]
|
|
32
|
+
wd: str
|
|
33
|
+
name: str
|
|
34
|
+
executable: str
|
|
35
|
+
deps: str
|
|
36
|
+
language: Literal['c', 'cpp', 'cs', 'cuda', 'd', 'fortran', 'java', 'rust', 'objc', 'objcpp', 'vala']
|
|
37
|
+
build: bool
|
|
38
|
+
builddir: str
|
|
39
|
+
force: bool
|
|
40
|
+
type: Literal['executable', 'library']
|
|
41
|
+
version: str
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
FORTRAN_SUFFIXES = {'.f', '.for', '.F', '.f90', '.F90'}
|
|
45
|
+
LANG_SUFFIXES = {'.c', '.cc', '.cpp', '.cs', '.cu', '.d', '.m', '.mm', '.rs', '.java', '.vala'} | FORTRAN_SUFFIXES
|
|
46
|
+
LANG_SUPPORTED = {'c', 'cpp', 'cs', 'cuda', 'd', 'fortran', 'java', 'rust', 'objc', 'objcpp', 'vala'}
|
|
47
|
+
|
|
48
|
+
DEFAULT_PROJECT = 'executable'
|
|
49
|
+
DEFAULT_VERSION = '0.1'
|
|
50
|
+
class DEFAULT_TYPES(Enum):
|
|
51
|
+
EXE = 'executable'
|
|
52
|
+
LIB = 'library'
|
|
53
|
+
|
|
54
|
+
INFO_MESSAGE = '''Sample project created. To build it run the
|
|
55
|
+
following commands:
|
|
56
|
+
|
|
57
|
+
meson setup builddir
|
|
58
|
+
meson compile -C builddir
|
|
59
|
+
'''
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def create_sample(options: Arguments) -> None:
|
|
63
|
+
'''
|
|
64
|
+
Based on what arguments are passed we check for a match in language
|
|
65
|
+
then check for project type and create new Meson samples project.
|
|
66
|
+
'''
|
|
67
|
+
sample_gen = sample_generator(options)
|
|
68
|
+
if options.type == DEFAULT_TYPES['EXE'].value:
|
|
69
|
+
sample_gen.create_executable()
|
|
70
|
+
elif options.type == DEFAULT_TYPES['LIB'].value:
|
|
71
|
+
sample_gen.create_library()
|
|
72
|
+
else:
|
|
73
|
+
raise RuntimeError('Unreachable code')
|
|
74
|
+
print(INFO_MESSAGE)
|
|
75
|
+
|
|
76
|
+
def autodetect_options(options: Arguments, sample: bool = False) -> None:
|
|
77
|
+
'''
|
|
78
|
+
Here we autodetect options for args not passed in so don't have to
|
|
79
|
+
think about it.
|
|
80
|
+
'''
|
|
81
|
+
if not options.name:
|
|
82
|
+
options.name = Path().resolve().stem
|
|
83
|
+
if not re.match('[a-zA-Z_][a-zA-Z0-9]*', options.name) and sample:
|
|
84
|
+
raise SystemExit(f'Name of current directory "{options.name}" is not usable as a sample project name.\n'
|
|
85
|
+
'Specify a project name with --name.')
|
|
86
|
+
print(f'Using "{options.name}" (name of current directory) as project name.')
|
|
87
|
+
if not options.executable:
|
|
88
|
+
options.executable = options.name
|
|
89
|
+
print(f'Using "{options.executable}" (project name) as name of executable to build.')
|
|
90
|
+
if options.executable in FORBIDDEN_TARGET_NAMES:
|
|
91
|
+
raise mesonlib.MesonException(f'Executable name {options.executable!r} is reserved for Meson internal use. '
|
|
92
|
+
'Refusing to init an invalid project.')
|
|
93
|
+
if sample:
|
|
94
|
+
# The rest of the autodetection is not applicable to generating sample projects.
|
|
95
|
+
return
|
|
96
|
+
if not options.srcfiles:
|
|
97
|
+
srcfiles: T.List[Path] = []
|
|
98
|
+
for f in (f for f in Path().iterdir() if f.is_file()):
|
|
99
|
+
if f.suffix in LANG_SUFFIXES:
|
|
100
|
+
srcfiles.append(f)
|
|
101
|
+
if not srcfiles:
|
|
102
|
+
raise SystemExit('No recognizable source files found.\n'
|
|
103
|
+
'Run meson init in an empty directory to create a sample project.')
|
|
104
|
+
options.srcfiles = srcfiles
|
|
105
|
+
print("Detected source files: " + ' '.join(str(s) for s in srcfiles))
|
|
106
|
+
if not options.language:
|
|
107
|
+
for f in options.srcfiles:
|
|
108
|
+
if f.suffix == '.c':
|
|
109
|
+
options.language = 'c'
|
|
110
|
+
break
|
|
111
|
+
if f.suffix in {'.cc', '.cpp'}:
|
|
112
|
+
options.language = 'cpp'
|
|
113
|
+
break
|
|
114
|
+
if f.suffix == '.cs':
|
|
115
|
+
options.language = 'cs'
|
|
116
|
+
break
|
|
117
|
+
if f.suffix == '.cu':
|
|
118
|
+
options.language = 'cuda'
|
|
119
|
+
break
|
|
120
|
+
if f.suffix == '.d':
|
|
121
|
+
options.language = 'd'
|
|
122
|
+
break
|
|
123
|
+
if f.suffix in FORTRAN_SUFFIXES:
|
|
124
|
+
options.language = 'fortran'
|
|
125
|
+
break
|
|
126
|
+
if f.suffix == '.rs':
|
|
127
|
+
options.language = 'rust'
|
|
128
|
+
break
|
|
129
|
+
if f.suffix == '.m':
|
|
130
|
+
options.language = 'objc'
|
|
131
|
+
break
|
|
132
|
+
if f.suffix == '.mm':
|
|
133
|
+
options.language = 'objcpp'
|
|
134
|
+
break
|
|
135
|
+
if f.suffix == '.java':
|
|
136
|
+
options.language = 'java'
|
|
137
|
+
break
|
|
138
|
+
if f.suffix == '.vala':
|
|
139
|
+
options.language = 'vala'
|
|
140
|
+
break
|
|
141
|
+
if not options.language:
|
|
142
|
+
raise SystemExit("Can't autodetect language, please specify it with -l.")
|
|
143
|
+
print("Detected language: " + options.language)
|
|
144
|
+
|
|
145
|
+
# Note: when adding arguments, please also add them to the completion
|
|
146
|
+
# scripts in $MESONSRC/data/shell-completions/
|
|
147
|
+
def add_arguments(parser: 'argparse.ArgumentParser') -> None:
|
|
148
|
+
'''
|
|
149
|
+
Here we add args for that the user can passed when making a new
|
|
150
|
+
Meson project.
|
|
151
|
+
'''
|
|
152
|
+
parser.add_argument("srcfiles", metavar="sourcefile", nargs="*", type=Path, help="source files. default: all recognized files in current directory")
|
|
153
|
+
parser.add_argument('-C', dest='wd', action=mesonlib.RealPathAction,
|
|
154
|
+
help='directory to cd into before running')
|
|
155
|
+
parser.add_argument("-n", "--name", help="project name. default: name of current directory")
|
|
156
|
+
parser.add_argument("-e", "--executable", help="executable name. default: project name")
|
|
157
|
+
parser.add_argument("-d", "--deps", help="dependencies, comma-separated")
|
|
158
|
+
parser.add_argument("-l", "--language", choices=sorted(LANG_SUPPORTED), help="project language. default: autodetected based on source files")
|
|
159
|
+
parser.add_argument("-b", "--build", action='store_true', help="build after generation")
|
|
160
|
+
parser.add_argument("--builddir", default='build', help="directory for build")
|
|
161
|
+
parser.add_argument("-f", "--force", action="store_true", help="force overwrite of existing files and directories.")
|
|
162
|
+
parser.add_argument('--type', default=DEFAULT_PROJECT, choices=('executable', 'library'), help=f"project type. default: {DEFAULT_PROJECT} based project")
|
|
163
|
+
parser.add_argument('--version', default=DEFAULT_VERSION, help=f"project version. default: {DEFAULT_VERSION}")
|
|
164
|
+
|
|
165
|
+
def run(options: Arguments) -> int:
|
|
166
|
+
'''
|
|
167
|
+
Here we generate the new Meson sample project.
|
|
168
|
+
'''
|
|
169
|
+
if not Path(options.wd).exists():
|
|
170
|
+
sys.exit('Project source root directory not found. Run this command in source directory root.')
|
|
171
|
+
os.chdir(options.wd)
|
|
172
|
+
|
|
173
|
+
if not glob('*'):
|
|
174
|
+
autodetect_options(options, sample=True)
|
|
175
|
+
if not options.language:
|
|
176
|
+
print('Defaulting to generating a C language project.')
|
|
177
|
+
options.language = 'c'
|
|
178
|
+
create_sample(options)
|
|
179
|
+
else:
|
|
180
|
+
autodetect_options(options)
|
|
181
|
+
if Path('meson.build').is_file() and not options.force:
|
|
182
|
+
raise SystemExit('meson.build already exists. Use --force to overwrite.')
|
|
183
|
+
create_meson_build(options)
|
|
184
|
+
if options.build:
|
|
185
|
+
if Path(options.builddir).is_dir() and options.force:
|
|
186
|
+
print('Build directory already exists, deleting it.')
|
|
187
|
+
shutil.rmtree(options.builddir)
|
|
188
|
+
print('Building...')
|
|
189
|
+
cmd = mesonlib.get_meson_command() + ['setup', options.builddir]
|
|
190
|
+
ret = subprocess.run(cmd)
|
|
191
|
+
if ret.returncode:
|
|
192
|
+
raise SystemExit
|
|
193
|
+
|
|
194
|
+
b = build.load(options.builddir)
|
|
195
|
+
need_vsenv = T.cast('bool', b.environment.coredata.get_option(mesonlib.OptionKey('vsenv')))
|
|
196
|
+
vsenv_active = mesonlib.setup_vsenv(need_vsenv)
|
|
197
|
+
if vsenv_active:
|
|
198
|
+
mlog.log(mlog.green('INFO:'), 'automatically activated MSVC compiler environment')
|
|
199
|
+
|
|
200
|
+
cmd = detect_ninja() + ['-C', options.builddir]
|
|
201
|
+
ret = subprocess.run(cmd)
|
|
202
|
+
if ret.returncode:
|
|
203
|
+
raise SystemExit
|
|
204
|
+
return 0
|