1*58b9f456SAndroid Build Coastguard Worker#!/usr/bin/env bash 2*58b9f456SAndroid Build Coastguard Worker#===- llvm/utils/docker/scripts/checkout.sh ---------------------===// 3*58b9f456SAndroid Build Coastguard Worker# 4*58b9f456SAndroid Build Coastguard Worker# The LLVM Compiler Infrastructure 5*58b9f456SAndroid Build Coastguard Worker# 6*58b9f456SAndroid Build Coastguard Worker# This file is distributed under the University of Illinois Open Source 7*58b9f456SAndroid Build Coastguard Worker# License. See LICENSE.TXT for details. 8*58b9f456SAndroid Build Coastguard Worker# 9*58b9f456SAndroid Build Coastguard Worker#===-----------------------------------------------------------------------===// 10*58b9f456SAndroid Build Coastguard Worker 11*58b9f456SAndroid Build Coastguard Workerset -e 12*58b9f456SAndroid Build Coastguard Worker 13*58b9f456SAndroid Build Coastguard Workerfunction show_usage() { 14*58b9f456SAndroid Build Coastguard Worker cat << EOF 15*58b9f456SAndroid Build Coastguard WorkerUsage: checkout.sh [options] 16*58b9f456SAndroid Build Coastguard Worker 17*58b9f456SAndroid Build Coastguard WorkerCheckout svn sources into /tmp/clang-build/src. Used inside a docker container. 18*58b9f456SAndroid Build Coastguard Worker 19*58b9f456SAndroid Build Coastguard WorkerAvailable options: 20*58b9f456SAndroid Build Coastguard Worker -h|--help show this help message 21*58b9f456SAndroid Build Coastguard Worker -b|--branch svn branch to checkout, i.e. 'trunk', 22*58b9f456SAndroid Build Coastguard Worker 'branches/release_40' 23*58b9f456SAndroid Build Coastguard Worker (default: 'trunk') 24*58b9f456SAndroid Build Coastguard Worker -p|--llvm-project name of an svn project to checkout. 25*58b9f456SAndroid Build Coastguard Worker For clang, please use 'clang', not 'cfe'. 26*58b9f456SAndroid Build Coastguard Worker Project 'llvm' is always included and ignored, if 27*58b9f456SAndroid Build Coastguard Worker specified. 28*58b9f456SAndroid Build Coastguard Worker Can be specified multiple times. 29*58b9f456SAndroid Build Coastguard WorkerEOF 30*58b9f456SAndroid Build Coastguard Worker} 31*58b9f456SAndroid Build Coastguard Worker 32*58b9f456SAndroid Build Coastguard WorkerLLVM_BRANCH="" 33*58b9f456SAndroid Build Coastguard Worker# We always checkout llvm 34*58b9f456SAndroid Build Coastguard WorkerLLVM_PROJECTS="llvm" 35*58b9f456SAndroid Build Coastguard WorkerSOURCE_DIR="" 36*58b9f456SAndroid Build Coastguard Worker 37*58b9f456SAndroid Build Coastguard Workerfunction contains_project() { 38*58b9f456SAndroid Build Coastguard Worker local TARGET_PROJ="$1" 39*58b9f456SAndroid Build Coastguard Worker local PROJ 40*58b9f456SAndroid Build Coastguard Worker for PROJ in $LLVM_PROJECTS; do 41*58b9f456SAndroid Build Coastguard Worker if [ "$PROJ" == "$TARGET_PROJ" ]; then 42*58b9f456SAndroid Build Coastguard Worker return 0 43*58b9f456SAndroid Build Coastguard Worker fi 44*58b9f456SAndroid Build Coastguard Worker done 45*58b9f456SAndroid Build Coastguard Worker return 1 46*58b9f456SAndroid Build Coastguard Worker} 47*58b9f456SAndroid Build Coastguard Worker 48*58b9f456SAndroid Build Coastguard Workerwhile [[ $# -gt 0 ]]; do 49*58b9f456SAndroid Build Coastguard Worker case "$1" in 50*58b9f456SAndroid Build Coastguard Worker --to) 51*58b9f456SAndroid Build Coastguard Worker shift 52*58b9f456SAndroid Build Coastguard Worker SOURCE_DIR="$1" 53*58b9f456SAndroid Build Coastguard Worker shift 54*58b9f456SAndroid Build Coastguard Worker ;; 55*58b9f456SAndroid Build Coastguard Worker -b|--branch) 56*58b9f456SAndroid Build Coastguard Worker shift 57*58b9f456SAndroid Build Coastguard Worker LLVM_BRANCH="$1" 58*58b9f456SAndroid Build Coastguard Worker shift 59*58b9f456SAndroid Build Coastguard Worker ;; 60*58b9f456SAndroid Build Coastguard Worker -p|--llvm-project) 61*58b9f456SAndroid Build Coastguard Worker shift 62*58b9f456SAndroid Build Coastguard Worker PROJ="$1" 63*58b9f456SAndroid Build Coastguard Worker shift 64*58b9f456SAndroid Build Coastguard Worker 65*58b9f456SAndroid Build Coastguard Worker if [ "$PROJ" == "cfe" ]; then 66*58b9f456SAndroid Build Coastguard Worker PROJ="clang" 67*58b9f456SAndroid Build Coastguard Worker fi 68*58b9f456SAndroid Build Coastguard Worker 69*58b9f456SAndroid Build Coastguard Worker if ! contains_project "$PROJ" ; then 70*58b9f456SAndroid Build Coastguard Worker if [ "$PROJ" == "clang-tools-extra" ] && [ ! contains_project "clang" ]; then 71*58b9f456SAndroid Build Coastguard Worker echo "Project 'clang-tools-extra' specified before 'clang'. Adding 'clang' to a list of projects first." 72*58b9f456SAndroid Build Coastguard Worker LLVM_PROJECTS="$LLVM_PROJECTS clang" 73*58b9f456SAndroid Build Coastguard Worker fi 74*58b9f456SAndroid Build Coastguard Worker LLVM_PROJECTS="$LLVM_PROJECTS $PROJ" 75*58b9f456SAndroid Build Coastguard Worker else 76*58b9f456SAndroid Build Coastguard Worker echo "Project '$PROJ' is already enabled, ignoring extra occurrences." 77*58b9f456SAndroid Build Coastguard Worker fi 78*58b9f456SAndroid Build Coastguard Worker ;; 79*58b9f456SAndroid Build Coastguard Worker -h|--help) 80*58b9f456SAndroid Build Coastguard Worker show_usage 81*58b9f456SAndroid Build Coastguard Worker exit 0 82*58b9f456SAndroid Build Coastguard Worker ;; 83*58b9f456SAndroid Build Coastguard Worker *) 84*58b9f456SAndroid Build Coastguard Worker echo "Unknown option: $1" 85*58b9f456SAndroid Build Coastguard Worker exit 1 86*58b9f456SAndroid Build Coastguard Worker esac 87*58b9f456SAndroid Build Coastguard Workerdone 88*58b9f456SAndroid Build Coastguard Worker 89*58b9f456SAndroid Build Coastguard Workerif [ "$SOURCE_DIR" == "" ]; then 90*58b9f456SAndroid Build Coastguard Worker echo "Must specify checkout directory using --to" 91*58b9f456SAndroid Build Coastguard Worker exit 1 92*58b9f456SAndroid Build Coastguard Workerfi 93*58b9f456SAndroid Build Coastguard Worker 94*58b9f456SAndroid Build Coastguard Workerif [ "$LLVM_BRANCH" == "" ]; then 95*58b9f456SAndroid Build Coastguard Worker GIT_BRANCH_ARG="" 96*58b9f456SAndroid Build Coastguard Workerelse 97*58b9f456SAndroid Build Coastguard Worker GIT_BRANCH_ARG="--branch $LLVM_BRANCH" 98*58b9f456SAndroid Build Coastguard Workerfi 99*58b9f456SAndroid Build Coastguard Worker 100*58b9f456SAndroid Build Coastguard Workerif [ "$LLVM_SVN_REV" != "" ]; then 101*58b9f456SAndroid Build Coastguard Worker SVN_REV_ARG="-r$LLVM_SVN_REV" 102*58b9f456SAndroid Build Coastguard Worker echo "Checking out svn revision r$LLVM_SVN_REV." 103*58b9f456SAndroid Build Coastguard Workerelse 104*58b9f456SAndroid Build Coastguard Worker SVN_REV_ARG="" 105*58b9f456SAndroid Build Coastguard Worker echo "Checking out latest svn revision." 106*58b9f456SAndroid Build Coastguard Workerfi 107*58b9f456SAndroid Build Coastguard Worker 108*58b9f456SAndroid Build Coastguard Worker# Get the sources from svn. 109*58b9f456SAndroid Build Coastguard Workerecho "Checking out sources from git" 110*58b9f456SAndroid Build Coastguard Worker 111*58b9f456SAndroid Build Coastguard Workerfor LLVM_PROJECT in $LLVM_PROJECTS; do 112*58b9f456SAndroid Build Coastguard Worker if [ "$LLVM_PROJECT" == "llvm" ]; then 113*58b9f456SAndroid Build Coastguard Worker CHECKOUT_DIR="$SOURCE_DIR" 114*58b9f456SAndroid Build Coastguard Worker elif [ "$LLVM_PROJECT" == "libcxx" ] || [ "$LLVM_PROJECT" == "libcxxabi" ] || [ "$LLVM_PROJECT" == "compiler-rt" ]; then 115*58b9f456SAndroid Build Coastguard Worker CHECKOUT_DIR="$SOURCE_DIR/projects/$LLVM_PROJECT" 116*58b9f456SAndroid Build Coastguard Worker elif [ "$LLVM_PROJECT" == "clang" ]; then 117*58b9f456SAndroid Build Coastguard Worker CHECKOUT_DIR="$SOURCE_DIR/tools/clang" 118*58b9f456SAndroid Build Coastguard Worker elif [ "$LLVM_PROJECT" == "clang-tools-extra" ]; then 119*58b9f456SAndroid Build Coastguard Worker CHECKOUT_DIR="$SOURCE_DIR/tools/clang/tools/extra" 120*58b9f456SAndroid Build Coastguard Worker else 121*58b9f456SAndroid Build Coastguard Worker CHECKOUT_DIR="$SOURCE_DIR/$LLVM_PROJECT" 122*58b9f456SAndroid Build Coastguard Worker fi 123*58b9f456SAndroid Build Coastguard Worker 124*58b9f456SAndroid Build Coastguard Worker echo "Checking out https://git.llvm.org/git/$LLVM_PROJECT to $CHECKOUT_DIR" 125*58b9f456SAndroid Build Coastguard Worker git clone --depth=1 $GIT_BRANCH_ARG \ 126*58b9f456SAndroid Build Coastguard Worker "https://git.llvm.org/git/$LLVM_PROJECT.git" \ 127*58b9f456SAndroid Build Coastguard Worker "$CHECKOUT_DIR" 128*58b9f456SAndroid Build Coastguard Workerdone 129*58b9f456SAndroid Build Coastguard Worker 130*58b9f456SAndroid Build Coastguard Workerecho "Done" 131