class Ruby < Formula desc "Powerful, clean, object-oriented scripting language" homepage "https://www.ruby-lang.org/" url "https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.bz2" sha256 "c745cb98b29127d7f19f1bf9e0a63c384736f4d303b83c4f4bda3c2ee3c5e41f" bottle do sha256 "13b2a0096f65a74b31a6055bf421332930b2c41101ed2c507d5d0c6a5b9b5770" => :el_capitan sha256 "45f8ba8eb5cb90ba89e0bf950148be4f50a88d3d1daf496b954d288543025735" => :yosemite sha256 "40b34f18f354dc2bb55fdae3082c1004483f44141628c473a5fe0c0882fdee80" => :mavericks sha256 "ae3460dc786fd5ad45d984a700ccb134cdab445da3c6c2fa8053136d2a9ff1f3" => :mountain_lion end head do url "http://svn.ruby-lang.org/repos/ruby/trunk/" depends_on "autoconf" => :build end option :universal option "with-suffix", "Suffix commands with '22'" option "with-doc", "Install documentation" option "with-tcltk", "Install with Tcl/Tk support" depends_on "pkg-config" => :build depends_on "readline" => :recommended depends_on "gdbm" => :optional depends_on "gmp" => :optional depends_on "libffi" => :optional depends_on "libyaml" depends_on "openssl" depends_on :x11 if build.with? "tcltk" fails_with :llvm do build 2326 end def install system "autoconf" if build.head? args = %W[ --prefix=#{prefix} --enable-shared --disable-silent-rules --with-sitedir=#{HOMEBREW_PREFIX}/lib/ruby/site_ruby --with-vendordir=#{HOMEBREW_PREFIX}/lib/ruby/vendor_ruby ] if build.universal? ENV.universal_binary args << "--with-arch=#{Hardware::CPU.universal_archs.join(",")}" end args << "--program-suffix=22" if build.with? "suffix" args << "--with-out-ext=tk" if build.without? "tcltk" args << "--disable-install-doc" if build.without? "doc" args << "--disable-dtrace" unless MacOS::CLT.installed? args << "--without-gmp" if build.without? "gmp" # Reported upstream: https://bugs.ruby-lang.org/issues/10272 args << "--with-setjmp-type=setjmp" if MacOS.version == :lion paths = [ Formula["libyaml"].opt_prefix, Formula["openssl"].opt_prefix ] %w[readline gdbm gmp libffi].each do |dep| paths << Formula[dep].opt_prefix if build.with? dep end args << "--with-opt-dir=#{paths.join(":")}" system "./configure", *args # Ruby has been configured to look in the HOMEBREW_PREFIX for the # sitedir and vendordir directories; however we don't actually want to create # them during the install. # # These directories are empty on install; sitedir is used for non-rubygems # third party libraries, and vendordir is used for packager-provided libraries. inreplace "tool/rbinstall.rb" do |s| s.gsub! 'prepare "extension scripts", sitelibdir', "" s.gsub! 'prepare "extension scripts", vendorlibdir', "" s.gsub! 'prepare "extension objects", sitearchlibdir', "" s.gsub! 'prepare "extension objects", vendorarchlibdir', "" end system "make" system "make", "install" end def post_install # Customize rubygems to look/install in the global gem directory # instead of in the Cellar, making gems last across reinstalls config_file = lib/"ruby/#{abi_version}/rubygems/defaults/operating_system.rb" config_file.unlink if config_file.exist? config_file.write rubygems_config # Create the sitedir and vendordir that were skipped during install mkdir_p `#{bin}/ruby -e 'require "rbconfig"; print RbConfig::CONFIG["sitearchdir"]'` mkdir_p `#{bin}/ruby -e 'require "rbconfig"; print RbConfig::CONFIG["vendorarchdir"]'` end def abi_version "2.2.0" end def rubygems_config; <<-EOS.undent module Gem class << self alias :old_default_dir :default_dir alias :old_default_path :default_path alias :old_default_bindir :default_bindir alias :old_ruby :ruby end def self.default_dir path = [ "#{HOMEBREW_PREFIX}", "lib", "ruby", "gems", "#{abi_version}" ] @default_dir ||= File.join(*path) end def self.private_dir path = if defined? RUBY_FRAMEWORK_VERSION then [ File.dirname(RbConfig::CONFIG['sitedir']), 'Gems', RbConfig::CONFIG['ruby_version'] ] elsif RbConfig::CONFIG['rubylibprefix'] then [ RbConfig::CONFIG['rubylibprefix'], 'gems', RbConfig::CONFIG['ruby_version'] ] else [ RbConfig::CONFIG['libdir'], ruby_engine, 'gems', RbConfig::CONFIG['ruby_version'] ] end @private_dir ||= File.join(*path) end def self.default_path if Gem.user_home && File.exist?(Gem.user_home) [user_dir, default_dir, private_dir] else [default_dir, private_dir] end end def self.default_bindir "#{HOMEBREW_PREFIX}/bin" end def self.ruby "#{opt_bin}/ruby#{"22" if build.with? "suffix"}" end end EOS end test do output = `#{bin}/ruby -e "puts 'hello'"` assert_equal "hello\n", output assert_equal 0, $?.exitstatus end end