diff --git a/src/esqlite3_nif.erl b/src/esqlite3_nif.erl index d757c0b..9e3cf2c 100644 --- a/src/esqlite3_nif.erl +++ b/src/esqlite3_nif.erl @@ -82,12 +82,33 @@ init() -> NifName = "esqlite3_nif", - NifFileName = case code:priv_dir(esqlite) of - {error, bad_name} -> filename:join("priv", NifName); - Dir -> filename:join(Dir, NifName) - end, + NifFileName = filename:join(get_priv_dir(), NifName), ok = erlang:load_nif(NifFileName, 0). +%% @private +get_priv_dir() -> + case code:priv_dir(esqlite) of + {error, bad_name} -> + %% application isn't in path, fall back + case is_escript() of + {true,Escript} -> + io:format("Escript = ~p~n", [Escript]), + Which = code:which(esqlite), + io:format("Which = ~p~n", [Which]), + {Pref,Suf} = lists:split(erlang:length(Escript), Which), + io:format("Pref = ~p~n", [Pref]), + io:format("Suf = ~p~n", [Suf]), + RootDir = filename:dirname(filename:dirname(Pref)), + AppsDir = filename:join(RootDir, "lib"), + io:format("AppsDir = ~p~n", [AppsDir]), + SqDir = filename:dirname(filename:dirname(Suf)), + filename:join([AppsDir, [$.|SqDir], "priv"]); % prepend "." to suffix that starts with "/" + false -> + filename:join("priv", NifName) + end; + Dir -> + Dir + end. %% @doc Open the specified sqlite3 database. %% It is possible to use sqlite's uri filenames to open files.