@@ -341,17 +341,17 @@ class Manifest:
341
341
"""
342
342
343
343
package : Package
344
- dependencies : T .Dict [str , Dependency ]
345
- dev_dependencies : T .Dict [str , Dependency ]
346
- build_dependencies : T .Dict [str , Dependency ]
344
+ dependencies : T .Dict [str , Dependency ] = dataclasses . field ( default_factory = dict )
345
+ dev_dependencies : T .Dict [str , Dependency ] = dataclasses . field ( default_factory = dict )
346
+ build_dependencies : T .Dict [str , Dependency ] = dataclasses . field ( default_factory = dict )
347
347
system_dependencies : T .Dict [str , SystemDependency ] = dataclasses .field (init = False )
348
- lib : Library
349
- bin : T .List [Binary ]
350
- test : T .List [Test ]
351
- bench : T .List [Benchmark ]
352
- example : T .List [Example ]
353
- features : T .Dict [str , T .List [str ]]
354
- target : T .Dict [str , T .Dict [str , Dependency ]]
348
+ lib : T . Optional [ Library ] = None
349
+ bin : T .List [Binary ] = dataclasses . field ( default_factory = list )
350
+ test : T .List [Test ] = dataclasses . field ( default_factory = list )
351
+ bench : T .List [Benchmark ] = dataclasses . field ( default_factory = list )
352
+ example : T .List [Example ] = dataclasses . field ( default_factory = list )
353
+ features : T .Dict [str , T .List [str ]] = dataclasses . field ( default_factory = dict )
354
+ target : T .Dict [str , T .Dict [str , Dependency ]] = dataclasses . field ( default_factory = dict )
355
355
356
356
path : str = ''
357
357
@@ -361,12 +361,18 @@ def __post_init__(self) -> None:
361
361
362
362
@classmethod
363
363
def from_raw (cls , raw : raw .Manifest , path : str = '' ) -> Self :
364
+ # Libs are always auto-discovered and there's no other way to handle them,
365
+ # which is unfortunate for reproducability
366
+ pkg = Package .from_raw (raw ['package' ])
367
+ if pkg .autolib and 'lib' not in raw and \
368
+ os .path .exists (os .path .join (path , 'src/lib.rs' )):
369
+ raw ['lib' ] = {}
364
370
return cls (
365
- package = Package . from_raw ( raw [ 'package' ]) ,
371
+ package = pkg ,
366
372
dependencies = {k : Dependency .from_raw (k , v ) for k , v in raw .get ('dependencies' , {}).items ()},
367
373
dev_dependencies = {k : Dependency .from_raw (k , v ) for k , v in raw .get ('dev-dependencies' , {}).items ()},
368
374
build_dependencies = {k : Dependency .from_raw (k , v ) for k , v in raw .get ('build-dependencies' , {}).items ()},
369
- lib = Library .from_raw (raw . get ( 'lib' , {}), raw ['package' ]['name' ]),
375
+ lib = Library .from_raw (raw [ 'lib' ], raw ['package' ]['name' ]) if 'lib' in raw else None ,
370
376
bin = [Binary .from_raw (b ) for b in raw .get ('bin' , {})],
371
377
test = [Test .from_raw (b ) for b in raw .get ('test' , {})],
372
378
bench = [Benchmark .from_raw (b ) for b in raw .get ('bench' , {})],
0 commit comments