67 lines
1.9 KiB
Ruby
67 lines
1.9 KiB
Ruby
class Byteman < Formula
|
|
desc "Java bytecode manipulation tool for testing, monitoring and tracing"
|
|
homepage "https://byteman.jboss.org/"
|
|
url "https://downloads.jboss.org/byteman/4.0.20/byteman-download-4.0.20-bin.zip"
|
|
sha256 "e37c15b854c5002716a5a9d384c443100a203f47516657533a9808f6e429bcfd"
|
|
license "LGPL-2.1-or-later"
|
|
head "https://github.com/bytemanproject/byteman.git", branch: "main"
|
|
|
|
livecheck do
|
|
url "https://byteman.jboss.org/downloads.html"
|
|
regex(/href=.*?byteman-download[._-]v?(\d+(?:\.\d+)+)-bin\.zip/i)
|
|
end
|
|
|
|
bottle do
|
|
sha256 cellar: :any_skip_relocation, all: "a406601b8dfde423a9908d89a92124c4bb0f79ee0631e3a7d537b3992dfed709"
|
|
end
|
|
|
|
depends_on "openjdk"
|
|
|
|
def install
|
|
rm_rf Dir["bin/*.bat"]
|
|
doc.install Dir["docs/*"], "README"
|
|
libexec.install ["bin", "lib", "contrib"]
|
|
pkgshare.install ["sample"]
|
|
|
|
env = { JAVA_HOME: "${JAVA_HOME:-#{Formula["openjdk"].opt_prefix}}", BYTEMAN_HOME: libexec }
|
|
Pathname.glob("#{libexec}/bin/*") do |file|
|
|
target = bin/File.basename(file, File.extname(file))
|
|
# Drop the .sh from the scripts
|
|
target.write_env_script(libexec/"bin/#{File.basename(file)}", env)
|
|
end
|
|
end
|
|
|
|
test do
|
|
(testpath/"src/main/java/BytemanHello.java").write <<~EOS
|
|
class BytemanHello {
|
|
public static void main(String... args) {
|
|
System.out.println("Hello, Brew!");
|
|
}
|
|
}
|
|
EOS
|
|
|
|
(testpath/"brew.btm").write <<~EOS
|
|
RULE trace main entry
|
|
CLASS BytemanHello
|
|
METHOD main
|
|
AT ENTRY
|
|
IF true
|
|
DO traceln("Entering main")
|
|
ENDRULE
|
|
|
|
RULE trace main exit
|
|
CLASS BytemanHello
|
|
METHOD main
|
|
AT EXIT
|
|
IF true
|
|
DO traceln("Exiting main")
|
|
ENDRULE
|
|
EOS
|
|
|
|
system "#{Formula["openjdk"].bin}/javac", "src/main/java/BytemanHello.java"
|
|
|
|
actual = shell_output("#{bin}/bmjava -l brew.btm -cp src/main/java BytemanHello")
|
|
assert_match("Hello, Brew!", actual)
|
|
end
|
|
end
|