Skip to content
This repository has been archived by the owner on Jul 4, 2023. It is now read-only.

Commit

Permalink
clang-format 2014-12-03 (new formula)
Browse files Browse the repository at this point in the history
clang-format is a versatile source code formatter, part of the clang
(and thus llvm) project. It can be used for C++, ObjC, Java, and
JavaScript.

The build is using cmake and ninja for speed; building all of llvm or
using configure and make is very slow.

clang-format is released in roughly monthly testing pushes, tracked by
the subversion tags in "google/testing/yyyy-MM-dd". This formula uses
tarballs from github that correspond to the resolved tags.

Closes #35777.

Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
  • Loading branch information
mprobst authored and MikeMcQuaid committed Jan 13, 2015
1 parent bc27b18 commit 08e363c
Showing 1 changed file with 47 additions and 0 deletions.
47 changes: 47 additions & 0 deletions Library/Formula/clang-format.rb
@@ -0,0 +1,47 @@
class ClangFormat < Formula
homepage "http://clang.llvm.org/docs/ClangFormat.html"
version "2014-12-03"

stable do
url "http://llvm.org/svn/llvm-project/llvm/tags/google/testing/2014-12-03/", :using => :svn

resource "clang" do
url "http://llvm.org/svn/llvm-project/cfe/tags/google/testing/2014-12-03/", :using => :svn
end

resource "libcxx" do
url "http://llvm.org/releases/3.5.0/libcxx-3.5.0.src.tar.xz"
sha1 "c98beed86ae1adf9ab7132aeae8fd3b0893ea995"
end
end

depends_on "cmake" => :build
depends_on "ninja" => :build
depends_on "subversion" => :build

fails_with :clang do
build 503
cause "Host Clang must be able to find libstdc++4.7 or newer!"
end

def install
(buildpath/"projects/libcxx").install resource("libcxx")
(buildpath/"tools/clang").install resource("clang")

mkdir "build" do
system "cmake", "..", "-G", "Ninja", *std_cmake_args
system "ninja", "clang-format"
bin.install "bin/clang-format"
end
end

test do
# NB: below C code is messily formatted on purpose.
(testpath/"test.c").write <<-EOS
int main(char *args) { \n \t printf("hello"); }
EOS

assert_equal "int main(char *args) { printf(\"hello\"); }\n",
shell_output("#{bin}/clang-format -style=Google test.c")
end
end

3 comments on commit 08e363c

@alexeagle
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[I'm working with Martin]

@MikeMcQuaid is there a particular reason -DCMAKE_BUILD_TYPE=None is in *std_cmake_args ?

When I build this formula with -DCMAKE_BUILD_TYPE=Release I get a 1.4MB binary, but the current formula produces a 3MB binary. I'd like to send a PR to change it, but want to understand if there is a reason for this comment:
"Setting it to Release would ignore our flags."
https://github.com/Homebrew/homebrew/blob/a70500f28fb4c2b2e9eba3a595dbe4241fc78239/Library/Homebrew/formula.rb#L469

thanks!

@MikeMcQuaid
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We want to set our own e.g. CFLAGS and CMAKE_BUILD_TYPE=Release sets the flags to the CMake defaults.

@alexeagle
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems like that results in this (and probably other) binaries being larger than needed. I wonder if some are even compiled with debug instead of opt?
I'm no expert on C++ compilation, and I've built my own smaller clang-format for my own needs, so I'll just drop this thread.

Please sign in to comment.