git.iko.soy/typeable/cabal2nix
on master help sign in
Merge pull request #390 from ttuegel/spdx

Translate SPDX license expressions

commit3f50d31a210d3e47b56a7417224a7dd11f82377e authorPeter Simons <simons@cryp.to> dateMon 26 Nov 2018, 17:31 (8 years ago) parent2103989b2514f8
2 files changed+127−5
src/Distribution/Nixpkgs/Haskell/FromCabal.hs+1−2 src/Distribution/Nixpkgs/Haskell/FromCabal/License.hs+126−3
src/Distribution/Nixpkgs/Haskell/FromCabal.hs+1−2
@@ -11,7 +11,6 @@ import Data.Maybe
1111import Data.Set ( Set )
1212import qualified Data.Set as Set
1313import Distribution.Compiler
14−import Distribution.License
1514import Distribution.Nixpkgs.Haskell
1615import qualified Distribution.Nixpkgs.Haskell as Nix
1716import Distribution.Nixpkgs.Haskell.Constraint
@@ -116,7 +115,7 @@ fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags Package
116115 xrev = maybe 0 read (lookup "x-revision" customFieldsPD)
117116
118117 nixLicense :: Nix.License
119− nixLicense = fromCabalLicense (either licenseFromSPDX id licenseRaw)
118+ nixLicense = either fromSPDXLicense fromCabalLicense licenseRaw
120119
121120 resolveInHackage :: Identifier -> Binding
122121 resolveInHackage i | (i^.ident) `elem` [ unPackageName n | (Dependency n _) <- missingDeps ] = bindNull i
src/Distribution/Nixpkgs/Haskell/FromCabal/License.hs+126−3
@@ -1,11 +1,16 @@
11{-# LANGUAGE ViewPatterns #-}
22
3−module Distribution.Nixpkgs.Haskell.FromCabal.License ( fromCabalLicense ) where
3+module Distribution.Nixpkgs.Haskell.FromCabal.License
4+ ( fromCabalLicense
5+ , fromSPDXLicense
6+ ) where
47
5−import Distribution.Nixpkgs.License
8+import Data.List (intercalate)
69import Distribution.License ( License(..), knownLicenses )
10+import Distribution.Nixpkgs.License
11+import Distribution.Pretty (prettyShow)
12+import qualified Distribution.SPDX as SPDX
713import Distribution.Text (display)
8−import Data.List (intercalate)
914import Distribution.Version
1015
1116-- TODO: Programmatically strip trailing zeros from license version numbers.
@@ -39,3 +44,121 @@ fromCabalLicense (UnknownLicense "CC0-1.0") = Known "stdenv.lib.l
3944fromCabalLicense (UnknownLicense "BSD3ClauseORApache20") = Known "stdenv.lib.licenses.bsd3"
4045fromCabalLicense l = error $ "Distribution.Nixpkgs.Haskell.FromCabal.License.fromCabalLicense: unknown license"
4146 ++ show l ++"\nChoose one of: " ++ intercalate ", " (map display knownLicenses)
47+
48+fromSPDXLicense :: SPDX.License -> Distribution.Nixpkgs.License.License
49+fromSPDXLicense SPDX.NONE = Unknown Nothing
50+fromSPDXLicense (SPDX.License expr) =
51+ case expr of
52+ SPDX.ELicense simpl Nothing ->
53+ -- Not handled: license exceptions
54+ case simpl of
55+ SPDX.ELicenseId lid ->
56+ case lid of
57+ SPDX.AFL_2_1 -> Known "stdenv.lib.licenses.afl21"
58+ SPDX.AFL_3_0 -> Known "stdenv.lib.licenses.afl3"
59+ SPDX.AGPL_3_0_only -> Known "stdenv.lib.licenses.agpl3"
60+ SPDX.AGPL_3_0_or_later -> Known "stdenv.lib.licenses.agpl3Plus"
61+ SPDX.APSL_2_0 -> Known "stdenv.lib.licenses.apsl20"
62+ SPDX.Artistic_1_0 -> Known "stdenv.lib.licenses.artistic1"
63+ SPDX.Artistic_2_0 -> Known "stdenv.lib.licenses.artistic2"
64+ SPDX.Apache_2_0 -> Known "stdenv.lib.licenses.asl20"
65+ SPDX.BSL_1_0 -> Known "stdenv.lib.licenses.boost"
66+ SPDX.Beerware -> Known "stdenv.lib.licenses.beerware"
67+ SPDX.NullBSD -> Known "stdenv.lib.licenses.bsd0"
68+ SPDX.BSD_2_Clause -> Known "stdenv.lib.licenses.bsd2"
69+ SPDX.BSD_3_Clause -> Known "stdenv.lib.licenses.bsd3"
70+ SPDX.BSD_4_Clause -> Known "stdenv.lib.licenses.bsdOriginal"
71+ SPDX.ClArtistic -> Known "stdenv.lib.licenses.clArtistic"
72+ SPDX.CC0_1_0 -> Known "stdenv.lib.licenses.cc0"
73+ SPDX.CC_BY_NC_SA_2_0 -> Known "stdenv.lib.licenses.cc-by-nc-sa-20"
74+ SPDX.CC_BY_NC_SA_2_5 -> Known "stdenv.lib.licenses.cc-by-nc-sa-25"
75+ SPDX.CC_BY_NC_SA_3_0 -> Known "stdenv.lib.licenses.cc-by-nc-sa-30"
76+ SPDX.CC_BY_NC_SA_4_0 -> Known "stdenv.lib.licenses.cc-by-nc-sa-40"
77+ SPDX.CC_BY_NC_4_0 -> Known "stdenv.lib.licenses.cc-by-nc-40"
78+ SPDX.CC_BY_ND_3_0 -> Known "stdenv.lib.licenses.cc-by-nd-30"
79+ SPDX.CC_BY_SA_2_5 -> Known "stdenv.lib.licenses.cc-by-sa-25"
80+ SPDX.CC_BY_3_0 -> Known "stdenv.lib.licenses.cc-by-30"
81+ SPDX.CC_BY_SA_3_0 -> Known "stdenv.lib.licenses.cc-by-sa-30"
82+ SPDX.CC_BY_4_0 -> Known "stdenv.lib.licenses.cc-by-40"
83+ SPDX.CC_BY_SA_4_0 -> Known "stdenv.lib.licenses.cc-by-sa-40"
84+ SPDX.CDDL_1_0 -> Known "stdenv.lib.licenses.cddl"
85+ SPDX.CECILL_2_0 -> Known "stdenv.lib.licenses.cecill20"
86+ SPDX.CECILL_B -> Known "stdenv.lib.licenses.cecill-b"
87+ SPDX.CECILL_C -> Known "stdenv.lib.licenses.cecill-c"
88+ SPDX.CPAL_1_0 -> Known "stdenv.lib.licenses.cpal10"
89+ SPDX.CPL_1_0 -> Known "stdenv.lib.licenses.cpl10"
90+ SPDX.Curl -> Known "stdenv.lib.licenses.curl"
91+ SPDX.DOC -> Known "stdenv.lib.licenses.doc"
92+ SPDX.EFL_1_0 -> Known "stdenv.lib.licenses.efl10"
93+ SPDX.EFL_2_0 -> Known "stdenv.lib.licenses.efl20"
94+ SPDX.EPL_1_0 -> Known "stdenv.lib.licenses.epl10"
95+ SPDX.EPL_2_0 -> Known "stdenv.lib.licenses.epl20"
96+ SPDX.EUPL_1_1 -> Known "stdenv.lib.licenses.eupl11"
97+ SPDX.GFDL_1_2_only -> Known "stdenv.lib.licenses.fdl12"
98+ SPDX.GFDL_1_3_only -> Known "stdenv.lib.licenses.fdl13"
99+ SPDX.GPL_1_0_only -> Known "stdenv.lib.licenses.gpl1"
100+ SPDX.GPL_1_0_or_later -> Known "stdenv.lib.licenses.gpl1Plus"
101+ SPDX.GPL_2_0_only -> Known "stdenv.lib.licenses.gpl2"
102+ SPDX.GPL_2_0_or_later -> Known "stdenv.lib.licenses.gpl2Plus"
103+ SPDX.GPL_3_0_only -> Known "stdenv.lib.licenses.gpl3"
104+ SPDX.GPL_3_0_or_later -> Known "stdenv.lib.licenses.gpl3Plus"
105+ SPDX.HPND -> Known "stdenv.lib.licenses.hpnd"
106+ SPDX.IJG -> Known "stdenv.lib.licenses.ijg"
107+ SPDX.ImageMagick -> Known "stdenv.lib.licenses.imagemagick"
108+ SPDX.IPA -> Known "stdenv.lib.licenses.ipa"
109+ SPDX.IPL_1_0 -> Known "stdenv.lib.licenses.ipl10"
110+ SPDX.ISC -> Known "stdenv.lib.licenses.isc"
111+ SPDX.JasPer_2_0 -> Known "stdenv.lib.licenses.jasper"
112+ SPDX.LGPL_2_0_only -> Known "stdenv.lib.licenses.lgpl2"
113+ SPDX.LGPL_2_0_or_later -> Known "stdenv.lib.licenses.lgpl2Plus"
114+ SPDX.LGPL_2_1_only -> Known "stdenv.lib.licenses.lgpl21"
115+ SPDX.LGPL_2_1_or_later -> Known "stdenv.lib.licenses.lgpl21Plus"
116+ SPDX.LGPL_3_0_only -> Known "stdenv.lib.licenses.lgpl3"
117+ SPDX.LGPL_3_0_or_later -> Known "stdenv.lib.licenses.lgpl3Plus"
118+ SPDX.Libpng -> Known "stdenv.lib.licenses.libpng"
119+ SPDX.Libtiff -> Known "stdenv.lib.licenses.libtiff"
120+ SPDX.LPPL_1_2 -> Known "stdenv.lib.licenses.lppl12"
121+ SPDX.LPPL_1_3c -> Known "stdenv.lib.licenses.lppl13c"
122+ SPDX.LPL_1_02 -> Known "stdenv.lib.licenses.lpl-102"
123+ SPDX.MIT -> Known "stdenv.lib.licenses.mit"
124+ SPDX.MPL_1_0 -> Known "stdenv.lib.licenses.mpl10"
125+ SPDX.MPL_1_1 -> Known "stdenv.lib.licenses.mpl11"
126+ SPDX.MPL_2_0 -> Known "stdenv.lib.licenses.mpl20"
127+ SPDX.MS_PL -> Known "stdenv.lib.licenses.mspl"
128+ SPDX.NCSA -> Known "stdenv.lib.licenses.ncsa"
129+ SPDX.NPOSL_3_0 -> Known "stdenv.lib.licenses.nposl3"
130+ SPDX.OFL_1_1 -> Known "stdenv.lib.licenses.ofl"
131+ SPDX.OLDAP_2_8 -> Known "stdenv.lib.licenses.openldap"
132+ SPDX.OpenSSL -> Known "stdenv.lib.licenses.openssl"
133+ SPDX.OSL_2_1 -> Known "stdenv.lib.licenses.osl21"
134+ SPDX.OSL_3_0 -> Known "stdenv.lib.licenses.osl3"
135+ SPDX.PHP_3_01 -> Known "stdenv.lib.licenses.php201"
136+ SPDX.PostgreSQL -> Known "stdenv.lib.licenses.postgresql"
137+ SPDX.Python_2_0 -> Known "stdenv.lib.licenses.psfl"
138+ SPDX.QPL_1_0 -> Known "stdenv.lib.licenses.qpl"
139+ SPDX.Ruby -> Known "stdenv.lib.licenses.ruby"
140+ SPDX.Sendmail -> Known "stdenv.lib.licenses.sendmail"
141+ SPDX.SGI_B_2_0 -> Known "stdenv.lib.licenses.sgi-b-0"
142+ SPDX.Sleepycat -> Known "stdenv.lib.licenses.sleepycat"
143+ SPDX.TCL -> Known "stdenv.lib.licenses.tcltx"
144+ SPDX.Unlicense -> Known "stdenv.lib.licenses.unlicense"
145+ SPDX.Vim -> Known "stdenv.lib.licenses.vim"
146+ SPDX.VSL_1_0 -> Known "stdenv.lib.licenses.vsl10"
147+ SPDX.Watcom_1_0 -> Known "stdenv.lib.licenses.watcom"
148+ SPDX.W3C -> Known "stdenv.lib.licenses.w3c"
149+ SPDX.WTFPL -> Known "stdenv.lib.licenses.wtfpl"
150+ SPDX.Zlib -> Known "stdenv.lib.licenses.zlib"
151+ SPDX.ZPL_2_0 -> Known "stdenv.lib.licenses.zpl20"
152+ SPDX.ZPL_2_1 -> Known "stdenv.lib.licenses.zpl21"
153+ _ ->
154+ -- Licence is not in Nixpkgs.
155+ -- Use the SPDX expression as a free-form license string.
156+ Unknown (Just $ prettyShow expr)
157+ _ ->
158+ -- Not handed: the '+' suffix and user-defined licences references.
159+ -- Use the SPDX expression as a free-form license string.
160+ Unknown (Just $ prettyShow expr)
161+ _ ->
162+ -- Not handled: compound expressions, not expressible in Nixpkgs.
163+ -- Use the SPDX expression as a free-form license string.
164+ Unknown (Just $ prettyShow expr)