#!/bin/sh -e # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. # next steps: # try running this, figure out what to do with the vars in the generated files # in the bottom # cd into this script’s directory rootdir="$(cd "${0%/*}" 2>/dev/null; echo "$PWD")" basename=`basename $0` PACKAGE_AUTHOR_NAME="The Apache Software Foundation" # TEST=0 WITH_CURL="false" WITH_PROPER="true" WITH_FAUXTON=1 WITH_DOCS=1 ERLANG_MD5="false" SKIP_DEPS=0 COUCHDB_USER="$(whoami 2>/dev/null || echo couchdb)" SM_VSN="1.8.5" ARCH="$(uname -m)" . ${rootdir}/version.mk COUCHDB_VERSION=${vsn_major}.${vsn_minor}.${vsn_patch} display_help () { cat << EOF Usage: $basename [OPTION] The $basename command is responsible for generating the build system for Apache CouchDB. Options: -h | --help display a short help message and exit -u | --user USER set the username to run as (defaults to $COUCHDB_USER) -c | --with-curl request that couchjs is linked to cURL (default false) --disable-fauxton do not build Fauxton --disable-docs do not build any documentation or manpages --erlang-md5 use erlang for md5 hash operations --dev alias for --with-curl --disable-docs --disable-fauxton --spidermonkey-version VSN specify the version of SpiderMonkey to use (defaults to $SM_VSN) --skip-deps do not update erlang dependencies --rebar=PATH use rebar by specified path (version >=2.6.0 && <3.0 required) EOF } parse_opts() { while :; do case $1 in -h|--help) display_help exit ;; --with-curl|-c) WITH_CURL="true" shift continue ;; --without-proper) WITH_PROPER="false" shift continue ;; --disable-fauxton) WITH_FAUXTON=0 shift continue ;; --disable-docs) WITH_DOCS=0 shift continue ;; --erlang-md5) ERLANG_MD5="true" shift continue ;; --key-manager) if [ -n "$2" ]; then eval AEGIS_KEY_MANAGER=$2 shift 2 continue else printf 'ERROR: "--key-manager" requires a non-empty argument.\n' >&2 exit 1 fi ;; --key-manager=?*) eval AEGIS_KEY_MANAGER=${1#*=} ;; --key-manager=) printf 'ERROR: "--key-manager" requires a non-empty argument.\n' >&2 exit 1 ;; --dev) WITH_DOCS=0 WITH_FAUXTON=0 WITH_CURL="true" shift continue ;; --skip-deps) SKIP_DEPS=1 shift continue ;; --rebar) if [ -x "$2" ]; then version=`$2 --version 2> /dev/null | grep -o "2\.[6-9]\.[0-9]"` if [ $? -ne 0 ]; then printf 'Rebar >=2.6.0 and <3.0.0 required' >&2 exit 1 fi eval REBAR=$2 shift 2 continue else printf 'ERROR: "--rebar" requires valid path to executable.\n' >&2 exit 1 fi ;; --user|-u) if [ -n "$2" ]; then eval COUCHDB_USER=$2 shift 2 continue else printf 'ERROR: "--user" requires a non-empty argument.\n' >&2 exit 1 fi ;; --user=?*) eval COUCHDB_USER=${1#*=} ;; --user=) printf 'ERROR: "--user" requires a non-empty argument.\n' >&2 exit 1 ;; --spidermonkey-version) if [ -n "$2" ]; then eval SM_VSN=$2 shift 2 continue else printf 'ERROR: "--spidermonkey-version" requires a non-empty argument.\n' >&2 exit 1 fi ;; --spidermonkey-version=?*) eval SM_VSN=${1#*=} ;; --spidermonkey-version=) printf 'ERROR: "--spidermonkey-version" requires a non-empty argument.\n' >&2 exit 1 ;; --) # End of options shift break ;; -?*) echo "WARNING: Unknown option '$1', ignoring" >&2 shift ;; *) # Done break esac shift done } parse_opts $@ if [ "${ARCH}" = "aarch64" ] && [ "${SM_VSN}" != "1.8.5" ] then echo "ERROR: SpiderMonkey 60 is known broken on ARM 64 (aarch64). Use 1.8.5 instead." exit 1 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 % use this file except in compliance with the License. You may obtain a copy of % the License at % % http://www.apache.org/licenses/LICENSE-2.0 % % Unless required by applicable law or agreed to in writing, software % distributed under the License is distributed on an "AS IS" BASIS, WITHOUT % WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the % License for the specific language governing permissions and limitations under % the License. % % The contents of this file are auto-generated by configure % {package_author_name, "$PACKAGE_AUTHOR_NAME"}. {prefix, "."}. {data_dir, "./data"}. {view_index_dir, "./data"}. {log_file, "$LOG_FILE"}. {fauxton_root, "./share/www"}. {user, "$COUCHDB_USER"}. {spidermonkey_version, "$SM_VSN"}. {node_name, "-name couchdb@127.0.0.1"}. {cluster_port, 5984}. {backend_port, 5986}. EOF cat > install.mk << EOF # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. # # The contents of this file are auto-generated by configure # package_author_name = $PACKAGE_AUTHOR_NAME with_fauxton = $WITH_FAUXTON with_docs = $WITH_DOCS user = $COUCHDB_USER spidermonkey_version = $SM_VSN EOF cat > $rootdir/config.erl << EOF {with_curl, $WITH_CURL}. {with_proper, $WITH_PROPER}. {erlang_md5, $ERLANG_MD5}. {aegis_key_manager, "$AEGIS_KEY_MANAGER"}. {spidermonkey_version, "$SM_VSN"}. EOF install_local_rebar() { if [ ! -x "${rootdir}/bin/rebar" ]; then if [ ! -d "${rootdir}/src/rebar" ]; then git clone --depth 1 https://github.com/apache/couchdb-rebar.git ${rootdir}/src/rebar fi make -C ${rootdir}/src/rebar mv ${rootdir}/src/rebar/rebar ${rootdir}/bin/rebar make -C ${rootdir}/src/rebar clean fi } install_local_emilio() { if [ ! -x "${rootdir}/bin/emilio" ]; then if [ ! -d "${rootdir}/src/emilio" ]; then git clone --depth 1 https://github.com/cloudant-labs/emilio ${rootdir}/src/emilio fi cd ${rootdir}/src/emilio && ${REBAR} compile escriptize; cd ${rootdir} mv ${rootdir}/src/emilio/emilio ${rootdir}/bin/emilio chmod +x ${rootdir}/bin/emilio cd ${rootdir}/src/emilio && ${REBAR} clean; cd ${rootdir} fi } if [ -z "${REBAR}" ]; then install_local_rebar REBAR=${rootdir}/bin/rebar fi install_local_emilio # only update dependencies, when we are not in a release tarball if [ -d .git -a $SKIP_DEPS -ne 1 ]; then echo "==> updating dependencies" ${REBAR} get-deps update-deps fi # External repos frequently become integrated with the primary repo, # resulting in obsolete .git directories, and possible confusion. # It is usually a good idea to delete these .git directories. for path in $(find src -name .git -type d); do git ls-files --error-unmatch $(dirname $path) > /dev/null 2>&1 && \ echo "WARNING unexpected .git directory $path" done echo "You have configured Apache CouchDB, time to relax. Relax."