diff options
-rw-r--r-- | priv/templates/basicnif.erl | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/priv/templates/basicnif.erl b/priv/templates/basicnif.erl index 5f1ce11..342a5d3 100644 --- a/priv/templates/basicnif.erl +++ b/priv/templates/basicnif.erl @@ -5,24 +5,30 @@ -on_load(init/0). +-define(nif_stub, nif_stub_error(?LINE)). +nif_stub_error(Line) -> + erlang:nif_error({nif_not_loaded,module,?MODULE,line,Line}). + -ifdef(TEST). -include_lib("eunit/include/eunit.hrl"). -endif. init() -> - case code:priv_dir({{module}}) of - {error, bad_name} -> - SoName = filename:join("../priv", {{module}}); - Dir -> - SoName = filename:join(Dir, {{module}}) - end, - erlang:load_nif(SoName, 0). + PrivDir = case code:priv_dir(?MODULE) of + {error, bad_name} -> + EbinDir = filename:dirname(code:which(?MODULE)), + AppPath = filename:dirname(EbinDir), + filename:join(AppPath, "priv"); + Path -> + Path + end, + erlang:load_nif(filename:join(PrivDir, ?MODULE), 0). new() -> - "NIF library not loaded". + ?nif_stub. myfunction(Ref) -> - "NIF library not loaded". + ?nif_stub. %% =================================================================== %% EUnit tests @@ -31,6 +37,6 @@ myfunction(Ref) -> basic_test() -> {ok, Ref} = new(), - ok = myfunction(Ref). + ?assertEqual(ok, myfunction(Ref)). -endif. |