@@ -364,33 +364,10 @@ pub fn compiler_args(
364364 packages : & Option < & AHashMap < String , packages:: Package > > ,
365365 build_dev_deps : bool ,
366366) -> Vec < String > {
367- let normal_deps = config. bs_dependencies . as_ref ( ) . unwrap_or ( & vec ! [ ] ) . to_owned ( ) ;
368-
369367 let bsc_flags = config:: flatten_flags ( & config. bsc_flags ) ;
370- // don't compile dev-deps yet
371- let dev_deps = if build_dev_deps {
372- config. bs_dev_dependencies . as_ref ( ) . unwrap_or ( & vec ! [ ] ) . to_owned ( )
373- } else {
374- vec ! [ ]
375- } ;
376368
377- let deps = [ dev_deps, normal_deps]
378- . concat ( )
379- . par_iter ( )
380- . map ( |package_name| {
381- let canonicalized_path = if let Some ( packages) = packages {
382- let package = packages. get ( package_name) . expect ( "expect package" ) ;
383- package. path . to_string ( )
384- } else {
385- packages:: read_dependency ( package_name, project_root, project_root, workspace_root)
386- . expect ( "cannot find dep" )
387- } ;
388- vec ! [
389- "-I" . to_string( ) ,
390- packages:: get_ocaml_build_path( & canonicalized_path) ,
391- ]
392- } )
393- . collect :: < Vec < Vec < String > > > ( ) ;
369+ let dependency_paths =
370+ get_dependency_paths ( config, project_root, workspace_root, packages, build_dev_deps) ;
394371
395372 let module_name = helpers:: file_path_to_module_name ( file_path, & config. get_namespace ( ) ) ;
396373
@@ -476,7 +453,7 @@ pub fn compiler_args(
476453 namespace_args,
477454 read_cmi_args,
478455 vec![ "-I" . to_string( ) , "../ocaml" . to_string( ) ] ,
479- deps . concat( ) ,
456+ dependency_paths . concat( ) ,
480457 uncurried_args,
481458 bsc_flags. to_owned( ) ,
482459 warning_args,
@@ -497,6 +474,83 @@ pub fn compiler_args(
497474 . concat ( )
498475}
499476
477+ #[ derive( Debug , Clone , PartialEq , Eq , Hash ) ]
478+ enum DependentPackage {
479+ Normal ( String ) ,
480+ Dev ( String ) ,
481+ }
482+
483+ impl DependentPackage {
484+ fn name ( & self ) -> & str {
485+ match self {
486+ Self :: Normal ( name) => name,
487+ Self :: Dev ( name) => name,
488+ }
489+ }
490+
491+ fn is_dev ( & self ) -> bool {
492+ match self {
493+ Self :: Normal ( _) => false ,
494+ Self :: Dev ( _) => true ,
495+ }
496+ }
497+ }
498+
499+ fn get_dependency_paths (
500+ config : & config:: Config ,
501+ project_root : & str ,
502+ workspace_root : & Option < String > ,
503+ packages : & Option < & AHashMap < String , packages:: Package > > ,
504+ build_dev_deps : bool ,
505+ ) -> Vec < Vec < String > > {
506+ let normal_deps = config
507+ . bs_dependencies
508+ . clone ( )
509+ . unwrap_or_default ( )
510+ . into_iter ( )
511+ . map ( DependentPackage :: Normal )
512+ . collect ( ) ;
513+ let dev_deps = if build_dev_deps {
514+ config
515+ . bs_dev_dependencies
516+ . clone ( )
517+ . unwrap_or_default ( )
518+ . into_iter ( )
519+ . map ( DependentPackage :: Dev )
520+ . collect ( )
521+ } else {
522+ vec ! [ ]
523+ } ;
524+
525+ [ dev_deps, normal_deps]
526+ . concat ( )
527+ . par_iter ( )
528+ . filter_map ( |dependent_package| {
529+ let package_name = dependent_package. name ( ) ;
530+ let dependency_path = if let Some ( packages) = packages {
531+ packages. get ( package_name) . map ( |package| package. path . to_string ( ) )
532+ } else {
533+ packages:: read_dependency ( package_name, project_root, project_root, workspace_root) . ok ( )
534+ }
535+ . map ( |canonicalized_path| {
536+ vec ! [
537+ "-I" . to_string( ) ,
538+ packages:: get_ocaml_build_path( & canonicalized_path) ,
539+ ]
540+ } ) ;
541+
542+ if !dependent_package. is_dev ( ) && dependency_path. is_none ( ) {
543+ panic ! (
544+ "Expected to find dependent package {} of {}" ,
545+ package_name, config. name
546+ ) ;
547+ }
548+
549+ dependency_path
550+ } )
551+ . collect :: < Vec < Vec < String > > > ( )
552+ }
553+
500554fn compile_file (
501555 package : & packages:: Package ,
502556 root_package : & packages:: Package ,
0 commit comments