Merge pull request #3223 from sarum9in/rename

Add install_data() rename parameter
pull/3261/head
Jussi Pakkanen 7 years ago committed by GitHub
commit 657836b555
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 13
      docs/markdown/Installing.md
  2. 7
      docs/markdown/Reference-manual.md
  3. 11
      docs/markdown/snippets/install_data-rename.md
  4. 9
      mesonbuild/backend/ninjabackend.py
  5. 8
      mesonbuild/build.py
  6. 5
      mesonbuild/interpreter.py
  7. 4
      test cases/common/12 data/installed_files.txt
  8. 6
      test cases/common/12 data/meson.build
  9. 0
      test cases/common/12 data/to_be_renamed_1.txt
  10. 0
      test cases/common/12 data/to_be_renamed_3.txt
  11. 0
      test cases/common/12 data/to_be_renamed_4.txt
  12. 0
      test cases/common/12 data/vanishing/to_be_renamed_2.txt
  13. 0
      test cases/failing/70 install_data rename bad size/file1.txt
  14. 0
      test cases/failing/70 install_data rename bad size/file2.txt
  15. 3
      test cases/failing/70 install_data rename bad size/meson.build

@ -29,6 +29,19 @@ install_man('foo.1') # -> share/man/man1/foo.1.gz
install_data('datafile.dat', install_dir : join_paths(get_option('datadir'), 'progname')) # -> share/progname/datafile.dat
```
`install_data()` supports rename of the file *since 0.46.0*.
```meson
# file.txt -> {datadir}/{projectname}/new-name.txt
install_data('file.txt', rename : 'new-name.txt')
# file1.txt -> share/myapp/dir1/data.txt
# file2.txt -> share/myapp/dir2/data.txt
install_data(['file1.txt', 'file2.txt'],
rename : ['dir1/data.txt', 'dir2/data.txt'],
install_dir : 'share/myapp')
```
Sometimes you want to copy an entire subtree directly. For this use case there is the `install_subdir` command, which can be used like this.
```meson

@ -737,6 +737,13 @@ arguments. The following keyword arguments are supported:
To leave any of these three as the default, specify `false`.
- `rename` if specified renames each source file into corresponding file
from `rename` list. Nested paths are allowed and they are joined with
`install_dir`. Length of `rename` list must be equal to the number of sources.
*(added 0.46.0)*
See [Installing](Installing.md) for more examples.
### install_headers()
``` meson

@ -0,0 +1,11 @@
## install_data() supports rename
`rename` parameter is used to change names of the installed files.
In order to install
- `file1.txt` into `share/myapp/dir1/data.txt`
- `file2.txt` into `share/myapp/dir2/data.txt`
```meson
install_data(['file1.txt', 'file2.txt'],
rename : ['dir1/data.txt', 'dir2/data.txt'],
install_dir : 'share/myapp')
```

@ -878,11 +878,10 @@ int dummy;
subdir = de.install_dir
if not subdir:
subdir = os.path.join(self.environment.get_datadir(), self.interpreter.build.project_name)
for f in de.sources:
assert(isinstance(f, mesonlib.File))
plain_f = os.path.basename(f.fname)
dstabs = os.path.join(subdir, plain_f)
i = [f.absolute_path(srcdir, builddir), dstabs, de.install_mode]
for src_file, dst_name in zip(de.sources, de.rename):
assert(isinstance(src_file, mesonlib.File))
dst_abs = os.path.join(subdir, dst_name)
i = [src_file.absolute_path(srcdir, builddir), dst_abs, de.install_mode]
d.data.append(i)
def generate_subdir_install(self, d):

@ -1894,13 +1894,19 @@ class ConfigurationData:
# A bit poorly named, but this represents plain data files to copy
# during install.
class Data:
def __init__(self, sources, install_dir, install_mode=None):
def __init__(self, sources, install_dir, install_mode=None, rename=None):
self.sources = sources
self.install_dir = install_dir
self.install_mode = install_mode
self.sources = listify(self.sources)
for s in self.sources:
assert(isinstance(s, File))
if rename is None:
self.rename = [os.path.basename(f.fname) for f in self.sources]
else:
self.rename = stringlistify(rename)
if len(self.rename) != len(self.sources):
raise MesonException('Size of rename argument is different from number of sources')
class RunScript(dict):
def __init__(self, script, args):

@ -1500,7 +1500,7 @@ permitted_kwargs = {'add_global_arguments': {'language'},
'find_program': {'required', 'native'},
'generator': {'arguments', 'output', 'depfile', 'capture', 'preserve_path_from'},
'include_directories': {'is_system'},
'install_data': {'install_dir', 'install_mode', 'sources'},
'install_data': {'install_dir', 'install_mode', 'rename', 'sources'},
'install_headers': {'install_dir', 'subdir'},
'install_man': {'install_dir'},
'install_subdir': {'exclude_files', 'exclude_directories', 'install_dir', 'install_mode', 'strip_directory'},
@ -2826,7 +2826,8 @@ root and issuing %s.
if not isinstance(install_dir, (str, type(None))):
raise InvalidArguments('Keyword argument install_dir not a string.')
install_mode = self._get_kwarg_install_mode(kwargs)
data = DataHolder(build.Data(sources, install_dir, install_mode))
rename = kwargs.get('rename', None)
data = DataHolder(build.Data(sources, install_dir, install_mode, rename))
self.build.data.append(data.held_object)
return data

@ -2,6 +2,10 @@ usr/share/progname/datafile.dat
usr/share/progname/fileobject_datafile.dat
usr/share/progname/vanishing.dat
usr/share/progname/vanishing2.dat
usr/share/data install test/renamed file.txt
usr/share/data install test/somefile.txt
usr/share/data install test/some/nested/path.txt
usr/share/renamed/renamed 2.txt
usr/share/renamed/renamed 3.txt
etc/etcfile.dat
usr/bin/runscript.sh

@ -15,3 +15,9 @@ install_data(files('somefile.txt'))
subdir('vanishing')
install_data(sources : 'vanishing/vanishing2.dat', install_dir : 'share/progname')
install_data(sources : 'to_be_renamed_1.txt', rename : 'renamed file.txt')
install_data(sources : ['vanishing/to_be_renamed_2.txt', 'to_be_renamed_3.txt'],
install_dir : 'share/renamed',
rename : ['renamed 2.txt', 'renamed 3.txt'])
install_data(sources : 'to_be_renamed_4.txt', rename : 'some/nested/path.txt')

@ -0,0 +1,3 @@
project('data install test', 'c')
install_data(['file1.txt', 'file2.txt'], rename : 'just one name')
Loading…
Cancel
Save