summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Lehnardt <jan@apache.org>2021-03-14 13:06:57 +0100
committerJan Lehnardt <jan@apache.org>2021-03-15 11:23:39 +0100
commitde511fb9f5c5d8d093d6b1f565e06a1e2b6558f2 (patch)
tree2df0eb62bc66503a0c6e93390159da9749878ac0
parent94766ce8291339d4ce36614cb9fe9d97470924e3 (diff)
downloadcouchdb-de511fb9f5c5d8d093d6b1f565e06a1e2b6558f2.tar.gz
feat: somewhat hacky version detection
-rw-r--r--rebar.config.script5
-rw-r--r--src/chttpd/src/chttpd.erl14
-rw-r--r--src/couch/include/couch_db.hrl10
-rw-r--r--src/couch/rebar.config.script3
-rw-r--r--src/couch/src/couch_httpd.erl4
-rw-r--r--src/mango/rebar.config.script5
6 files changed, 24 insertions, 17 deletions
diff --git a/rebar.config.script b/rebar.config.script
index 532906c60..463d58cb5 100644
--- a/rebar.config.script
+++ b/rebar.config.script
@@ -92,6 +92,9 @@ case VerList of
_ -> ok
end.
+[OptMajorVersion|_] = VerList.
+OtpMajorVersion20 = case OptMajorVersion of 20 -> "true"; _ -> "false" end.
+os:putenv("COUCHDB_OTP_MAJOR_VERSION_20", OtpMajorVersion20).
% Set the path to the configuration environment generated
% by `./configure`.
@@ -200,7 +203,7 @@ AddConfig = [
{deps, lists:map(MakeDep, DepDescs ++ OptionalDeps)},
{sub_dirs, SubDirs},
{lib_dirs, ["src"]},
- {erl_opts, [{i, "../"} | ErlOpts]},
+ {erl_opts, [{i, "../"}, {d, 'OTP_MAJOR_VSN_20', os:getenv("COUCHDB_OTP_MAJOR_VERSION_20")}, verbose] ++ ErlOpts},
{eunit_opts, [verbose, {report,{eunit_surefire,[{dir,"."}]}}]},
{plugins, [eunit_plugin]},
{dialyzer, [
diff --git a/src/chttpd/src/chttpd.erl b/src/chttpd/src/chttpd.erl
index a677c191a..f2ac5c897 100644
--- a/src/chttpd/src/chttpd.erl
+++ b/src/chttpd/src/chttpd.erl
@@ -268,15 +268,15 @@ before_request(HttpReq) ->
try
chttpd_stats:init(),
chttpd_plugin:before_request(HttpReq)
- catch ?STACKTRACE(Tag, Error, Stack)
- {error, catch_error(HttpReq, Tag, Error, Stack)}
+ catch ?STACKTRACE(ErrorType, Error, Stack)
+ {error, catch_error(HttpReq, ErrorType, Error, Stack)}
end.
after_request(HttpReq, HttpResp0) ->
{ok, HttpResp1} =
try
chttpd_plugin:after_request(HttpReq, HttpResp0)
- catch ?STACKTRACE(_Tag, Error, Stack)
+ catch ?STACKTRACE(_ErrorType, Error, Stack)
send_error(HttpReq, {Error, nil, Stack}),
{ok, HttpResp0#httpd_resp{status = aborted}}
end,
@@ -309,8 +309,8 @@ process_request(#httpd{mochi_req = MochiReq} = HttpReq) ->
Response ->
{HttpReq, Response}
end
- catch ?STACKTRACE(Tag, Error, Stack)
- {HttpReq, catch_error(HttpReq, Tag, Error, Stack)}
+ catch ?STACKTRACE(ErrorType, Error, Stack)
+ {HttpReq, catch_error(HttpReq, ErrorType, Error, Stack)}
end.
handle_req_after_auth(HandlerKey, HttpReq) ->
@@ -320,8 +320,8 @@ handle_req_after_auth(HandlerKey, HttpReq) ->
AuthorizedReq = chttpd_auth:authorize(possibly_hack(HttpReq),
fun chttpd_auth_request:authorize_request/1),
{AuthorizedReq, HandlerFun(AuthorizedReq)}
- catch ?STACKTRACE(Tag, Error, Stack)
- {HttpReq, catch_error(HttpReq, Tag, Error, Stack)}
+ catch ?STACKTRACE(ErrorType, Error, Stack)
+ {HttpReq, catch_error(HttpReq, ErrorType, Error, Stack)}
end.
catch_error(_HttpReq, throw, {http_head_abort, Resp}, _Stack) ->
diff --git a/src/couch/include/couch_db.hrl b/src/couch/include/couch_db.hrl
index 61e5f73d7..26e715761 100644
--- a/src/couch/include/couch_db.hrl
+++ b/src/couch/include/couch_db.hrl
@@ -232,16 +232,16 @@
% end,
% for features specific to Erlang/OTP version 20.x (and later versions)
--ifdef(ERLANG_OTP_VERSION_20).
+-ifdef(OTP_MAJOR_VSN_20).
-else.
-define(ERLANG_OTP_VERSION_21_FEATURES, true).
-endif.
% Get the stacktrace in a way that is backwards compatible
-ifdef(ERLANG_OTP_VERSION_21_FEATURES).
--define(STACKTRACE(ErrorType, Error, ErrorStackTrace),
- ErrorType:Error:ErrorStackTrace ->).
+-define(STACKTRACE(ErrorType, Error, Stack),
+ ErrorType:Error:Stack ->).
-else.
--define(STACKTRACE(ErrorType, Error, ErrorStackTrace),
+-define(STACKTRACE(ErrorType, Error, Stack),
ErrorType:Error ->
- ErrorStackTrace = erlang:get_stacktrace(),).
+ Stack = erlang:get_stacktrace(),).
-endif.
diff --git a/src/couch/rebar.config.script b/src/couch/rebar.config.script
index 5c9e6335f..0125615d7 100644
--- a/src/couch/rebar.config.script
+++ b/src/couch/rebar.config.script
@@ -215,7 +215,8 @@ AddConfig = [
{erl_opts, PlatformDefines ++ [
{d, 'COUCHDB_VERSION', Version},
{d, 'COUCHDB_GIT_SHA', GitSha},
- {i, "../"}
+ {i, "../"},
+ {d, 'OTP_MAJOR_VSN_20', os:getenv("COUCHDB_OTP_MAJOR_VERSION_20")}
] ++ MD5Config ++ ProperConfig},
{port_env, PortEnvOverrides},
{eunit_compile_opts, PlatformDefines}
diff --git a/src/couch/src/couch_httpd.erl b/src/couch/src/couch_httpd.erl
index 6c0fd8761..a1798b705 100644
--- a/src/couch/src/couch_httpd.erl
+++ b/src/couch/src/couch_httpd.erl
@@ -375,9 +375,9 @@ handle_request_int(MochiReq, DefaultFun,
couch_log:error("function_clause error in HTTP request",[]),
couch_log:info("Stacktrace: ~p",[Stack]),
send_error(HttpReq, function_clause);
- ?STACKTRACE(Tag, Error, Stack)
+ ?STACKTRACE(ErrorType, Error, Stack)
couch_log:error("Uncaught error in HTTP request: ~p",
- [{Tag, Error}]),
+ [{ErrorType, Error}]),
couch_log:info("Stacktrace: ~p",[Stack]),
send_error(HttpReq, Error)
end,
diff --git a/src/mango/rebar.config.script b/src/mango/rebar.config.script
index d62cc69db..a9da9b18b 100644
--- a/src/mango/rebar.config.script
+++ b/src/mango/rebar.config.script
@@ -18,7 +18,10 @@ if not HaveDreyfus -> CONFIG; true ->
{erl_opts, Opts} -> Opts;
false -> []
end,
- NewOpts = [{d, 'HAVE_DREYFUS'} | CurrOpts],
+ NewOpts = [
+ {d, 'HAVE_DREYFUS'},
+ {d, 'OTP_MAJOR_VSN_20', os:getenv("COUCHDB_OTP_MAJOR_VERSION_20")}
+ ] ++ CurrOpts,
lists:keystore(erl_opts, 1, CONFIG, {erl_opts, NewOpts})
end.