configure 33.0 KB
Newer Older
1 2
#!/bin/sh

3 4 5
msg() {
    echo "configure: $1"
}
6

7 8 9 10 11 12
step_msg() {
    msg
    msg "$1"
    msg
}

13 14 15 16
warn() {
    echo "configure: WARNING: $1"
}

17 18 19 20 21
err() {
    echo "configure: error: $1"
    exit 1
}

22 23 24
need_ok() {
    if [ $? -ne 0 ]
    then
25
        err "$1"
26 27
    fi
}
28 29

need_cmd() {
30
    if command -v $1 >/dev/null 2>&1
31 32 33 34 35
    then msg "found $1"
    else err "need $1"
    fi
}

36 37 38 39 40 41 42 43
make_dir() {
    if [ ! -d $1 ]
    then
        msg "mkdir -p $1"
        mkdir -p $1
    fi
}

44 45 46 47 48 49
copy_if_changed() {
    if cmp -s $1 $2
    then
        msg "leaving $2 unchanged"
    else
        msg "cp $1 $2"
50 51
        cp -f $1 $2
        chmod u-w $2 # make copied artifact read-only
52 53 54 55 56 57 58 59 60
    fi
}

move_if_changed() {
    if cmp -s $1 $2
    then
        msg "leaving $2 unchanged"
    else
        msg "mv $1 $2"
61 62
        mv -f $1 $2
        chmod u-w $2 # make moved artifact read-only
63
    fi
64
}
65

66 67 68
putvar() {
    local T
    eval T=\$$1
69 70 71 72 73
    eval TLEN=\${#$1}
    if [ $TLEN -gt 35 ]
    then
        printf "configure: %-20s := %.35s ...\n" $1 "$T"
    else
74
        printf "configure: %-20s := %s %s\n" $1 "$T" "$2"
75
    fi
76
    printf "%-20s := %s\n" $1 "$T" >>config.tmp
77 78 79 80
}

probe() {
    local V=$1
81 82
    shift
    local P
83
    local T
84 85
    for P
    do
86
        T=$(command -v $P 2>&1)
87 88
        if [ $? -eq 0 ]
        then
89 90 91 92 93 94 95 96
            VER0=$($P --version 2>/dev/null | head -1 \
                |  sed -e 's/[^0-9]*\([vV]\?[0-9.]\+[^ ]*\).*/\1/' )
            if [ $? -eq 0 -a "x${VER0}" != "x" ]
            then
              VER="($VER0)"
            else
              VER=""
            fi
97 98
            break
        else
99
            VER=""
100 101 102
            T=""
        fi
    done
103
    eval $V=\$T
104
    putvar $V "$VER"
105 106
}

107 108
probe_need() {
    local V=$1
109
    probe $*
110 111 112
    eval VV=\$$V
    if [ -z "$VV" ]
    then
113
        err "needed, but unable to find any of: $*"
114 115 116
    fi
}

117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
validate_opt () {
    for arg in $CFG_CONFIGURE_ARGS
    do
        isArgValid=0
        for option in $BOOL_OPTIONS
        do
            if test --disable-$option = $arg
            then
                isArgValid=1
            fi
            if test --enable-$option = $arg
            then
                isArgValid=1
            fi
        done
        for option in $VAL_OPTIONS
        do
            if echo "$arg" | grep -q -- "--$option="
            then
                isArgValid=1
            fi
        done
139
        if [ "$arg" = "--help" ]
140
        then
141
            echo
142 143 144 145 146 147 148 149
            echo "No more help available for Configure options,"
            echo "check the Wiki or join our IRC channel"
            break
        else
            if test $isArgValid -eq 0
            then
                err "Option '$arg' is not recognized"
            fi
150 151 152 153
        fi
    done
}

154
valopt() {
155 156
    VAL_OPTIONS="$VAL_OPTIONS $1"

157 158 159 160 161 162 163
    local OP=$1
    local DEFAULT=$2
    shift
    shift
    local DOC="$*"
    if [ $HELP -eq 0 ]
    then
164
        local UOP=$(echo $OP | tr '[:lower:]' '[:upper:]' | tr '\-' '\_')
E
Elly Jones 已提交
165 166
        local V="CFG_${UOP}"
        eval $V="$DEFAULT"
167 168 169 170 171 172 173 174 175 176
        for arg in $CFG_CONFIGURE_ARGS
        do
            if echo "$arg" | grep -q -- "--$OP="
            then
                val=$(echo "$arg" | cut -f2 -d=)
                eval $V=$val
            fi
        done
        putvar $V
    else
E
Elly Jones 已提交
177 178 179 180 181 182
        if [ -z "$DEFAULT" ]
        then
            DEFAULT="<none>"
        fi
        OP="${OP}=[${DEFAULT}]"
        printf "    --%-30s %s\n" "$OP" "$DOC"
183 184 185
    fi
}

186
opt() {
187 188
    BOOL_OPTIONS="$BOOL_OPTIONS $1"

189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
    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
210
                OP=$(echo $OP | tr 'a-z-' 'A-Z_')
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225
                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
}

226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249
envopt() {
    local NAME=$1
    local V="CFG_${NAME}"
    eval VV=\$$V

    # If configure didn't set a value already, then check environment.
    #
    # (It is recommended that the configure script always check the
    # environment before setting any values to envopt variables; see
    # e.g.  how CFG_CC is handled, where it first checks `-z "$CC"`,
    # and issues msg if it ends up employing that provided value.)
    if [ -z "$VV" ]
    then
        eval $V=\$$NAME
        eval VV=\$$V
    fi

    # If script or environment provided a value, save it.
    if [ ! -z "$VV" ]
    then
        putvar $V
    fi
}

250
msg "looking for configure programs"
251
need_cmd cmp
252 253
need_cmd mkdir
need_cmd printf
254
need_cmd cut
G
Graydon Hoare 已提交
255
need_cmd head
256 257 258 259
need_cmd grep
need_cmd xargs
need_cmd cp
need_cmd find
260 261
need_cmd uname
need_cmd date
G
Graydon Hoare 已提交
262
need_cmd tr
P
Patrick Walton 已提交
263
need_cmd sed
264
need_cmd file
B
Brian Anderson 已提交
265

266 267 268 269
msg "inspecting environment"

CFG_OSTYPE=$(uname -s)
CFG_CPUTYPE=$(uname -m)
270

271 272 273 274
if [ $CFG_OSTYPE = Darwin -a $CFG_CPUTYPE = i386 ]
then
    # Darwin's `uname -s` lies and always returns i386. We have to use sysctl
    # instead.
G
Graydon Hoare 已提交
275
    if sysctl hw.optional.x86_64 | grep -q ': 1'
276 277 278 279
    then
        CFG_CPUTYPE=x86_64
    fi
fi
280

281 282 283 284 285 286 287 288 289 290 291 292 293
# The goal here is to come up with the same triple as LLVM would,
# at least for the subset of platforms we're willing to target.

case $CFG_OSTYPE in

    Linux)
        CFG_OSTYPE=unknown-linux-gnu
        ;;

    FreeBSD)
        CFG_OSTYPE=unknown-freebsd
        ;;

M
Michael Neumann 已提交
294 295 296 297
    DragonFly)
        CFG_OSTYPE=unknown-dragonfly
        ;;

298 299 300 301
    Darwin)
        CFG_OSTYPE=apple-darwin
        ;;

302 303 304 305 306 307 308
    MINGW*)
        # msys' `uname` does not print gcc configuration, but prints msys
        # configuration. so we cannot believe `uname -m`:
        # msys1 is always i686 and msys2 is always x86_64.
        # instead, msys defines $MSYSTEM which is MINGW32 on i686 and
        # MINGW64 on x86_64.
        CFG_CPUTYPE=i686
309
        CFG_OSTYPE=pc-mingw32
310 311 312 313 314
        if [ "$MSYSTEM" = MINGW64 ]
        then
            CFG_CPUTYPE=x86_64
            CFG_OSTYPE=w64-mingw32
        fi
K
klutzy 已提交
315 316
        ;;

317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335
# Thad's Cygwin identifers below

#   Vista 32 bit
    CYGWIN_NT-6.0)
        CFG_OSTYPE=pc-mingw32
        CFG_CPUTYPE=i686
        ;;

#   Vista 64 bit
    CYGWIN_NT-6.0-WOW64)
        CFG_OSTYPE=w64-mingw32
        CFG_CPUTYPE=x86_64
        ;;

#   Win 7 32 bit
    CYGWIN_NT-6.1)
        CFG_OSTYPE=pc-mingw32
        CFG_CPUTYPE=i686
        ;;
336

337 338 339 340 341 342 343 344
#   Win 7 64 bit
    CYGWIN_NT-6.1-WOW64)
        CFG_OSTYPE=w64-mingw32
        CFG_CPUTYPE=x86_64
        ;;

# We do not detect other OS such as XP/2003 using 64 bit using uname.
# If we want to in the future, we will need to use Cygwin - Chuck's csih helper in /usr/lib/csih/winProductName.exe or alternative.
345 346 347 348 349 350 351 352 353
    *)
        err "unknown OS type: $CFG_OSTYPE"
        ;;
esac


case $CFG_CPUTYPE in

    i386 | i486 | i686 | i786 | x86)
354
        CFG_CPUTYPE=i686
355 356 357 358 359 360
        ;;

    xscale | arm)
        CFG_CPUTYPE=arm
        ;;

361 362 363 364 365
    armv7l)
        CFG_CPUTYPE=arm
        CFG_OSTYPE="${CFG_OSTYPE}eabihf"
        ;;

U
User Jyyou 已提交
366
    x86_64 | x86-64 | x64 | amd64)
367
        CFG_CPUTYPE=x86_64
368 369 370 371 372 373
        ;;

    *)
        err "unknown CPU type: $CFG_CPUTYPE"
esac

374 375 376 377 378 379 380 381 382 383
# Detect 64 bit linux systems with 32 bit userland and force 32 bit compilation
if [ $CFG_OSTYPE = unknown-linux-gnu -a $CFG_CPUTYPE = x86_64 ]
then
    file -L "$SHELL" | grep -q "x86[_-]64"
    if [ $? != 0 ]; then
        CFG_CPUTYPE=i686
    fi
fi


H
Heather 已提交
384
DEFAULT_BUILD="${CFG_CPUTYPE}-${CFG_OSTYPE}"
385

386 387
CFG_SRC_DIR="$(cd $(dirname $0) && pwd)/"
CFG_BUILD_DIR="$(pwd)/"
388
CFG_SELF="$0"
389 390
CFG_CONFIGURE_ARGS="$@"

391 392 393 394 395 396
OPTIONS=""
HELP=0
if [ "$1" = "--help" ]
then
    HELP=1
    shift
397
    echo
398
    echo "Usage: $CFG_SELF [options]"
399
    echo
400
    echo "Options:"
401
    echo
402
else
403 404
    msg "recreating config.tmp"
    echo '' >config.tmp
405 406 407

    step_msg "processing $CFG_SELF args"
fi
408

409 410 411
BOOL_OPTIONS=""
VAL_OPTIONS=""

M
Mahmut Bulut 已提交
412
opt valgrind 0 "run tests with valgrind (memcheck by default)"
413
opt helgrind 0 "run tests with helgrind instead of memcheck"
414
opt docs     1 "build documentation"
415
opt optimize 1 "build optimized rust code"
N
Niko Matsakis 已提交
416
opt optimize-cxx 1 "build optimized C++ code"
N
Niko Matsakis 已提交
417
opt optimize-llvm 1 "build optimized LLVM"
418
opt optimize-tests 1 "build tests with optimizations"
419
opt libcpp 1 "build with llvm with libc++ instead of libstdc++ when using clang"
420
opt llvm-assertions 1 "build LLVM with assertions"
421
opt debug 1 "build with extra debug fun"
422
opt ratchet-bench 0 "ratchet benchmarks"
423
opt fast-make 0 "use .gitmodules as timestamp for submodule deps"
424
opt manage-submodules 1 "let the build manage the git submodules"
425
opt mingw-cross 0 "cross-compile for win32 using mingw"
426
opt clang 0 "prefer clang to gcc for building the runtime"
427
opt ccache 0 "invoke gcc/clang via ccache to reuse object files between builds"
428
opt local-rust 0 "use an installed rustc rather than downloading a snapshot"
429
opt inject-std-version 1 "inject the current compiler version of libstd into programs"
430
opt llvm-static-stdcpp 0 "statically link to libstdc++ for LLVM"
431
opt rpath 0 "build rpaths into rustc itself"
432
opt nightly 0 "build nightly packages"
433
opt verify-install 1 "verify installed binaries work"
A
Alex Crichton 已提交
434
opt jemalloc 1 "build liballoc with jemalloc"
435 436
# This is used by the automation to produce single-target nightlies
opt dist-host-only 0 "only install bins for the host architecture"
437
valopt prefix "/usr/local" "set installation prefix"
438
valopt local-rust-root "/usr/local" "set prefix for local rust binary"
B
Brian Anderson 已提交
439
valopt llvm-root "" "set LLVM root"
440 441
valopt jemalloc-root "" "set directory where libjemalloc_pic.a is located"
valopt libuv-root "" "set directory where libuv.a is located"
442 443
valopt android-cross-path "/opt/ndk_standalone" "Android NDK standalone path"
valopt mingw32-cross-path "" "MinGW32 cross compiler path"
444

H
Heather 已提交
445 446 447 448 449 450
valopt build "${DEFAULT_BUILD}" "GNUs ./configure syntax LLVM build triple"
valopt host "${CFG_BUILD}" "GNUs ./configure syntax LLVM host triples"
valopt target "${CFG_HOST}" "GNUs ./configure syntax LLVM target triples"

valopt localstatedir "/var/lib" "local state directory"
valopt sysconfdir "/etc" "install system configuration files"
451 452 453 454

valopt datadir "${CFG_PREFIX}/share" "install data"
valopt infodir "${CFG_PREFIX}/share/info" "install additional info"
valopt mandir "${CFG_PREFIX}/share/man" "install man pages in PATH"
455 456

# On windows we just store the libraries in the bin directory because
457 458
# there's no rpath. This is where the build system itself puts libraries;
# --libdir is used to configure the installation directory.
459
# FIXME: Thise needs to parameterized over target triples. Do it in platform.mk
460
CFG_LIBDIR_RELATIVE=lib
K
klutzy 已提交
461
if [ "$CFG_OSTYPE" = "pc-mingw32" ] || [ "$CFG_OSTYPE" = "w64-mingw32" ]
462
then
463
    CFG_LIBDIR_RELATIVE=bin
464 465
fi

466
valopt libdir "${CFG_PREFIX}/${CFG_LIBDIR_RELATIVE}" "install libraries"
H
Heather 已提交
467

B
Brian Anderson 已提交
468 469
if [ $HELP -eq 1 ]
then
470
    echo
B
Brian Anderson 已提交
471 472 473
    exit 0
fi

474 475 476
# Validate Options
step_msg "validating $CFG_SELF args"
validate_opt
477

478 479 480 481 482 483
# Temporarily support the old windows triples while the bots make the transition
# XXX Remove me
CFG_BUILD=`echo "${CFG_BUILD}" | sed 's/-pc-mingw32/-w64-mingw32/g'`
CFG_HOST=`echo "${CFG_HOST}" | sed 's/-pc-mingw32/-w64-mingw32/g'`
CFG_TARGET=`echo "${CFG_TARGET}" | sed 's/-pc-mingw32/-w64-mingw32/g'`

484
step_msg "looking for build programs"
B
Brian Anderson 已提交
485

486
probe_need CFG_PERL        perl
487
probe_need CFG_CURLORWGET  curl wget
488 489 490 491 492 493
probe_need CFG_PYTHON      python2.7 python2.6 python2 python

python_version=$($CFG_PYTHON -V 2>&1)
if [ $(echo $python_version | grep -c '^Python 2\.[4567]') -ne 1 ]; then
    err "Found $python_version, but LLVM requires Python 2.4-2.7"
fi
494 495 496 497 498

# If we have no git directory then we are probably a tarball distribution
# and shouldn't attempt to load submodules
if [ ! -e ${CFG_SRC_DIR}.git ]
then
B
Brian Anderson 已提交
499
    probe CFG_GIT          git
500 501 502
    msg "git: no git directory. disabling submodules"
    CFG_DISABLE_MANAGE_SUBMODULES=1
else
B
Brian Anderson 已提交
503
    probe_need CFG_GIT     git
504 505
fi

506
probe CFG_CLANG            clang++
507
probe CFG_CCACHE           ccache
508
probe CFG_GCC              gcc
509
probe CFG_LD               ld
510
probe CFG_VALGRIND         valgrind
511
probe CFG_PERF             perf
512
probe CFG_ISCC             iscc
513
probe CFG_LLNEXTGEN        LLnextgen
514 515 516
probe CFG_JAVAC            javac
probe CFG_ANTLR4           antlr4
probe CFG_GRUN             grun
517 518
probe CFG_PANDOC           pandoc
probe CFG_PDFLATEX         pdflatex
519 520
probe CFG_XELATEX          xelatex
probe CFG_LUALATEX         lualatex
521
probe CFG_GDB              gdb
522 523
probe CFG_LLDB             lldb

524 525 526 527 528 529 530
if [ ! -z "$CFG_GDB" ]
then
    # Extract the version
    CFG_GDB_VERSION=$($CFG_GDB --version 2>/dev/null | head -1)
    putvar CFG_GDB_VERSION
fi

531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548
if [ ! -z "$CFG_LLDB" ]
then
    # If CFG_LLDB_PYTHON_DIR is not already set from the outside and valid, try to read it from
    # LLDB via the -P commandline options.
    if [ -z "$CFG_LLDB_PYTHON_DIR" ] || [ ! -d "$CFG_LLDB_PYTHON_DIR" ]
    then
        CFG_LLDB_PYTHON_DIR=$($CFG_LLDB -P)

        # If CFG_LLDB_PYTHON_DIR is not a valid directory, set it to something more readable
        if [ ! -d "$CFG_LLDB_PYTHON_DIR" ]
        then
            CFG_LLDB_PYTHON_DIR="LLDB_PYTHON_DIRECTORY_NOT_FOUND"
        fi

        putvar CFG_LLDB_PYTHON_DIR
    fi
fi

Y
Young-il Choi 已提交
549 550 551 552
step_msg "looking for target specific programs"

probe CFG_ADB        adb

553 554
if [ ! -z "$CFG_PANDOC" ]
then
555 556 557 558
    PV_MAJOR_MINOR=$(pandoc --version | grep '^pandoc ' |
        # extract the first 2 version fields, ignore everything else
        sed 's/pandoc \([0-9]*\)\.\([0-9]*\).*/\1 \2/')

559 560
    MIN_PV_MAJOR="1"
    MIN_PV_MINOR="9"
561 562 563
    # these patterns are shell globs, *not* regexps
    PV_MAJOR=${PV_MAJOR_MINOR% *}
    PV_MINOR=${PV_MAJOR_MINOR#* }
564
    if [ "$PV_MAJOR" -lt "$MIN_PV_MAJOR" ] || [ "$PV_MINOR" -lt "$MIN_PV_MINOR" ]
565
    then
566 567
        step_msg "pandoc $PV_MAJOR.$PV_MINOR is too old. Need at least $MIN_PV_MAJOR.$MIN_PV_MINOR. Disabling"
        BAD_PANDOC=1
568
    fi
569 570
fi

K
klutzy 已提交
571
BIN_SUF=
K
klutzy 已提交
572
if [ "$CFG_OSTYPE" = "pc-mingw32" ] || [ "$CFG_OSTYPE" = "w64-mingw32" ]
K
klutzy 已提交
573 574 575 576
then
    BIN_SUF=.exe
fi

577
if [ ! -z "$CFG_ENABLE_LOCAL_RUST" ]
578
then
579 580
    system_rustc=$(which rustc)
    if [ -f ${CFG_LOCAL_RUST_ROOT}/bin/rustc${BIN_SUF} ]
581
    then
582 583 584 585 586
        : # everything already configured
    elif [ -n "$system_rustc" ]
    then
        # we assume that rustc is in a /bin directory
        CFG_LOCAL_RUST_ROOT=${system_rustc%/bin/rustc}
587
    else
588
        err "no local rust to use"
589
    fi
590 591 592 593

    LRV=`${CFG_LOCAL_RUST_ROOT}/bin/rustc${BIN_SUF} --version`
    step_msg "using rustc at: ${CFG_LOCAL_RUST_ROOT} with version: $LRV"
    putvar CFG_LOCAL_RUST_ROOT
594 595
fi

596 597 598 599 600 601 602 603
# Force freebsd to build with clang; gcc doesn't like us there
if [ $CFG_OSTYPE = unknown-freebsd ]
then
    step_msg "on FreeBSD, forcing use of clang"
    CFG_ENABLE_CLANG=1
    putvar CFG_ENABLE_CLANG
fi

604
if [ -z "$CFG_ENABLE_CLANG" -a -z "$CFG_GCC" ]
605 606 607 608
then
    err "either clang or gcc is required"
fi

609 610 611 612 613 614 615 616 617 618
# OS X 10.9, gcc is actually clang. This can cause some confusion in the build
# system, so if we find that gcc is clang, we should just use clang directly.
if [ $CFG_OSTYPE = apple-darwin -a -z "$CFG_ENABLE_CLANG" ]
then
    CFG_OSX_GCC_VERSION=$("$CFG_GCC" --version 2>&1 | grep "Apple LLVM version")
    if [ $? -eq 0 ]
    then
        step_msg "on OS X 10.9, forcing use of clang"
        CFG_ENABLE_CLANG=1
        putvar CFG_ENABLE_CLANG
J
Jan Niklas Hasse 已提交
619
    else
620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640
        if [ $("$CFG_GCC" --version 2>&1 | grep -c ' 4\.[0-6]') -ne 0 ]; then
            step_msg "older GCC found, using clang instead"
            CFG_ENABLE_CLANG=1
            putvar CFG_ENABLE_CLANG
        else
            # on OS X, with xcode 5 and newer, certain developers may have
            # cc, gcc and g++ point to a  mixture of clang and gcc
            # if so, this will create very strange build errors
            # this last stanza is to detect some such problems and save the future rust
            # contributor some time solving that issue.
            # this detection could be generalized to other OSes aside from OS X
            # but the issue seems most likely to happen on OS X

            chk_cc () {
                $1 --version 2> /dev/null | grep -q $2
            }
            # check that gcc, cc and g++ all point to the same compiler.
            # note that for xcode 5, g++ points to clang, not clang++
            if !((chk_cc gcc clang  && chk_cc g++ clang) ||
                (chk_cc gcc gcc  &&( chk_cc g++ g++ || chk g++ gcc))) then
                err "the gcc and g++ in your path point to different compilers.
641
    Check which versions are in your path with gcc --version and g++ --version.
642 643
    To resolve this problem, either fix your PATH  or run configure with --enable-clang"
            fi
644

645
        fi
646 647 648
    fi
fi

649 650
if [ ! -z "$CFG_LLVM_ROOT" -a -e "$CFG_LLVM_ROOT/bin/llvm-config" ]
then
651
    step_msg "using custom LLVM at $CFG_LLVM_ROOT"
652 653

    LLVM_CONFIG="$CFG_LLVM_ROOT/bin/llvm-config"
654
    LLVM_VERSION=$($LLVM_CONFIG --version)
655 656

    case $LLVM_VERSION in
657
        (3.[2-6]*)
658 659 660 661 662
            msg "found ok version of LLVM: $LLVM_VERSION"
            ;;
        (*)
            err "bad LLVM version: $LLVM_VERSION, need >=3.0svn"
            ;;
663
    esac
664 665
fi

666 667 668 669 670 671 672 673 674 675 676 677 678
# Even when the user overrides the choice of CC, still try to detect
# clang to disable some clang-specific warnings.  We here draw a
# distinction between:
#
#  CFG_ENABLE_CLANG : passed --enable-clang, or host "requires" clang,
#  CFG_USING_CLANG : compiler (clang / gcc / $CC) looks like clang.
#
# This distinction is important because there are some safeguards we
# would prefer to skip when merely CFG_USING_CLANG is set; but when
# CFG_ENABLE_CLANG is set, that indicates that we are opting into
# running such safeguards.

if [ ! -z "$CC" ]
679
then
680 681 682 683 684
    msg "skipping compiler inference steps; using provided CC=$CC"
    CFG_CC="$CC"

    CFG_OSX_CC_VERSION=$("$CFG_CC" --version 2>&1 | grep "clang")
    if [ $? -eq 0 ]
685
    then
686 687 688
        step_msg "note, user-provided CC looks like clang; CC=$CC."
        CFG_USING_CLANG=1
        putvar CFG_USING_CLANG
689
    fi
690
else
691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715
    if [ ! -z "$CFG_ENABLE_CLANG" ]
    then
        if [ -z "$CFG_CLANG" ]
        then
            err "clang requested but not found"
        fi
        CFG_CC="$CFG_CLANG"
        CFG_USING_CLANG=1
        putvar CFG_USING_CLANG
    else
        CFG_CC="gcc"
    fi
fi

if [ ! -z "$CFG_ENABLE_CLANG" ]
then
    if [ -z "$CC" ] || [[ $CC == *clang ]]
    then
        CFG_CLANG_VERSION=$($CFG_CC \
            --version \
            | grep version \
            | sed 's/.*\(version .*\)/\1/; s/.*based on \(LLVM .*\))/\1/' \
            | cut -d ' ' -f 2)

        case $CFG_CLANG_VERSION in
716
            (3.0svn | 3.0 | 3.1* | 3.2* | 3.3* | 3.4* | 3.5* | 3.6*)
717 718 719 720
            step_msg "found ok version of CLANG: $CFG_CLANG_VERSION"
            if [ -z "$CC" ]
            then
                CFG_CC="clang"
721
                CFG_CXX="clang++"
722 723 724 725 726 727 728 729 730
            fi
            ;;
            (*)
            err "bad CLANG version: $CFG_CLANG_VERSION, need >=3.0svn"
            ;;
        esac
    else
        msg "skipping CFG_ENABLE_CLANG version check; provided CC=$CC"
    fi
731
fi
732

733 734
if [ ! -z "$CFG_ENABLE_CCACHE" ]
then
735
    if [ -z "$CC" ]
736
    then
737 738 739 740 741 742
        if [ -z "$CFG_CCACHE" ]
        then
            err "ccache requested but not found"
        fi

        CFG_CC="ccache $CFG_CC"
743
    fi
744
fi
745

746 747 748
if [ -z "$CC" -a -z "$CFG_ENABLE_CLANG" -a -z "$CFG_GCC" ]
then
    err "either clang or gcc is required"
749 750
fi

751 752 753 754 755 756 757 758 759 760 761
# All safeguards based on $CFG_ENABLE_CLANG should occur before this
# point in the script; after this point, script logic should inspect
# $CFG_USING_CLANG rather than $CFG_ENABLE_CLANG.

# Set CFG_{CC,CXX,CPP,CFLAGS,CXXFLAGS}
envopt CC
envopt CXX
envopt CPP
envopt CFLAGS
envopt CXXFLAGS

762 763
# a little post-processing of various config values
CFG_PREFIX=${CFG_PREFIX%/}
H
Heather 已提交
764 765 766
CFG_MANDIR=${CFG_MANDIR%/}
CFG_HOST="$(echo $CFG_HOST | tr ',' ' ')"
CFG_TARGET="$(echo $CFG_TARGET | tr ',' ' ')"
C
Chris Morgan 已提交
767
CFG_SUPPORTED_TARGET="$(grep ^CC_*=* ${CFG_SRC_DIR}mk/platform.mk | sed -e 's/^CC_//' -e 's/\([^=]*\).*/\1/' | xargs)"
N
Niko Matsakis 已提交
768

769 770
# copy host-triples to target-triples so that hosts are a subset of targets
V_TEMP=""
H
Heather 已提交
771
for i in $CFG_HOST $CFG_TARGET;
772 773 774
do
   echo "$V_TEMP" | grep -qF $i || V_TEMP="$V_TEMP${V_TEMP:+ }$i"
done
H
Heather 已提交
775
CFG_TARGET=$V_TEMP
776 777

# check target-specific tool-chains
H
Heather 已提交
778
for i in $CFG_TARGET
779
do
780
    L_CHECK=false
H
Heather 已提交
781
    for j in $CFG_SUPPORTED_TARGET
782 783 784 785 786 787 788 789 790 791 792 793
    do
        if [ $i = $j ]
        then
            L_CHECK=true
        fi
    done

    if [ $L_CHECK = false ]
    then
        err "unsupported target triples \"$i\" found"
    fi

794
    case $i in
795
        arm-linux-androideabi)
796 797 798 799 800 801 802 803 804 805 806 807 808 809 810

            if [ ! -f $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-gcc ]
            then
                err "NDK $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-gcc not found"
            fi
            if [ ! -f $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-g++ ]
            then
                err "NDK $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-g++ not found"
            fi
            if [ ! -f $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-ar ]
            then
                err "NDK $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-ar not found"
            fi
            ;;

K
kud1ing 已提交
811 812 813 814 815 816 817
        arm-apple-darwin)
            if [ $CFG_OSTYPE != apple-darwin ]
            then
                err "The iOS target is only supported on Mac OS X"
            fi
            ;;

818 819 820 821
        *)
            ;;
    esac
done
N
Niko Matsakis 已提交
822

823 824
if [ ! -z "$CFG_PERF" ]
then
G
Graydon Hoare 已提交
825
    HAVE_PERF_LOGFD=`$CFG_PERF stat --log-fd 2>&1 | grep 'unknown option'`
826 827 828 829 830 831 832
    if [ -z "$HAVE_PERF_LOGFD" ];
    then
        CFG_PERF_WITH_LOGFD=1
        putvar CFG_PERF_WITH_LOGFD
    fi
fi

833
step_msg "making directories"
834

835
for i in \
836
    doc doc/std doc/extra \
837
    dl tmp dist
838 839 840 841
do
    make_dir $i
done

H
Heather 已提交
842
for t in $CFG_HOST
843
do
844
    make_dir $t/llvm
845 846
done

H
Heather 已提交
847
for t in $CFG_HOST
848
do
849
    make_dir $t/rustllvm
850 851
done

H
Heather 已提交
852
for t in $CFG_TARGET
853
do
854
  make_dir $t/rt
855
  for s in 0 1 2 3
856
  do
857
    make_dir $t/rt/stage$s
D
Daniel Micay 已提交
858
    make_dir $t/rt/jemalloc
859 860 861 862
    make_dir $t/rt/libuv
    make_dir $t/rt/libuv/src/ares
    make_dir $t/rt/libuv/src/eio
    make_dir $t/rt/libuv/src/ev
863
    for i in                                          \
D
Daniel Micay 已提交
864
      isaac sync test \
865
      arch/i386 arch/x86_64 arch/arm arch/mips  \
866
      sundown/src sundown/html
867
    do
868
      make_dir $t/rt/stage$s/$i
869
    done
870 871 872
  done
done

873
for h in $CFG_HOST
874
do
H
Heather 已提交
875
    for t in $CFG_TARGET
876
    do
N
Niko Matsakis 已提交
877 878 879 880
        for i in 0 1 2 3
        do
            # host bin dir
            make_dir $h/stage$i/bin
881

N
Niko Matsakis 已提交
882
            # host lib dir
883
            make_dir $h/stage$i/$CFG_LIBDIR_RELATIVE
884

A
Alex Crichton 已提交
885 886 887
            # host test dir
            make_dir $h/stage$i/test

N
Niko Matsakis 已提交
888
            # target bin dir
889
            make_dir $h/stage$i/$CFG_LIBDIR_RELATIVE/rustlib/$t/bin
890

N
Niko Matsakis 已提交
891
            # target lib dir
892
            make_dir $h/stage$i/$CFG_LIBDIR_RELATIVE/rustlib/$t/lib
N
Niko Matsakis 已提交
893
        done
894
    done
N
Niko Matsakis 已提交
895 896

    make_dir $h/test/run-pass
897
    make_dir $h/test/run-pass-fulldeps
N
Niko Matsakis 已提交
898 899
    make_dir $h/test/run-fail
    make_dir $h/test/compile-fail
900
    make_dir $h/test/compile-fail-fulldeps
N
Niko Matsakis 已提交
901 902 903
    make_dir $h/test/bench
    make_dir $h/test/perf
    make_dir $h/test/pretty
904 905
    make_dir $h/test/debuginfo-gdb
    make_dir $h/test/debuginfo-lldb
906
    make_dir $h/test/codegen
B
Brian Anderson 已提交
907
    make_dir $h/test/doc-tutorial
908
    make_dir $h/test/doc-guide
909
    make_dir $h/test/doc-guide-ffi
910
    make_dir $h/test/doc-guide-runtime
911
    make_dir $h/test/doc-guide-macros
912 913
    make_dir $h/test/doc-guide-lifetimes
    make_dir $h/test/doc-guide-pointers
914 915
    make_dir $h/test/doc-guide-container
    make_dir $h/test/doc-guide-tasks
916
    make_dir $h/test/doc-rust
917 918
done

919 920 921 922
# Configure submodules
step_msg "configuring submodules"

# Have to be in the top of src directory for this
923 924
if [ -z $CFG_DISABLE_MANAGE_SUBMODULES ]
then
925
    cd ${CFG_SRC_DIR}
926

927
    msg "git: submodule sync"
928
    "${CFG_GIT}" submodule sync
929

930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946
    msg "git: submodule init"
    "${CFG_GIT}" submodule init

    # Disable submodules that we're not using
    if [ ! -z "${CFG_LLVM_ROOT}" ]; then
        msg "git: submodule deinit src/llvm"
        "${CFG_GIT}" submodule deinit src/llvm
    fi
    if [ ! -z "${CFG_JEMALLOC_ROOT}" ]; then
        msg "git: submodule deinit src/jemalloc"
        "${CFG_GIT}" submodule deinit src/jemalloc
    fi
    if [ ! -z "${CFG_LIBUV_ROOT}" ]; then
        msg "git: submodule deinit src/libuv"
        "${CFG_GIT}" submodule deinit src/libuv
    fi

947
    msg "git: submodule update"
948
    "${CFG_GIT}" submodule update
949 950
    need_ok "git failed"

951
    msg "git: submodule foreach sync"
952
    "${CFG_GIT}" submodule foreach --recursive 'if test -e .gitmodules; then git submodule sync; fi'
953 954
    need_ok "git failed"

955
    msg "git: submodule foreach update"
956
    "${CFG_GIT}" submodule update --recursive
957 958 959 960 961 962 963
    need_ok "git failed"

    # NB: this is just for the sake of getting the submodule SHA1 values
    # and status written into the build log.
    msg "git: submodule status"
    "${CFG_GIT}" submodule status --recursive

964
    msg "git: submodule clobber"
965
    "${CFG_GIT}" submodule foreach --recursive git clean -dxf
966
    need_ok "git failed"
967
    "${CFG_GIT}" submodule foreach --recursive git checkout .
968 969
    need_ok "git failed"

970
    cd ${CFG_BUILD_DIR}
971 972
fi

973 974
# Configure llvm, only if necessary
step_msg "looking at LLVM"
975
CFG_LLVM_SRC_DIR=${CFG_SRC_DIR}src/llvm/
H
Heather 已提交
976
for t in $CFG_HOST
977
do
978 979
    do_reconfigure=1

980 981
    if [ -z $CFG_LLVM_ROOT ]
    then
982
        LLVM_BUILD_DIR=${CFG_BUILD_DIR}$t/llvm
983 984
        if [ ! -z "$CFG_DISABLE_OPTIMIZE_LLVM" ]
        then
B
Brian Anderson 已提交
985
            LLVM_DBG_OPTS="--enable-debug-symbols --disable-optimized"
986 987
            # Just use LLVM straight from its build directory to
            # avoid 'make install' time
988
            LLVM_INST_DIR=$LLVM_BUILD_DIR/Debug
989 990
        else
            LLVM_DBG_OPTS="--enable-optimized"
991 992 993 994 995 996 997 998
            LLVM_INST_DIR=$LLVM_BUILD_DIR/Release
        fi
        if [ ! -z "$CFG_DISABLE_LLVM_ASSERTIONS" ]
        then
            LLVM_ASSERTION_OPTS="--disable-assertions"
        else
            LLVM_ASSERTION_OPTS="--enable-assertions"
            LLVM_INST_DIR=${LLVM_INST_DIR}+Asserts
999 1000 1001 1002 1003 1004 1005 1006
        fi
    else
        msg "not reconfiguring LLVM, external LLVM root"
        # The user is using their own LLVM
        LLVM_BUILD_DIR=
        LLVM_INST_DIR=$CFG_LLVM_ROOT
        do_reconfigure=0
    fi
1007

N
Niko Matsakis 已提交
1008

1009
    if [ ${do_reconfigure} -ne 0 ]
N
Niko Matsakis 已提交
1010
    then
1011 1012 1013 1014 1015 1016
    # because git is hilarious, it might have put the module index
    # in a couple places.
        index1="${CFG_SRC_DIR}.git/modules/src/llvm/index"
        index2="${CFG_SRC_DIR}src/llvm/.git/index"
        for index in ${index1} ${index2}
        do
1017
            config_status="${LLVM_BUILD_DIR}/config.status"
1018 1019 1020 1021 1022 1023 1024 1025
            if test -e ${index} -a \
                    -e ${config_status} -a \
                    ${config_status} -nt ${index}
            then
                msg "not reconfiguring LLVM, config.status is fresh"
                do_reconfigure=0
            fi
        done
N
Niko Matsakis 已提交
1026
    fi
1027 1028 1029 1030 1031

    if [ ${do_reconfigure} -ne 0 ]
    then
        msg "configuring LLVM for $t"

J
Jyun-Yan You 已提交
1032
        LLVM_TARGETS="--enable-targets=x86,x86_64,arm,mips"
1033 1034 1035 1036 1037
        LLVM_BUILD="--build=$t"
        LLVM_HOST="--host=$t"
        LLVM_TARGET="--target=$t"

        # Disable unused LLVM features
1038
        LLVM_OPTS="$LLVM_DBG_OPTS $LLVM_ASSERTION_OPTS --disable-docs --enable-bindings=none"
1039 1040 1041
        # Disable term-info, linkage of which comes in multiple forms,
        # making our snapshots incompatible (#9334)
        LLVM_OPTS="$LLVM_OPTS --disable-terminfo"
1042 1043
        # Try to have LLVM pull in as few dependencies as possible (#9397)
        LLVM_OPTS="$LLVM_OPTS --disable-zlib --disable-libffi"
1044

K
klutzy 已提交
1045 1046 1047
        # Use win32 native thread/lock apis instead of pthread wrapper.
        # (llvm's configure tries to find pthread first, so we have to disable it explicitly.)
        # Also note that pthreads works badly on mingw-w64 systems: #8996
1048
        case "$CFG_BUILD" in
K
klutzy 已提交
1049
            (*-mingw32)
1050 1051 1052 1053
            LLVM_OPTS="$LLVM_OPTS --disable-pthreads"
            ;;
        esac

1054
        case "$CFG_CC" in
1055
            ("ccache clang")
1056 1057
            LLVM_CXX_32="ccache clang++ -Qunused-arguments"
            LLVM_CC_32="ccache clang -Qunused-arguments"
1058 1059 1060 1061 1062

            LLVM_CXX_64="ccache clang++ -Qunused-arguments"
            LLVM_CC_64="ccache clang -Qunused-arguments"
            ;;
            ("clang")
1063 1064
            LLVM_CXX_32="clang++ -Qunused-arguments"
            LLVM_CC_32="clang -Qunused-arguments"
1065

1066 1067
            LLVM_CXX_64="clang++ -Qunused-arguments"
            LLVM_CC_64="clang -Qunused-arguments"
1068 1069
            ;;
            ("ccache gcc")
1070 1071
            LLVM_CXX_32="ccache g++"
            LLVM_CC_32="ccache gcc"
1072 1073 1074 1075 1076

            LLVM_CXX_64="ccache g++"
            LLVM_CC_64="ccache gcc"
            ;;
            ("gcc")
1077 1078
            LLVM_CXX_32="g++"
            LLVM_CC_32="gcc"
1079 1080 1081

            LLVM_CXX_64="g++"
            LLVM_CC_64="gcc"
1082 1083 1084 1085
            ;;

            (*)
            msg "inferring LLVM_CXX/CC from CXX/CC = $CXX/$CC"
1086 1087
            LLVM_CXX_32="$CXX"
            LLVM_CC_32="$CC"
1088 1089 1090 1091

            LLVM_CXX_64="$CXX"
            LLVM_CC_64="$CC"
            ;;
1092
        esac
1093

1094 1095 1096 1097
        case "$CFG_CPUTYPE" in
            (x86*)
                LLVM_CXX_32="$LLVM_CXX_32 -m32"
                LLVM_CC_32="$LLVM_CC_32 -m32"
1098

1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114
                LLVM_CFLAGS_32="-m32"
                LLVM_CXXFLAGS_32="-m32"
                LLVM_LDFLAGS_32="-m32"

                LLVM_CFLAGS_64=""
                LLVM_CXXFLAGS_64=""
                LLVM_LDFLAGS_64=""

                LLVM_CXX_32="$LLVM_CXX_32 -m32"
                LLVM_CC_32="$LLVM_CC_32 -m32"
                ;;

            (*)
                LLVM_CFLAGS_32=""
                LLVM_CXXFLAGS_32=""
                LLVM_LDFLAGS_32=""
1115

1116 1117 1118 1119 1120
                LLVM_CFLAGS_64=""
                LLVM_CXXFLAGS_64=""
                LLVM_LDFLAGS_64=""
                ;;
        esac
1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142

        if echo $t | grep -q x86_64
        then
            LLVM_CXX=$LLVM_CXX_64
            LLVM_CC=$LLVM_CC_64
            LLVM_CFLAGS=$LLVM_CFLAGS_64
            LLVM_CXXFLAGS=$LLVM_CXXFLAGS_64
            LLVM_LDFLAGS=$LLVM_LDFLAGS_64
        else
            LLVM_CXX=$LLVM_CXX_32
            LLVM_CC=$LLVM_CC_32
            LLVM_CFLAGS=$LLVM_CFLAGS_32
            LLVM_CXXFLAGS=$LLVM_CXXFLAGS_32
            LLVM_LDFLAGS=$LLVM_LDFLAGS_32
        fi

        CXX=$LLVM_CXX
        CC=$LLVM_CC
        CFLAGS=$LLVM_CFLAGS
        CXXFLAGS=$LLVM_CXXFLAGS
        LDFLAGS=$LLVM_LDFLAGS

1143
        if [ -z "$CFG_DISABLE_LIBCPP" ] && [ -n "$CFG_USING_CLANG" ]; then
1144 1145 1146
            LLVM_OPTS="$LLVM_OPTS --enable-libcpp"
        fi

1147
        LLVM_FLAGS="$LLVM_TARGETS $LLVM_OPTS $LLVM_BUILD \
1148
                        $LLVM_HOST $LLVM_TARGET --with-python=$CFG_PYTHON"
1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161

        msg "configuring LLVM with:"
        msg "$LLVM_FLAGS"

        export CXX
        export CC
        export CFLAGS
        export CXXFLAGS
        export LDFLAGS

        cd $LLVM_BUILD_DIR
        case $CFG_SRC_DIR in
            /* | [a-z]:* | [A-Z]:*)
1162
                ${CFG_LLVM_SRC_DIR}configure $LLVM_FLAGS
1163 1164
                ;;
            *)
1165
                ${CFG_BUILD_DIR}${CFG_LLVM_SRC_DIR}configure \
1166 1167 1168 1169
                    $LLVM_FLAGS
                ;;
        esac
        need_ok "LLVM configure failed"
B
Brian Anderson 已提交
1170

1171
        cd $CFG_BUILD_DIR
1172
    fi
1173

1174 1175 1176 1177 1178 1179 1180 1181 1182 1183
    # Construct variables for LLVM build and install directories for
    # each target. These will be named
    # CFG_LLVM_BUILD_DIR_${target_triple} but all the hyphens in
    # target_triple will be converted to underscore, because bash
    # variables can't contain hyphens. The makefile will then have to
    # convert back.
    CFG_LLVM_BUILD_DIR=$(echo CFG_LLVM_BUILD_DIR_${t} | tr - _)
    CFG_LLVM_INST_DIR=$(echo CFG_LLVM_INST_DIR_${t} | tr - _)
    eval ${CFG_LLVM_BUILD_DIR}="'$LLVM_BUILD_DIR'"
    eval ${CFG_LLVM_INST_DIR}="'$LLVM_INST_DIR'"
B
Brian Anderson 已提交
1184 1185 1186 1187 1188 1189 1190 1191 1192 1193
done


step_msg "writing configuration"

putvar CFG_SRC_DIR
putvar CFG_BUILD_DIR
putvar CFG_OSTYPE
putvar CFG_CPUTYPE
putvar CFG_CONFIGURE_ARGS
1194
putvar CFG_PREFIX
H
Heather 已提交
1195 1196 1197
putvar CFG_BUILD
putvar CFG_HOST
putvar CFG_TARGET
1198
putvar CFG_LIBDIR
1199
putvar CFG_LIBDIR_RELATIVE
B
Brian Anderson 已提交
1200
putvar CFG_DISABLE_MANAGE_SUBMODULES
1201 1202
putvar CFG_ANDROID_CROSS_PATH
putvar CFG_MINGW32_CROSS_PATH
H
Heather 已提交
1203
putvar CFG_MANDIR
1204
putvar CFG_DISABLE_INJECT_STD_VERSION
1205
putvar CFG_JEMALLOC_ROOT
1206
putvar CFG_LIBUV_ROOT
A
Alex Crichton 已提交
1207
putvar CFG_DISABLE_JEMALLOC
H
Heather 已提交
1208

1209 1210
# Avoid spurious warnings from clang by feeding it original source on
# ccache-miss rather than preprocessed input.
1211
if [ ! -z "$CFG_ENABLE_CCACHE" ] && [ ! -z "$CFG_USING_CLANG" ]
1212 1213 1214 1215 1216
then
    CFG_CCACHE_CPP2=1
    putvar CFG_CCACHE_CPP2
fi

1217 1218 1219 1220 1221 1222 1223
if [ ! -z "$CFG_ENABLE_CCACHE" ]
then
    CFG_CCACHE_BASEDIR=${CFG_SRC_DIR}
    putvar CFG_CCACHE_BASEDIR
fi


1224 1225 1226 1227 1228 1229
if [ ! -z $BAD_PANDOC ]
then
    CFG_PANDOC=
    putvar CFG_PANDOC
fi

B
Brian Anderson 已提交
1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241
# 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.
if [ $CFG_OSTYPE != unknown-linux-gnu ] && [ $CFG_OSTYPE != apple-darwin ]
then
    CFG_BAD_VALGRIND=1
    putvar CFG_BAD_VALGRIND
fi

putvar CFG_LLVM_ROOT
putvar CFG_LLVM_SRC_DIR

H
Heather 已提交
1242
for t in $CFG_HOST
B
Brian Anderson 已提交
1243 1244 1245
do
    CFG_LLVM_BUILD_DIR=$(echo CFG_LLVM_BUILD_DIR_${t} | tr - _)
    CFG_LLVM_INST_DIR=$(echo CFG_LLVM_INST_DIR_${t} | tr - _)
1246 1247 1248
    putvar $CFG_LLVM_BUILD_DIR
    putvar $CFG_LLVM_INST_DIR
done
1249 1250 1251

# Munge any paths that appear in config.mk back to posix-y
perl -i.bak -p -e 's@ ([a-zA-Z]):[/\\]@ /\1/@go;' \
1252 1253
               -e 's@\\@/@go;' config.tmp
rm -f config.tmp.bak
1254

B
Brian Anderson 已提交
1255
msg
1256 1257 1258
copy_if_changed ${CFG_SRC_DIR}Makefile.in ./Makefile
move_if_changed config.tmp config.mk
rm -f config.tmp
1259
touch config.stamp
1260

1261
step_msg "complete"
B
Brian Anderson 已提交
1262
msg "run \`make help\`"
1263
msg