diff options
author | Scott Kyle <scott@appden.com> | 2024-06-23 12:00:29 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-23 22:00:29 +0300 |
commit | f5ec07e7c35ac2bf7ff9ee13ccf2818da53baabd (patch) | |
tree | 3fb6bdc947eddeb420eef91221628224985eb965 | |
parent | a28dde40b5b85c97b2eefee63db62ac49e46ca0c (diff) | |
download | meson-f5ec07e7c35ac2bf7ff9ee13ccf2818da53baabd.zip meson-f5ec07e7c35ac2bf7ff9ee13ccf2818da53baabd.tar.gz meson-f5ec07e7c35ac2bf7ff9ee13ccf2818da53baabd.tar.bz2 |
Ensure private directory exists for custom targets (#13196)
* Ensure private directory exists for custom targets
Some custom target commands will expect the `@PRIVATE_DIR@` to already exist, such as with `make -C @PRIVATE_DIR@ ...`
* Prefer `exist_ok` over catching exception
-rw-r--r-- | mesonbuild/backend/backends.py | 6 | ||||
-rw-r--r-- | mesonbuild/backend/ninjabackend.py | 7 | ||||
-rw-r--r-- | test cases/common/277 custom target private dir/meson.build | 16 |
3 files changed, 21 insertions, 8 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py index 0552110..cfae28b 100644 --- a/mesonbuild/backend/backends.py +++ b/mesonbuild/backend/backends.py @@ -1578,9 +1578,9 @@ class Backend: dfilename = os.path.join(outdir, target.depfile) i = i.replace('@DEPFILE@', dfilename) if '@PRIVATE_DIR@' in i: - if target.absolute_paths: - pdir = self.get_target_private_dir_abs(target) - else: + pdir = self.get_target_private_dir_abs(target) + os.makedirs(pdir, exist_ok=True) + if not target.absolute_paths: pdir = self.get_target_private_dir(target) i = i.replace('@PRIVATE_DIR@', pdir) else: diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 3052967..eabe758 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -864,11 +864,8 @@ class NinjaBackend(backends.Backend): tgt[lnk_hash] = lnk_block def generate_target(self, target): - try: - if isinstance(target, build.BuildTarget): - os.makedirs(self.get_target_private_dir_abs(target)) - except FileExistsError: - pass + if isinstance(target, build.BuildTarget): + os.makedirs(self.get_target_private_dir_abs(target), exist_ok=True) if isinstance(target, build.CustomTarget): self.generate_custom_target(target) if isinstance(target, build.RunTarget): diff --git a/test cases/common/277 custom target private dir/meson.build b/test cases/common/277 custom target private dir/meson.build new file mode 100644 index 0000000..dc48d1a --- /dev/null +++ b/test cases/common/277 custom target private dir/meson.build @@ -0,0 +1,16 @@ +project('277 custom target private dir') + +python = find_program('python3') + +custom_target( + 'check-private-dir', + command: [ + python, + '-c', + 'import os, sys; os.chdir(sys.argv[1]); open(sys.argv[2], "w")', + '@PRIVATE_DIR@', + '@OUTPUT@', + ], + output: 'check-private-dir', + build_by_default: true, +) |