Skip to content

Commit

Permalink
chore(configure): be more defensive about SpiderMonkey location
Browse files Browse the repository at this point in the history
The `configure` script does not check whether SpiderMonkey
actually exists at the presumed location.  This may go wrong when
the user has a version different from the default one.  The
mistake is spotted only in build time, indirectly, via missing
header files.  That is too late and it may not be evident for the
user what the problem is.

Add a user-friendly safeguard for Unix-like systems to prevent
this from happening.
  • Loading branch information
pgj committed Jan 18, 2023
1 parent 4b2d3dc commit ef3b387
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
27 changes: 26 additions & 1 deletion configure
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,15 @@ WITH_DOCS=1
ERLANG_MD5="false"
SKIP_DEPS=0

run_erlang() {
erl -noshell -eval "$1" -eval "halt()."
}

COUCHDB_USER="$(whoami 2>/dev/null || echo couchdb)"
SM_VSN=${SM_VSN:-"91"}
ARCH="$(uname -m)"
ERLANG_VER="$(erl -eval 'io:put_chars(erlang:system_info(otp_release)), halt().' -noshell)"
ERLANG_VER="$(run_erlang 'io:put_chars(erlang:system_info(otp_release)).')"
ERLANG_OS="$(run_erlang 'case os:type() of {OS, _} -> io:format("~s~n", [OS]) end.')"

. ${rootdir}/version.mk
COUCHDB_VERSION=${vsn_major}.${vsn_minor}.${vsn_patch}
Expand Down Expand Up @@ -230,6 +235,26 @@ then
exit 1
fi

if [ "${ERLANG_OS}" = "unix" ]
then
case "${SM_VSN}" in
1.8.5)
SM_HEADERS="js"
;;
*) SM_HEADERS="mozjs-${SM_VSN}"
;;
esac

# This list is taken from src/couch/rebar.config.script, please keep them in sync.
if [ ! -d "/usr/include/${SM_HEADERS}" ] && \
[ ! -d "/usr/local/include/${SM_HEADERS}" ] && \
[ ! -d "/opt/homebrew/include/${SM_HEADERS}" ]
then
echo "ERROR: SpiderMonkey ${SM_VSN} is not found. Please specify with --spidermonkey-version."
exit 1
fi
fi

echo "==> configuring couchdb in rel/couchdb.config"
cat > rel/couchdb.config << EOF
% Licensed under the Apache License, Version 2.0 (the "License"); you may not
Expand Down
3 changes: 3 additions & 0 deletions src/couch/rebar.config.script
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,9 @@ ProperConfig = case code:lib_dir(proper) of
_ -> [{d, 'WITH_PROPER'}]
end.

% The include directories (parameters for the `-I` C compiler flag) are
% considered in the `configure` script as a pre-check for their existence.
% Please keep them in sync.
{JS_CFLAGS, JS_LDFLAGS} = case os:type() of
{win32, _} when SMVsn == "1.8.5" ->
{
Expand Down

0 comments on commit ef3b387

Please sign in to comment.