Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

node@9 9.11.1 #27101

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
143 changes: 143 additions & 0 deletions Formula/node@9.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
class NodeAT9 < Formula
desc "Platform built on V8 to build network applications"
homepage "https://nodejs.org/"
url "https://nodejs.org/dist/v9.11.1/node-v9.11.1.tar.xz"
sha256 "23dc3d133924f5c7453c479d5eceb3b6af932415cb67d99798c313573d9b9d4c"
head "https://github.com/nodejs/node.git", :branch => "v9.x-staging"

bottle do
sha256 "a4c2d90a60930aa6e2cff330a81d8cec3636cdd9fc002ce79da30540499052d2" => :high_sierra
sha256 "0aae3fdf9ac8d330b536671ac4e9b20cc88f1eeeee6f8432e64e141c3b472af0" => :sierra
sha256 "f6af24d8ed4594db47b3c9ed4c525c524a7798101c4b2ad122164516e1a6ef7f" => :el_capitan
end

option "with-debug", "Build with debugger hooks"
option "with-openssl", "Build against Homebrew's OpenSSL instead of the bundled OpenSSL"
option "without-npm", "npm will not be installed"
option "without-completion", "npm bash completion will not be installed"
option "without-icu4c", "Build with small-icu (English only) instead of system-icu (all locales)"

deprecated_option "enable-debug" => "with-debug"

depends_on "pkg-config" => :build
depends_on "python@2" => :build
depends_on "openssl" => :optional

# Per upstream - "Need g++ 4.8 or clang++ 3.4".
fails_with :clang if MacOS.version <= :snow_leopard
fails_with :gcc_4_0
fails_with :gcc
("4.3".."4.7").each do |n|
fails_with :gcc => n
end

# We track major/minor from upstream Node releases.
# We will accept *important* npm patch releases when necessary.
resource "npm" do
url "https://registry.npmjs.org/npm/-/npm-5.6.0.tgz"
sha256 "b1f0de3767136c1d7b4b0f10e6eb2fb3397e2fe11e4c9cddcd0030ad1af9eddd"
end

def install
# Never install the bundled "npm", always prefer our
# installation from tarball for better packaging control.
args = %W[--prefix=#{prefix} --without-npm]
args << "--debug" if build.with? "debug"
args << "--with-intl=system-icu" if build.with? "icu4c"
args << "--shared-openssl" if build.with? "openssl"
args << "--tag=head" if build.head?

system "./configure", *args
system "make", "install"

if build.with? "npm"
# Allow npm to find Node before installation has completed.
ENV.prepend_path "PATH", bin

bootstrap = buildpath/"npm_bootstrap"
bootstrap.install resource("npm")
system "node", bootstrap/"bin/npm-cli.js", "install", "-ddd", "--global",
"--prefix=#{libexec}", resource("npm").cached_download

# The `package.json` stores integrity information about the above passed
# in `cached_download` npm resource, which breaks `npm -g outdated npm`.
# This copies back over the vanilla `package.json` to fix this issue.
cp bootstrap/"package.json", libexec/"lib/node_modules/npm"
# These symlinks are never used & they've caused issues in the past.
rm_rf libexec/"share"

if build.with? "completion"
bash_completion.install \
bootstrap/"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
# Kill npm but preserve all other modules across node updates/upgrades.
rm_rf node_modules/"npm"

cp_r libexec/"lib/node_modules/npm", node_modules
# This symlink doesn't hop into homebrew_prefix/bin automatically so
# we make our own. This is a small consequence of our
# bottle-npm-and-retain-a-private-copy-in-libexec setup
# 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 node_modules/"npm/bin/npm-cli.js", HOMEBREW_PREFIX/"bin/npm"
ln_sf node_modules/"npm/bin/npx-cli.js", HOMEBREW_PREFIX/"bin/npx"

# 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.
%w[man1 man5 man7].each do |man|
# Dirs must exist first: https://github.com/Homebrew/legacy-homebrew/issues/35969
mkdir_p HOMEBREW_PREFIX/"share/man/#{man}"
rm_f Dir[HOMEBREW_PREFIX/"share/man/#{man}/{npm.,npm-,npmrc.,package.json.,npx.}*"]
cp Dir[libexec/"lib/node_modules/npm/man/#{man}/{npm,package.json,npx}*"], HOMEBREW_PREFIX/"share/man/#{man}"
end

(node_modules/"npm/npmrc").atomic_write("prefix = #{HOMEBREW_PREFIX}\n")
end

def caveats
if build.without? "npm"
<<~EOS
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
end

test do
path = testpath/"test.js"
path.write "console.log('hello');"

output = shell_output("#{bin}/node #{path}").strip
assert_equal "hello", output
output = shell_output("#{bin}/node -e 'console.log(new Intl.NumberFormat(\"en-EN\").format(1234.56))'").strip
assert_equal "1,234.56", output
if build.with? "icu4c"
output = shell_output("#{bin}/node -e 'console.log(new Intl.NumberFormat(\"de-DE\").format(1234.56))'").strip
assert_equal "1.234,56", output
end

if build.with? "npm"
# make sure npm can find node
ENV.prepend_path "PATH", opt_bin
ENV.delete "NVM_NODEJS_ORG_MIRROR"
assert_equal which("node"), opt_bin/"node"
assert_predicate HOMEBREW_PREFIX/"bin/npm", :exist?, "npm must exist"
assert_predicate HOMEBREW_PREFIX/"bin/npm", :executable?, "npm must be executable"
npm_args = ["-ddd", "--cache=#{HOMEBREW_CACHE}/npm_cache", "--build-from-source"]
system "#{HOMEBREW_PREFIX}/bin/npm", *npm_args, "install", "npm@latest"
system "#{HOMEBREW_PREFIX}/bin/npm", *npm_args, "install", "bignum" unless head?
assert_predicate HOMEBREW_PREFIX/"bin/npx", :exist?, "npx must exist"
assert_predicate HOMEBREW_PREFIX/"bin/npx", :executable?, "npx must be executable"
assert_match "< hello >", shell_output("#{HOMEBREW_PREFIX}/bin/npx cowsay hello")
end
end
end