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