1.5 KiB
1.5 KiB
Support for reading files at configuration time with the fs
module
Reading text files during configuration is now supported. This can be done at
any time after project
has been called
project(myproject', 'c')
license_text = run_command(
find_program('python3'), '-c', 'print(open("COPYING").read())'
).stdout().strip()
about_header = configuration_data()
about_header.add('COPYRIGHT', license_text)
about_header.add('ABOUT_STRING', meson.project_name())
...
There are several problems with the above approach:
- It's ugly and confusing
- If
COPYING
changes after configuration, Meson won't correctly rebuild when configuration data is based on the data in COPYING - It has extra overhead
fs.read
replaces the above idiom thus:
project(myproject', 'c')
fs = import('fs')
license_text = fs.read('COPYING').strip()
about_header = configuration_data()
about_header.add('COPYRIGHT', license_text)
about_header.add('ABOUT_STRING', meson.project_name())
...
They are not equivalent, though. Files read with fs.read
create a
configuration dependency on the file, and so if the COPYING
file is modified,
Meson will automatically reconfigure, guaranteeing the build is consistent. It
can be used for any properly encoded text files. It supports specification of
non utf-8 encodings too, so if you're stuck with text files in a different
encoding, it can be passed as an argument. See the meson
object documentation for details.