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
This commit is contained in:
parent
a28dde40b5
commit
f5ec07e7c3
|
@ -1578,9 +1578,9 @@ class Backend:
|
||||||
dfilename = os.path.join(outdir, target.depfile)
|
dfilename = os.path.join(outdir, target.depfile)
|
||||||
i = i.replace('@DEPFILE@', dfilename)
|
i = i.replace('@DEPFILE@', dfilename)
|
||||||
if '@PRIVATE_DIR@' in i:
|
if '@PRIVATE_DIR@' in i:
|
||||||
if target.absolute_paths:
|
|
||||||
pdir = self.get_target_private_dir_abs(target)
|
pdir = self.get_target_private_dir_abs(target)
|
||||||
else:
|
os.makedirs(pdir, exist_ok=True)
|
||||||
|
if not target.absolute_paths:
|
||||||
pdir = self.get_target_private_dir(target)
|
pdir = self.get_target_private_dir(target)
|
||||||
i = i.replace('@PRIVATE_DIR@', pdir)
|
i = i.replace('@PRIVATE_DIR@', pdir)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -864,11 +864,8 @@ class NinjaBackend(backends.Backend):
|
||||||
tgt[lnk_hash] = lnk_block
|
tgt[lnk_hash] = lnk_block
|
||||||
|
|
||||||
def generate_target(self, target):
|
def generate_target(self, target):
|
||||||
try:
|
|
||||||
if isinstance(target, build.BuildTarget):
|
if isinstance(target, build.BuildTarget):
|
||||||
os.makedirs(self.get_target_private_dir_abs(target))
|
os.makedirs(self.get_target_private_dir_abs(target), exist_ok=True)
|
||||||
except FileExistsError:
|
|
||||||
pass
|
|
||||||
if isinstance(target, build.CustomTarget):
|
if isinstance(target, build.CustomTarget):
|
||||||
self.generate_custom_target(target)
|
self.generate_custom_target(target)
|
||||||
if isinstance(target, build.RunTarget):
|
if isinstance(target, build.RunTarget):
|
||||||
|
|
|
@ -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,
|
||||||
|
)
|
Loading…
Reference in New Issue