diff options
author | Elliott Sales de Andrade <quantum.analyst@gmail.com> | 2017-06-20 01:53:39 -0400 |
---|---|---|
committer | Elliott Sales de Andrade <quantum.analyst@gmail.com> | 2017-08-06 03:58:35 -0400 |
commit | 5cb1d00537afb9d52f89f7b3dc65e01f068fd442 (patch) | |
tree | 2bb090917941b061187a46345b74dc36a324ac21 /mesonbuild/scripts | |
parent | 58bd1e83b4e24eaab3cf18deb635a057d6bfefb7 (diff) | |
download | meson-5cb1d00537afb9d52f89f7b3dc65e01f068fd442.zip meson-5cb1d00537afb9d52f89f7b3dc65e01f068fd442.tar.gz meson-5cb1d00537afb9d52f89f7b3dc65e01f068fd442.tar.bz2 |
Allow excluding files from `install_subdir`
The install_subdir command now accepts a new `exclude` keyword argument
that allows specified files to be excluded from the installed
subdirectory.
Diffstat (limited to 'mesonbuild/scripts')
-rw-r--r-- | mesonbuild/scripts/meson_install.py | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/mesonbuild/scripts/meson_install.py b/mesonbuild/scripts/meson_install.py index f61cbab..01ea771 100644 --- a/mesonbuild/scripts/meson_install.py +++ b/mesonbuild/scripts/meson_install.py @@ -128,17 +128,25 @@ def do_copyfile(from_file, to_file): restore_selinux_context(to_file) append_to_log(to_file) -def do_copydir(data, src_prefix, src_dir, dst_dir): +def do_copydir(data, src_prefix, src_dir, dst_dir, exclude): ''' Copies the directory @src_prefix (full path) into @dst_dir @src_dir is simply the parent directory of @src_prefix ''' + if exclude is not None: + exclude_files, exclude_dirs = exclude + else: + exclude_files = exclude_dirs = set() for root, dirs, files in os.walk(src_prefix): - for d in dirs: + for d in dirs[:]: abs_src = os.path.join(src_dir, root, d) filepart = abs_src[len(src_dir) + 1:] abs_dst = os.path.join(dst_dir, filepart) + # Remove these so they aren't visited by os.walk at all. + if filepart in exclude_dirs: + dirs.remove(d) + continue if os.path.isdir(abs_dst): continue if os.path.exists(abs_dst): @@ -149,6 +157,8 @@ def do_copydir(data, src_prefix, src_dir, dst_dir): for f in files: abs_src = os.path.join(src_dir, root, f) filepart = abs_src[len(src_dir) + 1:] + if filepart in exclude_files: + continue abs_dst = os.path.join(dst_dir, filepart) if os.path.isdir(abs_dst): print('Tried to copy file %s but a directory of that name already exists.' % abs_dst) @@ -184,14 +194,14 @@ def do_install(datafilename): run_install_script(d) def install_subdirs(d): - for (src_dir, inst_dir, dst_dir, mode) in d.install_subdirs: + for (src_dir, inst_dir, dst_dir, mode, exclude) in d.install_subdirs: if src_dir.endswith('/') or src_dir.endswith('\\'): src_dir = src_dir[:-1] src_prefix = os.path.join(src_dir, inst_dir) print('Installing subdir %s to %s' % (src_prefix, dst_dir)) dst_dir = get_destdir_path(d, dst_dir) d.dirmaker.makedirs(dst_dir, exist_ok=True) - do_copydir(d, src_prefix, src_dir, dst_dir) + do_copydir(d, src_prefix, src_dir, dst_dir, exclude) dst_prefix = os.path.join(dst_dir, inst_dir) set_mode(dst_prefix, mode) @@ -317,7 +327,7 @@ def install_targets(d): do_copyfile(pdb_filename, pdb_outname) elif os.path.isdir(fname): fname = os.path.join(d.build_dir, fname.rstrip('/')) - do_copydir(d, fname, os.path.dirname(fname), outdir) + do_copydir(d, fname, os.path.dirname(fname), outdir, None) else: raise RuntimeError('Unknown file type for {!r}'.format(fname)) printed_symlink_error = False |