Merge pull request #3097 from vors/docx
[platform/upstream/coreclr.git] / tests / setup-runtime-dependencies.sh
1 #!/usr/bin/env bash
2 # set -x
3
4 #
5 # Constants
6 #
7 readonly EXIT_CODE_SUCCESS=0
8
9 #
10 # This script should be located in coreclr/tests.
11 #
12
13 function print_usage {
14     echo ''
15     echo 'Download coredistools for GC stress testing'
16     echo ''
17     echo 'Command line:'
18     echo ''
19     echo './setup-gcstress.sh --outputDir=<coredistools_lib_install_path>'
20     echo ''
21     echo 'Required arguments:'
22     echo '  --outputDir=<path>         : Directory to install libcoredistools.so'
23     echo ''
24 }
25
26 # temorary directory 
27 tmpDirPath=
28
29 function exit_with_error {
30     local errorCode=$1
31     local errorMsg=$2
32
33     if [ ! -z "$2" ]; then
34         echo $2
35     fi
36     
37     if [ -e $tmpDirPath ]; then
38         rm -rf $tmpDirPath
39     fi
40     
41     exit $errorCode
42 }
43
44 function handle_ctrl_c {
45     exit_with_error 1 'Aborted by Ctrl+C'
46  }
47
48 # Register the Ctrl-C handler
49 trap handle_ctrl_c INT
50
51 # Argument variables
52 libInstallDir=
53
54 # Handle arguments
55 verbose=0
56 for i in "$@"
57 do
58     case $i in
59         -h|--help)
60             exit $EXIT_CODE_SUCCESS
61             ;;
62         -v|--verbose)
63             verbose=1
64             ;;
65         --outputDir=*)
66             libInstallDir=${i#*=}
67             ;;
68         *)
69             echo "Unknown switch: $i"
70             print_usage
71             exit $EXIT_CODE_SUCCESS
72             ;;
73     esac
74 done
75
76 if [ -z "$libInstallDir" ]; then
77     echo "--libInstallDir is required."
78     print_usage
79     exit_with_error 1
80 fi
81
82 # create temp directory
83 tmpDirPath=`mktemp -d`
84 if [ ! -e $tmpDirPath ]; then
85     exit_with_error 1 "Cannot create a temporary directory"
86 fi
87
88 # This script must be located in coreclr/tests.
89 scriptDir=$(cd "$(dirname "$0")"; pwd -P)
90 dotnetToolsDir=$scriptDir/../Tools
91 dotnetCmd=${dotnetToolsDir}/dotnetcli/dotnet
92 packageDir=${scriptDir}/../packages
93 jsonFilePath=${tmpDirPath}/project.json
94
95 # Check tool directory
96 if [ ! -e $dotnetToolsDir ]; then
97     exit_with_error 1 'Directory containing dotnet commandline does not exist:'$dotnetToolsDir 
98 fi
99 if [ ! -e $dotnetCmd ]; then
100     exit_with_error 1 'dotnet commandline does not exist:'$dotnetCmd
101 fi
102
103 # make package directory
104 if [ ! -e $packageDir ]; then
105     mkdir -p $packageDir
106 fi
107
108 # make output directory
109 if [ ! -e $libInstallDir ]; then
110     mkdir -p $libInstallDir
111 fi
112
113 # Query runtime Id
114 rid=`$dotnetCmd --info | grep 'RID:' | sed 's/^ *RID: *//g'`  
115 if [ -z "$rid" ]; then
116     exit_with_error 1 "Failed to query runtime Id"
117 fi    
118
119 # Write dependency information to project.json
120 packageName='runtime.'$rid'.Microsoft.NETCore.CoreDisTools'
121 echo {  \
122     \"dependencies\": { \
123     \"$packageName\": \"1.0.1-prerelease-*\" \
124     }, \
125     \"frameworks\": { \"dnxcore50\": { } } \
126     } > $jsonFilePath
127
128 # Download the package
129 echo Downloading CoreDisTools package
130 bash -c -x "$dotnetCmd restore $jsonFilePath --source https://dotnet.myget.org/F/dotnet-core/ --packages $packageDir"
131 if [ $? -ne 0 ]
132 then
133     exit_with_error 1 "Failed to restore the package"
134 fi
135
136 # Get library path
137 libPath=`find $packageDir | grep $rid | grep -m 1 libcoredistools`
138 if [ ! -e $libPath ]; then
139     exit_with_error 1 'Failed to locate the downloaded library'
140 fi
141
142 # Copy library to output directory
143 echo 'Copy library:' $libPath '-->' $libInstallDir/
144 cp -f $libPath $libInstallDir
145 if [ $? -ne 0 ]
146 then
147     exit_with_error 1 "Failed to copy the library"
148 fi
149
150 # Delete temporary files
151 rm -rf $tmpDirPath
152
153 # Return success
154 exit $EXIT_CODE_SUCCESS
155