From cf4171155c5d7aa72724dd0e7a7d917324311327 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Wed, 2 Apr 2014 14:51:43 +0100 Subject: [PATCH] node: install npm using tarball. Install npm to the expected location using the upstream tarball. This should make everyone happier. Closes Homebrew/homebrew#27479. --- Formula/node.rb | 103 ++++++++++++++++++------------------------------ 1 file changed, 39 insertions(+), 64 deletions(-) diff --git a/Formula/node.rb b/Formula/node.rb index b4796cf8a8..03752a8bcc 100644 --- a/Formula/node.rb +++ b/Formula/node.rb @@ -1,34 +1,5 @@ require 'formula' -class NpmRequirement < Requirement - fatal true - - def modules_folder - "#{HOMEBREW_PREFIX}/lib/node_modules" - end - - def message; <<-EOS.undent - Beginning with 0.8.0, this recipe now comes with npm. - It appears you already have npm installed at #{modules_folder}/npm. - To use the npm that comes with this recipe, first uninstall npm with - `npm uninstall npm -g`, then run this command again. - - If you would like to keep your installation of npm instead of - using the one provided with homebrew, install the formula with - the `--without-npm` option. - EOS - end - - satisfy :build_env => false do - begin - path = Pathname.new("#{modules_folder}/npm/bin/npm") - path.realpath.to_s.include?(HOMEBREW_CELLAR) - rescue Errno::ENOENT - true - end - end -end - # Note that x.even are stable releases, x.odd are devel releases class Node < Formula homepage 'http://nodejs.org/' @@ -46,44 +17,50 @@ class Node < Formula option 'without-npm', 'npm will not be installed' option 'without-completion', 'npm bash completion will not be installed' - depends_on NpmRequirement => :recommended depends_on :python fails_with :llvm do build 2326 end - def install - args = %W{--prefix=#{prefix}} - - args << "--debug" if build.include? 'enable-debug' - args << "--without-npm" if build.without? "npm" - - system "./configure", *args - system "make install" - - if build.with? "npm" - (lib/"node_modules/npm/npmrc").write("prefix = #{npm_prefix}\n") - - # Link npm manpages - Pathname.glob("#{lib}/node_modules/npm/man/*") do |man| - dir = send(man.basename) - man.children.each { |file| dir.install_symlink(file) } - end - - if build.with? "completion" - bash_completion.install_symlink \ - lib/"node_modules/npm/lib/utils/completion.sh" => "npm" - end - end + resource "npm" do + url "http://registry.npmjs.org/npm/-/npm-1.4.6.tgz" + sha1 "0e151bce38e72cf2206a6299fa5164123f04256e" end - def npm_prefix - d = "#{HOMEBREW_PREFIX}/share/npm" - if File.directory? d - d - else - HOMEBREW_PREFIX.to_s + def install + args = %W{--prefix=#{prefix} --without-npm} + args << "--debug" if build.include? 'enable-debug' + + system "./configure", *args + system "make", "install" + + resource("npm").stage libexec/"npm" if build.with? "npm" + end + + def post_install + return if build.without? "npm" + + node_modules = HOMEBREW_PREFIX/"lib/node_modules" + node_modules.mkpath + cp_r libexec/"npm", node_modules + + npm_root = node_modules/"npm" + npmrc = npm_root/"npmrc" + npmrc.delete if npmrc.exist? + npmrc.write("prefix = #{HOMEBREW_PREFIX}\n") + + npm_root.cd { system "make", "install" } + system "#{HOMEBREW_PREFIX}/bin/npm", "update", "npm", "-g" + + Pathname.glob(npm_root/"man/*") do |man| + dir = send(man.basename) + man.children.each {|file| dir.install_symlink(file) } + end + + if build.with? "completion" + bash_completion.install_symlink \ + npm_root/"lib/utils/completion.sh" => "npm" end end @@ -91,11 +68,7 @@ class Node < Formula if build.without? "npm"; <<-end.undent Homebrew has NOT installed npm. If you later install it, you should supplement your NODE_PATH with the npm module folder: - #{npm_prefix}/lib/node_modules - end - elsif not ENV['PATH'].split(':').include? "#{npm_prefix}/bin"; <<-end.undent - Probably you should amend your PATH to include npm-installed binaries: - #{npm_prefix}/bin + #{HOMEBREW_PREFIX}/lib/node_modules end end end @@ -107,5 +80,7 @@ class Node < Formula output = `#{bin}/node #{path}`.strip assert_equal "hello", output assert_equal 0, $?.exitstatus + + system "#{HOMEBREW_PREFIX}/bin/npm", "install", "npm" if build.with? "npm" end end