-
Notifications
You must be signed in to change notification settings - Fork 5
/
git-curl-openssl.rb
170 lines (141 loc) · 5.92 KB
/
git-curl-openssl.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
class GitCurlOpenssl < Formula
desc "Distributed revision control system"
homepage "https://git-scm.com"
url "https://www.kernel.org/pub/software/scm/git/git-2.24.1.tar.xz"
sha256 "723f24dce8fdd621a308b6187553fce7d5244205c065fe0a3aebd0b7c3f88562"
head "https://github.com/git/git.git", :shallow => false
bottle do
sha256 "2779f9cea861ef4d906093ac7b7255b3eeb7b6f76cbbc8407035bd3d3b80305d" => :catalina
sha256 "423599ea4d93020e4ee33965bf53c0e629c1d5a16e59efc657b4c914d9f52bd0" => :mojave
sha256 "ce56a6b4012a93bfee18cc5017788033c423bef5f732f3117dfa59b688b08b5c" => :high_sierra
end
depends_on "gettext"
depends_on "pcre2"
depends_on "openssl@1.1"
depends_on "curl-openssl"
resource "html" do
url "https://www.kernel.org/pub/software/scm/git/git-htmldocs-2.24.1.tar.xz"
sha256 "8b4da79e7931c5156f3f994c6d8162c7ccb525ebd3f71e26ae8f8430db038403"
end
resource "man" do
url "https://www.kernel.org/pub/software/scm/git/git-manpages-2.24.1.tar.xz"
sha256 "27304ab2674d5ad623a0a72c22116cb47df4a611499a53aef5c7ec39a32cfefb"
end
resource "Net::SMTP::SSL" do
url "https://cpan.metacpan.org/authors/id/R/RJ/RJBS/Net-SMTP-SSL-1.04.tar.gz"
sha256 "7b29c45add19d3d5084b751f7ba89a8e40479a446ce21cfd9cc741e558332a00"
end
def install
# If these things are installed, tell Git build system not to use them
ENV["NO_FINK"] = "1"
ENV["NO_DARWIN_PORTS"] = "1"
ENV["NO_R_TO_GCC_LINKER"] = "1" # pass arguments to LD correctly
ENV["PYTHON_PATH"] = which("python")
ENV["PERL_PATH"] = which("perl")
ENV["USE_LIBPCRE2"] = "1"
ENV["INSTALL_SYMLINKS"] = "1"
ENV["LIBPCREDIR"] = Formula["pcre2"].opt_prefix
ENV["V"] = "1" # build verbosely
perl_version = Utils.popen_read("perl --version")[/v(\d+\.\d+)(?:\.\d+)?/, 1]
ENV["PERLLIB_EXTRA"] = %W[
#{MacOS.active_developer_dir}
/Library/Developer/CommandLineTools
/Applications/Xcode.app/Contents/Developer
].uniq.map do |p|
"#{p}/Library/Perl/#{perl_version}/darwin-thread-multi-2level"
end.join(":")
unless quiet_system ENV["PERL_PATH"], "-e", "use ExtUtils::MakeMaker"
ENV["NO_PERL_MAKEMAKER"] = "1"
end
# Ensure we are using the correct system headers (for curl) to workaround
# mismatched Xcode/CLT versions:
# https://github.com/Homebrew/homebrew-core/issues/46466
if MacOS.version == :mojave && MacOS::CLT.installed? && MacOS::CLT.provides_sdk?
ENV["HOMEBREW_SDKROOT"] = MacOS::CLT.sdk_path(MacOS.version)
end
args = %W[
prefix=#{prefix}
sysconfdir=#{etc}
CC=#{ENV.cc}
CFLAGS=#{ENV.cflags}
LDFLAGS=#{ENV.ldflags}
]
openssl_prefix = Formula["openssl@1.1"].opt_prefix
args += %W[NO_APPLE_COMMON_CRYPTO=1 OPENSSLDIR=#{openssl_prefix}]
system "make", "install", *args
git_core = libexec/"git-core"
# Install the macOS keychain credential helper
cd "contrib/credential/osxkeychain" do
system "make", "CC=#{ENV.cc}",
"CFLAGS=#{ENV.cflags}",
"LDFLAGS=#{ENV.ldflags}"
git_core.install "git-credential-osxkeychain"
system "make", "clean"
end
# Generate diff-highlight perl script executable
cd "contrib/diff-highlight" do
system "make"
end
# Install the netrc credential helper
cd "contrib/credential/netrc" do
system "make", "test"
git_core.install "git-credential-netrc"
end
# Install git-subtree
cd "contrib/subtree" do
system "make", "CC=#{ENV.cc}",
"CFLAGS=#{ENV.cflags}",
"LDFLAGS=#{ENV.ldflags}"
git_core.install "git-subtree"
end
# install the completion script first because it is inside "contrib"
bash_completion.install "contrib/completion/git-completion.bash"
bash_completion.install "contrib/completion/git-prompt.sh"
zsh_completion.install "contrib/completion/git-completion.zsh" => "_git"
cp "#{bash_completion}/git-completion.bash", zsh_completion
elisp.install Dir["contrib/emacs/*.el"]
(share/"git-core").install "contrib"
# We could build the manpages ourselves, but the build process depends
# on many other packages, and is somewhat crazy, this way is easier.
man.install resource("man")
(share/"doc/git-doc").install resource("html")
# Make html docs world-readable
chmod 0644, Dir["#{share}/doc/git-doc/**/*.{html,txt}"]
chmod 0755, Dir["#{share}/doc/git-doc/{RelNotes,howto,technical}"]
# To avoid this feature hooking into the system OpenSSL, remove it
if MacOS.version >= :yosemite
rm "#{libexec}/git-core/git-imap-send"
end
# git-send-email needs Net::SMTP::SSL
resource("Net::SMTP::SSL").stage do
(share/"perl5").install "lib/Net"
end
# This is only created when building against system Perl, but it isn't
# purged by Homebrew's post-install cleaner because that doesn't check
# "Library" directories. It is however pointless to keep around as it
# only contains the perllocal.pod installation file.
rm_rf prefix/"Library/Perl"
# Set the macOS keychain credential helper by default
# (as Apple's CLT's git also does this).
(buildpath/"gitconfig").write <<~EOS
[credential]
\thelper = osxkeychain
EOS
etc.install "gitconfig"
end
test do
system bin/"git", "init"
%w[haunted house].each { |f| touch testpath/f }
system bin/"git", "add", "haunted", "house"
system bin/"git", "commit", "-a", "-m", "Initial Commit"
assert_equal "haunted\nhouse", shell_output("#{bin}/git ls-files").strip
# Check Net::SMTP::SSL was installed correctly.
%w[foo bar].each { |f| touch testpath/f }
system bin/"git", "add", "foo", "bar"
system bin/"git", "commit", "-a", "-m", "Second Commit"
assert_match "Authentication Required", shell_output(
"#{bin}/git send-email --to=dev@null.com --smtp-server=smtp.gmail.com " \
"--smtp-encryption=tls --confirm=never HEAD^ 2>&1", 255
)
end
end