Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: NixOS/cabal2nix
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 692d21643341
Choose a base ref
...
head repository: NixOS/cabal2nix
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: b50dc5d02729
Choose a head ref
Loading
169 changes: 102 additions & 67 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -4,19 +4,17 @@
#
# For more information, see https://github.com/haskell-CI/haskell-ci
#
# version: 0.2
# version: 0.5.20190916
#
language: c
dist: xenial

git:
submodules: false # whether to recursively clone submodules

# whether to recursively clone submodules
submodules: false
cache:
directories:
- $HOME/.cabal/packages
- $HOME/.cabal/store

before_cache:
- rm -fv $CABALHOME/packages/hackage.haskell.org/build-reports.log
# remove files that are regenerated by 'cabal update'
@@ -25,94 +23,131 @@ before_cache:
- rm -fv $CABALHOME/packages/hackage.haskell.org/01-index.cache
- rm -fv $CABALHOME/packages/hackage.haskell.org/01-index.tar
- rm -fv $CABALHOME/packages/hackage.haskell.org/01-index.tar.idx

- rm -rfv $CABALHOME/packages/head.hackage

matrix:
include:
- compiler: "ghc-8.6.3"
addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.6.3], sources: [hvr-ghc]}}

- compiler: ghc-8.8.1
addons: {"apt":{"sources":["hvr-ghc"],"packages":["ghc-8.8.1","cabal-install-3.0"]}}
- compiler: ghc-8.6.5
addons: {"apt":{"sources":["hvr-ghc"],"packages":["ghc-8.6.5","cabal-install-3.0"]}}
before_install:
- HC=/opt/ghc/bin/${CC}
- HCPKG=${HC/ghc/ghc-pkg}
- HC=$(echo "/opt/$CC/bin/ghc" | sed 's/-/\//')
- WITHCOMPILER="-w $HC"
- HADDOCK=$(echo "/opt/$CC/bin/haddock" | sed 's/-/\//')
- HCPKG="$HC-pkg"
- unset CC
- CABAL=/opt/ghc/bin/cabal
- CABALHOME=$HOME/.cabal
- export PATH="$CABALHOME/bin:$PATH"
- ROOTDIR=$(pwd)
- HCNUMVER=$(( $(${HC} --numeric-version|sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]+).*/\1 * 10000 + \2 * 100 + \3/') ))
- TOP=$(pwd)
- "HCNUMVER=$(${HC} --numeric-version|perl -ne '/^(\\d+)\\.(\\d+)\\.(\\d+)(\\.(\\d+))?$/; print(10000 * $1 + 100 * $2 + ($3 == 0 ? $5 != 1 : $3))')"
- echo $HCNUMVER

- CABAL="$CABAL -vnormal+nowrap+markoutput"
- set -o pipefail
- |
echo 'function blue(s) { printf "\033[0;34m" s "\033[0m " }' >> .colorful.awk
echo 'BEGIN { state = "output"; }' >> .colorful.awk
echo '/^-----BEGIN CABAL OUTPUT-----$/ { state = "cabal" }' >> .colorful.awk
echo '/^-----END CABAL OUTPUT-----$/ { state = "output" }' >> .colorful.awk
echo '!/^(-----BEGIN CABAL OUTPUT-----|-----END CABAL OUTPUT-----)/ {' >> .colorful.awk
echo ' if (state == "cabal") {' >> .colorful.awk
echo ' print blue($0)' >> .colorful.awk
echo ' } else {' >> .colorful.awk
echo ' print $0' >> .colorful.awk
echo ' }' >> .colorful.awk
echo '}' >> .colorful.awk
- cat .colorful.awk
- |
color_cabal_output () {
awk -f $TOP/.colorful.awk
}
- echo text | color_cabal_output
install:
- ${CABAL} --version
- echo "$(${HC} --version) [$(${HC} --print-project-git-commit-id 2> /dev/null || echo '?')]"
- TEST=--enable-tests
- BENCH=--enable-benchmarks
- GHCHEAD=${GHCHEAD-false}
- travis_retry ${CABAL} update -v
- sed -i.bak 's/^jobs:/-- jobs:/' $CABALHOME/config
- rm -fv cabal.project cabal.project.local
- grep -Ev -- '^\s*--' $CABALHOME/config | grep -Ev '^\s*$'
- ${CABAL} new-install -w ${HC} -j2 doctest --constraint='doctest ==0.16.*'
- ${CABAL} new-install -w ${HC} -j2 hlint --constraint='hlint ==2.1.*'
- rm -f cabal.project
- HEADHACKAGE=false
- rm -f $CABALHOME/config
- |
echo "verbose: normal +nowrap +markoutput" >> $CABALHOME/config
echo "remote-build-reporting: anonymous" >> $CABALHOME/config
echo "write-ghc-environment-files: always" >> $CABALHOME/config
echo "remote-repo-cache: $CABALHOME/packages" >> $CABALHOME/config
echo "logs-dir: $CABALHOME/logs" >> $CABALHOME/config
echo "world-file: $CABALHOME/world" >> $CABALHOME/config
echo "extra-prog-path: $CABALHOME/bin" >> $CABALHOME/config
echo "symlink-bindir: $CABALHOME/bin" >> $CABALHOME/config
echo "installdir: $CABALHOME/bin" >> $CABALHOME/config
echo "build-summary: $CABALHOME/logs/build.log" >> $CABALHOME/config
echo "store-dir: $CABALHOME/store" >> $CABALHOME/config
echo "install-dirs user" >> $CABALHOME/config
echo " prefix: $CABALHOME" >> $CABALHOME/config
echo "repository hackage.haskell.org" >> $CABALHOME/config
echo " url: http://hackage.haskell.org/" >> $CABALHOME/config
- |
echo "program-default-options" >> $CABALHOME/config
echo " ghc-options: $GHCJOBS +RTS -M6G -RTS" >> $CABALHOME/config
- cat $CABALHOME/config
- rm -fv cabal.project cabal.project.local cabal.project.freeze
- travis_retry ${CABAL} v2-update -v
- (cd /tmp && ${CABAL} v2-install $WITHCOMPILER -j2 doctest --constraint='doctest ==0.16.*' | color_cabal_output)
- if [ $HCNUMVER -ge 80800 ] ; then (cd /tmp && ${CABAL} v2-install $WITHCOMPILER -j2 hlint --constraint='hlint ==2.1.*' | color_cabal_output) ; fi
# Generate cabal.project
- rm -rf cabal.project cabal.project.local cabal.project.freeze
- touch cabal.project
- "printf 'packages: \".\"\\n' >> cabal.project"
- "printf 'write-ghc-environment-files: always\\n' >> cabal.project"
- touch cabal.project.local
- "for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/-[^-]*$//' | grep -vE -- '^(Cabal|cabal2nix)$' | sed 's/^/constraints: /' | sed 's/$/ installed/' >> cabal.project.local; done"
- |
echo "packages: ." >> cabal.project
- |
- "for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/-[^-]*$//' | (grep -vE -- '^(Cabal|cabal2nix)$' || true) | sed 's/^/constraints: /' | sed 's/$/ installed/' >> cabal.project.local; done"
- cat cabal.project || true
- cat cabal.project.local || true
- if [ -f "./configure.ac" ]; then (cd "." && autoreconf -i); fi
- rm -f cabal.project.freeze
- ${CABAL} new-freeze -w ${HC} ${TEST} ${BENCH} --project-file="cabal.project" --dry
- "cat \"cabal.project.freeze\" | sed -E 's/^(constraints: *| *)//' | sed 's/any.//'"
- rm "cabal.project.freeze"
- ${CABAL} new-build -w ${HC} ${TEST} ${BENCH} --project-file="cabal.project" --dep -j2 all
- ${CABAL} new-build -w ${HC} --disable-tests --disable-benchmarks --project-file="cabal.project" --dep -j2 all
- rm -rf .ghc.environment.* "."/dist
- DISTDIR=$(mktemp -d /tmp/dist-test.XXXX)

# Here starts the actual work to be performed for the package under test;
# any command which exits with a non-zero exit code causes the build to fail.
- ${CABAL} v2-freeze $WITHCOMPILER ${TEST} ${BENCH} | color_cabal_output
- "cat cabal.project.freeze | sed -E 's/^(constraints: *| *)//' | sed 's/any.//'"
- rm cabal.project.freeze
- ${CABAL} v2-build $WITHCOMPILER ${TEST} ${BENCH} --dep -j2 all | color_cabal_output
- ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks --dep -j2 all | color_cabal_output
script:
# test that source-distributions can be generated
- ${CABAL} new-sdist all
- DISTDIR=$(mktemp -d /tmp/dist-test.XXXX)
# Packaging...
- ${CABAL} v2-sdist all | color_cabal_output
# Unpacking...
- mv dist-newstyle/sdist/*.tar.gz ${DISTDIR}/
- cd ${DISTDIR} || false
- find . -maxdepth 1 -name '*.tar.gz' -exec tar -xvf '{}' \;
- rm -f cabal.project
- find . -maxdepth 1 -type f -name '*.tar.gz' -exec tar -xvf '{}' \;
- find . -maxdepth 1 -type f -name '*.tar.gz' -exec rm '{}' \;
- PKGDIR_cabal2nix="$(find . -maxdepth 1 -type d -regex '.*/cabal2nix-[0-9.]*')"
# Generate cabal.project
- rm -rf cabal.project cabal.project.local cabal.project.freeze
- touch cabal.project
- "printf 'packages: \"cabal2nix-*/*.cabal\"\\n' >> cabal.project"
- "printf 'write-ghc-environment-files: always\\n' >> cabal.project"
- touch cabal.project.local
- "for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/-[^-]*$//' | grep -vE -- '^(Cabal|cabal2nix)$' | sed 's/^/constraints: /' | sed 's/$/ installed/' >> cabal.project.local; done"
- |
echo "packages: ${PKGDIR_cabal2nix}" >> cabal.project
- |
- "for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/-[^-]*$//' | (grep -vE -- '^(Cabal|cabal2nix)$' || true) | sed 's/^/constraints: /' | sed 's/$/ installed/' >> cabal.project.local; done"
- cat cabal.project || true
- cat cabal.project.local || true
# Building...
# this builds all libraries and executables (without tests/benchmarks)
- ${CABAL} new-build -w ${HC} --disable-tests --disable-benchmarks all

- ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks all | color_cabal_output
# Building with tests and benchmarks...
# build & run tests, build benchmarks
- ${CABAL} new-build -w ${HC} ${TEST} ${BENCH} all
- if [ "x$TEST" = "x--enable-tests" ]; then ${CABAL} new-test -w ${HC} ${TEST} ${BENCH} all; fi

# doctest
- (cd cabal2nix-* && doctest -i ../dist-newstyle/build/*/*/cabal2nix-*/build/autogen -XMonadFailDesugaring src)

# hlint
- (cd cabal2nix-* && hlint -XMonadFailDesugaring src)
- (cd cabal2nix-* && hlint -XMonadFailDesugaring hackage2nix)
- (cd cabal2nix-* && hlint -XMonadFailDesugaring cabal2nix)

# cabal check
- (cd cabal2nix-* && ${CABAL} check)

# haddock
- ${CABAL} new-haddock -w ${HC} ${TEST} ${BENCH} all

# Build without installed constraints for packages in global-db
- rm -f cabal.project.local; ${CABAL} new-build -w ${HC} --disable-tests --disable-benchmarks all;
- ${CABAL} v2-build $WITHCOMPILER ${TEST} ${BENCH} all | color_cabal_output
# Testing...
- ${CABAL} v2-test $WITHCOMPILER ${TEST} ${BENCH} all | color_cabal_output
# Doctest...
- (cd ${PKGDIR_cabal2nix} && doctest -i ../dist-newstyle/build/*/*/cabal2nix-*/build/autogen -XMonadFailDesugaring src)
# HLint..
- if [ $HCNUMVER -ge 80800 ] ; then (cd ${PKGDIR_cabal2nix} && hlint -XMonadFailDesugaring src) ; fi
- if [ $HCNUMVER -ge 80800 ] ; then (cd ${PKGDIR_cabal2nix} && hlint -XMonadFailDesugaring hackage2nix) ; fi
- if [ $HCNUMVER -ge 80800 ] ; then (cd ${PKGDIR_cabal2nix} && hlint -XMonadFailDesugaring cabal2nix) ; fi
# cabal check...
- (cd ${PKGDIR_cabal2nix} && ${CABAL} -vnormal check)
# haddock...
- ${CABAL} v2-haddock $WITHCOMPILER --with-haddock $HADDOCK ${TEST} ${BENCH} all | color_cabal_output
# Building without installed constraints for packages in global-db...
- rm -f cabal.project.local
- ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks all | color_cabal_output

# REGENDATA ["--installed=+all -Cabal","--hlint","--doctest","--doctest-options=-i ../dist-newstyle/build/*/*/cabal2nix-*/build/autogen","-o",".travis.yml","cabal2nix.cabal"]
# EOF
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -31,7 +31,7 @@ code to compute the hash, which obviously still causes network traffic. Run the
utility with `--help` to see the complete list of supported command line flags.

Detailed instructions how to use those generated files with Nix can be found at
http://nixos.org/nixpkgs/manual/#users-guide-to-the-haskell-infrastructure.
https://nixos.org/nixpkgs/manual/#how-to-create-nix-builds-for-your-own-private-haskell-packages.

`cabal2nix` can also build derivations for projects from other sources than
hackage. You only need to provide an URI that points to a cabal project. The
98 changes: 22 additions & 76 deletions cabal2nix.cabal
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: cabal2nix
version: 2.14.2
version: 3.0.0
synopsis: Convert Cabal files into Nix build instructions.
description:
Convert Cabal files into Nix build instructions. Users of Nix can install the latest
@@ -8,73 +8,26 @@ description:
> nix-env -i cabal2nix
license: BSD3
license-file: LICENSE
author: Peter Simons,
Andres Loeh,
Benno Fünfstück,
Mateusz Kowalczyk,
Michael Alan Dorman,
Tom Smalley,
Mathijs Kwik,
Shea Levy,
Dmitry Malikov,
Eric Seidel,
Jacob Mitchell,
Graham Christensen,
Hamish Mackenzie,
Nikolay Amiantov,
Aycan iRiCAN,
Bryan Gardiner,
Joe Hermaszewski,
John Wiegley,
Philipp Hausmann,
Spencer Janssen,
Tom Hunger,
William Casarin,
koral,
ksaric,
Adam Vogt,
Alexey Shmalko,
Corey O'Connor,
Cray Elliott,
David Johnson,
Dmitry Bushev,
Domen Kožar,
Felix Kunzmann,
Gabriel Ebner,
Gergely Risko,
Joachim Fasting,
John Albietz,
John Chee,
Jussi Maki,
Lisanna Dettwyler,
Mark Laws,
Mark Wotton,
Matthew Pickering,
Matthew Stewart,
Matvey Aksenov,
Nicholas Clarke,
Nicolas Rolland,
Oliver Charles,
Pascal Wittmann,
Patrick John Wheeler,
Phil de Joux,
Piotr Bogdan,
Profpatsch,
Raymond Gauthier,
Renzo Carbonara,
Rodney Lorrimar,
Sibi,
Sukant Hajra,
Tanner Doshier,
Vaibhav Sagar,
Viktar Basharymau,
danbst,
karsten gebbert,
laMudri,
Александр Цамутали
author: Peter Simons, Andres Loeh, Benno Fünfstück, Mateusz Kowalczyk,
Michael Alan Dorman, Tom Smalley, Mathijs Kwik, Shea Levy, Dmitry
Malikov, Eric Seidel, Jacob Mitchell, Graham Christensen,
Hamish Mackenzie, Nikolay Amiantov, Aycan iRiCAN, Bryan
Gardiner, Joe Hermaszewski, John Wiegley, Philipp Hausmann,
Spencer Janssen, Tom Hunger, William Casarin, koral,
ksaric, Adam Vogt, Alexey Shmalko, Corey O'Connor, Cray
Elliott, David Johnson, Dmitry Bushev, Domen Kožar, Felix
Kunzmann, Gabriel Ebner, Gergely Risko, Joachim Fasting,
John Albietz, John Chee, Jussi Maki, Lisanna Dettwyler,
Mark Laws, Mark Wotton, Matthew Pickering, Matthew Stewart,
Matvey Aksenov, Nicholas Clarke, Nicolas Rolland, Oliver
Charles, Pascal Wittmann, Patrick John Wheeler, Phil de
Joux, Piotr Bogdan, Profpatsch, Raymond Gauthier, Renzo
Carbonara, Rodney Lorrimar, Sibi, Sukant Hajra, Tanner
Doshier, Vaibhav Sagar, Viktar Basharymau, danbst, karsten
gebbert, laMudri, Александр Цамутали
maintainer: Peter Simons <simons@cryp.to>
stability: stable
tested-with: GHC == 8.6.3
tested-with: GHC == 8.6.5, GHC == 8.8.1
category: Distribution, Nix
homepage: https://github.com/nixos/cabal2nix#readme
bug-reports: https://github.com/nixos/cabal2nix/issues
@@ -90,7 +43,6 @@ source-repository head

library
exposed-modules: Cabal2nix
Distribution.Nixpkgs.Fetch
Distribution.Nixpkgs.Haskell
Distribution.Nixpkgs.Haskell.BuildInfo
Distribution.Nixpkgs.Haskell.Constraint
@@ -104,27 +56,21 @@ library
Distribution.Nixpkgs.Haskell.FromCabal.PostProcess
Distribution.Nixpkgs.Haskell.Hackage
Distribution.Nixpkgs.Haskell.OrphanInstances
Distribution.Nixpkgs.Haskell.PackageSourceSpec
other-modules: Paths_cabal2nix
hs-source-dirs: src
build-depends: base > 4.11
, Cabal > 2.4
, Cabal > 3
, aeson > 1
, ansi-wl-pprint
, bytestring
, containers
, containers >= 0.5.9
, deepseq >= 1.4
, directory
, distribution-nixpkgs >= 1.2
, filepath
, distribution-nixpkgs >= 1.3.1
, hackage-db >= 2.0.1
, hopenssl >= 2
, hpack >= 0.29.6
, language-nix
, lens
, optparse-applicative
, pretty >= 1.1.2
, process
, split
, text
, time
Loading