Skip to content

Commit 4e058cc

Browse files
bonzinidcbaker
authored andcommitted
cargo: fix path and crate-type for executable targets
Path cannot be empty and according to Cargo documentation these are always of bin type. Signed-off-by: Paolo Bonzini <[email protected]>
1 parent fe25a14 commit 4e058cc

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

mesonbuild/cargo/manifest.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ class BuildTarget(T.Generic[_R]):
220220

221221
name: str
222222
path: str
223-
crate_type: T.List[CRATE_TYPE] = dataclasses.field(default_factory=lambda: ['lib'])
223+
crate_type: T.List[CRATE_TYPE]
224224

225225
# https://doc.rust-lang.org/cargo/reference/cargo-targets.html#the-test-field
226226
# True for lib, bin, test
@@ -274,6 +274,13 @@ class Binary(BuildTarget['raw.BuildTarget']):
274274
"""Representation of a Cargo Bin Entry."""
275275

276276
doc: bool = True
277+
crate_type: T.List[CRATE_TYPE] = dataclasses.field(default_factory=lambda: ['bin'])
278+
279+
@classmethod
280+
def from_raw(cls, raw: raw.BuildTarget) -> Self:
281+
if 'path' not in raw:
282+
raw['path'] = os.path.join('bin', raw['name'] + '.rs')
283+
return super().from_raw(raw)
277284

278285

279286
@dataclasses.dataclass
@@ -282,20 +289,42 @@ class Test(BuildTarget['raw.BuildTarget']):
282289
"""Representation of a Cargo Test Entry."""
283290

284291
bench: bool = True
292+
crate_type: T.List[CRATE_TYPE] = dataclasses.field(default_factory=lambda: ['bin'])
293+
294+
@classmethod
295+
def from_raw(cls, raw: raw.BuildTarget) -> Self:
296+
if 'path' not in raw:
297+
raw['path'] = os.path.join('tests', raw['name'] + '.rs')
298+
return super().from_raw(raw)
285299

286300
@dataclasses.dataclass
287301
class Benchmark(BuildTarget['raw.BuildTarget']):
288302

289303
"""Representation of a Cargo Benchmark Entry."""
290304

291305
test: bool = True
306+
crate_type: T.List[CRATE_TYPE] = dataclasses.field(default_factory=lambda: ['bin'])
307+
308+
@classmethod
309+
def from_raw(cls, raw: raw.BuildTarget) -> Self:
310+
if 'path' not in raw:
311+
raw['path'] = os.path.join('benches', raw['name'] + '.rs')
312+
return super().from_raw(raw)
292313

293314

294315
@dataclasses.dataclass
295316
class Example(BuildTarget['raw.BuildTarget']):
296317

297318
"""Representation of a Cargo Example Entry."""
298319

320+
crate_type: T.List[CRATE_TYPE] = dataclasses.field(default_factory=lambda: ['bin'])
321+
322+
@classmethod
323+
def from_raw(cls, raw: raw.BuildTarget) -> Self:
324+
if 'path' not in raw:
325+
raw['path'] = os.path.join('examples', raw['name'] + '.rs')
326+
return super().from_raw(raw)
327+
299328

300329
@dataclasses.dataclass
301330
class Manifest:

0 commit comments

Comments
 (0)