summaryrefslogtreecommitdiff
path: root/tests/setup-runtime-dependencies.sh
blob: 3db178c4f928b0421e60161d6d9c98dbfd77d876 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/usr/bin/env bash
set -x
#
# Constants
#
readonly EXIT_CODE_SUCCESS=0

#
# This script should be located in coreclr/tests.
#

function print_usage {
    echo ''
    echo 'Download coredistool for GC stress testing'
    echo ''
    echo 'Command line:'
    echo ''
    echo './setup-gcstress.sh --outputDir=<coredistools_lib_install_path>'
    echo ''
    echo 'Required arguments:'
    echo '  --outputDir=<path>         : Directory to install libcoredistools.so'
    echo ''
}

# temorary directory 
tmpDirPath=

function exit_with_error {
    local errorCode=$1
    local errorMsg=$2

    if [ ! -z "$2" ]; then
        echo $2
    fi
    
    if [ -e $tmpDirPath ]; then
        rm -rf $tmpDirPath
    fi
    
    exit $errorCode
}

function handle_ctrl_c {
    exit_with_error 1 'Aborted by Ctrl+C'
 }

# Register the Ctrl-C handler
trap handle_ctrl_c INT

# Argument variables
libInstallDir=

# Handle arguments
verbose=0
for i in "$@"
do
    case $i in
        -h|--help)
            exit $EXIT_CODE_SUCCESS
            ;;
        -v|--verbose)
            verbose=1
            ;;
        --outputDir=*)
            libInstallDir=${i#*=}
            ;;
        *)
            echo "Unknown switch: $i"
            print_usage
            exit $EXIT_CODE_SUCCESS
            ;;
    esac
done

if [ -z "$libInstallDir" ]; then
    echo "--libInstallDir is required."
    print_usage
    exit_with_error 1
fi

# create temp directory
tmpDirPath=`mktemp -d`
if [ ! -e $tmpDirPath ]; then
    exit_with_error 1 "Cannot create a temporary directory"
fi

# This script must be located in coreclr/tests.
scriptDir=$(cd "$(dirname "$0")"; pwd -P)
dotnetToolsDir=$scriptDir/../Tools
dotnetCmd=${dotnetToolsDir}/dotnetcli/dotnet
packageDir=${scriptDir}/../packages
jsonFilePath=${tmpDirPath}/project.json

# Check tool directory
if [ ! -e $dotnetToolsDir ]; then
    exit_with_error 1 'Directory containing dotnet commandline does not exist:'$dotnetToolsDir 
fi
if [ ! -e $dotnetCmd ]; then
    exit_with_error 1 'donet commandline does not exist:'$dotnetCmd
fi

# make package directory
if [ ! -e $packageDir ]; then
    mkdir -p $packageDir
fi

# make output directory
if [ ! -e $libInstallDir ]; then
    mkdir -p $libInstallDir
fi

# Query runtime Id
rid=`$dotnetCmd --info | grep 'RID:' | sed 's/^ *RID: *//g'`  
if [ -z "$rid" ]; then
    exit_with_error 1 "Failed to query runtime Id"
fi    

# Write dependency information to project.json
packageName='runtime.'$rid'.Microsoft.NETCore.CoreDisTools'
echo {  \
    \"dependencies\": { \
    \"$packageName\": \"1.0.1-prerelease-00001\" \
    }, \
    \"frameworks\": { \"dnxcore50\": { } } \
    } > $jsonFilePath

# Download the package
echo Downloading CoreDisTools package
bash -c -x "$dotnetCmd restore $jsonFilePath --source https://dotnet.myget.org/F/dotnet-core/ --packages $packageDir"
if [ $? -ne 0 ]
then
    exit_with_error 1 "Failed to restore the package"
fi

# Get library path
libPath=`find $packageDir | grep $rid | grep -m 1 libcoredistools`
if [ ! -e $libPath ]; then
    exit_with_error 1 'Failed to locate the downloaded library'
fi

# Copy library to output directory
echo 'Copy library:' $libPath '-->' $libInstallDir/
cp -f $libPath $libInstallDir
if [ $? -ne 0 ]
then
    exit_with_error 1 "Failed to copy the library"
fi

# Delete temporary files
rm -rf $tmpDirPath

# Return success
exit $EXIT_CODE_SUCCESS