@@ -10,6 +10,7 @@ fn get_dep_modules(
1010    package_modules :  & AHashSet < String > , 
1111    valid_modules :  & AHashSet < String > , 
1212    package :  & packages:: Package , 
13+     build_state :  & BuildState , 
1314)  -> AHashSet < String >  { 
1415    let  mut  deps = AHashSet :: new ( ) ; 
1516    let  ast_file = package. get_build_path ( ) . join ( ast_file) ; 
@@ -30,6 +31,24 @@ fn get_dep_modules(
3031        panic ! ( "Could not read file {}" ,  ast_file. to_string_lossy( ) ) ; 
3132    } 
3233
34+     // Get the list of allowed dependency packages for this package 
35+     let  allowed_dependencies:  AHashSet < String >  = package
36+         . config 
37+         . bs_dependencies 
38+         . as_ref ( ) 
39+         . unwrap_or ( & vec ! [ ] ) 
40+         . iter ( ) 
41+         . chain ( 
42+             package
43+                 . config 
44+                 . bs_dev_dependencies 
45+                 . as_ref ( ) 
46+                 . unwrap_or ( & vec ! [ ] ) 
47+                 . iter ( ) , 
48+         ) 
49+         . cloned ( ) 
50+         . collect ( ) ; 
51+ 
3352    return  deps
3453        . iter ( ) 
3554        . map ( |dep| { 
@@ -56,11 +75,28 @@ fn get_dep_modules(
5675            } 
5776        } ) 
5877        . filter ( |dep| { 
59-             valid_modules. contains ( dep) 
78+             // First check if the module exists 
79+             let  module_exists = valid_modules. contains ( dep) 
6080                && match  namespace. to_owned ( )  { 
6181                    Some ( namespace)  => !dep. eq ( & namespace) , 
6282                    None  => true , 
83+                 } ; 
84+ 
85+             if  !module_exists { 
86+                 return  false ; 
87+             } 
88+ 
89+             if  let  Some ( dep_module)  = build_state. modules . get ( dep)  { 
90+                 // If the module exists, check if it's in the same package (always allowed) 
91+                 if  dep_module. package_name  == package. name  { 
92+                     return  true ; 
6393                } 
94+ 
95+                 // If it's in a different package, check if that package is a declared dependency 
96+                 return  allowed_dependencies. contains ( & dep_module. package_name ) ; 
97+             } 
98+ 
99+             true 
64100        } ) 
65101        . collect :: < AHashSet < String > > ( ) ; 
66102} 
@@ -84,6 +120,7 @@ pub fn get_deps(build_state: &mut BuildState, deleted_modules: &AHashSet<String>
84120                        package. modules . as_ref ( ) . unwrap ( ) , 
85121                        all_mod, 
86122                        & package, 
123+                         build_state, 
87124                    ) ; 
88125
89126                    if  let  Some ( interface)  = & source_file. interface  { 
@@ -95,6 +132,7 @@ pub fn get_deps(build_state: &mut BuildState, deleted_modules: &AHashSet<String>
95132                            package. modules . as_ref ( ) . unwrap ( ) , 
96133                            all_mod, 
97134                            & package, 
135+                             build_state, 
98136                        ) ) 
99137                    } 
100138                    match  & package. namespace  { 
0 commit comments