2011-03-16 17:17:32 +01:00
|
|
|
#!/bin/sh
|
|
|
|
|
2011-03-18 07:51:45 +01:00
|
|
|
msg() {
|
|
|
|
echo "configure: $1"
|
|
|
|
}
|
2011-03-17 01:36:49 +01:00
|
|
|
|
2011-03-30 06:45:09 +02:00
|
|
|
step_msg() {
|
|
|
|
msg
|
|
|
|
msg "$1"
|
|
|
|
msg
|
|
|
|
}
|
|
|
|
|
2011-03-18 07:51:45 +01:00
|
|
|
err() {
|
|
|
|
echo "configure: error: $1"
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
2011-03-20 02:31:59 +01:00
|
|
|
|
|
|
|
need_cmd() {
|
|
|
|
if which $1 >/dev/null 2>&1
|
|
|
|
then msg "found $1"
|
|
|
|
else err "need $1"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2011-03-18 07:51:45 +01:00
|
|
|
make_dir() {
|
|
|
|
if [ ! -d $1 ]
|
|
|
|
then
|
|
|
|
msg "mkdir -p $1"
|
|
|
|
mkdir -p $1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
copy() {
|
2011-03-23 23:55:27 +01:00
|
|
|
msg "cp $1 $2"
|
2011-03-18 07:51:45 +01:00
|
|
|
cp $1 $2
|
|
|
|
}
|
2011-03-16 17:17:32 +01:00
|
|
|
|
2011-03-17 01:36:49 +01:00
|
|
|
putvar() {
|
|
|
|
local T
|
|
|
|
eval T=\$$1
|
2011-03-20 02:32:19 +01:00
|
|
|
eval TLEN=\${#$1}
|
|
|
|
if [ $TLEN -gt 35 ]
|
|
|
|
then
|
|
|
|
printf "configure: %-20s := %.35s ...\n" $1 "$T"
|
|
|
|
else
|
|
|
|
printf "configure: %-20s := %s\n" $1 "$T"
|
|
|
|
fi
|
2011-03-18 07:51:45 +01:00
|
|
|
printf "%-20s := %s\n" $1 "$T" >>config.mk
|
2011-03-17 01:36:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2011-03-18 07:51:45 +01:00
|
|
|
probe_need() {
|
|
|
|
local V=$1
|
|
|
|
local P=$2
|
2011-03-20 02:32:34 +01:00
|
|
|
probe $V $P
|
2011-03-18 07:51:45 +01:00
|
|
|
eval VV=\$$V
|
|
|
|
if [ -z "$VV" ]
|
|
|
|
then
|
|
|
|
err "required program '$P' not found"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2011-03-30 06:45:09 +02:00
|
|
|
opt() {
|
|
|
|
local OP=$1
|
|
|
|
local DEFAULT=$2
|
|
|
|
shift
|
|
|
|
shift
|
|
|
|
local DOC="$*"
|
|
|
|
local FLAG=""
|
|
|
|
|
|
|
|
if [ $DEFAULT -eq 0 ]
|
|
|
|
then
|
|
|
|
FLAG="enable"
|
|
|
|
else
|
|
|
|
FLAG="disable"
|
|
|
|
DOC="don't $DOC"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ $HELP -eq 0 ]
|
|
|
|
then
|
|
|
|
for arg in $CFG_CONFIGURE_ARGS
|
|
|
|
do
|
|
|
|
if [ "$arg" = "--${FLAG}-${OP}" ]
|
|
|
|
then
|
2011-06-27 20:53:04 +02:00
|
|
|
OP=$(echo $OP | tr 'a-z-' 'A-Z_')
|
2011-03-30 06:45:09 +02:00
|
|
|
FLAG=$(echo $FLAG | tr 'a-z' 'A-Z')
|
|
|
|
local V="CFG_${FLAG}_${OP}"
|
|
|
|
eval $V=1
|
|
|
|
putvar $V
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
else
|
|
|
|
if [ ! -z "$META" ]
|
|
|
|
then
|
|
|
|
OP="$OP=<$META>"
|
|
|
|
fi
|
|
|
|
printf " --%-30s %s\n" "$FLAG-$OP" "$DOC"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2011-03-20 02:31:59 +01:00
|
|
|
msg "looking for configure programs"
|
|
|
|
need_cmd mkdir
|
|
|
|
need_cmd printf
|
2011-03-22 07:06:42 +01:00
|
|
|
need_cmd cut
|
|
|
|
need_cmd grep
|
|
|
|
need_cmd xargs
|
|
|
|
need_cmd cp
|
|
|
|
need_cmd find
|
2011-03-23 21:26:17 +01:00
|
|
|
need_cmd uname
|
|
|
|
need_cmd date
|
2011-03-24 00:30:26 +01:00
|
|
|
need_cmd tr
|
2011-05-05 03:28:30 +02:00
|
|
|
need_cmd sed
|
2011-03-23 21:26:17 +01:00
|
|
|
|
|
|
|
msg "inspecting environment"
|
|
|
|
|
|
|
|
CFG_OSTYPE=$(uname -s)
|
2011-05-09 05:45:29 +02:00
|
|
|
|
2011-03-23 21:26:17 +01:00
|
|
|
CFG_CPUTYPE=$(uname -m)
|
2011-05-09 05:45:29 +02:00
|
|
|
if [ $CFG_OSTYPE = Darwin -a $CFG_CPUTYPE = i386 ]
|
|
|
|
then
|
|
|
|
# Darwin's `uname -s` lies and always returns i386. We have to use sysctl
|
|
|
|
# instead.
|
|
|
|
if sysctl hw.optional.x86_64 | grep ': 1'
|
|
|
|
then
|
|
|
|
CFG_CPUTYPE=x86_64
|
|
|
|
fi
|
|
|
|
fi
|
2011-03-23 21:26:17 +01:00
|
|
|
|
2011-03-30 06:45:09 +02:00
|
|
|
CFG_SELF=$(echo $0 | tr '\\' '/')
|
2011-03-24 00:30:26 +01:00
|
|
|
CFG_SRC_DIR=${CFG_SELF%${CFG_SELF##*/}}
|
2011-03-30 06:45:09 +02:00
|
|
|
CFG_BUILD_DIR=$(echo $PWD | tr '\\' '/')
|
2011-03-25 18:29:45 +01:00
|
|
|
CFG_CONFIGURE_ARGS="$@"
|
|
|
|
|
2011-03-30 06:45:09 +02:00
|
|
|
OPTIONS=""
|
|
|
|
HELP=0
|
|
|
|
if [ "$1" = "--help" ]
|
|
|
|
then
|
|
|
|
HELP=1
|
|
|
|
shift
|
|
|
|
echo ""
|
|
|
|
echo "Usage: $CFG_SELF [options]"
|
|
|
|
echo ""
|
|
|
|
echo "Options:"
|
|
|
|
echo ""
|
|
|
|
else
|
|
|
|
msg "recreating config.mk"
|
|
|
|
echo '' >config.mk
|
|
|
|
|
|
|
|
step_msg "processing $CFG_SELF args"
|
|
|
|
fi
|
2011-03-18 07:51:45 +01:00
|
|
|
|
2011-07-20 22:02:36 +02:00
|
|
|
opt sharedstd 1 "build libstd as a shared library"
|
2011-03-30 06:45:09 +02:00
|
|
|
opt valgrind 1 "run tests with valgrind"
|
|
|
|
opt docs 1 "build documentation"
|
2011-04-09 00:44:41 +02:00
|
|
|
opt optimize 1 "build optimized rust code"
|
2011-06-27 20:53:04 +02:00
|
|
|
opt mingw-cross 0 "cross-compile for win32 using mingw"
|
2011-03-30 06:45:09 +02:00
|
|
|
|
|
|
|
|
|
|
|
if [ $HELP -eq 1 ]
|
|
|
|
then
|
|
|
|
echo ""
|
|
|
|
exit 0
|
|
|
|
fi
|
2011-03-18 07:51:45 +01:00
|
|
|
|
2011-03-30 06:45:09 +02:00
|
|
|
step_msg "making directories"
|
2011-03-18 07:51:45 +01:00
|
|
|
for i in \
|
|
|
|
doc \
|
2011-06-01 02:44:54 +02:00
|
|
|
rt rt/isaac rt/bigint rt/sync rt/test rt/arch/i386 \
|
2011-03-22 07:06:42 +01:00
|
|
|
rustllvm \
|
2011-04-30 20:44:27 +02:00
|
|
|
dl stage0 stage1 stage2 stage3 \
|
2011-06-18 03:36:09 +02:00
|
|
|
stage0/lib stage1/lib stage2/lib stage3/lib \
|
The Big Test Suite Overhaul
This replaces the make-based test runner with a set of Rust-based test
runners. I believe that all existing functionality has been
preserved. The primary objective is to dogfood the Rust test
framework.
A few main things happen here:
1) The run-pass/lib-* tests are all moved into src/test/stdtest. This
is a standalone test crate intended for all standard library tests. It
compiles to build/test/stdtest.stageN.
2) rustc now compiles into yet another build artifact, this one a test
runner that runs any tests contained directly in the rustc crate. This
allows much more fine-grained unit testing of the compiler. It
compiles to build/test/rustctest.stageN.
3) There is a new custom test runner crate at src/test/compiletest
that reproduces all the functionality for running the compile-fail,
run-fail, run-pass and bench tests while integrating with Rust's test
framework. It compiles to build/test/compiletest.stageN.
4) The build rules have been completely changed to use the new test
runners, while also being less redundant, following the example of the
recent stageN.mk rewrite.
It adds two new features to the cfail/rfail/rpass/bench tests:
1) Tests can specify multiple 'error-pattern' directives which must be
satisfied in order.
2) Tests can specify a 'compile-flags' directive which will make the
test runner provide additional command line arguments to rustc.
There are some downsides, the primary being that Rust has to be
functioning pretty well just to run _any_ tests, which I imagine will
be the source of some frustration when the entire test suite
breaks. Will also cause some headaches during porting.
Not having individual make rules, each rpass, etc test no longer
remembers between runs whether it completed successfully. As a result,
it's not possible to incrementally fix multiple tests by just running
'make check', fixing a test, and repeating without re-running all the
tests contained in the test runner. Instead you can filter just the
tests you want to run by using the TESTNAME environment variable.
This also dispenses with the ability to run stage0 tests, but they
tended to be broken more often than not anyway.
2011-07-13 04:01:09 +02:00
|
|
|
test/run-pass test/run-fail test/compile-fail test/bench
|
2011-03-18 07:51:45 +01:00
|
|
|
do
|
|
|
|
make_dir $i
|
|
|
|
done
|
|
|
|
|
2011-03-30 06:45:09 +02:00
|
|
|
step_msg "writing out basic parameters"
|
2011-03-17 01:36:49 +01:00
|
|
|
putvar CFG_SRC_DIR
|
|
|
|
putvar CFG_BUILD_DIR
|
|
|
|
putvar CFG_OSTYPE
|
|
|
|
putvar CFG_CPUTYPE
|
2011-03-25 18:29:45 +01:00
|
|
|
putvar CFG_CONFIGURE_ARGS
|
2011-03-17 01:36:49 +01:00
|
|
|
|
2011-03-30 06:45:09 +02:00
|
|
|
step_msg "looking for build programs"
|
2011-03-18 07:51:45 +01:00
|
|
|
probe_need CFG_PERL perl
|
2011-03-20 02:31:30 +01:00
|
|
|
probe_need CFG_PYTHON python
|
2011-05-03 20:34:44 +02:00
|
|
|
probe_need CFG_CURL curl
|
2011-03-18 07:51:45 +01:00
|
|
|
|
2011-07-23 21:26:47 +02:00
|
|
|
probe CFG_GIT git
|
2011-05-09 19:16:56 +02:00
|
|
|
probe CFG_CLANG clang++
|
2011-05-09 06:10:04 +02:00
|
|
|
probe CFG_GCC gcc
|
2011-03-22 02:08:57 +01:00
|
|
|
probe CFG_LLVM_CONFIG llvm-config
|
2011-03-17 01:36:49 +01:00
|
|
|
probe CFG_VALGRIND valgrind
|
2011-03-20 02:31:30 +01:00
|
|
|
probe CFG_MAKEINFO makeinfo
|
|
|
|
probe CFG_TEXI2PDF texi2pdf
|
2011-03-23 21:31:51 +01:00
|
|
|
probe CFG_TEX tex
|
2011-07-23 21:26:47 +02:00
|
|
|
probe CFG_MAKENSIS makensis
|
2011-03-18 07:51:45 +01:00
|
|
|
|
2011-05-09 06:10:04 +02:00
|
|
|
if [ -z "$CFG_CLANG" -a -z "$CFG_GCC" ]
|
|
|
|
then
|
|
|
|
err "either clang or gcc is required"
|
|
|
|
fi
|
|
|
|
|
2011-05-14 02:00:43 +02:00
|
|
|
if head -n 1 ${CFG_SRC_DIR}src/snapshots.txt | grep -q '^T'
|
|
|
|
then
|
|
|
|
CFG_IN_TRANSITION=1
|
|
|
|
putvar CFG_IN_TRANSITION
|
|
|
|
fi
|
|
|
|
|
2011-05-06 03:11:40 +02:00
|
|
|
# Valgrind is only reliable on Linux. On Windows it doesn't work at all, and
|
|
|
|
# on the Mac the dynamic linker causes Valgrind to emit a huge stream of
|
|
|
|
# errors.
|
2011-05-28 01:58:11 +02:00
|
|
|
if [ $CFG_OSTYPE != Linux ] && [ $CFG_OSTYPE != Darwin ]
|
2011-05-06 03:11:40 +02:00
|
|
|
then
|
|
|
|
CFG_BAD_VALGRIND=1
|
|
|
|
putvar CFG_BAD_VALGRIND
|
|
|
|
fi
|
|
|
|
|
2011-05-19 04:32:18 +02:00
|
|
|
if [ ! -z "$CFG_LLVM_ROOT" -a -e "$CFG_LLVM_ROOT/bin/llvm-config" ]
|
|
|
|
then
|
|
|
|
CFG_LLVM_CONFIG="$CFG_LLVM_ROOT/bin/llvm-config"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ ! -z "$CFG_LLVM_ROOT" -a -z "$CFG_LLVM_CONFIG" ]
|
2011-03-22 02:08:57 +01:00
|
|
|
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=""
|
2011-03-22 07:06:42 +01:00
|
|
|
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-)
|
2011-05-05 03:28:30 +02:00
|
|
|
CFG_LLVM_TRIPLE=$("$CFG_LLVM_BINDIR/llc" \
|
2011-05-05 04:14:01 +02:00
|
|
|
--version \
|
|
|
|
| grep Host: \
|
|
|
|
| cut -d ' ' -f 4-)
|
2011-03-22 07:06:42 +01:00
|
|
|
elif [ ! -z "$CFG_LLVM_CONFIG" ]
|
2011-03-22 02:08:57 +01:00
|
|
|
then
|
2011-05-19 04:32:18 +02:00
|
|
|
CFG_LLVM_VERSION=$($CFG_LLVM_CONFIG --version)
|
|
|
|
CFG_LLVM_INCDIR=$($CFG_LLVM_CONFIG --includedir)
|
|
|
|
CFG_LLVM_BINDIR=$($CFG_LLVM_CONFIG --bindir)
|
|
|
|
CFG_LLVM_LIBDIR=$($CFG_LLVM_CONFIG --libdir)
|
|
|
|
CFG_LLVM_CXXFLAGS=$($CFG_LLVM_CONFIG --cxxflags)
|
|
|
|
CFG_LLVM_LDFLAGS=$($CFG_LLVM_CONFIG --ldflags)
|
|
|
|
CFG_LLVM_LIBS=$($CFG_LLVM_CONFIG --libs)
|
|
|
|
CFG_LLVM_TRIPLE=$($CFG_LLVM_CONFIG --host-target)
|
2011-03-22 02:08:57 +01:00
|
|
|
else
|
|
|
|
err "either the \"CFG_LLVM_ROOT\" environment variable must be set, or a \
|
2011-03-22 07:06:42 +01:00
|
|
|
\"llvm-config\" script must be present"
|
2011-03-22 02:08:57 +01:00
|
|
|
fi
|
|
|
|
|
2011-03-18 07:51:45 +01:00
|
|
|
case $CFG_LLVM_VERSION in
|
|
|
|
(3.0svn | 3.0)
|
2011-03-30 06:45:09 +02:00
|
|
|
step_msg "found ok version of LLVM: $CFG_LLVM_VERSION"
|
2011-03-18 07:51:45 +01:00
|
|
|
;;
|
|
|
|
(*)
|
|
|
|
err "bad LLVM version: $CFG_LLVM_VERSION, need >=3.0svn"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2011-05-19 06:41:40 +02:00
|
|
|
if [ ! -z "$CFG_CLANG" ]
|
|
|
|
then
|
|
|
|
CFG_CLANG_VERSION=$("$CFG_CLANG" \
|
|
|
|
--version \
|
|
|
|
| grep version \
|
|
|
|
| cut -d ' ' -f 3)
|
|
|
|
|
|
|
|
case $CFG_CLANG_VERSION in
|
|
|
|
(3.0svn | 3.0)
|
|
|
|
step_msg "found ok version of CLANG: $CFG_CLANG_VERSION"
|
|
|
|
;;
|
|
|
|
(*)
|
|
|
|
err "bad CLANG version: $CFG_CLANG_VERSION, need >=3.0svn"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
fi
|
|
|
|
|
2011-05-18 21:00:26 +02:00
|
|
|
putvar CFG_LLVM_ROOT
|
2011-03-18 07:51:45 +01:00
|
|
|
putvar CFG_LLVM_INCDIR
|
|
|
|
putvar CFG_LLVM_BINDIR
|
2011-03-20 02:31:05 +01:00
|
|
|
putvar CFG_LLVM_LIBDIR
|
2011-03-18 07:51:45 +01:00
|
|
|
putvar CFG_LLVM_CXXFLAGS
|
|
|
|
putvar CFG_LLVM_LDFLAGS
|
|
|
|
putvar CFG_LLVM_LIBS
|
2011-05-05 03:28:30 +02:00
|
|
|
putvar CFG_LLVM_TRIPLE
|
2011-03-18 07:51:45 +01:00
|
|
|
|
2011-03-23 22:35:28 +01:00
|
|
|
# Munge any paths that appear in config.mk back to posix-y
|
2011-03-24 00:30:26 +01:00
|
|
|
perl -i.bak -p -e 's@ ([a-zA-Z]):[/\\]@ /\1/@go;' \
|
2011-03-23 22:35:28 +01:00
|
|
|
-e 's@\\@/@go;' config.mk
|
|
|
|
rm -f config.mk.bak
|
|
|
|
|
2011-03-18 07:51:45 +01:00
|
|
|
copy ${CFG_SRC_DIR}Makefile.in ./Makefile
|
2011-03-17 01:36:49 +01:00
|
|
|
|
2011-03-30 06:45:09 +02:00
|
|
|
step_msg "complete"
|