This is an automated email from the ASF dual-hosted git repository. ronny pushed a commit to branch spidermonkey_version_nif in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit b55c8ea7ec2fdb793935ee0182bd1cbd24bda7bf Author: Ronny Berndt <[email protected]> AuthorDate: Mon Dec 5 11:10:56 2022 +0100 trying to hook into rebar.config.script --- src/chttpd/src/chttpd_node.erl | 3 ++- src/couch/priv/couch_spidermonkey/couch_spidermonkey.cpp | 2 +- src/couch/rebar.config.script | 13 +++++++++++-- .../{priv/couch_spidermonkey => src}/couch_spidermonkey.erl | 4 +++- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/chttpd/src/chttpd_node.erl b/src/chttpd/src/chttpd_node.erl index a63236db7..193db3d4d 100644 --- a/src/chttpd/src/chttpd_node.erl +++ b/src/chttpd/src/chttpd_node.erl @@ -56,7 +56,8 @@ handle_node_req(#httpd{method = 'GET', path_parts = [_, _Node, <<"_versions">>]} }, javascript_engine => #{ name => <<"spidermonkey">>, - version => couch_server:get_spidermonkey_version() + version => couch_server:get_spidermonkey_version(), + version_dyn => list_to_binary(couch_spidermonkey:get_spidermonkey_version()) } }); handle_node_req(#httpd{path_parts = [_, _Node, <<"_versions">>]} = Req) -> diff --git a/src/couch/priv/couch_spidermonkey/couch_spidermonkey.cpp b/src/couch/priv/couch_spidermonkey/couch_spidermonkey.cpp index 15b1e1d71..b33cd8d6f 100644 --- a/src/couch/priv/couch_spidermonkey/couch_spidermonkey.cpp +++ b/src/couch/priv/couch_spidermonkey/couch_spidermonkey.cpp @@ -32,7 +32,7 @@ get_spidermonkey_version(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) //ignore "JavaScript-C" string result = FULLVERSION.substr(js_len, full_len-js_len); - return enif_make_string(env, result.c_str(), ERL_NIF_LATIN1); + return enif_make_binary(env, result.c_str()); } static ErlNifFunc nif_functions[] = { diff --git a/src/couch/rebar.config.script b/src/couch/rebar.config.script index 8d6d7d559..27d19c6c0 100644 --- a/src/couch/rebar.config.script +++ b/src/couch/rebar.config.script @@ -192,7 +192,8 @@ end. IcuEnv = [{"DRV_CFLAGS", "$DRV_CFLAGS -DPIC -O2 -fno-common"}, {"DRV_LDFLAGS", "$DRV_LDFLAGS -lm -licuuc -licudata -licui18n -lpthread"}]. IcuDarwinEnv = [{"CFLAGS", "-DXP_UNIX -I/usr/local/opt/icu4c/include -I/opt/homebrew/opt/icu4c/include"}, - {"LDFLAGS", "-L/usr/local/opt/icu4c/lib -L/opt/homebrew/opt/icu4c/lib"}]. + {"LDFLAGS", "-L/usr/local/Cellar/spidermonkey/91.13.0_1/lib -L/usr/local/opt/icu4c/lib -L/opt/homebrew/opt/icu4c/lib"}, + {"CXXFLAGS", "-I/usr/local/Cellar/spidermonkey/91.13.0_1/include"}]. IcuBsdEnv = [{"CFLAGS", "-DXP_UNIX -I/usr/local/include"}, {"LDFLAGS", "-L/usr/local/lib"}]. IcuWinEnv = [{"CFLAGS", "$DRV_CFLAGS /DXP_WIN"}, @@ -201,6 +202,9 @@ IcuWinEnv = [{"CFLAGS", "$DRV_CFLAGS /DXP_WIN"}, ComparePath = "priv/couch_ejson_compare.so". CompareSrc = ["priv/couch_ejson_compare/*.c"]. +SpiderPath = "priv/couch_spidermonkey.so". +SpiderSrc = ["priv/couch_spidermonkey/*.cpp"]. + BaseSpecs = [ %% couchjs {".*", CouchJSPath, CouchJSSrc, [{env, CouchJSEnv}]}, @@ -208,7 +212,12 @@ BaseSpecs = [ {"darwin", ComparePath, CompareSrc, [{env, IcuEnv ++ IcuDarwinEnv}]}, {"linux", ComparePath, CompareSrc, [{env, IcuEnv}]}, {"bsd", ComparePath, CompareSrc, [{env, IcuEnv ++ IcuBsdEnv}]}, - {"win32", ComparePath, CompareSrc, [{env, IcuWinEnv}]} + {"win32", ComparePath, CompareSrc, [{env, IcuWinEnv}]}, + % couch_spidermonkey + {"darwin", SpiderPath, SpiderSrc, [{env, IcuEnv ++ IcuDarwinEnv}]}, + {"linux", SpiderPath, SpiderSrc, [{env, IcuEnv}]}, + {"bsd", SpiderPath, SpiderSrc, [{env, IcuEnv ++ IcuBsdEnv}]}, + {"win32", SpiderPath, SpiderSrc, [{env, IcuWinEnv}]} ]. SpawnSpec = [ diff --git a/src/couch/priv/couch_spidermonkey/couch_spidermonkey.erl b/src/couch/src/couch_spidermonkey.erl similarity index 69% rename from src/couch/priv/couch_spidermonkey/couch_spidermonkey.erl rename to src/couch/src/couch_spidermonkey.erl index 801d46111..c97cb3f26 100644 --- a/src/couch/priv/couch_spidermonkey/couch_spidermonkey.erl +++ b/src/couch/src/couch_spidermonkey.erl @@ -13,7 +13,9 @@ -on_load(init/0). init() -> - ok = erlang:load_nif("./couch_spidermonkey", 0). + Dir = code:priv_dir(couch), + couch_log:info("Priv-Dir: ~p", [filename:join(Dir, ?MODULE)]), + ok = erlang:load_nif(filename:join(Dir, ?MODULE), 0). get_spidermonkey_version() -> exit(nif_library_not_loaded). \ No newline at end of file
