Skip to content

Commit df4714b

Browse files
authored
Merge pull request #10464 from rtbo/fix_generated_deps
add D generated files to order-only deps
2 parents 22dcb69 + e9576a4 commit df4714b

File tree

5 files changed

+50
-2
lines changed

5 files changed

+50
-2
lines changed

mesonbuild/backend/ninjabackend.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -833,6 +833,11 @@ def generate_target(self, target):
833833
# people generate files with weird suffixes (.inc, .fh) that they then include
834834
# in their source files.
835835
header_deps.append(raw_src)
836+
837+
# For D language, the object of generated source files are added
838+
# as order only deps because other files may depend on them
839+
d_generated_deps = []
840+
836841
# These are the generated source files that need to be built for use by
837842
# this target. We create the Ninja build file elements for this here
838843
# because we need `header_deps` to be fully generated in the above loop.
@@ -845,6 +850,8 @@ def generate_target(self, target):
845850
compiled_sources.append(s)
846851
source2object[s] = o
847852
obj_list.append(o)
853+
if s.split('.')[-1] in compilers.lang_suffixes['d']:
854+
d_generated_deps.append(o)
848855

849856
use_pch = self.environment.coredata.options.get(OptionKey('b_pch'))
850857
if use_pch and target.has_pch():
@@ -891,15 +898,15 @@ def generate_target(self, target):
891898
src.rel_to_builddir(self.build_to_src))
892899
unity_src.append(abs_src)
893900
else:
894-
o, s = self.generate_single_compile(target, src, False, [], header_deps)
901+
o, s = self.generate_single_compile(target, src, False, [], header_deps + d_generated_deps)
895902
obj_list.append(o)
896903
compiled_sources.append(s)
897904
source2object[s] = o
898905

899906
obj_list += self.flatten_object_list(target)
900907
if is_unity:
901908
for src in self.generate_unity_files(target, unity_src):
902-
o, s = self.generate_single_compile(target, src, True, unity_deps + header_deps)
909+
o, s = self.generate_single_compile(target, src, True, unity_deps + header_deps + d_generated_deps)
903910
obj_list.append(o)
904911
compiled_sources.append(s)
905912
source2object[s] = o

test cases/d/16 code generation/exe.d

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module exe;
2+
3+
import generated;
4+
import std.stdio;
5+
6+
int main()
7+
{
8+
return generatedString() == "Some text to be returned by generated code" ? 0 : 1;
9+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module generator;
2+
3+
import std.file;
4+
import std.stdio;
5+
import std.string;
6+
7+
void main(string[] args)
8+
{
9+
const text = cast(string)read(args[1]);
10+
11+
writeln("module generated;");
12+
writefln!`string generatedString() { return "%s"; }`(text.strip());
13+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Some text to be returned by generated code
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
project('meson-dep-test', 'd')
2+
3+
generator = executable('generator', 'generator.d')
4+
5+
generated = custom_target('generated',
6+
capture: true,
7+
output: 'generated.d',
8+
input: 'input.txt',
9+
command: [
10+
generator, '@INPUT@'
11+
]
12+
)
13+
14+
exe = executable('exe', generated, 'exe.d',
15+
include_directories: include_directories('.'),
16+
)
17+
18+
test('test exe', exe)

0 commit comments

Comments
 (0)