-
-
Notifications
You must be signed in to change notification settings - Fork 12.5k
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
1 parent
bcf936c
commit 36871ab
Showing
1 changed file
with
111 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,111 @@ | ||
class NodeAT16 < Formula | ||
desc "Platform built on V8 to build network applications" | ||
homepage "https://nodejs.org/" | ||
url "https://nodejs.org/dist/v16.12.0/node-v16.12.0.tar.xz" | ||
sha256 "5f620a6a400901a6565aa0c07309cde3aab3dbaa765cecb934241de520d36bac" | ||
license "MIT" | ||
|
||
livecheck do | ||
url "https://nodejs.org/dist/" | ||
regex(%r{href=["']?v?(16(?:\.\d+)+)/?["' >]}i) | ||
end | ||
|
||
keg_only :versioned_formula | ||
|
||
depends_on "pkg-config" => :build | ||
depends_on "brotli" | ||
depends_on "c-ares" | ||
depends_on "icu4c" | ||
depends_on "libnghttp2" | ||
depends_on "libuv" | ||
depends_on "openssl@1.1" | ||
depends_on "python@3.10" | ||
|
||
uses_from_macos "zlib" | ||
|
||
on_linux do | ||
depends_on "gcc" | ||
end | ||
|
||
fails_with :clang do | ||
build 1099 | ||
cause "Node requires Xcode CLT 11+" | ||
end | ||
|
||
fails_with gcc: "5" | ||
|
||
# Fix build with brewed c-ares. | ||
# https://github.com/nodejs/node/pull/39739 | ||
# | ||
# Remove when the following lands in a *c-ares* release: | ||
# https://github.com/c-ares/c-ares/commit/7712fcd17847998cf1ee3071284ec50c5b3c1978 | ||
# https://github.com/c-ares/c-ares/pull/417 | ||
patch do | ||
url "https://github.com/nodejs/node/commit/8699aa501c4d4e1567ebe8901e5ec80cadaa9323.patch?full_index=1" | ||
sha256 "678643c79258372d5054d3da16bc0c5db17130f151f0e72b6e4f20817987aac9" | ||
end | ||
|
||
def install | ||
# make sure subprocesses spawned by make are using our Python 3 | ||
ENV["PYTHON"] = which("python3") | ||
|
||
args = %W[ | ||
--prefix=#{prefix} | ||
--with-intl=system-icu | ||
--shared-libuv | ||
--shared-nghttp2 | ||
--shared-openssl | ||
--shared-zlib | ||
--shared-brotli | ||
--shared-cares | ||
--shared-libuv-includes=#{Formula["libuv"].include} | ||
--shared-libuv-libpath=#{Formula["libuv"].lib} | ||
--shared-nghttp2-includes=#{Formula["libnghttp2"].include} | ||
--shared-nghttp2-libpath=#{Formula["libnghttp2"].lib} | ||
--shared-openssl-includes=#{Formula["openssl@1.1"].include} | ||
--shared-openssl-libpath=#{Formula["openssl@1.1"].lib} | ||
--shared-brotli-includes=#{Formula["brotli"].include} | ||
--shared-brotli-libpath=#{Formula["brotli"].lib} | ||
--shared-cares-includes=#{Formula["c-ares"].include} | ||
--shared-cares-libpath=#{Formula["c-ares"].lib} | ||
--openssl-use-def-ca-store | ||
] | ||
system "python3", "configure.py", *args | ||
system "make", "install" | ||
|
||
# Make sure that: | ||
# - `node` can find our keg-only `python3` | ||
# - npm and npx use our keg-only `node` | ||
bin.env_script_all_files libexec, PATH: "#{which("python3").dirname}:#{bin}:${PATH}" | ||
end | ||
|
||
def post_install | ||
(lib/"node_modules/npm/npmrc").atomic_write("prefix = #{HOMEBREW_PREFIX}\n") | ||
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 | ||
|
||
output = shell_output("#{bin}/node -e 'console.log(new Intl.NumberFormat(\"de-DE\").format(1234.56))'").strip | ||
assert_equal "1.234,56", output | ||
|
||
# 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 bin/"npm", :exist?, "npm must exist" | ||
assert_predicate bin/"npm", :executable?, "npm must be executable" | ||
npm_args = ["-ddd", "--cache=#{HOMEBREW_CACHE}/npm_cache", "--build-from-source"] | ||
system "#{bin}/npm", *npm_args, "install", "npm@latest" | ||
system "#{bin}/npm", *npm_args, "install", "ref-napi" | ||
assert_predicate bin/"npx", :exist?, "npx must exist" | ||
assert_predicate bin/"npx", :executable?, "npx must be executable" | ||
assert_match "< hello >", shell_output("#{bin}/npx cowsay hello") | ||
end | ||
end |