Support multiple install dirs for built/custom targets
You can now pass a list of strings to the install_dir: kwarg to
build_target and custom_target.
Custom Targets:
===============
Allows you to specify the installation directory for each
corresponding output. For example:
custom_target('different-install-dirs',
output : ['first.file', 'second.file'],
...
install : true,
install_dir : ['somedir', 'otherdir])
This would install first.file to somedir and second.file to otherdir.
If only one install_dir is provided, all outputs are installed there
(same behaviour as before).
To only install some outputs, pass `false` for the outputs that you
don't want installed. For example:
custom_target('only-install-second',
output : ['first.file', 'second.file'],
...
install : true,
install_dir : [false, 'otherdir])
This would install second.file to otherdir and not install first.file.
Build Targets:
==============
With build_target() (which includes executable(), library(), etc),
usually there is only one primary output. However some types of
targets have multiple outputs.
For example, while generating Vala libraries, valac also generates
a header and a .vapi file both of which often need to be installed.
This allows you to specify installation directories for those too.
# This will only install the library (same as before)
shared_library('somevalalib', 'somesource.vala',
...
install : true)
# This will install the library, the header, and the vapi into the
# respective directories
shared_library('somevalalib', 'somesource.vala',
...
install : true,
install_dir : ['libdir', 'incdir', 'vapidir'])
# This will install the library into the default libdir and
# everything else into the specified directories
shared_library('somevalalib', 'somesource.vala',
...
install : true,
install_dir : [true, 'incdir', 'vapidir'])
# This will NOT install the library, and will install everything
# else into the specified directories
shared_library('somevalalib', 'somesource.vala',
...
install : true,
install_dir : [false, 'incdir', 'vapidir'])
true/false can also be used for secondary outputs in the same way.
Valac can also generate a GIR file for libraries when the `vala_gir:`
keyword argument is passed to library(). In that case, `install_dir:`
must be given a list with four elements, one for each output.
Includes tests for all these.
Closes https://github.com/mesonbuild/meson/issues/705
Closes https://github.com/mesonbuild/meson/issues/891
Closes https://github.com/mesonbuild/meson/issues/892
Closes https://github.com/mesonbuild/meson/issues/1178
Closes https://github.com/mesonbuild/meson/issues/1193
8 years ago
|
|
|
project('multiple outputs install', 'c')
|
|
|
|
|
|
|
|
gen = find_program('generator.py')
|
|
|
|
|
|
|
|
custom_target('different-install-dirs',
|
|
|
|
output : ['diff.h', 'diff.sh'],
|
|
|
|
command : [gen, 'diff', '@OUTDIR@'],
|
|
|
|
install : true,
|
|
|
|
install_dir : [join_paths(get_option('prefix'), get_option('includedir')),
|
|
|
|
join_paths(get_option('prefix'), get_option('bindir'))])
|
|
|
|
|
|
|
|
custom_target('same-install-dir',
|
|
|
|
output : ['same.h', 'same.sh'],
|
|
|
|
command : [gen, 'same', '@OUTDIR@'],
|
|
|
|
install : true,
|
|
|
|
install_dir : '/opt')
|
|
|
|
|
|
|
|
custom_target('only-install-first',
|
|
|
|
output : ['first.h', 'first.sh'],
|
|
|
|
command : [gen, 'first', '@OUTDIR@'],
|
|
|
|
install : true,
|
|
|
|
install_dir : [join_paths(get_option('prefix'), get_option('includedir')), false])
|
|
|
|
|
|
|
|
targets = custom_target('only-install-second',
|
Support multiple install dirs for built/custom targets
You can now pass a list of strings to the install_dir: kwarg to
build_target and custom_target.
Custom Targets:
===============
Allows you to specify the installation directory for each
corresponding output. For example:
custom_target('different-install-dirs',
output : ['first.file', 'second.file'],
...
install : true,
install_dir : ['somedir', 'otherdir])
This would install first.file to somedir and second.file to otherdir.
If only one install_dir is provided, all outputs are installed there
(same behaviour as before).
To only install some outputs, pass `false` for the outputs that you
don't want installed. For example:
custom_target('only-install-second',
output : ['first.file', 'second.file'],
...
install : true,
install_dir : [false, 'otherdir])
This would install second.file to otherdir and not install first.file.
Build Targets:
==============
With build_target() (which includes executable(), library(), etc),
usually there is only one primary output. However some types of
targets have multiple outputs.
For example, while generating Vala libraries, valac also generates
a header and a .vapi file both of which often need to be installed.
This allows you to specify installation directories for those too.
# This will only install the library (same as before)
shared_library('somevalalib', 'somesource.vala',
...
install : true)
# This will install the library, the header, and the vapi into the
# respective directories
shared_library('somevalalib', 'somesource.vala',
...
install : true,
install_dir : ['libdir', 'incdir', 'vapidir'])
# This will install the library into the default libdir and
# everything else into the specified directories
shared_library('somevalalib', 'somesource.vala',
...
install : true,
install_dir : [true, 'incdir', 'vapidir'])
# This will NOT install the library, and will install everything
# else into the specified directories
shared_library('somevalalib', 'somesource.vala',
...
install : true,
install_dir : [false, 'incdir', 'vapidir'])
true/false can also be used for secondary outputs in the same way.
Valac can also generate a GIR file for libraries when the `vala_gir:`
keyword argument is passed to library(). In that case, `install_dir:`
must be given a list with four elements, one for each output.
Includes tests for all these.
Closes https://github.com/mesonbuild/meson/issues/705
Closes https://github.com/mesonbuild/meson/issues/891
Closes https://github.com/mesonbuild/meson/issues/892
Closes https://github.com/mesonbuild/meson/issues/1178
Closes https://github.com/mesonbuild/meson/issues/1193
8 years ago
|
|
|
output : ['second.h', 'second.sh'],
|
|
|
|
command : [gen, 'second', '@OUTDIR@'],
|
|
|
|
install : true,
|
|
|
|
install_dir : [false, join_paths(get_option('prefix'), get_option('bindir'))])
|
|
|
|
|
|
|
|
paths = []
|
|
|
|
foreach i : targets.to_list()
|
|
|
|
paths += i.full_path()
|
|
|
|
endforeach
|
|
|
|
|
|
|
|
# Skip on Windows because paths are not identical, '/' VS '\'.
|
|
|
|
if host_machine.system() != 'windows'
|
|
|
|
assert(paths == [meson.current_build_dir() / 'second.h',
|
|
|
|
meson.current_build_dir() / 'second.sh'])
|
|
|
|
endif
|