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