git-annex: 5.20140421
installing git-annex with cabal-install is quite long and requires to install some heavy packages. It also has several external lib dependencies and needs a few configuration flags to build so it is quite difficult to install too. This formula should make it easy and quick to install with a bottle. The huge number of haskell dependencies is built within the formula and statically linked to git-annex. The haskell libraries built are discarded - cabal-install should be used instead of this package in order to keep them.
This commit is contained in:
parent
d2607c5985
commit
313f8b137f
68
Library/Homebrew/language/haskell.rb
Normal file
68
Library/Homebrew/language/haskell.rb
Normal file
@ -0,0 +1,68 @@
|
||||
module Language
|
||||
module Haskell
|
||||
# module for formulas using cabal-install as build tool
|
||||
module Cabal
|
||||
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
|
||||
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"
|
||||
cabal_install "--prefix=#{prefix}"
|
||||
end
|
||||
cabal_clean_lib
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
x
Reference in New Issue
Block a user