From 2d36d5831fbf7a89f5216543f0c069bf84b70393 Mon Sep 17 00:00:00 2001 From: ilovezfs Date: Sat, 29 Oct 2016 08:05:19 -0700 Subject: [PATCH] ghc: improve Sierra compatibility On Sierra, use new upstream dynamic-library-dirs field to avoid ghc: panic! (the 'impossible' happened) malformed mach-o: load commands size (x) > 32768 where x is some number larger than 32768. Note that this fix requires a corresponding update to cabal-install and that `cabal new-build` hasn't been updated to use the new field yet, so will continue to fail in the same scenarios as it already does. Also, bump the vendored gmp to 6.1.1 for all macOS versions, and stop using nm-classic since llvm-nm -P is POSIX compliant now. Closes #6358. Signed-off-by: ilovezfs --- Formula/ghc.rb | 74 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 58 insertions(+), 16 deletions(-) diff --git a/Formula/ghc.rb b/Formula/ghc.rb index 5f3838001c..e349248383 100644 --- a/Formula/ghc.rb +++ b/Formula/ghc.rb @@ -1,8 +1,38 @@ +require "language/haskell" + class Ghc < Formula + include Language::Haskell::Cabal + desc "Glorious Glasgow Haskell Compilation System" homepage "https://haskell.org/ghc/" - url "https://downloads.haskell.org/~ghc/8.0.1/ghc-8.0.1-src.tar.xz" - sha256 "90fb20cd8712e3c0fbeb2eac8dab6894404c21569746655b9b12ca9684c7d1d2" + revision 1 + + stable do + if MacOS.version >= :sierra + url "https://git.haskell.org/ghc.git", + :branch => "ghc-8.0", + :revision => "9448e62740ca03aeb915bf0ecf8b16e54a52798a" + version "8.0.1" + + depends_on "autoconf" => :build + depends_on "automake" => :build + depends_on "libtool" => :build + + resource "cabal" do + url "https://hackage.haskell.org/package/cabal-install-1.24.0.0/cabal-install-1.24.0.0.tar.gz" + sha256 "d840ecfd0a95a96e956b57fb2f3e9c81d9fc160e1fd0ea350b0d37d169d9e87e" + end + + # disables haddock for hackage-security + resource "cabal-patch" do + url "https://github.com/haskell/cabal/commit/9441fe.patch" + sha256 "5506d46507f38c72270efc4bb301a85799a7710804e033eaef7434668a012c5e" + end + else + url "https://downloads.haskell.org/~ghc/8.0.1/ghc-8.0.1-src.tar.xz" + sha256 "90fb20cd8712e3c0fbeb2eac8dab6894404c21569746655b9b12ca9684c7d1d2" + end + end bottle do cellar :any @@ -22,10 +52,10 @@ class Ghc < Formula depends_on "sphinx-doc" => :build if build.with? "docs" resource "gmp" do - url "https://ftpmirror.gnu.org/gmp/gmp-6.1.0.tar.bz2" - mirror "https://gmplib.org/download/gmp/gmp-6.1.0.tar.bz2" - mirror "https://ftp.gnu.org/gnu/gmp/gmp-6.1.0.tar.bz2" - sha256 "498449a994efeba527885c10405993427995d3f86b8768d8cdf8d9dd7c6b73e8" + url "https://ftpmirror.gnu.org/gmp/gmp-6.1.1.tar.xz" + mirror "https://gmplib.org/download/gmp/gmp-6.1.1.tar.xz" + mirror "https://ftp.gnu.org/gnu/gmp/gmp-6.1.1.tar.xz" + sha256 "d36e9c05df488ad630fff17edb50051d6432357f9ce04e34a09b3d818825e831" end if MacOS.version <= :lion @@ -51,15 +81,6 @@ class Ghc < Formula sha256 "bc57163656ece462ef61072559d491b72c5cdd694f3c39b80ac0f6b9a3dc8151" end - # fix clock_gettime support on 10.12 - # https://ghc.haskell.org/trac/ghc/ticket/12195 - if MacOS.version >= :sierra - patch do - url "https://raw.githubusercontent.com/Homebrew/formula-patches/9eef46168ca5daa1629082af5532fc4b521d1a8d/ghc/clock_gettime.patch" - sha256 "42444b381840d9d90202ff619f0070c28a753243af5d7e6b60efd227c6cf308c" - end - end - def install # Setting -march=native, which is what --build-from-source does, fails # on Skylake (and possibly other architectures as well) with the error @@ -112,7 +133,9 @@ class Ghc < Formula # https://mail.haskell.org/pipermail/ghc-devs/2016-April/011862.html # LLVM itself has already fixed the bug: llvm-mirror/llvm@ae7cf585 # rdar://25311883 and rdar://25299678 - args << "--with-nm=#{`xcrun --find nm-classic`.chomp}" if DevelopmentTools.clang_build_version >= 703 + if DevelopmentTools.clang_build_version >= 703 && DevelopmentTools.clang_build_version < 800 + args << "--with-nm=#{`xcrun --find nm-classic`.chomp}" + end resource("binary").stage do binary = buildpath/"binary" @@ -123,6 +146,25 @@ class Ghc < Formula ENV.prepend_path "PATH", binary/"bin" end + if MacOS.version == :sierra + resource("cabal").stage do + Pathname.pwd.install resource("cabal-patch") + system "patch", "-p2", "-i", "9441fe.patch" + system "sh", "bootstrap.sh", "--sandbox", "--no-doc" + (buildpath/"bootstrap-tools/bin").install ".cabal-sandbox/bin/cabal" + end + + ENV.prepend_path "PATH", buildpath/"bootstrap-tools/bin" + + cabal_sandbox do + cabal_install "--only-dependencies", "happy", "alex" + cabal_install "--prefix=#{buildpath}/bootstrap-tools", "happy", "alex" + end + + inreplace "libraries/filepath/filepath.cabal", "cabal-version: >=1.10", + "cabal-version: >=1.18" + system "./boot" + end system "./configure", "--prefix=#{prefix}", *args system "make"