Skip to content
Snippets Groups Projects
Commit 313f8b13 authored by Gaëtan Lehmann's avatar Gaëtan Lehmann Committed by Mike McQuaid
Browse files

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.
parent d2607c59
No related branches found
No related tags found
No related merge requests found
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment