Commit dcad0a17 authored by Matthias Vallentin's avatar Matthias Vallentin

Add configure script acting as a CMake wrapper.

Since most users are comfortable with autotools-like build procedures, this
script aims at hiding CMake's idiosyncrasies behind a quite simple interface.
Essentially, it populates the initial CMake cache with the necessary variables
before invoking make.
parent e13e5d51
......@@ -12,3 +12,4 @@ libcppa.pc
bin/*
build/*
lib/*
Makefile
#!/bin/sh
# Convenience wrapper for easily viewing/setting options that
# the project's CMake scripts will recognize
command="$0 $*"
# check for `cmake` command
type cmake > /dev/null 2>&1 || {
echo "\
This package requires CMake, please install it first, then you may
use this configure script to access CMake equivalent functionality.\
" >&2;
exit 1;
}
usage="\
Usage: $0 [OPTION]... [VAR=VALUE]...
Build Options:
--builddir=DIR place build files in directory [build]
--generator=GENERATOR CMake generator to use (see cmake --help)
Installation Directories:
--prefix=PREFIX installation directory [/usr/local]
Optional Features:
--enable-debug compile in debugging mode
--enable-perftools use Google perftools
Required Packages in Non-Standard Locations:
--with-boost=PATH path to Boost install root
Influential Environment Variables (only on first invocation
per build directory):
CXX C++ compiler command
CXXFLAGS C++ compiler flags
"
sourcedir="$( cd "$( dirname "$0" )" && pwd )"
# Function to append a CMake cache entry definition to the
# CMakeCacheEntries variable
# $1 is the cache entry variable name
# $2 is the cache entry variable type
# $3 is the cache entry variable value
append_cache_entry () {
CMakeCacheEntries="$CMakeCacheEntries -D $1:$2=$3"
}
# Set defaults
builddir=build
CMakeCacheEntries=""
append_cache_entry CMAKE_INSTALL_PREFIX PATH /usr/local
append_cache_entry ENABLE_DEBUG BOOL false
# parse arguments
while [ $# -ne 0 ]; do
case "$1" in
-*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
*) optarg= ;;
esac
case "$1" in
--help|-h)
echo "${usage}" 1>&2
exit 1
;;
--builddir=*)
builddir=$optarg
;;
--generator=*)
CMakeGenerator="$optarg"
;;
--prefix=*)
append_cache_entry CMAKE_INSTALL_PREFIX PATH $optarg
;;
--enable-debug)
append_cache_entry ENABLE_DEBUG BOOL true
;;
--with-boost=*)
append_cache_entry BOOST_ROOT PATH $optarg
;;
*)
echo "Invalid option '$1'. Try $0 --help to see available options."
exit 1
;;
esac
shift
done
if [ -d $builddir ]; then
# If build directory exists, check if it has a CMake cache
if [ -f $builddir/CMakeCache.txt ]; then
# If the CMake cache exists, delete it so that this configuration
# is not tainted by a previous one
rm -f $builddir/CMakeCache.txt
fi
else
# Create build directory
mkdir -p $builddir
fi
echo "Build Directory : $builddir"
echo "Source Directory: $sourcedir"
cd $builddir
if [ -n "$CMakeGenerator" ]; then
cmake -G "$CMakeGenerator" $CMakeCacheEntries $sourcedir
else
cmake $CMakeCacheEntries $sourcedir
fi
echo "# This is the command used to configure this build" > config.status
echo $command >> config.status
chmod u+x config.status
echo "BUILD=$builddir\n" > $sourcedir/Makefile
read -d '' makefile <<"EOT"
all: configured
@$(MAKE) -C $(BUILD) $@
configured:
@test -d $(BUILD) || ( echo "Error: No build/ directory found. Did you run configure?" && exit 1 )
@test -e $(BUILD)/Makefile || ( echo "Error: No build/Makefile found. Did you run configure?" && exit 1 )
test: configured
@$(MAKE) -C $(BUILD) $@
install:
@$(MAKE) -C $(BUILD) $@
uninstall: configured
@$(MAKE) -C $(BUILD) $@
clean: configured
@$(MAKE) -C $(BUILD) $@
distclean:
rm -rf $(BUILD)
doc:
@$(MAKE) -C $(BUILD) $@
.PHONY : all configured test install uninstall clean distclean doc
EOT
echo "$makefile" >> $sourcedir/Makefile
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment