blob: b490d530bbbd12690a3779f04911b278580fee17 [file] [log] [blame]
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
#
die() {
echo "$@" 1>&2 ; exit 1
}
arg () {
echo "$1" | sed "s/^${2-[^=]*=}//" | sed "s/:/;/g"
}
# Detect directory information.
source_dir=`cd "\`dirname \"$0\"\`";pwd`
binary_dir=`pwd`
# Choose the default install prefix.
default_prefix="/usr/local/hawq"
# Choose the default dependency install prefix
default_dependency=${DEPENDENCY_INSTALL_PREFIX}
if [ x"${default_dependency}" = x"" ]; then
default_dependency=${default_prefix}
fi
# Display bootstrap usage
usage() {
echo '
Usage: '"$0"' [<options>]
Options: [defaults in brackets after descriptions]
Configuration:
--help print this message
--prefix=PREFIX install files in tree rooted at PREFIX
['"${default_prefix}"']
--dependency=DIRs specify the dependencies at DIRs, separated by colon
['"${default_dependency}"']
--enable-debug enable debug build
--enable-boost force to enable boost
--enable-coverage enable build with code coverage support
--enable-libc++ using libc++ instead of libstdc++, only valid for clang compiler
Dependencies:
c/c++ compiler
GNU make
cmake http://www.cmake.org/
protobuf https://code.google.com/p/protobuf/
kerberos http://web.mit.edu/kerberos/
libgsasl http://www.gnu.org/software/gsasl/
libxml2 http://xmlsoft.org/
libuuid http://sourceforge.net/projects/libuuid/
boost 1.53+ http://www.boost.org/
[boost is not required if c++ compiler is g++ 4.6.0+ or clang++ with stdc++]
Example:
mkdir build
cd build
../bootstrap --prefix=/path/to/install --dependency=/path/to/protobuf:/path/to/kerberos/:path/to/others
make
make install
'
exit 10
}
# Parse arguments
prefix_dirs="${default_prefix}"
dependency_dir="${default_dependency}"
build_type="Release"
enable_boost="OFF"
enable_coverage="OFF"
enable_clang_lib="OFF"
while test $# != 0; do
case "$1" in
--prefix=*) dir=`arg "$1"`
prefix_dirs="$dir";;
--dependency=*) dir=`arg "$1"`
dependency_dir="$dir";;
--enable-debug) enable_build="ON";;
--enable-boost) enable_boost="ON";;
--enable-coverage) enable_coverage="ON";;
--enable-libc++) enable_clang_lib="ON";;
--help) usage ;;
*) die "Unknown option: $1" ;;
esac
shift
done
if [ ${source_dir} = ${binary_dir} ]; then
die "cannot build the project in the source directory! Out-of-source build is enforced!"
fi
# Check clang compiler
if [[ x"${CC}" = x"" ]]; then
CC=gcc
fi
if [[ x"${CXX}" = x"" ]]; then
CXX=g++
fi
c_compiler=`which ${CC}`
cxx_compiler=`which ${CXX}`
cmake=`which cmake`
if [[ ! -x ${c_compiler} ]]; then
die "cannot found c compiler"
fi
if [[ ! -x ${cxx_compiler} ]]; then
die "cannot found cplusplus compiler"
fi
if [[ ! -x ${cmake} ]]; then
die "cannot found cmake"
fi
# Configure
${cmake} -DENABLE_DEBUG=${enable_build} -DCMAKE_INSTALL_PREFIX=${prefix_dirs} \
-DCMAKE_C_COMPILER=${c_compiler} -DCMAKE_CXX_COMPILER=${cxx_compiler} \
-DCMAKE_PREFIX_PATH=${dependency_dir} -DENABLE_BOOST=${enable_boost} \
-DENABLE_COVERAGE=${enable_coverage} -DENABLE_LIBCPP=${enable_clang_lib} ${source_dir} \
|| die "failed to configure the project"
echo 'bootstrap success. Run "make" to build.'