aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Formula/ghc.rb
blob: 8c1a1231e792a103244812b21212bcd727395e4e (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
require 'formula'

class PkgCurlDownloadStrategy <CurlDownloadStrategy
  def stage
    safe_system '/usr/sbin/pkgutil', '--expand', @tarball_path, File.basename(@url)
    chdir
  end
end

# Remember to update the formula for Cabal when updating this formula
class Ghc <Formula
  homepage 'http://haskell.org/ghc/'
  version '6.12.3'
  url "http://darcs.haskell.org/download/dist/#{version}/GHC-#{version}-i386.pkg"
  md5 '58399e3af68f50a23a847bdfe3de5aca'

  # Avoid stripping the Haskell binaries AND libraries; http://hackage.haskell.org/trac/ghc/ticket/2458
  skip_clean ['bin', 'lib']

  def download_strategy
    # Extract files from .pkg while caching the .pkg
    PkgCurlDownloadStrategy
  end

  def replace_all foo, bar
    # Find all text files containing foo and replace it with bar
    files = `/usr/bin/grep -lsIR #{foo} .`.split
    inreplace files, foo, bar
  end

  def install
    short_version = version.split('.').first(2).join('')

    # Extract files from .pax.gz
    system '/bin/pax -f ghc.pkg/Payload -p p -rz'
    cd "GHC.framework/Versions/#{short_version}/usr"

    # Fix paths
    replace_all "/Library/Frameworks/GHC.framework/Versions/#{short_version}/usr/lib/ghc-#{version}", "#{lib}/ghc"
    replace_all "/Library/Frameworks/GHC.framework/Versions/#{short_version}/usr", prefix
    inreplace "lib/ghc-#{version}/ghc-asm", "#!/opt/local/bin/perl", "#!/usr/bin/env perl"
    mv "lib/ghc-#{version}", 'lib/ghc'

    prefix.install ['bin', 'lib', 'share']

    # Regenerate GHC package cache
    rm "#{lib}/ghc/package.conf.d/package.cache"
    system "#{bin}/ghc-pkg", 'recache', '--package-conf', "#{lib}/ghc/package.conf.d"
  end
end