File tree Expand file tree Collapse file tree 2 files changed +38
-6
lines changed Expand file tree Collapse file tree 2 files changed +38
-6
lines changed Original file line number Diff line number Diff line change @@ -13,7 +13,6 @@ rust-version = "1.70"
1313big_integer  = [" dep:num-bigint" 
1414default  = [" nif_version_2_15" 
1515derive  = []
16- alternative_nif_init_name  = []
1716allocator  = []
1817nif_version_2_14  = []
1918nif_version_2_15  = [" nif_version_2_14" 
Original file line number Diff line number Diff line change @@ -136,25 +136,58 @@ impl From<InitMacroInput> for proc_macro2::TokenStream {
136136            } 
137137        } ; 
138138
139+         let  nif_init_name = { 
140+             let  lib_name = std:: env:: var ( "CARGO_CRATE_NAME" ) . unwrap ( ) ; 
141+             format ! ( "{lib_name}_nif_init" ) 
142+         } ; 
143+ 
144+         let  nif_init_name = Ident :: new ( & nif_init_name,  Span :: call_site ( ) ) ; 
145+ 
146+         let  should_generate_primary_nif = std:: env:: var ( "RUSTLER_PRIMARY_NIF_INIT" ) . is_ok ( ) 
147+             || std:: env:: var ( "CARGO_PRIMARY_PACKAGE" ) . is_ok ( ) ; 
148+ 
149+         let  maybe_primary_nif_init = if  should_generate_primary_nif { 
150+             quote !  { 
151+                 #[ cfg( not( windows) ) ] 
152+                 #[ no_mangle] 
153+                 fn  nif_init( )  -> * const  :: rustler:: codegen_runtime:: DEF_NIF_ENTRY  { 
154+                     #nif_init_name( ) 
155+                 } 
156+ 
157+                 #[ cfg( windows) ] 
158+                 #[ no_mangle] 
159+                 fn  nif_init( callbacks:  * mut  :: rustler:: codegen_runtime:: DynNifCallbacks )  -> * const  :: rustler:: codegen_runtime:: DEF_NIF_ENTRY  { 
160+                     #nif_init_name( callbacks) 
161+                 } 
162+             } 
163+         }  else  { 
164+             quote ! ( ) 
165+         } ; 
166+ 
139167        quote !  { 
140168            #maybe_warning
141169
142-             #[ cfg( unix ) ] 
170+             #[ cfg( not ( windows ) ) ] 
143171            #[ no_mangle] 
144-             extern "C"  fn  nif_init( )  -> * const  rustler:: codegen_runtime:: DEF_NIF_ENTRY  { 
145-                 unsafe  {  rustler:: codegen_runtime:: internal_write_symbols( )  } ; 
172+             extern "C"  fn  #nif_init_name( )  -> * const  :: rustler:: codegen_runtime:: DEF_NIF_ENTRY  { 
173+                 unsafe  { 
174+                     :: rustler:: codegen_runtime:: internal_write_symbols( ) 
175+                 } 
176+ 
146177                #inner
147178            } 
148179
149180            #[ cfg( windows) ] 
150181            #[ no_mangle] 
151-             extern "C"  fn  nif_init ( callbacks:  * mut  rustler:: codegen_runtime:: DynNifCallbacks )  -> * const  rustler:: codegen_runtime:: DEF_NIF_ENTRY  { 
182+             extern "C"  fn  #nif_init_name ( callbacks:  * mut  :: rustler:: codegen_runtime:: DynNifCallbacks )  -> * const  :: rustler:: codegen_runtime:: DEF_NIF_ENTRY  { 
152183                unsafe  { 
153-                     rustler:: codegen_runtime:: internal_set_symbols( * callbacks) ; 
184+                     :: rustler:: codegen_runtime:: internal_set_symbols( * callbacks) ; 
154185                } 
155186
156187                #inner
157188            } 
189+ 
190+             #maybe_primary_nif_init
158191        } 
159192    } 
160193} 
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments