@@ -67,30 +67,44 @@ defmodule Rustler do
67
67
quote bind_quoted: [ opts: opts ] do
68
68
config = Rustler.Compiler . compile_crate ( __MODULE__ , opts )
69
69
70
+ @ load_from { config . otp_app , config . load_path }
71
+
70
72
if config . lib do
71
- @ load_from { config . otp_app , config . load_path }
72
73
@ load_data config . load_data
73
-
74
+ @ before_compile { Rustler , :__before_compile_nif__ }
75
+ else
74
76
@ before_compile Rustler
75
77
end
76
78
end
77
79
end
78
80
79
81
defmacro __before_compile__ ( _env ) do
82
+ quote do
83
+ def rustler_path do
84
+ { otp_app , path } = @ load_from
85
+ Path . join ( :code . priv_dir ( otp_app ) , path )
86
+ end
87
+ end
88
+ end
89
+
90
+ defmacro __before_compile_nif__ ( _env ) do
80
91
quote do
81
92
@ on_load :rustler_init
82
93
94
+ def rustler_path do
95
+ # TODO: Parametrise, and keep all crates in the list
96
+ { otp_app , path } = @ load_from
97
+ Path . join ( :code . priv_dir ( otp_app ) , path )
98
+ end
99
+
83
100
@ doc false
84
101
def rustler_init do
85
102
# Remove any old modules that may be loaded so we don't get
86
103
# :error, {:upgrade, 'Upgrade not supported by this NIF library.'}}
87
104
:code . purge ( __MODULE__ )
88
-
89
- { otp_app , path } = @ load_from
90
-
91
- load_path = Path . join ( :code . priv_dir ( otp_app ) , path ) |> to_charlist ( )
92
-
93
- :erlang . load_nif ( load_path , @ load_data )
105
+ load_path = String . to_charlist ( rustler_path ( ) )
106
+ data = @ load_data
107
+ :erlang . load_nif ( load_path , data )
94
108
end
95
109
end
96
110
end
0 commit comments