Skip to content

Instantly share code, notes, and snippets.

@rejuvyesh
Created April 17, 2014 10:44
Show Gist options
  • Save rejuvyesh/10973013 to your computer and use it in GitHub Desktop.
Save rejuvyesh/10973013 to your computer and use it in GitHub Desktop.
automate habs a little
#!/usr/bin/env zsh
# Created by rejuvyesh <[email protected]>
usage="Usage: ./cabal2pkgbuild <HACKAGE_PACKAGES_FILE>"
if [[ -z $1 ]]; then
echo $usage
exit 1
fi
if [[ ! -f $1 ]]; then
echo "\`$1' does not exist or is not a regular file"
exit 1
fi
hackage_url="http://hackage.haskell.org"
hackage_packages_file=($(<$1))
# Add packages from Hackage
for hp in $hackage_packages_file; do
# Grab latest version of package
cabal_file=$(curl -s $hackage_url/package/$hp | grep -ioE "Cabal source package[)<>/lia href=\"]+\/package\/.+\.cabal" | grep -ioE "\/package.+")
command="cblrepo add --patchdir patches --cbl-url $hackage_url$cabal_file"
echo $command
eval $command
done
i=1
for hp in ${hackage_packages_file}; do
command="cblrepo pkgbuild --ghc-version 7.8.2 --patchdir patches $hp"
echo "($i/${#hackage_packages_file}) $command"
eval $command
(( i+=1 ))
done
for pkg in ${hackage_packages_file}; do
hpkg=haskell-$pkg
command1="./makeahpkg $hpkg"
command2="./makeahpkg -a i686 $hpkg"
eval $command1
eval $command2
done
@fmap
Copy link

fmap commented Apr 17, 2014

Neat!

Check out https://github.com/NixOS/cabal2nix if you're bored.

@rejuvyesh
Copy link
Author

Thanks @fmap. I tried nixpkg's but working with this overhead, would require time since I'll have to give up on haskell packages from elsewhere. You should write up on setting up a nix based haskell package management system!

@rejuvyesh
Copy link
Author

I really like the idea of nixos. I'll probably even switch, once I've the time to properly look into it. If you find the time, do write about your experience with nixos.

@magthe
Copy link

magthe commented Apr 17, 2014

A few comments/suggestions:

  • Making use of cblrepo sync removes the need to download Cabal files from hackage.
  • Check out the versions command.
  • The --patchdir patches is unnecessary, that's the default value.

My own usage goes something like this:

% cblrepo sync
% cblrepo versions -l <list of packages> > pkgs-to-add
% cblrepo add $(cat pkgs-to-add)
% cblrepo build $(sed -e 's/,.*//' pkgs-to-add) > build-order
% cblrepo pkgbuild --ghc-version 7.8.2 $(cat build-order)
% ./makeahpkg -- $(cat build-order)
% ./makeahpkg -a i686 -- $(cat build-order)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment