This method predates Python's standardized `pyproject.toml` build system,
introduced in PEP 517 to allow for more build backends than just
`setuptools`: https://peps.python.org/pep-0517/. Directly executing
`setup.py` has since been deprecated in favor of using PEP 517 compliant
installers, such as `pip`: https://packaging.python.org/en/latest/discussions/setup-py-deprecated/
In homebrew/core, our last remaining use is a single disabled formula.
For third party taps, simply migrate to `std_pip_args`:
```ruby
# Old
system python3, *Language::Python.setup_install_args(libexec, python3)
# New
system python3, "-m", "pip", "install", *std_pip_args, "."
```
This reduces the surface area of our `Kernel` monkeypatch and removes
the need to `include Kernel` in a bunch of modules.
While we're here, also move `Kernel#require?` to `Homebrew` and fully
scope the calls to it.
We should use `\A` to pick up shebangs at the start of files instead of
just anywhere in a given script.
See Homebrew/homebrew-core#227654 for an example where this can cause
problems.
Add `without`, `start_with`, and `end_with` to allow basic control over
the order that resources are installed so that the situations where we
have to split up `virtualenv_install_with_resources` is reduced.
Co-authored-by: Kevin <apainintheneck@gmail.com>
Co-authored-by: Mike McQuaid <mike@mikemcquaid.com>
Signed-off-by: Michael Cho <michael@michaelcho.dev>
Also add comment to odeprecate in future. In homebrew/core, only
usage is in deprecated/disabled formulae.
Signed-off-by: Michael Cho <michael@michaelcho.dev>
This reworks `Language::Python::Shebang` to use constants for
the shebang regex and max length (like the previous Node commit).
Besides that, this also adds type signatures to the existing methods.
This primarily reworks `Language::Perl::Shebang` to use constants for
the shebang regex and max length (like the previous Node commit) and
to extract the `RewriteInfo` call into a separate method (like Python
and Node).
Besides that, this also adds type signatures to the methods.
Formulae that depend on `node` sometimes contain files that use a
shebang like `#!/usr/bin/env node` and this can lead to issues when
the `node` in a user's environment isn't brewed `node`.
For example, some node modules are compiled when the formula is built
but if the user's `node` is a different major version than brew's
`node`, the differing `NODE_MODULE_VERSION` can produce an error when
certain parts of the application are used. The formula may build and
test fine and the issue may only become apparent when more of the
application is exercised.
This adds a `Language::Node::Shebang` module (borrowing from the
existing Perl and Python examples), which allows us to use
`rewrite_shebang detected_node_shebang, ...` in formulae to address
this type of issue.