#!/bin/sh msg() { echo "configure: $1" } err() { echo "configure: error: $1" exit 1 } need_cmd() { if which $1 >/dev/null 2>&1 then msg "found $1" else err "need $1" fi } make_dir() { if [ ! -d $1 ] then msg "mkdir -p $1" mkdir -p $1 fi } copy() { msg "cp $1 $1" cp $1 $2 } putvar() { local T eval T=\$$1 eval TLEN=\${#$1} if [ $TLEN -gt 35 ] then printf "configure: %-20s := %.35s ...\n" $1 "$T" else printf "configure: %-20s := %s\n" $1 "$T" fi printf "%-20s := %s\n" $1 "$T" >>config.mk } probe() { local V=$1 local P=$2 local T T=$(which $P 2>&1) if [ $? -ne 0 ] then T="" fi eval $V=\$T putvar $V } probe_need() { local V=$1 local P=$2 probe $V $P eval VV=\$$V if [ -z "$VV" ] then err "required program '$P' not found" fi } msg "looking for configure programs" need_cmd mkdir need_cmd printf need_cmd cut need_cmd grep need_cmd xargs need_cmd cp need_cmd find need_cmd uname need_cmd date msg "inspecting environment" CFG_OSTYPE=$(uname -s) CFG_CPUTYPE=$(uname -m) case $CFG_OSTYPE in MINGW*) CFG_SRC_DIR=${0%${0##*\\}} CFG_BUILD_DIR=$PWD ;; *) CFG_SRC_DIR=${0%${0##*/}} CFG_BUILD_DIR=$PWD ;; esac msg "recreating config.mk" echo '' >config.mk msg "making directories" for i in \ doc \ boot/fe boot/me boot/be boot/driver boot/util \ rt rt/isaac rt/bigint rt/sync rt/test \ rustllvm \ stage0 stage1 stage2 \ test/run-pass test/run-fail test/compile-fail \ test/bench/99-bottles test/bench/shootout do make_dir $i done putvar CFG_SRC_DIR putvar CFG_BUILD_DIR putvar CFG_OSTYPE putvar CFG_CPUTYPE msg "looking for build programs" probe_need CFG_GCC gcc probe_need CFG_GIT git probe_need CFG_OCAMLC ocamlc probe_need CFG_PERL perl probe_need CFG_PYTHON python probe CFG_LLVM_CONFIG llvm-config probe CFG_VALGRIND valgrind probe CFG_OCAMLOPT ocamlopt probe CFG_OCAMLC_OPT ocamlc.opt probe CFG_OCAMLOPT_OPT ocamlopt.opt probe CFG_FLEXLINK flexlink probe CFG_MAKEINFO makeinfo probe CFG_TEXI2PDF texi2pdf probe CFG_TEX tex if [ ! -z "$CFG_LLVM_ROOT" ] then CFG_LLVM_INCDIR="$CFG_LLVM_ROOT/include" CFG_LLVM_BINDIR="$CFG_LLVM_ROOT/bin" CFG_LLVM_LIBDIR="$CFG_LLVM_ROOT/lib" CFG_LLVM_CXXFLAGS="-I$CFG_LLVM_INCDIR" CFG_LLVM_LDFLAGS="" CFG_LLVM_LIBS=$(find "$CFG_LLVM_LIBDIR" \ -name '*.lib' \ -exec echo '\"{}\"' ';' \ | xargs echo) CFG_LLVM_VERSION=$("$CFG_LLVM_BINDIR/llc" \ --version \ | grep version \ | cut -d ' ' -f 5-) elif [ ! -z "$CFG_LLVM_CONFIG" ] then CFG_LLVM_VERSION=$(llvm-config --version) CFG_LLVM_INCDIR=$(llvm-config --includedir) CFG_LLVM_BINDIR=$(llvm-config --bindir) CFG_LLVM_LIBDIR=$(llvm-config --libdir) CFG_LLVM_CXXFLAGS=$(llvm-config --cxxflags) CFG_LLVM_LDFLAGS=$(llvm-config --ldflags) CFG_LLVM_LIBS=$(llvm-config --libs) else err "either the \"CFG_LLVM_ROOT\" environment variable must be set, or a \ \"llvm-config\" script must be present" fi case $CFG_LLVM_VERSION in (3.0svn | 3.0) msg "found ok version of LLVM: $CFG_LLVM_VERSION" ;; (*) err "bad LLVM version: $CFG_LLVM_VERSION, need >=3.0svn" ;; esac putvar CFG_LLVM_INCDIR putvar CFG_LLVM_BINDIR putvar CFG_LLVM_LIBDIR putvar CFG_LLVM_CXXFLAGS putvar CFG_LLVM_LDFLAGS putvar CFG_LLVM_LIBS # Munge any paths that appear in config.mk back to posix-y perl -i.bak -p -e 's@ ([a-zA-Z]):\\@ /\1/@go;' \ -e 's@\\@/@go;' config.mk rm -f config.mk.bak copy ${CFG_SRC_DIR}Makefile.in ./Makefile echo "configure: complete"