Subject: CVS commit: pkgsrc/devel/meson
From: Nikita
Date: 2023-04-25 21:54:40
Message id: 20230425195440.C7101FA85@cvs.NetBSD.org

Log Message:
meson: update to version 1.1.0

Changelog (taken from https://mesonbuild.com/Release-notes-for-1-1-0.html):

New features

Meson 1.1.0 was released on 10 April 2023
clang-cl now accepts cpp_std=c++20

Requires clang-cl 13 or later.
coercing values in the option() function is deprecated

Currently code such as:

option('foo', type : 'boolean', value : 'false')

works, because Meson coerces 'false' to false.

This should be avoided, and will now result in a deprecation warning.
New declare_dependency(objects: ) argument

A new argument to declare_dependency makes it possible to add objects directly \ 
to executables that use an internal dependency, without going for example \ 
through link_whole.
Dump devenv into file and select format

meson devenv --dump [<filename>] command now takes an optional filename \ 
argument to write the environment into a file instead of printing to stdout.

A new --dump-format argument has been added to select which shell format should \ 
be used. There are currently 3 formats supported:

    sh: Lines are in the format VAR=/prepend:$VAR:/append.
    export: Same as sh but with extra export VAR lines.
    vscode: Same as sh but without $VAR substitution because they do not seems \ 
to be properly supported by vscode.

Feature objects now have an enable_auto_if method

This performs the opposite task of the disable_auto_if method, enabling the \ 
feature if the condition is true.
Add a FeatureOption.enable_if and .disable_if

These are useful when features need to be constrained to pass to dependency(), \ 
as the behavior of an auto and disabled or enabled feature is markedly \ 
different. consider the following case:

opt = get_option('feature').disable_auto_if(not foo)
if opt.enabled() and not foo
  error('Cannot enable feat when foo is not also enabled')
endif
dep = dependency('foo', required : opt)

This could be simplified to

opt = get_option('feature').disable_if(not foo, error_message : 'Cannot enable \ 
feature when foo is not also enabled')
dep = dependency('foo', required : opt)

For a real life example, here is some code in mesa:

_llvm = get_option('llvm')
dep_llvm = null_dep
with_llvm = false
if _llvm.allowed()
  dep_llvm = dependency(
    'llvm',
    version : _llvm_version,
    modules : llvm_modules,
    optional_modules : llvm_optional_modules,
    required : (
      with_amd_vk or with_gallium_radeonsi or with_gallium_opencl or with_clc
      or _llvm.enabled()
    ),
    static : not _shared_llvm,
    fallback : ['llvm', 'dep_llvm'],
    include_type : 'system',
  )
  with_llvm = dep_llvm.found()
endif
if with_llvm
  ...
elif with_amd_vk and with_aco_tests
  error('ACO tests require LLVM, but LLVM is disabled.')
elif with_gallium_radeonsi or with_swrast_vk
  error('The following drivers require LLVM: RadeonSI, SWR, Lavapipe. One of \ 
these is enabled, but LLVM is disabled.')
elif with_gallium_opencl
  error('The OpenCL "Clover" state tracker requires LLVM, but LLVM is \ 
disabled.')
elif with_clc
  error('The CLC compiler requires LLVM, but LLVM is disabled.')
else
  draw_with_llvm = false
endif

simplified to:

_llvm = get_option('llvm') \
  .enable_if(with_amd_vk and with_aco_tests, error_message : 'ACO tests requires \ 
LLVM') \
  .enable_if(with_gallium_radeonsi, error_message : 'RadeonSI requires LLVM') \
  .enable_if(with_swrast_vk, error_message : 'Vulkan SWRAST requires LLVM') \
  .enable_if(with_gallium_opencl, error_message : 'The OpenCL Clover state \ 
trackers requires LLVM') \
  .enable_if(with_clc, error_message : 'CLC library requires LLVM')

dep_llvm = dependency(
  'llvm',
  version : _llvm_version,
  modules : llvm_modules,
  optional_modules : llvm_optional_modules,
  required : _llvm,
  static : not _shared_llvm,
  fallback : ['llvm', 'dep_llvm'],
  include_type : 'system',
)
with_llvm = dep_llvm.found()

Generated objects can be passed in the objects: keyword argument

In previous versions of Meson, generated objects could only be passed as sources \ 
of a build target. This was confusing, therefore generated objects can now be \ 
passed in the objects: keyword argument as well.
The project function now supports setting the project license files

This goes together with the license name. The license files can be automatically \ 
installed via meson.install_dependency_manifest(), or queried via \ 
meson.project_license_files().
A new core directory option "licensedir" is available

This will install a dependency manifest to the specified directory, if none is \ 
is explicitly set.
sudo meson install now drops privileges when rebuilding targets

It is common to install projects using sudo, which should not affect build \ 
outputs but simply install the results. Unfortunately, since the ninja backend \ 
updates a state file when run, it's not safe to run ninja as root at all.

It has always been possible to carefully build with:

ninja && sudo meson install --no-rebuild

Meson now tries to be extra safe as a general solution. sudo meson install will \ 
attempt to rebuild, but has learned to run ninja as the original (pre-sudo or \ 
pre-doas) user, ensuring that build outputs are generated/compiled as non-root.
meson install now supports user-preferred root elevation tools

Previously, when installing a project, if any files could not be installed due \ 
to insufficient permissions the install process was automatically re-run using \ 
polkit. Now it prompts to ask whether that is desirable, and checks for \ 
CLI-based tools such as sudo or opendoas or $MESON_ROOT_CMD, first.

Meson will no longer attempt privilege elevation at all, when not running \ 
interactively.
Support for reading options from meson.options

Support has been added for reading options from meson.options instead of \ 
meson_options.txt. These are equivalent, but not using the .txt extension for a \ 
build file has a few advantages, chief among them many tools and text editors \ 
expect a file with the .txt extension to be plain text files, not build scripts.
Redirect introspection outputs to stderr

meson introspect used to disable logging to stdout to not interfere with \ 
generated json. It now redirect outputs to stderr to allow printing warnings to \ 
the console while keeping stdout clean for json outputs.
New "none" backend

The --backend=none option has been added, to configure a project that has no \ 
build rules, only install rules. This avoids depending on ninja.
compiler.preprocess()

Dependencies keyword argument can now be passed to compiler.preprocess() to add \ 
include directories or compiler arguments.

Generated sources such as custom targets are now allowed too.
New pybind11 custom dependency

dependency('pybind11') works with pkg-config and cmake without any special \ 
support, but did not handle the pybind11-config script.

This is useful because the config-tool will work out of the box when pybind11 is \ 
installed, but the pkg-config and cmake files are shoved into python's \ 
site-packages, which makes it impossible to use in an out of the box manner.
Allow --reconfigure and --wipe of empty builddir

meson setup --reconfigure builddir and meson setup --wipe builddir are now \ 
accepting builddir/ to be empty or containing a previously failed setup attempt. \ 
Note that in that case previously passed command line options must be repeated \ 
as only a successful build saves configured options.

This is useful for example with scripts that always repeat all options, meson \ 
setup builddir --wipe -Dfoo=bar will always work regardless whether it is a \ 
first invocation or not.
Allow custom install scripts to run with --dry-run option

An new dry_run keyword is added to meson.add_install_script() to allow a custom \ 
install script to run when meson is invoked with meson install --dry-run.

In dry run mode, the MESON_INSTALL_DRY_RUN environment variable is set.

Files:
RevisionActionfile
1.50modifypkgsrc/devel/meson/Makefile
1.16modifypkgsrc/devel/meson/PLIST
1.46modifypkgsrc/devel/meson/distinfo