@@ -112,7 +112,7 @@ def _pipelined_compilation_test():
112
112
second_lib_test (name = "second_lib_test" , target_under_test = ":second" , target_compatible_with = NOT_WINDOWS )
113
113
bin_test (name = "bin_test" , target_under_test = ":bin" , target_compatible_with = NOT_WINDOWS )
114
114
115
- def _custom_rule_test_impl (ctx ):
115
+ def _rmeta_is_propagated_through_custom_rule_test_impl (ctx ):
116
116
env = analysistest .begin (ctx )
117
117
tut = analysistest .target_under_test (env )
118
118
@@ -124,54 +124,88 @@ def _custom_rule_test_impl(ctx):
124
124
rlib_inputs = [i for i in rust_action .inputs .to_list () if i .path .endswith (".rlib" )]
125
125
126
126
seen_wrapper_metadata = False
127
- seen_to_wrap = False
127
+ seen_to_wrap_metadata = False
128
128
for mi in metadata_inputs :
129
129
if "libwrapper" in mi .path :
130
130
seen_wrapper_metadata = True
131
131
if "libto_wrap" in mi .path :
132
- seen_to_wrap = True
132
+ seen_to_wrap_metadata = True
133
133
134
- seen_wrapper_rlib = True
134
+ seen_wrapper_rlib = False
135
+ seen_to_wrap_rlib = False
135
136
for ri in rlib_inputs :
136
137
if "libwrapper" in ri .path :
137
138
seen_wrapper_rlib = True
139
+ if "libto_wrap" in ri .path :
140
+ seen_to_wrap_rlib = True
138
141
139
142
if ctx .attr .generate_metadata :
140
143
asserts .true (env , seen_wrapper_metadata , "expected dependency on metadata for 'wrapper' but not found" )
144
+ asserts .false (env , seen_wrapper_rlib , "expected no dependency on object for 'wrapper' but it was found" )
141
145
else :
142
- asserts .true (env , seen_wrapper_rlib , "expected dependency on rlib for 'wrapper' but not found" )
146
+ asserts .true (env , seen_wrapper_rlib , "expected dependency on object for 'wrapper' but not found" )
147
+ asserts .false (env , seen_wrapper_metadata , "expected no dependency on metadata for 'wrapper' but it was found" )
143
148
144
- asserts .true (env , seen_to_wrap , "expected dependency on metadata for 'to_wrap' but not found" )
149
+ asserts .true (env , seen_to_wrap_metadata , "expected dependency on metadata for 'to_wrap' but not found" )
150
+ asserts .false (env , seen_to_wrap_rlib , "expected no dependency on object for 'to_wrap' but it was found" )
145
151
146
152
return analysistest .end (env )
147
153
148
- custom_rule_test = analysistest .make (_custom_rule_test_impl , attrs = {"generate_metadata" : attr .bool ()}, config_settings = ENABLE_PIPELINING )
154
+ def _rmeta_is_used_when_building_custom_rule_test_impl (ctx ):
155
+ env = analysistest .begin (ctx )
156
+ tut = analysistest .target_under_test (env )
157
+
158
+ # This is the custom rule invocation of rustc.
159
+ rust_action = [act for act in tut .actions if act .mnemonic == "Rustc" ][0 ]
149
160
150
- def _custom_rule_test (generate_metadata , prefix ):
161
+ # We want to check that the action depends on metadata, regardless of ctx.attr.generate_metadata
162
+ seen_to_wrap_rlib = False
163
+ seen_to_wrap_rmeta = False
164
+ for act in rust_action .inputs .to_list ():
165
+ if "libto_wrap" in act .path and act .path .endswith ('.rlib' ):
166
+ seen_to_wrap_rlib = True
167
+ elif "libto_wrap" in act .path and act .path .endswith ('.rmeta' ):
168
+ seen_to_wrap_rmeta = True
169
+
170
+ asserts .true (env , seen_to_wrap_rmeta , "expected dependency on metadata for 'to_wrap' but not found" )
171
+ asserts .false (env , seen_to_wrap_rlib , "expected no dependency on object for 'to_wrap' but it was found" )
172
+
173
+ return analysistest .end (env )
174
+
175
+ rmeta_is_propagated_through_custom_rule_test = analysistest .make (_rmeta_is_propagated_through_custom_rule_test_impl , attrs = {"generate_metadata" : attr .bool ()}, config_settings = ENABLE_PIPELINING )
176
+ rmeta_is_used_when_building_custom_rule_test = analysistest .make (_rmeta_is_used_when_building_custom_rule_test_impl , config_settings = ENABLE_PIPELINING )
177
+
178
+ def _custom_rule_test (generate_metadata , suffix ):
151
179
rust_library (
152
- name = "to_wrap" + prefix ,
180
+ name = "to_wrap" + suffix ,
153
181
crate_name = "to_wrap" ,
154
182
srcs = ["custom_rule_test/to_wrap.rs" ],
155
183
edition = "2021" ,
156
184
)
157
185
wrap (
158
- name = "wrapper" + prefix ,
186
+ name = "wrapper" + suffix ,
159
187
crate_name = "wrapper" ,
160
- target = ":to_wrap" + prefix ,
188
+ target = ":to_wrap" + suffix ,
161
189
generate_metadata = generate_metadata ,
162
190
)
163
191
rust_library (
164
- name = "uses_wrapper" + prefix ,
192
+ name = "uses_wrapper" + suffix ,
165
193
srcs = ["custom_rule_test/uses_wrapper.rs" ],
166
- deps = [":wrapper" + prefix ],
194
+ deps = [":wrapper" + suffix ],
167
195
edition = "2021" ,
168
196
)
169
197
170
- custom_rule_test (
171
- name = "custom_rule_test " + prefix ,
198
+ rmeta_is_propagated_through_custom_rule_test (
199
+ name = "rmeta_is_propagated_through_custom_rule_test " + suffix ,
172
200
generate_metadata = generate_metadata ,
173
201
target_compatible_with = NOT_WINDOWS ,
174
- target_under_test = ":uses_wrapper" + prefix ,
202
+ target_under_test = ":uses_wrapper" + suffix ,
203
+ )
204
+
205
+ rmeta_is_used_when_building_custom_rule_test (
206
+ name = "rmeta_is_used_when_building_custom_rule_test" + suffix ,
207
+ target_compatible_with = NOT_WINDOWS ,
208
+ target_under_test = ":wrapper" + suffix ,
175
209
)
176
210
177
211
def pipelined_compilation_test_suite (name ):
@@ -181,15 +215,17 @@ def pipelined_compilation_test_suite(name):
181
215
name: Name of the macro.
182
216
"""
183
217
_pipelined_compilation_test ()
184
- _custom_rule_test (generate_metadata = True , prefix = "_with_metadata" )
185
- _custom_rule_test (generate_metadata = False , prefix = "_without_metadata" )
218
+ _custom_rule_test (generate_metadata = True , suffix = "_with_metadata" )
219
+ _custom_rule_test (generate_metadata = False , suffix = "_without_metadata" )
186
220
187
221
native .test_suite (
188
222
name = name ,
189
223
tests = [
190
224
":bin_test" ,
191
225
":second_lib_test" ,
192
- ":custom_rule_test_with_metadata" ,
193
- ":custom_rule_test_without_metadata" ,
226
+ ":rmeta_is_propagated_through_custom_rule_test_with_metadata" ,
227
+ ":rmeta_is_propagated_through_custom_rule_test_without_metadata" ,
228
+ ":rmeta_is_used_when_building_custom_rule_test_with_metadata" ,
229
+ ":rmeta_is_used_when_building_custom_rule_test_without_metadata" ,
194
230
],
195
231
)
0 commit comments