forked from Homebrew/legacy-homebrew
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Closes Homebrew#35853. Signed-off-by: Misty De Meo <mistydemeo@gmail.com>
- Loading branch information
1 parent
05be6fd
commit 480aca5
Showing
3 changed files
with
117 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../Formula/iojs.rb |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
class Iojs < Formula | ||
homepage "https://iojs.org/" | ||
url "https://iojs.org/dist/v1.0.2/iojs-v1.0.2.tar.gz" | ||
sha256 "39fa602bf8dda874682d9c0380311de3295997c0b674b5e8aec0b988912cd9d1" | ||
|
||
conflicts_with "node", :because => "io.js includes a symlink named node for compatibility." | ||
|
||
option "with-debug", "Build with debugger hooks" | ||
option "without-npm", "npm will not be installed" | ||
option "without-completion", "npm bash completion will not be installed" | ||
|
||
depends_on :python => :build | ||
|
||
resource "npm" do | ||
url "https://registry.npmjs.org/npm/-/npm-2.2.0.tgz" | ||
sha1 "e9a1c4971558019f3d14f7a33aa7a7492bc195ed" | ||
end | ||
|
||
def install | ||
args = %W[--prefix=#{prefix} --without-npm] | ||
args << "--debug" if build.with? "debug" | ||
|
||
system "./configure", *args | ||
system "make", "install" | ||
|
||
if build.with? "npm" | ||
resource("npm").stage buildpath/"npm_install" | ||
|
||
# make sure npm can find iojs | ||
ENV.prepend_path "PATH", bin | ||
|
||
# set log level temporarily for npm's `make install` | ||
ENV["NPM_CONFIG_LOGLEVEL"] = "verbose" | ||
|
||
cd buildpath/"npm_install" do | ||
system "./configure", "--prefix=#{libexec}/npm" | ||
system "make", "install" | ||
end | ||
|
||
if build.with? "completion" | ||
bash_completion.install \ | ||
buildpath/"npm_install/lib/utils/completion.sh" => "npm" | ||
end | ||
end | ||
end | ||
|
||
def post_install | ||
return if build.without? "npm" | ||
|
||
node_modules = HOMEBREW_PREFIX/"lib/node_modules" | ||
node_modules.mkpath | ||
npm_exec = node_modules/"npm/bin/npm-cli.js" | ||
# Kill npm but preserve all other modules across iojs updates/upgrades. | ||
rm_rf node_modules/"npm" | ||
|
||
cp_r libexec/"npm/lib/node_modules/npm", node_modules | ||
# This symlink doesn't hop into homebrew_prefix/bin automatically so | ||
# remove it and make our own. This is a small consequence of our bottle | ||
# npm make install workaround. All other installs **do** symlink to | ||
# homebrew_prefix/bin correctly. We ln rather than cp this because doing | ||
# so mimics npm's normal install. | ||
ln_sf npm_exec, "#{HOMEBREW_PREFIX}/bin/npm" | ||
|
||
# Let's do the manpage dance. It's just a jump to the left. | ||
# And then a step to the right, with your hand on rm_f. | ||
["man1", "man3", "man5", "man7"].each do |man| | ||
mkdir_p HOMEBREW_PREFIX/"share/man/#{man}" | ||
rm_f Dir[HOMEBREW_PREFIX/"share/man/#{man}/{npm.,npm-,npmrc.}*"] | ||
Dir[libexec/"npm/share/man/#{man}/npm*"].each { |f| ln_sf f, HOMEBREW_PREFIX/"share/man/#{man}" } | ||
end | ||
|
||
npm_root = node_modules/"npm" | ||
npmrc = npm_root/"npmrc" | ||
npmrc.atomic_write("prefix = #{HOMEBREW_PREFIX}\n") | ||
end | ||
|
||
def caveats | ||
s = "" | ||
|
||
if build.with? "npm" | ||
s += <<-EOS.undent | ||
If you update npm itself, do NOT use the npm update command. | ||
The upstream-recommended way to update npm is: | ||
npm install -g npm@latest | ||
EOS | ||
else | ||
s += <<-EOS.undent | ||
Homebrew has NOT installed npm. If you later install it, you should supplement | ||
your NODE_PATH with the npm module folder: | ||
#{HOMEBREW_PREFIX}/lib/node_modules | ||
EOS | ||
end | ||
|
||
s | ||
end | ||
|
||
test do | ||
path = testpath/"test.js" | ||
path.write "console.log('hello');" | ||
|
||
output = `#{bin}/iojs #{path}`.strip | ||
assert_equal "hello", output | ||
assert_equal 0, $?.exitstatus | ||
|
||
if build.with? "npm" | ||
# make sure npm can find node | ||
ENV.prepend_path "PATH", opt_bin | ||
assert_equal which("node"), opt_bin/"node" | ||
assert (HOMEBREW_PREFIX/"bin/npm").exist?, "npm must exist" | ||
assert (HOMEBREW_PREFIX/"bin/npm").executable?, "npm must be executable" | ||
system "#{HOMEBREW_PREFIX}/bin/npm", "--verbose", "install", "npm@latest" | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters