aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Formula/smali.rb
blob: 9274cb5bade66226a32e71fc64b1ffd4f34abac4 (plain)
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
require "formula"

class Smali < Formula
  homepage "http://smali.googlecode.com/"
  url "https://bitbucket.org/JesusFreke/smali/downloads/smali-2.0.3.jar", :using => :nounzip
  sha1 "42774f5d949add1739299785feb83f3dec32f240"

  bottle do
    cellar :any
    sha1 "042f4692b35ab5d483aa291e3a4924565fe1510f" => :yosemite
    sha1 "a9e5893ba2cc5bdd4b0b1e9ab489cf8863a48dfb" => :mavericks
    sha1 "f6829e47d12e951c4ea37784496bed1b79cebf0d" => :mountain_lion
  end

  resource "baksmali-jar" do
    url "https://bitbucket.org/JesusFreke/smali/downloads/baksmali-2.0.3.jar", :using => :nounzip
    sha1 "39d860bc2539753c8575f39879cf8d515e1c1cb9"
  end

  resource "baksmali" do
    url "https://bitbucket.org/JesusFreke/smali/downloads/baksmali", :using => :nounzip
    sha1 "9f7a87ee158b89f9d376ba7de09e0bea39e0cad0"
  end

  resource "smali" do
    url "https://bitbucket.org/JesusFreke/smali/downloads/smali", :using => :nounzip
    sha1 "26423d6a1d882d3feac0fd0b93ddae0ab134551f"
  end

  def install
    resource("baksmali-jar").stage {
      libexec.install "baksmali-2.0.3.jar" => "baksmali.jar"
    }
    libexec.install resource("smali"), resource("baksmali"), "smali-2.0.3.jar" => "smali.jar"

    inreplace "#{libexec}/smali" do |s|
      s.gsub! /^libdir=.*$/, "libdir=\"#{libexec}\""
    end
    inreplace "#{libexec}/baksmali" do |s|
      s.gsub! /^libdir=.*$/, "libdir=\"#{libexec}\""
    end

    chmod 0755, "#{libexec}/smali"
    chmod 0755, "#{libexec}/baksmali"

    bin.install_symlink libexec/"smali"
    bin.install_symlink libexec/"baksmali"
  end

  test do
    # From examples/HelloWorld/HelloWorld.smali in Smali project repo.
    # See https://bitbucket.org/JesusFreke/smali/src/2d8cbfe6bc2d8ff2fcd7a0bf432cc808d842da4a/examples/HelloWorld/HelloWorld.smali?at=master
    (testpath/"input.smali").write <<-EOS.undent
    .class public LHelloWorld;
    .super Ljava/lang/Object;

    .method public static main([Ljava/lang/String;)V
      .registers 2
      sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
      const-string v1, "Hello World!"
      invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
      return-void
    .end method
    EOS

    system "#{bin}/smali", "-o", "classes.dex", "input.smali"
    system "#{bin}/baksmali", "-o", pwd, "classes.dex"
    assert File.read("HelloWorld.smali").include?("Hello World!")
  end
end