Mike McQuaid b745546943 Overhaul, simplify and cleanup documentation.
Remove duplication, link to the API documentation more often,
tweak wording, add `@UniqMartin` as a maintainer, note `@jacknagel`'s
and `@adamv`'s significant past contributions to Homebrew, delete some
outdated or unneeded documentation, add some missing `Formula` API.
entries and simplify/improve `CONTRIBUTING.md`.

Closes Homebrew/homebrew#46179.

Closes Homebrew/homebrew#46618.

Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
2015-12-07 13:37:49 +00:00

81 lines
2.8 KiB
Ruby

module Language
module Haskell
# module for formulae using cabal-install as build tool
module Cabal
module ClassMethods
def setup_ghc_compilers
# Use llvm-gcc on Lion or below (same compiler used when building GHC).
fails_with(:clang) if MacOS.version <= :lion
end
end
def self.included(base)
base.extend ClassMethods
end
def cabal_sandbox
pwd = Pathname.pwd
# force cabal to put its stuff here instead of the home directory by
# pretending the home is here. This also avoid to deal with many options
# to configure cabal. Note this is also useful with cabal sandbox to
# avoid touching ~/.cabal
home = ENV["HOME"]
ENV["HOME"] = pwd
# use cabal's sandbox feature if available
cabal_version = `cabal --version`[/[0-9.]+/].split(".").collect(&:to_i)
if (cabal_version <=> [1, 20]) > -1
system "cabal", "sandbox", "init"
cabal_sandbox_bin = pwd/".cabal-sandbox/bin"
else
# no or broken sandbox feature - just use the HOME trick
cabal_sandbox_bin = pwd/".cabal/bin"
end
# cabal may build useful tools that should be found in the PATH
mkdir_p cabal_sandbox_bin
path = ENV["PATH"]
ENV.prepend_path "PATH", cabal_sandbox_bin
# update cabal package database
system "cabal", "update"
yield
# restore the environment
if (cabal_version <=> [1, 20]) > -1
system "cabal", "sandbox", "delete"
end
ENV["HOME"] = home
ENV["PATH"] = path
end
def cabal_install(*opts)
system "cabal", "install", "--jobs=#{ENV.make_jobs}", *opts
end
# install the tools passed in parameter and remove the packages that where
# used so they won't be in the way of the dependency solver for the main
# package. The tools are installed sequentially in order to make possible
# to install several tools that depends on each other
def cabal_install_tools(*opts)
opts.each { |t| cabal_install t }
rm_rf Dir[".cabal*/*packages.conf.d/"]
end
# remove the development files from the lib directory. cabal-install should
# be used instead to install haskell packages
def cabal_clean_lib
# a better approach may be needed here
rm_rf lib
end
def install_cabal_package(args = [])
cabal_sandbox do
# the dependencies are built first and installed locally, and only the
# current package is actually installed in the destination dir
cabal_install "--only-dependencies", *args
cabal_install "--prefix=#{prefix}", *args
end
cabal_clean_lib
end
end
end
end