73 lines
2.3 KiB
Ruby
Raw Normal View History

2020-10-10 14:16:11 +02:00
# typed: false
# frozen_string_literal: true
require "extend/ENV"
require "formula"
2019-04-17 18:25:08 +09:00
require "cli/parser"
module Homebrew
2020-10-20 12:03:48 +02:00
extend T::Sig
2016-09-26 01:44:51 +02:00
module_function
2020-10-20 12:03:48 +02:00
sig { returns(CLI::Parser) }
2019-01-22 01:41:45 +05:30
def sh_args
Homebrew::CLI::Parser.new do
usage_banner <<~EOS
2020-08-28 08:37:15 +01:00
`sh` [<options>] [<file>]
2019-01-22 01:41:45 +05:30
2020-08-25 14:45:09 +00:00
Homebrew build environment that uses years-battle-hardened
build logic to help your `./configure && make && make install`
and even your `gem install` succeed. Especially handy if you run Homebrew
2019-01-22 01:41:45 +05:30
in an Xcode-only configuration since it adds tools like `make` to your `PATH`
which build systems would not find otherwise.
2019-01-22 01:41:45 +05:30
EOS
2019-08-06 13:23:19 -04:00
flag "--env=",
2019-08-06 14:20:27 -04:00
description: "Use the standard `PATH` instead of superenv's when `std` is passed."
2020-08-25 14:45:09 +00:00
flag "-c=", "--cmd=",
description: "Execute commands in a non-interactive shell."
2020-11-12 10:40:41 -05:00
2021-01-10 14:26:40 -05:00
named_args max: 1
2019-01-22 01:41:45 +05:30
end
end
def sh
args = sh_args.parse
ENV.activate_extensions!(env: args.env)
2013-08-19 12:32:56 -05:00
ENV.deps = Formula.installed.select { |f| f.keg_only? && f.opt_prefix.directory? } if superenv?(args.env)
ENV.setup_build_environment
if superenv?(args.env)
# superenv stopped adding brew's bin but generally users will want it
2017-04-28 12:39:00 +02:00
ENV["PATH"] = PATH.new(ENV["PATH"]).insert(1, HOMEBREW_PREFIX/"bin")
end
2020-08-25 14:45:09 +00:00
ENV["VERBOSE"] = "1" if args.verbose?
if args.cmd.present?
safe_system(ENV["SHELL"], "-c", args.cmd)
elsif args.named.present?
2020-08-27 16:48:33 +01:00
safe_system(ENV["SHELL"], args.named.first)
else
2020-08-25 14:45:09 +00:00
subshell = if ENV["SHELL"].include?("zsh")
"PS1='brew %B%F{green}%~%f%b$ ' #{ENV["SHELL"]} -d -f"
elsif ENV["SHELL"].include?("bash")
"PS1=\"brew \\[\\033[1;32m\\]\\w\\[\\033[0m\\]$ \" #{ENV["SHELL"]} --noprofile --norc"
2020-08-25 14:45:09 +00:00
else
"PS1=\"brew \\[\\033[1;32m\\]\\w\\[\\033[0m\\]$ \" #{ENV["SHELL"]}"
end
puts <<~EOS
Your shell has been configured to use Homebrew's build environment;
this should help you build stuff. Notably though, the system versions of
gem and pip will ignore our configuration and insist on using the
environment they were built under (mostly). Sadly, scons will also
ignore our configuration.
When done, type `exit`.
EOS
$stdout.flush
safe_system subshell
end
end
end