aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Kyle <scott@appden.com>2024-06-23 12:00:29 -0700
committerGitHub <noreply@github.com>2024-06-23 22:00:29 +0300
commitf5ec07e7c35ac2bf7ff9ee13ccf2818da53baabd (patch)
tree3fb6bdc947eddeb420eef91221628224985eb965
parenta28dde40b5b85c97b2eefee63db62ac49e46ca0c (diff)
downloadmeson-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.py6
-rw-r--r--mesonbuild/backend/ninjabackend.py7
-rw-r--r--test cases/common/277 custom target private dir/meson.build16
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,
+)