-
-
Notifications
You must be signed in to change notification settings - Fork 12.1k
/
signal-cli.rb
89 lines (76 loc) 路 4.21 KB
/
signal-cli.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
class SignalCli < Formula
desc "CLI and dbus interface for WhisperSystems/libsignal-service-java"
homepage "https://github.com/AsamK/signal-cli"
url "https://github.com/AsamK/signal-cli/archive/refs/tags/v0.13.4.tar.gz"
sha256 "a09d355fa5ece4dd6d9d4847c0c1c255159f29304007d02a3aa733c7b02144a3"
license "GPL-3.0-or-later"
bottle do
sha256 cellar: :any_skip_relocation, arm64_sonoma: "5f7ef62c79f4cc9051ab2abecaff62232bfc32771dab48c61891034bbfc393c6"
sha256 cellar: :any_skip_relocation, arm64_ventura: "31c313634f2011a9e1b2677b48cd1d045a58b90146f46d854b18ba6326b3272c"
sha256 cellar: :any_skip_relocation, arm64_monterey: "57dee3d98645fff6f3bd319eba57ce9b753dfc381fbb4f66556fdeed01217aca"
sha256 cellar: :any_skip_relocation, sonoma: "fdbba15efb9ef63d39ccec3632cab2d510b911fd26485d7c959b8d87d8f9e64a"
sha256 cellar: :any_skip_relocation, ventura: "d03338dbd84b97d075e10c266f2463d7d0c5df6afdb5914d6a4fed826d8c7fb4"
sha256 cellar: :any_skip_relocation, monterey: "9473f13034421ae41caba9fe811af42c4582c35f621318899a25caa5a2490ea9"
sha256 cellar: :any_skip_relocation, x86_64_linux: "a8029b42a980628e48ed24cfca4cc50a8d2d69c1eaec712748d5a0374bbf931e"
end
depends_on "cmake" => :build # For `boring-sys` crate in `libsignal-client`
depends_on "gradle" => :build
depends_on "protobuf" => :build
# the libsignal-client build targets a specific rustc listed in the file
# https://github.com/signalapp/libsignal/blob/#{libsignal-client.version}/rust-toolchain
# which doesn't automatically happen if we use brew-installed rust. rustup-init
# allows us to use a toolchain that lives in HOMEBREW_CACHE
depends_on "rustup-init" => :build
depends_on "openjdk"
uses_from_macos "llvm" => :build # For `libclang`, used by `boring-sys` crate
uses_from_macos "zip" => :build
# https://github.com/AsamK/signal-cli/wiki/Provide-native-lib-for-libsignal#determine-the-required-libsignal-client-version
# To check the version of `libsignal-client`, run:
# url=https://github.com/AsamK/signal-cli/releases/download/v$version/signal-cli-$version.tar.gz
# curl -fsSL $url | tar -tz | grep libsignal-client
resource "libsignal-client" do
url "https://github.com/signalapp/libsignal/archive/refs/tags/v0.47.0.tar.gz"
sha256 "825d61738f9b6cf37ef84a11bc313a59d1468dc2bc164860f4f5aa3b6a7623e2"
end
def install
system "gradle", "build"
system "gradle", "installDist"
libexec.install (buildpath/"build/install/signal-cli").children
(libexec/"bin/signal-cli.bat").unlink
(bin/"signal-cli").write_env_script libexec/"bin/signal-cli", Language::Java.overridable_java_home_env
# this will install the necessary cargo/rustup toolchain bits in HOMEBREW_CACHE
system Formula["rustup-init"].bin/"rustup-init", "-qy", "--no-modify-path"
ENV.prepend_path "PATH", HOMEBREW_CACHE/"cargo_cache/bin"
resource("libsignal-client").stage do |r|
# https://github.com/AsamK/signal-cli/wiki/Provide-native-lib-for-libsignal#manual-build
libsignal_client_jar = libexec.glob("lib/libsignal-client-*.jar").first
embedded_jar_version = Version.new(libsignal_client_jar.to_s[/libsignal-client-(.*)\.jar$/, 1])
res = r.resource
odie "#{res.name} needs to be updated to #{embedded_jar_version}!" if embedded_jar_version != res.version
# rm originally-embedded libsignal_jni lib
system "zip", "-d", libsignal_client_jar, "libsignal_jni.so", "libsignal_jni.dylib", "signal_jni.dll"
# build & embed library for current platform
cd "java" do
inreplace "settings.gradle", "include ':android'", ""
system "./build_jni.sh", "desktop"
cd "shared/resources" do
system "zip", "-u", libsignal_client_jar, shared_library("libsignal_jni")
end
end
end
end
test do
# test 1: checks class loading is working and version is correct
output = shell_output("#{bin}/signal-cli --version")
assert_match "signal-cli #{version}", output
# test 2: ensure crypto is working
begin
io = IO.popen("#{bin}/signal-cli link", err: [:child, :out])
sleep 24
ensure
Process.kill("SIGINT", io.pid)
Process.wait(io.pid)
end
assert_match "sgnl://linkdevice?uuid=", io.read
end
end