From 1e2fa7ef80c7783f3622cd2b5561ad291cd5f051 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Fri, 10 Mar 2017 18:50:53 +0000 Subject: [PATCH] ruby@1.9: import from homebrew/versions. --- Formula/ruby@1.9.rb | 175 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 Formula/ruby@1.9.rb diff --git a/Formula/ruby@1.9.rb b/Formula/ruby@1.9.rb new file mode 100644 index 0000000000..30812d60d8 --- /dev/null +++ b/Formula/ruby@1.9.rb @@ -0,0 +1,175 @@ +class RubyAT19 < Formula + desc "Powerful, clean, object-oriented scripting language" + homepage "https://www.ruby-lang.org/" + url "https://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p551.tar.bz2" + sha256 "b0c5e37e3431d58613a160504b39542ec687d473de1d4da983dabcf3c5de771e" + revision 4 + + keg_only :versioned_formula + + option "with-suffix", "Suffix commands with '193'" + 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 "libyaml" + depends_on "openssl" + depends_on :x11 if build.with? "tcltk" + + def install + args = %W[ + --prefix=#{prefix} + --enable-shared + --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=#{program_suffix}" if build.with? "suffix" + args << "--with-out-ext=tk" if build.without? "tcltk" + args << "--disable-install-doc" if build.without? "doc" + + paths = [ + Formula["libyaml"].opt_prefix, + Formula["openssl"].opt_prefix, + ] + + %w[readline gdbm].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 + ruby="#{bin}/ruby#{program_suffix}" + %w[sitearchdir vendorarchdir].each do |dir| + mkdir_p `#{ruby} -rrbconfig -e 'print RbConfig::CONFIG["#{dir}"]'` + end + + # Create the version-specific bindir used by rubygems + mkdir_p rubygems_bindir + end + + def abi_version + "1.9.1" + end + + def program_suffix + build.with?("suffix") ? "193" : "" + end + + def rubygems_bindir + "#{HOMEBREW_PREFIX}/lib/ruby/gems/#{abi_version}/bin" + 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 + "#{rubygems_bindir}" + end + + def self.ruby + "#{opt_bin}/ruby#{program_suffix}" + end + end + EOS + end + + def caveats; <<-EOS.undent + By default, binaries installed by gem will be placed into: + #{rubygems_bindir} + + You may want to add this to your PATH. + EOS + end + + test do + hello_text = shell_output("#{bin}/ruby#{program_suffix} -e 'puts :hello'") + assert_equal "hello\n", hello_text + system "#{bin}/gem#{program_suffix}", "list", "--local" + end +end