Skip to content

Instantly share code, notes, and snippets.

@ffeu
Last active March 12, 2021 14:43
Show Gist options
  • Select an option

  • Save ffeu/0460bb1349fa7e4ab4c459a6192cbb25 to your computer and use it in GitHub Desktop.

Select an option

Save ffeu/0460bb1349fa7e4ab4c459a6192cbb25 to your computer and use it in GitHub Desktop.

Revisions

  1. ffeu revised this gist Mar 12, 2021. No changes.
  2. ffeu created this gist Nov 21, 2018.
    70 changes: 70 additions & 0 deletions clang-format@7.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,70 @@
    class ClangFormatAT7 < Formula
    desc "Formatting tool for C/C++/Java/JavaScript/Objective-C/Protobuf"
    homepage "https://releases.llvm.org/7.0.0/tools/clang/docs/ClangFormat.html"
    version "7.0.0"

    if MacOS.version >= :sierra
    url "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_700/final/", :using => :svn
    else
    url "http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_700/final/", :using => :svn
    end

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

    resource "clang" do
    if MacOS.version >= :sierra
    url "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_700/final/", :using => :svn
    else
    url "http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_700/final/", :using => :svn
    end
    end

    resource "libcxx" do
    url "https://releases.llvm.org/7.0.0/libcxx-7.0.0.src.tar.xz"
    sha256 "9b342625ba2f4e65b52764ab2061e116c0337db2179c6bce7f9a0d70c52134f0"
    end

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

    mkdir "build" do
    args = std_cmake_args
    args << "-DCMAKE_OSX_SYSROOT=/" unless MacOS::Xcode.installed?
    args << "-DLLVM_ENABLE_LIBCXX=ON"
    args << ".."
    system "cmake", "-G", "Ninja", *args
    system "ninja", "clang-format"
    bin.install "bin/clang-format"
    end
    bin.install "tools/clang/tools/clang-format/git-clang-format"
    (share/"clang").install Dir["tools/clang/tools/clang-format/clang-format*"]
    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")

    # below code is messily formatted on purpose.
    (testpath/"test2.h").write <<~EOS
    #import "package/file.h"
    @interface SomePlugin : NSObject < ParentPlugin >
    @end
    EOS

    # NOTE! different formatting depending on version
    # clang-format 5.x
    # @interface SomePlugin : NSObject<ParentPlugin>
    # clang-format 6.x, 7.x
    # @interface SomePlugin : NSObject <ParentPlugin>
    assert_equal "#import \"package/file.h\"\n@interface SomePlugin : NSObject <ParentPlugin>\n@end\n",
    shell_output("#{bin}/clang-format -style=Google test2.h")
    end
    end