-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathRelease-notes-for-0-47-0.html
485 lines (444 loc) · 21.2 KB
/
Release-notes-for-0-47-0.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
<!DOCTYPE html>
<html lang="en">
<head>
<base href=".">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Release 0.47</title>
<link rel="stylesheet" href="assets/css/dark-frontend.css" type="text/css" title="dark">
<link rel="alternate stylesheet" href="assets/css/light-frontend.css" type="text/css" title="light">
<link rel="stylesheet" href="assets/css/bootstrap-toc.min.css" type="text/css">
<link rel="stylesheet" href="assets/css/jquery.mCustomScrollbar.min.css">
<link rel="stylesheet" href="assets/js/search/enable_search.css" type="text/css">
<link rel="stylesheet" href="assets/css/notes.css" type="text/css">
<link rel="stylesheet" href="assets/css/prism-tomorrow.css" type="text/css" title="dark">
<link rel="alternate stylesheet" href="assets/css/prism.css" type="text/css" title="light">
<script src="assets/js/mustache.min.js"></script>
<script src="assets/js/jquery.js"></script>
<script src="assets/js/bootstrap.js"></script>
<script src="assets/js/scrollspy.js"></script>
<script src="assets/js/typeahead.jquery.min.js"></script>
<script src="assets/js/search.js"></script>
<script src="assets/js/compare-versions.js"></script>
<script src="assets/js/jquery.mCustomScrollbar.concat.min.js"></script>
<script src="assets/js/bootstrap-toc.min.js"></script>
<script src="assets/js/jquery.touchSwipe.min.js"></script>
<script src="assets/js/anchor.min.js"></script>
<script src="assets/js/tag_filtering.js"></script>
<script src="assets/js/language_switching.js"></script>
<script src="assets/js/styleswitcher.js"></script>
<script src="assets/js/lines_around_headings.js"></script>
<script src="assets/js/prism-core.js"></script>
<script src="assets/js/prism-autoloader.js"></script>
<script src="assets/js/prism_autoloader_path_override.js"></script>
<script src="assets/js/prism-keep-markup.js"></script>
<script src="assets/js/trie.js"></script>
<link rel="icon" type="image/png" href="assets/images/favicon.png">
<link rel="shortcut icon" href="assets/images/favicon.png">
</head>
<body class="no-script
">
<script>
$('body').removeClass('no-script');
</script>
<nav class="navbar navbar-fixed-top navbar-default" id="topnav">
<div class="container-fluid">
<div class="navbar-right">
<a id="toc-toggle">
<span class="glyphicon glyphicon-menu-right"></span>
<span class="glyphicon glyphicon-menu-left"></span>
</a>
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-wrapper" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<span title="light mode switch" class="glyphicon glyphicon-sunglasses pull-right" id="lightmode-icon"></span>
<form class="navbar-form pull-right" id="navbar-search-form">
<div class="form-group has-feedback">
<input type="text" class="form-control input-sm" name="search" id="sidenav-lookup-field" placeholder="search" disabled>
<span class="glyphicon glyphicon-search form-control-feedback" id="search-mgn-glass"></span>
</div>
</form>
</div>
<div class="navbar-header">
<a id="sidenav-toggle">
<span class="glyphicon glyphicon-menu-right"></span>
<span class="glyphicon glyphicon-menu-left"></span>
</a>
<a id="home-link" href="index.html" class="hotdoc-navbar-brand">
<img src="assets/images/meson_logo.png" alt="Home">
</a>
</div>
<div class="navbar-collapse collapse" id="navbar-wrapper">
<ul class="nav navbar-nav" id="menu">
<li class="dropdown">
<a class="dropdown-toggle" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Modules <span class="caret"></span>
</a>
<ul class="dropdown-menu" id="modules-menu">
<li>
<a href="CMake-module.html">CMake</a>
</li>
<li>
<a href="Cuda-module.html">CUDA</a>
</li>
<li>
<a href="Dlang-module.html">Dlang</a>
</li>
<li>
<a href="External-Project-module.html">External Project</a>
</li>
<li>
<a href="Fs-module.html">Filesystem</a>
</li>
<li>
<a href="Gnome-module.html">GNOME</a>
</li>
<li>
<a href="Hotdoc-module.html">Hotdoc</a>
</li>
<li>
<a href="i18n-module.html">i18n</a>
</li>
<li>
<a href="Icestorm-module.html">Icestorm</a>
</li>
<li>
<a href="Java-module.html">Java</a>
</li>
<li>
<a href="Keyval-module.html">Keyval</a>
</li>
<li>
<a href="Pkgconfig-module.html">Pkgconfig</a>
</li>
<li>
<a href="Python-3-module.html">Python 3</a>
</li>
<li>
<a href="Python-module.html">Python</a>
</li>
<li>
<a href="Qt4-module.html">Qt4</a>
</li>
<li>
<a href="Qt5-module.html">Qt5</a>
</li>
<li>
<a href="Qt6-module.html">Qt6</a>
</li>
<li>
<a href="Rust-module.html">Rust</a>
</li>
<li>
<a href="Simd-module.html">Simd</a>
</li>
<li>
<a href="SourceSet-module.html">SourceSet</a>
</li>
<li>
<a href="Wayland-module.html">Wayland</a>
</li>
<li>
<a href="Windows-module.html">Windows</a>
</li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Quick References <span class="caret"></span>
</a>
<ul class="dropdown-menu" id="quick-refs-menu">
<li>
<a href="Reference-manual.html">Functions</a>
</li>
<li>
<a href="Build-options.html">Options</a>
</li>
<li>
<a href="Configuration.html">Configuration</a>
</li>
<li>
<a href="Dependencies.html">Dependencies</a>
</li>
<li>
<a href="Unit-tests.html">Tests</a>
</li>
<li>
<a href="Syntax.html">Syntax</a>
</li>
</ul>
</li>
</ul>
<div class="hidden-xs hidden-sm navbar-text navbar-center">
<p><b>The Meson Build System</b></p>
</div>
</div>
</div>
</nav>
<main>
<div data-extension="core" data-hotdoc-in-toplevel="True" data-hotdoc-project="Meson-documentation" data-hotdoc-ref="Release-notes-for-0-47-0.html" class="page_container" id="page-wrapper">
<script src="assets/js/utils.js"></script>
<div class="panel panel-collapse oc-collapsed" id="sidenav" data-hotdoc-role="navigation">
<script src="assets/js/full-width.js"></script>
<div id="sitenav-wrapper">
<iframe src="hotdoc-sitemap.html" id="sitenav-frame"></iframe>
</div>
</div>
<div id="body">
<div id="main">
<div id="page-description" data-hotdoc-role="main">
<h1 id="new-features">New features</h1>
<h2 id="allow-early-return-from-a-script">Allow early return from a script</h2>
<p>Added the function <code>subdir_done()</code>. Its invocation exits the current
script at the point of invocation. All previously invoked build
targets and commands are build/executed. All following ones are
ignored. If the current script was invoked via <code>subdir()</code> the parent
script continues normally.</p>
<h2 id="concatenate-string-literals-returned-from-get_define">Concatenate string literals returned from <code>get_define()</code>
</h2>
<p>After obtaining the value of a preprocessor symbol consecutive string
literals are merged into a single string literal. For example a
preprocessor symbol's value <code>"ab" "cd"</code> is returned as <code>"abcd"</code>.</p>
<h2 id="arm-compilerversion-6-for-c-and-cpp">ARM compiler(version 6) for C and CPP</h2>
<p>Cross-compilation is now supported for ARM targets using ARM compiler
version 6 - ARMCLANG. The required ARMCLANG compiler options for
building a shareable library are not included in the current Meson
implementation for ARMCLANG support, so it cannot build shareable
libraries. This current Meson implementation for ARMCLANG support can
not build assembly files with arm syntax (we need to use armasm
instead of ARMCLANG for the <code>.s</code> files with this syntax) and only
supports GNU syntax.</p>
<p>The default extension of the executable output is <code>.axf</code>. The
environment path should be set properly for the ARM compiler
executables. The <code>--target</code>, <code>-mcpu</code> options with the appropriate
values should be mentioned in the cross file as shown in the snippet
below.</p>
<pre><code class="language-ini">[properties]
c_args = ['--target=arm-arm-none-eabi', '-mcpu=cortex-m0plus']
cpp_args = ['--target=arm-arm-none-eabi', '-mcpu=cortex-m0plus']
</code></pre>
<p>Note:</p>
<ul>
<li>The current changes are tested on Windows only.</li>
<li>PIC support is not enabled by default for ARM,
if users want to use it, they need to add the required arguments
explicitly from cross-file(<code>c_args</code>/<code>cpp_args</code>) or some other way.</li>
</ul>
<h2 id="new-base-build-option-for-llvm-apple-bitcode-support">New base build option for LLVM (Apple) bitcode support</h2>
<p>When building with clang on macOS, you can now build your static and
shared binaries with embedded bitcode by enabling the <code>b_bitcode</code>
<a href="Builtin-options.html#base-options">base option</a> by passing
<code>-Db_bitcode=true</code> to Meson.</p>
<p>This is better than passing the options manually in the environment
since Meson will automatically disable conflicting options such as
<code>b_asneeded</code>, and will disable bitcode support on targets that don't
support it such as <code>shared_module()</code>.</p>
<p>Since this requires support in the linker, it is currently only
enabled when using Apple ld. In the future it can be extended to clang
on other platforms too.</p>
<h2 id="new-compiler-check-check_header">New compiler check: <code>check_header()</code>
</h2>
<p>The existing compiler check <code>has_header()</code> only checks if the header
exists, either with the <code>__has_include</code> C++11 builtin, or by running
the pre-processor.</p>
<p>However, sometimes the header you are looking for is unusable on some
platforms or with some compilers in a way that is only detectable at
compile-time. For such cases, you should use <code>check_header()</code> which
will include the header and run a full compile.</p>
<p>Note that <code>has_header()</code> is much faster than <code>check_header()</code>, so it
should be used whenever possible.</p>
<h2 id="new-action-copy-for-configure_file">New action <code>copy:</code> for <code>configure_file()</code>
</h2>
<p>In addition to the existing actions <code>configuration:</code> and <code>command:</code>,
<a href="Reference-manual_functions.html#configure_file"><ins><code>configure_file()</code></ins></a> now accepts a
keyword argument <code>copy:</code> which specifies a new action to copy the file
specified with the <code>input:</code> keyword argument to a file in the build
directory with the name specified with the <code>output:</code> keyword argument.</p>
<p>These three keyword arguments are, as before, mutually exclusive. You
can only do one action at a time.</p>
<h2 id="new-keyword-argument-encoding-for-configure_file">New keyword argument <code>encoding:</code> for <code>configure_file()</code>
</h2>
<p>Add a new keyword to
<a href="Reference-manual_functions.html#configure_file"><ins><code>configure_file()</code></ins></a> that allows
the developer to specify the input and output file encoding. The
default value is the same as before: UTF-8.</p>
<p>In the past, Meson would not handle non-UTF-8/ASCII files correctly,
and in the worst case would try to coerce it to UTF-8 and mangle the
data. UTF-8 is the standard encoding now, but sometimes it is
necessary to process files that use a different encoding.</p>
<p>For additional details see <a href="https://github.com/mesonbuild/meson/pull/3135">#3135</a>.</p>
<h2 id="new-keyword-argument-output_format-for-configure_file">New keyword argument <code>output_format:</code> for <code>configure_file()</code>
</h2>
<p>When called without an input file, <code>configure_file</code> generates a C
header file by default. A keyword argument was added to allow
specifying the output format, for example for use with nasm or yasm:</p>
<pre><code class="language-meson">conf = configuration_data()
conf.set('FOO', 1)
configure_file('config.asm',
configuration: conf,
output_format: 'nasm')
</code></pre>
<h2 id="substitutions-in-custom_targetdepfile">Substitutions in <code>custom_target(depfile:)</code>
</h2>
<p>The <code>depfile</code> keyword argument to <code>custom_target</code> now accepts the <code>@BASENAME@</code>
and <code>@PLAINNAME@</code> substitutions.</p>
<h2 id="deprecated-build_always-for-custom-targets">Deprecated <code>build_always:</code> for custom targets</h2>
<p>Setting <code>build_always</code> to <code>true</code> for a custom target not only marks
the target to be always considered out of date, but also adds it to
the set of default targets. This option is therefore deprecated and
the new option <code>build_always_stale</code> is introduced.</p>
<p><code>build_always_stale</code> <em>only</em> marks the target to be always considered
out of date, but does not add it to the set of default targets. The
old behaviour can be achieved by combining <code>build_always_stale</code> with
<code>build_by_default</code>.</p>
<p>The documentation has been updated accordingly.</p>
<h2 id="new-builtin-object-type-dictionary">New built-in object type: dictionary</h2>
<p>Meson dictionaries use a syntax similar to python's dictionaries, but
have a narrower scope: they are immutable, keys can only be string
literals, and initializing a dictionary with duplicate keys causes a
fatal error.</p>
<p>Example usage:</p>
<pre><code class="language-meson">d = {'foo': 42, 'bar': 'baz'}
foo = d.get('foo')
foobar = d.get('foobar', 'fallback-value')
foreach key, value : d
Do something with key and value
endforeach
</code></pre>
<h2 id="array-options-treat-dopt-and-dopt-as-equivalent">Array options treat <code>-Dopt=</code> and <code>-Dopt=[]</code> as equivalent</h2>
<p>Prior to this change passing -Dopt= to an array opt would be
interpreted as <code>['']</code> (an array with an empty string), now <code>-Dopt=</code> is
the same as <code>-Dopt=[]</code>, an empty list.</p>
<h2 id="feature-detection-based-on-meson_version-in-project">Feature detection based on <code>meson_version:</code> in <code>project()</code>
</h2>
<p>Meson will now print a <code>WARNING:</code> message during configuration if you
use a function or a keyword argument that was added in a Meson version
that's newer than the version specified inside <code>project()</code>. For
example:</p>
<pre><code class="language-meson">project('featurenew', meson_version: '>=0.43')
cdata = configuration_data()
cdata.set('FOO', 'bar')
message(cdata.get_unquoted('FOO'))
</code></pre>
<p>This will output:</p>
<pre><code>The Meson build system
Version: 0.47.0.dev1
Source dir: C:\path\to\srctree
Build dir: C:\path\to\buildtree
Build type: native build
Project name: featurenew
Project version: undefined
Build machine cpu family: x86_64
Build machine cpu: x86_64
WARNING: Project targeting '>=0.43' but tried to use feature introduced in '0.44.0': configuration_data.get_unquoted()
Message: bar
Build targets in project: 0
WARNING: Project specifies a minimum meson_version '>=0.43' which conflicts with:
* 0.44.0: {'configuration_data.get_unquoted()'}
</code></pre>
<h2 id="new-type-of-build-option-for-features">New type of build option for features</h2>
<p>A new type of <a href="Build-options.html#features">option called <code>feature</code></a> can
be defined in <code>meson_options.txt</code> for the traditional <code>enabled / disabled / auto</code> tristate. The value of this option can be passed to
the <code>required</code> keyword argument of functions <code>dependency()</code>,
<code>find_library()</code>, <code>find_program()</code> and <code>add_languages()</code>.</p>
<p>A new global option <code>auto_features</code> has been added to override the
value of all <code>auto</code> features. It is intended to be used by packagers
to have full control on which feature must be enabled or disabled.</p>
<h2 id="new-options-to-gnomegdbus_codegen">New options to <code>gnome.gdbus_codegen()</code>
</h2>
<p>You can now pass additional arguments to gdbus-codegen using the
<code>extra_args</code> keyword. This is the same for the other gnome function
calls.</p>
<p>Meson now automatically adds autocleanup support to the generated
code. This can be modified by setting the autocleanup keyword.</p>
<p>For example:</p>
<pre><code class="language-meson">sources += gnome.gdbus_codegen('com.mesonbuild.Test',
'com.mesonbuild.Test.xml',
autocleanup : 'none',
extra_args : ['--pragma-once'])
</code></pre>
<h2 id="made-install-a-top-level-meson-command">Made 'install' a top level Meson command</h2>
<p>You can now run <code>meson install</code> in your build directory and it will do
the install. It has several command line options you can toggle the
behaviour that is not in the default <code>ninja install</code> invocation. This
is similar to how <code>meson test</code> already works.</p>
<p>For example, to install only the files that have changed, you can do:</p>
<pre><code class="language-console">$ meson install --only-changed
</code></pre>
<h2 id="install_mode-keyword-argument-extended-to-all-installable-targets">
<code>install_mode:</code> keyword argument extended to all installable targets</h2>
<p>It is now possible to pass an <code>install_mode</code> argument to all
installable targets, such as <code>executable()</code>, libraries, headers, man
pages and custom/generated targets.</p>
<p>The <code>install_mode</code> argument can be used to specify the file mode in
symbolic format and optionally the owner/uid and group/gid for the
installed files.</p>
<h2 id="new-builtin-option-install_umask-with-a-default-value-022">New built-in option <code>install_umask</code> with a default value 022</h2>
<p>This umask is used to define the default permissions of files and
directories created in the install tree. Files will preserve their
executable mode, but the exact permissions will obey the
<code>install_umask</code>.</p>
<p>The <code>install_umask</code> can be overridden in the Meson command-line:</p>
<pre><code class="language-console">$ meson --install-umask=027 builddir/
</code></pre>
<p>A project can also override the default in the <code>project()</code> call:</p>
<pre><code class="language-meson">project('myproject', 'c',
default_options : ['install_umask=027'])
</code></pre>
<p>To disable the <code>install_umask</code>, set it to <code>preserve</code>, in which case
permissions are copied from the files in their origin.</p>
<h2 id="octal-and-binary-string-literals">Octal and binary string literals</h2>
<p>Octal and binary integer literals can now be used in build and option files.</p>
<pre><code class="language-meson">int_493 = 0o755
int_1365 = 0b10101010101
</code></pre>
<h2 id="new-keyword-arguments-check-and-capture-for-run_command">New keyword arguments: 'check' and 'capture' for <code>run_command()</code>
</h2>
<p>If <code>check:</code> is <code>true</code>, then the configuration will fail if the command
returns a non-zero exit status. The default value is <code>false</code> for
compatibility reasons.</p>
<p><code>run_command()</code> used to always capture the output and stored it for
use in build files. However, sometimes the stdout is in a binary
format which is meant to be discarded. For that case, you can now set
the <code>capture:</code> keyword argument to <code>false</code>.</p>
<h2 id="windows-resource-files-dependencies">Windows resource files dependencies</h2>
<p>The <code>compile_resources()</code> function of the <code>windows</code> module now takes
the <code>depend_files:</code> and <code>depends:</code> keywords.</p>
<p>When using binutils's <code>windres</code>, dependencies on files <code>#include</code>'d by
the preprocessor are now automatically tracked.</p>
<h2 id="polkit-support-for-privileged-installation">Polkit support for privileged installation</h2>
<p>When running <code>install</code>, if installation fails with a permission error
and <code>pkexec</code> is available, Meson will attempt to use it to spawn a
permission dialog for privileged installation and retry the
installation.</p>
<p>If <code>pkexec</code> is not available, the old behaviour is retained and you
will need to explicitly run the install step with <code>sudo</code>.</p>
</div>
</div>
<div id="search_results">
<p>The results of the search are</p>
</div>
<div id="footer">
<hr>
<div class="license-description">
Website licensing information are available on the <a href="legal.html">Legal</a> page.
</div>
</div>
</div>
<div id="toc-column">
<div class="edit-button">
<a href="https://github.com/mesonbuild/meson/edit/master/docs/markdown/Release-notes-for-0.47.0.md" data-hotdoc-role="edit-button">Edit on GitHub</a>
</div>
<div id="toc-wrapper">
<nav id="toc"></nav>
</div>
</div>
</div>
</main>
<script src="assets/js/navbar_offset_scroller.js"></script>
</body>
</html>