This repository has been archived by the owner on Jul 4, 2023. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 11.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
127 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,125 @@ | ||
# Note that x.even are stable releases, x.odd are devel releases | ||
class Iojs < Formula | ||
homepage "https://iojs.org/" | ||
url "https://iojs.org/dist/v1.0.1/iojs-v1.0.1.tar.gz" | ||
sha256 "c26052dad5d9ccd8a7b9134806994ebf2d217a57d6efd5633e01c5cc1dcdedc5" | ||
|
||
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 | ||
|
||
fails_with :llvm do | ||
build 2326 | ||
end | ||
|
||
resource "npm" do | ||
url "https://registry.npmjs.org/npm/-/npm-2.1.18.tgz" | ||
sha1 "e2af4c5f848fb023851cd2ec129005d33090bd57" | ||
end | ||
|
||
def install | ||
args = %W{--prefix=#{prefix} --without-npm} | ||
args << "--debug" if build.with? "debug" | ||
|
||
# This should eventually be able to use the system icu4c, but right now | ||
# it expects to find this dependency using pkgconfig. | ||
if build.head? | ||
ENV.prepend_path "PKG_CONFIG_PATH", "#{Formula["icu4c"].opt_prefix}/lib/pkgconfig" | ||
args << "--with-intl=system-icu" | ||
end | ||
|
||
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| | ||
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("iojs"), opt_bin/"iojs" | ||
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