cabal-plan 0.4.0.0 → 0.5.0.0
raw patch · 11 files changed
+1731/−747 lines, 11 filesdep ~ansi-terminalPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: ansi-terminal
API changes (from Hackage documentation)
+ Cabal.Plan: Bazaar :: RepoType
+ Cabal.Plan: CVS :: RepoType
+ Cabal.Plan: Darcs :: RepoType
+ Cabal.Plan: Git :: RepoType
+ Cabal.Plan: GnuArch :: RepoType
+ Cabal.Plan: LocalTarballPackage :: !FilePath -> PkgLoc
+ Cabal.Plan: LocalUnpackedPackage :: !FilePath -> PkgLoc
+ Cabal.Plan: Mercurial :: RepoType
+ Cabal.Plan: Monotone :: RepoType
+ Cabal.Plan: OtherRepoType :: Text -> RepoType
+ Cabal.Plan: RemoteSourceRepoPackage :: !SourceRepo -> PkgLoc
+ Cabal.Plan: RemoteTarballPackage :: !URI -> PkgLoc
+ Cabal.Plan: RepoLocal :: !FilePath -> Repo
+ Cabal.Plan: RepoRemote :: !URI -> Repo
+ Cabal.Plan: RepoSecure :: !URI -> Repo
+ Cabal.Plan: RepoTarballPackage :: !Repo -> PkgLoc
+ Cabal.Plan: SVN :: RepoType
+ Cabal.Plan: SourceRepo :: !Maybe RepoType -> !Maybe Text -> !Maybe Text -> !Maybe Text -> !Maybe Text -> !Maybe FilePath -> SourceRepo
+ Cabal.Plan: URI :: Text -> URI
+ Cabal.Plan: [srBranch] :: SourceRepo -> !Maybe Text
+ Cabal.Plan: [srLocation] :: SourceRepo -> !Maybe Text
+ Cabal.Plan: [srModule] :: SourceRepo -> !Maybe Text
+ Cabal.Plan: [srSubdir] :: SourceRepo -> !Maybe FilePath
+ Cabal.Plan: [srTag] :: SourceRepo -> !Maybe Text
+ Cabal.Plan: [srType] :: SourceRepo -> !Maybe RepoType
+ Cabal.Plan: [uCabalSha256] :: Unit -> !Maybe Sha256
+ Cabal.Plan: [uPkgSrc] :: Unit -> !Maybe PkgLoc
+ Cabal.Plan: data PkgLoc
+ Cabal.Plan: data Repo
+ Cabal.Plan: data RepoType
+ Cabal.Plan: data SourceRepo
+ Cabal.Plan: dispCompNameTarget :: PkgName -> CompName -> Text
+ Cabal.Plan: instance Data.Aeson.Types.FromJSON.FromJSON Cabal.Plan.PkgLoc
+ Cabal.Plan: instance Data.Aeson.Types.FromJSON.FromJSON Cabal.Plan.Repo
+ Cabal.Plan: instance Data.Aeson.Types.FromJSON.FromJSON Cabal.Plan.RepoType
+ Cabal.Plan: instance Data.Aeson.Types.FromJSON.FromJSON Cabal.Plan.SourceRepo
+ Cabal.Plan: instance Data.Aeson.Types.FromJSON.FromJSON Cabal.Plan.URI
+ Cabal.Plan: instance Data.Aeson.Types.FromJSON.FromJSONKey Cabal.Plan.URI
+ Cabal.Plan: instance Data.Aeson.Types.ToJSON.ToJSON Cabal.Plan.URI
+ Cabal.Plan: instance Data.Aeson.Types.ToJSON.ToJSONKey Cabal.Plan.URI
+ Cabal.Plan: instance GHC.Classes.Eq Cabal.Plan.PkgLoc
+ Cabal.Plan: instance GHC.Classes.Eq Cabal.Plan.Repo
+ Cabal.Plan: instance GHC.Classes.Eq Cabal.Plan.RepoType
+ Cabal.Plan: instance GHC.Classes.Eq Cabal.Plan.SourceRepo
+ Cabal.Plan: instance GHC.Classes.Eq Cabal.Plan.URI
+ Cabal.Plan: instance GHC.Classes.Ord Cabal.Plan.PkgLoc
+ Cabal.Plan: instance GHC.Classes.Ord Cabal.Plan.Repo
+ Cabal.Plan: instance GHC.Classes.Ord Cabal.Plan.RepoType
+ Cabal.Plan: instance GHC.Classes.Ord Cabal.Plan.SourceRepo
+ Cabal.Plan: instance GHC.Classes.Ord Cabal.Plan.URI
+ Cabal.Plan: instance GHC.Show.Show Cabal.Plan.PkgLoc
+ Cabal.Plan: instance GHC.Show.Show Cabal.Plan.Repo
+ Cabal.Plan: instance GHC.Show.Show Cabal.Plan.RepoType
+ Cabal.Plan: instance GHC.Show.Show Cabal.Plan.SourceRepo
+ Cabal.Plan: instance GHC.Show.Show Cabal.Plan.URI
+ Cabal.Plan: newtype URI
- Cabal.Plan: PlanJson :: !Ver -> !Ver -> !PkgId -> !Text -> !Text -> !(Map UnitId Unit) -> PlanJson
+ Cabal.Plan: PlanJson :: !Ver -> !Ver -> !PkgId -> !Text -> !Text -> !Map UnitId Unit -> PlanJson
- Cabal.Plan: Unit :: !UnitId -> !PkgId -> !UnitType -> !(Maybe Sha256) -> !(Map CompName CompInfo) -> !(Map FlagName Bool) -> !(Maybe FilePath) -> Unit
+ Cabal.Plan: Unit :: !UnitId -> !PkgId -> !UnitType -> !Maybe Sha256 -> !Maybe Sha256 -> !Map CompName CompInfo -> !Map FlagName Bool -> !Maybe FilePath -> !Maybe PkgLoc -> Unit
- Cabal.Plan: [pjUnits] :: PlanJson -> !(Map UnitId Unit)
+ Cabal.Plan: [pjUnits] :: PlanJson -> !Map UnitId Unit
- Cabal.Plan: [uComps] :: Unit -> !(Map CompName CompInfo)
+ Cabal.Plan: [uComps] :: Unit -> !Map CompName CompInfo
- Cabal.Plan: [uDistDir] :: Unit -> !(Maybe FilePath)
+ Cabal.Plan: [uDistDir] :: Unit -> !Maybe FilePath
- Cabal.Plan: [uFlags] :: Unit -> !(Map FlagName Bool)
+ Cabal.Plan: [uFlags] :: Unit -> !Map FlagName Bool
- Cabal.Plan: [uSha256] :: Unit -> !(Maybe Sha256)
+ Cabal.Plan: [uSha256] :: Unit -> !Maybe Sha256
Files
- ChangeLog.md +14/−0
- LICENSE +0/−674
- LICENSE.GPLv2 +339/−0
- LICENSE.GPLv3 +674/−0
- cabal-plan.cabal +29/−11
- example/cabal-plan.html +393/−0
- example/cabal-plan.md +62/−0
- src-exe/LicenseReport.hs +25/−13
- src-exe/cabal-plan.hs +47/−32
- src-topograph/Topograph.hs +4/−5
- src/Cabal/Plan.hs +144/−12
ChangeLog.md view
@@ -1,5 +1,19 @@ # Revision history for `cabal-plan` +## 0.5.0.0++### `lib:cabal-plan` Library++* New `dispCompNameTarget` function for pretty-printing `CompName`s in cabal's target-selector syntax.+* Add support for cabal 2.4's `pkg-src` package provenience metadata.+* Add support for cabal 2.4.1's `pkg-cabal-sha256` package description checksum field.++### `exe:cabal-plan` Executable++* Add support for including package description checksums in `fingerprint` output+* Add support for printing flag selection in `topo` output+* Fail gracefully in `license-report` when metadata cannot be found in index+ ## 0.4.0.0 ### `lib:cabal-plan` Library
− LICENSE
@@ -1,674 +0,0 @@- GNU GENERAL PUBLIC LICENSE- Version 3, 29 June 2007-- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>- Everyone is permitted to copy and distribute verbatim copies- of this license document, but changing it is not allowed.-- Preamble-- The GNU General Public License is a free, copyleft license for-software and other kinds of works.-- The licenses for most software and other practical works are designed-to take away your freedom to share and change the works. By contrast,-the GNU General Public License is intended to guarantee your freedom to-share and change all versions of a program--to make sure it remains free-software for all its users. We, the Free Software Foundation, use the-GNU General Public License for most of our software; it applies also to-any other work released this way by its authors. You can apply it to-your programs, too.-- When we speak of free software, we are referring to freedom, not-price. Our General Public Licenses are designed to make sure that you-have the freedom to distribute copies of free software (and charge for-them if you wish), that you receive source code or can get it if you-want it, that you can change the software or use pieces of it in new-free programs, and that you know you can do these things.-- To protect your rights, we need to prevent others from denying you-these rights or asking you to surrender the rights. Therefore, you have-certain responsibilities if you distribute copies of the software, or if-you modify it: responsibilities to respect the freedom of others.-- For example, if you distribute copies of such a program, whether-gratis or for a fee, you must pass on to the recipients the same-freedoms that you received. You must make sure that they, too, receive-or can get the source code. And you must show them these terms so they-know their rights.-- Developers that use the GNU GPL protect your rights with two steps:-(1) assert copyright on the software, and (2) offer you this License-giving you legal permission to copy, distribute and/or modify it.-- For the developers' and authors' protection, the GPL clearly explains-that there is no warranty for this free software. For both users' and-authors' sake, the GPL requires that modified versions be marked as-changed, so that their problems will not be attributed erroneously to-authors of previous versions.-- Some devices are designed to deny users access to install or run-modified versions of the software inside them, although the manufacturer-can do so. This is fundamentally incompatible with the aim of-protecting users' freedom to change the software. The systematic-pattern of such abuse occurs in the area of products for individuals to-use, which is precisely where it is most unacceptable. Therefore, we-have designed this version of the GPL to prohibit the practice for those-products. If such problems arise substantially in other domains, we-stand ready to extend this provision to those domains in future versions-of the GPL, as needed to protect the freedom of users.-- Finally, every program is threatened constantly by software patents.-States should not allow patents to restrict development and use of-software on general-purpose computers, but in those that do, we wish to-avoid the special danger that patents applied to a free program could-make it effectively proprietary. To prevent this, the GPL assures that-patents cannot be used to render the program non-free.-- The precise terms and conditions for copying, distribution and-modification follow.-- TERMS AND CONDITIONS-- 0. Definitions.-- "This License" refers to version 3 of the GNU General Public License.-- "Copyright" also means copyright-like laws that apply to other kinds of-works, such as semiconductor masks.-- "The Program" refers to any copyrightable work licensed under this-License. Each licensee is addressed as "you". "Licensees" and-"recipients" may be individuals or organizations.-- To "modify" a work means to copy from or adapt all or part of the work-in a fashion requiring copyright permission, other than the making of an-exact copy. The resulting work is called a "modified version" of the-earlier work or a work "based on" the earlier work.-- A "covered work" means either the unmodified Program or a work based-on the Program.-- To "propagate" a work means to do anything with it that, without-permission, would make you directly or secondarily liable for-infringement under applicable copyright law, except executing it on a-computer or modifying a private copy. Propagation includes copying,-distribution (with or without modification), making available to the-public, and in some countries other activities as well.-- To "convey" a work means any kind of propagation that enables other-parties to make or receive copies. Mere interaction with a user through-a computer network, with no transfer of a copy, is not conveying.-- An interactive user interface displays "Appropriate Legal Notices"-to the extent that it includes a convenient and prominently visible-feature that (1) displays an appropriate copyright notice, and (2)-tells the user that there is no warranty for the work (except to the-extent that warranties are provided), that licensees may convey the-work under this License, and how to view a copy of this License. If-the interface presents a list of user commands or options, such as a-menu, a prominent item in the list meets this criterion.-- 1. Source Code.-- The "source code" for a work means the preferred form of the work-for making modifications to it. "Object code" means any non-source-form of a work.-- A "Standard Interface" means an interface that either is an official-standard defined by a recognized standards body, or, in the case of-interfaces specified for a particular programming language, one that-is widely used among developers working in that language.-- The "System Libraries" of an executable work include anything, other-than the work as a whole, that (a) is included in the normal form of-packaging a Major Component, but which is not part of that Major-Component, and (b) serves only to enable use of the work with that-Major Component, or to implement a Standard Interface for which an-implementation is available to the public in source code form. A-"Major Component", in this context, means a major essential component-(kernel, window system, and so on) of the specific operating system-(if any) on which the executable work runs, or a compiler used to-produce the work, or an object code interpreter used to run it.-- The "Corresponding Source" for a work in object code form means all-the source code needed to generate, install, and (for an executable-work) run the object code and to modify the work, including scripts to-control those activities. However, it does not include the work's-System Libraries, or general-purpose tools or generally available free-programs which are used unmodified in performing those activities but-which are not part of the work. For example, Corresponding Source-includes interface definition files associated with source files for-the work, and the source code for shared libraries and dynamically-linked subprograms that the work is specifically designed to require,-such as by intimate data communication or control flow between those-subprograms and other parts of the work.-- The Corresponding Source need not include anything that users-can regenerate automatically from other parts of the Corresponding-Source.-- The Corresponding Source for a work in source code form is that-same work.-- 2. Basic Permissions.-- All rights granted under this License are granted for the term of-copyright on the Program, and are irrevocable provided the stated-conditions are met. This License explicitly affirms your unlimited-permission to run the unmodified Program. The output from running a-covered work is covered by this License only if the output, given its-content, constitutes a covered work. This License acknowledges your-rights of fair use or other equivalent, as provided by copyright law.-- You may make, run and propagate covered works that you do not-convey, without conditions so long as your license otherwise remains-in force. You may convey covered works to others for the sole purpose-of having them make modifications exclusively for you, or provide you-with facilities for running those works, provided that you comply with-the terms of this License in conveying all material for which you do-not control copyright. Those thus making or running the covered works-for you must do so exclusively on your behalf, under your direction-and control, on terms that prohibit them from making any copies of-your copyrighted material outside their relationship with you.-- Conveying under any other circumstances is permitted solely under-the conditions stated below. Sublicensing is not allowed; section 10-makes it unnecessary.-- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.-- No covered work shall be deemed part of an effective technological-measure under any applicable law fulfilling obligations under article-11 of the WIPO copyright treaty adopted on 20 December 1996, or-similar laws prohibiting or restricting circumvention of such-measures.-- When you convey a covered work, you waive any legal power to forbid-circumvention of technological measures to the extent such circumvention-is effected by exercising rights under this License with respect to-the covered work, and you disclaim any intention to limit operation or-modification of the work as a means of enforcing, against the work's-users, your or third parties' legal rights to forbid circumvention of-technological measures.-- 4. Conveying Verbatim Copies.-- You may convey verbatim copies of the Program's source code as you-receive it, in any medium, provided that you conspicuously and-appropriately publish on each copy an appropriate copyright notice;-keep intact all notices stating that this License and any-non-permissive terms added in accord with section 7 apply to the code;-keep intact all notices of the absence of any warranty; and give all-recipients a copy of this License along with the Program.-- You may charge any price or no price for each copy that you convey,-and you may offer support or warranty protection for a fee.-- 5. Conveying Modified Source Versions.-- You may convey a work based on the Program, or the modifications to-produce it from the Program, in the form of source code under the-terms of section 4, provided that you also meet all of these conditions:-- a) The work must carry prominent notices stating that you modified- it, and giving a relevant date.-- b) The work must carry prominent notices stating that it is- released under this License and any conditions added under section- 7. This requirement modifies the requirement in section 4 to- "keep intact all notices".-- c) You must license the entire work, as a whole, under this- License to anyone who comes into possession of a copy. This- License will therefore apply, along with any applicable section 7- additional terms, to the whole of the work, and all its parts,- regardless of how they are packaged. This License gives no- permission to license the work in any other way, but it does not- invalidate such permission if you have separately received it.-- d) If the work has interactive user interfaces, each must display- Appropriate Legal Notices; however, if the Program has interactive- interfaces that do not display Appropriate Legal Notices, your- work need not make them do so.-- A compilation of a covered work with other separate and independent-works, which are not by their nature extensions of the covered work,-and which are not combined with it such as to form a larger program,-in or on a volume of a storage or distribution medium, is called an-"aggregate" if the compilation and its resulting copyright are not-used to limit the access or legal rights of the compilation's users-beyond what the individual works permit. Inclusion of a covered work-in an aggregate does not cause this License to apply to the other-parts of the aggregate.-- 6. Conveying Non-Source Forms.-- You may convey a covered work in object code form under the terms-of sections 4 and 5, provided that you also convey the-machine-readable Corresponding Source under the terms of this License,-in one of these ways:-- a) Convey the object code in, or embodied in, a physical product- (including a physical distribution medium), accompanied by the- Corresponding Source fixed on a durable physical medium- customarily used for software interchange.-- b) Convey the object code in, or embodied in, a physical product- (including a physical distribution medium), accompanied by a- written offer, valid for at least three years and valid for as- long as you offer spare parts or customer support for that product- model, to give anyone who possesses the object code either (1) a- copy of the Corresponding Source for all the software in the- product that is covered by this License, on a durable physical- medium customarily used for software interchange, for a price no- more than your reasonable cost of physically performing this- conveying of source, or (2) access to copy the- Corresponding Source from a network server at no charge.-- c) Convey individual copies of the object code with a copy of the- written offer to provide the Corresponding Source. This- alternative is allowed only occasionally and noncommercially, and- only if you received the object code with such an offer, in accord- with subsection 6b.-- d) Convey the object code by offering access from a designated- place (gratis or for a charge), and offer equivalent access to the- Corresponding Source in the same way through the same place at no- further charge. You need not require recipients to copy the- Corresponding Source along with the object code. If the place to- copy the object code is a network server, the Corresponding Source- may be on a different server (operated by you or a third party)- that supports equivalent copying facilities, provided you maintain- clear directions next to the object code saying where to find the- Corresponding Source. Regardless of what server hosts the- Corresponding Source, you remain obligated to ensure that it is- available for as long as needed to satisfy these requirements.-- e) Convey the object code using peer-to-peer transmission, provided- you inform other peers where the object code and Corresponding- Source of the work are being offered to the general public at no- charge under subsection 6d.-- A separable portion of the object code, whose source code is excluded-from the Corresponding Source as a System Library, need not be-included in conveying the object code work.-- A "User Product" is either (1) a "consumer product", which means any-tangible personal property which is normally used for personal, family,-or household purposes, or (2) anything designed or sold for incorporation-into a dwelling. In determining whether a product is a consumer product,-doubtful cases shall be resolved in favor of coverage. For a particular-product received by a particular user, "normally used" refers to a-typical or common use of that class of product, regardless of the status-of the particular user or of the way in which the particular user-actually uses, or expects or is expected to use, the product. A product-is a consumer product regardless of whether the product has substantial-commercial, industrial or non-consumer uses, unless such uses represent-the only significant mode of use of the product.-- "Installation Information" for a User Product means any methods,-procedures, authorization keys, or other information required to install-and execute modified versions of a covered work in that User Product from-a modified version of its Corresponding Source. The information must-suffice to ensure that the continued functioning of the modified object-code is in no case prevented or interfered with solely because-modification has been made.-- If you convey an object code work under this section in, or with, or-specifically for use in, a User Product, and the conveying occurs as-part of a transaction in which the right of possession and use of the-User Product is transferred to the recipient in perpetuity or for a-fixed term (regardless of how the transaction is characterized), the-Corresponding Source conveyed under this section must be accompanied-by the Installation Information. But this requirement does not apply-if neither you nor any third party retains the ability to install-modified object code on the User Product (for example, the work has-been installed in ROM).-- The requirement to provide Installation Information does not include a-requirement to continue to provide support service, warranty, or updates-for a work that has been modified or installed by the recipient, or for-the User Product in which it has been modified or installed. Access to a-network may be denied when the modification itself materially and-adversely affects the operation of the network or violates the rules and-protocols for communication across the network.-- Corresponding Source conveyed, and Installation Information provided,-in accord with this section must be in a format that is publicly-documented (and with an implementation available to the public in-source code form), and must require no special password or key for-unpacking, reading or copying.-- 7. Additional Terms.-- "Additional permissions" are terms that supplement the terms of this-License by making exceptions from one or more of its conditions.-Additional permissions that are applicable to the entire Program shall-be treated as though they were included in this License, to the extent-that they are valid under applicable law. If additional permissions-apply only to part of the Program, that part may be used separately-under those permissions, but the entire Program remains governed by-this License without regard to the additional permissions.-- When you convey a copy of a covered work, you may at your option-remove any additional permissions from that copy, or from any part of-it. (Additional permissions may be written to require their own-removal in certain cases when you modify the work.) You may place-additional permissions on material, added by you to a covered work,-for which you have or can give appropriate copyright permission.-- Notwithstanding any other provision of this License, for material you-add to a covered work, you may (if authorized by the copyright holders of-that material) supplement the terms of this License with terms:-- a) Disclaiming warranty or limiting liability differently from the- terms of sections 15 and 16 of this License; or-- b) Requiring preservation of specified reasonable legal notices or- author attributions in that material or in the Appropriate Legal- Notices displayed by works containing it; or-- c) Prohibiting misrepresentation of the origin of that material, or- requiring that modified versions of such material be marked in- reasonable ways as different from the original version; or-- d) Limiting the use for publicity purposes of names of licensors or- authors of the material; or-- e) Declining to grant rights under trademark law for use of some- trade names, trademarks, or service marks; or-- f) Requiring indemnification of licensors and authors of that- material by anyone who conveys the material (or modified versions of- it) with contractual assumptions of liability to the recipient, for- any liability that these contractual assumptions directly impose on- those licensors and authors.-- All other non-permissive additional terms are considered "further-restrictions" within the meaning of section 10. If the Program as you-received it, or any part of it, contains a notice stating that it is-governed by this License along with a term that is a further-restriction, you may remove that term. If a license document contains-a further restriction but permits relicensing or conveying under this-License, you may add to a covered work material governed by the terms-of that license document, provided that the further restriction does-not survive such relicensing or conveying.-- If you add terms to a covered work in accord with this section, you-must place, in the relevant source files, a statement of the-additional terms that apply to those files, or a notice indicating-where to find the applicable terms.-- Additional terms, permissive or non-permissive, may be stated in the-form of a separately written license, or stated as exceptions;-the above requirements apply either way.-- 8. Termination.-- You may not propagate or modify a covered work except as expressly-provided under this License. Any attempt otherwise to propagate or-modify it is void, and will automatically terminate your rights under-this License (including any patent licenses granted under the third-paragraph of section 11).-- However, if you cease all violation of this License, then your-license from a particular copyright holder is reinstated (a)-provisionally, unless and until the copyright holder explicitly and-finally terminates your license, and (b) permanently, if the copyright-holder fails to notify you of the violation by some reasonable means-prior to 60 days after the cessation.-- Moreover, your license from a particular copyright holder is-reinstated permanently if the copyright holder notifies you of the-violation by some reasonable means, this is the first time you have-received notice of violation of this License (for any work) from that-copyright holder, and you cure the violation prior to 30 days after-your receipt of the notice.-- Termination of your rights under this section does not terminate the-licenses of parties who have received copies or rights from you under-this License. If your rights have been terminated and not permanently-reinstated, you do not qualify to receive new licenses for the same-material under section 10.-- 9. Acceptance Not Required for Having Copies.-- You are not required to accept this License in order to receive or-run a copy of the Program. Ancillary propagation of a covered work-occurring solely as a consequence of using peer-to-peer transmission-to receive a copy likewise does not require acceptance. However,-nothing other than this License grants you permission to propagate or-modify any covered work. These actions infringe copyright if you do-not accept this License. Therefore, by modifying or propagating a-covered work, you indicate your acceptance of this License to do so.-- 10. Automatic Licensing of Downstream Recipients.-- Each time you convey a covered work, the recipient automatically-receives a license from the original licensors, to run, modify and-propagate that work, subject to this License. You are not responsible-for enforcing compliance by third parties with this License.-- An "entity transaction" is a transaction transferring control of an-organization, or substantially all assets of one, or subdividing an-organization, or merging organizations. If propagation of a covered-work results from an entity transaction, each party to that-transaction who receives a copy of the work also receives whatever-licenses to the work the party's predecessor in interest had or could-give under the previous paragraph, plus a right to possession of the-Corresponding Source of the work from the predecessor in interest, if-the predecessor has it or can get it with reasonable efforts.-- You may not impose any further restrictions on the exercise of the-rights granted or affirmed under this License. For example, you may-not impose a license fee, royalty, or other charge for exercise of-rights granted under this License, and you may not initiate litigation-(including a cross-claim or counterclaim in a lawsuit) alleging that-any patent claim is infringed by making, using, selling, offering for-sale, or importing the Program or any portion of it.-- 11. Patents.-- A "contributor" is a copyright holder who authorizes use under this-License of the Program or a work on which the Program is based. The-work thus licensed is called the contributor's "contributor version".-- A contributor's "essential patent claims" are all patent claims-owned or controlled by the contributor, whether already acquired or-hereafter acquired, that would be infringed by some manner, permitted-by this License, of making, using, or selling its contributor version,-but do not include claims that would be infringed only as a-consequence of further modification of the contributor version. For-purposes of this definition, "control" includes the right to grant-patent sublicenses in a manner consistent with the requirements of-this License.-- Each contributor grants you a non-exclusive, worldwide, royalty-free-patent license under the contributor's essential patent claims, to-make, use, sell, offer for sale, import and otherwise run, modify and-propagate the contents of its contributor version.-- In the following three paragraphs, a "patent license" is any express-agreement or commitment, however denominated, not to enforce a patent-(such as an express permission to practice a patent or covenant not to-sue for patent infringement). To "grant" such a patent license to a-party means to make such an agreement or commitment not to enforce a-patent against the party.-- If you convey a covered work, knowingly relying on a patent license,-and the Corresponding Source of the work is not available for anyone-to copy, free of charge and under the terms of this License, through a-publicly available network server or other readily accessible means,-then you must either (1) cause the Corresponding Source to be so-available, or (2) arrange to deprive yourself of the benefit of the-patent license for this particular work, or (3) arrange, in a manner-consistent with the requirements of this License, to extend the patent-license to downstream recipients. "Knowingly relying" means you have-actual knowledge that, but for the patent license, your conveying the-covered work in a country, or your recipient's use of the covered work-in a country, would infringe one or more identifiable patents in that-country that you have reason to believe are valid.-- If, pursuant to or in connection with a single transaction or-arrangement, you convey, or propagate by procuring conveyance of, a-covered work, and grant a patent license to some of the parties-receiving the covered work authorizing them to use, propagate, modify-or convey a specific copy of the covered work, then the patent license-you grant is automatically extended to all recipients of the covered-work and works based on it.-- A patent license is "discriminatory" if it does not include within-the scope of its coverage, prohibits the exercise of, or is-conditioned on the non-exercise of one or more of the rights that are-specifically granted under this License. You may not convey a covered-work if you are a party to an arrangement with a third party that is-in the business of distributing software, under which you make payment-to the third party based on the extent of your activity of conveying-the work, and under which the third party grants, to any of the-parties who would receive the covered work from you, a discriminatory-patent license (a) in connection with copies of the covered work-conveyed by you (or copies made from those copies), or (b) primarily-for and in connection with specific products or compilations that-contain the covered work, unless you entered into that arrangement,-or that patent license was granted, prior to 28 March 2007.-- Nothing in this License shall be construed as excluding or limiting-any implied license or other defenses to infringement that may-otherwise be available to you under applicable patent law.-- 12. No Surrender of Others' Freedom.-- If conditions are imposed on you (whether by court order, agreement or-otherwise) that contradict the conditions of this License, they do not-excuse you from the conditions of this License. If you cannot convey a-covered work so as to satisfy simultaneously your obligations under this-License and any other pertinent obligations, then as a consequence you may-not convey it at all. For example, if you agree to terms that obligate you-to collect a royalty for further conveying from those to whom you convey-the Program, the only way you could satisfy both those terms and this-License would be to refrain entirely from conveying the Program.-- 13. Use with the GNU Affero General Public License.-- Notwithstanding any other provision of this License, you have-permission to link or combine any covered work with a work licensed-under version 3 of the GNU Affero General Public License into a single-combined work, and to convey the resulting work. The terms of this-License will continue to apply to the part which is the covered work,-but the special requirements of the GNU Affero General Public License,-section 13, concerning interaction through a network will apply to the-combination as such.-- 14. Revised Versions of this License.-- The Free Software Foundation may publish revised and/or new versions of-the GNU General Public License from time to time. Such new versions will-be similar in spirit to the present version, but may differ in detail to-address new problems or concerns.-- Each version is given a distinguishing version number. If the-Program specifies that a certain numbered version of the GNU General-Public License "or any later version" applies to it, you have the-option of following the terms and conditions either of that numbered-version or of any later version published by the Free Software-Foundation. If the Program does not specify a version number of the-GNU General Public License, you may choose any version ever published-by the Free Software Foundation.-- If the Program specifies that a proxy can decide which future-versions of the GNU General Public License can be used, that proxy's-public statement of acceptance of a version permanently authorizes you-to choose that version for the Program.-- Later license versions may give you additional or different-permissions. However, no additional obligations are imposed on any-author or copyright holder as a result of your choosing to follow a-later version.-- 15. Disclaimer of Warranty.-- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.-- 16. Limitation of Liability.-- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF-SUCH DAMAGES.-- 17. Interpretation of Sections 15 and 16.-- If the disclaimer of warranty and limitation of liability provided-above cannot be given local legal effect according to their terms,-reviewing courts shall apply local law that most closely approximates-an absolute waiver of all civil liability in connection with the-Program, unless a warranty or assumption of liability accompanies a-copy of the Program in return for a fee.-- END OF TERMS AND CONDITIONS-- How to Apply These Terms to Your New Programs-- If you develop a new program, and you want it to be of the greatest-possible use to the public, the best way to achieve this is to make it-free software which everyone can redistribute and change under these terms.-- To do so, attach the following notices to the program. It is safest-to attach them to the start of each source file to most effectively-state the exclusion of warranty; and each file should have at least-the "copyright" line and a pointer to where the full notice is found.-- <one line to give the program's name and a brief idea of what it does.>- Copyright (C) <year> <name of author>-- This program is free software: you can redistribute it and/or modify- it under the terms of the GNU General Public License as published by- the Free Software Foundation, either version 3 of the License, or- (at your option) any later version.-- This program is distributed in the hope that it will be useful,- but WITHOUT ANY WARRANTY; without even the implied warranty of- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the- GNU General Public License for more details.-- You should have received a copy of the GNU General Public License- along with this program. If not, see <http://www.gnu.org/licenses/>.--Also add information on how to contact you by electronic and paper mail.-- If the program does terminal interaction, make it output a short-notice like this when it starts in an interactive mode:-- <program> Copyright (C) <year> <name of author>- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.- This is free software, and you are welcome to redistribute it- under certain conditions; type `show c' for details.--The hypothetical commands `show w' and `show c' should show the appropriate-parts of the General Public License. Of course, your program's commands-might be different; for a GUI interface, you would use an "about box".-- You should also get your employer (if you work as a programmer) or school,-if any, to sign a "copyright disclaimer" for the program, if necessary.-For more information on this, and how to apply and follow the GNU GPL, see-<http://www.gnu.org/licenses/>.-- The GNU General Public License does not permit incorporating your program-into proprietary programs. If your program is a subroutine library, you-may consider it more useful to permit linking proprietary applications with-the library. If this is what you want to do, use the GNU Lesser General-Public License instead of this License. But first, please read-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+ LICENSE.GPLv2 view
@@ -0,0 +1,339 @@+ GNU GENERAL PUBLIC LICENSE+ Version 2, June 1991++ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA+ Everyone is permitted to copy and distribute verbatim copies+ of this license document, but changing it is not allowed.++ Preamble++ The licenses for most software are designed to take away your+freedom to share and change it. By contrast, the GNU General Public+License is intended to guarantee your freedom to share and change free+software--to make sure the software is free for all its users. This+General Public License applies to most of the Free Software+Foundation's software and to any other program whose authors commit to+using it. (Some other Free Software Foundation software is covered by+the GNU Lesser General Public License instead.) You can apply it to+your programs, too.++ When we speak of free software, we are referring to freedom, not+price. Our General Public Licenses are designed to make sure that you+have the freedom to distribute copies of free software (and charge for+this service if you wish), that you receive source code or can get it+if you want it, that you can change the software or use pieces of it+in new free programs; and that you know you can do these things.++ To protect your rights, we need to make restrictions that forbid+anyone to deny you these rights or to ask you to surrender the rights.+These restrictions translate to certain responsibilities for you if you+distribute copies of the software, or if you modify it.++ For example, if you distribute copies of such a program, whether+gratis or for a fee, you must give the recipients all the rights that+you have. You must make sure that they, too, receive or can get the+source code. And you must show them these terms so they know their+rights.++ We protect your rights with two steps: (1) copyright the software, and+(2) offer you this license which gives you legal permission to copy,+distribute and/or modify the software.++ Also, for each author's protection and ours, we want to make certain+that everyone understands that there is no warranty for this free+software. If the software is modified by someone else and passed on, we+want its recipients to know that what they have is not the original, so+that any problems introduced by others will not reflect on the original+authors' reputations.++ Finally, any free program is threatened constantly by software+patents. We wish to avoid the danger that redistributors of a free+program will individually obtain patent licenses, in effect making the+program proprietary. To prevent this, we have made it clear that any+patent must be licensed for everyone's free use or not licensed at all.++ The precise terms and conditions for copying, distribution and+modification follow.++ GNU GENERAL PUBLIC LICENSE+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION++ 0. This License applies to any program or other work which contains+a notice placed by the copyright holder saying it may be distributed+under the terms of this General Public License. The "Program", below,+refers to any such program or work, and a "work based on the Program"+means either the Program or any derivative work under copyright law:+that is to say, a work containing the Program or a portion of it,+either verbatim or with modifications and/or translated into another+language. (Hereinafter, translation is included without limitation in+the term "modification".) Each licensee is addressed as "you".++Activities other than copying, distribution and modification are not+covered by this License; they are outside its scope. The act of+running the Program is not restricted, and the output from the Program+is covered only if its contents constitute a work based on the+Program (independent of having been made by running the Program).+Whether that is true depends on what the Program does.++ 1. You may copy and distribute verbatim copies of the Program's+source code as you receive it, in any medium, provided that you+conspicuously and appropriately publish on each copy an appropriate+copyright notice and disclaimer of warranty; keep intact all the+notices that refer to this License and to the absence of any warranty;+and give any other recipients of the Program a copy of this License+along with the Program.++You may charge a fee for the physical act of transferring a copy, and+you may at your option offer warranty protection in exchange for a fee.++ 2. You may modify your copy or copies of the Program or any portion+of it, thus forming a work based on the Program, and copy and+distribute such modifications or work under the terms of Section 1+above, provided that you also meet all of these conditions:++ a) You must cause the modified files to carry prominent notices+ stating that you changed the files and the date of any change.++ b) You must cause any work that you distribute or publish, that in+ whole or in part contains or is derived from the Program or any+ part thereof, to be licensed as a whole at no charge to all third+ parties under the terms of this License.++ c) If the modified program normally reads commands interactively+ when run, you must cause it, when started running for such+ interactive use in the most ordinary way, to print or display an+ announcement including an appropriate copyright notice and a+ notice that there is no warranty (or else, saying that you provide+ a warranty) and that users may redistribute the program under+ these conditions, and telling the user how to view a copy of this+ License. (Exception: if the Program itself is interactive but+ does not normally print such an announcement, your work based on+ the Program is not required to print an announcement.)++These requirements apply to the modified work as a whole. If+identifiable sections of that work are not derived from the Program,+and can be reasonably considered independent and separate works in+themselves, then this License, and its terms, do not apply to those+sections when you distribute them as separate works. But when you+distribute the same sections as part of a whole which is a work based+on the Program, the distribution of the whole must be on the terms of+this License, whose permissions for other licensees extend to the+entire whole, and thus to each and every part regardless of who wrote it.++Thus, it is not the intent of this section to claim rights or contest+your rights to work written entirely by you; rather, the intent is to+exercise the right to control the distribution of derivative or+collective works based on the Program.++In addition, mere aggregation of another work not based on the Program+with the Program (or with a work based on the Program) on a volume of+a storage or distribution medium does not bring the other work under+the scope of this License.++ 3. You may copy and distribute the Program (or a work based on it,+under Section 2) in object code or executable form under the terms of+Sections 1 and 2 above provided that you also do one of the following:++ a) Accompany it with the complete corresponding machine-readable+ source code, which must be distributed under the terms of Sections+ 1 and 2 above on a medium customarily used for software interchange; or,++ b) Accompany it with a written offer, valid for at least three+ years, to give any third party, for a charge no more than your+ cost of physically performing source distribution, a complete+ machine-readable copy of the corresponding source code, to be+ distributed under the terms of Sections 1 and 2 above on a medium+ customarily used for software interchange; or,++ c) Accompany it with the information you received as to the offer+ to distribute corresponding source code. (This alternative is+ allowed only for noncommercial distribution and only if you+ received the program in object code or executable form with such+ an offer, in accord with Subsection b above.)++The source code for a work means the preferred form of the work for+making modifications to it. For an executable work, complete source+code means all the source code for all modules it contains, plus any+associated interface definition files, plus the scripts used to+control compilation and installation of the executable. However, as a+special exception, the source code distributed need not include+anything that is normally distributed (in either source or binary+form) with the major components (compiler, kernel, and so on) of the+operating system on which the executable runs, unless that component+itself accompanies the executable.++If distribution of executable or object code is made by offering+access to copy from a designated place, then offering equivalent+access to copy the source code from the same place counts as+distribution of the source code, even though third parties are not+compelled to copy the source along with the object code.++ 4. You may not copy, modify, sublicense, or distribute the Program+except as expressly provided under this License. Any attempt+otherwise to copy, modify, sublicense or distribute the Program is+void, and will automatically terminate your rights under this License.+However, parties who have received copies, or rights, from you under+this License will not have their licenses terminated so long as such+parties remain in full compliance.++ 5. You are not required to accept this License, since you have not+signed it. However, nothing else grants you permission to modify or+distribute the Program or its derivative works. These actions are+prohibited by law if you do not accept this License. Therefore, by+modifying or distributing the Program (or any work based on the+Program), you indicate your acceptance of this License to do so, and+all its terms and conditions for copying, distributing or modifying+the Program or works based on it.++ 6. Each time you redistribute the Program (or any work based on the+Program), the recipient automatically receives a license from the+original licensor to copy, distribute or modify the Program subject to+these terms and conditions. You may not impose any further+restrictions on the recipients' exercise of the rights granted herein.+You are not responsible for enforcing compliance by third parties to+this License.++ 7. If, as a consequence of a court judgment or allegation of patent+infringement or for any other reason (not limited to patent issues),+conditions are imposed on you (whether by court order, agreement or+otherwise) that contradict the conditions of this License, they do not+excuse you from the conditions of this License. If you cannot+distribute so as to satisfy simultaneously your obligations under this+License and any other pertinent obligations, then as a consequence you+may not distribute the Program at all. For example, if a patent+license would not permit royalty-free redistribution of the Program by+all those who receive copies directly or indirectly through you, then+the only way you could satisfy both it and this License would be to+refrain entirely from distribution of the Program.++If any portion of this section is held invalid or unenforceable under+any particular circumstance, the balance of the section is intended to+apply and the section as a whole is intended to apply in other+circumstances.++It is not the purpose of this section to induce you to infringe any+patents or other property right claims or to contest validity of any+such claims; this section has the sole purpose of protecting the+integrity of the free software distribution system, which is+implemented by public license practices. Many people have made+generous contributions to the wide range of software distributed+through that system in reliance on consistent application of that+system; it is up to the author/donor to decide if he or she is willing+to distribute software through any other system and a licensee cannot+impose that choice.++This section is intended to make thoroughly clear what is believed to+be a consequence of the rest of this License.++ 8. If the distribution and/or use of the Program is restricted in+certain countries either by patents or by copyrighted interfaces, the+original copyright holder who places the Program under this License+may add an explicit geographical distribution limitation excluding+those countries, so that distribution is permitted only in or among+countries not thus excluded. In such case, this License incorporates+the limitation as if written in the body of this License.++ 9. The Free Software Foundation may publish revised and/or new versions+of the General Public License from time to time. Such new versions will+be similar in spirit to the present version, but may differ in detail to+address new problems or concerns.++Each version is given a distinguishing version number. If the Program+specifies a version number of this License which applies to it and "any+later version", you have the option of following the terms and conditions+either of that version or of any later version published by the Free+Software Foundation. If the Program does not specify a version number of+this License, you may choose any version ever published by the Free Software+Foundation.++ 10. If you wish to incorporate parts of the Program into other free+programs whose distribution conditions are different, write to the author+to ask for permission. For software which is copyrighted by the Free+Software Foundation, write to the Free Software Foundation; we sometimes+make exceptions for this. Our decision will be guided by the two goals+of preserving the free status of all derivatives of our free software and+of promoting the sharing and reuse of software generally.++ NO WARRANTY++ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,+REPAIR OR CORRECTION.++ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE+POSSIBILITY OF SUCH DAMAGES.++ END OF TERMS AND CONDITIONS++ How to Apply These Terms to Your New Programs++ If you develop a new program, and you want it to be of the greatest+possible use to the public, the best way to achieve this is to make it+free software which everyone can redistribute and change under these terms.++ To do so, attach the following notices to the program. It is safest+to attach them to the start of each source file to most effectively+convey the exclusion of warranty; and each file should have at least+the "copyright" line and a pointer to where the full notice is found.++ <one line to give the program's name and a brief idea of what it does.>+ Copyright (C) <year> <name of author>++ This program is free software; you can redistribute it and/or modify+ it under the terms of the GNU General Public License as published by+ the Free Software Foundation; either version 2 of the License, or+ (at your option) any later version.++ This program is distributed in the hope that it will be useful,+ but WITHOUT ANY WARRANTY; without even the implied warranty of+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+ GNU General Public License for more details.++ You should have received a copy of the GNU General Public License along+ with this program; if not, write to the Free Software Foundation, Inc.,+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.++Also add information on how to contact you by electronic and paper mail.++If the program is interactive, make it output a short notice like this+when it starts in an interactive mode:++ Gnomovision version 69, Copyright (C) year name of author+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.+ This is free software, and you are welcome to redistribute it+ under certain conditions; type `show c' for details.++The hypothetical commands `show w' and `show c' should show the appropriate+parts of the General Public License. Of course, the commands you use may+be called something other than `show w' and `show c'; they could even be+mouse-clicks or menu items--whatever suits your program.++You should also get your employer (if you work as a programmer) or your+school, if any, to sign a "copyright disclaimer" for the program, if+necessary. Here is a sample; alter the names:++ Yoyodyne, Inc., hereby disclaims all copyright interest in the program+ `Gnomovision' (which makes passes at compilers) written by James Hacker.++ <signature of Ty Coon>, 1 April 1989+ Ty Coon, President of Vice++This General Public License does not permit incorporating your program into+proprietary programs. If your program is a subroutine library, you may+consider it more useful to permit linking proprietary applications with the+library. If this is what you want to do, use the GNU Lesser General+Public License instead of this License.
+ LICENSE.GPLv3 view
@@ -0,0 +1,674 @@+ GNU GENERAL PUBLIC LICENSE+ Version 3, 29 June 2007++ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>+ Everyone is permitted to copy and distribute verbatim copies+ of this license document, but changing it is not allowed.++ Preamble++ The GNU General Public License is a free, copyleft license for+software and other kinds of works.++ The licenses for most software and other practical works are designed+to take away your freedom to share and change the works. By contrast,+the GNU General Public License is intended to guarantee your freedom to+share and change all versions of a program--to make sure it remains free+software for all its users. We, the Free Software Foundation, use the+GNU General Public License for most of our software; it applies also to+any other work released this way by its authors. You can apply it to+your programs, too.++ When we speak of free software, we are referring to freedom, not+price. Our General Public Licenses are designed to make sure that you+have the freedom to distribute copies of free software (and charge for+them if you wish), that you receive source code or can get it if you+want it, that you can change the software or use pieces of it in new+free programs, and that you know you can do these things.++ To protect your rights, we need to prevent others from denying you+these rights or asking you to surrender the rights. Therefore, you have+certain responsibilities if you distribute copies of the software, or if+you modify it: responsibilities to respect the freedom of others.++ For example, if you distribute copies of such a program, whether+gratis or for a fee, you must pass on to the recipients the same+freedoms that you received. You must make sure that they, too, receive+or can get the source code. And you must show them these terms so they+know their rights.++ Developers that use the GNU GPL protect your rights with two steps:+(1) assert copyright on the software, and (2) offer you this License+giving you legal permission to copy, distribute and/or modify it.++ For the developers' and authors' protection, the GPL clearly explains+that there is no warranty for this free software. For both users' and+authors' sake, the GPL requires that modified versions be marked as+changed, so that their problems will not be attributed erroneously to+authors of previous versions.++ Some devices are designed to deny users access to install or run+modified versions of the software inside them, although the manufacturer+can do so. This is fundamentally incompatible with the aim of+protecting users' freedom to change the software. The systematic+pattern of such abuse occurs in the area of products for individuals to+use, which is precisely where it is most unacceptable. Therefore, we+have designed this version of the GPL to prohibit the practice for those+products. If such problems arise substantially in other domains, we+stand ready to extend this provision to those domains in future versions+of the GPL, as needed to protect the freedom of users.++ Finally, every program is threatened constantly by software patents.+States should not allow patents to restrict development and use of+software on general-purpose computers, but in those that do, we wish to+avoid the special danger that patents applied to a free program could+make it effectively proprietary. To prevent this, the GPL assures that+patents cannot be used to render the program non-free.++ The precise terms and conditions for copying, distribution and+modification follow.++ TERMS AND CONDITIONS++ 0. Definitions.++ "This License" refers to version 3 of the GNU General Public License.++ "Copyright" also means copyright-like laws that apply to other kinds of+works, such as semiconductor masks.++ "The Program" refers to any copyrightable work licensed under this+License. Each licensee is addressed as "you". "Licensees" and+"recipients" may be individuals or organizations.++ To "modify" a work means to copy from or adapt all or part of the work+in a fashion requiring copyright permission, other than the making of an+exact copy. The resulting work is called a "modified version" of the+earlier work or a work "based on" the earlier work.++ A "covered work" means either the unmodified Program or a work based+on the Program.++ To "propagate" a work means to do anything with it that, without+permission, would make you directly or secondarily liable for+infringement under applicable copyright law, except executing it on a+computer or modifying a private copy. Propagation includes copying,+distribution (with or without modification), making available to the+public, and in some countries other activities as well.++ To "convey" a work means any kind of propagation that enables other+parties to make or receive copies. Mere interaction with a user through+a computer network, with no transfer of a copy, is not conveying.++ An interactive user interface displays "Appropriate Legal Notices"+to the extent that it includes a convenient and prominently visible+feature that (1) displays an appropriate copyright notice, and (2)+tells the user that there is no warranty for the work (except to the+extent that warranties are provided), that licensees may convey the+work under this License, and how to view a copy of this License. If+the interface presents a list of user commands or options, such as a+menu, a prominent item in the list meets this criterion.++ 1. Source Code.++ The "source code" for a work means the preferred form of the work+for making modifications to it. "Object code" means any non-source+form of a work.++ A "Standard Interface" means an interface that either is an official+standard defined by a recognized standards body, or, in the case of+interfaces specified for a particular programming language, one that+is widely used among developers working in that language.++ The "System Libraries" of an executable work include anything, other+than the work as a whole, that (a) is included in the normal form of+packaging a Major Component, but which is not part of that Major+Component, and (b) serves only to enable use of the work with that+Major Component, or to implement a Standard Interface for which an+implementation is available to the public in source code form. A+"Major Component", in this context, means a major essential component+(kernel, window system, and so on) of the specific operating system+(if any) on which the executable work runs, or a compiler used to+produce the work, or an object code interpreter used to run it.++ The "Corresponding Source" for a work in object code form means all+the source code needed to generate, install, and (for an executable+work) run the object code and to modify the work, including scripts to+control those activities. However, it does not include the work's+System Libraries, or general-purpose tools or generally available free+programs which are used unmodified in performing those activities but+which are not part of the work. For example, Corresponding Source+includes interface definition files associated with source files for+the work, and the source code for shared libraries and dynamically+linked subprograms that the work is specifically designed to require,+such as by intimate data communication or control flow between those+subprograms and other parts of the work.++ The Corresponding Source need not include anything that users+can regenerate automatically from other parts of the Corresponding+Source.++ The Corresponding Source for a work in source code form is that+same work.++ 2. Basic Permissions.++ All rights granted under this License are granted for the term of+copyright on the Program, and are irrevocable provided the stated+conditions are met. This License explicitly affirms your unlimited+permission to run the unmodified Program. The output from running a+covered work is covered by this License only if the output, given its+content, constitutes a covered work. This License acknowledges your+rights of fair use or other equivalent, as provided by copyright law.++ You may make, run and propagate covered works that you do not+convey, without conditions so long as your license otherwise remains+in force. You may convey covered works to others for the sole purpose+of having them make modifications exclusively for you, or provide you+with facilities for running those works, provided that you comply with+the terms of this License in conveying all material for which you do+not control copyright. Those thus making or running the covered works+for you must do so exclusively on your behalf, under your direction+and control, on terms that prohibit them from making any copies of+your copyrighted material outside their relationship with you.++ Conveying under any other circumstances is permitted solely under+the conditions stated below. Sublicensing is not allowed; section 10+makes it unnecessary.++ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.++ No covered work shall be deemed part of an effective technological+measure under any applicable law fulfilling obligations under article+11 of the WIPO copyright treaty adopted on 20 December 1996, or+similar laws prohibiting or restricting circumvention of such+measures.++ When you convey a covered work, you waive any legal power to forbid+circumvention of technological measures to the extent such circumvention+is effected by exercising rights under this License with respect to+the covered work, and you disclaim any intention to limit operation or+modification of the work as a means of enforcing, against the work's+users, your or third parties' legal rights to forbid circumvention of+technological measures.++ 4. Conveying Verbatim Copies.++ You may convey verbatim copies of the Program's source code as you+receive it, in any medium, provided that you conspicuously and+appropriately publish on each copy an appropriate copyright notice;+keep intact all notices stating that this License and any+non-permissive terms added in accord with section 7 apply to the code;+keep intact all notices of the absence of any warranty; and give all+recipients a copy of this License along with the Program.++ You may charge any price or no price for each copy that you convey,+and you may offer support or warranty protection for a fee.++ 5. Conveying Modified Source Versions.++ You may convey a work based on the Program, or the modifications to+produce it from the Program, in the form of source code under the+terms of section 4, provided that you also meet all of these conditions:++ a) The work must carry prominent notices stating that you modified+ it, and giving a relevant date.++ b) The work must carry prominent notices stating that it is+ released under this License and any conditions added under section+ 7. This requirement modifies the requirement in section 4 to+ "keep intact all notices".++ c) You must license the entire work, as a whole, under this+ License to anyone who comes into possession of a copy. This+ License will therefore apply, along with any applicable section 7+ additional terms, to the whole of the work, and all its parts,+ regardless of how they are packaged. This License gives no+ permission to license the work in any other way, but it does not+ invalidate such permission if you have separately received it.++ d) If the work has interactive user interfaces, each must display+ Appropriate Legal Notices; however, if the Program has interactive+ interfaces that do not display Appropriate Legal Notices, your+ work need not make them do so.++ A compilation of a covered work with other separate and independent+works, which are not by their nature extensions of the covered work,+and which are not combined with it such as to form a larger program,+in or on a volume of a storage or distribution medium, is called an+"aggregate" if the compilation and its resulting copyright are not+used to limit the access or legal rights of the compilation's users+beyond what the individual works permit. Inclusion of a covered work+in an aggregate does not cause this License to apply to the other+parts of the aggregate.++ 6. Conveying Non-Source Forms.++ You may convey a covered work in object code form under the terms+of sections 4 and 5, provided that you also convey the+machine-readable Corresponding Source under the terms of this License,+in one of these ways:++ a) Convey the object code in, or embodied in, a physical product+ (including a physical distribution medium), accompanied by the+ Corresponding Source fixed on a durable physical medium+ customarily used for software interchange.++ b) Convey the object code in, or embodied in, a physical product+ (including a physical distribution medium), accompanied by a+ written offer, valid for at least three years and valid for as+ long as you offer spare parts or customer support for that product+ model, to give anyone who possesses the object code either (1) a+ copy of the Corresponding Source for all the software in the+ product that is covered by this License, on a durable physical+ medium customarily used for software interchange, for a price no+ more than your reasonable cost of physically performing this+ conveying of source, or (2) access to copy the+ Corresponding Source from a network server at no charge.++ c) Convey individual copies of the object code with a copy of the+ written offer to provide the Corresponding Source. This+ alternative is allowed only occasionally and noncommercially, and+ only if you received the object code with such an offer, in accord+ with subsection 6b.++ d) Convey the object code by offering access from a designated+ place (gratis or for a charge), and offer equivalent access to the+ Corresponding Source in the same way through the same place at no+ further charge. You need not require recipients to copy the+ Corresponding Source along with the object code. If the place to+ copy the object code is a network server, the Corresponding Source+ may be on a different server (operated by you or a third party)+ that supports equivalent copying facilities, provided you maintain+ clear directions next to the object code saying where to find the+ Corresponding Source. Regardless of what server hosts the+ Corresponding Source, you remain obligated to ensure that it is+ available for as long as needed to satisfy these requirements.++ e) Convey the object code using peer-to-peer transmission, provided+ you inform other peers where the object code and Corresponding+ Source of the work are being offered to the general public at no+ charge under subsection 6d.++ A separable portion of the object code, whose source code is excluded+from the Corresponding Source as a System Library, need not be+included in conveying the object code work.++ A "User Product" is either (1) a "consumer product", which means any+tangible personal property which is normally used for personal, family,+or household purposes, or (2) anything designed or sold for incorporation+into a dwelling. In determining whether a product is a consumer product,+doubtful cases shall be resolved in favor of coverage. For a particular+product received by a particular user, "normally used" refers to a+typical or common use of that class of product, regardless of the status+of the particular user or of the way in which the particular user+actually uses, or expects or is expected to use, the product. A product+is a consumer product regardless of whether the product has substantial+commercial, industrial or non-consumer uses, unless such uses represent+the only significant mode of use of the product.++ "Installation Information" for a User Product means any methods,+procedures, authorization keys, or other information required to install+and execute modified versions of a covered work in that User Product from+a modified version of its Corresponding Source. The information must+suffice to ensure that the continued functioning of the modified object+code is in no case prevented or interfered with solely because+modification has been made.++ If you convey an object code work under this section in, or with, or+specifically for use in, a User Product, and the conveying occurs as+part of a transaction in which the right of possession and use of the+User Product is transferred to the recipient in perpetuity or for a+fixed term (regardless of how the transaction is characterized), the+Corresponding Source conveyed under this section must be accompanied+by the Installation Information. But this requirement does not apply+if neither you nor any third party retains the ability to install+modified object code on the User Product (for example, the work has+been installed in ROM).++ The requirement to provide Installation Information does not include a+requirement to continue to provide support service, warranty, or updates+for a work that has been modified or installed by the recipient, or for+the User Product in which it has been modified or installed. Access to a+network may be denied when the modification itself materially and+adversely affects the operation of the network or violates the rules and+protocols for communication across the network.++ Corresponding Source conveyed, and Installation Information provided,+in accord with this section must be in a format that is publicly+documented (and with an implementation available to the public in+source code form), and must require no special password or key for+unpacking, reading or copying.++ 7. Additional Terms.++ "Additional permissions" are terms that supplement the terms of this+License by making exceptions from one or more of its conditions.+Additional permissions that are applicable to the entire Program shall+be treated as though they were included in this License, to the extent+that they are valid under applicable law. If additional permissions+apply only to part of the Program, that part may be used separately+under those permissions, but the entire Program remains governed by+this License without regard to the additional permissions.++ When you convey a copy of a covered work, you may at your option+remove any additional permissions from that copy, or from any part of+it. (Additional permissions may be written to require their own+removal in certain cases when you modify the work.) You may place+additional permissions on material, added by you to a covered work,+for which you have or can give appropriate copyright permission.++ Notwithstanding any other provision of this License, for material you+add to a covered work, you may (if authorized by the copyright holders of+that material) supplement the terms of this License with terms:++ a) Disclaiming warranty or limiting liability differently from the+ terms of sections 15 and 16 of this License; or++ b) Requiring preservation of specified reasonable legal notices or+ author attributions in that material or in the Appropriate Legal+ Notices displayed by works containing it; or++ c) Prohibiting misrepresentation of the origin of that material, or+ requiring that modified versions of such material be marked in+ reasonable ways as different from the original version; or++ d) Limiting the use for publicity purposes of names of licensors or+ authors of the material; or++ e) Declining to grant rights under trademark law for use of some+ trade names, trademarks, or service marks; or++ f) Requiring indemnification of licensors and authors of that+ material by anyone who conveys the material (or modified versions of+ it) with contractual assumptions of liability to the recipient, for+ any liability that these contractual assumptions directly impose on+ those licensors and authors.++ All other non-permissive additional terms are considered "further+restrictions" within the meaning of section 10. If the Program as you+received it, or any part of it, contains a notice stating that it is+governed by this License along with a term that is a further+restriction, you may remove that term. If a license document contains+a further restriction but permits relicensing or conveying under this+License, you may add to a covered work material governed by the terms+of that license document, provided that the further restriction does+not survive such relicensing or conveying.++ If you add terms to a covered work in accord with this section, you+must place, in the relevant source files, a statement of the+additional terms that apply to those files, or a notice indicating+where to find the applicable terms.++ Additional terms, permissive or non-permissive, may be stated in the+form of a separately written license, or stated as exceptions;+the above requirements apply either way.++ 8. Termination.++ You may not propagate or modify a covered work except as expressly+provided under this License. Any attempt otherwise to propagate or+modify it is void, and will automatically terminate your rights under+this License (including any patent licenses granted under the third+paragraph of section 11).++ However, if you cease all violation of this License, then your+license from a particular copyright holder is reinstated (a)+provisionally, unless and until the copyright holder explicitly and+finally terminates your license, and (b) permanently, if the copyright+holder fails to notify you of the violation by some reasonable means+prior to 60 days after the cessation.++ Moreover, your license from a particular copyright holder is+reinstated permanently if the copyright holder notifies you of the+violation by some reasonable means, this is the first time you have+received notice of violation of this License (for any work) from that+copyright holder, and you cure the violation prior to 30 days after+your receipt of the notice.++ Termination of your rights under this section does not terminate the+licenses of parties who have received copies or rights from you under+this License. If your rights have been terminated and not permanently+reinstated, you do not qualify to receive new licenses for the same+material under section 10.++ 9. Acceptance Not Required for Having Copies.++ You are not required to accept this License in order to receive or+run a copy of the Program. Ancillary propagation of a covered work+occurring solely as a consequence of using peer-to-peer transmission+to receive a copy likewise does not require acceptance. However,+nothing other than this License grants you permission to propagate or+modify any covered work. These actions infringe copyright if you do+not accept this License. Therefore, by modifying or propagating a+covered work, you indicate your acceptance of this License to do so.++ 10. Automatic Licensing of Downstream Recipients.++ Each time you convey a covered work, the recipient automatically+receives a license from the original licensors, to run, modify and+propagate that work, subject to this License. You are not responsible+for enforcing compliance by third parties with this License.++ An "entity transaction" is a transaction transferring control of an+organization, or substantially all assets of one, or subdividing an+organization, or merging organizations. If propagation of a covered+work results from an entity transaction, each party to that+transaction who receives a copy of the work also receives whatever+licenses to the work the party's predecessor in interest had or could+give under the previous paragraph, plus a right to possession of the+Corresponding Source of the work from the predecessor in interest, if+the predecessor has it or can get it with reasonable efforts.++ You may not impose any further restrictions on the exercise of the+rights granted or affirmed under this License. For example, you may+not impose a license fee, royalty, or other charge for exercise of+rights granted under this License, and you may not initiate litigation+(including a cross-claim or counterclaim in a lawsuit) alleging that+any patent claim is infringed by making, using, selling, offering for+sale, or importing the Program or any portion of it.++ 11. Patents.++ A "contributor" is a copyright holder who authorizes use under this+License of the Program or a work on which the Program is based. The+work thus licensed is called the contributor's "contributor version".++ A contributor's "essential patent claims" are all patent claims+owned or controlled by the contributor, whether already acquired or+hereafter acquired, that would be infringed by some manner, permitted+by this License, of making, using, or selling its contributor version,+but do not include claims that would be infringed only as a+consequence of further modification of the contributor version. For+purposes of this definition, "control" includes the right to grant+patent sublicenses in a manner consistent with the requirements of+this License.++ Each contributor grants you a non-exclusive, worldwide, royalty-free+patent license under the contributor's essential patent claims, to+make, use, sell, offer for sale, import and otherwise run, modify and+propagate the contents of its contributor version.++ In the following three paragraphs, a "patent license" is any express+agreement or commitment, however denominated, not to enforce a patent+(such as an express permission to practice a patent or covenant not to+sue for patent infringement). To "grant" such a patent license to a+party means to make such an agreement or commitment not to enforce a+patent against the party.++ If you convey a covered work, knowingly relying on a patent license,+and the Corresponding Source of the work is not available for anyone+to copy, free of charge and under the terms of this License, through a+publicly available network server or other readily accessible means,+then you must either (1) cause the Corresponding Source to be so+available, or (2) arrange to deprive yourself of the benefit of the+patent license for this particular work, or (3) arrange, in a manner+consistent with the requirements of this License, to extend the patent+license to downstream recipients. "Knowingly relying" means you have+actual knowledge that, but for the patent license, your conveying the+covered work in a country, or your recipient's use of the covered work+in a country, would infringe one or more identifiable patents in that+country that you have reason to believe are valid.++ If, pursuant to or in connection with a single transaction or+arrangement, you convey, or propagate by procuring conveyance of, a+covered work, and grant a patent license to some of the parties+receiving the covered work authorizing them to use, propagate, modify+or convey a specific copy of the covered work, then the patent license+you grant is automatically extended to all recipients of the covered+work and works based on it.++ A patent license is "discriminatory" if it does not include within+the scope of its coverage, prohibits the exercise of, or is+conditioned on the non-exercise of one or more of the rights that are+specifically granted under this License. You may not convey a covered+work if you are a party to an arrangement with a third party that is+in the business of distributing software, under which you make payment+to the third party based on the extent of your activity of conveying+the work, and under which the third party grants, to any of the+parties who would receive the covered work from you, a discriminatory+patent license (a) in connection with copies of the covered work+conveyed by you (or copies made from those copies), or (b) primarily+for and in connection with specific products or compilations that+contain the covered work, unless you entered into that arrangement,+or that patent license was granted, prior to 28 March 2007.++ Nothing in this License shall be construed as excluding or limiting+any implied license or other defenses to infringement that may+otherwise be available to you under applicable patent law.++ 12. No Surrender of Others' Freedom.++ If conditions are imposed on you (whether by court order, agreement or+otherwise) that contradict the conditions of this License, they do not+excuse you from the conditions of this License. If you cannot convey a+covered work so as to satisfy simultaneously your obligations under this+License and any other pertinent obligations, then as a consequence you may+not convey it at all. For example, if you agree to terms that obligate you+to collect a royalty for further conveying from those to whom you convey+the Program, the only way you could satisfy both those terms and this+License would be to refrain entirely from conveying the Program.++ 13. Use with the GNU Affero General Public License.++ Notwithstanding any other provision of this License, you have+permission to link or combine any covered work with a work licensed+under version 3 of the GNU Affero General Public License into a single+combined work, and to convey the resulting work. The terms of this+License will continue to apply to the part which is the covered work,+but the special requirements of the GNU Affero General Public License,+section 13, concerning interaction through a network will apply to the+combination as such.++ 14. Revised Versions of this License.++ The Free Software Foundation may publish revised and/or new versions of+the GNU General Public License from time to time. Such new versions will+be similar in spirit to the present version, but may differ in detail to+address new problems or concerns.++ Each version is given a distinguishing version number. If the+Program specifies that a certain numbered version of the GNU General+Public License "or any later version" applies to it, you have the+option of following the terms and conditions either of that numbered+version or of any later version published by the Free Software+Foundation. If the Program does not specify a version number of the+GNU General Public License, you may choose any version ever published+by the Free Software Foundation.++ If the Program specifies that a proxy can decide which future+versions of the GNU General Public License can be used, that proxy's+public statement of acceptance of a version permanently authorizes you+to choose that version for the Program.++ Later license versions may give you additional or different+permissions. However, no additional obligations are imposed on any+author or copyright holder as a result of your choosing to follow a+later version.++ 15. Disclaimer of Warranty.++ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.++ 16. Limitation of Liability.++ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF+SUCH DAMAGES.++ 17. Interpretation of Sections 15 and 16.++ If the disclaimer of warranty and limitation of liability provided+above cannot be given local legal effect according to their terms,+reviewing courts shall apply local law that most closely approximates+an absolute waiver of all civil liability in connection with the+Program, unless a warranty or assumption of liability accompanies a+copy of the Program in return for a fee.++ END OF TERMS AND CONDITIONS++ How to Apply These Terms to Your New Programs++ If you develop a new program, and you want it to be of the greatest+possible use to the public, the best way to achieve this is to make it+free software which everyone can redistribute and change under these terms.++ To do so, attach the following notices to the program. It is safest+to attach them to the start of each source file to most effectively+state the exclusion of warranty; and each file should have at least+the "copyright" line and a pointer to where the full notice is found.++ <one line to give the program's name and a brief idea of what it does.>+ Copyright (C) <year> <name of author>++ This program is free software: you can redistribute it and/or modify+ it under the terms of the GNU General Public License as published by+ the Free Software Foundation, either version 3 of the License, or+ (at your option) any later version.++ This program is distributed in the hope that it will be useful,+ but WITHOUT ANY WARRANTY; without even the implied warranty of+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+ GNU General Public License for more details.++ You should have received a copy of the GNU General Public License+ along with this program. If not, see <http://www.gnu.org/licenses/>.++Also add information on how to contact you by electronic and paper mail.++ If the program does terminal interaction, make it output a short+notice like this when it starts in an interactive mode:++ <program> Copyright (C) <year> <name of author>+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.+ This is free software, and you are welcome to redistribute it+ under certain conditions; type `show c' for details.++The hypothetical commands `show w' and `show c' should show the appropriate+parts of the General Public License. Of course, your program's commands+might be different; for a GUI interface, you would use an "about box".++ You should also get your employer (if you work as a programmer) or school,+if any, to sign a "copyright disclaimer" for the program, if necessary.+For more information on this, and how to apply and follow the GNU GPL, see+<http://www.gnu.org/licenses/>.++ The GNU General Public License does not permit incorporating your program+into proprietary programs. If your program is a subroutine library, you+may consider it more useful to permit linking proprietary applications with+the library. If this is what you want to do, use the GNU Lesser General+Public License instead of this License. But first, please read+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
cabal-plan.cabal view
@@ -1,19 +1,34 @@-cabal-version: 2.0+cabal-version: 2.2 name: cabal-plan-version: 0.4.0.0+version: 0.5.0.0 synopsis: Library and utiltity for processing cabal's plan.json file description: {-This package provides a library for decoding @plan.json@ files as+This package provides a library (see "Cabal.Plan") for decoding @plan.json@ files as well as the simple tool @cabal-plan@ for extracting and pretty printing the information contained in the @plan.json@ file. .-@plan.json@ files are generated by [cabal](https://hackage.haskell.org/package/cabal-install)'s [nix-style local builds](http://cabal.readthedocs.io/en/latest/nix-local-build.html) and contain detailed information about the build/install plan computed by the cabal solver.+@plan.json@ files are generated by [cabal](https://hackage.haskell.org/package/cabal-install)'s [Nix-style local builds](http://cabal.readthedocs.io/en/latest/nix-local-build.html) and contain detailed information about the build/install plan computed by the cabal solver.+.+== @cabal-plan@ utility+.+The @cabal-plan@ executable (enabled via the @exe@ cabal flag) provides various operations:+.+[info] Show basic report of dependency tree+[show] Dump 'PlanJson' data-structure via 'Show' instance+[list-bins] List all binaries+[list-bin] List single binary (useful for scripting, e.g. @cabal list-bin exe:cabal-plan@)+[fingerprint] Print SHA256 sums of dependencies' source tarballs and cabal files+[dot] Generate graph of dependencies in @.dot@ format+[topo] Print plan topologically sorted+[license-report] Generate license report for a component (only available when built with @license-report@ flag enabled); see <src/example/cabal-plan.md report example for cabal-plan> (<src/example/cabal-plan.html Pandoc rendered HTML>)+.+See also ["New things in Haskell package QA" Blogpost](http://oleg.fi/gists/posts/2018-01-08-haskell-package-qa.html) for a description of the @topo@ and @dot@ operations as well as how to enable tab-completion. } bug-reports: https://github.com/hvr/cabal-plan/issues-license: GPL-3-license-files: LICENSE src-topograph/LICENSE+license: GPL-2.0-or-later AND BSD-3-Clause+license-files: LICENSE.GPLv2 LICENSE.GPLv3 src-topograph/LICENSE author: Herbert Valerio Riedel maintainer: hvr@gnu.org copyright: 2016 Herbert Valerio Riedel@@ -21,6 +36,7 @@ build-type: Simple tested-with:+ GHC==8.6.3, GHC==8.4.3, GHC==8.2.2, GHC==8.0.2,@@ -30,6 +46,8 @@ extra-source-files: ChangeLog.md+ example/cabal-plan.html+ example/cabal-plan.md ---------------------------------------------------------------------------- @@ -55,10 +73,10 @@ RecordWildCards exposed-modules: Cabal.Plan - build-depends: base (>= 4.6 && <4.10) || ^>= 4.10 || ^>=4.11+ build-depends: base (>= 4.6 && <4.10) || ^>= 4.10 || ^>=4.11 || ^>=4.12 , aeson ^>= 1.2.0 || ^>= 1.3.0 || ^>=1.4.0.0 , bytestring ^>= 0.10.0- , containers ^>= 0.5.0+ , containers ^>= 0.5.0 || ^>= 0.6.0.1 , text ^>= 1.2.2 , directory ^>= 1.2.0 || ^>= 1.3.0 , filepath ^>= 1.3.0 || ^>= 1.4.0@@ -73,10 +91,10 @@ other-extensions: RankNTypes ScopedTypeVariables RecordWildCards exposed-modules: Topograph - build-depends: base (>= 4.6 && <4.10) || ^>= 4.10 || ^>= 4.11+ build-depends: base (>= 4.6 && <4.10) || ^>= 4.10 || ^>= 4.11 || ^>= 4.12 , base-compat ^>= 0.9.3 || ^>=0.10.1 , base-orphans ^>= 0.6 || ^>=0.7 || ^>=0.8- , containers ^>= 0.5.0+ , containers ^>= 0.5.0 || ^>= 0.6.0.1 , vector ^>= 0.12.0.1 hs-source-dirs: src-topograph@@ -110,7 +128,7 @@ if flag(license-report)- build-depends: Cabal ^>= 2.2.0.1+ build-depends: Cabal ^>= 2.2.0.1 || ^>= 2.4.0.1 , tar ^>= 0.5.1.0 , zlib ^>= 0.6.2 , filepath ^>= 1.4.1.2
+ example/cabal-plan.html view
@@ -0,0 +1,393 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">+<head>+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+ <meta http-equiv="Content-Style-Type" content="text/css" />+ <meta name="generator" content="pandoc" />+ <title></title>+ <style type="text/css">code{white-space: pre;}</style>+ <link href="data:text/css;charset=utf-8,%0Ahtml%20%7B%0Afont%2Dsize%3A%20100%25%3B%0Aoverflow%2Dy%3A%20scroll%3B%0A%2Dwebkit%2Dtext%2Dsize%2Dadjust%3A%20100%25%3B%0A%2Dms%2Dtext%2Dsize%2Dadjust%3A%20100%25%3B%0A%7D%0Abody%20%7B%0Acolor%3A%20%23444%3B%0Afont%2Dfamily%3A%20Georgia%2C%20Palatino%2C%20%27Palatino%20Linotype%27%2C%20Times%2C%20%27Times%20New%20Roman%27%2C%20serif%3B%0Afont%2Dsize%3A%2012px%3B%0Aline%2Dheight%3A%201%2E7%3B%0Apadding%3A%201em%3B%0Amargin%3A%20auto%3B%0A%0Abackground%3A%20%23fefefe%3B%0A%7D%0Aa%20%7B%0Acolor%3A%20%230645ad%3B%0Atext%2Ddecoration%3A%20none%3B%0A%7D%0Aa%3Avisited%20%7B%0Acolor%3A%20%230b0080%3B%0A%7D%0Aa%3Ahover%20%7B%0Acolor%3A%20%2306e%3B%0A%7D%0Aa%3Aactive%20%7B%0Acolor%3A%20%23faa700%3B%0A%7D%0Aa%3Afocus%20%7B%0Aoutline%3A%20thin%20dotted%3B%0A%7D%0A%2A%3A%3A%2Dmoz%2Dselection%20%7B%0Abackground%3A%20rgba%28255%2C%20255%2C%200%2C%200%2E3%29%3B%0Acolor%3A%20%23000%3B%0A%7D%0A%2A%3A%3Aselection%20%7B%0Abackground%3A%20rgba%28255%2C%20255%2C%200%2C%200%2E3%29%3B%0Acolor%3A%20%23000%3B%0A%7D%0Aa%3A%3A%2Dmoz%2Dselection%20%7B%0Abackground%3A%20rgba%28255%2C%20255%2C%200%2C%200%2E3%29%3B%0Acolor%3A%20%230645ad%3B%0A%7D%0Aa%3A%3Aselection%20%7B%0Abackground%3A%20rgba%28255%2C%20255%2C%200%2C%200%2E3%29%3B%0Acolor%3A%20%230645ad%3B%0A%7D%0Ap%20%7B%0Amargin%3A%201em%200%3B%0A%7D%0Aimg%20%7B%0Amax%2Dwidth%3A%20100%25%3B%0A%7D%0Ah1%2C%20h2%2C%20h3%2C%20h4%2C%20h5%2C%20h6%20%7B%0Acolor%3A%20%23111%3B%0Aline%2Dheight%3A%20125%25%3B%0Amargin%2Dtop%3A%202em%3B%0Afont%2Dweight%3A%20normal%3B%0A%7D%0Ah4%2C%20h5%2C%20h6%20%7B%0Afont%2Dweight%3A%20bold%3B%0A%7D%0Ah1%20%7B%0Afont%2Dsize%3A%202%2E5em%3B%0A%7D%0Ah2%20%7B%0Afont%2Dsize%3A%202em%3B%0A%7D%0Ah3%20%7B%0Afont%2Dsize%3A%201%2E5em%3B%0A%7D%0Ah4%20%7B%0Afont%2Dsize%3A%201%2E2em%3B%0A%7D%0Ah5%20%7B%0Afont%2Dsize%3A%201em%3B%0A%7D%0Ah6%20%7B%0Afont%2Dsize%3A%200%2E9em%3B%0A%7D%0Ablockquote%20%7B%0Acolor%3A%20%23666666%3B%0Amargin%3A%200%3B%0Apadding%2Dleft%3A%203em%3B%0Aborder%2Dleft%3A%200%2E5em%20%23EEE%20solid%3B%0A%7D%0Ahr%20%7B%0Adisplay%3A%20block%3B%0Aheight%3A%202px%3B%0Aborder%3A%200%3B%0Aborder%2Dtop%3A%201px%20solid%20%23aaa%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23eee%3B%0Amargin%3A%201em%200%3B%0Apadding%3A%200%3B%0A%7D%0Apre%2C%20code%2C%20kbd%2C%20samp%20%7B%0Acolor%3A%20%23000%3B%0Afont%2Dfamily%3A%20monospace%2C%20monospace%3B%0A%5Ffont%2Dfamily%3A%20%27courier%20new%27%2C%20monospace%3B%0Afont%2Dsize%3A%200%2E98em%3B%0A%7D%0Apre%20%7B%0Awhite%2Dspace%3A%20pre%3B%0Awhite%2Dspace%3A%20pre%2Dwrap%3B%0Aword%2Dwrap%3A%20break%2Dword%3B%0A%7D%0Ab%2C%20strong%20%7B%0Afont%2Dweight%3A%20bold%3B%0A%7D%0Adfn%20%7B%0Afont%2Dstyle%3A%20italic%3B%0A%7D%0Ains%20%7B%0Abackground%3A%20%23ff9%3B%0Acolor%3A%20%23000%3B%0Atext%2Ddecoration%3A%20none%3B%0A%7D%0Amark%20%7B%0Abackground%3A%20%23ff0%3B%0Acolor%3A%20%23000%3B%0Afont%2Dstyle%3A%20italic%3B%0Afont%2Dweight%3A%20bold%3B%0A%7D%0Asub%2C%20sup%20%7B%0Afont%2Dsize%3A%2075%25%3B%0Aline%2Dheight%3A%200%3B%0Aposition%3A%20relative%3B%0Avertical%2Dalign%3A%20baseline%3B%0A%7D%0Asup%20%7B%0Atop%3A%20%2D0%2E5em%3B%0A%7D%0Asub%20%7B%0Abottom%3A%20%2D0%2E25em%3B%0A%7D%0Aul%2C%20ol%20%7B%0Amargin%3A%201em%200%3B%0Apadding%3A%200%200%200%202em%3B%0A%7D%0Ali%20p%3Alast%2Dchild%20%7B%0Amargin%2Dbottom%3A%200%3B%0A%7D%0Aul%20ul%2C%20ol%20ol%20%7B%0Amargin%3A%20%2E3em%200%3B%0A%7D%0Adl%20%7B%0Amargin%2Dbottom%3A%201em%3B%0A%7D%0Adt%20%7B%0Afont%2Dweight%3A%20bold%3B%0Amargin%2Dbottom%3A%20%2E8em%3B%0A%7D%0Add%20%7B%0Amargin%3A%200%200%20%2E8em%202em%3B%0A%7D%0Add%3Alast%2Dchild%20%7B%0Amargin%2Dbottom%3A%200%3B%0A%7D%0Aimg%20%7B%0Aborder%3A%200%3B%0A%2Dms%2Dinterpolation%2Dmode%3A%20bicubic%3B%0Avertical%2Dalign%3A%20middle%3B%0A%7D%0Afigure%20%7B%0Adisplay%3A%20block%3B%0Atext%2Dalign%3A%20center%3B%0Amargin%3A%201em%200%3B%0A%7D%0Afigure%20img%20%7B%0Aborder%3A%20none%3B%0Amargin%3A%200%20auto%3B%0A%7D%0Afigcaption%20%7B%0Afont%2Dsize%3A%200%2E8em%3B%0Afont%2Dstyle%3A%20italic%3B%0Amargin%3A%200%200%20%2E8em%3B%0A%7D%0Atable%20%7B%0Amargin%2Dbottom%3A%202em%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23ddd%3B%0Aborder%2Dright%3A%201px%20solid%20%23ddd%3B%0Aborder%2Dspacing%3A%200%3B%0Aborder%2Dcollapse%3A%20collapse%3B%0A%7D%0Atable%20th%20%7B%0Apadding%3A%20%2E2em%201em%3B%0Abackground%2Dcolor%3A%20%23eee%3B%0Aborder%2Dtop%3A%201px%20solid%20%23ddd%3B%0Aborder%2Dleft%3A%201px%20solid%20%23ddd%3B%0A%7D%0Atable%20td%20%7B%0Apadding%3A%20%2E2em%201em%3B%0Aborder%2Dtop%3A%201px%20solid%20%23ddd%3B%0Aborder%2Dleft%3A%201px%20solid%20%23ddd%3B%0Avertical%2Dalign%3A%20top%3B%0A%7D%0Atable%20tr%2Eeven%20%7B%0Abackground%2Dcolor%3A%20%23fbfbfb%3B%0A%7D%0A%2Eauthor%20%7B%0Afont%2Dsize%3A%201%2E2em%3B%0Atext%2Dalign%3A%20center%3B%0A%7D%0A%40media%20only%20screen%20and%20%28min%2Dwidth%3A%20480px%29%20%7B%0Abody%20%7B%0Afont%2Dsize%3A%2014px%3B%0A%7D%0A%7D%0A%40media%20only%20screen%20and%20%28min%2Dwidth%3A%20768px%29%20%7B%0Abody%20%7B%0Afont%2Dsize%3A%2016px%3B%0A%7D%0A%7D%0A%40media%20print%20%7B%0A%2A%20%7B%0Abackground%3A%20transparent%20%21important%3B%0Acolor%3A%20black%20%21important%3B%0Afilter%3A%20none%20%21important%3B%0A%2Dms%2Dfilter%3A%20none%20%21important%3B%0A%7D%0Abody%20%7B%0Afont%2Dsize%3A%2012pt%3B%0Amax%2Dwidth%3A%20100%25%3B%0A%7D%0Aa%2C%20a%3Avisited%20%7B%0Atext%2Ddecoration%3A%20underline%3B%0A%7D%0Ahr%20%7B%0Aheight%3A%201px%3B%0Aborder%3A%200%3B%0Aborder%2Dbottom%3A%201px%20solid%20black%3B%0A%7D%0Aa%5Bhref%5D%3Aafter%20%7B%0Acontent%3A%20%22%20%28%22%20attr%28href%29%20%22%29%22%3B%0A%7D%0Aabbr%5Btitle%5D%3Aafter%20%7B%0Acontent%3A%20%22%20%28%22%20attr%28title%29%20%22%29%22%3B%0A%7D%0A%2Eir%20a%3Aafter%2C%20a%5Bhref%5E%3D%22javascript%3A%22%5D%3Aafter%2C%20a%5Bhref%5E%3D%22%23%22%5D%3Aafter%20%7B%0Acontent%3A%20%22%22%3B%0A%7D%0Apre%2C%20blockquote%20%7B%0Aborder%3A%201px%20solid%20%23999%3B%0Apadding%2Dright%3A%201em%3B%0Apage%2Dbreak%2Dinside%3A%20avoid%3B%0A%7D%0Atr%2C%20img%20%7B%0Apage%2Dbreak%2Dinside%3A%20avoid%3B%0A%7D%0Aimg%20%7B%0Amax%2Dwidth%3A%20100%25%20%21important%3B%0A%7D%0A%40page%20%3Aleft%20%7B%0Amargin%3A%2015mm%2020mm%2015mm%2010mm%3B%0A%7D%0A%40page%20%3Aright%20%7B%0Amargin%3A%2015mm%2010mm%2015mm%2020mm%3B%0A%7D%0Ap%2C%20h2%2C%20h3%20%7B%0Aorphans%3A%203%3B%0Awidows%3A%203%3B%0A%7D%0Ah2%2C%20h3%20%7B%0Apage%2Dbreak%2Dafter%3A%20avoid%3B%0A%7D%0A%7D%0A" rel="stylesheet" type="text/css" />+</head>+<body>+<h1 id="dependency-license-report">Dependency License Report</h1>+<p>Bold-faced <strong><code>package-name</code></strong>s denote standard libraries bundled with <code>ghc-8.2.2</code>.</p>+<h2 id="direct-dependencies-of-cabal-planexecabal-plan">Direct dependencies of <code>cabal-plan:exe:cabal-plan</code></h2>+<table style="width:28%;">+<colgroup>+<col width="5%"></col>+<col width="5%"></col>+<col width="5%"></col>+<col width="5%"></col>+<col width="5%"></col>+</colgroup>+<thead>+<tr class="header">+<th align="left">Name</th>+<th align="left">Version</th>+<th align="left"><a href="https://spdx.org/licenses/">SPDX</a> License Id</th>+<th align="left">Description</th>+<th align="left">Also depended upon by</th>+</tr>+</thead>+<tbody>+<tr class="odd">+<td align="left"><code>Cabal</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/Cabal-2.4.1.0"><code>2.4.1.0</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/Cabal-2.4.1.0/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">A framework for packaging Haskell software</td>+<td align="left"></td>+</tr>+<tr class="even">+<td align="left"><code>aeson</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/aeson-1.4.2.0"><code>1.4.2.0</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/aeson-1.4.2.0/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Fast JSON parsing and encoding</td>+<td align="left"></td>+</tr>+<tr class="odd">+<td align="left"><code>ansi-terminal</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/ansi-terminal-0.8.2"><code>0.8.2</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/ansi-terminal-0.8.2/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Simple ANSI terminal support, with Windows compatibility</td>+<td align="left"><code>ansi-wl-pprint</code></td>+</tr>+<tr class="even">+<td align="left"><strong><code>base</code></strong></td>+<td align="left"><a href="http://hackage.haskell.org/package/base-4.10.1.0"><code>4.10.1.0</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/base-4.10.1.0/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Basic libraries</td>+<td align="left"><em>(core library)</em></td>+</tr>+<tr class="odd">+<td align="left"><code>base-compat</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/base-compat-0.10.5"><code>0.10.5</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/base-compat-0.10.5/src/LICENSE"><code>MIT</code></a></td>+<td align="left">A compatibility layer for base</td>+<td align="left"><code>aeson</code></td>+</tr>+<tr class="even">+<td align="left"><code>base-orphans</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/base-orphans-0.8"><code>0.8</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/base-orphans-0.8/src/LICENSE"><code>MIT</code></a></td>+<td align="left">Backwards-compatible orphan instances for base</td>+<td align="left"></td>+</tr>+<tr class="odd">+<td align="left"><code>base16-bytestring</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/base16-bytestring-0.1.1.6"><code>0.1.1.6</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/base16-bytestring-0.1.1.6/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Fast base16 (hex) encoding and decoding for ByteStrings</td>+<td align="left"></td>+</tr>+<tr class="even">+<td align="left"><strong><code>bytestring</code></strong></td>+<td align="left"><a href="http://hackage.haskell.org/package/bytestring-0.10.8.2"><code>0.10.8.2</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/bytestring-0.10.8.2/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Fast, compact, strict and lazy byte strings with a list interface</td>+<td align="left"><code>Cabal</code>, <code>aeson</code>, <code>attoparsec</code>, <code>base16-bytestring</code>, <code>binary</code>, <code>hashable</code>, <code>parsec</code>, <code>scientific</code>, <code>tar</code>, <code>text</code>, <code>unix</code>, <code>uuid-types</code>, <code>zlib</code></td>+</tr>+<tr class="odd">+<td align="left"><strong><code>containers</code></strong></td>+<td align="left"><a href="http://hackage.haskell.org/package/containers-0.5.10.2"><code>0.5.10.2</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/containers-0.5.10.2/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Assorted concrete container types</td>+<td align="left"><code>Cabal</code>, <code>aeson</code>, <code>attoparsec</code>, <code>binary</code>, <code>scientific</code>, <code>tar</code>, <code>th-abstraction</code></td>+</tr>+<tr class="even">+<td align="left"><strong><code>directory</code></strong></td>+<td align="left"><a href="http://hackage.haskell.org/package/directory-1.3.0.2"><code>1.3.0.2</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/directory-1.3.0.2/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Platform-agnostic library for filesystem operations</td>+<td align="left"><code>Cabal</code>, <code>process</code>, <code>tar</code></td>+</tr>+<tr class="odd">+<td align="left"><strong><code>filepath</code></strong></td>+<td align="left"><a href="http://hackage.haskell.org/package/filepath-1.4.1.2"><code>1.4.1.2</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/filepath-1.4.1.2/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Library for manipulating FilePaths in a cross platform way.</td>+<td align="left"><code>Cabal</code>, <code>directory</code>, <code>process</code>, <code>tar</code></td>+</tr>+<tr class="even">+<td align="left"><code>mtl</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/mtl-2.2.2"><code>2.2.2</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/mtl-2.2.2/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Monad classes, using functional dependencies</td>+<td align="left"><code>Cabal</code>, <code>parsec</code></td>+</tr>+<tr class="odd">+<td align="left"><code>optparse-applicative</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/optparse-applicative-0.14.3.0"><code>0.14.3.0</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/optparse-applicative-0.14.3.0/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Utilities and combinators for parsing command line options</td>+<td align="left"></td>+</tr>+<tr class="even">+<td align="left"><code>parsec</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/parsec-3.1.13.0"><code>3.1.13.0</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/parsec-3.1.13.0/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Monadic parser combinators</td>+<td align="left"><code>Cabal</code></td>+</tr>+<tr class="odd">+<td align="left"><code>tar</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/tar-0.5.1.0"><code>0.5.1.0</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/tar-0.5.1.0/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Reading, writing and manipulating ".tar" archive files.</td>+<td align="left"></td>+</tr>+<tr class="even">+<td align="left"><code>text</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/text-1.2.3.1"><code>1.2.3.1</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/text-1.2.3.1/src/LICENSE"><code>BSD-2-Clause</code></a></td>+<td align="left">An efficient packed Unicode text type.</td>+<td align="left"><code>Cabal</code>, <code>aeson</code>, <code>attoparsec</code>, <code>hashable</code>, <code>parsec</code>, <code>scientific</code>, <code>uuid-types</code></td>+</tr>+<tr class="odd">+<td align="left"><code>vector</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/vector-0.12.0.2"><code>0.12.0.2</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/vector-0.12.0.2/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Efficient Arrays</td>+<td align="left"><code>aeson</code></td>+</tr>+<tr class="even">+<td align="left"><code>zlib</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/zlib-0.6.2"><code>0.6.2</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/zlib-0.6.2/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Compression and decompression in the gzip and zlib formats</td>+<td align="left"></td>+</tr>+</tbody>+</table>+<h2 id="indirect-transitive-dependencies">Indirect transitive dependencies</h2>+<table style="width:28%;">+<colgroup>+<col width="5%"></col>+<col width="5%"></col>+<col width="5%"></col>+<col width="5%"></col>+<col width="5%"></col>+</colgroup>+<thead>+<tr class="header">+<th align="left">Name</th>+<th align="left">Version</th>+<th align="left"><a href="https://spdx.org/licenses/">SPDX</a> License Id</th>+<th align="left">Description</th>+<th align="left">Depended upon by</th>+</tr>+</thead>+<tbody>+<tr class="odd">+<td align="left"><code>StateVar</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/StateVar-1.1.1.1"><code>1.1.1.1</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/StateVar-1.1.1.1/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">State variables</td>+<td align="left"><code>contravariant</code></td>+</tr>+<tr class="even">+<td align="left"><code>ansi-wl-pprint</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/ansi-wl-pprint-0.6.8.2"><code>0.6.8.2</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/ansi-wl-pprint-0.6.8.2/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">The Wadler/Leijen Pretty Printer for colored ANSI terminal output</td>+<td align="left"><code>optparse-applicative</code></td>+</tr>+<tr class="odd">+<td align="left"><strong><code>array</code></strong></td>+<td align="left"><a href="http://hackage.haskell.org/package/array-0.5.2.0"><code>0.5.2.0</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/array-0.5.2.0/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Mutable and immutable arrays</td>+<td align="left"><code>Cabal</code>, <code>attoparsec</code>, <code>binary</code>, <code>containers</code>, <code>deepseq</code>, <code>integer-logarithms</code>, <code>stm</code>, <code>tar</code>, <code>text</code></td>+</tr>+<tr class="even">+<td align="left"><code>attoparsec</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/attoparsec-0.13.2.2"><code>0.13.2.2</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/attoparsec-0.13.2.2/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Fast combinator parsing for bytestrings and text</td>+<td align="left"><code>aeson</code></td>+</tr>+<tr class="odd">+<td align="left"><strong><code>binary</code></strong></td>+<td align="left"><a href="http://hackage.haskell.org/package/binary-0.8.5.1"><code>0.8.5.1</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/binary-0.8.5.1/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Binary serialisation for Haskell values using lazy ByteStrings</td>+<td align="left"><code>Cabal</code>, <code>scientific</code>, <code>text</code>, <code>uuid-types</code></td>+</tr>+<tr class="even">+<td align="left"><code>colour</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/colour-2.3.4"><code>2.3.4</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/colour-2.3.4/src/LICENSE"><code>MIT</code></a></td>+<td align="left">A model for human colour/color perception</td>+<td align="left"><code>ansi-terminal</code></td>+</tr>+<tr class="odd">+<td align="left"><code>contravariant</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/contravariant-1.5"><code>1.5</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/contravariant-1.5/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Contravariant functors</td>+<td align="left"><code>aeson</code></td>+</tr>+<tr class="even">+<td align="left"><strong><code>deepseq</code></strong></td>+<td align="left"><a href="http://hackage.haskell.org/package/deepseq-1.4.3.0"><code>1.4.3.0</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/deepseq-1.4.3.0/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Deep evaluation of data structures</td>+<td align="left"><code>Cabal</code>, <code>aeson</code>, <code>attoparsec</code>, <code>bytestring</code>, <code>containers</code>, <code>dlist</code>, <code>hashable</code>, <code>pretty</code>, <code>process</code>, <code>scientific</code>, <code>tagged</code>, <code>tar</code>, <code>text</code>, <code>time</code>, <code>unordered-containers</code>, <code>uuid-types</code>, <code>vector</code></td>+</tr>+<tr class="odd">+<td align="left"><code>dlist</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/dlist-0.8.0.5"><code>0.8.0.5</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/dlist-0.8.0.5/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Difference lists</td>+<td align="left"><code>aeson</code></td>+</tr>+<tr class="even">+<td align="left"><strong><code>ghc-boot-th</code></strong></td>+<td align="left"><a href="http://hackage.haskell.org/package/ghc-boot-th-8.2.2"><code>8.2.2</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/ghc-boot-th-8.2.2/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Shared functionality between GHC and the <span class="citation">@template-haskell</span>@ library</td>+<td align="left"><code>template-haskell</code></td>+</tr>+<tr class="odd">+<td align="left"><strong><code>ghc-prim</code></strong></td>+<td align="left"><a href="http://hackage.haskell.org/package/ghc-prim-0.5.1.1"><code>0.5.1.1</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/ghc-prim-0.5.1.1/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">GHC primitives</td>+<td align="left"><em>(core library)</em></td>+</tr>+<tr class="even">+<td align="left"><code>hashable</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/hashable-1.2.7.0"><code>1.2.7.0</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/hashable-1.2.7.0/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">A class for types that can be converted to a hash value</td>+<td align="left"><code>aeson</code>, <code>scientific</code>, <code>unordered-containers</code>, <code>uuid-types</code></td>+</tr>+<tr class="odd">+<td align="left"><strong><code>integer-gmp</code></strong></td>+<td align="left"><a href="http://hackage.haskell.org/package/integer-gmp-1.0.1.0"><code>1.0.1.0</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/integer-gmp-1.0.1.0/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Integer library based on GMP</td>+<td align="left"><em>(core library)</em></td>+</tr>+<tr class="even">+<td align="left"><code>integer-logarithms</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/integer-logarithms-1.0.2.2"><code>1.0.2.2</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/integer-logarithms-1.0.2.2/src/LICENSE"><code>MIT</code></a></td>+<td align="left">Integer logarithms.</td>+<td align="left"><code>scientific</code></td>+</tr>+<tr class="odd">+<td align="left"><strong><code>pretty</code></strong></td>+<td align="left"><a href="http://hackage.haskell.org/package/pretty-1.1.3.3"><code>1.1.3.3</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/pretty-1.1.3.3/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Pretty-printing library</td>+<td align="left"><code>Cabal</code>, <code>template-haskell</code></td>+</tr>+<tr class="even">+<td align="left"><code>primitive</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/primitive-0.6.4.0"><code>0.6.4.0</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/primitive-0.6.4.0/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Primitive memory-related operations</td>+<td align="left"><code>aeson</code>, <code>scientific</code>, <code>vector</code></td>+</tr>+<tr class="odd">+<td align="left"><strong><code>process</code></strong></td>+<td align="left"><a href="http://hackage.haskell.org/package/process-1.6.1.0"><code>1.6.1.0</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/process-1.6.1.0/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Process libraries</td>+<td align="left"><code>Cabal</code>, <code>optparse-applicative</code></td>+</tr>+<tr class="even">+<td align="left"><code>random</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/random-1.1"><code>1.1</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/random-1.1/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">random number library</td>+<td align="left"><code>uuid-types</code></td>+</tr>+<tr class="odd">+<td align="left"><code>scientific</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/scientific-0.3.6.2"><code>0.3.6.2</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/scientific-0.3.6.2/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Numbers represented using scientific notation</td>+<td align="left"><code>aeson</code>, <code>attoparsec</code></td>+</tr>+<tr class="even">+<td align="left"><code>stm</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/stm-2.5.0.0"><code>2.5.0.0</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/stm-2.5.0.0/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Software Transactional Memory</td>+<td align="left"><code>StateVar</code></td>+</tr>+<tr class="odd">+<td align="left"><code>tagged</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/tagged-0.8.6"><code>0.8.6</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/tagged-0.8.6/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Haskell 98 phantom types to avoid unsafely passing dummy arguments</td>+<td align="left"><code>aeson</code></td>+</tr>+<tr class="even">+<td align="left"><strong><code>template-haskell</code></strong></td>+<td align="left"><a href="http://hackage.haskell.org/package/template-haskell-2.12.0.0"><code>2.12.0.0</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/template-haskell-2.12.0.0/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Support library for Template Haskell</td>+<td align="left"><code>aeson</code>, <code>tagged</code>, <code>th-abstraction</code></td>+</tr>+<tr class="odd">+<td align="left"><code>th-abstraction</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/th-abstraction-0.2.8.0"><code>0.2.8.0</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/th-abstraction-0.2.8.0/src/LICENSE"><code>ISC</code></a></td>+<td align="left">Nicer interface for reified information about data types</td>+<td align="left"><code>aeson</code></td>+</tr>+<tr class="even">+<td align="left"><strong><code>time</code></strong></td>+<td align="left"><a href="http://hackage.haskell.org/package/time-1.8.0.2"><code>1.8.0.2</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/time-1.8.0.2/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">A time library</td>+<td align="left"><code>Cabal</code>, <code>aeson</code>, <code>directory</code>, <code>random</code>, <code>tar</code>, <code>time-locale-compat</code>, <code>unix</code></td>+</tr>+<tr class="odd">+<td align="left"><code>time-locale-compat</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/time-locale-compat-0.1.1.5"><code>0.1.1.5</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/time-locale-compat-0.1.1.5/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Compatibile module for time-format locale</td>+<td align="left"><code>aeson</code></td>+</tr>+<tr class="even">+<td align="left"><strong><code>transformers</code></strong></td>+<td align="left"><a href="http://hackage.haskell.org/package/transformers-0.5.2.0"><code>0.5.2.0</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/transformers-0.5.2.0/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Concrete functor and monad transformers</td>+<td align="left"><code>Cabal</code>, <code>StateVar</code>, <code>attoparsec</code>, <code>contravariant</code>, <code>mtl</code>, <code>optparse-applicative</code>, <code>primitive</code>, <code>tagged</code>, <code>transformers-compat</code></td>+</tr>+<tr class="odd">+<td align="left"><code>transformers-compat</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/transformers-compat-0.6.2"><code>0.6.2</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/transformers-compat-0.6.2/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">A small compatibility shim for the transformers library</td>+<td align="left"><code>optparse-applicative</code></td>+</tr>+<tr class="even">+<td align="left"><strong><code>unix</code></strong></td>+<td align="left"><a href="http://hackage.haskell.org/package/unix-2.7.2.2"><code>2.7.2.2</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/unix-2.7.2.2/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">POSIX functionality</td>+<td align="left"><code>Cabal</code>, <code>base-compat</code>, <code>directory</code>, <code>process</code></td>+</tr>+<tr class="odd">+<td align="left"><code>unordered-containers</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/unordered-containers-0.2.9.0"><code>0.2.9.0</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/unordered-containers-0.2.9.0/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Efficient hashing-based container types</td>+<td align="left"><code>aeson</code></td>+</tr>+<tr class="even">+<td align="left"><code>uuid-types</code></td>+<td align="left"><a href="http://hackage.haskell.org/package/uuid-types-1.0.3"><code>1.0.3</code></a></td>+<td align="left"><a href="http://hackage.haskell.org/package/uuid-types-1.0.3/src/LICENSE"><code>BSD-3-Clause</code></a></td>+<td align="left">Type definitions for Universally Unique Identifiers</td>+<td align="left"><code>aeson</code></td>+</tr>+</tbody>+</table>+</body>+</html>
+ example/cabal-plan.md view
@@ -0,0 +1,62 @@+# Dependency License Report++Bold-faced **`package-name`**s denote standard libraries bundled with `ghc-8.2.2`.++## Direct dependencies of `cabal-plan:exe:cabal-plan`++| Name | Version | [SPDX](https://spdx.org/licenses/) License Id | Description | Also depended upon by |+| --- | --- | --- | --- | --- |+| `Cabal` | [`2.4.1.0`](http://hackage.haskell.org/package/Cabal-2.4.1.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/Cabal-2.4.1.0/src/LICENSE) | A framework for packaging Haskell software | |+| `aeson` | [`1.4.2.0`](http://hackage.haskell.org/package/aeson-1.4.2.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/aeson-1.4.2.0/src/LICENSE) | Fast JSON parsing and encoding | |+| `ansi-terminal` | [`0.8.2`](http://hackage.haskell.org/package/ansi-terminal-0.8.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/ansi-terminal-0.8.2/src/LICENSE) | Simple ANSI terminal support, with Windows compatibility | `ansi-wl-pprint` |+| **`base`** | [`4.10.1.0`](http://hackage.haskell.org/package/base-4.10.1.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/base-4.10.1.0/src/LICENSE) | Basic libraries | *(core library)* |+| `base-compat` | [`0.10.5`](http://hackage.haskell.org/package/base-compat-0.10.5) | [`MIT`](http://hackage.haskell.org/package/base-compat-0.10.5/src/LICENSE) | A compatibility layer for base | `aeson` |+| `base-orphans` | [`0.8`](http://hackage.haskell.org/package/base-orphans-0.8) | [`MIT`](http://hackage.haskell.org/package/base-orphans-0.8/src/LICENSE) | Backwards-compatible orphan instances for base | |+| `base16-bytestring` | [`0.1.1.6`](http://hackage.haskell.org/package/base16-bytestring-0.1.1.6) | [`BSD-3-Clause`](http://hackage.haskell.org/package/base16-bytestring-0.1.1.6/src/LICENSE) | Fast base16 (hex) encoding and decoding for ByteStrings | |+| **`bytestring`** | [`0.10.8.2`](http://hackage.haskell.org/package/bytestring-0.10.8.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/bytestring-0.10.8.2/src/LICENSE) | Fast, compact, strict and lazy byte strings with a list interface | `Cabal`, `aeson`, `attoparsec`, `base16-bytestring`, `binary`, `hashable`, `parsec`, `scientific`, `tar`, `text`, `unix`, `uuid-types`, `zlib` |+| **`containers`** | [`0.5.10.2`](http://hackage.haskell.org/package/containers-0.5.10.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/containers-0.5.10.2/src/LICENSE) | Assorted concrete container types | `Cabal`, `aeson`, `attoparsec`, `binary`, `scientific`, `tar`, `th-abstraction` |+| **`directory`** | [`1.3.0.2`](http://hackage.haskell.org/package/directory-1.3.0.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/directory-1.3.0.2/src/LICENSE) | Platform-agnostic library for filesystem operations | `Cabal`, `process`, `tar` |+| **`filepath`** | [`1.4.1.2`](http://hackage.haskell.org/package/filepath-1.4.1.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/filepath-1.4.1.2/src/LICENSE) | Library for manipulating FilePaths in a cross platform way. | `Cabal`, `directory`, `process`, `tar` |+| `mtl` | [`2.2.2`](http://hackage.haskell.org/package/mtl-2.2.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/mtl-2.2.2/src/LICENSE) | Monad classes, using functional dependencies | `Cabal`, `parsec` |+| `optparse-applicative` | [`0.14.3.0`](http://hackage.haskell.org/package/optparse-applicative-0.14.3.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/optparse-applicative-0.14.3.0/src/LICENSE) | Utilities and combinators for parsing command line options | |+| `parsec` | [`3.1.13.0`](http://hackage.haskell.org/package/parsec-3.1.13.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/parsec-3.1.13.0/src/LICENSE) | Monadic parser combinators | `Cabal` |+| `tar` | [`0.5.1.0`](http://hackage.haskell.org/package/tar-0.5.1.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/tar-0.5.1.0/src/LICENSE) | Reading, writing and manipulating ".tar" archive files. | |+| `text` | [`1.2.3.1`](http://hackage.haskell.org/package/text-1.2.3.1) | [`BSD-2-Clause`](http://hackage.haskell.org/package/text-1.2.3.1/src/LICENSE) | An efficient packed Unicode text type. | `Cabal`, `aeson`, `attoparsec`, `hashable`, `parsec`, `scientific`, `uuid-types` |+| `vector` | [`0.12.0.2`](http://hackage.haskell.org/package/vector-0.12.0.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/vector-0.12.0.2/src/LICENSE) | Efficient Arrays | `aeson` |+| `zlib` | [`0.6.2`](http://hackage.haskell.org/package/zlib-0.6.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/zlib-0.6.2/src/LICENSE) | Compression and decompression in the gzip and zlib formats | |++## Indirect transitive dependencies++| Name | Version | [SPDX](https://spdx.org/licenses/) License Id | Description | Depended upon by |+| --- | --- | --- | --- | --- |+| `StateVar` | [`1.1.1.1`](http://hackage.haskell.org/package/StateVar-1.1.1.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/StateVar-1.1.1.1/src/LICENSE) | State variables | `contravariant` |+| `ansi-wl-pprint` | [`0.6.8.2`](http://hackage.haskell.org/package/ansi-wl-pprint-0.6.8.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/ansi-wl-pprint-0.6.8.2/src/LICENSE) | The Wadler/Leijen Pretty Printer for colored ANSI terminal output | `optparse-applicative` |+| **`array`** | [`0.5.2.0`](http://hackage.haskell.org/package/array-0.5.2.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/array-0.5.2.0/src/LICENSE) | Mutable and immutable arrays | `Cabal`, `attoparsec`, `binary`, `containers`, `deepseq`, `integer-logarithms`, `stm`, `tar`, `text` |+| `attoparsec` | [`0.13.2.2`](http://hackage.haskell.org/package/attoparsec-0.13.2.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/attoparsec-0.13.2.2/src/LICENSE) | Fast combinator parsing for bytestrings and text | `aeson` |+| **`binary`** | [`0.8.5.1`](http://hackage.haskell.org/package/binary-0.8.5.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/binary-0.8.5.1/src/LICENSE) | Binary serialisation for Haskell values using lazy ByteStrings | `Cabal`, `scientific`, `text`, `uuid-types` |+| `colour` | [`2.3.4`](http://hackage.haskell.org/package/colour-2.3.4) | [`MIT`](http://hackage.haskell.org/package/colour-2.3.4/src/LICENSE) | A model for human colour/color perception | `ansi-terminal` |+| `contravariant` | [`1.5`](http://hackage.haskell.org/package/contravariant-1.5) | [`BSD-3-Clause`](http://hackage.haskell.org/package/contravariant-1.5/src/LICENSE) | Contravariant functors | `aeson` |+| **`deepseq`** | [`1.4.3.0`](http://hackage.haskell.org/package/deepseq-1.4.3.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/deepseq-1.4.3.0/src/LICENSE) | Deep evaluation of data structures | `Cabal`, `aeson`, `attoparsec`, `bytestring`, `containers`, `dlist`, `hashable`, `pretty`, `process`, `scientific`, `tagged`, `tar`, `text`, `time`, `unordered-containers`, `uuid-types`, `vector` |+| `dlist` | [`0.8.0.5`](http://hackage.haskell.org/package/dlist-0.8.0.5) | [`BSD-3-Clause`](http://hackage.haskell.org/package/dlist-0.8.0.5/src/LICENSE) | Difference lists | `aeson` |+| **`ghc-boot-th`** | [`8.2.2`](http://hackage.haskell.org/package/ghc-boot-th-8.2.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/ghc-boot-th-8.2.2/src/LICENSE) | Shared functionality between GHC and the @template-haskell@ library | `template-haskell` |+| **`ghc-prim`** | [`0.5.1.1`](http://hackage.haskell.org/package/ghc-prim-0.5.1.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/ghc-prim-0.5.1.1/src/LICENSE) | GHC primitives | *(core library)* |+| `hashable` | [`1.2.7.0`](http://hackage.haskell.org/package/hashable-1.2.7.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/hashable-1.2.7.0/src/LICENSE) | A class for types that can be converted to a hash value | `aeson`, `scientific`, `unordered-containers`, `uuid-types` |+| **`integer-gmp`** | [`1.0.1.0`](http://hackage.haskell.org/package/integer-gmp-1.0.1.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/integer-gmp-1.0.1.0/src/LICENSE) | Integer library based on GMP | *(core library)* |+| `integer-logarithms` | [`1.0.2.2`](http://hackage.haskell.org/package/integer-logarithms-1.0.2.2) | [`MIT`](http://hackage.haskell.org/package/integer-logarithms-1.0.2.2/src/LICENSE) | Integer logarithms. | `scientific` |+| **`pretty`** | [`1.1.3.3`](http://hackage.haskell.org/package/pretty-1.1.3.3) | [`BSD-3-Clause`](http://hackage.haskell.org/package/pretty-1.1.3.3/src/LICENSE) | Pretty-printing library | `Cabal`, `template-haskell` |+| `primitive` | [`0.6.4.0`](http://hackage.haskell.org/package/primitive-0.6.4.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/primitive-0.6.4.0/src/LICENSE) | Primitive memory-related operations | `aeson`, `scientific`, `vector` |+| **`process`** | [`1.6.1.0`](http://hackage.haskell.org/package/process-1.6.1.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/process-1.6.1.0/src/LICENSE) | Process libraries | `Cabal`, `optparse-applicative` |+| `random` | [`1.1`](http://hackage.haskell.org/package/random-1.1) | [`BSD-3-Clause`](http://hackage.haskell.org/package/random-1.1/src/LICENSE) | random number library | `uuid-types` |+| `scientific` | [`0.3.6.2`](http://hackage.haskell.org/package/scientific-0.3.6.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/scientific-0.3.6.2/src/LICENSE) | Numbers represented using scientific notation | `aeson`, `attoparsec` |+| `stm` | [`2.5.0.0`](http://hackage.haskell.org/package/stm-2.5.0.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/stm-2.5.0.0/src/LICENSE) | Software Transactional Memory | `StateVar` |+| `tagged` | [`0.8.6`](http://hackage.haskell.org/package/tagged-0.8.6) | [`BSD-3-Clause`](http://hackage.haskell.org/package/tagged-0.8.6/src/LICENSE) | Haskell 98 phantom types to avoid unsafely passing dummy arguments | `aeson` |+| **`template-haskell`** | [`2.12.0.0`](http://hackage.haskell.org/package/template-haskell-2.12.0.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/template-haskell-2.12.0.0/src/LICENSE) | Support library for Template Haskell | `aeson`, `tagged`, `th-abstraction` |+| `th-abstraction` | [`0.2.8.0`](http://hackage.haskell.org/package/th-abstraction-0.2.8.0) | [`ISC`](http://hackage.haskell.org/package/th-abstraction-0.2.8.0/src/LICENSE) | Nicer interface for reified information about data types | `aeson` |+| **`time`** | [`1.8.0.2`](http://hackage.haskell.org/package/time-1.8.0.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/time-1.8.0.2/src/LICENSE) | A time library | `Cabal`, `aeson`, `directory`, `random`, `tar`, `time-locale-compat`, `unix` |+| `time-locale-compat` | [`0.1.1.5`](http://hackage.haskell.org/package/time-locale-compat-0.1.1.5) | [`BSD-3-Clause`](http://hackage.haskell.org/package/time-locale-compat-0.1.1.5/src/LICENSE) | Compatibile module for time-format locale | `aeson` |+| **`transformers`** | [`0.5.2.0`](http://hackage.haskell.org/package/transformers-0.5.2.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/transformers-0.5.2.0/src/LICENSE) | Concrete functor and monad transformers | `Cabal`, `StateVar`, `attoparsec`, `contravariant`, `mtl`, `optparse-applicative`, `primitive`, `tagged`, `transformers-compat` |+| `transformers-compat` | [`0.6.2`](http://hackage.haskell.org/package/transformers-compat-0.6.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/transformers-compat-0.6.2/src/LICENSE) | A small compatibility shim for the transformers library | `optparse-applicative` |+| **`unix`** | [`2.7.2.2`](http://hackage.haskell.org/package/unix-2.7.2.2) | [`BSD-3-Clause`](http://hackage.haskell.org/package/unix-2.7.2.2/src/LICENSE) | POSIX functionality | `Cabal`, `base-compat`, `directory`, `process` |+| `unordered-containers` | [`0.2.9.0`](http://hackage.haskell.org/package/unordered-containers-0.2.9.0) | [`BSD-3-Clause`](http://hackage.haskell.org/package/unordered-containers-0.2.9.0/src/LICENSE) | Efficient hashing-based container types | `aeson` |+| `uuid-types` | [`1.0.3`](http://hackage.haskell.org/package/uuid-types-1.0.3) | [`BSD-3-Clause`](http://hackage.haskell.org/package/uuid-types-1.0.3/src/LICENSE) | Type definitions for Universally Unique Identifiers | `aeson` |+
src-exe/LicenseReport.hs view
@@ -2,7 +2,9 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} --- | Implements @cabal-plan license-report@ functionality+-- | SPDX-License-Identifier: GPL-2.0-or-later+--+-- Implements @cabal-plan license-report@ functionality module LicenseReport ( generateLicenseReport ) where@@ -125,12 +127,31 @@ let Just u = Map.lookup uid (pjUnits plan) PkgId (PkgName pn) pv = uPId u+ isB = uType u == UnitTypeBuiltin+ url = "http://hackage.haskell.org/package/" <> dispPkgId (uPId u) + -- special core libs whose reverse deps are too noisy+ baseLibs = ["base", "ghc-prim", "integer-gmp", "integer-simple", "rts"]++ usedBy = Set.fromList [ uPId (Map.findWithDefault undefined unit (pjUnits plan))+ | unit <- Set.toList (Map.findWithDefault mempty uid revDeps)+ , unit `Set.member` (directDeps <> indirectDeps)+ ]+ case BSL.toStrict <$> Map.lookup (uPId u) indexDb of Nothing | PkgId (PkgName "rts") _ <- uPId u -> pure ()- | otherwise -> fail (show u)+ | otherwise -> do+ -- not found in index -- fail gracefully+ T.hPutStrLn stderr ("WARNING: couldn't find metadata for " <> dispPkgId (uPId u)) + T.putStrLn $ mconcat+ [ if isB then "| **`" else "| `", pn, if isB then "`** | [`" else "` | [`", dispVer pv, "`](", url , ")", " | "+ , " *MISSING* | *MISSING* | "+ , if pn `elem` baseLibs then "*(core library)*"+ else T.intercalate ", " [ T.singleton '`' <> (j :: T.Text) <> "`" | PkgId (z@(PkgName j)) _ <- Set.toList usedBy, z /= pn0], " |"+ ]+ Just x -> do gpd <- maybe (fail "parseGenericPackageDescriptionMaybe") pure $ parseGenericPackageDescriptionMaybe x@@ -140,17 +161,8 @@ -- cr = copyright $ packageDescription gpd lfs = licenseFiles $ packageDescription gpd - usedBy = Set.fromList [ uPId (Map.findWithDefault undefined unit (pjUnits plan))- | unit <- Set.toList (Map.findWithDefault mempty uid revDeps)- , unit `Set.member` (directDeps <> indirectDeps)- ] - let url = "http://hackage.haskell.org/package/" <> dispPkgId (uPId u)-- isB = uType u == UnitTypeBuiltin-- -- special core libs whose reverse deps are too noisy- baseLibs = ["base", "ghc-prim", "integer-gmp", "integer-simple", "rts"]+ let licurl = case lfs of [] -> url@@ -206,7 +218,7 @@ T.putStrLn ("Bold-faced **`package-name`**s denote standard libraries bundled with `" <> dispPkgId (pjCompilerId plan) <> "`.") T.putStrLn "" - T.putStrLn ("## Direct dependencies of `" <> unPkgN pn0 <> ":" <> dispCompName cn0 <> "`")+ T.putStrLn ("## Direct dependencies of `" <> unPkgN pn0 <> ":" <> dispCompNameTarget pn0 cn0 <> "`") T.putStrLn "" T.putStrLn "| Name | Version | [SPDX](https://spdx.org/licenses/) License Id | Description | Also depended upon by |" T.putStrLn "| --- | --- | --- | --- | --- |"
src-exe/cabal-plan.hs view
@@ -2,6 +2,7 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} +-- | SPDX-License-Identifier: GPL-2.0-or-later module Main where import Prelude ()@@ -60,10 +61,10 @@ data Command = InfoCommand | ShowCommand- | FingerprintCommand+ | FingerprintCommand Bool | ListBinsCommand MatchCount [Pattern] | DotCommand Bool Bool [Highlight]- | TopoCommand Bool+ | TopoCommand Bool Bool | LicenseReport (Maybe FilePath) Pattern -------------------------------------------------------------------------------@@ -168,9 +169,7 @@ guard (onlyWithExes `impl` isJust (ciBinFile ci)) let PkgId pn@(PkgName pnT) _ = uPId- g = case cn of- CompNameLib -> pnT <> T.pack":lib:" <> pnT- _ -> pnT <> T.pack":" <> dispCompName cn+ g = pnT <> T.pack":" <> dispCompNameTarget pn cn let cnT = extractCompName pn cn [ (g, cnT) ]@@ -261,9 +260,9 @@ hPutStrLn stderr "Found more than one matching pattern:" for_ bins $ \(p,_) -> hPutStrLn stderr $ " " ++ p exitFailure- FingerprintCommand -> doFingerprint plan+ FingerprintCommand showCabSha -> doFingerprint plan showCabSha DotCommand tred tredWeights highlights -> doDot optsShowBuiltin optsShowGlobal plan tred tredWeights highlights- TopoCommand rev -> doTopo optsShowBuiltin optsShowGlobal plan rev+ TopoCommand rev showFlags -> doTopo optsShowBuiltin optsShowGlobal plan rev showFlags LicenseReport mfp pat -> doLicenseReport mfp pat where optVersion = infoOption ("cabal-plan " ++ showVersion version)@@ -299,7 +298,9 @@ , subCommand "list-bin" "List Single Binary" . listBinParser MatchOne $ pure <$> patternParser [ metavar "PATTERN", help "Pattern to match.", completer $ patternCompleter True ]- , subCommand "fingerprint" "Fingerprint" $ pure FingerprintCommand+ , subCommand "fingerprint" "Print dependency hash fingerprint" $ FingerprintCommand+ <$> switchM [ long "show-cabal-sha256" ]+ <**> helper , subCommand "dot" "Dependency .dot" $ DotCommand <$> switchM [ long "tred", help "Transitive reduction" ]@@ -310,6 +311,8 @@ , subCommand "topo" "Plan in a topological sort" $ TopoCommand <$> switchM [ long "reverse", help "Reverse order" ]+ <*> switchM+ [ long "show-flags", help "Show flags" ] <**> helper , subCommand "license-report" "Generate license report for a component" $ LicenseReport <$> optional (strOption $ mconcat [ long "licensedir", metavar "DIR", help "Write per-package license documents to folder" ])@@ -340,10 +343,8 @@ case ciBinFile ci of Nothing -> [] Just fn -> do- let PkgId pn@(PkgName pnT) _ = uPId- g = case cn of- CompNameLib -> T.unpack (pnT <> T.pack":lib:" <> pnT)- _ -> T.unpack (pnT <> T.pack":" <> dispCompName cn)+ let PkgId pn _ = uPId+ g = T.unpack $ dispCompNameTarget pn cn guard . getAny $ patternChecker pn cn [(g, fn)] where@@ -356,19 +357,24 @@ -- fingerprint ------------------------------------------------------------------------------- -doFingerprint :: PlanJson -> IO ()-doFingerprint plan = do+doFingerprint :: PlanJson -> Bool -> IO ()+doFingerprint plan showCabSha = do let pids = M.fromList [ (uPId u, u) | (_,u) <- M.toList (pjUnits plan) ] for_ (M.toList pids) $ \(_,Unit{..}) -> do- let h = maybe "________________________________________________________________"- dispSha256 $ uSha256- case uType of- UnitTypeBuiltin -> T.putStrLn (h <> " B " <> dispPkgId uPId)- UnitTypeGlobal -> T.putStrLn (h <> " G " <> dispPkgId uPId)- UnitTypeLocal -> T.putStrLn (h <> " L " <> dispPkgId uPId)- UnitTypeInplace -> T.putStrLn (h <> " I " <> dispPkgId uPId)+ let h1 = maybe "________________________________________________________________"+ dispSha256 $ uSha256+ let h2 = maybe "________________________________________________________________"+ dispSha256 $ uCabalSha256 + let ty = case uType of+ UnitTypeBuiltin -> "B"+ UnitTypeGlobal -> "G"+ UnitTypeLocal -> "L"+ UnitTypeInplace -> "I"++ T.putStrLn (T.unwords $ if showCabSha then [ h1, h2, ty, dispPkgId uPId ] else [ h1, ty, dispPkgId uPId ])+ ------------------------------------------------------------------------------- -- info -------------------------------------------------------------------------------@@ -671,11 +677,13 @@ dispDotUnit :: DotUnitId -> T.Text dispDotUnit (DU unitId mcname) = case M.lookup unitId units of Nothing -> "?"- Just unit -> dispPkgId (uPId unit) <> maybe ":*" dispCompName' mcname+ Just unit ->+ let PkgId pn _ = uPId unit in+ dispPkgId (uPId unit) <> maybe ":*" (dispCompName' pn) mcname - dispCompName' :: CompName -> T.Text- dispCompName' CompNameLib = ""- dispCompName' cname = ":" <> dispCompName cname+ dispCompName' :: PkgName -> CompName -> T.Text+ dispCompName' _ CompNameLib = ""+ dispCompName' pn cname = ":" <> dispCompNameTarget pn cname ------------------------------------------------------------------------------- -- license-report@@ -703,10 +711,8 @@ (_, Unit{..}) <- M.toList $ pjUnits plan (cn, _) <- M.toList $ uComps - let PkgId pn@(PkgName pnT) _ = uPId- g = case cn of- CompNameLib -> pnT <> T.pack":lib:" <> pnT- _ -> pnT <> T.pack":" <> dispCompName cn+ let PkgId pn _ = uPId+ g = dispCompNameTarget pn cn guard (getAny $ checkPattern pat pn cn) @@ -717,8 +723,8 @@ -- topo ------------------------------------------------------------------------------- -doTopo :: Bool -> Bool -> PlanJson -> Bool -> IO ()-doTopo showBuiltin showGlobal plan rev = do+doTopo :: Bool -> Bool -> PlanJson -> Bool -> Bool -> IO ()+doTopo showBuiltin showGlobal plan rev showFlags = do let units = pjUnits plan let topo = TG.runG (planJsonIdGraph plan) $ \TG.G {..} ->@@ -740,13 +746,22 @@ UnitTypeGlobal -> White UnitTypeLocal -> Green UnitTypeInplace -> Red+ let PkgId pn _ = uPId unit let components = case M.keys (uComps unit) of [] -> "" [CompNameLib] -> ""- names -> " " <> T.intercalate " " (map dispCompName names)+ names -> " " <> T.intercalate " " (map (dispCompNameTarget pn) names)+ let flags | showFlags = concat+ [ " "+ ++ (if flagValue then "+" else "-")+ ++ T.unpack flagName+ | (FlagName flagName, flagValue) <- M.toList (uFlags unit)+ ]+ | otherwise = "" putStrLn $ colorify colour (T.unpack $ dispPkgId $ uPId unit) ++ T.unpack components+ ++ flags ----------------------------------------------------------------------------
src-topograph/Topograph.hs view
@@ -1,10 +1,9 @@ {-# LANGUAGE RankNTypes, ScopedTypeVariables, RecordWildCards #-}--- | Tools to work with Directed Acyclic Graphs,--- by taking advantage of topological sorting.------ * SPDX-License-Id: BSD-3-Clause+-- | Copyright: (c) 2018, Oleg Grenrus+-- SPDX-License-Identifier: BSD-3-Clause ----- * Author: Oleg Grenrus+-- Tools to work with Directed Acyclic Graphs,+-- by taking advantage of topological sorting. -- module Topograph ( -- * Graph
src/Cabal/Plan.hs view
@@ -2,8 +2,10 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} --- | Utilities for reading @cabal@'s @plan.json@ file+-- | SPDX-License-Identifier: GPL-2.0-or-later --+-- Utilities for reading @cabal@'s @plan.json@ file+-- -- @plan.json@ are generated when using @cabal@ -- <http://cabal.readthedocs.io/en/latest/nix-local-build-overview.html Nix-style Local Builds>. module Cabal.Plan@@ -12,6 +14,7 @@ , Unit(..) , CompName(..) , dispCompName+ , dispCompNameTarget , CompInfo(..) , UnitType(..) @@ -31,6 +34,13 @@ , sha256ToByteString , sha256FromByteString + -- ** PkgLoc+ , PkgLoc(..)+ , Repo(..)+ , SourceRepo(..)+ , URI(..)+ , RepoType(..)+ -- * Utilities , planJsonIdGraph , planJsonIdRoots@@ -89,7 +99,59 @@ -- | <https://en.wikipedia.org/wiki/SHA-2 SHA-256> hash newtype Sha256 = Sha256 B.ByteString -- internal invariant: exactly 32 bytes long deriving (Eq,Ord)+-- | Equivalent to @Cabal@\'s @Distribution.Client.Types.PackageLocation@+--+-- @since 0.5.0.0+data PkgLoc+ = LocalUnpackedPackage !FilePath+ | LocalTarballPackage !FilePath+ | RemoteTarballPackage !URI+ | RepoTarballPackage !Repo+ | RemoteSourceRepoPackage !SourceRepo+ deriving (Show,Eq,Ord) +-- | Equivalent to @Cabal@\'s @Distribution.Types.SourceRepo@+--+-- @since 0.5.0.0+data Repo+ = RepoLocal !FilePath+ | RepoRemote !URI+ | RepoSecure !URI+ deriving (Show,Eq,Ord)++-- | Equivalent to @Cabal@\'s @Distribution.Client.Types.Repo@+--+-- @since 0.5.0.0+data SourceRepo = SourceRepo+ { srType :: !(Maybe RepoType)+ , srLocation :: !(Maybe Text)+ , srModule :: !(Maybe Text)+ , srBranch :: !(Maybe Text)+ , srTag :: !(Maybe Text)+ , srSubdir :: !(Maybe FilePath)+ } deriving (Show,Eq,Ord)++-- | Represents an URI (used e.g. by 'Repo')+--+-- @since 0.5.0.0+newtype URI = URI Text+ deriving (Show,Eq,Ord,FromJSON,ToJSON,FromJSONKey,ToJSONKey)++-- | Equivalent to @Cabal@\'s @Distribution.Client.SourceRepo.RepoType@+--+-- @since 0.5.0.0+data RepoType+ = Darcs+ | Git+ | SVN+ | CVS+ | Mercurial+ | GnuArch+ | Bazaar+ | Monotone+ | OtherRepoType Text+ deriving (Show,Eq,Ord)+ -- | Represents the information contained in cabal's @plan.json@ file. -- -- This comprises basic information describing the environment as well@@ -112,19 +174,32 @@ -- | Represents a build-plan unit uniquely identified by its 'UnitId' data Unit = Unit- { uId :: !UnitId -- ^ Unit ID uniquely identifying a 'Unit' in install plan- , uPId :: !PkgId -- ^ Package name and version (not necessarily unique within plan)- , uType :: !UnitType -- ^ Describes type of build item, see 'UnitType'- , uSha256 :: !(Maybe Sha256) -- ^ SHA256 source tarball checksum (as used by e.g. @hackage-security@)- , uComps :: !(Map CompName CompInfo) -- ^ Components identified by 'UnitId'+ { uId :: !UnitId -- ^ Unit ID uniquely identifying a 'Unit' in install plan+ , uPId :: !PkgId -- ^ Package name and version (not necessarily unique within plan)+ , uType :: !UnitType -- ^ Describes type of build item, see 'UnitType'+ , uSha256 :: !(Maybe Sha256) -- ^ SHA256 source tarball checksum (as used by e.g. @hackage-security@)+ , uCabalSha256 :: !(Maybe Sha256) -- ^ SHA256 package description metadata checksum+ --+ -- In other words, the checksum of the @.cabal@ file that was used as input to the build planning+ --+ -- __NOTE__: This meta-information is available only for 'pjCabalVersion' >= 2.4.1.0+ --+ -- @since 0.5.0.0+ , uComps :: !(Map CompName CompInfo) -- ^ Components identified by 'UnitId' -- -- When @cabal@ needs to fall back to legacy-mode (currently for -- @custom@ build-types or obsolete @cabal-version@ values), 'uComps' -- may contain more than one element.- , uFlags :: !(Map FlagName Bool) -- ^ cabal flag settings (not available for 'UnitTypeBuiltin')- , uDistDir :: !(Maybe FilePath) -- ^ In-place dist-dir (if available)+ , uFlags :: !(Map FlagName Bool) -- ^ cabal flag settings (not available for 'UnitTypeBuiltin')+ , uDistDir :: !(Maybe FilePath) -- ^ In-place dist-dir (if available) -- -- @since 0.3.0.0+ , uPkgSrc :: !(Maybe PkgLoc)+ -- ^ Source of the package+ --+ -- __NOTE__: This meta-information is available only for 'pjCabalVersion' >= 2.4.0.0+ --+ -- @since 0.5.0.0 } deriving Show -- | Component name inside a build-plan unit@@ -188,7 +263,50 @@ instance ToJSONKey PkgId where toJSONKey = toJSONKeyText dispPkgId +---- +instance FromJSON PkgLoc where+ parseJSON = withObject "PkgSrc" $ \o -> do+ ty <- o .: "type"+ case ty :: Text of+ "local" -> LocalUnpackedPackage <$> o .: "path"+ "local-tar" -> LocalTarballPackage <$> o .: "path"+ "remote-tar" -> RemoteTarballPackage <$> o .: "uri"+ "repo-tar" -> RepoTarballPackage <$> o .: "repo"+ "source-repo" -> RemoteSourceRepoPackage <$> o .: "source-repo"+ _ -> fail "invalid PkgSrc \"type\""++instance FromJSON Repo where+ parseJSON = withObject "Repo" $ \o -> do+ ty <- o .: "type"+ case ty :: Text of+ "local-repo" -> RepoLocal <$> o .: "path"+ "remote-repo" -> RepoRemote <$> o .: "uri"+ "secure-repo" -> RepoSecure <$> o .: "uri"+ _ -> fail "invalid Repo \"type\""++instance FromJSON SourceRepo where+ parseJSON = withObject "SourceRepo" $ \o -> do+ SourceRepo <$> o .:? "type"+ <*> o .:? "location"+ <*> o .:? "module"+ <*> o .:? "branch"+ <*> o .:? "tag"+ <*> o .:? "subdir"++instance FromJSON RepoType where+ parseJSON = withText "RepoType" $ \ty -> return $+ case ty of+ "darcs" -> Darcs+ "git" -> Git+ "svn" -> SVN+ "cvs" -> CVS+ "mercurial" -> Mercurial+ "gnuarch" -> GnuArch+ "bazaar" -> Bazaar+ "monotone" -> Monotone+ _ -> OtherRepoType ty+ ---------------------------------------------------------------------------- -- parser helpers @@ -203,7 +321,18 @@ ["setup"] -> Just CompNameSetup _ -> Nothing --- | Pretty print 'CompName'+-- | Pretty print 'CompName' in cabal's target-selector syntax.+--+-- @since 0.5.0.0+dispCompNameTarget :: PkgName -> CompName -> Text+dispCompNameTarget (PkgName pkg) cn = case cn of+ CompNameLib -> "lib:" <> pkg+ _ -> dispCompName cn++-- | Pretty print 'CompName' in the same syntax that is used in+-- @plan.json@. Note that this string can not be used as a target-selector on+-- the cabal command-line. See 'dispCompNameTarget' for a target-selector+-- compatible pretty printer. dispCompName :: CompName -> Text dispCompName cn = case cn of CompNameLib -> "lib"@@ -258,6 +387,7 @@ _ -> fail (show (ty,mstyle)) uFlags <- o .:?! "flags" uSha256 <- o .:? "pkg-src-sha256"+ uCabalSha256 <- o .:? "pkg-cabal-sha256" uComps <- case (mcomponents, mcomponentname) of (Just comps0, Nothing) -> pure comps0@@ -269,6 +399,8 @@ uDistDir <- o .:? "dist-dir" + uPkgSrc <- o .:? "pkg-src"+ pure Unit{..} ----------------------------------------------------------------------------@@ -310,7 +442,7 @@ ProjectRelativeToDir fp -> do mRoot <- findProjectRoot fp case mRoot of- Nothing -> fail ("missing project root relative to: " ++ fp)+ Nothing -> fail ("missing project root relative to: " ++ fp) Just dir -> pure $ dir </> "dist-newstyle" haveDistFolder <- Dir.doesDirectoryExist distFolder@@ -362,7 +494,7 @@ result <- walkUpFolders checkCabalProject normalisedPath case result of Just rootDir -> pure $ Just rootDir- Nothing -> walkUpFolders checkCabal normalisedPath+ Nothing -> walkUpFolders checkCabal normalisedPath where isExtensionOf :: String -> FilePath -> Bool isExtensionOf ext fp = ext == takeExtension fp@@ -382,7 +514,7 @@ | otherwise = do t <- dtest d case t of- Nothing -> go $ takeDirectory d+ Nothing -> go $ takeDirectory d x@Just{} -> pure x go d0