homebrew-core/Formula/ccache.rb

87 lines
3.7 KiB
Ruby

class Ccache < Formula
desc "Object-file caching compiler wrapper"
homepage "https://ccache.dev/"
url "https://github.com/ccache/ccache/releases/download/v4.7.4/ccache-4.7.4.tar.xz"
sha256 "df0c64d15d3efaf0b4f6837dd6b1467e40eeaaa807db25ce79c3a08a46a84e36"
license "GPL-3.0-or-later"
head "https://github.com/ccache/ccache.git", branch: "master"
bottle do
sha256 cellar: :any, arm64_ventura: "35341df4e3899eb409b712e1f59826fac4312c78581c016acdcd15515a454209"
sha256 cellar: :any, arm64_monterey: "ba78c3c27dfe4cfa628d0dd799c289056e848e5cbbbc847117f2fae6e33949a6"
sha256 cellar: :any, arm64_big_sur: "237f9ce565fa10a9bd43038bec4bf035cd44b136a849c45a12a00af18397833b"
sha256 cellar: :any, ventura: "ff337e38d7d1a17c55bc60325e0fd197aa1f05b42f34f6180e35756a87e05508"
sha256 cellar: :any, monterey: "4e58ab93aa6690b1d754154b33c4e2fe457c6c2710aa29c208d1904cdd18f2dc"
sha256 cellar: :any, big_sur: "927efbcf6927bd90df8e15f4495ae614f9bce3b98601569dc1158cfc9ed5d4c2"
sha256 cellar: :any, catalina: "acde8ffc90a1c59bfe423720193dd8d4059816f850e0fa01caaa92126d96bcab"
sha256 cellar: :any_skip_relocation, x86_64_linux: "cec1be15a66689bff21cdefd5244f13149f89f134398c0f67c38d4a4a75503cb"
end
depends_on "asciidoctor" => :build
depends_on "cmake" => :build
depends_on "pkg-config" => :build
depends_on "hiredis"
depends_on "zstd"
fails_with gcc: "5"
def install
system "cmake", "-S", ".", "-B", "build", *std_cmake_args, "-DENABLE_IPO=TRUE"
system "cmake", "--build", "build"
# Homebrew compiler shim actively prevents ccache usage (see caveats), which will break the test suite.
# We run the test suite for ccache because it provides a more in-depth functional test of the software
# (especially with IPO enabled), adds negligible time to the build process, and we don't actually test
# this formula properly in the test block since doing so would be too complicated.
# See https://github.com/Homebrew/homebrew-core/pull/83900#issuecomment-90624064
with_env(CC: DevelopmentTools.locate(DevelopmentTools.default_compiler)) do
system "ctest", "-j#{ENV.make_jobs}", "--test-dir", "build"
end
system "cmake", "--install", "build"
libexec.mkpath
%w[
clang
clang++
cc
gcc gcc2 gcc3 gcc-3.3 gcc-4.0
gcc-4.2 gcc-4.3 gcc-4.4 gcc-4.5 gcc-4.6 gcc-4.7 gcc-4.8 gcc-4.9
gcc-5 gcc-6 gcc-7 gcc-8 gcc-9 gcc-10 gcc-11 gcc-12
c++ c++3 c++-3.3 c++-4.0
c++-4.2 c++-4.3 c++-4.4 c++-4.5 c++-4.6 c++-4.7 c++-4.8 c++-4.9
c++-5 c++-6 c++-7 c++-8 c++-9 c++-10 c++-11 c++-12
g++ g++2 g++3 g++-3.3 g++-4.0
g++-4.2 g++-4.3 g++-4.4 g++-4.5 g++-4.6 g++-4.7 g++-4.8 g++-4.9
g++-5 g++-6 g++-7 g++-8 g++-9 g++-10 g++-11 g++-12
i686-w64-mingw32-gcc i686-w64-mingw32-g++
x86_64-w64-mingw32-gcc x86_64-w64-mingw32-g++
].each do |prog|
libexec.install_symlink bin/"ccache" => prog
end
end
def caveats
<<~EOS
To install symlinks for compilers that will automatically use
ccache, prepend this directory to your PATH:
#{opt_libexec}
If this is an upgrade and you have previously added the symlinks to
your PATH, you may need to modify it to the path specified above so
it points to the current version.
NOTE: ccache can prevent some software from compiling.
ALSO NOTE: The brew command, by design, will never use ccache.
EOS
end
test do
ENV.prepend_path "PATH", opt_libexec
assert_equal "#{opt_libexec}/gcc", shell_output("which gcc").chomp
system "#{bin}/ccache", "-s"
end
end