packages feed

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 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 &quot;.tar&quot; 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