git.iko.soy/typeable/cabal2nix
on master help sign in
Re-factor the repository into separate (re-usable) components.

- lens-construction-helper provides basically just one function, 'create', which acts like a constructor by combining data-default with a lens setter. The name for that library is bad, and having that one-function library is bad in the first place, but I haven't figured out a better solution yet. - language-nix contains types and functions aimed at parsing, manipulating, and pretty-printing the Nix language. - distribution-nixpkgs contains code that reads the Nixpkgs set, fetches source archives to compute their hashes, and converts Cabal files into Nix expressions. It depends on lens-construction-helper and language-nix. - cabal2nix provides the cabal2nix utility on top of distribution-nixpkgs. - hackage2nix provides the hackage2nix utility on top of distribution-nixpkgs.

commitc619fff73a3eb8ffea54f2290716892ed31bc6e0 authorPeter Simons <simons@cryp.to> dateSun 30 Aug 2015, 03:49 (11 years ago) parentd89134f
69 files changed+856−387
.gitignore+7−9 .travis.yml+4−10 GNUmakefile+104−22 cabal2nix.cabal−191 LICENSE → cabal2nix/LICENSE Setup.lhs → cabal2nix/Setup.lhs cabal2nix/cabal2nix.cabal+39 doc/.gitignore → cabal2nix/doc/.gitignore doc/GNUmakefile → cabal2nix/doc/GNUmakefile doc/hal8-folien.md → cabal2nix/doc/hal8-folien.md doc/hal8.md → cabal2nix/doc/hal8.md doc/nixos-meetup-3-slides.md → cabal2nix/doc/nixos-meetup-3-slides.md doc/user-guide.md → cabal2nix/doc/user-guide.md cabal2nix/package.yaml+28 cabal2nix/Main.hs → cabal2nix/src/Main.hs+4−3 distribution-nixpkgs/LICENSE+30 distribution-nixpkgs/Setup.lhs+8 distribution-nixpkgs/distribution-nixpkgs.cabal+105 package.yaml → distribution-nixpkgs/package.yaml+30−54 src/Distribution/Nixpkgs/Fetch.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Fetch.hs src/Distribution/Nixpkgs/Haskell.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell.hs src/Distribution/Nixpkgs/Haskell/BuildInfo.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/BuildInfo.hs+3−2 src/Distribution/Nixpkgs/Haskell/Constraint.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/Constraint.hs src/Distribution/Nixpkgs/Haskell/Derivation.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/Derivation.hs+4−2 src/Distribution/Nixpkgs/Haskell/FromCabal.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal.hs+2−1 src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration.hs src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration/GHC7102.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration/GHC7102.hs src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration/Maintainers.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration/Maintainers.hs+1−1 src/Distribution/Nixpkgs/Haskell/FromCabal/Flags.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/Flags.hs src/Distribution/Nixpkgs/Haskell/FromCabal/License.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/License.hs src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs src/Distribution/Nixpkgs/Haskell/FromCabal/Normalize.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/Normalize.hs+1−1 src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs+2−1 src/Distribution/Nixpkgs/Haskell/Hackage.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/Hackage.hs src/Distribution/Nixpkgs/Haskell/HackageGit.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/HackageGit.hs src/Distribution/Nixpkgs/Haskell/OrphanInstances.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/OrphanInstances.hs src/Internal/HaskellPackage.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hs+1−1 src/Distribution/Nixpkgs/License.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/License.hs src/Distribution/Nixpkgs/Meta.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Meta.hs+5−5 src/Distribution/Nixpkgs/PackageMap.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/PackageMap.hs+3−2 src/Internal/PrettyPrinting.hs → distribution-nixpkgs/src/Internal/PrettyPrinting.hs test/Main.hs → distribution-nixpkgs/test/Main.hs+13−20 hackage2nix/.gitignore+4 hackage2nix/LICENSE+30 hackage2nix/Setup.lhs+8 hackage2nix/hackage2nix.cabal+40 hackage2nix/package.yaml+33 hackage2nix/Main.hs → hackage2nix/src/Main.hs+5−5 update-nixpkgs.sh → hackage2nix/update-nixpkgs.sh language-nix/LICENSE+30 language-nix/Setup.lhs+8 language-nix/language-nix.cabal+39 language-nix/package.yaml+27 src/Language/Nix.hs → language-nix/src/Language/Nix.hs src/Language/Nix/Binding.hs → language-nix/src/Language/Nix/Binding.hs+3−2 src/Language/Nix/Identifier.hs → language-nix/src/Language/Nix/Identifier.hs+3−2 src/Language/Nix/Path.hs → language-nix/src/Language/Nix/Path.hs+3−2 lens-construction-helper/LICENSE+30 lens-construction-helper/Setup.lhs+8 lens-construction-helper/lens-construction-helper.cabal+32 lens-construction-helper/package.yaml+20 lens-construction-helper/src/Control/Lens/Create.hs+9 release-cabal2nix.nix+20 release-distribution-nixpkgs.nix+26 release-hackage2nix.nix+19 release-language-nix.nix+16 release-lens-construction-helper.nix+11 release.nix+38−38 src/Internal/Lens.hs−13
.gitignore+7−9
@@ -1,20 +1,18 @@
11# ignore build Cabal build files
22
3−/Setup
4−/Setup.hi
5−/Setup.o
6−/dist/*
3+.cabal-sandbox
4+Setup
5+Setup.hi
6+Setup.o
7+add-source-timestamps
8+cabal.sandbox.config
9+dist
710
811# vim tmp files
912
1013*.swo
1114*.swp
1215
13−# hackage2nix ususally needs those two repositories around
14−
15−/hackage/*
16−/nixpkgs/*
17−
1816# haskell-mode generates files, too
1917
2018TAGS
.travis.yml+4−10
@@ -7,20 +7,14 @@ before_install:
77 - travis_retry sudo add-apt-repository -y ppa:hvr/ghc
88 - travis_retry sudo apt-get update
99 - travis_retry sudo apt-get install cabal-install-$CABALVER ghc-$GHCVER happy alex
10− - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH
10+ - export PATH=$HOME/.cabal/bin:/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH
1111
1212install:
1313 - cabal --version
1414 - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"
1515 - travis_retry cabal update
16− - cabal install -j --only-dependencies --enable-tests
16+ - cabal install hpack
1717
1818script:
19− - cabal check
20− - cabal configure
21− - cabal sdist
22− - tar xf dist/cabal2nix-*.tar.gz
23− - cd cabal2nix-*
24− - cabal configure -v --enable-tests --ghc-option=-Wall --ghc-option=-Werror --ghc-option=-j
25− - cabal build -j
26− - cabal test -j
19+ - make
20+ - make check
GNUmakefile+104−22
@@ -1,33 +1,115 @@
11# GNUmakefile
22
3−.PHONY: all configure build check haddock hlint clean packunused
3+srcdir := $(PWD)
44
5−all:: check
5+.PHONY: all check clean release hlint
66
7−configure:: cabal2nix.cabal
8− @cabal -v0 configure --ghc-option=-j --enable-tests
7+all:: lens-construction-helper/lens-construction-helper.cabal \
8+ language-nix/language-nix.cabal \
9+ distribution-nixpkgs/distribution-nixpkgs.cabal \
10+ cabal2nix/cabal2nix.cabal \
11+ hackage2nix/hackage2nix.cabal \
12+ lens-construction-helper/cabal.sandbox.config \
13+ language-nix/cabal.sandbox.config \
14+ distribution-nixpkgs/cabal.sandbox.config \
15+ cabal2nix/cabal.sandbox.config \
16+ hackage2nix/cabal.sandbox.config \
17+ lens-construction-helper/dist/setup-config \
18+ language-nix/dist/setup-config \
19+ distribution-nixpkgs/dist/setup-config \
20+ cabal2nix/dist/setup-config \
21+ hackage2nix/dist/setup-config
922
10−build:: configure
11− @cabal build -j
23+check:: all
24+ cd lens-construction-helper && cabal test
25+ cd language-nix && cabal test
26+ cd distribution-nixpkgs && cabal test
27+ cd cabal2nix && cabal test
28+ cd hackage2nix && cabal test
1229
13−check:: haddock
14− @cabal test -j
15−
16−haddock:: build
17− @cabal haddock --hyperlink-source
30+release:: release-lens-construction-helper.nix \
31+ release-language-nix.nix \
32+ release-distribution-nixpkgs.nix \
33+ release-cabal2nix.nix \
34+ release-hackage2nix.nix \
1835
1936hlint::
20− hlint src
37+ hlint */src */test
38+
39+cabal2nix/cabal2nix.cabal : cabal2nix/package.yaml
40+ cd $(dir $@) && hpack && cabal check
41+ touch $@
42+
43+distribution-nixpkgs/distribution-nixpkgs.cabal : distribution-nixpkgs/package.yaml
44+ cd $(dir $@) && hpack && cabal check
45+ touch $@
46+
47+hackage2nix/hackage2nix.cabal : hackage2nix/package.yaml
48+ cd $(dir $@) && hpack && cabal check
49+ touch $@
50+
51+language-nix/language-nix.cabal : language-nix/package.yaml
52+ cd $(dir $@) && hpack && cabal check
53+ touch $@
54+
55+lens-construction-helper/lens-construction-helper.cabal : lens-construction-helper/package.yaml
56+ cd $(dir $@) && hpack && cabal check
57+ touch $@
58+
59+.sandbox/cabal.sandbox.config:
60+ mkdir $(dir $@) && cd $(dir $@) && cabal sandbox init && cabal sandbox add-source $(srcdir)/lens-construction-helper $(srcdir)/language-nix $(srcdir)/distribution-nixpkgs $(srcdir)/cabal2nix $(srcdir)/hackage2nix
61+
62+lens-construction-helper/cabal.sandbox.config : .sandbox/cabal.sandbox.config
63+ cd $(dir $@) && cabal sandbox init --sandbox=$(srcdir)/.sandbox/.cabal-sandbox
64+ @touch $@
65+
66+language-nix/cabal.sandbox.config : .sandbox/cabal.sandbox.config
67+ cd $(dir $@) && cabal sandbox init --sandbox=$(srcdir)/.sandbox/.cabal-sandbox
68+ @touch $@
69+
70+distribution-nixpkgs/cabal.sandbox.config : .sandbox/cabal.sandbox.config
71+ cd $(dir $@) && cabal sandbox init --sandbox=$(srcdir)/.sandbox/.cabal-sandbox
72+ @touch $@
73+
74+cabal2nix/cabal.sandbox.config : .sandbox/cabal.sandbox.config
75+ cd $(dir $@) && cabal sandbox init --sandbox=$(srcdir)/.sandbox/.cabal-sandbox
76+ @touch $@
77+
78+hackage2nix/cabal.sandbox.config : .sandbox/cabal.sandbox.config
79+ cd $(dir $@) && cabal sandbox init --sandbox=$(srcdir)/.sandbox/.cabal-sandbox
80+ @touch $@
81+
82+lens-construction-helper/dist/setup-config : lens-construction-helper/cabal.sandbox.config
83+ cd $(dir $<) && cabal install --dependencies-only && cabal configure --enable-tests
84+ @touch $@
85+
86+language-nix/dist/setup-config : language-nix/cabal.sandbox.config
87+ cd $(dir $<) && cabal install --dependencies-only && cabal configure --enable-tests
88+ @touch $@
89+
90+distribution-nixpkgs/dist/setup-config : distribution-nixpkgs/cabal.sandbox.config
91+ cd $(dir $<) && cabal install --dependencies-only && cabal configure --enable-tests
92+ @touch $@
93+
94+cabal2nix/dist/setup-config : cabal2nix/cabal.sandbox.config
95+ cd $(dir $<) && cabal install --dependencies-only && cabal configure --enable-tests
96+ @touch $@
97+
98+hackage2nix/dist/setup-config : hackage2nix/cabal.sandbox.config
99+ cd $(dir $<) && cabal install --dependencies-only && cabal configure --enable-tests
100+ @touch $@
101+
102+release-lens-construction-helper.nix : lens-construction-helper/lens-construction-helper.cabal cabal2nix/cabal.sandbox.config
103+ cd cabal2nix && cabal -v0 run cabal2nix -- --maintainer=simons $(srcdir)/lens-construction-helper >../$@
104+
105+release-language-nix.nix : language-nix/language-nix.cabal cabal2nix/cabal.sandbox.config
106+ cd cabal2nix && cabal -v0 run cabal2nix -- --maintainer=simons $(srcdir)/language-nix >../$@
21107
22−packunused::
23− @cabal clean
24− @find . -name "*.imports" -exec rm {} +
25− @cabal configure -O0 --disable-library-profiling
26− @cabal build --ghc-option=-ddump-minimal-imports
27− @packunused
108+release-distribution-nixpkgs.nix : distribution-nixpkgs/distribution-nixpkgs.cabal cabal2nix/cabal.sandbox.config
109+ cd cabal2nix && cabal -v0 run cabal2nix -- --maintainer=simons $(srcdir)/distribution-nixpkgs >../$@
28110
29−clean::
30− @rm -rf dist TAGS
111+release-cabal2nix.nix : cabal2nix/cabal2nix.cabal cabal2nix/cabal.sandbox.config
112+ cd cabal2nix && cabal -v0 run cabal2nix -- --maintainer=simons $(srcdir)/cabal2nix >../$@
31113
32−cabal2nix.cabal : package.yaml
33− @hpack >/dev/null
114+release-hackage2nix.nix : hackage2nix/hackage2nix.cabal cabal2nix/cabal.sandbox.config
115+ cd cabal2nix && cabal -v0 run cabal2nix -- --maintainer=simons $(srcdir)/hackage2nix >../$@
cabal2nix.cabaldeleted−191
@@ -1,191 +0,0 @@
1−-- This file has been generated from package.yaml by hpack version 0.5.4.
2−--
3−-- see: https://github.com/sol/hpack
4−
5−name: cabal2nix
6−version: 2015.8.29
7−description: Convert Cabal files into Nix build instructions.
8−category: Distribution
9−homepage: https://github.com/nixos/cabal2nix#readme
10−bug-reports: https://github.com/nixos/cabal2nix/issues
11−cabal-version: >= 1.10
12−license: BSD3
13−license-file: LICENSE
14−build-type: Simple
15−maintainer: Peter Simons <simons@cryp.to>
16−synopsis: Convert Cabal files into Nix build instructions.
17−
18−source-repository head
19− type: git
20− location: https://github.com/nixos/cabal2nix
21−
22−library
23− hs-source-dirs:
24− src
25− ghc-options: -Wall
26− build-depends:
27− base < 5
28− , Cabal >= 1.22.2
29− , SHA
30− , aeson
31− , ansi-wl-pprint
32− , base < 5
33− , bytestring
34− , containers
35− , data-default
36− , deepseq
37− , deepseq-generics
38− , directory
39− , doctest
40− , filepath
41− , hackage-db
42− , hspec
43− , lens
44− , monad-par
45− , monad-par-extras
46− , mtl
47− , optparse-applicative
48− , pretty >= 1.1.2
49− , process
50− , regex-posix
51− , split
52− , transformers
53− , utf8-string
54− exposed-modules:
55− Distribution.Nixpkgs.Fetch
56− Distribution.Nixpkgs.Haskell
57− Distribution.Nixpkgs.Haskell.BuildInfo
58− Distribution.Nixpkgs.Haskell.Constraint
59− Distribution.Nixpkgs.Haskell.Derivation
60− Distribution.Nixpkgs.Haskell.FromCabal
61− Distribution.Nixpkgs.Haskell.FromCabal.Configuration
62− Distribution.Nixpkgs.Haskell.FromCabal.Configuration.GHC7102
63− Distribution.Nixpkgs.Haskell.FromCabal.Configuration.Maintainers
64− Distribution.Nixpkgs.Haskell.FromCabal.Flags
65− Distribution.Nixpkgs.Haskell.FromCabal.License
66− Distribution.Nixpkgs.Haskell.FromCabal.Name
67− Distribution.Nixpkgs.Haskell.FromCabal.Normalize
68− Distribution.Nixpkgs.Haskell.FromCabal.PostProcess
69− Distribution.Nixpkgs.Haskell.Hackage
70− Distribution.Nixpkgs.Haskell.HackageGit
71− Distribution.Nixpkgs.Haskell.OrphanInstances
72− Distribution.Nixpkgs.License
73− Distribution.Nixpkgs.Meta
74− Distribution.Nixpkgs.PackageMap
75− Internal.HaskellPackage
76− Internal.Lens
77− Internal.PrettyPrinting
78− Language.Nix
79− Language.Nix.Binding
80− Language.Nix.Identifier
81− Language.Nix.Path
82− default-language: Haskell2010
83−
84−executable hackage2nix
85− main-is: Main.hs
86− hs-source-dirs:
87− hackage2nix
88− ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N
89− build-depends:
90− base < 5
91− , Cabal >= 1.22.2
92− , SHA
93− , aeson
94− , ansi-wl-pprint
95− , base < 5
96− , bytestring
97− , containers
98− , data-default
99− , deepseq
100− , deepseq-generics
101− , directory
102− , doctest
103− , filepath
104− , hackage-db
105− , hspec
106− , lens
107− , monad-par
108− , monad-par-extras
109− , mtl
110− , optparse-applicative
111− , pretty >= 1.1.2
112− , process
113− , regex-posix
114− , split
115− , transformers
116− , utf8-string
117− , cabal2nix
118− default-language: Haskell2010
119−
120−executable cabal2nix
121− main-is: Main.hs
122− hs-source-dirs:
123− cabal2nix
124− ghc-options: -Wall
125− build-depends:
126− base < 5
127− , Cabal >= 1.22.2
128− , SHA
129− , aeson
130− , ansi-wl-pprint
131− , base < 5
132− , bytestring
133− , containers
134− , data-default
135− , deepseq
136− , deepseq-generics
137− , directory
138− , doctest
139− , filepath
140− , hackage-db
141− , hspec
142− , lens
143− , monad-par
144− , monad-par-extras
145− , mtl
146− , optparse-applicative
147− , pretty >= 1.1.2
148− , process
149− , regex-posix
150− , split
151− , transformers
152− , utf8-string
153− , cabal2nix
154− default-language: Haskell2010
155−
156−test-suite spec
157− type: exitcode-stdio-1.0
158− main-is: Main.hs
159− hs-source-dirs:
160− test
161− ghc-options: -Wall
162− build-depends:
163− base < 5
164− , Cabal >= 1.22.2
165− , SHA
166− , aeson
167− , ansi-wl-pprint
168− , base < 5
169− , bytestring
170− , containers
171− , data-default
172− , deepseq
173− , deepseq-generics
174− , directory
175− , doctest
176− , filepath
177− , hackage-db
178− , hspec
179− , lens
180− , monad-par
181− , monad-par-extras
182− , mtl
183− , optparse-applicative
184− , pretty >= 1.1.2
185− , process
186− , regex-posix
187− , split
188− , transformers
189− , utf8-string
190− , cabal2nix
191− default-language: Haskell2010
LICENSE → cabal2nix/LICENSErenamed

The content is the same.

Setup.lhs → cabal2nix/Setup.lhsrenamed

The content is the same.

cabal2nix/cabal2nix.cabalnew file+39
@@ -0,0 +1,39 @@
1+-- This file has been generated from package.yaml by hpack version 0.5.4.
2+--
3+-- see: https://github.com/sol/hpack
4+
5+name: cabal2nix
6+version: 20150830
7+synopsis: Convert Cabal files into Nix build instructions.
8+description: Convert Cabal files into Nix build instructions.
9+category: Distribution
10+homepage: https://github.com/nixos/cabal2nix#readme
11+bug-reports: https://github.com/nixos/cabal2nix/issues
12+maintainer: Peter Simons <simons@cryp.to>
13+license: BSD3
14+license-file: LICENSE
15+build-type: Simple
16+cabal-version: >= 1.10
17+
18+source-repository head
19+ type: git
20+ location: https://github.com/nixos/cabal2nix
21+
22+executable cabal2nix
23+ main-is: Main.hs
24+ hs-source-dirs:
25+ src
26+ ghc-options: -Wall
27+ build-depends:
28+ base < 5
29+ , Cabal >= 1.22.2
30+ , ansi-wl-pprint
31+ , base < 5
32+ , containers
33+ , lens
34+ , optparse-applicative
35+ , pretty >= 1.1.2
36+ , language-nix
37+ , distribution-nixpkgs
38+ , lens-construction-helper
39+ default-language: Haskell2010
doc/.gitignore → cabal2nix/doc/.gitignorerenamed

The content is the same.

doc/GNUmakefile → cabal2nix/doc/GNUmakefilerenamed

The content is the same.

doc/hal8-folien.md → cabal2nix/doc/hal8-folien.mdrenamed

The content is the same.

doc/hal8.md → cabal2nix/doc/hal8.mdrenamed

The content is the same.

doc/nixos-meetup-3-slides.md → cabal2nix/doc/nixos-meetup-3-slides.mdrenamed

The content is the same.

doc/user-guide.md → cabal2nix/doc/user-guide.mdrenamed

The content is the same.

cabal2nix/package.yamlnew file+28
@@ -0,0 +1,28 @@
1+name: cabal2nix
2+version: "20150830"
3+synopsis: Convert Cabal files into Nix build instructions.
4+description: Convert Cabal files into Nix build instructions.
5+maintainer: Peter Simons <simons@cryp.to>
6+license: BSD3
7+github: nixos/cabal2nix
8+category: Distribution
9+
10+ghc-options: -Wall
11+
12+dependencies:
13+ - base < 5
14+ - Cabal >= 1.22.2
15+ - ansi-wl-pprint
16+ - base < 5
17+ - containers
18+ - lens
19+ - optparse-applicative
20+ - pretty >= 1.1.2
21+ - language-nix
22+ - distribution-nixpkgs
23+ - lens-construction-helper
24+
25+executables:
26+ cabal2nix:
27+ main: Main.hs
28+ source-dirs: src
cabal2nix/Main.hs → cabal2nix/src/Main.hsrenamed+4−3
@@ -14,15 +14,16 @@ import Distribution.Nixpkgs.Meta
1414import Distribution.PackageDescription ( FlagName(..), FlagAssignment )
1515import Distribution.Simple.Utils ( lowercase )
1616import Distribution.Text ( display )
17−import Internal.HaskellPackage
18−import Internal.Lens
1917import Paths_cabal2nix
20−import Internal.PrettyPrinting hiding ( (<>) )
18+import Text.PrettyPrint.HughesPJClass ( Doc, Pretty(..), text, vcat, hcat, semi )
19+import Control.Lens
20+import Control.Lens.Create
2121import Language.Nix
2222import Options.Applicative
2323import System.IO ( hFlush, stdout, stderr )
2424import qualified Text.PrettyPrint.ANSI.Leijen as P2 hiding ( (<$>), (<>) )
2525-- import Text.Show.Pretty
26+import Distribution.Nixpkgs.Haskell.PackageSourceSpec
2627
2728data Options = Options
2829 { optSha256 :: Maybe String
distribution-nixpkgs/LICENSEnew file+30
@@ -0,0 +1,30 @@
1+Redistribution and use in source and binary forms, with or
2+without modification, are permitted provided that the
3+following conditions are met:
4+
5+ * Redistributions of source code must retain the above
6+ copyright notice, this list of conditions and the
7+ following disclaimer.
8+
9+ * Redistributions in binary form must reproduce the above
10+ copyright notice, this list of conditions and the
11+ following disclaimer in the documentation and/or other
12+ materials provided with the distribution.
13+
14+ * The names of its contributors may not be used to endorse
15+ or promote products derived from this software without
16+ specific prior written permission.
17+
18+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
19+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
20+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
distribution-nixpkgs/Setup.lhsnew file+8
@@ -0,0 +1,8 @@
1+#!/usr/bin/env runhaskell
2+
3+> module Main (main) where
4+>
5+> import Distribution.Simple
6+>
7+> main :: IO ()
8+> main = defaultMain
distribution-nixpkgs/distribution-nixpkgs.cabalnew file+105
@@ -0,0 +1,105 @@
1+-- This file has been generated from package.yaml by hpack version 0.5.4.
2+--
3+-- see: https://github.com/sol/hpack
4+
5+name: distribution-nixpkgs
6+version: 20150830
7+synopsis: Convert Cabal files into Nix build instructions.
8+description: Convert Cabal files into Nix build instructions.
9+category: Distribution
10+homepage: https://github.com/nixos/cabal2nix#readme
11+bug-reports: https://github.com/nixos/cabal2nix/issues
12+maintainer: Peter Simons <simons@cryp.to>
13+license: BSD3
14+license-file: LICENSE
15+build-type: Simple
16+cabal-version: >= 1.10
17+
18+source-repository head
19+ type: git
20+ location: https://github.com/nixos/cabal2nix
21+
22+library
23+ hs-source-dirs:
24+ src
25+ ghc-options: -Wall
26+ build-depends:
27+ base < 5
28+ , Cabal >= 1.22.2
29+ , SHA
30+ , aeson
31+ , base < 5
32+ , bytestring
33+ , containers
34+ , deepseq-generics
35+ , directory
36+ , filepath
37+ , hackage-db
38+ , lens
39+ , pretty >= 1.1.2
40+ , process
41+ , split
42+ , transformers
43+ , utf8-string
44+ , lens-construction-helper
45+ , language-nix
46+ , deepseq
47+ , doctest
48+ , hspec
49+ exposed-modules:
50+ Distribution.Nixpkgs.Fetch
51+ Distribution.Nixpkgs.Haskell
52+ Distribution.Nixpkgs.Haskell.BuildInfo
53+ Distribution.Nixpkgs.Haskell.Constraint
54+ Distribution.Nixpkgs.Haskell.Derivation
55+ Distribution.Nixpkgs.Haskell.FromCabal
56+ Distribution.Nixpkgs.Haskell.FromCabal.Configuration
57+ Distribution.Nixpkgs.Haskell.FromCabal.Configuration.GHC7102
58+ Distribution.Nixpkgs.Haskell.FromCabal.Configuration.Maintainers
59+ Distribution.Nixpkgs.Haskell.FromCabal.Flags
60+ Distribution.Nixpkgs.Haskell.FromCabal.License
61+ Distribution.Nixpkgs.Haskell.FromCabal.Name
62+ Distribution.Nixpkgs.Haskell.FromCabal.Normalize
63+ Distribution.Nixpkgs.Haskell.FromCabal.PostProcess
64+ Distribution.Nixpkgs.Haskell.Hackage
65+ Distribution.Nixpkgs.Haskell.HackageGit
66+ Distribution.Nixpkgs.Haskell.OrphanInstances
67+ Distribution.Nixpkgs.License
68+ Distribution.Nixpkgs.Meta
69+ Distribution.Nixpkgs.PackageMap
70+ Distribution.Nixpkgs.Haskell.PackageSourceSpec
71+ other-modules:
72+ Internal.PrettyPrinting
73+ default-language: Haskell2010
74+
75+test-suite spec
76+ type: exitcode-stdio-1.0
77+ main-is: Main.hs
78+ hs-source-dirs:
79+ test
80+ ghc-options: -Wall
81+ build-depends:
82+ base < 5
83+ , Cabal >= 1.22.2
84+ , SHA
85+ , aeson
86+ , base < 5
87+ , bytestring
88+ , containers
89+ , deepseq-generics
90+ , directory
91+ , filepath
92+ , hackage-db
93+ , lens
94+ , pretty >= 1.1.2
95+ , process
96+ , split
97+ , transformers
98+ , utf8-string
99+ , lens-construction-helper
100+ , language-nix
101+ , deepseq
102+ , doctest
103+ , hspec
104+ , distribution-nixpkgs
105+ default-language: Haskell2010
package.yaml → distribution-nixpkgs/package.yamlrenamed+30−54
@@ -1,5 +1,5 @@
1−name: cabal2nix
2−version: 2015.8.29
1+name: distribution-nixpkgs
2+version: "20150830"
33synopsis: Convert Cabal files into Nix build instructions.
44description: Convert Cabal files into Nix build instructions.
55maintainer: Peter Simons <simons@cryp.to>
@@ -10,33 +10,28 @@ category: Distribution
1010ghc-options: -Wall
1111
1212dependencies:
13− - base < 5
14− - Cabal >= 1.22.2
15− - SHA
16− - aeson
17− - ansi-wl-pprint
18− - base < 5
19− - bytestring
20− - containers
21− - data-default
22− - deepseq
23− - deepseq-generics
24− - directory
25− - doctest
26− - filepath
27− - hackage-db
28− - hspec
29− - lens
30− - monad-par
31− - monad-par-extras
32− - mtl
33− - optparse-applicative
34− - pretty >= 1.1.2
35− - process
36− - regex-posix
37− - split
38− - transformers
39− - utf8-string
13+ - base < 5
14+ - Cabal >= 1.22.2
15+ - SHA
16+ - aeson
17+ - base < 5
18+ - bytestring
19+ - containers
20+ - deepseq-generics
21+ - directory
22+ - filepath
23+ - hackage-db
24+ - lens
25+ - pretty >= 1.1.2
26+ - process
27+ - split
28+ - transformers
29+ - utf8-string
30+ - lens-construction-helper
31+ - language-nix
32+ - deepseq
33+ - doctest
34+ - hspec
4035
4136library:
4237 source-dirs: src
@@ -61,31 +56,12 @@ library:
6156 - Distribution.Nixpkgs.License
6257 - Distribution.Nixpkgs.Meta
6358 - Distribution.Nixpkgs.PackageMap
64− - Internal.HaskellPackage
65− - Internal.Lens
66− - Internal.PrettyPrinting
67− - Language.Nix
68− - Language.Nix.Binding
69− - Language.Nix.Identifier
70− - Language.Nix.Path
71−
72−executables:
73− cabal2nix:
74− main: Main.hs
75− source-dirs: cabal2nix
76− dependencies: cabal2nix
77−
78− hackage2nix:
79− main: Main.hs
80− source-dirs: hackage2nix
81− dependencies: cabal2nix
82− ghc-options:
83− - -threaded
84− - -rtsopts
85− - -with-rtsopts=-N
59+ - Distribution.Nixpkgs.Haskell.PackageSourceSpec
8660
8761tests:
8862 spec:
89− main: Main.hs
90− source-dirs: test
91− dependencies: cabal2nix
63+ main: Main.hs
64+ source-dirs:
65+ - test
66+ dependencies:
67+ - distribution-nixpkgs
src/Distribution/Nixpkgs/Fetch.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Fetch.hsrenamed

The content is the same.

src/Distribution/Nixpkgs/Haskell.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell.hsrenamed

The content is the same.

src/Distribution/Nixpkgs/Haskell/BuildInfo.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/BuildInfo.hsrenamed+3−2
@@ -13,9 +13,10 @@ import Control.DeepSeq.Generics
1313import Data.Set ( Set )
1414import Data.Set.Lens
1515import GHC.Generics ( Generic )
16−import Internal.Lens
17−import Internal.PrettyPrinting
16+import Text.PrettyPrint.HughesPJClass
1817import Language.Nix
18+import Control.Lens
19+import Internal.PrettyPrinting
1920
2021data BuildInfo = BuildInfo
2122 { _haskell :: Set Binding
src/Distribution/Nixpkgs/Haskell/Constraint.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/Constraint.hsrenamed

The content is the same.

src/Distribution/Nixpkgs/Haskell/Derivation.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/Derivation.hsrenamed+4−2
@@ -24,9 +24,11 @@ import Distribution.Nixpkgs.Haskell.BuildInfo
2424import Distribution.Package
2525import Distribution.PackageDescription ( FlagAssignment, FlagName(..) )
2626import GHC.Generics ( Generic )
27−import Internal.Lens
28−import Internal.PrettyPrinting
2927import Language.Nix
28+import Control.Lens.Create
29+import Text.PrettyPrint.HughesPJClass
30+import Control.Lens
31+import Internal.PrettyPrinting
3032
3133-- | A represtation of Nix expressions for building Haskell packages.
3234-- The data type correspond closely to the definition of
src/Distribution/Nixpkgs/Haskell/FromCabal.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal.hsrenamed+2−1
@@ -27,8 +27,9 @@ import Distribution.PackageDescription.Configuration
2727import Distribution.System
2828import Distribution.Text ( display )
2929import Distribution.Version
30−import Internal.Lens
3130import Language.Nix
31+import Control.Lens.Create
32+import Control.Lens
3233
3334type HaskellResolver = Dependency -> Bool
3435type NixpkgsResolver = Identifier -> Maybe Binding
src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration.hsrenamed

The content is the same.

src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration/GHC7102.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration/GHC7102.hsrenamed

The content is the same.

src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration/Maintainers.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/Configuration/Maintainers.hsrenamed+1−1
@@ -3,7 +3,7 @@ module Distribution.Nixpkgs.Haskell.FromCabal.Configuration.Maintainers ( global
33import Data.Map as Map
44import Data.Set as Set
55import Distribution.Nixpkgs.Haskell.FromCabal.Configuration
6−import Internal.Lens
6+import Control.Lens.Create
77
88globalPackageMaintainers :: Map PackageName (Set Identifier)
99globalPackageMaintainers = Map.unionsWith Set.union [ Map.singleton p (Set.singleton m) | (m,ps) <- maintainedPackages, p <- ps ]
src/Distribution/Nixpkgs/Haskell/FromCabal/Flags.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/Flags.hsrenamed

The content is the same.

src/Distribution/Nixpkgs/Haskell/FromCabal/License.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/License.hsrenamed

The content is the same.

src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hsrenamed

The content is the same.

src/Distribution/Nixpkgs/Haskell/FromCabal/Normalize.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/Normalize.hsrenamed+1−1
@@ -10,8 +10,8 @@ import Distribution.Nixpkgs.Meta
1010import Distribution.Package
1111import Distribution.PackageDescription ( FlagAssignment, FlagName(..) )
1212import Distribution.Simple.Utils ( lowercase )
13−import Internal.Lens
1413import Language.Nix hiding ( quote )
14+import Control.Lens
1515
1616normalize :: Derivation -> Derivation
1717normalize drv = drv
src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hsrenamed+2−1
@@ -2,7 +2,7 @@
22
33module Distribution.Nixpkgs.Haskell.FromCabal.PostProcess ( postProcess ) where
44
5−import Internal.Lens
5+import Control.Lens.Create
66import Data.Set.Lens
77import Data.Set ( Set )
88import qualified Data.Set as Set
@@ -12,6 +12,7 @@ import Distribution.Text
1212import Distribution.Version
1313import Language.Nix
1414import Data.List.Split
15+import Control.Lens
1516
1617postProcess :: Derivation -> Derivation
1718postProcess deriv = foldr ($) (fixGtkBuilds deriv) [ f | (Dependency n vr, f) <- hooks, packageName deriv == n, packageVersion deriv `withinRange` vr ]
src/Distribution/Nixpkgs/Haskell/Hackage.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/Hackage.hsrenamed

The content is the same.

src/Distribution/Nixpkgs/Haskell/HackageGit.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/HackageGit.hsrenamed

The content is the same.

src/Distribution/Nixpkgs/Haskell/OrphanInstances.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/OrphanInstances.hsrenamed

The content is the same.

src/Internal/HaskellPackage.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hsrenamed+1−1
@@ -1,4 +1,4 @@
1−module Internal.HaskellPackage
1+module Distribution.Nixpkgs.Haskell.PackageSourceSpec
22 ( Package(..), getPackage, sourceFromHackage
33 ) where
44
src/Distribution/Nixpkgs/License.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/License.hsrenamed

The content is the same.

src/Distribution/Nixpkgs/Meta.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/Meta.hsrenamed+5−5
@@ -1,5 +1,6 @@
1+{-# LANGUAGE DeriveGeneric #-}
2+{-# LANGUAGE RecordWildCards #-}
13{-# LANGUAGE TemplateHaskell #-}
2−{-# LANGUAGE DeriveGeneric, RecordWildCards #-}
34{- |
45 A representation of the @meta@ section used in Nix expressions. A
56 detailed description can be found in section 4, \"Meta-attributes\",
@@ -13,16 +14,18 @@ module Distribution.Nixpkgs.Meta
1314
1415
1516import Control.DeepSeq.Generics
17+import Control.Lens
18+import Control.Lens.Create
1619import Data.Set ( Set )
1720import qualified Data.Set as Set
1821import Distribution.Nixpkgs.License
1922import GHC.Generics ( Generic )
20−import Internal.Lens
2123import Internal.PrettyPrinting
2224import Language.Nix.Identifier
2325
2426-- | A representation of the @meta@ section used in Nix expressions.
2527--
28+-- >>> :set -XOverloadedStrings
2629-- >>> :{
2730-- print (pPrint (Meta "http://example.org" "an example package" (Unknown Nothing)
2831-- (Set.singleton "stdenv.lib.platforms.unix")
@@ -37,9 +40,6 @@ import Language.Nix.Identifier
3740-- hydraPlatforms = stdenv.lib.platforms.none;
3841-- maintainers = with stdenv.lib.maintainers; [ jane joe ];
3942-- broken = true;
40−--
41−-- Note that the "Text" instance definition provides pretty-printing,
42−-- but no parsing as of now!
4343
4444data Meta = Meta
4545 { _homepage :: String -- ^ URL of the package homepage
src/Distribution/Nixpkgs/PackageMap.hs → distribution-nixpkgs/src/Distribution/Nixpkgs/PackageMap.hsrenamed+3−2
@@ -13,10 +13,11 @@ import Data.Map.Strict ( Map )
1313import Data.Maybe
1414import Data.Set ( Set )
1515import qualified Data.Set as Set
16−import Internal.Lens
17−import Internal.PrettyPrinting
16+import Control.Lens.Create
17+import Text.PrettyPrint.HughesPJClass
1818import Language.Nix
1919import System.Process
20+import Control.Lens
2021
2122type PackageMap = Map Identifier (Set Path)
2223
src/Internal/PrettyPrinting.hs → distribution-nixpkgs/src/Internal/PrettyPrinting.hsrenamed

The content is the same.

test/Main.hs → distribution-nixpkgs/test/Main.hsrenamed+13−20
@@ -2,14 +2,15 @@ module Main ( main ) where
22
33import Control.DeepSeq
44import Control.Exception
5+import Control.Lens
6+import Control.Lens.Create
57import qualified Data.Map as Map
68import qualified Data.Set as Set
79import Distribution.Nixpkgs.Haskell.FromCabal.Configuration.GHC7102
810import Distribution.Nixpkgs.License
911import Distribution.Nixpkgs.Meta
10−import Internal.Lens
11−import Test.Hspec
1212import Test.DocTest
13+import Test.Hspec
1314
1415main :: IO ()
1516main = do
@@ -34,32 +35,24 @@ main = do
3435 , "src/Distribution/Nixpkgs/License.hs"
3536 , "src/Distribution/Nixpkgs/Meta.hs"
3637 , "src/Distribution/Nixpkgs/PackageMap.hs"
37− , "src/Internal/HaskellPackage.hs"
38− , "src/Internal/Lens.hs"
39− , "src/Internal/PrettyPrinting.hs"
40− , "src/Language/Nix.hs"
41− , "src/Language/Nix/Binding.hs"
42− , "src/Language/Nix/Identifier.hs"
43− , "src/Language/Nix/Path.hs"
38+ , "src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hs"
4439 ]
45− doctest ["-isrc", "-optP-include", "-optPdist/build/autogen/cabal_macros.h", "cabal2nix/Main.hs"]
46− doctest ["-isrc", "-optP-include", "-optPdist/build/autogen/cabal_macros.h", "hackage2nix/Main.hs"]
4740
4841 hspec $ do
4942 describe "DeepSeq instances work properly for" $ do
5043 it "License" $ mapM_ hitsBottom [Known undefined, Unknown (Just undefined)]
51− it "Meta" $ do mapM_ hitsBottom
52− [ def & homepage .~ undefined
53− , def & description .~ undefined
54− , def & license .~ undefined
55− , def & platforms .~ undefined
56− , def & maintainers .~ undefined
57− , def & broken .~ undefined
58− ]
44+ it "Meta" $ mapM_ hitsBottom
45+ [ def & homepage .~ undefined
46+ , def & description .~ undefined
47+ , def & license .~ undefined
48+ , def & platforms .~ undefined
49+ , def & maintainers .~ undefined
50+ , def & broken .~ undefined
51+ ]
5952
6053 describe "Configuration records are consistent" $
6154 it "No maintained package is marked as \"dont-distribute\"" $
62− Map.keysSet (packageMaintainers ghc7102) `Set.intersection` (dontDistributePackages ghc7102) `shouldSatisfy` Set.null
55+ Map.keysSet (packageMaintainers ghc7102) `Set.intersection` dontDistributePackages ghc7102 `shouldSatisfy` Set.null
6356
6457hitsBottom :: NFData a => a -> Expectation
6558hitsBottom x = evaluate (rnf x) `shouldThrow` anyErrorCall
hackage2nix/.gitignorenew file+4
@@ -0,0 +1,4 @@
1+# hackage2nix ususally needs those two repositories around
2+
3+/hackage/*
4+/nixpkgs/*
hackage2nix/LICENSEnew file+30
@@ -0,0 +1,30 @@
1+Redistribution and use in source and binary forms, with or
2+without modification, are permitted provided that the
3+following conditions are met:
4+
5+ * Redistributions of source code must retain the above
6+ copyright notice, this list of conditions and the
7+ following disclaimer.
8+
9+ * Redistributions in binary form must reproduce the above
10+ copyright notice, this list of conditions and the
11+ following disclaimer in the documentation and/or other
12+ materials provided with the distribution.
13+
14+ * The names of its contributors may not be used to endorse
15+ or promote products derived from this software without
16+ specific prior written permission.
17+
18+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
19+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
20+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
hackage2nix/Setup.lhsnew file+8
@@ -0,0 +1,8 @@
1+#!/usr/bin/env runhaskell
2+
3+> module Main (main) where
4+>
5+> import Distribution.Simple
6+>
7+> main :: IO ()
8+> main = defaultMain
hackage2nix/hackage2nix.cabalnew file+40
@@ -0,0 +1,40 @@
1+-- This file has been generated from package.yaml by hpack version 0.5.4.
2+--
3+-- see: https://github.com/sol/hpack
4+
5+name: hackage2nix
6+version: 20150830
7+synopsis: Convert Cabal files into Nix build instructions.
8+description: Convert Cabal files into Nix build instructions.
9+category: Distribution
10+homepage: https://github.com/nixos/cabal2nix#readme
11+bug-reports: https://github.com/nixos/cabal2nix/issues
12+maintainer: Peter Simons <simons@cryp.to>
13+license: BSD3
14+license-file: LICENSE
15+build-type: Simple
16+cabal-version: >= 1.10
17+
18+source-repository head
19+ type: git
20+ location: https://github.com/nixos/cabal2nix
21+
22+executable hackage2nix
23+ main-is: Main.hs
24+ hs-source-dirs:
25+ src
26+ ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N
27+ build-depends:
28+ base < 5
29+ , Cabal >= 1.22.2
30+ , containers
31+ , filepath
32+ , lens
33+ , monad-par
34+ , monad-par-extras
35+ , mtl
36+ , optparse-applicative
37+ , pretty >= 1.1.2
38+ , language-nix
39+ , distribution-nixpkgs
40+ default-language: Haskell2010
hackage2nix/package.yamlnew file+33
@@ -0,0 +1,33 @@
1+name: hackage2nix
2+version: "20150830"
3+synopsis: Convert Cabal files into Nix build instructions.
4+description: Convert Cabal files into Nix build instructions.
5+maintainer: Peter Simons <simons@cryp.to>
6+license: BSD3
7+github: nixos/cabal2nix
8+category: Distribution
9+
10+ghc-options: -Wall
11+
12+dependencies:
13+ - base < 5
14+ - Cabal >= 1.22.2
15+ - containers
16+ - filepath
17+ - lens
18+ - monad-par
19+ - monad-par-extras
20+ - mtl
21+ - optparse-applicative
22+ - pretty >= 1.1.2
23+ - language-nix
24+ - distribution-nixpkgs
25+
26+executables:
27+ hackage2nix:
28+ main: Main.hs
29+ source-dirs: src
30+ ghc-options:
31+ - -threaded
32+ - -rtsopts
33+ - -with-rtsopts=-N
hackage2nix/Main.hs → hackage2nix/src/Main.hsrenamed+5−5
@@ -8,7 +8,7 @@ import Distribution.Nixpkgs.Haskell.FromCabal.Flags
88import Distribution.Nixpkgs.Haskell.HackageGit ( readHackage, Hackage )
99import Distribution.Nixpkgs.Haskell.Constraint
1010import Distribution.Nixpkgs.Haskell.FromCabal.Configuration.GHC7102
11−import Internal.HaskellPackage
11+import Distribution.Nixpkgs.Haskell.PackageSourceSpec
1212import Control.Monad
1313import Control.Monad.Par.Combinator
1414import Control.Monad.Par.IO
@@ -29,9 +29,9 @@ import Distribution.PackageDescription hiding ( options, buildDepends, extraLibs
2929import Distribution.Text
3030import Distribution.Package
3131import Distribution.Version
32−import Internal.Lens
33−import Internal.PrettyPrinting hiding ( attr, (<>) )
34−import Paths_cabal2nix
32+import Control.Lens
33+import Text.PrettyPrint.HughesPJClass hiding ( (<>) )
34+import Paths_hackage2nix
3535import Language.Nix
3636import Options.Applicative
3737import System.FilePath
@@ -178,7 +178,7 @@ generatePackageSet config hackage nixpkgs = do
178178 overrides = fcat $ punctuate space
179179 [ pPrint b | b <- Set.toList (view (dependencies . each) drv), not (isFromHackage b) ]
180180
181− return $ nest 2 $ hang (string attr <+> equals <+> text "callPackage") 2 (parens (pPrint drv)) <+> (braces overrides <> semi)
181+ return $ nest 2 $ hang (doubleQuotes (text attr) <+> equals <+> text "callPackage") 2 (parens (pPrint drv)) <+> (braces overrides <> semi)
182182 return (intercalate "\n\n" (map render defs))
183183
184184 liftIO $ mapM_ (\pkg -> putStrLn pkg >> putStrLn "") pkgs
update-nixpkgs.sh → hackage2nix/update-nixpkgs.shrenamed

The content is the same.

language-nix/LICENSEnew file+30
@@ -0,0 +1,30 @@
1+Redistribution and use in source and binary forms, with or
2+without modification, are permitted provided that the
3+following conditions are met:
4+
5+ * Redistributions of source code must retain the above
6+ copyright notice, this list of conditions and the
7+ following disclaimer.
8+
9+ * Redistributions in binary form must reproduce the above
10+ copyright notice, this list of conditions and the
11+ following disclaimer in the documentation and/or other
12+ materials provided with the distribution.
13+
14+ * The names of its contributors may not be used to endorse
15+ or promote products derived from this software without
16+ specific prior written permission.
17+
18+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
19+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
20+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
language-nix/Setup.lhsnew file+8
@@ -0,0 +1,8 @@
1+#!/usr/bin/env runhaskell
2+
3+> module Main (main) where
4+>
5+> import Distribution.Simple
6+>
7+> main :: IO ()
8+> main = defaultMain
language-nix/language-nix.cabalnew file+39
@@ -0,0 +1,39 @@
1+-- This file has been generated from package.yaml by hpack version 0.5.4.
2+--
3+-- see: https://github.com/sol/hpack
4+
5+name: language-nix
6+version: 20150830
7+synopsis: Data types and useful functions to represent and manipulate the Nix language.
8+description: Data types and useful functions to represent and manipulate the Nix language.
9+category: Distribution, Language
10+homepage: https://github.com/nixos/cabal2nix#readme
11+bug-reports: https://github.com/nixos/cabal2nix/issues
12+maintainer: Peter Simons <simons@cryp.to>
13+license: BSD3
14+license-file: LICENSE
15+build-type: Simple
16+cabal-version: >= 1.10
17+
18+source-repository head
19+ type: git
20+ location: https://github.com/nixos/cabal2nix
21+
22+library
23+ hs-source-dirs:
24+ src
25+ ghc-options: -Wall
26+ build-depends:
27+ base < 5
28+ , deepseq-generics
29+ , lens
30+ , pretty >= 1.1.2
31+ , regex-posix
32+ , lens-construction-helper
33+ , data-default-class
34+ exposed-modules:
35+ Language.Nix
36+ Language.Nix.Binding
37+ Language.Nix.Identifier
38+ Language.Nix.Path
39+ default-language: Haskell2010
language-nix/package.yamlnew file+27
@@ -0,0 +1,27 @@
1+name: language-nix
2+version: "20150830"
3+synopsis: Data types and useful functions to represent and manipulate the Nix language.
4+description: Data types and useful functions to represent and manipulate the Nix language.
5+maintainer: Peter Simons <simons@cryp.to>
6+license: BSD3
7+github: nixos/cabal2nix
8+category: Distribution, Language
9+
10+ghc-options: -Wall
11+
12+dependencies:
13+ - base < 5
14+ - deepseq-generics
15+ - lens
16+ - pretty >= 1.1.2
17+ - regex-posix
18+ - lens-construction-helper
19+ - data-default-class
20+
21+library:
22+ source-dirs: src
23+ exposed-modules:
24+ - Language.Nix
25+ - Language.Nix.Binding
26+ - Language.Nix.Identifier
27+ - Language.Nix.Path
src/Language/Nix.hs → language-nix/src/Language/Nix.hsrenamed

The content is the same.

src/Language/Nix/Binding.hs → language-nix/src/Language/Nix/Binding.hsrenamed+3−2
@@ -5,8 +5,9 @@ module Language.Nix.Binding ( Binding, binding, localName, reference ) where
55
66import Control.DeepSeq.Generics
77import GHC.Generics ( Generic )
8−import Internal.Lens
9−import Internal.PrettyPrinting
8+import Control.Lens.Create
9+import Control.Lens
10+import Text.PrettyPrint.HughesPJClass
1011import Language.Nix.Identifier
1112import Language.Nix.Path
1213
src/Language/Nix/Identifier.hs → language-nix/src/Language/Nix/Identifier.hsrenamed+3−2
@@ -4,10 +4,11 @@
44module Language.Nix.Identifier ( Identifier, ident, quote, needsQuoting ) where
55
66import Control.DeepSeq.Generics
7+import Control.Lens
8+import Data.Default.Class
79import Data.String
8−import Internal.PrettyPrinting ( Pretty(..), text )
910import GHC.Generics ( Generic )
10−import Internal.Lens
11+import Text.PrettyPrint.HughesPJClass
1112import Text.Regex.Posix
1213
1314-- | Identifiers in Nix are essentially strings. Reasonable people restrict
src/Language/Nix/Path.hs → language-nix/src/Language/Nix/Path.hsrenamed+3−2
@@ -2,8 +2,9 @@
22
33module Language.Nix.Path ( Path, path ) where
44
5−import Internal.Lens
6−import Internal.PrettyPrinting ( Pretty (..), char, hcat, punctuate )
5+import Data.Default.Class
6+import Control.Lens
7+import Text.PrettyPrint.HughesPJClass ( Pretty (..), char, hcat, punctuate )
78import Language.Nix.Identifier
89import Control.DeepSeq.Generics
910import GHC.Generics ( Generic )
lens-construction-helper/LICENSEnew file+30
@@ -0,0 +1,30 @@
1+Redistribution and use in source and binary forms, with or
2+without modification, are permitted provided that the
3+following conditions are met:
4+
5+ * Redistributions of source code must retain the above
6+ copyright notice, this list of conditions and the
7+ following disclaimer.
8+
9+ * Redistributions in binary form must reproduce the above
10+ copyright notice, this list of conditions and the
11+ following disclaimer in the documentation and/or other
12+ materials provided with the distribution.
13+
14+ * The names of its contributors may not be used to endorse
15+ or promote products derived from this software without
16+ specific prior written permission.
17+
18+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
19+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
20+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
lens-construction-helper/Setup.lhsnew file+8
@@ -0,0 +1,8 @@
1+#!/usr/bin/env runhaskell
2+
3+> module Main (main) where
4+>
5+> import Distribution.Simple
6+>
7+> main :: IO ()
8+> main = defaultMain
lens-construction-helper/lens-construction-helper.cabalnew file+32
@@ -0,0 +1,32 @@
1+-- This file has been generated from package.yaml by hpack version 0.5.4.
2+--
3+-- see: https://github.com/sol/hpack
4+
5+name: lens-construction-helper
6+version: 20150830
7+synopsis: Use data-default to create default instances of various types.
8+description: Use data-default to create default instances of various types.
9+category: Data, Lenses, Generics
10+homepage: https://github.com/nixos/cabal2nix#readme
11+bug-reports: https://github.com/nixos/cabal2nix/issues
12+maintainer: Peter Simons <simons@cryp.to>
13+license: BSD3
14+license-file: LICENSE
15+build-type: Simple
16+cabal-version: >= 1.10
17+
18+source-repository head
19+ type: git
20+ location: https://github.com/nixos/cabal2nix
21+
22+library
23+ hs-source-dirs:
24+ src
25+ ghc-options: -Wall
26+ build-depends:
27+ base < 5
28+ , data-default-class
29+ , lens
30+ exposed-modules:
31+ Control.Lens.Create
32+ default-language: Haskell2010
lens-construction-helper/package.yamlnew file+20
@@ -0,0 +1,20 @@
1+name: lens-construction-helper
2+version: "20150830"
3+synopsis: Use data-default to create default instances of various types.
4+description: Use data-default to create default instances of various types.
5+maintainer: Peter Simons <simons@cryp.to>
6+license: BSD3
7+github: nixos/cabal2nix
8+category: Data, Lenses, Generics
9+
10+ghc-options: -Wall
11+
12+dependencies:
13+ - base < 5
14+ - data-default-class
15+ - lens
16+
17+library:
18+ source-dirs: src
19+ exposed-modules:
20+ - Control.Lens.Create
lens-construction-helper/src/Control/Lens/Create.hsnew file+9
@@ -0,0 +1,9 @@
1+module Control.Lens.Create ( create, Default(..), ASetter ) where
2+
3+import Control.Lens.Setter ( ASetter, set )
4+import Data.Default.Class ( Default(..) )
5+
6+-- | A convenient helper function for using Lenses as constructors.
7+
8+create :: Default s => ASetter s t a b -> b -> t
9+create f x = set f x def
release-cabal2nix.nixnew file+20
@@ -0,0 +1,20 @@
1+{ mkDerivation, ansi-wl-pprint, base, Cabal, containers
2+, distribution-nixpkgs, language-nix, lens
3+, lens-construction-helper, optparse-applicative, pretty, stdenv
4+}:
5+mkDerivation {
6+ pname = "cabal2nix";
7+ version = "20150830";
8+ src = /home/simons/src/cabal2nix/cabal2nix;
9+ isLibrary = false;
10+ isExecutable = true;
11+ executableHaskellDepends = [
12+ ansi-wl-pprint base Cabal containers distribution-nixpkgs
13+ language-nix lens lens-construction-helper optparse-applicative
14+ pretty
15+ ];
16+ homepage = "https://github.com/nixos/cabal2nix#readme";
17+ description = "Convert Cabal files into Nix build instructions";
18+ license = stdenv.lib.licenses.bsd3;
19+ maintainers = with stdenv.lib.maintainers; [ simons ];
20+}
release-distribution-nixpkgs.nixnew file+26
@@ -0,0 +1,26 @@
1+{ mkDerivation, aeson, base, bytestring, Cabal, containers, deepseq
2+, deepseq-generics, directory, doctest, filepath, hackage-db, hspec
3+, language-nix, lens, lens-construction-helper, pretty, process
4+, SHA, split, stdenv, transformers, utf8-string
5+}:
6+mkDerivation {
7+ pname = "distribution-nixpkgs";
8+ version = "20150830";
9+ src = /home/simons/src/cabal2nix/distribution-nixpkgs;
10+ libraryHaskellDepends = [
11+ aeson base bytestring Cabal containers deepseq deepseq-generics
12+ directory doctest filepath hackage-db hspec language-nix lens
13+ lens-construction-helper pretty process SHA split transformers
14+ utf8-string
15+ ];
16+ testHaskellDepends = [
17+ aeson base bytestring Cabal containers deepseq deepseq-generics
18+ directory doctest filepath hackage-db hspec language-nix lens
19+ lens-construction-helper pretty process SHA split transformers
20+ utf8-string
21+ ];
22+ homepage = "https://github.com/nixos/cabal2nix#readme";
23+ description = "Convert Cabal files into Nix build instructions";
24+ license = stdenv.lib.licenses.bsd3;
25+ maintainers = with stdenv.lib.maintainers; [ simons ];
26+}
release-hackage2nix.nixnew file+19
@@ -0,0 +1,19 @@
1+{ mkDerivation, base, Cabal, containers, distribution-nixpkgs
2+, filepath, language-nix, lens, monad-par, monad-par-extras, mtl
3+, optparse-applicative, pretty, stdenv
4+}:
5+mkDerivation {
6+ pname = "hackage2nix";
7+ version = "20150830";
8+ src = /home/simons/src/cabal2nix/hackage2nix;
9+ isLibrary = false;
10+ isExecutable = true;
11+ executableHaskellDepends = [
12+ base Cabal containers distribution-nixpkgs filepath language-nix
13+ lens monad-par monad-par-extras mtl optparse-applicative pretty
14+ ];
15+ homepage = "https://github.com/nixos/cabal2nix#readme";
16+ description = "Convert Cabal files into Nix build instructions";
17+ license = stdenv.lib.licenses.bsd3;
18+ maintainers = with stdenv.lib.maintainers; [ simons ];
19+}
release-language-nix.nixnew file+16
@@ -0,0 +1,16 @@
1+{ mkDerivation, base, data-default-class, deepseq-generics, lens
2+, lens-construction-helper, pretty, regex-posix, stdenv
3+}:
4+mkDerivation {
5+ pname = "language-nix";
6+ version = "20150830";
7+ src = /home/simons/src/cabal2nix/language-nix;
8+ libraryHaskellDepends = [
9+ base data-default-class deepseq-generics lens
10+ lens-construction-helper pretty regex-posix
11+ ];
12+ homepage = "https://github.com/nixos/cabal2nix#readme";
13+ description = "Data types and useful functions to represent and manipulate the Nix language";
14+ license = stdenv.lib.licenses.bsd3;
15+ maintainers = with stdenv.lib.maintainers; [ simons ];
16+}
release-lens-construction-helper.nixnew file+11
@@ -0,0 +1,11 @@
1+{ mkDerivation, base, data-default-class, lens, stdenv }:
2+mkDerivation {
3+ pname = "lens-construction-helper";
4+ version = "20150830";
5+ src = /home/simons/src/cabal2nix/lens-construction-helper;
6+ libraryHaskellDepends = [ base data-default-class lens ];
7+ homepage = "https://github.com/nixos/cabal2nix#readme";
8+ description = "Use data-default to create default instances of various types";
9+ license = stdenv.lib.licenses.bsd3;
10+ maintainers = with stdenv.lib.maintainers; [ simons ];
11+}
release.nix+38−38
@@ -2,47 +2,47 @@
22
33{ cabal2nixSrc ? { outPath = ./.; revCount = 0; gitTag = "dirty"; }
44, releaseBuild ? false
5−, supportedPlatforms ? ["x86_64-linux"] ++ (if releaseBuild then ["i686-linux" "x86_64-darwin"] else [])
6−, supportedCompilers ? ["ghc7102"]
5+, supportedSystems ? ["x86_64-linux"] ++ (if releaseBuild then ["i686-linux" "x86_64-darwin"] else [])
76}:
87
8+with import <nixpkgs/pkgs/top-level/release-lib.nix> { inherit supportedSystems; };
9+
910let
10− genAttrs = (import <nixpkgs> { }).lib.genAttrs;
11+
12+ overrides = self: super: {
13+
14+ mkDerivationFor = subdir: args: self.mkDerivation (args // {
15+ src = cabal2nixSrc; version = cabal2nixSrc.gitTag;
16+ postUnpack = "sourceRoot+=/${subdir}";
17+ });
18+
19+ mkJob = path: subdir: pkgs.haskell.lib.buildStrictly (self.callPackage path { mkDerivation = self.mkDerivationFor subdir; });
20+
21+ lens-construction-helper = self.mkJob ./release-lens-construction-helper.nix "lens-construction-helper";
22+
23+ language-nix = self.mkJob ./release-language-nix.nix "language-nix";
24+
25+ distribution-nixpkgs = self.mkJob ./release-distribution-nixpkgs.nix "distribution-nixpkgs";
26+
27+ cabal2nix = self.mkJob ./release-cabal2nix.nix "cabal2nix";
28+
29+ hackage2nix = self.mkJob ./release-hackage2nix.nix "hackage2nix";
30+
31+ };
32+
33+ mkJob = attr: testOn supportedSystems (pkgs: ((pkgs.haskellPackages.override { inherit overrides; })).${attr});
34+
1135in
1236{
13− cabal2nix = genAttrs supportedCompilers (ghcVer: genAttrs supportedPlatforms (system:
14− let
15− pkgs = import <nixpkgs> { inherit system; };
16− haskellPackages = pkgs.lib.getAttrFromPath ["haskell" "packages" ghcVer] pkgs;
17− in
18− haskellPackages.mkDerivation {
19− pname = "cabal2nix";
20− version = cabal2nixSrc.gitTag;
21− src = cabal2nixSrc;
22− isLibrary = true;
23− isExecutable = true;
24− libraryHaskellDepends = with haskellPackages; [
25− aeson ansi-wl-pprint base bytestring Cabal containers data-default
26− deepseq deepseq-generics directory doctest filepath hackage-db
27− hspec lens monad-par monad-par-extras mtl optparse-applicative
28− pretty process regex-posix SHA split transformers utf8-string
29− ];
30− executableHaskellDepends = with haskellPackages; [
31− aeson ansi-wl-pprint base bytestring Cabal containers data-default
32− deepseq deepseq-generics directory doctest filepath hackage-db
33− hspec lens monad-par monad-par-extras mtl optparse-applicative
34− pretty process regex-posix SHA split transformers utf8-string
35− ];
36− testHaskellDepends = with haskellPackages; [
37− aeson ansi-wl-pprint base bytestring Cabal containers data-default
38− deepseq deepseq-generics directory doctest filepath hackage-db
39− hspec lens monad-par monad-par-extras mtl optparse-applicative
40− pretty process regex-posix SHA split transformers utf8-string
41− ];
42− homepage = "https://github.com/nixos/cabal2nix#readme";
43− description = "Convert Cabal files into Nix build instructions";
44− license = pkgs.stdenv.lib.licenses.bsd3;
45− maintainers = [ pkgs.stdenv.lib.maintainers.simons ];
46− }
47− ));
37+
38+ lens-construction-helper = mkJob "lens-construction-helper";
39+
40+ language-nix = mkJob "language-nix";
41+
42+ distribution-nixpkgs = mkJob "distribution-nixpkgs";
43+
44+ cabal2nix = mkJob "cabal2nix";
45+
46+ hackage2nix = mkJob "hackage2nix";
47+
4848}
src/Internal/Lens.hsdeleted−13
@@ -1,13 +0,0 @@
1−module Internal.Lens
2− ( create
3− , module Data.Default
4− , module Control.Lens
5− ) where
6−
7−import Control.Lens
8−import Data.Default
9−
10−-- | A convenient helper function for using Lenses as constructors.
11−
12−create :: Default s => ASetter s t a b -> b -> t
13−create f x = set f x def