[Spice-devel] [PATCH spice-common] Meson: make use of features in 0.47

Eduardo Lima (Etrunko) etrunko at redhat.com
Wed Jul 25 21:31:24 UTC 2018


On 25/07/18 13:08, Frediano Ziglio wrote:
>>
>> Spice-server and spice-gtk already require 0.47, and with this release,
>> there were some interesting additions we can make use:
>>
>>  - Options with 'feature' type:
>>
>>    This built-in type is used instead of the tri-state string combo
>>    (auto/true/false), simplifying the dependency checks.
>>
>>    http://mesonbuild.com/Build-options.html#features
>>
>>  - Dictionary:
>>
>>    Easier to iterate and improves readability of the code by replacing
>>    the use of nested lists.
>>
>>    http://mesonbuild.com/Reference-manual.html#dictionary-object
>>
>> Signed-off-by: Eduardo Lima (Etrunko) <etrunko at redhat.com>
>> ---
>>  meson.build       | 37 ++++++++++++++++---------------------
>>  meson_options.txt |  7 ++-----
>>  2 files changed, 18 insertions(+), 26 deletions(-)
>>
>> diff --git a/meson.build b/meson.build
>> index 226d9f4..6fa67dc 100644
>> --- a/meson.build
>> +++ b/meson.build
>> @@ -2,7 +2,7 @@
>>  # project definition
>>  #
>>  project('spice-common', 'c',
>> -         meson_version : '>= 0.45.0',
>> +         meson_version : '>= 0.47.0',
>>           license : 'LGPLv2.1')
>>  
>>  if not meson.is_subproject()
>> @@ -98,32 +98,27 @@ endif
>>  glib_version = '2.38'
>>  glib_version_info = '>= @0@'.format(glib_version)
>>  
>> -deps = [['spice-protocol', '>= 0.12.12'],
>> -        ['glib-2.0', glib_version_info],
>> -        ['gio-2.0', glib_version_info],
>> -        ['gthread-2.0', glib_version_info],
>> -        ['pixman-1', '>= 0.17.7'],
>> -        ['openssl', '>= 1.0.0']]
>> +deps = {'spice-protocol' : '>= 0.12.12',
>> +        'glib-2.0'       : glib_version_info,
>> +        'gio-2.0'        : glib_version_info,
>> +        'gthread-2.0'    : glib_version_info,
>> +        'pixman-1'       : '>= 0.17.7',
>> +        'openssl'        : '>= 1.0.0'}
>>  
>> -foreach dep : deps
>> -  spice_common_deps += dependency(dep[0], version : dep[1])
>> +foreach dep, version : deps
>> +  spice_common_deps += dependency(dep, version : version)
>>  endforeach
>>  
> 
> surely more readable, note that dictionary does not keep
> the order of the items while arrays does, but is not a problem
> with current code.
> 
>>  #
>>  # Non-mandatory/optional dependencies
>>  #
>> -optional_deps = [
>> -                    ['celt051', '>= 0.5.1.1'],
>> -                    ['opus', '>= 0.9.14'],
>> -                ]
>> -foreach dep : optional_deps
>> -  option_value = get_option(dep[0])
>> -  if option_value != 'false'
>> -    d = dependency(dep[0], required: (option_value == 'true'), version :
>> dep[1])
>> -    if d.found()
>> -      spice_common_deps += d
>> -
>> spice_common_config_data.set('HAVE_ at 0@'.format(dep[0].underscorify().to_upper()),
>> '1')
>> -    endif
>> +optional_deps = {'celt051' : '>= 0.5.1.1',
>> +                 'opus'    : '>= 0.9.14'}
>> +foreach dep, version : optional_deps
>> +  d = dependency(dep, required : get_option(dep), version : version)
>> +  if d.found()
>> +    spice_common_deps += d
>> +
>> spice_common_config_data.set('HAVE_ at 0@'.format(dep.underscorify().to_upper()),
>> '1')
>>    endif
>>  endforeach
>>  
>> diff --git a/meson_options.txt b/meson_options.txt
>> index b88f209..1b80257 100644
>> --- a/meson_options.txt
>> +++ b/meson_options.txt
>> @@ -11,15 +11,12 @@ option('extra-checks',
>>      description : 'Enable extra checks on code')
>>  
>>  option('celt051',
>> -    type : 'combo',
>> -    choices : ['true', 'false', 'auto'],
>> -    value : 'auto',
>> +    type : 'feature',
>>      yield : true,
>>      description: 'Enable celt051 audio codec')
>>  
>>  option('opus',
>> -    type : 'combo',
>> -    choices : ['true', 'false', 'auto'],
>> +    type : 'feature',
>>      yield : true,
>>      description: 'Enable Opus audio codec')
>>  
> 
> I would say yes.
> 
> What worry me is that this Meson looks like a moving target.
> The fact that they don't want to add function requires them to
> to write new and new modules/functions and have new releases.
> The main concern for us is that is hard to predict when we could
> remove autoconf stuff having to continue to maintain 2 build systems.
> Will be hard to have Meson 0.47 in next RHEL7 which will mean we
> need at least to wait other 6 months/1 year.
> 

I agree that changing requirements for every new release is far from
ideal, but we are in early stages and I do not see any more strong
reasons for requiring a 0.48 for example (whenever that version is out).

IMO a good time for that would be when they finally fix the equivalent
of 'make dist' to include the generated files:
https://github.com/mesonbuild/meson/issues/2166.

That said, I think I could have split this patch in two, one for the
feature option and the other one for replacing the lists with
dictionaries where appropriate.

> Maybe for older distros we could package Meson in a tarball and
> use it inside higher packager (like spec file) to use a newer
> meson without the needs to have it installed (I looked and there
> are mainly python files so seems doable, just requires a recent
> python3 installed in the system).
> 

Not sure it is worth the hassle, but it is easily doable, it is just a
matter of setting the PYTHONPATH environment variable and you can use
meson from a local directory.

-- 
Eduardo de Barros Lima (Etrunko)
Software Engineer - RedHat
etrunko at redhat.com


More information about the Spice-devel mailing list