aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Formula/gfortran.rb
blob: 9cd392cdb5153fe98e7fe32795bba17a6ba12016 (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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
require 'formula'
require 'brew.h'

class GfortranPkgDownloadStrategy <CurlDownloadStrategy
  def stage
    # The 4.2.4 compiler is distributed as a OS X 10.5
    # package- a single flat xar archive instead of a
    # bundle.
    safe_system "/usr/bin/xar -xf #{@tarball_path}"
    chdir

    # Clean up.
    safe_system "mv *.pkg/Payload Payload.gz"
    safe_system "ls | grep -v Payload | xargs rm -r"
  end
end

class Gfortran <Formula
  if MACOS_VERSION < 10.6
    # Leopard
    url 'http://r.research.att.com/gfortran-42-5577.pkg'
    md5 '30fb495c93cf514003cdfcb7846dc701'
    version "4.2.4-5577"
  else
    # Snow Leopard
    case gcc_42_build
    when 5659
      url 'http://r.research.att.com/gfortran-42-5659.pkg'
      md5 '71bd546baa45c9c0fb4943cdd72ee274'
      version "4.2.4-5659"
    else
      url 'http://r.research.att.com/gfortran-42-5664.pkg'
      md5 'eb64ba9f8507da22e582814a69fbb7ca'
      version "4.2.4-5664"
    end
  end

  homepage 'http://r.research.att.com/tools/'

  def download_strategy
    GfortranPkgDownloadStrategy
  end

  # Shouldn't strip compiler binaries.
  skip_clean [ 'bin', 'lib', 'libexec' ]

  def install
    # The version of pax jumped 16 years in development between OS X 10.5
    # and OS X 10.6. In that time it became security concious. Additionally,
    # there are some slight variations in the packaging- because of this
    # installation is broken down by XCode version.
    case gcc_42_build
    when 5577
      ohai "Installing gfortran 4.2.4 for XCode 3.1.4 (build 5577)"
      safe_system "pax -rz -f Payload.gz -s ',./usr,#{prefix},'"
      # The 5577 package does not contain the gfortran->gfortran-4.2 symlink
      safe_system "ln -sf #{bin}/gfortran-4.2 #{bin}/gfortran"
      safe_system "ln -sf #{man1}/gfortran-4.2.1 #{man1}/gfortran.1"
    when 5659
      ohai "Installing gfortran 4.2.4 for XCode 3.2.2 (build 5659)"
      safe_system "pax --insecure -rz -f Payload.gz -s ',./usr,#{prefix},'"
      safe_system "ln -sf #{man1}/gfortran-4.2.1 #{man1}/gfortran.1"
    when 5664
      ohai "Installing gfortran 4.2.4 for XCode 3.2.3 (build 5664)"
      safe_system "pax --insecure -rz -f Payload.gz -s ',./usr,#{prefix},'"
      safe_system "ln -sf #{man1}/gfortran-4.2.1 #{man1}/gfortran.1"
    else
      onoe <<-EOS.undent
        Currently the gfortran compiler provided by this brew is only supported
        for XCode 3.1.4 on OS X 10.5.x and XCode 3.2.2/3.2.3 on OS X 10.6.x

        Software update can help upgrade your copy of XCode.  The latest version
        of XCode is also available from:

            http://developer.apple.com/technologies/xcode.html
      EOS
    end
  end

  def caveats
    caveats = <<-EOS
Fortran compiler support in brews is currently experimental.  One of the
consequences of this is that Homebrew does not set environment flags to ensure
that a particular Fortran compiler is used and that the resulting code is
optimized properly.  Therefore, in addition to using:

    depends_on "gfortran"

Fortran-based brews should also specify environment variables for the Fortran
compiler in the install section:

    # Select the Fortran compiler to be used:
    ENV["FC"] = ENV["F77"] = "\#{HOMEBREW_PREFIX}/bin/gfortran"

    # Set Fortran optimization flags:
    ENV["FFLAGS"] = ENV["FCFLAGS"] = ENV["CFLAGS"]

Following these guidelines will allow Fortran-based brews to be easily edited so
that alternate Fortran compilers, such as ifort, can be used instead of the
version of gfortran provided by Homebrew.
    EOS
  end
end