Last active
July 30, 2018 18:14
-
-
Save evie404/df08cc5b4aae3604162fe08d69c6dd4f to your computer and use it in GitHub Desktop.
Node formula for 8.11
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
class Node < Formula | |
desc "Platform built on V8 to build network applications" | |
homepage "https://nodejs.org/" | |
stable do | |
url "https://nodejs.org/dist/v8.11.3/node-v8.11.3.tar.xz" | |
sha256 "577c751fdca91c46c60ffd8352e5b465881373bfdde212c17c3a3c1bd2616ee0" | |
# 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.5.1.tgz" | |
sha256 "b8b9afb0bb6211a289f969f66ba184ca5bc83abf6a570e0853ea5185073dca6f" | |
end | |
end | |
bottle do | |
sha256 "8972065cc254cd688996153d2b352480ddb06c97d071298e19ac089ed75fd718" => :high_sierra | |
sha256 "bbcad9db53cd546167f3b75e5a1bd289cc32ed9a4c6081da38269583f21cc92e" => :sierra | |
sha256 "f2fbe21a604e200be2339a3f81ade9483955eddd129c7fd00fbdbf4272e9ee60" => :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 :python => :build if MacOS.version <= :snow_leopard | |
depends_on "pkg-config" => :build | |
depends_on "icu4c" => :recommended | |
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 | |
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 | |
# Fix from chrmoritz for ENOENT issue with @ in path to node | |
if build.stable? | |
inreplace libexec/"lib/node_modules/npm/node_modules/libnpx/index.js", | |
"return child.escapeArg(npmPath, true)", "return npmPath" | |
end | |
# 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 | |
npm_root = node_modules/"npm" | |
npmrc = npm_root/"npmrc" | |
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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment