shopify-ruby-definitions 0.0.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +0 -1
  3. data/README.md +23 -0
  4. data/lib/shopify_ruby_definitions/ruby_versions.rb +10 -31
  5. data/lib/shopify_ruby_definitions/version.rb +1 -2
  6. data/lib/shopify_ruby_definitions.rb +0 -4
  7. data/rubies/3.2.2-pshopify4 +35 -0
  8. metadata +18 -176
  9. data/lib/shopify_ruby_definitions/ruby_build.rb +0 -10
  10. data/sorbet/config +0 -4
  11. data/sorbet/rbi/annotations/rainbow.rbi +0 -269
  12. data/sorbet/rbi/gems/ast@2.4.2.rbi +0 -584
  13. data/sorbet/rbi/gems/diff-lcs@1.5.0.rbi +0 -1083
  14. data/sorbet/rbi/gems/json@2.6.3.rbi +0 -1533
  15. data/sorbet/rbi/gems/minitest@5.18.0.rbi +0 -1491
  16. data/sorbet/rbi/gems/netrc@0.11.0.rbi +0 -158
  17. data/sorbet/rbi/gems/parallel@1.23.0.rbi +0 -273
  18. data/sorbet/rbi/gems/parser@3.2.2.1.rbi +0 -7253
  19. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +0 -402
  20. data/sorbet/rbi/gems/rake@13.0.6.rbi +0 -3024
  21. data/sorbet/rbi/gems/rbi@0.0.16.rbi +0 -3049
  22. data/sorbet/rbi/gems/regexp_parser@2.8.0.rbi +0 -3748
  23. data/sorbet/rbi/gems/rexml@3.2.5.rbi +0 -4717
  24. data/sorbet/rbi/gems/rubocop-ast@1.28.1.rbi +0 -6969
  25. data/sorbet/rbi/gems/rubocop-minitest@0.31.0.rbi +0 -2528
  26. data/sorbet/rbi/gems/rubocop-shopify@2.13.0.rbi +0 -8
  27. data/sorbet/rbi/gems/rubocop@1.51.0.rbi +0 -55313
  28. data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +0 -1317
  29. data/sorbet/rbi/gems/spoom@1.2.1.rbi +0 -2536
  30. data/sorbet/rbi/gems/tapioca@0.11.6.rbi +0 -3301
  31. data/sorbet/rbi/gems/thor@1.2.2.rbi +0 -3965
  32. data/sorbet/rbi/gems/unicode-display_width@2.4.2.rbi +0 -65
  33. data/sorbet/rbi/gems/unparser@0.6.7.rbi +0 -4524
  34. data/sorbet/rbi/gems/yard-sorbet@0.8.1.rbi +0 -428
  35. data/sorbet/rbi/gems/yard@0.9.34.rbi +0 -18219
  36. data/sorbet/tapioca/config.yml +0 -13
  37. data/sorbet/tapioca/require.rb +0 -4
  38. data/vendor/ruby-build/LICENSE +0 -19
  39. data/vendor/ruby-build/bin/ruby-build +0 -1572
  40. data/vendor/ruby-build/share/ruby-build/2.6.0 +0 -2
  41. data/vendor/ruby-build/share/ruby-build/2.6.0-dev +0 -2
  42. data/vendor/ruby-build/share/ruby-build/2.6.0-preview1 +0 -2
  43. data/vendor/ruby-build/share/ruby-build/2.6.0-preview2 +0 -2
  44. data/vendor/ruby-build/share/ruby-build/2.6.0-preview3 +0 -2
  45. data/vendor/ruby-build/share/ruby-build/2.6.0-rc1 +0 -2
  46. data/vendor/ruby-build/share/ruby-build/2.6.0-rc2 +0 -2
  47. data/vendor/ruby-build/share/ruby-build/2.6.1 +0 -2
  48. data/vendor/ruby-build/share/ruby-build/2.6.10 +0 -2
  49. data/vendor/ruby-build/share/ruby-build/2.6.2 +0 -2
  50. data/vendor/ruby-build/share/ruby-build/2.6.3 +0 -2
  51. data/vendor/ruby-build/share/ruby-build/2.6.4 +0 -2
  52. data/vendor/ruby-build/share/ruby-build/2.6.5 +0 -2
  53. data/vendor/ruby-build/share/ruby-build/2.6.6 +0 -2
  54. data/vendor/ruby-build/share/ruby-build/2.6.7 +0 -2
  55. data/vendor/ruby-build/share/ruby-build/2.6.8 +0 -2
  56. data/vendor/ruby-build/share/ruby-build/2.6.9 +0 -2
  57. data/vendor/ruby-build/share/ruby-build/2.7.0 +0 -2
  58. data/vendor/ruby-build/share/ruby-build/2.7.0-dev +0 -2
  59. data/vendor/ruby-build/share/ruby-build/2.7.0-preview1 +0 -2
  60. data/vendor/ruby-build/share/ruby-build/2.7.0-preview2 +0 -2
  61. data/vendor/ruby-build/share/ruby-build/2.7.0-preview3 +0 -2
  62. data/vendor/ruby-build/share/ruby-build/2.7.0-rc1 +0 -2
  63. data/vendor/ruby-build/share/ruby-build/2.7.0-rc2 +0 -2
  64. data/vendor/ruby-build/share/ruby-build/2.7.1 +0 -2
  65. data/vendor/ruby-build/share/ruby-build/2.7.2 +0 -2
  66. data/vendor/ruby-build/share/ruby-build/2.7.3 +0 -2
  67. data/vendor/ruby-build/share/ruby-build/2.7.4 +0 -2
  68. data/vendor/ruby-build/share/ruby-build/2.7.5 +0 -2
  69. data/vendor/ruby-build/share/ruby-build/2.7.6 +0 -2
  70. data/vendor/ruby-build/share/ruby-build/2.7.7 +0 -2
  71. data/vendor/ruby-build/share/ruby-build/2.7.8 +0 -2
  72. data/vendor/ruby-build/share/ruby-build/3.0.0 +0 -2
  73. data/vendor/ruby-build/share/ruby-build/3.0.0-dev +0 -2
  74. data/vendor/ruby-build/share/ruby-build/3.0.0-preview1 +0 -2
  75. data/vendor/ruby-build/share/ruby-build/3.0.0-preview2 +0 -2
  76. data/vendor/ruby-build/share/ruby-build/3.0.0-rc1 +0 -2
  77. data/vendor/ruby-build/share/ruby-build/3.0.1 +0 -2
  78. data/vendor/ruby-build/share/ruby-build/3.0.2 +0 -2
  79. data/vendor/ruby-build/share/ruby-build/3.0.3 +0 -2
  80. data/vendor/ruby-build/share/ruby-build/3.0.4 +0 -2
  81. data/vendor/ruby-build/share/ruby-build/3.0.5 +0 -2
  82. data/vendor/ruby-build/share/ruby-build/3.0.6 +0 -2
  83. data/vendor/ruby-build/share/ruby-build/3.1.0 +0 -2
  84. data/vendor/ruby-build/share/ruby-build/3.1.0-dev +0 -2
  85. data/vendor/ruby-build/share/ruby-build/3.1.0-preview1 +0 -2
  86. data/vendor/ruby-build/share/ruby-build/3.1.1 +0 -2
  87. data/vendor/ruby-build/share/ruby-build/3.1.2 +0 -2
  88. data/vendor/ruby-build/share/ruby-build/3.1.3 +0 -2
  89. data/vendor/ruby-build/share/ruby-build/3.1.4 +0 -2
  90. data/vendor/ruby-build/share/ruby-build/3.2.0 +0 -2
  91. data/vendor/ruby-build/share/ruby-build/3.2.0-dev +0 -2
  92. data/vendor/ruby-build/share/ruby-build/3.2.0-preview1 +0 -2
  93. data/vendor/ruby-build/share/ruby-build/3.2.0-preview2 +0 -2
  94. data/vendor/ruby-build/share/ruby-build/3.2.0-preview3 +0 -2
  95. data/vendor/ruby-build/share/ruby-build/3.2.0-rc1 +0 -2
  96. data/vendor/ruby-build/share/ruby-build/3.2.1 +0 -2
  97. data/vendor/ruby-build/share/ruby-build/3.2.2 +0 -2
  98. data/vendor/ruby-build/share/ruby-build/3.3.0-dev +0 -2
  99. data/vendor/ruby-build/share/ruby-build/3.3.0-preview1 +0 -2
  100. data/vendor/ruby-build/share/ruby-build/truffleruby-21.0.0 +0 -13
  101. data/vendor/ruby-build/share/ruby-build/truffleruby-21.1.0 +0 -13
  102. data/vendor/ruby-build/share/ruby-build/truffleruby-21.2.0 +0 -17
  103. data/vendor/ruby-build/share/ruby-build/truffleruby-21.2.0.1 +0 -17
  104. data/vendor/ruby-build/share/ruby-build/truffleruby-21.3.0 +0 -17
  105. data/vendor/ruby-build/share/ruby-build/truffleruby-22.0.0.2 +0 -17
  106. data/vendor/ruby-build/share/ruby-build/truffleruby-22.1.0 +0 -17
  107. data/vendor/ruby-build/share/ruby-build/truffleruby-22.2.0 +0 -21
  108. data/vendor/ruby-build/share/ruby-build/truffleruby-22.3.0 +0 -21
  109. data/vendor/ruby-build/share/ruby-build/truffleruby-22.3.1 +0 -21
  110. data/vendor/ruby-build/share/ruby-build/truffleruby-23.0.0-preview1 +0 -21
  111. data/vendor/ruby-build/share/ruby-build/truffleruby-dev +0 -21
  112. /data/{vendor/ruby-build/share/ruby-build → rubies}/3.0.0-pshopify9 +0 -0
  113. /data/{vendor/ruby-build/share/ruby-build → rubies}/3.0.1-pshopify2 +0 -0
  114. /data/{vendor/ruby-build/share/ruby-build → rubies}/3.0.2-pshopify3 +0 -0
  115. /data/{vendor/ruby-build/share/ruby-build → rubies}/3.1.0-pshopify1 +0 -0
  116. /data/{vendor/ruby-build/share/ruby-build → rubies}/3.1.1-pshopify2 +0 -0
  117. /data/{vendor/ruby-build/share/ruby-build → rubies}/3.1.2-pshopify2 +0 -0
  118. /data/{vendor/ruby-build/share/ruby-build → rubies}/3.1.3-pshopify1 +0 -0
  119. /data/{vendor/ruby-build/share/ruby-build → rubies}/3.1.4-pshopify1 +0 -0
  120. /data/{vendor/ruby-build/share/ruby-build → rubies}/3.2.0-pshopify2 +0 -0
  121. /data/{vendor/ruby-build/share/ruby-build → rubies}/3.2.1-pshopify5 +0 -0
  122. /data/{vendor/ruby-build/share/ruby-build → rubies}/3.2.2-pshopify3 +0 -0
  123. /data/{vendor/ruby-build/share/ruby-build → rubies}/yjit-3.1.0-dev +0 -0
@@ -1,1572 +0,0 @@
1
- #!/usr/bin/env bash
2
- #
3
- # Usage: ruby-build [-kpv] <definition> <prefix>
4
- # ruby-build --definitions
5
- # ruby-build --version
6
- #
7
- # -k/--keep Do not remove source tree after installation
8
- # -p/--patch Apply a patch from stdin before building
9
- # -v/--verbose Verbose mode: print compilation status to stdout
10
- # -4/--ipv4 Resolve names to IPv4 addresses only
11
- # -6/--ipv6 Resolve names to IPv6 addresses only
12
- # --definitions List all local definitions
13
- # -l/--list List latest stable releases for each Ruby
14
- # --version Show version of ruby-build
15
- #
16
-
17
- RUBY_BUILD_VERSION="20230512"
18
-
19
- OLDIFS="$IFS"
20
-
21
- set -E
22
- exec 3<&2 # preserve original stderr at fd 3
23
-
24
-
25
- lib() {
26
- parse_options() {
27
- OPTIONS=()
28
- ARGUMENTS=()
29
- local arg option index
30
-
31
- for arg in "$@"; do
32
- if [ "${arg:0:1}" = "-" ]; then
33
- if [ "${arg:1:1}" = "-" ]; then
34
- OPTIONS[${#OPTIONS[*]}]="${arg:2}"
35
- else
36
- index=1
37
- while option="${arg:$index:1}"; do
38
- [ -n "$option" ] || break
39
- OPTIONS[${#OPTIONS[*]}]="$option"
40
- index=$(($index+1))
41
- done
42
- fi
43
- else
44
- ARGUMENTS[${#ARGUMENTS[*]}]="$arg"
45
- fi
46
- done
47
- }
48
-
49
- if [ "$1" == "--$FUNCNAME" ]; then
50
- declare -f "$FUNCNAME"
51
- echo "$FUNCNAME \"\$1\";"
52
- exit
53
- fi
54
- }
55
- lib "$1"
56
-
57
-
58
- resolve_link() {
59
- $(type -p greadlink readlink | head -1) "$1"
60
- }
61
-
62
- abs_dirname() {
63
- local cwd="$(pwd)"
64
- local path="$1"
65
-
66
- while [ -n "$path" ]; do
67
- cd "${path%/*}"
68
- local name="${path##*/}"
69
- path="$(resolve_link "$name" || true)"
70
- done
71
-
72
- pwd
73
- cd "$cwd"
74
- }
75
-
76
- capitalize() {
77
- printf "%s" "$1" | tr a-z A-Z
78
- }
79
-
80
- sanitize() {
81
- printf "%s" "$1" | sed "s/[^A-Za-z0-9.-]/_/g; s/__*/_/g"
82
- }
83
-
84
- colorize() {
85
- if [ -t 1 ]; then printf "\e[%sm%s\e[m" "$1" "$2"
86
- else echo -n "$2"
87
- fi
88
- }
89
-
90
- os_information() {
91
- if type -p lsb_release >/dev/null; then
92
- lsb_release -sir | xargs echo
93
- elif type -p sw_vers >/dev/null; then
94
- echo "$(sw_vers -productName) $(sw_vers -productVersion)"
95
- elif [ -r /etc/os-release ]; then
96
- source /etc/os-release
97
- echo "$NAME" $VERSION_ID
98
- else
99
- local os="$(cat /etc/{centos,redhat,fedora,system}-release /etc/debian_version 2>/dev/null | head -1)"
100
- echo "${os:-$(uname -sr)}"
101
- fi
102
- }
103
-
104
- is_mac() {
105
- [ "$(uname -s)" = "Darwin" ] || return 1
106
- [ $# -eq 0 ] || [ "$(osx_version)" "$@" ]
107
- }
108
-
109
- is_freebsd() {
110
- [ "$(uname -s)" = "FreeBSD" ]
111
- }
112
-
113
- freebsd_package_prefix() {
114
- local package="$1"
115
- pkg info --prefix "$package" 2>/dev/null | cut -wf2
116
- }
117
-
118
- # 9.1 -> 901
119
- # 10.9 -> 1009
120
- # 10.10 -> 1010
121
- osx_version() {
122
- local -a ver
123
- IFS=. ver=( `sw_vers -productVersion` )
124
- IFS="$OLDIFS"
125
- echo $(( ${ver[0]}*100 + ${ver[1]} ))
126
- }
127
-
128
- build_failed() {
129
- { echo
130
- colorize 1 "BUILD FAILED"
131
- echo " ($(os_information) using $(version))"
132
- echo
133
-
134
- if ! rmdir "${BUILD_PATH}" 2>/dev/null; then
135
- echo "Inspect or clean up the working tree at ${BUILD_PATH}"
136
-
137
- if file_is_not_empty "$LOG_PATH"; then
138
- colorize 33 "Results logged to ${LOG_PATH}"
139
- printf "\n\n"
140
- echo "Last 10 log lines:"
141
- tail -n 10 "$LOG_PATH"
142
- fi
143
- fi
144
- } >&3
145
- exit 1
146
- }
147
-
148
- file_is_not_empty() {
149
- local filename="$1"
150
- local line_count="$(wc -l "$filename" 2>/dev/null || true)"
151
-
152
- if [ -n "$line_count" ]; then
153
- words=( $line_count )
154
- [ "${words[0]}" -gt 0 ]
155
- else
156
- return 1
157
- fi
158
- }
159
-
160
- num_cpu_cores() {
161
- local num
162
- case "$(uname -s)" in
163
- Darwin | *BSD )
164
- num="$(sysctl -n hw.ncpu 2>/dev/null || true)"
165
- ;;
166
- SunOS )
167
- num="$(getconf NPROCESSORS_ONLN 2>/dev/null || true)"
168
- ;;
169
- * )
170
- num="$({ getconf _NPROCESSORS_ONLN ||
171
- grep -c ^processor /proc/cpuinfo; } 2>/dev/null)"
172
- num="${num#0}"
173
- ;;
174
- esac
175
- echo "${num:-2}"
176
- }
177
-
178
- install_package() {
179
- install_package_using "tarball" 1 "$@"
180
- }
181
-
182
- install_git() {
183
- install_package_using "git" 2 "$@"
184
- }
185
-
186
- install_package_using() {
187
- local package_type="$1"
188
- local package_type_nargs="$2"
189
- local package_name="$3"
190
- shift 3
191
-
192
- local fetch_args=( "$package_name" "${@:1:$package_type_nargs}" )
193
- local make_args=( "$package_name" )
194
- local arg last_arg
195
-
196
- for arg in "${@:$(( $package_type_nargs + 1 ))}"; do
197
- if [ "$last_arg" = "--if" ]; then
198
- "$arg" || return 0
199
- elif [ "$arg" != "--if" ]; then
200
- make_args["${#make_args[@]}"]="$arg"
201
- fi
202
- last_arg="$arg"
203
- done
204
-
205
- pushd "$BUILD_PATH" >&4
206
- "fetch_${package_type}" "${fetch_args[@]}"
207
- make_package "${make_args[@]}"
208
- popd >&4
209
-
210
- { echo "Installed ${package_name} to ${PREFIX_PATH}"
211
- echo
212
- } >&2
213
- }
214
-
215
- make_package() {
216
- local package_name="$1"
217
- shift
218
-
219
- pushd "$package_name" >&4
220
- before_install_package "$package_name"
221
- build_package "$package_name" $*
222
- after_install_package "$package_name"
223
- popd >&4
224
- }
225
-
226
- compute_sha2() {
227
- local output
228
- if type shasum &>/dev/null; then
229
- output="$(shasum -a 256 -b)" || return 1
230
- echo "${output% *}"
231
- elif type openssl &>/dev/null; then
232
- local openssl="$(command -v "$(brew --prefix openssl 2>/dev/null || true)"/bin/openssl openssl | head -1)"
233
- output="$("$openssl" dgst -sha256 2>/dev/null)" || return 1
234
- echo "${output##* }"
235
- elif type sha256sum &>/dev/null; then
236
- output="$(sha256sum -b)" || return 1
237
- echo "${output%% *}"
238
- else
239
- return 1
240
- fi
241
- }
242
-
243
- compute_md5() {
244
- local output
245
- if type md5 &>/dev/null; then
246
- md5 -q
247
- elif type openssl &>/dev/null; then
248
- output="$(openssl md5)" || return 1
249
- echo "${output##* }"
250
- elif type md5sum &>/dev/null; then
251
- output="$(md5sum -b)" || return 1
252
- echo "${output%% *}"
253
- else
254
- return 1
255
- fi
256
- }
257
-
258
- has_checksum_support() {
259
- local checksum_command="$1"
260
- local has_checksum_var="HAS_CHECKSUM_SUPPORT_${checksum_command}"
261
-
262
- if [ -z "${!has_checksum_var+defined}" ]; then
263
- printf -v "$has_checksum_var" "$(echo test | "$checksum_command" >/dev/null; echo $?)"
264
- fi
265
- return "${!has_checksum_var}"
266
- }
267
-
268
- verify_checksum() {
269
- local checksum_command
270
- local filename="$1"
271
- local expected_checksum="$(echo "$2" | tr [A-Z] [a-z])"
272
-
273
- # If the specified filename doesn't exist, return success
274
- [ -e "$filename" ] || return 0
275
-
276
- case "${#expected_checksum}" in
277
- 0) return 0 ;; # empty checksum; return success
278
- 32) checksum_command="compute_md5" ;;
279
- 64) checksum_command="compute_sha2" ;;
280
- *)
281
- { echo
282
- echo "unexpected checksum length: ${#expected_checksum} (${expected_checksum})"
283
- echo "expected 0 (no checksum), 32 (MD5), or 64 (SHA2-256)"
284
- echo
285
- } >&4
286
- return 1 ;;
287
- esac
288
-
289
- # If chosen provided checksum algorithm isn't supported, return success
290
- has_checksum_support "$checksum_command" || return 0
291
-
292
- # If the computed checksum is empty, return failure
293
- local computed_checksum=`echo "$($checksum_command < "$filename")" | tr [A-Z] [a-z]`
294
- [ -n "$computed_checksum" ] || return 1
295
-
296
- if [ "$expected_checksum" != "$computed_checksum" ]; then
297
- { echo
298
- echo "checksum mismatch: ${filename} (file is corrupt)"
299
- echo "expected $expected_checksum, got $computed_checksum"
300
- echo
301
- } >&4
302
- return 1
303
- fi
304
- }
305
-
306
- http() {
307
- local method="$1"
308
- [ -n "$2" ] || return 1
309
- shift 1
310
-
311
- RUBY_BUILD_HTTP_CLIENT="${RUBY_BUILD_HTTP_CLIENT:-$(detect_http_client 2>&3)}"
312
- [ -n "$RUBY_BUILD_HTTP_CLIENT" ] || return 1
313
-
314
- "http_${method}_${RUBY_BUILD_HTTP_CLIENT}" "$@"
315
- }
316
-
317
- detect_http_client() {
318
- local client
319
- for client in aria2c curl wget; do
320
- if type "$client" &>/dev/null; then
321
- echo "$client"
322
- return
323
- fi
324
- done
325
- echo "error: install \`curl\`, \`wget\`, or \`aria2c\` to download packages" >&2
326
- return 1
327
- }
328
-
329
- http_head_aria2c() {
330
- aria2c --dry-run --no-conf=true ${ARIA2_OPTS} "$1" >&4 2>&1
331
- }
332
-
333
- http_get_aria2c() {
334
- local out="${2:-$(mktemp "out.XXXXXX")}"
335
- if aria2c --allow-overwrite=true --no-conf=true -o "${out}" ${ARIA2_OPTS} "$1" >&4; then
336
- [ -n "$2" ] || cat "${out}"
337
- else
338
- false
339
- fi
340
- }
341
-
342
- http_head_curl() {
343
- curl -qsILf ${CURL_OPTS} "$1" >&4 2>&1
344
- }
345
-
346
- http_get_curl() {
347
- curl -q -o "${2:--}" -sSLf ${CURL_OPTS} "$1"
348
- }
349
-
350
- http_head_wget() {
351
- wget -q --spider ${WGET_OPTS} "$1" >&4 2>&1
352
- }
353
-
354
- http_get_wget() {
355
- wget -nv ${WGET_OPTS} -O "${2:--}" "$1"
356
- }
357
-
358
- fetch_tarball() {
359
- local package_name="$1"
360
- local package_url="$2"
361
- local mirror_url
362
- local checksum
363
- local extracted_dir
364
-
365
- if [ "$package_url" != "${package_url/\#}" ]; then
366
- checksum="${package_url#*#}"
367
- package_url="${package_url%%#*}"
368
-
369
- if [ -n "$RUBY_BUILD_MIRROR_URL" ]; then
370
- if [[ -z "$RUBY_BUILD_DEFAULT_MIRROR" || $package_url != */cache.ruby-lang.org/* ]]; then
371
- mirror_url="${RUBY_BUILD_MIRROR_URL}/$checksum"
372
- fi
373
- elif [ -n "$RUBY_BUILD_MIRROR_PACKAGE_URL" ]; then
374
- mirror_url="$RUBY_BUILD_MIRROR_PACKAGE_URL"
375
- fi
376
- fi
377
-
378
- local tar_args="xzf"
379
- local package_filename="${package_name}.tar.gz"
380
-
381
- if [ "$package_url" != "${package_url%bz2}" ]; then
382
- if ! type -p bzip2 >/dev/null; then
383
- echo "warning: bzip2 not found; consider installing \`bzip2\` package" >&4
384
- fi
385
- package_filename="${package_filename%.gz}.bz2"
386
- tar_args="${tar_args/z/j}"
387
- fi
388
-
389
- if ! reuse_existing_tarball "$package_filename" "$checksum"; then
390
- local tarball_filename="$(basename "$package_url")"
391
- echo "Downloading ${tarball_filename}..." >&2
392
- http head "$mirror_url" &&
393
- download_tarball "$mirror_url" "$package_filename" "$checksum" ||
394
- download_tarball "$package_url" "$package_filename" "$checksum"
395
- fi
396
-
397
- { if tar $tar_args "$package_filename"; then
398
- if [ ! -d "$package_name" ]; then
399
- extracted_dir="$(find_extracted_directory)"
400
- mv "$extracted_dir" "$package_name"
401
- fi
402
-
403
- if [ -z "$KEEP_BUILD_PATH" ]; then
404
- rm -f "$package_filename"
405
- else
406
- true
407
- fi
408
- fi
409
- } >&4 2>&1
410
- }
411
-
412
- find_extracted_directory() {
413
- for f in *; do
414
- if [ -d "$f" ]; then
415
- echo "$f"
416
- return
417
- fi
418
- done
419
- echo "Extracted directory not found" >&2
420
- return 1
421
- }
422
-
423
- reuse_existing_tarball() {
424
- local package_filename="$1"
425
- local checksum="$2"
426
-
427
- # Reuse existing file in build location
428
- if [ -e "$package_filename" ] && verify_checksum "$package_filename" "$checksum"; then
429
- return 0
430
- fi
431
-
432
- # Reuse previously downloaded file in cache location
433
- [ -n "$RUBY_BUILD_CACHE_PATH" ] || return 1
434
- local cached_package_filename="${RUBY_BUILD_CACHE_PATH}/$package_filename"
435
-
436
- [ -e "$cached_package_filename" ] || return 1
437
- verify_checksum "$cached_package_filename" "$checksum" >&4 2>&1 || return 1
438
- ln -s "$cached_package_filename" "$package_filename" >&4 2>&1 || return 1
439
- }
440
-
441
- download_tarball() {
442
- local package_url="$1"
443
- [ -n "$package_url" ] || return 1
444
-
445
- local package_filename="$2"
446
- local checksum="$3"
447
-
448
- echo "-> $package_url" >&2
449
-
450
- if http get "$package_url" "$package_filename" >&4 2>&1; then
451
- verify_checksum "$package_filename" "$checksum" >&4 2>&1 || return 1
452
- else
453
- echo "error: failed to download $package_filename" >&2
454
- return 1
455
- fi
456
-
457
- if [ -n "$RUBY_BUILD_CACHE_PATH" ]; then
458
- local cached_package_filename="${RUBY_BUILD_CACHE_PATH}/$package_filename"
459
- { mv "$package_filename" "$cached_package_filename"
460
- ln -s "$cached_package_filename" "$package_filename"
461
- } >&4 2>&1 || return 1
462
- fi
463
- }
464
-
465
- fetch_git() {
466
- local package_name="$1"
467
- local git_url="$2"
468
- local git_ref="$3"
469
-
470
- echo "Cloning ${git_url}..." >&2
471
-
472
- if type git &>/dev/null; then
473
- if [ -n "$RUBY_BUILD_CACHE_PATH" ]; then
474
- pushd "$RUBY_BUILD_CACHE_PATH" >&4
475
- local clone_name="$(sanitize "$git_url")"
476
- if [ -e "${clone_name}" ]; then
477
- { cd "${clone_name}"
478
- git fetch --force "$git_url" "+${git_ref}:${git_ref}"
479
- } >&4 2>&1
480
- else
481
- git clone --bare --branch "$git_ref" "$git_url" "${clone_name}" >&4 2>&1
482
- fi
483
- git_url="$RUBY_BUILD_CACHE_PATH/${clone_name}"
484
- popd >&4
485
- fi
486
-
487
- if [ -e "${package_name}" ]; then
488
- ( cd "${package_name}"
489
- git fetch --depth 1 origin "+${git_ref}"
490
- git checkout -q -B "$git_ref" "origin/${git_ref}"
491
- ) >&4 2>&1
492
- else
493
- git clone --depth 1 --branch "$git_ref" "$git_url" "${package_name}" >&4 2>&1
494
- fi
495
- else
496
- echo "error: please install \`git\` and try again" >&2
497
- exit 1
498
- fi
499
- }
500
-
501
- build_package() {
502
- local package_name="$1"
503
- shift
504
-
505
- if [ "$#" -eq 0 ]; then
506
- local commands="standard"
507
- else
508
- local commands="$*"
509
- fi
510
-
511
- echo "Installing ${package_name}..." >&2
512
-
513
- [ -n "$HAS_PATCH" ] && apply_ruby_patch "$package_name"
514
-
515
- for command in $commands; do
516
- "build_package_${command}" "$package_name"
517
- done
518
- }
519
-
520
- package_option() {
521
- local package_name="$1"
522
- local command_name="$2"
523
- local variable="$(capitalize "${package_name}_${command_name}")_OPTS_ARRAY"
524
- local array="$variable[@]"
525
- shift 2
526
- local value=( "${!array}" "$@" )
527
- eval "$variable=( \"\${value[@]}\" )"
528
- }
529
-
530
- build_package_warn_eol() {
531
- local package_name="$1"
532
-
533
- { echo
534
- echo "WARNING: $package_name is past its end of life and is now unsupported."
535
- echo "It no longer receives bug fixes or critical security updates."
536
- echo
537
- } >&3
538
- }
539
-
540
- build_package_warn_unsupported() {
541
- local package_name="$1"
542
-
543
- { echo
544
- echo "WARNING: $package_name is nearing its end of life."
545
- echo "It only receives critical security updates, no bug fixes."
546
- echo
547
- } >&3
548
- }
549
-
550
- build_package_standard_build() {
551
- local package_name="$1"
552
-
553
- if [ "${MAKEOPTS+defined}" ]; then
554
- MAKE_OPTS="$MAKEOPTS"
555
- elif [ -z "${MAKE_OPTS+defined}" ]; then
556
- MAKE_OPTS="-j $(num_cpu_cores)"
557
- fi
558
-
559
- # Support YAML_CONFIGURE_OPTS, RUBY_CONFIGURE_OPTS, etc.
560
- local package_var_name="$(capitalize "${package_name%%-*}")"
561
- local PACKAGE_CONFIGURE="${package_var_name}_CONFIGURE"
562
- local PACKAGE_PREFIX_PATH="${package_var_name}_PREFIX_PATH"
563
- local PACKAGE_CONFIGURE_OPTS="${package_var_name}_CONFIGURE_OPTS"
564
- local PACKAGE_CONFIGURE_OPTS_ARRAY="${package_var_name}_CONFIGURE_OPTS_ARRAY[@]"
565
- local PACKAGE_MAKE_OPTS="${package_var_name}_MAKE_OPTS"
566
- local PACKAGE_MAKE_OPTS_ARRAY="${package_var_name}_MAKE_OPTS_ARRAY[@]"
567
- local PACKAGE_CFLAGS="${package_var_name}_CFLAGS"
568
-
569
- if [ "$package_var_name" = "RUBY" ]; then
570
- if [[ "$RUBY_CONFIGURE_OPTS ${RUBY_CONFIGURE_OPTS_ARRAY[*]}" != *--with-readline-dir=* ]]; then
571
- use_homebrew_readline || use_freebsd_readline || true
572
- fi
573
- if [[ "$RUBY_CONFIGURE_OPTS ${RUBY_CONFIGURE_OPTS_ARRAY[*]}" != *--with-libffi-dir=* ]]; then
574
- use_freebsd_libffi || true
575
- fi
576
- if [[ "$RUBY_CONFIGURE_OPTS ${RUBY_CONFIGURE_OPTS_ARRAY[*]}" != *--with-libyaml-dir=* ]]; then
577
- use_homebrew_yaml || use_freebsd_yaml || true
578
- fi
579
- if [[ "$RUBY_CONFIGURE_OPTS ${RUBY_CONFIGURE_OPTS_ARRAY[*]}" != *--with-gmp-dir=* ]]; then
580
- use_homebrew_gmp || true
581
- fi
582
- if [[ "$RUBY_CONFIGURE_OPTS ${RUBY_CONFIGURE_OPTS_ARRAY[*]}" != *--with-openssl-dir=* ]]; then
583
- if is_freebsd && [ -f /usr/local/include/openssl/ssl.h ]; then
584
- # use openssl installed from Ports Collection
585
- package_option ruby configure --with-openssl-dir="/usr/local"
586
- fi
587
- fi
588
- fi
589
-
590
- ( if [ "${CFLAGS+defined}" ] || [ "${!PACKAGE_CFLAGS+defined}" ]; then
591
- export CFLAGS="$CFLAGS ${!PACKAGE_CFLAGS}"
592
- fi
593
- if [ -z "$CC" ] && is_mac -ge 1010; then
594
- export CC=clang
595
- fi
596
- ${!PACKAGE_CONFIGURE:-./configure} --prefix="${!PACKAGE_PREFIX_PATH:-$PREFIX_PATH}" \
597
- "${!PACKAGE_CONFIGURE_OPTS_ARRAY}" $CONFIGURE_OPTS ${!PACKAGE_CONFIGURE_OPTS} || return 1
598
- ) >&4 2>&1
599
-
600
- { "$MAKE" "${!PACKAGE_MAKE_OPTS_ARRAY}" $MAKE_OPTS ${!PACKAGE_MAKE_OPTS}
601
- } >&4 2>&1
602
- }
603
-
604
- build_package_standard_install() {
605
- local package_name="$1"
606
- local package_var_name="$(capitalize "${package_name%%-*}")"
607
-
608
- local PACKAGE_MAKE_INSTALL_OPTS="${package_var_name}_MAKE_INSTALL_OPTS"
609
- local PACKAGE_MAKE_INSTALL_OPTS_ARRAY="${package_var_name}_MAKE_INSTALL_OPTS_ARRAY[@]"
610
-
611
- { "$MAKE" ${MAKE_INSTALL_TARGET:-install} "${!PACKAGE_MAKE_INSTALL_OPTS_ARRAY}" $MAKE_INSTALL_OPTS ${!PACKAGE_MAKE_INSTALL_OPTS}
612
- } >&4 2>&1
613
- }
614
-
615
- build_package_standard_install_with_bundled_gems() {
616
- { "$MAKE" update-gems
617
- "$MAKE" extract-gems
618
- } >&4 2>&1
619
-
620
- build_package_standard_install "$@"
621
- }
622
-
623
- # Backward Compatibility for standard function
624
- build_package_standard() {
625
- build_package_standard_build "$@"
626
- build_package_standard_install "$@"
627
- }
628
-
629
- build_package_autoconf() {
630
- { autoreconf -i
631
- } >&4 2>&1
632
- }
633
-
634
- build_package_ruby() {
635
- local package_name="$1"
636
-
637
- { "$RUBY_BIN" setup.rb
638
- } >&4 2>&1
639
- }
640
-
641
- build_package_ree_installer() {
642
- build_package_auto_tcltk
643
-
644
- local options=""
645
- is_mac && options="--no-tcmalloc"
646
-
647
- local option
648
- for option in ${RUBY_CONFIGURE_OPTS_ARRAY[@]} $RUBY_CONFIGURE_OPTS; do
649
- options="$options -c $option"
650
- done
651
-
652
- # Work around install_useful_libraries crash with --dont-install-useful-gems
653
- mkdir -p "$PREFIX_PATH/lib/ruby/gems/1.8/gems"
654
-
655
- { ./installer --auto "$PREFIX_PATH" --dont-install-useful-gems $options $CONFIGURE_OPTS
656
- } >&4 2>&1
657
- }
658
-
659
- build_package_rbx() {
660
- local package_name="$1"
661
-
662
- { [ ! -e "Gemfile" ] || bundle --path=vendor/bundle
663
- if [ -n "$RUBY_BUILD_CACHE_PATH" ]; then
664
- mkdir -p vendor
665
- ln -s "$RUBY_BUILD_CACHE_PATH" vendor/prebuilt
666
- fi
667
-
668
- local opt
669
- local -a configure_opts
670
- for opt in "${RUBY_CONFIGURE_OPTS_ARRAY[@]}"; do
671
- if [[ $opt == --with-openssl-dir=* ]]; then
672
- local openssl_dir="${opt#*=}"
673
- configure_opts[${#configure_opts[@]}]="--with-lib-dir=${openssl_dir}/lib"
674
- configure_opts[${#configure_opts[@]}]="--with-include-dir=${openssl_dir}/include"
675
- else
676
- configure_opts[${#configure_opts[@]}]="$opt"
677
- fi
678
- done
679
-
680
- RUBYOPT="-rrubygems $RUBYOPT" ./configure --prefix="$PREFIX_PATH" "${configure_opts[@]}" $RUBY_CONFIGURE_OPTS
681
- rake install
682
- fix_rbx_gem_binstubs "$PREFIX_PATH"
683
- fix_rbx_irb "$PREFIX_PATH"
684
- } >&4 2>&1
685
- }
686
-
687
- build_package_mruby() {
688
- { ./minirake
689
- mkdir -p "$PREFIX_PATH"
690
- cp -fR build/host/* include "$PREFIX_PATH"
691
- ln -fs mruby "$PREFIX_PATH/bin/ruby"
692
- ln -fs mirb "$PREFIX_PATH/bin/irb"
693
- } >&4 2>&1
694
- }
695
-
696
- build_package_picoruby() {
697
- { ./minirake
698
- mkdir -p "$PREFIX_PATH"
699
- cp -fR build/host/* include "$PREFIX_PATH"
700
- ln -fs picoruby "$PREFIX_PATH/bin/ruby"
701
- ln -fs picoirb "$PREFIX_PATH/bin/irb"
702
- } >&4 2>&1
703
- }
704
-
705
- build_package_maglev() {
706
- build_package_copy
707
-
708
- { cd "${PREFIX_PATH}"
709
- ./install.sh
710
- cd "${PREFIX_PATH}/bin"
711
- echo "Creating symlink for ruby*"
712
- ln -fs maglev-ruby ruby
713
- echo "Creating symlink for irb*"
714
- ln -fs maglev-irb irb
715
- } >&4 2>&1
716
- echo
717
- echo "Run 'maglev start' to start up the stone before using 'ruby' or 'irb'"
718
- }
719
-
720
- build_package_topaz() {
721
- build_package_copy
722
- { cd "${PREFIX_PATH}/bin"
723
- echo "Creating symlink for ruby*"
724
- ln -fs topaz ruby
725
- } >&4 2>&1
726
- }
727
-
728
- topaz_architecture() {
729
- case "$(uname -s)" in
730
- "Darwin") echo "osx64";;
731
- "Linux") [[ "$(uname -m)" = "x86_64" ]] && echo "linux64" || echo "linux32";;
732
- *)
733
- echo "no nightly builds available" >&2
734
- exit 1;;
735
- esac
736
- }
737
-
738
- build_package_jruby() {
739
- build_package_copy
740
- cd "${PREFIX_PATH}/bin"
741
- ln -fs jruby ruby
742
- chmod +x ruby
743
- install_jruby_launcher
744
- remove_windows_files
745
- fix_jruby_shebangs
746
- }
747
-
748
- install_jruby_launcher() {
749
- cd "${PREFIX_PATH}/bin"
750
- { ./ruby gem install jruby-launcher
751
- } >&4 2>&1
752
- }
753
-
754
- fix_jruby_shebangs() {
755
- for file in "${PREFIX_PATH}/bin"/*; do
756
- if [ "$(head -c 20 "$file" | tr -d '\0')" = "#!/usr/bin/env jruby" ]; then
757
- sed -i.bak "1 s:.*:#\!${PREFIX_PATH}\/bin\/jruby:" "$file"
758
- rm "$file".bak
759
- fi
760
- done
761
- }
762
-
763
- build_package_truffleruby() {
764
- clean_prefix_path_truffleruby || return $?
765
- build_package_copy
766
-
767
- cd "${PREFIX_PATH}"
768
- "${PREFIX_PATH}/lib/truffle/post_install_hook.sh"
769
- }
770
-
771
- build_package_truffleruby_graalvm() {
772
- clean_prefix_path_truffleruby || return $?
773
- build_package_copy_to "${PREFIX_PATH}/graalvm"
774
-
775
- cd "${PREFIX_PATH}/graalvm"
776
- if is_mac; then
777
- cd Contents/Home || return $?
778
- fi
779
-
780
- if [ -e bin/gu ]; then
781
- bin/gu install ruby || return $?
782
- fi
783
-
784
- local ruby_home
785
- ruby_home=$(bin/ruby -e 'print RbConfig::CONFIG["prefix"]')
786
-
787
- # Make gu available in PATH (useful to install other languages)
788
- ln -s "$PWD/bin/gu" "$ruby_home/bin/gu"
789
-
790
- cd "${PREFIX_PATH}"
791
- ln -s "${ruby_home#"$PREFIX_PATH/"}/bin" . || return $?
792
-
793
- "$ruby_home/lib/truffle/post_install_hook.sh"
794
- }
795
-
796
- build_package_artichoke() {
797
- build_package_copy
798
-
799
- mkdir -p "$PREFIX_PATH/bin"
800
- cd "${PREFIX_PATH}/bin"
801
- ln -fs ../artichoke ruby
802
- ln -fs ../airb irb
803
- ln -fs ../artichoke artichoke
804
- ln -fs ../airb airb
805
- }
806
-
807
- remove_windows_files() {
808
- cd "$PREFIX_PATH"
809
- rm -f bin/*.exe bin/*.dll bin/*.bat bin/jruby.sh
810
- }
811
-
812
- clean_prefix_path_truffleruby() {
813
- if [ -d "$PREFIX_PATH" ] &&
814
- [ ! -e "$PREFIX_PATH/bin/truffleruby" ] &&
815
- [ ! -z "$(ls -A $PREFIX_PATH)" ]; then
816
- echo
817
- echo "ERROR: cannot install TruffleRuby to $PREFIX_PATH, which does not look like a valid TruffleRuby prefix" >&2
818
- echo "TruffleRuby only supports being installed to a not existing directory, an empty directory, or replacing an existing TruffleRuby installation"
819
- echo "See https://github.com/oracle/truffleruby/issues/1389 for details" >&2
820
- return 1
821
- fi
822
-
823
- # Make sure there are no leftover files in $PREFIX_PATH
824
- rm -rf "$PREFIX_PATH"
825
- }
826
-
827
- build_package_copy_to() {
828
- to="$1"
829
- mkdir -p "$to"
830
- cp -fR . "$to"
831
- }
832
-
833
- build_package_copy() {
834
- build_package_copy_to "$PREFIX_PATH"
835
- }
836
-
837
- before_install_package() {
838
- local stub=1
839
- }
840
-
841
- after_install_package() {
842
- local stub=1
843
- }
844
-
845
- fix_rbx_gem_binstubs() {
846
- local prefix="$1"
847
- local gemdir="${prefix}/gems/bin"
848
- local bindir="${prefix}/bin"
849
- local file binstub
850
- # Symlink Rubinius' `gems/bin/` into `bin/`
851
- if [ -d "$gemdir" ] && [ ! -L "$gemdir" ]; then
852
- for file in "$gemdir"/*; do
853
- binstub="${bindir}/${file##*/}"
854
- rm -f "$binstub"
855
- { echo "#!${bindir}/ruby"
856
- grep -v '^#!' "$file"
857
- } > "$binstub"
858
- chmod +x "$binstub"
859
- done
860
- rm -rf "$gemdir"
861
- ln -s ../bin "$gemdir"
862
- fi
863
- }
864
-
865
- fix_rbx_irb() {
866
- local prefix="$1"
867
- "${prefix}/bin/irb" --version &>/dev/null ||
868
- "${prefix}/bin/gem" install rubysl-tracer -v '~> 2.0' --no-rdoc --no-ri &>/dev/null ||
869
- true
870
- }
871
-
872
- require_java() {
873
- local required="$1"
874
- local java_version="$(java -version 2>&1)"
875
- local version_string="$(grep 'java version' <<<"$java_version" | head -1 | grep -o '[0-9.]\+' | head -1 || true)"
876
- [ -n "$version_string" ] || version_string="$(grep 'openjdk version' <<<"$java_version" | head -1 | grep -o '[0-9.]\+' | head -1 || true)"
877
- IFS="."
878
- local nums=($version_string)
879
- IFS="$OLDIFS"
880
- local found_version="${nums[0]}"
881
- [ "$found_version" -gt 1 ] 2>/dev/null || found_version="${nums[1]}"
882
- [ "$found_version" -ge "$required" ] 2>/dev/null && return 0
883
- colorize 1 "ERROR" >&3
884
- echo ": Java >= ${required} required, but your Java version was:" >&3
885
- cat <<<"$java_version" >&3
886
- return 1
887
- }
888
-
889
- # keep for backwards compatibility
890
- require_java7() {
891
- require_java 7
892
- }
893
-
894
- require_gcc() {
895
- local gcc="$(locate_gcc || true)"
896
-
897
- if [ -z "$gcc" ]; then
898
- { echo
899
- colorize 1 "ERROR"
900
- echo ": This package must be compiled with GCC, but ruby-build couldn't"
901
- echo "find a suitable \`gcc\` executable on your system. Please install GCC"
902
- echo "and try again."
903
- echo
904
-
905
- if is_mac; then
906
- colorize 1 "DETAILS"
907
- echo ": Apple no longer includes the official GCC compiler with Xcode"
908
- echo "as of version 4.2. Instead, the \`gcc\` executable is a symlink to"
909
- echo "\`llvm-gcc\`, a modified version of GCC which outputs LLVM bytecode."
910
- echo
911
- echo "For most programs the \`llvm-gcc\` compiler works fine. However,"
912
- echo "versions of Ruby older than 1.9.3-p125 are incompatible with"
913
- echo "\`llvm-gcc\`. To build older versions of Ruby you must have the official"
914
- echo "GCC compiler installed on your system."
915
- echo
916
-
917
- colorize 1 "TO FIX THE PROBLEM"
918
- if type brew &>/dev/null; then
919
- echo ": Install Homebrew's GCC package with this"
920
- echo -n "command: "
921
- colorize 4 "brew install gcc@4.9"
922
- else
923
- echo ": Install the official GCC compiler using these"
924
- echo -n "packages: "
925
- colorize 4 "https://github.com/kennethreitz/osx-gcc-installer/downloads"
926
- fi
927
-
928
- echo
929
- echo
930
- echo "You will need to install the official GCC compiler to build older"
931
- echo "versions of Ruby even if you have installed Apple's Command Line Tools"
932
- echo "for Xcode package. The Command Line Tools for Xcode package only"
933
- echo "includes \`llvm-gcc\`."
934
- fi
935
- } >&3
936
- return 1
937
- fi
938
-
939
- export CC="$gcc"
940
- if is_mac -ge 1010; then
941
- export MACOSX_DEPLOYMENT_TARGET=10.9
942
- fi
943
- }
944
-
945
- locate_gcc() {
946
- local gcc gccs
947
- IFS=: gccs=($(gccs_in_path))
948
- IFS="$OLDIFS"
949
-
950
- verify_gcc "$CC" ||
951
- verify_gcc "$(command -v gcc || true)" || {
952
- for gcc in "${gccs[@]}"; do
953
- verify_gcc "$gcc" && break || true
954
- done
955
- }
956
-
957
- return 1
958
- }
959
-
960
- gccs_in_path() {
961
- local gcc path paths
962
- local gccs=()
963
- IFS=: paths=($PATH)
964
- IFS="$OLDIFS"
965
-
966
- shopt -s nullglob
967
- for path in "${paths[@]}"; do
968
- for gcc in "$path"/gcc-*; do
969
- gccs["${#gccs[@]}"]="$gcc"
970
- done
971
- done
972
- shopt -u nullglob
973
-
974
- printf :%s "${gccs[@]}"
975
- }
976
-
977
- verify_gcc() {
978
- local gcc="$1"
979
- if [ -z "$gcc" ]; then
980
- return 1
981
- fi
982
-
983
- local version="$("$gcc" --version 2>/dev/null || true)"
984
- if [ -z "$version" ]; then
985
- return 1
986
- fi
987
-
988
- if echo "$version" | grep LLVM >/dev/null; then
989
- return 1
990
- fi
991
-
992
- echo "$gcc"
993
- }
994
-
995
- require_llvm() {
996
- local llvm_version="$1"
997
- if is_mac -ge 1010; then
998
- if [[ "$RUBY_CONFIGURE_OPTS" != *--llvm-* ]]; then
999
- case "$llvm_version" in
1000
- 3.2 )
1001
- package_option ruby configure --prebuilt-name="llvm-3.2-x86_64-apple-darwin13.tar.bz2"
1002
- ;;
1003
- 3.[56] )
1004
- local llvm_config="$(locate_llvm "$llvm_version")"
1005
- if [ -n "$llvm_config" ]; then
1006
- package_option ruby configure --llvm-config="$llvm_config"
1007
- else
1008
- local homebrew_package="llvm@$llvm_version"
1009
- { echo
1010
- colorize 1 "ERROR"
1011
- echo ": Rubinius will not be able to compile using Apple's LLVM-based "
1012
- echo "build tools on OS X. You will need to install LLVM $llvm_version first."
1013
- echo
1014
- colorize 1 "TO FIX THE PROBLEM"
1015
- echo ": Install Homebrew's llvm package with this"
1016
- echo -n "command: "
1017
- colorize 4 "brew install $homebrew_package"
1018
- echo
1019
- } >&3
1020
- return 1
1021
- fi
1022
- ;;
1023
- esac
1024
- fi
1025
- fi
1026
- }
1027
-
1028
- locate_llvm() {
1029
- local llvm_version="$1"
1030
- local package llvm_config
1031
- shopt -s nullglob
1032
- for package in `brew list 2>/dev/null | grep "^llvm"`; do
1033
- llvm_config="$(echo "$(brew --prefix "$package")/bin/llvm-config"*)"
1034
- if [ -n "$llvm_config" ] && [[ "$("$llvm_config" --version)" = "$llvm_version"* ]]; then
1035
- echo "$llvm_config"
1036
- break
1037
- fi
1038
- done
1039
- shopt -u nullglob
1040
- }
1041
-
1042
- needs_yaml() {
1043
- [[ "$RUBY_CONFIGURE_OPTS" != *--with-libyaml-dir=* ]] &&
1044
- ! use_homebrew_yaml
1045
- }
1046
-
1047
- use_homebrew_yaml() {
1048
- local libdir="$(brew --prefix libyaml 2>/dev/null || true)"
1049
- if [ -d "$libdir" ]; then
1050
- echo "ruby-build: using libyaml from homebrew"
1051
- package_option ruby configure --with-libyaml-dir="$libdir"
1052
- else
1053
- return 1
1054
- fi
1055
- }
1056
-
1057
- use_freebsd_yaml() {
1058
- if is_freebsd; then
1059
- local libyaml_prefix="$(freebsd_package_prefix libyaml)"
1060
- if [ -n "$libyaml_prefix" ]; then
1061
- package_option ruby configure --with-libyaml-dir="$libyaml_prefix"
1062
- fi
1063
- fi
1064
- }
1065
-
1066
- use_homebrew_gmp() {
1067
- local libdir="$(brew --prefix gmp 2>/dev/null || true)"
1068
- if [ -d "$libdir" ]; then
1069
- echo "ruby-build: using gmp from homebrew"
1070
- package_option ruby configure --with-gmp-dir="$libdir"
1071
- else
1072
- return 1
1073
- fi
1074
- }
1075
-
1076
- use_freebsd_readline() {
1077
- if is_freebsd; then
1078
- local readline_prefix="$(freebsd_package_prefix readline)"
1079
- local libedit_prefix="$(freebsd_package_prefix libedit)"
1080
- if [ -n "$readline_prefix" ]; then
1081
- package_option ruby configure --with-readline-dir="$readline_prefix"
1082
- elif [ -n "$libedit_prefix" ]; then
1083
- package_option ruby configure --enable-libedit
1084
- package_option ruby configure --with-libedit-dir="$libedit_prefix"
1085
- fi
1086
- fi
1087
- }
1088
-
1089
- use_homebrew_readline() {
1090
- local libdir="$(brew --prefix readline 2>/dev/null || true)"
1091
- if [ -d "$libdir" ]; then
1092
- echo "ruby-build: using readline from homebrew"
1093
- package_option ruby configure --with-readline-dir="$libdir"
1094
- else
1095
- return 1
1096
- fi
1097
- }
1098
-
1099
- use_freebsd_libffi() {
1100
- if is_freebsd; then
1101
- local libffi_prefix="$(freebsd_package_prefix libffi)"
1102
- if [ -n "$libffi_prefix" ]; then
1103
- package_option ruby configure --with-libffi-dir="$libffi_prefix"
1104
- fi
1105
- fi
1106
- }
1107
-
1108
- has_broken_mac_openssl() {
1109
- is_mac || return 1
1110
- local openssl_version="$(/usr/bin/openssl version 2>/dev/null || true)"
1111
- [[ $openssl_version = "OpenSSL 0.9.8"?* || $openssl_version = "LibreSSL"* ]]
1112
- }
1113
-
1114
- system_openssl_version() {
1115
- local version_text=$(printf '#include <openssl/opensslv.h>\nOPENSSL_VERSION_TEXT\n' | cc -xc -E - 2>/dev/null)
1116
- if [[ $version_text == *"OpenSSL "* ]]; then
1117
- local version=${version_text#*OpenSSL }
1118
- version=${version%% *}
1119
- echo $version | sed 's/[^0-9]//g' | sed 's/^0*//'
1120
- else
1121
- echo "No system openssl version was found, ensure openssl headers are installed (https://github.com/rbenv/ruby-build/wiki#suggested-build-environment)" >&2
1122
- echo 000
1123
- fi
1124
- }
1125
-
1126
- # openssl gem 1.1.1
1127
- needs_openssl_096_102() {
1128
- [[ "$RUBY_CONFIGURE_OPTS" == *--with-openssl-dir=* ]] && return 1
1129
- has_broken_mac_openssl && return 0
1130
-
1131
- local version=$(system_openssl_version)
1132
- (( $version < 96 || $version >= 110 ))
1133
- }
1134
-
1135
- # openssl gem 2.2.1
1136
- needs_openssl_101_111() {
1137
- [[ "$RUBY_CONFIGURE_OPTS" == *--with-openssl-dir=* ]] && return 1
1138
- has_broken_mac_openssl && return 0
1139
-
1140
- local version=$(system_openssl_version)
1141
- (( $version < 101 || $version >= 300 ))
1142
- }
1143
-
1144
- # openssl gem 3.0.0
1145
- needs_openssl_102_300() {
1146
- [[ "$RUBY_CONFIGURE_OPTS" == *--with-openssl-dir=* ]] && return 1
1147
- has_broken_mac_openssl && return 0
1148
-
1149
- local version=$(system_openssl_version)
1150
- (( $version < 102 || $version >= 400 ))
1151
- }
1152
-
1153
- use_homebrew_openssl() {
1154
- local ssldir="$(brew --prefix openssl@1.1 2>/dev/null || true)"
1155
- if [ -d "$ssldir" ]; then
1156
- echo "ruby-build: using openssl from homebrew"
1157
- package_option ruby configure --with-openssl-dir="$ssldir"
1158
- else
1159
- colorize 1 "ERROR openssl@1.1 from Homebrew is required, run 'brew install openssl@1.1'"
1160
- return 1
1161
- fi
1162
- }
1163
-
1164
- build_package_openssl() {
1165
- # Install to a subdirectory since we don't want shims for bin/openssl.
1166
- OPENSSL_PREFIX_PATH="${PREFIX_PATH}/openssl"
1167
-
1168
- # Put openssl.conf, certs, etc in ~/.rbenv/versions/*/openssl/ssl
1169
- OPENSSLDIR="${OPENSSLDIR:-$OPENSSL_PREFIX_PATH/ssl}"
1170
-
1171
- # Tell Ruby to use this openssl for its extension.
1172
- package_option ruby configure --with-openssl-dir="$OPENSSL_PREFIX_PATH"
1173
-
1174
- # Make sure pkg-config finds our build first.
1175
- export PKG_CONFIG_PATH="${OPENSSL_PREFIX_PATH}/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
1176
-
1177
- # Hint OpenSSL that we prefer a 64-bit build.
1178
- export KERNEL_BITS="64"
1179
- OPENSSL_CONFIGURE="${OPENSSL_CONFIGURE:-./config}"
1180
-
1181
- local nokerberos
1182
- [[ "$1" != openssl-1.0.* ]] || nokerberos=1
1183
-
1184
- # Compile a shared lib with zlib dynamically linked.
1185
- package_option openssl configure --openssldir="$OPENSSLDIR" zlib-dynamic no-ssl3 shared ${nokerberos:+no-ssl2 no-krb5}
1186
-
1187
- # Default MAKE_OPTS are -j 2 which can confuse the build. Thankfully, make
1188
- # gives precedence to the last -j option, so we can override that.
1189
- package_option openssl make -j 1
1190
-
1191
- # Use install_sw install_ssldirs instead of install to skip building docs which is slow.
1192
- # OpenSSL 1.1+ also needs install_ssldirs, 1.0 does not have that target.
1193
- if [[ "$1" == openssl-1.0.* ]]; then
1194
- MAKE_INSTALL_TARGET="install_sw" build_package_standard "$@"
1195
- else
1196
- MAKE_INSTALL_TARGET="install_sw install_ssldirs" build_package_standard "$@"
1197
- fi
1198
-
1199
- local pem_file="$OPENSSLDIR/cert.pem"
1200
- if is_mac; then
1201
- # Extract root certs from the system keychain in .pem format.
1202
- security find-certificate -a -p /Library/Keychains/System.keychain > "$pem_file"
1203
- security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain >> "$pem_file"
1204
- elif [ -e /etc/pki/tls/cert.pem ]; then # RedHat
1205
- # See https://github.com/rubygems/rubygems/issues/2415#issuecomment-509806259
1206
- rm -rf "$OPENSSLDIR/certs" "$pem_file"
1207
- ln -s /etc/pki/tls/certs "$OPENSSLDIR/certs"
1208
- ln -s /etc/pki/tls/cert.pem "$pem_file"
1209
- elif [ -e /etc/ssl/certs/ca-certificates.crt ]; then # Debian
1210
- # See https://github.com/rubygems/rubygems/issues/2415#issuecomment-509806259
1211
- rm -rf "$OPENSSLDIR/certs" "$pem_file"
1212
- ln -s /etc/ssl/certs "$OPENSSLDIR/certs"
1213
- ln -s /etc/ssl/certs/ca-certificates.crt "$pem_file"
1214
- elif type -p openssl >/dev/null; then
1215
- # symlink to the system openssl certs
1216
- local SYSTEM_OPENSSLDIR
1217
- SYSTEM_OPENSSLDIR=$(openssl version -d 2>/dev/null | cut -d'"' -f2)
1218
- if [ -n "$SYSTEM_OPENSSLDIR" ]; then
1219
- ln -sf "$SYSTEM_OPENSSLDIR/cert.pem" "$OPENSSLDIR/cert.pem"
1220
- ln -snf "$SYSTEM_OPENSSLDIR/certs" "$OPENSSLDIR/certs"
1221
- fi
1222
- else
1223
- echo "Could not find OpenSSL certificates" >&2
1224
- exit 1
1225
- fi
1226
- }
1227
-
1228
- # Post-install check that the openssl extension was built.
1229
- build_package_verify_openssl() {
1230
- "$RUBY_BIN" -e '
1231
- manager = ARGV[0]
1232
- packages = {
1233
- "apt-get" => Hash.new {|h,k| "lib#{k}-dev" }.update(
1234
- "openssl" => "libssl-dev",
1235
- "zlib" => "zlib1g-dev"
1236
- ),
1237
- "yum" => Hash.new {|h,k| "#{k}-devel" }.update(
1238
- "yaml" => "libyaml-devel"
1239
- )
1240
- }
1241
-
1242
- failed = %w[openssl readline zlib yaml].reject do |lib|
1243
- begin
1244
- require lib
1245
- rescue LoadError
1246
- $stderr.puts "The Ruby #{lib} extension was not compiled."
1247
- end
1248
- end
1249
-
1250
- if failed.size > 0
1251
- $stderr.puts "ERROR: Ruby install aborted due to missing extensions"
1252
- $stderr.print "Try running `%s install -y %s` to fetch missing dependencies.\n\n" % [
1253
- manager,
1254
- failed.map { |lib| packages.fetch(manager)[lib] }.join(" ")
1255
- ] unless manager.empty?
1256
- $stderr.puts "Configure options used:"
1257
- require "rbconfig"; require "shellwords"
1258
- RbConfig::CONFIG.fetch("configure_args").shellsplit.each { |arg| $stderr.puts " #{arg}" }
1259
- exit 1
1260
- end
1261
- ' "$(basename "$(type -p yum apt-get | head -1)")" >&4 2>&1
1262
- }
1263
-
1264
- # Ensure that directories listed in LDFLAGS exist
1265
- build_package_ldflags_dirs() {
1266
- local arg dir
1267
- set - $LDFLAGS
1268
- while [ $# -gt 0 ]; do
1269
- dir=""
1270
- case "$1" in
1271
- -L ) dir="$2" ;;
1272
- -L* ) dir="${1#-L}" ;;
1273
- esac
1274
- [ -z "$dir" ] || mkdir -p "$dir"
1275
- shift 1
1276
- done
1277
- }
1278
-
1279
- build_package_enable_shared() {
1280
- if [[ " ${RUBY_CONFIGURE_OPTS} " != *" --disable-shared"* ]]; then
1281
- package_option ruby configure --enable-shared
1282
- fi
1283
- }
1284
-
1285
- build_package_auto_tcltk() {
1286
- if is_mac && [ ! -d /usr/include/X11 ]; then
1287
- if [ -d /opt/X11/include ]; then
1288
- if [[ "$CPPFLAGS" != *-I/opt/X11/include* ]]; then
1289
- export CPPFLAGS="-I/opt/X11/include $CPPFLAGS"
1290
- fi
1291
- else
1292
- package_option ruby configure --without-tk
1293
- fi
1294
- fi
1295
- }
1296
-
1297
- rake() {
1298
- if [ -e "./Gemfile" ]; then
1299
- bundle exec rake "$@"
1300
- else
1301
- isolated_gem_dependency "rake --version" rake -v '~> 10.1.0'
1302
- command rake "$@"
1303
- fi
1304
- }
1305
-
1306
- bundle() {
1307
- isolated_gem_dependency "bundle --version" bundler -v '~> 1.3.5'
1308
- command bundle "$@"
1309
- }
1310
-
1311
- isolated_gem_dependency() {
1312
- set +E
1313
- ( command $1 &>/dev/null ) || {
1314
- set -E
1315
- shift 1
1316
- isolated_gem_install "$@"
1317
- }
1318
- set -E
1319
- }
1320
-
1321
- isolated_gem_install() {
1322
- export GEM_HOME="${PWD}/.gem"
1323
- export PATH="${GEM_HOME}/bin:${PATH}"
1324
- gem install "$@"
1325
- }
1326
-
1327
- apply_ruby_patch() {
1328
- local patchfile
1329
- case "$1" in
1330
- ruby-* | jruby-* | rubinius-* | truffleruby-* )
1331
- patchfile="$(mktemp "${TMP}/ruby-patch.XXXXXX")"
1332
- cat "${2:--}" >"$patchfile"
1333
-
1334
- local striplevel=0
1335
- grep -q '^--- a/' "$patchfile" && striplevel=1
1336
- patch -p$striplevel --force -i "$patchfile"
1337
- ;;
1338
- esac
1339
- }
1340
-
1341
- version() {
1342
- local git_revision
1343
- # Read the revision from git if the remote points to "ruby-build" repository
1344
- if GIT_DIR="$RUBY_BUILD_INSTALL_PREFIX/.git" git remote -v 2>/dev/null | grep -q /ruby-build; then
1345
- git_revision="$(GIT_DIR="$RUBY_BUILD_INSTALL_PREFIX/.git" git describe --tags HEAD 2>/dev/null || true)"
1346
- git_revision="${git_revision#v}"
1347
- fi
1348
- echo "ruby-build ${git_revision:-$RUBY_BUILD_VERSION}"
1349
- }
1350
-
1351
- usage() {
1352
- sed -ne '/^#/!q;s/.\{1,2\}//;1,2d;p' < "$0"
1353
- [ -z "$1" ] || exit "$1"
1354
- }
1355
-
1356
- # list all versions
1357
- list_definitions() {
1358
- { for DEFINITION_DIR in "${RUBY_BUILD_DEFINITIONS[@]}"; do
1359
- [ -d "$DEFINITION_DIR" ] && ls "$DEFINITION_DIR"
1360
- done
1361
- } | sort_versions | uniq
1362
- }
1363
-
1364
- # list only latest stable versions excluding RC, preview, dev and EoL'ed
1365
- list_maintained_versions() {
1366
- { for DEFINITION_DIR in "${RUBY_BUILD_DEFINITIONS[@]}"; do
1367
- [ -d "$DEFINITION_DIR" ] && \
1368
- grep -L -e warn_eol "$DEFINITION_DIR"/* 2>/dev/null | \
1369
- sed 's|.*/||' | \
1370
- grep -v -e '-rc[0-9]*$' -e '-preview[0-9]*$' -e '-dev$'
1371
- done
1372
- } | extract_latest_versions | sort_versions | uniq
1373
- }
1374
-
1375
- extract_latest_versions() {
1376
- # sort in this function looks redundunt but it is necessary
1377
- # rbx-3.99 appears latest unless the sort
1378
- sed 'h; s/[-]/./g; s/.p\([[:digit:]]\)/.z.\1/; s/$/.z/; G; s/\n/ /' | \
1379
- LC_ALL=C sort -t. -k 1,1 -k 2,2n -k 3,3n -k 4,4n -k 5,5n | \
1380
- sed 's/[.]/ /; s/[0-9].*z //; s/^\([0-9].[0-9]\)/mri\1 \1/' | \
1381
- awk '{ latest[$1] =$2 } END{ for(key in latest) { print latest[key] } }'
1382
- }
1383
-
1384
- sort_versions() {
1385
- sed 'h; s/[-]/./g; s/.p\([[:digit:]]\)/.z.\1/; s/$/.z/; G; s/\n/ /' | \
1386
- LC_ALL=C sort -t. -k 1,1 -k 2,2n -k 3,3n -k 4,4n -k 5,5n | awk '{print $2}'
1387
- }
1388
-
1389
-
1390
- unset VERBOSE
1391
- unset KEEP_BUILD_PATH
1392
- unset HAS_PATCH
1393
- unset IPV4
1394
- unset IPV6
1395
-
1396
- RUBY_BUILD_INSTALL_PREFIX="$(abs_dirname "$0")/.."
1397
-
1398
- IFS=: RUBY_BUILD_DEFINITIONS=($RUBY_BUILD_DEFINITIONS ${RUBY_BUILD_ROOT:-$RUBY_BUILD_INSTALL_PREFIX}/share/ruby-build)
1399
- IFS="$OLDIFS"
1400
-
1401
- parse_options "$@"
1402
-
1403
- for option in "${OPTIONS[@]}"; do
1404
- case "$option" in
1405
- "h" | "help" )
1406
- version
1407
- echo
1408
- usage 0
1409
- ;;
1410
- "definitions" )
1411
- list_definitions
1412
- exit 0
1413
- ;;
1414
- "l" | "list")
1415
- list_maintained_versions
1416
- exit 0
1417
- ;;
1418
- "k" | "keep" )
1419
- KEEP_BUILD_PATH=true
1420
- ;;
1421
- "v" | "verbose" )
1422
- VERBOSE=true
1423
- ;;
1424
- "p" | "patch" )
1425
- HAS_PATCH=true
1426
- ;;
1427
- "4" | "ipv4")
1428
- IPV4=true
1429
- ;;
1430
- "6" | "ipv6")
1431
- IPV6=true
1432
- ;;
1433
- "version" )
1434
- version
1435
- exit 0
1436
- ;;
1437
- esac
1438
- done
1439
-
1440
- [ "${#ARGUMENTS[@]}" -eq 2 ] || usage 1 >&2
1441
-
1442
- DEFINITION_PATH="${ARGUMENTS[0]}"
1443
- if [ -z "$DEFINITION_PATH" ]; then
1444
- usage 1 >&2
1445
- elif [ ! -f "$DEFINITION_PATH" ]; then
1446
- for DEFINITION_DIR in "${RUBY_BUILD_DEFINITIONS[@]}"; do
1447
- if [ -f "${DEFINITION_DIR}/${DEFINITION_PATH}" ]; then
1448
- DEFINITION_PATH="${DEFINITION_DIR}/${DEFINITION_PATH}"
1449
- break
1450
- fi
1451
- done
1452
-
1453
- if [ ! -f "$DEFINITION_PATH" ]; then
1454
- echo "ruby-build: definition not found: ${DEFINITION_PATH}" >&2
1455
- exit 2
1456
- fi
1457
- fi
1458
-
1459
- PREFIX_PATH="${ARGUMENTS[1]}"
1460
- if [ -z "$PREFIX_PATH" ]; then
1461
- usage 1 >&2
1462
- elif [ "${PREFIX_PATH#/}" = "$PREFIX_PATH" ]; then
1463
- PREFIX_PATH="${PWD}/${PREFIX_PATH}"
1464
- fi
1465
-
1466
- if [ -z "$TMPDIR" ]; then
1467
- TMP="/tmp"
1468
- else
1469
- TMP="${TMPDIR%/}"
1470
- fi
1471
-
1472
- # Check if TMPDIR is accessible and can hold executables.
1473
- tmp_executable="${TMP}/ruby-build-test.$$"
1474
- noexec=""
1475
- if mkdir -p "$TMP" && touch "$tmp_executable" 2>/dev/null; then
1476
- cat > "$tmp_executable" <<-EOF
1477
- #!${BASH}
1478
- exit 0
1479
- EOF
1480
- chmod +x "$tmp_executable"
1481
- else
1482
- echo "ruby-build: TMPDIR=$TMP is set to a non-accessible location" >&2
1483
- exit 1
1484
- fi
1485
- "$tmp_executable" 2>/dev/null || noexec=1
1486
- rm -f "$tmp_executable"
1487
- if [ -n "$noexec" ]; then
1488
- echo "ruby-build: TMPDIR=$TMP cannot hold executables (partition possibly mounted with \`noexec\`)" >&2
1489
- exit 1
1490
- fi
1491
-
1492
- # Apply following work around, if gcc is not installed.
1493
- if [ -z "$(locate_gcc)" ]; then
1494
- # Work around warnings building Ruby 2.0 on Clang 2.x:
1495
- # pass -Wno-error=shorten-64-to-32 if the compiler accepts it.
1496
- #
1497
- # When we set CFLAGS, Ruby won't apply its default flags, though. Since clang
1498
- # builds 1.9.x and 2.x only, where -O3 is default, we can safely set that flag.
1499
- # Ensure it's the first flag since later flags take precedence.
1500
- if "${CC:-cc}" -x c /dev/null -E -Wno-error=shorten-64-to-32 &>/dev/null; then
1501
- RUBY_CFLAGS="-O3 -Wno-error=shorten-64-to-32 $RUBY_CFLAGS"
1502
- fi
1503
- fi
1504
-
1505
- if [ -z "$MAKE" ]; then
1506
- if is_freebsd; then
1507
- # Workaround for Ruby bug 16331: https://bugs.ruby-lang.org/issues/16331
1508
- # Due to this bug, build will fail with FreeBSD's make after #1368
1509
- # The bug is already fixed in upstream but GNU make is still required
1510
- # when building older releases of Ruby. Use GNU make rather than switching
1511
- # depending of Ruby version.
1512
- export MAKE="gmake"
1513
- else
1514
- export MAKE="make"
1515
- fi
1516
- fi
1517
-
1518
- if [ -n "$RUBY_BUILD_CACHE_PATH" ] && [ -d "$RUBY_BUILD_CACHE_PATH" ]; then
1519
- RUBY_BUILD_CACHE_PATH="${RUBY_BUILD_CACHE_PATH%/}"
1520
- else
1521
- unset RUBY_BUILD_CACHE_PATH
1522
- fi
1523
-
1524
- if [ -z "$RUBY_BUILD_MIRROR_URL" -a -z "$RUBY_BUILD_MIRROR_PACKAGE_URL" ]; then
1525
- RUBY_BUILD_MIRROR_URL="https://dqw8nmjcqpjn7.cloudfront.net"
1526
- RUBY_BUILD_DEFAULT_MIRROR=1
1527
- else
1528
- RUBY_BUILD_MIRROR_URL="${RUBY_BUILD_MIRROR_URL%/}"
1529
- RUBY_BUILD_DEFAULT_MIRROR=
1530
- fi
1531
-
1532
- if [ -n "$RUBY_BUILD_SKIP_MIRROR" ] || ! has_checksum_support compute_sha2; then
1533
- unset RUBY_BUILD_MIRROR_URL RUBY_BUILD_MIRROR_PACKAGE_URL
1534
- fi
1535
-
1536
- ARIA2_OPTS="${RUBY_BUILD_ARIA2_OPTS} ${IPV4+--disable-ipv6=true} ${IPV6+--disable-ipv6=false}"
1537
- CURL_OPTS="${RUBY_BUILD_CURL_OPTS} ${IPV4+--ipv4} ${IPV6+--ipv6}"
1538
- WGET_OPTS="${RUBY_BUILD_WGET_OPTS} ${IPV4+--inet4-only} ${IPV6+--inet6-only}"
1539
-
1540
- SEED="$(date "+%Y%m%d%H%M%S").$$"
1541
- LOG_PATH="${TMP}/ruby-build.${SEED}.log"
1542
- RUBY_BIN="${PREFIX_PATH}/bin/ruby"
1543
- CWD="$(pwd)"
1544
-
1545
- if [ -z "$RUBY_BUILD_BUILD_PATH" ]; then
1546
- BUILD_PATH="$(mktemp -d "${LOG_PATH%.log}.XXXXXX")"
1547
- else
1548
- BUILD_PATH="$RUBY_BUILD_BUILD_PATH"
1549
- fi
1550
-
1551
- exec 4<> "$LOG_PATH" # open the log file at fd 4
1552
- if [ -n "$VERBOSE" ]; then
1553
- tail -f "$LOG_PATH" &
1554
- TAIL_PID=$!
1555
- trap "kill $TAIL_PID" SIGINT SIGTERM EXIT
1556
- else
1557
- if [ -z "$RUBY_BUILD_TESTING" ]; then
1558
- echo "To follow progress, use 'tail -f $LOG_PATH' or pass --verbose" >&2
1559
- fi
1560
- fi
1561
-
1562
- export LDFLAGS="-L${PREFIX_PATH}/lib ${LDFLAGS}"
1563
- export CPPFLAGS="-I${PREFIX_PATH}/include ${CPPFLAGS}"
1564
-
1565
- unset RUBYOPT
1566
- unset RUBYLIB
1567
-
1568
- trap build_failed ERR
1569
- mkdir -p "$BUILD_PATH"
1570
- source "$DEFINITION_PATH"
1571
- [ -z "${KEEP_BUILD_PATH}" ] && rm -fr "$BUILD_PATH"
1572
- trap - ERR