git.iko.soy/typeable/cabal2nix
on d974819 help sign in
.travis.yml+86−131
since splitsnapshots
unifiedsplit
@@ -1,161 +1,116 @@
1# This Travis job script has been generated by a script via
1# This Travis job script has been generated by a script via
2#
2#
3−# haskell-ci '--installed=+all -Cabal' '--hlint' '--doctest' '--doctest-options=-i ../dist-newstyle/build/*/*/cabal2nix-*/build/autogen' '-o' '.travis.yml' 'cabal2nix.cabal' '--head-hackage' '--head-hackage-jobs' '> 8.8'
3+# runghc make_travis_yml_2.hs '--doctest' '--doctest-options=-i ../dist-newstyle/build/*/*/cabal2nix-*/build/autogen' '--hlint' '-o' '.travis.yml' 'cabal2nix.cabal'
4#
4#
5# For more information, see https://github.com/haskell-CI/haskell-ci
5# For more information, see https://github.com/haskell-CI/haskell-ci
6#
6#
7−# version: 0.9.20200306
8−#
9−version: ~> 1.0
10language: c
7language: c
11−os: linux
8+sudo: false
12−dist: xenial
9+
13git:
10git:
14− # whether to recursively clone submodules
11+ submodules: false # whether to recursively clone submodules
15− submodules: false
12+
16cache:
13cache:
17 directories:
14 directories:
18 - $HOME/.cabal/packages
15 - $HOME/.cabal/packages
19 - $HOME/.cabal/store
16 - $HOME/.cabal/store
20− - $HOME/.hlint
17+
21before_cache:
18before_cache:
22− - rm -fv $CABALHOME/packages/hackage.haskell.org/build-reports.log
19+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log
23 # remove files that are regenerated by 'cabal update'
20 # remove files that are regenerated by 'cabal update'
24− - rm -fv $CABALHOME/packages/hackage.haskell.org/00-index.*
21+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.*
25− - rm -fv $CABALHOME/packages/hackage.haskell.org/*.json
22+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/*.json
26− - rm -fv $CABALHOME/packages/hackage.haskell.org/01-index.cache
23+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.cache
27− - rm -fv $CABALHOME/packages/hackage.haskell.org/01-index.tar
24+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar
28− - rm -fv $CABALHOME/packages/hackage.haskell.org/01-index.tar.idx
25+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar.idx
26+
29− - rm -rfv $CABALHOME/packages/head.hackage
27+ - rm -rfv $HOME/.cabal/packages/head.hackage
30−jobs:
28+
29+matrix:
31 include:
30 include:
32− - compiler: ghc-8.10.1
31+ - compiler: "ghc-8.6.3"
33− addons: {"apt":{"sources":[{"sourceline":"deb http://ppa.launchpad.net/hvr/ghc/ubuntu xenial main","key_url":"https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x063dab2bdc0b3f9fcebc378bff3aeacef6f88286"}],"packages":["ghc-8.10.1","cabal-install-3.2"]}}
32+ # env: TEST=--disable-tests BENCH=--disable-benchmarks
34− os: linux
33+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.6.3], sources: [hvr-ghc]}}
35− - compiler: ghc-8.8.3
36− addons: {"apt":{"sources":[{"sourceline":"deb http://ppa.launchpad.net/hvr/ghc/ubuntu xenial main","key_url":"https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x063dab2bdc0b3f9fcebc378bff3aeacef6f88286"}],"packages":["ghc-8.8.3","cabal-install-3.0"]}}
37− os: linux
38− - compiler: ghc-8.6.5
34+ - compiler: "ghc-8.4.4"
39− addons: {"apt":{"sources":[{"sourceline":"deb http://ppa.launchpad.net/hvr/ghc/ubuntu xenial main","key_url":"https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x063dab2bdc0b3f9fcebc378bff3aeacef6f88286"}],"packages":["ghc-8.6.5","cabal-install-3.0"]}}
35+ # env: TEST=--disable-tests BENCH=--disable-benchmarks
40− os: linux
36+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.4.4], sources: [hvr-ghc]}}
41− allow_failures:
37+
42− - compiler: ghc-8.8.3
43− - compiler: ghc-8.10.1
44before_install:
38before_install:
45− - HC=$(echo "/opt/$CC/bin/ghc" | sed 's/-/\//')
39+ - HC=${CC}
46− - WITHCOMPILER="-w $HC"
47− - HADDOCK=$(echo "/opt/$CC/bin/haddock" | sed 's/-/\//')
48− - HCPKG="$HC-pkg"
40+ - HCPKG=${HC/ghc/ghc-pkg}
49 - unset CC
41 - unset CC
50− - CABAL=/opt/ghc/bin/cabal
42+ - ROOTDIR=$(pwd)
51− - CABALHOME=$HOME/.cabal
43+ - mkdir -p $HOME/.local/bin
52− - export PATH="$CABALHOME/bin:$PATH"
44+ - "PATH=/opt/ghc/bin:/opt/ghc-ppa-tools/bin:$HOME/local/bin:$PATH"
53− - TOP=$(pwd)
54− - "HCNUMVER=$(${HC} --numeric-version|perl -ne '/^(\\d+)\\.(\\d+)\\.(\\d+)(\\.(\\d+))?$/; print(10000 * $1 + 100 * $2 + ($3 == 0 ? $5 != 1 : $3))')"
45+ - HCNUMVER=$(( $(${HC} --numeric-version|sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]+).*/\1 * 10000 + \2 * 100 + \3/') ))
55 - echo $HCNUMVER
46 - echo $HCNUMVER
56− - CABAL="$CABAL -vnormal+nowrap"
47+
57− - set -o pipefail
58− - TEST=--enable-tests
59− - BENCH=--enable-benchmarks
60− - HEADHACKAGE=false
61− - if [ $HCNUMVER -ge 80800 ] ; then HEADHACKAGE=true ; fi
62− - rm -f $CABALHOME/config
63− - |
64− echo "verbose: normal +nowrap +markoutput" >> $CABALHOME/config
65− echo "remote-build-reporting: anonymous" >> $CABALHOME/config
66− echo "write-ghc-environment-files: always" >> $CABALHOME/config
67− echo "remote-repo-cache: $CABALHOME/packages" >> $CABALHOME/config
68− echo "logs-dir: $CABALHOME/logs" >> $CABALHOME/config
69− echo "world-file: $CABALHOME/world" >> $CABALHOME/config
70− echo "extra-prog-path: $CABALHOME/bin" >> $CABALHOME/config
71− echo "symlink-bindir: $CABALHOME/bin" >> $CABALHOME/config
72− echo "installdir: $CABALHOME/bin" >> $CABALHOME/config
73− echo "build-summary: $CABALHOME/logs/build.log" >> $CABALHOME/config
74− echo "store-dir: $CABALHOME/store" >> $CABALHOME/config
75− echo "install-dirs user" >> $CABALHOME/config
76− echo " prefix: $CABALHOME" >> $CABALHOME/config
77− echo "repository hackage.haskell.org" >> $CABALHOME/config
78− echo " url: http://hackage.haskell.org/" >> $CABALHOME/config
79− - |
80− if $HEADHACKAGE; then
81− echo "allow-newer: $($HCPKG list --simple-output | sed -E 's/([a-zA-Z-]+)-[0-9.]+/*:\1/g')" >> $CABALHOME/config
82− echo "repository head.hackage.ghc.haskell.org" >> $CABALHOME/config
83− echo " url: https://ghc.gitlab.haskell.org/head.hackage/" >> $CABALHOME/config
84− echo " secure: True" >> $CABALHOME/config
85− echo " root-keys: 7541f32a4ccca4f97aea3b22f5e593ba2c0267546016b992dfadcd2fe944e55d" >> $CABALHOME/config
86− echo " 26021a13b401500c8eb2761ca95c61f2d625bfef951b939a8124ed12ecf07329" >> $CABALHOME/config
87− echo " f76d08be13e9a61a377a85e2fb63f4c5435d40f8feb3e12eb05905edb8cdea89" >> $CABALHOME/config
88− echo " key-threshold: 3" >> $CABALHOME/config
89− fi
90install:
48install:
91− - ${CABAL} --version
49+ - cabal --version
92 - echo "$(${HC} --version) [$(${HC} --print-project-git-commit-id 2> /dev/null || echo '?')]"
50 - echo "$(${HC} --version) [$(${HC} --print-project-git-commit-id 2> /dev/null || echo '?')]"
93− - |
51+ - BENCH=${BENCH---enable-benchmarks}
94− echo "program-default-options" >> $CABALHOME/config
52+ - TEST=${TEST---enable-tests}
95− echo " ghc-options: $GHCJOBS +RTS -M6G -RTS" >> $CABALHOME/config
53+ - HADDOCK=${HADDOCK-true}
96− - cat $CABALHOME/config
54+ - UNCONSTRAINED=${UNCONSTRAINED-true}
97− - rm -fv cabal.project cabal.project.local cabal.project.freeze
55+ - NOINSTALLEDCONSTRAINTS=${NOINSTALLEDCONSTRAINTS-false}
56+ - GHCHEAD=${GHCHEAD-false}
98− - travis_retry ${CABAL} v2-update -v
57+ - travis_retry cabal update -v
58+ - "sed -i.bak 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config"
59+ - rm -fv cabal.project cabal.project.local
60+ - grep -Ev -- '^\s*--' ${HOME}/.cabal/config | grep -Ev '^\s*$'
61+ - (cd /tmp && echo '' | cabal new-repl -w ${HC} --build-dep fail)
99− - (cd /tmp && ${CABAL} v2-install $WITHCOMPILER -j2 doctest --constraint='doctest ==0.16.2.*')
62+ - if [ $HCNUMVER -ge 80000 ]; then cabal new-install -w ${HC} -j2 --symlink-bindir=$HOME/.local/bin doctest --constraint='doctest ==0.16.*'; fi
100− - if [ $HCNUMVER -lt 80800 ] ; then HLINTVER=$(cd /tmp && (${CABAL} v2-install -v $WITHCOMPILER --dry-run hlint --constraint='hlint ==2.2.*' | perl -ne 'if (/\bhlint-(\d+(\.\d+)*)\b/) { print "$1"; last; }')); echo "HLint version $HLINTVER" ; fi
63+ - if [ $HCNUMVER -eq 80603 ]; then cabal new-install -w ${HC} -j2 --symlink-bindir=$HOME/.local/bin hlint --constraint='hlint ==2.1.*'; fi
101− - "if [ $HCNUMVER -lt 80800 ] ; then if [ ! -e $HOME/.hlint/hlint-$HLINTVER/hlint ]; then echo \"Downloading HLint version $HLINTVER\"; mkdir -p $HOME/.hlint; curl --write-out 'Status Code: %{http_code} Redirects: %{num_redirects} Total time: %{time_total} Total Dsize: %{size_download}\\n' --silent --location --output $HOME/.hlint/hlint-$HLINTVER.tar.gz \"https://github.com/ndmitchell/hlint/releases/download/v$HLINTVER/hlint-$HLINTVER-x86_64-linux.tar.gz\"; tar -xzv -f $HOME/.hlint/hlint-$HLINTVER.tar.gz -C $HOME/.hlint; fi ; fi"
64+ - "printf 'packages: \".\"\\n' > cabal.project"
102− - if [ $HCNUMVER -lt 80800 ] ; then mkdir -p $CABALHOME/bin && ln -sf "$HOME/.hlint/hlint-$HLINTVER/hlint" $CABALHOME/bin/hlint ; fi
65+ - "printf 'write-ghc-environment-files: always\\n' >> cabal.project"
103− - if [ $HCNUMVER -lt 80800 ] ; then hlint --version ; fi
104− # Generate cabal.project
105− - rm -rf cabal.project cabal.project.local cabal.project.freeze
106− - touch cabal.project
66+ - touch cabal.project.local
107− - |
108− echo "packages: ." >> cabal.project
109− - |
110− - "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"
67+ - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg | grep -vw -- cabal2nix | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi"
111 - cat cabal.project || true
68 - cat cabal.project || true
112 - cat cabal.project.local || true
69 - cat cabal.project.local || true
113− - if [ -f "./configure.ac" ]; then (cd "." && autoreconf -i); fi
70+ - if [ -f "./configure.ac" ]; then
114− - ${CABAL} v2-freeze $WITHCOMPILER ${TEST} ${BENCH}
71+ (cd "." && autoreconf -i);
72+ fi
115− - "cat cabal.project.freeze | sed -E 's/^(constraints: *| *)//' | sed 's/any.//'"
73+ - rm -f cabal.project.freeze
116− - rm cabal.project.freeze
74+ - cabal new-build -w ${HC} ${TEST} ${BENCH} --project-file="cabal.project" --dep -j2 all
117− - travis_wait 40 ${CABAL} v2-build $WITHCOMPILER ${TEST} ${BENCH} --dep -j2 all
118− - travis_wait 40 ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks --dep -j2 all
75+ - cabal new-build -w ${HC} --disable-tests --disable-benchmarks --project-file="cabal.project" --dep -j2 all
119−script:
76+ - rm -rf .ghc.environment.* "."/dist
120 - DISTDIR=$(mktemp -d /tmp/dist-test.XXXX)
77 - DISTDIR=$(mktemp -d /tmp/dist-test.XXXX)
121− # Packaging...
78+
79+# Here starts the actual work to be performed for the package under test;
80+# any command which exits with a non-zero exit code causes the build to fail.
81+script:
82+ # test that source-distributions can be generated
122− - ${CABAL} v2-sdist all
83+ - cabal new-sdist all
123− # Unpacking...
124 - mv dist-newstyle/sdist/*.tar.gz ${DISTDIR}/
84 - mv dist-newstyle/sdist/*.tar.gz ${DISTDIR}/
125 - cd ${DISTDIR} || false
85 - cd ${DISTDIR} || false
126− - find . -maxdepth 1 -type f -name '*.tar.gz' -exec tar -xvf '{}' \;
86+ - find . -maxdepth 1 -name '*.tar.gz' -exec tar -xvf '{}' \;
127− - find . -maxdepth 1 -type f -name '*.tar.gz' -exec rm '{}' \;
87+ - "printf 'packages: cabal2nix-*/*.cabal\\n' > cabal.project"
128− - PKGDIR_cabal2nix="$(find . -maxdepth 1 -type d -regex '.*/cabal2nix-[0-9.]*')"
88+ - "printf 'write-ghc-environment-files: always\\n' >> cabal.project"
129− # Generate cabal.project
130− - rm -rf cabal.project cabal.project.local cabal.project.freeze
131− - touch cabal.project
89+ - touch cabal.project.local
132− - |
133− echo "packages: ${PKGDIR_cabal2nix}" >> cabal.project
134− - |
135− - "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"
90+ - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg | grep -vw -- cabal2nix | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi"
136 - cat cabal.project || true
91 - cat cabal.project || true
137 - cat cabal.project.local || true
92 - cat cabal.project.local || true
138− # Building...
139 # this builds all libraries and executables (without tests/benchmarks)
93 # this builds all libraries and executables (without tests/benchmarks)
140− - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks all
94+ - cabal new-build -w ${HC} --disable-tests --disable-benchmarks all
141− # Building with tests and benchmarks...
95+
142 # build & run tests, build benchmarks
96 # build & run tests, build benchmarks
143− - ${CABAL} v2-build $WITHCOMPILER ${TEST} ${BENCH} all
97+ - cabal new-build -w ${HC} ${TEST} ${BENCH} all
144− # Testing...
98+ - if [ "x$TEST" = "x--enable-tests" ]; then cabal new-test -w ${HC} ${TEST} ${BENCH} all; fi
145− - ${CABAL} v2-test $WITHCOMPILER ${TEST} ${BENCH} all
99+
146− # Doctest...
100+ # doctest
147− - (cd ${PKGDIR_cabal2nix} && doctest -i ../dist-newstyle/build/*/*/cabal2nix-*/build/autogen src)
101+ - if [ $HCNUMVER -ge 80000 ]; then (cd cabal2nix-* && doctest -i ../dist-newstyle/build/*/*/cabal2nix-*/build/autogen -XMonadFailDesugaring src); fi
148− # HLint..
102+
149− - if [ $HCNUMVER -lt 80800 ] ; then (cd ${PKGDIR_cabal2nix} && hlint src) ; fi
103+ # hlint
150− - if [ $HCNUMVER -lt 80800 ] ; then (cd ${PKGDIR_cabal2nix} && hlint hackage2nix) ; fi
104+ - if [ $HCNUMVER -eq 80603 ]; then (cd cabal2nix-* && hlint -XMonadFailDesugaring src); fi
151− - if [ $HCNUMVER -lt 80800 ] ; then (cd ${PKGDIR_cabal2nix} && hlint cabal2nix) ; fi
105+
152− # cabal check...
106+ # cabal check
153− - (cd ${PKGDIR_cabal2nix} && ${CABAL} -vnormal check)
107+ - (cd cabal2nix-* && cabal check)
108+
154− # haddock...
109+ # haddock
155− - ${CABAL} v2-haddock $WITHCOMPILER --with-haddock $HADDOCK ${TEST} ${BENCH} all
110+ - if $HADDOCK; then cabal new-haddock -w ${HC} ${TEST} ${BENCH} all; else echo "Skipping haddock generation";fi
111+
156− # Building without installed constraints for packages in global-db...
112+ # Build without installed constraints for packages in global-db
157− - rm -f cabal.project.local
113+ - if $UNCONSTRAINED; then rm -f cabal.project.local; echo cabal new-build -w ${HC} --disable-tests --disable-benchmarks all; else echo "Not building without installed constraints"; fi
158− - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks all
159
114
160−# REGENDATA ("0.9.20200306",["--installed=+all -Cabal","--hlint","--doctest","--doctest-options=-i ../dist-newstyle/build/*/*/cabal2nix-*/build/autogen","-o",".travis.yml","cabal2nix.cabal","--head-hackage","--head-hackage-jobs","> 8.8"])
115+# REGENDATA ["--doctest","--doctest-options=-i ../dist-newstyle/build/*/*/cabal2nix-*/build/autogen","--hlint","-o",".travis.yml","cabal2nix.cabal"]
161# EOF
116# EOF
README.md+7−7
@@ -27,16 +27,16 @@ direct `http://host/path/pkg.cabal` URL can be provided, as well as a
27`file:///local/path/pkg.cabal` URI that doesn't depend on network access.
27`file:///local/path/pkg.cabal` URI that doesn't depend on network access.
28However, if the source hash is not already in `cabal2nix`'s cache or provided
28However, if the source hash is not already in `cabal2nix`'s cache or provided
29using the `--sha256` option, `cabal2nix` still needs to download the source
29using the `--sha256` option, `cabal2nix` still needs to download the source
30−code to compute the hash, which still causes network traffic. Run the utility
30+code to compute the hash, which obviously still causes network traffic. Run the
31−with `--help` to see the complete list of supported command-line flags.
31+utility with `--help` to see the complete list of supported command line flags.
32
32
33−Detailed instructions on how to use those generated files with Nix can be found at
33+Detailed instructions how to use those generated files with Nix can be found at
34−https://nixos.org/nixpkgs/manual/#how-to-create-nix-builds-for-your-own-private-haskell-packages.
34+http://nixos.org/nixpkgs/manual/#users-guide-to-the-haskell-infrastructure.
35
35
36`cabal2nix` can also build derivations for projects from other sources than
36`cabal2nix` can also build derivations for projects from other sources than
37−Hackage. You only need to provide a URI that points to a cabal project. The
37+hackage. You only need to provide an URI that points to a cabal project. The
38−most common use-case for this is probably to generate a derivation for a
38+most common usecase for this is probably to generate a derivation for a project
39−project on the local file system:
39+on the local file system:
40
40
41 $ cabal get mtl-2.2.1 && cd mtl-2.2.1
41 $ cabal get mtl-2.2.1 && cd mtl-2.2.1
42 $ cabal2nix .
42 $ cabal2nix .
cabal2nix.cabal+79−28
@@ -1,5 +1,5 @@
1name: cabal2nix
1name: cabal2nix
2−version: 2.15.1
2+version: 2.14.1
3synopsis: Convert Cabal files into Nix build instructions.
3synopsis: Convert Cabal files into Nix build instructions.
4description:
4description:
5 Convert Cabal files into Nix build instructions. Users of Nix can install the latest
5 Convert Cabal files into Nix build instructions. Users of Nix can install the latest
@@ -8,26 +8,73 @@ description:
8 > nix-env -i cabal2nix
8 > nix-env -i cabal2nix
9license: BSD3
9license: BSD3
10license-file: LICENSE
10license-file: LICENSE
11−author: Peter Simons, Andres Loeh, Benno Fünfstück, Mateusz Kowalczyk,
11+author: Peter Simons,
12+ Andres Loeh,
13+ Benno Fünfstück,
14+ Mateusz Kowalczyk,
12− Michael Alan Dorman, Tom Smalley, Mathijs Kwik, Shea Levy, Dmitry
15+ Michael Alan Dorman,
16+ Tom Smalley,
17+ Mathijs Kwik,
18+ Shea Levy,
19+ Dmitry Malikov,
20+ Eric Seidel,
21+ Jacob Mitchell,
13− Malikov, Eric Seidel, Jacob Mitchell, Graham Christensen,
22+ Graham Christensen,
14− Hamish Mackenzie, Nikolay Amiantov, Aycan iRiCAN, Bryan
23+ Hamish Mackenzie,
24+ Nikolay Amiantov,
25+ Aycan iRiCAN,
26+ Bryan Gardiner,
15− Gardiner, Joe Hermaszewski, John Wiegley, Philipp Hausmann,
27+ Joe Hermaszewski,
28+ John Wiegley,
29+ Philipp Hausmann,
16− Spencer Janssen, Tom Hunger, William Casarin, koral,
30+ Spencer Janssen,
31+ Tom Hunger,
32+ William Casarin,
33+ koral,
34+ ksaric,
35+ Adam Vogt,
17− ksaric, Adam Vogt, Alexey Shmalko, Corey O'Connor, Cray
36+ Alexey Shmalko,
37+ Corey O'Connor,
38+ Cray Elliott,
18− Elliott, David Johnson, Dmitry Bushev, Domen Kožar, Felix
39+ David Johnson,
40+ Dmitry Bushev,
41+ Domen Kožar,
42+ Felix Kunzmann,
43+ Gabriel Ebner,
44+ Gergely Risko,
19− Kunzmann, Gabriel Ebner, Gergely Risko, Joachim Fasting,
45+ Joachim Fasting,
46+ John Albietz,
47+ John Chee,
48+ Jussi Maki,
20− John Albietz, John Chee, Jussi Maki, Lisanna Dettwyler,
49+ Lisanna Dettwyler,
50+ Mark Laws,
51+ Mark Wotton,
21− Mark Laws, Mark Wotton, Matthew Pickering, Matthew Stewart,
52+ Matthew Pickering,
53+ Matthew Stewart,
54+ Matvey Aksenov,
22− Matvey Aksenov, Nicholas Clarke, Nicolas Rolland, Oliver
55+ Nicholas Clarke,
56+ Nicolas Rolland,
57+ Oliver Charles,
58+ Pascal Wittmann,
23− Charles, Pascal Wittmann, Patrick John Wheeler, Phil de
59+ Patrick John Wheeler,
60+ Phil de Joux,
61+ Piotr Bogdan,
62+ Profpatsch,
24− Joux, Piotr Bogdan, Profpatsch, Raymond Gauthier, Renzo
63+ Raymond Gauthier,
64+ Renzo Carbonara,
25− Carbonara, Rodney Lorrimar, Sibi, Sukant Hajra, Tanner
65+ Rodney Lorrimar,
66+ Sibi,
67+ Sukant Hajra,
68+ Tanner Doshier,
69+ Vaibhav Sagar,
26− Doshier, Vaibhav Sagar, Viktar Basharymau, danbst, karsten
70+ Viktar Basharymau,
71+ danbst,
72+ karsten gebbert,
73+ laMudri,
27− gebbert, laMudri, Александр Цамутали
74+ Александр Цамутали
28maintainer: Peter Simons <simons@cryp.to>
75maintainer: Peter Simons <simons@cryp.to>
29stability: stable
76stability: stable
30−tested-with: GHC == 8.6.5, GHC == 8.8.3, GHC == 8.10.1
77+tested-with: GHC == 8.4.4, GHC == 8.6.3
31category: Distribution, Nix
78category: Distribution, Nix
32homepage: https://github.com/nixos/cabal2nix#readme
79homepage: https://github.com/nixos/cabal2nix#readme
33bug-reports: https://github.com/nixos/cabal2nix/issues
80bug-reports: https://github.com/nixos/cabal2nix/issues
@@ -60,15 +107,15 @@ library
60 Distribution.Nixpkgs.Haskell.PackageSourceSpec
107 Distribution.Nixpkgs.Haskell.PackageSourceSpec
61 other-modules: Paths_cabal2nix
108 other-modules: Paths_cabal2nix
62 hs-source-dirs: src
109 hs-source-dirs: src
63− build-depends: base > 4.11
110+ build-depends: base < 5
64− , Cabal == 3.0.*
111+ , Cabal > 2.2
65− , aeson > 1
112+ , aeson
66 , ansi-wl-pprint
113 , ansi-wl-pprint
67 , bytestring
114 , bytestring
68− , containers >= 0.5.9
115+ , containers
69 , deepseq >= 1.4
116 , deepseq >= 1.4
70 , directory
117 , directory
71− , distribution-nixpkgs >= 1.3.1
118+ , distribution-nixpkgs >= 1.1.1
72 , filepath
119 , filepath
73 , hackage-db >= 2.0.1
120 , hackage-db >= 2.0.1
74 , hopenssl >= 2
121 , hopenssl >= 2
@@ -84,6 +131,7 @@ library
84 , transformers
131 , transformers
85 , yaml
132 , yaml
86 default-language: Haskell2010
133 default-language: Haskell2010
134+ default-extensions: MonadFailDesugaring
87 other-extensions: MultiParamTypeClasses
135 other-extensions: MultiParamTypeClasses
88 ScopedTypeVariables
136 ScopedTypeVariables
89 FlexibleInstances
137 FlexibleInstances
@@ -101,6 +149,7 @@ executable cabal2nix
101 hs-source-dirs: cabal2nix
149 hs-source-dirs: cabal2nix
102 build-depends: base, cabal2nix
150 build-depends: base, cabal2nix
103 default-language: Haskell2010
151 default-language: Haskell2010
152+ default-extensions: MonadFailDesugaring
104 ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates
153 ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates
105 -Wredundant-constraints
154 -Wredundant-constraints
106
155
@@ -110,13 +159,13 @@ executable hackage2nix
110 Paths_cabal2nix
159 Paths_cabal2nix
111 hs-source-dirs: hackage2nix
160 hs-source-dirs: hackage2nix
112 build-depends: base < 5
161 build-depends: base < 5
113− , Cabal
162+ , Cabal > 2.2
114 , aeson
163 , aeson
115 , bytestring
164 , bytestring
116 , cabal2nix
165 , cabal2nix
117 , containers
166 , containers
118 , directory
167 , directory
119− , distribution-nixpkgs >= 1.2
168+ , distribution-nixpkgs >= 1.1.1
120 , filepath
169 , filepath
121 , hopenssl >= 2
170 , hopenssl >= 2
122 , language-nix
171 , language-nix
@@ -127,15 +176,16 @@ executable hackage2nix
127 , optparse-applicative
176 , optparse-applicative
128 , pretty >= 1.1.2
177 , pretty >= 1.1.2
129 default-language: Haskell2010
178 default-language: Haskell2010
179+ default-extensions: MonadFailDesugaring
130 ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates
180 ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates
131− -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-maxN16
181+ -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N
132
182
133test-suite regression-test
183test-suite regression-test
134 type: exitcode-stdio-1.0
184 type: exitcode-stdio-1.0
135 main-is: Main.hs
185 main-is: Main.hs
136 hs-source-dirs: test
186 hs-source-dirs: test
137 build-depends: base
187 build-depends: base
138− , Cabal
188+ , Cabal > 2.2
139 , cabal2nix
189 , cabal2nix
140 , containers
190 , containers
141 , directory
191 , directory
@@ -147,6 +197,7 @@ test-suite regression-test
147 , tasty
197 , tasty
148 , tasty-golden
198 , tasty-golden
149 default-language: Haskell2010
199 default-language: Haskell2010
200+ default-extensions: MonadFailDesugaring
150 build-tools: cabal2nix
201 build-tools: cabal2nix
151 ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates
202 ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates
152 -Wredundant-constraints -threaded -with-rtsopts=-K64K
203 -Wredundant-constraints -threaded -with-rtsopts=-K64K
hackage2nix/Main.hs+18−24
@@ -1,5 +1,6 @@
1{-# LANGUAGE OverloadedStrings #-}
1{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE RecordWildCards #-}
2{-# LANGUAGE RecordWildCards #-}
3+{-# LANGUAGE CPP #-}
3
4
4module Main ( main ) where
5module Main ( main ) where
5
6
@@ -10,10 +11,13 @@ import Control.Monad
10import Control.Monad.Par.Combinator
11import Control.Monad.Par.Combinator
11import Control.Monad.Par.IO
12import Control.Monad.Par.IO
12import Control.Monad.Trans ( liftIO )
13import Control.Monad.Trans ( liftIO )
13−import Data.List ( intercalate )
14+import Data.List
14import Data.Map.Strict ( Map )
15import Data.Map.Strict ( Map )
15import qualified Data.Map.Strict as Map
16import qualified Data.Map.Strict as Map
16import Data.Maybe
17import Data.Maybe
18+#if !MIN_VERSION_base(4,11,0)
19+import Data.Monoid
20+#endif
17import Data.Set ( Set )
21import Data.Set ( Set )
18import qualified Data.Set as Set
22import qualified Data.Set as Set
19import Data.String
23import Data.String
@@ -23,11 +27,10 @@ import Distribution.Nixpkgs.Haskell.Constraint
23import Distribution.Nixpkgs.Haskell.FromCabal
27import Distribution.Nixpkgs.Haskell.FromCabal
24import Distribution.Nixpkgs.Haskell.FromCabal.Configuration as Config
28import Distribution.Nixpkgs.Haskell.FromCabal.Configuration as Config
25import Distribution.Nixpkgs.Haskell.FromCabal.Flags
29import Distribution.Nixpkgs.Haskell.FromCabal.Flags
26−import Distribution.Nixpkgs.Haskell.OrphanInstances ( )
27import Distribution.Nixpkgs.Meta
30import Distribution.Nixpkgs.Meta
28import Distribution.Nixpkgs.PackageMap
31import Distribution.Nixpkgs.PackageMap
29import Distribution.Package
32import Distribution.Package
30−import Distribution.PackageDescription hiding ( options, extraLibs, buildTools, homepage )
33+import Distribution.PackageDescription hiding ( options, buildDepends, extraLibs, buildTools, homepage )
31import Distribution.System
34import Distribution.System
32import Distribution.Text
35import Distribution.Text
33import Distribution.Version
36import Distribution.Version
@@ -63,7 +66,7 @@ main = do
63 pinfo :: ParserInfo CLI
66 pinfo :: ParserInfo CLI
64 pinfo = info
67 pinfo = info
65 ( helper
68 ( helper
66− <*> infoOption ("hackage2nix " ++ prettyShow Main.version) (long "version" <> help "Show version number")
69+ <*> infoOption ("hackage2nix " ++ display Main.version) (long "version" <> help "Show version number")
67 <*> cliOptions
70 <*> cliOptions
68 )
71 )
69 ( fullDesc
72 ( fullDesc
@@ -72,15 +75,13 @@ main = do
72 CLI {..} <- execParser pinfo
75 CLI {..} <- execParser pinfo
73
76
74 config <- readConfiguration (nixpkgsRepository </> configFile)
77 config <- readConfiguration (nixpkgsRepository </> configFile)
75− nixpkgs <- readNixpkgPackageMap ["-f", nixpkgsRepository, "--arg", "config", "{ allowAliases = false; }"]
78+ nixpkgs <- readNixpkgPackageMap nixpkgsRepository Nothing
76 preferredVersions <- readPreferredVersions (fromMaybe (hackageRepository </> "preferred-versions") preferredVersionsFile)
79 preferredVersions <- readPreferredVersions (fromMaybe (hackageRepository </> "preferred-versions") preferredVersionsFile)
77 let fixup = Map.delete "acme-everything" -- TODO: https://github.com/NixOS/cabal2nix/issues/164
80 let fixup = Map.delete "acme-everything" -- TODO: https://github.com/NixOS/cabal2nix/issues/164
78 . Map.delete "som" -- TODO: https://github.com/NixOS/cabal2nix/issues/164
81 . Map.delete "som" -- TODO: https://github.com/NixOS/cabal2nix/issues/164
79 . Map.delete "type" -- TODO: https://github.com/NixOS/cabal2nix/issues/163
82 . Map.delete "type" -- TODO: https://github.com/NixOS/cabal2nix/issues/163
80 . Map.delete "control-invariants" -- TODO: depends on "assert"
83 . Map.delete "control-invariants" -- TODO: depends on "assert"
81− . Map.delete "with" -- TODO: https://github.com/NixOS/cabal2nix/issues/164
82− . Map.delete "telega" -- TODO: depends on "with"
83− . over (at "hermes") (fmap (set (contains "1.3.4.3") False)) -- TODO: https://github.com/haskell/hackage-server/issues/436
84+ . over (at ("hermes")) ((fmap (set (contains "1.3.4.3") False))) -- TODO: https://github.com/haskell/hackage-server/issues/436
84 hackage <- fixup <$> readHackage hackageRepository
85 hackage <- fixup <$> readHackage hackageRepository
85 let
86 let
86 hackagePackagesFile :: FilePath
87 hackagePackagesFile :: FilePath
@@ -93,7 +94,7 @@ main = do
93 latestVersionSet = Map.map Set.findMax (Map.filter (not . Set.null) (Map.mapWithKey (enforcePreferredVersions preferredVersions) hackage))
94 latestVersionSet = Map.map Set.findMax (Map.filter (not . Set.null) (Map.mapWithKey (enforcePreferredVersions preferredVersions) hackage))
94
95
95 defaultPackageOverridesSet :: PackageSet
96 defaultPackageOverridesSet :: PackageSet
96− defaultPackageOverridesSet = Map.fromList [ (name, resolveConstraint c hackage) | c@(Dependency name _ _) <- defaultPackageOverrides config ]
97+ defaultPackageOverridesSet = Map.fromList [ (name, resolveConstraint c hackage) | c@(Dependency name _) <- defaultPackageOverrides config ]
97
98
98 generatedDefaultPackageSet :: PackageSet
99 generatedDefaultPackageSet :: PackageSet
99 generatedDefaultPackageSet = (defaultPackageOverridesSet `Map.union` latestVersionSet) `Map.difference` corePackageSet
100 generatedDefaultPackageSet = (defaultPackageOverridesSet `Map.union` latestVersionSet) `Map.difference` corePackageSet
@@ -106,7 +107,7 @@ main = do
106
107
107 extraPackageSet :: PackageMultiSet
108 extraPackageSet :: PackageMultiSet
108 extraPackageSet = Map.unionsWith Set.union
109 extraPackageSet = Map.unionsWith Set.union
109− [ Map.singleton name (Set.singleton (resolveConstraint c hackage)) | c@(Dependency name _ _) <- extraPackages config ]
110+ [ Map.singleton name (Set.singleton (resolveConstraint c hackage)) | c@(Dependency name _) <- extraPackages config ]
110
111
111 db :: PackageMultiSet
112 db :: PackageMultiSet
112 db = Map.unionsWith Set.union [ Map.map Set.singleton generatedDefaultPackageSet
113 db = Map.unionsWith Set.union [ Map.map Set.singleton generatedDefaultPackageSet
@@ -116,7 +117,7 @@ main = do
116 ]
117 ]
117
118
118 haskellResolver :: Dependency -> Bool
119 haskellResolver :: Dependency -> Bool
119− haskellResolver (Dependency name vrange _)
120+ haskellResolver (Dependency name vrange)
120 | Just v <- Map.lookup name corePackageSet = v `withinRange` vrange
121 | Just v <- Map.lookup name corePackageSet = v `withinRange` vrange
121 | Just v <- Map.lookup name generatedDefaultPackageSet = v `withinRange` vrange
122 | Just v <- Map.lookup name generatedDefaultPackageSet = v `withinRange` vrange
122 | otherwise = False
123 | otherwise = False
@@ -135,13 +136,8 @@ main = do
135 (descr, cabalSHA256) <- readPackage hackageRepository pkgId
136 (descr, cabalSHA256) <- readPackage hackageRepository pkgId
136 meta <- readPackageMeta hackageRepository pkgId
137 meta <- readPackageMeta hackageRepository pkgId
137
138
138− let isInDefaultPackageSet, isHydraEnabled, isBroken :: Bool
139+ let isInDefaultPackageSet :: Bool
139− isInDefaultPackageSet = (== Just v) (Map.lookup name generatedDefaultPackageSet)
140+ isInDefaultPackageSet = maybe False (== v) (Map.lookup name generatedDefaultPackageSet)
140− isHydraEnabled = isInDefaultPackageSet && not (isBroken || name `Set.member` dontDistributePackages config)
141− isBroken = any (withinRange v) [ vr | Dependency pn vr _ <- brokenPackages config, pn == name ]
142−
143− droppedPlatforms :: Set Platform
144− droppedPlatforms = Map.findWithDefault mempty name (unsupportedPlatforms config)
145
141
146 tarballSHA256 :: SHA256Hash
142 tarballSHA256 :: SHA256Hash
147 tarballSHA256 = fromMaybe (error (display pkgId ++ ": meta data has no hash for the tarball"))
143 tarballSHA256 = fromMaybe (error (display pkgId ++ ": meta data has no hash for the tarball"))
@@ -157,15 +153,13 @@ main = do
157 drv = fromGenericPackageDescription haskellResolver nixpkgsResolver targetPlatform (compilerInfo config) flagAssignment [] descr
153 drv = fromGenericPackageDescription haskellResolver nixpkgsResolver targetPlatform (compilerInfo config) flagAssignment [] descr
158 & src .~ urlDerivationSource ("mirror://hackage/" ++ display pkgId ++ ".tar.gz") tarballSHA256
154 & src .~ urlDerivationSource ("mirror://hackage/" ++ display pkgId ++ ".tar.gz") tarballSHA256
159 & editedCabalFile .~ cabalSHA256
155 & editedCabalFile .~ cabalSHA256
160− & metaSection.platforms %~ (`Set.difference` Map.findWithDefault Set.empty name (unsupportedPlatforms config))
156+ & metaSection.hydraPlatforms %~ (`Set.difference` Map.findWithDefault Set.empty name (dontDistributePackages config))
161− & metaSection.hydraPlatforms %~ (if Set.null droppedPlatforms then id else (`Set.difference` droppedPlatforms))
162− & metaSection.hydraPlatforms %~ (if isHydraEnabled then id else const Set.empty)
163− & metaSection.broken ||~ isBroken
164 & metaSection.maintainers .~ Map.findWithDefault Set.empty name globalPackageMaintainers
157 & metaSection.maintainers .~ Map.findWithDefault Set.empty name globalPackageMaintainers
158+ & metaSection.hydraPlatforms %~ (if isInDefaultPackageSet then id else const Set.empty)
165 & metaSection.homepage .~ ""
159 & metaSection.homepage .~ ""
166
160
167 overrides :: Doc
161 overrides :: Doc
168− overrides = fcat $ punctuate space [ pPrint b <> semi | b <- Set.toList (view (dependencies . each) drv `Set.union` view extraFunctionArgs drv), not (isFromHackage b) ]
162+ overrides = fcat $ punctuate space [ disp b <> semi | b <- Set.toList ((view (dependencies . each) drv) `Set.union` view extraFunctionArgs drv), not (isFromHackage b) ]
169 return $ render $ nest 2 $
163 return $ render $ nest 2 $
170 hang (doubleQuotes (text attr) <+> equals <+> text "callPackage") 2 (parens (pPrint drv)) <+> (braces overrides <> semi)
164 hang (doubleQuotes (text attr) <+> equals <+> text "callPackage") 2 (parens (pPrint drv)) <+> (braces overrides <> semi)
171
165
@@ -205,7 +199,7 @@ resolveConstraint c = fromMaybe (error msg) . resolveConstraint' c
205 ]
199 ]
206
200
207resolveConstraint' :: Constraint -> Hackage -> Maybe Version
201resolveConstraint' :: Constraint -> Hackage -> Maybe Version
208−resolveConstraint' (Dependency name vrange _) hackage
202+resolveConstraint' (Dependency name vrange) hackage
209 | Just vset' <- Map.lookup name hackage
203 | Just vset' <- Map.lookup name hackage
210 , vset <- Set.filter (`withinRange` vrange) vset'
204 , vset <- Set.filter (`withinRange` vrange) vset'
211 , not (Set.null vset) = Just (Set.findMax vset)
205 , not (Set.null vset) = Just (Set.findMax vset)
hackage2nix/README.md−3
@@ -15,9 +15,6 @@ and we want to check that hackage-packages.nix will be updated correctly.
15On macOS you can use [this](https://gist.github.com/dixson3/8360571) to create one
15On macOS you can use [this](https://gist.github.com/dixson3/8360571) to create one
16(you can replace 60g with 4g as that should be plenty).
16(you can replace 60g with 4g as that should be plenty).
17
17
18−There is a [video on YouTube](https://www.youtube.com/watch?v=qX0mgtSm360)
19−that gives a thorough walk-through of these steps.
20−
21#### Setup
18#### Setup
22Replace `git@github.com:NixOS/nixpkgs.git` with a fork you have access to.
19Replace `git@github.com:NixOS/nixpkgs.git` with a fork you have access to.
23```
20```
src/Cabal2nix.hs+13−11
@@ -11,12 +11,14 @@ module Cabal2nix
11import Control.Exception ( bracket )
11import Control.Exception ( bracket )
12import Control.Lens
12import Control.Lens
13import Control.Monad
13import Control.Monad
14−import Data.List ( intercalate, isPrefixOf )
14+import Data.List
15import Data.List.Split
15import Data.List.Split
16import Data.Maybe ( fromMaybe, isJust, listToMaybe )
16import Data.Maybe ( fromMaybe, isJust, listToMaybe )
17+import Data.Monoid ( (<>) )
17import qualified Data.Set as Set
18import qualified Data.Set as Set
18import Data.String
19import Data.String
19import Data.Time
20import Data.Time
21+import qualified Distribution.Compat.ReadP as P
20import Distribution.Compiler
22import Distribution.Compiler
21import Distribution.Nixpkgs.Fetch
23import Distribution.Nixpkgs.Fetch
22import Distribution.Nixpkgs.Haskell
24import Distribution.Nixpkgs.Haskell
@@ -24,14 +26,13 @@ import Distribution.Nixpkgs.Haskell.FromCabal
24import Distribution.Nixpkgs.Haskell.FromCabal.Flags
26import Distribution.Nixpkgs.Haskell.FromCabal.Flags
25import qualified Distribution.Nixpkgs.Haskell.FromCabal.PostProcess as PP (pkg)
27import qualified Distribution.Nixpkgs.Haskell.FromCabal.PostProcess as PP (pkg)
26import qualified Distribution.Nixpkgs.Haskell.Hackage as DB
28import qualified Distribution.Nixpkgs.Haskell.Hackage as DB
27−import Distribution.Nixpkgs.Haskell.OrphanInstances ( )
28import Distribution.Nixpkgs.Haskell.PackageSourceSpec
29import Distribution.Nixpkgs.Haskell.PackageSourceSpec
29import Distribution.Nixpkgs.Meta
30import Distribution.Nixpkgs.Meta
30−import Distribution.Package ( packageId )
31import Distribution.PackageDescription ( mkFlagName, mkFlagAssignment, FlagAssignment )
31import Distribution.PackageDescription ( mkFlagName, mkFlagAssignment, FlagAssignment )
32−import Distribution.Parsec as P
32+import Distribution.Package ( packageId )
33import Distribution.Simple.Utils ( lowercase )
33import Distribution.Simple.Utils ( lowercase )
34import Distribution.System
34import Distribution.System
35+import Distribution.Text
35import Language.Nix
36import Language.Nix
36import Options.Applicative
37import Options.Applicative
37import Paths_cabal2nix ( version )
38import Paths_cabal2nix ( version )
@@ -93,8 +94,8 @@ options = Options
93 <*> optional (strOption $ long "hackage-db" <> metavar "PATH" <> help "path to the local hackage db in tar format")
94 <*> optional (strOption $ long "hackage-db" <> metavar "PATH" <> help "path to the local hackage db in tar format")
94 <*> switch (long "shell" <> help "generate output suitable for nix-shell")
95 <*> switch (long "shell" <> help "generate output suitable for nix-shell")
95 <*> many (strOption $ short 'f' <> long "flag" <> help "Cabal flag (may be specified multiple times)")
96 <*> many (strOption $ short 'f' <> long "flag" <> help "Cabal flag (may be specified multiple times)")
96− <*> option parseCabal (long "compiler" <> help "compiler to use when evaluating the Cabal file" <> value buildCompilerId <> showDefaultWith prettyShow)
97+ <*> option (readP parse) (long "compiler" <> help "compiler to use when evaluating the Cabal file" <> value buildCompilerId <> showDefaultWith display)
97− <*> option (maybeReader parsePlatform) (long "system" <> help "host system (in either short Nix format or full LLVM style) to use when evaluating the Cabal file" <> value buildPlatform <> showDefaultWith prettyShow)
98+ <*> option (maybeReader parsePlatform) (long "system" <> help "host system (in either short Nix format or full LLVM style) to use when evaluating the Cabal file" <> value buildPlatform <> showDefaultWith display)
98 <*> optional (strOption $ long "subpath" <> metavar "PATH" <> help "Path to Cabal file's directory relative to the URI (default is root directory)")
99 <*> optional (strOption $ long "subpath" <> metavar "PATH" <> help "Path to Cabal file's directory relative to the URI (default is root directory)")
99 <*> optional (option utcTimeReader (long "hackage-snapshot" <> help "hackage snapshot time, ISO format"))
100 <*> optional (option utcTimeReader (long "hackage-snapshot" <> help "hackage snapshot time, ISO format"))
100 <*> pure (\i -> Just (binding # (i, path # [ident # "pkgs", i])))
101 <*> pure (\i -> Just (binding # (i, path # [ident # "pkgs", i])))
@@ -109,8 +110,10 @@ utcTimeReader = eitherReader $ \arg ->
109 Nothing -> Left $ "Cannot parse date, ISO format used ('2017-11-20T12:18:35Z'): " ++ arg
110 Nothing -> Left $ "Cannot parse date, ISO format used ('2017-11-20T12:18:35Z'): " ++ arg
110 Just utcTime -> Right utcTime
111 Just utcTime -> Right utcTime
111
112
112−parseCabal :: Parsec a => ReadM a
113+readP :: P.ReadP a a -> ReadM a
113−parseCabal = eitherReader eitherParsec
114+readP p = eitherReader $ \s -> case [ r' | (r',"") <- P.readP_to_S p s ] of
115+ (r:_) -> Right r
116+ _ -> Left ("invalid value " ++ show s)
114
117
115-- | Replicate the normalization performed by GHC_CONVERT_CPU in GHC's aclocal.m4
118-- | Replicate the normalization performed by GHC_CONVERT_CPU in GHC's aclocal.m4
116-- since the output of that is what Cabal parses.
119-- since the output of that is what Cabal parses.
@@ -135,7 +138,6 @@ ghcConvertOS os = case os of
135 "watchos" -> "ios"
138 "watchos" -> "ios"
136 "tvos" -> "ios"
139 "tvos" -> "ios"
137 "linux-android" -> "linux-android"
140 "linux-android" -> "linux-android"
138− "linux-androideabi" -> "linux-androideabi"
139 _ | "linux-" `isPrefixOf` os -> "linux"
141 _ | "linux-" `isPrefixOf` os -> "linux"
140 _ -> fromMaybe os $ listToMaybe
142 _ -> fromMaybe os $ listToMaybe
141 [prefix | prefix <- osPrefixes, prefix `isPrefixOf` os]
143 [prefix | prefix <- osPrefixes, prefix `isPrefixOf` os]
@@ -162,7 +164,7 @@ parsePlatformParts = \case
162pinfo :: ParserInfo Options
164pinfo :: ParserInfo Options
163pinfo = info
165pinfo = info
164 ( helper
166 ( helper
165− <*> infoOption ("cabal2nix " ++ prettyShow version) (long "version" <> help "Show version number")
167+ <*> infoOption ("cabal2nix " ++ display version) (long "version" <> help "Show version number")
166 <*> options
168 <*> options
167 )
169 )
168 ( fullDesc
170 ( fullDesc
@@ -191,7 +193,7 @@ main = bracket (return ()) (\() -> hFlush stdout >> hFlush stderr) $ \() ->
191 cabal2nix =<< getArgs
193 cabal2nix =<< getArgs
192
194
193hpackOverrides :: Derivation -> Derivation
195hpackOverrides :: Derivation -> Derivation
194−hpackOverrides = over phaseOverrides (++ "prePatch = \"hpack\";")
196+hpackOverrides = over phaseOverrides (++ "preConfigure = \"hpack\";")
195 . set (libraryDepends . tool . contains (PP.pkg "hpack")) True
197 . set (libraryDepends . tool . contains (PP.pkg "hpack")) True
196
198
197cabal2nix' :: Options -> IO (Either Doc Derivation)
199cabal2nix' :: Options -> IO (Either Doc Derivation)
src/Distribution/Nixpkgs/Fetch.hs+1−3
@@ -161,9 +161,7 @@ fetchWith (supportsRev, kind, addArgs) source = do
161 ExitFailure _ -> return Nothing
161 ExitFailure _ -> return Nothing
162 ExitSuccess -> do
162 ExitSuccess -> do
163 buf <- BS.hGetContents stdoutH
163 buf <- BS.hGetContents stdoutH
164− let (l,ls) = case reverse (BS.lines buf) of
164+ let (l:ls) = reverse (BS.lines buf)
165− [] -> error "This can't happen, but GHC doesn't know that."
166− (x:xs) -> (x,xs)
167 buf' = BS.unlines (reverse ls)
165 buf' = BS.unlines (reverse ls)
168 case length ls of
166 case length ls of
169 0 -> return Nothing
167 0 -> return Nothing
src/Distribution/Nixpkgs/Haskell/Constraint.hs+1−1
@@ -9,7 +9,7 @@ import Distribution.Nixpkgs.Haskell.OrphanInstances ( )
9type Constraint = Dependency
9type Constraint = Dependency
10
10
11satisfiesConstraint :: PackageIdentifier -> Constraint -> Bool
11satisfiesConstraint :: PackageIdentifier -> Constraint -> Bool
12−satisfiesConstraint (PackageIdentifier pn v) (Dependency cn vr _) = (pn /= cn) || (v `withinRange` vr)
12+satisfiesConstraint (PackageIdentifier pn v) (Dependency cn vr) = (pn /= cn) || (v `withinRange` vr)
13
13
14satisfiesConstraints :: PackageIdentifier -> [Constraint] -> Bool
14satisfiesConstraints :: PackageIdentifier -> [Constraint] -> Bool
15satisfiesConstraints p = all (satisfiesConstraint p)
15satisfiesConstraints p = all (satisfiesConstraint p)
src/Distribution/Nixpkgs/Haskell/Derivation.hs+3−3
@@ -15,7 +15,7 @@ module Distribution.Nixpkgs.Haskell.Derivation
15
15
16import Control.DeepSeq
16import Control.DeepSeq
17import Control.Lens
17import Control.Lens
18−import Data.List ( isPrefixOf )
18+import Data.List
19import Data.Set ( Set )
19import Data.Set ( Set )
20import qualified Data.Set as Set
20import qualified Data.Set as Set
21import Data.Set.Lens
21import Data.Set.Lens
@@ -112,8 +112,8 @@ instance Pretty Derivation where
112 pPrint drv@MkDerivation {..} = funargs (map text ("mkDerivation" : toAscList inputs)) $$ vcat
112 pPrint drv@MkDerivation {..} = funargs (map text ("mkDerivation" : toAscList inputs)) $$ vcat
113 [ text "mkDerivation" <+> lbrace
113 [ text "mkDerivation" <+> lbrace
114 , nest 2 $ vcat
114 , nest 2 $ vcat
115− [ attr "pname" $ doubleQuotes $ pPrint (packageName _pkgid)
115+ [ attr "pname" $ doubleQuotes $ disp (packageName _pkgid)
116− , attr "version" $ doubleQuotes $ pPrint (packageVersion _pkgid)
116+ , attr "version" $ doubleQuotes $ disp (packageVersion _pkgid)
117 , pPrint _src
117 , pPrint _src
118 , onlyIf (_subpath /= ".") $ attr "postUnpack" postUnpack
118 , onlyIf (_subpath /= ".") $ attr "postUnpack" postUnpack
119 , onlyIf (_revision > 0) $ attr "revision" $ doubleQuotes $ int _revision
119 , onlyIf (_revision > 0) $ attr "revision" $ doubleQuotes $ int _revision
src/Distribution/Nixpkgs/Haskell/FromCabal.hs+11−11
@@ -58,14 +58,14 @@ finalizeGenericPackageDescription haskellResolver arch compiler flags constraint
58 }
58 }
59
59
60 jailbroken :: HaskellResolver -> HaskellResolver
60 jailbroken :: HaskellResolver -> HaskellResolver
61− jailbroken resolver (Dependency pkg _ _) = resolver (Dependency pkg anyVersion mempty)
61+ jailbroken resolver (Dependency pkg _) = resolver (Dependency pkg anyVersion)
62
62
63 withInternalLibs :: HaskellResolver -> HaskellResolver
63 withInternalLibs :: HaskellResolver -> HaskellResolver
64 withInternalLibs resolver d = depPkgName d `elem` internalNames || resolver d
64 withInternalLibs resolver d = depPkgName d `elem` internalNames || resolver d
65
65
66 internalNames :: [PackageName]
66 internalNames :: [PackageName]
67 internalNames = [ unqualComponentNameToPackageName n | (n,_) <- condSubLibraries genDesc ]
67 internalNames = [ unqualComponentNameToPackageName n | (n,_) <- condSubLibraries genDesc ]
68− ++ [ unqualComponentNameToPackageName n | LSubLibName n <- libName <$> subLibraries (packageDescription genDesc) ]
68+ ++ [ unqualComponentNameToPackageName n | Just n <- libName <$> subLibraries (packageDescription genDesc) ]
69
69
70 in case finalize (jailbroken (withInternalLibs haskellResolver)) of
70 in case finalize (jailbroken (withInternalLibs haskellResolver)) of
71 Left m -> case finalize (const True) of
71 Left m -> case finalize (const True) of
@@ -119,7 +119,7 @@ fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags Package
119 nixLicense = either fromSPDXLicense fromCabalLicense licenseRaw
119 nixLicense = either fromSPDXLicense fromCabalLicense licenseRaw
120
120
121 resolveInHackage :: Identifier -> Binding
121 resolveInHackage :: Identifier -> Binding
122− resolveInHackage i | (i^.ident) `elem` [ unPackageName n | (Dependency n _ _) <- missingDeps ] = bindNull i
122+ resolveInHackage i | (i^.ident) `elem` [ unPackageName n | (Dependency n _) <- missingDeps ] = bindNull i
123 | otherwise = binding # (i, path # ["self",i]) -- TODO: "self" shouldn't be hardcoded.
123 | otherwise = binding # (i, path # ["self",i]) -- TODO: "self" shouldn't be hardcoded.
124
124
125 -- TODO: This is all very confusing. Haskell packages refer to the Nixpkgs
125 -- TODO: This is all very confusing. Haskell packages refer to the Nixpkgs
@@ -136,19 +136,19 @@ fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags Package
136 resolveInNixpkgs :: Identifier -> Binding
136 resolveInNixpkgs :: Identifier -> Binding
137 resolveInNixpkgs i
137 resolveInNixpkgs i
138 | i `elem` ["clang","lldb","llvm"] = binding # (i, path # ["self","llvmPackages",i]) -- TODO: evil!
138 | i `elem` ["clang","lldb","llvm"] = binding # (i, path # ["self","llvmPackages",i]) -- TODO: evil!
139− | i == "gtk2" = binding # (i, path # ["pkgs","gtk2"]) -- TODO: these cases should not be necessary
139+ | i == "gtk2" = binding # (i, path # ["pkgs","gnome2","gtk"])
140− | i == "gtk3" = binding # (i, path # ["pkgs","gtk3"])
140+ | i == "gtk3" = binding # (i, path # ["pkgs","gnome3","gtk"])
141− | i == "gtksourceview3" = binding # (i, path # ["pkgs","gtksourceview3"])
141+ | i == "gtksourceview3" = binding # (i, path # ["pkgs","gnome3","gtksourceview"])
142− | i == "vte_291" = binding # (i, path # ["pkgs","vte"])
142+ | i == "vte_291" = binding # (i, path # ["pkgs","gnome3","vte"])
143 | Just p <- nixpkgsResolver i, init (view (reference . path) p) `Set.member` goodScopes = p
143 | Just p <- nixpkgsResolver i, init (view (reference . path) p) `Set.member` goodScopes = p
144 | otherwise = bindNull i
144 | otherwise = bindNull i
145
145
146 resolveInHackageThenNixpkgs :: Identifier -> Binding
146 resolveInHackageThenNixpkgs :: Identifier -> Binding
147− resolveInHackageThenNixpkgs i | haskellResolver (Dependency (mkPackageName (i^.ident)) anyVersion mempty) = resolveInHackage i
147+ resolveInHackageThenNixpkgs i | haskellResolver (Dependency (mkPackageName (i^.ident)) anyVersion) = resolveInHackage i
148 | otherwise = resolveInNixpkgs i
148 | otherwise = resolveInNixpkgs i
149
149
150 internalLibNames :: [PackageName]
150 internalLibNames :: [PackageName]
151− internalLibNames = [ unqualComponentNameToPackageName n | LSubLibName n <- libName <$> subLibraries ]
151+ internalLibNames = fmap unqualComponentNameToPackageName . catMaybes $ libName <$> subLibraries
152
152
153 doHaddockPhase :: Bool
153 doHaddockPhase :: Bool
154 doHaddockPhase | not (null internalLibNames) = False
154 doHaddockPhase | not (null internalLibNames) = False
@@ -158,7 +158,7 @@ fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags Package
158 convertBuildInfo :: Cabal.BuildInfo -> Nix.BuildInfo
158 convertBuildInfo :: Cabal.BuildInfo -> Nix.BuildInfo
159 convertBuildInfo Cabal.BuildInfo {..} | not buildable = mempty
159 convertBuildInfo Cabal.BuildInfo {..} | not buildable = mempty
160 convertBuildInfo Cabal.BuildInfo {..} = mempty
160 convertBuildInfo Cabal.BuildInfo {..} = mempty
161− & haskell .~ Set.fromList [ resolveInHackage (toNixName x) | (Dependency x _ _) <- targetBuildDepends, x `notElem` internalLibNames ]
161+ & haskell .~ Set.fromList [ resolveInHackage (toNixName x) | (Dependency x _) <- targetBuildDepends, x `notElem` internalLibNames ]
162 & system .~ Set.fromList [ resolveInNixpkgs y | x <- extraLibs, y <- libNixName x ]
162 & system .~ Set.fromList [ resolveInNixpkgs y | x <- extraLibs, y <- libNixName x ]
163 & pkgconfig .~ Set.fromList [ resolveInNixpkgs y | PkgconfigDependency x _ <- pkgconfigDepends, y <- libNixName (unPkgconfigName x) ]
163 & pkgconfig .~ Set.fromList [ resolveInNixpkgs y | PkgconfigDependency x _ <- pkgconfigDepends, y <- libNixName (unPkgconfigName x) ]
164 & tool .~ Set.fromList (map resolveInHackageThenNixpkgs . concatMap buildToolNixName
164 & tool .~ Set.fromList (map resolveInHackageThenNixpkgs . concatMap buildToolNixName
@@ -166,7 +166,7 @@ fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags Package
166
166
167 convertSetupBuildInfo :: Cabal.SetupBuildInfo -> Nix.BuildInfo
167 convertSetupBuildInfo :: Cabal.SetupBuildInfo -> Nix.BuildInfo
168 convertSetupBuildInfo bi = mempty
168 convertSetupBuildInfo bi = mempty
169− & haskell .~ Set.fromList [ resolveInHackage (toNixName x) | (Dependency x _ _) <- Cabal.setupDepends bi ]
169+ & haskell .~ Set.fromList [ resolveInHackage (toNixName x) | (Dependency x _) <- Cabal.setupDepends bi ]
170
170
171bindNull :: Identifier -> Binding
171bindNull :: Identifier -> Binding
172bindNull i = binding # (i, path # ["null"])
172bindNull i = binding # (i, path # ["null"])
src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration.hs+32−28
@@ -1,21 +1,16 @@
1{-# LANGUAGE RecordWildCards #-}
1{-# LANGUAGE RecordWildCards #-}
2+{-# LANGUAGE CPP #-}
2{-# LANGUAGE FlexibleInstances #-}
3{-# LANGUAGE FlexibleInstances #-}
3{-# LANGUAGE OverloadedStrings #-}
4{-# LANGUAGE OverloadedStrings #-}
4{-# LANGUAGE DeriveGeneric #-}
5{-# LANGUAGE DeriveGeneric #-}
5{-# OPTIONS_GHC -fno-warn-orphans #-}
6{-# OPTIONS_GHC -fno-warn-orphans #-}
6
7
7−module Distribution.Nixpkgs.Haskell.FromCabal.Configuration
8+module Distribution.Nixpkgs.Haskell.FromCabal.Configuration ( Configuration(..), readConfiguration, assertConsistency ) where
8− ( Configuration(..), readConfiguration, assertConsistency
9− )
10− where
11
9
12−import Prelude hiding ( fail )
13−
14−import Control.DeepSeq
15import Control.Exception ( throwIO )
10import Control.Exception ( throwIO )
11+import Control.DeepSeq
16import Control.Lens
12import Control.Lens
17−import Control.Monad hiding ( fail )
13+import Control.Monad
18−import Control.Monad.Fail
19import Data.Aeson
14import Data.Aeson
20import Data.Map as Map
15import Data.Map as Map
21import Data.Set as Set
16import Data.Set as Set
@@ -45,22 +40,14 @@ data Configuration = Configuration
45 -- role during dependency resolution.
40 -- role during dependency resolution.
46 , extraPackages :: [Constraint]
41 , extraPackages :: [Constraint]
47
42
43+ -- |We know that these packages won't build, so we give them an empty
44+ -- meta.hydraPlatforms attribute to avoid cluttering our Hydra output with
45+ -- lots of failure messages.
46+ , dontDistributePackages :: Map PackageName (Set Platform)
47+
48 -- |This information is used by the @hackage2nix@ utility to determine the
48 -- |This information is used by the @hackage2nix@ utility to determine the
49 -- 'maintainers' for a given Haskell package.
49 -- 'maintainers' for a given Haskell package.
50 , packageMaintainers :: Map Identifier (Set PackageName)
50 , packageMaintainers :: Map Identifier (Set PackageName)
51−
52− -- |These packages (by design) don't support certain platforms.
53− , unsupportedPlatforms :: Map PackageName (Set Platform)
54−
55− -- |These packages cannot be distributed by Hydra, i.e. because they have an
56− -- unfree license or depend on other tools that cannot be distributed for
57− -- some reason.
58− , dontDistributePackages :: Set PackageName
59−
60− -- |We know that these packages won't compile, so we mark them as broken and
61− -- also disable their meta.hydraPlatforms attribute to avoid cluttering our
62− -- Hydra job with lots of failure messages.
63− , brokenPackages :: [Constraint]
64 }
51 }
65 deriving (Show, Generic)
52 deriving (Show, Generic)
66
53
@@ -72,33 +59,50 @@ instance FromJSON Configuration where
72 <*> o .:? "core-packages" .!= mempty
59 <*> o .:? "core-packages" .!= mempty
73 <*> o .:? "default-package-overrides" .!= mempty
60 <*> o .:? "default-package-overrides" .!= mempty
74 <*> o .:? "extra-packages" .!= mempty
61 <*> o .:? "extra-packages" .!= mempty
75− <*> o .:? "package-maintainers" .!= mempty
76− <*> o .:? "unsupported-platforms" .!= mempty
77 <*> o .:? "dont-distribute-packages" .!= mempty
62 <*> o .:? "dont-distribute-packages" .!= mempty
78− <*> o .:? "broken-packages" .!= mempty
63+ <*> o .:? "package-maintainers" .!= mempty
79 parseJSON _ = error "invalid Configuration"
64 parseJSON _ = error "invalid Configuration"
80
65
81instance FromJSON Identifier where
66instance FromJSON Identifier where
82 parseJSON (String s) = pure (review ident (T.unpack s))
67 parseJSON (String s) = pure (review ident (T.unpack s))
83 parseJSON s = fail ("parseJSON: " ++ show s ++ " is not a valid Nix identifier")
68 parseJSON s = fail ("parseJSON: " ++ show s ++ " is not a valid Nix identifier")
84
69
70+#if MIN_VERSION_aeson(1,0,0)
71+
85instance FromJSONKey Identifier where
72instance FromJSONKey Identifier where
86 fromJSONKey = FromJSONKeyText parseKey
73 fromJSONKey = FromJSONKeyText parseKey
87
74
88instance FromJSONKey PackageName where
75instance FromJSONKey PackageName where
89 fromJSONKey = FromJSONKeyText parseKey
76 fromJSONKey = FromJSONKeyText parseKey
90
77
78+#elif MIN_VERSION_aeson(0,11,0)
79+
80+instance (FromJSON v) => FromJSON (Map Identifier v) where
81+ parseJSON = fmap (Map.mapKeys parseKey) . parseJSON
82+
83+instance (FromJSON v) => FromJSON (Map PackageName v) where
84+ parseJSON = fmap (Map.mapKeys parseKey) . parseJSON
85+
86+#else
87+
88+instance (Ord k, FromJSON k, FromJSON v) => FromJSON (Map k v) where
89+ parseJSON = fmap (Map.mapKeys parseKey) . parseJSON
90+
91+#endif
92+
91parseKey :: FromJSON k => Text -> k
93parseKey :: FromJSON k => Text -> k
92parseKey s = either error id (parseEither parseJSON (String s))
94parseKey s = either error id (parseEither parseJSON (String s))
93
95
94readConfiguration :: FilePath -> IO Configuration
96readConfiguration :: FilePath -> IO Configuration
97+readConfiguration path =
95−readConfiguration path = decodeFileEither path >>= either throwIO assertConsistency
98+ decodeFileEither path >>= either throwIO assertConsistency
96
99
97−assertConsistency :: MonadFail m => Configuration -> m Configuration
100+assertConsistency :: Monad m => Configuration -> m Configuration
98assertConsistency cfg@Configuration {..} = do
101assertConsistency cfg@Configuration {..} = do
99 let report msg = fail ("*** configuration error: " ++ msg)
102 let report msg = fail ("*** configuration error: " ++ msg)
103+
100 maintainedPackages = Set.unions (Map.elems packageMaintainers)
104 maintainedPackages = Set.unions (Map.elems packageMaintainers)
101− disabledPackages = dontDistributePackages `Set.union` Set.fromList (depPkgName <$> brokenPackages)
105+ disabledPackages = Map.keysSet dontDistributePackages
102 disabledMaintainedPackages = maintainedPackages `Set.intersection` disabledPackages
106 disabledMaintainedPackages = maintainedPackages `Set.intersection` disabledPackages
103 unless (Set.null disabledMaintainedPackages) $
107 unless (Set.null disabledMaintainedPackages) $
104 report ("disabled packages that have a maintainer: " ++ show disabledMaintainedPackages)
108 report ("disabled packages that have a maintainer: " ++ show disabledMaintainedPackages)
src/Distribution/Nixpkgs/Haskell/FromCabal/Flags.hs+2−9
@@ -4,7 +4,6 @@ module Distribution.Nixpkgs.Haskell.FromCabal.Flags ( configureCabalFlags ) wher
4
4
5import Distribution.Nixpkgs.Haskell.OrphanInstances ( )
5import Distribution.Nixpkgs.Haskell.OrphanInstances ( )
6
6
7−import Data.Char
8import Distribution.Package
7import Distribution.Package
9import Distribution.PackageDescription
8import Distribution.PackageDescription
10import Distribution.Version
9import Distribution.Version
@@ -16,7 +15,6 @@ configureCabalFlags' :: PackageIdentifier -> [(FlagName,Bool)]
16configureCabalFlags' (PackageIdentifier name version)
15configureCabalFlags' (PackageIdentifier name version)
17 | name == "accelerate-examples"= [disable "opencl"]
16 | name == "accelerate-examples"= [disable "opencl"]
18 | name == "arithmoi" = [disable "llvm"]
17 | name == "arithmoi" = [disable "llvm"]
19− | name == "bustle" = [disable "hgettext"] -- https://gitlab.freedesktop.org/bustle/bustle/issues/13
20 | name == "cabal-plan" = [enable "exe"]
18 | name == "cabal-plan" = [enable "exe"]
21 | name == "cassava" = [disable "bytestring--lt-0_10_4"]
19 | name == "cassava" = [disable "bytestring--lt-0_10_4"]
22 | name == "darcs" = [enable "library", enable "force-char8-encoding"]
20 | name == "darcs" = [enable "library", enable "force-char8-encoding"]
@@ -28,7 +26,6 @@ configureCabalFlags' (PackageIdentifier name version)
28 , enable "dbus"
26 , enable "dbus"
29 , disable "debuglocks"
27 , disable "debuglocks"
30 , enable "magicmime"
28 , enable "magicmime"
31− , enable "networkbsd"
32 , enable "pairing"
29 , enable "pairing"
33 , enable "production"
30 , enable "production"
34 , enable "s3"
31 , enable "s3"
@@ -47,7 +44,6 @@ configureCabalFlags' (PackageIdentifier name version)
47 | name == "io-streams" = [enable "NoInteractiveTests"]
44 | name == "io-streams" = [enable "NoInteractiveTests"]
48 | name == "liquid-fixpoint" = [enable "build-external"]
45 | name == "liquid-fixpoint" = [enable "build-external"]
49 | name == "pandoc" = [enable "https", disable "trypandoc"]
46 | name == "pandoc" = [enable "https", disable "trypandoc"]
50− | name == "pandoc-placetable" = [enable "inlineMarkdown"]
51 | name == "persistent-sqlite" = [enable "systemlib"]
47 | name == "persistent-sqlite" = [enable "systemlib"]
52 | name == "reactive-banana-wx" = [disable "buildExamples"]
48 | name == "reactive-banana-wx" = [disable "buildExamples"]
53 | name == "snap-server" = [enable "openssl"]
49 | name == "snap-server" = [enable "openssl"]
@@ -59,10 +55,7 @@ configureCabalFlags' (PackageIdentifier name version)
59 | otherwise = []
55 | otherwise = []
60
56
61enable :: String -> (FlagName,Bool)
57enable :: String -> (FlagName,Bool)
62−enable name = (mkFlagName' name, True)
58+enable name = (mkFlagName name, True)
63
59
64disable :: String -> (FlagName,Bool)
60disable :: String -> (FlagName,Bool)
65−disable name = (mkFlagName' name, False)
61+disable name = (mkFlagName name, False)
66−
67−mkFlagName' :: String -> FlagName
68−mkFlagName' = mkFlagName . map toLower
src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs+7−15
@@ -29,7 +29,6 @@ libNixName "appindicator-0.1" = return "libappindicator-gtk2"
29libNixName "appindicator3-0.1" = return "libappindicator-gtk3"
29libNixName "appindicator3-0.1" = return "libappindicator-gtk3"
30libNixName "asound" = return "alsaLib"
30libNixName "asound" = return "alsaLib"
31libNixName "b2" = return "libb2"
31libNixName "b2" = return "libb2"
32−libNixName "boost_context" = return "boost"
33libNixName "bz2" = return "bzip2"
32libNixName "bz2" = return "bzip2"
34libNixName "c++" = [] -- What is that?
33libNixName "c++" = [] -- What is that?
35libNixName "cairo-gobject" = return "cairo"
34libNixName "cairo-gobject" = return "cairo"
@@ -48,7 +47,7 @@ libNixName "gconf" = return "GConf"
48libNixName "gconf-2.0" = return "GConf"
47libNixName "gconf-2.0" = return "GConf"
49libNixName "gdk-2.0" = return "gtk2"
48libNixName "gdk-2.0" = return "gtk2"
50libNixName "gdk-3.0" = return "gtk3"
49libNixName "gdk-3.0" = return "gtk3"
51−libNixName "gdk-pixbuf-2.0" = return "gdk-pixbuf"
50+libNixName "gdk-pixbuf-2.0" = return "gdk_pixbuf"
52libNixName "gdk-x11-2.0" = return "gdk_x11"
51libNixName "gdk-x11-2.0" = return "gdk_x11"
53libNixName "gdk-x11-3.0" = return "gtk3"
52libNixName "gdk-x11-3.0" = return "gtk3"
54libNixName "gio-2.0" = return "glib"
53libNixName "gio-2.0" = return "glib"
@@ -56,7 +55,7 @@ libNixName "GL" = return "libGL"
56libNixName "GLU" = ["libGLU","libGL"]
55libNixName "GLU" = ["libGLU","libGL"]
57libNixName "glut" = ["freeglut","libGLU","libGL"]
56libNixName "glut" = ["freeglut","libGLU","libGL"]
58libNixName "gnome-keyring" = return "gnome-keyring"
57libNixName "gnome-keyring" = return "gnome-keyring"
59−libNixName "gnome-keyring-1" = return "libgnome-keyring"
58+libNixName "gnome-keyring-1" = return "libgnome_keyring"
60libNixName "gnome-vfs-2.0" = return "gnome-vfs"
59libNixName "gnome-vfs-2.0" = return "gnome-vfs"
61libNixName "gnome-vfs-module-2.0" = return "gnome-vfs_module"
60libNixName "gnome-vfs-module-2.0" = return "gnome-vfs_module"
62libNixName "gobject-2.0" = return "glib"
61libNixName "gobject-2.0" = return "glib"
@@ -85,8 +84,8 @@ libNixName "ImageMagick" = return "imagemagick"
85libNixName "Imlib2" = return "imlib2"
84libNixName "Imlib2" = return "imlib2"
86libNixName "iw" = return "wirelesstools"
85libNixName "iw" = return "wirelesstools"
87libNixName "jack" = return "libjack2"
86libNixName "jack" = return "libjack2"
88−libNixName "javascriptcoregtk-3.0" = return "webkitgtk24x-gtk3" -- These are the old APIs, of which 2.4 is the last provider, so map directly to that.
87+libNixName "javascriptcoregtk-3.0" = return "webkitgtk24x-gtk3" -- These are the old APIs, of which 2.4 is the last provider, so map directly to that.
89−libNixName "javascriptcoregtk-4.0" = return "webkitgtk"
88+libNixName "javascriptcoregtk-4.0" = return "webkitgtk" -- This is the current API, so let it reference an alias for the latest version.
90libNixName "jpeg" = return "libjpeg"
89libNixName "jpeg" = return "libjpeg"
91libNixName "jvm" = return "jdk"
90libNixName "jvm" = return "jdk"
92libNixName "lapack" = return "liblapack"
91libNixName "lapack" = return "liblapack"
@@ -95,9 +94,6 @@ libNixName "ldap" = return "openldap"
95libNixName "libavutil" = return "ffmpeg"
94libNixName "libavutil" = return "ffmpeg"
96libNixName "libgsasl" = return "gsasl"
95libNixName "libgsasl" = return "gsasl"
97libNixName "libpcre" = return "pcre"
96libNixName "libpcre" = return "pcre"
98−libNixName "libpcre2" = return "pcre2"
99−libNixName "libpcre2-8" = libNixName "libpcre2"
100−libNixName "libqrencode" = return "qrencode"
101libNixName "libR" = return "R"
97libNixName "libR" = return "R"
102libNixName "libsoup-gnome-2.4" = return "libsoup"
98libNixName "libsoup-gnome-2.4" = return "libsoup"
103libNixName "libsystemd" = return "systemd"
99libNixName "libsystemd" = return "systemd"
@@ -108,13 +104,9 @@ libNixName "libzmq" = return "zeromq"
108libNixName "m" = [] -- in stdenv
104libNixName "m" = [] -- in stdenv
109libNixName "magic" = return "file"
105libNixName "magic" = return "file"
110libNixName "MagickWand" = return "imagemagick"
106libNixName "MagickWand" = return "imagemagick"
111−libNixName "mnl" = return "libmnl"
112libNixName "mpi" = return "openmpi"
107libNixName "mpi" = return "openmpi"
113libNixName "ncursesw" = return "ncurses"
108libNixName "ncursesw" = return "ncurses"
114libNixName "netsnmp" = return "net_snmp"
109libNixName "netsnmp" = return "net_snmp"
115−libNixName "nix-expr" = return "nix"
116−libNixName "nix-main" = return "nix"
117−libNixName "nix-store" = return "nix"
118libNixName "notify" = return "libnotify"
110libNixName "notify" = return "libnotify"
119libNixName "odbc" = return "unixODBC"
111libNixName "odbc" = return "unixODBC"
120libNixName "openblas" = return "openblasCompat"
112libNixName "openblas" = return "openblasCompat"
@@ -161,9 +153,8 @@ libNixName "wayland-client" = return "wayland"
161libNixName "wayland-cursor" = return "wayland"
153libNixName "wayland-cursor" = return "wayland"
162libNixName "wayland-egl" = return "libGL"
154libNixName "wayland-egl" = return "libGL"
163libNixName "wayland-server" = return "wayland"
155libNixName "wayland-server" = return "wayland"
164−libNixName "webkit2gtk" = return "webkitgtk"
156+libNixName "webkit2gtk-4.0" = return "webkitgtk" -- This is the current API, so let it reference an alias for the latest version.
165−libNixName "webkit2gtk-4.0" = return "webkitgtk"
166−libNixName "webkit2gtk-web-extension-4.0" = return "webkitgtk"
157+libNixName "webkit2gtk-web-extension-4.0" = return "webkitgtk-web-extension" -- This package doesn't actually exist in nixpkgs at present.
167libNixName "webkitgtk-3.0" = return "webkitgtk24x-gtk3" -- These are the old APIs, of which 2.4 is the last provider, so map directly to that
158libNixName "webkitgtk-3.0" = return "webkitgtk24x-gtk3" -- These are the old APIs, of which 2.4 is the last provider, so map directly to that
168libNixName "X11" = return "libX11"
159libNixName "X11" = return "libX11"
169libNixName "x11" = return "xlibsWrapper"
160libNixName "x11" = return "xlibsWrapper"
@@ -203,6 +194,7 @@ buildToolNixName "nix-env" = return "nix"
203buildToolNixName "nix-hash" = return "nix"
194buildToolNixName "nix-hash" = return "nix"
204buildToolNixName "nix-instantiate" = return "nix"
195buildToolNixName "nix-instantiate" = return "nix"
205buildToolNixName "nix-store" = return "nix"
196buildToolNixName "nix-store" = return "nix"
197+buildToolNixName "pkg-config" = return "pkgconfig"
206buildToolNixName x = return (fromString x)
198buildToolNixName x = return (fromString x)
207
199
208-- | Helper function to extract the package name from a String that may or may
200-- | Helper function to extract the package name from a String that may or may
src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs+10−16
@@ -13,7 +13,6 @@ import Data.Set ( Set )
13import qualified Data.Set as Set
13import qualified Data.Set as Set
14import Distribution.Nixpkgs.Haskell
14import Distribution.Nixpkgs.Haskell
15import Distribution.Nixpkgs.Meta
15import Distribution.Nixpkgs.Meta
16−import Distribution.Nixpkgs.License
17import Distribution.Package
16import Distribution.Package
18import Distribution.System
17import Distribution.System
19import Distribution.Text
18import Distribution.Text
@@ -22,7 +21,7 @@ import Language.Nix
22
21
23postProcess :: Derivation -> Derivation
22postProcess :: Derivation -> Derivation
24postProcess deriv =
23postProcess deriv =
25− foldr (.) id [ f | (Dependency n vr _, f) <- hooks, packageName deriv == n, packageVersion deriv `withinRange` vr ]
24+ foldr (.) id [ f | (Dependency n vr, f) <- hooks, packageName deriv == n, packageVersion deriv `withinRange` vr ]
26 . fixGtkBuilds
25 . fixGtkBuilds
27 . fixBuildDependsForTools
26 . fixBuildDependsForTools
28 $ deriv
27 $ deriv
@@ -79,7 +78,7 @@ hooks =
79 , ("alsa-core", over (metaSection . platforms) (Set.filter (\(Platform _ os) -> os == Linux)))
78 , ("alsa-core", over (metaSection . platforms) (Set.filter (\(Platform _ os) -> os == Linux)))
80 , ("bindings-GLFW", over (libraryDepends . system) (Set.union (Set.fromList [bind "pkgs.xorg.libXext", bind "pkgs.xorg.libXfixes"])))
79 , ("bindings-GLFW", over (libraryDepends . system) (Set.union (Set.fromList [bind "pkgs.xorg.libXext", bind "pkgs.xorg.libXfixes"])))
81 , ("bindings-lxc", over (metaSection . platforms) (Set.filter (\(Platform _ os) -> os == Linux)))
80 , ("bindings-lxc", over (metaSection . platforms) (Set.filter (\(Platform _ os) -> os == Linux)))
82− , ("bustle", bustleOverrides)
81+ , ("bustle", set (libraryDepends . pkgconfig . contains "system-glib = pkgs.glib") True)
83 , ("Cabal", set doCheck False) -- test suite doesn't work in Nix
82 , ("Cabal", set doCheck False) -- test suite doesn't work in Nix
84 , ("Cabal >2.2", over (setupDepends . haskell) (Set.union (Set.fromList [self "mtl", self "parsec"]))) -- https://github.com/haskell/cabal/issues/5391
83 , ("Cabal >2.2", over (setupDepends . haskell) (Set.union (Set.fromList [self "mtl", self "parsec"]))) -- https://github.com/haskell/cabal/issues/5391
85 , ("cabal-helper", set doCheck False) -- https://github.com/DanielG/cabal-helper/issues/17
84 , ("cabal-helper", set doCheck False) -- https://github.com/DanielG/cabal-helper/issues/17
@@ -90,7 +89,7 @@ hooks =
90 , ("dns", set testTarget "spec") -- don't execute tests that try to access the network
89 , ("dns", set testTarget "spec") -- don't execute tests that try to access the network
91 , ("eventstore", over (metaSection . platforms) (Set.filter (\(Platform arch _) -> arch == X86_64)))
90 , ("eventstore", over (metaSection . platforms) (Set.filter (\(Platform arch _) -> arch == X86_64)))
92 , ("freenect < 1.2.1", over configureFlags (Set.union (Set.fromList ["--extra-include-dirs=${pkgs.freenect}/include/libfreenect", "--extra-lib-dirs=${pkgs.freenect}/lib"])))
91 , ("freenect < 1.2.1", over configureFlags (Set.union (Set.fromList ["--extra-include-dirs=${pkgs.freenect}/include/libfreenect", "--extra-lib-dirs=${pkgs.freenect}/lib"])))
93− , ("fltkhs", set (libraryDepends . system . contains (pkg "fltk14")) True . over (libraryDepends . pkgconfig) (Set.union (pkgs ["libGLU", "libGL"]))) -- TODO: fltk14 belongs into the *setup* dependencies.
92+ , ("fltkhs", set (libraryDepends . system . contains (pkg "fltk14")) True . set (libraryDepends . pkgconfig . contains (pkg "libGLU_combined")) True) -- TODO: fltk14 belongs into the *setup* dependencies.
94 , ("gf", set phaseOverrides gfPhaseOverrides . set doCheck False)
93 , ("gf", set phaseOverrides gfPhaseOverrides . set doCheck False)
95 , ("gi-cairo", giCairoPhaseOverrides) -- https://github.com/haskell-gi/haskell-gi/issues/36
94 , ("gi-cairo", giCairoPhaseOverrides) -- https://github.com/haskell-gi/haskell-gi/issues/36
96 , ("gi-gdk", set runHaddock True )
95 , ("gi-gdk", set runHaddock True )
@@ -230,12 +229,13 @@ gitAnnexHook = set phaseOverrides gitAnnexOverrides
230 where
229 where
231 gitAnnexOverrides = unlines
230 gitAnnexOverrides = unlines
232 [ "preConfigure = \"export HOME=$TEMPDIR; patchShebangs .\";"
231 [ "preConfigure = \"export HOME=$TEMPDIR; patchShebangs .\";"
233− , "postBuild = ''"
232+ , "installPhase = \"make PREFIX=$out BUILDER=: install\";"
233+ , "checkPhase = ''"
234 , " ln -sf dist/build/git-annex/git-annex git-annex"
234 , " ln -sf dist/build/git-annex/git-annex git-annex"
235 , " ln -sf git-annex git-annex-shell"
235 , " ln -sf git-annex git-annex-shell"
236+ , " export PATH+=\":$PWD\""
237+ , " git-annex test"
236 , "'';"
238 , "'';"
237− , "installPhase = \"make PREFIX=$out BUILDER=: install install-completions\";"
238− , "checkPhase = ''PATH+=\":$PWD\" git-annex test'';"
239 , "enableSharedExecutables = false;"
239 , "enableSharedExecutables = false;"
240 ]
240 ]
241 buildInputs = pkgs ["git","rsync","gnupg","curl","wget","lsof","openssh","which","bup","perl"]
241 buildInputs = pkgs ["git","rsync","gnupg","curl","wget","lsof","openssh","which","bup","perl"]
@@ -256,7 +256,7 @@ gfPhaseOverrides = unlines
256 , " sed -i \"s|numJobs (bf bi)++||\" ./Setup.hs"
256 , " sed -i \"s|numJobs (bf bi)++||\" ./Setup.hs"
257 -- Parallel compilation fails. Disable it.
257 -- Parallel compilation fails. Disable it.
258 , "'';"
258 , "'';"
259− , "preBuild = ''export LD_LIBRARY_PATH=`pwd`/dist/build''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH'';"
259+ , "preBuild = ''export LD_LIBRARY_PATH=`pwd`/dist/build:$LD_LIBRARY_PATH'';"
260 -- The build step itself, after having built the library, needs to be able
260 -- The build step itself, after having built the library, needs to be able
261 -- to find the library it just built in order to compile grammar files.
261 -- to find the library it just built in order to compile grammar files.
262 ]
262 ]
@@ -292,8 +292,8 @@ darcsInstallPostInstall = unlines
292xmonadPostInstall :: String
292xmonadPostInstall :: String
293xmonadPostInstall = unlines
293xmonadPostInstall = unlines
294 [ "postInstall = ''"
294 [ "postInstall = ''"
295− , " install -D man/xmonad.1 ''${!outputDoc}/share/man/man1/xmonad.1"
295+ , " install -D man/xmonad.1 $doc/share/man/man1/xmonad.1"
296− , " install -D man/xmonad.hs ''${!outputDoc}/share/doc/$name/sample-xmonad.hs"
296+ , " install -D man/xmonad.hs $doc/share/doc/$name/sample-xmonad.hs"
297 , "'';"
297 , "'';"
298 ]
298 ]
299
299
@@ -401,9 +401,3 @@ pandocOverrides = set phaseOverrides postInstall
401 , " mv \"man/\"*.1 $out/share/man/man1/"
401 , " mv \"man/\"*.1 $out/share/man/man1/"
402 , "'';"
402 , "'';"
403 ]
403 ]
404−
405−bustleOverrides :: Derivation -> Derivation
406−bustleOverrides = set (libraryDepends . pkgconfig . contains "system-glib = pkgs.glib") True
407− . set (executableDepends . pkgconfig . contains "gio-unix = null") False
408− . set (metaSection . license) (Known "stdenv.lib.licenses.lgpl21Plus")
409− . set (metaSection . hydraPlatforms) allKnownPlatforms
src/Distribution/Nixpkgs/Haskell/OrphanInstances.hs+3−28
@@ -9,12 +9,9 @@ import qualified Data.Text as T
9import Data.Yaml
9import Data.Yaml
10import Distribution.Compiler
10import Distribution.Compiler
11import Distribution.Package
11import Distribution.Package
12−import Distribution.Parsec
13import Distribution.System
12import Distribution.System
14−import Distribution.Pretty as Cabal
13+import Distribution.Text
15−import qualified Data.Version as Base
16import Distribution.Version
14import Distribution.Version
17−import Language.Nix.PrettyPrinting as Nix
18
15
19instance NFData CompilerInfo
16instance NFData CompilerInfo
20instance NFData AbiTag
17instance NFData AbiTag
@@ -52,10 +49,6 @@ instance FromJSON PackageIdentifier where
52 parseJSON (String s) = return (fromString (T.unpack s))
49 parseJSON (String s) = return (fromString (T.unpack s))
53 parseJSON s = fail ("parseJSON: " ++ show s ++ " is not a valid Haskell package identifier")
50 parseJSON s = fail ("parseJSON: " ++ show s ++ " is not a valid Haskell package identifier")
54
51
55−instance FromJSON VersionRange where
56− parseJSON (String s) = return (fromString (T.unpack s))
57− parseJSON s = fail ("parseJSON: " ++ show s ++ " is not a valid Cabal VersionRange")
58−
59instance FromJSON Dependency where
52instance FromJSON Dependency where
60 parseJSON (String s) = return (fromString (T.unpack s))
53 parseJSON (String s) = return (fromString (T.unpack s))
61 parseJSON s = fail ("parseJSON: " ++ show s ++ " is not a valid Haskell Dependency")
54 parseJSON s = fail ("parseJSON: " ++ show s ++ " is not a valid Haskell Dependency")
@@ -64,25 +57,7 @@ instance FromJSON CompilerInfo where
64 parseJSON (String s) = return (unknownCompilerInfo (fromString (T.unpack s)) NoAbiTag)
57 parseJSON (String s) = return (unknownCompilerInfo (fromString (T.unpack s)) NoAbiTag)
65 parseJSON s = fail ("parseJSON: " ++ show s ++ " is not a valid Haskell compiler")
58 parseJSON s = fail ("parseJSON: " ++ show s ++ " is not a valid Haskell compiler")
66
59
67−instance Nix.Pretty Version where
68− pPrint = pretty
69−
70−instance Nix.Pretty PackageName where
71− pPrint = pretty
72−
73−instance Nix.Pretty PackageIdentifier where
74− pPrint = pretty
75−
76−instance Nix.Pretty CompilerId where
77− pPrint = pretty
78−
79−instance Nix.Pretty Platform where
80− pPrint = pretty
81−
82−instance Nix.Pretty Base.Version where
83− pPrint = text . Base.showVersion
84−
85-- parsing tools
60-- parsing tools
86
61
87−text2isString :: Parsec a => String -> String -> a
62+text2isString :: Text a => String -> String -> a
88−text2isString t s = fromMaybe (error ("fromString: " ++ show s ++ " is not a valid " ++ t)) (simpleParsec s)
63+text2isString t s = fromMaybe (error ("fromString: " ++ show s ++ " is not a valid " ++ t)) (simpleParse s)
src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hs+8−9
@@ -11,18 +11,16 @@ import qualified Data.ByteString.Char8 as BS
11import Data.List ( isSuffixOf, isPrefixOf )
11import Data.List ( isSuffixOf, isPrefixOf )
12import qualified Data.Map as DB
12import qualified Data.Map as DB
13import Data.Maybe
13import Data.Maybe
14−import qualified Data.Text as T
15−import qualified Data.Text.Encoding as T
16import Data.Time
14import Data.Time
17import Distribution.Nixpkgs.Fetch
15import Distribution.Nixpkgs.Fetch
18import Distribution.Nixpkgs.Hashes
16import Distribution.Nixpkgs.Hashes
19import qualified Distribution.Nixpkgs.Haskell.Hackage as DB
17import qualified Distribution.Nixpkgs.Haskell.Hackage as DB
20−import Distribution.Nixpkgs.Haskell.OrphanInstances ( )
21import qualified Distribution.Package as Cabal
18import qualified Distribution.Package as Cabal
22import Distribution.PackageDescription
19import Distribution.PackageDescription
23import qualified Distribution.PackageDescription as Cabal
20import qualified Distribution.PackageDescription as Cabal
24import Distribution.PackageDescription.Parsec as Cabal
21import Distribution.PackageDescription.Parsec as Cabal
25−import Distribution.Parsec
22+import Distribution.Parsec.Common (showPError)
23+import Distribution.Text ( simpleParse, display )
26import Distribution.Version
24import Distribution.Version
27import qualified Hpack.Config as Hpack
25import qualified Hpack.Config as Hpack
28import qualified Hpack.Render as Hpack
26import qualified Hpack.Render as Hpack
@@ -31,7 +29,8 @@ import System.Directory ( doesDirectoryExist, doesFileExist, createDirectoryIfMi
31import System.Exit ( exitFailure )
29import System.Exit ( exitFailure )
32import System.FilePath ( (</>), (<.>) )
30import System.FilePath ( (</>), (<.>) )
33import System.IO
31import System.IO
34−import Text.PrettyPrint.HughesPJClass hiding ( first )
32+import qualified Data.Text as T
33+import qualified Data.Text.Encoding as T
35
34
36data HpackUse
35data HpackUse
37 = ForceHpack
36 = ForceHpack
@@ -108,12 +107,12 @@ fromDB hackageDBIO pkg = do
108 return (ds, setCabalFileHash (DB.cabalFileSha256 vd) (DB.cabalFile vd))
107 return (ds, setCabalFileHash (DB.cabalFileSha256 vd) (DB.cabalFile vd))
109 where
108 where
110 pkgId :: Cabal.PackageIdentifier
109 pkgId :: Cabal.PackageIdentifier
111− pkgId = fromMaybe (error ("invalid Haskell package id " ++ show pkg)) (simpleParsec pkg)
110+ pkgId = fromMaybe (error ("invalid Haskell package id " ++ show pkg)) (simpleParse pkg)
112 name = Cabal.packageName pkgId
111 name = Cabal.packageName pkgId
113
112
114− unknownPackageError = fail $ "No such package " ++ prettyShow pkgId ++ " in the cabal database. Did you run cabal update?"
113+ unknownPackageError = fail $ "No such package " ++ display pkgId ++ " in the cabal database. Did you run cabal update?"
115
114
116− url = "mirror://hackage/" ++ prettyShow pkgId ++ ".tar.gz"
115+ url = "mirror://hackage/" ++ display pkgId ++ ".tar.gz"
117
116
118 version :: Version
117 version :: Version
119 version = Cabal.packageVersion pkgId
118 version = Cabal.packageVersion pkgId
@@ -176,7 +175,7 @@ sourceFromHackage optHash pkgId cabalDir = do
176 exitFailure
175 exitFailure
177
176
178showPackageIdentifier :: Cabal.GenericPackageDescription -> String
177showPackageIdentifier :: Cabal.GenericPackageDescription -> String
179−showPackageIdentifier pkgDesc = name ++ "-" ++ prettyShow version where
178+showPackageIdentifier pkgDesc = name ++ "-" ++ display version where
180 pkgId = Cabal.package . Cabal.packageDescription $ pkgDesc
179 pkgId = Cabal.package . Cabal.packageDescription $ pkgDesc
181 name = Cabal.unPackageName (Cabal.packageName pkgId)
180 name = Cabal.unPackageName (Cabal.packageName pkgId)
182 version = Cabal.packageVersion pkgId
181 version = Cabal.packageVersion pkgId
update-stackage.sh+9−12
@@ -2,14 +2,11 @@
2
2
3set -eu -o pipefail
3set -eu -o pipefail
4
4
5−cd "$(dirname "$0")"
5+tmpfile=$(mktemp "stackage-update.XXXXXXX")
6+trap "rm $tmpfile" 0
6
7
7−tmpfile=$(mktemp "update-stackage.XXXXXXX")
8−# shellcheck disable=SC2064
9−trap "rm ${tmpfile} ${tmpfile}.new" 0
10−
11−curl -L -s "https://stackage.org/lts/cabal.config" >"$tmpfile"
8+curl -L -s "https://www.stackage.org/lts/cabal.config" >"$tmpfile"
12−version=$(sed -rn "s/^--.*http:..(www.)?stackage.org.snapshot.lts-//p" "$tmpfile")
9+version=$(sed -n "s/^--.*http:..www.stackage.org.snapshot.lts-//p" "$tmpfile")
13
10
14# Create a simple yaml version of the file.
11# Create a simple yaml version of the file.
15sed -r \
12sed -r \
@@ -19,13 +16,12 @@ sed -r \
19 -e 's|,$||' \
16 -e 's|,$||' \
20 -e '/installed$/d' \
17 -e '/installed$/d' \
21 -e '/^$/d' \
18 -e '/^$/d' \
22− < "${tmpfile}" | sort --ignore-case >"${tmpfile}.new"
19+ -i "$tmpfile"
23
20
24# Drop restrictions on some tools where we always want the latest version.
21# Drop restrictions on some tools where we always want the latest version.
25sed -r \
22sed -r \
26 -e '/ cabal-install /d' \
23 -e '/ cabal-install /d' \
27 -e '/ cabal2nix /d' \
24 -e '/ cabal2nix /d' \
28− -e '/ cabal2spec /d' \
29 -e '/ distribution-nixpkgs /d' \
25 -e '/ distribution-nixpkgs /d' \
30 -e '/ git-annex /d' \
26 -e '/ git-annex /d' \
31 -e '/ hindent /d' \
27 -e '/ hindent /d' \
@@ -35,16 +31,17 @@ sed -r \
35 -e '/ hopenssl /d' \
31 -e '/ hopenssl /d' \
36 -e '/ jailbreak-cabal /d' \
32 -e '/ jailbreak-cabal /d' \
37 -e '/ json-autotype/d' \
33 -e '/ json-autotype/d' \
34+ -e '/ lambdabot-core /d' \
35+ -e '/ lambdabot-irc-plugins /d' \
38 -e '/ language-nix /d' \
36 -e '/ language-nix /d' \
39 -e '/ shake /d' \
37 -e '/ shake /d' \
40 -e '/ ShellCheck /d' \
38 -e '/ ShellCheck /d' \
41 -e '/ stack /d' \
39 -e '/ stack /d' \
42 -e '/ weeder /d' \
40 -e '/ weeder /d' \
43− < "${tmpfile}.new" > "${tmpfile}"
41+ -i "$tmpfile"
44
42
45# Drop the previous configuration ...
43# Drop the previous configuration ...
46−# shellcheck disable=SC1004
47−sed -e '/ # LTS Haskell/,/^$/c \TODO\
44+sed -e '/# LTS Haskell/,/^$/c \TODO\
48' -i nixpkgs/pkgs/development/haskell-modules/configuration-hackage2nix.yaml
45' -i nixpkgs/pkgs/development/haskell-modules/configuration-hackage2nix.yaml
49
46
50# ... and replace it with the new one.
47# ... and replace it with the new one.