summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonny Berndt <ronny@apache.org>2022-12-05 11:10:56 +0100
committerRonny Berndt <ronny@apache.org>2022-12-05 11:48:59 +0100
commitc1b7df8889d756bad36b76eb98d5b64b34ad3fb5 (patch)
tree3536986138b47c26498c54192a45e881a39a4274
parente1b7bd34109601847db0fc2d1f1e56d9a53ae0e9 (diff)
downloadcouchdb-c1b7df8889d756bad36b76eb98d5b64b34ad3fb5.tar.gz
trying to hook into rebar.config.script
-rw-r--r--src/chttpd/src/chttpd_node.erl3
-rw-r--r--src/couch/priv/couch_spidermonkey/couch_spidermonkey.cpp2
-rw-r--r--src/couch/rebar.config.script13
-rw-r--r--src/couch/src/couch_spidermonkey.erl (renamed from src/couch/priv/couch_spidermonkey/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 f0b465135..c77dadd02 100644
--- a/src/couch/rebar.config.script
+++ b/src/couch/rebar.config.script
@@ -194,7 +194,8 @@ IcuEnv = [{"DRV_CFLAGS", "$DRV_CFLAGS -DPIC -O2 -fno-common"},
{"LDFLAGS", "$LDFLAGS"},
{"CFLAGS", "$CFLAGS"}].
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"},
@@ -203,6 +204,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}]},
@@ -210,7 +214,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
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