aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorMike McQuaid2014-04-02 14:51:43 +0100
committerMike McQuaid2014-04-04 10:46:37 +0100
commitf9008295b3cecaa91802de7aea090c328ab94edc (patch)
tree7e19c60b14ad1d5325cc37138ba73a1c481707bc /Library
parent2803df401ecc88ca09ffab965d76e9c360d6c718 (diff)
downloadhomebrew-f9008295b3cecaa91802de7aea090c328ab94edc.tar.bz2
node: install npm using tarball.
Install npm to the expected location using the upstream tarball. This should make everyone happier. Closes #27479.
Diffstat (limited to 'Library')
-rw-r--r--Library/Formula/node.rb89
1 files changed, 32 insertions, 57 deletions
diff --git a/Library/Formula/node.rb b/Library/Formula/node.rb
index b4796cf8a..03752a8bc 100644
--- a/Library/Formula/node.rb
+++ b/Library/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}}
+ resource "npm" do
+ url "http://registry.npmjs.org/npm/-/npm-1.4.6.tgz"
+ sha1 "0e151bce38e72cf2206a6299fa5164123f04256e"
+ end
+ def install
+ args = %W{--prefix=#{prefix} --without-npm}
args << "--debug" if build.include? 'enable-debug'
- args << "--without-npm" if build.without? "npm"
system "./configure", *args
- system "make install"
+ system "make", "install"
+
+ resource("npm").stage libexec/"npm" if build.with? "npm"
+ end
- if build.with? "npm"
- (lib/"node_modules/npm/npmrc").write("prefix = #{npm_prefix}\n")
+ def post_install
+ return if build.without? "npm"
- # 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
+ node_modules = HOMEBREW_PREFIX/"lib/node_modules"
+ node_modules.mkpath
+ cp_r libexec/"npm", node_modules
- if build.with? "completion"
- bash_completion.install_symlink \
- lib/"node_modules/npm/lib/utils/completion.sh" => "npm"
- end
+ 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
- end
- def npm_prefix
- d = "#{HOMEBREW_PREFIX}/share/npm"
- if File.directory? d
- d
- else
- HOMEBREW_PREFIX.to_s
+ 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