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

Reply via email to