config/software/ruby.rb (206 lines of code) (raw):

# # Copyright 2012-2016 Chef Software, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # name "ruby" license "BSD-2-Clause" license_file "BSDL" license_file "COPYING" license_file "LEGAL" # - chef-client cannot use 2.2.x yet due to a bug in IRB that affects chef-shell on linux: # https://bugs.ruby-lang.org/issues/11869 # - the current status of 2.3.x is that it downloads but fails to compile. # - verify that all ffi libs are available for your version on all platforms. # Note: When updating Ruby minor version (i.e. 3.2 -> 3.3), gem_dir_version must be # updated to 3.X.0 in the following file paths: # config/software/td.rb # config/software/td-agent-cleanup.rb # config/software/td-agent-files.rb # config/software/td-agent-ui.rb default_version "3.3.6" fips_enabled = (project.overrides[:fips] && project.overrides[:fips][:enabled]) || false dependency "patch" if solaris2? && platform_version.satisfies?("= 5.10") dependency "ncurses" unless windows? || version.satisfies?(">= 2.1") dependency "zlib" dependency "openssl" dependency "libedit" unless windows? dependency "libffi" dependency "libyaml" # Needed for chef_gem installs of (e.g.) nokogiri on upgrades - # they expect to see our libiconv instead of a system version. # Ignore on windows - TDM GCC comes with libiconv in the runtime # and that's the only one we will ever use. dependency "libiconv" dependency "jemalloc" # The SHA256 checksums below are for the *.tar.gz packages from https://www.ruby-lang.org/en/downloads/releases. version("3.3.6") { source sha256: "8dc48fffaf270f86f1019053f28e51e4da4cce32a36760a0603a9aee67d7fd8d" } version("3.3.5") { source sha256: "3781a3504222c2f26cb4b9eb9c1a12dbf4944d366ce24a9ff8cf99ecbce75196" } version("3.3.4") { source sha256: "fe6a30f97d54e029768f2ddf4923699c416cdbc3a6e96db3e2d5716c7db96a34" } version("3.3.3") { source sha256: "83c05b2177ee9c335b631b29b8c077b4770166d02fa527f3a9f6a40d13f3cce2" } version("3.3.2") { source sha256: "3be1d100ebf2a0ce60c2cd8d22cd9db4d64b3e04a1943be2c4ff7b520f2bcb5b" } version("3.3.1") { source sha256: "8dc2af2802cc700cd182d5430726388ccf885b3f0a14fcd6a0f21ff249c9aa99" } version("3.3.0") { source sha256: "96518814d9832bece92a85415a819d4893b307db5921ae1f0f751a9a89a56b7d" } version("3.2.5") { source sha256: "ef0610b498f60fb5cfd77b51adb3c10f4ca8ed9a17cb87c61e5bea314ac34a16" } version("3.2.4") { source sha256: "c72b3c5c30482dca18b0f868c9075f3f47d8168eaf626d4e682ce5b59c858692" } version("3.2.3") { source sha256: "af7f1757d9ddb630345988139211f1fd570ff5ba830def1cc7c468ae9b65c9ba" } version("3.2.2") { source sha256: "96c57558871a6748de5bc9f274e93f4b5aad06cd8f37befa0e8d94e7b8a423bc" } version("3.2.1") { source sha256: "13d67901660ee3217dbd9dd56059346bd4212ce64a69c306ef52df64935f8dbd" } version("3.2.0") { source sha256: "daaa78e1360b2783f98deeceb677ad900f3a36c0ffa6e2b6b19090be77abc272" } version("3.1.6") { source sha256: "0d0dafb859e76763432571a3109d1537d976266be3083445651dc68deed25c22" } version("3.1.5") { source sha256: "3685c51eeee1352c31ea039706d71976f53d00ab6d77312de6aa1abaf5cda2c5" } version("3.1.4") { source sha256: "a3d55879a0dfab1d7141fdf10d22a07dbf8e5cdc4415da1bde06127d5cc3c7b6" } version("3.1.3") { source sha256: "5ea498a35f4cd15875200a52dde42b6eb179e1264e17d78732c3a57cd1c6ab9e" } version("3.1.2") { source sha256: "61843112389f02b735428b53bb64cf988ad9fb81858b8248e22e57336f24a83e" } version("3.1.1") { source sha256: "fe6e4782de97443978ddba8ba4be38d222aa24dc3e3f02a6a8e7701c0eeb619d" } version("3.0.5") { source sha256: "9afc6380a027a4fe1ae1a3e2eccb6b497b9c5ac0631c12ca56f9b7beb4848776" } version("3.0.4") { source sha256: "70b47c207af04bce9acea262308fb42893d3e244f39a4abc586920a1c723722b" } version("3.0.3") { source sha256: "3586861cb2df56970287f0fd83f274bd92058872d830d15570b36def7f1a92ac" } version("3.0.2") { source sha256: "5085dee0ad9f06996a8acec7ebea4a8735e6fac22f22e2d98c3f2bc3bef7e6f1" } version("3.0.1") { source sha256: "369825db2199f6aeef16b408df6a04ebaddb664fb9af0ec8c686b0ce7ab77727" } version("2.7.8") { source sha256: "c2dab63cbc8f2a05526108ad419efa63a67ed4074dbbcf9fc2b1ca664cb45ba0" } version("2.7.7") { source sha256: "e10127db691d7ff36402cfe88f418c8d025a3f1eea92044b162dd72f0b8c7b90" } version("2.7.6") { source sha256: "e7203b0cc09442ed2c08936d483f8ac140ec1c72e37bb5c401646b7866cb5d10" } version("2.6.10") { source sha256: "0dc609f263d49c4176d5725deefc337273676395985b5e017789373e8cadf16e" } version("2.6.9") { source sha256: "eb7bae7aac64bf9eb2153710a4cafae450ccbb62ae6f63d573e1786178b0efbb" } version("2.6.8") { source sha256: "1807b78577bc08596a390e8a41aede37b8512190e05c133b17d0501791a8ca6d" } version("2.6.7") { source sha256: "e4227e8b7f65485ecb73397a83e0d09dcd39f25efd411c782b69424e55c7a99e" } version("2.6.6") { source sha256: "364b143def360bac1b74eb56ed60b1a0dca6439b00157ae11ff77d5cd2e92291" } version("2.6.5") { source sha256: "66976b716ecc1fd34f9b7c3c2b07bbd37631815377a2e3e85a5b194cfdcbed7d" } version("2.6.4") { source sha256: "4fc1d8ba75505b3797020a6ffc85a8bcff6adc4dabae343b6572bf281ee17937" } version("2.6.3") { source sha256: "577fd3795f22b8d91c1d4e6733637b0394d4082db659fccf224c774a2b1c82fb" } version("2.6.2") { source sha256: "a0405d2bf2c2d2f332033b70dff354d224a864ab0edd462b7a413420453b49ab" } version("2.6.1") { source sha256: "17024fb7bb203d9cf7a5a42c78ff6ce77140f9d083676044a7db67f1e5191cb8" } version("2.5.7") { source sha256: "0b2d0d5e3451b6ab454f81b1bfca007407c0548dea403f1eba2e429da4add6d4" } version("2.5.6") { source sha256: "1d7ed06c673020cd12a737ed686470552e8e99d72b82cd3c26daa3115c36bea7" } version("2.5.5") { source sha256: "28a945fdf340e6ba04fc890b98648342e3cccfd6d223a48f3810572f11b2514c" } version("2.5.4") { source sha256: "0e4042bce749352dfcf1b9e3013ba7c078b728f51f8adaf6470ce37675e3cb1f" } version("2.5.3") { source sha256: "9828d03852c37c20fa333a0264f2490f07338576734d910ee3fd538c9520846c" } version("2.5.1") { source sha256: "dac81822325b79c3ba9532b048c2123357d3310b2b40024202f360251d9829b1" } version("2.5.0") { source sha256: "46e6f3630f1888eb653b15fa811d77b5b1df6fd7a3af436b343cfe4f4503f2ab" } version("2.4.5") { source sha256: "6737741ae6ffa61174c8a3dcdd8ba92bc38827827ab1d7ea1ec78bc3cefc5198" } version("2.4.4") { source sha256: "254f1c1a79e4cc814d1e7320bc5bdd995dc57e08727d30a767664619a9c8ae5a" } version("2.4.3") { source sha256: "fd0375582c92045aa7d31854e724471fb469e11a4b08ff334d39052ccaaa3a98" } version("2.4.2") { source sha256: "93b9e75e00b262bc4def6b26b7ae8717efc252c47154abb7392e54357e6c8c9c" } version("2.4.1") { source sha256: "a330e10d5cb5e53b3a0078326c5731888bb55e32c4abfeb27d9e7f8e5d000250" } version("2.4.0") { source sha256: "152fd0bd15a90b4a18213448f485d4b53e9f7662e1508190aa5b702446b29e3d" } version("2.3.7") { source sha256: "35cd349cddf78e4a0640d28ec8c7e88a2ae0db51ebd8926cd232bb70db2c7d7f" } version("2.3.6") { source sha256: "8322513279f9edfa612d445bc111a87894fac1128eaa539301cebfc0dd51571e" } version("2.3.3") { source sha256: "241408c8c555b258846368830a06146e4849a1d58dcaf6b14a3b6a73058115b7" } version("2.3.1") { source sha256: "b87c738cb2032bf4920fef8e3864dc5cf8eae9d89d8d523ce0236945c5797dcd" } version("2.3.0") { source md5: "e81740ac7b14a9f837e9573601db3162" } version("2.2.7") { source sha256: "374184c6c5bbc88fb7bad422368d4053a236fb6587f0eff76146dcba57f93da5" } version("2.2.6") { source sha256: "de8e192791cb157d610c48a9a9ff6e7f19d67ce86052feae62b82e3682cc675f" } version("2.2.5") { source md5: "bd8e349d4fb2c75d90817649674f94be" } version("2.2.4") { source md5: "9a5e15f9d5255ba37ace18771b0a8dd2" } version("2.2.3") { source md5: "150a5efc5f5d8a8011f30aa2594a7654" } version("2.2.2") { source md5: "326e99ddc75381c7b50c85f7089f3260" } version("2.2.1") { source md5: "b49fc67a834e4f77249eb73eecffb1c9" } version("2.2.0") { source md5: "cd03b28fd0b555970f5c4fd481700852" } version("2.1.10") { source sha256: "fb2e454d7a5e5a39eb54db0ec666f53eeb6edc593d1d2b970ae4d150b831dd20" } version("2.1.9") { source sha256: "034cb9c50676d2c09b3b6cf5c8003585acea05008d9a29fa737c54d52c1eb70c" } version("2.1.8") { source md5: "091b62f0a9796a3c55de2a228a0e6ef3" } version("2.1.7") { source md5: "2e143b8e19b056df46479ae4412550c9" } version("2.1.6") { source md5: "6e5564364be085c45576787b48eeb75f" } version("2.1.5") { source md5: "df4c1b23f624a50513c7a78cb51a13dc" } version("2.1.4") { source md5: "89b2f4a197621346f6724a3c35535b19" } version("2.1.3") { source md5: "74a37b9ad90e4ea63c0eed32b9d5b18f" } version("2.1.2") { source md5: "a5b5c83565f8bd954ee522bd287d2ca1" } version("2.1.1") { source md5: "e57fdbb8ed56e70c43f39c79da1654b2" } version("2.0.0-p645") { source md5: "49919bba0c855eaf8e247108c7933a62" } version("2.0.0-p594") { source md5: "a9caa406da5d72f190e28344e747ee74" } version("2.0.0-p576") { source md5: "2e1f4355981b754d92f7e2cc456f843d" } version("1.9.3-p550") { source md5: "e05135be8f109b2845229c4f47f980fd" } version("1.9.3-p547") { source md5: "7531f9b1b35b16f3eb3d7bea786babfd" } version("1.9.3-p484") { source md5: "8ac0dee72fe12d75c8b2d0ef5d0c2968" } source url: "https://cache.ruby-lang.org/pub/ruby/#{version.match(/^(\d+\.\d+)/)[0]}/ruby-#{version}.tar.gz" relative_path "ruby-#{version}" env = with_standard_compiler_flags(with_embedded_path) if mac_os_x? # -Qunused-arguments suppresses "argument unused during compilation" # warnings. These can be produced if you compile a program that doesn't # link to anything in a path given with -Lextra-libs. Normally these # would be harmless, except that autoconf treats any output to stderr as # a failure when it makes a test program to check your CFLAGS (regardless # of the actual exit code from the compiler). env["CFLAGS"] << " -I#{install_dir}/embedded/include/ncurses -arch x86_64 -m64 -O3 -g -pipe -Qunused-arguments" env["LDFLAGS"] << " -arch x86_64" elsif freebsd? # Stops "libtinfo.so.5.9: could not read symbols: Bad value" error when # compiling ext/readline. See the following for more info: # # https://lists.freebsd.org/pipermail/freebsd-current/2013-October/045425.html # http://mailing.freebsd.ports-bugs.narkive.com/kCgK8sNQ/ports-183106-patch-sysutils-libcdio-does-not-build-on-10-0-and-head # env["LDFLAGS"] << " -ltinfow" elsif aix? # this magic per IBM env["LDSHARED"] = "xlc -G" env["CFLAGS"] = "-I#{install_dir}/embedded/include/ncurses -I#{install_dir}/embedded/include" # this magic per IBM env["XCFLAGS"] = "-DRUBY_EXPORT" # need CPPFLAGS set so ruby doesn't try to be too clever env["CPPFLAGS"] = "-I#{install_dir}/embedded/include/ncurses -I#{install_dir}/embedded/include" env["SOLIBS"] = "-lm -lc" # need to use GNU m4, default m4 doesn't work env["M4"] = "/opt/freeware/bin/m4" elsif solaris2? && platform_version.satisfies?("= 5.10") if sparc? # Known issue with rubby where too much GCC optimization blows up miniruby on sparc env["CFLAGS"] << " -std=c99 -O0 -g -pipe -mcpu=v9" env["LDFLAGS"] << " -mcpu=v9" else env["CFLAGS"] << " -std=c99 -O3 -g -pipe" end elsif windows? env["CPPFLAGS"] << " -DFD_SETSIZE=2048" else # including linux if version.satisfies?(">= 2.3.0") && rhel? && platform_version.satisfies?("< 6.0") env["CFLAGS"] << " -O2 -g -pipe" else env["CFLAGS"] << " -O3 -g -pipe" end end build do # AIX needs /opt/freeware/bin only for patch patch_env = env.dup patch_env["PATH"] = "/opt/freeware/bin:#{env['PATH']}" if aix? if solaris2? && platform_version.satisfies?("= 5.10") && version.satisfies?(">= 2.1") patch source: "ruby-no-stack-protector.patch", plevel: 1, env: patch_env elsif solaris2? && platform_version.satisfies?("= 5.10") && version =~ /^1.9/ patch source: "ruby-sparc-1.9.3-c99.patch", plevel: 1, env: patch_env elsif solaris2? && platform_version.satisfies?("= 5.11") && version =~ /^2.1/ patch source: "ruby-solaris-linux-socket-compat.patch", plevel: 1, env: patch_env end # wrlinux7/ios_xr build boxes from Cisco include libssp and there is no way to # disable ruby from linking against it, but Cisco switches will not have the # library. Disabling it as we do for Solaris. if RUBY_PLATFORM.match("ios_xr") && version.satisfies?(">= 2.1") patch source: "ruby-no-stack-protector.patch", plevel: 1, env: patch_env end # disable libpath in mkmf across all platforms, it trolls omnibus and # breaks the postgresql cookbook. i'm not sure why ruby authors decided # this was a good idea, but it breaks our use case hard. AIX cannot even # compile without removing it, and it breaks some native gem installs on # other platforms. generally you need to have a condition where the # embedded and non-embedded libs get into a fight (libiconv, openssl, etc) # and ruby trying to set LD_LIBRARY_PATH itself gets it wrong. # # Also, fix paths emitted in the makefile on windows on both msys and msys2. if version.satisfies?(">= 2.1") patch source: "ruby-mkmf.patch", plevel: 1, env: patch_env # should intentionally break and fail to apply on 2.2, patch will need to # be fixed. end # Fix reserve stack segmentation fault when building on RHEL5 or below # Currently only affects 2.1.7 and 2.2.3. This patch taken from the fix # in Ruby trunk and expected to be included in future point releases. # https://redmine.ruby-lang.org/issues/11602 if rhel? && platform_version.satisfies?("< 6") && (version == "2.1.7" || version == "2.2.3") patch source: "ruby-fix-reserve-stack-segfault.patch", plevel: 1, env: patch_env end if version.start_with?('2.1') patch source: 'ruby-2.1-openssl-mode-patch.patch', plevel: 1, env: patch_env end configure_command = ["--with-out-ext=dbm,gdbm,probe,racc,sdbm,tk", "--enable-shared", "--with-jemalloc", "--enable-libedit", "--disable-install-doc", "--without-gmp", "--without-gdbm", "--without-tk", "--disable-dtrace"] configure_command << "--with-ext=psych" if version.satisfies?("< 2.3") configure_command << "--with-bundled-md5" if fips_enabled # resolve C99 code accidentally introduced in Ruby 2.6.7. No longer an issue for >= 2.6.10 patch source: "ruby-2.6.7_c99.patch", plevel: 1, env: patch_env if version.satisfies?("~> 2.6.7", "< 2.6.10") if aix? # need to patch ruby's configure file so it knows how to find shared libraries patch source: "ruby-aix-configure.patch", plevel: 1, env: patch_env # have ruby use zlib on AIX correctly patch source: "ruby_aix_openssl.patch", plevel: 1, env: patch_env # AIX has issues with ssl retries, need to patch to have it retry patch source: "ruby_aix_2_1_3_ssl_EAGAIN.patch", plevel: 1, env: patch_env # the next two patches are because xlc doesn't deal with long vs int types well patch source: "ruby-aix-atomic.patch", plevel: 1, env: patch_env patch source: "ruby-aix-vm-core.patch", plevel: 1, env: patch_env # per IBM, just help ruby along on what it's running on configure_command << "--host=powerpc-ibm-aix6.1.0.0 --target=powerpc-ibm-aix6.1.0.0 --build=powerpc-ibm-aix6.1.0.0 --enable-pthread" elsif freebsd? # Disable optional support C level backtrace support. This requires the # optional devel/libexecinfo port to be installed. configure_command << "ac_cv_header_execinfo_h=no" configure_command << "--with-opt-dir=#{install_dir}/embedded" elsif smartos? # Opscode patch - someara@opscode.com # GCC 4.7.0 chokes on mismatched function types between OpenSSL 1.0.1c and Ruby 1.9.3-p286 patch source: "ruby-openssl-1.0.1c.patch", plevel: 1, env: patch_env # Patches taken from RVM. # http://bugs.ruby-lang.org/issues/5384 # https://www.illumos.org/issues/1587 # https://github.com/wayneeseguin/rvm/issues/719 patch source: "rvm-cflags.patch", plevel: 1, env: patch_env # From RVM forum # https://github.com/wayneeseguin/rvm/commit/86766534fcc26f4582f23842a4d3789707ce6b96 configure_command << "ac_cv_func_dl_iterate_phdr=no" configure_command << "--with-opt-dir=#{install_dir}/embedded" elsif windows? configure_command << " debugflags=-g" else configure_command << "--with-opt-dir=#{install_dir}/embedded" end # FFS: works around a bug that infects AIX when it picks up our pkg-config # AFAIK, ruby does not need or use this pkg-config it just causes the build to fail. # The alternative would be to patch configure to remove all the pkg-config garbage entirely env["PKG_CONFIG"] = "/bin/true" if aix? configure(*configure_command, env: env) make "-j #{workers}", env: env make "-j #{workers} install", env: env if windows? # Needed now that we switched to msys2 and have not figured out how to tell # it how to statically link yet dlls = ["libwinpthread-1"] if windows_arch_i386? dlls << "libgcc_s_dw2-1" else dlls << "libgcc_s_seh-1" end dlls.each do |dll| arch_suffix = windows_arch_i386? ? "32" : "64" windows_path = "C:/msys2/mingw#{arch_suffix}/bin/#{dll}.dll" if File.exist?(windows_path) copy windows_path, "#{install_dir}/embedded/bin/#{dll}.dll" else raise "Cannot find required DLL needed for dynamic linking: #{windows_path}" end end else end end