From 7ee3d5449f0d70605015fd53e4c242a767b8ab2d Mon Sep 17 00:00:00 2001 From: Artem Pelenitsyn Date: Mon, 9 Sep 2024 23:34:29 -0400 Subject: [PATCH 01/87] Changelogs 3.14 (#10336) * changelogs for Cabal-3.14 and (incomplete) cabal-install-3.16 * cleanup changelog-d files afer creating the 3.14 changelog * Apply suggestions from geekosaur Co-authored-by: brandon s allbery kf8nh * Apply more suggestions from geekosaur * Apply suggestions from geekosaur (contd.) Co-authored-by: brandon s allbery kf8nh --------- Co-authored-by: brandon s allbery kf8nh --- Cabal/ChangeLog.md | 3 + changelog.d/configure-messages | 13 -- changelog.d/issue-10046 | 4 - changelog.d/issue-10051 | 4 - changelog.d/issue-10166 | 20 --- changelog.d/issue-4816 | 23 ---- changelog.d/issue-4816-2 | 26 ---- changelog.d/issue-8817 | 17 --- changelog.d/issue-9702 | 39 ------ changelog.d/pr-10089 | 12 -- changelog.d/pr-10103 | 14 -- changelog.d/pr-10115 | 10 -- changelog.d/pr-10122 | 10 -- changelog.d/pr-10128 | 12 -- changelog.d/pr-10217 | 10 -- changelog.d/pr-10240 | 13 -- changelog.d/pr-10245 | 8 -- changelog.d/pr-10261 | 12 -- changelog.d/pr-8717 | 25 ---- changelog.d/pr-9177 | 31 ----- changelog.d/pr-9551 | 19 --- changelog.d/pr-9740 | 9 -- changelog.d/pr-9821 | 21 --- changelog.d/pr-9969 | 18 --- release-notes/Cabal-3.14.0.0.md | 152 +++++++++++++++++++++ release-notes/cabal-install-3.16.0.0.md | 170 ++++++++++++++++++++++++ 26 files changed, 325 insertions(+), 370 deletions(-) delete mode 100644 changelog.d/configure-messages delete mode 100644 changelog.d/issue-10046 delete mode 100644 changelog.d/issue-10051 delete mode 100644 changelog.d/issue-10166 delete mode 100644 changelog.d/issue-4816 delete mode 100644 changelog.d/issue-4816-2 delete mode 100644 changelog.d/issue-8817 delete mode 100644 changelog.d/issue-9702 delete mode 100644 changelog.d/pr-10089 delete mode 100644 changelog.d/pr-10103 delete mode 100644 changelog.d/pr-10115 delete mode 100644 changelog.d/pr-10122 delete mode 100644 changelog.d/pr-10128 delete mode 100644 changelog.d/pr-10217 delete mode 100644 changelog.d/pr-10240 delete mode 100644 changelog.d/pr-10245 delete mode 100644 changelog.d/pr-10261 delete mode 100644 changelog.d/pr-8717 delete mode 100644 changelog.d/pr-9177 delete mode 100644 changelog.d/pr-9551 delete mode 100644 changelog.d/pr-9740 delete mode 100644 changelog.d/pr-9821 delete mode 100644 changelog.d/pr-9969 create mode 100644 release-notes/Cabal-3.14.0.0.md create mode 100644 release-notes/cabal-install-3.16.0.0.md diff --git a/Cabal/ChangeLog.md b/Cabal/ChangeLog.md index 681bbc5a84a..ea3b88e1082 100644 --- a/Cabal/ChangeLog.md +++ b/Cabal/ChangeLog.md @@ -1,3 +1,6 @@ +# 3.14.0.0 [Hécate](mailto:hecate+github@glitchbra.in) September 2024 +* See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.14.0.0.md + # 3.12.1.0 [Artem Pelenitsyn](mailto:a.pelenitsyn@gmail.com) June 2024 * See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.12.1.0.md diff --git a/changelog.d/configure-messages b/changelog.d/configure-messages deleted file mode 100644 index f0fab79e734..00000000000 --- a/changelog.d/configure-messages +++ /dev/null @@ -1,13 +0,0 @@ -synopsis: clarify Cabal "configure" messages -packages: Cabal -prs: #9476 - -synopsis: { - - Cabal can issue a number of error messages referencing "Setup configure", - but it simply references "configure" which could mean any of three - things (Setup configure, the package's "configure" script, or "cabal - configure"). This has recently caught out even Cabal devs. Clarify these - messages. - -} diff --git a/changelog.d/issue-10046 b/changelog.d/issue-10046 deleted file mode 100644 index 668d077271e..00000000000 --- a/changelog.d/issue-10046 +++ /dev/null @@ -1,4 +0,0 @@ -synopsis: Bug fix - Don't pass --coverage-for for non-dependency libs of testsuite -packages: cabal-install -issues: #10046 -prs: #10250 diff --git a/changelog.d/issue-10051 b/changelog.d/issue-10051 deleted file mode 100644 index b582fc2b619..00000000000 --- a/changelog.d/issue-10051 +++ /dev/null @@ -1,4 +0,0 @@ -synopsis: Added `--all` and `--haddock-all` switches to `haddock-project` subcommand -packages: cabal-install -issues: #10051 -prs: #2272 diff --git a/changelog.d/issue-10166 b/changelog.d/issue-10166 deleted file mode 100644 index 02d313adca9..00000000000 --- a/changelog.d/issue-10166 +++ /dev/null @@ -1,20 +0,0 @@ -synopsis: Include package version when passing `--promised-dependency` flag -packages: Cabal Cabal-syntax -prs: #10248 -issues: #10166 - -description: { - -The --promised dependency flag now expects an argument in format - -``` -NAME-VER[:COMPONENT_NAME]=CID` -``` - -rather than - -``` -NAME[:COMPONENT_NAME]=CID -``` - -} diff --git a/changelog.d/issue-4816 b/changelog.d/issue-4816 deleted file mode 100644 index e0ac7700b7e..00000000000 --- a/changelog.d/issue-4816 +++ /dev/null @@ -1,23 +0,0 @@ -synopsis: Add support for building profiled dynamic way -packages: Cabal Cabal-syntax cabal-install -prs: #9900 -issues: #4816 - -description: { -Add support for profiled dynamic way - -New options for cabal.project and ./Setup interface: - -* `profiling-shared`: Enable building profiling dynamic way -* Passing `--enable-profiling` and `--enable-executable-dynamic` builds - profiled dynamic executables. - -Support for using `profiling-shared` is guarded behind a constraint -which ensures you are using `Cabal >= 3.13`. - -In the cabal file: - -* `ghc-prof-shared-options`, for passing options when building in - profiling dynamic way - -} diff --git a/changelog.d/issue-4816-2 b/changelog.d/issue-4816-2 deleted file mode 100644 index 96307c3f83e..00000000000 --- a/changelog.d/issue-4816-2 +++ /dev/null @@ -1,26 +0,0 @@ -synopsis: Fix interaction of `--*-shared` and `--*-executable-dynamic` options. -packages: cabal-install -prs: #9900 -issues: #10050 - -description: { - -If you explicitly request `--disable-shared` it should disable the building of -a shared library and override any automatic ways this option is turned on. - -Passing `--enable-executable-dynamic` turns on `--enable-shared` if the option is -not specified explicitly. - -Before this patch, writing `--disable-shared` on its own would not disable the building of shared libraries. Writing `--disable-shared` and `--disable-executable-dynamic` would disable shared library -creation (despite `--disable-executable-dynamic` being the default). - -Now: - -* If you specify `--enable-shared` then shared objects are built. -* If you specify `--disabled-shared` then shared objects are not built. -* If you don't explicitly specify whether you want to build shared libraries then - * `--enable-executable-dynamic` will automatically turn on building shared libraries - * `--enable-executable-dynamic --enable-profiling` will automatically turn on building - shared profiling libraries (if supported by your compiler). - -} diff --git a/changelog.d/issue-8817 b/changelog.d/issue-8817 deleted file mode 100644 index 0743671fa0d..00000000000 --- a/changelog.d/issue-8817 +++ /dev/null @@ -1,17 +0,0 @@ -synopsis: Neutral field to add files to sdist -packages: Cabal Cabal-syntax -prs: #10107 -issues: #8817 -significance: significant - -description: { - -Adds the `extra-files` field to the cabal file specification. This is like -the other `extra-*` fields in that it is copied with the `sdist` command, -except there are no other semantics. Compare to: - -* `extra-source-files`: Tracked by `cabal build`. - -* `extra-doc-files`: Copied by Haddock to the html directory. - -} diff --git a/changelog.d/issue-9702 b/changelog.d/issue-9702 deleted file mode 100644 index 7df998b8d8d..00000000000 --- a/changelog.d/issue-9702 +++ /dev/null @@ -1,39 +0,0 @@ -synopsis: Working directory support for Cabal -packages: Cabal-syntax Cabal cabal-install -prs: #9718 -issues: #9702 - -description: { - -The Cabal library is now able to handle a passed-in working directory, instead -of always relying on the current working directory of the parent process. - -In order to achieve this, the `SymbolicPath` abstraction was fleshed out, and -all fields of `PackageDescription` that, if relative, should be interpreted -with respect to e.g. the package root, use `SymbolicPath` instead of `FilePath`. - -This means that many library functions in `Cabal` take an extra argument of type -`Maybe (SymbolicPath CWD (Dir "Package))`, which is an optional (relative or -absolute) path to the package root (if relative, relative to the current working -directory). In addition, many functions that used to manipulate `FilePath`s now -manipulate `SymbolicPath`s, require explicit conversion using e.g. `getSymbolicPath`. - -To illustrate with file searching, the `Cabal` library defines: - -```haskell -findFileCwd - :: forall dir1 dir2 file - . Verbosity - -> Maybe (SymbolicPath CWD (Dir dir1)) - -- ^ working directory - -> [SymbolicPath dir1 (Dir dir2)] - -- ^ search directories - -> RelativePath dir2 File - -- ^ filename - -> IO (SymbolicPath dir1 File) -``` - -See Note [Symbolic paths] in `Distribution.Utils.Path` for further information -on the design of this API. -} - diff --git a/changelog.d/pr-10089 b/changelog.d/pr-10089 deleted file mode 100644 index ed322194e21..00000000000 --- a/changelog.d/pr-10089 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: `curl` transport now supports Basic authentication -packages: cabal-install -prs: #10089 - -description: { - -- The `curl` HTTP transport previously only supported the HTTP Digest - authentication scheme. Basic authentication is now supported - when using HTTPS; Curl will use the scheme offered by the server. - The `wget` transport already supports HTTPS. - -} diff --git a/changelog.d/pr-10103 b/changelog.d/pr-10103 deleted file mode 100644 index 3e68cf38d3c..00000000000 --- a/changelog.d/pr-10103 +++ /dev/null @@ -1,14 +0,0 @@ -synopsis: Enhance error detection for cabal root project files, including broken symlinks - -packages: cabal-install - -prs: #10103 - -issues: #9937 - -description: { - -- Added proper detection and reporting for issues with cabal root project files. Previously, these files were silently ignored if they were broken symlinks. Now, `cabal` will exit -with an error in such case. - -} diff --git a/changelog.d/pr-10115 b/changelog.d/pr-10115 deleted file mode 100644 index ce288c105c1..00000000000 --- a/changelog.d/pr-10115 +++ /dev/null @@ -1,10 +0,0 @@ -synopsis: Let cabal init remember chosen language within current session -packages: cabal-install -prs: #10115 -issues: #10096 - -description: { - -When cabal init asks for a language, the last choice will be used as the new default for the current session. - -} \ No newline at end of file diff --git a/changelog.d/pr-10122 b/changelog.d/pr-10122 deleted file mode 100644 index 7e9fbe10d47..00000000000 --- a/changelog.d/pr-10122 +++ /dev/null @@ -1,10 +0,0 @@ -synopsis: Clarify error message when pkg-config is not found -packages: cabal-install-solver -prs: #10122 - -description: { - -- The error message when pkg-config is not found or querying it fails will no -longer incorrectly claim that the package is missing in the database. - -} diff --git a/changelog.d/pr-10128 b/changelog.d/pr-10128 deleted file mode 100644 index 8c7cc45d204..00000000000 --- a/changelog.d/pr-10128 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Add flag ignore-build-tools -packages: Cabal -prs: #10128 - -description: { - -- Adds flag --ignore-build-tools which allows a user to ignore the tool - dependencies declared in build-tool-depends. For general use, this flag - should never be needed, but it may be useful for packagers. - -} - diff --git a/changelog.d/pr-10217 b/changelog.d/pr-10217 deleted file mode 100644 index 8e520bab27e..00000000000 --- a/changelog.d/pr-10217 +++ /dev/null @@ -1,10 +0,0 @@ -synopsis: Do not try to build dynamic executables on Windows -packages: Cabal -prs: #10217 - -description: { - -- Cabal will now exit with a descriptive error message instead of attempting to - build a dynamic executable on Windows. - -} diff --git a/changelog.d/pr-10240 b/changelog.d/pr-10240 deleted file mode 100644 index 9bd05100ab7..00000000000 --- a/changelog.d/pr-10240 +++ /dev/null @@ -1,13 +0,0 @@ -synopsis: Filter out dinitial-unique and dunique-increment from package hash -packages: cabal-install -prs: #10122 - -description: { - -`-dinitial-unique` and `-dunique-increment` are now filtered out when computing the -store hash of a package. - -These options shouldn't affect the output of the package and hence -shouldn't affect the store hash of a package. - -} diff --git a/changelog.d/pr-10245 b/changelog.d/pr-10245 deleted file mode 100644 index 2ed3690720a..00000000000 --- a/changelog.d/pr-10245 +++ /dev/null @@ -1,8 +0,0 @@ -synopsis: Add MultilineStrings extension -packages: Cabal-syntax -prs: #10245 -description: { - -- adds support for the `MultilineStrings` language extension (GHC proposal #637) - -} diff --git a/changelog.d/pr-10261 b/changelog.d/pr-10261 deleted file mode 100644 index adcae60fd88..00000000000 --- a/changelog.d/pr-10261 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Warn about git:// protocol -packages: cabal-install -prs: #10261 - -description: { - -`cabal check` will warn about insecure git:// protocol in `source-repository`. - -See [Git Book](https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols#_the_cons_4) -for an explanation. - -} diff --git a/changelog.d/pr-8717 b/changelog.d/pr-8717 deleted file mode 100644 index b0ac7e09388..00000000000 --- a/changelog.d/pr-8717 +++ /dev/null @@ -1,25 +0,0 @@ -synopsis: Always pass `ghc-options` to GHC -packages: Cabal -prs: #8717 -issues: - -description: { - -Previously, options set in the package field `ghc-options` would not be passed -to GHC during the link phase for shared objects (where multiple `.o` or -`.dyn_o` files are merged into a single object file). This made it impossible -to use `ghc-options` to use a different linker by setting (for example) -`ghc-options: -optl-fuse-ld=mold -optlm-fuse-ld=mold`; the options would be -dropped in the link phase, falling back to the default linker. - -It was possible to work around this by duplicating the `ghc-options` to -`ghc-shared-options`, which _are_ passed in the shared link phase, but that had -the (undocumented and unfortunate) side-effect of disabling the GHC -`-dynamic-too` flag, effectively doubling compilation times when -`ghc-shared-options` are set. - -Now, `ghc-options` are combined with `ghc-shared-options` (to accurately -reflect the documentation on this feature) and the fact that -`ghc-shared-options` disables `-dynamic-too` is documented. - -} diff --git a/changelog.d/pr-9177 b/changelog.d/pr-9177 deleted file mode 100644 index 6b1eb227350..00000000000 --- a/changelog.d/pr-9177 +++ /dev/null @@ -1,31 +0,0 @@ -synopsis: Enable recompilation avoidance during Haddock generation -packages: cabal-install -prs: #9177 -issues: #9175 - -description: { - -* Haddock no longer writes compilation files by default, so we do not need to - pass tmp dirs for `-hidir`, `-stubdir`, and `-odir` via `--optghc`. Indeed, we - do not *want* to do so, since it results in recompilation for every invocation - of Haddock via Cabal. We now stop this from happening for Haddock versions - 2.28 and greater, since that is when Hi Haddock was introduced. - -* We no longer define the `__HADDOCK_VERSION__` macro when invoking GHC through - Haddock, since doing so essentially guarantees recompilation during - documentation generation. We audited all uses of `__HADDOCK_VERSION__` in - hackage, ensuring there was a reasonable path forward to migrate away from - using `__HADDOCK_VERSION__` for each, while generating the same documentation - as it did before. - If you are a user of `__HADDOCK_VERSION__`, please take a look at the - discussion in https://github.com/haskell/cabal/pull/9177 and reach out to us - if your use case is not covered. - -* Rename the `--haddock-lib` flag to `--haddock-resources-dir` (and - `haddock-lib:` cabal.project field to `haddock-resources-dir:`), and add this - flag to the users guide since it was missing an entry. - -* `documentation: true` or `--enable-documentation` now implies `-haddock` for - GHC. - -} diff --git a/changelog.d/pr-9551 b/changelog.d/pr-9551 deleted file mode 100644 index 5116234a653..00000000000 --- a/changelog.d/pr-9551 +++ /dev/null @@ -1,19 +0,0 @@ -synopsis: Introduce SetupHooks -packages: Cabal -prs: #9551 -description: { - Introduction of a new build type: Hooks. - This build type, intended as replacement to the Custom build type, integrates - better with the rest of the ecosystem (`cabal-install`, Haskell Language Server). - - The motivation and full design of this new build-type are specified in the - Haskell Foundation Tech Proposal - [Replacing the Cabal Custom build-type](https://github.com/haskellfoundation/tech-proposals/pull/60). - - Package authors willing to use this feature should declare `build-type: Hooks` - in their `.cabal` file, declare a custom-setup stanza with a dependency on the - `Cabal-hooks` package, and define a module `SetupHooks` that exports a value - `setupHooks :: SetupHooks`, using the API exported by `Distribution.Simple.SetupHooks` - from the `Cabal-hooks` package. Refer to the Haddock documentation of - `Distribution.Simple.SetupHooks` for example usage. -} diff --git a/changelog.d/pr-9740 b/changelog.d/pr-9740 deleted file mode 100644 index c5a3b9a173e..00000000000 --- a/changelog.d/pr-9740 +++ /dev/null @@ -1,9 +0,0 @@ -synopsis: Add language extension NamedDefaults -packages: Cabal-syntax -prs: #9740 - -description: { - -- adds support for the `NamedDefaults` language extension (GHC proposal #409) - -} diff --git a/changelog.d/pr-9821 b/changelog.d/pr-9821 deleted file mode 100644 index bc3e9dcae50..00000000000 --- a/changelog.d/pr-9821 +++ /dev/null @@ -1,21 +0,0 @@ -synopsis: `haddock-project` support for subcomponents -packages: cabal-install -prs: #9821 -issues: -significance: significant - -description: { - -- `haddock-project` handles sublibraries, test suites and benchmarks. -- `haddock` receives `--package-name` flag whcih allows to set names of - components which are included in the main `index.html` file. -- added `--use-unicode` flag to `haddock` and `haddock-project` commands. -- The directory structure of `./dist-newstyle` has changed. `haddock` - subcommand will install `package:sublib` component in a directory - `package/sublib` under `l/sublib/doc/html/`. This is important for - `haddock-project` command and in the future might will be useful for hackage - support of sublibraries. See - https://github.com/haskell/cabal/pull/9821#discussion_r1548557115. - -} - diff --git a/changelog.d/pr-9969 b/changelog.d/pr-9969 deleted file mode 100644 index 17a60b88e99..00000000000 --- a/changelog.d/pr-9969 +++ /dev/null @@ -1,18 +0,0 @@ -synopsis: Configure build-type in terms of Hooks -packages: Cabal cabal-install -prs: #9969 - -description: { - -The `build-type: Configure` is now implemented in terms of `build-type: Hooks` -rather than in terms of `build-type: Custom`. This moves the `Configure` -build-type away from the `Custom` issues. Eventually, `build-type: Hooks` will -no longer imply packages are built in legacy-fallback mode. Now, when that -happens, `Configure` will also stop implying `legacy-fallback`. - -The observable aspect of this change is `runConfigureScript` now having a -different type, and `autoconfSetupHooks` being exposed `Distribution.Simple`. -The former is motivated by internal implementation details, while the latter -provides the `SetupHooks` value for the `Configure` build type, which can be -consumed by other `Hooks` clients (e.g. eventually HLS). -} diff --git a/release-notes/Cabal-3.14.0.0.md b/release-notes/Cabal-3.14.0.0.md new file mode 100644 index 00000000000..d27131035ff --- /dev/null +++ b/release-notes/Cabal-3.14.0.0.md @@ -0,0 +1,152 @@ +### Significant changes + +- Neutral field to add files to sdist [#8817](https://github.com/haskell/cabal/issues/8817) [#10107](https://github.com/haskell/cabal/pull/10107) + + Adds the `extra-files` field to the cabal file specification. This is like + the other `extra-*` fields in that it is copied with the `sdist` command, + except there are no other semantics. Compare to: + + * `extra-source-files`: Tracked by `cabal build`. + + * `extra-doc-files`: Copied by Haddock to the html directory. + +### Other changes + +- Include package version when passing `--promised-dependency` flag [#10166](https://github.com/haskell/cabal/issues/10166) [#10248](https://github.com/haskell/cabal/pull/10248) + + The `--promised-dependency` flag now expects an argument in the format + + ``` + NAME-VER[:COMPONENT_NAME]=CID + ``` + + rather than + + ``` + NAME[:COMPONENT_NAME]=CID + ``` + +- Add support for building profiled dynamic way [#4816](https://github.com/haskell/cabal/issues/4816) [#9900](https://github.com/haskell/cabal/pull/9900) + + Add support for profiled dynamic way + + New options for `cabal.project` and `./Setup` interface: + + * `profiling-shared`: Enable building profiling dynamic way + * Passing `--enable-profiling` and `--enable-executable-dynamic` builds + profiled dynamic executables. + + Support for using `profiling-shared` is guarded behind a constraint + which ensures you are using `Cabal >= 3.13`. + + In the cabal file: + + * `ghc-prof-shared-options`, for passing options when building in + profiling dynamic way + +- Working directory support for `Cabal` [#9702](https://github.com/haskell/cabal/issues/9702) [#9718](https://github.com/haskell/cabal/pull/9718) + + The `Cabal` library is now able to handle a passed-in working directory, instead + of always relying on the current working directory of the parent process. + + In order to achieve this, the `SymbolicPath` abstraction was fleshed out, and + all fields of `PackageDescription` that, if relative, should be interpreted + with respect to e.g. the package root, use `SymbolicPath` instead of `FilePath`. + + This means that many library functions in `Cabal` take an extra argument of type + `Maybe (SymbolicPath CWD (Dir "Package"))`, which is an optional (relative or + absolute) path to the package root (if relative, relative to the current working + directory). In addition, many functions that used to manipulate `FilePath`s now + manipulate `SymbolicPath`s, require explicit conversion using e.g. `getSymbolicPath`. + + To illustrate with file searching, the `Cabal` library defines: + + ```haskell + findFileCwd + :: forall dir1 dir2 file + . Verbosity + -> Maybe (SymbolicPath CWD (Dir dir1)) + + -> [SymbolicPath dir1 (Dir dir2)] + + -> RelativePath dir2 File + + -> IO (SymbolicPath dir1 File) + ``` + + See Note [Symbolic paths] in `Distribution.Utils.Path` for further information + on the design of this API. + +- Add `MultilineStrings` extension (GHC proposal #637) [#10245](https://github.com/haskell/cabal/pull/10245) + +- Add `NamedDefaults` extension (GHC proposal #409) [#9740](https://github.com/haskell/cabal/pull/9740) + + +### Other changes + +- Add flag `--ignore-build-tools` [#10128](https://github.com/haskell/cabal/pull/10128) + + - Adds flag `--ignore-build-tools` which allows a user to ignore the tool + dependencies declared in `build-tool-depends`. For general use, this flag + should never be needed, but it may be useful for packagers. + +- Do not try to build dynamic executables on Windows [#10217](https://github.com/haskell/cabal/pull/10217) + + - Cabal will now exit with a descriptive error message instead of attempting to + build a dynamic executable on Windows. + +- Always pass `ghc-options` to GHC [#8717](https://github.com/haskell/cabal/pull/8717) + + Previously, options set in the package field `ghc-options` would not be passed + to GHC during the link phase for shared objects (where multiple `.o` or + `.dyn_o` files are merged into a single object file). This made it impossible + to use `ghc-options` to use a different linker by setting (for example) + `ghc-options: -optl-fuse-ld=mold -optlm-fuse-ld=mold`; the options would be + dropped in the link phase, falling back to the default linker. + + It was possible to work around this by duplicating the `ghc-options` to + `ghc-shared-options`, which _are_ passed in the shared link phase, but that had + the undocumented and unfortunate side-effect of disabling the GHC + `-dynamic-too` flag, effectively doubling compilation times when + `ghc-shared-options` are set. + + Now, `ghc-options` are combined with `ghc-shared-options` (to accurately + reflect the documentation on this feature) and the fact that + `ghc-shared-options` disables `-dynamic-too` is documented. + +- Introduce `SetupHooks` [#9551](https://github.com/haskell/cabal/pull/9551) + + Introduction of a new build type: `Hooks`. + This build type, intended to eventually replace the `Custom` build type, integrates + better with the rest of the ecosystem (`cabal-install`, Haskell Language Server). + + The motivation and full design of this new build-type are specified in the + Haskell Foundation Tech Proposal + [Replacing the Cabal Custom build-type](https://github.com/haskellfoundation/tech-proposals/pull/60). + + Package authors willing to use this feature should declare `cabal-version: 3.14` and `build-type: Hooks` + in their `.cabal` file, declare a `custom-setup` stanza with a dependency on the + `Cabal-hooks` package, and define a module `SetupHooks` that exports a value + `setupHooks :: SetupHooks`, using the API exported by `Distribution.Simple.SetupHooks` + from the `Cabal-hooks` package. Refer to the Haddock documentation of + `Distribution.Simple.SetupHooks` for example usage. + +- Redefine `build-type: Configure` in terms of `Hooks` [#9969](https://github.com/haskell/cabal/pull/9969) + + The `build-type: Configure` is now implemented in terms of `build-type: Hooks` + rather than in terms of `build-type: Custom`. This moves the `Configure` + build-type away from the `Custom` issues. Eventually, `build-type: Hooks` will + no longer imply packages are built in legacy-fallback mode. When that + happens, `Configure` will also stop implying `legacy-fallback`. + + The observable aspect of this change is `runConfigureScript` now having a + different type, and `autoconfSetupHooks` being exposed by `Distribution.Simple`. + The former is motivated by internal implementation details, while the latter + provides the `SetupHooks` value for the `Configure` build type, which can be + consumed by other `Hooks` clients (e.g. eventually HLS). + +- Cabal can issue a number of error messages referencing "Setup configure", + but it simply references "configure" which could mean any of three + things (Setup configure, the package's "configure" script, or "cabal + configure"). This has recently caught out even Cabal devs. Clarify these + messages. [#9476](https://github.com/haskell/cabal/pull/9476) diff --git a/release-notes/cabal-install-3.16.0.0.md b/release-notes/cabal-install-3.16.0.0.md new file mode 100644 index 00000000000..0cf4c9cb2b7 --- /dev/null +++ b/release-notes/cabal-install-3.16.0.0.md @@ -0,0 +1,170 @@ +### THIS iS A WIP CHANGELOG FOR 3.16 + +**It will have to be updated with whatever gets added between 3.14 and 3.16** + + +- Clarify error message when `pkg-config` is not found [#10122](https://github.com/haskell/cabal/pull/10122) + + - The error message when `pkg-config` is not found or querying it fails will no + longer incorrectly claim that the package is missing in the database. + +### Significant changes + +- `haddock-project` support for subcomponents [#9821](https://github.com/haskell/cabal/pull/9821) + + - `haddock-project` handles sublibraries, test suites and benchmarks. + - `haddock` receives `--package-name` flag whcih allows to set names of + components which are included in the main `index.html` file. + - added `--use-unicode` flag to `haddock` and `haddock-project` commands. + - The directory structure of `./dist-newstyle` has changed. `haddock` + subcommand will install `package:sublib` component in a directory + `package/sublib` under `l/sublib/doc/html/`. This is important for + `haddock-project` command and in the future might will be useful for hackage + support of sublibraries. See + https://github.com/haskell/cabal/pull/9821#discussion_r1548557115. + +### Other changes + +- Add support for building profiled dynamic way [#4816](https://github.com/haskell/cabal/issues/4816) [#9900](https://github.com/haskell/cabal/pull/9900) + + + New options for `cabal.project` and `./Setup` interface: + + * `profiling-shared`: Enable building profiling dynamic way + * Passing `--enable-profiling` and `--enable-executable-dynamic` builds + profiled dynamic executables. + + Support for using `profiling-shared` is guarded behind a constraint + which ensures you are using `Cabal >= 3.13`. + + In the cabal file: + + * `ghc-prof-shared-options`, for passing options when building in + profiling dynamic way + +- Fix interaction of `--*-shared` and `--*-executable-dynamic` options. [#10050](https://github.com/haskell/cabal/issues/10050) [#9900](https://github.com/haskell/cabal/pull/9900) + + If you explicitly request `--disable-shared` it should disable the building of + a shared library and override any automatic ways this option is turned on. + + Passing `--enable-executable-dynamic` turns on `--enable-shared` if the option is + not specified explicitly. + + Before this patch, writing `--disable-shared` on its own would not disable the building of shared libraries. Writing `--disable-shared` and `--disable-executable-dynamic` would disable shared library + creation (despite `--disable-executable-dynamic` being the default). + + Now: + + * If you specify `--enable-shared` then shared objects are built. + * If you specify `--disabled-shared` then shared objects are not built. + * If you don't explicitly specify whether you want to build shared libraries then + * `--enable-executable-dynamic` will automatically turn on building shared libraries + * `--enable-executable-dynamic --enable-profiling` will automatically turn on building + shared profiling libraries (if supported by your compiler). + +- Working directory support for `Cabal` [#9702](https://github.com/haskell/cabal/issues/9702) [#9718](https://github.com/haskell/cabal/pull/9718) + + The `Cabal` library is now able to handle a passed-in working directory, instead + of always relying on the current working directory of the parent process. + + In order to achieve this, the `SymbolicPath` abstraction was fleshed out, and + all fields of `PackageDescription` that, if relative, should be interpreted + with respect to e.g. the package root, use `SymbolicPath` instead of `FilePath`. + + This means that many library functions in `Cabal` take an extra argument of type + `Maybe (SymbolicPath CWD (Dir "Package"))`, which is an optional (relative or + absolute) path to the package root (if relative, relative to the current working + directory). In addition, many functions that used to manipulate `FilePath`s now + manipulate `SymbolicPath`s, require explicit conversion using e.g. `getSymbolicPath`. + + To illustrate with file searching, the `Cabal` library defines: + + ```haskell + findFileCwd + :: forall dir1 dir2 file + . Verbosity + -> Maybe (SymbolicPath CWD (Dir dir1)) + + -> [SymbolicPath dir1 (Dir dir2)] + + -> RelativePath dir2 File + + -> IO (SymbolicPath dir1 File) + ``` + + See Note [Symbolic paths] in `Distribution.Utils.Path` for further information + on the design of this API. + +- `curl` transport now supports Basic authentication [#10089](https://github.com/haskell/cabal/pull/10089) + + - The `curl` HTTP transport previously only supported the HTTP Digest + authentication scheme. Basic authentication is now supported + when using HTTPS; Curl will use the scheme offered by the server. + The `wget` transport already supports HTTPS. + +- Enhance error detection for cabal root project files, including broken symlinks [#9937](https://github.com/haskell/cabal/issues/9937) [#10103](https://github.com/haskell/cabal/pull/10103) + + - Added proper detection and reporting for issues with cabal root project files. Previously, these files were silently ignored if they were broken symlinks. Now, `cabal` will exit + with an error in such case. + +- Let cabal init remember chosen language within current session [#10096](https://github.com/haskell/cabal/issues/10096) [#10115](https://github.com/haskell/cabal/pull/10115) + + When `cabal init` asks for a language, the last choice made will be used as the new default for the current prompt. + +- Filter out `-dinitial-unique` and `-dunique-increment` from package hash [#10122](https://github.com/haskell/cabal/pull/10122) + + `-dinitial-unique` and `-dunique-increment` are now filtered out when computing the + store hash of a package. + + These options shouldn't affect the output of the package and hence + shouldn't affect the store hash of a package. + +- Warn about `git://` protocol [#10261](https://github.com/haskell/cabal/pull/10261) + + `cabal check` will warn about the insecure (and no longer supported by GitHub or Gitlab, among others) `git://` protocol in `source-repository`. + + See [Git Book](https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols#_the_cons_4) + for an explanation. + +- Enable recompilation avoidance during Haddock generation [#9175](https://github.com/haskell/cabal/issues/9175) [#9177](https://github.com/haskell/cabal/pull/9177) + + * Haddock no longer writes compilation files by default, so we do not need to + pass tmp dirs for `-hidir`, `-stubdir`, and `-odir` via `--optghc`. Indeed, we + do not *want* to do so, since it results in recompilation for every invocation + of Haddock via Cabal. We now stop this from happening for Haddock versions + 2.28 and greater, since that is when Hi Haddock was introduced. + + * We no longer define the `__HADDOCK_VERSION__` macro when invoking GHC through + Haddock, since doing so essentially guarantees recompilation during + documentation generation. We audited all uses of `__HADDOCK_VERSION__` in + hackage, ensuring there was a reasonable path forward to migrate away from + using `__HADDOCK_VERSION__` for each, while generating the same documentation + as it did before. + If you are a user of `__HADDOCK_VERSION__`, please take a look at the + discussion in https://github.com/haskell/cabal/pull/9177 and reach out to us + if your use case is not covered. + + * Rename the `--haddock-lib` flag to `--haddock-resources-dir` (and + `haddock-lib:` cabal.project field to `haddock-resources-dir:`), and add this + flag to the users guide since it was missing an entry. + + * `documentation: true` or `--enable-documentation` now implies `-haddock` for + GHC. + +- Redefine `build-type: Configure` in terms of `Hooks` [#9969](https://github.com/haskell/cabal/pull/9969) + + The `build-type: Configure` is now implemented in terms of `build-type: Hooks` + rather than in terms of `build-type: Custom`. This moves the `Configure` + build-type away from the `Custom` issues. Eventually, `build-type: Hooks` will + no longer imply packages are built in legacy-fallback mode. When that + happens, `Configure` will also stop implying `legacy-fallback`. + + The observable aspect of this change is `runConfigureScript` now having a + different type, and `autoconfSetupHooks` being exposed from `Distribution.Simple`. + The former is motivated by internal implementation details, while the latter + provides the `SetupHooks` value for the `Configure` build type, which can be + consumed by other `Hooks` clients (e.g. eventually HLS). + +- Bug fix - Don't pass `--coverage-for` for non-dependency libs of testsuite [#10046](https://github.com/haskell/cabal/issues/10046) [#10250](https://github.com/haskell/cabal/pull/10250) + +- Added `--all` and `--haddock-all` switches to `haddock-project` subcommand [#10051](https://github.com/haskell/cabal/issues/10051) [#10163](https://github.com/haskell/cabal/pull/10163) From d8b8b94a5aed29ff3ee0c876603a025d5b6a72f0 Mon Sep 17 00:00:00 2001 From: Francesco Gazzetta Date: Tue, 3 Sep 2024 14:09:57 +0200 Subject: [PATCH 02/87] Bump version numbers to 3.14 --- Cabal-QuickCheck/Cabal-QuickCheck.cabal | 6 +++--- Cabal-described/Cabal-described.cabal | 6 +++--- Cabal-hooks/Cabal-hooks.cabal | 4 ++-- Cabal-syntax/Cabal-syntax.cabal | 2 +- Cabal-tree-diff/Cabal-tree-diff.cabal | 6 +++--- Cabal/Cabal.cabal | 4 ++-- bootstrap/cabal-bootstrap-gen.cabal | 4 ++-- cabal-install-solver/cabal-install-solver.cabal | 6 +++--- cabal-install/cabal-install.cabal | 8 ++++---- cabal-testsuite/cabal-testsuite.cabal | 2 +- solver-benchmarks/solver-benchmarks.cabal | 2 +- 11 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Cabal-QuickCheck/Cabal-QuickCheck.cabal b/Cabal-QuickCheck/Cabal-QuickCheck.cabal index 37c0f88fc4e..86c6f301935 100644 --- a/Cabal-QuickCheck/Cabal-QuickCheck.cabal +++ b/Cabal-QuickCheck/Cabal-QuickCheck.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: Cabal-QuickCheck -version: 3.13.0.0 +version: 3.14.0.0 synopsis: QuickCheck instances for types in Cabal category: Testing build-type: Simple @@ -14,8 +14,8 @@ library build-depends: , base , bytestring - , Cabal ^>=3.13.0.0 - , Cabal-syntax ^>=3.13.0.0 + , Cabal ^>=3.14.0.0 + , Cabal-syntax ^>=3.14.0.0 , QuickCheck ^>=2.13.2 || ^>=2.14 exposed-modules: diff --git a/Cabal-described/Cabal-described.cabal b/Cabal-described/Cabal-described.cabal index 86b516d94ef..363a8b1e7b9 100644 --- a/Cabal-described/Cabal-described.cabal +++ b/Cabal-described/Cabal-described.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: Cabal-described -version: 3.13.0.0 +version: 3.14.0.0 synopsis: Described functionality for types in Cabal category: Testing, Parsec description: Provides rere bindings @@ -12,8 +12,8 @@ library ghc-options: -Wall build-depends: , base - , Cabal ^>=3.13.0.0 - , Cabal-syntax ^>=3.13.0.0 + , Cabal ^>=3.14.0.0 + , Cabal-syntax ^>=3.14.0.0 , containers , pretty , QuickCheck diff --git a/Cabal-hooks/Cabal-hooks.cabal b/Cabal-hooks/Cabal-hooks.cabal index db309369330..c089b84aba3 100644 --- a/Cabal-hooks/Cabal-hooks.cabal +++ b/Cabal-hooks/Cabal-hooks.cabal @@ -27,8 +27,8 @@ library hs-source-dirs: src build-depends: - Cabal-syntax >= 3.13 && < 3.15, - Cabal >= 3.13 && < 3.15, + Cabal-syntax >= 3.14 && < 3.15, + Cabal >= 3.14 && < 3.15, base >= 4.13 && < 5, containers >= 0.5.0.0 && < 0.8, transformers >= 0.5.6.0 && < 0.7 diff --git a/Cabal-syntax/Cabal-syntax.cabal b/Cabal-syntax/Cabal-syntax.cabal index 1bc8bcabeb2..8583b939f7b 100644 --- a/Cabal-syntax/Cabal-syntax.cabal +++ b/Cabal-syntax/Cabal-syntax.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: Cabal-syntax -version: 3.13.0.0 +version: 3.14.0.0 copyright: 2003-2024, Cabal Development Team (see AUTHORS file) license: BSD-3-Clause license-file: LICENSE diff --git a/Cabal-tree-diff/Cabal-tree-diff.cabal b/Cabal-tree-diff/Cabal-tree-diff.cabal index a6f65532b1c..71b3f3695ad 100644 --- a/Cabal-tree-diff/Cabal-tree-diff.cabal +++ b/Cabal-tree-diff/Cabal-tree-diff.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: Cabal-tree-diff -version: 3.13.0.0 +version: 3.14.0.0 synopsis: QuickCheck instances for types in Cabal category: Testing description: Provides tree-diff ToExpr instances for some types in Cabal @@ -11,8 +11,8 @@ library ghc-options: -Wall build-depends: , base - , Cabal-syntax ^>=3.13.0.0 - , Cabal ^>=3.13.0.0 + , Cabal-syntax ^>=3.14.0.0 + , Cabal ^>=3.14.0.0 , tree-diff ^>=0.1 || ^>=0.2 || ^>=0.3 exposed-modules: Data.TreeDiff.Instances.Cabal diff --git a/Cabal/Cabal.cabal b/Cabal/Cabal.cabal index 14e7050c5db..42b9ed1d48a 100644 --- a/Cabal/Cabal.cabal +++ b/Cabal/Cabal.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: Cabal -version: 3.13.0.0 +version: 3.14.0.0 copyright: 2003-2024, Cabal Development Team (see AUTHORS file) license: BSD-3-Clause license-file: LICENSE @@ -34,7 +34,7 @@ library hs-source-dirs: src build-depends: - Cabal-syntax ^>= 3.13, + Cabal-syntax ^>= 3.14, array >= 0.4.0.1 && < 0.6, base >= 4.13 && < 5, bytestring >= 0.10.0.0 && < 0.13, diff --git a/bootstrap/cabal-bootstrap-gen.cabal b/bootstrap/cabal-bootstrap-gen.cabal index 0b73a1de23e..e534a05fa6c 100644 --- a/bootstrap/cabal-bootstrap-gen.cabal +++ b/bootstrap/cabal-bootstrap-gen.cabal @@ -11,8 +11,8 @@ executable cabal-bootstrap-gen , aeson ^>=1.5.2.0 || ^>=2.0.3.0 || ^>=2.1.0.0 , base ^>=4.12.0.0 || ^>=4.13.0.0 || ^>=4.14.0.0 || ^>=4.15.0.0 || ^>=4.16.0.0 || ^>=4.17.0.0 || ^>=4.18.0.0 , bytestring ^>=0.10.8.2 || ^>=0.11.0.0 - , Cabal ^>=3.4.1.0 || ^>=3.6.3.0 || ^>=3.10.1.0 || ^>=3.12.1.0 - , Cabal-syntax ^>=3.8.1.0 || ^>=3.10.1.0 || ^>=3.12.1.0 + , Cabal ^>=3.12.1.0 || ^>=3.14.0.0 + , Cabal-syntax ^>=3.12.1.0 || ^>=3.14.0.0 -- For the release process, we need the last *two* Cabal-syntax -- versions here: one to make CI green when release Cabal-syntax is -- not yet on Hackage and we are bumping versions. The second for diff --git a/cabal-install-solver/cabal-install-solver.cabal b/cabal-install-solver/cabal-install-solver.cabal index 2cb276e910a..8a71e7c7881 100644 --- a/cabal-install-solver/cabal-install-solver.cabal +++ b/cabal-install-solver/cabal-install-solver.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: cabal-install-solver -version: 3.13.0.0 +version: 3.14.0.0 synopsis: The solver component of cabal-install description: The solver component used in the cabal-install command-line program. @@ -101,8 +101,8 @@ library , array >=0.4 && <0.6 , base >=4.13 && <4.21 , bytestring >=0.10.6.0 && <0.13 - , Cabal ^>=3.13 - , Cabal-syntax ^>=3.13 + , Cabal ^>=3.14 + , Cabal-syntax ^>=3.14 , containers >=0.5.6.2 && <0.8 , edit-distance ^>= 0.2.2 , directory >= 1.3.7.0 && < 1.4 diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index db6d1452ae3..300a8d8d8aa 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -1,7 +1,7 @@ Cabal-Version: 3.0 Name: cabal-install -Version: 3.13.0.0 +Version: 3.14.0.0 Synopsis: The command-line interface for Cabal and Hackage. Description: The \'cabal\' command-line program simplifies the process of managing @@ -55,13 +55,13 @@ common base-dep build-depends: base >=4.13 && <4.21 common cabal-dep - build-depends: Cabal ^>=3.13 + build-depends: Cabal ^>=3.14 common cabal-syntax-dep - build-depends: Cabal-syntax ^>=3.13 + build-depends: Cabal-syntax ^>=3.14 common cabal-install-solver-dep - build-depends: cabal-install-solver ^>=3.13 + build-depends: cabal-install-solver ^>=3.14 library import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep diff --git a/cabal-testsuite/cabal-testsuite.cabal b/cabal-testsuite/cabal-testsuite.cabal index 479b372b8ca..8cbd1e7657c 100644 --- a/cabal-testsuite/cabal-testsuite.cabal +++ b/cabal-testsuite/cabal-testsuite.cabal @@ -28,7 +28,7 @@ common shared build-depends: , base >= 4.11 && < 4.21 -- this needs to match the in-tree lib:Cabal version - , Cabal ^>= 3.13.0.0 + , Cabal ^>= 3.14.0.0 ghc-options: -Wall diff --git a/solver-benchmarks/solver-benchmarks.cabal b/solver-benchmarks/solver-benchmarks.cabal index 42ebd616f9a..bb92f0c6329 100644 --- a/solver-benchmarks/solver-benchmarks.cabal +++ b/solver-benchmarks/solver-benchmarks.cabal @@ -31,7 +31,7 @@ library base, bytestring, containers, - Cabal-syntax ^>= 3.13, + Cabal-syntax ^>= 3.14, directory, filepath, optparse-applicative, From a137bd22a0a05b79a3fed653aec6cf69e4900c0c Mon Sep 17 00:00:00 2001 From: Francesco Gazzetta Date: Thu, 5 Sep 2024 20:55:28 +0200 Subject: [PATCH 03/87] Update bootstrap jsons for Cabal 3.14 --- bootstrap/linux-9.0.2.json | 62 ++++++++++++++++----------------- bootstrap/linux-9.2.8.json | 70 +++++++++++++++++++------------------- bootstrap/linux-9.4.8.json | 70 +++++++++++++++++++------------------- bootstrap/linux-9.6.4.json | 55 +++++++++++++++--------------- bootstrap/linux-9.8.2.json | 55 +++++++++++++++--------------- cabal.bootstrap.project | 2 +- 6 files changed, 156 insertions(+), 158 deletions(-) diff --git a/bootstrap/linux-9.0.2.json b/bootstrap/linux-9.0.2.json index d260767f667..b407f6a317c 100644 --- a/bootstrap/linux-9.0.2.json +++ b/bootstrap/linux-9.0.2.json @@ -172,17 +172,17 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { - "cabal_sha256": "2a9393de33f18415fb8f4826957a87a94ffe8840ca8472a9b69dca6de45aca03", + "cabal_sha256": "e16e2fd54934028fb21665bc0045f6133487ff77f95a37643d14bfdf339cbaff", "component": "lib:process", "flags": [], "package": "process", - "revision": 1, + "revision": 0, "source": "hackage", - "src_sha256": "cefda221c3009fa2316b5cf148215cb340dad7eb8503f22e49e33722559df99a", - "version": "1.6.20.0" + "src_sha256": "fa06e25ce7f59205a8f41a449654f6d1b4f79d3959193006cfbc34f4c4bc68fb", + "version": "1.6.22.0" }, { "cabal_sha256": null, @@ -192,7 +192,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { "cabal_sha256": null, @@ -217,7 +217,7 @@ "version": "0.68.10" }, { - "cabal_sha256": "25440c1bbd5772fdbbeec068f20138121131e1a56453db0adc113dcdf9044105", + "cabal_sha256": "17b834d2b75df8a8aef05de523280f613bb9c9aa9c31f269d5b90c1431a3749b", "component": "lib:network", "flags": [ "-devel" @@ -225,8 +225,8 @@ "package": "network", "revision": 0, "source": "hackage", - "src_sha256": "c45696744dc437d93a56871a3dd869965b7b50eda3fe3c1a90a35e2fbb9cb9ca", - "version": "3.2.0.0" + "src_sha256": "efb04947946f52cccba802c2a8fc2f4259f0bdfd0bce95094c84e71583647f0c", + "version": "3.2.2.0" }, { "cabal_sha256": "129a59ba3ccfcd06192fd6da899e2711ae276a466915a047bd6727e4a0321d2e", @@ -274,7 +274,7 @@ "version": "0.9.2" }, { - "cabal_sha256": "82503a1ef0a625c210e118f2785c4138f8502aacbbfd4e5d987f6baffbb87115", + "cabal_sha256": "573f3ab242f75465a0d67ce9d84202650a1606575e6dbd6d31ffcf4767a9a379", "component": "lib:hashable", "flags": [ "-arch-native", @@ -284,17 +284,17 @@ "package": "hashable", "revision": 0, "source": "hackage", - "src_sha256": "34652a7a1d2fc9e3d764b150bd35bcd2220761c1d4c6b446b0cfac5ad5b778cb", - "version": "1.4.6.0" + "src_sha256": "3baee4c9027a08830d148ec524cbc0471de645e1e8426d46780ef2758df0e8da", + "version": "1.4.7.0" }, { - "cabal_sha256": "9d5d9e605f52958d099e13a8b8f30ee56cb137c9192996245e3c533adb682cf8", + "cabal_sha256": "cf9e6afba8e01830ca0d32a12b98d481cf389688762c80d1870a1db2061ebf35", "component": "lib:async", "flags": [ "-bench" ], "package": "async", - "revision": 1, + "revision": 2, "source": "hackage", "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", "version": "2.2.5" @@ -362,17 +362,17 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { - "cabal_sha256": "200d756a7b3bab7ca2bac6eb50ed8252f26de77ac8def490a3ad743f2933acbd", + "cabal_sha256": "acb64f2af52d81b0bb92c266f11d43def726a7a7b74a2c23d219e160b54edec7", "component": "lib:cryptohash-sha256", "flags": [ "-exe", "+use-cbits" ], "package": "cryptohash-sha256", - "revision": 4, + "revision": 5, "source": "hackage", "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6", "version": "0.11.102.1" @@ -417,58 +417,58 @@ "version": "0.1.2" }, { - "cabal_sha256": "4d4186bb8d711435765253c7dc076c44a1d52896300689507ba135706ab35866", + "cabal_sha256": "7699e7ae9bf74d056a62f384ceef8dfb2aa660f3f7c8016e9703f3b995e5e030", "component": "lib:os-string", "flags": [], "package": "os-string", "revision": 0, "source": "hackage", - "src_sha256": "f6b388b9f9002622901d3f71437b98f95f54fbf7fe10490d319cb801c2a061ea", - "version": "2.0.3" + "src_sha256": "22fcc7d5fc66676b5dfc57b714d2caf93cce2d5a79d242168352f9eb0fe2f18a", + "version": "2.0.6" }, { - "cabal_sha256": "b853b4296cb23386feda17dc0d9065af6709d22d684ec734aab65403d59ed547", + "cabal_sha256": "e9f151d9999be8953443e730524b2792e9c0a4fb5b1463097fa1a8230870fd8a", "component": "lib:tar-internal", "flags": [], "package": "tar", - "revision": 0, + "revision": 1, "source": "hackage", "src_sha256": "50bb660feec8a524416d6934251b996eaa7e39d49ae107ad505ab700d43f6814", "version": "0.6.3.0" }, { - "cabal_sha256": "b853b4296cb23386feda17dc0d9065af6709d22d684ec734aab65403d59ed547", + "cabal_sha256": "e9f151d9999be8953443e730524b2792e9c0a4fb5b1463097fa1a8230870fd8a", "component": "lib:tar", "flags": [], "package": "tar", - "revision": 0, + "revision": 1, "source": "hackage", "src_sha256": "50bb660feec8a524416d6934251b996eaa7e39d49ae107ad505ab700d43f6814", "version": "0.6.3.0" }, { - "cabal_sha256": "d6696f2b55ab4a50b8de57947abca308604eb7cf8287c40bf69cfa26133e24d3", + "cabal_sha256": "bae1c5a6092d65c5e763246f91e04fef3f43e37cb055130725c9a973c88a250f", "component": "lib:zlib", "flags": [ "-bundled-c-zlib", "+non-blocking-ffi", - "+pkg-config" + "-pkg-config" ], "package": "zlib", - "revision": 0, + "revision": 1, "source": "hackage", "src_sha256": "6edd38b6b81df8d274952aa85affa6968ae86b2231e1d429ce8bc9083e6a55bc", "version": "0.7.1.0" }, { - "cabal_sha256": "8ff70524314f9ad706f8e5051d7150ee44cb82170147879b245bdab279604b16", + "cabal_sha256": "a7311a70ce2cc820ee430c389f57f82a082f148230b37526c34eac72b7b3ff34", "component": "lib:hackage-security", "flags": [ "+cabal-syntax", "+lukko" ], "package": "hackage-security", - "revision": 1, + "revision": 4, "source": "hackage", "src_sha256": "2e4261576b3e11b9f5175392947f56a638cc1a3584b8acbb962b809d7c69db69", "version": "0.6.2.6" @@ -546,7 +546,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { "cabal_sha256": null, @@ -559,7 +559,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", diff --git a/bootstrap/linux-9.2.8.json b/bootstrap/linux-9.2.8.json index 8a19bb40027..a74b9bcc3fa 100644 --- a/bootstrap/linux-9.2.8.json +++ b/bootstrap/linux-9.2.8.json @@ -79,26 +79,26 @@ ], "dependencies": [ { - "cabal_sha256": "4d4186bb8d711435765253c7dc076c44a1d52896300689507ba135706ab35866", + "cabal_sha256": "7699e7ae9bf74d056a62f384ceef8dfb2aa660f3f7c8016e9703f3b995e5e030", "component": "lib:os-string", "flags": [], "package": "os-string", "revision": 0, "source": "hackage", - "src_sha256": "f6b388b9f9002622901d3f71437b98f95f54fbf7fe10490d319cb801c2a061ea", - "version": "2.0.3" + "src_sha256": "22fcc7d5fc66676b5dfc57b714d2caf93cce2d5a79d242168352f9eb0fe2f18a", + "version": "2.0.6" }, { - "cabal_sha256": "8af7a843cba7eddc8d44ae94002b766ee8c23cbcd3ecdb2cc79ee6e0a694419a", + "cabal_sha256": "0c64bc9a4f5946c86a8f0527bf40c8ba51e2c02d36eea0e20ea558c8d94166e8", "component": "lib:filepath", "flags": [ "-cpphs" ], "package": "filepath", - "revision": 1, + "revision": 0, "source": "hackage", - "src_sha256": "d2606db4fa8517932a2d9ea6415c365da4d1794afcb264a5b3c10110123978a7", - "version": "1.5.2.0" + "src_sha256": "d807ec44fe53de7c7e0eeb41c9ee9185a09163821cf50549d73d875197931a5a", + "version": "1.5.3.0" }, { "cabal_sha256": "3f702a252a313a7bcb56e3908a14e7f9f1b40e41b7bdc8ae8a9605a1a8686f06", @@ -142,17 +142,17 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { - "cabal_sha256": "2a9393de33f18415fb8f4826957a87a94ffe8840ca8472a9b69dca6de45aca03", + "cabal_sha256": "e16e2fd54934028fb21665bc0045f6133487ff77f95a37643d14bfdf339cbaff", "component": "lib:process", "flags": [], "package": "process", - "revision": 1, + "revision": 0, "source": "hackage", - "src_sha256": "cefda221c3009fa2316b5cf148215cb340dad7eb8503f22e49e33722559df99a", - "version": "1.6.20.0" + "src_sha256": "fa06e25ce7f59205a8f41a449654f6d1b4f79d3959193006cfbc34f4c4bc68fb", + "version": "1.6.22.0" }, { "cabal_sha256": null, @@ -162,7 +162,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { "cabal_sha256": null, @@ -187,7 +187,7 @@ "version": "0.68.10" }, { - "cabal_sha256": "25440c1bbd5772fdbbeec068f20138121131e1a56453db0adc113dcdf9044105", + "cabal_sha256": "17b834d2b75df8a8aef05de523280f613bb9c9aa9c31f269d5b90c1431a3749b", "component": "lib:network", "flags": [ "-devel" @@ -195,8 +195,8 @@ "package": "network", "revision": 0, "source": "hackage", - "src_sha256": "c45696744dc437d93a56871a3dd869965b7b50eda3fe3c1a90a35e2fbb9cb9ca", - "version": "3.2.0.0" + "src_sha256": "efb04947946f52cccba802c2a8fc2f4259f0bdfd0bce95094c84e71583647f0c", + "version": "3.2.2.0" }, { "cabal_sha256": "129a59ba3ccfcd06192fd6da899e2711ae276a466915a047bd6727e4a0321d2e", @@ -244,7 +244,7 @@ "version": "0.1.0.1" }, { - "cabal_sha256": "82503a1ef0a625c210e118f2785c4138f8502aacbbfd4e5d987f6baffbb87115", + "cabal_sha256": "573f3ab242f75465a0d67ce9d84202650a1606575e6dbd6d31ffcf4767a9a379", "component": "lib:hashable", "flags": [ "-arch-native", @@ -254,17 +254,17 @@ "package": "hashable", "revision": 0, "source": "hackage", - "src_sha256": "34652a7a1d2fc9e3d764b150bd35bcd2220761c1d4c6b446b0cfac5ad5b778cb", - "version": "1.4.6.0" + "src_sha256": "3baee4c9027a08830d148ec524cbc0471de645e1e8426d46780ef2758df0e8da", + "version": "1.4.7.0" }, { - "cabal_sha256": "9d5d9e605f52958d099e13a8b8f30ee56cb137c9192996245e3c533adb682cf8", + "cabal_sha256": "cf9e6afba8e01830ca0d32a12b98d481cf389688762c80d1870a1db2061ebf35", "component": "lib:async", "flags": [ "-bench" ], "package": "async", - "revision": 1, + "revision": 2, "source": "hackage", "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", "version": "2.2.5" @@ -332,17 +332,17 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { - "cabal_sha256": "200d756a7b3bab7ca2bac6eb50ed8252f26de77ac8def490a3ad743f2933acbd", + "cabal_sha256": "acb64f2af52d81b0bb92c266f11d43def726a7a7b74a2c23d219e160b54edec7", "component": "lib:cryptohash-sha256", "flags": [ "-exe", "+use-cbits" ], "package": "cryptohash-sha256", - "revision": 4, + "revision": 5, "source": "hackage", "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6", "version": "0.11.102.1" @@ -387,48 +387,48 @@ "version": "0.1.2" }, { - "cabal_sha256": "b853b4296cb23386feda17dc0d9065af6709d22d684ec734aab65403d59ed547", + "cabal_sha256": "e9f151d9999be8953443e730524b2792e9c0a4fb5b1463097fa1a8230870fd8a", "component": "lib:tar-internal", "flags": [], "package": "tar", - "revision": 0, + "revision": 1, "source": "hackage", "src_sha256": "50bb660feec8a524416d6934251b996eaa7e39d49ae107ad505ab700d43f6814", "version": "0.6.3.0" }, { - "cabal_sha256": "b853b4296cb23386feda17dc0d9065af6709d22d684ec734aab65403d59ed547", + "cabal_sha256": "e9f151d9999be8953443e730524b2792e9c0a4fb5b1463097fa1a8230870fd8a", "component": "lib:tar", "flags": [], "package": "tar", - "revision": 0, + "revision": 1, "source": "hackage", "src_sha256": "50bb660feec8a524416d6934251b996eaa7e39d49ae107ad505ab700d43f6814", "version": "0.6.3.0" }, { - "cabal_sha256": "d6696f2b55ab4a50b8de57947abca308604eb7cf8287c40bf69cfa26133e24d3", + "cabal_sha256": "bae1c5a6092d65c5e763246f91e04fef3f43e37cb055130725c9a973c88a250f", "component": "lib:zlib", "flags": [ "-bundled-c-zlib", "+non-blocking-ffi", - "+pkg-config" + "-pkg-config" ], "package": "zlib", - "revision": 0, + "revision": 1, "source": "hackage", "src_sha256": "6edd38b6b81df8d274952aa85affa6968ae86b2231e1d429ce8bc9083e6a55bc", "version": "0.7.1.0" }, { - "cabal_sha256": "8ff70524314f9ad706f8e5051d7150ee44cb82170147879b245bdab279604b16", + "cabal_sha256": "a7311a70ce2cc820ee430c389f57f82a082f148230b37526c34eac72b7b3ff34", "component": "lib:hackage-security", "flags": [ "+cabal-syntax", "+lukko" ], "package": "hackage-security", - "revision": 1, + "revision": 4, "source": "hackage", "src_sha256": "2e4261576b3e11b9f5175392947f56a638cc1a3584b8acbb962b809d7c69db69", "version": "0.6.2.6" @@ -506,7 +506,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { "cabal_sha256": null, @@ -519,7 +519,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", diff --git a/bootstrap/linux-9.4.8.json b/bootstrap/linux-9.4.8.json index aa97cbabe35..7fe3e31ec28 100644 --- a/bootstrap/linux-9.4.8.json +++ b/bootstrap/linux-9.4.8.json @@ -79,26 +79,26 @@ ], "dependencies": [ { - "cabal_sha256": "4d4186bb8d711435765253c7dc076c44a1d52896300689507ba135706ab35866", + "cabal_sha256": "7699e7ae9bf74d056a62f384ceef8dfb2aa660f3f7c8016e9703f3b995e5e030", "component": "lib:os-string", "flags": [], "package": "os-string", "revision": 0, "source": "hackage", - "src_sha256": "f6b388b9f9002622901d3f71437b98f95f54fbf7fe10490d319cb801c2a061ea", - "version": "2.0.3" + "src_sha256": "22fcc7d5fc66676b5dfc57b714d2caf93cce2d5a79d242168352f9eb0fe2f18a", + "version": "2.0.6" }, { - "cabal_sha256": "8af7a843cba7eddc8d44ae94002b766ee8c23cbcd3ecdb2cc79ee6e0a694419a", + "cabal_sha256": "0c64bc9a4f5946c86a8f0527bf40c8ba51e2c02d36eea0e20ea558c8d94166e8", "component": "lib:filepath", "flags": [ "-cpphs" ], "package": "filepath", - "revision": 1, + "revision": 0, "source": "hackage", - "src_sha256": "d2606db4fa8517932a2d9ea6415c365da4d1794afcb264a5b3c10110123978a7", - "version": "1.5.2.0" + "src_sha256": "d807ec44fe53de7c7e0eeb41c9ee9185a09163821cf50549d73d875197931a5a", + "version": "1.5.3.0" }, { "cabal_sha256": "3f702a252a313a7bcb56e3908a14e7f9f1b40e41b7bdc8ae8a9605a1a8686f06", @@ -142,17 +142,17 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { - "cabal_sha256": "2a9393de33f18415fb8f4826957a87a94ffe8840ca8472a9b69dca6de45aca03", + "cabal_sha256": "e16e2fd54934028fb21665bc0045f6133487ff77f95a37643d14bfdf339cbaff", "component": "lib:process", "flags": [], "package": "process", - "revision": 1, + "revision": 0, "source": "hackage", - "src_sha256": "cefda221c3009fa2316b5cf148215cb340dad7eb8503f22e49e33722559df99a", - "version": "1.6.20.0" + "src_sha256": "fa06e25ce7f59205a8f41a449654f6d1b4f79d3959193006cfbc34f4c4bc68fb", + "version": "1.6.22.0" }, { "cabal_sha256": null, @@ -162,7 +162,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { "cabal_sha256": null, @@ -187,7 +187,7 @@ "version": "0.68.10" }, { - "cabal_sha256": "25440c1bbd5772fdbbeec068f20138121131e1a56453db0adc113dcdf9044105", + "cabal_sha256": "17b834d2b75df8a8aef05de523280f613bb9c9aa9c31f269d5b90c1431a3749b", "component": "lib:network", "flags": [ "-devel" @@ -195,8 +195,8 @@ "package": "network", "revision": 0, "source": "hackage", - "src_sha256": "c45696744dc437d93a56871a3dd869965b7b50eda3fe3c1a90a35e2fbb9cb9ca", - "version": "3.2.0.0" + "src_sha256": "efb04947946f52cccba802c2a8fc2f4259f0bdfd0bce95094c84e71583647f0c", + "version": "3.2.2.0" }, { "cabal_sha256": "129a59ba3ccfcd06192fd6da899e2711ae276a466915a047bd6727e4a0321d2e", @@ -234,7 +234,7 @@ "version": "4000.4.1" }, { - "cabal_sha256": "82503a1ef0a625c210e118f2785c4138f8502aacbbfd4e5d987f6baffbb87115", + "cabal_sha256": "573f3ab242f75465a0d67ce9d84202650a1606575e6dbd6d31ffcf4767a9a379", "component": "lib:hashable", "flags": [ "-arch-native", @@ -244,17 +244,17 @@ "package": "hashable", "revision": 0, "source": "hackage", - "src_sha256": "34652a7a1d2fc9e3d764b150bd35bcd2220761c1d4c6b446b0cfac5ad5b778cb", - "version": "1.4.6.0" + "src_sha256": "3baee4c9027a08830d148ec524cbc0471de645e1e8426d46780ef2758df0e8da", + "version": "1.4.7.0" }, { - "cabal_sha256": "9d5d9e605f52958d099e13a8b8f30ee56cb137c9192996245e3c533adb682cf8", + "cabal_sha256": "cf9e6afba8e01830ca0d32a12b98d481cf389688762c80d1870a1db2061ebf35", "component": "lib:async", "flags": [ "-bench" ], "package": "async", - "revision": 1, + "revision": 2, "source": "hackage", "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", "version": "2.2.5" @@ -322,17 +322,17 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { - "cabal_sha256": "200d756a7b3bab7ca2bac6eb50ed8252f26de77ac8def490a3ad743f2933acbd", + "cabal_sha256": "acb64f2af52d81b0bb92c266f11d43def726a7a7b74a2c23d219e160b54edec7", "component": "lib:cryptohash-sha256", "flags": [ "-exe", "+use-cbits" ], "package": "cryptohash-sha256", - "revision": 4, + "revision": 5, "source": "hackage", "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6", "version": "0.11.102.1" @@ -377,48 +377,48 @@ "version": "0.1.2" }, { - "cabal_sha256": "b853b4296cb23386feda17dc0d9065af6709d22d684ec734aab65403d59ed547", + "cabal_sha256": "e9f151d9999be8953443e730524b2792e9c0a4fb5b1463097fa1a8230870fd8a", "component": "lib:tar-internal", "flags": [], "package": "tar", - "revision": 0, + "revision": 1, "source": "hackage", "src_sha256": "50bb660feec8a524416d6934251b996eaa7e39d49ae107ad505ab700d43f6814", "version": "0.6.3.0" }, { - "cabal_sha256": "b853b4296cb23386feda17dc0d9065af6709d22d684ec734aab65403d59ed547", + "cabal_sha256": "e9f151d9999be8953443e730524b2792e9c0a4fb5b1463097fa1a8230870fd8a", "component": "lib:tar", "flags": [], "package": "tar", - "revision": 0, + "revision": 1, "source": "hackage", "src_sha256": "50bb660feec8a524416d6934251b996eaa7e39d49ae107ad505ab700d43f6814", "version": "0.6.3.0" }, { - "cabal_sha256": "d6696f2b55ab4a50b8de57947abca308604eb7cf8287c40bf69cfa26133e24d3", + "cabal_sha256": "bae1c5a6092d65c5e763246f91e04fef3f43e37cb055130725c9a973c88a250f", "component": "lib:zlib", "flags": [ "-bundled-c-zlib", "+non-blocking-ffi", - "+pkg-config" + "-pkg-config" ], "package": "zlib", - "revision": 0, + "revision": 1, "source": "hackage", "src_sha256": "6edd38b6b81df8d274952aa85affa6968ae86b2231e1d429ce8bc9083e6a55bc", "version": "0.7.1.0" }, { - "cabal_sha256": "8ff70524314f9ad706f8e5051d7150ee44cb82170147879b245bdab279604b16", + "cabal_sha256": "a7311a70ce2cc820ee430c389f57f82a082f148230b37526c34eac72b7b3ff34", "component": "lib:hackage-security", "flags": [ "+cabal-syntax", "+lukko" ], "package": "hackage-security", - "revision": 1, + "revision": 4, "source": "hackage", "src_sha256": "2e4261576b3e11b9f5175392947f56a638cc1a3584b8acbb962b809d7c69db69", "version": "0.6.2.6" @@ -496,7 +496,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { "cabal_sha256": null, @@ -509,7 +509,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", diff --git a/bootstrap/linux-9.6.4.json b/bootstrap/linux-9.6.4.json index c0c138d5110..b3b67ed65b0 100644 --- a/bootstrap/linux-9.6.4.json +++ b/bootstrap/linux-9.6.4.json @@ -112,7 +112,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { "cabal_sha256": null, @@ -122,7 +122,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { "cabal_sha256": null, @@ -147,7 +147,7 @@ "version": "0.68.10" }, { - "cabal_sha256": "25440c1bbd5772fdbbeec068f20138121131e1a56453db0adc113dcdf9044105", + "cabal_sha256": "17b834d2b75df8a8aef05de523280f613bb9c9aa9c31f269d5b90c1431a3749b", "component": "lib:network", "flags": [ "-devel" @@ -155,8 +155,8 @@ "package": "network", "revision": 0, "source": "hackage", - "src_sha256": "c45696744dc437d93a56871a3dd869965b7b50eda3fe3c1a90a35e2fbb9cb9ca", - "version": "3.2.0.0" + "src_sha256": "efb04947946f52cccba802c2a8fc2f4259f0bdfd0bce95094c84e71583647f0c", + "version": "3.2.2.0" }, { "cabal_sha256": "129a59ba3ccfcd06192fd6da899e2711ae276a466915a047bd6727e4a0321d2e", @@ -194,37 +194,36 @@ "version": "4000.4.1" }, { - "cabal_sha256": "4d4186bb8d711435765253c7dc076c44a1d52896300689507ba135706ab35866", + "cabal_sha256": "7699e7ae9bf74d056a62f384ceef8dfb2aa660f3f7c8016e9703f3b995e5e030", "component": "lib:os-string", "flags": [], "package": "os-string", "revision": 0, "source": "hackage", - "src_sha256": "f6b388b9f9002622901d3f71437b98f95f54fbf7fe10490d319cb801c2a061ea", - "version": "2.0.3" + "src_sha256": "22fcc7d5fc66676b5dfc57b714d2caf93cce2d5a79d242168352f9eb0fe2f18a", + "version": "2.0.6" }, { - "cabal_sha256": "82503a1ef0a625c210e118f2785c4138f8502aacbbfd4e5d987f6baffbb87115", + "cabal_sha256": "fc68b07d957ade5a0a0beadd560a8d093ceac30b2f35c85eed3bcf7889a25975", "component": "lib:hashable", "flags": [ "-arch-native", - "+integer-gmp", "-random-initial-seed" ], "package": "hashable", "revision": 0, "source": "hackage", - "src_sha256": "34652a7a1d2fc9e3d764b150bd35bcd2220761c1d4c6b446b0cfac5ad5b778cb", - "version": "1.4.6.0" + "src_sha256": "e58b3a8e18da5f6cd7e937e5fd683e500bb1f8276b3768269759119ca0cddb6a", + "version": "1.5.0.0" }, { - "cabal_sha256": "9d5d9e605f52958d099e13a8b8f30ee56cb137c9192996245e3c533adb682cf8", + "cabal_sha256": "cf9e6afba8e01830ca0d32a12b98d481cf389688762c80d1870a1db2061ebf35", "component": "lib:async", "flags": [ "-bench" ], "package": "async", - "revision": 1, + "revision": 2, "source": "hackage", "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", "version": "2.2.5" @@ -292,17 +291,17 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { - "cabal_sha256": "200d756a7b3bab7ca2bac6eb50ed8252f26de77ac8def490a3ad743f2933acbd", + "cabal_sha256": "acb64f2af52d81b0bb92c266f11d43def726a7a7b74a2c23d219e160b54edec7", "component": "lib:cryptohash-sha256", "flags": [ "-exe", "+use-cbits" ], "package": "cryptohash-sha256", - "revision": 4, + "revision": 5, "source": "hackage", "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6", "version": "0.11.102.1" @@ -347,48 +346,48 @@ "version": "0.1.2" }, { - "cabal_sha256": "b853b4296cb23386feda17dc0d9065af6709d22d684ec734aab65403d59ed547", + "cabal_sha256": "e9f151d9999be8953443e730524b2792e9c0a4fb5b1463097fa1a8230870fd8a", "component": "lib:tar-internal", "flags": [], "package": "tar", - "revision": 0, + "revision": 1, "source": "hackage", "src_sha256": "50bb660feec8a524416d6934251b996eaa7e39d49ae107ad505ab700d43f6814", "version": "0.6.3.0" }, { - "cabal_sha256": "b853b4296cb23386feda17dc0d9065af6709d22d684ec734aab65403d59ed547", + "cabal_sha256": "e9f151d9999be8953443e730524b2792e9c0a4fb5b1463097fa1a8230870fd8a", "component": "lib:tar", "flags": [], "package": "tar", - "revision": 0, + "revision": 1, "source": "hackage", "src_sha256": "50bb660feec8a524416d6934251b996eaa7e39d49ae107ad505ab700d43f6814", "version": "0.6.3.0" }, { - "cabal_sha256": "d6696f2b55ab4a50b8de57947abca308604eb7cf8287c40bf69cfa26133e24d3", + "cabal_sha256": "bae1c5a6092d65c5e763246f91e04fef3f43e37cb055130725c9a973c88a250f", "component": "lib:zlib", "flags": [ "-bundled-c-zlib", "+non-blocking-ffi", - "+pkg-config" + "-pkg-config" ], "package": "zlib", - "revision": 0, + "revision": 1, "source": "hackage", "src_sha256": "6edd38b6b81df8d274952aa85affa6968ae86b2231e1d429ce8bc9083e6a55bc", "version": "0.7.1.0" }, { - "cabal_sha256": "8ff70524314f9ad706f8e5051d7150ee44cb82170147879b245bdab279604b16", + "cabal_sha256": "a7311a70ce2cc820ee430c389f57f82a082f148230b37526c34eac72b7b3ff34", "component": "lib:hackage-security", "flags": [ "+cabal-syntax", "+lukko" ], "package": "hackage-security", - "revision": 1, + "revision": 4, "source": "hackage", "src_sha256": "2e4261576b3e11b9f5175392947f56a638cc1a3584b8acbb962b809d7c69db69", "version": "0.6.2.6" @@ -466,7 +465,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { "cabal_sha256": null, @@ -479,7 +478,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", diff --git a/bootstrap/linux-9.8.2.json b/bootstrap/linux-9.8.2.json index 638ae20adb4..3176a3e6f04 100644 --- a/bootstrap/linux-9.8.2.json +++ b/bootstrap/linux-9.8.2.json @@ -116,7 +116,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { "cabal_sha256": null, @@ -126,7 +126,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { "cabal_sha256": null, @@ -151,7 +151,7 @@ "version": "0.68.10" }, { - "cabal_sha256": "25440c1bbd5772fdbbeec068f20138121131e1a56453db0adc113dcdf9044105", + "cabal_sha256": "17b834d2b75df8a8aef05de523280f613bb9c9aa9c31f269d5b90c1431a3749b", "component": "lib:network", "flags": [ "-devel" @@ -159,8 +159,8 @@ "package": "network", "revision": 0, "source": "hackage", - "src_sha256": "c45696744dc437d93a56871a3dd869965b7b50eda3fe3c1a90a35e2fbb9cb9ca", - "version": "3.2.0.0" + "src_sha256": "efb04947946f52cccba802c2a8fc2f4259f0bdfd0bce95094c84e71583647f0c", + "version": "3.2.2.0" }, { "cabal_sha256": "129a59ba3ccfcd06192fd6da899e2711ae276a466915a047bd6727e4a0321d2e", @@ -198,37 +198,36 @@ "version": "4000.4.1" }, { - "cabal_sha256": "4d4186bb8d711435765253c7dc076c44a1d52896300689507ba135706ab35866", + "cabal_sha256": "7699e7ae9bf74d056a62f384ceef8dfb2aa660f3f7c8016e9703f3b995e5e030", "component": "lib:os-string", "flags": [], "package": "os-string", "revision": 0, "source": "hackage", - "src_sha256": "f6b388b9f9002622901d3f71437b98f95f54fbf7fe10490d319cb801c2a061ea", - "version": "2.0.3" + "src_sha256": "22fcc7d5fc66676b5dfc57b714d2caf93cce2d5a79d242168352f9eb0fe2f18a", + "version": "2.0.6" }, { - "cabal_sha256": "82503a1ef0a625c210e118f2785c4138f8502aacbbfd4e5d987f6baffbb87115", + "cabal_sha256": "fc68b07d957ade5a0a0beadd560a8d093ceac30b2f35c85eed3bcf7889a25975", "component": "lib:hashable", "flags": [ "-arch-native", - "+integer-gmp", "-random-initial-seed" ], "package": "hashable", "revision": 0, "source": "hackage", - "src_sha256": "34652a7a1d2fc9e3d764b150bd35bcd2220761c1d4c6b446b0cfac5ad5b778cb", - "version": "1.4.6.0" + "src_sha256": "e58b3a8e18da5f6cd7e937e5fd683e500bb1f8276b3768269759119ca0cddb6a", + "version": "1.5.0.0" }, { - "cabal_sha256": "9d5d9e605f52958d099e13a8b8f30ee56cb137c9192996245e3c533adb682cf8", + "cabal_sha256": "cf9e6afba8e01830ca0d32a12b98d481cf389688762c80d1870a1db2061ebf35", "component": "lib:async", "flags": [ "-bench" ], "package": "async", - "revision": 1, + "revision": 2, "source": "hackage", "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", "version": "2.2.5" @@ -296,17 +295,17 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { - "cabal_sha256": "200d756a7b3bab7ca2bac6eb50ed8252f26de77ac8def490a3ad743f2933acbd", + "cabal_sha256": "acb64f2af52d81b0bb92c266f11d43def726a7a7b74a2c23d219e160b54edec7", "component": "lib:cryptohash-sha256", "flags": [ "-exe", "+use-cbits" ], "package": "cryptohash-sha256", - "revision": 4, + "revision": 5, "source": "hackage", "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6", "version": "0.11.102.1" @@ -351,48 +350,48 @@ "version": "0.1.2" }, { - "cabal_sha256": "b853b4296cb23386feda17dc0d9065af6709d22d684ec734aab65403d59ed547", + "cabal_sha256": "e9f151d9999be8953443e730524b2792e9c0a4fb5b1463097fa1a8230870fd8a", "component": "lib:tar-internal", "flags": [], "package": "tar", - "revision": 0, + "revision": 1, "source": "hackage", "src_sha256": "50bb660feec8a524416d6934251b996eaa7e39d49ae107ad505ab700d43f6814", "version": "0.6.3.0" }, { - "cabal_sha256": "b853b4296cb23386feda17dc0d9065af6709d22d684ec734aab65403d59ed547", + "cabal_sha256": "e9f151d9999be8953443e730524b2792e9c0a4fb5b1463097fa1a8230870fd8a", "component": "lib:tar", "flags": [], "package": "tar", - "revision": 0, + "revision": 1, "source": "hackage", "src_sha256": "50bb660feec8a524416d6934251b996eaa7e39d49ae107ad505ab700d43f6814", "version": "0.6.3.0" }, { - "cabal_sha256": "d6696f2b55ab4a50b8de57947abca308604eb7cf8287c40bf69cfa26133e24d3", + "cabal_sha256": "bae1c5a6092d65c5e763246f91e04fef3f43e37cb055130725c9a973c88a250f", "component": "lib:zlib", "flags": [ "-bundled-c-zlib", "+non-blocking-ffi", - "+pkg-config" + "-pkg-config" ], "package": "zlib", - "revision": 0, + "revision": 1, "source": "hackage", "src_sha256": "6edd38b6b81df8d274952aa85affa6968ae86b2231e1d429ce8bc9083e6a55bc", "version": "0.7.1.0" }, { - "cabal_sha256": "8ff70524314f9ad706f8e5051d7150ee44cb82170147879b245bdab279604b16", + "cabal_sha256": "a7311a70ce2cc820ee430c389f57f82a082f148230b37526c34eac72b7b3ff34", "component": "lib:hackage-security", "flags": [ "+cabal-syntax", "+lukko" ], "package": "hackage-security", - "revision": 1, + "revision": 4, "source": "hackage", "src_sha256": "2e4261576b3e11b9f5175392947f56a638cc1a3584b8acbb962b809d7c69db69", "version": "0.6.2.6" @@ -460,7 +459,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { "cabal_sha256": null, @@ -473,7 +472,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "3.13.0.0" + "version": "3.14.0.0" }, { "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", diff --git a/cabal.bootstrap.project b/cabal.bootstrap.project index 00e676c24ad..ba6bd508966 100644 --- a/cabal.bootstrap.project +++ b/cabal.bootstrap.project @@ -14,4 +14,4 @@ benchmarks: False constraints: hashable -arch-native -index-state: hackage.haskell.org 2024-07-15T21:05:18Z +index-state: hackage.haskell.org 2024-09-05T17:19:45Z From b87c2b3c6b52f675501ff8164f8f88d258739926 Mon Sep 17 00:00:00 2001 From: Francesco Gazzetta Date: Thu, 5 Sep 2024 20:59:59 +0200 Subject: [PATCH 04/87] Update release index-state for Cabal 3.14 It includes a compatible hackage-security --- cabal.release.project | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cabal.release.project b/cabal.release.project index ee061449efc..bb67251661f 100644 --- a/cabal.release.project +++ b/cabal.release.project @@ -5,4 +5,4 @@ import: project-cabal/pkgs/tests.config constraints: hashable -arch-native -index-state: hackage.haskell.org 2024-07-15T21:05:18Z +index-state: hackage.haskell.org 2024-09-05T17:19:45Z From 1abdc3835ce115ad5fdbe694c9167a66dc8bab09 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Sep 2024 01:17:57 +0000 Subject: [PATCH 05/87] Bump actions/cache from 3 to 4 (#9646) Bumps [actions/cache](https://github.com/actions/cache) from 3 to 4. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: brandon s allbery kf8nh Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> (cherry picked from commit 3a6f73ed7286ff69702bb83233a7b328f39c966b) --- .github/workflows/bootstrap.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/bootstrap.yml b/.github/workflows/bootstrap.yml index e74d355360f..5a4ed59dfc5 100644 --- a/.github/workflows/bootstrap.yml +++ b/.github/workflows/bootstrap.yml @@ -43,7 +43,7 @@ jobs: rm -rf ~/.config/cabal rm -rf ~/.cache/cabal - - uses: actions/cache@v3 + - uses: actions/cache@v4 name: Cache the downloads id: bootstrap-cache with: From 93db940a68a07fc95e19f08e25c71cf9a2991897 Mon Sep 17 00:00:00 2001 From: ffaf1 Date: Sat, 14 Sep 2024 19:51:32 +0200 Subject: [PATCH 06/87] Changelogs 3.14 (#10338) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bumpo “Redefine `build-type: Configure`” importance * Move “`pkg-config` error message” entry to “Other changes” * Fix typo * cabal file → `.cabal` file * Remove #9702 from `cabal-install` changelog It is invisible to `cabal-install` user * Changelog: add OrPatterns extension * Changelog: add SPDX note * Make release notes for cabal-install 3.14 We are after all releasing cabal-install 3.14 * Fix SPDX entry We are not doing the sensible thing anymore. --- release-notes/Cabal-3.14.0.0.md | 7 ++ ...-3.16.0.0.md => cabal-install-3.14.0.0.md} | 83 ++++++------------- 2 files changed, 34 insertions(+), 56 deletions(-) rename release-notes/{cabal-install-3.16.0.0.md => cabal-install-3.14.0.0.md} (82%) diff --git a/release-notes/Cabal-3.14.0.0.md b/release-notes/Cabal-3.14.0.0.md index d27131035ff..dd1dbecd43a 100644 --- a/release-notes/Cabal-3.14.0.0.md +++ b/release-notes/Cabal-3.14.0.0.md @@ -81,6 +81,8 @@ - Add `NamedDefaults` extension (GHC proposal #409) [#9740](https://github.com/haskell/cabal/pull/9740) +- Add `OrPatterns` extension (GHC proposal #958) [#10339](https://github.com/haskell/cabal/pull/10339) + ### Other changes @@ -150,3 +152,8 @@ things (Setup configure, the package's "configure" script, or "cabal configure"). This has recently caught out even Cabal devs. Clarify these messages. [#9476](https://github.com/haskell/cabal/pull/9476) + +- Update the SPDX License List to version 3.25 + + The LicenseId and LicenseExceptionId types are updated to reflect the SPDX + License List version 3.25 (2024-08-19). diff --git a/release-notes/cabal-install-3.16.0.0.md b/release-notes/cabal-install-3.14.0.0.md similarity index 82% rename from release-notes/cabal-install-3.16.0.0.md rename to release-notes/cabal-install-3.14.0.0.md index 0cf4c9cb2b7..3a890db9acc 100644 --- a/release-notes/cabal-install-3.16.0.0.md +++ b/release-notes/cabal-install-3.14.0.0.md @@ -1,19 +1,13 @@ -### THIS iS A WIP CHANGELOG FOR 3.16 +cabal-install 3.14.0.0 changelog and release notes. +--- -**It will have to be updated with whatever gets added between 3.14 and 3.16** - - -- Clarify error message when `pkg-config` is not found [#10122](https://github.com/haskell/cabal/pull/10122) - - - The error message when `pkg-config` is not found or querying it fails will no - longer incorrectly claim that the package is missing in the database. ### Significant changes - `haddock-project` support for subcomponents [#9821](https://github.com/haskell/cabal/pull/9821) - `haddock-project` handles sublibraries, test suites and benchmarks. - - `haddock` receives `--package-name` flag whcih allows to set names of + - `haddock` receives `--package-name` flag which allows to set names of components which are included in the main `index.html` file. - added `--use-unicode` flag to `haddock` and `haddock-project` commands. - The directory structure of `./dist-newstyle` has changed. `haddock` @@ -23,6 +17,20 @@ support of sublibraries. See https://github.com/haskell/cabal/pull/9821#discussion_r1548557115. +- Redefine `build-type: Configure` in terms of `Hooks` [#9969](https://github.com/haskell/cabal/pull/9969) + + The `build-type: Configure` is now implemented in terms of `build-type: Hooks` + rather than in terms of `build-type: Custom`. This moves the `Configure` + build-type away from the `Custom` issues. Eventually, `build-type: Hooks` will + no longer imply packages are built in legacy-fallback mode. When that + happens, `Configure` will also stop implying `legacy-fallback`. + + The observable aspect of this change is `runConfigureScript` now having a + different type, and `autoconfSetupHooks` being exposed from `Distribution.Simple`. + The former is motivated by internal implementation details, while the latter + provides the `SetupHooks` value for the `Configure` build type, which can be + consumed by other `Hooks` clients (e.g. eventually HLS). + ### Other changes - Add support for building profiled dynamic way [#4816](https://github.com/haskell/cabal/issues/4816) [#9900](https://github.com/haskell/cabal/pull/9900) @@ -37,7 +45,7 @@ Support for using `profiling-shared` is guarded behind a constraint which ensures you are using `Cabal >= 3.13`. - In the cabal file: + In the `.cabal` file: * `ghc-prof-shared-options`, for passing options when building in profiling dynamic way @@ -62,39 +70,6 @@ * `--enable-executable-dynamic --enable-profiling` will automatically turn on building shared profiling libraries (if supported by your compiler). -- Working directory support for `Cabal` [#9702](https://github.com/haskell/cabal/issues/9702) [#9718](https://github.com/haskell/cabal/pull/9718) - - The `Cabal` library is now able to handle a passed-in working directory, instead - of always relying on the current working directory of the parent process. - - In order to achieve this, the `SymbolicPath` abstraction was fleshed out, and - all fields of `PackageDescription` that, if relative, should be interpreted - with respect to e.g. the package root, use `SymbolicPath` instead of `FilePath`. - - This means that many library functions in `Cabal` take an extra argument of type - `Maybe (SymbolicPath CWD (Dir "Package"))`, which is an optional (relative or - absolute) path to the package root (if relative, relative to the current working - directory). In addition, many functions that used to manipulate `FilePath`s now - manipulate `SymbolicPath`s, require explicit conversion using e.g. `getSymbolicPath`. - - To illustrate with file searching, the `Cabal` library defines: - - ```haskell - findFileCwd - :: forall dir1 dir2 file - . Verbosity - -> Maybe (SymbolicPath CWD (Dir dir1)) - - -> [SymbolicPath dir1 (Dir dir2)] - - -> RelativePath dir2 File - - -> IO (SymbolicPath dir1 File) - ``` - - See Note [Symbolic paths] in `Distribution.Utils.Path` for further information - on the design of this API. - - `curl` transport now supports Basic authentication [#10089](https://github.com/haskell/cabal/pull/10089) - The `curl` HTTP transport previously only supported the HTTP Digest @@ -151,20 +126,16 @@ * `documentation: true` or `--enable-documentation` now implies `-haddock` for GHC. -- Redefine `build-type: Configure` in terms of `Hooks` [#9969](https://github.com/haskell/cabal/pull/9969) +- Bug fix - Don't pass `--coverage-for` for non-dependency libs of testsuite [#10046](https://github.com/haskell/cabal/issues/10046) [#10250](https://github.com/haskell/cabal/pull/10250) - The `build-type: Configure` is now implemented in terms of `build-type: Hooks` - rather than in terms of `build-type: Custom`. This moves the `Configure` - build-type away from the `Custom` issues. Eventually, `build-type: Hooks` will - no longer imply packages are built in legacy-fallback mode. When that - happens, `Configure` will also stop implying `legacy-fallback`. +- Added `--all` and `--haddock-all` switches to `haddock-project` subcommand [#10051](https://github.com/haskell/cabal/issues/10051) [#10163](https://github.com/haskell/cabal/pull/10163) - The observable aspect of this change is `runConfigureScript` now having a - different type, and `autoconfSetupHooks` being exposed from `Distribution.Simple`. - The former is motivated by internal implementation details, while the latter - provides the `SetupHooks` value for the `Configure` build type, which can be - consumed by other `Hooks` clients (e.g. eventually HLS). +- Clarify error message when `pkg-config` is not found [#10122](https://github.com/haskell/cabal/pull/10122) -- Bug fix - Don't pass `--coverage-for` for non-dependency libs of testsuite [#10046](https://github.com/haskell/cabal/issues/10046) [#10250](https://github.com/haskell/cabal/pull/10250) + - The error message when `pkg-config` is not found or querying it fails will no + longer incorrectly claim that the package is missing in the database. -- Added `--all` and `--haddock-all` switches to `haddock-project` subcommand [#10051](https://github.com/haskell/cabal/issues/10051) [#10163](https://github.com/haskell/cabal/pull/10163) +- Update the SPDX License List to version 3.25 + + The LicenseId and LicenseExceptionId types are updated to reflect the SPDX + License List version 3.25 (2024-08-19). From 1305bee4ea175b06b26c5690b637e3d6cfe1725d Mon Sep 17 00:00:00 2001 From: Francesco Ariis Date: Sun, 15 Sep 2024 09:12:01 +0200 Subject: [PATCH 07/87] Add miscellaneous changelog fixes --- Cabal-syntax/ChangeLog.md | 2 +- cabal-install-solver/ChangeLog.md | 2 +- cabal-install/changelog | 3 +++ release-notes/Cabal-3.14.0.0.md | 4 ++++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Cabal-syntax/ChangeLog.md b/Cabal-syntax/ChangeLog.md index 73c417220df..cbba98a3cc4 100644 --- a/Cabal-syntax/ChangeLog.md +++ b/Cabal-syntax/ChangeLog.md @@ -1 +1 @@ -Please see https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.12.1.0.md +Please see https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.14.0.0.md diff --git a/cabal-install-solver/ChangeLog.md b/cabal-install-solver/ChangeLog.md index 3cd7794fe29..978ac0f1b07 100644 --- a/cabal-install-solver/ChangeLog.md +++ b/cabal-install-solver/ChangeLog.md @@ -1 +1 @@ -Please see https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.12.1.0.md +Please see https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.14.0.0.md diff --git a/cabal-install/changelog b/cabal-install/changelog index 281329c7fe7..67711276c8f 100644 --- a/cabal-install/changelog +++ b/cabal-install/changelog @@ -1,5 +1,8 @@ -*-change-log-*- +3.14.0.0 Hécate September 2024 + * See https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.14.0.0.md + 3.12.1.0 Artem Pelenitsyn June 2024 * See https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.12.1.0.md diff --git a/release-notes/Cabal-3.14.0.0.md b/release-notes/Cabal-3.14.0.0.md index dd1dbecd43a..004a462db8f 100644 --- a/release-notes/Cabal-3.14.0.0.md +++ b/release-notes/Cabal-3.14.0.0.md @@ -1,3 +1,7 @@ +Cabal and Cabal-syntax 3.14.0.0 changelog and release notes +--- + + ### Significant changes - Neutral field to add files to sdist [#8817](https://github.com/haskell/cabal/issues/8817) [#10107](https://github.com/haskell/cabal/pull/10107) From a856656db6b32f836e8571598c80228d567992d4 Mon Sep 17 00:00:00 2001 From: Francesco Ariis Date: Thu, 12 Sep 2024 20:37:35 +0200 Subject: [PATCH 08/87] Add OrPatterns extension --- Cabal-syntax/src/Language/Haskell/Extension.hs | 5 ++++- Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs | 4 ++-- editors/vim/syntax/cabal.vim | 3 +++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Cabal-syntax/src/Language/Haskell/Extension.hs b/Cabal-syntax/src/Language/Haskell/Extension.hs index 13796c80666..dce34560586 100644 --- a/Cabal-syntax/src/Language/Haskell/Extension.hs +++ b/Cabal-syntax/src/Language/Haskell/Extension.hs @@ -551,8 +551,11 @@ data KnownExtension | -- | Allow the use of built-in syntax for list, tuple and sum type constructors -- rather than being exclusive to data constructors. ListTuplePuns - | -- | Support multiline strings + | -- | Support multiline strings. MultilineStrings + | -- | Allow use of or-pattern syntax, condensing multiple patterns + -- into a single one. + OrPatterns deriving (Generic, Show, Read, Eq, Ord, Enum, Bounded, Typeable, Data) instance Binary KnownExtension diff --git a/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs b/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs index 3bdf0465244..025440c3598 100644 --- a/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs +++ b/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs @@ -30,8 +30,8 @@ md5Check proxy md5Int = structureHash proxy @?= md5FromInteger md5Int md5CheckGenericPackageDescription :: Proxy GenericPackageDescription -> Assertion md5CheckGenericPackageDescription proxy = md5Check proxy - 0xe40d8d67b85712f245354657d7a80165 + 0x09251b46ffc5178a7526d31e794d9c62 md5CheckLocalBuildInfo :: Proxy LocalBuildInfo -> Assertion md5CheckLocalBuildInfo proxy = md5Check proxy - 0x94827844fdb1afedee525061749fb16f + 0x93b7e8ebb5b9f879fa5fe49b1708b43b diff --git a/editors/vim/syntax/cabal.vim b/editors/vim/syntax/cabal.vim index db08e8e0d92..2e578307a7e 100644 --- a/editors/vim/syntax/cabal.vim +++ b/editors/vim/syntax/cabal.vim @@ -232,6 +232,7 @@ syn keyword cabalExtension contained \ NullaryTypeClasses \ NumDecimals \ NumericUnderscores + \ OrPatterns \ OverlappingInstances \ OverloadedLabels \ OverloadedLists @@ -362,6 +363,7 @@ syn keyword cabalExtension contained \ NoMonoLocalBinds \ NoMonoPatBinds \ NoMonomorphismRestriction + \ NoMultilineStrings \ NoMultiParamTypeClasses \ NoMultiWayIf \ NoNPlusKPatterns @@ -379,6 +381,7 @@ syn keyword cabalExtension contained \ NoOverloadedLists \ NoOverloadedRecordDot \ NoOverloadedStrings + \ NoOrPatterns \ NoPackageImports \ NoParallelArrays \ NoParallelListComp From 47ecaab62331d30bb65109608da604883cb9a6f2 Mon Sep 17 00:00:00 2001 From: ffaf1 Date: Mon, 16 Sep 2024 18:22:13 +0200 Subject: [PATCH 09/87] Update SPDX license list to version 3.25 (#10341) * Handle 3D Slicer licence * Update SPDX license list to version 3.25 * Remove changelog entry We don't need it, changes have been manually incorporated in 3.14 release notes (#10338) --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> (cherry picked from commit 55c61aaf50f7bd8289601bd94a0a5f8c36bf1f1a) --- .../Distribution/SPDX/LicenseExceptionId.hs | 150 +- .../src/Distribution/SPDX/LicenseId.hs | 941 +- .../Distribution/SPDX/LicenseListVersion.hs | 3 +- Makefile | 2 +- cabal-dev-scripts/src/GenSPDX.hs | 1 + cabal-dev-scripts/src/GenSPDXExc.hs | 1 + cabal-dev-scripts/src/GenUtils.hs | 22 +- doc/file-format-changelog.rst | 2 + license-list-data/exceptions-3.25.json | 836 ++ license-list-data/licenses-3.25.json | 8360 +++++++++++++++++ templates/SPDX.LicenseExceptionId.template.hs | 10 +- templates/SPDX.LicenseId.template.hs | 10 +- 12 files changed, 10014 insertions(+), 324 deletions(-) create mode 100644 license-list-data/exceptions-3.25.json create mode 100644 license-list-data/licenses-3.25.json diff --git a/Cabal-syntax/src/Distribution/SPDX/LicenseExceptionId.hs b/Cabal-syntax/src/Distribution/SPDX/LicenseExceptionId.hs index 6246d8df41d..2ab6eb9eeff 100644 --- a/Cabal-syntax/src/Distribution/SPDX/LicenseExceptionId.hs +++ b/Cabal-syntax/src/Distribution/SPDX/LicenseExceptionId.hs @@ -30,75 +30,80 @@ import qualified Text.PrettyPrint as Disp -- LicenseExceptionId ------------------------------------------------------------------------------- --- | SPDX License Exceptions identifiers list v3.23 +-- | SPDX License Exceptions identifiers list v3.25 data LicenseExceptionId = DS389_exception -- ^ @389-exception@, 389 Directory Server Exception - | Asterisk_exception -- ^ @Asterisk-exception@, Asterisk exception, SPDX License List 3.23 + | Asterisk_exception -- ^ @Asterisk-exception@, Asterisk exception, SPDX License List 3.23, SPDX License List 3.25 + | Asterisk_linking_protocols_exception -- ^ @Asterisk-linking-protocols-exception@, Asterisk linking protocols exception, SPDX License List 3.25 | Autoconf_exception_2_0 -- ^ @Autoconf-exception-2.0@, Autoconf exception 2.0 | Autoconf_exception_3_0 -- ^ @Autoconf-exception-3.0@, Autoconf exception 3.0 - | Autoconf_exception_generic_3_0 -- ^ @Autoconf-exception-generic-3.0@, Autoconf generic exception for GPL-3.0, SPDX License List 3.23 - | Autoconf_exception_generic -- ^ @Autoconf-exception-generic@, Autoconf generic exception, SPDX License List 3.23 - | Autoconf_exception_macro -- ^ @Autoconf-exception-macro@, Autoconf macro exception, SPDX License List 3.23 - | Bison_exception_1_24 -- ^ @Bison-exception-1.24@, Bison exception 1.24, SPDX License List 3.23 + | Autoconf_exception_generic_3_0 -- ^ @Autoconf-exception-generic-3.0@, Autoconf generic exception for GPL-3.0, SPDX License List 3.23, SPDX License List 3.25 + | Autoconf_exception_generic -- ^ @Autoconf-exception-generic@, Autoconf generic exception, SPDX License List 3.23, SPDX License List 3.25 + | Autoconf_exception_macro -- ^ @Autoconf-exception-macro@, Autoconf macro exception, SPDX License List 3.23, SPDX License List 3.25 + | Bison_exception_1_24 -- ^ @Bison-exception-1.24@, Bison exception 1.24, SPDX License List 3.23, SPDX License List 3.25 | Bison_exception_2_2 -- ^ @Bison-exception-2.2@, Bison exception 2.2 | Bootloader_exception -- ^ @Bootloader-exception@, Bootloader Distribution Exception | Classpath_exception_2_0 -- ^ @Classpath-exception-2.0@, Classpath exception 2.0 | CLISP_exception_2_0 -- ^ @CLISP-exception-2.0@, CLISP exception 2.0 - | Cryptsetup_OpenSSL_exception -- ^ @cryptsetup-OpenSSL-exception@, cryptsetup OpenSSL exception, SPDX License List 3.23 + | Cryptsetup_OpenSSL_exception -- ^ @cryptsetup-OpenSSL-exception@, cryptsetup OpenSSL exception, SPDX License List 3.23, SPDX License List 3.25 | DigiRule_FOSS_exception -- ^ @DigiRule-FOSS-exception@, DigiRule FOSS License Exception | ECos_exception_2_0 -- ^ @eCos-exception-2.0@, eCos exception 2.0 + | Erlang_otp_linking_exception -- ^ @erlang-otp-linking-exception@, Erlang/OTP Linking Exception, SPDX License List 3.25 | Fawkes_Runtime_exception -- ^ @Fawkes-Runtime-exception@, Fawkes Runtime Exception | FLTK_exception -- ^ @FLTK-exception@, FLTK exception - | Fmt_exception -- ^ @fmt-exception@, fmt exception, SPDX License List 3.23 + | Fmt_exception -- ^ @fmt-exception@, fmt exception, SPDX License List 3.23, SPDX License List 3.25 | Font_exception_2_0 -- ^ @Font-exception-2.0@, Font exception 2.0 | Freertos_exception_2_0 -- ^ @freertos-exception-2.0@, FreeRTOS Exception 2.0 - | GCC_exception_2_0_note -- ^ @GCC-exception-2.0-note@, GCC Runtime Library exception 2.0 - note variant, SPDX License List 3.23 + | GCC_exception_2_0_note -- ^ @GCC-exception-2.0-note@, GCC Runtime Library exception 2.0 - note variant, SPDX License List 3.23, SPDX License List 3.25 | GCC_exception_2_0 -- ^ @GCC-exception-2.0@, GCC Runtime Library exception 2.0 | GCC_exception_3_1 -- ^ @GCC-exception-3.1@, GCC Runtime Library exception 3.1 - | Gmsh_exception -- ^ @Gmsh-exception@, Gmsh exception>, SPDX License List 3.23 - | GNAT_exception -- ^ @GNAT-exception@, GNAT exception, SPDX License List 3.23 - | GNOME_examples_exception -- ^ @GNOME-examples-exception@, GNOME examples exception, SPDX License List 3.23 - | GNU_compiler_exception -- ^ @GNU-compiler-exception@, GNU Compiler Exception, SPDX License List 3.23 + | Gmsh_exception -- ^ @Gmsh-exception@, Gmsh exception>, SPDX License List 3.23, SPDX License List 3.25 + | GNAT_exception -- ^ @GNAT-exception@, GNAT exception, SPDX License List 3.23, SPDX License List 3.25 + | GNOME_examples_exception -- ^ @GNOME-examples-exception@, GNOME examples exception, SPDX License List 3.23, SPDX License List 3.25 + | GNU_compiler_exception -- ^ @GNU-compiler-exception@, GNU Compiler Exception, SPDX License List 3.23, SPDX License List 3.25 | Gnu_javamail_exception -- ^ @gnu-javamail-exception@, GNU JavaMail exception - | GPL_3_0_interface_exception -- ^ @GPL-3.0-interface-exception@, GPL-3.0 Interface Exception, SPDX License List 3.23 - | GPL_3_0_linking_exception -- ^ @GPL-3.0-linking-exception@, GPL-3.0 Linking Exception, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | GPL_3_0_linking_source_exception -- ^ @GPL-3.0-linking-source-exception@, GPL-3.0 Linking Exception (with Corresponding Source), SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | GPL_CC_1_0 -- ^ @GPL-CC-1.0@, GPL Cooperation Commitment 1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | GStreamer_exception_2005 -- ^ @GStreamer-exception-2005@, GStreamer Exception (2005), SPDX License List 3.23 - | GStreamer_exception_2008 -- ^ @GStreamer-exception-2008@, GStreamer Exception (2008), SPDX License List 3.23 + | GPL_3_0_interface_exception -- ^ @GPL-3.0-interface-exception@, GPL-3.0 Interface Exception, SPDX License List 3.23, SPDX License List 3.25 + | GPL_3_0_linking_exception -- ^ @GPL-3.0-linking-exception@, GPL-3.0 Linking Exception, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | GPL_3_0_linking_source_exception -- ^ @GPL-3.0-linking-source-exception@, GPL-3.0 Linking Exception (with Corresponding Source), SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | GPL_CC_1_0 -- ^ @GPL-CC-1.0@, GPL Cooperation Commitment 1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | GStreamer_exception_2005 -- ^ @GStreamer-exception-2005@, GStreamer Exception (2005), SPDX License List 3.23, SPDX License List 3.25 + | GStreamer_exception_2008 -- ^ @GStreamer-exception-2008@, GStreamer Exception (2008), SPDX License List 3.23, SPDX License List 3.25 | I2p_gpl_java_exception -- ^ @i2p-gpl-java-exception@, i2p GPL+Java Exception - | KiCad_libraries_exception -- ^ @KiCad-libraries-exception@, KiCad Libraries Exception, SPDX License List 3.23 - | LGPL_3_0_linking_exception -- ^ @LGPL-3.0-linking-exception@, LGPL-3.0 Linking Exception, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | Libpri_OpenH323_exception -- ^ @libpri-OpenH323-exception@, libpri OpenH323 exception, SPDX License List 3.23 + | KiCad_libraries_exception -- ^ @KiCad-libraries-exception@, KiCad Libraries Exception, SPDX License List 3.23, SPDX License List 3.25 + | LGPL_3_0_linking_exception -- ^ @LGPL-3.0-linking-exception@, LGPL-3.0 Linking Exception, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | Libpri_OpenH323_exception -- ^ @libpri-OpenH323-exception@, libpri OpenH323 exception, SPDX License List 3.23, SPDX License List 3.25 | Libtool_exception -- ^ @Libtool-exception@, Libtool Exception | Linux_syscall_note -- ^ @Linux-syscall-note@, Linux Syscall Note - | LLGPL -- ^ @LLGPL@, LLGPL Preamble, SPDX License List 3.23 - | LLVM_exception -- ^ @LLVM-exception@, LLVM Exception, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | LLGPL -- ^ @LLGPL@, LLGPL Preamble, SPDX License List 3.23, SPDX License List 3.25 + | LLVM_exception -- ^ @LLVM-exception@, LLVM Exception, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | LZMA_exception -- ^ @LZMA-exception@, LZMA exception | Mif_exception -- ^ @mif-exception@, Macros and Inline Functions Exception | Nokia_Qt_exception_1_1 -- ^ @Nokia-Qt-exception-1.1@, Nokia Qt LGPL exception 1.1, SPDX License List 3.0, SPDX License List 3.2 - | OCaml_LGPL_linking_exception -- ^ @OCaml-LGPL-linking-exception@, OCaml LGPL Linking Exception, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | OCaml_LGPL_linking_exception -- ^ @OCaml-LGPL-linking-exception@, OCaml LGPL Linking Exception, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | OCCT_exception_1_0 -- ^ @OCCT-exception-1.0@, Open CASCADE Exception 1.0 - | OpenJDK_assembly_exception_1_0 -- ^ @OpenJDK-assembly-exception-1.0@, OpenJDK Assembly exception 1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | OpenJDK_assembly_exception_1_0 -- ^ @OpenJDK-assembly-exception-1.0@, OpenJDK Assembly exception 1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | Openvpn_openssl_exception -- ^ @openvpn-openssl-exception@, OpenVPN OpenSSL Exception - | PS_or_PDF_font_exception_20170817 -- ^ @PS-or-PDF-font-exception-20170817@, PS/PDF font exception (2017-08-17), SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | QPL_1_0_INRIA_2004_exception -- ^ @QPL-1.0-INRIA-2004-exception@, INRIA QPL 1.0 2004 variant exception, SPDX License List 3.23 - | Qt_GPL_exception_1_0 -- ^ @Qt-GPL-exception-1.0@, Qt GPL exception 1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | Qt_LGPL_exception_1_1 -- ^ @Qt-LGPL-exception-1.1@, Qt LGPL exception 1.1, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | PCRE2_exception -- ^ @PCRE2-exception@, PCRE2 exception, SPDX License List 3.25 + | PS_or_PDF_font_exception_20170817 -- ^ @PS-or-PDF-font-exception-20170817@, PS/PDF font exception (2017-08-17), SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | QPL_1_0_INRIA_2004_exception -- ^ @QPL-1.0-INRIA-2004-exception@, INRIA QPL 1.0 2004 variant exception, SPDX License List 3.23, SPDX License List 3.25 + | Qt_GPL_exception_1_0 -- ^ @Qt-GPL-exception-1.0@, Qt GPL exception 1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | Qt_LGPL_exception_1_1 -- ^ @Qt-LGPL-exception-1.1@, Qt LGPL exception 1.1, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | Qwt_exception_1_0 -- ^ @Qwt-exception-1.0@, Qwt exception 1.0 - | SANE_exception -- ^ @SANE-exception@, SANE Exception, SPDX License List 3.23 - | SHL_2_0 -- ^ @SHL-2.0@, Solderpad Hardware License v2.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | SHL_2_1 -- ^ @SHL-2.1@, Solderpad Hardware License v2.1, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | Stunnel_exception -- ^ @stunnel-exception@, stunnel Exception, SPDX License List 3.23 - | SWI_exception -- ^ @SWI-exception@, SWI exception, SPDX License List 3.23 - | Swift_exception -- ^ @Swift-exception@, Swift Exception, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | Texinfo_exception -- ^ @Texinfo-exception@, Texinfo exception, SPDX License List 3.23 + | Romic_exception -- ^ @romic-exception@, Romic Exception, SPDX License List 3.25 + | RRDtool_FLOSS_exception_2_0 -- ^ @RRDtool-FLOSS-exception-2.0@, RRDtool FLOSS exception 2.0, SPDX License List 3.25 + | SANE_exception -- ^ @SANE-exception@, SANE Exception, SPDX License List 3.23, SPDX License List 3.25 + | SHL_2_0 -- ^ @SHL-2.0@, Solderpad Hardware License v2.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | SHL_2_1 -- ^ @SHL-2.1@, Solderpad Hardware License v2.1, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | Stunnel_exception -- ^ @stunnel-exception@, stunnel Exception, SPDX License List 3.23, SPDX License List 3.25 + | SWI_exception -- ^ @SWI-exception@, SWI exception, SPDX License List 3.23, SPDX License List 3.25 + | Swift_exception -- ^ @Swift-exception@, Swift Exception, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | Texinfo_exception -- ^ @Texinfo-exception@, Texinfo exception, SPDX License List 3.23, SPDX License List 3.25 | U_boot_exception_2_0 -- ^ @u-boot-exception-2.0@, U-Boot exception 2.0 - | UBDL_exception -- ^ @UBDL-exception@, Unmodified Binary Distribution exception, SPDX License List 3.23 - | Universal_FOSS_exception_1_0 -- ^ @Universal-FOSS-exception-1.0@, Universal FOSS Exception, Version 1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | Vsftpd_openssl_exception -- ^ @vsftpd-openssl-exception@, vsftpd OpenSSL exception, SPDX License List 3.23 + | UBDL_exception -- ^ @UBDL-exception@, Unmodified Binary Distribution exception, SPDX License List 3.23, SPDX License List 3.25 + | Universal_FOSS_exception_1_0 -- ^ @Universal-FOSS-exception-1.0@, Universal FOSS Exception, Version 1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | Vsftpd_openssl_exception -- ^ @vsftpd-openssl-exception@, vsftpd OpenSSL exception, SPDX License List 3.23, SPDX License List 3.25 | WxWindows_exception_3_1 -- ^ @WxWindows-exception-3.1@, WxWindows Library Exception 3.1 - | X11vnc_openssl_exception -- ^ @x11vnc-openssl-exception@, x11vnc OpenSSL Exception, SPDX License List 3.23 + | X11vnc_openssl_exception -- ^ @x11vnc-openssl-exception@, x11vnc OpenSSL Exception, SPDX License List 3.23, SPDX License List 3.25 deriving (Eq, Ord, Enum, Bounded, Show, Read, Typeable, Data, Generic) instance Binary LicenseExceptionId where @@ -134,6 +139,7 @@ instance NFData LicenseExceptionId where licenseExceptionId :: LicenseExceptionId -> String licenseExceptionId DS389_exception = "389-exception" licenseExceptionId Asterisk_exception = "Asterisk-exception" +licenseExceptionId Asterisk_linking_protocols_exception = "Asterisk-linking-protocols-exception" licenseExceptionId Autoconf_exception_2_0 = "Autoconf-exception-2.0" licenseExceptionId Autoconf_exception_3_0 = "Autoconf-exception-3.0" licenseExceptionId Autoconf_exception_generic_3_0 = "Autoconf-exception-generic-3.0" @@ -147,6 +153,7 @@ licenseExceptionId CLISP_exception_2_0 = "CLISP-exception-2.0" licenseExceptionId Cryptsetup_OpenSSL_exception = "cryptsetup-OpenSSL-exception" licenseExceptionId DigiRule_FOSS_exception = "DigiRule-FOSS-exception" licenseExceptionId ECos_exception_2_0 = "eCos-exception-2.0" +licenseExceptionId Erlang_otp_linking_exception = "erlang-otp-linking-exception" licenseExceptionId Fawkes_Runtime_exception = "Fawkes-Runtime-exception" licenseExceptionId FLTK_exception = "FLTK-exception" licenseExceptionId Fmt_exception = "fmt-exception" @@ -181,11 +188,14 @@ licenseExceptionId OCaml_LGPL_linking_exception = "OCaml-LGPL-linking-exception" licenseExceptionId OCCT_exception_1_0 = "OCCT-exception-1.0" licenseExceptionId OpenJDK_assembly_exception_1_0 = "OpenJDK-assembly-exception-1.0" licenseExceptionId Openvpn_openssl_exception = "openvpn-openssl-exception" +licenseExceptionId PCRE2_exception = "PCRE2-exception" licenseExceptionId PS_or_PDF_font_exception_20170817 = "PS-or-PDF-font-exception-20170817" licenseExceptionId QPL_1_0_INRIA_2004_exception = "QPL-1.0-INRIA-2004-exception" licenseExceptionId Qt_GPL_exception_1_0 = "Qt-GPL-exception-1.0" licenseExceptionId Qt_LGPL_exception_1_1 = "Qt-LGPL-exception-1.1" licenseExceptionId Qwt_exception_1_0 = "Qwt-exception-1.0" +licenseExceptionId Romic_exception = "romic-exception" +licenseExceptionId RRDtool_FLOSS_exception_2_0 = "RRDtool-FLOSS-exception-2.0" licenseExceptionId SANE_exception = "SANE-exception" licenseExceptionId SHL_2_0 = "SHL-2.0" licenseExceptionId SHL_2_1 = "SHL-2.1" @@ -204,6 +214,7 @@ licenseExceptionId X11vnc_openssl_exception = "x11vnc-openssl-exception" licenseExceptionName :: LicenseExceptionId -> String licenseExceptionName DS389_exception = "389 Directory Server Exception" licenseExceptionName Asterisk_exception = "Asterisk exception" +licenseExceptionName Asterisk_linking_protocols_exception = "Asterisk linking protocols exception" licenseExceptionName Autoconf_exception_2_0 = "Autoconf exception 2.0" licenseExceptionName Autoconf_exception_3_0 = "Autoconf exception 3.0" licenseExceptionName Autoconf_exception_generic_3_0 = "Autoconf generic exception for GPL-3.0" @@ -217,6 +228,7 @@ licenseExceptionName CLISP_exception_2_0 = "CLISP exception 2.0" licenseExceptionName Cryptsetup_OpenSSL_exception = "cryptsetup OpenSSL exception" licenseExceptionName DigiRule_FOSS_exception = "DigiRule FOSS License Exception" licenseExceptionName ECos_exception_2_0 = "eCos exception 2.0" +licenseExceptionName Erlang_otp_linking_exception = "Erlang/OTP Linking Exception" licenseExceptionName Fawkes_Runtime_exception = "Fawkes Runtime Exception" licenseExceptionName FLTK_exception = "FLTK exception" licenseExceptionName Fmt_exception = "fmt exception" @@ -251,11 +263,14 @@ licenseExceptionName OCaml_LGPL_linking_exception = "OCaml LGPL Linking Exceptio licenseExceptionName OCCT_exception_1_0 = "Open CASCADE Exception 1.0" licenseExceptionName OpenJDK_assembly_exception_1_0 = "OpenJDK Assembly exception 1.0" licenseExceptionName Openvpn_openssl_exception = "OpenVPN OpenSSL Exception" +licenseExceptionName PCRE2_exception = "PCRE2 exception" licenseExceptionName PS_or_PDF_font_exception_20170817 = "PS/PDF font exception (2017-08-17)" licenseExceptionName QPL_1_0_INRIA_2004_exception = "INRIA QPL 1.0 2004 variant exception" licenseExceptionName Qt_GPL_exception_1_0 = "Qt GPL exception 1.0" licenseExceptionName Qt_LGPL_exception_1_1 = "Qt LGPL exception 1.1" licenseExceptionName Qwt_exception_1_0 = "Qwt exception 1.0" +licenseExceptionName Romic_exception = "Romic Exception" +licenseExceptionName RRDtool_FLOSS_exception_2_0 = "RRDtool FLOSS exception 2.0" licenseExceptionName SANE_exception = "SANE Exception" licenseExceptionName SHL_2_0 = "Solderpad Hardware License v2.0" licenseExceptionName SHL_2_1 = "Solderpad Hardware License v2.1" @@ -394,6 +409,54 @@ licenseExceptionIdList LicenseListVersion_3_23 = , X11vnc_openssl_exception ] ++ bulkOfLicenses +licenseExceptionIdList LicenseListVersion_3_25 = + [ Asterisk_exception + , Asterisk_linking_protocols_exception + , Autoconf_exception_generic_3_0 + , Autoconf_exception_generic + , Autoconf_exception_macro + , Bison_exception_1_24 + , Cryptsetup_OpenSSL_exception + , Erlang_otp_linking_exception + , Fmt_exception + , GCC_exception_2_0_note + , Gmsh_exception + , GNAT_exception + , GNOME_examples_exception + , GNU_compiler_exception + , GPL_3_0_interface_exception + , GPL_3_0_linking_exception + , GPL_3_0_linking_source_exception + , GPL_CC_1_0 + , GStreamer_exception_2005 + , GStreamer_exception_2008 + , KiCad_libraries_exception + , LGPL_3_0_linking_exception + , Libpri_OpenH323_exception + , LLGPL + , LLVM_exception + , OCaml_LGPL_linking_exception + , OpenJDK_assembly_exception_1_0 + , PCRE2_exception + , PS_or_PDF_font_exception_20170817 + , QPL_1_0_INRIA_2004_exception + , Qt_GPL_exception_1_0 + , Qt_LGPL_exception_1_1 + , Romic_exception + , RRDtool_FLOSS_exception_2_0 + , SANE_exception + , SHL_2_0 + , SHL_2_1 + , Stunnel_exception + , SWI_exception + , Swift_exception + , Texinfo_exception + , UBDL_exception + , Universal_FOSS_exception_1_0 + , Vsftpd_openssl_exception + , X11vnc_openssl_exception + ] + ++ bulkOfLicenses -- | Create a 'LicenseExceptionId' from a 'String'. mkLicenseExceptionId :: LicenseListVersion -> String -> Maybe LicenseExceptionId @@ -404,6 +467,7 @@ mkLicenseExceptionId LicenseListVersion_3_9 s = Map.lookup s stringLookup_3_9 mkLicenseExceptionId LicenseListVersion_3_10 s = Map.lookup s stringLookup_3_10 mkLicenseExceptionId LicenseListVersion_3_16 s = Map.lookup s stringLookup_3_16 mkLicenseExceptionId LicenseListVersion_3_23 s = Map.lookup s stringLookup_3_23 +mkLicenseExceptionId LicenseListVersion_3_25 s = Map.lookup s stringLookup_3_25 stringLookup_3_0 :: Map String LicenseExceptionId stringLookup_3_0 = Map.fromList $ map (\i -> (licenseExceptionId i, i)) $ @@ -433,6 +497,10 @@ stringLookup_3_23 :: Map String LicenseExceptionId stringLookup_3_23 = Map.fromList $ map (\i -> (licenseExceptionId i, i)) $ licenseExceptionIdList LicenseListVersion_3_23 +stringLookup_3_25 :: Map String LicenseExceptionId +stringLookup_3_25 = Map.fromList $ map (\i -> (licenseExceptionId i, i)) $ + licenseExceptionIdList LicenseListVersion_3_25 + -- | License exceptions in all SPDX License lists bulkOfLicenses :: [LicenseExceptionId] bulkOfLicenses = diff --git a/Cabal-syntax/src/Distribution/SPDX/LicenseId.hs b/Cabal-syntax/src/Distribution/SPDX/LicenseId.hs index 5af7fd86e8b..16421e475f9 100644 --- a/Cabal-syntax/src/Distribution/SPDX/LicenseId.hs +++ b/Cabal-syntax/src/Distribution/SPDX/LicenseId.hs @@ -33,16 +33,17 @@ import qualified Text.PrettyPrint as Disp -- LicenseId ------------------------------------------------------------------------------- --- | SPDX License identifiers list v3.23 +-- | SPDX License identifiers list v3.25 data LicenseId = NullBSD -- ^ @0BSD@, BSD Zero Clause License + | X3D_Slicer_1_0 -- ^ @3D-Slicer-1.0@, 3D Slicer License v1.0, SPDX License List 3.25 | AAL -- ^ @AAL@, Attribution Assurance License | Abstyles -- ^ @Abstyles@, Abstyles License - | AdaCore_doc -- ^ @AdaCore-doc@, AdaCore Doc License, SPDX License List 3.23 + | AdaCore_doc -- ^ @AdaCore-doc@, AdaCore Doc License, SPDX License List 3.23, SPDX License List 3.25 | Adobe_2006 -- ^ @Adobe-2006@, Adobe Systems Incorporated Source Code License Agreement - | Adobe_Display_PostScript -- ^ @Adobe-Display-PostScript@, Adobe Display PostScript License, SPDX License List 3.23 + | Adobe_Display_PostScript -- ^ @Adobe-Display-PostScript@, Adobe Display PostScript License, SPDX License List 3.23, SPDX License List 3.25 | Adobe_Glyph -- ^ @Adobe-Glyph@, Adobe Glyph List License - | Adobe_Utopia -- ^ @Adobe-Utopia@, Adobe Utopia Font License, SPDX License List 3.23 + | Adobe_Utopia -- ^ @Adobe-Utopia@, Adobe Utopia Font License, SPDX License List 3.23, SPDX License List 3.25 | ADSL -- ^ @ADSL@, Amazon Digital Services License | AFL_1_1 -- ^ @AFL-1.1@, Academic Free License v1.1 | AFL_1_2 -- ^ @AFL-1.2@, Academic Free License v1.2 @@ -51,151 +52,155 @@ data LicenseId | AFL_3_0 -- ^ @AFL-3.0@, Academic Free License v3.0 | Afmparse -- ^ @Afmparse@, Afmparse License | AGPL_1_0 -- ^ @AGPL-1.0@, Affero General Public License v1.0, SPDX License List 3.0 - | AGPL_1_0_only -- ^ @AGPL-1.0-only@, Affero General Public License v1.0 only, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | AGPL_1_0_or_later -- ^ @AGPL-1.0-or-later@, Affero General Public License v1.0 or later, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | AGPL_1_0_only -- ^ @AGPL-1.0-only@, Affero General Public License v1.0 only, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | AGPL_1_0_or_later -- ^ @AGPL-1.0-or-later@, Affero General Public License v1.0 or later, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | AGPL_3_0_only -- ^ @AGPL-3.0-only@, GNU Affero General Public License v3.0 only | AGPL_3_0_or_later -- ^ @AGPL-3.0-or-later@, GNU Affero General Public License v3.0 or later | Aladdin -- ^ @Aladdin@, Aladdin Free Public License + | AMD_newlib -- ^ @AMD-newlib@, AMD newlib License, SPDX License List 3.25 | AMDPLPA -- ^ @AMDPLPA@, AMD's plpa_map.c License - | AML_glslang -- ^ @AML-glslang@, AML glslang variant License, SPDX License List 3.23 + | AML_glslang -- ^ @AML-glslang@, AML glslang variant License, SPDX License List 3.23, SPDX License List 3.25 | AML -- ^ @AML@, Apple MIT License | AMPAS -- ^ @AMPAS@, Academy of Motion Picture Arts and Sciences BSD - | ANTLR_PD_fallback -- ^ @ANTLR-PD-fallback@, ANTLR Software Rights Notice with license fallback, SPDX License List 3.16, SPDX License List 3.23 + | ANTLR_PD_fallback -- ^ @ANTLR-PD-fallback@, ANTLR Software Rights Notice with license fallback, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | ANTLR_PD -- ^ @ANTLR-PD@, ANTLR Software Rights Notice + | Any_OSI -- ^ @any-OSI@, Any OSI License, SPDX License List 3.25 | Apache_1_0 -- ^ @Apache-1.0@, Apache License 1.0 | Apache_1_1 -- ^ @Apache-1.1@, Apache License 1.1 | Apache_2_0 -- ^ @Apache-2.0@, Apache License 2.0 | APAFML -- ^ @APAFML@, Adobe Postscript AFM License | APL_1_0 -- ^ @APL-1.0@, Adaptive Public License 1.0 - | App_s2p -- ^ @App-s2p@, App::s2p License, SPDX License List 3.16, SPDX License List 3.23 + | App_s2p -- ^ @App-s2p@, App::s2p License, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | APSL_1_0 -- ^ @APSL-1.0@, Apple Public Source License 1.0 | APSL_1_1 -- ^ @APSL-1.1@, Apple Public Source License 1.1 | APSL_1_2 -- ^ @APSL-1.2@, Apple Public Source License 1.2 | APSL_2_0 -- ^ @APSL-2.0@, Apple Public Source License 2.0 - | Arphic_1999 -- ^ @Arphic-1999@, Arphic Public License, SPDX License List 3.23 + | Arphic_1999 -- ^ @Arphic-1999@, Arphic Public License, SPDX License List 3.23, SPDX License List 3.25 | Artistic_1_0_cl8 -- ^ @Artistic-1.0-cl8@, Artistic License 1.0 w/clause 8 | Artistic_1_0_Perl -- ^ @Artistic-1.0-Perl@, Artistic License 1.0 (Perl) | Artistic_1_0 -- ^ @Artistic-1.0@, Artistic License 1.0 | Artistic_2_0 -- ^ @Artistic-2.0@, Artistic License 2.0 - | ASWF_Digital_Assets_1_0 -- ^ @ASWF-Digital-Assets-1.0@, ASWF Digital Assets License version 1.0, SPDX License List 3.23 - | ASWF_Digital_Assets_1_1 -- ^ @ASWF-Digital-Assets-1.1@, ASWF Digital Assets License 1.1, SPDX License List 3.23 - | Baekmuk -- ^ @Baekmuk@, Baekmuk License, SPDX License List 3.23 + | ASWF_Digital_Assets_1_0 -- ^ @ASWF-Digital-Assets-1.0@, ASWF Digital Assets License version 1.0, SPDX License List 3.23, SPDX License List 3.25 + | ASWF_Digital_Assets_1_1 -- ^ @ASWF-Digital-Assets-1.1@, ASWF Digital Assets License 1.1, SPDX License List 3.23, SPDX License List 3.25 + | Baekmuk -- ^ @Baekmuk@, Baekmuk License, SPDX License List 3.23, SPDX License List 3.25 | Bahyph -- ^ @Bahyph@, Bahyph License | Barr -- ^ @Barr@, Barr License - | Bcrypt_Solar_Designer -- ^ @bcrypt-Solar-Designer@, bcrypt Solar Designer License, SPDX License List 3.23 + | Bcrypt_Solar_Designer -- ^ @bcrypt-Solar-Designer@, bcrypt Solar Designer License, SPDX License List 3.23, SPDX License List 3.25 | Beerware -- ^ @Beerware@, Beerware License - | Bitstream_Charter -- ^ @Bitstream-Charter@, Bitstream Charter Font License, SPDX License List 3.23 - | Bitstream_Vera -- ^ @Bitstream-Vera@, Bitstream Vera Font License, SPDX License List 3.23 + | Bitstream_Charter -- ^ @Bitstream-Charter@, Bitstream Charter Font License, SPDX License List 3.23, SPDX License List 3.25 + | Bitstream_Vera -- ^ @Bitstream-Vera@, Bitstream Vera Font License, SPDX License List 3.23, SPDX License List 3.25 | BitTorrent_1_0 -- ^ @BitTorrent-1.0@, BitTorrent Open Source License v1.0 | BitTorrent_1_1 -- ^ @BitTorrent-1.1@, BitTorrent Open Source License v1.1 - | Blessing -- ^ @blessing@, SQLite Blessing, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | BlueOak_1_0_0 -- ^ @BlueOak-1.0.0@, Blue Oak Model License 1.0.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | Boehm_GC -- ^ @Boehm-GC@, Boehm-Demers-Weiser GC License, SPDX License List 3.23 + | Blessing -- ^ @blessing@, SQLite Blessing, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | BlueOak_1_0_0 -- ^ @BlueOak-1.0.0@, Blue Oak Model License 1.0.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | Boehm_GC -- ^ @Boehm-GC@, Boehm-Demers-Weiser GC License, SPDX License List 3.23, SPDX License List 3.25 | Borceux -- ^ @Borceux@, Borceux license - | Brian_Gladman_2_Clause -- ^ @Brian-Gladman-2-Clause@, Brian Gladman 2-Clause License, SPDX License List 3.23 - | Brian_Gladman_3_Clause -- ^ @Brian-Gladman-3-Clause@, Brian Gladman 3-Clause License, SPDX License List 3.23 + | Brian_Gladman_2_Clause -- ^ @Brian-Gladman-2-Clause@, Brian Gladman 2-Clause License, SPDX License List 3.23, SPDX License List 3.25 + | Brian_Gladman_3_Clause -- ^ @Brian-Gladman-3-Clause@, Brian Gladman 3-Clause License, SPDX License List 3.23, SPDX License List 3.25 | BSD_1_Clause -- ^ @BSD-1-Clause@, BSD 1-Clause License | BSD_2_Clause_FreeBSD -- ^ @BSD-2-Clause-FreeBSD@, BSD 2-Clause FreeBSD License, SPDX License List 3.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9 | BSD_2_Clause_NetBSD -- ^ @BSD-2-Clause-NetBSD@, BSD 2-Clause NetBSD License, SPDX License List 3.0, SPDX License List 3.2, SPDX License List 3.6 - | BSD_2_Clause_Darwin -- ^ @BSD-2-Clause-Darwin@, BSD 2-Clause - Ian Darwin variant, SPDX License List 3.23 + | BSD_2_Clause_Darwin -- ^ @BSD-2-Clause-Darwin@, BSD 2-Clause - Ian Darwin variant, SPDX License List 3.23, SPDX License List 3.25 + | BSD_2_Clause_first_lines -- ^ @BSD-2-Clause-first-lines@, BSD 2-Clause - first lines requirement, SPDX License List 3.25 | BSD_2_Clause_Patent -- ^ @BSD-2-Clause-Patent@, BSD-2-Clause Plus Patent License - | BSD_2_Clause_Views -- ^ @BSD-2-Clause-Views@, BSD 2-Clause with views sentence, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | BSD_2_Clause_Views -- ^ @BSD-2-Clause-Views@, BSD 2-Clause with views sentence, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | BSD_2_Clause -- ^ @BSD-2-Clause@, BSD 2-Clause "Simplified" License - | BSD_3_Clause_acpica -- ^ @BSD-3-Clause-acpica@, BSD 3-Clause acpica variant, SPDX License List 3.23 + | BSD_3_Clause_acpica -- ^ @BSD-3-Clause-acpica@, BSD 3-Clause acpica variant, SPDX License List 3.23, SPDX License List 3.25 | BSD_3_Clause_Attribution -- ^ @BSD-3-Clause-Attribution@, BSD with attribution | BSD_3_Clause_Clear -- ^ @BSD-3-Clause-Clear@, BSD 3-Clause Clear License - | BSD_3_Clause_flex -- ^ @BSD-3-Clause-flex@, BSD 3-Clause Flex variant, SPDX License List 3.23 - | BSD_3_Clause_HP -- ^ @BSD-3-Clause-HP@, Hewlett-Packard BSD variant license, SPDX License List 3.23 + | BSD_3_Clause_flex -- ^ @BSD-3-Clause-flex@, BSD 3-Clause Flex variant, SPDX License List 3.23, SPDX License List 3.25 + | BSD_3_Clause_HP -- ^ @BSD-3-Clause-HP@, Hewlett-Packard BSD variant license, SPDX License List 3.23, SPDX License List 3.25 | BSD_3_Clause_LBNL -- ^ @BSD-3-Clause-LBNL@, Lawrence Berkeley National Labs BSD variant license - | BSD_3_Clause_Modification -- ^ @BSD-3-Clause-Modification@, BSD 3-Clause Modification, SPDX License List 3.16, SPDX License List 3.23 - | BSD_3_Clause_No_Military_License -- ^ @BSD-3-Clause-No-Military-License@, BSD 3-Clause No Military License, SPDX License List 3.16, SPDX License List 3.23 + | BSD_3_Clause_Modification -- ^ @BSD-3-Clause-Modification@, BSD 3-Clause Modification, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | BSD_3_Clause_No_Military_License -- ^ @BSD-3-Clause-No-Military-License@, BSD 3-Clause No Military License, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | BSD_3_Clause_No_Nuclear_License_2014 -- ^ @BSD-3-Clause-No-Nuclear-License-2014@, BSD 3-Clause No Nuclear License 2014 | BSD_3_Clause_No_Nuclear_License -- ^ @BSD-3-Clause-No-Nuclear-License@, BSD 3-Clause No Nuclear License | BSD_3_Clause_No_Nuclear_Warranty -- ^ @BSD-3-Clause-No-Nuclear-Warranty@, BSD 3-Clause No Nuclear Warranty - | BSD_3_Clause_Open_MPI -- ^ @BSD-3-Clause-Open-MPI@, BSD 3-Clause Open MPI variant, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | BSD_3_Clause_Sun -- ^ @BSD-3-Clause-Sun@, BSD 3-Clause Sun Microsystems, SPDX License List 3.23 + | BSD_3_Clause_Open_MPI -- ^ @BSD-3-Clause-Open-MPI@, BSD 3-Clause Open MPI variant, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | BSD_3_Clause_Sun -- ^ @BSD-3-Clause-Sun@, BSD 3-Clause Sun Microsystems, SPDX License List 3.23, SPDX License List 3.25 | BSD_3_Clause -- ^ @BSD-3-Clause@, BSD 3-Clause "New" or "Revised" License - | BSD_4_Clause_Shortened -- ^ @BSD-4-Clause-Shortened@, BSD 4 Clause Shortened, SPDX License List 3.16, SPDX License List 3.23 + | BSD_4_Clause_Shortened -- ^ @BSD-4-Clause-Shortened@, BSD 4 Clause Shortened, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | BSD_4_Clause_UC -- ^ @BSD-4-Clause-UC@, BSD-4-Clause (University of California-Specific) | BSD_4_Clause -- ^ @BSD-4-Clause@, BSD 4-Clause "Original" or "Old" License - | BSD_4_3RENO -- ^ @BSD-4.3RENO@, BSD 4.3 RENO License, SPDX License List 3.23 - | BSD_4_3TAHOE -- ^ @BSD-4.3TAHOE@, BSD 4.3 TAHOE License, SPDX License List 3.23 - | BSD_Advertising_Acknowledgement -- ^ @BSD-Advertising-Acknowledgement@, BSD Advertising Acknowledgement License, SPDX License List 3.23 - | BSD_Attribution_HPND_disclaimer -- ^ @BSD-Attribution-HPND-disclaimer@, BSD with Attribution and HPND disclaimer, SPDX License List 3.23 - | BSD_Inferno_Nettverk -- ^ @BSD-Inferno-Nettverk@, BSD-Inferno-Nettverk, SPDX License List 3.23 + | BSD_4_3RENO -- ^ @BSD-4.3RENO@, BSD 4.3 RENO License, SPDX License List 3.23, SPDX License List 3.25 + | BSD_4_3TAHOE -- ^ @BSD-4.3TAHOE@, BSD 4.3 TAHOE License, SPDX License List 3.23, SPDX License List 3.25 + | BSD_Advertising_Acknowledgement -- ^ @BSD-Advertising-Acknowledgement@, BSD Advertising Acknowledgement License, SPDX License List 3.23, SPDX License List 3.25 + | BSD_Attribution_HPND_disclaimer -- ^ @BSD-Attribution-HPND-disclaimer@, BSD with Attribution and HPND disclaimer, SPDX License List 3.23, SPDX License List 3.25 + | BSD_Inferno_Nettverk -- ^ @BSD-Inferno-Nettverk@, BSD-Inferno-Nettverk, SPDX License List 3.23, SPDX License List 3.25 | BSD_Protection -- ^ @BSD-Protection@, BSD Protection License - | BSD_Source_beginning_file -- ^ @BSD-Source-beginning-file@, BSD Source Code Attribution - beginning of file variant, SPDX License List 3.23 + | BSD_Source_beginning_file -- ^ @BSD-Source-beginning-file@, BSD Source Code Attribution - beginning of file variant, SPDX License List 3.23, SPDX License List 3.25 | BSD_Source_Code -- ^ @BSD-Source-Code@, BSD Source Code Attribution - | BSD_Systemics_W3Works -- ^ @BSD-Systemics-W3Works@, Systemics W3Works BSD variant license, SPDX License List 3.23 - | BSD_Systemics -- ^ @BSD-Systemics@, Systemics BSD variant license, SPDX License List 3.23 + | BSD_Systemics_W3Works -- ^ @BSD-Systemics-W3Works@, Systemics W3Works BSD variant license, SPDX License List 3.23, SPDX License List 3.25 + | BSD_Systemics -- ^ @BSD-Systemics@, Systemics BSD variant license, SPDX License List 3.23, SPDX License List 3.25 | BSL_1_0 -- ^ @BSL-1.0@, Boost Software License 1.0 | Bzip2_1_0_5 -- ^ @bzip2-1.0.5@, bzip2 and libbzip2 License v1.0.5, SPDX License List 3.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10 - | BUSL_1_1 -- ^ @BUSL-1.1@, Business Source License 1.1, SPDX License List 3.16, SPDX License List 3.23 + | BUSL_1_1 -- ^ @BUSL-1.1@, Business Source License 1.1, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | Bzip2_1_0_6 -- ^ @bzip2-1.0.6@, bzip2 and libbzip2 License v1.0.6 - | C_UDA_1_0 -- ^ @C-UDA-1.0@, Computational Use of Data Agreement v1.0, SPDX License List 3.16, SPDX License List 3.23 - | CAL_1_0_Combined_Work_Exception -- ^ @CAL-1.0-Combined-Work-Exception@, Cryptographic Autonomy License 1.0 (Combined Work Exception), SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | CAL_1_0 -- ^ @CAL-1.0@, Cryptographic Autonomy License 1.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | Caldera_no_preamble -- ^ @Caldera-no-preamble@, Caldera License (without preamble), SPDX License List 3.23 + | C_UDA_1_0 -- ^ @C-UDA-1.0@, Computational Use of Data Agreement v1.0, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | CAL_1_0_Combined_Work_Exception -- ^ @CAL-1.0-Combined-Work-Exception@, Cryptographic Autonomy License 1.0 (Combined Work Exception), SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | CAL_1_0 -- ^ @CAL-1.0@, Cryptographic Autonomy License 1.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | Caldera_no_preamble -- ^ @Caldera-no-preamble@, Caldera License (without preamble), SPDX License List 3.23, SPDX License List 3.25 | Caldera -- ^ @Caldera@, Caldera License + | Catharon -- ^ @Catharon@, Catharon License, SPDX License List 3.25 | CATOSL_1_1 -- ^ @CATOSL-1.1@, Computer Associates Trusted Open Source License 1.1 | CC_BY_1_0 -- ^ @CC-BY-1.0@, Creative Commons Attribution 1.0 Generic | CC_BY_2_0 -- ^ @CC-BY-2.0@, Creative Commons Attribution 2.0 Generic - | CC_BY_2_5_AU -- ^ @CC-BY-2.5-AU@, Creative Commons Attribution 2.5 Australia, SPDX License List 3.16, SPDX License List 3.23 + | CC_BY_2_5_AU -- ^ @CC-BY-2.5-AU@, Creative Commons Attribution 2.5 Australia, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | CC_BY_2_5 -- ^ @CC-BY-2.5@, Creative Commons Attribution 2.5 Generic - | CC_BY_3_0_AT -- ^ @CC-BY-3.0-AT@, Creative Commons Attribution 3.0 Austria, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | CC_BY_3_0_AU -- ^ @CC-BY-3.0-AU@, Creative Commons Attribution 3.0 Australia, SPDX License List 3.23 - | CC_BY_3_0_DE -- ^ @CC-BY-3.0-DE@, Creative Commons Attribution 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23 - | CC_BY_3_0_IGO -- ^ @CC-BY-3.0-IGO@, Creative Commons Attribution 3.0 IGO, SPDX License List 3.23 - | CC_BY_3_0_NL -- ^ @CC-BY-3.0-NL@, Creative Commons Attribution 3.0 Netherlands, SPDX License List 3.16, SPDX License List 3.23 - | CC_BY_3_0_US -- ^ @CC-BY-3.0-US@, Creative Commons Attribution 3.0 United States, SPDX License List 3.16, SPDX License List 3.23 + | CC_BY_3_0_AT -- ^ @CC-BY-3.0-AT@, Creative Commons Attribution 3.0 Austria, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | CC_BY_3_0_AU -- ^ @CC-BY-3.0-AU@, Creative Commons Attribution 3.0 Australia, SPDX License List 3.23, SPDX License List 3.25 + | CC_BY_3_0_DE -- ^ @CC-BY-3.0-DE@, Creative Commons Attribution 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | CC_BY_3_0_IGO -- ^ @CC-BY-3.0-IGO@, Creative Commons Attribution 3.0 IGO, SPDX License List 3.23, SPDX License List 3.25 + | CC_BY_3_0_NL -- ^ @CC-BY-3.0-NL@, Creative Commons Attribution 3.0 Netherlands, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | CC_BY_3_0_US -- ^ @CC-BY-3.0-US@, Creative Commons Attribution 3.0 United States, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | CC_BY_3_0 -- ^ @CC-BY-3.0@, Creative Commons Attribution 3.0 Unported | CC_BY_4_0 -- ^ @CC-BY-4.0@, Creative Commons Attribution 4.0 International | CC_BY_NC_1_0 -- ^ @CC-BY-NC-1.0@, Creative Commons Attribution Non Commercial 1.0 Generic | CC_BY_NC_2_0 -- ^ @CC-BY-NC-2.0@, Creative Commons Attribution Non Commercial 2.0 Generic | CC_BY_NC_2_5 -- ^ @CC-BY-NC-2.5@, Creative Commons Attribution Non Commercial 2.5 Generic - | CC_BY_NC_3_0_DE -- ^ @CC-BY-NC-3.0-DE@, Creative Commons Attribution Non Commercial 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23 + | CC_BY_NC_3_0_DE -- ^ @CC-BY-NC-3.0-DE@, Creative Commons Attribution Non Commercial 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | CC_BY_NC_3_0 -- ^ @CC-BY-NC-3.0@, Creative Commons Attribution Non Commercial 3.0 Unported | CC_BY_NC_4_0 -- ^ @CC-BY-NC-4.0@, Creative Commons Attribution Non Commercial 4.0 International | CC_BY_NC_ND_1_0 -- ^ @CC-BY-NC-ND-1.0@, Creative Commons Attribution Non Commercial No Derivatives 1.0 Generic | CC_BY_NC_ND_2_0 -- ^ @CC-BY-NC-ND-2.0@, Creative Commons Attribution Non Commercial No Derivatives 2.0 Generic | CC_BY_NC_ND_2_5 -- ^ @CC-BY-NC-ND-2.5@, Creative Commons Attribution Non Commercial No Derivatives 2.5 Generic - | CC_BY_NC_ND_3_0_DE -- ^ @CC-BY-NC-ND-3.0-DE@, Creative Commons Attribution Non Commercial No Derivatives 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23 - | CC_BY_NC_ND_3_0_IGO -- ^ @CC-BY-NC-ND-3.0-IGO@, Creative Commons Attribution Non Commercial No Derivatives 3.0 IGO, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | CC_BY_NC_ND_3_0_DE -- ^ @CC-BY-NC-ND-3.0-DE@, Creative Commons Attribution Non Commercial No Derivatives 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | CC_BY_NC_ND_3_0_IGO -- ^ @CC-BY-NC-ND-3.0-IGO@, Creative Commons Attribution Non Commercial No Derivatives 3.0 IGO, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | CC_BY_NC_ND_3_0 -- ^ @CC-BY-NC-ND-3.0@, Creative Commons Attribution Non Commercial No Derivatives 3.0 Unported | CC_BY_NC_ND_4_0 -- ^ @CC-BY-NC-ND-4.0@, Creative Commons Attribution Non Commercial No Derivatives 4.0 International | CC_BY_NC_SA_1_0 -- ^ @CC-BY-NC-SA-1.0@, Creative Commons Attribution Non Commercial Share Alike 1.0 Generic - | CC_BY_NC_SA_2_0_DE -- ^ @CC-BY-NC-SA-2.0-DE@, Creative Commons Attribution Non Commercial Share Alike 2.0 Germany, SPDX License List 3.23 - | CC_BY_NC_SA_2_0_FR -- ^ @CC-BY-NC-SA-2.0-FR@, Creative Commons Attribution-NonCommercial-ShareAlike 2.0 France, SPDX License List 3.16, SPDX License List 3.23 - | CC_BY_NC_SA_2_0_UK -- ^ @CC-BY-NC-SA-2.0-UK@, Creative Commons Attribution Non Commercial Share Alike 2.0 England and Wales, SPDX License List 3.16, SPDX License List 3.23 + | CC_BY_NC_SA_2_0_DE -- ^ @CC-BY-NC-SA-2.0-DE@, Creative Commons Attribution Non Commercial Share Alike 2.0 Germany, SPDX License List 3.23, SPDX License List 3.25 + | CC_BY_NC_SA_2_0_FR -- ^ @CC-BY-NC-SA-2.0-FR@, Creative Commons Attribution-NonCommercial-ShareAlike 2.0 France, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | CC_BY_NC_SA_2_0_UK -- ^ @CC-BY-NC-SA-2.0-UK@, Creative Commons Attribution Non Commercial Share Alike 2.0 England and Wales, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | CC_BY_NC_SA_2_0 -- ^ @CC-BY-NC-SA-2.0@, Creative Commons Attribution Non Commercial Share Alike 2.0 Generic | CC_BY_NC_SA_2_5 -- ^ @CC-BY-NC-SA-2.5@, Creative Commons Attribution Non Commercial Share Alike 2.5 Generic - | CC_BY_NC_SA_3_0_DE -- ^ @CC-BY-NC-SA-3.0-DE@, Creative Commons Attribution Non Commercial Share Alike 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23 - | CC_BY_NC_SA_3_0_IGO -- ^ @CC-BY-NC-SA-3.0-IGO@, Creative Commons Attribution Non Commercial Share Alike 3.0 IGO, SPDX License List 3.16, SPDX License List 3.23 + | CC_BY_NC_SA_3_0_DE -- ^ @CC-BY-NC-SA-3.0-DE@, Creative Commons Attribution Non Commercial Share Alike 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | CC_BY_NC_SA_3_0_IGO -- ^ @CC-BY-NC-SA-3.0-IGO@, Creative Commons Attribution Non Commercial Share Alike 3.0 IGO, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | CC_BY_NC_SA_3_0 -- ^ @CC-BY-NC-SA-3.0@, Creative Commons Attribution Non Commercial Share Alike 3.0 Unported | CC_BY_NC_SA_4_0 -- ^ @CC-BY-NC-SA-4.0@, Creative Commons Attribution Non Commercial Share Alike 4.0 International | CC_BY_ND_1_0 -- ^ @CC-BY-ND-1.0@, Creative Commons Attribution No Derivatives 1.0 Generic | CC_BY_ND_2_0 -- ^ @CC-BY-ND-2.0@, Creative Commons Attribution No Derivatives 2.0 Generic | CC_BY_ND_2_5 -- ^ @CC-BY-ND-2.5@, Creative Commons Attribution No Derivatives 2.5 Generic - | CC_BY_ND_3_0_DE -- ^ @CC-BY-ND-3.0-DE@, Creative Commons Attribution No Derivatives 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23 + | CC_BY_ND_3_0_DE -- ^ @CC-BY-ND-3.0-DE@, Creative Commons Attribution No Derivatives 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | CC_BY_ND_3_0 -- ^ @CC-BY-ND-3.0@, Creative Commons Attribution No Derivatives 3.0 Unported | CC_BY_ND_4_0 -- ^ @CC-BY-ND-4.0@, Creative Commons Attribution No Derivatives 4.0 International | CC_BY_SA_1_0 -- ^ @CC-BY-SA-1.0@, Creative Commons Attribution Share Alike 1.0 Generic - | CC_BY_SA_2_0_UK -- ^ @CC-BY-SA-2.0-UK@, Creative Commons Attribution Share Alike 2.0 England and Wales, SPDX License List 3.16, SPDX License List 3.23 + | CC_BY_SA_2_0_UK -- ^ @CC-BY-SA-2.0-UK@, Creative Commons Attribution Share Alike 2.0 England and Wales, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | CC_BY_SA_2_0 -- ^ @CC-BY-SA-2.0@, Creative Commons Attribution Share Alike 2.0 Generic - | CC_BY_SA_2_1_JP -- ^ @CC-BY-SA-2.1-JP@, Creative Commons Attribution Share Alike 2.1 Japan, SPDX License List 3.16, SPDX License List 3.23 + | CC_BY_SA_2_1_JP -- ^ @CC-BY-SA-2.1-JP@, Creative Commons Attribution Share Alike 2.1 Japan, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | CC_BY_SA_2_5 -- ^ @CC-BY-SA-2.5@, Creative Commons Attribution Share Alike 2.5 Generic - | CC_BY_SA_3_0_AT -- ^ @CC-BY-SA-3.0-AT@, Creative Commons Attribution Share Alike 3.0 Austria, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | CC_BY_SA_3_0_DE -- ^ @CC-BY-SA-3.0-DE@, Creative Commons Attribution Share Alike 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23 - | CC_BY_SA_3_0_IGO -- ^ @CC-BY-SA-3.0-IGO@, Creative Commons Attribution-ShareAlike 3.0 IGO, SPDX License List 3.23 + | CC_BY_SA_3_0_AT -- ^ @CC-BY-SA-3.0-AT@, Creative Commons Attribution Share Alike 3.0 Austria, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | CC_BY_SA_3_0_DE -- ^ @CC-BY-SA-3.0-DE@, Creative Commons Attribution Share Alike 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | CC_BY_SA_3_0_IGO -- ^ @CC-BY-SA-3.0-IGO@, Creative Commons Attribution-ShareAlike 3.0 IGO, SPDX License List 3.23, SPDX License List 3.25 | CC_BY_SA_3_0 -- ^ @CC-BY-SA-3.0@, Creative Commons Attribution Share Alike 3.0 Unported | CC_BY_SA_4_0 -- ^ @CC-BY-SA-4.0@, Creative Commons Attribution Share Alike 4.0 International - | CC_PDDC -- ^ @CC-PDDC@, Creative Commons Public Domain Dedication and Certification, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | CC_PDDC -- ^ @CC-PDDC@, Creative Commons Public Domain Dedication and Certification, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | CC0_1_0 -- ^ @CC0-1.0@, Creative Commons Zero v1.0 Universal | CDDL_1_0 -- ^ @CDDL-1.0@, Common Development and Distribution License 1.0 | CDDL_1_1 -- ^ @CDDL-1.1@, Common Development and Distribution License 1.1 - | CDL_1_0 -- ^ @CDL-1.0@, Common Documentation License 1.0, SPDX License List 3.16, SPDX License List 3.23 + | CDL_1_0 -- ^ @CDL-1.0@, Common Documentation License 1.0, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | CDLA_Permissive_1_0 -- ^ @CDLA-Permissive-1.0@, Community Data License Agreement Permissive 1.0 - | CDLA_Permissive_2_0 -- ^ @CDLA-Permissive-2.0@, Community Data License Agreement Permissive 2.0, SPDX License List 3.16, SPDX License List 3.23 + | CDLA_Permissive_2_0 -- ^ @CDLA-Permissive-2.0@, Community Data License Agreement Permissive 2.0, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | CDLA_Sharing_1_0 -- ^ @CDLA-Sharing-1.0@, Community Data License Agreement Sharing 1.0 | CECILL_1_0 -- ^ @CECILL-1.0@, CeCILL Free Software License Agreement v1.0 | CECILL_1_1 -- ^ @CECILL-1.1@, CeCILL Free Software License Agreement v1.1 @@ -203,105 +208,108 @@ data LicenseId | CECILL_2_1 -- ^ @CECILL-2.1@, CeCILL Free Software License Agreement v2.1 | CECILL_B -- ^ @CECILL-B@, CeCILL-B Free Software License Agreement | CECILL_C -- ^ @CECILL-C@, CeCILL-C Free Software License Agreement - | CERN_OHL_1_1 -- ^ @CERN-OHL-1.1@, CERN Open Hardware Licence v1.1, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | CERN_OHL_1_2 -- ^ @CERN-OHL-1.2@, CERN Open Hardware Licence v1.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | CERN_OHL_P_2_0 -- ^ @CERN-OHL-P-2.0@, CERN Open Hardware Licence Version 2 - Permissive, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | CERN_OHL_S_2_0 -- ^ @CERN-OHL-S-2.0@, CERN Open Hardware Licence Version 2 - Strongly Reciprocal, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | CERN_OHL_W_2_0 -- ^ @CERN-OHL-W-2.0@, CERN Open Hardware Licence Version 2 - Weakly Reciprocal, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | CFITSIO -- ^ @CFITSIO@, CFITSIO License, SPDX License List 3.23 - | Check_cvs -- ^ @check-cvs@, check-cvs License, SPDX License List 3.23 - | Checkmk -- ^ @checkmk@, Checkmk License, SPDX License List 3.23 + | CERN_OHL_1_1 -- ^ @CERN-OHL-1.1@, CERN Open Hardware Licence v1.1, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | CERN_OHL_1_2 -- ^ @CERN-OHL-1.2@, CERN Open Hardware Licence v1.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | CERN_OHL_P_2_0 -- ^ @CERN-OHL-P-2.0@, CERN Open Hardware Licence Version 2 - Permissive, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | CERN_OHL_S_2_0 -- ^ @CERN-OHL-S-2.0@, CERN Open Hardware Licence Version 2 - Strongly Reciprocal, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | CERN_OHL_W_2_0 -- ^ @CERN-OHL-W-2.0@, CERN Open Hardware Licence Version 2 - Weakly Reciprocal, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | CFITSIO -- ^ @CFITSIO@, CFITSIO License, SPDX License List 3.23, SPDX License List 3.25 + | Check_cvs -- ^ @check-cvs@, check-cvs License, SPDX License List 3.23, SPDX License List 3.25 + | Checkmk -- ^ @checkmk@, Checkmk License, SPDX License List 3.23, SPDX License List 3.25 | ClArtistic -- ^ @ClArtistic@, Clarified Artistic License - | Clips -- ^ @Clips@, Clips License, SPDX License List 3.23 - | CMU_Mach_nodoc -- ^ @CMU-Mach-nodoc@, CMU Mach - no notices-in-documentation variant, SPDX License List 3.23 - | CMU_Mach -- ^ @CMU-Mach@, CMU Mach License, SPDX License List 3.23 + | Clips -- ^ @Clips@, Clips License, SPDX License List 3.23, SPDX License List 3.25 + | CMU_Mach_nodoc -- ^ @CMU-Mach-nodoc@, CMU Mach - no notices-in-documentation variant, SPDX License List 3.23, SPDX License List 3.25 + | CMU_Mach -- ^ @CMU-Mach@, CMU Mach License, SPDX License List 3.23, SPDX License List 3.25 | CNRI_Jython -- ^ @CNRI-Jython@, CNRI Jython License | CNRI_Python_GPL_Compatible -- ^ @CNRI-Python-GPL-Compatible@, CNRI Python Open Source GPL Compatible License Agreement | CNRI_Python -- ^ @CNRI-Python@, CNRI Python License - | COIL_1_0 -- ^ @COIL-1.0@, Copyfree Open Innovation License, SPDX License List 3.16, SPDX License List 3.23 - | Community_Spec_1_0 -- ^ @Community-Spec-1.0@, Community Specification License 1.0, SPDX License List 3.16, SPDX License List 3.23 + | COIL_1_0 -- ^ @COIL-1.0@, Copyfree Open Innovation License, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | Community_Spec_1_0 -- ^ @Community-Spec-1.0@, Community Specification License 1.0, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | Condor_1_1 -- ^ @Condor-1.1@, Condor Public License v1.1 - | Copyleft_next_0_3_0 -- ^ @copyleft-next-0.3.0@, copyleft-next 0.3.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | Copyleft_next_0_3_1 -- ^ @copyleft-next-0.3.1@, copyleft-next 0.3.1, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | Cornell_Lossless_JPEG -- ^ @Cornell-Lossless-JPEG@, Cornell Lossless JPEG License, SPDX License List 3.23 + | Copyleft_next_0_3_0 -- ^ @copyleft-next-0.3.0@, copyleft-next 0.3.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | Copyleft_next_0_3_1 -- ^ @copyleft-next-0.3.1@, copyleft-next 0.3.1, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | Cornell_Lossless_JPEG -- ^ @Cornell-Lossless-JPEG@, Cornell Lossless JPEG License, SPDX License List 3.23, SPDX License List 3.25 | CPAL_1_0 -- ^ @CPAL-1.0@, Common Public Attribution License 1.0 | CPL_1_0 -- ^ @CPL-1.0@, Common Public License 1.0 | CPOL_1_02 -- ^ @CPOL-1.02@, Code Project Open License 1.02 - | Cronyx -- ^ @Cronyx@, Cronyx License, SPDX License List 3.23 + | Cronyx -- ^ @Cronyx@, Cronyx License, SPDX License List 3.23, SPDX License List 3.25 | Crossword -- ^ @Crossword@, Crossword License | CrystalStacker -- ^ @CrystalStacker@, CrystalStacker License | CUA_OPL_1_0 -- ^ @CUA-OPL-1.0@, CUA Office Public License v1.0 | Cube -- ^ @Cube@, Cube License | Curl -- ^ @curl@, curl License + | Cve_tou -- ^ @cve-tou@, Common Vulnerability Enumeration ToU License, SPDX License List 3.25 | D_FSL_1_0 -- ^ @D-FSL-1.0@, Deutsche Freie Software Lizenz - | DEC_3_Clause -- ^ @DEC-3-Clause@, DEC 3-Clause License, SPDX License List 3.23 + | DEC_3_Clause -- ^ @DEC-3-Clause@, DEC 3-Clause License, SPDX License List 3.23, SPDX License List 3.25 | Diffmark -- ^ @diffmark@, diffmark license - | DL_DE_BY_2_0 -- ^ @DL-DE-BY-2.0@, Data licence Germany – attribution – version 2.0, SPDX License List 3.16, SPDX License List 3.23 - | DL_DE_ZERO_2_0 -- ^ @DL-DE-ZERO-2.0@, Data licence Germany – zero – version 2.0, SPDX License List 3.23 + | DL_DE_BY_2_0 -- ^ @DL-DE-BY-2.0@, Data licence Germany – attribution – version 2.0, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | DL_DE_ZERO_2_0 -- ^ @DL-DE-ZERO-2.0@, Data licence Germany – zero – version 2.0, SPDX License List 3.23, SPDX License List 3.25 + | DocBook_Schema -- ^ @DocBook-Schema@, DocBook Schema License, SPDX License List 3.25 + | DocBook_XML -- ^ @DocBook-XML@, DocBook XML License, SPDX License List 3.25 | DOC -- ^ @DOC@, DOC License | Dotseqn -- ^ @Dotseqn@, Dotseqn License - | DRL_1_0 -- ^ @DRL-1.0@, Detection Rule License 1.0, SPDX License List 3.16, SPDX License List 3.23 - | DRL_1_1 -- ^ @DRL-1.1@, Detection Rule License 1.1, SPDX License List 3.23 + | DRL_1_0 -- ^ @DRL-1.0@, Detection Rule License 1.0, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | DRL_1_1 -- ^ @DRL-1.1@, Detection Rule License 1.1, SPDX License List 3.23, SPDX License List 3.25 | DSDP -- ^ @DSDP@, DSDP License - | Dtoa -- ^ @dtoa@, David M. Gay dtoa License, SPDX License List 3.23 + | Dtoa -- ^ @dtoa@, David M. Gay dtoa License, SPDX License List 3.23, SPDX License List 3.25 | Dvipdfm -- ^ @dvipdfm@, dvipdfm License | ECL_1_0 -- ^ @ECL-1.0@, Educational Community License v1.0 | ECL_2_0 -- ^ @ECL-2.0@, Educational Community License v2.0 | EFL_1_0 -- ^ @EFL-1.0@, Eiffel Forum License v1.0 | EFL_2_0 -- ^ @EFL-2.0@, Eiffel Forum License v2.0 | EGenix -- ^ @eGenix@, eGenix.com Public License 1.1.0 - | Elastic_2_0 -- ^ @Elastic-2.0@, Elastic License 2.0, SPDX License List 3.16, SPDX License List 3.23 + | Elastic_2_0 -- ^ @Elastic-2.0@, Elastic License 2.0, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | Entessa -- ^ @Entessa@, Entessa Public License v1.0 - | EPICS -- ^ @EPICS@, EPICS Open License, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | EPICS -- ^ @EPICS@, EPICS Open License, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | EPL_1_0 -- ^ @EPL-1.0@, Eclipse Public License 1.0 | EPL_2_0 -- ^ @EPL-2.0@, Eclipse Public License 2.0 | ErlPL_1_1 -- ^ @ErlPL-1.1@, Erlang Public License v1.1 - | Etalab_2_0 -- ^ @etalab-2.0@, Etalab Open License 2.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Etalab_2_0 -- ^ @etalab-2.0@, Etalab Open License 2.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | EUDatagrid -- ^ @EUDatagrid@, EU DataGrid Software License | EUPL_1_0 -- ^ @EUPL-1.0@, European Union Public License 1.0 | EUPL_1_1 -- ^ @EUPL-1.1@, European Union Public License 1.1 | EUPL_1_2 -- ^ @EUPL-1.2@, European Union Public License 1.2 | Eurosym -- ^ @Eurosym@, Eurosym License | Fair -- ^ @Fair@, Fair License - | FBM -- ^ @FBM@, Fuzzy Bitmap License, SPDX License List 3.23 - | FDK_AAC -- ^ @FDK-AAC@, Fraunhofer FDK AAC Codec Library, SPDX License List 3.16, SPDX License List 3.23 - | Ferguson_Twofish -- ^ @Ferguson-Twofish@, Ferguson Twofish License, SPDX License List 3.23 + | FBM -- ^ @FBM@, Fuzzy Bitmap License, SPDX License List 3.23, SPDX License List 3.25 + | FDK_AAC -- ^ @FDK-AAC@, Fraunhofer FDK AAC Codec Library, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | Ferguson_Twofish -- ^ @Ferguson-Twofish@, Ferguson Twofish License, SPDX License List 3.23, SPDX License List 3.25 | Frameworx_1_0 -- ^ @Frameworx-1.0@, Frameworx Open License 1.0 - | FreeBSD_DOC -- ^ @FreeBSD-DOC@, FreeBSD Documentation License, SPDX License List 3.16, SPDX License List 3.23 + | FreeBSD_DOC -- ^ @FreeBSD-DOC@, FreeBSD Documentation License, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | FreeImage -- ^ @FreeImage@, FreeImage Public License v1.0 - | FSFAP_no_warranty_disclaimer -- ^ @FSFAP-no-warranty-disclaimer@, FSF All Permissive License (without Warranty), SPDX License List 3.23 + | FSFAP_no_warranty_disclaimer -- ^ @FSFAP-no-warranty-disclaimer@, FSF All Permissive License (without Warranty), SPDX License List 3.23, SPDX License List 3.25 | FSFAP -- ^ @FSFAP@, FSF All Permissive License - | FSFULLRWD -- ^ @FSFULLRWD@, FSF Unlimited License (With License Retention and Warranty Disclaimer), SPDX License List 3.23 + | FSFULLRWD -- ^ @FSFULLRWD@, FSF Unlimited License (With License Retention and Warranty Disclaimer), SPDX License List 3.23, SPDX License List 3.25 | FSFULLR -- ^ @FSFULLR@, FSF Unlimited License (with License Retention) | FSFUL -- ^ @FSFUL@, FSF Unlimited License | FTL -- ^ @FTL@, Freetype Project License - | Furuseth -- ^ @Furuseth@, Furuseth License, SPDX License List 3.23 - | Fwlw -- ^ @fwlw@, fwlw License, SPDX License List 3.23 - | GCR_docs -- ^ @GCR-docs@, Gnome GCR Documentation License, SPDX License List 3.23 - | GD -- ^ @GD@, GD License, SPDX License List 3.16, SPDX License List 3.23 - | GFDL_1_1_invariants_only -- ^ @GFDL-1.1-invariants-only@, GNU Free Documentation License v1.1 only - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | GFDL_1_1_invariants_or_later -- ^ @GFDL-1.1-invariants-or-later@, GNU Free Documentation License v1.1 or later - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | GFDL_1_1_no_invariants_only -- ^ @GFDL-1.1-no-invariants-only@, GNU Free Documentation License v1.1 only - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | GFDL_1_1_no_invariants_or_later -- ^ @GFDL-1.1-no-invariants-or-later@, GNU Free Documentation License v1.1 or later - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Furuseth -- ^ @Furuseth@, Furuseth License, SPDX License List 3.23, SPDX License List 3.25 + | Fwlw -- ^ @fwlw@, fwlw License, SPDX License List 3.23, SPDX License List 3.25 + | GCR_docs -- ^ @GCR-docs@, Gnome GCR Documentation License, SPDX License List 3.23, SPDX License List 3.25 + | GD -- ^ @GD@, GD License, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | GFDL_1_1_invariants_only -- ^ @GFDL-1.1-invariants-only@, GNU Free Documentation License v1.1 only - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | GFDL_1_1_invariants_or_later -- ^ @GFDL-1.1-invariants-or-later@, GNU Free Documentation License v1.1 or later - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | GFDL_1_1_no_invariants_only -- ^ @GFDL-1.1-no-invariants-only@, GNU Free Documentation License v1.1 only - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | GFDL_1_1_no_invariants_or_later -- ^ @GFDL-1.1-no-invariants-or-later@, GNU Free Documentation License v1.1 or later - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | GFDL_1_1_only -- ^ @GFDL-1.1-only@, GNU Free Documentation License v1.1 only | GFDL_1_1_or_later -- ^ @GFDL-1.1-or-later@, GNU Free Documentation License v1.1 or later - | GFDL_1_2_invariants_only -- ^ @GFDL-1.2-invariants-only@, GNU Free Documentation License v1.2 only - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | GFDL_1_2_invariants_or_later -- ^ @GFDL-1.2-invariants-or-later@, GNU Free Documentation License v1.2 or later - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | GFDL_1_2_no_invariants_only -- ^ @GFDL-1.2-no-invariants-only@, GNU Free Documentation License v1.2 only - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | GFDL_1_2_no_invariants_or_later -- ^ @GFDL-1.2-no-invariants-or-later@, GNU Free Documentation License v1.2 or later - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | GFDL_1_2_invariants_only -- ^ @GFDL-1.2-invariants-only@, GNU Free Documentation License v1.2 only - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | GFDL_1_2_invariants_or_later -- ^ @GFDL-1.2-invariants-or-later@, GNU Free Documentation License v1.2 or later - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | GFDL_1_2_no_invariants_only -- ^ @GFDL-1.2-no-invariants-only@, GNU Free Documentation License v1.2 only - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | GFDL_1_2_no_invariants_or_later -- ^ @GFDL-1.2-no-invariants-or-later@, GNU Free Documentation License v1.2 or later - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | GFDL_1_2_only -- ^ @GFDL-1.2-only@, GNU Free Documentation License v1.2 only | GFDL_1_2_or_later -- ^ @GFDL-1.2-or-later@, GNU Free Documentation License v1.2 or later - | GFDL_1_3_invariants_only -- ^ @GFDL-1.3-invariants-only@, GNU Free Documentation License v1.3 only - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | GFDL_1_3_invariants_or_later -- ^ @GFDL-1.3-invariants-or-later@, GNU Free Documentation License v1.3 or later - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | GFDL_1_3_no_invariants_only -- ^ @GFDL-1.3-no-invariants-only@, GNU Free Documentation License v1.3 only - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | GFDL_1_3_no_invariants_or_later -- ^ @GFDL-1.3-no-invariants-or-later@, GNU Free Documentation License v1.3 or later - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | GFDL_1_3_invariants_only -- ^ @GFDL-1.3-invariants-only@, GNU Free Documentation License v1.3 only - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | GFDL_1_3_invariants_or_later -- ^ @GFDL-1.3-invariants-or-later@, GNU Free Documentation License v1.3 or later - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | GFDL_1_3_no_invariants_only -- ^ @GFDL-1.3-no-invariants-only@, GNU Free Documentation License v1.3 only - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | GFDL_1_3_no_invariants_or_later -- ^ @GFDL-1.3-no-invariants-or-later@, GNU Free Documentation License v1.3 or later - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | GFDL_1_3_only -- ^ @GFDL-1.3-only@, GNU Free Documentation License v1.3 only | GFDL_1_3_or_later -- ^ @GFDL-1.3-or-later@, GNU Free Documentation License v1.3 or later | Giftware -- ^ @Giftware@, Giftware License | GL2PS -- ^ @GL2PS@, GL2PS License | Glide -- ^ @Glide@, 3dfx Glide License | Glulxe -- ^ @Glulxe@, Glulxe License - | GLWTPL -- ^ @GLWTPL@, Good Luck With That Public License, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | GLWTPL -- ^ @GLWTPL@, Good Luck With That Public License, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | Gnuplot -- ^ @gnuplot@, gnuplot License | GPL_1_0_only -- ^ @GPL-1.0-only@, GNU General Public License v1.0 only | GPL_1_0_or_later -- ^ @GPL-1.0-or-later@, GNU General Public License v1.0 or later @@ -309,60 +317,69 @@ data LicenseId | GPL_2_0_or_later -- ^ @GPL-2.0-or-later@, GNU General Public License v2.0 or later | GPL_3_0_only -- ^ @GPL-3.0-only@, GNU General Public License v3.0 only | GPL_3_0_or_later -- ^ @GPL-3.0-or-later@, GNU General Public License v3.0 or later - | Graphics_Gems -- ^ @Graphics-Gems@, Graphics Gems License, SPDX License List 3.23 + | Graphics_Gems -- ^ @Graphics-Gems@, Graphics Gems License, SPDX License List 3.23, SPDX License List 3.25 | GSOAP_1_3b -- ^ @gSOAP-1.3b@, gSOAP Public License v1.3b - | Gtkbook -- ^ @gtkbook@, gtkbook License, SPDX License List 3.23 + | Gtkbook -- ^ @gtkbook@, gtkbook License, SPDX License List 3.23, SPDX License List 3.25 + | Gutmann -- ^ @Gutmann@, Gutmann License, SPDX License List 3.25 | HaskellReport -- ^ @HaskellReport@, Haskell Language Report License - | Hdparm -- ^ @hdparm@, hdparm License, SPDX License List 3.23 - | Hippocratic_2_1 -- ^ @Hippocratic-2.1@, Hippocratic License 2.1, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | HP_1986 -- ^ @HP-1986@, Hewlett-Packard 1986 License, SPDX License List 3.23 - | HP_1989 -- ^ @HP-1989@, Hewlett-Packard 1989 License, SPDX License List 3.23 - | HPND_DEC -- ^ @HPND-DEC@, Historical Permission Notice and Disclaimer - DEC variant, SPDX License List 3.23 - | HPND_doc_sell -- ^ @HPND-doc-sell@, Historical Permission Notice and Disclaimer - documentation sell variant, SPDX License List 3.23 - | HPND_doc -- ^ @HPND-doc@, Historical Permission Notice and Disclaimer - documentation variant, SPDX License List 3.23 - | HPND_export_US_modify -- ^ @HPND-export-US-modify@, HPND with US Government export control warning and modification rqmt, SPDX License List 3.23 - | HPND_export_US -- ^ @HPND-export-US@, HPND with US Government export control warning, SPDX License List 3.23 - | HPND_Fenneberg_Livingston -- ^ @HPND-Fenneberg-Livingston@, Historical Permission Notice and Disclaimer - Fenneberg-Livingston variant, SPDX License List 3.23 - | HPND_INRIA_IMAG -- ^ @HPND-INRIA-IMAG@, Historical Permission Notice and Disclaimer - INRIA-IMAG variant, SPDX License List 3.23 - | HPND_Kevlin_Henney -- ^ @HPND-Kevlin-Henney@, Historical Permission Notice and Disclaimer - Kevlin Henney variant, SPDX License List 3.23 - | HPND_Markus_Kuhn -- ^ @HPND-Markus-Kuhn@, Historical Permission Notice and Disclaimer - Markus Kuhn variant, SPDX License List 3.23 - | HPND_MIT_disclaimer -- ^ @HPND-MIT-disclaimer@, Historical Permission Notice and Disclaimer with MIT disclaimer, SPDX License List 3.23 - | HPND_Pbmplus -- ^ @HPND-Pbmplus@, Historical Permission Notice and Disclaimer - Pbmplus variant, SPDX License List 3.23 - | HPND_sell_MIT_disclaimer_xserver -- ^ @HPND-sell-MIT-disclaimer-xserver@, Historical Permission Notice and Disclaimer - sell xserver variant with MIT disclaimer, SPDX License List 3.23 - | HPND_sell_regexpr -- ^ @HPND-sell-regexpr@, Historical Permission Notice and Disclaimer - sell regexpr variant, SPDX License List 3.23 - | HPND_sell_variant_MIT_disclaimer -- ^ @HPND-sell-variant-MIT-disclaimer@, HPND sell variant with MIT disclaimer, SPDX License List 3.23 - | HPND_sell_variant -- ^ @HPND-sell-variant@, Historical Permission Notice and Disclaimer - sell variant, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | HPND_UC -- ^ @HPND-UC@, Historical Permission Notice and Disclaimer - University of California variant, SPDX License List 3.23 + | Hdparm -- ^ @hdparm@, hdparm License, SPDX License List 3.23, SPDX License List 3.25 + | HIDAPI -- ^ @HIDAPI@, HIDAPI License, SPDX License List 3.25 + | Hippocratic_2_1 -- ^ @Hippocratic-2.1@, Hippocratic License 2.1, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | HP_1986 -- ^ @HP-1986@, Hewlett-Packard 1986 License, SPDX License List 3.23, SPDX License List 3.25 + | HP_1989 -- ^ @HP-1989@, Hewlett-Packard 1989 License, SPDX License List 3.23, SPDX License List 3.25 + | HPND_DEC -- ^ @HPND-DEC@, Historical Permission Notice and Disclaimer - DEC variant, SPDX License List 3.23, SPDX License List 3.25 + | HPND_doc_sell -- ^ @HPND-doc-sell@, Historical Permission Notice and Disclaimer - documentation sell variant, SPDX License List 3.23, SPDX License List 3.25 + | HPND_doc -- ^ @HPND-doc@, Historical Permission Notice and Disclaimer - documentation variant, SPDX License List 3.23, SPDX License List 3.25 + | HPND_export_US_acknowledgement -- ^ @HPND-export-US-acknowledgement@, HPND with US Government export control warning and acknowledgment, SPDX License List 3.25 + | HPND_export_US_modify -- ^ @HPND-export-US-modify@, HPND with US Government export control warning and modification rqmt, SPDX License List 3.23, SPDX License List 3.25 + | HPND_export_US -- ^ @HPND-export-US@, HPND with US Government export control warning, SPDX License List 3.23, SPDX License List 3.25 + | HPND_export2_US -- ^ @HPND-export2-US@, HPND with US Government export control and 2 disclaimers, SPDX License List 3.25 + | HPND_Fenneberg_Livingston -- ^ @HPND-Fenneberg-Livingston@, Historical Permission Notice and Disclaimer - Fenneberg-Livingston variant, SPDX License List 3.23, SPDX License List 3.25 + | HPND_INRIA_IMAG -- ^ @HPND-INRIA-IMAG@, Historical Permission Notice and Disclaimer - INRIA-IMAG variant, SPDX License List 3.23, SPDX License List 3.25 + | HPND_Intel -- ^ @HPND-Intel@, Historical Permission Notice and Disclaimer - Intel variant, SPDX License List 3.25 + | HPND_Kevlin_Henney -- ^ @HPND-Kevlin-Henney@, Historical Permission Notice and Disclaimer - Kevlin Henney variant, SPDX License List 3.23, SPDX License List 3.25 + | HPND_Markus_Kuhn -- ^ @HPND-Markus-Kuhn@, Historical Permission Notice and Disclaimer - Markus Kuhn variant, SPDX License List 3.23, SPDX License List 3.25 + | HPND_merchantability_variant -- ^ @HPND-merchantability-variant@, Historical Permission Notice and Disclaimer - merchantability variant, SPDX License List 3.25 + | HPND_MIT_disclaimer -- ^ @HPND-MIT-disclaimer@, Historical Permission Notice and Disclaimer with MIT disclaimer, SPDX License List 3.23, SPDX License List 3.25 + | HPND_Netrek -- ^ @HPND-Netrek@, Historical Permission Notice and Disclaimer - Netrek variant, SPDX License List 3.25 + | HPND_Pbmplus -- ^ @HPND-Pbmplus@, Historical Permission Notice and Disclaimer - Pbmplus variant, SPDX License List 3.23, SPDX License List 3.25 + | HPND_sell_MIT_disclaimer_xserver -- ^ @HPND-sell-MIT-disclaimer-xserver@, Historical Permission Notice and Disclaimer - sell xserver variant with MIT disclaimer, SPDX License List 3.23, SPDX License List 3.25 + | HPND_sell_regexpr -- ^ @HPND-sell-regexpr@, Historical Permission Notice and Disclaimer - sell regexpr variant, SPDX License List 3.23, SPDX License List 3.25 + | HPND_sell_variant_MIT_disclaimer_rev -- ^ @HPND-sell-variant-MIT-disclaimer-rev@, HPND sell variant with MIT disclaimer - reverse, SPDX License List 3.25 + | HPND_sell_variant_MIT_disclaimer -- ^ @HPND-sell-variant-MIT-disclaimer@, HPND sell variant with MIT disclaimer, SPDX License List 3.23, SPDX License List 3.25 + | HPND_sell_variant -- ^ @HPND-sell-variant@, Historical Permission Notice and Disclaimer - sell variant, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | HPND_UC_export_US -- ^ @HPND-UC-export-US@, Historical Permission Notice and Disclaimer - University of California, US export warning, SPDX License List 3.25 + | HPND_UC -- ^ @HPND-UC@, Historical Permission Notice and Disclaimer - University of California variant, SPDX License List 3.23, SPDX License List 3.25 | HPND -- ^ @HPND@, Historical Permission Notice and Disclaimer - | HTMLTIDY -- ^ @HTMLTIDY@, HTML Tidy License, SPDX License List 3.16, SPDX License List 3.23 + | HTMLTIDY -- ^ @HTMLTIDY@, HTML Tidy License, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | IBM_pibs -- ^ @IBM-pibs@, IBM PowerPC Initialization and Boot Software | ICU -- ^ @ICU@, ICU License - | IEC_Code_Components_EULA -- ^ @IEC-Code-Components-EULA@, IEC Code Components End-user licence agreement, SPDX License List 3.23 - | IJG_short -- ^ @IJG-short@, Independent JPEG Group License - short, SPDX License List 3.23 + | IEC_Code_Components_EULA -- ^ @IEC-Code-Components-EULA@, IEC Code Components End-user licence agreement, SPDX License List 3.23, SPDX License List 3.25 + | IJG_short -- ^ @IJG-short@, Independent JPEG Group License - short, SPDX License List 3.23, SPDX License List 3.25 | IJG -- ^ @IJG@, Independent JPEG Group License | ImageMagick -- ^ @ImageMagick@, ImageMagick License | IMatix -- ^ @iMatix@, iMatix Standard Function Library Agreement | Imlib2 -- ^ @Imlib2@, Imlib2 License | Info_ZIP -- ^ @Info-ZIP@, Info-ZIP License - | Inner_Net_2_0 -- ^ @Inner-Net-2.0@, Inner Net License v2.0, SPDX License List 3.23 + | Inner_Net_2_0 -- ^ @Inner-Net-2.0@, Inner Net License v2.0, SPDX License List 3.23, SPDX License List 3.25 | Intel_ACPI -- ^ @Intel-ACPI@, Intel ACPI Software License Agreement | Intel -- ^ @Intel@, Intel Open Source License | Interbase_1_0 -- ^ @Interbase-1.0@, Interbase Public License v1.0 | IPA -- ^ @IPA@, IPA Font License | IPL_1_0 -- ^ @IPL-1.0@, IBM Public License v1.0 - | ISC_Veillard -- ^ @ISC-Veillard@, ISC Veillard variant, SPDX License List 3.23 + | ISC_Veillard -- ^ @ISC-Veillard@, ISC Veillard variant, SPDX License List 3.23, SPDX License List 3.25 | ISC -- ^ @ISC@, ISC License - | Jam -- ^ @Jam@, Jam License, SPDX License List 3.16, SPDX License List 3.23 + | Jam -- ^ @Jam@, Jam License, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | JasPer_2_0 -- ^ @JasPer-2.0@, JasPer License - | JPL_image -- ^ @JPL-image@, JPL Image Use Policy, SPDX License List 3.23 - | JPNIC -- ^ @JPNIC@, Japan Network Information Center License, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | JPL_image -- ^ @JPL-image@, JPL Image Use Policy, SPDX License List 3.23, SPDX License List 3.25 + | JPNIC -- ^ @JPNIC@, Japan Network Information Center License, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | JSON -- ^ @JSON@, JSON License - | Kastrup -- ^ @Kastrup@, Kastrup License, SPDX License List 3.23 - | Kazlib -- ^ @Kazlib@, Kazlib License, SPDX License List 3.23 - | Knuth_CTAN -- ^ @Knuth-CTAN@, Knuth CTAN License, SPDX License List 3.23 + | Kastrup -- ^ @Kastrup@, Kastrup License, SPDX License List 3.23, SPDX License List 3.25 + | Kazlib -- ^ @Kazlib@, Kazlib License, SPDX License List 3.23, SPDX License List 3.25 + | Knuth_CTAN -- ^ @Knuth-CTAN@, Knuth CTAN License, SPDX License List 3.23, SPDX License List 3.25 | LAL_1_2 -- ^ @LAL-1.2@, Licence Art Libre 1.2 | LAL_1_3 -- ^ @LAL-1.3@, Licence Art Libre 1.3 - | Latex2e_translated_notice -- ^ @Latex2e-translated-notice@, Latex2e with translated notice permission, SPDX License List 3.23 + | Latex2e_translated_notice -- ^ @Latex2e-translated-notice@, Latex2e with translated notice permission, SPDX License List 3.23, SPDX License List 3.25 | Latex2e -- ^ @Latex2e@, Latex2e License | Leptonica -- ^ @Leptonica@, Leptonica License | LGPL_2_0_only -- ^ @LGPL-2.0-only@, GNU Library General Public License v2 only @@ -372,21 +389,21 @@ data LicenseId | LGPL_3_0_only -- ^ @LGPL-3.0-only@, GNU Lesser General Public License v3.0 only | LGPL_3_0_or_later -- ^ @LGPL-3.0-or-later@, GNU Lesser General Public License v3.0 or later | LGPLLR -- ^ @LGPLLR@, Lesser General Public License For Linguistic Resources - | Libpng_2_0 -- ^ @libpng-2.0@, PNG Reference Library version 2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Libpng_2_0 -- ^ @libpng-2.0@, PNG Reference Library version 2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | Libpng -- ^ @Libpng@, libpng License - | Libselinux_1_0 -- ^ @libselinux-1.0@, libselinux public domain notice, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Libselinux_1_0 -- ^ @libselinux-1.0@, libselinux public domain notice, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | Libtiff -- ^ @libtiff@, libtiff License - | Libutil_David_Nugent -- ^ @libutil-David-Nugent@, libutil David Nugent License, SPDX License List 3.23 + | Libutil_David_Nugent -- ^ @libutil-David-Nugent@, libutil David Nugent License, SPDX License List 3.23, SPDX License List 3.25 | LiLiQ_P_1_1 -- ^ @LiLiQ-P-1.1@, Licence Libre du Québec – Permissive version 1.1 | LiLiQ_R_1_1 -- ^ @LiLiQ-R-1.1@, Licence Libre du Québec – Réciprocité version 1.1 | LiLiQ_Rplus_1_1 -- ^ @LiLiQ-Rplus-1.1@, Licence Libre du Québec – Réciprocité forte version 1.1 - | Linux_man_pages_1_para -- ^ @Linux-man-pages-1-para@, Linux man-pages - 1 paragraph, SPDX License List 3.23 - | Linux_man_pages_copyleft_2_para -- ^ @Linux-man-pages-copyleft-2-para@, Linux man-pages Copyleft - 2 paragraphs, SPDX License List 3.23 - | Linux_man_pages_copyleft_var -- ^ @Linux-man-pages-copyleft-var@, Linux man-pages Copyleft Variant, SPDX License List 3.23 - | Linux_man_pages_copyleft -- ^ @Linux-man-pages-copyleft@, Linux man-pages Copyleft, SPDX License List 3.16, SPDX License List 3.23 - | Linux_OpenIB -- ^ @Linux-OpenIB@, Linux Kernel Variant of OpenIB.org license, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | LOOP -- ^ @LOOP@, Common Lisp LOOP License, SPDX License List 3.23 - | LPD_document -- ^ @LPD-document@, LPD Documentation License, SPDX License List 3.23 + | Linux_man_pages_1_para -- ^ @Linux-man-pages-1-para@, Linux man-pages - 1 paragraph, SPDX License List 3.23, SPDX License List 3.25 + | Linux_man_pages_copyleft_2_para -- ^ @Linux-man-pages-copyleft-2-para@, Linux man-pages Copyleft - 2 paragraphs, SPDX License List 3.23, SPDX License List 3.25 + | Linux_man_pages_copyleft_var -- ^ @Linux-man-pages-copyleft-var@, Linux man-pages Copyleft Variant, SPDX License List 3.23, SPDX License List 3.25 + | Linux_man_pages_copyleft -- ^ @Linux-man-pages-copyleft@, Linux man-pages Copyleft, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | Linux_OpenIB -- ^ @Linux-OpenIB@, Linux Kernel Variant of OpenIB.org license, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | LOOP -- ^ @LOOP@, Common Lisp LOOP License, SPDX License List 3.23, SPDX License List 3.25 + | LPD_document -- ^ @LPD-document@, LPD Documentation License, SPDX License List 3.23, SPDX License List 3.25 | LPL_1_02 -- ^ @LPL-1.02@, Lucent Public License v1.02 | LPL_1_0 -- ^ @LPL-1.0@, Lucent Public License Version 1.0 | LPPL_1_0 -- ^ @LPPL-1.0@, LaTeX Project Public License v1.0 @@ -394,66 +411,69 @@ data LicenseId | LPPL_1_2 -- ^ @LPPL-1.2@, LaTeX Project Public License v1.2 | LPPL_1_3a -- ^ @LPPL-1.3a@, LaTeX Project Public License v1.3a | LPPL_1_3c -- ^ @LPPL-1.3c@, LaTeX Project Public License v1.3c - | Lsof -- ^ @lsof@, lsof License, SPDX License List 3.23 - | Lucida_Bitmap_Fonts -- ^ @Lucida-Bitmap-Fonts@, Lucida Bitmap Fonts License, SPDX License List 3.23 - | LZMA_SDK_9_11_to_9_20 -- ^ @LZMA-SDK-9.11-to-9.20@, LZMA SDK License (versions 9.11 to 9.20), SPDX License List 3.23 - | LZMA_SDK_9_22 -- ^ @LZMA-SDK-9.22@, LZMA SDK License (versions 9.22 and beyond), SPDX License List 3.23 - | Mackerras_3_Clause_acknowledgment -- ^ @Mackerras-3-Clause-acknowledgment@, Mackerras 3-Clause - acknowledgment variant, SPDX License List 3.23 - | Mackerras_3_Clause -- ^ @Mackerras-3-Clause@, Mackerras 3-Clause License, SPDX License List 3.23 - | Magaz -- ^ @magaz@, magaz License, SPDX License List 3.23 - | Mailprio -- ^ @mailprio@, mailprio License, SPDX License List 3.23 + | Lsof -- ^ @lsof@, lsof License, SPDX License List 3.23, SPDX License List 3.25 + | Lucida_Bitmap_Fonts -- ^ @Lucida-Bitmap-Fonts@, Lucida Bitmap Fonts License, SPDX License List 3.23, SPDX License List 3.25 + | LZMA_SDK_9_11_to_9_20 -- ^ @LZMA-SDK-9.11-to-9.20@, LZMA SDK License (versions 9.11 to 9.20), SPDX License List 3.23, SPDX License List 3.25 + | LZMA_SDK_9_22 -- ^ @LZMA-SDK-9.22@, LZMA SDK License (versions 9.22 and beyond), SPDX License List 3.23, SPDX License List 3.25 + | Mackerras_3_Clause_acknowledgment -- ^ @Mackerras-3-Clause-acknowledgment@, Mackerras 3-Clause - acknowledgment variant, SPDX License List 3.23, SPDX License List 3.25 + | Mackerras_3_Clause -- ^ @Mackerras-3-Clause@, Mackerras 3-Clause License, SPDX License List 3.23, SPDX License List 3.25 + | Magaz -- ^ @magaz@, magaz License, SPDX License List 3.23, SPDX License List 3.25 + | Mailprio -- ^ @mailprio@, mailprio License, SPDX License List 3.23, SPDX License List 3.25 | MakeIndex -- ^ @MakeIndex@, MakeIndex License - | Martin_Birgmeier -- ^ @Martin-Birgmeier@, Martin Birgmeier License, SPDX License List 3.23 - | McPhee_slideshow -- ^ @McPhee-slideshow@, McPhee Slideshow License, SPDX License List 3.23 - | Metamail -- ^ @metamail@, metamail License, SPDX License List 3.23 - | Minpack -- ^ @Minpack@, Minpack License, SPDX License List 3.23 + | Martin_Birgmeier -- ^ @Martin-Birgmeier@, Martin Birgmeier License, SPDX License List 3.23, SPDX License List 3.25 + | McPhee_slideshow -- ^ @McPhee-slideshow@, McPhee Slideshow License, SPDX License List 3.23, SPDX License List 3.25 + | Metamail -- ^ @metamail@, metamail License, SPDX License List 3.23, SPDX License List 3.25 + | Minpack -- ^ @Minpack@, Minpack License, SPDX License List 3.23, SPDX License List 3.25 | MirOS -- ^ @MirOS@, The MirOS Licence - | MIT_0 -- ^ @MIT-0@, MIT No Attribution, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | MIT_0 -- ^ @MIT-0@, MIT No Attribution, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | MIT_advertising -- ^ @MIT-advertising@, Enlightenment License (e16) | MIT_CMU -- ^ @MIT-CMU@, CMU License | MIT_enna -- ^ @MIT-enna@, enna License | MIT_feh -- ^ @MIT-feh@, feh License - | MIT_Festival -- ^ @MIT-Festival@, MIT Festival Variant, SPDX License List 3.23 - | MIT_Modern_Variant -- ^ @MIT-Modern-Variant@, MIT License Modern Variant, SPDX License List 3.16, SPDX License List 3.23 - | MIT_open_group -- ^ @MIT-open-group@, MIT Open Group variant, SPDX License List 3.16, SPDX License List 3.23 - | MIT_testregex -- ^ @MIT-testregex@, MIT testregex Variant, SPDX License List 3.23 - | MIT_Wu -- ^ @MIT-Wu@, MIT Tom Wu Variant, SPDX License List 3.23 + | MIT_Festival -- ^ @MIT-Festival@, MIT Festival Variant, SPDX License List 3.23, SPDX License List 3.25 + | MIT_Khronos_old -- ^ @MIT-Khronos-old@, MIT Khronos - old variant, SPDX License List 3.25 + | MIT_Modern_Variant -- ^ @MIT-Modern-Variant@, MIT License Modern Variant, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | MIT_open_group -- ^ @MIT-open-group@, MIT Open Group variant, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | MIT_testregex -- ^ @MIT-testregex@, MIT testregex Variant, SPDX License List 3.23, SPDX License List 3.25 + | MIT_Wu -- ^ @MIT-Wu@, MIT Tom Wu Variant, SPDX License List 3.23, SPDX License List 3.25 | MITNFA -- ^ @MITNFA@, MIT +no-false-attribs license | MIT -- ^ @MIT@, MIT License - | MMIXware -- ^ @MMIXware@, MMIXware License, SPDX License List 3.23 + | MMIXware -- ^ @MMIXware@, MMIXware License, SPDX License List 3.23, SPDX License List 3.25 | Motosoto -- ^ @Motosoto@, Motosoto License - | MPEG_SSG -- ^ @MPEG-SSG@, MPEG Software Simulation, SPDX License List 3.23 - | Mpi_permissive -- ^ @mpi-permissive@, mpi Permissive License, SPDX License List 3.23 + | MPEG_SSG -- ^ @MPEG-SSG@, MPEG Software Simulation, SPDX License List 3.23, SPDX License List 3.25 + | Mpi_permissive -- ^ @mpi-permissive@, mpi Permissive License, SPDX License List 3.23, SPDX License List 3.25 | Mpich2 -- ^ @mpich2@, mpich2 License | MPL_1_0 -- ^ @MPL-1.0@, Mozilla Public License 1.0 | MPL_1_1 -- ^ @MPL-1.1@, Mozilla Public License 1.1 | MPL_2_0_no_copyleft_exception -- ^ @MPL-2.0-no-copyleft-exception@, Mozilla Public License 2.0 (no copyleft exception) | MPL_2_0 -- ^ @MPL-2.0@, Mozilla Public License 2.0 - | Mplus -- ^ @mplus@, mplus Font License, SPDX License List 3.23 - | MS_LPL -- ^ @MS-LPL@, Microsoft Limited Public License, SPDX License List 3.23 + | Mplus -- ^ @mplus@, mplus Font License, SPDX License List 3.23, SPDX License List 3.25 + | MS_LPL -- ^ @MS-LPL@, Microsoft Limited Public License, SPDX License List 3.23, SPDX License List 3.25 | MS_PL -- ^ @MS-PL@, Microsoft Public License | MS_RL -- ^ @MS-RL@, Microsoft Reciprocal License | MTLL -- ^ @MTLL@, Matrix Template Library License - | MulanPSL_1_0 -- ^ @MulanPSL-1.0@, Mulan Permissive Software License, Version 1, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | MulanPSL_2_0 -- ^ @MulanPSL-2.0@, Mulan Permissive Software License, Version 2, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | MulanPSL_1_0 -- ^ @MulanPSL-1.0@, Mulan Permissive Software License, Version 1, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | MulanPSL_2_0 -- ^ @MulanPSL-2.0@, Mulan Permissive Software License, Version 2, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | Multics -- ^ @Multics@, Multics License | Mup -- ^ @Mup@, Mup License - | NAIST_2003 -- ^ @NAIST-2003@, Nara Institute of Science and Technology License (2003), SPDX License List 3.16, SPDX License List 3.23 + | NAIST_2003 -- ^ @NAIST-2003@, Nara Institute of Science and Technology License (2003), SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | NASA_1_3 -- ^ @NASA-1.3@, NASA Open Source Agreement 1.3 | Naumen -- ^ @Naumen@, Naumen Public License | NBPL_1_0 -- ^ @NBPL-1.0@, Net Boolean Public License v1 - | NCGL_UK_2_0 -- ^ @NCGL-UK-2.0@, Non-Commercial Government Licence, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | NCBI_PD -- ^ @NCBI-PD@, NCBI Public Domain Notice, SPDX License List 3.25 + | NCGL_UK_2_0 -- ^ @NCGL-UK-2.0@, Non-Commercial Government Licence, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | NCL -- ^ @NCL@, NCL Source Code License, SPDX License List 3.25 | NCSA -- ^ @NCSA@, University of Illinois/NCSA Open Source License - | Net_SNMP -- ^ @Net-SNMP@, Net-SNMP License + | Net_SNMP -- ^ @Net-SNMP@, Net-SNMP License, SPDX License List 3.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | NetCDF -- ^ @NetCDF@, NetCDF license | Newsletr -- ^ @Newsletr@, Newsletr License | NGPL -- ^ @NGPL@, Nethack General Public License - | NICTA_1_0 -- ^ @NICTA-1.0@, NICTA Public Software License, Version 1.0, SPDX License List 3.23 - | NIST_PD_fallback -- ^ @NIST-PD-fallback@, NIST Public Domain Notice with license fallback, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | NIST_PD -- ^ @NIST-PD@, NIST Public Domain Notice, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | NIST_Software -- ^ @NIST-Software@, NIST Software License, SPDX License List 3.23 + | NICTA_1_0 -- ^ @NICTA-1.0@, NICTA Public Software License, Version 1.0, SPDX License List 3.23, SPDX License List 3.25 + | NIST_PD_fallback -- ^ @NIST-PD-fallback@, NIST Public Domain Notice with license fallback, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | NIST_PD -- ^ @NIST-PD@, NIST Public Domain Notice, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | NIST_Software -- ^ @NIST-Software@, NIST Software License, SPDX License List 3.23, SPDX License List 3.25 | NLOD_1_0 -- ^ @NLOD-1.0@, Norwegian Licence for Open Government Data (NLOD) 1.0 - | NLOD_2_0 -- ^ @NLOD-2.0@, Norwegian Licence for Open Government Data (NLOD) 2.0, SPDX License List 3.16, SPDX License List 3.23 + | NLOD_2_0 -- ^ @NLOD-2.0@, Norwegian Licence for Open Government Data (NLOD) 2.0, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | NLPL -- ^ @NLPL@, No Limit Public License | Nokia -- ^ @Nokia@, Nokia Open Source License | NOSL -- ^ @NOSL@, Netizen Open Source License @@ -462,26 +482,27 @@ data LicenseId | NPL_1_1 -- ^ @NPL-1.1@, Netscape Public License v1.1 | NPOSL_3_0 -- ^ @NPOSL-3.0@, Non-Profit Open Software License 3.0 | NRL -- ^ @NRL@, NRL License - | NTP_0 -- ^ @NTP-0@, NTP No Attribution, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | NTP_0 -- ^ @NTP-0@, NTP No Attribution, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | NTP -- ^ @NTP@, NTP License - | O_UDA_1_0 -- ^ @O-UDA-1.0@, Open Use of Data Agreement v1.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | O_UDA_1_0 -- ^ @O-UDA-1.0@, Open Use of Data Agreement v1.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | OAR -- ^ @OAR@, OAR License, SPDX License List 3.25 | OCCT_PL -- ^ @OCCT-PL@, Open CASCADE Technology Public License | OCLC_2_0 -- ^ @OCLC-2.0@, OCLC Research Public License 2.0 | ODbL_1_0 -- ^ @ODbL-1.0@, Open Data Commons Open Database License v1.0 - | ODC_By_1_0 -- ^ @ODC-By-1.0@, Open Data Commons Attribution License v1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | OFFIS -- ^ @OFFIS@, OFFIS License, SPDX License List 3.23 - | OFL_1_0_no_RFN -- ^ @OFL-1.0-no-RFN@, SIL Open Font License 1.0 with no Reserved Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | OFL_1_0_RFN -- ^ @OFL-1.0-RFN@, SIL Open Font License 1.0 with Reserved Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | ODC_By_1_0 -- ^ @ODC-By-1.0@, Open Data Commons Attribution License v1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | OFFIS -- ^ @OFFIS@, OFFIS License, SPDX License List 3.23, SPDX License List 3.25 + | OFL_1_0_no_RFN -- ^ @OFL-1.0-no-RFN@, SIL Open Font License 1.0 with no Reserved Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | OFL_1_0_RFN -- ^ @OFL-1.0-RFN@, SIL Open Font License 1.0 with Reserved Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | OFL_1_0 -- ^ @OFL-1.0@, SIL Open Font License 1.0 - | OFL_1_1_no_RFN -- ^ @OFL-1.1-no-RFN@, SIL Open Font License 1.1 with no Reserved Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | OFL_1_1_RFN -- ^ @OFL-1.1-RFN@, SIL Open Font License 1.1 with Reserved Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | OFL_1_1_no_RFN -- ^ @OFL-1.1-no-RFN@, SIL Open Font License 1.1 with no Reserved Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | OFL_1_1_RFN -- ^ @OFL-1.1-RFN@, SIL Open Font License 1.1 with Reserved Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | OFL_1_1 -- ^ @OFL-1.1@, SIL Open Font License 1.1 - | OGC_1_0 -- ^ @OGC-1.0@, OGC Software License, Version 1.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | OGDL_Taiwan_1_0 -- ^ @OGDL-Taiwan-1.0@, Taiwan Open Government Data License, version 1.0, SPDX License List 3.16, SPDX License List 3.23 - | OGL_Canada_2_0 -- ^ @OGL-Canada-2.0@, Open Government Licence - Canada, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | OGL_UK_1_0 -- ^ @OGL-UK-1.0@, Open Government Licence v1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | OGL_UK_2_0 -- ^ @OGL-UK-2.0@, Open Government Licence v2.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | OGL_UK_3_0 -- ^ @OGL-UK-3.0@, Open Government Licence v3.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | OGC_1_0 -- ^ @OGC-1.0@, OGC Software License, Version 1.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | OGDL_Taiwan_1_0 -- ^ @OGDL-Taiwan-1.0@, Taiwan Open Government Data License, version 1.0, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | OGL_Canada_2_0 -- ^ @OGL-Canada-2.0@, Open Government Licence - Canada, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | OGL_UK_1_0 -- ^ @OGL-UK-1.0@, Open Government Licence v1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | OGL_UK_2_0 -- ^ @OGL-UK-2.0@, Open Government Licence v2.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | OGL_UK_3_0 -- ^ @OGL-UK-3.0@, Open Government Licence v3.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | OGTSL -- ^ @OGTSL@, Open Group Test Suite License | OLDAP_1_1 -- ^ @OLDAP-1.1@, Open LDAP Public License v1.1 | OLDAP_1_2 -- ^ @OLDAP-1.2@, Open LDAP Public License v1.2 @@ -499,43 +520,45 @@ data LicenseId | OLDAP_2_6 -- ^ @OLDAP-2.6@, Open LDAP Public License v2.6 | OLDAP_2_7 -- ^ @OLDAP-2.7@, Open LDAP Public License v2.7 | OLDAP_2_8 -- ^ @OLDAP-2.8@, Open LDAP Public License v2.8 - | OLFL_1_3 -- ^ @OLFL-1.3@, Open Logistics Foundation License Version 1.3, SPDX License List 3.23 + | OLFL_1_3 -- ^ @OLFL-1.3@, Open Logistics Foundation License Version 1.3, SPDX License List 3.23, SPDX License List 3.25 | OML -- ^ @OML@, Open Market License - | OpenPBS_2_3 -- ^ @OpenPBS-2.3@, OpenPBS v2.3 Software License, SPDX License List 3.23 - | OpenSSL_standalone -- ^ @OpenSSL-standalone@, OpenSSL License - standalone, SPDX License List 3.23 + | OpenPBS_2_3 -- ^ @OpenPBS-2.3@, OpenPBS v2.3 Software License, SPDX License List 3.23, SPDX License List 3.25 + | OpenSSL_standalone -- ^ @OpenSSL-standalone@, OpenSSL License - standalone, SPDX License List 3.23, SPDX License List 3.25 | OpenSSL -- ^ @OpenSSL@, OpenSSL License - | OpenVision -- ^ @OpenVision@, OpenVision License, SPDX License List 3.23 + | OpenVision -- ^ @OpenVision@, OpenVision License, SPDX License List 3.23, SPDX License List 3.25 | OPL_1_0 -- ^ @OPL-1.0@, Open Public License v1.0 - | OPL_UK_3_0 -- ^ @OPL-UK-3.0@, United Kingdom Open Parliament Licence v3.0, SPDX License List 3.23 - | OPUBL_1_0 -- ^ @OPUBL-1.0@, Open Publication License v1.0, SPDX License List 3.16, SPDX License List 3.23 + | OPL_UK_3_0 -- ^ @OPL-UK-3.0@, United Kingdom Open Parliament Licence v3.0, SPDX License List 3.23, SPDX License List 3.25 + | OPUBL_1_0 -- ^ @OPUBL-1.0@, Open Publication License v1.0, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | OSET_PL_2_1 -- ^ @OSET-PL-2.1@, OSET Public License version 2.1 | OSL_1_0 -- ^ @OSL-1.0@, Open Software License 1.0 | OSL_1_1 -- ^ @OSL-1.1@, Open Software License 1.1 | OSL_2_0 -- ^ @OSL-2.0@, Open Software License 2.0 | OSL_2_1 -- ^ @OSL-2.1@, Open Software License 2.1 | OSL_3_0 -- ^ @OSL-3.0@, Open Software License 3.0 - | PADL -- ^ @PADL@, PADL License, SPDX License List 3.23 - | Parity_6_0_0 -- ^ @Parity-6.0.0@, The Parity Public License 6.0.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | Parity_7_0_0 -- ^ @Parity-7.0.0@, The Parity Public License 7.0.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | PADL -- ^ @PADL@, PADL License, SPDX License List 3.23, SPDX License List 3.25 + | Parity_6_0_0 -- ^ @Parity-6.0.0@, The Parity Public License 6.0.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | Parity_7_0_0 -- ^ @Parity-7.0.0@, The Parity Public License 7.0.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | PDDL_1_0 -- ^ @PDDL-1.0@, Open Data Commons Public Domain Dedication & License 1.0 | PHP_3_01 -- ^ @PHP-3.01@, PHP License v3.01 | PHP_3_0 -- ^ @PHP-3.0@, PHP License v3.0 - | Pixar -- ^ @Pixar@, Pixar License, SPDX License List 3.23 + | Pixar -- ^ @Pixar@, Pixar License, SPDX License List 3.23, SPDX License List 3.25 + | Pkgconf -- ^ @pkgconf@, pkgconf License, SPDX License List 3.25 | Plexus -- ^ @Plexus@, Plexus Classworlds License - | Pnmstitch -- ^ @pnmstitch@, pnmstitch License, SPDX License List 3.23 - | PolyForm_Noncommercial_1_0_0 -- ^ @PolyForm-Noncommercial-1.0.0@, PolyForm Noncommercial License 1.0.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | PolyForm_Small_Business_1_0_0 -- ^ @PolyForm-Small-Business-1.0.0@, PolyForm Small Business License 1.0.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Pnmstitch -- ^ @pnmstitch@, pnmstitch License, SPDX License List 3.23, SPDX License List 3.25 + | PolyForm_Noncommercial_1_0_0 -- ^ @PolyForm-Noncommercial-1.0.0@, PolyForm Noncommercial License 1.0.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | PolyForm_Small_Business_1_0_0 -- ^ @PolyForm-Small-Business-1.0.0@, PolyForm Small Business License 1.0.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | PostgreSQL -- ^ @PostgreSQL@, PostgreSQL License - | PSF_2_0 -- ^ @PSF-2.0@, Python Software Foundation License 2.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | PPL -- ^ @PPL@, Peer Production License, SPDX License List 3.25 + | PSF_2_0 -- ^ @PSF-2.0@, Python Software Foundation License 2.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | Psfrag -- ^ @psfrag@, psfrag License | Psutils -- ^ @psutils@, psutils License - | Python_2_0_1 -- ^ @Python-2.0.1@, Python License 2.0.1, SPDX License List 3.23 + | Python_2_0_1 -- ^ @Python-2.0.1@, Python License 2.0.1, SPDX License List 3.23, SPDX License List 3.25 | Python_2_0 -- ^ @Python-2.0@, Python License 2.0 - | Python_ldap -- ^ @python-ldap@, Python ldap License, SPDX License List 3.23 + | Python_ldap -- ^ @python-ldap@, Python ldap License, SPDX License List 3.23, SPDX License List 3.25 | Qhull -- ^ @Qhull@, Qhull License - | QPL_1_0_INRIA_2004 -- ^ @QPL-1.0-INRIA-2004@, Q Public License 1.0 - INRIA 2004 variant, SPDX License List 3.23 + | QPL_1_0_INRIA_2004 -- ^ @QPL-1.0-INRIA-2004@, Q Public License 1.0 - INRIA 2004 variant, SPDX License List 3.23, SPDX License List 3.25 | QPL_1_0 -- ^ @QPL-1.0@, Q Public License 1.0 - | Radvd -- ^ @radvd@, radvd License, SPDX License List 3.23 + | Radvd -- ^ @radvd@, radvd License, SPDX License List 3.23, SPDX License List 3.25 | Rdisc -- ^ @Rdisc@, Rdisc License | RHeCos_1_1 -- ^ @RHeCos-1.1@, Red Hat eCos Public License v1.1 | RPL_1_1 -- ^ @RPL-1.1@, Reciprocal Public License 1.1 @@ -543,100 +566,106 @@ data LicenseId | RPSL_1_0 -- ^ @RPSL-1.0@, RealNetworks Public Source License v1.0 | RSA_MD -- ^ @RSA-MD@, RSA Message-Digest License | RSCPL -- ^ @RSCPL@, Ricoh Source Code Public License + | Ruby_pty -- ^ @Ruby-pty@, Ruby pty extension license, SPDX License List 3.25 | Ruby -- ^ @Ruby@, Ruby License - | SAX_PD_2_0 -- ^ @SAX-PD-2.0@, Sax Public Domain Notice 2.0, SPDX License List 3.23 + | SAX_PD_2_0 -- ^ @SAX-PD-2.0@, Sax Public Domain Notice 2.0, SPDX License List 3.23, SPDX License List 3.25 | SAX_PD -- ^ @SAX-PD@, Sax Public Domain Notice | Saxpath -- ^ @Saxpath@, Saxpath License | SCEA -- ^ @SCEA@, SCEA Shared Source License - | SchemeReport -- ^ @SchemeReport@, Scheme Language Report License, SPDX License List 3.16, SPDX License List 3.23 - | Sendmail_8_23 -- ^ @Sendmail-8.23@, Sendmail License 8.23, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | SchemeReport -- ^ @SchemeReport@, Scheme Language Report License, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | Sendmail_8_23 -- ^ @Sendmail-8.23@, Sendmail License 8.23, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | Sendmail -- ^ @Sendmail@, Sendmail License | SGI_B_1_0 -- ^ @SGI-B-1.0@, SGI Free Software License B v1.0 | SGI_B_1_1 -- ^ @SGI-B-1.1@, SGI Free Software License B v1.1 | SGI_B_2_0 -- ^ @SGI-B-2.0@, SGI Free Software License B v2.0 - | SGI_OpenGL -- ^ @SGI-OpenGL@, SGI OpenGL License, SPDX License List 3.23 - | SGP4 -- ^ @SGP4@, SGP4 Permission Notice, SPDX License List 3.23 - | SHL_0_51 -- ^ @SHL-0.51@, Solderpad Hardware License, Version 0.51, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | SHL_0_5 -- ^ @SHL-0.5@, Solderpad Hardware License v0.5, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | SGI_OpenGL -- ^ @SGI-OpenGL@, SGI OpenGL License, SPDX License List 3.23, SPDX License List 3.25 + | SGP4 -- ^ @SGP4@, SGP4 Permission Notice, SPDX License List 3.23, SPDX License List 3.25 + | SHL_0_51 -- ^ @SHL-0.51@, Solderpad Hardware License, Version 0.51, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | SHL_0_5 -- ^ @SHL-0.5@, Solderpad Hardware License v0.5, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | SimPL_2_0 -- ^ @SimPL-2.0@, Simple Public License 2.0 | SISSL_1_2 -- ^ @SISSL-1.2@, Sun Industry Standards Source License v1.2 | SISSL -- ^ @SISSL@, Sun Industry Standards Source License v1.1 | Sleepycat -- ^ @Sleepycat@, Sleepycat License - | SL -- ^ @SL@, SL License, SPDX License List 3.23 + | SL -- ^ @SL@, SL License, SPDX License List 3.23, SPDX License List 3.25 | SMLNJ -- ^ @SMLNJ@, Standard ML of New Jersey License | SMPPL -- ^ @SMPPL@, Secure Messaging Protocol Public License | SNIA -- ^ @SNIA@, SNIA Public License 1.1 - | Snprintf -- ^ @snprintf@, snprintf License, SPDX License List 3.23 - | SoftSurfer -- ^ @softSurfer@, softSurfer License, SPDX License List 3.23 - | Soundex -- ^ @Soundex@, Soundex License, SPDX License List 3.23 + | Snprintf -- ^ @snprintf@, snprintf License, SPDX License List 3.23, SPDX License List 3.25 + | SoftSurfer -- ^ @softSurfer@, softSurfer License, SPDX License List 3.23, SPDX License List 3.25 + | Soundex -- ^ @Soundex@, Soundex License, SPDX License List 3.23, SPDX License List 3.25 | Spencer_86 -- ^ @Spencer-86@, Spencer License 86 | Spencer_94 -- ^ @Spencer-94@, Spencer License 94 | Spencer_99 -- ^ @Spencer-99@, Spencer License 99 | SPL_1_0 -- ^ @SPL-1.0@, Sun Public License v1.0 - | Ssh_keyscan -- ^ @ssh-keyscan@, ssh-keyscan License, SPDX License List 3.23 - | SSH_OpenSSH -- ^ @SSH-OpenSSH@, SSH OpenSSH license, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | SSH_short -- ^ @SSH-short@, SSH short notice, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | SSLeay_standalone -- ^ @SSLeay-standalone@, SSLeay License - standalone, SPDX License List 3.23 - | SSPL_1_0 -- ^ @SSPL-1.0@, Server Side Public License, v 1, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Ssh_keyscan -- ^ @ssh-keyscan@, ssh-keyscan License, SPDX License List 3.23, SPDX License List 3.25 + | SSH_OpenSSH -- ^ @SSH-OpenSSH@, SSH OpenSSH license, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | SSH_short -- ^ @SSH-short@, SSH short notice, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | SSLeay_standalone -- ^ @SSLeay-standalone@, SSLeay License - standalone, SPDX License List 3.23, SPDX License List 3.25 + | SSPL_1_0 -- ^ @SSPL-1.0@, Server Side Public License, v 1, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | SugarCRM_1_1_3 -- ^ @SugarCRM-1.1.3@, SugarCRM Public License v1.1.3 - | Sun_PPP -- ^ @Sun-PPP@, Sun PPP License, SPDX License List 3.23 - | SunPro -- ^ @SunPro@, SunPro License, SPDX License List 3.23 + | Sun_PPP_2000 -- ^ @Sun-PPP-2000@, Sun PPP License (2000), SPDX License List 3.25 + | Sun_PPP -- ^ @Sun-PPP@, Sun PPP License, SPDX License List 3.23, SPDX License List 3.25 + | SunPro -- ^ @SunPro@, SunPro License, SPDX License List 3.23, SPDX License List 3.25 | SWL -- ^ @SWL@, Scheme Widget Library (SWL) Software License Agreement - | Swrule -- ^ @swrule@, swrule License, SPDX License List 3.23 - | Symlinks -- ^ @Symlinks@, Symlinks License, SPDX License List 3.23 - | TAPR_OHL_1_0 -- ^ @TAPR-OHL-1.0@, TAPR Open Hardware License v1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Swrule -- ^ @swrule@, swrule License, SPDX License List 3.23, SPDX License List 3.25 + | Symlinks -- ^ @Symlinks@, Symlinks License, SPDX License List 3.23, SPDX License List 3.25 + | TAPR_OHL_1_0 -- ^ @TAPR-OHL-1.0@, TAPR Open Hardware License v1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 | TCL -- ^ @TCL@, TCL/TK License | TCP_wrappers -- ^ @TCP-wrappers@, TCP Wrappers License - | TermReadKey -- ^ @TermReadKey@, TermReadKey License, SPDX License List 3.23 - | TGPPL_1_0 -- ^ @TGPPL-1.0@, Transitive Grace Period Public Licence 1.0, SPDX License List 3.23 + | TermReadKey -- ^ @TermReadKey@, TermReadKey License, SPDX License List 3.23, SPDX License List 3.25 + | TGPPL_1_0 -- ^ @TGPPL-1.0@, Transitive Grace Period Public Licence 1.0, SPDX License List 3.23, SPDX License List 3.25 + | Threeparttable -- ^ @threeparttable@, threeparttable License, SPDX License List 3.25 | TMate -- ^ @TMate@, TMate Open Source License | TORQUE_1_1 -- ^ @TORQUE-1.1@, TORQUE v2.5+ Software License v1.1 | TOSL -- ^ @TOSL@, Trusster Open Source License - | TPDL -- ^ @TPDL@, Time::ParseDate License, SPDX License List 3.23 - | TPL_1_0 -- ^ @TPL-1.0@, THOR Public License 1.0, SPDX License List 3.23 - | TTWL -- ^ @TTWL@, Text-Tabs+Wrap License, SPDX License List 3.23 - | TTYP0 -- ^ @TTYP0@, TTYP0 License, SPDX License List 3.23 - | TU_Berlin_1_0 -- ^ @TU-Berlin-1.0@, Technische Universitaet Berlin License 1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | TU_Berlin_2_0 -- ^ @TU-Berlin-2.0@, Technische Universitaet Berlin License 2.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | UCAR -- ^ @UCAR@, UCAR License, SPDX License List 3.23 - | UCL_1_0 -- ^ @UCL-1.0@, Upstream Compatibility License v1.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 - | Ulem -- ^ @ulem@, ulem License, SPDX License List 3.23 - | UMich_Merit -- ^ @UMich-Merit@, Michigan/Merit Networks License, SPDX License List 3.23 - | Unicode_3_0 -- ^ @Unicode-3.0@, Unicode License v3, SPDX License List 3.23 + | TPDL -- ^ @TPDL@, Time::ParseDate License, SPDX License List 3.23, SPDX License List 3.25 + | TPL_1_0 -- ^ @TPL-1.0@, THOR Public License 1.0, SPDX License List 3.23, SPDX License List 3.25 + | TTWL -- ^ @TTWL@, Text-Tabs+Wrap License, SPDX License List 3.23, SPDX License List 3.25 + | TTYP0 -- ^ @TTYP0@, TTYP0 License, SPDX License List 3.23, SPDX License List 3.25 + | TU_Berlin_1_0 -- ^ @TU-Berlin-1.0@, Technische Universitaet Berlin License 1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | TU_Berlin_2_0 -- ^ @TU-Berlin-2.0@, Technische Universitaet Berlin License 2.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | Ubuntu_font_1_0 -- ^ @Ubuntu-font-1.0@, Ubuntu Font Licence v1.0, SPDX License List 3.25 + | UCAR -- ^ @UCAR@, UCAR License, SPDX License List 3.23, SPDX License List 3.25 + | UCL_1_0 -- ^ @UCL-1.0@, Upstream Compatibility License v1.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | Ulem -- ^ @ulem@, ulem License, SPDX License List 3.23, SPDX License List 3.25 + | UMich_Merit -- ^ @UMich-Merit@, Michigan/Merit Networks License, SPDX License List 3.23, SPDX License List 3.25 + | Unicode_3_0 -- ^ @Unicode-3.0@, Unicode License v3, SPDX License List 3.23, SPDX License List 3.25 | Unicode_DFS_2015 -- ^ @Unicode-DFS-2015@, Unicode License Agreement - Data Files and Software (2015) | Unicode_DFS_2016 -- ^ @Unicode-DFS-2016@, Unicode License Agreement - Data Files and Software (2016) | Unicode_TOU -- ^ @Unicode-TOU@, Unicode Terms of Use - | UnixCrypt -- ^ @UnixCrypt@, UnixCrypt License, SPDX License List 3.23 + | UnixCrypt -- ^ @UnixCrypt@, UnixCrypt License, SPDX License List 3.23, SPDX License List 3.25 | Unlicense -- ^ @Unlicense@, The Unlicense | UPL_1_0 -- ^ @UPL-1.0@, Universal Permissive License v1.0 - | URT_RLE -- ^ @URT-RLE@, Utah Raster Toolkit Run Length Encoded License, SPDX License List 3.23 + | URT_RLE -- ^ @URT-RLE@, Utah Raster Toolkit Run Length Encoded License, SPDX License List 3.23, SPDX License List 3.25 | Vim -- ^ @Vim@, Vim License | VOSTROM -- ^ @VOSTROM@, VOSTROM Public License for Open Source | VSL_1_0 -- ^ @VSL-1.0@, Vovida Software License v1.0 | W3C_19980720 -- ^ @W3C-19980720@, W3C Software Notice and License (1998-07-20) | W3C_20150513 -- ^ @W3C-20150513@, W3C Software Notice and Document License (2015-05-13) | W3C -- ^ @W3C@, W3C Software Notice and License (2002-12-31) - | W3m -- ^ @w3m@, w3m License, SPDX License List 3.23 + | W3m -- ^ @w3m@, w3m License, SPDX License List 3.23, SPDX License List 3.25 | Watcom_1_0 -- ^ @Watcom-1.0@, Sybase Open Watcom Public License 1.0 - | Widget_Workshop -- ^ @Widget-Workshop@, Widget Workshop License, SPDX License List 3.23 + | Widget_Workshop -- ^ @Widget-Workshop@, Widget Workshop License, SPDX License List 3.23, SPDX License List 3.25 | Wsuipa -- ^ @Wsuipa@, Wsuipa License | WTFPL -- ^ @WTFPL@, Do What The F*ck You Want To Public License - | X11_distribute_modifications_variant -- ^ @X11-distribute-modifications-variant@, X11 License Distribution Modification Variant, SPDX License List 3.16, SPDX License List 3.23 + | X11_distribute_modifications_variant -- ^ @X11-distribute-modifications-variant@, X11 License Distribution Modification Variant, SPDX License List 3.16, SPDX License List 3.23, SPDX License List 3.25 + | X11_swapped -- ^ @X11-swapped@, X11 swapped final paragraphs, SPDX License List 3.25 | X11 -- ^ @X11@, X11 License - | Xdebug_1_03 -- ^ @Xdebug-1.03@, Xdebug License v 1.03, SPDX License List 3.23 + | Xdebug_1_03 -- ^ @Xdebug-1.03@, Xdebug License v 1.03, SPDX License List 3.23, SPDX License List 3.25 | Xerox -- ^ @Xerox@, Xerox License - | Xfig -- ^ @Xfig@, Xfig License, SPDX License List 3.23 + | Xfig -- ^ @Xfig@, Xfig License, SPDX License List 3.23, SPDX License List 3.25 | XFree86_1_1 -- ^ @XFree86-1.1@, XFree86 License 1.1 | Xinetd -- ^ @xinetd@, xinetd License - | Xkeyboard_config_Zinoviev -- ^ @xkeyboard-config-Zinoviev@, xkeyboard-config Zinoviev License, SPDX License List 3.23 - | Xlock -- ^ @xlock@, xlock License, SPDX License List 3.23 + | Xkeyboard_config_Zinoviev -- ^ @xkeyboard-config-Zinoviev@, xkeyboard-config Zinoviev License, SPDX License List 3.23, SPDX License List 3.25 + | Xlock -- ^ @xlock@, xlock License, SPDX License List 3.23, SPDX License List 3.25 | Xnet -- ^ @Xnet@, X.Net License | Xpp -- ^ @xpp@, XPP License | XSkat -- ^ @XSkat@, XSkat License + | Xzoom -- ^ @xzoom@, xzoom License, SPDX License List 3.25 | YPL_1_0 -- ^ @YPL-1.0@, Yahoo! Public License v1.0 | YPL_1_1 -- ^ @YPL-1.1@, Yahoo! Public License v1.1 | Zed -- ^ @Zed@, Zed License - | Zeeff -- ^ @Zeeff@, Zeeff License, SPDX License List 3.23 + | Zeeff -- ^ @Zeeff@, Zeeff License, SPDX License List 3.23, SPDX License List 3.25 | Zend_2_0 -- ^ @Zend-2.0@, Zend License v2.0 | Zimbra_1_3 -- ^ @Zimbra-1.3@, Zimbra Public License v1.3 | Zimbra_1_4 -- ^ @Zimbra-1.4@, Zimbra Public License v1.4 @@ -728,6 +757,7 @@ licenseIdMigrationMessage = go where -- | License SPDX identifier, e.g. @"BSD-3-Clause"@. licenseId :: LicenseId -> String licenseId NullBSD = "0BSD" +licenseId X3D_Slicer_1_0 = "3D-Slicer-1.0" licenseId AAL = "AAL" licenseId Abstyles = "Abstyles" licenseId AdaCore_doc = "AdaCore-doc" @@ -748,12 +778,14 @@ licenseId AGPL_1_0_or_later = "AGPL-1.0-or-later" licenseId AGPL_3_0_only = "AGPL-3.0-only" licenseId AGPL_3_0_or_later = "AGPL-3.0-or-later" licenseId Aladdin = "Aladdin" +licenseId AMD_newlib = "AMD-newlib" licenseId AMDPLPA = "AMDPLPA" licenseId AML_glslang = "AML-glslang" licenseId AML = "AML" licenseId AMPAS = "AMPAS" licenseId ANTLR_PD_fallback = "ANTLR-PD-fallback" licenseId ANTLR_PD = "ANTLR-PD" +licenseId Any_OSI = "any-OSI" licenseId Apache_1_0 = "Apache-1.0" licenseId Apache_1_1 = "Apache-1.1" licenseId Apache_2_0 = "Apache-2.0" @@ -790,6 +822,7 @@ licenseId BSD_1_Clause = "BSD-1-Clause" licenseId BSD_2_Clause_FreeBSD = "BSD-2-Clause-FreeBSD" licenseId BSD_2_Clause_NetBSD = "BSD-2-Clause-NetBSD" licenseId BSD_2_Clause_Darwin = "BSD-2-Clause-Darwin" +licenseId BSD_2_Clause_first_lines = "BSD-2-Clause-first-lines" licenseId BSD_2_Clause_Patent = "BSD-2-Clause-Patent" licenseId BSD_2_Clause_Views = "BSD-2-Clause-Views" licenseId BSD_2_Clause = "BSD-2-Clause" @@ -829,6 +862,7 @@ licenseId CAL_1_0_Combined_Work_Exception = "CAL-1.0-Combined-Work-Exception" licenseId CAL_1_0 = "CAL-1.0" licenseId Caldera_no_preamble = "Caldera-no-preamble" licenseId Caldera = "Caldera" +licenseId Catharon = "Catharon" licenseId CATOSL_1_1 = "CATOSL-1.1" licenseId CC_BY_1_0 = "CC-BY-1.0" licenseId CC_BY_2_0 = "CC-BY-2.0" @@ -925,11 +959,14 @@ licenseId CrystalStacker = "CrystalStacker" licenseId CUA_OPL_1_0 = "CUA-OPL-1.0" licenseId Cube = "Cube" licenseId Curl = "curl" +licenseId Cve_tou = "cve-tou" licenseId D_FSL_1_0 = "D-FSL-1.0" licenseId DEC_3_Clause = "DEC-3-Clause" licenseId Diffmark = "diffmark" licenseId DL_DE_BY_2_0 = "DL-DE-BY-2.0" licenseId DL_DE_ZERO_2_0 = "DL-DE-ZERO-2.0" +licenseId DocBook_Schema = "DocBook-Schema" +licenseId DocBook_XML = "DocBook-XML" licenseId DOC = "DOC" licenseId Dotseqn = "Dotseqn" licenseId DRL_1_0 = "DRL-1.0" @@ -1004,26 +1041,35 @@ licenseId GPL_3_0_or_later = "GPL-3.0-or-later" licenseId Graphics_Gems = "Graphics-Gems" licenseId GSOAP_1_3b = "gSOAP-1.3b" licenseId Gtkbook = "gtkbook" +licenseId Gutmann = "Gutmann" licenseId HaskellReport = "HaskellReport" licenseId Hdparm = "hdparm" +licenseId HIDAPI = "HIDAPI" licenseId Hippocratic_2_1 = "Hippocratic-2.1" licenseId HP_1986 = "HP-1986" licenseId HP_1989 = "HP-1989" licenseId HPND_DEC = "HPND-DEC" licenseId HPND_doc_sell = "HPND-doc-sell" licenseId HPND_doc = "HPND-doc" +licenseId HPND_export_US_acknowledgement = "HPND-export-US-acknowledgement" licenseId HPND_export_US_modify = "HPND-export-US-modify" licenseId HPND_export_US = "HPND-export-US" +licenseId HPND_export2_US = "HPND-export2-US" licenseId HPND_Fenneberg_Livingston = "HPND-Fenneberg-Livingston" licenseId HPND_INRIA_IMAG = "HPND-INRIA-IMAG" +licenseId HPND_Intel = "HPND-Intel" licenseId HPND_Kevlin_Henney = "HPND-Kevlin-Henney" licenseId HPND_Markus_Kuhn = "HPND-Markus-Kuhn" +licenseId HPND_merchantability_variant = "HPND-merchantability-variant" licenseId HPND_MIT_disclaimer = "HPND-MIT-disclaimer" +licenseId HPND_Netrek = "HPND-Netrek" licenseId HPND_Pbmplus = "HPND-Pbmplus" licenseId HPND_sell_MIT_disclaimer_xserver = "HPND-sell-MIT-disclaimer-xserver" licenseId HPND_sell_regexpr = "HPND-sell-regexpr" +licenseId HPND_sell_variant_MIT_disclaimer_rev = "HPND-sell-variant-MIT-disclaimer-rev" licenseId HPND_sell_variant_MIT_disclaimer = "HPND-sell-variant-MIT-disclaimer" licenseId HPND_sell_variant = "HPND-sell-variant" +licenseId HPND_UC_export_US = "HPND-UC-export-US" licenseId HPND_UC = "HPND-UC" licenseId HPND = "HPND" licenseId HTMLTIDY = "HTMLTIDY" @@ -1106,6 +1152,7 @@ licenseId MIT_CMU = "MIT-CMU" licenseId MIT_enna = "MIT-enna" licenseId MIT_feh = "MIT-feh" licenseId MIT_Festival = "MIT-Festival" +licenseId MIT_Khronos_old = "MIT-Khronos-old" licenseId MIT_Modern_Variant = "MIT-Modern-Variant" licenseId MIT_open_group = "MIT-open-group" licenseId MIT_testregex = "MIT-testregex" @@ -1134,7 +1181,9 @@ licenseId NAIST_2003 = "NAIST-2003" licenseId NASA_1_3 = "NASA-1.3" licenseId Naumen = "Naumen" licenseId NBPL_1_0 = "NBPL-1.0" +licenseId NCBI_PD = "NCBI-PD" licenseId NCGL_UK_2_0 = "NCGL-UK-2.0" +licenseId NCL = "NCL" licenseId NCSA = "NCSA" licenseId Net_SNMP = "Net-SNMP" licenseId NetCDF = "NetCDF" @@ -1157,6 +1206,7 @@ licenseId NRL = "NRL" licenseId NTP_0 = "NTP-0" licenseId NTP = "NTP" licenseId O_UDA_1_0 = "O-UDA-1.0" +licenseId OAR = "OAR" licenseId OCCT_PL = "OCCT-PL" licenseId OCLC_2_0 = "OCLC-2.0" licenseId ODbL_1_0 = "ODbL-1.0" @@ -1213,11 +1263,13 @@ licenseId PDDL_1_0 = "PDDL-1.0" licenseId PHP_3_01 = "PHP-3.01" licenseId PHP_3_0 = "PHP-3.0" licenseId Pixar = "Pixar" +licenseId Pkgconf = "pkgconf" licenseId Plexus = "Plexus" licenseId Pnmstitch = "pnmstitch" licenseId PolyForm_Noncommercial_1_0_0 = "PolyForm-Noncommercial-1.0.0" licenseId PolyForm_Small_Business_1_0_0 = "PolyForm-Small-Business-1.0.0" licenseId PostgreSQL = "PostgreSQL" +licenseId PPL = "PPL" licenseId PSF_2_0 = "PSF-2.0" licenseId Psfrag = "psfrag" licenseId Psutils = "psutils" @@ -1235,6 +1287,7 @@ licenseId RPL_1_5 = "RPL-1.5" licenseId RPSL_1_0 = "RPSL-1.0" licenseId RSA_MD = "RSA-MD" licenseId RSCPL = "RSCPL" +licenseId Ruby_pty = "Ruby-pty" licenseId Ruby = "Ruby" licenseId SAX_PD_2_0 = "SAX-PD-2.0" licenseId SAX_PD = "SAX-PD" @@ -1271,6 +1324,7 @@ licenseId SSH_short = "SSH-short" licenseId SSLeay_standalone = "SSLeay-standalone" licenseId SSPL_1_0 = "SSPL-1.0" licenseId SugarCRM_1_1_3 = "SugarCRM-1.1.3" +licenseId Sun_PPP_2000 = "Sun-PPP-2000" licenseId Sun_PPP = "Sun-PPP" licenseId SunPro = "SunPro" licenseId SWL = "SWL" @@ -1281,6 +1335,7 @@ licenseId TCL = "TCL" licenseId TCP_wrappers = "TCP-wrappers" licenseId TermReadKey = "TermReadKey" licenseId TGPPL_1_0 = "TGPPL-1.0" +licenseId Threeparttable = "threeparttable" licenseId TMate = "TMate" licenseId TORQUE_1_1 = "TORQUE-1.1" licenseId TOSL = "TOSL" @@ -1290,6 +1345,7 @@ licenseId TTWL = "TTWL" licenseId TTYP0 = "TTYP0" licenseId TU_Berlin_1_0 = "TU-Berlin-1.0" licenseId TU_Berlin_2_0 = "TU-Berlin-2.0" +licenseId Ubuntu_font_1_0 = "Ubuntu-font-1.0" licenseId UCAR = "UCAR" licenseId UCL_1_0 = "UCL-1.0" licenseId Ulem = "ulem" @@ -1314,6 +1370,7 @@ licenseId Widget_Workshop = "Widget-Workshop" licenseId Wsuipa = "Wsuipa" licenseId WTFPL = "WTFPL" licenseId X11_distribute_modifications_variant = "X11-distribute-modifications-variant" +licenseId X11_swapped = "X11-swapped" licenseId X11 = "X11" licenseId Xdebug_1_03 = "Xdebug-1.03" licenseId Xerox = "Xerox" @@ -1325,6 +1382,7 @@ licenseId Xlock = "xlock" licenseId Xnet = "Xnet" licenseId Xpp = "xpp" licenseId XSkat = "XSkat" +licenseId Xzoom = "xzoom" licenseId YPL_1_0 = "YPL-1.0" licenseId YPL_1_1 = "YPL-1.1" licenseId Zed = "Zed" @@ -1341,6 +1399,7 @@ licenseId ZPL_2_1 = "ZPL-2.1" -- | License name, e.g. @"GNU General Public License v2.0 only"@ licenseName :: LicenseId -> String licenseName NullBSD = "BSD Zero Clause License" +licenseName X3D_Slicer_1_0 = "3D Slicer License v1.0" licenseName AAL = "Attribution Assurance License" licenseName Abstyles = "Abstyles License" licenseName AdaCore_doc = "AdaCore Doc License" @@ -1361,12 +1420,14 @@ licenseName AGPL_1_0_or_later = "Affero General Public License v1.0 or later" licenseName AGPL_3_0_only = "GNU Affero General Public License v3.0 only" licenseName AGPL_3_0_or_later = "GNU Affero General Public License v3.0 or later" licenseName Aladdin = "Aladdin Free Public License" +licenseName AMD_newlib = "AMD newlib License" licenseName AMDPLPA = "AMD's plpa_map.c License" licenseName AML_glslang = "AML glslang variant License" licenseName AML = "Apple MIT License" licenseName AMPAS = "Academy of Motion Picture Arts and Sciences BSD" licenseName ANTLR_PD_fallback = "ANTLR Software Rights Notice with license fallback" licenseName ANTLR_PD = "ANTLR Software Rights Notice" +licenseName Any_OSI = "Any OSI License" licenseName Apache_1_0 = "Apache License 1.0" licenseName Apache_1_1 = "Apache License 1.1" licenseName Apache_2_0 = "Apache License 2.0" @@ -1403,6 +1464,7 @@ licenseName BSD_1_Clause = "BSD 1-Clause License" licenseName BSD_2_Clause_FreeBSD = "BSD 2-Clause FreeBSD License" licenseName BSD_2_Clause_NetBSD = "BSD 2-Clause NetBSD License" licenseName BSD_2_Clause_Darwin = "BSD 2-Clause - Ian Darwin variant" +licenseName BSD_2_Clause_first_lines = "BSD 2-Clause - first lines requirement" licenseName BSD_2_Clause_Patent = "BSD-2-Clause Plus Patent License" licenseName BSD_2_Clause_Views = "BSD 2-Clause with views sentence" licenseName BSD_2_Clause = "BSD 2-Clause \"Simplified\" License" @@ -1442,6 +1504,7 @@ licenseName CAL_1_0_Combined_Work_Exception = "Cryptographic Autonomy License 1. licenseName CAL_1_0 = "Cryptographic Autonomy License 1.0" licenseName Caldera_no_preamble = "Caldera License (without preamble)" licenseName Caldera = "Caldera License" +licenseName Catharon = "Catharon License" licenseName CATOSL_1_1 = "Computer Associates Trusted Open Source License 1.1" licenseName CC_BY_1_0 = "Creative Commons Attribution 1.0 Generic" licenseName CC_BY_2_0 = "Creative Commons Attribution 2.0 Generic" @@ -1538,11 +1601,14 @@ licenseName CrystalStacker = "CrystalStacker License" licenseName CUA_OPL_1_0 = "CUA Office Public License v1.0" licenseName Cube = "Cube License" licenseName Curl = "curl License" +licenseName Cve_tou = "Common Vulnerability Enumeration ToU License" licenseName D_FSL_1_0 = "Deutsche Freie Software Lizenz" licenseName DEC_3_Clause = "DEC 3-Clause License" licenseName Diffmark = "diffmark license" licenseName DL_DE_BY_2_0 = "Data licence Germany \8211 attribution \8211 version 2.0" licenseName DL_DE_ZERO_2_0 = "Data licence Germany \8211 zero \8211 version 2.0" +licenseName DocBook_Schema = "DocBook Schema License" +licenseName DocBook_XML = "DocBook XML License" licenseName DOC = "DOC License" licenseName Dotseqn = "Dotseqn License" licenseName DRL_1_0 = "Detection Rule License 1.0" @@ -1617,26 +1683,35 @@ licenseName GPL_3_0_or_later = "GNU General Public License v3.0 or later" licenseName Graphics_Gems = "Graphics Gems License" licenseName GSOAP_1_3b = "gSOAP Public License v1.3b" licenseName Gtkbook = "gtkbook License" +licenseName Gutmann = "Gutmann License" licenseName HaskellReport = "Haskell Language Report License" licenseName Hdparm = "hdparm License" +licenseName HIDAPI = "HIDAPI License" licenseName Hippocratic_2_1 = "Hippocratic License 2.1" licenseName HP_1986 = "Hewlett-Packard 1986 License" licenseName HP_1989 = "Hewlett-Packard 1989 License" licenseName HPND_DEC = "Historical Permission Notice and Disclaimer - DEC variant" licenseName HPND_doc_sell = "Historical Permission Notice and Disclaimer - documentation sell variant" licenseName HPND_doc = "Historical Permission Notice and Disclaimer - documentation variant" +licenseName HPND_export_US_acknowledgement = "HPND with US Government export control warning and acknowledgment" licenseName HPND_export_US_modify = "HPND with US Government export control warning and modification rqmt" licenseName HPND_export_US = "HPND with US Government export control warning" +licenseName HPND_export2_US = "HPND with US Government export control and 2 disclaimers" licenseName HPND_Fenneberg_Livingston = "Historical Permission Notice and Disclaimer - Fenneberg-Livingston variant" licenseName HPND_INRIA_IMAG = "Historical Permission Notice and Disclaimer - INRIA-IMAG variant" +licenseName HPND_Intel = "Historical Permission Notice and Disclaimer - Intel variant" licenseName HPND_Kevlin_Henney = "Historical Permission Notice and Disclaimer - Kevlin Henney variant" licenseName HPND_Markus_Kuhn = "Historical Permission Notice and Disclaimer - Markus Kuhn variant" +licenseName HPND_merchantability_variant = "Historical Permission Notice and Disclaimer - merchantability variant" licenseName HPND_MIT_disclaimer = "Historical Permission Notice and Disclaimer with MIT disclaimer" +licenseName HPND_Netrek = "Historical Permission Notice and Disclaimer - Netrek variant" licenseName HPND_Pbmplus = "Historical Permission Notice and Disclaimer - Pbmplus variant" licenseName HPND_sell_MIT_disclaimer_xserver = "Historical Permission Notice and Disclaimer - sell xserver variant with MIT disclaimer" licenseName HPND_sell_regexpr = "Historical Permission Notice and Disclaimer - sell regexpr variant" +licenseName HPND_sell_variant_MIT_disclaimer_rev = "HPND sell variant with MIT disclaimer - reverse" licenseName HPND_sell_variant_MIT_disclaimer = "HPND sell variant with MIT disclaimer" licenseName HPND_sell_variant = "Historical Permission Notice and Disclaimer - sell variant" +licenseName HPND_UC_export_US = "Historical Permission Notice and Disclaimer - University of California, US export warning" licenseName HPND_UC = "Historical Permission Notice and Disclaimer - University of California variant" licenseName HPND = "Historical Permission Notice and Disclaimer" licenseName HTMLTIDY = "HTML Tidy License" @@ -1719,6 +1794,7 @@ licenseName MIT_CMU = "CMU License" licenseName MIT_enna = "enna License" licenseName MIT_feh = "feh License" licenseName MIT_Festival = "MIT Festival Variant" +licenseName MIT_Khronos_old = "MIT Khronos - old variant" licenseName MIT_Modern_Variant = "MIT License Modern Variant" licenseName MIT_open_group = "MIT Open Group variant" licenseName MIT_testregex = "MIT testregex Variant" @@ -1747,7 +1823,9 @@ licenseName NAIST_2003 = "Nara Institute of Science and Technology License (2003 licenseName NASA_1_3 = "NASA Open Source Agreement 1.3" licenseName Naumen = "Naumen Public License" licenseName NBPL_1_0 = "Net Boolean Public License v1" +licenseName NCBI_PD = "NCBI Public Domain Notice" licenseName NCGL_UK_2_0 = "Non-Commercial Government Licence" +licenseName NCL = "NCL Source Code License" licenseName NCSA = "University of Illinois/NCSA Open Source License" licenseName Net_SNMP = "Net-SNMP License" licenseName NetCDF = "NetCDF license" @@ -1770,6 +1848,7 @@ licenseName NRL = "NRL License" licenseName NTP_0 = "NTP No Attribution" licenseName NTP = "NTP License" licenseName O_UDA_1_0 = "Open Use of Data Agreement v1.0" +licenseName OAR = "OAR License" licenseName OCCT_PL = "Open CASCADE Technology Public License" licenseName OCLC_2_0 = "OCLC Research Public License 2.0" licenseName ODbL_1_0 = "Open Data Commons Open Database License v1.0" @@ -1826,11 +1905,13 @@ licenseName PDDL_1_0 = "Open Data Commons Public Domain Dedication & License 1.0 licenseName PHP_3_01 = "PHP License v3.01" licenseName PHP_3_0 = "PHP License v3.0" licenseName Pixar = "Pixar License" +licenseName Pkgconf = "pkgconf License" licenseName Plexus = "Plexus Classworlds License" licenseName Pnmstitch = "pnmstitch License" licenseName PolyForm_Noncommercial_1_0_0 = "PolyForm Noncommercial License 1.0.0" licenseName PolyForm_Small_Business_1_0_0 = "PolyForm Small Business License 1.0.0" licenseName PostgreSQL = "PostgreSQL License" +licenseName PPL = "Peer Production License" licenseName PSF_2_0 = "Python Software Foundation License 2.0" licenseName Psfrag = "psfrag License" licenseName Psutils = "psutils License" @@ -1848,6 +1929,7 @@ licenseName RPL_1_5 = "Reciprocal Public License 1.5" licenseName RPSL_1_0 = "RealNetworks Public Source License v1.0" licenseName RSA_MD = "RSA Message-Digest License" licenseName RSCPL = "Ricoh Source Code Public License" +licenseName Ruby_pty = "Ruby pty extension license" licenseName Ruby = "Ruby License" licenseName SAX_PD_2_0 = "Sax Public Domain Notice 2.0" licenseName SAX_PD = "Sax Public Domain Notice" @@ -1884,6 +1966,7 @@ licenseName SSH_short = "SSH short notice" licenseName SSLeay_standalone = "SSLeay License - standalone" licenseName SSPL_1_0 = "Server Side Public License, v 1" licenseName SugarCRM_1_1_3 = "SugarCRM Public License v1.1.3" +licenseName Sun_PPP_2000 = "Sun PPP License (2000)" licenseName Sun_PPP = "Sun PPP License" licenseName SunPro = "SunPro License" licenseName SWL = "Scheme Widget Library (SWL) Software License Agreement" @@ -1894,6 +1977,7 @@ licenseName TCL = "TCL/TK License" licenseName TCP_wrappers = "TCP Wrappers License" licenseName TermReadKey = "TermReadKey License" licenseName TGPPL_1_0 = "Transitive Grace Period Public Licence 1.0" +licenseName Threeparttable = "threeparttable License" licenseName TMate = "TMate Open Source License" licenseName TORQUE_1_1 = "TORQUE v2.5+ Software License v1.1" licenseName TOSL = "Trusster Open Source License" @@ -1903,6 +1987,7 @@ licenseName TTWL = "Text-Tabs+Wrap License" licenseName TTYP0 = "TTYP0 License" licenseName TU_Berlin_1_0 = "Technische Universitaet Berlin License 1.0" licenseName TU_Berlin_2_0 = "Technische Universitaet Berlin License 2.0" +licenseName Ubuntu_font_1_0 = "Ubuntu Font Licence v1.0" licenseName UCAR = "UCAR License" licenseName UCL_1_0 = "Upstream Compatibility License v1.0" licenseName Ulem = "ulem License" @@ -1927,6 +2012,7 @@ licenseName Widget_Workshop = "Widget Workshop License" licenseName Wsuipa = "Wsuipa License" licenseName WTFPL = "Do What The F*ck You Want To Public License" licenseName X11_distribute_modifications_variant = "X11 License Distribution Modification Variant" +licenseName X11_swapped = "X11 swapped final paragraphs" licenseName X11 = "X11 License" licenseName Xdebug_1_03 = "Xdebug License v 1.03" licenseName Xerox = "Xerox License" @@ -1938,6 +2024,7 @@ licenseName Xlock = "xlock License" licenseName Xnet = "X.Net License" licenseName Xpp = "XPP License" licenseName XSkat = "XSkat License" +licenseName Xzoom = "xzoom License" licenseName YPL_1_0 = "Yahoo! Public License v1.0" licenseName YPL_1_1 = "Yahoo! Public License v1.1" licenseName Zed = "Zed License" @@ -2080,6 +2167,7 @@ licenseIsOsiApproved Unicode_DFS_2016 = True licenseIsOsiApproved Unlicense = True licenseIsOsiApproved UPL_1_0 = True licenseIsOsiApproved VSL_1_0 = True +licenseIsOsiApproved W3C_20150513 = True licenseIsOsiApproved W3C = True licenseIsOsiApproved Watcom_1_0 = True licenseIsOsiApproved Xnet = True @@ -2218,6 +2306,7 @@ licenseIdList LicenseListVersion_3_0 = , BSD_2_Clause_FreeBSD , BSD_2_Clause_NetBSD , Bzip2_1_0_5 + , Net_SNMP ] ++ bulkOfLicenses licenseIdList LicenseListVersion_3_2 = @@ -2228,6 +2317,7 @@ licenseIdList LicenseListVersion_3_2 = , Bzip2_1_0_5 , Linux_OpenIB , MIT_0 + , Net_SNMP , ODC_By_1_0 , TU_Berlin_1_0 , TU_Berlin_2_0 @@ -2252,6 +2342,7 @@ licenseIdList LicenseListVersion_3_6 = , Libpng_2_0 , Linux_OpenIB , MIT_0 + , Net_SNMP , ODC_By_1_0 , OGL_UK_1_0 , OGL_UK_2_0 @@ -2295,6 +2386,7 @@ licenseIdList LicenseListVersion_3_9 = , MulanPSL_1_0 , MulanPSL_2_0 , NCGL_UK_2_0 + , Net_SNMP , NTP_0 , O_UDA_1_0 , ODC_By_1_0 @@ -2370,6 +2462,7 @@ licenseIdList LicenseListVersion_3_10 = , MulanPSL_1_0 , MulanPSL_2_0 , NCGL_UK_2_0 + , Net_SNMP , NIST_PD_fallback , NIST_PD , NTP_0 @@ -2483,6 +2576,7 @@ licenseIdList LicenseListVersion_3_16 = , MulanPSL_2_0 , NAIST_2003 , NCGL_UK_2_0 + , Net_SNMP , NIST_PD_fallback , NIST_PD , NLOD_2_0 @@ -2707,6 +2801,298 @@ licenseIdList LicenseListVersion_3_23 = , MulanPSL_2_0 , NAIST_2003 , NCGL_UK_2_0 + , Net_SNMP + , NICTA_1_0 + , NIST_PD_fallback + , NIST_PD + , NIST_Software + , NLOD_2_0 + , NTP_0 + , O_UDA_1_0 + , ODC_By_1_0 + , OFFIS + , OFL_1_0_no_RFN + , OFL_1_0_RFN + , OFL_1_1_no_RFN + , OFL_1_1_RFN + , OGC_1_0 + , OGDL_Taiwan_1_0 + , OGL_Canada_2_0 + , OGL_UK_1_0 + , OGL_UK_2_0 + , OGL_UK_3_0 + , OLFL_1_3 + , OpenPBS_2_3 + , OpenSSL_standalone + , OpenVision + , OPL_UK_3_0 + , OPUBL_1_0 + , PADL + , Parity_6_0_0 + , Parity_7_0_0 + , Pixar + , Pnmstitch + , PolyForm_Noncommercial_1_0_0 + , PolyForm_Small_Business_1_0_0 + , PSF_2_0 + , Python_2_0_1 + , Python_ldap + , QPL_1_0_INRIA_2004 + , Radvd + , SAX_PD_2_0 + , SchemeReport + , Sendmail_8_23 + , SGI_OpenGL + , SGP4 + , SHL_0_51 + , SHL_0_5 + , SL + , Snprintf + , SoftSurfer + , Soundex + , Ssh_keyscan + , SSH_OpenSSH + , SSH_short + , SSLeay_standalone + , SSPL_1_0 + , Sun_PPP + , SunPro + , Swrule + , Symlinks + , TAPR_OHL_1_0 + , TermReadKey + , TGPPL_1_0 + , TPDL + , TPL_1_0 + , TTWL + , TTYP0 + , TU_Berlin_1_0 + , TU_Berlin_2_0 + , UCAR + , UCL_1_0 + , Ulem + , UMich_Merit + , Unicode_3_0 + , UnixCrypt + , URT_RLE + , W3m + , Widget_Workshop + , X11_distribute_modifications_variant + , Xdebug_1_03 + , Xfig + , Xkeyboard_config_Zinoviev + , Xlock + , Zeeff + ] + ++ bulkOfLicenses +licenseIdList LicenseListVersion_3_25 = + [ X3D_Slicer_1_0 + , AdaCore_doc + , Adobe_Display_PostScript + , Adobe_Utopia + , AGPL_1_0_only + , AGPL_1_0_or_later + , AMD_newlib + , AML_glslang + , ANTLR_PD_fallback + , Any_OSI + , App_s2p + , Arphic_1999 + , ASWF_Digital_Assets_1_0 + , ASWF_Digital_Assets_1_1 + , Baekmuk + , Bcrypt_Solar_Designer + , Bitstream_Charter + , Bitstream_Vera + , Blessing + , BlueOak_1_0_0 + , Boehm_GC + , Brian_Gladman_2_Clause + , Brian_Gladman_3_Clause + , BSD_2_Clause_Darwin + , BSD_2_Clause_first_lines + , BSD_2_Clause_Views + , BSD_3_Clause_acpica + , BSD_3_Clause_flex + , BSD_3_Clause_HP + , BSD_3_Clause_Modification + , BSD_3_Clause_No_Military_License + , BSD_3_Clause_Open_MPI + , BSD_3_Clause_Sun + , BSD_4_Clause_Shortened + , BSD_4_3RENO + , BSD_4_3TAHOE + , BSD_Advertising_Acknowledgement + , BSD_Attribution_HPND_disclaimer + , BSD_Inferno_Nettverk + , BSD_Source_beginning_file + , BSD_Systemics_W3Works + , BSD_Systemics + , BUSL_1_1 + , C_UDA_1_0 + , CAL_1_0_Combined_Work_Exception + , CAL_1_0 + , Caldera_no_preamble + , Catharon + , CC_BY_2_5_AU + , CC_BY_3_0_AT + , CC_BY_3_0_AU + , CC_BY_3_0_DE + , CC_BY_3_0_IGO + , CC_BY_3_0_NL + , CC_BY_3_0_US + , CC_BY_NC_3_0_DE + , CC_BY_NC_ND_3_0_DE + , CC_BY_NC_ND_3_0_IGO + , CC_BY_NC_SA_2_0_DE + , CC_BY_NC_SA_2_0_FR + , CC_BY_NC_SA_2_0_UK + , CC_BY_NC_SA_3_0_DE + , CC_BY_NC_SA_3_0_IGO + , CC_BY_ND_3_0_DE + , CC_BY_SA_2_0_UK + , CC_BY_SA_2_1_JP + , CC_BY_SA_3_0_AT + , CC_BY_SA_3_0_DE + , CC_BY_SA_3_0_IGO + , CC_PDDC + , CDL_1_0 + , CDLA_Permissive_2_0 + , CERN_OHL_1_1 + , CERN_OHL_1_2 + , CERN_OHL_P_2_0 + , CERN_OHL_S_2_0 + , CERN_OHL_W_2_0 + , CFITSIO + , Check_cvs + , Checkmk + , Clips + , CMU_Mach_nodoc + , CMU_Mach + , COIL_1_0 + , Community_Spec_1_0 + , Copyleft_next_0_3_0 + , Copyleft_next_0_3_1 + , Cornell_Lossless_JPEG + , Cronyx + , Cve_tou + , DEC_3_Clause + , DL_DE_BY_2_0 + , DL_DE_ZERO_2_0 + , DocBook_Schema + , DocBook_XML + , DRL_1_0 + , DRL_1_1 + , Dtoa + , Elastic_2_0 + , EPICS + , Etalab_2_0 + , FBM + , FDK_AAC + , Ferguson_Twofish + , FreeBSD_DOC + , FSFAP_no_warranty_disclaimer + , FSFULLRWD + , Furuseth + , Fwlw + , GCR_docs + , GD + , GFDL_1_1_invariants_only + , GFDL_1_1_invariants_or_later + , GFDL_1_1_no_invariants_only + , GFDL_1_1_no_invariants_or_later + , GFDL_1_2_invariants_only + , GFDL_1_2_invariants_or_later + , GFDL_1_2_no_invariants_only + , GFDL_1_2_no_invariants_or_later + , GFDL_1_3_invariants_only + , GFDL_1_3_invariants_or_later + , GFDL_1_3_no_invariants_only + , GFDL_1_3_no_invariants_or_later + , GLWTPL + , Graphics_Gems + , Gtkbook + , Gutmann + , Hdparm + , HIDAPI + , Hippocratic_2_1 + , HP_1986 + , HP_1989 + , HPND_DEC + , HPND_doc_sell + , HPND_doc + , HPND_export_US_acknowledgement + , HPND_export_US_modify + , HPND_export_US + , HPND_export2_US + , HPND_Fenneberg_Livingston + , HPND_INRIA_IMAG + , HPND_Intel + , HPND_Kevlin_Henney + , HPND_Markus_Kuhn + , HPND_merchantability_variant + , HPND_MIT_disclaimer + , HPND_Netrek + , HPND_Pbmplus + , HPND_sell_MIT_disclaimer_xserver + , HPND_sell_regexpr + , HPND_sell_variant_MIT_disclaimer_rev + , HPND_sell_variant_MIT_disclaimer + , HPND_sell_variant + , HPND_UC_export_US + , HPND_UC + , HTMLTIDY + , IEC_Code_Components_EULA + , IJG_short + , Inner_Net_2_0 + , ISC_Veillard + , Jam + , JPL_image + , JPNIC + , Kastrup + , Kazlib + , Knuth_CTAN + , Latex2e_translated_notice + , Libpng_2_0 + , Libselinux_1_0 + , Libutil_David_Nugent + , Linux_man_pages_1_para + , Linux_man_pages_copyleft_2_para + , Linux_man_pages_copyleft_var + , Linux_man_pages_copyleft + , Linux_OpenIB + , LOOP + , LPD_document + , Lsof + , Lucida_Bitmap_Fonts + , LZMA_SDK_9_11_to_9_20 + , LZMA_SDK_9_22 + , Mackerras_3_Clause_acknowledgment + , Mackerras_3_Clause + , Magaz + , Mailprio + , Martin_Birgmeier + , McPhee_slideshow + , Metamail + , Minpack + , MIT_0 + , MIT_Festival + , MIT_Khronos_old + , MIT_Modern_Variant + , MIT_open_group + , MIT_testregex + , MIT_Wu + , MMIXware + , MPEG_SSG + , Mpi_permissive + , Mplus + , MS_LPL + , MulanPSL_1_0 + , MulanPSL_2_0 + , NAIST_2003 + , NCBI_PD + , NCGL_UK_2_0 + , NCL , NICTA_1_0 , NIST_PD_fallback , NIST_PD @@ -2714,6 +3100,7 @@ licenseIdList LicenseListVersion_3_23 = , NLOD_2_0 , NTP_0 , O_UDA_1_0 + , OAR , ODC_By_1_0 , OFFIS , OFL_1_0_no_RFN @@ -2736,14 +3123,17 @@ licenseIdList LicenseListVersion_3_23 = , Parity_6_0_0 , Parity_7_0_0 , Pixar + , Pkgconf , Pnmstitch , PolyForm_Noncommercial_1_0_0 , PolyForm_Small_Business_1_0_0 + , PPL , PSF_2_0 , Python_2_0_1 , Python_ldap , QPL_1_0_INRIA_2004 , Radvd + , Ruby_pty , SAX_PD_2_0 , SchemeReport , Sendmail_8_23 @@ -2760,6 +3150,7 @@ licenseIdList LicenseListVersion_3_23 = , SSH_short , SSLeay_standalone , SSPL_1_0 + , Sun_PPP_2000 , Sun_PPP , SunPro , Swrule @@ -2767,12 +3158,14 @@ licenseIdList LicenseListVersion_3_23 = , TAPR_OHL_1_0 , TermReadKey , TGPPL_1_0 + , Threeparttable , TPDL , TPL_1_0 , TTWL , TTYP0 , TU_Berlin_1_0 , TU_Berlin_2_0 + , Ubuntu_font_1_0 , UCAR , UCL_1_0 , Ulem @@ -2783,10 +3176,12 @@ licenseIdList LicenseListVersion_3_23 = , W3m , Widget_Workshop , X11_distribute_modifications_variant + , X11_swapped , Xdebug_1_03 , Xfig , Xkeyboard_config_Zinoviev , Xlock + , Xzoom , Zeeff ] ++ bulkOfLicenses @@ -2800,6 +3195,7 @@ mkLicenseId LicenseListVersion_3_9 s = Map.lookup s stringLookup_3_9 mkLicenseId LicenseListVersion_3_10 s = Map.lookup s stringLookup_3_10 mkLicenseId LicenseListVersion_3_16 s = Map.lookup s stringLookup_3_16 mkLicenseId LicenseListVersion_3_23 s = Map.lookup s stringLookup_3_23 +mkLicenseId LicenseListVersion_3_25 s = Map.lookup s stringLookup_3_25 stringLookup_3_0 :: Map String LicenseId stringLookup_3_0 = Map.fromList $ map (\i -> (licenseId i, i)) $ @@ -2829,6 +3225,10 @@ stringLookup_3_23 :: Map String LicenseId stringLookup_3_23 = Map.fromList $ map (\i -> (licenseId i, i)) $ licenseIdList LicenseListVersion_3_23 +stringLookup_3_25 :: Map String LicenseId +stringLookup_3_25 = Map.fromList $ map (\i -> (licenseId i, i)) $ + licenseIdList LicenseListVersion_3_25 + -- | Licenses in all SPDX License lists bulkOfLicenses :: [LicenseId] bulkOfLicenses = @@ -3050,7 +3450,6 @@ bulkOfLicenses = , Naumen , NBPL_1_0 , NCSA - , Net_SNMP , NetCDF , Newsletr , NGPL diff --git a/Cabal-syntax/src/Distribution/SPDX/LicenseListVersion.hs b/Cabal-syntax/src/Distribution/SPDX/LicenseListVersion.hs index 88280ca56f9..cf12323d275 100644 --- a/Cabal-syntax/src/Distribution/SPDX/LicenseListVersion.hs +++ b/Cabal-syntax/src/Distribution/SPDX/LicenseListVersion.hs @@ -14,10 +14,11 @@ data LicenseListVersion | LicenseListVersion_3_10 | LicenseListVersion_3_16 | LicenseListVersion_3_23 + | LicenseListVersion_3_25 deriving (Eq, Ord, Show, Enum, Bounded) cabalSpecVersionToSPDXListVersion :: CabalSpecVersion -> LicenseListVersion -cabalSpecVersionToSPDXListVersion CabalSpecV3_14 = LicenseListVersion_3_23 +cabalSpecVersionToSPDXListVersion CabalSpecV3_14 = LicenseListVersion_3_25 cabalSpecVersionToSPDXListVersion CabalSpecV3_12 = LicenseListVersion_3_23 cabalSpecVersionToSPDXListVersion CabalSpecV3_8 = LicenseListVersion_3_16 cabalSpecVersionToSPDXListVersion CabalSpecV3_6 = LicenseListVersion_3_10 diff --git a/Makefile b/Makefile index 835c73b8ff9..4fd3d14c291 100644 --- a/Makefile +++ b/Makefile @@ -52,7 +52,7 @@ SPDX_EXCEPTION_HS:=Cabal-syntax/src/Distribution/SPDX/LicenseExceptionId.hs .PHONY: spdx spdx : $(SPDX_LICENSE_HS) $(SPDX_EXCEPTION_HS) -SPDX_LICENSE_VERSIONS:=3.0 3.2 3.6 3.9 3.10 3.16 3.23 +SPDX_LICENSE_VERSIONS:=3.0 3.2 3.6 3.9 3.10 3.16 3.23 3.25 $(SPDX_LICENSE_HS) : templates/SPDX.LicenseId.template.hs cabal-dev-scripts/src/GenUtils.hs cabal-dev-scripts/src/GenSPDX.hs license-list-data/licenses-3.0.json license-list-data/licenses-3.2.json cabal run --builddir=dist-newstyle-meta --project-file=cabal.meta.project gen-spdx -- templates/SPDX.LicenseId.template.hs $(SPDX_LICENSE_VERSIONS:%=license-list-data/licenses-%.json) $(SPDX_LICENSE_HS) diff --git a/cabal-dev-scripts/src/GenSPDX.hs b/cabal-dev-scripts/src/GenSPDX.hs index adb3276a1bd..083dbf7c951 100644 --- a/cabal-dev-scripts/src/GenSPDX.hs +++ b/cabal-dev-scripts/src/GenSPDX.hs @@ -36,6 +36,7 @@ main = generate =<< O.execParser opts where <*> licenses "3.10" <*> licenses "3.16" <*> licenses "3.23" + <*> licenses "3.25" template = O.strArgument $ mconcat [ O.metavar "SPDX.LicenseId.template.hs" diff --git a/cabal-dev-scripts/src/GenSPDXExc.hs b/cabal-dev-scripts/src/GenSPDXExc.hs index c85438a828b..a9a08717818 100644 --- a/cabal-dev-scripts/src/GenSPDXExc.hs +++ b/cabal-dev-scripts/src/GenSPDXExc.hs @@ -35,6 +35,7 @@ main = generate =<< O.execParser opts where <*> licenses "3.10" <*> licenses "3.16" <*> licenses "3.23" + <*> licenses "3.25" template = O.strArgument $ mconcat [ O.metavar "SPDX.LicenseExceptionId.template.hs" diff --git a/cabal-dev-scripts/src/GenUtils.hs b/cabal-dev-scripts/src/GenUtils.hs index 7d7b39c2add..f64388463da 100644 --- a/cabal-dev-scripts/src/GenUtils.hs +++ b/cabal-dev-scripts/src/GenUtils.hs @@ -33,12 +33,14 @@ data SPDXLicenseListVersion | SPDXLicenseListVersion_3_10 | SPDXLicenseListVersion_3_16 | SPDXLicenseListVersion_3_23 + | SPDXLicenseListVersion_3_25 deriving (Eq, Ord, Show, Enum, Bounded) allVers :: Set.Set SPDXLicenseListVersion allVers = Set.fromList [minBound .. maxBound] prettyVer :: SPDXLicenseListVersion -> Text +prettyVer SPDXLicenseListVersion_3_25 = "SPDX License List 3.25" prettyVer SPDXLicenseListVersion_3_23 = "SPDX License List 3.23" prettyVer SPDXLicenseListVersion_3_16 = "SPDX License List 3.16" prettyVer SPDXLicenseListVersion_3_10 = "SPDX License List 3.10" @@ -48,6 +50,7 @@ prettyVer SPDXLicenseListVersion_3_2 = "SPDX License List 3.2" prettyVer SPDXLicenseListVersion_3_0 = "SPDX License List 3.0" suffixVer :: SPDXLicenseListVersion -> String +suffixVer SPDXLicenseListVersion_3_25 = "_3_25" suffixVer SPDXLicenseListVersion_3_23 = "_3_23" suffixVer SPDXLicenseListVersion_3_16 = "_3_16" suffixVer SPDXLicenseListVersion_3_10 = "_3_10" @@ -60,7 +63,7 @@ suffixVer SPDXLicenseListVersion_3_0 = "_3_0" -- Per version ------------------------------------------------------------------------------- -data PerV a = PerV a a a a a a a +data PerV a = PerV a a a a a a a a deriving (Show, Functor, Foldable, Traversable) class Functor f => Representable i f | f -> i where @@ -68,13 +71,14 @@ class Functor f => Representable i f | f -> i where tabulate :: (i -> a) -> f a instance Representable SPDXLicenseListVersion PerV where - index SPDXLicenseListVersion_3_0 (PerV x _ _ _ _ _ _) = x - index SPDXLicenseListVersion_3_2 (PerV _ x _ _ _ _ _) = x - index SPDXLicenseListVersion_3_6 (PerV _ _ x _ _ _ _) = x - index SPDXLicenseListVersion_3_9 (PerV _ _ _ x _ _ _) = x - index SPDXLicenseListVersion_3_10 (PerV _ _ _ _ x _ _) = x - index SPDXLicenseListVersion_3_16 (PerV _ _ _ _ _ x _) = x - index SPDXLicenseListVersion_3_23 (PerV _ _ _ _ _ _ x) = x + index SPDXLicenseListVersion_3_0 (PerV x _ _ _ _ _ _ _) = x + index SPDXLicenseListVersion_3_2 (PerV _ x _ _ _ _ _ _) = x + index SPDXLicenseListVersion_3_6 (PerV _ _ x _ _ _ _ _) = x + index SPDXLicenseListVersion_3_9 (PerV _ _ _ x _ _ _ _) = x + index SPDXLicenseListVersion_3_10 (PerV _ _ _ _ x _ _ _) = x + index SPDXLicenseListVersion_3_16 (PerV _ _ _ _ _ x _ _) = x + index SPDXLicenseListVersion_3_23 (PerV _ _ _ _ _ _ x _) = x + index SPDXLicenseListVersion_3_25 (PerV _ _ _ _ _ _ _ x) = x tabulate f = PerV (f SPDXLicenseListVersion_3_0) @@ -84,6 +88,7 @@ instance Representable SPDXLicenseListVersion PerV where (f SPDXLicenseListVersion_3_10) (f SPDXLicenseListVersion_3_16) (f SPDXLicenseListVersion_3_23) + (f SPDXLicenseListVersion_3_25) ------------------------------------------------------------------------------- -- Sorting @@ -162,6 +167,7 @@ toConstructorName t = t special :: Text -> Text special "0BSD" = "NullBSD" special "389_exception" = "DS389_exception" + special "3D_Slicer_1_0" = "X3D_Slicer_1_0" special u = u mkList :: [Text] -> Text diff --git a/doc/file-format-changelog.rst b/doc/file-format-changelog.rst index e57eb2508fc..174cb3c3189 100644 --- a/doc/file-format-changelog.rst +++ b/doc/file-format-changelog.rst @@ -25,6 +25,8 @@ relative to the respective preceding *published* version. * Added field ``extra-files`` for specifying extra files to be included in ``sdist`` without adding any other semantics (cf. ``extra-source-files`` is tracked by ``cabal build``). +* License fields use identifiers from SPDX License List version + ``3.25 2024-08-19``. ``cabal-version: 3.12`` ----------------------- diff --git a/license-list-data/exceptions-3.25.json b/license-list-data/exceptions-3.25.json new file mode 100644 index 00000000000..9d20ee4866a --- /dev/null +++ b/license-list-data/exceptions-3.25.json @@ -0,0 +1,836 @@ +{ + "licenseListVersion": "3.25.0", + "exceptions": [ + { + "reference": "./389-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./389-exception.html", + "referenceNumber": 53, + "name": "389 Directory Server Exception", + "licenseExceptionId": "389-exception", + "seeAlso": [ + "http://directory.fedoraproject.org/wiki/GPL_Exception_License_Text", + "https://web.archive.org/web/20080828121337/http://directory.fedoraproject.org/wiki/GPL_Exception_License_Text" + ] + }, + { + "reference": "./Asterisk-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Asterisk-exception.html", + "referenceNumber": 60, + "name": "Asterisk exception", + "licenseExceptionId": "Asterisk-exception", + "seeAlso": [ + "https://github.com/asterisk/libpri/blob/7f91151e6bd10957c746c031c1f4a030e8146e9a/pri.c#L22", + "https://github.com/asterisk/libss7/blob/03e81bcd0d28ff25d4c77c78351ddadc82ff5c3f/ss7.c#L24" + ] + }, + { + "reference": "./Asterisk-linking-protocols-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Asterisk-linking-protocols-exception.html", + "referenceNumber": 24, + "name": "Asterisk linking protocols exception", + "licenseExceptionId": "Asterisk-linking-protocols-exception", + "seeAlso": [ + "https://github.com/asterisk/asterisk/blob/115d7c01e32ccf4566a99e9d74e2b88830985a0b/LICENSE#L27" + ] + }, + { + "reference": "./Autoconf-exception-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Autoconf-exception-2.0.html", + "referenceNumber": 72, + "name": "Autoconf exception 2.0", + "licenseExceptionId": "Autoconf-exception-2.0", + "seeAlso": [ + "http://ac-archive.sourceforge.net/doc/copyright.html", + "http://ftp.gnu.org/gnu/autoconf/autoconf-2.59.tar.gz" + ] + }, + { + "reference": "./Autoconf-exception-3.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Autoconf-exception-3.0.html", + "referenceNumber": 17, + "name": "Autoconf exception 3.0", + "licenseExceptionId": "Autoconf-exception-3.0", + "seeAlso": [ + "http://www.gnu.org/licenses/autoconf-exception-3.0.html" + ] + }, + { + "reference": "./Autoconf-exception-generic.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Autoconf-exception-generic.html", + "referenceNumber": 48, + "name": "Autoconf generic exception", + "licenseExceptionId": "Autoconf-exception-generic", + "seeAlso": [ + "https://launchpad.net/ubuntu/precise/+source/xmltooling/+copyright", + "https://tracker.debian.org/media/packages/s/sipwitch/copyright-1.9.15-3", + "https://opensource.apple.com/source/launchd/launchd-258.1/launchd/compile.auto.html", + "https://git.savannah.gnu.org/gitweb/?p\u003dgnulib.git;a\u003dblob;f\u003dgnulib-tool;h\u003d029a8cf377ad8d8f2d9e54061bf2f20496ad2eef;hb\u003d73c74ba0197e6566da6882c87b1adee63e24d75c#l407" + ] + }, + { + "reference": "./Autoconf-exception-generic-3.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Autoconf-exception-generic-3.0.html", + "referenceNumber": 64, + "name": "Autoconf generic exception for GPL-3.0", + "licenseExceptionId": "Autoconf-exception-generic-3.0", + "seeAlso": [ + "https://src.fedoraproject.org/rpms/redhat-rpm-config/blob/rawhide/f/config.guess" + ] + }, + { + "reference": "./Autoconf-exception-macro.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Autoconf-exception-macro.html", + "referenceNumber": 51, + "name": "Autoconf macro exception", + "licenseExceptionId": "Autoconf-exception-macro", + "seeAlso": [ + "https://github.com/freedesktop/xorg-macros/blob/39f07f7db58ebbf3dcb64a2bf9098ed5cf3d1223/xorg-macros.m4.in", + "https://www.gnu.org/software/autoconf-archive/ax_pthread.html", + "https://launchpad.net/ubuntu/precise/+source/xmltooling/+copyright" + ] + }, + { + "reference": "./Bison-exception-1.24.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Bison-exception-1.24.html", + "referenceNumber": 59, + "name": "Bison exception 1.24", + "licenseExceptionId": "Bison-exception-1.24", + "seeAlso": [ + "https://github.com/arineng/rwhoisd/blob/master/rwhoisd/mkdb/y.tab.c#L180" + ] + }, + { + "reference": "./Bison-exception-2.2.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Bison-exception-2.2.html", + "referenceNumber": 21, + "name": "Bison exception 2.2", + "licenseExceptionId": "Bison-exception-2.2", + "seeAlso": [ + "http://git.savannah.gnu.org/cgit/bison.git/tree/data/yacc.c?id\u003d193d7c7054ba7197b0789e14965b739162319b5e#n141" + ] + }, + { + "reference": "./Bootloader-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Bootloader-exception.html", + "referenceNumber": 40, + "name": "Bootloader Distribution Exception", + "licenseExceptionId": "Bootloader-exception", + "seeAlso": [ + "https://github.com/pyinstaller/pyinstaller/blob/develop/COPYING.txt" + ] + }, + { + "reference": "./Classpath-exception-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Classpath-exception-2.0.html", + "referenceNumber": 34, + "name": "Classpath exception 2.0", + "licenseExceptionId": "Classpath-exception-2.0", + "seeAlso": [ + "http://www.gnu.org/software/classpath/license.html", + "https://fedoraproject.org/wiki/Licensing/GPL_Classpath_Exception" + ] + }, + { + "reference": "./CLISP-exception-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./CLISP-exception-2.0.html", + "referenceNumber": 71, + "name": "CLISP exception 2.0", + "licenseExceptionId": "CLISP-exception-2.0", + "seeAlso": [ + "http://sourceforge.net/p/clisp/clisp/ci/default/tree/COPYRIGHT" + ] + }, + { + "reference": "./cryptsetup-OpenSSL-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./cryptsetup-OpenSSL-exception.html", + "referenceNumber": 5, + "name": "cryptsetup OpenSSL exception", + "licenseExceptionId": "cryptsetup-OpenSSL-exception", + "seeAlso": [ + "https://gitlab.com/cryptsetup/cryptsetup/-/blob/main/COPYING", + "https://gitlab.nic.cz/datovka/datovka/-/blob/develop/COPYING", + "https://github.com/nbs-system/naxsi/blob/951123ad456bdf5ac94e8d8819342fe3d49bc002/naxsi_src/naxsi_raw.c", + "http://web.mit.edu/jgross/arch/amd64_deb60/bin/mosh", + "https://sourceforge.net/p/linux-ima/ima-evm-utils/ci/master/tree/src/evmctl.c#l30" + ] + }, + { + "reference": "./DigiRule-FOSS-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./DigiRule-FOSS-exception.html", + "referenceNumber": 66, + "name": "DigiRule FOSS License Exception", + "licenseExceptionId": "DigiRule-FOSS-exception", + "seeAlso": [ + "http://www.digirulesolutions.com/drupal/foss" + ] + }, + { + "reference": "./eCos-exception-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./eCos-exception-2.0.html", + "referenceNumber": 35, + "name": "eCos exception 2.0", + "licenseExceptionId": "eCos-exception-2.0", + "seeAlso": [ + "http://ecos.sourceware.org/license-overview.html" + ] + }, + { + "reference": "./erlang-otp-linking-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./erlang-otp-linking-exception.html", + "referenceNumber": 46, + "name": "Erlang/OTP Linking Exception", + "licenseExceptionId": "erlang-otp-linking-exception", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-faq.en.html#GPLIncompatibleLibs", + "https://erlang.org/pipermail/erlang-questions/2012-May/066355.html", + "https://gitea.osmocom.org/erlang/osmo_ss7/src/commit/2286c1b8738d715950026650bf53f19a69d6ed0e/src/ss7_links.erl#L20" + ] + }, + { + "reference": "./Fawkes-Runtime-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Fawkes-Runtime-exception.html", + "referenceNumber": 23, + "name": "Fawkes Runtime Exception", + "licenseExceptionId": "Fawkes-Runtime-exception", + "seeAlso": [ + "http://www.fawkesrobotics.org/about/license/" + ] + }, + { + "reference": "./FLTK-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./FLTK-exception.html", + "referenceNumber": 9, + "name": "FLTK exception", + "licenseExceptionId": "FLTK-exception", + "seeAlso": [ + "http://www.fltk.org/COPYING.php" + ] + }, + { + "reference": "./fmt-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./fmt-exception.html", + "referenceNumber": 69, + "name": "fmt exception", + "licenseExceptionId": "fmt-exception", + "seeAlso": [ + "https://github.com/fmtlib/fmt/blob/master/LICENSE", + "https://github.com/fmtlib/fmt/blob/2eb363297b24cd71a68ccfb20ff755430f17e60f/LICENSE#L22C1-L27C62" + ] + }, + { + "reference": "./Font-exception-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Font-exception-2.0.html", + "referenceNumber": 19, + "name": "Font exception 2.0", + "licenseExceptionId": "Font-exception-2.0", + "seeAlso": [ + "http://www.gnu.org/licenses/gpl-faq.html#FontException" + ] + }, + { + "reference": "./freertos-exception-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./freertos-exception-2.0.html", + "referenceNumber": 54, + "name": "FreeRTOS Exception 2.0", + "licenseExceptionId": "freertos-exception-2.0", + "seeAlso": [ + "https://web.archive.org/web/20060809182744/http://www.freertos.org/a00114.html" + ] + }, + { + "reference": "./GCC-exception-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GCC-exception-2.0.html", + "referenceNumber": 14, + "name": "GCC Runtime Library exception 2.0", + "licenseExceptionId": "GCC-exception-2.0", + "seeAlso": [ + "https://gcc.gnu.org/git/?p\u003dgcc.git;a\u003dblob;f\u003dgcc/libgcc1.c;h\u003d762f5143fc6eed57b6797c82710f3538aa52b40b;hb\u003dcb143a3ce4fb417c68f5fa2691a1b1b1053dfba9#l10", + "https://sourceware.org/git/?p\u003dglibc.git;a\u003dblob;f\u003dcsu/abi-note.c;h\u003dc2ec208e94fbe91f63d3c375bd254b884695d190;hb\u003dHEAD" + ] + }, + { + "reference": "./GCC-exception-2.0-note.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GCC-exception-2.0-note.html", + "referenceNumber": 55, + "name": "GCC Runtime Library exception 2.0 - note variant", + "licenseExceptionId": "GCC-exception-2.0-note", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dglibc.git;a\u003dblob;f\u003dsysdeps/x86_64/start.S" + ] + }, + { + "reference": "./GCC-exception-3.1.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GCC-exception-3.1.html", + "referenceNumber": 6, + "name": "GCC Runtime Library exception 3.1", + "licenseExceptionId": "GCC-exception-3.1", + "seeAlso": [ + "http://www.gnu.org/licenses/gcc-exception-3.1.html" + ] + }, + { + "reference": "./Gmsh-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Gmsh-exception.html", + "referenceNumber": 58, + "name": "Gmsh exception\u003e", + "licenseExceptionId": "Gmsh-exception", + "seeAlso": [ + "https://gitlab.onelab.info/gmsh/gmsh/-/raw/master/LICENSE.txt" + ] + }, + { + "reference": "./GNAT-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GNAT-exception.html", + "referenceNumber": 26, + "name": "GNAT exception", + "licenseExceptionId": "GNAT-exception", + "seeAlso": [ + "https://github.com/AdaCore/florist/blob/master/libsrc/posix-configurable_file_limits.adb" + ] + }, + { + "reference": "./GNOME-examples-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GNOME-examples-exception.html", + "referenceNumber": 12, + "name": "GNOME examples exception", + "licenseExceptionId": "GNOME-examples-exception", + "seeAlso": [ + "https://gitlab.gnome.org/Archive/gnome-devel-docs/-/blob/master/platform-demos/C/legal.xml?ref_type\u003dheads", + "http://meldmerge.org/help/" + ] + }, + { + "reference": "./GNU-compiler-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GNU-compiler-exception.html", + "referenceNumber": 18, + "name": "GNU Compiler Exception", + "licenseExceptionId": "GNU-compiler-exception", + "seeAlso": [ + "https://sourceware.org/git?p\u003dbinutils-gdb.git;a\u003dblob;f\u003dlibiberty/unlink-if-ordinary.c;h\u003de49f2f2f67bfdb10d6b2bd579b0e01cad0fd708e;hb\u003dHEAD#l19" + ] + }, + { + "reference": "./gnu-javamail-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./gnu-javamail-exception.html", + "referenceNumber": 43, + "name": "GNU JavaMail exception", + "licenseExceptionId": "gnu-javamail-exception", + "seeAlso": [ + "http://www.gnu.org/software/classpathx/javamail/javamail.html" + ] + }, + { + "reference": "./GPL-3.0-interface-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GPL-3.0-interface-exception.html", + "referenceNumber": 28, + "name": "GPL-3.0 Interface Exception", + "licenseExceptionId": "GPL-3.0-interface-exception", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-faq.en.html#LinkingOverControlledInterface" + ] + }, + { + "reference": "./GPL-3.0-linking-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GPL-3.0-linking-exception.html", + "referenceNumber": 45, + "name": "GPL-3.0 Linking Exception", + "licenseExceptionId": "GPL-3.0-linking-exception", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-faq.en.html#GPLIncompatibleLibs" + ] + }, + { + "reference": "./GPL-3.0-linking-source-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GPL-3.0-linking-source-exception.html", + "referenceNumber": 39, + "name": "GPL-3.0 Linking Exception (with Corresponding Source)", + "licenseExceptionId": "GPL-3.0-linking-source-exception", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-faq.en.html#GPLIncompatibleLibs", + "https://github.com/mirror/wget/blob/master/src/http.c#L20" + ] + }, + { + "reference": "./GPL-CC-1.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GPL-CC-1.0.html", + "referenceNumber": 27, + "name": "GPL Cooperation Commitment 1.0", + "licenseExceptionId": "GPL-CC-1.0", + "seeAlso": [ + "https://github.com/gplcc/gplcc/blob/master/Project/COMMITMENT", + "https://gplcc.github.io/gplcc/Project/README-PROJECT.html" + ] + }, + { + "reference": "./GStreamer-exception-2005.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GStreamer-exception-2005.html", + "referenceNumber": 63, + "name": "GStreamer Exception (2005)", + "licenseExceptionId": "GStreamer-exception-2005", + "seeAlso": [ + "https://gstreamer.freedesktop.org/documentation/frequently-asked-questions/licensing.html?gi-language\u003dc#licensing-of-applications-using-gstreamer" + ] + }, + { + "reference": "./GStreamer-exception-2008.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GStreamer-exception-2008.html", + "referenceNumber": 30, + "name": "GStreamer Exception (2008)", + "licenseExceptionId": "GStreamer-exception-2008", + "seeAlso": [ + "https://gstreamer.freedesktop.org/documentation/frequently-asked-questions/licensing.html?gi-language\u003dc#licensing-of-applications-using-gstreamer" + ] + }, + { + "reference": "./i2p-gpl-java-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./i2p-gpl-java-exception.html", + "referenceNumber": 36, + "name": "i2p GPL+Java Exception", + "licenseExceptionId": "i2p-gpl-java-exception", + "seeAlso": [ + "http://geti2p.net/en/get-involved/develop/licenses#java_exception" + ] + }, + { + "reference": "./KiCad-libraries-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./KiCad-libraries-exception.html", + "referenceNumber": 10, + "name": "KiCad Libraries Exception", + "licenseExceptionId": "KiCad-libraries-exception", + "seeAlso": [ + "https://www.kicad.org/libraries/license/" + ] + }, + { + "reference": "./LGPL-3.0-linking-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./LGPL-3.0-linking-exception.html", + "referenceNumber": 31, + "name": "LGPL-3.0 Linking Exception", + "licenseExceptionId": "LGPL-3.0-linking-exception", + "seeAlso": [ + "https://raw.githubusercontent.com/go-xmlpath/xmlpath/v2/LICENSE", + "https://github.com/goamz/goamz/blob/master/LICENSE", + "https://github.com/juju/errors/blob/master/LICENSE" + ] + }, + { + "reference": "./libpri-OpenH323-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./libpri-OpenH323-exception.html", + "referenceNumber": 15, + "name": "libpri OpenH323 exception", + "licenseExceptionId": "libpri-OpenH323-exception", + "seeAlso": [ + "https://github.com/asterisk/libpri/blob/1.6.0/README#L19-L22" + ] + }, + { + "reference": "./Libtool-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Libtool-exception.html", + "referenceNumber": 20, + "name": "Libtool Exception", + "licenseExceptionId": "Libtool-exception", + "seeAlso": [ + "http://git.savannah.gnu.org/cgit/libtool.git/tree/m4/libtool.m4", + "https://git.savannah.gnu.org/cgit/libtool.git/tree/libltdl/lt__alloc.c#n15" + ] + }, + { + "reference": "./Linux-syscall-note.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Linux-syscall-note.html", + "referenceNumber": 52, + "name": "Linux Syscall Note", + "licenseExceptionId": "Linux-syscall-note", + "seeAlso": [ + "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/COPYING" + ] + }, + { + "reference": "./LLGPL.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./LLGPL.html", + "referenceNumber": 37, + "name": "LLGPL Preamble", + "licenseExceptionId": "LLGPL", + "seeAlso": [ + "http://opensource.franz.com/preamble.html" + ] + }, + { + "reference": "./LLVM-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./LLVM-exception.html", + "referenceNumber": 1, + "name": "LLVM Exception", + "licenseExceptionId": "LLVM-exception", + "seeAlso": [ + "http://llvm.org/foundation/relicensing/LICENSE.txt" + ] + }, + { + "reference": "./LZMA-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./LZMA-exception.html", + "referenceNumber": 61, + "name": "LZMA exception", + "licenseExceptionId": "LZMA-exception", + "seeAlso": [ + "http://nsis.sourceforge.net/Docs/AppendixI.html#I.6" + ] + }, + { + "reference": "./mif-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./mif-exception.html", + "referenceNumber": 7, + "name": "Macros and Inline Functions Exception", + "licenseExceptionId": "mif-exception", + "seeAlso": [ + "http://www.scs.stanford.edu/histar/src/lib/cppsup/exception", + "http://dev.bertos.org/doxygen/", + "https://www.threadingbuildingblocks.org/licensing" + ] + }, + { + "reference": "./Nokia-Qt-exception-1.1.json", + "isDeprecatedLicenseId": true, + "detailsUrl": "./Nokia-Qt-exception-1.1.html", + "referenceNumber": 13, + "name": "Nokia Qt LGPL exception 1.1", + "licenseExceptionId": "Nokia-Qt-exception-1.1", + "seeAlso": [ + "https://www.keepassx.org/dev/projects/keepassx/repository/revisions/b8dfb9cc4d5133e0f09cd7533d15a4f1c19a40f2/entry/LICENSE.NOKIA-LGPL-EXCEPTION" + ] + }, + { + "reference": "./OCaml-LGPL-linking-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./OCaml-LGPL-linking-exception.html", + "referenceNumber": 2, + "name": "OCaml LGPL Linking Exception", + "licenseExceptionId": "OCaml-LGPL-linking-exception", + "seeAlso": [ + "https://caml.inria.fr/ocaml/license.en.html" + ] + }, + { + "reference": "./OCCT-exception-1.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./OCCT-exception-1.0.html", + "referenceNumber": 49, + "name": "Open CASCADE Exception 1.0", + "licenseExceptionId": "OCCT-exception-1.0", + "seeAlso": [ + "http://www.opencascade.com/content/licensing" + ] + }, + { + "reference": "./OpenJDK-assembly-exception-1.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./OpenJDK-assembly-exception-1.0.html", + "referenceNumber": 44, + "name": "OpenJDK Assembly exception 1.0", + "licenseExceptionId": "OpenJDK-assembly-exception-1.0", + "seeAlso": [ + "http://openjdk.java.net/legal/assembly-exception.html" + ] + }, + { + "reference": "./openvpn-openssl-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./openvpn-openssl-exception.html", + "referenceNumber": 29, + "name": "OpenVPN OpenSSL Exception", + "licenseExceptionId": "openvpn-openssl-exception", + "seeAlso": [ + "http://openvpn.net/index.php/license.html", + "https://github.com/psycopg/psycopg2/blob/2_9_3/LICENSE#L14" + ] + }, + { + "reference": "./PCRE2-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./PCRE2-exception.html", + "referenceNumber": 8, + "name": "PCRE2 exception", + "licenseExceptionId": "PCRE2-exception", + "seeAlso": [ + "https://www.pcre.org/licence.txt" + ] + }, + { + "reference": "./PS-or-PDF-font-exception-20170817.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./PS-or-PDF-font-exception-20170817.html", + "referenceNumber": 16, + "name": "PS/PDF font exception (2017-08-17)", + "licenseExceptionId": "PS-or-PDF-font-exception-20170817", + "seeAlso": [ + "https://github.com/ArtifexSoftware/urw-base35-fonts/blob/65962e27febc3883a17e651cdb23e783668c996f/LICENSE" + ] + }, + { + "reference": "./QPL-1.0-INRIA-2004-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./QPL-1.0-INRIA-2004-exception.html", + "referenceNumber": 68, + "name": "INRIA QPL 1.0 2004 variant exception", + "licenseExceptionId": "QPL-1.0-INRIA-2004-exception", + "seeAlso": [ + "https://git.frama-c.com/pub/frama-c/-/blob/master/licenses/Q_MODIFIED_LICENSE", + "https://github.com/maranget/hevea/blob/master/LICENSE" + ] + }, + { + "reference": "./Qt-GPL-exception-1.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Qt-GPL-exception-1.0.html", + "referenceNumber": 50, + "name": "Qt GPL exception 1.0", + "licenseExceptionId": "Qt-GPL-exception-1.0", + "seeAlso": [ + "http://code.qt.io/cgit/qt/qtbase.git/tree/LICENSE.GPL3-EXCEPT" + ] + }, + { + "reference": "./Qt-LGPL-exception-1.1.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Qt-LGPL-exception-1.1.html", + "referenceNumber": 38, + "name": "Qt LGPL exception 1.1", + "licenseExceptionId": "Qt-LGPL-exception-1.1", + "seeAlso": [ + "http://code.qt.io/cgit/qt/qtbase.git/tree/LGPL_EXCEPTION.txt" + ] + }, + { + "reference": "./Qwt-exception-1.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Qwt-exception-1.0.html", + "referenceNumber": 25, + "name": "Qwt exception 1.0", + "licenseExceptionId": "Qwt-exception-1.0", + "seeAlso": [ + "http://qwt.sourceforge.net/qwtlicense.html" + ] + }, + { + "reference": "./romic-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./romic-exception.html", + "referenceNumber": 22, + "name": "Romic Exception", + "licenseExceptionId": "romic-exception", + "seeAlso": [ + "https://web.archive.org/web/20210124015834/http://mo.morsi.org/blog/2009/08/13/lesser_affero_gplv3/", + "https://sourceforge.net/p/romic/code/ci/3ab2856180cf0d8b007609af53154cf092efc58f/tree/COPYING", + "https://github.com/moll/node-mitm/blob/bbf24b8bd7596dc6e091e625363161ce91984fc7/LICENSE#L8-L11", + "https://github.com/zenbones/SmallMind/blob/3c62b5995fe7f27c453f140ff9b60560a0893f2a/COPYRIGHT#L25-L30", + "https://github.com/CubeArtisan/cubeartisan/blob/2c6ab53455237b88a3ea07be02a838a135c4ab79/LICENSE.LESSER#L10-L15", + "https://github.com/savearray2/py.js/blob/b781273c08c8afa89f4954de4ecf42ec01429bae/README.md#license" + ] + }, + { + "reference": "./RRDtool-FLOSS-exception-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./RRDtool-FLOSS-exception-2.0.html", + "referenceNumber": 4, + "name": "RRDtool FLOSS exception 2.0", + "licenseExceptionId": "RRDtool-FLOSS-exception-2.0", + "seeAlso": [ + "https://github.com/oetiker/rrdtool-1.x/blob/master/COPYRIGHT#L25-L90", + "https://oss.oetiker.ch/rrdtool/license.en.html" + ] + }, + { + "reference": "./SANE-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./SANE-exception.html", + "referenceNumber": 11, + "name": "SANE Exception", + "licenseExceptionId": "SANE-exception", + "seeAlso": [ + "https://github.com/alexpevzner/sane-airscan/blob/master/LICENSE", + "https://gitlab.com/sane-project/backends/-/blob/master/sanei/sanei_pp.c?ref_type\u003dheads", + "https://gitlab.com/sane-project/frontends/-/blob/master/sanei/sanei_codec_ascii.c?ref_type\u003dheads" + ] + }, + { + "reference": "./SHL-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./SHL-2.0.html", + "referenceNumber": 56, + "name": "Solderpad Hardware License v2.0", + "licenseExceptionId": "SHL-2.0", + "seeAlso": [ + "https://solderpad.org/licenses/SHL-2.0/" + ] + }, + { + "reference": "./SHL-2.1.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./SHL-2.1.html", + "referenceNumber": 65, + "name": "Solderpad Hardware License v2.1", + "licenseExceptionId": "SHL-2.1", + "seeAlso": [ + "https://solderpad.org/licenses/SHL-2.1/" + ] + }, + { + "reference": "./stunnel-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./stunnel-exception.html", + "referenceNumber": 70, + "name": "stunnel Exception", + "licenseExceptionId": "stunnel-exception", + "seeAlso": [ + "https://github.com/mtrojnar/stunnel/blob/master/COPYING.md" + ] + }, + { + "reference": "./SWI-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./SWI-exception.html", + "referenceNumber": 41, + "name": "SWI exception", + "licenseExceptionId": "SWI-exception", + "seeAlso": [ + "https://github.com/SWI-Prolog/packages-clpqr/blob/bfa80b9270274f0800120d5b8e6fef42ac2dc6a5/clpqr/class.pl" + ] + }, + { + "reference": "./Swift-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Swift-exception.html", + "referenceNumber": 33, + "name": "Swift Exception", + "licenseExceptionId": "Swift-exception", + "seeAlso": [ + "https://swift.org/LICENSE.txt", + "https://github.com/apple/swift-package-manager/blob/7ab2275f447a5eb37497ed63a9340f8a6d1e488b/LICENSE.txt#L205" + ] + }, + { + "reference": "./Texinfo-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Texinfo-exception.html", + "referenceNumber": 67, + "name": "Texinfo exception", + "licenseExceptionId": "Texinfo-exception", + "seeAlso": [ + "https://git.savannah.gnu.org/cgit/automake.git/tree/lib/texinfo.tex?h\u003dv1.16.5#n23" + ] + }, + { + "reference": "./u-boot-exception-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./u-boot-exception-2.0.html", + "referenceNumber": 3, + "name": "U-Boot exception 2.0", + "licenseExceptionId": "u-boot-exception-2.0", + "seeAlso": [ + "http://git.denx.de/?p\u003du-boot.git;a\u003dblob;f\u003dLicenses/Exceptions" + ] + }, + { + "reference": "./UBDL-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./UBDL-exception.html", + "referenceNumber": 62, + "name": "Unmodified Binary Distribution exception", + "licenseExceptionId": "UBDL-exception", + "seeAlso": [ + "https://github.com/ipxe/ipxe/blob/master/COPYING.UBDL" + ] + }, + { + "reference": "./Universal-FOSS-exception-1.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Universal-FOSS-exception-1.0.html", + "referenceNumber": 42, + "name": "Universal FOSS Exception, Version 1.0", + "licenseExceptionId": "Universal-FOSS-exception-1.0", + "seeAlso": [ + "https://oss.oracle.com/licenses/universal-foss-exception/" + ] + }, + { + "reference": "./vsftpd-openssl-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./vsftpd-openssl-exception.html", + "referenceNumber": 32, + "name": "vsftpd OpenSSL exception", + "licenseExceptionId": "vsftpd-openssl-exception", + "seeAlso": [ + "https://git.stg.centos.org/source-git/vsftpd/blob/f727873674d9c9cd7afcae6677aa782eb54c8362/f/LICENSE", + "https://launchpad.net/debian/squeeze/+source/vsftpd/+copyright", + "https://github.com/richardcochran/vsftpd/blob/master/COPYING" + ] + }, + { + "reference": "./WxWindows-exception-3.1.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./WxWindows-exception-3.1.html", + "referenceNumber": 57, + "name": "WxWindows Library Exception 3.1", + "licenseExceptionId": "WxWindows-exception-3.1", + "seeAlso": [ + "http://www.opensource.org/licenses/WXwindows" + ] + }, + { + "reference": "./x11vnc-openssl-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./x11vnc-openssl-exception.html", + "referenceNumber": 47, + "name": "x11vnc OpenSSL Exception", + "licenseExceptionId": "x11vnc-openssl-exception", + "seeAlso": [ + "https://github.com/LibVNC/x11vnc/blob/master/src/8to24.c#L22" + ] + } + ], + "releaseDate": "2024-08-19" +} diff --git a/license-list-data/licenses-3.25.json b/license-list-data/licenses-3.25.json new file mode 100644 index 00000000000..5db03b48941 --- /dev/null +++ b/license-list-data/licenses-3.25.json @@ -0,0 +1,8360 @@ +{ + "licenseListVersion": "3.25.0", + "licenses": [ + { + "reference": "https://spdx.org/licenses/0BSD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/0BSD.json", + "referenceNumber": 582, + "name": "BSD Zero Clause License", + "licenseId": "0BSD", + "seeAlso": [ + "http://landley.net/toybox/license.html", + "https://opensource.org/licenses/0BSD" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/3D-Slicer-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/3D-Slicer-1.0.json", + "referenceNumber": 466, + "name": "3D Slicer License v1.0", + "licenseId": "3D-Slicer-1.0", + "seeAlso": [ + "https://slicer.org/LICENSE", + "https://github.com/Slicer/Slicer/blob/main/License.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AAL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AAL.json", + "referenceNumber": 252, + "name": "Attribution Assurance License", + "licenseId": "AAL", + "seeAlso": [ + "https://opensource.org/licenses/attribution" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Abstyles.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Abstyles.json", + "referenceNumber": 456, + "name": "Abstyles License", + "licenseId": "Abstyles", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Abstyles" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AdaCore-doc.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AdaCore-doc.json", + "referenceNumber": 355, + "name": "AdaCore Doc License", + "licenseId": "AdaCore-doc", + "seeAlso": [ + "https://github.com/AdaCore/xmlada/blob/master/docs/index.rst", + "https://github.com/AdaCore/gnatcoll-core/blob/master/docs/index.rst", + "https://github.com/AdaCore/gnatcoll-db/blob/master/docs/index.rst" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Adobe-2006.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Adobe-2006.json", + "referenceNumber": 128, + "name": "Adobe Systems Incorporated Source Code License Agreement", + "licenseId": "Adobe-2006", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/AdobeLicense" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Adobe-Display-PostScript.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Adobe-Display-PostScript.json", + "referenceNumber": 433, + "name": "Adobe Display PostScript License", + "licenseId": "Adobe-Display-PostScript", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/xserver/-/blob/master/COPYING?ref_type\u003dheads#L752" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Adobe-Glyph.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Adobe-Glyph.json", + "referenceNumber": 125, + "name": "Adobe Glyph List License", + "licenseId": "Adobe-Glyph", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MIT#AdobeGlyph" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Adobe-Utopia.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Adobe-Utopia.json", + "referenceNumber": 495, + "name": "Adobe Utopia Font License", + "licenseId": "Adobe-Utopia", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/font/adobe-utopia-100dpi/-/blob/master/COPYING?ref_type\u003dheads" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ADSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ADSL.json", + "referenceNumber": 560, + "name": "Amazon Digital Services License", + "licenseId": "ADSL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/AmazonDigitalServicesLicense" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AFL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AFL-1.1.json", + "referenceNumber": 14, + "name": "Academic Free License v1.1", + "licenseId": "AFL-1.1", + "seeAlso": [ + "http://opensource.linux-mirror.org/licenses/afl-1.1.txt", + "http://wayback.archive.org/web/20021004124254/http://www.opensource.org/licenses/academic.php" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AFL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AFL-1.2.json", + "referenceNumber": 622, + "name": "Academic Free License v1.2", + "licenseId": "AFL-1.2", + "seeAlso": [ + "http://opensource.linux-mirror.org/licenses/afl-1.2.txt", + "http://wayback.archive.org/web/20021204204652/http://www.opensource.org/licenses/academic.php" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AFL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AFL-2.0.json", + "referenceNumber": 559, + "name": "Academic Free License v2.0", + "licenseId": "AFL-2.0", + "seeAlso": [ + "http://wayback.archive.org/web/20060924134533/http://www.opensource.org/licenses/afl-2.0.txt" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AFL-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AFL-2.1.json", + "referenceNumber": 570, + "name": "Academic Free License v2.1", + "licenseId": "AFL-2.1", + "seeAlso": [ + "http://opensource.linux-mirror.org/licenses/afl-2.1.txt" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AFL-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AFL-3.0.json", + "referenceNumber": 332, + "name": "Academic Free License v3.0", + "licenseId": "AFL-3.0", + "seeAlso": [ + "http://www.rosenlaw.com/AFL3.0.htm", + "https://opensource.org/licenses/afl-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Afmparse.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Afmparse.json", + "referenceNumber": 163, + "name": "Afmparse License", + "licenseId": "Afmparse", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Afmparse" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AGPL-1.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/AGPL-1.0.json", + "referenceNumber": 657, + "name": "Affero General Public License v1.0", + "licenseId": "AGPL-1.0", + "seeAlso": [ + "http://www.affero.org/oagpl.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AGPL-1.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AGPL-1.0-only.json", + "referenceNumber": 142, + "name": "Affero General Public License v1.0 only", + "licenseId": "AGPL-1.0-only", + "seeAlso": [ + "http://www.affero.org/oagpl.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AGPL-1.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AGPL-1.0-or-later.json", + "referenceNumber": 155, + "name": "Affero General Public License v1.0 or later", + "licenseId": "AGPL-1.0-or-later", + "seeAlso": [ + "http://www.affero.org/oagpl.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AGPL-3.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/AGPL-3.0.json", + "referenceNumber": 70, + "name": "GNU Affero General Public License v3.0", + "licenseId": "AGPL-3.0", + "seeAlso": [ + "https://www.gnu.org/licenses/agpl.txt", + "https://opensource.org/licenses/AGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AGPL-3.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AGPL-3.0-only.json", + "referenceNumber": 330, + "name": "GNU Affero General Public License v3.0 only", + "licenseId": "AGPL-3.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/agpl.txt", + "https://opensource.org/licenses/AGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AGPL-3.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AGPL-3.0-or-later.json", + "referenceNumber": 366, + "name": "GNU Affero General Public License v3.0 or later", + "licenseId": "AGPL-3.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/agpl.txt", + "https://opensource.org/licenses/AGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Aladdin.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Aladdin.json", + "referenceNumber": 557, + "name": "Aladdin Free Public License", + "licenseId": "Aladdin", + "seeAlso": [ + "http://pages.cs.wisc.edu/~ghost/doc/AFPL/6.01/Public.htm" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/AMD-newlib.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AMD-newlib.json", + "referenceNumber": 340, + "name": "AMD newlib License", + "licenseId": "AMD-newlib", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dnewlib-cygwin.git;a\u003dblob;f\u003dnewlib/libc/sys/a29khif/_close.S;h\u003d04f52ae00de1dafbd9055ad8d73c5c697a3aae7f;hb\u003dHEAD" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AMDPLPA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AMDPLPA.json", + "referenceNumber": 467, + "name": "AMD\u0027s plpa_map.c License", + "licenseId": "AMDPLPA", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/AMD_plpa_map_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AML.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AML.json", + "referenceNumber": 299, + "name": "Apple MIT License", + "licenseId": "AML", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Apple_MIT_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AML-glslang.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AML-glslang.json", + "referenceNumber": 567, + "name": "AML glslang variant License", + "licenseId": "AML-glslang", + "seeAlso": [ + "https://github.com/KhronosGroup/glslang/blob/main/LICENSE.txt#L949", + "https://docs.omniverse.nvidia.com/install-guide/latest/common/licenses.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AMPAS.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AMPAS.json", + "referenceNumber": 414, + "name": "Academy of Motion Picture Arts and Sciences BSD", + "licenseId": "AMPAS", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/BSD#AMPASBSD" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ANTLR-PD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ANTLR-PD.json", + "referenceNumber": 460, + "name": "ANTLR Software Rights Notice", + "licenseId": "ANTLR-PD", + "seeAlso": [ + "http://www.antlr2.org/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ANTLR-PD-fallback.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ANTLR-PD-fallback.json", + "referenceNumber": 65, + "name": "ANTLR Software Rights Notice with license fallback", + "licenseId": "ANTLR-PD-fallback", + "seeAlso": [ + "http://www.antlr2.org/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/any-OSI.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/any-OSI.json", + "referenceNumber": 310, + "name": "Any OSI License", + "licenseId": "any-OSI", + "seeAlso": [ + "https://metacpan.org/pod/Exporter::Tidy#LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Apache-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Apache-1.0.json", + "referenceNumber": 250, + "name": "Apache License 1.0", + "licenseId": "Apache-1.0", + "seeAlso": [ + "http://www.apache.org/licenses/LICENSE-1.0" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Apache-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Apache-1.1.json", + "referenceNumber": 288, + "name": "Apache License 1.1", + "licenseId": "Apache-1.1", + "seeAlso": [ + "http://apache.org/licenses/LICENSE-1.1", + "https://opensource.org/licenses/Apache-1.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Apache-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Apache-2.0.json", + "referenceNumber": 143, + "name": "Apache License 2.0", + "licenseId": "Apache-2.0", + "seeAlso": [ + "https://www.apache.org/licenses/LICENSE-2.0", + "https://opensource.org/licenses/Apache-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/APAFML.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APAFML.json", + "referenceNumber": 636, + "name": "Adobe Postscript AFM License", + "licenseId": "APAFML", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/AdobePostscriptAFM" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/APL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APL-1.0.json", + "referenceNumber": 85, + "name": "Adaptive Public License 1.0", + "licenseId": "APL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/APL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/App-s2p.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/App-s2p.json", + "referenceNumber": 238, + "name": "App::s2p License", + "licenseId": "App-s2p", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/App-s2p" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/APSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APSL-1.0.json", + "referenceNumber": 335, + "name": "Apple Public Source License 1.0", + "licenseId": "APSL-1.0", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Apple_Public_Source_License_1.0" + ], + "isOsiApproved": true, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/APSL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APSL-1.1.json", + "referenceNumber": 308, + "name": "Apple Public Source License 1.1", + "licenseId": "APSL-1.1", + "seeAlso": [ + "http://www.opensource.apple.com/source/IOSerialFamily/IOSerialFamily-7/APPLE_LICENSE" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/APSL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APSL-1.2.json", + "referenceNumber": 280, + "name": "Apple Public Source License 1.2", + "licenseId": "APSL-1.2", + "seeAlso": [ + "http://www.samurajdata.se/opensource/mirror/licenses/apsl.php" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/APSL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APSL-2.0.json", + "referenceNumber": 592, + "name": "Apple Public Source License 2.0", + "licenseId": "APSL-2.0", + "seeAlso": [ + "http://www.opensource.apple.com/license/apsl/" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Arphic-1999.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Arphic-1999.json", + "referenceNumber": 32, + "name": "Arphic Public License", + "licenseId": "Arphic-1999", + "seeAlso": [ + "http://ftp.gnu.org/gnu/non-gnu/chinese-fonts-truetype/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Artistic-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Artistic-1.0.json", + "referenceNumber": 138, + "name": "Artistic License 1.0", + "licenseId": "Artistic-1.0", + "seeAlso": [ + "https://opensource.org/licenses/Artistic-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/Artistic-1.0-cl8.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Artistic-1.0-cl8.json", + "referenceNumber": 353, + "name": "Artistic License 1.0 w/clause 8", + "licenseId": "Artistic-1.0-cl8", + "seeAlso": [ + "https://opensource.org/licenses/Artistic-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Artistic-1.0-Perl.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Artistic-1.0-Perl.json", + "referenceNumber": 660, + "name": "Artistic License 1.0 (Perl)", + "licenseId": "Artistic-1.0-Perl", + "seeAlso": [ + "http://dev.perl.org/licenses/artistic.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Artistic-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Artistic-2.0.json", + "referenceNumber": 277, + "name": "Artistic License 2.0", + "licenseId": "Artistic-2.0", + "seeAlso": [ + "http://www.perlfoundation.org/artistic_license_2_0", + "https://www.perlfoundation.org/artistic-license-20.html", + "https://opensource.org/licenses/artistic-license-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ASWF-Digital-Assets-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ASWF-Digital-Assets-1.0.json", + "referenceNumber": 166, + "name": "ASWF Digital Assets License version 1.0", + "licenseId": "ASWF-Digital-Assets-1.0", + "seeAlso": [ + "https://github.com/AcademySoftwareFoundation/foundation/blob/main/digital_assets/aswf_digital_assets_license_v1.0.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ASWF-Digital-Assets-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ASWF-Digital-Assets-1.1.json", + "referenceNumber": 29, + "name": "ASWF Digital Assets License 1.1", + "licenseId": "ASWF-Digital-Assets-1.1", + "seeAlso": [ + "https://github.com/AcademySoftwareFoundation/foundation/blob/main/digital_assets/aswf_digital_assets_license_v1.1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Baekmuk.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Baekmuk.json", + "referenceNumber": 380, + "name": "Baekmuk License", + "licenseId": "Baekmuk", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:Baekmuk?rd\u003dLicensing/Baekmuk" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Bahyph.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Bahyph.json", + "referenceNumber": 368, + "name": "Bahyph License", + "licenseId": "Bahyph", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Bahyph" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Barr.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Barr.json", + "referenceNumber": 195, + "name": "Barr License", + "licenseId": "Barr", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Barr" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/bcrypt-Solar-Designer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/bcrypt-Solar-Designer.json", + "referenceNumber": 478, + "name": "bcrypt Solar Designer License", + "licenseId": "bcrypt-Solar-Designer", + "seeAlso": [ + "https://github.com/bcrypt-ruby/bcrypt-ruby/blob/master/ext/mri/crypt_blowfish.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Beerware.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Beerware.json", + "referenceNumber": 616, + "name": "Beerware License", + "licenseId": "Beerware", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Beerware", + "https://people.freebsd.org/~phk/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Bitstream-Charter.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Bitstream-Charter.json", + "referenceNumber": 455, + "name": "Bitstream Charter Font License", + "licenseId": "Bitstream-Charter", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Charter#License_Text", + "https://raw.githubusercontent.com/blackhole89/notekit/master/data/fonts/Charter%20license.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Bitstream-Vera.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Bitstream-Vera.json", + "referenceNumber": 370, + "name": "Bitstream Vera Font License", + "licenseId": "Bitstream-Vera", + "seeAlso": [ + "https://web.archive.org/web/20080207013128/http://www.gnome.org/fonts/", + "https://docubrain.com/sites/default/files/licenses/bitstream-vera.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BitTorrent-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BitTorrent-1.0.json", + "referenceNumber": 106, + "name": "BitTorrent Open Source License v1.0", + "licenseId": "BitTorrent-1.0", + "seeAlso": [ + "http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/licenses/BitTorrent?r1\u003d1.1\u0026r2\u003d1.1.1.1\u0026diff_format\u003ds" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BitTorrent-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BitTorrent-1.1.json", + "referenceNumber": 541, + "name": "BitTorrent Open Source License v1.1", + "licenseId": "BitTorrent-1.1", + "seeAlso": [ + "http://directory.fsf.org/wiki/License:BitTorrentOSL1.1" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/blessing.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/blessing.json", + "referenceNumber": 359, + "name": "SQLite Blessing", + "licenseId": "blessing", + "seeAlso": [ + "https://www.sqlite.org/src/artifact/e33a4df7e32d742a?ln\u003d4-9", + "https://sqlite.org/src/artifact/df5091916dbb40e6" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BlueOak-1.0.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BlueOak-1.0.0.json", + "referenceNumber": 606, + "name": "Blue Oak Model License 1.0.0", + "licenseId": "BlueOak-1.0.0", + "seeAlso": [ + "https://blueoakcouncil.org/license/1.0.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Boehm-GC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Boehm-GC.json", + "referenceNumber": 127, + "name": "Boehm-Demers-Weiser GC License", + "licenseId": "Boehm-GC", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:MIT#Another_Minimal_variant_(found_in_libatomic_ops)", + "https://github.com/uim/libgcroots/blob/master/COPYING", + "https://github.com/ivmai/libatomic_ops/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Borceux.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Borceux.json", + "referenceNumber": 571, + "name": "Borceux license", + "licenseId": "Borceux", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Borceux" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Brian-Gladman-2-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Brian-Gladman-2-Clause.json", + "referenceNumber": 416, + "name": "Brian Gladman 2-Clause License", + "licenseId": "Brian-Gladman-2-Clause", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L140-L156", + "https://web.mit.edu/kerberos/krb5-1.21/doc/mitK5license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Brian-Gladman-3-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Brian-Gladman-3-Clause.json", + "referenceNumber": 290, + "name": "Brian Gladman 3-Clause License", + "licenseId": "Brian-Gladman-3-Clause", + "seeAlso": [ + "https://github.com/SWI-Prolog/packages-clib/blob/master/sha1/brg_endian.h" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-1-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-1-Clause.json", + "referenceNumber": 419, + "name": "BSD 1-Clause License", + "licenseId": "BSD-1-Clause", + "seeAlso": [ + "https://svnweb.freebsd.org/base/head/include/ifaddrs.h?revision\u003d326823" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause.json", + "referenceNumber": 229, + "name": "BSD 2-Clause \"Simplified\" License", + "licenseId": "BSD-2-Clause", + "seeAlso": [ + "https://opensource.org/licenses/BSD-2-Clause" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause-Darwin.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-Darwin.json", + "referenceNumber": 296, + "name": "BSD 2-Clause - Ian Darwin variant", + "licenseId": "BSD-2-Clause-Darwin", + "seeAlso": [ + "https://github.com/file/file/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause-first-lines.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-first-lines.json", + "referenceNumber": 217, + "name": "BSD 2-Clause - first lines requirement", + "licenseId": "BSD-2-Clause-first-lines", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L664-L690", + "https://web.mit.edu/kerberos/krb5-1.21/doc/mitK5license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause-FreeBSD.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-FreeBSD.json", + "referenceNumber": 564, + "name": "BSD 2-Clause FreeBSD License", + "licenseId": "BSD-2-Clause-FreeBSD", + "seeAlso": [ + "http://www.freebsd.org/copyright/freebsd-license.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause-NetBSD.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-NetBSD.json", + "referenceNumber": 376, + "name": "BSD 2-Clause NetBSD License", + "licenseId": "BSD-2-Clause-NetBSD", + "seeAlso": [ + "http://www.netbsd.org/about/redistribution.html#default" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause-Patent.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-Patent.json", + "referenceNumber": 4, + "name": "BSD-2-Clause Plus Patent License", + "licenseId": "BSD-2-Clause-Patent", + "seeAlso": [ + "https://opensource.org/licenses/BSDplusPatent" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause-Views.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-Views.json", + "referenceNumber": 514, + "name": "BSD 2-Clause with views sentence", + "licenseId": "BSD-2-Clause-Views", + "seeAlso": [ + "http://www.freebsd.org/copyright/freebsd-license.html", + "https://people.freebsd.org/~ivoras/wine/patch-wine-nvidia.sh", + "https://github.com/protegeproject/protege/blob/master/license.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause.json", + "referenceNumber": 584, + "name": "BSD 3-Clause \"New\" or \"Revised\" License", + "licenseId": "BSD-3-Clause", + "seeAlso": [ + "https://opensource.org/licenses/BSD-3-Clause", + "https://www.eclipse.org/org/documents/edl-v10.php" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-acpica.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-acpica.json", + "referenceNumber": 341, + "name": "BSD 3-Clause acpica variant", + "licenseId": "BSD-3-Clause-acpica", + "seeAlso": [ + "https://github.com/acpica/acpica/blob/master/source/common/acfileio.c#L119" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-Attribution.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Attribution.json", + "referenceNumber": 71, + "name": "BSD with attribution", + "licenseId": "BSD-3-Clause-Attribution", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/BSD_with_Attribution" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-Clear.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Clear.json", + "referenceNumber": 253, + "name": "BSD 3-Clause Clear License", + "licenseId": "BSD-3-Clause-Clear", + "seeAlso": [ + "http://labs.metacarta.com/license-explanation.html#license" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-flex.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-flex.json", + "referenceNumber": 52, + "name": "BSD 3-Clause Flex variant", + "licenseId": "BSD-3-Clause-flex", + "seeAlso": [ + "https://github.com/westes/flex/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-HP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-HP.json", + "referenceNumber": 215, + "name": "Hewlett-Packard BSD variant license", + "licenseId": "BSD-3-Clause-HP", + "seeAlso": [ + "https://github.com/zdohnal/hplip/blob/master/COPYING#L939" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-LBNL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-LBNL.json", + "referenceNumber": 301, + "name": "Lawrence Berkeley National Labs BSD variant license", + "licenseId": "BSD-3-Clause-LBNL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/LBNLBSD" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-Modification.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Modification.json", + "referenceNumber": 47, + "name": "BSD 3-Clause Modification", + "licenseId": "BSD-3-Clause-Modification", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:BSD#Modification_Variant" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Military-License.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Military-License.json", + "referenceNumber": 615, + "name": "BSD 3-Clause No Military License", + "licenseId": "BSD-3-Clause-No-Military-License", + "seeAlso": [ + "https://gitlab.syncad.com/hive/dhive/-/blob/master/LICENSE", + "https://github.com/greymass/swift-eosio/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License.json", + "referenceNumber": 647, + "name": "BSD 3-Clause No Nuclear License", + "licenseId": "BSD-3-Clause-No-Nuclear-License", + "seeAlso": [ + "http://download.oracle.com/otn-pub/java/licenses/bsd.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License-2014.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License-2014.json", + "referenceNumber": 377, + "name": "BSD 3-Clause No Nuclear License 2014", + "licenseId": "BSD-3-Clause-No-Nuclear-License-2014", + "seeAlso": [ + "https://java.net/projects/javaeetutorial/pages/BerkeleyLicense" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-Warranty.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-Warranty.json", + "referenceNumber": 54, + "name": "BSD 3-Clause No Nuclear Warranty", + "licenseId": "BSD-3-Clause-No-Nuclear-Warranty", + "seeAlso": [ + "https://jogamp.org/git/?p\u003dgluegen.git;a\u003dblob_plain;f\u003dLICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-Open-MPI.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Open-MPI.json", + "referenceNumber": 633, + "name": "BSD 3-Clause Open MPI variant", + "licenseId": "BSD-3-Clause-Open-MPI", + "seeAlso": [ + "https://www.open-mpi.org/community/license.php", + "http://www.netlib.org/lapack/LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-Sun.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Sun.json", + "referenceNumber": 270, + "name": "BSD 3-Clause Sun Microsystems", + "licenseId": "BSD-3-Clause-Sun", + "seeAlso": [ + "https://github.com/xmlark/msv/blob/b9316e2f2270bc1606952ea4939ec87fbba157f3/xsdlib/src/main/java/com/sun/msv/datatype/regexp/InternalImpl.java" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-4-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-4-Clause.json", + "referenceNumber": 470, + "name": "BSD 4-Clause \"Original\" or \"Old\" License", + "licenseId": "BSD-4-Clause", + "seeAlso": [ + "http://directory.fsf.org/wiki/License:BSD_4Clause" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-4-Clause-Shortened.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-4-Clause-Shortened.json", + "referenceNumber": 220, + "name": "BSD 4 Clause Shortened", + "licenseId": "BSD-4-Clause-Shortened", + "seeAlso": [ + "https://metadata.ftp-master.debian.org/changelogs//main/a/arpwatch/arpwatch_2.1a15-7_copyright" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-4-Clause-UC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-4-Clause-UC.json", + "referenceNumber": 175, + "name": "BSD-4-Clause (University of California-Specific)", + "licenseId": "BSD-4-Clause-UC", + "seeAlso": [ + "http://www.freebsd.org/copyright/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-4.3RENO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-4.3RENO.json", + "referenceNumber": 361, + "name": "BSD 4.3 RENO License", + "licenseId": "BSD-4.3RENO", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dbinutils-gdb.git;a\u003dblob;f\u003dlibiberty/strcasecmp.c;h\u003d131d81c2ce7881fa48c363dc5bf5fb302c61ce0b;hb\u003dHEAD", + "https://git.openldap.org/openldap/openldap/-/blob/master/COPYRIGHT#L55-63" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-4.3TAHOE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-4.3TAHOE.json", + "referenceNumber": 46, + "name": "BSD 4.3 TAHOE License", + "licenseId": "BSD-4.3TAHOE", + "seeAlso": [ + "https://github.com/389ds/389-ds-base/blob/main/ldap/include/sysexits-compat.h#L15", + "https://git.savannah.gnu.org/cgit/indent.git/tree/doc/indent.texi?id\u003da74c6b4ee49397cf330b333da1042bffa60ed14f#n1788" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Advertising-Acknowledgement.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Advertising-Acknowledgement.json", + "referenceNumber": 297, + "name": "BSD Advertising Acknowledgement License", + "licenseId": "BSD-Advertising-Acknowledgement", + "seeAlso": [ + "https://github.com/python-excel/xlrd/blob/master/LICENSE#L33" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Attribution-HPND-disclaimer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Attribution-HPND-disclaimer.json", + "referenceNumber": 86, + "name": "BSD with Attribution and HPND disclaimer", + "licenseId": "BSD-Attribution-HPND-disclaimer", + "seeAlso": [ + "https://github.com/cyrusimap/cyrus-sasl/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Inferno-Nettverk.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Inferno-Nettverk.json", + "referenceNumber": 89, + "name": "BSD-Inferno-Nettverk", + "licenseId": "BSD-Inferno-Nettverk", + "seeAlso": [ + "https://www.inet.no/dante/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Protection.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Protection.json", + "referenceNumber": 394, + "name": "BSD Protection License", + "licenseId": "BSD-Protection", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/BSD_Protection_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Source-beginning-file.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Source-beginning-file.json", + "referenceNumber": 378, + "name": "BSD Source Code Attribution - beginning of file variant", + "licenseId": "BSD-Source-beginning-file", + "seeAlso": [ + "https://github.com/lattera/freebsd/blob/master/sys/cam/cam.c#L4" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Source-Code.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Source-Code.json", + "referenceNumber": 605, + "name": "BSD Source Code Attribution", + "licenseId": "BSD-Source-Code", + "seeAlso": [ + "https://github.com/robbiehanson/CocoaHTTPServer/blob/master/LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Systemics.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Systemics.json", + "referenceNumber": 327, + "name": "Systemics BSD variant license", + "licenseId": "BSD-Systemics", + "seeAlso": [ + "https://metacpan.org/release/DPARIS/Crypt-DES-2.07/source/COPYRIGHT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Systemics-W3Works.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Systemics-W3Works.json", + "referenceNumber": 427, + "name": "Systemics W3Works BSD variant license", + "licenseId": "BSD-Systemics-W3Works", + "seeAlso": [ + "https://metacpan.org/release/DPARIS/Crypt-Blowfish-2.14/source/COPYRIGHT#L7" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSL-1.0.json", + "referenceNumber": 334, + "name": "Boost Software License 1.0", + "licenseId": "BSL-1.0", + "seeAlso": [ + "http://www.boost.org/LICENSE_1_0.txt", + "https://opensource.org/licenses/BSL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BUSL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BUSL-1.1.json", + "referenceNumber": 285, + "name": "Business Source License 1.1", + "licenseId": "BUSL-1.1", + "seeAlso": [ + "https://mariadb.com/bsl11/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/bzip2-1.0.5.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/bzip2-1.0.5.json", + "referenceNumber": 574, + "name": "bzip2 and libbzip2 License v1.0.5", + "licenseId": "bzip2-1.0.5", + "seeAlso": [ + "https://sourceware.org/bzip2/1.0.5/bzip2-manual-1.0.5.html", + "http://bzip.org/1.0.5/bzip2-manual-1.0.5.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/bzip2-1.0.6.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/bzip2-1.0.6.json", + "referenceNumber": 534, + "name": "bzip2 and libbzip2 License v1.0.6", + "licenseId": "bzip2-1.0.6", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dbzip2.git;a\u003dblob;f\u003dLICENSE;hb\u003dbzip2-1.0.6", + "http://bzip.org/1.0.5/bzip2-manual-1.0.5.html", + "https://sourceware.org/cgit/valgrind/tree/mpi/libmpiwrap.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/C-UDA-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/C-UDA-1.0.json", + "referenceNumber": 162, + "name": "Computational Use of Data Agreement v1.0", + "licenseId": "C-UDA-1.0", + "seeAlso": [ + "https://github.com/microsoft/Computational-Use-of-Data-Agreement/blob/master/C-UDA-1.0.md", + "https://cdla.dev/computational-use-of-data-agreement-v1-0/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CAL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CAL-1.0.json", + "referenceNumber": 99, + "name": "Cryptographic Autonomy License 1.0", + "licenseId": "CAL-1.0", + "seeAlso": [ + "http://cryptographicautonomylicense.com/license-text.html", + "https://opensource.org/licenses/CAL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CAL-1.0-Combined-Work-Exception.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CAL-1.0-Combined-Work-Exception.json", + "referenceNumber": 333, + "name": "Cryptographic Autonomy License 1.0 (Combined Work Exception)", + "licenseId": "CAL-1.0-Combined-Work-Exception", + "seeAlso": [ + "http://cryptographicautonomylicense.com/license-text.html", + "https://opensource.org/licenses/CAL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Caldera.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Caldera.json", + "referenceNumber": 528, + "name": "Caldera License", + "licenseId": "Caldera", + "seeAlso": [ + "http://www.lemis.com/grog/UNIX/ancient-source-all.pdf" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Caldera-no-preamble.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Caldera-no-preamble.json", + "referenceNumber": 233, + "name": "Caldera License (without preamble)", + "licenseId": "Caldera-no-preamble", + "seeAlso": [ + "https://github.com/apache/apr/blob/trunk/LICENSE#L298C6-L298C29" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Catharon.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Catharon.json", + "referenceNumber": 337, + "name": "Catharon License", + "licenseId": "Catharon", + "seeAlso": [ + "https://github.com/scummvm/scummvm/blob/v2.8.0/LICENSES/CatharonLicense.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CATOSL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CATOSL-1.1.json", + "referenceNumber": 134, + "name": "Computer Associates Trusted Open Source License 1.1", + "licenseId": "CATOSL-1.1", + "seeAlso": [ + "https://opensource.org/licenses/CATOSL-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CC-BY-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-1.0.json", + "referenceNumber": 415, + "name": "Creative Commons Attribution 1.0 Generic", + "licenseId": "CC-BY-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by/1.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-2.0.json", + "referenceNumber": 428, + "name": "Creative Commons Attribution 2.0 Generic", + "licenseId": "CC-BY-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by/2.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-2.5.json", + "referenceNumber": 573, + "name": "Creative Commons Attribution 2.5 Generic", + "licenseId": "CC-BY-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by/2.5/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-2.5-AU.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-2.5-AU.json", + "referenceNumber": 388, + "name": "Creative Commons Attribution 2.5 Australia", + "licenseId": "CC-BY-2.5-AU", + "seeAlso": [ + "https://creativecommons.org/licenses/by/2.5/au/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0.json", + "referenceNumber": 132, + "name": "Creative Commons Attribution 3.0 Unported", + "licenseId": "CC-BY-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-AT.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-AT.json", + "referenceNumber": 25, + "name": "Creative Commons Attribution 3.0 Austria", + "licenseId": "CC-BY-3.0-AT", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/at/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-AU.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-AU.json", + "referenceNumber": 392, + "name": "Creative Commons Attribution 3.0 Australia", + "licenseId": "CC-BY-3.0-AU", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/au/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-DE.json", + "referenceNumber": 21, + "name": "Creative Commons Attribution 3.0 Germany", + "licenseId": "CC-BY-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-IGO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-IGO.json", + "referenceNumber": 596, + "name": "Creative Commons Attribution 3.0 IGO", + "licenseId": "CC-BY-3.0-IGO", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/igo/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-NL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-NL.json", + "referenceNumber": 157, + "name": "Creative Commons Attribution 3.0 Netherlands", + "licenseId": "CC-BY-3.0-NL", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/nl/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-US.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-US.json", + "referenceNumber": 395, + "name": "Creative Commons Attribution 3.0 United States", + "licenseId": "CC-BY-3.0-US", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/us/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-4.0.json", + "referenceNumber": 435, + "name": "Creative Commons Attribution 4.0 International", + "licenseId": "CC-BY-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by/4.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-1.0.json", + "referenceNumber": 641, + "name": "Creative Commons Attribution Non Commercial 1.0 Generic", + "licenseId": "CC-BY-NC-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/1.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-2.0.json", + "referenceNumber": 91, + "name": "Creative Commons Attribution Non Commercial 2.0 Generic", + "licenseId": "CC-BY-NC-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/2.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-2.5.json", + "referenceNumber": 465, + "name": "Creative Commons Attribution Non Commercial 2.5 Generic", + "licenseId": "CC-BY-NC-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/2.5/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-3.0.json", + "referenceNumber": 234, + "name": "Creative Commons Attribution Non Commercial 3.0 Unported", + "licenseId": "CC-BY-NC-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/3.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-3.0-DE.json", + "referenceNumber": 354, + "name": "Creative Commons Attribution Non Commercial 3.0 Germany", + "licenseId": "CC-BY-NC-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-4.0.json", + "referenceNumber": 53, + "name": "Creative Commons Attribution Non Commercial 4.0 International", + "licenseId": "CC-BY-NC-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/4.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-1.0.json", + "referenceNumber": 88, + "name": "Creative Commons Attribution Non Commercial No Derivatives 1.0 Generic", + "licenseId": "CC-BY-NC-ND-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd-nc/1.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-2.0.json", + "referenceNumber": 426, + "name": "Creative Commons Attribution Non Commercial No Derivatives 2.0 Generic", + "licenseId": "CC-BY-NC-ND-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/2.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-2.5.json", + "referenceNumber": 441, + "name": "Creative Commons Attribution Non Commercial No Derivatives 2.5 Generic", + "licenseId": "CC-BY-NC-ND-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/2.5/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-3.0.json", + "referenceNumber": 304, + "name": "Creative Commons Attribution Non Commercial No Derivatives 3.0 Unported", + "licenseId": "CC-BY-NC-ND-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/3.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-DE.json", + "referenceNumber": 121, + "name": "Creative Commons Attribution Non Commercial No Derivatives 3.0 Germany", + "licenseId": "CC-BY-NC-ND-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-IGO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-IGO.json", + "referenceNumber": 171, + "name": "Creative Commons Attribution Non Commercial No Derivatives 3.0 IGO", + "licenseId": "CC-BY-NC-ND-3.0-IGO", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/3.0/igo/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-4.0.json", + "referenceNumber": 183, + "name": "Creative Commons Attribution Non Commercial No Derivatives 4.0 International", + "licenseId": "CC-BY-NC-ND-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-1.0.json", + "referenceNumber": 501, + "name": "Creative Commons Attribution Non Commercial Share Alike 1.0 Generic", + "licenseId": "CC-BY-NC-SA-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/1.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0.json", + "referenceNumber": 358, + "name": "Creative Commons Attribution Non Commercial Share Alike 2.0 Generic", + "licenseId": "CC-BY-NC-SA-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/2.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-DE.json", + "referenceNumber": 260, + "name": "Creative Commons Attribution Non Commercial Share Alike 2.0 Germany", + "licenseId": "CC-BY-NC-SA-2.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/2.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-FR.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-FR.json", + "referenceNumber": 158, + "name": "Creative Commons Attribution-NonCommercial-ShareAlike 2.0 France", + "licenseId": "CC-BY-NC-SA-2.0-FR", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/2.0/fr/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-UK.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-UK.json", + "referenceNumber": 33, + "name": "Creative Commons Attribution Non Commercial Share Alike 2.0 England and Wales", + "licenseId": "CC-BY-NC-SA-2.0-UK", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/2.0/uk/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.5.json", + "referenceNumber": 222, + "name": "Creative Commons Attribution Non Commercial Share Alike 2.5 Generic", + "licenseId": "CC-BY-NC-SA-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/2.5/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-3.0.json", + "referenceNumber": 255, + "name": "Creative Commons Attribution Non Commercial Share Alike 3.0 Unported", + "licenseId": "CC-BY-NC-SA-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/3.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-DE.json", + "referenceNumber": 525, + "name": "Creative Commons Attribution Non Commercial Share Alike 3.0 Germany", + "licenseId": "CC-BY-NC-SA-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-IGO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-IGO.json", + "referenceNumber": 244, + "name": "Creative Commons Attribution Non Commercial Share Alike 3.0 IGO", + "licenseId": "CC-BY-NC-SA-3.0-IGO", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/3.0/igo/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-4.0.json", + "referenceNumber": 513, + "name": "Creative Commons Attribution Non Commercial Share Alike 4.0 International", + "licenseId": "CC-BY-NC-SA-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-1.0.json", + "referenceNumber": 474, + "name": "Creative Commons Attribution No Derivatives 1.0 Generic", + "licenseId": "CC-BY-ND-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/1.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-2.0.json", + "referenceNumber": 356, + "name": "Creative Commons Attribution No Derivatives 2.0 Generic", + "licenseId": "CC-BY-ND-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/2.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-2.5.json", + "referenceNumber": 259, + "name": "Creative Commons Attribution No Derivatives 2.5 Generic", + "licenseId": "CC-BY-ND-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/2.5/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-3.0.json", + "referenceNumber": 527, + "name": "Creative Commons Attribution No Derivatives 3.0 Unported", + "licenseId": "CC-BY-ND-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/3.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-3.0-DE.json", + "referenceNumber": 214, + "name": "Creative Commons Attribution No Derivatives 3.0 Germany", + "licenseId": "CC-BY-ND-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-4.0.json", + "referenceNumber": 481, + "name": "Creative Commons Attribution No Derivatives 4.0 International", + "licenseId": "CC-BY-ND-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/4.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-1.0.json", + "referenceNumber": 588, + "name": "Creative Commons Attribution Share Alike 1.0 Generic", + "licenseId": "CC-BY-SA-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/1.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.0.json", + "referenceNumber": 180, + "name": "Creative Commons Attribution Share Alike 2.0 Generic", + "licenseId": "CC-BY-SA-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/2.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-2.0-UK.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.0-UK.json", + "referenceNumber": 385, + "name": "Creative Commons Attribution Share Alike 2.0 England and Wales", + "licenseId": "CC-BY-SA-2.0-UK", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/2.0/uk/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-2.1-JP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.1-JP.json", + "referenceNumber": 17, + "name": "Creative Commons Attribution Share Alike 2.1 Japan", + "licenseId": "CC-BY-SA-2.1-JP", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/2.1/jp/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.5.json", + "referenceNumber": 607, + "name": "Creative Commons Attribution Share Alike 2.5 Generic", + "licenseId": "CC-BY-SA-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/2.5/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0.json", + "referenceNumber": 26, + "name": "Creative Commons Attribution Share Alike 3.0 Unported", + "licenseId": "CC-BY-SA-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/3.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-3.0-AT.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0-AT.json", + "referenceNumber": 398, + "name": "Creative Commons Attribution Share Alike 3.0 Austria", + "licenseId": "CC-BY-SA-3.0-AT", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/3.0/at/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0-DE.json", + "referenceNumber": 120, + "name": "Creative Commons Attribution Share Alike 3.0 Germany", + "licenseId": "CC-BY-SA-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-3.0-IGO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0-IGO.json", + "referenceNumber": 519, + "name": "Creative Commons Attribution-ShareAlike 3.0 IGO", + "licenseId": "CC-BY-SA-3.0-IGO", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/3.0/igo/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-4.0.json", + "referenceNumber": 13, + "name": "Creative Commons Attribution Share Alike 4.0 International", + "licenseId": "CC-BY-SA-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/4.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CC-PDDC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-PDDC.json", + "referenceNumber": 169, + "name": "Creative Commons Public Domain Dedication and Certification", + "licenseId": "CC-PDDC", + "seeAlso": [ + "https://creativecommons.org/licenses/publicdomain/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC0-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC0-1.0.json", + "referenceNumber": 491, + "name": "Creative Commons Zero v1.0 Universal", + "licenseId": "CC0-1.0", + "seeAlso": [ + "https://creativecommons.org/publicdomain/zero/1.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CDDL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDDL-1.0.json", + "referenceNumber": 185, + "name": "Common Development and Distribution License 1.0", + "licenseId": "CDDL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/cddl1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CDDL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDDL-1.1.json", + "referenceNumber": 476, + "name": "Common Development and Distribution License 1.1", + "licenseId": "CDDL-1.1", + "seeAlso": [ + "http://glassfish.java.net/public/CDDL+GPL_1_1.html", + "https://javaee.github.io/glassfish/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CDL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDL-1.0.json", + "referenceNumber": 305, + "name": "Common Documentation License 1.0", + "licenseId": "CDL-1.0", + "seeAlso": [ + "http://www.opensource.apple.com/cdl/", + "https://fedoraproject.org/wiki/Licensing/Common_Documentation_License", + "https://www.gnu.org/licenses/license-list.html#ACDL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CDLA-Permissive-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDLA-Permissive-1.0.json", + "referenceNumber": 386, + "name": "Community Data License Agreement Permissive 1.0", + "licenseId": "CDLA-Permissive-1.0", + "seeAlso": [ + "https://cdla.io/permissive-1-0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CDLA-Permissive-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDLA-Permissive-2.0.json", + "referenceNumber": 590, + "name": "Community Data License Agreement Permissive 2.0", + "licenseId": "CDLA-Permissive-2.0", + "seeAlso": [ + "https://cdla.dev/permissive-2-0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CDLA-Sharing-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDLA-Sharing-1.0.json", + "referenceNumber": 190, + "name": "Community Data License Agreement Sharing 1.0", + "licenseId": "CDLA-Sharing-1.0", + "seeAlso": [ + "https://cdla.io/sharing-1-0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CECILL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-1.0.json", + "referenceNumber": 625, + "name": "CeCILL Free Software License Agreement v1.0", + "licenseId": "CECILL-1.0", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL_V1-fr.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CECILL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-1.1.json", + "referenceNumber": 326, + "name": "CeCILL Free Software License Agreement v1.1", + "licenseId": "CECILL-1.1", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL_V1.1-US.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CECILL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-2.0.json", + "referenceNumber": 463, + "name": "CeCILL Free Software License Agreement v2.0", + "licenseId": "CECILL-2.0", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL_V2-en.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CECILL-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-2.1.json", + "referenceNumber": 170, + "name": "CeCILL Free Software License Agreement v2.1", + "licenseId": "CECILL-2.1", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CECILL-B.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-B.json", + "referenceNumber": 196, + "name": "CeCILL-B Free Software License Agreement", + "licenseId": "CECILL-B", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CECILL-C.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-C.json", + "referenceNumber": 178, + "name": "CeCILL-C Free Software License Agreement", + "licenseId": "CECILL-C", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CERN-OHL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CERN-OHL-1.1.json", + "referenceNumber": 148, + "name": "CERN Open Hardware Licence v1.1", + "licenseId": "CERN-OHL-1.1", + "seeAlso": [ + "https://www.ohwr.org/project/licenses/wikis/cern-ohl-v1.1" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CERN-OHL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CERN-OHL-1.2.json", + "referenceNumber": 651, + "name": "CERN Open Hardware Licence v1.2", + "licenseId": "CERN-OHL-1.2", + "seeAlso": [ + "https://www.ohwr.org/project/licenses/wikis/cern-ohl-v1.2" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CERN-OHL-P-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CERN-OHL-P-2.0.json", + "referenceNumber": 543, + "name": "CERN Open Hardware Licence Version 2 - Permissive", + "licenseId": "CERN-OHL-P-2.0", + "seeAlso": [ + "https://www.ohwr.org/project/cernohl/wikis/Documents/CERN-OHL-version-2" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CERN-OHL-S-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CERN-OHL-S-2.0.json", + "referenceNumber": 396, + "name": "CERN Open Hardware Licence Version 2 - Strongly Reciprocal", + "licenseId": "CERN-OHL-S-2.0", + "seeAlso": [ + "https://www.ohwr.org/project/cernohl/wikis/Documents/CERN-OHL-version-2" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CERN-OHL-W-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CERN-OHL-W-2.0.json", + "referenceNumber": 614, + "name": "CERN Open Hardware Licence Version 2 - Weakly Reciprocal", + "licenseId": "CERN-OHL-W-2.0", + "seeAlso": [ + "https://www.ohwr.org/project/cernohl/wikis/Documents/CERN-OHL-version-2" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CFITSIO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CFITSIO.json", + "referenceNumber": 568, + "name": "CFITSIO License", + "licenseId": "CFITSIO", + "seeAlso": [ + "https://heasarc.gsfc.nasa.gov/docs/software/fitsio/c/f_user/node9.html", + "https://heasarc.gsfc.nasa.gov/docs/software/ftools/fv/doc/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/check-cvs.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/check-cvs.json", + "referenceNumber": 324, + "name": "check-cvs License", + "licenseId": "check-cvs", + "seeAlso": [ + "http://cvs.savannah.gnu.org/viewvc/cvs/ccvs/contrib/check_cvs.in?revision\u003d1.1.4.3\u0026view\u003dmarkup\u0026pathrev\u003dcvs1-11-23#l2" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/checkmk.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/checkmk.json", + "referenceNumber": 464, + "name": "Checkmk License", + "licenseId": "checkmk", + "seeAlso": [ + "https://github.com/libcheck/check/blob/master/checkmk/checkmk.in" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ClArtistic.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ClArtistic.json", + "referenceNumber": 230, + "name": "Clarified Artistic License", + "licenseId": "ClArtistic", + "seeAlso": [ + "http://gianluca.dellavedova.org/2011/01/03/clarified-artistic-license/", + "http://www.ncftp.com/ncftp/doc/LICENSE.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Clips.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Clips.json", + "referenceNumber": 424, + "name": "Clips License", + "licenseId": "Clips", + "seeAlso": [ + "https://github.com/DrItanium/maya/blob/master/LICENSE.CLIPS" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CMU-Mach.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CMU-Mach.json", + "referenceNumber": 73, + "name": "CMU Mach License", + "licenseId": "CMU-Mach", + "seeAlso": [ + "https://www.cs.cmu.edu/~410/licenses.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CMU-Mach-nodoc.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CMU-Mach-nodoc.json", + "referenceNumber": 8, + "name": "CMU Mach - no notices-in-documentation variant", + "licenseId": "CMU-Mach-nodoc", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L718-L728", + "https://web.mit.edu/kerberos/krb5-1.21/doc/mitK5license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CNRI-Jython.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CNRI-Jython.json", + "referenceNumber": 293, + "name": "CNRI Jython License", + "licenseId": "CNRI-Jython", + "seeAlso": [ + "http://www.jython.org/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CNRI-Python.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CNRI-Python.json", + "referenceNumber": 402, + "name": "CNRI Python License", + "licenseId": "CNRI-Python", + "seeAlso": [ + "https://opensource.org/licenses/CNRI-Python" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CNRI-Python-GPL-Compatible.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CNRI-Python-GPL-Compatible.json", + "referenceNumber": 224, + "name": "CNRI Python Open Source GPL Compatible License Agreement", + "licenseId": "CNRI-Python-GPL-Compatible", + "seeAlso": [ + "http://www.python.org/download/releases/1.6.1/download_win/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/COIL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/COIL-1.0.json", + "referenceNumber": 345, + "name": "Copyfree Open Innovation License", + "licenseId": "COIL-1.0", + "seeAlso": [ + "https://coil.apotheon.org/plaintext/01.0.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Community-Spec-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Community-Spec-1.0.json", + "referenceNumber": 56, + "name": "Community Specification License 1.0", + "licenseId": "Community-Spec-1.0", + "seeAlso": [ + "https://github.com/CommunitySpecification/1.0/blob/master/1._Community_Specification_License-v1.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Condor-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Condor-1.1.json", + "referenceNumber": 77, + "name": "Condor Public License v1.1", + "licenseId": "Condor-1.1", + "seeAlso": [ + "http://research.cs.wisc.edu/condor/license.html#condor", + "http://web.archive.org/web/20111123062036/http://research.cs.wisc.edu/condor/license.html#condor" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/copyleft-next-0.3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/copyleft-next-0.3.0.json", + "referenceNumber": 322, + "name": "copyleft-next 0.3.0", + "licenseId": "copyleft-next-0.3.0", + "seeAlso": [ + "https://github.com/copyleft-next/copyleft-next/blob/master/Releases/copyleft-next-0.3.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/copyleft-next-0.3.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/copyleft-next-0.3.1.json", + "referenceNumber": 403, + "name": "copyleft-next 0.3.1", + "licenseId": "copyleft-next-0.3.1", + "seeAlso": [ + "https://github.com/copyleft-next/copyleft-next/blob/master/Releases/copyleft-next-0.3.1" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Cornell-Lossless-JPEG.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Cornell-Lossless-JPEG.json", + "referenceNumber": 98, + "name": "Cornell Lossless JPEG License", + "licenseId": "Cornell-Lossless-JPEG", + "seeAlso": [ + "https://android.googlesource.com/platform/external/dng_sdk/+/refs/heads/master/source/dng_lossless_jpeg.cpp#16", + "https://www.mssl.ucl.ac.uk/~mcrw/src/20050920/proto.h", + "https://gitlab.freedesktop.org/libopenraw/libopenraw/blob/master/lib/ljpegdecompressor.cpp#L32" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CPAL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CPAL-1.0.json", + "referenceNumber": 548, + "name": "Common Public Attribution License 1.0", + "licenseId": "CPAL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/CPAL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CPL-1.0.json", + "referenceNumber": 114, + "name": "Common Public License 1.0", + "licenseId": "CPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/CPL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CPOL-1.02.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CPOL-1.02.json", + "referenceNumber": 6, + "name": "Code Project Open License 1.02", + "licenseId": "CPOL-1.02", + "seeAlso": [ + "http://www.codeproject.com/info/cpol10.aspx" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/Cronyx.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Cronyx.json", + "referenceNumber": 649, + "name": "Cronyx License", + "licenseId": "Cronyx", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/font/alias/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/font/cronyx-cyrillic/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/font/misc-cyrillic/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/font/screen-cyrillic/-/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Crossword.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Crossword.json", + "referenceNumber": 593, + "name": "Crossword License", + "licenseId": "Crossword", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Crossword" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CrystalStacker.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CrystalStacker.json", + "referenceNumber": 241, + "name": "CrystalStacker License", + "licenseId": "CrystalStacker", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:CrystalStacker?rd\u003dLicensing/CrystalStacker" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CUA-OPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CUA-OPL-1.0.json", + "referenceNumber": 409, + "name": "CUA Office Public License v1.0", + "licenseId": "CUA-OPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/CUA-OPL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Cube.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Cube.json", + "referenceNumber": 141, + "name": "Cube License", + "licenseId": "Cube", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Cube" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/curl.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/curl.json", + "referenceNumber": 602, + "name": "curl License", + "licenseId": "curl", + "seeAlso": [ + "https://github.com/bagder/curl/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/cve-tou.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/cve-tou.json", + "referenceNumber": 656, + "name": "Common Vulnerability Enumeration ToU License", + "licenseId": "cve-tou", + "seeAlso": [ + "https://www.cve.org/Legal/TermsOfUse" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/D-FSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/D-FSL-1.0.json", + "referenceNumber": 116, + "name": "Deutsche Freie Software Lizenz", + "licenseId": "D-FSL-1.0", + "seeAlso": [ + "http://www.dipp.nrw.de/d-fsl/lizenzen/", + "http://www.dipp.nrw.de/d-fsl/index_html/lizenzen/de/D-FSL-1_0_de.txt", + "http://www.dipp.nrw.de/d-fsl/index_html/lizenzen/en/D-FSL-1_0_en.txt", + "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl", + "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/deutsche-freie-software-lizenz", + "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/german-free-software-license", + "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/D-FSL-1_0_de.txt/at_download/file", + "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/D-FSL-1_0_en.txt/at_download/file" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DEC-3-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DEC-3-Clause.json", + "referenceNumber": 512, + "name": "DEC 3-Clause License", + "licenseId": "DEC-3-Clause", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/xserver/-/blob/master/COPYING?ref_type\u003dheads#L239" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/diffmark.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/diffmark.json", + "referenceNumber": 480, + "name": "diffmark license", + "licenseId": "diffmark", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/diffmark" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DL-DE-BY-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DL-DE-BY-2.0.json", + "referenceNumber": 84, + "name": "Data licence Germany – attribution – version 2.0", + "licenseId": "DL-DE-BY-2.0", + "seeAlso": [ + "https://www.govdata.de/dl-de/by-2-0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DL-DE-ZERO-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DL-DE-ZERO-2.0.json", + "referenceNumber": 522, + "name": "Data licence Germany – zero – version 2.0", + "licenseId": "DL-DE-ZERO-2.0", + "seeAlso": [ + "https://www.govdata.de/dl-de/zero-2-0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DOC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DOC.json", + "referenceNumber": 646, + "name": "DOC License", + "licenseId": "DOC", + "seeAlso": [ + "http://www.cs.wustl.edu/~schmidt/ACE-copying.html", + "https://www.dre.vanderbilt.edu/~schmidt/ACE-copying.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DocBook-Schema.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DocBook-Schema.json", + "referenceNumber": 153, + "name": "DocBook Schema License", + "licenseId": "DocBook-Schema", + "seeAlso": [ + "https://github.com/docbook/xslt10-stylesheets/blob/efd62655c11cc8773708df7a843613fa1e932bf8/xsl/assembly/schema/docbook51b7.rnc" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DocBook-XML.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DocBook-XML.json", + "referenceNumber": 493, + "name": "DocBook XML License", + "licenseId": "DocBook-XML", + "seeAlso": [ + "https://github.com/docbook/xslt10-stylesheets/blob/efd62655c11cc8773708df7a843613fa1e932bf8/xsl/COPYING#L27" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Dotseqn.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Dotseqn.json", + "referenceNumber": 533, + "name": "Dotseqn License", + "licenseId": "Dotseqn", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Dotseqn" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DRL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DRL-1.0.json", + "referenceNumber": 410, + "name": "Detection Rule License 1.0", + "licenseId": "DRL-1.0", + "seeAlso": [ + "https://github.com/Neo23x0/sigma/blob/master/LICENSE.Detection.Rules.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DRL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DRL-1.1.json", + "referenceNumber": 268, + "name": "Detection Rule License 1.1", + "licenseId": "DRL-1.1", + "seeAlso": [ + "https://github.com/SigmaHQ/Detection-Rule-License/blob/6ec7fbde6101d101b5b5d1fcb8f9b69fbc76c04a/LICENSE.Detection.Rules.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DSDP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DSDP.json", + "referenceNumber": 164, + "name": "DSDP License", + "licenseId": "DSDP", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/DSDP" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/dtoa.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/dtoa.json", + "referenceNumber": 263, + "name": "David M. Gay dtoa License", + "licenseId": "dtoa", + "seeAlso": [ + "https://github.com/SWI-Prolog/swipl-devel/blob/master/src/os/dtoa.c", + "https://sourceware.org/git/?p\u003dnewlib-cygwin.git;a\u003dblob;f\u003dnewlib/libc/stdlib/mprec.h;hb\u003dHEAD" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/dvipdfm.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/dvipdfm.json", + "referenceNumber": 61, + "name": "dvipdfm License", + "licenseId": "dvipdfm", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/dvipdfm" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ECL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ECL-1.0.json", + "referenceNumber": 264, + "name": "Educational Community License v1.0", + "licenseId": "ECL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/ECL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/ECL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ECL-2.0.json", + "referenceNumber": 363, + "name": "Educational Community License v2.0", + "licenseId": "ECL-2.0", + "seeAlso": [ + "https://opensource.org/licenses/ECL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/eCos-2.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/eCos-2.0.json", + "referenceNumber": 298, + "name": "eCos license version 2.0", + "licenseId": "eCos-2.0", + "seeAlso": [ + "https://www.gnu.org/licenses/ecos-license.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/EFL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EFL-1.0.json", + "referenceNumber": 137, + "name": "Eiffel Forum License v1.0", + "licenseId": "EFL-1.0", + "seeAlso": [ + "http://www.eiffel-nice.org/license/forum.txt", + "https://opensource.org/licenses/EFL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/EFL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EFL-2.0.json", + "referenceNumber": 447, + "name": "Eiffel Forum License v2.0", + "licenseId": "EFL-2.0", + "seeAlso": [ + "http://www.eiffel-nice.org/license/eiffel-forum-license-2.html", + "https://opensource.org/licenses/EFL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/eGenix.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/eGenix.json", + "referenceNumber": 348, + "name": "eGenix.com Public License 1.1.0", + "licenseId": "eGenix", + "seeAlso": [ + "http://www.egenix.com/products/eGenix.com-Public-License-1.1.0.pdf", + "https://fedoraproject.org/wiki/Licensing/eGenix.com_Public_License_1.1.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Elastic-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Elastic-2.0.json", + "referenceNumber": 404, + "name": "Elastic License 2.0", + "licenseId": "Elastic-2.0", + "seeAlso": [ + "https://www.elastic.co/licensing/elastic-license", + "https://github.com/elastic/elasticsearch/blob/master/licenses/ELASTIC-LICENSE-2.0.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Entessa.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Entessa.json", + "referenceNumber": 198, + "name": "Entessa Public License v1.0", + "licenseId": "Entessa", + "seeAlso": [ + "https://opensource.org/licenses/Entessa" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/EPICS.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EPICS.json", + "referenceNumber": 532, + "name": "EPICS Open License", + "licenseId": "EPICS", + "seeAlso": [ + "https://epics.anl.gov/license/open.php" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/EPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EPL-1.0.json", + "referenceNumber": 115, + "name": "Eclipse Public License 1.0", + "licenseId": "EPL-1.0", + "seeAlso": [ + "http://www.eclipse.org/legal/epl-v10.html", + "https://opensource.org/licenses/EPL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/EPL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EPL-2.0.json", + "referenceNumber": 282, + "name": "Eclipse Public License 2.0", + "licenseId": "EPL-2.0", + "seeAlso": [ + "https://www.eclipse.org/legal/epl-2.0", + "https://www.opensource.org/licenses/EPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ErlPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ErlPL-1.1.json", + "referenceNumber": 530, + "name": "Erlang Public License v1.1", + "licenseId": "ErlPL-1.1", + "seeAlso": [ + "http://www.erlang.org/EPLICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/etalab-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/etalab-2.0.json", + "referenceNumber": 129, + "name": "Etalab Open License 2.0", + "licenseId": "etalab-2.0", + "seeAlso": [ + "https://github.com/DISIC/politique-de-contribution-open-source/blob/master/LICENSE.pdf", + "https://raw.githubusercontent.com/DISIC/politique-de-contribution-open-source/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/EUDatagrid.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EUDatagrid.json", + "referenceNumber": 393, + "name": "EU DataGrid Software License", + "licenseId": "EUDatagrid", + "seeAlso": [ + "http://eu-datagrid.web.cern.ch/eu-datagrid/license.html", + "https://opensource.org/licenses/EUDatagrid" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/EUPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EUPL-1.0.json", + "referenceNumber": 389, + "name": "European Union Public License 1.0", + "licenseId": "EUPL-1.0", + "seeAlso": [ + "http://ec.europa.eu/idabc/en/document/7330.html", + "http://ec.europa.eu/idabc/servlets/Doc027f.pdf?id\u003d31096" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/EUPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EUPL-1.1.json", + "referenceNumber": 503, + "name": "European Union Public License 1.1", + "licenseId": "EUPL-1.1", + "seeAlso": [ + "https://joinup.ec.europa.eu/software/page/eupl/licence-eupl", + "https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/eupl1.1.-licence-en_0.pdf", + "https://opensource.org/licenses/EUPL-1.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/EUPL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EUPL-1.2.json", + "referenceNumber": 12, + "name": "European Union Public License 1.2", + "licenseId": "EUPL-1.2", + "seeAlso": [ + "https://joinup.ec.europa.eu/page/eupl-text-11-12", + "https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/eupl_v1.2_en.pdf", + "https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/2020-03/EUPL-1.2%20EN.txt", + "https://joinup.ec.europa.eu/sites/default/files/inline-files/EUPL%20v1_2%20EN(1).txt", + "http://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri\u003dCELEX:32017D0863", + "https://opensource.org/licenses/EUPL-1.2" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Eurosym.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Eurosym.json", + "referenceNumber": 621, + "name": "Eurosym License", + "licenseId": "Eurosym", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Eurosym" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Fair.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Fair.json", + "referenceNumber": 258, + "name": "Fair License", + "licenseId": "Fair", + "seeAlso": [ + "https://web.archive.org/web/20150926120323/http://fairlicense.org/", + "https://opensource.org/licenses/Fair" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/FBM.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FBM.json", + "referenceNumber": 626, + "name": "Fuzzy Bitmap License", + "licenseId": "FBM", + "seeAlso": [ + "https://github.com/SWI-Prolog/packages-xpce/blob/161a40cd82004f731ba48024f9d30af388a7edf5/src/img/gifwrite.c#L21-L26" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FDK-AAC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FDK-AAC.json", + "referenceNumber": 344, + "name": "Fraunhofer FDK AAC Codec Library", + "licenseId": "FDK-AAC", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/FDK-AAC", + "https://directory.fsf.org/wiki/License:Fdk" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Ferguson-Twofish.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Ferguson-Twofish.json", + "referenceNumber": 362, + "name": "Ferguson Twofish License", + "licenseId": "Ferguson-Twofish", + "seeAlso": [ + "https://github.com/wernerd/ZRTPCPP/blob/6b3cd8e6783642292bad0c21e3e5e5ce45ff3e03/cryptcommon/twofish.c#L113C3-L127" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Frameworx-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Frameworx-1.0.json", + "referenceNumber": 188, + "name": "Frameworx Open License 1.0", + "licenseId": "Frameworx-1.0", + "seeAlso": [ + "https://opensource.org/licenses/Frameworx-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/FreeBSD-DOC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FreeBSD-DOC.json", + "referenceNumber": 151, + "name": "FreeBSD Documentation License", + "licenseId": "FreeBSD-DOC", + "seeAlso": [ + "https://www.freebsd.org/copyright/freebsd-doc-license/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FreeImage.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FreeImage.json", + "referenceNumber": 232, + "name": "FreeImage Public License v1.0", + "licenseId": "FreeImage", + "seeAlso": [ + "http://freeimage.sourceforge.net/freeimage-license.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FSFAP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FSFAP.json", + "referenceNumber": 436, + "name": "FSF All Permissive License", + "licenseId": "FSFAP", + "seeAlso": [ + "https://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/FSFAP-no-warranty-disclaimer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FSFAP-no-warranty-disclaimer.json", + "referenceNumber": 547, + "name": "FSF All Permissive License (without Warranty)", + "licenseId": "FSFAP-no-warranty-disclaimer", + "seeAlso": [ + "https://git.savannah.gnu.org/cgit/wget.git/tree/util/trunc.c?h\u003dv1.21.3\u0026id\u003d40747a11e44ced5a8ac628a41f879ced3e2ebce9#n6" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FSFUL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FSFUL.json", + "referenceNumber": 2, + "name": "FSF Unlimited License", + "licenseId": "FSFUL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FSFULLR.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FSFULLR.json", + "referenceNumber": 508, + "name": "FSF Unlimited License (with License Retention)", + "licenseId": "FSFULLR", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FSFULLRWD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FSFULLRWD.json", + "referenceNumber": 640, + "name": "FSF Unlimited License (With License Retention and Warranty Disclaimer)", + "licenseId": "FSFULLRWD", + "seeAlso": [ + "https://lists.gnu.org/archive/html/autoconf/2012-04/msg00061.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FTL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FTL.json", + "referenceNumber": 249, + "name": "Freetype Project License", + "licenseId": "FTL", + "seeAlso": [ + "http://freetype.fis.uniroma2.it/FTL.TXT", + "http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/docs/FTL.TXT", + "http://gitlab.freedesktop.org/freetype/freetype/-/raw/master/docs/FTL.TXT" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Furuseth.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Furuseth.json", + "referenceNumber": 273, + "name": "Furuseth License", + "licenseId": "Furuseth", + "seeAlso": [ + "https://git.openldap.org/openldap/openldap/-/blob/master/COPYRIGHT?ref_type\u003dheads#L39-51" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/fwlw.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/fwlw.json", + "referenceNumber": 50, + "name": "fwlw License", + "licenseId": "fwlw", + "seeAlso": [ + "https://mirrors.nic.cz/tex-archive/macros/latex/contrib/fwlw/README" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GCR-docs.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GCR-docs.json", + "referenceNumber": 272, + "name": "Gnome GCR Documentation License", + "licenseId": "GCR-docs", + "seeAlso": [ + "https://github.com/GNOME/gcr/blob/master/docs/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GD.json", + "referenceNumber": 624, + "name": "GD License", + "licenseId": "GD", + "seeAlso": [ + "https://libgd.github.io/manuals/2.3.0/files/license-txt.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1.json", + "referenceNumber": 177, + "name": "GNU Free Documentation License v1.1", + "licenseId": "GFDL-1.1", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-invariants-only.json", + "referenceNumber": 216, + "name": "GNU Free Documentation License v1.1 only - invariants", + "licenseId": "GFDL-1.1-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-invariants-or-later.json", + "referenceNumber": 57, + "name": "GNU Free Documentation License v1.1 or later - invariants", + "licenseId": "GFDL-1.1-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-no-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-no-invariants-only.json", + "referenceNumber": 38, + "name": "GNU Free Documentation License v1.1 only - no invariants", + "licenseId": "GFDL-1.1-no-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-no-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-no-invariants-or-later.json", + "referenceNumber": 289, + "name": "GNU Free Documentation License v1.1 or later - no invariants", + "licenseId": "GFDL-1.1-no-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-only.json", + "referenceNumber": 654, + "name": "GNU Free Documentation License v1.1 only", + "licenseId": "GFDL-1.1-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-or-later.json", + "referenceNumber": 569, + "name": "GNU Free Documentation License v1.1 or later", + "licenseId": "GFDL-1.1-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2.json", + "referenceNumber": 235, + "name": "GNU Free Documentation License v1.2", + "licenseId": "GFDL-1.2", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-invariants-only.json", + "referenceNumber": 461, + "name": "GNU Free Documentation License v1.2 only - invariants", + "licenseId": "GFDL-1.2-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-invariants-or-later.json", + "referenceNumber": 391, + "name": "GNU Free Documentation License v1.2 or later - invariants", + "licenseId": "GFDL-1.2-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-no-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-no-invariants-only.json", + "referenceNumber": 187, + "name": "GNU Free Documentation License v1.2 only - no invariants", + "licenseId": "GFDL-1.2-no-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-no-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-no-invariants-or-later.json", + "referenceNumber": 240, + "name": "GNU Free Documentation License v1.2 or later - no invariants", + "licenseId": "GFDL-1.2-no-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-only.json", + "referenceNumber": 302, + "name": "GNU Free Documentation License v1.2 only", + "licenseId": "GFDL-1.2-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-or-later.json", + "referenceNumber": 562, + "name": "GNU Free Documentation License v1.2 or later", + "licenseId": "GFDL-1.2-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3.json", + "referenceNumber": 60, + "name": "GNU Free Documentation License v1.3", + "licenseId": "GFDL-1.3", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-invariants-only.json", + "referenceNumber": 184, + "name": "GNU Free Documentation License v1.3 only - invariants", + "licenseId": "GFDL-1.3-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-invariants-or-later.json", + "referenceNumber": 346, + "name": "GNU Free Documentation License v1.3 or later - invariants", + "licenseId": "GFDL-1.3-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-no-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-no-invariants-only.json", + "referenceNumber": 59, + "name": "GNU Free Documentation License v1.3 only - no invariants", + "licenseId": "GFDL-1.3-no-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-no-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-no-invariants-or-later.json", + "referenceNumber": 281, + "name": "GNU Free Documentation License v1.3 or later - no invariants", + "licenseId": "GFDL-1.3-no-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-only.json", + "referenceNumber": 642, + "name": "GNU Free Documentation License v1.3 only", + "licenseId": "GFDL-1.3-only", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-or-later.json", + "referenceNumber": 494, + "name": "GNU Free Documentation License v1.3 or later", + "licenseId": "GFDL-1.3-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Giftware.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Giftware.json", + "referenceNumber": 618, + "name": "Giftware License", + "licenseId": "Giftware", + "seeAlso": [ + "http://liballeg.org/license.html#allegro-4-the-giftware-license" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GL2PS.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GL2PS.json", + "referenceNumber": 231, + "name": "GL2PS License", + "licenseId": "GL2PS", + "seeAlso": [ + "http://www.geuz.org/gl2ps/COPYING.GL2PS" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Glide.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Glide.json", + "referenceNumber": 620, + "name": "3dfx Glide License", + "licenseId": "Glide", + "seeAlso": [ + "http://www.users.on.net/~triforce/glidexp/COPYING.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Glulxe.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Glulxe.json", + "referenceNumber": 429, + "name": "Glulxe License", + "licenseId": "Glulxe", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Glulxe" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GLWTPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GLWTPL.json", + "referenceNumber": 154, + "name": "Good Luck With That Public License", + "licenseId": "GLWTPL", + "seeAlso": [ + "https://github.com/me-shaon/GLWTPL/commit/da5f6bc734095efbacb442c0b31e33a65b9d6e85" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/gnuplot.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/gnuplot.json", + "referenceNumber": 271, + "name": "gnuplot License", + "licenseId": "gnuplot", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Gnuplot" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-1.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-1.0.json", + "referenceNumber": 365, + "name": "GNU General Public License v1.0 only", + "licenseId": "GPL-1.0", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-1.0+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-1.0+.json", + "referenceNumber": 66, + "name": "GNU General Public License v1.0 or later", + "licenseId": "GPL-1.0+", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-1.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-1.0-only.json", + "referenceNumber": 563, + "name": "GNU General Public License v1.0 only", + "licenseId": "GPL-1.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-1.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-1.0-or-later.json", + "referenceNumber": 558, + "name": "GNU General Public License v1.0 or later", + "licenseId": "GPL-1.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0.json", + "referenceNumber": 613, + "name": "GNU General Public License v2.0 only", + "licenseId": "GPL-2.0", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "https://opensource.org/licenses/GPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0+.json", + "referenceNumber": 83, + "name": "GNU General Public License v2.0 or later", + "licenseId": "GPL-2.0+", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "https://opensource.org/licenses/GPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-only.json", + "referenceNumber": 483, + "name": "GNU General Public License v2.0 only", + "licenseId": "GPL-2.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt", + "https://opensource.org/licenses/GPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-or-later.json", + "referenceNumber": 349, + "name": "GNU General Public License v2.0 or later", + "licenseId": "GPL-2.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "https://opensource.org/licenses/GPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-with-autoconf-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-autoconf-exception.json", + "referenceNumber": 475, + "name": "GNU General Public License v2.0 w/Autoconf exception", + "licenseId": "GPL-2.0-with-autoconf-exception", + "seeAlso": [ + "http://ac-archive.sourceforge.net/doc/copyright.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-with-bison-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-bison-exception.json", + "referenceNumber": 492, + "name": "GNU General Public License v2.0 w/Bison exception", + "licenseId": "GPL-2.0-with-bison-exception", + "seeAlso": [ + "http://git.savannah.gnu.org/cgit/bison.git/tree/data/yacc.c?id\u003d193d7c7054ba7197b0789e14965b739162319b5e#n141" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-with-classpath-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-classpath-exception.json", + "referenceNumber": 144, + "name": "GNU General Public License v2.0 w/Classpath exception", + "licenseId": "GPL-2.0-with-classpath-exception", + "seeAlso": [ + "https://www.gnu.org/software/classpath/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-with-font-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-font-exception.json", + "referenceNumber": 579, + "name": "GNU General Public License v2.0 w/Font exception", + "licenseId": "GPL-2.0-with-font-exception", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-faq.html#FontException" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-with-GCC-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-GCC-exception.json", + "referenceNumber": 449, + "name": "GNU General Public License v2.0 w/GCC Runtime Library exception", + "licenseId": "GPL-2.0-with-GCC-exception", + "seeAlso": [ + "https://gcc.gnu.org/git/?p\u003dgcc.git;a\u003dblob;f\u003dgcc/libgcc1.c;h\u003d762f5143fc6eed57b6797c82710f3538aa52b40b;hb\u003dcb143a3ce4fb417c68f5fa2691a1b1b1053dfba9#l10" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0.json", + "referenceNumber": 434, + "name": "GNU General Public License v3.0 only", + "licenseId": "GPL-3.0", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-3.0-standalone.html", + "https://opensource.org/licenses/GPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0+.json", + "referenceNumber": 586, + "name": "GNU General Public License v3.0 or later", + "licenseId": "GPL-3.0+", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-3.0-standalone.html", + "https://opensource.org/licenses/GPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0-only.json", + "referenceNumber": 42, + "name": "GNU General Public License v3.0 only", + "licenseId": "GPL-3.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-3.0-standalone.html", + "https://opensource.org/licenses/GPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0-or-later.json", + "referenceNumber": 269, + "name": "GNU General Public License v3.0 or later", + "licenseId": "GPL-3.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-3.0-standalone.html", + "https://opensource.org/licenses/GPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0-with-autoconf-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0-with-autoconf-exception.json", + "referenceNumber": 200, + "name": "GNU General Public License v3.0 w/Autoconf exception", + "licenseId": "GPL-3.0-with-autoconf-exception", + "seeAlso": [ + "https://www.gnu.org/licenses/autoconf-exception-3.0.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0-with-GCC-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0-with-GCC-exception.json", + "referenceNumber": 546, + "name": "GNU General Public License v3.0 w/GCC Runtime Library exception", + "licenseId": "GPL-3.0-with-GCC-exception", + "seeAlso": [ + "https://www.gnu.org/licenses/gcc-exception-3.1.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Graphics-Gems.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Graphics-Gems.json", + "referenceNumber": 437, + "name": "Graphics Gems License", + "licenseId": "Graphics-Gems", + "seeAlso": [ + "https://github.com/erich666/GraphicsGems/blob/master/LICENSE.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/gSOAP-1.3b.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/gSOAP-1.3b.json", + "referenceNumber": 658, + "name": "gSOAP Public License v1.3b", + "licenseId": "gSOAP-1.3b", + "seeAlso": [ + "http://www.cs.fsu.edu/~engelen/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/gtkbook.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/gtkbook.json", + "referenceNumber": 397, + "name": "gtkbook License", + "licenseId": "gtkbook", + "seeAlso": [ + "https://github.com/slogan621/gtkbook", + "https://github.com/oetiker/rrdtool-1.x/blob/master/src/plbasename.c#L8-L11" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Gutmann.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Gutmann.json", + "referenceNumber": 103, + "name": "Gutmann License", + "licenseId": "Gutmann", + "seeAlso": [ + "https://www.cs.auckland.ac.nz/~pgut001/dumpasn1.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HaskellReport.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HaskellReport.json", + "referenceNumber": 357, + "name": "Haskell Language Report License", + "licenseId": "HaskellReport", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Haskell_Language_Report_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/hdparm.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/hdparm.json", + "referenceNumber": 351, + "name": "hdparm License", + "licenseId": "hdparm", + "seeAlso": [ + "https://github.com/Distrotech/hdparm/blob/4517550db29a91420fb2b020349523b1b4512df2/LICENSE.TXT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HIDAPI.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HIDAPI.json", + "referenceNumber": 318, + "name": "HIDAPI License", + "licenseId": "HIDAPI", + "seeAlso": [ + "https://github.com/signal11/hidapi/blob/master/LICENSE-orig.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Hippocratic-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Hippocratic-2.1.json", + "referenceNumber": 425, + "name": "Hippocratic License 2.1", + "licenseId": "Hippocratic-2.1", + "seeAlso": [ + "https://firstdonoharm.dev/version/2/1/license.html", + "https://github.com/EthicalSource/hippocratic-license/blob/58c0e646d64ff6fbee275bfe2b9492f914e3ab2a/LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HP-1986.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HP-1986.json", + "referenceNumber": 477, + "name": "Hewlett-Packard 1986 License", + "licenseId": "HP-1986", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dnewlib-cygwin.git;a\u003dblob;f\u003dnewlib/libc/machine/hppa/memchr.S;h\u003d1cca3e5e8867aa4bffef1f75a5c1bba25c0c441e;hb\u003dHEAD#l2" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HP-1989.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HP-1989.json", + "referenceNumber": 653, + "name": "Hewlett-Packard 1989 License", + "licenseId": "HP-1989", + "seeAlso": [ + "https://github.com/bleargh45/Data-UUID/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND.json", + "referenceNumber": 75, + "name": "Historical Permission Notice and Disclaimer", + "licenseId": "HPND", + "seeAlso": [ + "https://opensource.org/licenses/HPND", + "http://lists.opensource.org/pipermail/license-discuss_lists.opensource.org/2002-November/006304.html" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/HPND-DEC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-DEC.json", + "referenceNumber": 597, + "name": "Historical Permission Notice and Disclaimer - DEC variant", + "licenseId": "HPND-DEC", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/app/xkbcomp/-/blob/master/COPYING?ref_type\u003dheads#L69" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-doc.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-doc.json", + "referenceNumber": 384, + "name": "Historical Permission Notice and Disclaimer - documentation variant", + "licenseId": "HPND-doc", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/lib/libxext/-/blob/master/COPYING?ref_type\u003dheads#L185-197", + "https://gitlab.freedesktop.org/xorg/lib/libxtst/-/blob/master/COPYING?ref_type\u003dheads#L70-77" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-doc-sell.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-doc-sell.json", + "referenceNumber": 648, + "name": "Historical Permission Notice and Disclaimer - documentation sell variant", + "licenseId": "HPND-doc-sell", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/lib/libxtst/-/blob/master/COPYING?ref_type\u003dheads#L108-117", + "https://gitlab.freedesktop.org/xorg/lib/libxext/-/blob/master/COPYING?ref_type\u003dheads#L153-162" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-export-US.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-export-US.json", + "referenceNumber": 551, + "name": "HPND with US Government export control warning", + "licenseId": "HPND-export-US", + "seeAlso": [ + "https://www.kermitproject.org/ck90.html#source" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-export-US-acknowledgement.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-export-US-acknowledgement.json", + "referenceNumber": 661, + "name": "HPND with US Government export control warning and acknowledgment", + "licenseId": "HPND-export-US-acknowledgement", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L831-L852", + "https://web.mit.edu/kerberos/krb5-1.21/doc/mitK5license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-export-US-modify.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-export-US-modify.json", + "referenceNumber": 119, + "name": "HPND with US Government export control warning and modification rqmt", + "licenseId": "HPND-export-US-modify", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L1157-L1182", + "https://github.com/pythongssapi/k5test/blob/v0.10.3/K5TEST-LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-export2-US.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-export2-US.json", + "referenceNumber": 450, + "name": "HPND with US Government export control and 2 disclaimers", + "licenseId": "HPND-export2-US", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L111-L133", + "https://web.mit.edu/kerberos/krb5-1.21/doc/mitK5license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-Fenneberg-Livingston.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-Fenneberg-Livingston.json", + "referenceNumber": 643, + "name": "Historical Permission Notice and Disclaimer - Fenneberg-Livingston variant", + "licenseId": "HPND-Fenneberg-Livingston", + "seeAlso": [ + "https://github.com/FreeRADIUS/freeradius-client/blob/master/COPYRIGHT#L32", + "https://github.com/radcli/radcli/blob/master/COPYRIGHT#L34" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-INRIA-IMAG.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-INRIA-IMAG.json", + "referenceNumber": 583, + "name": "Historical Permission Notice and Disclaimer - INRIA-IMAG variant", + "licenseId": "HPND-INRIA-IMAG", + "seeAlso": [ + "https://github.com/ppp-project/ppp/blob/master/pppd/ipv6cp.c#L75-L83" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-Intel.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-Intel.json", + "referenceNumber": 20, + "name": "Historical Permission Notice and Disclaimer - Intel variant", + "licenseId": "HPND-Intel", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dnewlib-cygwin.git;a\u003dblob;f\u003dnewlib/libc/machine/i960/memcpy.S;hb\u003dHEAD" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-Kevlin-Henney.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-Kevlin-Henney.json", + "referenceNumber": 637, + "name": "Historical Permission Notice and Disclaimer - Kevlin Henney variant", + "licenseId": "HPND-Kevlin-Henney", + "seeAlso": [ + "https://github.com/mruby/mruby/blob/83d12f8d52522cdb7c8cc46fad34821359f453e6/mrbgems/mruby-dir/src/Win/dirent.c#L127-L140" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-Markus-Kuhn.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-Markus-Kuhn.json", + "referenceNumber": 172, + "name": "Historical Permission Notice and Disclaimer - Markus Kuhn variant", + "licenseId": "HPND-Markus-Kuhn", + "seeAlso": [ + "https://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c", + "https://sourceware.org/git/?p\u003dbinutils-gdb.git;a\u003dblob;f\u003dreadline/readline/support/wcwidth.c;h\u003d0f5ec995796f4813abbcf4972aec0378ab74722a;hb\u003dHEAD#l55" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-merchantability-variant.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-merchantability-variant.json", + "referenceNumber": 572, + "name": "Historical Permission Notice and Disclaimer - merchantability variant", + "licenseId": "HPND-merchantability-variant", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dnewlib-cygwin.git;a\u003dblob;f\u003dnewlib/libc/misc/fini.c;hb\u003dHEAD" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-MIT-disclaimer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-MIT-disclaimer.json", + "referenceNumber": 609, + "name": "Historical Permission Notice and Disclaimer with MIT disclaimer", + "licenseId": "HPND-MIT-disclaimer", + "seeAlso": [ + "https://metacpan.org/release/NLNETLABS/Net-DNS-SEC-1.22/source/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-Netrek.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-Netrek.json", + "referenceNumber": 126, + "name": "Historical Permission Notice and Disclaimer - Netrek variant", + "licenseId": "HPND-Netrek", + "seeAlso": [], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-Pbmplus.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-Pbmplus.json", + "referenceNumber": 242, + "name": "Historical Permission Notice and Disclaimer - Pbmplus variant", + "licenseId": "HPND-Pbmplus", + "seeAlso": [ + "https://sourceforge.net/p/netpbm/code/HEAD/tree/super_stable/netpbm.c#l8" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-sell-MIT-disclaimer-xserver.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-sell-MIT-disclaimer-xserver.json", + "referenceNumber": 160, + "name": "Historical Permission Notice and Disclaimer - sell xserver variant with MIT disclaimer", + "licenseId": "HPND-sell-MIT-disclaimer-xserver", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/xserver/-/blob/master/COPYING?ref_type\u003dheads#L1781" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-sell-regexpr.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-sell-regexpr.json", + "referenceNumber": 44, + "name": "Historical Permission Notice and Disclaimer - sell regexpr variant", + "licenseId": "HPND-sell-regexpr", + "seeAlso": [ + "https://gitlab.com/bacula-org/bacula/-/blob/Branch-11.0/bacula/LICENSE-FOSS?ref_type\u003dheads#L245" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-sell-variant.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-sell-variant.json", + "referenceNumber": 485, + "name": "Historical Permission Notice and Disclaimer - sell variant", + "licenseId": "HPND-sell-variant", + "seeAlso": [ + "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/net/sunrpc/auth_gss/gss_generic_token.c?h\u003dv4.19" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-sell-variant-MIT-disclaimer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-sell-variant-MIT-disclaimer.json", + "referenceNumber": 430, + "name": "HPND sell variant with MIT disclaimer", + "licenseId": "HPND-sell-variant-MIT-disclaimer", + "seeAlso": [ + "https://github.com/sigmavirus24/x11-ssh-askpass/blob/master/README" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-sell-variant-MIT-disclaimer-rev.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-sell-variant-MIT-disclaimer-rev.json", + "referenceNumber": 10, + "name": "HPND sell variant with MIT disclaimer - reverse", + "licenseId": "HPND-sell-variant-MIT-disclaimer-rev", + "seeAlso": [ + "https://github.com/sigmavirus24/x11-ssh-askpass/blob/master/dynlist.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-UC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-UC.json", + "referenceNumber": 423, + "name": "Historical Permission Notice and Disclaimer - University of California variant", + "licenseId": "HPND-UC", + "seeAlso": [ + "https://core.tcl-lang.org/tk/file?name\u003dcompat/unistd.h" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-UC-export-US.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-UC-export-US.json", + "referenceNumber": 82, + "name": "Historical Permission Notice and Disclaimer - University of California, US export warning", + "licenseId": "HPND-UC-export-US", + "seeAlso": [ + "https://github.com/RTimothyEdwards/magic/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HTMLTIDY.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HTMLTIDY.json", + "referenceNumber": 439, + "name": "HTML Tidy License", + "licenseId": "HTMLTIDY", + "seeAlso": [ + "https://github.com/htacg/tidy-html5/blob/next/README/LICENSE.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/IBM-pibs.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IBM-pibs.json", + "referenceNumber": 604, + "name": "IBM PowerPC Initialization and Boot Software", + "licenseId": "IBM-pibs", + "seeAlso": [ + "http://git.denx.de/?p\u003du-boot.git;a\u003dblob;f\u003darch/powerpc/cpu/ppc4xx/miiphy.c;h\u003d297155fdafa064b955e53e9832de93bfb0cfb85b;hb\u003d9fab4bf4cc077c21e43941866f3f2c196f28670d" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ICU.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ICU.json", + "referenceNumber": 375, + "name": "ICU License", + "licenseId": "ICU", + "seeAlso": [ + "http://source.icu-project.org/repos/icu/icu/trunk/license.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/IEC-Code-Components-EULA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IEC-Code-Components-EULA.json", + "referenceNumber": 18, + "name": "IEC Code Components End-user licence agreement", + "licenseId": "IEC-Code-Components-EULA", + "seeAlso": [ + "https://www.iec.ch/webstore/custserv/pdf/CC-EULA.pdf", + "https://www.iec.ch/CCv1", + "https://www.iec.ch/copyright" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/IJG.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IJG.json", + "referenceNumber": 374, + "name": "Independent JPEG Group License", + "licenseId": "IJG", + "seeAlso": [ + "http://dev.w3.org/cvsweb/Amaya/libjpeg/Attic/README?rev\u003d1.2" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/IJG-short.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IJG-short.json", + "referenceNumber": 152, + "name": "Independent JPEG Group License - short", + "licenseId": "IJG-short", + "seeAlso": [ + "https://sourceforge.net/p/xmedcon/code/ci/master/tree/libs/ljpg/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ImageMagick.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ImageMagick.json", + "referenceNumber": 608, + "name": "ImageMagick License", + "licenseId": "ImageMagick", + "seeAlso": [ + "http://www.imagemagick.org/script/license.php" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/iMatix.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/iMatix.json", + "referenceNumber": 645, + "name": "iMatix Standard Function Library Agreement", + "licenseId": "iMatix", + "seeAlso": [ + "http://legacy.imatix.com/html/sfl/sfl4.htm#license" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Imlib2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Imlib2.json", + "referenceNumber": 96, + "name": "Imlib2 License", + "licenseId": "Imlib2", + "seeAlso": [ + "http://trac.enlightenment.org/e/browser/trunk/imlib2/COPYING", + "https://git.enlightenment.org/legacy/imlib2.git/tree/COPYING" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Info-ZIP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Info-ZIP.json", + "referenceNumber": 451, + "name": "Info-ZIP License", + "licenseId": "Info-ZIP", + "seeAlso": [ + "http://www.info-zip.org/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Inner-Net-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Inner-Net-2.0.json", + "referenceNumber": 58, + "name": "Inner Net License v2.0", + "licenseId": "Inner-Net-2.0", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Inner_Net_License", + "https://sourceware.org/git/?p\u003dglibc.git;a\u003dblob;f\u003dLICENSES;h\u003d530893b1dc9ea00755603c68fb36bd4fc38a7be8;hb\u003dHEAD#l207" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Intel.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Intel.json", + "referenceNumber": 316, + "name": "Intel Open Source License", + "licenseId": "Intel", + "seeAlso": [ + "https://opensource.org/licenses/Intel" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Intel-ACPI.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Intel-ACPI.json", + "referenceNumber": 309, + "name": "Intel ACPI Software License Agreement", + "licenseId": "Intel-ACPI", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Intel_ACPI_Software_License_Agreement" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Interbase-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Interbase-1.0.json", + "referenceNumber": 665, + "name": "Interbase Public License v1.0", + "licenseId": "Interbase-1.0", + "seeAlso": [ + "https://web.archive.org/web/20060319014854/http://info.borland.com/devsupport/interbase/opensource/IPL.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/IPA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IPA.json", + "referenceNumber": 237, + "name": "IPA Font License", + "licenseId": "IPA", + "seeAlso": [ + "https://opensource.org/licenses/IPA" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/IPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IPL-1.0.json", + "referenceNumber": 443, + "name": "IBM Public License v1.0", + "licenseId": "IPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/IPL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ISC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ISC.json", + "referenceNumber": 131, + "name": "ISC License", + "licenseId": "ISC", + "seeAlso": [ + "https://www.isc.org/licenses/", + "https://www.isc.org/downloads/software-support-policy/isc-license/", + "https://opensource.org/licenses/ISC" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ISC-Veillard.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ISC-Veillard.json", + "referenceNumber": 554, + "name": "ISC Veillard variant", + "licenseId": "ISC-Veillard", + "seeAlso": [ + "https://raw.githubusercontent.com/GNOME/libxml2/4c2e7c651f6c2f0d1a74f350cbda95f7df3e7017/hash.c", + "https://github.com/GNOME/libxml2/blob/master/dict.c", + "https://sourceforge.net/p/ctrio/git/ci/master/tree/README" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Jam.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Jam.json", + "referenceNumber": 338, + "name": "Jam License", + "licenseId": "Jam", + "seeAlso": [ + "https://www.boost.org/doc/libs/1_35_0/doc/html/jam.html", + "https://web.archive.org/web/20160330173339/https://swarm.workshop.perforce.com/files/guest/perforce_software/jam/src/README" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/JasPer-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/JasPer-2.0.json", + "referenceNumber": 591, + "name": "JasPer License", + "licenseId": "JasPer-2.0", + "seeAlso": [ + "http://www.ece.uvic.ca/~mdadams/jasper/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/JPL-image.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/JPL-image.json", + "referenceNumber": 343, + "name": "JPL Image Use Policy", + "licenseId": "JPL-image", + "seeAlso": [ + "https://www.jpl.nasa.gov/jpl-image-use-policy" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/JPNIC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/JPNIC.json", + "referenceNumber": 117, + "name": "Japan Network Information Center License", + "licenseId": "JPNIC", + "seeAlso": [ + "https://gitlab.isc.org/isc-projects/bind9/blob/master/COPYRIGHT#L366" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/JSON.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/JSON.json", + "referenceNumber": 174, + "name": "JSON License", + "licenseId": "JSON", + "seeAlso": [ + "http://www.json.org/license.html" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/Kastrup.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Kastrup.json", + "referenceNumber": 181, + "name": "Kastrup License", + "licenseId": "Kastrup", + "seeAlso": [ + "https://ctan.math.utah.edu/ctan/tex-archive/macros/generic/kastrup/binhex.dtx" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Kazlib.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Kazlib.json", + "referenceNumber": 197, + "name": "Kazlib License", + "licenseId": "Kazlib", + "seeAlso": [ + "http://git.savannah.gnu.org/cgit/kazlib.git/tree/except.c?id\u003d0062df360c2d17d57f6af19b0e444c51feb99036" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Knuth-CTAN.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Knuth-CTAN.json", + "referenceNumber": 22, + "name": "Knuth CTAN License", + "licenseId": "Knuth-CTAN", + "seeAlso": [ + "https://ctan.org/license/knuth" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LAL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LAL-1.2.json", + "referenceNumber": 261, + "name": "Licence Art Libre 1.2", + "licenseId": "LAL-1.2", + "seeAlso": [ + "http://artlibre.org/licence/lal/licence-art-libre-12/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LAL-1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LAL-1.3.json", + "referenceNumber": 526, + "name": "Licence Art Libre 1.3", + "licenseId": "LAL-1.3", + "seeAlso": [ + "https://artlibre.org/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Latex2e.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Latex2e.json", + "referenceNumber": 3, + "name": "Latex2e License", + "licenseId": "Latex2e", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Latex2e" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Latex2e-translated-notice.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Latex2e-translated-notice.json", + "referenceNumber": 104, + "name": "Latex2e with translated notice permission", + "licenseId": "Latex2e-translated-notice", + "seeAlso": [ + "https://git.savannah.gnu.org/cgit/indent.git/tree/doc/indent.texi?id\u003da74c6b4ee49397cf330b333da1042bffa60ed14f#n74" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Leptonica.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Leptonica.json", + "referenceNumber": 221, + "name": "Leptonica License", + "licenseId": "Leptonica", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Leptonica" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.0.json", + "referenceNumber": 81, + "name": "GNU Library General Public License v2 only", + "licenseId": "LGPL-2.0", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.0+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.0+.json", + "referenceNumber": 265, + "name": "GNU Library General Public License v2 or later", + "licenseId": "LGPL-2.0+", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.0-only.json", + "referenceNumber": 517, + "name": "GNU Library General Public License v2 only", + "licenseId": "LGPL-2.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.0-or-later.json", + "referenceNumber": 458, + "name": "GNU Library General Public License v2 or later", + "licenseId": "LGPL-2.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.1.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.1.json", + "referenceNumber": 659, + "name": "GNU Lesser General Public License v2.1 only", + "licenseId": "LGPL-2.1", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "https://opensource.org/licenses/LGPL-2.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.1+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.1+.json", + "referenceNumber": 69, + "name": "GNU Lesser General Public License v2.1 or later", + "licenseId": "LGPL-2.1+", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "https://opensource.org/licenses/LGPL-2.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.1-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.1-only.json", + "referenceNumber": 524, + "name": "GNU Lesser General Public License v2.1 only", + "licenseId": "LGPL-2.1-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "https://opensource.org/licenses/LGPL-2.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.1-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.1-or-later.json", + "referenceNumber": 336, + "name": "GNU Lesser General Public License v2.1 or later", + "licenseId": "LGPL-2.1-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "https://opensource.org/licenses/LGPL-2.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-3.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-3.0.json", + "referenceNumber": 381, + "name": "GNU Lesser General Public License v3.0 only", + "licenseId": "LGPL-3.0", + "seeAlso": [ + "https://www.gnu.org/licenses/lgpl-3.0-standalone.html", + "https://www.gnu.org/licenses/lgpl+gpl-3.0.txt", + "https://opensource.org/licenses/LGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-3.0+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-3.0+.json", + "referenceNumber": 303, + "name": "GNU Lesser General Public License v3.0 or later", + "licenseId": "LGPL-3.0+", + "seeAlso": [ + "https://www.gnu.org/licenses/lgpl-3.0-standalone.html", + "https://www.gnu.org/licenses/lgpl+gpl-3.0.txt", + "https://opensource.org/licenses/LGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-3.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-3.0-only.json", + "referenceNumber": 225, + "name": "GNU Lesser General Public License v3.0 only", + "licenseId": "LGPL-3.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/lgpl-3.0-standalone.html", + "https://www.gnu.org/licenses/lgpl+gpl-3.0.txt", + "https://opensource.org/licenses/LGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-3.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-3.0-or-later.json", + "referenceNumber": 411, + "name": "GNU Lesser General Public License v3.0 or later", + "licenseId": "LGPL-3.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/lgpl-3.0-standalone.html", + "https://www.gnu.org/licenses/lgpl+gpl-3.0.txt", + "https://opensource.org/licenses/LGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPLLR.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPLLR.json", + "referenceNumber": 87, + "name": "Lesser General Public License For Linguistic Resources", + "licenseId": "LGPLLR", + "seeAlso": [ + "http://www-igm.univ-mlv.fr/~unitex/lgpllr.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Libpng.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Libpng.json", + "referenceNumber": 531, + "name": "libpng License", + "licenseId": "Libpng", + "seeAlso": [ + "http://www.libpng.org/pub/png/src/libpng-LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/libpng-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/libpng-2.0.json", + "referenceNumber": 149, + "name": "PNG Reference Library version 2", + "licenseId": "libpng-2.0", + "seeAlso": [ + "http://www.libpng.org/pub/png/src/libpng-LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/libselinux-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/libselinux-1.0.json", + "referenceNumber": 320, + "name": "libselinux public domain notice", + "licenseId": "libselinux-1.0", + "seeAlso": [ + "https://github.com/SELinuxProject/selinux/blob/master/libselinux/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/libtiff.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/libtiff.json", + "referenceNumber": 24, + "name": "libtiff License", + "licenseId": "libtiff", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/libtiff" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/libutil-David-Nugent.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/libutil-David-Nugent.json", + "referenceNumber": 662, + "name": "libutil David Nugent License", + "licenseId": "libutil-David-Nugent", + "seeAlso": [ + "http://web.mit.edu/freebsd/head/lib/libutil/login_ok.3", + "https://cgit.freedesktop.org/libbsd/tree/man/setproctitle.3bsd" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LiLiQ-P-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LiLiQ-P-1.1.json", + "referenceNumber": 150, + "name": "Licence Libre du Québec – Permissive version 1.1", + "licenseId": "LiLiQ-P-1.1", + "seeAlso": [ + "https://forge.gouv.qc.ca/licence/fr/liliq-v1-1/", + "http://opensource.org/licenses/LiLiQ-P-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LiLiQ-R-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LiLiQ-R-1.1.json", + "referenceNumber": 203, + "name": "Licence Libre du Québec – Réciprocité version 1.1", + "licenseId": "LiLiQ-R-1.1", + "seeAlso": [ + "https://www.forge.gouv.qc.ca/participez/licence-logicielle/licence-libre-du-quebec-liliq-en-francais/licence-libre-du-quebec-reciprocite-liliq-r-v1-1/", + "http://opensource.org/licenses/LiLiQ-R-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LiLiQ-Rplus-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LiLiQ-Rplus-1.1.json", + "referenceNumber": 314, + "name": "Licence Libre du Québec – Réciprocité forte version 1.1", + "licenseId": "LiLiQ-Rplus-1.1", + "seeAlso": [ + "https://www.forge.gouv.qc.ca/participez/licence-logicielle/licence-libre-du-quebec-liliq-en-francais/licence-libre-du-quebec-reciprocite-forte-liliq-r-v1-1/", + "http://opensource.org/licenses/LiLiQ-Rplus-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Linux-man-pages-1-para.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Linux-man-pages-1-para.json", + "referenceNumber": 577, + "name": "Linux man-pages - 1 paragraph", + "licenseId": "Linux-man-pages-1-para", + "seeAlso": [ + "https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/man2/getcpu.2#n4" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Linux-man-pages-copyleft.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Linux-man-pages-copyleft.json", + "referenceNumber": 213, + "name": "Linux man-pages Copyleft", + "licenseId": "Linux-man-pages-copyleft", + "seeAlso": [ + "https://www.kernel.org/doc/man-pages/licenses.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Linux-man-pages-copyleft-2-para.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Linux-man-pages-copyleft-2-para.json", + "referenceNumber": 352, + "name": "Linux man-pages Copyleft - 2 paragraphs", + "licenseId": "Linux-man-pages-copyleft-2-para", + "seeAlso": [ + "https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/man2/move_pages.2#n5", + "https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/man2/migrate_pages.2#n8" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Linux-man-pages-copyleft-var.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Linux-man-pages-copyleft-var.json", + "referenceNumber": 186, + "name": "Linux man-pages Copyleft Variant", + "licenseId": "Linux-man-pages-copyleft-var", + "seeAlso": [ + "https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/man2/set_mempolicy.2#n5" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Linux-OpenIB.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Linux-OpenIB.json", + "referenceNumber": 278, + "name": "Linux Kernel Variant of OpenIB.org license", + "licenseId": "Linux-OpenIB", + "seeAlso": [ + "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/infiniband/core/sa.h" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LOOP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LOOP.json", + "referenceNumber": 521, + "name": "Common Lisp LOOP License", + "licenseId": "LOOP", + "seeAlso": [ + "https://gitlab.com/embeddable-common-lisp/ecl/-/blob/develop/src/lsp/loop.lsp", + "http://git.savannah.gnu.org/cgit/gcl.git/tree/gcl/lsp/gcl_loop.lsp?h\u003dVersion_2_6_13pre", + "https://sourceforge.net/p/sbcl/sbcl/ci/master/tree/src/code/loop.lisp", + "https://github.com/cl-adams/adams/blob/master/LICENSE.md", + "https://github.com/blakemcbride/eclipse-lisp/blob/master/lisp/loop.lisp", + "https://gitlab.common-lisp.net/cmucl/cmucl/-/blob/master/src/code/loop.lisp" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LPD-document.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPD-document.json", + "referenceNumber": 561, + "name": "LPD Documentation License", + "licenseId": "LPD-document", + "seeAlso": [ + "https://github.com/Cyan4973/xxHash/blob/dev/doc/xxhash_spec.md", + "https://www.ietf.org/rfc/rfc1952.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPL-1.0.json", + "referenceNumber": 267, + "name": "Lucent Public License Version 1.0", + "licenseId": "LPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/LPL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LPL-1.02.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPL-1.02.json", + "referenceNumber": 122, + "name": "Lucent Public License v1.02", + "licenseId": "LPL-1.02", + "seeAlso": [ + "http://plan9.bell-labs.com/plan9/license.html", + "https://opensource.org/licenses/LPL-1.02" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LPPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPPL-1.0.json", + "referenceNumber": 133, + "name": "LaTeX Project Public License v1.0", + "licenseId": "LPPL-1.0", + "seeAlso": [ + "http://www.latex-project.org/lppl/lppl-1-0.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LPPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPPL-1.1.json", + "referenceNumber": 284, + "name": "LaTeX Project Public License v1.1", + "licenseId": "LPPL-1.1", + "seeAlso": [ + "http://www.latex-project.org/lppl/lppl-1-1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LPPL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPPL-1.2.json", + "referenceNumber": 407, + "name": "LaTeX Project Public License v1.2", + "licenseId": "LPPL-1.2", + "seeAlso": [ + "http://www.latex-project.org/lppl/lppl-1-2.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LPPL-1.3a.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPPL-1.3a.json", + "referenceNumber": 510, + "name": "LaTeX Project Public License v1.3a", + "licenseId": "LPPL-1.3a", + "seeAlso": [ + "http://www.latex-project.org/lppl/lppl-1-3a.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LPPL-1.3c.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPPL-1.3c.json", + "referenceNumber": 300, + "name": "LaTeX Project Public License v1.3c", + "licenseId": "LPPL-1.3c", + "seeAlso": [ + "http://www.latex-project.org/lppl/lppl-1-3c.txt", + "https://opensource.org/licenses/LPPL-1.3c" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/lsof.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/lsof.json", + "referenceNumber": 76, + "name": "lsof License", + "licenseId": "lsof", + "seeAlso": [ + "https://github.com/lsof-org/lsof/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Lucida-Bitmap-Fonts.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Lucida-Bitmap-Fonts.json", + "referenceNumber": 383, + "name": "Lucida Bitmap Fonts License", + "licenseId": "Lucida-Bitmap-Fonts", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/font/bh-100dpi/-/blob/master/COPYING?ref_type\u003dheads" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LZMA-SDK-9.11-to-9.20.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LZMA-SDK-9.11-to-9.20.json", + "referenceNumber": 239, + "name": "LZMA SDK License (versions 9.11 to 9.20)", + "licenseId": "LZMA-SDK-9.11-to-9.20", + "seeAlso": [ + "https://www.7-zip.org/sdk.html", + "https://sourceforge.net/projects/sevenzip/files/LZMA%20SDK/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LZMA-SDK-9.22.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LZMA-SDK-9.22.json", + "referenceNumber": 600, + "name": "LZMA SDK License (versions 9.22 and beyond)", + "licenseId": "LZMA-SDK-9.22", + "seeAlso": [ + "https://www.7-zip.org/sdk.html", + "https://sourceforge.net/projects/sevenzip/files/LZMA%20SDK/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Mackerras-3-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Mackerras-3-Clause.json", + "referenceNumber": 540, + "name": "Mackerras 3-Clause License", + "licenseId": "Mackerras-3-Clause", + "seeAlso": [ + "https://github.com/ppp-project/ppp/blob/master/pppd/chap_ms.c#L6-L28" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Mackerras-3-Clause-acknowledgment.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Mackerras-3-Clause-acknowledgment.json", + "referenceNumber": 176, + "name": "Mackerras 3-Clause - acknowledgment variant", + "licenseId": "Mackerras-3-Clause-acknowledgment", + "seeAlso": [ + "https://github.com/ppp-project/ppp/blob/master/pppd/auth.c#L6-L28" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/magaz.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/magaz.json", + "referenceNumber": 93, + "name": "magaz License", + "licenseId": "magaz", + "seeAlso": [ + "https://mirrors.nic.cz/tex-archive/macros/latex/contrib/magaz/magaz.tex" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/mailprio.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/mailprio.json", + "referenceNumber": 292, + "name": "mailprio License", + "licenseId": "mailprio", + "seeAlso": [ + "https://fossies.org/linux/sendmail/contrib/mailprio" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MakeIndex.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MakeIndex.json", + "referenceNumber": 552, + "name": "MakeIndex License", + "licenseId": "MakeIndex", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MakeIndex" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Martin-Birgmeier.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Martin-Birgmeier.json", + "referenceNumber": 364, + "name": "Martin Birgmeier License", + "licenseId": "Martin-Birgmeier", + "seeAlso": [ + "https://github.com/Perl/perl5/blob/blead/util.c#L6136" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/McPhee-slideshow.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/McPhee-slideshow.json", + "referenceNumber": 511, + "name": "McPhee Slideshow License", + "licenseId": "McPhee-slideshow", + "seeAlso": [ + "https://mirror.las.iastate.edu/tex-archive/graphics/metapost/contrib/macros/slideshow/slideshow.mp" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/metamail.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/metamail.json", + "referenceNumber": 325, + "name": "metamail License", + "licenseId": "metamail", + "seeAlso": [ + "https://github.com/Dual-Life/mime-base64/blob/master/Base64.xs#L12" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Minpack.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Minpack.json", + "referenceNumber": 634, + "name": "Minpack License", + "licenseId": "Minpack", + "seeAlso": [ + "http://www.netlib.org/minpack/disclaimer", + "https://gitlab.com/libeigen/eigen/-/blob/master/COPYING.MINPACK" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MirOS.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MirOS.json", + "referenceNumber": 202, + "name": "The MirOS Licence", + "licenseId": "MirOS", + "seeAlso": [ + "https://opensource.org/licenses/MirOS" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/MIT.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT.json", + "referenceNumber": 601, + "name": "MIT License", + "licenseId": "MIT", + "seeAlso": [ + "https://opensource.org/license/mit/" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/MIT-0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-0.json", + "referenceNumber": 587, + "name": "MIT No Attribution", + "licenseId": "MIT-0", + "seeAlso": [ + "https://github.com/aws/mit-0", + "https://romanrm.net/mit-zero", + "https://github.com/awsdocs/aws-cloud9-user-guide/blob/master/LICENSE-SAMPLECODE" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/MIT-advertising.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-advertising.json", + "referenceNumber": 39, + "name": "Enlightenment License (e16)", + "licenseId": "MIT-advertising", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MIT_With_Advertising" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-CMU.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-CMU.json", + "referenceNumber": 36, + "name": "CMU License", + "licenseId": "MIT-CMU", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:MIT?rd\u003dLicensing/MIT#CMU_Style", + "https://github.com/python-pillow/Pillow/blob/fffb426092c8db24a5f4b6df243a8a3c01fb63cd/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-enna.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-enna.json", + "referenceNumber": 207, + "name": "enna License", + "licenseId": "MIT-enna", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MIT#enna" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-feh.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-feh.json", + "referenceNumber": 146, + "name": "feh License", + "licenseId": "MIT-feh", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MIT#feh" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-Festival.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-Festival.json", + "referenceNumber": 431, + "name": "MIT Festival Variant", + "licenseId": "MIT-Festival", + "seeAlso": [ + "https://github.com/festvox/flite/blob/master/COPYING", + "https://github.com/festvox/speech_tools/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-Khronos-old.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-Khronos-old.json", + "referenceNumber": 68, + "name": "MIT Khronos - old variant", + "licenseId": "MIT-Khronos-old", + "seeAlso": [ + "https://github.com/KhronosGroup/SPIRV-Cross/blob/main/LICENSES/LicenseRef-KhronosFreeUse.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-Modern-Variant.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-Modern-Variant.json", + "referenceNumber": 92, + "name": "MIT License Modern Variant", + "licenseId": "MIT-Modern-Variant", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:MIT#Modern_Variants", + "https://ptolemy.berkeley.edu/copyright.htm", + "https://pirlwww.lpl.arizona.edu/resources/guide/software/PerlTk/Tixlic.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/MIT-open-group.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-open-group.json", + "referenceNumber": 520, + "name": "MIT Open Group variant", + "licenseId": "MIT-open-group", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/app/iceauth/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/app/xvinfo/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/app/xsetroot/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/app/xauth/-/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-testregex.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-testregex.json", + "referenceNumber": 578, + "name": "MIT testregex Variant", + "licenseId": "MIT-testregex", + "seeAlso": [ + "https://github.com/dotnet/runtime/blob/55e1ac7c07df62c4108d4acedf78f77574470ce5/src/libraries/System.Text.RegularExpressions/tests/FunctionalTests/AttRegexTests.cs#L12-L28" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-Wu.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-Wu.json", + "referenceNumber": 156, + "name": "MIT Tom Wu Variant", + "licenseId": "MIT-Wu", + "seeAlso": [ + "https://github.com/chromium/octane/blob/master/crypto.js" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MITNFA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MITNFA.json", + "referenceNumber": 650, + "name": "MIT +no-false-attribs license", + "licenseId": "MITNFA", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MITNFA" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MMIXware.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MMIXware.json", + "referenceNumber": 444, + "name": "MMIXware License", + "licenseId": "MMIXware", + "seeAlso": [ + "https://gitlab.lrz.de/mmix/mmixware/-/blob/master/boilerplate.w" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Motosoto.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Motosoto.json", + "referenceNumber": 31, + "name": "Motosoto License", + "licenseId": "Motosoto", + "seeAlso": [ + "https://opensource.org/licenses/Motosoto" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/MPEG-SSG.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MPEG-SSG.json", + "referenceNumber": 323, + "name": "MPEG Software Simulation", + "licenseId": "MPEG-SSG", + "seeAlso": [ + "https://sourceforge.net/p/netpbm/code/HEAD/tree/super_stable/converter/ppm/ppmtompeg/jrevdct.c#l1189" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/mpi-permissive.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/mpi-permissive.json", + "referenceNumber": 459, + "name": "mpi Permissive License", + "licenseId": "mpi-permissive", + "seeAlso": [ + "https://sources.debian.org/src/openmpi/4.1.0-10/ompi/debuggers/msgq_interface.h/?hl\u003d19#L19" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/mpich2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/mpich2.json", + "referenceNumber": 448, + "name": "mpich2 License", + "licenseId": "mpich2", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MIT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MPL-1.0.json", + "referenceNumber": 248, + "name": "Mozilla Public License 1.0", + "licenseId": "MPL-1.0", + "seeAlso": [ + "http://www.mozilla.org/MPL/MPL-1.0.html", + "https://opensource.org/licenses/MPL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/MPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MPL-1.1.json", + "referenceNumber": 219, + "name": "Mozilla Public License 1.1", + "licenseId": "MPL-1.1", + "seeAlso": [ + "http://www.mozilla.org/MPL/MPL-1.1.html", + "https://opensource.org/licenses/MPL-1.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/MPL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MPL-2.0.json", + "referenceNumber": 147, + "name": "Mozilla Public License 2.0", + "licenseId": "MPL-2.0", + "seeAlso": [ + "https://www.mozilla.org/MPL/2.0/", + "https://opensource.org/licenses/MPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/MPL-2.0-no-copyleft-exception.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MPL-2.0-no-copyleft-exception.json", + "referenceNumber": 529, + "name": "Mozilla Public License 2.0 (no copyleft exception)", + "licenseId": "MPL-2.0-no-copyleft-exception", + "seeAlso": [ + "https://www.mozilla.org/MPL/2.0/", + "https://opensource.org/licenses/MPL-2.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/mplus.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/mplus.json", + "referenceNumber": 553, + "name": "mplus Font License", + "licenseId": "mplus", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:Mplus?rd\u003dLicensing/mplus" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MS-LPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MS-LPL.json", + "referenceNumber": 412, + "name": "Microsoft Limited Public License", + "licenseId": "MS-LPL", + "seeAlso": [ + "https://www.openhub.net/licenses/mslpl", + "https://github.com/gabegundy/atlserver/blob/master/License.txt", + "https://en.wikipedia.org/wiki/Shared_Source_Initiative#Microsoft_Limited_Public_License_(Ms-LPL)" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MS-PL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MS-PL.json", + "referenceNumber": 360, + "name": "Microsoft Public License", + "licenseId": "MS-PL", + "seeAlso": [ + "http://www.microsoft.com/opensource/licenses.mspx", + "https://opensource.org/licenses/MS-PL" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/MS-RL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MS-RL.json", + "referenceNumber": 212, + "name": "Microsoft Reciprocal License", + "licenseId": "MS-RL", + "seeAlso": [ + "http://www.microsoft.com/opensource/licenses.mspx", + "https://opensource.org/licenses/MS-RL" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/MTLL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MTLL.json", + "referenceNumber": 610, + "name": "Matrix Template Library License", + "licenseId": "MTLL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Matrix_Template_Library_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MulanPSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MulanPSL-1.0.json", + "referenceNumber": 236, + "name": "Mulan Permissive Software License, Version 1", + "licenseId": "MulanPSL-1.0", + "seeAlso": [ + "https://license.coscl.org.cn/MulanPSL/", + "https://github.com/yuwenlong/longphp/blob/25dfb70cc2a466dc4bb55ba30901cbce08d164b5/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MulanPSL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MulanPSL-2.0.json", + "referenceNumber": 523, + "name": "Mulan Permissive Software License, Version 2", + "licenseId": "MulanPSL-2.0", + "seeAlso": [ + "https://license.coscl.org.cn/MulanPSL2" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Multics.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Multics.json", + "referenceNumber": 462, + "name": "Multics License", + "licenseId": "Multics", + "seeAlso": [ + "https://opensource.org/licenses/Multics" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Mup.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Mup.json", + "referenceNumber": 515, + "name": "Mup License", + "licenseId": "Mup", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Mup" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NAIST-2003.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NAIST-2003.json", + "referenceNumber": 118, + "name": "Nara Institute of Science and Technology License (2003)", + "licenseId": "NAIST-2003", + "seeAlso": [ + "https://enterprise.dejacode.com/licenses/public/naist-2003/#license-text", + "https://github.com/nodejs/node/blob/4a19cc8947b1bba2b2d27816ec3d0edf9b28e503/LICENSE#L343" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NASA-1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NASA-1.3.json", + "referenceNumber": 488, + "name": "NASA Open Source Agreement 1.3", + "licenseId": "NASA-1.3", + "seeAlso": [ + "http://ti.arc.nasa.gov/opensource/nosa/", + "https://opensource.org/licenses/NASA-1.3" + ], + "isOsiApproved": true, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/Naumen.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Naumen.json", + "referenceNumber": 400, + "name": "Naumen Public License", + "licenseId": "Naumen", + "seeAlso": [ + "https://opensource.org/licenses/Naumen" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/NBPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NBPL-1.0.json", + "referenceNumber": 168, + "name": "Net Boolean Public License v1", + "licenseId": "NBPL-1.0", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d37b4b3f6cc4bf34e1d3dec61e69914b9819d8894" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NCBI-PD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NCBI-PD.json", + "referenceNumber": 599, + "name": "NCBI Public Domain Notice", + "licenseId": "NCBI-PD", + "seeAlso": [ + "https://github.com/ncbi/sra-tools/blob/e8e5b6af4edc460156ad9ce5902d0779cffbf685/LICENSE", + "https://github.com/ncbi/datasets/blob/0ea4cd16b61e5b799d9cc55aecfa016d6c9bd2bf/LICENSE.md", + "https://github.com/ncbi/gprobe/blob/de64d30fee8b4c4013094d7d3139ea89b5dd1ace/LICENSE", + "https://github.com/ncbi/egapx/blob/08930b9dec0c69b2d1a05e5153c7b95ef0a3eb0f/LICENSE", + "https://github.com/ncbi/datasets/blob/master/LICENSE.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NCGL-UK-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NCGL-UK-2.0.json", + "referenceNumber": 130, + "name": "Non-Commercial Government Licence", + "licenseId": "NCGL-UK-2.0", + "seeAlso": [ + "http://www.nationalarchives.gov.uk/doc/non-commercial-government-licence/version/2/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NCL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NCL.json", + "referenceNumber": 516, + "name": "NCL Source Code License", + "licenseId": "NCL", + "seeAlso": [ + "https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/master/src/modules/module-filter-chain/pffft.c?ref_type\u003dheads#L1-52" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NCSA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NCSA.json", + "referenceNumber": 652, + "name": "University of Illinois/NCSA Open Source License", + "licenseId": "NCSA", + "seeAlso": [ + "http://otm.illinois.edu/uiuc_openSource", + "https://opensource.org/licenses/NCSA" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Net-SNMP.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/Net-SNMP.json", + "referenceNumber": 469, + "name": "Net-SNMP License", + "licenseId": "Net-SNMP", + "seeAlso": [ + "http://net-snmp.sourceforge.net/about/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NetCDF.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NetCDF.json", + "referenceNumber": 189, + "name": "NetCDF license", + "licenseId": "NetCDF", + "seeAlso": [ + "http://www.unidata.ucar.edu/software/netcdf/copyright.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Newsletr.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Newsletr.json", + "referenceNumber": 499, + "name": "Newsletr License", + "licenseId": "Newsletr", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Newsletr" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NGPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NGPL.json", + "referenceNumber": 167, + "name": "Nethack General Public License", + "licenseId": "NGPL", + "seeAlso": [ + "https://opensource.org/licenses/NGPL" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/NICTA-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NICTA-1.0.json", + "referenceNumber": 486, + "name": "NICTA Public Software License, Version 1.0", + "licenseId": "NICTA-1.0", + "seeAlso": [ + "https://opensource.apple.com/source/mDNSResponder/mDNSResponder-320.10/mDNSPosix/nss_ReadMe.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NIST-PD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NIST-PD.json", + "referenceNumber": 194, + "name": "NIST Public Domain Notice", + "licenseId": "NIST-PD", + "seeAlso": [ + "https://github.com/tcheneau/simpleRPL/blob/e645e69e38dd4e3ccfeceb2db8cba05b7c2e0cd3/LICENSE.txt", + "https://github.com/tcheneau/Routing/blob/f09f46fcfe636107f22f2c98348188a65a135d98/README.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NIST-PD-fallback.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NIST-PD-fallback.json", + "referenceNumber": 223, + "name": "NIST Public Domain Notice with license fallback", + "licenseId": "NIST-PD-fallback", + "seeAlso": [ + "https://github.com/usnistgov/jsip/blob/59700e6926cbe96c5cdae897d9a7d2656b42abe3/LICENSE", + "https://github.com/usnistgov/fipy/blob/86aaa5c2ba2c6f1be19593c5986071cf6568cc34/LICENSE.rst" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NIST-Software.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NIST-Software.json", + "referenceNumber": 251, + "name": "NIST Software License", + "licenseId": "NIST-Software", + "seeAlso": [ + "https://github.com/open-quantum-safe/liboqs/blob/40b01fdbb270f8614fde30e65d30e9da18c02393/src/common/rand/rand_nist.c#L1-L15" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NLOD-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NLOD-1.0.json", + "referenceNumber": 294, + "name": "Norwegian Licence for Open Government Data (NLOD) 1.0", + "licenseId": "NLOD-1.0", + "seeAlso": [ + "http://data.norge.no/nlod/en/1.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NLOD-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NLOD-2.0.json", + "referenceNumber": 566, + "name": "Norwegian Licence for Open Government Data (NLOD) 2.0", + "licenseId": "NLOD-2.0", + "seeAlso": [ + "http://data.norge.no/nlod/en/2.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NLPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NLPL.json", + "referenceNumber": 367, + "name": "No Limit Public License", + "licenseId": "NLPL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/NLPL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Nokia.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Nokia.json", + "referenceNumber": 145, + "name": "Nokia Open Source License", + "licenseId": "Nokia", + "seeAlso": [ + "https://opensource.org/licenses/nokia" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/NOSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NOSL.json", + "referenceNumber": 254, + "name": "Netizen Open Source License", + "licenseId": "NOSL", + "seeAlso": [ + "http://bits.netizen.com.au/licenses/NOSL/nosl.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Noweb.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Noweb.json", + "referenceNumber": 30, + "name": "Noweb License", + "licenseId": "Noweb", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Noweb" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NPL-1.0.json", + "referenceNumber": 211, + "name": "Netscape Public License v1.0", + "licenseId": "NPL-1.0", + "seeAlso": [ + "http://www.mozilla.org/MPL/NPL/1.0/" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/NPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NPL-1.1.json", + "referenceNumber": 595, + "name": "Netscape Public License v1.1", + "licenseId": "NPL-1.1", + "seeAlso": [ + "http://www.mozilla.org/MPL/NPL/1.1/" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/NPOSL-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NPOSL-3.0.json", + "referenceNumber": 664, + "name": "Non-Profit Open Software License 3.0", + "licenseId": "NPOSL-3.0", + "seeAlso": [ + "https://opensource.org/licenses/NOSL3.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/NRL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NRL.json", + "referenceNumber": 113, + "name": "NRL License", + "licenseId": "NRL", + "seeAlso": [ + "http://web.mit.edu/network/isakmp/nrllicense.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NTP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NTP.json", + "referenceNumber": 390, + "name": "NTP License", + "licenseId": "NTP", + "seeAlso": [ + "https://opensource.org/licenses/NTP" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/NTP-0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NTP-0.json", + "referenceNumber": 64, + "name": "NTP No Attribution", + "licenseId": "NTP-0", + "seeAlso": [ + "https://github.com/tytso/e2fsprogs/blob/master/lib/et/et_name.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Nunit.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/Nunit.json", + "referenceNumber": 27, + "name": "Nunit License", + "licenseId": "Nunit", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Nunit" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/O-UDA-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/O-UDA-1.0.json", + "referenceNumber": 161, + "name": "Open Use of Data Agreement v1.0", + "licenseId": "O-UDA-1.0", + "seeAlso": [ + "https://github.com/microsoft/Open-Use-of-Data-Agreement/blob/v1.0/O-UDA-1.0.md", + "https://cdla.dev/open-use-of-data-agreement-v1-0/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OAR.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OAR.json", + "referenceNumber": 100, + "name": "OAR License", + "licenseId": "OAR", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dnewlib-cygwin.git;a\u003dblob;f\u003dnewlib/libc/string/strsignal.c;hb\u003dHEAD#l35" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OCCT-PL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OCCT-PL.json", + "referenceNumber": 408, + "name": "Open CASCADE Technology Public License", + "licenseId": "OCCT-PL", + "seeAlso": [ + "http://www.opencascade.com/content/occt-public-license" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OCLC-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OCLC-2.0.json", + "referenceNumber": 468, + "name": "OCLC Research Public License 2.0", + "licenseId": "OCLC-2.0", + "seeAlso": [ + "http://www.oclc.org/research/activities/software/license/v2final.htm", + "https://opensource.org/licenses/OCLC-2.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/ODbL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ODbL-1.0.json", + "referenceNumber": 611, + "name": "Open Data Commons Open Database License v1.0", + "licenseId": "ODbL-1.0", + "seeAlso": [ + "http://www.opendatacommons.org/licenses/odbl/1.0/", + "https://opendatacommons.org/licenses/odbl/1-0/" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ODC-By-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ODC-By-1.0.json", + "referenceNumber": 15, + "name": "Open Data Commons Attribution License v1.0", + "licenseId": "ODC-By-1.0", + "seeAlso": [ + "https://opendatacommons.org/licenses/by/1.0/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OFFIS.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFFIS.json", + "referenceNumber": 418, + "name": "OFFIS License", + "licenseId": "OFFIS", + "seeAlso": [ + "https://sourceforge.net/p/xmedcon/code/ci/master/tree/libs/dicom/README" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OFL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.0.json", + "referenceNumber": 603, + "name": "SIL Open Font License 1.0", + "licenseId": "OFL-1.0", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL10_web" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OFL-1.0-no-RFN.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.0-no-RFN.json", + "referenceNumber": 545, + "name": "SIL Open Font License 1.0 with no Reserved Font Name", + "licenseId": "OFL-1.0-no-RFN", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL10_web" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OFL-1.0-RFN.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.0-RFN.json", + "referenceNumber": 446, + "name": "SIL Open Font License 1.0 with Reserved Font Name", + "licenseId": "OFL-1.0-RFN", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL10_web" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OFL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.1.json", + "referenceNumber": 0, + "name": "SIL Open Font License 1.1", + "licenseId": "OFL-1.1", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL_web", + "https://opensource.org/licenses/OFL-1.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OFL-1.1-no-RFN.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.1-no-RFN.json", + "referenceNumber": 110, + "name": "SIL Open Font License 1.1 with no Reserved Font Name", + "licenseId": "OFL-1.1-no-RFN", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL_web", + "https://opensource.org/licenses/OFL-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OFL-1.1-RFN.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.1-RFN.json", + "referenceNumber": 90, + "name": "SIL Open Font License 1.1 with Reserved Font Name", + "licenseId": "OFL-1.1-RFN", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL_web", + "https://opensource.org/licenses/OFL-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OGC-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGC-1.0.json", + "referenceNumber": 504, + "name": "OGC Software License, Version 1.0", + "licenseId": "OGC-1.0", + "seeAlso": [ + "https://www.ogc.org/ogc/software/1.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGDL-Taiwan-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGDL-Taiwan-1.0.json", + "referenceNumber": 23, + "name": "Taiwan Open Government Data License, version 1.0", + "licenseId": "OGDL-Taiwan-1.0", + "seeAlso": [ + "https://data.gov.tw/license" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGL-Canada-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGL-Canada-2.0.json", + "referenceNumber": 40, + "name": "Open Government Licence - Canada", + "licenseId": "OGL-Canada-2.0", + "seeAlso": [ + "https://open.canada.ca/en/open-government-licence-canada" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGL-UK-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGL-UK-1.0.json", + "referenceNumber": 497, + "name": "Open Government Licence v1.0", + "licenseId": "OGL-UK-1.0", + "seeAlso": [ + "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/1/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGL-UK-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGL-UK-2.0.json", + "referenceNumber": 556, + "name": "Open Government Licence v2.0", + "licenseId": "OGL-UK-2.0", + "seeAlso": [ + "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/2/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGL-UK-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGL-UK-3.0.json", + "referenceNumber": 585, + "name": "Open Government Licence v3.0", + "licenseId": "OGL-UK-3.0", + "seeAlso": [ + "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGTSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGTSL.json", + "referenceNumber": 97, + "name": "Open Group Test Suite License", + "licenseId": "OGTSL", + "seeAlso": [ + "http://www.opengroup.org/testing/downloads/The_Open_Group_TSL.txt", + "https://opensource.org/licenses/OGTSL" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OLDAP-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-1.1.json", + "referenceNumber": 420, + "name": "Open LDAP Public License v1.1", + "licenseId": "OLDAP-1.1", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d806557a5ad59804ef3a44d5abfbe91d706b0791f" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-1.2.json", + "referenceNumber": 487, + "name": "Open LDAP Public License v1.2", + "licenseId": "OLDAP-1.2", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d42b0383c50c299977b5893ee695cf4e486fb0dc7" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-1.3.json", + "referenceNumber": 627, + "name": "Open LDAP Public License v1.3", + "licenseId": "OLDAP-1.3", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003de5f8117f0ce088d0bd7a8e18ddf37eaa40eb09b1" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-1.4.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-1.4.json", + "referenceNumber": 45, + "name": "Open LDAP Public License v1.4", + "licenseId": "OLDAP-1.4", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dc9f95c2f3f2ffb5e0ae55fe7388af75547660941" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.0.json", + "referenceNumber": 537, + "name": "Open LDAP Public License v2.0 (or possibly 2.0A and 2.0B)", + "licenseId": "OLDAP-2.0", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dcbf50f4e1185a21abd4c0a54d3f4341fe28f36ea" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.0.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.0.1.json", + "referenceNumber": 179, + "name": "Open LDAP Public License v2.0.1", + "licenseId": "OLDAP-2.0.1", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003db6d68acd14e51ca3aab4428bf26522aa74873f0e" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.1.json", + "referenceNumber": 342, + "name": "Open LDAP Public License v2.1", + "licenseId": "OLDAP-2.1", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003db0d176738e96a0d3b9f85cb51e140a86f21be715" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.2.json", + "referenceNumber": 347, + "name": "Open LDAP Public License v2.2", + "licenseId": "OLDAP-2.2", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d470b0c18ec67621c85881b2733057fecf4a1acc3" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.2.1.json", + "referenceNumber": 208, + "name": "Open LDAP Public License v2.2.1", + "licenseId": "OLDAP-2.2.1", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d4bc786f34b50aa301be6f5600f58a980070f481e" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.2.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.2.2.json", + "referenceNumber": 312, + "name": "Open LDAP Public License 2.2.2", + "licenseId": "OLDAP-2.2.2", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003ddf2cc1e21eb7c160695f5b7cffd6296c151ba188" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.3.json", + "referenceNumber": 276, + "name": "Open LDAP Public License v2.3", + "licenseId": "OLDAP-2.3", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dd32cf54a32d581ab475d23c810b0a7fbaf8d63c3" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.4.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.4.json", + "referenceNumber": 108, + "name": "Open LDAP Public License v2.4", + "licenseId": "OLDAP-2.4", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dcd1284c4a91a8a380d904eee68d1583f989ed386" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.5.json", + "referenceNumber": 518, + "name": "Open LDAP Public License v2.5", + "licenseId": "OLDAP-2.5", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d6852b9d90022e8593c98205413380536b1b5a7cf" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.6.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.6.json", + "referenceNumber": 275, + "name": "Open LDAP Public License v2.6", + "licenseId": "OLDAP-2.6", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d1cae062821881f41b73012ba816434897abf4205" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.7.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.7.json", + "referenceNumber": 79, + "name": "Open LDAP Public License v2.7", + "licenseId": "OLDAP-2.7", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d47c2415c1df81556eeb39be6cad458ef87c534a2" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.8.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.8.json", + "referenceNumber": 72, + "name": "Open LDAP Public License v2.8", + "licenseId": "OLDAP-2.8", + "seeAlso": [ + "http://www.openldap.org/software/release/license.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OLFL-1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLFL-1.3.json", + "referenceNumber": 204, + "name": "Open Logistics Foundation License Version 1.3", + "licenseId": "OLFL-1.3", + "seeAlso": [ + "https://openlogisticsfoundation.org/licenses/", + "https://opensource.org/license/olfl-1-3/" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OML.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OML.json", + "referenceNumber": 505, + "name": "Open Market License", + "licenseId": "OML", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Open_Market_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OpenPBS-2.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OpenPBS-2.3.json", + "referenceNumber": 159, + "name": "OpenPBS v2.3 Software License", + "licenseId": "OpenPBS-2.3", + "seeAlso": [ + "https://github.com/adaptivecomputing/torque/blob/master/PBS_License.txt", + "https://www.mcs.anl.gov/research/projects/openpbs/PBS_License.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OpenSSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OpenSSL.json", + "referenceNumber": 445, + "name": "OpenSSL License", + "licenseId": "OpenSSL", + "seeAlso": [ + "http://www.openssl.org/source/license.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OpenSSL-standalone.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OpenSSL-standalone.json", + "referenceNumber": 635, + "name": "OpenSSL License - standalone", + "licenseId": "OpenSSL-standalone", + "seeAlso": [ + "https://library.netapp.com/ecm/ecm_download_file/ECMP1196395", + "https://hstechdocs.helpsystems.com/manuals/globalscape/archive/cuteftp6/open_ssl_license_agreement.htm" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OpenVision.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OpenVision.json", + "referenceNumber": 589, + "name": "OpenVision License", + "licenseId": "OpenVision", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L66-L98", + "https://web.mit.edu/kerberos/krb5-1.21/doc/mitK5license.html", + "https://fedoraproject.org/wiki/Licensing:MIT#OpenVision_Variant" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OPL-1.0.json", + "referenceNumber": 80, + "name": "Open Public License v1.0", + "licenseId": "OPL-1.0", + "seeAlso": [ + "http://old.koalateam.com/jackaroo/OPL_1_0.TXT", + "https://fedoraproject.org/wiki/Licensing/Open_Public_License" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/OPL-UK-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OPL-UK-3.0.json", + "referenceNumber": 19, + "name": "United Kingdom Open Parliament Licence v3.0", + "licenseId": "OPL-UK-3.0", + "seeAlso": [ + "https://www.parliament.uk/site-information/copyright-parliament/open-parliament-licence/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OPUBL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OPUBL-1.0.json", + "referenceNumber": 266, + "name": "Open Publication License v1.0", + "licenseId": "OPUBL-1.0", + "seeAlso": [ + "http://opencontent.org/openpub/", + "https://www.debian.org/opl", + "https://www.ctan.org/license/opl" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OSET-PL-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSET-PL-2.1.json", + "referenceNumber": 307, + "name": "OSET Public License version 2.1", + "licenseId": "OSET-PL-2.1", + "seeAlso": [ + "http://www.osetfoundation.org/public-license", + "https://opensource.org/licenses/OPL-2.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSL-1.0.json", + "referenceNumber": 306, + "name": "Open Software License 1.0", + "licenseId": "OSL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/OSL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OSL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSL-1.1.json", + "referenceNumber": 111, + "name": "Open Software License 1.1", + "licenseId": "OSL-1.1", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/OSL1.1" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OSL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSL-2.0.json", + "referenceNumber": 457, + "name": "Open Software License 2.0", + "licenseId": "OSL-2.0", + "seeAlso": [ + "http://web.archive.org/web/20041020171434/http://www.rosenlaw.com/osl2.0.html" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OSL-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSL-2.1.json", + "referenceNumber": 247, + "name": "Open Software License 2.1", + "licenseId": "OSL-2.1", + "seeAlso": [ + "http://web.archive.org/web/20050212003940/http://www.rosenlaw.com/osl21.htm", + "https://opensource.org/licenses/OSL-2.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OSL-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSL-3.0.json", + "referenceNumber": 432, + "name": "Open Software License 3.0", + "licenseId": "OSL-3.0", + "seeAlso": [ + "https://web.archive.org/web/20120101081418/http://rosenlaw.com:80/OSL3.0.htm", + "https://opensource.org/licenses/OSL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/PADL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PADL.json", + "referenceNumber": 43, + "name": "PADL License", + "licenseId": "PADL", + "seeAlso": [ + "https://git.openldap.org/openldap/openldap/-/blob/master/libraries/libldap/os-local.c?ref_type\u003dheads#L19-23" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Parity-6.0.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Parity-6.0.0.json", + "referenceNumber": 49, + "name": "The Parity Public License 6.0.0", + "licenseId": "Parity-6.0.0", + "seeAlso": [ + "https://paritylicense.com/versions/6.0.0.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Parity-7.0.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Parity-7.0.0.json", + "referenceNumber": 482, + "name": "The Parity Public License 7.0.0", + "licenseId": "Parity-7.0.0", + "seeAlso": [ + "https://paritylicense.com/versions/7.0.0.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/PDDL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PDDL-1.0.json", + "referenceNumber": 210, + "name": "Open Data Commons Public Domain Dedication \u0026 License 1.0", + "licenseId": "PDDL-1.0", + "seeAlso": [ + "http://opendatacommons.org/licenses/pddl/1.0/", + "https://opendatacommons.org/licenses/pddl/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/PHP-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PHP-3.0.json", + "referenceNumber": 580, + "name": "PHP License v3.0", + "licenseId": "PHP-3.0", + "seeAlso": [ + "http://www.php.net/license/3_0.txt", + "https://opensource.org/licenses/PHP-3.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/PHP-3.01.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PHP-3.01.json", + "referenceNumber": 594, + "name": "PHP License v3.01", + "licenseId": "PHP-3.01", + "seeAlso": [ + "http://www.php.net/license/3_01.txt" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Pixar.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Pixar.json", + "referenceNumber": 619, + "name": "Pixar License", + "licenseId": "Pixar", + "seeAlso": [ + "https://github.com/PixarAnimationStudios/OpenSubdiv/raw/v3_5_0/LICENSE.txt", + "https://graphics.pixar.com/opensubdiv/docs/license.html", + "https://github.com/PixarAnimationStudios/OpenSubdiv/blob/v3_5_0/opensubdiv/version.cpp#L2-L22" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/pkgconf.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/pkgconf.json", + "referenceNumber": 16, + "name": "pkgconf License", + "licenseId": "pkgconf", + "seeAlso": [ + "https://github.com/pkgconf/pkgconf/blob/master/cli/main.c#L8" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Plexus.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Plexus.json", + "referenceNumber": 442, + "name": "Plexus Classworlds License", + "licenseId": "Plexus", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Plexus_Classworlds_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/pnmstitch.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/pnmstitch.json", + "referenceNumber": 502, + "name": "pnmstitch License", + "licenseId": "pnmstitch", + "seeAlso": [ + "https://sourceforge.net/p/netpbm/code/HEAD/tree/super_stable/editor/pnmstitch.c#l2" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/PolyForm-Noncommercial-1.0.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PolyForm-Noncommercial-1.0.0.json", + "referenceNumber": 575, + "name": "PolyForm Noncommercial License 1.0.0", + "licenseId": "PolyForm-Noncommercial-1.0.0", + "seeAlso": [ + "https://polyformproject.org/licenses/noncommercial/1.0.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/PolyForm-Small-Business-1.0.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PolyForm-Small-Business-1.0.0.json", + "referenceNumber": 9, + "name": "PolyForm Small Business License 1.0.0", + "licenseId": "PolyForm-Small-Business-1.0.0", + "seeAlso": [ + "https://polyformproject.org/licenses/small-business/1.0.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/PostgreSQL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PostgreSQL.json", + "referenceNumber": 94, + "name": "PostgreSQL License", + "licenseId": "PostgreSQL", + "seeAlso": [ + "http://www.postgresql.org/about/licence", + "https://opensource.org/licenses/PostgreSQL" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/PPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PPL.json", + "referenceNumber": 454, + "name": "Peer Production License", + "licenseId": "PPL", + "seeAlso": [ + "https://wiki.p2pfoundation.net/Peer_Production_License", + "http://www.networkcultures.org/_uploads/%233notebook_telekommunist.pdf" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/PSF-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PSF-2.0.json", + "referenceNumber": 62, + "name": "Python Software Foundation License 2.0", + "licenseId": "PSF-2.0", + "seeAlso": [ + "https://opensource.org/licenses/Python-2.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/psfrag.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/psfrag.json", + "referenceNumber": 279, + "name": "psfrag License", + "licenseId": "psfrag", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/psfrag" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/psutils.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/psutils.json", + "referenceNumber": 387, + "name": "psutils License", + "licenseId": "psutils", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/psutils" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Python-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Python-2.0.json", + "referenceNumber": 498, + "name": "Python License 2.0", + "licenseId": "Python-2.0", + "seeAlso": [ + "https://opensource.org/licenses/Python-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Python-2.0.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Python-2.0.1.json", + "referenceNumber": 453, + "name": "Python License 2.0.1", + "licenseId": "Python-2.0.1", + "seeAlso": [ + "https://www.python.org/download/releases/2.0.1/license/", + "https://docs.python.org/3/license.html", + "https://github.com/python/cpython/blob/main/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/python-ldap.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/python-ldap.json", + "referenceNumber": 422, + "name": "Python ldap License", + "licenseId": "python-ldap", + "seeAlso": [ + "https://github.com/python-ldap/python-ldap/blob/main/LICENCE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Qhull.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Qhull.json", + "referenceNumber": 123, + "name": "Qhull License", + "licenseId": "Qhull", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Qhull" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/QPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/QPL-1.0.json", + "referenceNumber": 329, + "name": "Q Public License 1.0", + "licenseId": "QPL-1.0", + "seeAlso": [ + "http://doc.qt.nokia.com/3.3/license.html", + "https://opensource.org/licenses/QPL-1.0", + "https://doc.qt.io/archives/3.3/license.html" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/QPL-1.0-INRIA-2004.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/QPL-1.0-INRIA-2004.json", + "referenceNumber": 479, + "name": "Q Public License 1.0 - INRIA 2004 variant", + "licenseId": "QPL-1.0-INRIA-2004", + "seeAlso": [ + "https://github.com/maranget/hevea/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/radvd.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/radvd.json", + "referenceNumber": 182, + "name": "radvd License", + "licenseId": "radvd", + "seeAlso": [ + "https://github.com/radvd-project/radvd/blob/master/COPYRIGHT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Rdisc.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Rdisc.json", + "referenceNumber": 101, + "name": "Rdisc License", + "licenseId": "Rdisc", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Rdisc_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/RHeCos-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RHeCos-1.1.json", + "referenceNumber": 373, + "name": "Red Hat eCos Public License v1.1", + "licenseId": "RHeCos-1.1", + "seeAlso": [ + "http://ecos.sourceware.org/old-license.html" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/RPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RPL-1.1.json", + "referenceNumber": 369, + "name": "Reciprocal Public License 1.1", + "licenseId": "RPL-1.1", + "seeAlso": [ + "https://opensource.org/licenses/RPL-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/RPL-1.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RPL-1.5.json", + "referenceNumber": 102, + "name": "Reciprocal Public License 1.5", + "licenseId": "RPL-1.5", + "seeAlso": [ + "https://opensource.org/licenses/RPL-1.5" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/RPSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RPSL-1.0.json", + "referenceNumber": 663, + "name": "RealNetworks Public Source License v1.0", + "licenseId": "RPSL-1.0", + "seeAlso": [ + "https://helixcommunity.org/content/rpsl", + "https://opensource.org/licenses/RPSL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/RSA-MD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RSA-MD.json", + "referenceNumber": 139, + "name": "RSA Message-Digest License", + "licenseId": "RSA-MD", + "seeAlso": [ + "http://www.faqs.org/rfcs/rfc1321.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/RSCPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RSCPL.json", + "referenceNumber": 405, + "name": "Ricoh Source Code Public License", + "licenseId": "RSCPL", + "seeAlso": [ + "http://wayback.archive.org/web/20060715140826/http://www.risource.org/RPL/RPL-1.0A.shtml", + "https://opensource.org/licenses/RSCPL" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Ruby.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Ruby.json", + "referenceNumber": 192, + "name": "Ruby License", + "licenseId": "Ruby", + "seeAlso": [ + "https://www.ruby-lang.org/en/about/license.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Ruby-pty.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Ruby-pty.json", + "referenceNumber": 473, + "name": "Ruby pty extension license", + "licenseId": "Ruby-pty", + "seeAlso": [ + "https://github.com/ruby/ruby/blob/9f6deaa6888a423720b4b127b5314f0ad26cc2e6/ext/pty/pty.c#L775-L786", + "https://github.com/ruby/ruby/commit/0a64817fb80016030c03518fb9459f63c11605ea#diff-ef5fa30838d6d0cecad9e675cc50b24628cfe2cb277c346053fafcc36c91c204", + "https://github.com/ruby/ruby/commit/0a64817fb80016030c03518fb9459f63c11605ea#diff-fedf217c1ce44bda01f0a678d3ff8b198bed478754d699c527a698ad933979a0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SAX-PD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SAX-PD.json", + "referenceNumber": 205, + "name": "Sax Public Domain Notice", + "licenseId": "SAX-PD", + "seeAlso": [ + "http://www.saxproject.org/copying.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SAX-PD-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SAX-PD-2.0.json", + "referenceNumber": 209, + "name": "Sax Public Domain Notice 2.0", + "licenseId": "SAX-PD-2.0", + "seeAlso": [ + "http://www.saxproject.org/copying.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Saxpath.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Saxpath.json", + "referenceNumber": 67, + "name": "Saxpath License", + "licenseId": "Saxpath", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Saxpath_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SCEA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SCEA.json", + "referenceNumber": 617, + "name": "SCEA Shared Source License", + "licenseId": "SCEA", + "seeAlso": [ + "http://research.scea.com/scea_shared_source_license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SchemeReport.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SchemeReport.json", + "referenceNumber": 472, + "name": "Scheme Language Report License", + "licenseId": "SchemeReport", + "seeAlso": [], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Sendmail.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Sendmail.json", + "referenceNumber": 135, + "name": "Sendmail License", + "licenseId": "Sendmail", + "seeAlso": [ + "http://www.sendmail.com/pdfs/open_source/sendmail_license.pdf", + "https://web.archive.org/web/20160322142305/https://www.sendmail.com/pdfs/open_source/sendmail_license.pdf" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Sendmail-8.23.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Sendmail-8.23.json", + "referenceNumber": 226, + "name": "Sendmail License 8.23", + "licenseId": "Sendmail-8.23", + "seeAlso": [ + "https://www.proofpoint.com/sites/default/files/sendmail-license.pdf", + "https://web.archive.org/web/20181003101040/https://www.proofpoint.com/sites/default/files/sendmail-license.pdf" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SGI-B-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SGI-B-1.0.json", + "referenceNumber": 631, + "name": "SGI Free Software License B v1.0", + "licenseId": "SGI-B-1.0", + "seeAlso": [ + "http://oss.sgi.com/projects/FreeB/SGIFreeSWLicB.1.0.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SGI-B-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SGI-B-1.1.json", + "referenceNumber": 48, + "name": "SGI Free Software License B v1.1", + "licenseId": "SGI-B-1.1", + "seeAlso": [ + "http://oss.sgi.com/projects/FreeB/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SGI-B-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SGI-B-2.0.json", + "referenceNumber": 193, + "name": "SGI Free Software License B v2.0", + "licenseId": "SGI-B-2.0", + "seeAlso": [ + "http://oss.sgi.com/projects/FreeB/SGIFreeSWLicB.2.0.pdf" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/SGI-OpenGL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SGI-OpenGL.json", + "referenceNumber": 565, + "name": "SGI OpenGL License", + "licenseId": "SGI-OpenGL", + "seeAlso": [ + "https://gitlab.freedesktop.org/mesa/glw/-/blob/master/README?ref_type\u003dheads" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SGP4.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SGP4.json", + "referenceNumber": 291, + "name": "SGP4 Permission Notice", + "licenseId": "SGP4", + "seeAlso": [ + "https://celestrak.org/publications/AIAA/2006-6753/faq.php" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SHL-0.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SHL-0.5.json", + "referenceNumber": 623, + "name": "Solderpad Hardware License v0.5", + "licenseId": "SHL-0.5", + "seeAlso": [ + "https://solderpad.org/licenses/SHL-0.5/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SHL-0.51.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SHL-0.51.json", + "referenceNumber": 34, + "name": "Solderpad Hardware License, Version 0.51", + "licenseId": "SHL-0.51", + "seeAlso": [ + "https://solderpad.org/licenses/SHL-0.51/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SimPL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SimPL-2.0.json", + "referenceNumber": 630, + "name": "Simple Public License 2.0", + "licenseId": "SimPL-2.0", + "seeAlso": [ + "https://opensource.org/licenses/SimPL-2.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/SISSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SISSL.json", + "referenceNumber": 655, + "name": "Sun Industry Standards Source License v1.1", + "licenseId": "SISSL", + "seeAlso": [ + "http://www.openoffice.org/licenses/sissl_license.html", + "https://opensource.org/licenses/SISSL" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/SISSL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SISSL-1.2.json", + "referenceNumber": 401, + "name": "Sun Industry Standards Source License v1.2", + "licenseId": "SISSL-1.2", + "seeAlso": [ + "http://gridscheduler.sourceforge.net/Gridengine_SISSL_license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SL.json", + "referenceNumber": 632, + "name": "SL License", + "licenseId": "SL", + "seeAlso": [ + "https://github.com/mtoyoda/sl/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Sleepycat.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Sleepycat.json", + "referenceNumber": 283, + "name": "Sleepycat License", + "licenseId": "Sleepycat", + "seeAlso": [ + "https://opensource.org/licenses/Sleepycat" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/SMLNJ.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SMLNJ.json", + "referenceNumber": 413, + "name": "Standard ML of New Jersey License", + "licenseId": "SMLNJ", + "seeAlso": [ + "https://www.smlnj.org/license.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/SMPPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SMPPL.json", + "referenceNumber": 321, + "name": "Secure Messaging Protocol Public License", + "licenseId": "SMPPL", + "seeAlso": [ + "https://github.com/dcblake/SMP/blob/master/Documentation/License.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SNIA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SNIA.json", + "referenceNumber": 41, + "name": "SNIA Public License 1.1", + "licenseId": "SNIA", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/SNIA_Public_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/snprintf.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/snprintf.json", + "referenceNumber": 507, + "name": "snprintf License", + "licenseId": "snprintf", + "seeAlso": [ + "https://github.com/openssh/openssh-portable/blob/master/openbsd-compat/bsd-snprintf.c#L2" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/softSurfer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/softSurfer.json", + "referenceNumber": 496, + "name": "softSurfer License", + "licenseId": "softSurfer", + "seeAlso": [ + "https://github.com/mm2/Little-CMS/blob/master/src/cmssm.c#L207", + "https://fedoraproject.org/wiki/Licensing/softSurfer" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Soundex.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Soundex.json", + "referenceNumber": 1, + "name": "Soundex License", + "licenseId": "Soundex", + "seeAlso": [ + "https://metacpan.org/release/RJBS/Text-Soundex-3.05/source/Soundex.pm#L3-11" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Spencer-86.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Spencer-86.json", + "referenceNumber": 257, + "name": "Spencer License 86", + "licenseId": "Spencer-86", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Henry_Spencer_Reg-Ex_Library_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Spencer-94.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Spencer-94.json", + "referenceNumber": 228, + "name": "Spencer License 94", + "licenseId": "Spencer-94", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Henry_Spencer_Reg-Ex_Library_License", + "https://metacpan.org/release/KNOK/File-MMagic-1.30/source/COPYING#L28" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Spencer-99.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Spencer-99.json", + "referenceNumber": 287, + "name": "Spencer License 99", + "licenseId": "Spencer-99", + "seeAlso": [ + "http://www.opensource.apple.com/source/tcl/tcl-5/tcl/generic/regfronts.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SPL-1.0.json", + "referenceNumber": 576, + "name": "Sun Public License v1.0", + "licenseId": "SPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/SPL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ssh-keyscan.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ssh-keyscan.json", + "referenceNumber": 78, + "name": "ssh-keyscan License", + "licenseId": "ssh-keyscan", + "seeAlso": [ + "https://github.com/openssh/openssh-portable/blob/master/LICENCE#L82" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SSH-OpenSSH.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SSH-OpenSSH.json", + "referenceNumber": 536, + "name": "SSH OpenSSH license", + "licenseId": "SSH-OpenSSH", + "seeAlso": [ + "https://github.com/openssh/openssh-portable/blob/1b11ea7c58cd5c59838b5fa574cd456d6047b2d4/LICENCE#L10" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SSH-short.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SSH-short.json", + "referenceNumber": 438, + "name": "SSH short notice", + "licenseId": "SSH-short", + "seeAlso": [ + "https://github.com/openssh/openssh-portable/blob/1b11ea7c58cd5c59838b5fa574cd456d6047b2d4/pathnames.h", + "http://web.mit.edu/kolya/.f/root/athena.mit.edu/sipb.mit.edu/project/openssh/OldFiles/src/openssh-2.9.9p2/ssh-add.1", + "https://joinup.ec.europa.eu/svn/lesoll/trunk/italc/lib/src/dsa_key.cpp" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SSLeay-standalone.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SSLeay-standalone.json", + "referenceNumber": 421, + "name": "SSLeay License - standalone", + "licenseId": "SSLeay-standalone", + "seeAlso": [ + "https://www.tq-group.com/filedownloads/files/software-license-conditions/OriginalSSLeay/OriginalSSLeay.pdf" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SSPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SSPL-1.0.json", + "referenceNumber": 295, + "name": "Server Side Public License, v 1", + "licenseId": "SSPL-1.0", + "seeAlso": [ + "https://www.mongodb.com/licensing/server-side-public-license" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/StandardML-NJ.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/StandardML-NJ.json", + "referenceNumber": 201, + "name": "Standard ML of New Jersey License", + "licenseId": "StandardML-NJ", + "seeAlso": [ + "https://www.smlnj.org/license.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/SugarCRM-1.1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SugarCRM-1.1.3.json", + "referenceNumber": 11, + "name": "SugarCRM Public License v1.1.3", + "licenseId": "SugarCRM-1.1.3", + "seeAlso": [ + "http://www.sugarcrm.com/crm/SPL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Sun-PPP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Sun-PPP.json", + "referenceNumber": 313, + "name": "Sun PPP License", + "licenseId": "Sun-PPP", + "seeAlso": [ + "https://github.com/ppp-project/ppp/blob/master/pppd/eap.c#L7-L16" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Sun-PPP-2000.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Sun-PPP-2000.json", + "referenceNumber": 489, + "name": "Sun PPP License (2000)", + "licenseId": "Sun-PPP-2000", + "seeAlso": [ + "https://github.com/ppp-project/ppp/blob/master/modules/ppp_ahdlc.c#L7-L19" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SunPro.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SunPro.json", + "referenceNumber": 440, + "name": "SunPro License", + "licenseId": "SunPro", + "seeAlso": [ + "https://github.com/freebsd/freebsd-src/blob/main/lib/msun/src/e_acosh.c", + "https://github.com/freebsd/freebsd-src/blob/main/lib/msun/src/e_lgammal.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SWL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SWL.json", + "referenceNumber": 331, + "name": "Scheme Widget Library (SWL) Software License Agreement", + "licenseId": "SWL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/SWL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/swrule.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/swrule.json", + "referenceNumber": 206, + "name": "swrule License", + "licenseId": "swrule", + "seeAlso": [ + "https://ctan.math.utah.edu/ctan/tex-archive/macros/generic/misc/swrule.sty" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Symlinks.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Symlinks.json", + "referenceNumber": 136, + "name": "Symlinks License", + "licenseId": "Symlinks", + "seeAlso": [ + "https://www.mail-archive.com/debian-bugs-rc@lists.debian.org/msg11494.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TAPR-OHL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TAPR-OHL-1.0.json", + "referenceNumber": 317, + "name": "TAPR Open Hardware License v1.0", + "licenseId": "TAPR-OHL-1.0", + "seeAlso": [ + "https://www.tapr.org/OHL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TCL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TCL.json", + "referenceNumber": 644, + "name": "TCL/TK License", + "licenseId": "TCL", + "seeAlso": [ + "http://www.tcl.tk/software/tcltk/license.html", + "https://fedoraproject.org/wiki/Licensing/TCL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TCP-wrappers.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TCP-wrappers.json", + "referenceNumber": 245, + "name": "TCP Wrappers License", + "licenseId": "TCP-wrappers", + "seeAlso": [ + "http://rc.quest.com/topics/openssh/license.php#tcpwrappers" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TermReadKey.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TermReadKey.json", + "referenceNumber": 37, + "name": "TermReadKey License", + "licenseId": "TermReadKey", + "seeAlso": [ + "https://github.com/jonathanstowe/TermReadKey/blob/master/README#L9-L10" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TGPPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TGPPL-1.0.json", + "referenceNumber": 112, + "name": "Transitive Grace Period Public Licence 1.0", + "licenseId": "TGPPL-1.0", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/TGPPL", + "https://tahoe-lafs.org/trac/tahoe-lafs/browser/trunk/COPYING.TGPPL.rst" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/threeparttable.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/threeparttable.json", + "referenceNumber": 319, + "name": "threeparttable License", + "licenseId": "threeparttable", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Threeparttable" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TMate.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TMate.json", + "referenceNumber": 509, + "name": "TMate Open Source License", + "licenseId": "TMate", + "seeAlso": [ + "http://svnkit.com/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TORQUE-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TORQUE-1.1.json", + "referenceNumber": 105, + "name": "TORQUE v2.5+ Software License v1.1", + "licenseId": "TORQUE-1.1", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/TORQUEv1.1" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TOSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TOSL.json", + "referenceNumber": 107, + "name": "Trusster Open Source License", + "licenseId": "TOSL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/TOSL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TPDL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TPDL.json", + "referenceNumber": 124, + "name": "Time::ParseDate License", + "licenseId": "TPDL", + "seeAlso": [ + "https://metacpan.org/pod/Time::ParseDate#LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TPL-1.0.json", + "referenceNumber": 490, + "name": "THOR Public License 1.0", + "licenseId": "TPL-1.0", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:ThorPublicLicense" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TTWL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TTWL.json", + "referenceNumber": 35, + "name": "Text-Tabs+Wrap License", + "licenseId": "TTWL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/TTWL", + "https://github.com/ap/Text-Tabs/blob/master/lib.modern/Text/Tabs.pm#L148" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TTYP0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TTYP0.json", + "referenceNumber": 542, + "name": "TTYP0 License", + "licenseId": "TTYP0", + "seeAlso": [ + "https://people.mpi-inf.mpg.de/~uwe/misc/uw-ttyp0/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TU-Berlin-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TU-Berlin-1.0.json", + "referenceNumber": 372, + "name": "Technische Universitaet Berlin License 1.0", + "licenseId": "TU-Berlin-1.0", + "seeAlso": [ + "https://github.com/swh/ladspa/blob/7bf6f3799fdba70fda297c2d8fd9f526803d9680/gsm/COPYRIGHT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TU-Berlin-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TU-Berlin-2.0.json", + "referenceNumber": 246, + "name": "Technische Universitaet Berlin License 2.0", + "licenseId": "TU-Berlin-2.0", + "seeAlso": [ + "https://github.com/CorsixTH/deps/blob/fd339a9f526d1d9c9f01ccf39e438a015da50035/licences/libgsm.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Ubuntu-font-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Ubuntu-font-1.0.json", + "referenceNumber": 191, + "name": "Ubuntu Font Licence v1.0", + "licenseId": "Ubuntu-font-1.0", + "seeAlso": [ + "https://ubuntu.com/legal/font-licence", + "https://assets.ubuntu.com/v1/81e5605d-ubuntu-font-licence-1.0.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/UCAR.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/UCAR.json", + "referenceNumber": 452, + "name": "UCAR License", + "licenseId": "UCAR", + "seeAlso": [ + "https://github.com/Unidata/UDUNITS-2/blob/master/COPYRIGHT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/UCL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/UCL-1.0.json", + "referenceNumber": 550, + "name": "Upstream Compatibility License v1.0", + "licenseId": "UCL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/UCL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/ulem.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ulem.json", + "referenceNumber": 399, + "name": "ulem License", + "licenseId": "ulem", + "seeAlso": [ + "https://mirrors.ctan.org/macros/latex/contrib/ulem/README" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/UMich-Merit.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/UMich-Merit.json", + "referenceNumber": 581, + "name": "Michigan/Merit Networks License", + "licenseId": "UMich-Merit", + "seeAlso": [ + "https://github.com/radcli/radcli/blob/master/COPYRIGHT#L64" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Unicode-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Unicode-3.0.json", + "referenceNumber": 262, + "name": "Unicode License v3", + "licenseId": "Unicode-3.0", + "seeAlso": [ + "https://www.unicode.org/license.txt" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Unicode-DFS-2015.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Unicode-DFS-2015.json", + "referenceNumber": 328, + "name": "Unicode License Agreement - Data Files and Software (2015)", + "licenseId": "Unicode-DFS-2015", + "seeAlso": [ + "https://web.archive.org/web/20151224134844/http://unicode.org/copyright.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Unicode-DFS-2016.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Unicode-DFS-2016.json", + "referenceNumber": 484, + "name": "Unicode License Agreement - Data Files and Software (2016)", + "licenseId": "Unicode-DFS-2016", + "seeAlso": [ + "https://www.unicode.org/license.txt", + "http://web.archive.org/web/20160823201924/http://www.unicode.org/copyright.html#License", + "http://www.unicode.org/copyright.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Unicode-TOU.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Unicode-TOU.json", + "referenceNumber": 628, + "name": "Unicode Terms of Use", + "licenseId": "Unicode-TOU", + "seeAlso": [ + "http://web.archive.org/web/20140704074106/http://www.unicode.org/copyright.html", + "http://www.unicode.org/copyright.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/UnixCrypt.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/UnixCrypt.json", + "referenceNumber": 95, + "name": "UnixCrypt License", + "licenseId": "UnixCrypt", + "seeAlso": [ + "https://foss.heptapod.net/python-libs/passlib/-/blob/branch/stable/LICENSE#L70", + "https://opensource.apple.com/source/JBoss/JBoss-737/jboss-all/jetty/src/main/org/mortbay/util/UnixCrypt.java.auto.html", + "https://archive.eclipse.org/jetty/8.0.1.v20110908/xref/org/eclipse/jetty/http/security/UnixCrypt.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Unlicense.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Unlicense.json", + "referenceNumber": 218, + "name": "The Unlicense", + "licenseId": "Unlicense", + "seeAlso": [ + "https://unlicense.org/" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/UPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/UPL-1.0.json", + "referenceNumber": 5, + "name": "Universal Permissive License v1.0", + "licenseId": "UPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/UPL" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/URT-RLE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/URT-RLE.json", + "referenceNumber": 165, + "name": "Utah Raster Toolkit Run Length Encoded License", + "licenseId": "URT-RLE", + "seeAlso": [ + "https://sourceforge.net/p/netpbm/code/HEAD/tree/super_stable/converter/other/pnmtorle.c", + "https://sourceforge.net/p/netpbm/code/HEAD/tree/super_stable/converter/other/rletopnm.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Vim.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Vim.json", + "referenceNumber": 549, + "name": "Vim License", + "licenseId": "Vim", + "seeAlso": [ + "http://vimdoc.sourceforge.net/htmldoc/uganda.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/VOSTROM.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/VOSTROM.json", + "referenceNumber": 544, + "name": "VOSTROM Public License for Open Source", + "licenseId": "VOSTROM", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/VOSTROM" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/VSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/VSL-1.0.json", + "referenceNumber": 109, + "name": "Vovida Software License v1.0", + "licenseId": "VSL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/VSL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/W3C.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/W3C.json", + "referenceNumber": 28, + "name": "W3C Software Notice and License (2002-12-31)", + "licenseId": "W3C", + "seeAlso": [ + "http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231.html", + "https://opensource.org/licenses/W3C" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/W3C-19980720.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/W3C-19980720.json", + "referenceNumber": 629, + "name": "W3C Software Notice and License (1998-07-20)", + "licenseId": "W3C-19980720", + "seeAlso": [ + "http://www.w3.org/Consortium/Legal/copyright-software-19980720.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/W3C-20150513.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/W3C-20150513.json", + "referenceNumber": 315, + "name": "W3C Software Notice and Document License (2015-05-13)", + "licenseId": "W3C-20150513", + "seeAlso": [ + "https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document", + "https://www.w3.org/copyright/software-license-2015/", + "https://www.w3.org/copyright/software-license-2023/" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/w3m.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/w3m.json", + "referenceNumber": 379, + "name": "w3m License", + "licenseId": "w3m", + "seeAlso": [ + "https://github.com/tats/w3m/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Watcom-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Watcom-1.0.json", + "referenceNumber": 612, + "name": "Sybase Open Watcom Public License 1.0", + "licenseId": "Watcom-1.0", + "seeAlso": [ + "https://opensource.org/licenses/Watcom-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/Widget-Workshop.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Widget-Workshop.json", + "referenceNumber": 256, + "name": "Widget Workshop License", + "licenseId": "Widget-Workshop", + "seeAlso": [ + "https://github.com/novnc/noVNC/blob/master/core/crypto/des.js#L24" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Wsuipa.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Wsuipa.json", + "referenceNumber": 199, + "name": "Wsuipa License", + "licenseId": "Wsuipa", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Wsuipa" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/WTFPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/WTFPL.json", + "referenceNumber": 173, + "name": "Do What The F*ck You Want To Public License", + "licenseId": "WTFPL", + "seeAlso": [ + "http://www.wtfpl.net/about/", + "http://sam.zoy.org/wtfpl/COPYING" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/wxWindows.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/wxWindows.json", + "referenceNumber": 350, + "name": "wxWindows Library License", + "licenseId": "wxWindows", + "seeAlso": [ + "https://opensource.org/licenses/WXwindows" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/X11.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/X11.json", + "referenceNumber": 274, + "name": "X11 License", + "licenseId": "X11", + "seeAlso": [ + "http://www.xfree86.org/3.3.6/COPYRIGHT2.html#3" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/X11-distribute-modifications-variant.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/X11-distribute-modifications-variant.json", + "referenceNumber": 286, + "name": "X11 License Distribution Modification Variant", + "licenseId": "X11-distribute-modifications-variant", + "seeAlso": [ + "https://github.com/mirror/ncurses/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/X11-swapped.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/X11-swapped.json", + "referenceNumber": 7, + "name": "X11 swapped final paragraphs", + "licenseId": "X11-swapped", + "seeAlso": [ + "https://github.com/fedeinthemix/chez-srfi/blob/master/srfi/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Xdebug-1.03.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Xdebug-1.03.json", + "referenceNumber": 471, + "name": "Xdebug License v 1.03", + "licenseId": "Xdebug-1.03", + "seeAlso": [ + "https://github.com/xdebug/xdebug/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Xerox.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Xerox.json", + "referenceNumber": 417, + "name": "Xerox License", + "licenseId": "Xerox", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Xerox" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Xfig.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Xfig.json", + "referenceNumber": 63, + "name": "Xfig License", + "licenseId": "Xfig", + "seeAlso": [ + "https://github.com/Distrotech/transfig/blob/master/transfig/transfig.c", + "https://fedoraproject.org/wiki/Licensing:MIT#Xfig_Variant", + "https://sourceforge.net/p/mcj/xfig/ci/master/tree/src/Makefile.am" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/XFree86-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/XFree86-1.1.json", + "referenceNumber": 311, + "name": "XFree86 License 1.1", + "licenseId": "XFree86-1.1", + "seeAlso": [ + "http://www.xfree86.org/current/LICENSE4.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/xinetd.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/xinetd.json", + "referenceNumber": 406, + "name": "xinetd License", + "licenseId": "xinetd", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Xinetd_License" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/xkeyboard-config-Zinoviev.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/xkeyboard-config-Zinoviev.json", + "referenceNumber": 55, + "name": "xkeyboard-config Zinoviev License", + "licenseId": "xkeyboard-config-Zinoviev", + "seeAlso": [ + "https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/blob/master/COPYING?ref_type\u003dheads#L178" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/xlock.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/xlock.json", + "referenceNumber": 140, + "name": "xlock License", + "licenseId": "xlock", + "seeAlso": [ + "https://fossies.org/linux/tiff/contrib/ras/ras2tif.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Xnet.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Xnet.json", + "referenceNumber": 639, + "name": "X.Net License", + "licenseId": "Xnet", + "seeAlso": [ + "https://opensource.org/licenses/Xnet" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/xpp.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/xpp.json", + "referenceNumber": 243, + "name": "XPP License", + "licenseId": "xpp", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/xpp" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/XSkat.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/XSkat.json", + "referenceNumber": 535, + "name": "XSkat License", + "licenseId": "XSkat", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/XSkat_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/xzoom.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/xzoom.json", + "referenceNumber": 339, + "name": "xzoom License", + "licenseId": "xzoom", + "seeAlso": [ + "https://metadata.ftp-master.debian.org/changelogs//main/x/xzoom/xzoom_0.3-27_copyright" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/YPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/YPL-1.0.json", + "referenceNumber": 506, + "name": "Yahoo! Public License v1.0", + "licenseId": "YPL-1.0", + "seeAlso": [ + "http://www.zimbra.com/license/yahoo_public_license_1.0.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/YPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/YPL-1.1.json", + "referenceNumber": 538, + "name": "Yahoo! Public License v1.1", + "licenseId": "YPL-1.1", + "seeAlso": [ + "http://www.zimbra.com/license/yahoo_public_license_1.1.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Zed.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zed.json", + "referenceNumber": 500, + "name": "Zed License", + "licenseId": "Zed", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Zed" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Zeeff.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zeeff.json", + "referenceNumber": 382, + "name": "Zeeff License", + "licenseId": "Zeeff", + "seeAlso": [ + "ftp://ftp.tin.org/pub/news/utils/newsx/newsx-1.6.tar.gz" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Zend-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zend-2.0.json", + "referenceNumber": 51, + "name": "Zend License v2.0", + "licenseId": "Zend-2.0", + "seeAlso": [ + "https://web.archive.org/web/20130517195954/http://www.zend.com/license/2_00.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Zimbra-1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zimbra-1.3.json", + "referenceNumber": 555, + "name": "Zimbra Public License v1.3", + "licenseId": "Zimbra-1.3", + "seeAlso": [ + "http://web.archive.org/web/20100302225219/http://www.zimbra.com/license/zimbra-public-license-1-3.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Zimbra-1.4.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zimbra-1.4.json", + "referenceNumber": 227, + "name": "Zimbra Public License v1.4", + "licenseId": "Zimbra-1.4", + "seeAlso": [ + "http://www.zimbra.com/legal/zimbra-public-license-1-4" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Zlib.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zlib.json", + "referenceNumber": 74, + "name": "zlib License", + "licenseId": "Zlib", + "seeAlso": [ + "http://www.zlib.net/zlib_license.html", + "https://opensource.org/licenses/Zlib" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/zlib-acknowledgement.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/zlib-acknowledgement.json", + "referenceNumber": 371, + "name": "zlib/libpng License with Acknowledgement", + "licenseId": "zlib-acknowledgement", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/ZlibWithAcknowledgement" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ZPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ZPL-1.1.json", + "referenceNumber": 598, + "name": "Zope Public License 1.1", + "licenseId": "ZPL-1.1", + "seeAlso": [ + "http://old.zope.org/Resources/License/ZPL-1.1" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ZPL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ZPL-2.0.json", + "referenceNumber": 539, + "name": "Zope Public License 2.0", + "licenseId": "ZPL-2.0", + "seeAlso": [ + "http://old.zope.org/Resources/License/ZPL-2.0", + "https://opensource.org/licenses/ZPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ZPL-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ZPL-2.1.json", + "referenceNumber": 638, + "name": "Zope Public License 2.1", + "licenseId": "ZPL-2.1", + "seeAlso": [ + "http://old.zope.org/Resources/ZPL/" + ], + "isOsiApproved": true, + "isFsfLibre": true + } + ], + "releaseDate": "2024-08-19" +} diff --git a/templates/SPDX.LicenseExceptionId.template.hs b/templates/SPDX.LicenseExceptionId.template.hs index c2fcd1462b9..aea2fedb586 100644 --- a/templates/SPDX.LicenseExceptionId.template.hs +++ b/templates/SPDX.LicenseExceptionId.template.hs @@ -29,7 +29,7 @@ import qualified Text.PrettyPrint as Disp -- LicenseExceptionId ------------------------------------------------------------------------------- --- | SPDX License Exceptions identifiers list v3.23 +-- | SPDX License Exceptions identifiers list v3.25 data LicenseExceptionId {{ licenseIds }} deriving (Eq, Ord, Enum, Bounded, Show, Read, Typeable, Data, Generic) @@ -101,6 +101,9 @@ licenseExceptionIdList LicenseListVersion_3_16 = licenseExceptionIdList LicenseListVersion_3_23 = {{licenseList_perv.v_3_23}} ++ bulkOfLicenses +licenseExceptionIdList LicenseListVersion_3_25 = +{{licenseList_perv.v_3_25}} + ++ bulkOfLicenses -- | Create a 'LicenseExceptionId' from a 'String'. mkLicenseExceptionId :: LicenseListVersion -> String -> Maybe LicenseExceptionId @@ -111,6 +114,7 @@ mkLicenseExceptionId LicenseListVersion_3_9 s = Map.lookup s stringLookup_3_9 mkLicenseExceptionId LicenseListVersion_3_10 s = Map.lookup s stringLookup_3_10 mkLicenseExceptionId LicenseListVersion_3_16 s = Map.lookup s stringLookup_3_16 mkLicenseExceptionId LicenseListVersion_3_23 s = Map.lookup s stringLookup_3_23 +mkLicenseExceptionId LicenseListVersion_3_25 s = Map.lookup s stringLookup_3_25 stringLookup_3_0 :: Map String LicenseExceptionId stringLookup_3_0 = Map.fromList $ map (\i -> (licenseExceptionId i, i)) $ @@ -140,6 +144,10 @@ stringLookup_3_23 :: Map String LicenseExceptionId stringLookup_3_23 = Map.fromList $ map (\i -> (licenseExceptionId i, i)) $ licenseExceptionIdList LicenseListVersion_3_23 +stringLookup_3_25 :: Map String LicenseExceptionId +stringLookup_3_25 = Map.fromList $ map (\i -> (licenseExceptionId i, i)) $ + licenseExceptionIdList LicenseListVersion_3_25 + -- | License exceptions in all SPDX License lists bulkOfLicenses :: [LicenseExceptionId] bulkOfLicenses = diff --git a/templates/SPDX.LicenseId.template.hs b/templates/SPDX.LicenseId.template.hs index 6ee2bf6ede3..58e04801398 100644 --- a/templates/SPDX.LicenseId.template.hs +++ b/templates/SPDX.LicenseId.template.hs @@ -32,7 +32,7 @@ import qualified Text.PrettyPrint as Disp -- LicenseId ------------------------------------------------------------------------------- --- | SPDX License identifiers list v3.23 +-- | SPDX License identifiers list v3.25 data LicenseId {{ licenseIds }} deriving (Eq, Ord, Enum, Bounded, Show, Read, Typeable, Data) @@ -178,6 +178,9 @@ licenseIdList LicenseListVersion_3_16 = licenseIdList LicenseListVersion_3_23 = {{licenseList_perv.v_3_23}} ++ bulkOfLicenses +licenseIdList LicenseListVersion_3_25 = +{{licenseList_perv.v_3_25}} + ++ bulkOfLicenses -- | Create a 'LicenseId' from a 'String'. mkLicenseId :: LicenseListVersion -> String -> Maybe LicenseId @@ -188,6 +191,7 @@ mkLicenseId LicenseListVersion_3_9 s = Map.lookup s stringLookup_3_9 mkLicenseId LicenseListVersion_3_10 s = Map.lookup s stringLookup_3_10 mkLicenseId LicenseListVersion_3_16 s = Map.lookup s stringLookup_3_16 mkLicenseId LicenseListVersion_3_23 s = Map.lookup s stringLookup_3_23 +mkLicenseId LicenseListVersion_3_25 s = Map.lookup s stringLookup_3_25 stringLookup_3_0 :: Map String LicenseId stringLookup_3_0 = Map.fromList $ map (\i -> (licenseId i, i)) $ @@ -217,6 +221,10 @@ stringLookup_3_23 :: Map String LicenseId stringLookup_3_23 = Map.fromList $ map (\i -> (licenseId i, i)) $ licenseIdList LicenseListVersion_3_23 +stringLookup_3_25 :: Map String LicenseId +stringLookup_3_25 = Map.fromList $ map (\i -> (licenseId i, i)) $ + licenseIdList LicenseListVersion_3_25 + -- | Licenses in all SPDX License lists bulkOfLicenses :: [LicenseId] bulkOfLicenses = From 33f6b06327f45c31abd20ea65876bc78d39d1f96 Mon Sep 17 00:00:00 2001 From: Javier Sagredo Date: Wed, 31 Jul 2024 17:25:34 +0200 Subject: [PATCH 10/87] Enable symlink creation on tests on Windows (cherry picked from commit d3e589d4a984619e43c9d043d8acd74ab6b86b57) --- cabal-testsuite/src/Test/Cabal/Prelude.hs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/cabal-testsuite/src/Test/Cabal/Prelude.hs b/cabal-testsuite/src/Test/Cabal/Prelude.hs index 7a8fbf651e8..50f9395d74a 100644 --- a/cabal-testsuite/src/Test/Cabal/Prelude.hs +++ b/cabal-testsuite/src/Test/Cabal/Prelude.hs @@ -54,6 +54,7 @@ import Control.Concurrent.Async (withAsync) import qualified Data.Aeson as JSON import qualified Data.ByteString.Lazy as BSL import Control.Monad (unless, when, void, forM_, liftM2, liftM4) +import Control.Monad.Catch ( bracket_ ) import Control.Monad.Trans.Reader (withReaderT, runReaderT) import Control.Monad.IO.Class (MonadIO (..)) import qualified Crypto.Hash.SHA256 as SHA256 @@ -70,10 +71,9 @@ import Control.Retry (exponentialBackoff, limitRetriesByCumulativeDelay) import Network.Wait (waitTcpVerbose) import System.Environment import System.Process +import System.IO #ifndef mingw32_HOST_OS -import Control.Monad.Catch ( bracket_ ) -import System.Posix.Files ( createSymbolicLink ) import System.Posix.Resource #endif @@ -1123,19 +1123,20 @@ withDelay m = do Just _ -> m -- | Create a symlink for the duration of the provided action. If the symlink --- already exists, it is deleted. Does not work on Windows. +-- already exists, it is deleted. withSymlink :: FilePath -> FilePath -> TestM a -> TestM a -#ifdef mingw32_HOST_OS +#if defined(mingw32_HOST_OS) && !MIN_VERSION_directory(1,3,1) withSymlink _oldpath _newpath _act = - error "PackageTests.PackageTester.withSymlink: does not work on Windows!" + error "Test.Cabal.Prelude.withSymlink: does not work on Windows with directory <1.3.1!" #else withSymlink oldpath newpath0 act = do + liftIO $ hPutStrLn stderr $ "Symlinking " <> oldpath <> " <== " <> newpath0 env <- getTestEnv let newpath = testCurrentDir env newpath0 symlinkExists <- liftIO $ doesFileExist newpath when symlinkExists $ liftIO $ removeFile newpath - bracket_ (liftIO $ createSymbolicLink oldpath newpath) - (liftIO $ removeFile newpath) act + bracket_ (liftIO $ createFileLink oldpath newpath) + (liftIO $ pure ()) act #endif writeSourceFile :: FilePath -> String -> TestM () From 38e1ddcc23e629747faf66e7cf0315c1d6372e35 Mon Sep 17 00:00:00 2001 From: Javier Sagredo Date: Wed, 31 Jul 2024 18:36:10 +0200 Subject: [PATCH 11/87] Add shims on tests (cherry picked from commit 7e0db76516452b5637cb91cc102411511c6b87fd) --- .../GhcPkgGuess/SameDirectory/ghc-pkg.exe | Bin 0 -> 115712 bytes .../GhcPkgGuess/SameDirectory/ghc-pkg.shim | 2 ++ .../GhcPkgGuess/SameDirectory/ghc.exe | Bin 0 -> 115712 bytes .../GhcPkgGuess/SameDirectory/ghc.shim | 2 ++ .../GhcPkgGuess/SameDirectory/setup.test.hs | 14 ++++++++++++-- .../SameDirectoryGhcVersion/ghc-7.10.exe | Bin 0 -> 115712 bytes .../SameDirectoryGhcVersion/ghc-7.10.shim | 2 ++ .../ghc-pkg-ghc-7.10.exe | Bin 0 -> 115712 bytes .../ghc-pkg-ghc-7.10.shim | 2 ++ .../SameDirectoryGhcVersion/setup.test.hs | 14 ++++++++++++-- .../SameDirectoryVersion/ghc-7.10.exe | Bin 0 -> 115712 bytes .../SameDirectoryVersion/ghc-7.10.shim | 2 ++ .../SameDirectoryVersion/ghc-pkg-7.10.exe | Bin 0 -> 115712 bytes .../SameDirectoryVersion/ghc-pkg-7.10.shim | 2 ++ .../SameDirectoryVersion/setup.test.hs | 14 ++++++++++++-- .../GhcPkgGuess/Symlink/bin/ghc-pkg.exe | Bin 0 -> 115712 bytes .../GhcPkgGuess/Symlink/bin/ghc-pkg.shim | 2 ++ .../GhcPkgGuess/Symlink/bin/ghc.exe | Bin 0 -> 115712 bytes .../GhcPkgGuess/Symlink/bin/ghc.shim | 2 ++ .../GhcPkgGuess/Symlink/setup.test.hs | 18 +++++++++++++++--- .../SymlinkGhcVersion/bin/ghc-7.10.exe | Bin 0 -> 115712 bytes .../SymlinkGhcVersion/bin/ghc-7.10.shim | 2 ++ .../SymlinkGhcVersion/bin/ghc-pkg-7.10.exe | Bin 0 -> 115712 bytes .../SymlinkGhcVersion/bin/ghc-pkg-7.10.shim | 2 ++ .../SymlinkGhcVersion/setup.test.hs | 18 +++++++++++++++--- .../SymlinkVersion/bin/ghc-7.10.exe | Bin 0 -> 115712 bytes .../SymlinkVersion/bin/ghc-7.10.shim | 2 ++ .../SymlinkVersion/bin/ghc-pkg-ghc-7.10.exe | Bin 0 -> 115712 bytes .../SymlinkVersion/bin/ghc-pkg-ghc-7.10.shim | 2 ++ .../GhcPkgGuess/SymlinkVersion/setup.test.hs | 18 +++++++++++++++--- 30 files changed, 105 insertions(+), 15 deletions(-) create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/ghc-pkg.exe create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/ghc-pkg.shim create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/ghc.exe create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/ghc.shim create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/ghc-7.10.exe create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/ghc-7.10.shim create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/ghc-pkg-ghc-7.10.exe create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/ghc-pkg-ghc-7.10.shim create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/ghc-7.10.exe create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/ghc-7.10.shim create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/ghc-pkg-7.10.exe create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/ghc-pkg-7.10.shim create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/bin/ghc-pkg.exe create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/bin/ghc-pkg.shim create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/bin/ghc.exe create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/bin/ghc.shim create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/bin/ghc-7.10.exe create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/bin/ghc-7.10.shim create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/bin/ghc-pkg-7.10.exe create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/bin/ghc-pkg-7.10.shim create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/bin/ghc-7.10.exe create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/bin/ghc-7.10.shim create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/bin/ghc-pkg-ghc-7.10.exe create mode 100644 cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/bin/ghc-pkg-ghc-7.10.shim diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/ghc-pkg.exe b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/ghc-pkg.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 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 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/ghc-pkg.shim b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/ghc-pkg.shim new file mode 100644 index 00000000000..0ec39dd3f09 --- /dev/null +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/ghc-pkg.shim @@ -0,0 +1,2 @@ +path = "FINDSH\sh.exe" +args = "ghc-pkg" diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/ghc.exe b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/ghc.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 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 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/ghc.shim b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/ghc.shim new file mode 100644 index 00000000000..97596f1c171 --- /dev/null +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/ghc.shim @@ -0,0 +1,2 @@ +path = "FINDSH\sh.exe" +args = "ghc" diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/setup.test.hs b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/setup.test.hs index 86a7cf804ea..805f56abc9c 100644 --- a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/setup.test.hs +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/setup.test.hs @@ -1,9 +1,19 @@ import Test.Cabal.Prelude +import System.Directory -main = setupAndCabalTest $ expectBrokenIfWindows 10179 $ do +main = setupAndCabalTest $ do + when isWindows $ do + sh <- fmap takeDirectory <$> liftIO (findExecutable "sh") + case sh of + Nothing -> skip "no sh" + Just sh' -> do + let sh'' = concatMap (\c -> case c of + '\\' -> "\\\\\\\\" + x -> [x]) sh' + void $ shell "sed" [ "-i", "-e", "s/FINDSH/" <> sh'' <> "/g", "ghc.shim", "ghc-pkg.shim"] env <- getTestEnv let cwd = testCurrentDir env ghc_path <- programPathM ghcProgram r <- withEnv [("WITH_GHC", Just ghc_path)] - . fails $ setup' "configure" ["-w", cwd "ghc"] + . fails $ setup' "configure" ["-w", cwd if isWindows then "ghc.exe" else "ghc" ] assertOutputContains "is version 9999999" r diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/ghc-7.10.exe b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/ghc-7.10.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 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 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/ghc-7.10.shim b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/ghc-7.10.shim new file mode 100644 index 00000000000..16ae1ddead3 --- /dev/null +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/ghc-7.10.shim @@ -0,0 +1,2 @@ +path = "FINDSH\sh.exe" +args = "ghc-7.10" diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/ghc-pkg-ghc-7.10.exe b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/ghc-pkg-ghc-7.10.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 zcmeFaeSB2awKsm|C6h@qVFpMbN|XVDVgni&(8LKk0Vau-;DpFbA|_}HX&kLmI43|$ zAn8doC&y{I&$WHpr}kbc+G=er)s`1+=_J9tAoAL)Sg6Kcsym)kqtIl)nDczsJ~K(M z?Y+I9-{mJzb-ni+JuWY*itL`t~|M0_)i0&_KaBq?xc0cg2d&ON9 z?yo+we#4FF>8Uw!&_i!b-Sp!AhFOWfAD`RdK7j8ZpWEur;qPtkr||CU*y{e@{JqV+ zhrf65_m9tQckjpdi~G0F>c{*2j&1Ij_cDJ(lx?jlOTN8h@E{k-Y)zF5J%LYuvrjnc+tPan@1Ay@XsRnns`RaO9l9Q>_w5n zllx3UArJk7N1sV>qg>$&CL#MDWTEIvr28hO1J6=I^&kAZQQWXqM4G$^nFudxYaH)H z5w{@RcjKn@_lx%n!jy**OKsnXcRt<|{`o+V8;xwjz!W4zk)De8vwxE>dgG=I4?Xf_ zfwxIO+XTx0;@{+3hS>lA-~R^`IB?=rkZM5on?9O~J&Ec$0_3j*N zFchBc+;3i2>+P22Irrab4x1}$TYAN!@Vzy)-eZ!*rzO>TkBf_(`yI=CNRj%rxoVFm zN?~!vcrIJ5e90}Qjb&q{>uNgH6**R!31XJaOyX2}Op=*JOrem~6V)t$(_s}ND{>rx zu#iBP`GBc>*wuO9Oo;Fp5OarU2rDadGJ*m1 zExhNKtNqHoIoWzlxCNmqz`hOORaM<9ax#cz`=?{Xgf~}( z>uQz9SNs70tHKXZkYHCO;=*6$L5ho5{isk_YDGDxoQ|ibH|#@3YagXH=g_O}_oyMH95zf>m~BOB8t2$~#h*I$M5C!Gcu|XUp>l1=%8WaTRq_cw?=+ebs1c zWLvDt`JJdG=G<=!-(Tx(mkKLu3yRIs4nVMq(w1-?ecPmmBPFJ=Il!L1Sr9^zRg+X! zzJ|?5o8-e8%Jv+WX?sq#R#rt2mZPY7lT=6$z9KCNZ#E#zk3*=9Ljb~y%L9yoY`{Mc zaC`vdwsa#QTLs99I5FZxc-I{#fAl%SqDpK`6h z2-}X*~nK>v06sDsQ^8sWYJ`v2* zGu;Sj52{NtDCUi&=g~4}%S)&|T(~X-K)x{8_yf!cpjkHRpsp?im-~Fkqdb(e65+}u zgd^7Fpgh%Gi28hJHVqN|jX>RebfxwH%8S%fVN;#z@}V0GIZ9Gy-7cf6|AM&`T^;?D zx;m^I=w%@jKxPGu&uqdHc&kfX9AAXz>u=zhp}(Qctf;%!0QDmSlmt*f85m}vSA=zI z*b5#o5c-ilgFprQcRba{a|R%SkPjGU)Ksta9A&dXg{H$KtU8$&MUNuMVTlqF4*FwN z4ql>jjXD4^m$`zFk?d$T0(B`?A*yGVA_zjP#H*U}H4Wro(1oY#nE^zhFOtIMs@HGW zv$wZMP||-!&&+4(dCk-GT=En>mp+MS?c&b5? zMe$Po!k%C8w{_0}yd!@5p2PIra&AP|yORWjP58f?68HS3r%32d+KVS4-ktO-gos?- zNzr&HY^{7SDs(p<#y2P<7~g6-$#7+5QVieieS(@U#J}rKpc`1N3fW0iB&d-6 zIVz}S_W!r3a2{0npS2xGDy`IfqiIRJXRjs@h)lgeoZ3oX!QL-n9r?e=uxf5r|c`7(*z)Ztx*E8$orDJ-Q5pHYs`R z42TErtZ9ylo6r7CSLQUG$ge@C;yv_Iw29scMcon*#_eI@?XU_ZuJtN+~YqpxA&?=AAS zJDYDp6zaG`NvFs<5i+B$5)YOEG^jb^nEDc4HM^_-V-bth3_ zVlXYK?Jd-%OXt|{@Lk19fTTL;(F<-9X9U@FibE@1>dm3BIiw!L7zG&p4K|nOL$0Yo z_OXGzXxDFM3vVMRH=r6d#tz($R~~yFuTT(5SKcreF6b!-$OE_!HlLM}*qNmu0+FGL zs;i3QuXbrm)UpB9g#P#UVe-5clBcSwQ{BMW>!=;Y7d1A#F91L*03=HJ`_!_*^-4M# zCseJgS=&p!(SQLIWUnBbF7>f3cpqhZP+7kSNXAX`FDIen1{XzZI`^7tXpqYdc0o$+O8PzWn%F90vlpGzFv+?o zTHVQ9EBHrhSYQVcU#0c$HF3Gvxb#0zL=dg?9aJTI%aE8PkD8<}v9~x6ir2LaNwe$D zAQ#)b3`J41v+g{7t~Wl#+(l6>Pwv%~bjqcqpX1Ly{-lgbI^)j)JiC&pJ`>Qc?hGff zn?SjvVS8QQF9B~gx`LSXK-oQ{exVUQL8{(eh*uL<-9CYqrqarTX<(Atg4Qfbz76y~ zNNKt4fpWGTeZV>QdU+FnGO0d zOwtTmVipprhR;-SIpw$W&Y;pg7;i@OnNl7p4`j$2E@BqBC~t_-oOU0Is{WYAe^K#| z=$ZH8b0GyPjX=adfJ}GuOoNfK5s!bs;~(*~_jVdnMlkfdRqy#;IRs>NtVFCW$E54n z6QmUOc#liT2k%0nHVLt*>60-9xA(cydK4~ehfl7(+Nq0wMORw5MJo48>A*? zu1A&N$Id!h=i_0*NMvuJnGl}|S%%>&9PNM+C59rM?5R&sZK+kZ=P0FC_C6s&UuJv( zenFB0l{ue?b{^@>k17{(9yi{`z?xUQd3zKh3Ml$KpQ^;yDXCNMz>P^8=cY$o`&+y66Q46*bpJ+lr3 z3=5G;efVs||E%JV87;W_Ec$u0)6jDw{ut?Z$O)12SaLu zUA?90wl8n~YM(S$-r=%HGu7gZrS7DEy-K`h=`4CpTRNLw&ZUCy`zF!8j^r8EqUs*-E*Xvl0fb>}OL2GtJ@R!?H5e)H#Fh-B()qt{r=~7Jf zkHlpH(ceF~eh-!7B6hBwP?iUB4Zg@!bvn3Bayx|U1r26}olx%odLPuj*8AT)2 z=M)RjQ8ruCy3_nI<%@Qu!XYgOl(~bq>&~T7n@JGoEWOWW7R2nO8|js~G+?s`;v_`k zm5fM>AWc@6I)J%++@$b;W-}txvh(5ON~LV1z<+W3O`hHf)uK*Rrmd#V0FVE%t;QZ#d5ZnKspai0bmO(xmYMWZa17h4q7&XtTLNTg}aO}NeJi5@0&NLt2Vjc8mYG` z$&sB_L|HaZzTn(3N$$5t>g~18H=L23_Tet54}!SC`SN=fr~E5~Yn_j*x)`aysOkvS zxa9skyo=pat>^+j!)?W;))G@Z z1~jI0Bd)F3+*)Ezb{-g=a>9vM?98y70)t-#q*k;xAEWTd}3J#4-Ul{(U80Mjj*X zina`Q(@+qdcdWXL+GKo69~(nzQ(e=CjYw|#h@R*!8~#?g@Cdr`sL8{l)`!Q#0X*vO z!(+$B3(lR%_`3_)c7~8`=Q?ED`4wc_`3SP@+=6U7cW!LzCz!+SjnFluU1m)D*ejBz+vG zie`a4QM=?m7#E!_|A~sh8t?9G{~%ecjXa%$Z-Mi-jkul0S&#;04Tj^+Wc=Ml3>rcd z+Jg96A07_}@Tk8Jj~yG4@D;?NeRym^9NHJz*9fSQ-_i33RbOSLnzm`;!(!yv&*r3+R4{m@w^N?=G{hjZVG9J~4^ z1hBQG*V$YM27MrE!aw5IN8dpO2B$c`sUkc<+Wr*SSk=p&V52d zxN~x{-0hOzAIv>&fT&-YXo}H*T_7V7pJd3+5;r~a=;5OW5xV3)dTcaEoM0#D(z^7j zHZ~V*zHO{d;<0S-9&u-hOYU}quMoF+V7PrIa1*~2+3xHcOON9}+)kojoYb0J0`ePQ z(kH|1m|z6a4)#OO5C_JHE!~M0@cxC$QDT+5?U)pdbO(LnKp7TfcT}UwM=h`Zq3+Ps#)5~ zboEpD(^09nxmUbVa|0tFBxutK)U|aSkC(w`y80R`MByMbJ$3;R@?pE`zX+W`{WDhI zetT0s*KzZ)Y+GFfQr}cZZ+2#~39A?@7K1a?B^09`3!AW7OV}_}X^=yL%H&W_u!E5N zs^3wt)gewXDhDt3unr@dDpx8UY%}VIRe}n>q26If;*Mzl&y5!KM0k#}*hS@|rKV)*jn&Hb* z?I`V1P37uF`?yi(?<}XWLetkcsyplgZ-he-7hSoqn8g=ho!;F=v2a_r3Uy&i~`tTn3x<>htv z%^zD6B=*7}an>tyiES`k^3+N@a?kf%rEYY{qodB|VoJC>XR&;FRJ40PaXv~5ipb*n z$h|MQ)HJ2kA%DXPy)6nRt23c`i~;s9=+T1+^N*+T(Z3tX>%UD}EBGmkRy9Xajdi%l zYD3fk$}4(Mzg;c0dwN)wMmD9oEPbOx-{{geX0RIp0ISDpo(IiR%m=^&!UP?5O)ylU z!kpwe>pA5a^62`>wHV0b8PpHdkJWaV$S$BZo~;)db^X2gFh}ozWMN@-UD5)dP_Acg z#bOeeCP1uFAIh<>E+?x$dx{UCM5pd1gWl5B*Z2f+=6W@qj8|Yrwec_l-Xi;^ByW+m zJ}I0IyF0gR7@Rt3X$DkfF&UdNGr(Sa(TG(t*0;{)U5n5(d8r$6M3*cuI#ghzhVPXu zp*YwDe@bKOOqKkpE>3SbE78scPhw;N;5J#S=d89Y7@mg~&p`$1AYzBaDZzL?>K2}F zisx)aJZ=|{)2!;-o}nO%!O@|r1{H57La3c z8TGXGXAIoklo9#FNdbd9(|My{ChCMirV!;kLt&xrDX2vuwh92a(L~JDlkP^E+?6GF zXUU^ko6f?PWq@52#g1@LT|((-ko&=|tWe}Y4!(eDD^S(bdC`xupqWV8IL*Cbl+&W!A|zp05?QEi#pXoSPM&xK9XZ0X`U*Lgp=#Csxc9;@Zv%|RX;>o6{6gQ zrn(^C#|0XS)Ku$pcL5l12-dBjQib%O5P0iLd|x2$9Pc`tsquK%mq&+b`Rc z#Rt@Gx$pJ|d-7H5cU;F2y~3VF!z_g~8%)?za(A%{&D7cH%;WBY+NVD@7-$1}t$(HGm;dx+y7RjSn{N8Mm48eOCqk2<6?`V!vE-Nf5- zc^j+Zu)(NC_C{nU_y+SDam_p~oK@$hdAss2K#;7=SIaObi&wKhVLs~?ra^kJs}Y26 zM;)bXe@||331T15^?^rM8qO2TN6@}1rC|hWog(#l&MsG~&v~mI;tWbW4x4M0bAMFv zpIJ)&YtoHg$u6dOqP2<*BOD;&(>%Kl)v4W|pSqDv?lJ?e97`2@muq`q!y>rzsnU3> z%CP5AE@lL=@nGg#37ojq{Xaubhh23( zqN#NN%uPc=%3%LGUhK7noSYk={=(AuXV2N%f|=smwFTEo>FlAgY}z@fq5EeUzGsq&6&K}^@{v)Nw>PHnbO6=YA)9-G=t5)pK}kLY&v15P)z1*m4S z%JKSl!6ky~FGT&+*FjWnXXOM!!!F}_(45*rDrAt|Ozc4<8Dp=1L=sT3kG+irHuf?d zb&Z5WDR3Zw7(&?Vdx6pjDzt0%U8p-(fSvyLDBa-@REZW9C@yo*@E=VTecAa9=VhJa>R?1K_H*PN-zPm~7)RA)}N$xMtF0 zn#@wf$#O$Ry69~4y9&Q7+6y-uyK}UW2O*_?98wQ);5Pu-7G1Jhx-_!|eQ30$f^tMw z`BdIuq?^@CY?LH@wY}65Q+6y?kE_9XEvI%`Th5Akkvny@({oB$HE&pQG~Ns&#inRqk~P_ULM>k0>e5#&R#z?7Ud_Fv?8w)P7n4RvR3@n=4>8SO9l6k7NCm*UgY{uc4x79-Jy}iGY_d}a8o|7;CCmF(5d*+SL3I zdwLB#5L%vuQ;=G0t%^h*M+l=ci6~`@M4qMu0Xt|s1IBHnWfy`0$QnHlMhWg~8R5wR z_5>J`&0dBa!n|a**8ufQ`TX9zG!MR9=m|o7(+ZNdGle&$@s~RTXwO)UI`& z*K62|eJ%1-Z+%U&l&X4LYQ$%1 zwMSN)koOZTvp526W%fu>U*SDlrZ^9^%ginJ?NlAFJ_)@|Gkbc$PZ4Vm#aUnd9^z8dSD8)N8Tp4E9iA z?SjxQ4X486q5{($7#o_PVp2dpn z1e961mKFn?zevbLzC{Cy{Uw!;=oy}~1vM^b3tRvM_H)3CPnCbZflpOfUn@2FN=DF^v8VY@|@vuK2r{#aRHmDockp zMq-e9s!nJG-_ws#d5Vklw6$Ix}g>UL>Gyf=NH2SZe{`&w5mgp|avfPn{S z#W76b7;?pr7Oaii7Jea8K2JEos5R{FF?3(m2{nI3fu3Q)4|iHAx~Q0YKPJ;b-tr%Ux~eLXVWy_;u4FX-Z_78L1$b01*Anco*I*Wg=~{Z3XR41h_GxsPG~2`a)5>x^Rn_UifusAri>; zq|HNs6dr9R0z?*V8gIcvlAT%*wrb|ErBW%HKgJrc5vU(~&W0? z*bh(~Wg!!ev33wv_6pmtQH$N!*g=u;tf*1lM^wQssQacH$;WG+} zrNl%Qf5+!zyBtf~@&)I<#uG)@e$8q54PM+{THSd79f<|@0dy?AXf#!0gTK0S*K^49 z1N{96e|zz_AAf?$ELbf3XphAZR3W(-A_I!p))6cTZ&aapofWUw>*v!95zyDWh%G!p2Kq5tBX9#!Dqqk`kP!b|h7U-6A`D0rfbm zxS;D0)=mWT5L`e>D5^e2IvVCvv)Zi`FGf?af0I$67RAV~q=?jR{|Fl;M=QR7QF~w} zHLLH?ki{NGy`8sDub&qv2jnLKnJPPm`~mnHRRq}dJHZykZu#(hu;*IpWqHRuLBdKB zMHjOO95Jh^s8wHq#3_-cb8Y}1kL7qCi~w~jxEP{sfs_hb_?9XB>jB8BJ3xzvQF4`J zmuua_UBwGGN4{=qOI-%Be<}CPy{2_aFrUvUpk*lDDMS*ZUtR{HU`X^xVZ0YBjCMNr z`$mkG0#WsNfPMNgHK{lsO(%RBP1b%_OBV}73K zFxGHgraZkE1BPpOc4Pf9VKg%L9h|i@*eUlI?NSkhL|j26?}IvDMa$+~dR)WBwo7JK z>6lua^?mGwhOlr#P)XJ%)#6=?KvG+AR%d@&uA3Jb^t4sa93BP9ge`KrvyAPi4I`#|U9U5Sm(mZH1*PVTm)T zzPKF@CTNqq)hbA2p~%pohWYIQ_Dl)Q#~6=rd>UJ{$pfzO6&qj4H|{7D#CxgBb_CTO zi#=yCh@AW3bz~+lw?NnicT~uS!2lDM@UaBst}pNpinD22i4^0+h&0Ia7;_8kQo?d? zO}?~Wn@MV-cGXzE`g}tPBw;cY*|097j`6&{mR)rM3$w&PgZK7W(=y^s!{Q!`XotyE zjm3X;KS~?RXfjBs)fwu^pt5F!HZCLw`}Va+#MhwWfhB}CYHgO+uuOrNRLU-T-x62D zVBm7@v#3V`>=)=`2;1whPFG2|rm_GPFUwF&a{d=2H;@e9&J>BwRDc(Wz1Q8x|0X;VH=>vt;xW) zH`xsQ7m-te2O&%eYX&jT!;>BIDwFNMW{e{~%0^%GU@eQC-1i~9l`^LId(aJv|7gU2 zPVt{Wmnr_=!$la@;E1203wxBZ^LXK}OlRA{NpUMib^q4@*jNLAV`10i)Wuw~5Ajv; zT)WAoE*O$yN!z~;V=FeY8yxbVW`^CBxgEoQm~m>(3Ge02X7$a8W0BhB{a8$Ggb+yb z;k4V3+LL?Cd&Jpt0&sIL!&Bt_K1=M?k3Z`5c8gPA{i|qt^|LplAbqmj?uKLXU(j$E zx@?UF08r%Zk%n@Qy&Bun|1T&m$4uKdjaTmsyZ+hgr8P#?gU(Q|C5D=(IbEh&r`TTW zOjPbdeTuU{Uo84FioBnQldxw|U@|Ch1Qa;d zAEpWP1as0!Orc+n}xU@n4POfBiWA&SqNK^ENn} zZ#T&8Jt7VEWAk07R!rpEf4UXYgNYWP2jsp%OFK1Siqi!rrm?;tpC{l-Z2S+}(9ib* z;|v{HybNbmCX)LYh<4VO0e0fr zan42htNI$ba>0>CP`BAzbZ0Z%mjzi*lCTw}RM~y~F(RLCf*#nT_iIGLVk?v>;0&{= zyv>Ruy2KcfWjT?+Lz+#g#P*s4{=GwLjr{<`K(xTLr9`}~sUU)|cvDlsx9II|D)=_N zCpQ%Uuc+E7ed$0Gz-W~R9;H|L0UDLsod>>2ujL1t=~dWN@W0|f{xuE+hfX<=U*ioR z*Bn4Cn6wX|5$2dd#yVk^2~?Mmjk@2_k-c$GR#Zyb#O20R*cif`PU`-d|9zu~zBNMlS~C zPtDlm`xM(3Y##Pw!qaMSa_)X?U#eaGmqC&c+jbWYk6DrT&u3Y#_= z1(#fW9g2^C5Gr{R<_IZC?SkJ}r0gPg4$5IqR2nXphe83i7tqM{>LOX6=u8>yU%UAP z{{rd@JJu=r+9E?c83};M5$mG?cw7y#dX$9H4=kl=h%em}Lyg#?8{RWQfp@e!X~t}b z1%k|03b<$BL~s^*w?C#`r>==%)1;%|RuRTfYf(Wy4hnQD=>&mRS??&B1Ov-spn#3o zSdje-h15<`Y~yP|s1hJs7IvCkA$g8~!O_i~=E2`+v|Y)QqhNQ(qF(s5HQqj3N^kDn zI~xa;O7N{M(JgQ)NNP)NwH3D|m$dpvorj_Uc1JmCL21W?9uMig*+BmATYD-a6j0M*{Jdl}u=wZYkk*8UvsJfc=X} zc9uCnXW(m*XF;9=)i}**SC4P$-M+a1LIwFer-mh$w`cPgoWCe@wZCUpyM|AA+v{gU ztdnq7o9)N|3xTEBDFncla5*s>2lHrSr@DUxTZy~RpsUf4*#$}G5E8Q(x*8E;3R?&M zMv9GRfdvAtOOzSsY7hp;iz~5wn2tW?V^M+uLtkBEJ^-+F15uP)NbajhB~-w-6yD%58W`Ev$gQVvs!#+aR~vNh zf*n}}bk2}WI4iCSn=05(QA@ljw~*UWMG$8ATc`;8H{_+9QSq9JAX`^Khtkg=J9*cl z^8s7>F<3q|$T|>P1r`GSMh}oNBC^8@n;v{0;*x%iy^4-24a3=Ld_xS9kj@((R`5xU(q8`dBdFd_`}lXR zCL+f7@xK5TNjOV@xR5wk9JQsbWxjh~O@+w8^(g{&69N0Uap@r1DL7lci-It%A7uD^ z%;Y%>v#e_43%2>{Qa;xm$DFu(0LjpwCwpS2kAqRhv98O)^n+cIm`O^j%R!iZ8J6#{ zW5c$BENOCGE4&)(w&D?|a@{V9c$^}h;be!Nf{f{1NrV-QIQA|)uWSx{i*fuEG$6A- zJc;?y<7`;w4gU8;n;Puod5pu3apsT*vdGs*n!<8%BorbOUL$t)7>ZX#{0(rVU!kxmI3%e#vK?q|&1hRnU41Oq}UUM-hJXgnP?&O@x~t7~Ui zo=D{T1|EQq61<)04h1SldkyedLBavV7>JiscajacZsnIqUg?>?K^mB7POxr0VlYb^ z9(W}2;C(Vt%cz0zNT6mR3;FlOg*JF)4|NzkQgCw$M8{u1WDH08B%$(l{FAdZV$6hF zuMwG0mw1PB_j6~hplbJw0Uj!PP@Umuczrc91 zP^}zR*9zASChf+*i8E_g=j^0>+LU;jBc6Zq4FYux`Szh2?ONPpCiTOoeAJUBG( zWRdW@eDY_I&Nq$D$CsFa3jxyLTxGcjnX1SK&8ofo&j^h91Qm14L2{SyJr>``ghdGV zWMFi_%rQ1V$i$5SLav($je+%EhjD;)&|p}oRKG=j14Hd*3`?JUSr4I<6k`&Vc0>MWo>8VUA{9Uj1p4&h ziJ*Tt5%gj(;r|TukEyuPRFGb62jwyK;6|W4S}l^{JHB#JuZ4tGcUV1V)Ox!o<{3PF z{PeNYuX#st1`@UAUf}*(?W1Pz;1;NBk-|LKNiAXbI`8PFYr@u01zT82$_DLnWP^CH z%)!u#A)FJoVuD8cX@3QrYNRJ3DmBo6q6Rj zcafFl@eiO!pLS>#7DJ_oGapX+SEz4=ly60ylHWT09OZ^ z5GEge_8?{tyvajq2|rH6oS0XF>_39^ycaAMWUVmr2iYyy-o!c+M*B|8R$n{{0LC~d zuUm|&$jo{-sIb>W4Wm;Ch-6>F27|sN2SLw}Vnp4=qeyfrJb~TDBLqkTWeG*I1&9DM zDN87h>f>_~DQLKiL$wV$+wD?j=yyU#kpN+uie1c4NxM;QGt|?%*q2DL!GqOvk0_%& zoi7rn#Qn8#Da{{oB!SKtP00QWo;@)Kaua;hySTPOpVLmYKi4-hI3niIgwJQ}-^WEb zbD(;|HsGhd<}U5(a%>$TUkclcJc>%mVu+>NhZX1=ARL;B|)7%ekMl zS#QIUJ7`-;*tnBEUI#gn)|$#HDEn;fxMxT^%}UYbklpt1H1)utK2Nko_HTc zI2os0!lt@RLGZy(|2fPf&|whrW53kEZpd%9N||_?#B4lqGO`IS-h$9rpHB3~2bgc? zmJ5d8CwH@)7b$}V&u%qyubWw_lmU9&D36-A{rK5OD5;&K+p29$};}8VkR- zo%?7bBG&ln0uoKoH)C2-2Uv!1-7R+iFQDY?OUht#T^^_r_m=rUtlU#Oz<6qPhv*CU39VUgYn`F zaS~iZTYhqZfQ`h)@dWapnBek-ZKoiHOCD)K3t>GlHmcH88}_LJbI^(};DSQa4hN0h z)$F?%uUaPNGV--0J-hvj|CeC#3UsMYQO|SJX1Rr;p zX?x;5+}i2fpOQPaZ__j|5BTvZ#zT&*IG&-0j78Y(=#;8(AkxwYa}eF?at9h!XIwdx zhpwfln-OJXz&Ssq(Tp z@#!JRj$v04oqL12_g+vGgrBKPS;k>4gJs4I&zLvCF-T5Ws*%mJgrGq`fus28_yHx1 z_9JXE*ym`%mb44#qjcvLGB^n`7X{W;?5?x-;N;vSW~lr5&)Ge zcJ>ow#`y4V zJAXklr8K=*%V00TO9vEn2iXQ%>>!vK4BPc3Pho+nXCCIgCBCJlvmXEn;~2xZ6_d^x zi3>1Nv09Ip=rQ^?3rF-&07uyP8Os3sPtXfXFCbrct`54w8G29%ip^DgT5xsNU8KkX zdQb=_;dHbZYDs6^;s+2ppB@wnXRtpfQdUyr3VKio6X|R56fVT#XAk>-gh+K}#QMX0 zFo2qeLAVQ4N#nY%j5Mu5&Hmwi>jA|$hFCG-Kp{Gp&WX|)#3fP`;W1>^k8rd0?fWcpmr*)7H~4r1YbyU7k>;+7-Q!Vkv`QpvFL1B1GJiTgu=D97-Z%N)OF1TJD{g+f1KSi3qAoT}WT#%e2IB(_ zc^VBd>?c9?7s%DB$1KpDuHv#O?8debHib?f_i%&PV_vRzCpfZhJrVgndQd2w&F<$t zOiQF8aWc37C)qE@*8^{018Xj}x8lZ2?1Rv>GDw^_K1Av6FJD5{WTPZeD980W&U#{W z=ID}Jm$E-M!pAE3d>S49fN2K2gmxZ9J5hIz;dKzKa}e5Adhp|!7H)1!oL6*m+{Xap zj3u4T9Jjj$>oTY$hry3%;sPq(9HZ%UW7~vA(Y#3KJL#OJp+(naQ*jQ1AJa@?*Z=p$ z>8xhFcn%fkF!)hT8zaG-KpuxJiKOEvErGY4BS7ah;}GT(1P+ED*POzBd?kec_PA!^ zcutUgjl}%_<8C756y0>fpmU;|*o_I`py`#Z(zwm?+pw!+M-dG?NYvC23@YTb)bcBkQ2L`UhS#ZP_i zWgo)mO6R&oi|#+4$SjYY{v6Bq+-2nBUvkb~p;&t|VWPr@1uWR-KW_&HMk--M7VSnt zwfZG=ji1cp-7xJK#vCY8^|)mQaceO$xTd%WW@XwJokaF+Lii*DzOdON(*?>zxF*9A zjU7H4&dkVmJ%P!8WnKRY)!7-IU-uN@auTz+fy=+&8mF4dkGJwOzme=mq1h|a@4Xkq zyJ)kZProI=$eo>Ic#9gct9N0`CeqNSG#rNGky3V4S#tt+o55{~`x~9Z%KI?>&cNB| zeRi3~6WoPh*!$@}gKGuhWK59qfSWEugsp&|0wR-MA7AvJhe0n4g93v!0iI5`7G6P5*jVa80g)Uk_vpNS8qlrwC&VHShOwUh#tNr!@5jYAP} zxe6lXSPIRO4eK^!81~y~2AX(G56d+u0ywDtHHSKFm)gOzmkf18#bs&%&U59);7NAB z9h+D?7KU(hPbWLf*e*j|QA&7}ux#0tx zkoe!AB{nPvTFx3qs-WtLEXT1$%;*OMH=IQVx0~ro@dpZ^al2pysqzl)Kn%91Ftt=+ zzfrZ*YHWpkX;i$u?e3Y@p$?OH^H7IfO2Y*ezei0N$8&IY`M3;Q`Xz2l_m5aIBK%0W zpe)O3TQSqxx@;aml^FY$-cjkN@m(z#;XUwa9Vukhp^szj^zlKehH*HNTn12P2)1z|_K$iNUsj-pBp z&ZmQO0MDo0Ajd3H4uW>=T8ii{&H`a|E>Dm@Rka@I_VMHEC9;mg2q7fW79>ozQ5vxB zUqB;GW*^^-UiHvjzt{k)V6*e_i9U9+Frcv+DD;vEiHSi5n}pDY710$NZk=t_?*r6_ z1PVQgLzL>HL_MG}DZu{EE#S)^(>Ejy30>?s2%G*mCaL)eP`WSzXS?WV@GErm8yiWr zA$CtfI_2SF3nM%#=7iWXgwe(Aqc(O6kM6s@il5{EHC1D2*UV~X7XQ)Z*m4hm-T z%D^;LRJY}=#&5v$`RkscP%$GLHGz;)574ps{%<0GtN$W<7xw`;_my3&l?zLShPfej z&Va8=Q{iHJ5k4wkz#y*Tg|xfE=2rh-Yl4PDN-V(k!)S_iF~Ln|Bhcf!1=b zaD1!;=N!!2r^wM!rNpi}o%>B#ohnW(ImDj27huOXVypYViQeTx0OAPUoymU2;Y|ZP zb{?i?3~vldpKDh_YOS%ioI?_L9j^#(;AU2P(q6+g%c*cK zs~*9eFmwXUd=-qll#P`BPo(j(Y3Sd`UU4pM#ag&s_?2idE?1$6Djcne4pd!lfN2%GN-yPseC{PUPCchhbV zgf5)1)t*{!r{u6)Mi?Ox9<|Q>?Q-mX(JjX|iBs?kB3qm-77WyGn+Yp#&DmW{9$12w z(rrsYKnYqcmw$;3$#80`UvE1DucEftJp_&J-XXS@V-;IAh_ITtoy`a6o2B9MO$fd` znPrJ{aywusW>#m*zX2Nd3A5!%F72kKNsY+*OH==&cm-KD5YV>nH!bSbwqo4Ez3N%S zRB0PfK$9oAUoy45rq#&oZm~>elSChZzlkckR%SLFg(vv80e+Cda4Tr&tAC^Sb=dL- zEHZ^^FB)M7g?}7m=aE~p1=(-$t_r8#)7Aq%9zFxZP@mZngJV)l7I?WCx*c3N!|qC0 z`?}4w1<7Kpnd}X4GEH{2(2BIH*ly}Sg+SO+_c*li5c>&T)ImM!Z22kT_fG z(g7#l8Gl9Z$d~X_BD7HD;Ae`la8lh99L&SUG><`>+Jv2As}N4rZY3WFo*K9^)hysZ zTs9W0dwJ@jvD92DYZAhfDkF|$NDB1?F+_Ug4j^G7j`%BLT2A%fgx0cMACau#vY`ie zx~+rFJFz>1>)e8{3d8P;@w<~RG9nFd{(0t^XBrz~;BYZi*9cnDNqsu@Nmtwi*wB~J zu)`T>Ljn0*B}HkNMd6Wu5xk5T4Bb+C^TCNHMsNlOa~X#12+kAYi#&l6I#`)qH9hO2 zvu@R$a*t2J;f#dTDzm>#7xv=-M2C@{)^TOBYI;tHlKMr3(`nawV!Gc!KIc3Q8W~(O z_L`dRu#&!(sNnDAxZjHH3=*H*s>*Xnb74V5c{LR~!cvy}?&w|gJZQBtareG{(HO)w3&mVpti>O2JRCL_7J;s5s?FPsuepl zt9FwDL7v1ZLyg}<%i!E2>t-o?$af!>c(4P`K=!Z+#!qDJcT$_~k z83rUM3v4Yl9@^piT(x{NUv+TpuxrKSd1TIX1leb}r;XghNY5M7gbgb7ZOKcR?MB{7 znC)Jmr3|J8nC-@la1+dS=K=2XW;;wV{5*(5abYaMK5tegCnh^`h;@~htA{a&`PhV) z6p1OA={mU`9z%^YGWrfTOwi3Y&So;;snssh$tNM$c)K8Fq7oAQ4t#rhYZZIH86h%D zMal-*TFg#ZH8pLu_kRYSomH2CF2;pyFyL&w53r1jq@2q0AbI~DJmdq<;z?j>?^d)q z_a)cDd1k1%zZKEc*@y|S*Vj=efEvqG=_21+xWQXv-F`hTfXCUG??iEwhz==+!YMd} z#2&s5RUzNuEJ&U-WZaYo$5TQ4f?99YJc%-%Au0uIi*c1*ioVg#Zbmty&?MIU0nwNA zE)0W4@{365ICqy`giwD38DTq%lrc8& z3XyvNdU&b5=@KXTd_GQM0q1^yMj)iX1A5VY)G7zyniY#2v+lT^{RD8-JniO!y+nQK zUMQ9s2gxRj-Q)BHq94LZu zfr{PRnvA;s&}{)<2-+!32f%{-t1&ZVgy1&3D?wFFfcz3V z>7RofBM1o*L3%ZQA|||CDJA8)TiA;;i3ljIwAqM2RXC~JS4uR&N3Bx&5P!99LUr(N zz=!7 zFM*^Dv>t9YUhqD8gI^dKpQY`PZz={0AuOhrGY2vdzWT;OCKzFTV;=kKdq&T1T+BX5 z1oPQDiQqi;`$TX)>rDiG>`)@Og1rT}GaH&hZH~`r%}}hU zspIZ0Fi_D?48*fwaY(yX99D}H+f z5_Ae_1GKSMyb`zak(;r66Jkg(!M2f@$ad$U5SaG3xEBpjL)kK~F zUev4rsesd8w;s*IlIAOzL=4|?X*$0plOVCF$W_6fMOu{>4e3jG+Ca1yWk|r{2m>aDPB!{S?!NI4$l6X!_7BPWC!|g!tBWw@F8LG5`Wxh` zVC5XwF|z)I7oAAf?;vKJtVIU4GYo7$M^=NVb@EOheq9Q@x+l&E#wEkFIzW%51eguu zs!G$~<}}7C=>hfvad$cuF&v<tIi0j8?EYVAyo3l zoHZ`B8;%W4e9w)1DhfI6qa(T;24yXQzQLKsbXgGngZ)}y)b6GZO`!r)G|J*`VL|I*a> zuBi>SE`A1nOp}1l09_)xMc;-C2gqgL5h?4z4qK~@{Rj37A|+`Be%F=^_R70p(%Crj z#4h5Z`u=^GO6Y9!7p?f&im4#nT%zMrdPq3MF&~@d*r5wRWsC2>2P@e3sSNG|nFnED z@3IN~UqeKALy$cUgt=NarLD}}_^~PaZc<}=pw-^xv*3J6|DDK&4fCFz>7f3J&BKU1}~YpY44~ax__4gS`M85lCwf=T%DAw%XL?RyA!d z@75k%dr@{#n}ounD6Cn!Yzy&YDw|ALD8To?3PPo;{-a~patW<(Ie*v7&Vh}>c~!NRc67NME2y_v zux*2%BPknj{_Kbq)<#(7+WW0AMBK$sUSpDq!9ud_XTS>Yt)-xBpnP=&y9WaZD`NQd zED7gDiuJW^_Qp%KIL~&eSW0TmD%Czh=Xm|+#HqN~4%%ti`NsBJHS=hDt6j5<`f!)u zj;SF~1!j%mr?}X$45JSG;EQo04wos$+Wh)27t_6b0Z`6@*05~gj{|^1z!FY)=<3|E zi!+8I0W&DQH5Hfq^=`7hl&hrdQ1TFtnU19>k);U3&RXJ?XpY5k_`ia>ZhGCvv5Y|TS< z%A8y>mi1c7n!0H^vZf;I*N}DXF3M=+!YzNTPWpk1SYyNQg_^abhW8{C&u*xl@kNUR zBOn`_5^$+Cd;M9Puz5ol48YIxVgTbgWc&`Vwie`v+t%SM^+Z9Li)0P%U6LCvE`a-X zZVxQ*L(YFk0NsUxs{^F1mwS4R4DIn`%W+FPex@l%J&6^DnADXlXxPr4ha&LnF*dkK z-wo04&61vrn;a8(LZikN0_aAJeOe02(UbzeV@oERiuue?Y*%9bz_oKIg8`XC%PQ+$ zU2j|C25U6q6r5U?4NP<(ik}db3kY>fC#rQ+F#2T}WW?L@jWRS{=G~k$L z2K}xon$?g!p|5o^f=%e_NmuqYNJ}!4dKtsQ(oM7kACwa{y8_I2_jvc(aL*Nd7L4vi zrLJJSV{tqCSjS@hOP8XKv^VCH>Gp6l&y zz-1z_hSWA&F`Z^?Eyk_m7_y&~s=d68-2XCQ z2FB(eW~(${6Lxgr7k+y?n|r}KVtSWpK~a}Upi>^EJ4s0hhMfBvvf#f1V7fePvf$T_ zz3SqYD6FuNVw{#7iDQ>5jd(wq5nXQSv~=r6`s#A_jnjk!KbQ&!#PLIqYu`%nIS_*9 z&vlS(@Z<uhNkT@=|Pmo=})&qD)yLBmT<4MzC^2Y2xzn~aamz~xE z+ooB#GUgiY_sQ+yNOU4`XX^I%3v8Ql4rdXpT#1`1%gagX!K5TjW4UOYVa-^7hU8rT zBCs5tJ*z(t{YVhsChY3ZK$_!9U3s(!+Xth5tYb!tMLV2m< zW~hi(e0}&`3tX*)RryWmnu1E}PRDkfx!Y{(^2bb?rL`KSKNzN6=>AwaOX19s(f=z5 z=r|-7E}OMN6U6Va%kR3=UaJ)GJ0*GY=>0o$#Z>vjB6ur*Xw_zul7tZkQ0_4u2{7$! zJt(HFmp|MfF2im5B770&<9D6^PR34fi{>Rbe*EY~Z7;uKYil znIw~BV1m4b7bTjYXw;$s1qUPu0aT(1k%UwOwyV*NcK;S;z*Yi@lV~Q7Q)&OQtE;rO z>aP9kZfzCB7bKI=B!C41RD*yD}F*j&|RAR~f!jUl(>}dD`gKJ&S4HA082;Bnw(3;;iBGUFR*!VEhtS2QwThv~0 zuSoONK4ftEn(Q9YLr>O93Fn1w83tHF@D^uqF!$t4!ckmx8OcE~)?AW``*Hb+{MWz< zs0|jb5GFaUw~+E;f{)ueKih8EM!C_jbQOT!MO`5-q2XlC>=)x5Q_bSkS6a?pA(OstVC5uOHU)aOG_)G zCCDEEu-q`jB6j`}=7GFWwf>pvsb2mXwg}M3Ztq<8a<{;*J!|Ha8C~Iyu5iWkSQ^X2 z_x8NtT(+BdOZ0eADiHr7IV^gNupS^=rmYu+A?4yNEh3cKe6uI-kT~KyI^Y zWUb6`)n`P+LKa(UbRntrN?l?mt%}!rh_3Zav(^Q&^yAh351pC++T!AP#dR*%d^?xz zd!_BC_)FW9Vy%hO6xOob=|Qbzs@|g)bb4%2+~v%wGBmWX1Aj3poB0bdXGaqmgr`pA*CL>4aR%Yzx$5@6U{rM&1qU#6D?gpnYV;br zNFP24qORixu_D_MTnJa*`(9QLB&^lgV*u~V9?}!D*DvUqC7jAW_NN;t29Ll8jfKa^ z417(b`==ME%Qn+jZ26)EJXBxb^l4OE3f9n|uzny<0Cyn}bP9M1K&?1y+-|&=^S*HA zHmZa|)D5~+`wbc;U||pM^s>m^FjB|~J22%fQYSH9V1J-lOR1DWVsJRzw8iNt;4p=` zNFQ1IUlx%QR$>#4qs8i3`X3q80ptCgCW^g?T&4eMaUOIMKPoTVX$+y8LcyWcfn10+m3ss%uZx*^_TFmq|VK|-{1J_m>&Odt>A@iSG6$N ztaWV&&rZ2b^75Z9i=@F=(a_$&ET^+ny-IMI+@MBkbEBp5PX*dz6|U)ilIhZKIiO7s z^u3EKxb}I75ngw*8WN^`&o^?~9loK{uJd_{O4Xk=A=W;4KQVN)hJ^aMmxw;?I@r^> z3Eno}&;!IsCrh9{qle?enQpql9+I0=he#8kmJ2`UC46YMbwE%0b6VJ6J zV;Y0&9^fG>9Mq0&gLU=11=l^u-}-gp1y`*h&%#ihBr7ac|D-u7cPR8S?{bCC*c4%Q zq5a{q0}elc@Qzstf0hwlFO8G>%{J?2bZB%KqfWwc;FaSFpRfl*A_xtxdrbdbqyLKg z+~7J94F=bVPu==;;zw6&;7}Fm1AZg{KOOR;lJ#DiE;W+cNCwqYuJjK9avRf^%c@UY z=}(-p$nMKDD-~TY?L;-_|MA1j4%Suk!2G^riY^KOmGzQ``d}9W8>*Ama;q`Clhz4! zEMOb7nxU(2q+=+V(-iKrGb)qreedx+{7-|j5pp&Zsxf!#)e{+O<$a!&_bT!>birjt z2bp(}dG#jgblYO7fDDW(lL{CpXPpL`{B||6CN2?1wvBUO4vc%W;Q!d0awRmi(B*Th zLZ)NxZkm&D!?$j;nuKbCR#6SMiMW4ospC5-qGir7TTF|)6o6;gHIy-3p*iR*7AkJ! zgx*0iQv2 zOcjk|C=tj$EC?IMD%aFiPM;_%E)^`jiz}U#PSvqPvkpn>a#~^}nH80-9p7K5B1YPC zt`A4;^c;6=_?vPsicBs>@;-J(F(#0Xu~yR%6uP;I+v%-Tw?p{?OI7QHW{2U ztm;9cR9;kuW=1$R)PilA+c;$=vVeMVeqcF5Fgv5B`|`7?TfQq466>RTMPaT8k}y#( z8vl?Oo74F&4Ppcr3L(r-54><#rhG88mme&nvD+llrPk)(Ka8jdC@X@(2<1W#RjS*x~QFOAv6R2J|EF1OJ;o3}M16w~X$JsriAtF6+0a97q&wO| zIp#{*DX6(#7Z`1OxP|0jafPp$#O!lF=(^60=zoaV^4&)G5!`3GzY-#*kX>@}$ zy;v>3M;2@zN!VW{W`CS}u zgEA#Zj-U31?e&i(Ne@cnwnV1K+Ppnf^sCSfXa|m3ky<@}@Tm0A%uE~uogB3ScM^lE z=Z(t5=LE^=o57NNrg!JkcV#QmXspIh2kb>0A+@cNtPf$)AEz$JQ8bf$%(!tLuKq;F zTo|*`doyX0QU{397ub$&x`1r^)8Eis^zwN}UoiUM(~bo$!G(hi4VQP`qy91KV4J9E zj9}1=qor!bR@RE8wpNXyv_Daed|TEzd+|J$SH{hvzmi__puU;LMDc-nDoxU~ijlAl z{I>jbIJ%M@R5~b8bLfULBR8m{_C%9nYTO*QY?1%K%@O%sEBWCt?;L%E zW_3##wzPWsG+FolX|0KJ3nv-3CJLRJ@JD$Pf|j|3`Zur@YmfqFapgB^2=f^V+ma}$ zQJce}j|cVd9}5w7(QfetD*ADlW1PJf-CAh!5Pb%Wo@f}o!VsV^yi<-Pho?R{u>~4x?a*BUPR#I>kkj|^d zax_Ooxk_kBiP}%8U2`Z;0FcnXHy6LpuSpWf#IQF{Jt__3WQ@34+0Cr{Z&p`*Nt!Qx z7n)4uXwQar&juHWv#b>7Oz*bk$8nD$H!&ZD=8S&h3>B(&x$=Zw^|FH1tylsvzaEi# zVK_3ktAZYyI$cPtr|uPEBMj9J9|lw;-K@xc`G>J?>P zY#1VBXk^VvAzaIbHat3kXs+2KM&01qFf+lsYx#dckbs{B^*aAB<_%~V91cXCOE(tN zLL?`ovZ+_JY{_ZX51SkWG@v-InM77gDhzvQfgRl}R7de-?fO(V&iL4 zfZ*~t1wcds_JB4c`4RgG49rk<#UEpb@ro^sd`m=h&A1K$%g66t>Ji5BSJk@b;RddO z_Y*_uLG0DS!A1Qks+(k$BO-31FB_^plsBynG}6q@0SHrE;sHC%H4I1wJ*w%Sxjo!~ zs3yO!p98DHjLKB!H0}UpHgF42f2Mu~_s|hRkmltp56~U8;)x9oA(8e7~zFKvv$8PnGtnBtQXM#$ltB2WT|%_ z_3q!K(U!%orUKB+3rm27{jt3Q)b6mo!rSWqi$LavhTVkmJ>UHwFUFh6604`h`ZqfK zG+7xvru|QedYO80$Tm7kb3SZ8MTAmyNE4@Q^Q3-Fp$fjolQ}_YKhgODkCc$y zQ!At#`2%Xcg?8^Q&%^KVUISf;&hTj8?3GR~Oa95stWSMkXD04Rq^@#;q8d88;2rf& z-51i2t3$UW#BN`XR3?Px*bAj9n*oZkpdRP2h~X)?>v+SYFOB|1Y>wbM<-2A&+OX8o z;*6|teVLdMT*--7i=YRqd&mSX#ncZiQEj}Ip*mg2uQd&}M@!Z3C0LvR$0b$|Z;lCo ziXeL+9QzXy&~ov!)o7jS@ugtgIy1oT(OZJ#PY^kWkcCy-3d6(QMq#n>A+o8stSe_5 zP2(zvIj#itkNY~{`R4Qz4Y7RtMxgiGasU%EMu&2fO=V@I(MAkVE^ogwNG%%l9D<7&_Wa1)X3@5x=Ui#DrTq`{Scc|9MC{&$JU^_WJN6RgB zK1EP3tbp>=BzhP6wI3-k^NNkqI2yS*^oWg#?(Ol-E~p1 zEyt!Zs74oLnDPGfT^vZ1PRlbs3V)JRtaeDB z;XkS`3CG;h;Fi1z3FH|&Dy$(#5h|W-@foU@i4rX61nh9iqM-i(4jS$}j@K9eX!b-| zPV(X#!i!YiDCi`bqbKs`9Dj$=@>J!NvfdNn&yqrul1=lI9f6N$+_yF6iMd70Pb{y@ z!8=?T#)n;%ke9h#8T>WMWvFYQ1J+QRCwNRp?y<%Z!eN||aReE&gFH1lAPf5kQs)quPg2;=5o-0D@lpH%kLD;2;9hW6 zctT8EW}6??t?~GgS#?_?5Mqt@E%oKYB`q#tTJ1(JVOK3c0{P+! zS`Ig83avy$cZn`D8*U?=BaB$ExPh(}f)CdDc&boVUDYF&FdU^#kTs(@a)dOE1>whWX zd_Hf&;+miI^&x0Nel!GiA=29eKhZWiMW3< zzEZ905Bvp>l1w+J(U&h7=NXU4K6HghPH+!M4C9d}c-~yipPbf0Rjz|%iOAcnIycEc z&E}CKL3D#|-&%soDw7t4e)%jU566SWk{IzB?Caa=rS_Jvr^^UluMoM+2= zqVxLaQp&)i}0nG=hb{<)O$*XB~{IddsBaQ0mKJ}r})BH_#wX7P9TGZJ^>>HRlc z8-*U6Z)kAiI&B%m0UNt|a2uWK&SNB#YnSL`)9hn9^TlhYw@=2QS z5@8yg{!PS8`qo{_nx1BM#bjd&C?42lM6M`-VSQXCBIp0FO4YmYLxI(9Tbch*O;p>; zd{C+c;;t+LQea$$B>9oum^jW_`ZABY=MTacxTzg%!VPkrQHljyTCw_75p6J_E4fj? z*wWFRZzRO>6EfU;X4#OOUQ`4z>12~$CNtKp4~PKT4Nr%%)HOaQ0Bume=D>J)63AJ7 zYLH`AmCIY@_7!o^x`5&a8`~{tt38~mP&9FAWPSeluEd+s#etU7fmPTo4%M-NS?!Ns z7Wk5DTqjbNgBUKHWmq8XMe*Es0T-*{>Qd76yQv|a7Y}}i#bakb>3Z&YY8so{>LR*D zo8gRv(D&nKiS;I@-8}lH(VQ)LGFxh3_%sZYP2B>$H80{OYbaxQ#c{clCGR~u&N&!- z`_Lg1#HNZR3z>=4lJ|HkZ>9nlX`6CXFk_Gae2=XNIl1CU9oN>Z?kW zTx21_X0Bha(zipW@r%=mKttnEi{H`cwIynlkOl@G4+WFpek^Q(`%#aMbc7ysi65KK zf>j3scki{Kl92}V?M*$TXejtBaCe8TCI3_EdD>>o5U5f^>oCfc&>(hub`lH4Eo`_^ zW~|Tul)JVci_P*8rXQzTDw`(wvQ9AP@;lKi2^Q=P-09?#KTo;1^Wl0DXLsrwxj@Qu z2^}OJUoX0E&}T2o@8Lsv7p#B#UmQvr%WNuKLUdG%#3oU&(AO8L+<2syLRFokqc4Ou5N4O%;== zQLqcdgxtn+k7;y}WO$oo$glHPF>=VxVT6kVo#}7c?3ihXI~}FR!!Dmat@(J^=}Xjj z0&+XZlS^Ri6XYo!7fd#Wus1B$Q$%ht+Be&{rOJBWHx92~BfNWjX&@609b~%`{>nYb zmd6hXGvz`S-2Ww6+ZNw0z6NXwz6||qC&4!V5RJT`(HlTv$g7UyD=@uF4pyDse+Ws* z)XCy7(DT^CB*!rMG{UiV5UQ!ki!*$edS2g^^4Te*&_OdU+DSv$fXo9VZj>9?Bcx0>m9==3|&wi)3i zk!cme%QYSk&+uIZa!OW9xYH>;2P!+h=cMp9-lg<5`|+?8-(qzq^^K|M2D;Oq-dEK} zWBNR=w*@{<_#5SeDx5$Cl4`a}i;GJYrcq{D1q{!=ADyNVr)5N_Q{dBt@TX=c?l3!XhuMic>2sSooov;HAah~CG=MWU+QXka1BVifCRsK~ ztXa?NJjPa%U8Nd~Y3aH7%#kf==~|pF(UGx-j)vIh3mi zhGsPeA!x`7z;(nY@_@s}2jNpL&jt)cljII-+Po?(H|xuLD(&?PkJJ}@y(p5#`@){w z#`=OId6fxh#a7^y6^C`G*cG8OAZFc%#g*2d+4V5Ap~KiKhfc}wmP2J{+}0*C5;TWn zSZ`EUb!+5>&X@t5K4*?7i|_w%iMi3YKB2mBnNQ_389nW1Di=m4{pG=WwC<6~H_&V? zllKk%Nn&VmG~&Qy&UD>rD4>-Nt{BT{hiIWDpvP1Y3nr;!y#BqgG@4yAq!K2(1|4SHG%U>^^;|r|2y%h{H5|u;+2x@OQY%; zqLVljTFD#?=07Hedha^LP%pSng7Sjp)sV~sq5Q{KP#X(X{%D!x>A(VbY6aUYvJem% z&pY)}*O~Bv_;r0;;KNpcw-EdpN6~~*Lz6%=YkLp9G>hrrBlI!zvMZ6a}z(-LJip-L*Pc&E&xPYHjOdUI~ z>T(pe={P-3SCOMQBH2i%Y(yGKkLcRxOG#DlMlvcBN_Eqo9`JDjA5jxUBkAy5F5GDU zM#dd|7Jt3^>?6q}ll(=)2uV4>-2Zs-JxonqD2=4_0;>{+AtJS68*+;_2l` zA!&~A;haSEvqxPyi^wX{Zm>oQIvUD9v6fE#9SK)jkJa-Nu5iwYylRn;{1>N`w+T&s zJ0_?@Bh~*Rtew%9`zJ8Wpm=I$ah!~r5-|;|hrW<7NBQY2!u-?TzGX8!uaCp_AYa%b zpwuP=<~Z$vQ>p&pm4j|CR%2t~=}~ZY=eU4%^H!Z+x;=tRv|)5PmPKL{U>(!$VSrbYbmCXF`%HUoXB{y~9RE_>ymB^ANz11%^+;c<*bdy@9OZ}o$2Wex@~ zqKIE7-4yr~Jj3s5sC*pQP$`&(KKh*vy&Ca;tf3jw(5VD`YYfx-$B_L*uQZup#u;-A zhXw1T5XUwMU&tK7myDC%c28i7tkv}r6sjvcK|RhayU_ExhuMp5zCWdM(Dy5X>8Q4W z_r>2(L7z9gbiX+6xpyI~Y$zmipePiQq&eaCzCt5h$T!hnQsw)ZxNN!*qdG-2rg>5B ze*R9TheF+iv?z%k>fp< zBvS(}Po@Uf{qz_&*p0%Oj9z5c0z|qDwf2_`OQuad%dg2(biGOkV6|2MfB7|U7d?ST zrBgoSk~jvMC)c3nU9Wk4_m3s&L2iS}0PGJ|9oC|X*i~?+j=|O7w0Ifn0<&20g2IIY zmP3dJg&7mkN&FfXWq%vU0GHBbM%CdG^{y1qtPa6{NtM6g*Sc38FG1q5_Us#5Emp$# zjm5*AjCpYd1;c}n_}2bCdj?XPO!ads!)J7cqCl(mKBF`2dR#UgK>6TIgjZ{v0;Gj8 zOmim)pc?M5Us{bXXT16VnrDQ2fj#xT!qN8lZ2N>vpGW*LR&sFcouN0(5_O(j4p+ASim8pR(^-Lq#UR+JhE_h%M9&HL~B-@l;H$ghq02_Oh`K+`I10wHjK%?-=m zV<1MG8>BxawuN+r{2igH!)zAZR>7v<&2fNPd|74UViYb$s$zQ28kxyF1}ApCaz>P3 z6L~4?dY)$-`$$U)`mCiXQzVamoH5#Wz8a>JkEIRj_|vpI)7JF>X>#(rMPS;0l#&6( zh_%FR*abux$k}BjYV?cI=w^Xa)_BHa1ju*>@#iq!i~PH{}r@s7{E0>O={rXrTiZsWh|xuH)6Qh2#b@T|8$oZmER`G4O$to7>#^LG{YGhSzj9IzJ6@h}o z+@1WULe?aLLs9-zE%YMS3Io?z2E7c^eD1e@MHkZRVqIaAkTK(p>;hyTt7p-^Mt9R22&TgxT|(GOpTyfd$pJ=o;5U2aI4SIWafQ) zX!hx$N$}L}ij7e#4+F=jR1(Wt)MIp``4%6esk~cbbfy0EzZ@e-_JA>B{hm8U&}zJH z4XFqpVwiSTq_s0>QG_4c@N4#ZN+8d5CV&7-;E*Dj-#LWX58dgq>EVeFVtLoUou(b8 zf}eIzCXZ}XXd-G;B{)yFzUT71J~DK}W-&r>1e!8Eujj&vgyvWQEty7BpxK_&;!ojr zJ5jXjclL`c7$Z&m-hzW${RBPV;1shRaU+E?#N)FV-q=li zV7mB(wfQd*U^4Zvy(`NN0Is#3C_acX- z7}$#uUM%>YCSzfCPly?T``FQo z%e%JRz_FJdU)UibO<2T9_rRYyc-M9Y&{g-{ZUM31G6taW4bd_g=+tuKh#k9d2UAobpvx|+0 zYZq8f(X7~K^;$u9Og7h~dred*H?Va*RY0!(49Xg+CQuC%k>Cf^g1#sV3`SEFQ5z5_ zV^QPi%^$X!I{W_&qb{yd4l{aMk=|k*=__O?sD$3fghOz6*6ucrYHRiT!Q!yuTbo=4 zn_Qr()8-pbq*2CTM9Y0iF|9m(WT?K&HQ@|uO-1iRlFVTjKhz=)?VO?Sp(n8CX|YxP zIP1VYbPiTl8qUO);ZL#Gg+x+7N`n4QI*w$JyLfBB(r%CYX@%r;Dg!*~JZ_%&Q z<=K~y5(LM$58`YvdvRlO@YVr-Fcq6<+|wfH|d;4Al|kcN6F5X=kv%B@NJ3X7gm?=6PitP<39F61pYYyKl_atRq6q zZaEQ-|6HoCk$fxdAYqV0+ax{p)0%v%u>F;g4TNMhu^h+< z8|b4yXR6q`UZH3xX1HsdR@dfEYWf+((|C&5O$2j=M0QV)BJ%N%K{}*epWiniE8lwQ zqv2K|MFYP)jiN)5=bdB`C!Q9@8f5(hKWNxob4rGbBZDg)JWC4}6L&nS^38~pPRqHC z8b8kMJH0@CJ+<>$a*ht}mG@iRtC%zwtLioJo5}plwES$1mxj_U%O5)trZ;kuOk@|9 z{F!O@CId-7yusL;mNgf`b(_FLzVkFVk5I5;FrFoZc_ z-}U^T%>T>zpB+$n6l3czW{OqJXwa)yIT24r(knGo(IV~JR?Y~4iea#X?$$Z!)s$4b z|0j;>!RecAywrW4E$KXF@|bK!vLA2G^re{3u88}1 zb9(Gcx+VRJ85sN+l}A%=#}v64?-?!Dv9oPTsYP2FI48Y0&;L+u<4;y_x{P8Nub#S! zWzc7Q0Ob0X^sMc8{_&4co5-zZifoy_TU0YISjPi2D7Tk1Tac&Kzlf6>ZIdt(IL_0f z0Sbc!{(PDal@;5nt5%|>P(W<;`Tj8Q1QzI?4H0C%hEVd>rcH%v^EWc{(?eBz(UVRp zJNg3PD^vZQ{!!{usu9S9thiA>`kt;+*9VYEHDWjQD|ZJS`t)cwqXlzS8c(e@Iif@` zM@3AzH*j|kQ0p^W^Sim|vIV*`;5ze%g;g@+6s9!pw+$ND%^FNU`hxnU@K~6~WCHb~ z$z6b*a%wv2$D-(uyz;Vuo}J{zA(BC}ST+>&;+ z@-E(xk{j~(y7MBbP*R@!b~l)gxne?64G9=v@y0@aabod8- zBpNEXJJ}FL$AU;pL;e|K8^>%8+4t>^`2wh)J>*iUfwkSX6K+cAWGvIKo;~D>?1YK@ zJ)R$(=O0J)Tx`$Z)$8+J6EYEuzd`Rbn){xou8tQyuB(AJGaVFI1N$0xl49S3&h&sP+N$@t8m_NkD+k#4j zg_ULfC!5%pTBL)@yCtPcCs52Yv&zXa|Jc1ktt8Dvb^Lx=QQUZ*jl6HMp_~xKm{seO zji|=d4Wtgc+_wTrVTbGjEfmKe0oV`}Q1~Y)tWf>abx;l(o*p>qTrrycxdx#nR+ouy ze8Uebj_t*PoYRPzdlnT5Yo_@gw=u(0D?%!qBCtiEgm-VLIBUO`KBg45!an3#?*0;@ zzB@Rg+$vzQW+^#=Qwhs+Yr2Gn-V72{L0?#5qN@O|qWFwVSF)d$#c!$^ILK_^ zPA7QW^#l4NHr0R@L|T~-pyp)HI!=D-v(apfjS#klt_J(G$*a>=&JTb>2-uZBQ84cE z1etdt{(iRldm3(tW)oyWA%b$DVNcKJkaLA^B+M3LiH?dDoTP&{#a+DU^DH9Q5$Y=H zWwQO1*mOfzUZVwaQYv14F)SS@vUOX5g++IQZWd736m^D(IF%m^@Dyjnq3TO{*RCKg z(OE>6fe{*70dVNVh^HYPbXW&0#vdlukC<~~-PYA#z`Hy+Ub9wMv=pi%LQA)#*P_ub zz{wMDX-Jwj)pz_%V|`NfjH~>K(OJ&OII=T#474y5`$GIcBx6&+ip*^U^rpP|-GTq~ zWU1-az!e(X!^lOLUb_@l0eC_KFYx*r@`t>K9*n{vGw;#WtIMI|0FOn9KX5X^|2<u$8jxh{4hhW8V-m6mLMeydCA-4hM zKfyI5~4kDE+0X}XtPN15TyW6n~;5MuY0__|Z4*=O5=tA4@u$&58 z=nc6Dl18;^I2y^WFtp4mNWC_jZe5A`Q=^bSMJ2fhr=D%W>w~kzH3`UQ``r!SJYIg^Kt@`t;E9Bw=JazMOJw|e2} zJzvq+Dz}`56dX(YI<1cz3V*lp{+>?*Rc#JQs# z;R2O=JNcI%xP6V$L9R_4a|G4yM6mqrV16UkZ4iV+1l!9m(+L9234vWvtWTaHnWJy$ z*I40kBKHFo$ibE*NL4_LUQxI-5guv9jfKTf%HFhsZb{vV=s^7g3BB(vy>vyQH~;kV zi$rA8j3M9KWb3HfMFxR|2WW7kKa~uYZ;m*KLFQD0&BaqIw^ByIyU_dNh#D5^A>5*U zQy!p;@Suksb$(;--F=Al^WWyz(eCIo9LCO}UmIs~k0Sv~474T;J)RTB^GmZ6=sgk# ze$kkO_?lc5yk`siXp8eEE9oL^=XEUoI+#W^ z2L+}X7-s~+(O{bYsHkSWXORW2{{Z6GtJ|VWccq-Ic*8yDO5xe^GlF%`@DQqdfWJWf zoyeuF`UU9O&T+HKrj7HbwA4MwSImgaXoboc9)NWX}YH3Z)1A?!1Hfu7hizC(Ky?qWs+f zE+D_*u3<)4yATMpVWXJ4JGkx@f+K@+Q8DFscwwEq8k;1g>6n2Ds>6bt9wTh%*EE;| zKJe9b8+lh(bKdon%>e zJXkl8jgDJ|;QC2C%nXK}B|I3qoR^xDx$Ht{t3XEsFRXzJwzbwhAwSf%weB&VWU|Tj z^&vYCnbr=HSl-$}I@7u~LIYuE-~?t6p@yBOXkD)n2HX1MabcC1b0k>zvM%gN{$fwN zBe?!Gp43kk(YtG<9`gb(NDtDeHT-~4scUUKwpOa=*%bDr_Bw46V>c}m+)RC*xm2c|Jvg;5{$=M{CcsEIf1i;qOB%Li) zAg2`@LO+Sl3vQCpHb=nQ>Z$!X$&9|76CvGYA@>_*4|-27gJvUOk&c&4Lvy3vre#h8 zC6nC7EVCUUX|AzWK4-06!(TR!kd(dWkP(t`!ZlxQNb1Sfq6cQ45CuK@w_4@YNp%pd z>Mn`Yo9$=Or$U1^Nz$V)8M*~#>+$A6XG#YIUeH4s?~Xe;#s=5j!QYZX@Fa<%e(;9b zHQSf~p@tpbF@93nU`QHZj-OOUy-_k?{G^GDpUgHHKfNH%9zPi{89(`D{3Of2XZ+sY zIB@(V6R#e{{_&HZ9WZ`UqrY$bB-3-oPq!l^%{A7_=d87l@mI!AI^*vdKdH{Z@sswS zJATpvbNpKM;K{P9baqW;cmpRVduoTtLi^h*^ax2{@M?#fD|EQILiZCIXmSQlvO;tB z3#+qETBccJqdBJ!M}HvIeCRk5IJ0c|WyR)XF=vOhf`aR0QEBF^P)*bpuj!G3Pze=_ z`euZF8uhlL0b9FP%7fN7<60)gTEM(+4|iPqB+zootMdn)#z5d*W!YT}G zXzo^|(2mBx(#}6x?G&%&f1{mOP5X{^q8X`ION_+H0;Wf)u0`f#T|?&9u7~XJ=K^Gw zp?8Sf-Ib|j!H~>acEtLF6x|C!))Z+QsIq2w?FT~p`z~JYsJwU)*E)4Op2gl|!=$>M z{K5=s(iZ;AUK(;U;CZRee6LXXF zI(Ez6Q=UgfrPA0W4d66*jV9o4Q=wp;v@TTF$TP{MW!8AS{+b?-hGyLtU3O~iJ>}~O zY?1^v-)DwSi4RpxfZ%6ad!Jt~>7nnn`XR8}HpkfJ)jPJolLh#ynFhkK%oBV}7Z%mI zM4lS3qnH&M(A8FjE;cK4b)!aUn5yZj=g|+PT{is+8=EG3%os^ zy2JAJ{Cb%b+LMHi)`hK$(7PQMYKAAM*$J_E`?bVAvCMZDdNv~sy_E)@59!2tjux{F zGuR~ThVx-VSH3s<4~{xvN|-4LwK|2Be77xcW^6+-3o>*a{QrVLYZ8TdYBy0T1rCW7 zB`Q2Rj?t96JD!`gZ|Lrskv5%1D+Pz7AIu8O!P2NM5w6Z$26_gWGiShhV9vbsduuJw zeJc#TqI2{*HCMN%?s5jfFjqL8xgOz=;SAjczih4!rr8f=fS*ACX%@(mz?RHVei~wl463#A8p=>ramL1EO|Kp-7pq*GbWOyk%4`=PmGp<`?>>s;+*p z)|##|Md|*z!LguoUoO#P(sV_HtT0=S@f+AA8E{+u880T6a29!swOMn%R?godZ!bw&-Bw!f z3EWC=LgM;+psPVj)Fquo$RtKkbL%0^ln*3i($W|q6QVAJOsX0uaS$?j|KAfbAqamj zA=Bd^gzOa(YeFWu{5OP5Q=W4P+4<5nezywzYUFb!#+(&_9#UTGCAW6tiKho{LBrr}65&R0(?RB%@X@g38qI_a1T#Y}Z*W+Gm(4cl+}C+vGXBO&9++ z&AHC3Pe^kNtXipgq4sCWMPo>+MOIpq`F*cuXZ#0)nqjGfvP#o^7nvK0?3{sD^$5vkVI?&gH?uA#`)jOS zDW7j}8f)u$z*;X=!ziv^VR!7pA>2G~(^3FV<@m3+nm$kMk~rBAt(PL+kp1=Py2=E2 z)3)tjy>xZ6b!6Ao{lL4^|B=Nq@W{m-MufunRHF=W;1+No^s^rNqM?Zp4RZx zFXOxI9_b^Li~N`7?yuhTAa%n;(>Ew4kGvBJK2V$(#faU5Yn<3U&{Ogc=OrjuC~>!q zVk&V|5KKj<1da`7BMk@_ph)B_0X^$%qyDNM9!$oP-%F$GY9wC_) zp*>i}&cwZ+Th)%D1T>^X3BA|^dz5cOB-fZ~HIM5?lO6?>PVfkIhBh_i zyXpmdB67DJ@5cmAiqd_Pu}y3`Pb6VBVSy1^>eI*bu#RZ1w3n7HP>qB8l}r4;8(4Ad zwMK}Qor}wgJhQ}ky&dADEsjWoj21&yb2uDyJ2qb2iiwjP7Vs$7 z0Fwj{i&g`-y}oI=`?;i^g|khFGN64EOgk}D^?JmaNw)bq0y_(Deh(%nn7rj5^VzT7 z-_R_EWbv#0@~+oJWN+&4Y81Rds_4Gh{E18f{Vv-=zZ?5)#Sx50T@wPGXkDqX@kHu2 z;93Om=qZQHZrpGylgzO zG)$AAFUIg97l%>be(vtyZ>>{gzzpEahy7yDP2=g|#B z@$T?EatS8dT2p{v0hSh_gp`F1f|vA6ctT?PYm5`Gc!YX zM9xk_*T}3o6@Bzh5_bKBb3nT?wtIfpYGxmrHnFrMxT%|xW5_|qdg(b`VM9A7SXB^Q zFI5X}k~Vr)zas zW%oShR&N|=`>~dE`K$L?(R387`^X`v^YnhW^d_r=_xN&h zjv5^efVzC7J)obVS3rmXz z42`bJfZp-_IWjvoX=F)T{TolegLeJx^j0Nx#f)v{9L?FmKPTPBI*HWEde? z@4?xj+ThzEH=WDPkc3!kNfQz8k!7<@^3v7E-GKLNl4&v#^wrhELQ1kcEEy%4UVO}f zLB>u)C+^xT*9rR3OvF{28P`+4Tt1P9@tDrTD&uDoYEeh74z$0VM_cvv(aI3DN25%@ZZoZONiIAouqA>ynb75P)nJ^*vj07SWGNP}}|y*P67 zT_RVtMMYI0H6 zkLdwj!VEV*4qv>}Nwcc3M~^PDq# z*%85;+L9TwO_ob@Z3TeHM07M`nmgU;+SFi}I&xQ>tY6Bbcn*>KS9;()_2>R?gLsT2 zf?>8)EGF_%6%q}zut+ul-#~`{6BO;o-ZXWgYelMOgB>fpQBK^1Lwq+SBIN~DMo&#q>^I@0?NmK%Wv-1q9QQ;@w**M{7Niwoj3#4J_ke2 zYx*1VJ#P~To&VvbWC54Evo$%^iZ7N^tj6ZQxiwk0qE(bbkP7&&lTL$Mfrsmh6*QNE znEvCW_F#tkuPa1FiK=9)FMcWYXI?QcE-zJ8FT?ZY9xqltc`#Z+cXx}PfCf%EI8<0= z?Syq~q_I>LNfbC*S&y(-C?d+td2|x9Ts!wR{RazUK0v3jP#uC3Lih9BS+liS{rkT% zO}BE=ed!xjuZ=-GzC)E)NAA@>-j?O(srCKezkoT26o@hEubyX+M6WCa?r9+y z`;Sl~Q9|m8ToGN7UWi-EdlOLc27d$Ph?z`q=~k>eRYg2I_Ol1hoZIvz127H(-4k(r zRw6b9yMpC=gXJA4;NWYszWgwHRKfD@pdXbN+*tPE-B(Tixrov<$b?G`drYb$2cHRQ ztocDP#%^`Wpga5wvV4O-_jg2xJ7F&ju+`8P1#5RQ6$GC3uni|a{tk7qybg5UAjVz8 z)vxFZi&1=k31!Jqhml}VCJXptbok|DYK@0w$(1JM=lNu!WLwlHrBt<$QCS3i%FgBE z)r~q=(bWd&a0xu_CAaCx`e}*U_n*XL-tI3!4>MNCM3d?6i0sBWS>^_eh3+3kWlTt` zl{iaqy_n~_DKNbn_!66MrdYOuXXdi7=OWi(sU;r6Ae)W8w3;dB%dZ2BXzmW1jk{G~ zyiORn+qGGeMF8O0j9!O4f6F>ZW`2#H#Q#l`;#e%(ypC`eAsj^I|#-^Y|V7S{D6V zWo}13^+Kq;(*=jy6IjQyv6Iso>Uky*(JqYJG3qz1o@b{|Nbs#JRnPsJQPS>HJB$yR zt=h654I>Ltp&)MDza(CqnrYTRyp3B%TBWL-;`DMt{Te>9{6GvYaFEnvPvlDKZKrV-ygUNIDrd!HlXPTVZF`iH13q_Ph4t;YM20@-j1 z`p|_IY6CZJ9{l{CnCACl;+IACaPULf4m*KXU#mRt5Iho2v*3}qbthHdb=8D#;&>wQ z#tQxV;Tg)0)338W6+@5uKNYF(Yvo%XCKRVx?JmKw1)wTmj`P7JXWH(Ya=285d-1EvP(mY?UkwY^z9W>GqA62#)Jzk=t?`i4f0@;qh0#@E#2QJ z7Yc%rKqZN#ii-8Orxws}bg2*9JhgQ^4ea-1`n{lnS&a)A^d2j`3p*k4sboDkauw)C z6cKN5{cXvYSuYjg&t1IcSg&RE^OG+Z-^D$ViIu5~Dy9Mf4KAned_6Ys%k1CZ=&`ZB z`an&QylE<9M5pLs>SFvNS$}nyQix}!$vFye%)sHoZ3v5(KHLPEZ3Q>#xT>u z=wo}s?2%Vwf0No4a*nB=Kk|yjOJWdAa8;tA@8$^C8yYqj6}Lsj0{GK6np^I^LH<#p zGQ0PKW#{Qpb?^mxkh+K|nuy^vUhW;+882oqlx5q}mdI$mq%0BOt~k-0KV*Xa_MBd8 zNVQ{?J7p6K3=u{~BhqE4Go`ebO)Q0$Sew|N>05!NSB0jpAFlr0%JvWZTK1tUOVnmq)4u{-Lmu!(0UbSstkm6R4u2nT&CsXyhIXk{`lSBs z?k}O8e;v368t*C%oRV$5TVm29z5H4|vKpZl$C~;jq78GtxvdxTjH=#tC>TAjX&4wQ zdTW4a2djW%>TI}e%7of>PwgcVw;)}tPUxKs6|{h0U)x~6e;Y4+H zyaZLb5b@kDS+!Mcw^kwxzsq#gZo=wpL9?;Fi+#)6wlqG zGe6J)wA?xHj8X5BwFynG{!>576-U=ylm($;$0}Bf`3~HChInMn{SSQT&mf`FP8L?gC1gb&Ig*Fpdu|?=n|WlB z$2cnkDH@-)4l6x5EkTrVd1|qm*TuYq1^=<+B72=lA~dQ{IeFZrK^n&!zw7HQ>Tk<1u>k?mb@aN;?$yI6h76b@_|1_JkE?O#<_ zb=n9%Q0z-p*_v*;Bmbp_G1QS`W(_M7m%tc~R4>7cnQKXfcnnVInk&p%-;X?X*Yc1X z?Yd5W8Y5%WkN7Uj@4@~guYj+{+KrRXXksJ4yBvh@iIlKe?14+w9Yja#9V6%8Nd{Zo zp*ilrDopoXm3d{ryF`X)V{V>8bA~a>bDT?X(g{{jpu%Na5=@H0KWr2R5DWNcLTVE!TAdkOYuP zd+yfjI(;c`Fa*)1_TGI)`1Zvy>EiR%O;_&b|a)Rr5 zF{x4Hr`ou)SY=~IhRHJ5Xx%Ksl|xp$YNC>GY4S$-5z~o6{3c9(RZkr;$uCxYhP~N6~k-&=!1`7ppP4Uv$Xam6Ht1W*DbJFc#^o#CP6CJV> zdhbVA%#4X5=L$~g0e)WdN4V+v34sW#xBun zX$WU`PHXf#U$I9<^V~D7lV?X{FwcF{P&53RfqTVSpZ^tzrIpEGo0R1MSdjl^!;ik$ zbEu)2mutyXR3+GO7Ls#Lw4wxUS0+c$r_%2CyVMIlfHI z?_8F|w9#fh2zu0|`6@E1A!}ANUo~vWZk$%_U+vkjMOdUmNolAhkU}l}$SCjhHZRM# z>_>-bLxHRNgHI8iOJ9+{Q0ioH*j|!yF;JI2*7Tos=}0m;*49W{5~$Jfhv@v0t6MA zOkTer`K)x+q+>N;janeGTV{K3rjuNQLjv2z6(SZ^4_Pr%)b?jh**Cex$WUOqV(!>{ zR|mS0>)es;G-hWz$5*em*``;I!#35kZ(4SR;mocGbgr%l^sNrvmF@B;cCAkn`szM7 zEL&ZT@sE--8?|o^-IncC2XRoo;As;2=98PdqGnq5Y5;-vU7?`c3CP&JHC(4G~FMb+W&_a z!M~$VJas=ILBw{{vx*L^@JtxqLo4`g<9}a;XW6bv6`oa%6`tD?(|;o$PVTDk?Ai8P znRveW)1&m~%Bl*_(QVVOM*O!rt-|x({A}kz@@lT|Tp4{R`^|26OGL}T+p^up-aykZ z9$fr)1{s4C>JC??qsMA+bQ>jiRCt=gNz=theC7D*S0j;M{fg9~lgfSVSw!XH#T-n` zq+*oTbiR#;B%+-!(TKvd&{^xLTwL;IUNvOoxQI24)~u$`O^qOC`IEJ?fygLkNuIpW zu!#FD8%0)dJ!>~UG+N)V-HG->SkQSgY4#}ac=$;p@lcJ_9&x{8V~iq++J^+HMDNe! zD4o@gO1MhS3WpCR;zNOj&ua>=oeuLkH7ks0uG1dwN=s`J9|>Q%9a{sRC8UMZT9>4? zEKZ9na|lQadq0~+Nhuz{0Y5@wb<$`FAjeW3S3EP z%^_Q($Hr=Iw2{$?@aKbTK9l0jp_oX`hSD}hjP|rd+#AgavQgULc^xDRevPK@Zp}L; zy#G6TDl(^-irn)y(F`u@+Pj!PrbCUiHVI55P)t(f8HWi8GEDl#$xB+e_oFdUoDfhs z>cUK{NNcS~YpO_VUQ)pni)jlnPH*Ze0Yxw(tOjRoLm(O!cLbseW!?^DBEe5C!yc`w z^XN(}J4#?0?*L>U<6+aKl5#W>=CPpW- z73v;7WKV0S_YVmgm-%Ej=W$wl_|V|ACRqhBd3X``t)&8NBXaTAxy=&HlexwbaTHVF7N#q>(TH7HP>uk0 zfMdNq+$E^U*c!ICtK8$TICHXEvfhIPG5pL`=`RAsv5PEj=_~71);F&(BJ#D1$S@mO zEmYXiSecx*3$OQPwYf_O=QhF62B%?-qH7@!-0r0D9jilSZ>RO%d(pWlxat_3jj))}{pO&$ta8X?gdC$dpJQs%t}B^L#Cp z+w}vLDJANk%?~UM`Bu-jvubs9%mZeD)Ji;H-qG&?GlcxjL^hfm_khV+tCv{UP;`kd z1H7JWH8EDa?|fYFmWn&hPPt+w2FJv`YWy5>>f>lq4p{C5A?AR7E>`EsGuYKBmG-Xt zk#j>F?{14mGcSsWC(CG=v?9Xb$}B1Q4Hkwz#xIbuF$+J?4c$KfAwj`$(U3v+dBQpo zsnLA^wA8dtgkOHamJ~E)WK4#Rk$RT(v(6DH{XLq_;)$-f=L)|*!7{(L9`DIxrfBA5 z#5@hp%93n5Vy=l7?=fAobv7p1+F`Dmbs3Y^V`qrdE&!SWc8*}!V-LfAu?)R*JVq5K z*-k`e(KSeTl--2@KczMgG7}nO6MX}q!{iv+=(RHPS7XKnlUdIw2Qdyicrjb+aslr@mMj5 zJvWSYjhUYJ_$lf-H2c5!sa-xDD0RjYZPV6#2gG zbV%8;T@CyP=u2{A>eO1*5D==6_ny7TB;zp_(g?rpM&zVF38|Hj{^8jDM;SUOwbR6 zrFwN(hjjY*5*@^OYJJx*lI{fS9ECsuRte$mcPoFmUS=GO;S^8$iytn*s*Gn?z)X+* zA07!Xm{k65eOGT%S#$dwt|i7{h}X7AZ|8oOw$LS0cm^?;=aA%M6hvmDpUJl7QHaIJZ|*vFD&R z${Eb|l|RzA!!4LpVjiqW3b>1a+m$tSH>)dd2O%w>6Xc3+ErP^gD@xiTE3?}+d@3=J z3292geJt`yDvK&_Tyvd{T3)YgU9+_ae9~0fD{D!km1Pw-8hMpBD(fkWCl!@gcJYqE zp|Yr|T_!Rk9x?<^-;TfUE-6ICxw;1a2D|Rw#QZz@f(Q7u#2~|d->#lxY1E^U!R%a} zWLa&Ie^fsmrgZb$wA)YP=ydvY?!5Nqh7L&u8>d2?+;b+m-#`6KQ)ia+rKVHTvW?S8 z#$ELLSTqb;@g zGO<&PKsyorY=5Z|<6Tm{k(yoQk0q-ZF6R3}Np%J2N@IzbB+-ex_EkJ|b8Q#>K3tN5 z-vGU(pg5tGa#iMspxhF^e>RoP%6ndV>~lk%n5%0ec&-#`Eq$XQ3;3wc@hu*Sa1)#k@RUoS&vpdq1I>pFd!+HTbiboH9b zdKyV8f3L1ADZto;`%v`1{F5&wVSKZwOm(s-f#nJ7JuUdgT~cLUgG`yfAjk|ito1MX z^R_J0YLgOh^6yx~3Wg06L!2x?7FgSEEp1zTqb+E&Wj0RNT%7WcT9Yx0Lud&MW0uYG zz^8h_C=pC$rj;&ElS_EBn?EdPJz;#4={uvt@gAE(8q|%I_?cY7$D}@H=R}sf{G%*a ze0%i|JiR}YcSd8zgD5{kZ!u$gKI8mfd+6I3U*vP=*C7doRGZu2;tkC~W6%5cZW3*w}u`vO-WnOIkhFh|sRO zO4_h@V7}3uzRZh{gseqR#7xUdYZ8s_cArr)9R}&BA^oCje#pM zw}0g`=JUV(NmC(pg_TAqt=j%J)h^%I-FESE-Xp;(Kx1dU2bJ9~-)O4u>be8MVYxNc zk#c|l)m+^Xh~oos>bk)bKpsd`8%7>j#9B)V@&8Uz+}w>brrh82VdR z`)}$?w}{5Rd@g;c%+QAFo{dY&u+C-TA$syRFzmbF0H7o|-PB58kg9k?=Sp2#;+Of(!0(FhV46mZNda4s$$!6KivNXEV zAaT^OPGh`A*WU>Zh>K2FeFF;*LNDcTt zyZCem;)GhVZL7}V3qCP1+g2GyHnQeWA&>^y$HY`uqKJ8etJ>x645Xc|P&hWbisYj- zT)ju@*hhKGEB4_h3w|p5~n@YQ-*rhnNij#qZ<3qlD#9cpbFcz)?$UQ z*@S}GX3J9XNaRl5ouv@5nGqxyuUll?0-_x6^3AKld44Fbc23N%hkF$6fSo^B?!Xw@$T1PwP5j zqrU24()^n5@=Hytr|rR}f0T5^Fw2N>lU6L54^?3$WNw6UB;Pjelc@_l`<(d3IhQca zS6jx!=a3!qbT1vE1zJ* zL8BEK62^yZGQAmgKktf9DAPW=(@OA3Wi#4BeH-2i;kQtSVJg4I#PpwQ6zY_%2)3Uz zG2&U4rEx8^&6LugR1kp>I4QzxRs_osgH?Dwnm*E@KT;x^7UF9?#^K%hdJe=RynfZe z_Lzs-qbo|$NT?qNOVMeN&m?1lIThkmXFtg}5Z)7JSQ~(`!x(fCeKgn}_9;B&Bdyeb z*HSC!-Siv*3)Ay&^}=TD`YsPcr4qe#mc%GW+L-)Xk8W?oX~hG8P$^U+on>b1$^w47 zy%+%xOR&`HEz}X|us&fGd>C3DT!6hHR2m~bX^3J^8ob$)1_wN8h{r?v${(w`p;wyQ zqw%88z8GE?*2pE=g$32QH|NglDR8mOQ^vaNF)>L=HIiMG!^0J*6C)1B8`}ah(9x<&)**M&Je$4`Vv~1-!?V`v3H6mf z=KV_Br7dXV@$7op@Vc4T`K}#ku)@O?=mWiwEtGz^-}DI@Y>h3x=nE6|L)G~OaxA_W ze6nD|gNLE@XkB=IFByK`_%QSVcA~7;ThfEaT=>rafSpun8AJv4X2+0OPcuKdblTUM zdpxVI7>>7-u!=-#TnV!d&d~3)wR{KYUxtsz%Z%BK`xEVuH63r}ilZ~xbXvT#L1tw% z7Bn13!8(fm;8BM66oRqIG5nJbL!=_S0u2AMFzj@SPZLY^^fu37EHo{$ipEF3P4u)N z{_yLd^TW(cXw^HcI2@Q4I2iePE}2pcJV zsV{Jm{S9cF^qmH7$ff>906cVz4_6(#S(hkb_?lPv!C_#Ag# zTY;#<=hf*=Z0N!c4;?%#^KR5UlW=ZyKCGf;`3q$DNC;&RE4zVVzmn!VmC;f@G#0-F z(;V|-V-aLoX<8W_fp;WONT7@#eNC1H%IH!-X{sC3Abgr*L13&Hg>tDjt&WZ`et#D4 zCE|r_T0e)a?Kzr#Qf`*`=)6UK|EJ`mFIxBijeKV0dqh4wEYI)%6Zs@~bkzTw0?C1A zKU2RjrO!!t(PgC%{j|f6!8xxz|C~!!VA1axI$1kXGq(7a68(s1bjZ3Ndv__2@K3(l zP#*N%JATe*aOmBou1kSM-y`f>6w`c6&6nZT6!DgT7Kzak{7@OYwi%rHRX|S5uvKp86XWVLq~@9k zqaHS4cGSmc*U;4{52hWL6T<+p5tW#Lb_)Fkz7!1IlLCz6&eXg@`7)sD*rZ&_%2Ox0!y zJDIvc21r@g7mVr(esj~FVA<|_1a9$5TQvUzHAc^BFdu!krwSkdIeToYeOSmID|(AQih@ z%%{^7L(S2ie)u^Pn^a&zVS-hx(_me~b$(ij?Y^?S8@!GnQcu1(tOwz@&ehw}hja38 ztXh$Wnj$W;ul$jw#B@4sSYXYHK-7!;c{gZb(26_`*Pd4UkwaW)!Q%ow0}S&sEw$Yj zXlJ`G#v;GS-n1AmN_M9O-#TpLkZDyAW@&m>^*GZyD8I;AburV(f5706`OSKooQoCP z$*}9sZV^5f|hBGwBP_oGM-Ox#`*AJDhi!OK`vL~ zMX(Sor$l3?Zw@F60-TDCy&mD4;1c0IAuLZ#Tt?SME`}bXVCMq=FzA4NRVfKP*>?wmr z)kqsvV^1QZ()PS+Dj=ghGOG`_zmAq=MK{Ze%Vmb1vv2Rq3ouC>iQ;j_o;>fFp zSJLR5Hh<90ScAx$Hhl(FHTQ8qR_ENuvMdYR_m5nxDJj6i>)ac?E`Ezs?Qx-`dHAmK zi$9dm27VN76vD@?2zRm^T$+Ew*0i{LS=-{6+XpJ1;)A~ew~ff%3ND?L+qflfety{F zdz1NiJJ9T!jZ<_9ZyBn`4O(Ti7 zQDstIu{r=ZF%=h$9!Cb_+Z^Pl`{KDBFhIA1Q4A~5EQncFQqjW)6XG&5^X2k(Lliej zSVCaC=y$NO=xOd;+b<^AV4cXfmTmE*BmL@qTirFzw#&8scy7h@J%_~}7i$JT_PFq~ zZH8@8XDPp9MBUsBz#p0sl>rwRR1Qn(4Z2N^RK1m;fZ1l3>jA^KYNJo%glC3gf zczwW%aNl~{pkl*aWKdX-&fXUfr+zAeJe(l!0Wh&gFA8ty`>VlD2o1njn~}#Ad~QL1 z$M)bA(<60Xq4IbZTK4SzZah1BREb>xUJ14N9n=YlPa8e0RKyzGCn%_~e+jzFoPmv7 z(9_CkZAS~8p*frJazF`vPeO0!p*8E4TC0Qhc+FXorjAJKs%#Gyn;yaQrK?!>|X(@@v8ViJ~5d?%gQwxYoL@Uy2+ z7h;jeBac(2^`?*W?>)<}f97${<9PlNGhA;Zk~~B2egyi91o&WW9@+SE4M*`R5T2~A z2zrLQ<)A0Z61@VuCH$cLPCsCAt^QklnFp-SU|j*r0<3d&tEbQ4qpt{hio{6zJA)?# zXlmmGbj!;giK!l# zbRPkx6ca&EbejQ6hKHqw_Jwp4f`&jh5}5nY+mfive~$kx4di|);qHGW;l727z(q73 zP6w9@w+?P6+(Edra6iDA?U!&4a6{ny;G*Dka4X@qz9z% z+8>l~J>gv7eBi?2royGeWy39oTLt$4+(Edn;p*Y6A(I1~3!EBmJX|u|Jh-KB>*037 z6~Y~dqr)BgkipS0zDEF$EA1H)ajk0r_b<>=w*aoISs*ucX8;%N6v)S;pW>JRZg*e2 zONa13JED@cvZRz$ZF*dqR+f<@(}UJ!X3WftOOvH!$@Cc+veb<9nefPxU&rRT>xM7?t=Ys-*YJ^s)?{HeHsLoRY?8EKADBlx1q;5|NPNWEfHt zWfYBgP0=WHLV8?$s+NjMK%ibL)23?Y024`~1Z`H9Ql`z!M0WjBQ--w2ONcK-lg&-h zC(9Bt($XNYY(T%%tO2a>7HP7ydc;ZBXJ(`dRm)V#g7ulHuEDZ+ZF1b46qJ+}mjgnU zl0GLcHHE6M2kTzAvOsR@paA5?aj_Ev>3)<;1>#PH(+hMi&r%}aGQWTfh5-+0rv|0LIDp7SOg@!o))kINcyY+ zl3wlr?SN*{jFtkiz@BpgIs!w0J%EV2PQ`Bed_{nP?U{(4}0AUB!i;|L`A{DA#{i9jdda)I6p z91OY!Naa2O%7C&dfxNLJ1n3M}2OI?40HjwJ3W3y)OMxALRX}Q=V!Jd7{3k$)Z$Fjk z%LPdCgaff#VPkx;y@~BfJl|qFNQVBYJ(@v(bUu=i9xo(tGiJocWoZ*hMEDaDwF#*} zU0hZ|Tq@&X?{D~tm@z}2oI(L0X3R*6%hHSfIobq$My3#r@<|nm88ftT@hKEPYi>%C zeg+vVM87-l*Xc7Ap5SF_v-FuM33>`Qq+__4nXXObL@o&^OV`c?aI!=UY2UMm`XkYNcm^RHUk~P7;fBJ|2Zhy0St;}#Fn85Pt+#G8B+P-T1+NONX^JHWHPzvoW^DTd3qs#jP{MmQ}j%~Bve!R z&kb%2XQDqpm)JQenR)|ipO})RON~p=rfJjlxP0iSe%fT&--ysWPLpnAO;R??v+#qAj#JJJhakM zlcrn56LtNkv11c+Fm*z6Pf1VFr=Zu*(`NEh9;&+-hB-`jioRL17GoezW8MC=h{ia7 zD-6}~4?6pcd|UKaeKJ2I6S}Q9{>b|Dks;g0@dzzpM%>)E6by5XJU@RmCyT;3APdoE zC1j@PShwb6LDbcQQ{%F-nuW;X^fKobVS$;MaXHYJ5H&0XT{ANwIj317gi?4$nvO?(sR->3|TUo%4X@%1u4;TTqjE5%%%l$ah#4z!RVQWnX4-| z7yfi$0+)dqtror{aN^<1Hzp0!D zM^}y3`SC1%el#pKD=-!3g>mR3?;Ho-uuQF%X9@Iht$t!$s-XohQsmKflH!eMY?8s5 zXq@Pjko9Fcua z^pojL^ppKf^pm+x^uN~3Plh{@PsTvePxe63Z-cU_Pg%jyxGj#>T5brJ$jeVQh0IV~ zUn7{201Vz7f~I;IGDhX9FZ4y>ET{4~yWfunv+j_N>2`m~3mae`EEj^gcuBe~APQTP=&3Xg#T>0ZblN+JF1Netw#@%2DwZ6K$ED~EGTV%Pm>;Ci@A zaMGE9Tr6B69G8qwlEKluAQ7m8D}?*IIYJ_0=y4_2W3G?}6tDLGbe=$SjMQf7XqMoP zdi-6vshFiCAXX~U&*NoC0f*)^i`U3HO;C1Nu4QuChD8c&1{jDr1?8JXg-$3r%i%9V#%a!($e3jXS2gh zNFb)AGtBhxcV%buHD~RFQnON7>gT7Wa>S9%74_9)Y|erXGf^g!BoVck`;TRzvd{>3s{ z)`N|=ftlK2Fr5eLQnCWaM2_Icaw*c%ZAx6GHj=k`V6H6zkNAIvG`>?fT_Xs?gGa~d z8dEpplX*ou2Ddj+8R5YrLJ*Z7>jQPVh>X;fgdE%z2p7R9ZDv|ZI_xkR>7%v!l7XlXn z7Y#@8W8sqFba2^li{X~Tt%utRw+(J5Tp`?PI6BXCRKQ;YXN0SVYk=d@pg%Y%oD5D5 z7XTLpmkgH;w;XN_+y=Of2c!evFw>9);{@{3Yt!Pj zG(SO}8RSF0B8&2G^aqZ{k|ns&qlYFY4$a~7NyOnI8;wIoo*W!pSeP;`O_`NNz0A%?a_*^L;Rt}A{RE}6*@{^rJESKg(VwwD@>E<`t={+JaEup7uO*}Ts$65Ce2JvnKe5#Ej>f`LS~lUFlTOd&b%p8u@*7*&%Q^!^1|592Gu#%vii%8yPiW;-u)9$xQ!$9{&Fd{d28GKN{u4 z@z41=VSgM2{~Ja?NnYb077G5OLma^f7fG7_OeFv8PfXvuKL4z~%~O!y@;T#wM|{IY zio1HT6g#Z(kaCPGg0(GD_{|jY<8tUvaOW^$);8TBpX}}uszTSBs*h0 zknT?#fMlEFUSexHEP;+5)%78jxZ(ugC4={W#TLY5|+6nYhU_an0V1M9x-~ixeAl*!E1Cs4< z4{$KB5a{M9$-rzN&6sn6 zF9DYVC1?Q4fhNH9KvUpWpc#ZI9{{arAp95718smdKzpDA z&v7{h^9z-XW~FcD}2)BzoU^MNYh8lVINa^eH4i0=b^5e%5IK?7}ok^tz7XrL2e2;?LTgPern zkdrV1{S;_6AN>^Q0Mr4QWrKqSfGihe`;6mJyw?un@5+hK?$yakLI>H0=^!gHL$a6< z&EnDX8#NbwL21gY7efsdeill+Jq~v;B;-Kc0vA7_}LSL;k=E8+Jh^u?sPq;HbMUJ@Kd{R z1sBZ}egphrumrL8L3}EU+6eih;HP%simN}xPlt5mr#S$%4_C|rh)->VWTyP7ow&kB zaj313pYo^nLS<1LYBN+{lAqd*D{4;pWI-dur@B!4afJlvR`65WC_XKTTvJ;V&lj~vSHvbcDclvY>HKE%^r+!ZHC%8`DvaS!1N8~fPyM3F&)OKtN&Q3Qr}5`Pl%LKc^Jg_nOZ|rQMrjjx znTO*{a_ALw9$8;teMwAB^`SmRXE_Ej#lA(k(AnkC!dNYXcr8*proP1Vp2q8R46h^B z4@Yq0_&lf%!F>B;_EIJXjklC@G~%#+6~yb2^%)kQ^%=%b=j$W(8PaKlaL$;-5#Tg$ zL#z+5e%rjA1@m=GrRqQel8yBfcD{pneKkLq&Et#p59Me7;&>Cvw*_|H3FF%-8%yxa z2W7B22l9QF)tTv@)j61N%UOcfsSeG{WAd>&h-F9cS`y0+=g$-?JCc`!l^rgWM{R(W z!O9*k^i9$k(=i)Qf&@9za6J=yfLKNde@PD;Q1`y(fk=;dV7Ap)Qeba5%Z1W&n?TBwON*L z2w$h>d9^$TX?(A0DdSkQT=CqF6#P`jiM+g77*&X3XHG0XMyLxrC)5{3ebE?CX(*&+ z8rBn;%t8El5OqOg4(n$ldHGqKD51?!>9`kYj1$iHeX;IzkIC|3Et%yriof?{aUz8N zO8ErioQY-Oex)((1itODv_Z|{M>OM)6V4^&!$u8OZX`dVFn^eEUMLPdn-*n@;N@?c z&rxq8J!SGp_rjz@x`%fGu75ROgJ_zy`P)Xb&VEI{`lf%7Ht8WMd%B`GGC~k`1X1FdQ`5Fvyl<35*8) z9xxGj2B-t>1kMMR0ha<_1Fiuc0B!~z1MURw1r`Fo1|9{L1IvMQZLb0r0gb?mK(bj` z0Uv-q59D6M=W+oyz$-v|;7Onp@N=LXSPb+7UIK;zw*sSpyMVF4Z-A-5*MZr<8sK8! zm%vrPv%n3&8^CSAYrwt0>%bylCGa%xIFM{meSsCAwLr2hk?pA#bSjW+QT>7Spp$`Q zd$R^U0UZt`ThkDr6*8pX}_kk|J-9R58jX5E}FMtuigFvzwk*#Vf z=%qliJ$Vx!G}(;E#%BZ6gQmFv*|vrPb3yBY0if-H%Rzq(To0sq4%r0T0k?u43nW{b zGjI>+S-@=2y?_Tn#{tQ9*dAC48nml;RsyA<7Xd91zXOnLWE!9&_{)GUz(@)Q-yP@!ItREJ@%sToK+goO z2kium0G$M!3S0>!o8VwzGUzm*9+(d#+nhfz7xce?5ujDT<)9Y>8<0*8Tn~C9a4T>w za1YP`JP4cslp7nfnEZf5Bw0g z6gUUC2DkwjhIHM4n?X;ZaL|2#J3%J`3xS7#rN9zk1#l102rL9P08are*9GE>0njJX zI{@uLPX*Gw{dYho&_{rNz^{N&zz=|_z&C->NY@>>81!4fRlsRLDeBD~#m^CBrh6+k zi%)1ae`g%_n~HGp{*i1Vu8@rKWOe{%C1UqqwBD5XG~b9vDq6wWl$O~FXl5eX3KDqz zP`R$q4xL+OH%R2K=WH%a>4{I}vb8VFPro9cR`xdeX>4G&3tEFoJ&fi(bZ<739|zey zERG*Tm_MGEgZY`YOZ1aW%+KUw{uI7!=AXr%1LjX}mXD5a2aL}wHOx=zal|}X8)E!< z{JCfIHabJ%T#Z(Tiv9%t`p4qXn%5?NQ+!(OD)QOdA{L+No%v_-I%WQ3{+uy?8h>42 z{&Zfa%+D-LqM!6G`kTtt@oj?f=?+nhV`#>oBj}CpF|~r9?$0TeXxB*L>&|RL%wovw z3(QK!?opU!j``X768$tEV1D`){i*!9X8bgMZpiM{S-H$cz}haeJ+XCF%$6bY>AsHI zG{!6B?8^U=pX6s2OlE(H=W(ObpJ^-OU1&;7SKGL=;q<18CE)rPugjs$sS3o z$0W7tYaM@%-blfldcO2e2wdCHw1ey!s3ikQ$p5{j{yqxsf zj9qd-41k-A~`l?xp@=BYor?M{WAkk~6bx4ko$x@*QGo5<0nG!-W?n zjyzIwwGAYFb;vf$;7_;Dcj&z`;Or|uw>^7w@qo5<^GnwB+clyiQU^FxUya&y`fyxK z)s7ugPuPT*|1z`7!Smxk-uK(U6|csw8N`>-+vb%oyKY_i@x+fd4YyEyI%-B``SZ=y`pz*$?LO#nC$(~r z^x`e#CtcEWO5E7=ltC}rJANBsHrTUz=#K*;65f2F?1L`1N3L`pV%aq#eS|}LH_~>1 zd;fr4W)Yb^A74JdX5g1+rX;N!qS|t8!LQn#k=N(Gy+yVs^6}y0JNm5|HTpXo2>27 zW5vvpiLzd6lm!Z_w=Gk2UmeoUk<}gT|Mo`X%+Bdnoi`4?@BTukabbtfZn+sc{w11; zOTWxs^T?z~-+ehZt$vT;__dGh_E&!UO{T3je3bLtE;SF+j;szIcdl&hfC)Rk{d&Ny zZ5uxL#Ge!yFtYs4gZia?Upkg%9i3rzIJjh*YeSf2haVkdHvj5e|KN<~{UO~pzwq_J zmqSt(NYWomH%@fOF>HO6<8FMq-_Njg(d%6_XJ#w+F1!BnJC?&jM>id5;Tgcbj)^6A-VOH+I_AvmSxpj!jFm?S0>4;?0Sjiu=8BrOtVA-MWi&RU>-t zcI`D>=Cf?o_V#OHF2ih{%ZjzRfDpV-*%r} zdFf6Iz=RQt<>-&JVU5+-qW+Sbialb=qNxz_i$7LH=x6S%^{xkC> zuEBd!41--=7Ek&>`ctoRE@0k?oAHIlSxYOVH`kvjJvL#Pbix-g<(Cfq7VWmE(6n1< zxT$a1=x#f?W4*pD3eR~rw@h{3^^@BTebT1Cwan+mif%b)Gv^%7-n9Q_&KT1*wfxY5 zE$we#nwpxip!V(WD^-u*&4`~n&a>dSF=p`f=<9yxqMr@x(|P`+Z83)L`$x{4+cja| zt-2Z3zkiqFYxMBiY`*Q~{caC~ZF}{;7CgCP-7npDZ0V*+HiH5apDs8w)U0gOp1Z%? zxH{(DSF^5J)o%E4?96tXI)C)_=bt}pzs@IX^^p;Er{5SnW39%=_Tgu%Wp>`#=f4R$ zUwplfy7Q!OK7M7!&0ppgoc#X1DdUHl`j7oS$Qt=_(&`7}twN{W2->@Qi05bTWxRJr zlRnRR@1wcJqsmJ!%&ckHwtJ?kY}aQKOHM&?8@Q!@wR9hk?)Tay={>VUnThr`#fq1I+mUTI@Z)h$eBY?+ z*I7O|yls2acU68*oew-&IyXA_ox-iP{#i%v51YR}UjM3X?{3$2fAQXsPwgVMuh`-H zLy+gXH$M928_Cm)KVQf-$=U3U+$C>sh`6__>V(TKe;@DB$Fs_3ru|^C?d@?5_f3y( zxiNmTvaj^YM_Efk4peqLXKMel?rmk&c;om_Z;tt`Yn!1Tj6QVZ$`0$XcjK48cxV6F z-T_IMxctuV-ZFf5`u@P7i}OhQ+OBgGfBWU)3;uI9-yUkWASwKT$B=u4Kd)?O+bLyD zc-A)C{;>g_B!1RQUpU>{^?mQ3%C5e$*X_%o!0^XkrvX4Cmy1`p@(o7X$*7oj{GEYa9$0He{Cw_%_vgOX_t4fwQ?{HQ znkn^qDP-fJ!cIrFjd2ez+vV}j!2?fs&T;P@KE(Y@C-vUdPj!mQsb4O6!!GD|httCv zs(o%Ai0^ej4{}Rl=ZyX8qT^eOVW`uHSb@_8Z#T^>*peD|S|=!Y!%`%d!^Si~Z)x z$>W2+NwM&LxzOpZ#p_9R=_9&jTwC$FVUd2i;;r;!Zu?d#js-cFuFTo(biF;Dq{P7D zx0YUh(Sv*;N_VmX~bedipFQ&N~ZR{6x%~+E%{f5iR#4z7?*LJ9}^^ErGx_8aP zumN99>OX(T)dIujRk^B8UtDut6?QIdp;@idn-P4OCOCzrnE#kraT2q3oW#5%C$X^S zOe}hGCT;q0CfLQ;)Y6MHwNi7YSgvAbJ)SdbI}Iz9QaE!P183fD5og|h6=!a{iLtOY}@ryZk@-3Ad z;ck8DjXc6}^hzF(-o|5mVSa{CE>{Xd7(;V;1152Cq-M-?qkLK(^<-+rQLpi!0TPFZ zjB5I&?Yy6J{Sz3}qV`fgsrC#%riI_?q zz_j|)ODs?-#93d&JnI7((uV2mK$~i8S0uD9V=fn$l|r{HTwFp1e`AyNLMFSR;gg6G zvGgr}Ypu7L&ewE*G|tt>oOVIG{>8>g1sZetZ%?ge`}m_nT;Hu*qv>&DwN3UDUxcey z4!Qc4#zB|<&iU^6ltWR>ql#UdHSc2kf^mboBRt{wqhH_CXnx7N7q75H_)jrCyMCy- z7IjYJ@D;w2&Ydt>rQWXj*TwSENf)qtTR@4chx;x~uaL@yYx9tP^Vhl#&U-X-B0hF5 z_!)HUy*s@&e4@EDA+o2Y2J#hYfA8M;GtJtW%gu7X#kWvmkL3<{eXr){_v6p(Jc^y! za&J%1GXFxeX~DaF&y{pVej``RoxM*pFMV@Iqp2g(*N$oXb)jZa_?Xi-In*b>sn1@I z0~)VMGd*?p6iEMJ)E8^N)SMVI$7y=|f&N_0ZIk{#9MqgTHDuAi^L2jQ=G5Z7L5DQA zN3ZzV_9k|Li=Fj}`HI7u59jXN^8QNf5-0OJ_I6s4CiK@EKd#8bcXYYyJJs!qHM{Hc zPldkH)1NEXch(dZYc4%|{a&}W63}DKpN>1CDVpmXV72q9A6N6hQU2(NCNROF-HBi1 z{#--Nv?e1r7dLkEZZ$26Vd)UMrs(tuvoWy^}=n({Z-J#krc*AGuPQln)jG-sj$ z;mC&+VQc(2=K8ky7m)b<`|9|5KXThmW!UYas^|IRuOq#u85 zA9qTVwLLLBJ;}|hclYC>vpfc=IP+iNq^rFv+0Z`EA`63zAr+)*oEW$yPVb3zCPrB z%0@THZ&Ky*)>+NV_wrW#Qit$WYvx4vI;Y`Qb^W34<2ES&TCdzU&uNm^-G8(o3*RIu zw+fwNU9NelUu54Yv!QR}Z{E3K<(lIi_wRpw7TV*s-V@zkF4ye-`S60PageWYR*x5s zmuuXMsJ0yC5KNl7>wtfE#n#aAiI!hOJ zMt&VWh>yRZ>DbL?h{K+a{#-?H(F^M@XmY&Y*_q;t9SU>X&MCfpL37yB_R#eolxPoM ze)yTqMU8vK7v0``4gL9f<9oB~13xy56RsBm)*G+#Bb$gdxr`REs28I}+LyfpI*e= z1B@1t%V)HR4PzKBVs=*{y@0y!F0lFtSo0~PMXXrJXc5E4Fj~aI9*h=oGukJ$6A_n| zFj_?2I!22aox*4l3pI=uadSsTi^$zB=kph_;s~Qf^m&ufB1*FuEuwA&qeU$0&u9_X zbBq?TW-rDA93tjsFj_>}AV!N=RC|_>FJkN_MvKTzX0(W_x-(it`PXOo^dc6$!Dta9 zVi+xAjRT`ajQ#F3pI*fJt&A2?m&RxjxuJ{}G566aKD~%s5u+QCtI^m&AM|y~9zahZ zS+eK@mh_C6K6%*-sN2P!v1bE&gU$ugZ4G@VlGZxVXCiHZOTnjE%_<<-LFucJ^elHh zXfi8q0Lp-yfn*om3WT+d+Xlj7p}IagXnViKiEO=MHa83`<4MskiW1GBLtM4<4bOd&i+&dtbigG=XTU{V*4 zuo>yvY<*l3c3Y*G;!*!n%Q+&KD~3SpW8t4c;l%6aQWi@{`cKA-`PvtxnAU z!^5ly&-_1T>!!lSwVDY_{tq+#hsn%Nw<_;%(n$y6S-*=A35_n_9ed+rJ5jw;8h<{y z2zZ)-!dLwMs^Ec1YgE{@GKkCMnuEQEp8bPJ3*r_ zw&d~oEpNe#;`3VtUXv_Qe7w!zZJq}CutAAF4*eT#i!YO>owBkSn{RW}_E#o=*flXX+E2Mg;QZ>}|oD%$HNxoEOF79c;m4@ruB!!igKg7wnWxb>8rWgkM)B zoL}m?+)?moJQH{x#H#?WSv&9~9(_CDJ_aZuo`QH>k%ZfWN)8d~wx?9W`N4QFB%bYS z!pCX$LtjrK^0a_NpXe6AU4x@T46kS&-aUZ33ioH>W`hH`j&RMxOPi%9eg}^Lg2w#u zxjtSFvAl54zYd?_)iNC432l+SuvK_-`G-vm;3mS+A(q!XocK8t0tgzzTj#$$=C8wD zr~GyJg~=_$o0q?3MgaE#937&3t@Se|wPkqo^px&OtMI+8^pl^~GJWg%8Fhaho|5&~ z;ZL$#hPRgQ=z_lvzrOIV!-xJ&_~KUKt?Rexoxjfi&YLa6kG9g^gdHuzTc4jrw+?^(aLe?q<&P|F8Qwbmu~RL>Tc_WCp=EgU z^S{snYxdyi5Zia_@xjNkWq9lSZERbHH_t!C4{P$^>@YrxM+p3W<0SkzD)JT`Ksc_i z&pZC}U7P=&@7nB=L?&xfQ$w@02?o73G zvE_ZLmTer)X($%$85^9DsBPRg_MF*xZI%JM>+w6G!}8D1h!?Wt+|027H%XkC#_zk=6f~Dg8=aA8Nagnn9D@z~kk=(4_r`c=usbBQ(RVO* z@6Slp;;X^PQ6T8UG^~o5+$ZJ}(%Hv&5<{~Su+bTI`GdOnIra-A#h(T{kR-u|%uIZo zK&6*Q*(qX%KVfauGw+Ir2XyXkt zXKFJ=NiOnv=;QF=1s!WDFA|4onkfr<9u+!%OsLp=xXWha^{Erm=VE_B&XaW2tgU!T zLa83DHcQ6}6w`2R+#Ky6_?;vn{D(YR2gEn4L94L9^u$PAN;1>qR=9#Q-b@Voi;5uOr{4f1oiPpGzZngSCOadL3acEU6~BM$w752wz=C7O+o zOUXjV650vJU1nNK6gmvo#bOe6hv!=+7bj`Hk@CFO+T?SrY}EttK8Yz#k&bO!AI|%E zVX=<6#ZH)z=5y2VroAmekE0U!GmozaaM_Y!I4yi{<`(k)VJX-piNg7kU*&mYaPvc~ zN!+Vw6VOmfBHxSgr3mhGk}WVeg5%zzoX3WaCjU`h;s|OY+|Qw?#56)sU4;)eSNvC22Epj!h|+Fe;2S=ye7? z)$tiSEBwHL4xpu-liBFSbTyVzkv9@wsKB12{YV<3BQjE`(SyZ}&!3Mn~freRD(DN>)|Ka_ARs)}OI~+3R zR=}5-p5iOzjn9-D>r4Db0v?(9>tqsp?jeyqm;JX)6Qq0oEbgz9QaarB|D!{UNA^Cl zA^h3Vy1u!bwKYAv7Y{K!Ovm2)BYtz)oBPEygbl@k&B^~VEoLS=(Ufm#CdPU_+^i;^ z7*9kWlH&+__fh2idr~X!k!Y>A$zUKWzq5R_>oR z1KGbblmwJ5VamvH!(cUw} zGtzUKr`B_?XOZW5&nuoao=-g6dUf_1?6t*fhu0TgUwM^#UH7W>`oXK->!H^ZFH?oJ zqJzR-(M!=^;i~Xb_$xvc;}nw>GZb1yh9XC?O!21TBgLnRuNAe59~AY9hl(c(6K^YT zsdrcJp5FbuUA#TKRo=ngqr4}2Pw|fPp6zY$Uh2KV`z`NIK7Ky$`JDCn&d2C;*QdR2 zCtsQGWZyjHE@h3wi-E!O(xfQs*>9)n~sM{&Gt8Py2 z-tH6J6Wlv^hIx+ljPi{3oa!0t`Gx0ip4ghu%hJon>wWJ+Z@G`kx5W36?=#;H%AU#q z<%i0ls>`Yys$cyi{)7GH{_+0#{;U1p@c-2Rs{fDv)@nO-PqmABxH?*$sLoYyR_|7S zuKrSeQEjHN*9_EnX+ktpHA^(>HAR|hni|bbl3R{vZ~#u;PTob{T`rTW^( z@;UNc`EvPc`8xSt`62m9`8oL|`7d&Fw1UBIO1Ch#D7RR*bhm|Wue)t`JLC4PTZ5aq zdnfna?k?^@?i1Z-xT`#3JQjI;=27RF;q{8oYd&xKc=;|@ZdU%HTHu%Gx5RIm-wNn_ zt>2q|C_eztJprrS-f%nURs=1Tx}AoWCMePs-z$3h1}KwND)l(^Y;}%$iF&#g_R>wUocthbHNNS}0{188wS`1JD~AT-INI6QGt;|y{Q`RbDRJT?C^1JL;Qlw8vk1VJN^y+9o3`Mv8Yv+dZBu; z`c?H>^?T}K^;PvZ>ISuyroCo?<}D2ui?sx(Q(yTI`BRTOklEDB(<{kquGb>3PrWXC zReAm7)k`rRJ!psG6GgS+JH;;w3-7k*Gcxp;LEcJljdzH5ly{8xbnkrcP2Rh__j@1n zuJr!NyR%OqYO%=YEuZZ^hkQzWN_}qnSosd~o#i{v_a)!OzMFhMLOl+l4PN)X>)YV_ zyRV6|htfsqt@Kj{DrYFul{w0V%6#Qk~?@IYvc?sHXo!riCpqmP(YRxs9@bMJ-zd4YTZEgB zXHSf2eHAf^Sw4Gwy7;>Js(g2&ugaB?%6F9SD|aeCQ=U;)DQ_u%R{pMRr%F)0ttwG{ z>VMhaLET^NgSLE3eO7%zU7@a0f2+Qwu2-9CY%~KjQJRJ5qugdZqefX8d8+(%`E_}g z`(Teb9y@7<8V#b z4e^`qH`8ya-&=k={SNt+`+e*803)Nl{~&)q|1tit(E02B@B8obFZ1uCsiSiVVfBD~ zdAWR>o2|RAdy4xxcT1069vYmUQ@iG*r0e{k>s6$8dP}Kdpr6B`Hc0=R~_-+qCTa52puUjqcD;k*Hme^ zB6dCo%ZJNT$y(pQaq6);2rq~@@jdlT(?-!2%m0Bneu?LOlglR)>M_1-(J6d{xADm zsQqvS>Z6ILw6G{7TV*e0kn&aK1?7vXH*kK-Ro|!-7GtG09Qwsh){Z=$JZ3vyRI7 zf7&^p7uCu*j5{!q!9*_PA~k_rhH^2`Ip=-PIq%P-3keqk8A%*yE*RH^goKgMS`2^mFY6URuwY(KLQBu9@RKjZ`I5oN2Z zAcA+3q14*yy0P!jKzDwB+yFmikQTe>%Ys=nOJ*6bRRv3pt%)_Y&a9a=w-#22gh_i2#wJ=O;Cd} zngUy7K^A#hq-7ecK68V%(0pCmqkRzDh>qzL%r>KQy1-P1?T8(-<95O}Y-XqIjGeW8 zJCBJe+kst0Pd4n9ePDMnKYe>(k3e@*`^=u<`&if^C+tMPc5%$I;V>uVWSp$yJ5^Of zioj2K=m{+Xq;1{Ww;EQ{YFTY~sAC;kJ?jYhdu$D?p*4aor`9=ixqvd4R-P7ch7wLu z!8!JDk{a~irw!V~dD=Kp2WL8@13u&A}4&Y zEApa%{wRsEsGz0yL{-#89X@S{Ci1WiPU(m)61<0Q>x*MC5JNFSCXB^IOp)nlX!V)6 z5Oc8ilq*d04$tvjkWGnKFk3bBNRzjDhad7Iehk%5p!g}&zJSt8 zzAiRIRBVbZumS}uq@jBbnirsV1zOjja}yeOpzjg19YWU$G(Cr&m(X(^T1KJc7Br;L zFAeQ-(5(Q?D$uJ2t(wrOBM;?~JeEUwA}8`xp34h)DVHFQ4HZ?JV2*7?l~QT7qjG9j z6;w%8)E@k}ubQf@I%u{dB*PHQKT)UZTwS2!mTFyZ=&0V*TY6hlv|U>7=$ziw1zpk= z>;yHvubaB9JNi%`>0>=aj!g9Fis>%(5+t$#7T@%?K;sn2o%VLToVN=qFL@O&RQ>1s z3|N)bS%bCM0qY{Q`fLCK8?z}p!wxfN3l`#G9^o-;G6^&|<0+ouS?=>Z(zVP3C5%`%l|awg|; zAww#xBG|6tDglaO*s?Mzt9+GLMO9XTsv;K}s)fC)t9q)h25JP(n1YgLYOWTb#juWm zIN~~iZHMU;*g30xut!msb)c)dt{b|g4|G@ebRT&>(qlaZUC;C!bRF`-Uc`%eaWCN+ z$oQ0(@v_*C@?Oy^djWQ&y4S!qao}~mp4ayV-pCt+#?HJMSZv{il3`3>EEz{17)h2) zB{SGHeC&TkFl>;lChN%tIBjipudkcrHFAr*N&daJnyb$eS+UgG>i>WfbBeBAm{BWc zG4ySK#JrP}Q}jg)9g#yn1n7i5dSF3fNPQm(*+RNck?1j`xR2y+A+4uK=$J#1%RacL z>9m|X*Ak`?%M6_qm~~Kb7n|3KIR+cg@vd=q%S~Y8HeBj5SGg%{5n1dJJ~%UvEGi<6 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/ghc-pkg-ghc-7.10.shim b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/ghc-pkg-ghc-7.10.shim new file mode 100644 index 00000000000..9e85ac7f0fb --- /dev/null +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/ghc-pkg-ghc-7.10.shim @@ -0,0 +1,2 @@ +path = "FINDSH\sh.exe" +args = "ghc-pkg-ghc-7.10" diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/setup.test.hs b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/setup.test.hs index 0b0a37413be..e60d3685863 100644 --- a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/setup.test.hs +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/setup.test.hs @@ -1,9 +1,19 @@ import Test.Cabal.Prelude +import System.Directory -main = setupAndCabalTest $ expectBrokenIfWindows 10179 $ do +main = setupAndCabalTest $ do + when isWindows $ do + sh <- fmap takeDirectory <$> liftIO (findExecutable "sh") + case sh of + Nothing -> skip "no sh" + Just sh' -> do + let sh'' = concatMap (\c -> case c of + '\\' -> "\\\\\\\\" + x -> [x]) sh' + void $ shell "sed" [ "-i", "-e", "s/FINDSH/" <> sh'' <> "/g", "ghc-7.10.shim", "ghc-pkg-ghc-7.10.shim"] env <- getTestEnv let cwd = testCurrentDir env ghc_path <- programPathM ghcProgram r <- withEnv [("WITH_GHC", Just ghc_path)] - . fails $ setup' "configure" ["-w", cwd "ghc-7.10"] + . fails $ setup' "configure" ["-w", cwd if isWindows then "ghc-7.10.exe" else "ghc-7.10"] assertOutputContains "is version 9999999" r diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/ghc-7.10.exe b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/ghc-7.10.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 zcmeFaeSB2awKsm|C6h@qVFpMbN|XVDVgni&(8LKk0Vau-;DpFbA|_}HX&kLmI43|$ zAn8doC&y{I&$WHpr}kbc+G=er)s`1+=_J9tAoAL)Sg6Kcsym)kqtIl)nDczsJ~K(M z?Y+I9-{mJzb-ni+JuWY*itL`t~|M0_)i0&_KaBq?xc0cg2d&ON9 z?yo+we#4FF>8Uw!&_i!b-Sp!AhFOWfAD`RdK7j8ZpWEur;qPtkr||CU*y{e@{JqV+ zhrf65_m9tQckjpdi~G0F>c{*2j&1Ij_cDJ(lx?jlOTN8h@E{k-Y)zF5J%LYuvrjnc+tPan@1Ay@XsRnns`RaO9l9Q>_w5n zllx3UArJk7N1sV>qg>$&CL#MDWTEIvr28hO1J6=I^&kAZQQWXqM4G$^nFudxYaH)H z5w{@RcjKn@_lx%n!jy**OKsnXcRt<|{`o+V8;xwjz!W4zk)De8vwxE>dgG=I4?Xf_ zfwxIO+XTx0;@{+3hS>lA-~R^`IB?=rkZM5on?9O~J&Ec$0_3j*N zFchBc+;3i2>+P22Irrab4x1}$TYAN!@Vzy)-eZ!*rzO>TkBf_(`yI=CNRj%rxoVFm zN?~!vcrIJ5e90}Qjb&q{>uNgH6**R!31XJaOyX2}Op=*JOrem~6V)t$(_s}ND{>rx zu#iBP`GBc>*wuO9Oo;Fp5OarU2rDadGJ*m1 zExhNKtNqHoIoWzlxCNmqz`hOORaM<9ax#cz`=?{Xgf~}( z>uQz9SNs70tHKXZkYHCO;=*6$L5ho5{isk_YDGDxoQ|ibH|#@3YagXH=g_O}_oyMH95zf>m~BOB8t2$~#h*I$M5C!Gcu|XUp>l1=%8WaTRq_cw?=+ebs1c zWLvDt`JJdG=G<=!-(Tx(mkKLu3yRIs4nVMq(w1-?ecPmmBPFJ=Il!L1Sr9^zRg+X! zzJ|?5o8-e8%Jv+WX?sq#R#rt2mZPY7lT=6$z9KCNZ#E#zk3*=9Ljb~y%L9yoY`{Mc zaC`vdwsa#QTLs99I5FZxc-I{#fAl%SqDpK`6h z2-}X*~nK>v06sDsQ^8sWYJ`v2* zGu;Sj52{NtDCUi&=g~4}%S)&|T(~X-K)x{8_yf!cpjkHRpsp?im-~Fkqdb(e65+}u zgd^7Fpgh%Gi28hJHVqN|jX>RebfxwH%8S%fVN;#z@}V0GIZ9Gy-7cf6|AM&`T^;?D zx;m^I=w%@jKxPGu&uqdHc&kfX9AAXz>u=zhp}(Qctf;%!0QDmSlmt*f85m}vSA=zI z*b5#o5c-ilgFprQcRba{a|R%SkPjGU)Ksta9A&dXg{H$KtU8$&MUNuMVTlqF4*FwN z4ql>jjXD4^m$`zFk?d$T0(B`?A*yGVA_zjP#H*U}H4Wro(1oY#nE^zhFOtIMs@HGW zv$wZMP||-!&&+4(dCk-GT=En>mp+MS?c&b5? zMe$Po!k%C8w{_0}yd!@5p2PIra&AP|yORWjP58f?68HS3r%32d+KVS4-ktO-gos?- zNzr&HY^{7SDs(p<#y2P<7~g6-$#7+5QVieieS(@U#J}rKpc`1N3fW0iB&d-6 zIVz}S_W!r3a2{0npS2xGDy`IfqiIRJXRjs@h)lgeoZ3oX!QL-n9r?e=uxf5r|c`7(*z)Ztx*E8$orDJ-Q5pHYs`R z42TErtZ9ylo6r7CSLQUG$ge@C;yv_Iw29scMcon*#_eI@?XU_ZuJtN+~YqpxA&?=AAS zJDYDp6zaG`NvFs<5i+B$5)YOEG^jb^nEDc4HM^_-V-bth3_ zVlXYK?Jd-%OXt|{@Lk19fTTL;(F<-9X9U@FibE@1>dm3BIiw!L7zG&p4K|nOL$0Yo z_OXGzXxDFM3vVMRH=r6d#tz($R~~yFuTT(5SKcreF6b!-$OE_!HlLM}*qNmu0+FGL zs;i3QuXbrm)UpB9g#P#UVe-5clBcSwQ{BMW>!=;Y7d1A#F91L*03=HJ`_!_*^-4M# zCseJgS=&p!(SQLIWUnBbF7>f3cpqhZP+7kSNXAX`FDIen1{XzZI`^7tXpqYdc0o$+O8PzWn%F90vlpGzFv+?o zTHVQ9EBHrhSYQVcU#0c$HF3Gvxb#0zL=dg?9aJTI%aE8PkD8<}v9~x6ir2LaNwe$D zAQ#)b3`J41v+g{7t~Wl#+(l6>Pwv%~bjqcqpX1Ly{-lgbI^)j)JiC&pJ`>Qc?hGff zn?SjvVS8QQF9B~gx`LSXK-oQ{exVUQL8{(eh*uL<-9CYqrqarTX<(Atg4Qfbz76y~ zNNKt4fpWGTeZV>QdU+FnGO0d zOwtTmVipprhR;-SIpw$W&Y;pg7;i@OnNl7p4`j$2E@BqBC~t_-oOU0Is{WYAe^K#| z=$ZH8b0GyPjX=adfJ}GuOoNfK5s!bs;~(*~_jVdnMlkfdRqy#;IRs>NtVFCW$E54n z6QmUOc#liT2k%0nHVLt*>60-9xA(cydK4~ehfl7(+Nq0wMORw5MJo48>A*? zu1A&N$Id!h=i_0*NMvuJnGl}|S%%>&9PNM+C59rM?5R&sZK+kZ=P0FC_C6s&UuJv( zenFB0l{ue?b{^@>k17{(9yi{`z?xUQd3zKh3Ml$KpQ^;yDXCNMz>P^8=cY$o`&+y66Q46*bpJ+lr3 z3=5G;efVs||E%JV87;W_Ec$u0)6jDw{ut?Z$O)12SaLu zUA?90wl8n~YM(S$-r=%HGu7gZrS7DEy-K`h=`4CpTRNLw&ZUCy`zF!8j^r8EqUs*-E*Xvl0fb>}OL2GtJ@R!?H5e)H#Fh-B()qt{r=~7Jf zkHlpH(ceF~eh-!7B6hBwP?iUB4Zg@!bvn3Bayx|U1r26}olx%odLPuj*8AT)2 z=M)RjQ8ruCy3_nI<%@Qu!XYgOl(~bq>&~T7n@JGoEWOWW7R2nO8|js~G+?s`;v_`k zm5fM>AWc@6I)J%++@$b;W-}txvh(5ON~LV1z<+W3O`hHf)uK*Rrmd#V0FVE%t;QZ#d5ZnKspai0bmO(xmYMWZa17h4q7&XtTLNTg}aO}NeJi5@0&NLt2Vjc8mYG` z$&sB_L|HaZzTn(3N$$5t>g~18H=L23_Tet54}!SC`SN=fr~E5~Yn_j*x)`aysOkvS zxa9skyo=pat>^+j!)?W;))G@Z z1~jI0Bd)F3+*)Ezb{-g=a>9vM?98y70)t-#q*k;xAEWTd}3J#4-Ul{(U80Mjj*X zina`Q(@+qdcdWXL+GKo69~(nzQ(e=CjYw|#h@R*!8~#?g@Cdr`sL8{l)`!Q#0X*vO z!(+$B3(lR%_`3_)c7~8`=Q?ED`4wc_`3SP@+=6U7cW!LzCz!+SjnFluU1m)D*ejBz+vG zie`a4QM=?m7#E!_|A~sh8t?9G{~%ecjXa%$Z-Mi-jkul0S&#;04Tj^+Wc=Ml3>rcd z+Jg96A07_}@Tk8Jj~yG4@D;?NeRym^9NHJz*9fSQ-_i33RbOSLnzm`;!(!yv&*r3+R4{m@w^N?=G{hjZVG9J~4^ z1hBQG*V$YM27MrE!aw5IN8dpO2B$c`sUkc<+Wr*SSk=p&V52d zxN~x{-0hOzAIv>&fT&-YXo}H*T_7V7pJd3+5;r~a=;5OW5xV3)dTcaEoM0#D(z^7j zHZ~V*zHO{d;<0S-9&u-hOYU}quMoF+V7PrIa1*~2+3xHcOON9}+)kojoYb0J0`ePQ z(kH|1m|z6a4)#OO5C_JHE!~M0@cxC$QDT+5?U)pdbO(LnKp7TfcT}UwM=h`Zq3+Ps#)5~ zboEpD(^09nxmUbVa|0tFBxutK)U|aSkC(w`y80R`MByMbJ$3;R@?pE`zX+W`{WDhI zetT0s*KzZ)Y+GFfQr}cZZ+2#~39A?@7K1a?B^09`3!AW7OV}_}X^=yL%H&W_u!E5N zs^3wt)gewXDhDt3unr@dDpx8UY%}VIRe}n>q26If;*Mzl&y5!KM0k#}*hS@|rKV)*jn&Hb* z?I`V1P37uF`?yi(?<}XWLetkcsyplgZ-he-7hSoqn8g=ho!;F=v2a_r3Uy&i~`tTn3x<>htv z%^zD6B=*7}an>tyiES`k^3+N@a?kf%rEYY{qodB|VoJC>XR&;FRJ40PaXv~5ipb*n z$h|MQ)HJ2kA%DXPy)6nRt23c`i~;s9=+T1+^N*+T(Z3tX>%UD}EBGmkRy9Xajdi%l zYD3fk$}4(Mzg;c0dwN)wMmD9oEPbOx-{{geX0RIp0ISDpo(IiR%m=^&!UP?5O)ylU z!kpwe>pA5a^62`>wHV0b8PpHdkJWaV$S$BZo~;)db^X2gFh}ozWMN@-UD5)dP_Acg z#bOeeCP1uFAIh<>E+?x$dx{UCM5pd1gWl5B*Z2f+=6W@qj8|Yrwec_l-Xi;^ByW+m zJ}I0IyF0gR7@Rt3X$DkfF&UdNGr(Sa(TG(t*0;{)U5n5(d8r$6M3*cuI#ghzhVPXu zp*YwDe@bKOOqKkpE>3SbE78scPhw;N;5J#S=d89Y7@mg~&p`$1AYzBaDZzL?>K2}F zisx)aJZ=|{)2!;-o}nO%!O@|r1{H57La3c z8TGXGXAIoklo9#FNdbd9(|My{ChCMirV!;kLt&xrDX2vuwh92a(L~JDlkP^E+?6GF zXUU^ko6f?PWq@52#g1@LT|((-ko&=|tWe}Y4!(eDD^S(bdC`xupqWV8IL*Cbl+&W!A|zp05?QEi#pXoSPM&xK9XZ0X`U*Lgp=#Csxc9;@Zv%|RX;>o6{6gQ zrn(^C#|0XS)Ku$pcL5l12-dBjQib%O5P0iLd|x2$9Pc`tsquK%mq&+b`Rc z#Rt@Gx$pJ|d-7H5cU;F2y~3VF!z_g~8%)?za(A%{&D7cH%;WBY+NVD@7-$1}t$(HGm;dx+y7RjSn{N8Mm48eOCqk2<6?`V!vE-Nf5- zc^j+Zu)(NC_C{nU_y+SDam_p~oK@$hdAss2K#;7=SIaObi&wKhVLs~?ra^kJs}Y26 zM;)bXe@||331T15^?^rM8qO2TN6@}1rC|hWog(#l&MsG~&v~mI;tWbW4x4M0bAMFv zpIJ)&YtoHg$u6dOqP2<*BOD;&(>%Kl)v4W|pSqDv?lJ?e97`2@muq`q!y>rzsnU3> z%CP5AE@lL=@nGg#37ojq{Xaubhh23( zqN#NN%uPc=%3%LGUhK7noSYk={=(AuXV2N%f|=smwFTEo>FlAgY}z@fq5EeUzGsq&6&K}^@{v)Nw>PHnbO6=YA)9-G=t5)pK}kLY&v15P)z1*m4S z%JKSl!6ky~FGT&+*FjWnXXOM!!!F}_(45*rDrAt|Ozc4<8Dp=1L=sT3kG+irHuf?d zb&Z5WDR3Zw7(&?Vdx6pjDzt0%U8p-(fSvyLDBa-@REZW9C@yo*@E=VTecAa9=VhJa>R?1K_H*PN-zPm~7)RA)}N$xMtF0 zn#@wf$#O$Ry69~4y9&Q7+6y-uyK}UW2O*_?98wQ);5Pu-7G1Jhx-_!|eQ30$f^tMw z`BdIuq?^@CY?LH@wY}65Q+6y?kE_9XEvI%`Th5Akkvny@({oB$HE&pQG~Ns&#inRqk~P_ULM>k0>e5#&R#z?7Ud_Fv?8w)P7n4RvR3@n=4>8SO9l6k7NCm*UgY{uc4x79-Jy}iGY_d}a8o|7;CCmF(5d*+SL3I zdwLB#5L%vuQ;=G0t%^h*M+l=ci6~`@M4qMu0Xt|s1IBHnWfy`0$QnHlMhWg~8R5wR z_5>J`&0dBa!n|a**8ufQ`TX9zG!MR9=m|o7(+ZNdGle&$@s~RTXwO)UI`& z*K62|eJ%1-Z+%U&l&X4LYQ$%1 zwMSN)koOZTvp526W%fu>U*SDlrZ^9^%ginJ?NlAFJ_)@|Gkbc$PZ4Vm#aUnd9^z8dSD8)N8Tp4E9iA z?SjxQ4X486q5{($7#o_PVp2dpn z1e961mKFn?zevbLzC{Cy{Uw!;=oy}~1vM^b3tRvM_H)3CPnCbZflpOfUn@2FN=DF^v8VY@|@vuK2r{#aRHmDockp zMq-e9s!nJG-_ws#d5Vklw6$Ix}g>UL>Gyf=NH2SZe{`&w5mgp|avfPn{S z#W76b7;?pr7Oaii7Jea8K2JEos5R{FF?3(m2{nI3fu3Q)4|iHAx~Q0YKPJ;b-tr%Ux~eLXVWy_;u4FX-Z_78L1$b01*Anco*I*Wg=~{Z3XR41h_GxsPG~2`a)5>x^Rn_UifusAri>; zq|HNs6dr9R0z?*V8gIcvlAT%*wrb|ErBW%HKgJrc5vU(~&W0? z*bh(~Wg!!ev33wv_6pmtQH$N!*g=u;tf*1lM^wQssQacH$;WG+} zrNl%Qf5+!zyBtf~@&)I<#uG)@e$8q54PM+{THSd79f<|@0dy?AXf#!0gTK0S*K^49 z1N{96e|zz_AAf?$ELbf3XphAZR3W(-A_I!p))6cTZ&aapofWUw>*v!95zyDWh%G!p2Kq5tBX9#!Dqqk`kP!b|h7U-6A`D0rfbm zxS;D0)=mWT5L`e>D5^e2IvVCvv)Zi`FGf?af0I$67RAV~q=?jR{|Fl;M=QR7QF~w} zHLLH?ki{NGy`8sDub&qv2jnLKnJPPm`~mnHRRq}dJHZykZu#(hu;*IpWqHRuLBdKB zMHjOO95Jh^s8wHq#3_-cb8Y}1kL7qCi~w~jxEP{sfs_hb_?9XB>jB8BJ3xzvQF4`J zmuua_UBwGGN4{=qOI-%Be<}CPy{2_aFrUvUpk*lDDMS*ZUtR{HU`X^xVZ0YBjCMNr z`$mkG0#WsNfPMNgHK{lsO(%RBP1b%_OBV}73K zFxGHgraZkE1BPpOc4Pf9VKg%L9h|i@*eUlI?NSkhL|j26?}IvDMa$+~dR)WBwo7JK z>6lua^?mGwhOlr#P)XJ%)#6=?KvG+AR%d@&uA3Jb^t4sa93BP9ge`KrvyAPi4I`#|U9U5Sm(mZH1*PVTm)T zzPKF@CTNqq)hbA2p~%pohWYIQ_Dl)Q#~6=rd>UJ{$pfzO6&qj4H|{7D#CxgBb_CTO zi#=yCh@AW3bz~+lw?NnicT~uS!2lDM@UaBst}pNpinD22i4^0+h&0Ia7;_8kQo?d? zO}?~Wn@MV-cGXzE`g}tPBw;cY*|097j`6&{mR)rM3$w&PgZK7W(=y^s!{Q!`XotyE zjm3X;KS~?RXfjBs)fwu^pt5F!HZCLw`}Va+#MhwWfhB}CYHgO+uuOrNRLU-T-x62D zVBm7@v#3V`>=)=`2;1whPFG2|rm_GPFUwF&a{d=2H;@e9&J>BwRDc(Wz1Q8x|0X;VH=>vt;xW) zH`xsQ7m-te2O&%eYX&jT!;>BIDwFNMW{e{~%0^%GU@eQC-1i~9l`^LId(aJv|7gU2 zPVt{Wmnr_=!$la@;E1203wxBZ^LXK}OlRA{NpUMib^q4@*jNLAV`10i)Wuw~5Ajv; zT)WAoE*O$yN!z~;V=FeY8yxbVW`^CBxgEoQm~m>(3Ge02X7$a8W0BhB{a8$Ggb+yb z;k4V3+LL?Cd&Jpt0&sIL!&Bt_K1=M?k3Z`5c8gPA{i|qt^|LplAbqmj?uKLXU(j$E zx@?UF08r%Zk%n@Qy&Bun|1T&m$4uKdjaTmsyZ+hgr8P#?gU(Q|C5D=(IbEh&r`TTW zOjPbdeTuU{Uo84FioBnQldxw|U@|Ch1Qa;d zAEpWP1as0!Orc+n}xU@n4POfBiWA&SqNK^ENn} zZ#T&8Jt7VEWAk07R!rpEf4UXYgNYWP2jsp%OFK1Siqi!rrm?;tpC{l-Z2S+}(9ib* z;|v{HybNbmCX)LYh<4VO0e0fr zan42htNI$ba>0>CP`BAzbZ0Z%mjzi*lCTw}RM~y~F(RLCf*#nT_iIGLVk?v>;0&{= zyv>Ruy2KcfWjT?+Lz+#g#P*s4{=GwLjr{<`K(xTLr9`}~sUU)|cvDlsx9II|D)=_N zCpQ%Uuc+E7ed$0Gz-W~R9;H|L0UDLsod>>2ujL1t=~dWN@W0|f{xuE+hfX<=U*ioR z*Bn4Cn6wX|5$2dd#yVk^2~?Mmjk@2_k-c$GR#Zyb#O20R*cif`PU`-d|9zu~zBNMlS~C zPtDlm`xM(3Y##Pw!qaMSa_)X?U#eaGmqC&c+jbWYk6DrT&u3Y#_= z1(#fW9g2^C5Gr{R<_IZC?SkJ}r0gPg4$5IqR2nXphe83i7tqM{>LOX6=u8>yU%UAP z{{rd@JJu=r+9E?c83};M5$mG?cw7y#dX$9H4=kl=h%em}Lyg#?8{RWQfp@e!X~t}b z1%k|03b<$BL~s^*w?C#`r>==%)1;%|RuRTfYf(Wy4hnQD=>&mRS??&B1Ov-spn#3o zSdje-h15<`Y~yP|s1hJs7IvCkA$g8~!O_i~=E2`+v|Y)QqhNQ(qF(s5HQqj3N^kDn zI~xa;O7N{M(JgQ)NNP)NwH3D|m$dpvorj_Uc1JmCL21W?9uMig*+BmATYD-a6j0M*{Jdl}u=wZYkk*8UvsJfc=X} zc9uCnXW(m*XF;9=)i}**SC4P$-M+a1LIwFer-mh$w`cPgoWCe@wZCUpyM|AA+v{gU ztdnq7o9)N|3xTEBDFncla5*s>2lHrSr@DUxTZy~RpsUf4*#$}G5E8Q(x*8E;3R?&M zMv9GRfdvAtOOzSsY7hp;iz~5wn2tW?V^M+uLtkBEJ^-+F15uP)NbajhB~-w-6yD%58W`Ev$gQVvs!#+aR~vNh zf*n}}bk2}WI4iCSn=05(QA@ljw~*UWMG$8ATc`;8H{_+9QSq9JAX`^Khtkg=J9*cl z^8s7>F<3q|$T|>P1r`GSMh}oNBC^8@n;v{0;*x%iy^4-24a3=Ld_xS9kj@((R`5xU(q8`dBdFd_`}lXR zCL+f7@xK5TNjOV@xR5wk9JQsbWxjh~O@+w8^(g{&69N0Uap@r1DL7lci-It%A7uD^ z%;Y%>v#e_43%2>{Qa;xm$DFu(0LjpwCwpS2kAqRhv98O)^n+cIm`O^j%R!iZ8J6#{ zW5c$BENOCGE4&)(w&D?|a@{V9c$^}h;be!Nf{f{1NrV-QIQA|)uWSx{i*fuEG$6A- zJc;?y<7`;w4gU8;n;Puod5pu3apsT*vdGs*n!<8%BorbOUL$t)7>ZX#{0(rVU!kxmI3%e#vK?q|&1hRnU41Oq}UUM-hJXgnP?&O@x~t7~Ui zo=D{T1|EQq61<)04h1SldkyedLBavV7>JiscajacZsnIqUg?>?K^mB7POxr0VlYb^ z9(W}2;C(Vt%cz0zNT6mR3;FlOg*JF)4|NzkQgCw$M8{u1WDH08B%$(l{FAdZV$6hF zuMwG0mw1PB_j6~hplbJw0Uj!PP@Umuczrc91 zP^}zR*9zASChf+*i8E_g=j^0>+LU;jBc6Zq4FYux`Szh2?ONPpCiTOoeAJUBG( zWRdW@eDY_I&Nq$D$CsFa3jxyLTxGcjnX1SK&8ofo&j^h91Qm14L2{SyJr>``ghdGV zWMFi_%rQ1V$i$5SLav($je+%EhjD;)&|p}oRKG=j14Hd*3`?JUSr4I<6k`&Vc0>MWo>8VUA{9Uj1p4&h ziJ*Tt5%gj(;r|TukEyuPRFGb62jwyK;6|W4S}l^{JHB#JuZ4tGcUV1V)Ox!o<{3PF z{PeNYuX#st1`@UAUf}*(?W1Pz;1;NBk-|LKNiAXbI`8PFYr@u01zT82$_DLnWP^CH z%)!u#A)FJoVuD8cX@3QrYNRJ3DmBo6q6Rj zcafFl@eiO!pLS>#7DJ_oGapX+SEz4=ly60ylHWT09OZ^ z5GEge_8?{tyvajq2|rH6oS0XF>_39^ycaAMWUVmr2iYyy-o!c+M*B|8R$n{{0LC~d zuUm|&$jo{-sIb>W4Wm;Ch-6>F27|sN2SLw}Vnp4=qeyfrJb~TDBLqkTWeG*I1&9DM zDN87h>f>_~DQLKiL$wV$+wD?j=yyU#kpN+uie1c4NxM;QGt|?%*q2DL!GqOvk0_%& zoi7rn#Qn8#Da{{oB!SKtP00QWo;@)Kaua;hySTPOpVLmYKi4-hI3niIgwJQ}-^WEb zbD(;|HsGhd<}U5(a%>$TUkclcJc>%mVu+>NhZX1=ARL;B|)7%ekMl zS#QIUJ7`-;*tnBEUI#gn)|$#HDEn;fxMxT^%}UYbklpt1H1)utK2Nko_HTc zI2os0!lt@RLGZy(|2fPf&|whrW53kEZpd%9N||_?#B4lqGO`IS-h$9rpHB3~2bgc? zmJ5d8CwH@)7b$}V&u%qyubWw_lmU9&D36-A{rK5OD5;&K+p29$};}8VkR- zo%?7bBG&ln0uoKoH)C2-2Uv!1-7R+iFQDY?OUht#T^^_r_m=rUtlU#Oz<6qPhv*CU39VUgYn`F zaS~iZTYhqZfQ`h)@dWapnBek-ZKoiHOCD)K3t>GlHmcH88}_LJbI^(};DSQa4hN0h z)$F?%uUaPNGV--0J-hvj|CeC#3UsMYQO|SJX1Rr;p zX?x;5+}i2fpOQPaZ__j|5BTvZ#zT&*IG&-0j78Y(=#;8(AkxwYa}eF?at9h!XIwdx zhpwfln-OJXz&Ssq(Tp z@#!JRj$v04oqL12_g+vGgrBKPS;k>4gJs4I&zLvCF-T5Ws*%mJgrGq`fus28_yHx1 z_9JXE*ym`%mb44#qjcvLGB^n`7X{W;?5?x-;N;vSW~lr5&)Ge zcJ>ow#`y4V zJAXklr8K=*%V00TO9vEn2iXQ%>>!vK4BPc3Pho+nXCCIgCBCJlvmXEn;~2xZ6_d^x zi3>1Nv09Ip=rQ^?3rF-&07uyP8Os3sPtXfXFCbrct`54w8G29%ip^DgT5xsNU8KkX zdQb=_;dHbZYDs6^;s+2ppB@wnXRtpfQdUyr3VKio6X|R56fVT#XAk>-gh+K}#QMX0 zFo2qeLAVQ4N#nY%j5Mu5&Hmwi>jA|$hFCG-Kp{Gp&WX|)#3fP`;W1>^k8rd0?fWcpmr*)7H~4r1YbyU7k>;+7-Q!Vkv`QpvFL1B1GJiTgu=D97-Z%N)OF1TJD{g+f1KSi3qAoT}WT#%e2IB(_ zc^VBd>?c9?7s%DB$1KpDuHv#O?8debHib?f_i%&PV_vRzCpfZhJrVgndQd2w&F<$t zOiQF8aWc37C)qE@*8^{018Xj}x8lZ2?1Rv>GDw^_K1Av6FJD5{WTPZeD980W&U#{W z=ID}Jm$E-M!pAE3d>S49fN2K2gmxZ9J5hIz;dKzKa}e5Adhp|!7H)1!oL6*m+{Xap zj3u4T9Jjj$>oTY$hry3%;sPq(9HZ%UW7~vA(Y#3KJL#OJp+(naQ*jQ1AJa@?*Z=p$ z>8xhFcn%fkF!)hT8zaG-KpuxJiKOEvErGY4BS7ah;}GT(1P+ED*POzBd?kec_PA!^ zcutUgjl}%_<8C756y0>fpmU;|*o_I`py`#Z(zwm?+pw!+M-dG?NYvC23@YTb)bcBkQ2L`UhS#ZP_i zWgo)mO6R&oi|#+4$SjYY{v6Bq+-2nBUvkb~p;&t|VWPr@1uWR-KW_&HMk--M7VSnt zwfZG=ji1cp-7xJK#vCY8^|)mQaceO$xTd%WW@XwJokaF+Lii*DzOdON(*?>zxF*9A zjU7H4&dkVmJ%P!8WnKRY)!7-IU-uN@auTz+fy=+&8mF4dkGJwOzme=mq1h|a@4Xkq zyJ)kZProI=$eo>Ic#9gct9N0`CeqNSG#rNGky3V4S#tt+o55{~`x~9Z%KI?>&cNB| zeRi3~6WoPh*!$@}gKGuhWK59qfSWEugsp&|0wR-MA7AvJhe0n4g93v!0iI5`7G6P5*jVa80g)Uk_vpNS8qlrwC&VHShOwUh#tNr!@5jYAP} zxe6lXSPIRO4eK^!81~y~2AX(G56d+u0ywDtHHSKFm)gOzmkf18#bs&%&U59);7NAB z9h+D?7KU(hPbWLf*e*j|QA&7}ux#0tx zkoe!AB{nPvTFx3qs-WtLEXT1$%;*OMH=IQVx0~ro@dpZ^al2pysqzl)Kn%91Ftt=+ zzfrZ*YHWpkX;i$u?e3Y@p$?OH^H7IfO2Y*ezei0N$8&IY`M3;Q`Xz2l_m5aIBK%0W zpe)O3TQSqxx@;aml^FY$-cjkN@m(z#;XUwa9Vukhp^szj^zlKehH*HNTn12P2)1z|_K$iNUsj-pBp z&ZmQO0MDo0Ajd3H4uW>=T8ii{&H`a|E>Dm@Rka@I_VMHEC9;mg2q7fW79>ozQ5vxB zUqB;GW*^^-UiHvjzt{k)V6*e_i9U9+Frcv+DD;vEiHSi5n}pDY710$NZk=t_?*r6_ z1PVQgLzL>HL_MG}DZu{EE#S)^(>Ejy30>?s2%G*mCaL)eP`WSzXS?WV@GErm8yiWr zA$CtfI_2SF3nM%#=7iWXgwe(Aqc(O6kM6s@il5{EHC1D2*UV~X7XQ)Z*m4hm-T z%D^;LRJY}=#&5v$`RkscP%$GLHGz;)574ps{%<0GtN$W<7xw`;_my3&l?zLShPfej z&Va8=Q{iHJ5k4wkz#y*Tg|xfE=2rh-Yl4PDN-V(k!)S_iF~Ln|Bhcf!1=b zaD1!;=N!!2r^wM!rNpi}o%>B#ohnW(ImDj27huOXVypYViQeTx0OAPUoymU2;Y|ZP zb{?i?3~vldpKDh_YOS%ioI?_L9j^#(;AU2P(q6+g%c*cK zs~*9eFmwXUd=-qll#P`BPo(j(Y3Sd`UU4pM#ag&s_?2idE?1$6Djcne4pd!lfN2%GN-yPseC{PUPCchhbV zgf5)1)t*{!r{u6)Mi?Ox9<|Q>?Q-mX(JjX|iBs?kB3qm-77WyGn+Yp#&DmW{9$12w z(rrsYKnYqcmw$;3$#80`UvE1DucEftJp_&J-XXS@V-;IAh_ITtoy`a6o2B9MO$fd` znPrJ{aywusW>#m*zX2Nd3A5!%F72kKNsY+*OH==&cm-KD5YV>nH!bSbwqo4Ez3N%S zRB0PfK$9oAUoy45rq#&oZm~>elSChZzlkckR%SLFg(vv80e+Cda4Tr&tAC^Sb=dL- zEHZ^^FB)M7g?}7m=aE~p1=(-$t_r8#)7Aq%9zFxZP@mZngJV)l7I?WCx*c3N!|qC0 z`?}4w1<7Kpnd}X4GEH{2(2BIH*ly}Sg+SO+_c*li5c>&T)ImM!Z22kT_fG z(g7#l8Gl9Z$d~X_BD7HD;Ae`la8lh99L&SUG><`>+Jv2As}N4rZY3WFo*K9^)hysZ zTs9W0dwJ@jvD92DYZAhfDkF|$NDB1?F+_Ug4j^G7j`%BLT2A%fgx0cMACau#vY`ie zx~+rFJFz>1>)e8{3d8P;@w<~RG9nFd{(0t^XBrz~;BYZi*9cnDNqsu@Nmtwi*wB~J zu)`T>Ljn0*B}HkNMd6Wu5xk5T4Bb+C^TCNHMsNlOa~X#12+kAYi#&l6I#`)qH9hO2 zvu@R$a*t2J;f#dTDzm>#7xv=-M2C@{)^TOBYI;tHlKMr3(`nawV!Gc!KIc3Q8W~(O z_L`dRu#&!(sNnDAxZjHH3=*H*s>*Xnb74V5c{LR~!cvy}?&w|gJZQBtareG{(HO)w3&mVpti>O2JRCL_7J;s5s?FPsuepl zt9FwDL7v1ZLyg}<%i!E2>t-o?$af!>c(4P`K=!Z+#!qDJcT$_~k z83rUM3v4Yl9@^piT(x{NUv+TpuxrKSd1TIX1leb}r;XghNY5M7gbgb7ZOKcR?MB{7 znC)Jmr3|J8nC-@la1+dS=K=2XW;;wV{5*(5abYaMK5tegCnh^`h;@~htA{a&`PhV) z6p1OA={mU`9z%^YGWrfTOwi3Y&So;;snssh$tNM$c)K8Fq7oAQ4t#rhYZZIH86h%D zMal-*TFg#ZH8pLu_kRYSomH2CF2;pyFyL&w53r1jq@2q0AbI~DJmdq<;z?j>?^d)q z_a)cDd1k1%zZKEc*@y|S*Vj=efEvqG=_21+xWQXv-F`hTfXCUG??iEwhz==+!YMd} z#2&s5RUzNuEJ&U-WZaYo$5TQ4f?99YJc%-%Au0uIi*c1*ioVg#Zbmty&?MIU0nwNA zE)0W4@{365ICqy`giwD38DTq%lrc8& z3XyvNdU&b5=@KXTd_GQM0q1^yMj)iX1A5VY)G7zyniY#2v+lT^{RD8-JniO!y+nQK zUMQ9s2gxRj-Q)BHq94LZu zfr{PRnvA;s&}{)<2-+!32f%{-t1&ZVgy1&3D?wFFfcz3V z>7RofBM1o*L3%ZQA|||CDJA8)TiA;;i3ljIwAqM2RXC~JS4uR&N3Bx&5P!99LUr(N zz=!7 zFM*^Dv>t9YUhqD8gI^dKpQY`PZz={0AuOhrGY2vdzWT;OCKzFTV;=kKdq&T1T+BX5 z1oPQDiQqi;`$TX)>rDiG>`)@Og1rT}GaH&hZH~`r%}}hU zspIZ0Fi_D?48*fwaY(yX99D}H+f z5_Ae_1GKSMyb`zak(;r66Jkg(!M2f@$ad$U5SaG3xEBpjL)kK~F zUev4rsesd8w;s*IlIAOzL=4|?X*$0plOVCF$W_6fMOu{>4e3jG+Ca1yWk|r{2m>aDPB!{S?!NI4$l6X!_7BPWC!|g!tBWw@F8LG5`Wxh` zVC5XwF|z)I7oAAf?;vKJtVIU4GYo7$M^=NVb@EOheq9Q@x+l&E#wEkFIzW%51eguu zs!G$~<}}7C=>hfvad$cuF&v<tIi0j8?EYVAyo3l zoHZ`B8;%W4e9w)1DhfI6qa(T;24yXQzQLKsbXgGngZ)}y)b6GZO`!r)G|J*`VL|I*a> zuBi>SE`A1nOp}1l09_)xMc;-C2gqgL5h?4z4qK~@{Rj37A|+`Be%F=^_R70p(%Crj z#4h5Z`u=^GO6Y9!7p?f&im4#nT%zMrdPq3MF&~@d*r5wRWsC2>2P@e3sSNG|nFnED z@3IN~UqeKALy$cUgt=NarLD}}_^~PaZc<}=pw-^xv*3J6|DDK&4fCFz>7f3J&BKU1}~YpY44~ax__4gS`M85lCwf=T%DAw%XL?RyA!d z@75k%dr@{#n}ounD6Cn!Yzy&YDw|ALD8To?3PPo;{-a~patW<(Ie*v7&Vh}>c~!NRc67NME2y_v zux*2%BPknj{_Kbq)<#(7+WW0AMBK$sUSpDq!9ud_XTS>Yt)-xBpnP=&y9WaZD`NQd zED7gDiuJW^_Qp%KIL~&eSW0TmD%Czh=Xm|+#HqN~4%%ti`NsBJHS=hDt6j5<`f!)u zj;SF~1!j%mr?}X$45JSG;EQo04wos$+Wh)27t_6b0Z`6@*05~gj{|^1z!FY)=<3|E zi!+8I0W&DQH5Hfq^=`7hl&hrdQ1TFtnU19>k);U3&RXJ?XpY5k_`ia>ZhGCvv5Y|TS< z%A8y>mi1c7n!0H^vZf;I*N}DXF3M=+!YzNTPWpk1SYyNQg_^abhW8{C&u*xl@kNUR zBOn`_5^$+Cd;M9Puz5ol48YIxVgTbgWc&`Vwie`v+t%SM^+Z9Li)0P%U6LCvE`a-X zZVxQ*L(YFk0NsUxs{^F1mwS4R4DIn`%W+FPex@l%J&6^DnADXlXxPr4ha&LnF*dkK z-wo04&61vrn;a8(LZikN0_aAJeOe02(UbzeV@oERiuue?Y*%9bz_oKIg8`XC%PQ+$ zU2j|C25U6q6r5U?4NP<(ik}db3kY>fC#rQ+F#2T}WW?L@jWRS{=G~k$L z2K}xon$?g!p|5o^f=%e_NmuqYNJ}!4dKtsQ(oM7kACwa{y8_I2_jvc(aL*Nd7L4vi zrLJJSV{tqCSjS@hOP8XKv^VCH>Gp6l&y zz-1z_hSWA&F`Z^?Eyk_m7_y&~s=d68-2XCQ z2FB(eW~(${6Lxgr7k+y?n|r}KVtSWpK~a}Upi>^EJ4s0hhMfBvvf#f1V7fePvf$T_ zz3SqYD6FuNVw{#7iDQ>5jd(wq5nXQSv~=r6`s#A_jnjk!KbQ&!#PLIqYu`%nIS_*9 z&vlS(@Z<uhNkT@=|Pmo=})&qD)yLBmT<4MzC^2Y2xzn~aamz~xE z+ooB#GUgiY_sQ+yNOU4`XX^I%3v8Ql4rdXpT#1`1%gagX!K5TjW4UOYVa-^7hU8rT zBCs5tJ*z(t{YVhsChY3ZK$_!9U3s(!+Xth5tYb!tMLV2m< zW~hi(e0}&`3tX*)RryWmnu1E}PRDkfx!Y{(^2bb?rL`KSKNzN6=>AwaOX19s(f=z5 z=r|-7E}OMN6U6Va%kR3=UaJ)GJ0*GY=>0o$#Z>vjB6ur*Xw_zul7tZkQ0_4u2{7$! zJt(HFmp|MfF2im5B770&<9D6^PR34fi{>Rbe*EY~Z7;uKYil znIw~BV1m4b7bTjYXw;$s1qUPu0aT(1k%UwOwyV*NcK;S;z*Yi@lV~Q7Q)&OQtE;rO z>aP9kZfzCB7bKI=B!C41RD*yD}F*j&|RAR~f!jUl(>}dD`gKJ&S4HA082;Bnw(3;;iBGUFR*!VEhtS2QwThv~0 zuSoONK4ftEn(Q9YLr>O93Fn1w83tHF@D^uqF!$t4!ckmx8OcE~)?AW``*Hb+{MWz< zs0|jb5GFaUw~+E;f{)ueKih8EM!C_jbQOT!MO`5-q2XlC>=)x5Q_bSkS6a?pA(OstVC5uOHU)aOG_)G zCCDEEu-q`jB6j`}=7GFWwf>pvsb2mXwg}M3Ztq<8a<{;*J!|Ha8C~Iyu5iWkSQ^X2 z_x8NtT(+BdOZ0eADiHr7IV^gNupS^=rmYu+A?4yNEh3cKe6uI-kT~KyI^Y zWUb6`)n`P+LKa(UbRntrN?l?mt%}!rh_3Zav(^Q&^yAh351pC++T!AP#dR*%d^?xz zd!_BC_)FW9Vy%hO6xOob=|Qbzs@|g)bb4%2+~v%wGBmWX1Aj3poB0bdXGaqmgr`pA*CL>4aR%Yzx$5@6U{rM&1qU#6D?gpnYV;br zNFP24qORixu_D_MTnJa*`(9QLB&^lgV*u~V9?}!D*DvUqC7jAW_NN;t29Ll8jfKa^ z417(b`==ME%Qn+jZ26)EJXBxb^l4OE3f9n|uzny<0Cyn}bP9M1K&?1y+-|&=^S*HA zHmZa|)D5~+`wbc;U||pM^s>m^FjB|~J22%fQYSH9V1J-lOR1DWVsJRzw8iNt;4p=` zNFQ1IUlx%QR$>#4qs8i3`X3q80ptCgCW^g?T&4eMaUOIMKPoTVX$+y8LcyWcfn10+m3ss%uZx*^_TFmq|VK|-{1J_m>&Odt>A@iSG6$N ztaWV&&rZ2b^75Z9i=@F=(a_$&ET^+ny-IMI+@MBkbEBp5PX*dz6|U)ilIhZKIiO7s z^u3EKxb}I75ngw*8WN^`&o^?~9loK{uJd_{O4Xk=A=W;4KQVN)hJ^aMmxw;?I@r^> z3Eno}&;!IsCrh9{qle?enQpql9+I0=he#8kmJ2`UC46YMbwE%0b6VJ6J zV;Y0&9^fG>9Mq0&gLU=11=l^u-}-gp1y`*h&%#ihBr7ac|D-u7cPR8S?{bCC*c4%Q zq5a{q0}elc@Qzstf0hwlFO8G>%{J?2bZB%KqfWwc;FaSFpRfl*A_xtxdrbdbqyLKg z+~7J94F=bVPu==;;zw6&;7}Fm1AZg{KOOR;lJ#DiE;W+cNCwqYuJjK9avRf^%c@UY z=}(-p$nMKDD-~TY?L;-_|MA1j4%Suk!2G^riY^KOmGzQ``d}9W8>*Ama;q`Clhz4! zEMOb7nxU(2q+=+V(-iKrGb)qreedx+{7-|j5pp&Zsxf!#)e{+O<$a!&_bT!>birjt z2bp(}dG#jgblYO7fDDW(lL{CpXPpL`{B||6CN2?1wvBUO4vc%W;Q!d0awRmi(B*Th zLZ)NxZkm&D!?$j;nuKbCR#6SMiMW4ospC5-qGir7TTF|)6o6;gHIy-3p*iR*7AkJ! zgx*0iQv2 zOcjk|C=tj$EC?IMD%aFiPM;_%E)^`jiz}U#PSvqPvkpn>a#~^}nH80-9p7K5B1YPC zt`A4;^c;6=_?vPsicBs>@;-J(F(#0Xu~yR%6uP;I+v%-Tw?p{?OI7QHW{2U ztm;9cR9;kuW=1$R)PilA+c;$=vVeMVeqcF5Fgv5B`|`7?TfQq466>RTMPaT8k}y#( z8vl?Oo74F&4Ppcr3L(r-54><#rhG88mme&nvD+llrPk)(Ka8jdC@X@(2<1W#RjS*x~QFOAv6R2J|EF1OJ;o3}M16w~X$JsriAtF6+0a97q&wO| zIp#{*DX6(#7Z`1OxP|0jafPp$#O!lF=(^60=zoaV^4&)G5!`3GzY-#*kX>@}$ zy;v>3M;2@zN!VW{W`CS}u zgEA#Zj-U31?e&i(Ne@cnwnV1K+Ppnf^sCSfXa|m3ky<@}@Tm0A%uE~uogB3ScM^lE z=Z(t5=LE^=o57NNrg!JkcV#QmXspIh2kb>0A+@cNtPf$)AEz$JQ8bf$%(!tLuKq;F zTo|*`doyX0QU{397ub$&x`1r^)8Eis^zwN}UoiUM(~bo$!G(hi4VQP`qy91KV4J9E zj9}1=qor!bR@RE8wpNXyv_Daed|TEzd+|J$SH{hvzmi__puU;LMDc-nDoxU~ijlAl z{I>jbIJ%M@R5~b8bLfULBR8m{_C%9nYTO*QY?1%K%@O%sEBWCt?;L%E zW_3##wzPWsG+FolX|0KJ3nv-3CJLRJ@JD$Pf|j|3`Zur@YmfqFapgB^2=f^V+ma}$ zQJce}j|cVd9}5w7(QfetD*ADlW1PJf-CAh!5Pb%Wo@f}o!VsV^yi<-Pho?R{u>~4x?a*BUPR#I>kkj|^d zax_Ooxk_kBiP}%8U2`Z;0FcnXHy6LpuSpWf#IQF{Jt__3WQ@34+0Cr{Z&p`*Nt!Qx z7n)4uXwQar&juHWv#b>7Oz*bk$8nD$H!&ZD=8S&h3>B(&x$=Zw^|FH1tylsvzaEi# zVK_3ktAZYyI$cPtr|uPEBMj9J9|lw;-K@xc`G>J?>P zY#1VBXk^VvAzaIbHat3kXs+2KM&01qFf+lsYx#dckbs{B^*aAB<_%~V91cXCOE(tN zLL?`ovZ+_JY{_ZX51SkWG@v-InM77gDhzvQfgRl}R7de-?fO(V&iL4 zfZ*~t1wcds_JB4c`4RgG49rk<#UEpb@ro^sd`m=h&A1K$%g66t>Ji5BSJk@b;RddO z_Y*_uLG0DS!A1Qks+(k$BO-31FB_^plsBynG}6q@0SHrE;sHC%H4I1wJ*w%Sxjo!~ zs3yO!p98DHjLKB!H0}UpHgF42f2Mu~_s|hRkmltp56~U8;)x9oA(8e7~zFKvv$8PnGtnBtQXM#$ltB2WT|%_ z_3q!K(U!%orUKB+3rm27{jt3Q)b6mo!rSWqi$LavhTVkmJ>UHwFUFh6604`h`ZqfK zG+7xvru|QedYO80$Tm7kb3SZ8MTAmyNE4@Q^Q3-Fp$fjolQ}_YKhgODkCc$y zQ!At#`2%Xcg?8^Q&%^KVUISf;&hTj8?3GR~Oa95stWSMkXD04Rq^@#;q8d88;2rf& z-51i2t3$UW#BN`XR3?Px*bAj9n*oZkpdRP2h~X)?>v+SYFOB|1Y>wbM<-2A&+OX8o z;*6|teVLdMT*--7i=YRqd&mSX#ncZiQEj}Ip*mg2uQd&}M@!Z3C0LvR$0b$|Z;lCo ziXeL+9QzXy&~ov!)o7jS@ugtgIy1oT(OZJ#PY^kWkcCy-3d6(QMq#n>A+o8stSe_5 zP2(zvIj#itkNY~{`R4Qz4Y7RtMxgiGasU%EMu&2fO=V@I(MAkVE^ogwNG%%l9D<7&_Wa1)X3@5x=Ui#DrTq`{Scc|9MC{&$JU^_WJN6RgB zK1EP3tbp>=BzhP6wI3-k^NNkqI2yS*^oWg#?(Ol-E~p1 zEyt!Zs74oLnDPGfT^vZ1PRlbs3V)JRtaeDB z;XkS`3CG;h;Fi1z3FH|&Dy$(#5h|W-@foU@i4rX61nh9iqM-i(4jS$}j@K9eX!b-| zPV(X#!i!YiDCi`bqbKs`9Dj$=@>J!NvfdNn&yqrul1=lI9f6N$+_yF6iMd70Pb{y@ z!8=?T#)n;%ke9h#8T>WMWvFYQ1J+QRCwNRp?y<%Z!eN||aReE&gFH1lAPf5kQs)quPg2;=5o-0D@lpH%kLD;2;9hW6 zctT8EW}6??t?~GgS#?_?5Mqt@E%oKYB`q#tTJ1(JVOK3c0{P+! zS`Ig83avy$cZn`D8*U?=BaB$ExPh(}f)CdDc&boVUDYF&FdU^#kTs(@a)dOE1>whWX zd_Hf&;+miI^&x0Nel!GiA=29eKhZWiMW3< zzEZ905Bvp>l1w+J(U&h7=NXU4K6HghPH+!M4C9d}c-~yipPbf0Rjz|%iOAcnIycEc z&E}CKL3D#|-&%soDw7t4e)%jU566SWk{IzB?Caa=rS_Jvr^^UluMoM+2= zqVxLaQp&)i}0nG=hb{<)O$*XB~{IddsBaQ0mKJ}r})BH_#wX7P9TGZJ^>>HRlc z8-*U6Z)kAiI&B%m0UNt|a2uWK&SNB#YnSL`)9hn9^TlhYw@=2QS z5@8yg{!PS8`qo{_nx1BM#bjd&C?42lM6M`-VSQXCBIp0FO4YmYLxI(9Tbch*O;p>; zd{C+c;;t+LQea$$B>9oum^jW_`ZABY=MTacxTzg%!VPkrQHljyTCw_75p6J_E4fj? z*wWFRZzRO>6EfU;X4#OOUQ`4z>12~$CNtKp4~PKT4Nr%%)HOaQ0Bume=D>J)63AJ7 zYLH`AmCIY@_7!o^x`5&a8`~{tt38~mP&9FAWPSeluEd+s#etU7fmPTo4%M-NS?!Ns z7Wk5DTqjbNgBUKHWmq8XMe*Es0T-*{>Qd76yQv|a7Y}}i#bakb>3Z&YY8so{>LR*D zo8gRv(D&nKiS;I@-8}lH(VQ)LGFxh3_%sZYP2B>$H80{OYbaxQ#c{clCGR~u&N&!- z`_Lg1#HNZR3z>=4lJ|HkZ>9nlX`6CXFk_Gae2=XNIl1CU9oN>Z?kW zTx21_X0Bha(zipW@r%=mKttnEi{H`cwIynlkOl@G4+WFpek^Q(`%#aMbc7ysi65KK zf>j3scki{Kl92}V?M*$TXejtBaCe8TCI3_EdD>>o5U5f^>oCfc&>(hub`lH4Eo`_^ zW~|Tul)JVci_P*8rXQzTDw`(wvQ9AP@;lKi2^Q=P-09?#KTo;1^Wl0DXLsrwxj@Qu z2^}OJUoX0E&}T2o@8Lsv7p#B#UmQvr%WNuKLUdG%#3oU&(AO8L+<2syLRFokqc4Ou5N4O%;== zQLqcdgxtn+k7;y}WO$oo$glHPF>=VxVT6kVo#}7c?3ihXI~}FR!!Dmat@(J^=}Xjj z0&+XZlS^Ri6XYo!7fd#Wus1B$Q$%ht+Be&{rOJBWHx92~BfNWjX&@609b~%`{>nYb zmd6hXGvz`S-2Ww6+ZNw0z6NXwz6||qC&4!V5RJT`(HlTv$g7UyD=@uF4pyDse+Ws* z)XCy7(DT^CB*!rMG{UiV5UQ!ki!*$edS2g^^4Te*&_OdU+DSv$fXo9VZj>9?Bcx0>m9==3|&wi)3i zk!cme%QYSk&+uIZa!OW9xYH>;2P!+h=cMp9-lg<5`|+?8-(qzq^^K|M2D;Oq-dEK} zWBNR=w*@{<_#5SeDx5$Cl4`a}i;GJYrcq{D1q{!=ADyNVr)5N_Q{dBt@TX=c?l3!XhuMic>2sSooov;HAah~CG=MWU+QXka1BVifCRsK~ ztXa?NJjPa%U8Nd~Y3aH7%#kf==~|pF(UGx-j)vIh3mi zhGsPeA!x`7z;(nY@_@s}2jNpL&jt)cljII-+Po?(H|xuLD(&?PkJJ}@y(p5#`@){w z#`=OId6fxh#a7^y6^C`G*cG8OAZFc%#g*2d+4V5Ap~KiKhfc}wmP2J{+}0*C5;TWn zSZ`EUb!+5>&X@t5K4*?7i|_w%iMi3YKB2mBnNQ_389nW1Di=m4{pG=WwC<6~H_&V? zllKk%Nn&VmG~&Qy&UD>rD4>-Nt{BT{hiIWDpvP1Y3nr;!y#BqgG@4yAq!K2(1|4SHG%U>^^;|r|2y%h{H5|u;+2x@OQY%; zqLVljTFD#?=07Hedha^LP%pSng7Sjp)sV~sq5Q{KP#X(X{%D!x>A(VbY6aUYvJem% z&pY)}*O~Bv_;r0;;KNpcw-EdpN6~~*Lz6%=YkLp9G>hrrBlI!zvMZ6a}z(-LJip-L*Pc&E&xPYHjOdUI~ z>T(pe={P-3SCOMQBH2i%Y(yGKkLcRxOG#DlMlvcBN_Eqo9`JDjA5jxUBkAy5F5GDU zM#dd|7Jt3^>?6q}ll(=)2uV4>-2Zs-JxonqD2=4_0;>{+AtJS68*+;_2l` zA!&~A;haSEvqxPyi^wX{Zm>oQIvUD9v6fE#9SK)jkJa-Nu5iwYylRn;{1>N`w+T&s zJ0_?@Bh~*Rtew%9`zJ8Wpm=I$ah!~r5-|;|hrW<7NBQY2!u-?TzGX8!uaCp_AYa%b zpwuP=<~Z$vQ>p&pm4j|CR%2t~=}~ZY=eU4%^H!Z+x;=tRv|)5PmPKL{U>(!$VSrbYbmCXF`%HUoXB{y~9RE_>ymB^ANz11%^+;c<*bdy@9OZ}o$2Wex@~ zqKIE7-4yr~Jj3s5sC*pQP$`&(KKh*vy&Ca;tf3jw(5VD`YYfx-$B_L*uQZup#u;-A zhXw1T5XUwMU&tK7myDC%c28i7tkv}r6sjvcK|RhayU_ExhuMp5zCWdM(Dy5X>8Q4W z_r>2(L7z9gbiX+6xpyI~Y$zmipePiQq&eaCzCt5h$T!hnQsw)ZxNN!*qdG-2rg>5B ze*R9TheF+iv?z%k>fp< zBvS(}Po@Uf{qz_&*p0%Oj9z5c0z|qDwf2_`OQuad%dg2(biGOkV6|2MfB7|U7d?ST zrBgoSk~jvMC)c3nU9Wk4_m3s&L2iS}0PGJ|9oC|X*i~?+j=|O7w0Ifn0<&20g2IIY zmP3dJg&7mkN&FfXWq%vU0GHBbM%CdG^{y1qtPa6{NtM6g*Sc38FG1q5_Us#5Emp$# zjm5*AjCpYd1;c}n_}2bCdj?XPO!ads!)J7cqCl(mKBF`2dR#UgK>6TIgjZ{v0;Gj8 zOmim)pc?M5Us{bXXT16VnrDQ2fj#xT!qN8lZ2N>vpGW*LR&sFcouN0(5_O(j4p+ASim8pR(^-Lq#UR+JhE_h%M9&HL~B-@l;H$ghq02_Oh`K+`I10wHjK%?-=m zV<1MG8>BxawuN+r{2igH!)zAZR>7v<&2fNPd|74UViYb$s$zQ28kxyF1}ApCaz>P3 z6L~4?dY)$-`$$U)`mCiXQzVamoH5#Wz8a>JkEIRj_|vpI)7JF>X>#(rMPS;0l#&6( zh_%FR*abux$k}BjYV?cI=w^Xa)_BHa1ju*>@#iq!i~PH{}r@s7{E0>O={rXrTiZsWh|xuH)6Qh2#b@T|8$oZmER`G4O$to7>#^LG{YGhSzj9IzJ6@h}o z+@1WULe?aLLs9-zE%YMS3Io?z2E7c^eD1e@MHkZRVqIaAkTK(p>;hyTt7p-^Mt9R22&TgxT|(GOpTyfd$pJ=o;5U2aI4SIWafQ) zX!hx$N$}L}ij7e#4+F=jR1(Wt)MIp``4%6esk~cbbfy0EzZ@e-_JA>B{hm8U&}zJH z4XFqpVwiSTq_s0>QG_4c@N4#ZN+8d5CV&7-;E*Dj-#LWX58dgq>EVeFVtLoUou(b8 zf}eIzCXZ}XXd-G;B{)yFzUT71J~DK}W-&r>1e!8Eujj&vgyvWQEty7BpxK_&;!ojr zJ5jXjclL`c7$Z&m-hzW${RBPV;1shRaU+E?#N)FV-q=li zV7mB(wfQd*U^4Zvy(`NN0Is#3C_acX- z7}$#uUM%>YCSzfCPly?T``FQo z%e%JRz_FJdU)UibO<2T9_rRYyc-M9Y&{g-{ZUM31G6taW4bd_g=+tuKh#k9d2UAobpvx|+0 zYZq8f(X7~K^;$u9Og7h~dred*H?Va*RY0!(49Xg+CQuC%k>Cf^g1#sV3`SEFQ5z5_ zV^QPi%^$X!I{W_&qb{yd4l{aMk=|k*=__O?sD$3fghOz6*6ucrYHRiT!Q!yuTbo=4 zn_Qr()8-pbq*2CTM9Y0iF|9m(WT?K&HQ@|uO-1iRlFVTjKhz=)?VO?Sp(n8CX|YxP zIP1VYbPiTl8qUO);ZL#Gg+x+7N`n4QI*w$JyLfBB(r%CYX@%r;Dg!*~JZ_%&Q z<=K~y5(LM$58`YvdvRlO@YVr-Fcq6<+|wfH|d;4Al|kcN6F5X=kv%B@NJ3X7gm?=6PitP<39F61pYYyKl_atRq6q zZaEQ-|6HoCk$fxdAYqV0+ax{p)0%v%u>F;g4TNMhu^h+< z8|b4yXR6q`UZH3xX1HsdR@dfEYWf+((|C&5O$2j=M0QV)BJ%N%K{}*epWiniE8lwQ zqv2K|MFYP)jiN)5=bdB`C!Q9@8f5(hKWNxob4rGbBZDg)JWC4}6L&nS^38~pPRqHC z8b8kMJH0@CJ+<>$a*ht}mG@iRtC%zwtLioJo5}plwES$1mxj_U%O5)trZ;kuOk@|9 z{F!O@CId-7yusL;mNgf`b(_FLzVkFVk5I5;FrFoZc_ z-}U^T%>T>zpB+$n6l3czW{OqJXwa)yIT24r(knGo(IV~JR?Y~4iea#X?$$Z!)s$4b z|0j;>!RecAywrW4E$KXF@|bK!vLA2G^re{3u88}1 zb9(Gcx+VRJ85sN+l}A%=#}v64?-?!Dv9oPTsYP2FI48Y0&;L+u<4;y_x{P8Nub#S! zWzc7Q0Ob0X^sMc8{_&4co5-zZifoy_TU0YISjPi2D7Tk1Tac&Kzlf6>ZIdt(IL_0f z0Sbc!{(PDal@;5nt5%|>P(W<;`Tj8Q1QzI?4H0C%hEVd>rcH%v^EWc{(?eBz(UVRp zJNg3PD^vZQ{!!{usu9S9thiA>`kt;+*9VYEHDWjQD|ZJS`t)cwqXlzS8c(e@Iif@` zM@3AzH*j|kQ0p^W^Sim|vIV*`;5ze%g;g@+6s9!pw+$ND%^FNU`hxnU@K~6~WCHb~ z$z6b*a%wv2$D-(uyz;Vuo}J{zA(BC}ST+>&;+ z@-E(xk{j~(y7MBbP*R@!b~l)gxne?64G9=v@y0@aabod8- zBpNEXJJ}FL$AU;pL;e|K8^>%8+4t>^`2wh)J>*iUfwkSX6K+cAWGvIKo;~D>?1YK@ zJ)R$(=O0J)Tx`$Z)$8+J6EYEuzd`Rbn){xou8tQyuB(AJGaVFI1N$0xl49S3&h&sP+N$@t8m_NkD+k#4j zg_ULfC!5%pTBL)@yCtPcCs52Yv&zXa|Jc1ktt8Dvb^Lx=QQUZ*jl6HMp_~xKm{seO zji|=d4Wtgc+_wTrVTbGjEfmKe0oV`}Q1~Y)tWf>abx;l(o*p>qTrrycxdx#nR+ouy ze8Uebj_t*PoYRPzdlnT5Yo_@gw=u(0D?%!qBCtiEgm-VLIBUO`KBg45!an3#?*0;@ zzB@Rg+$vzQW+^#=Qwhs+Yr2Gn-V72{L0?#5qN@O|qWFwVSF)d$#c!$^ILK_^ zPA7QW^#l4NHr0R@L|T~-pyp)HI!=D-v(apfjS#klt_J(G$*a>=&JTb>2-uZBQ84cE z1etdt{(iRldm3(tW)oyWA%b$DVNcKJkaLA^B+M3LiH?dDoTP&{#a+DU^DH9Q5$Y=H zWwQO1*mOfzUZVwaQYv14F)SS@vUOX5g++IQZWd736m^D(IF%m^@Dyjnq3TO{*RCKg z(OE>6fe{*70dVNVh^HYPbXW&0#vdlukC<~~-PYA#z`Hy+Ub9wMv=pi%LQA)#*P_ub zz{wMDX-Jwj)pz_%V|`NfjH~>K(OJ&OII=T#474y5`$GIcBx6&+ip*^U^rpP|-GTq~ zWU1-az!e(X!^lOLUb_@l0eC_KFYx*r@`t>K9*n{vGw;#WtIMI|0FOn9KX5X^|2<u$8jxh{4hhW8V-m6mLMeydCA-4hM zKfyI5~4kDE+0X}XtPN15TyW6n~;5MuY0__|Z4*=O5=tA4@u$&58 z=nc6Dl18;^I2y^WFtp4mNWC_jZe5A`Q=^bSMJ2fhr=D%W>w~kzH3`UQ``r!SJYIg^Kt@`t;E9Bw=JazMOJw|e2} zJzvq+Dz}`56dX(YI<1cz3V*lp{+>?*Rc#JQs# z;R2O=JNcI%xP6V$L9R_4a|G4yM6mqrV16UkZ4iV+1l!9m(+L9234vWvtWTaHnWJy$ z*I40kBKHFo$ibE*NL4_LUQxI-5guv9jfKTf%HFhsZb{vV=s^7g3BB(vy>vyQH~;kV zi$rA8j3M9KWb3HfMFxR|2WW7kKa~uYZ;m*KLFQD0&BaqIw^ByIyU_dNh#D5^A>5*U zQy!p;@Suksb$(;--F=Al^WWyz(eCIo9LCO}UmIs~k0Sv~474T;J)RTB^GmZ6=sgk# ze$kkO_?lc5yk`siXp8eEE9oL^=XEUoI+#W^ z2L+}X7-s~+(O{bYsHkSWXORW2{{Z6GtJ|VWccq-Ic*8yDO5xe^GlF%`@DQqdfWJWf zoyeuF`UU9O&T+HKrj7HbwA4MwSImgaXoboc9)NWX}YH3Z)1A?!1Hfu7hizC(Ky?qWs+f zE+D_*u3<)4yATMpVWXJ4JGkx@f+K@+Q8DFscwwEq8k;1g>6n2Ds>6bt9wTh%*EE;| zKJe9b8+lh(bKdon%>e zJXkl8jgDJ|;QC2C%nXK}B|I3qoR^xDx$Ht{t3XEsFRXzJwzbwhAwSf%weB&VWU|Tj z^&vYCnbr=HSl-$}I@7u~LIYuE-~?t6p@yBOXkD)n2HX1MabcC1b0k>zvM%gN{$fwN zBe?!Gp43kk(YtG<9`gb(NDtDeHT-~4scUUKwpOa=*%bDr_Bw46V>c}m+)RC*xm2c|Jvg;5{$=M{CcsEIf1i;qOB%Li) zAg2`@LO+Sl3vQCpHb=nQ>Z$!X$&9|76CvGYA@>_*4|-27gJvUOk&c&4Lvy3vre#h8 zC6nC7EVCUUX|AzWK4-06!(TR!kd(dWkP(t`!ZlxQNb1Sfq6cQ45CuK@w_4@YNp%pd z>Mn`Yo9$=Or$U1^Nz$V)8M*~#>+$A6XG#YIUeH4s?~Xe;#s=5j!QYZX@Fa<%e(;9b zHQSf~p@tpbF@93nU`QHZj-OOUy-_k?{G^GDpUgHHKfNH%9zPi{89(`D{3Of2XZ+sY zIB@(V6R#e{{_&HZ9WZ`UqrY$bB-3-oPq!l^%{A7_=d87l@mI!AI^*vdKdH{Z@sswS zJATpvbNpKM;K{P9baqW;cmpRVduoTtLi^h*^ax2{@M?#fD|EQILiZCIXmSQlvO;tB z3#+qETBccJqdBJ!M}HvIeCRk5IJ0c|WyR)XF=vOhf`aR0QEBF^P)*bpuj!G3Pze=_ z`euZF8uhlL0b9FP%7fN7<60)gTEM(+4|iPqB+zootMdn)#z5d*W!YT}G zXzo^|(2mBx(#}6x?G&%&f1{mOP5X{^q8X`ION_+H0;Wf)u0`f#T|?&9u7~XJ=K^Gw zp?8Sf-Ib|j!H~>acEtLF6x|C!))Z+QsIq2w?FT~p`z~JYsJwU)*E)4Op2gl|!=$>M z{K5=s(iZ;AUK(;U;CZRee6LXXF zI(Ez6Q=UgfrPA0W4d66*jV9o4Q=wp;v@TTF$TP{MW!8AS{+b?-hGyLtU3O~iJ>}~O zY?1^v-)DwSi4RpxfZ%6ad!Jt~>7nnn`XR8}HpkfJ)jPJolLh#ynFhkK%oBV}7Z%mI zM4lS3qnH&M(A8FjE;cK4b)!aUn5yZj=g|+PT{is+8=EG3%os^ zy2JAJ{Cb%b+LMHi)`hK$(7PQMYKAAM*$J_E`?bVAvCMZDdNv~sy_E)@59!2tjux{F zGuR~ThVx-VSH3s<4~{xvN|-4LwK|2Be77xcW^6+-3o>*a{QrVLYZ8TdYBy0T1rCW7 zB`Q2Rj?t96JD!`gZ|Lrskv5%1D+Pz7AIu8O!P2NM5w6Z$26_gWGiShhV9vbsduuJw zeJc#TqI2{*HCMN%?s5jfFjqL8xgOz=;SAjczih4!rr8f=fS*ACX%@(mz?RHVei~wl463#A8p=>ramL1EO|Kp-7pq*GbWOyk%4`=PmGp<`?>>s;+*p z)|##|Md|*z!LguoUoO#P(sV_HtT0=S@f+AA8E{+u880T6a29!swOMn%R?godZ!bw&-Bw!f z3EWC=LgM;+psPVj)Fquo$RtKkbL%0^ln*3i($W|q6QVAJOsX0uaS$?j|KAfbAqamj zA=Bd^gzOa(YeFWu{5OP5Q=W4P+4<5nezywzYUFb!#+(&_9#UTGCAW6tiKho{LBrr}65&R0(?RB%@X@g38qI_a1T#Y}Z*W+Gm(4cl+}C+vGXBO&9++ z&AHC3Pe^kNtXipgq4sCWMPo>+MOIpq`F*cuXZ#0)nqjGfvP#o^7nvK0?3{sD^$5vkVI?&gH?uA#`)jOS zDW7j}8f)u$z*;X=!ziv^VR!7pA>2G~(^3FV<@m3+nm$kMk~rBAt(PL+kp1=Py2=E2 z)3)tjy>xZ6b!6Ao{lL4^|B=Nq@W{m-MufunRHF=W;1+No^s^rNqM?Zp4RZx zFXOxI9_b^Li~N`7?yuhTAa%n;(>Ew4kGvBJK2V$(#faU5Yn<3U&{Ogc=OrjuC~>!q zVk&V|5KKj<1da`7BMk@_ph)B_0X^$%qyDNM9!$oP-%F$GY9wC_) zp*>i}&cwZ+Th)%D1T>^X3BA|^dz5cOB-fZ~HIM5?lO6?>PVfkIhBh_i zyXpmdB67DJ@5cmAiqd_Pu}y3`Pb6VBVSy1^>eI*bu#RZ1w3n7HP>qB8l}r4;8(4Ad zwMK}Qor}wgJhQ}ky&dADEsjWoj21&yb2uDyJ2qb2iiwjP7Vs$7 z0Fwj{i&g`-y}oI=`?;i^g|khFGN64EOgk}D^?JmaNw)bq0y_(Deh(%nn7rj5^VzT7 z-_R_EWbv#0@~+oJWN+&4Y81Rds_4Gh{E18f{Vv-=zZ?5)#Sx50T@wPGXkDqX@kHu2 z;93Om=qZQHZrpGylgzO zG)$AAFUIg97l%>be(vtyZ>>{gzzpEahy7yDP2=g|#B z@$T?EatS8dT2p{v0hSh_gp`F1f|vA6ctT?PYm5`Gc!YX zM9xk_*T}3o6@Bzh5_bKBb3nT?wtIfpYGxmrHnFrMxT%|xW5_|qdg(b`VM9A7SXB^Q zFI5X}k~Vr)zas zW%oShR&N|=`>~dE`K$L?(R387`^X`v^YnhW^d_r=_xN&h zjv5^efVzC7J)obVS3rmXz z42`bJfZp-_IWjvoX=F)T{TolegLeJx^j0Nx#f)v{9L?FmKPTPBI*HWEde? z@4?xj+ThzEH=WDPkc3!kNfQz8k!7<@^3v7E-GKLNl4&v#^wrhELQ1kcEEy%4UVO}f zLB>u)C+^xT*9rR3OvF{28P`+4Tt1P9@tDrTD&uDoYEeh74z$0VM_cvv(aI3DN25%@ZZoZONiIAouqA>ynb75P)nJ^*vj07SWGNP}}|y*P67 zT_RVtMMYI0H6 zkLdwj!VEV*4qv>}Nwcc3M~^PDq# z*%85;+L9TwO_ob@Z3TeHM07M`nmgU;+SFi}I&xQ>tY6Bbcn*>KS9;()_2>R?gLsT2 zf?>8)EGF_%6%q}zut+ul-#~`{6BO;o-ZXWgYelMOgB>fpQBK^1Lwq+SBIN~DMo&#q>^I@0?NmK%Wv-1q9QQ;@w**M{7Niwoj3#4J_ke2 zYx*1VJ#P~To&VvbWC54Evo$%^iZ7N^tj6ZQxiwk0qE(bbkP7&&lTL$Mfrsmh6*QNE znEvCW_F#tkuPa1FiK=9)FMcWYXI?QcE-zJ8FT?ZY9xqltc`#Z+cXx}PfCf%EI8<0= z?Syq~q_I>LNfbC*S&y(-C?d+td2|x9Ts!wR{RazUK0v3jP#uC3Lih9BS+liS{rkT% zO}BE=ed!xjuZ=-GzC)E)NAA@>-j?O(srCKezkoT26o@hEubyX+M6WCa?r9+y z`;Sl~Q9|m8ToGN7UWi-EdlOLc27d$Ph?z`q=~k>eRYg2I_Ol1hoZIvz127H(-4k(r zRw6b9yMpC=gXJA4;NWYszWgwHRKfD@pdXbN+*tPE-B(Tixrov<$b?G`drYb$2cHRQ ztocDP#%^`Wpga5wvV4O-_jg2xJ7F&ju+`8P1#5RQ6$GC3uni|a{tk7qybg5UAjVz8 z)vxFZi&1=k31!Jqhml}VCJXptbok|DYK@0w$(1JM=lNu!WLwlHrBt<$QCS3i%FgBE z)r~q=(bWd&a0xu_CAaCx`e}*U_n*XL-tI3!4>MNCM3d?6i0sBWS>^_eh3+3kWlTt` zl{iaqy_n~_DKNbn_!66MrdYOuXXdi7=OWi(sU;r6Ae)W8w3;dB%dZ2BXzmW1jk{G~ zyiORn+qGGeMF8O0j9!O4f6F>ZW`2#H#Q#l`;#e%(ypC`eAsj^I|#-^Y|V7S{D6V zWo}13^+Kq;(*=jy6IjQyv6Iso>Uky*(JqYJG3qz1o@b{|Nbs#JRnPsJQPS>HJB$yR zt=h654I>Ltp&)MDza(CqnrYTRyp3B%TBWL-;`DMt{Te>9{6GvYaFEnvPvlDKZKrV-ygUNIDrd!HlXPTVZF`iH13q_Ph4t;YM20@-j1 z`p|_IY6CZJ9{l{CnCACl;+IACaPULf4m*KXU#mRt5Iho2v*3}qbthHdb=8D#;&>wQ z#tQxV;Tg)0)338W6+@5uKNYF(Yvo%XCKRVx?JmKw1)wTmj`P7JXWH(Ya=285d-1EvP(mY?UkwY^z9W>GqA62#)Jzk=t?`i4f0@;qh0#@E#2QJ z7Yc%rKqZN#ii-8Orxws}bg2*9JhgQ^4ea-1`n{lnS&a)A^d2j`3p*k4sboDkauw)C z6cKN5{cXvYSuYjg&t1IcSg&RE^OG+Z-^D$ViIu5~Dy9Mf4KAned_6Ys%k1CZ=&`ZB z`an&QylE<9M5pLs>SFvNS$}nyQix}!$vFye%)sHoZ3v5(KHLPEZ3Q>#xT>u z=wo}s?2%Vwf0No4a*nB=Kk|yjOJWdAa8;tA@8$^C8yYqj6}Lsj0{GK6np^I^LH<#p zGQ0PKW#{Qpb?^mxkh+K|nuy^vUhW;+882oqlx5q}mdI$mq%0BOt~k-0KV*Xa_MBd8 zNVQ{?J7p6K3=u{~BhqE4Go`ebO)Q0$Sew|N>05!NSB0jpAFlr0%JvWZTK1tUOVnmq)4u{-Lmu!(0UbSstkm6R4u2nT&CsXyhIXk{`lSBs z?k}O8e;v368t*C%oRV$5TVm29z5H4|vKpZl$C~;jq78GtxvdxTjH=#tC>TAjX&4wQ zdTW4a2djW%>TI}e%7of>PwgcVw;)}tPUxKs6|{h0U)x~6e;Y4+H zyaZLb5b@kDS+!Mcw^kwxzsq#gZo=wpL9?;Fi+#)6wlqG zGe6J)wA?xHj8X5BwFynG{!>576-U=ylm($;$0}Bf`3~HChInMn{SSQT&mf`FP8L?gC1gb&Ig*Fpdu|?=n|WlB z$2cnkDH@-)4l6x5EkTrVd1|qm*TuYq1^=<+B72=lA~dQ{IeFZrK^n&!zw7HQ>Tk<1u>k?mb@aN;?$yI6h76b@_|1_JkE?O#<_ zb=n9%Q0z-p*_v*;Bmbp_G1QS`W(_M7m%tc~R4>7cnQKXfcnnVInk&p%-;X?X*Yc1X z?Yd5W8Y5%WkN7Uj@4@~guYj+{+KrRXXksJ4yBvh@iIlKe?14+w9Yja#9V6%8Nd{Zo zp*ilrDopoXm3d{ryF`X)V{V>8bA~a>bDT?X(g{{jpu%Na5=@H0KWr2R5DWNcLTVE!TAdkOYuP zd+yfjI(;c`Fa*)1_TGI)`1Zvy>EiR%O;_&b|a)Rr5 zF{x4Hr`ou)SY=~IhRHJ5Xx%Ksl|xp$YNC>GY4S$-5z~o6{3c9(RZkr;$uCxYhP~N6~k-&=!1`7ppP4Uv$Xam6Ht1W*DbJFc#^o#CP6CJV> zdhbVA%#4X5=L$~g0e)WdN4V+v34sW#xBun zX$WU`PHXf#U$I9<^V~D7lV?X{FwcF{P&53RfqTVSpZ^tzrIpEGo0R1MSdjl^!;ik$ zbEu)2mutyXR3+GO7Ls#Lw4wxUS0+c$r_%2CyVMIlfHI z?_8F|w9#fh2zu0|`6@E1A!}ANUo~vWZk$%_U+vkjMOdUmNolAhkU}l}$SCjhHZRM# z>_>-bLxHRNgHI8iOJ9+{Q0ioH*j|!yF;JI2*7Tos=}0m;*49W{5~$Jfhv@v0t6MA zOkTer`K)x+q+>N;janeGTV{K3rjuNQLjv2z6(SZ^4_Pr%)b?jh**Cex$WUOqV(!>{ zR|mS0>)es;G-hWz$5*em*``;I!#35kZ(4SR;mocGbgr%l^sNrvmF@B;cCAkn`szM7 zEL&ZT@sE--8?|o^-IncC2XRoo;As;2=98PdqGnq5Y5;-vU7?`c3CP&JHC(4G~FMb+W&_a z!M~$VJas=ILBw{{vx*L^@JtxqLo4`g<9}a;XW6bv6`oa%6`tD?(|;o$PVTDk?Ai8P znRveW)1&m~%Bl*_(QVVOM*O!rt-|x({A}kz@@lT|Tp4{R`^|26OGL}T+p^up-aykZ z9$fr)1{s4C>JC??qsMA+bQ>jiRCt=gNz=theC7D*S0j;M{fg9~lgfSVSw!XH#T-n` zq+*oTbiR#;B%+-!(TKvd&{^xLTwL;IUNvOoxQI24)~u$`O^qOC`IEJ?fygLkNuIpW zu!#FD8%0)dJ!>~UG+N)V-HG->SkQSgY4#}ac=$;p@lcJ_9&x{8V~iq++J^+HMDNe! zD4o@gO1MhS3WpCR;zNOj&ua>=oeuLkH7ks0uG1dwN=s`J9|>Q%9a{sRC8UMZT9>4? zEKZ9na|lQadq0~+Nhuz{0Y5@wb<$`FAjeW3S3EP z%^_Q($Hr=Iw2{$?@aKbTK9l0jp_oX`hSD}hjP|rd+#AgavQgULc^xDRevPK@Zp}L; zy#G6TDl(^-irn)y(F`u@+Pj!PrbCUiHVI55P)t(f8HWi8GEDl#$xB+e_oFdUoDfhs z>cUK{NNcS~YpO_VUQ)pni)jlnPH*Ze0Yxw(tOjRoLm(O!cLbseW!?^DBEe5C!yc`w z^XN(}J4#?0?*L>U<6+aKl5#W>=CPpW- z73v;7WKV0S_YVmgm-%Ej=W$wl_|V|ACRqhBd3X``t)&8NBXaTAxy=&HlexwbaTHVF7N#q>(TH7HP>uk0 zfMdNq+$E^U*c!ICtK8$TICHXEvfhIPG5pL`=`RAsv5PEj=_~71);F&(BJ#D1$S@mO zEmYXiSecx*3$OQPwYf_O=QhF62B%?-qH7@!-0r0D9jilSZ>RO%d(pWlxat_3jj))}{pO&$ta8X?gdC$dpJQs%t}B^L#Cp z+w}vLDJANk%?~UM`Bu-jvubs9%mZeD)Ji;H-qG&?GlcxjL^hfm_khV+tCv{UP;`kd z1H7JWH8EDa?|fYFmWn&hPPt+w2FJv`YWy5>>f>lq4p{C5A?AR7E>`EsGuYKBmG-Xt zk#j>F?{14mGcSsWC(CG=v?9Xb$}B1Q4Hkwz#xIbuF$+J?4c$KfAwj`$(U3v+dBQpo zsnLA^wA8dtgkOHamJ~E)WK4#Rk$RT(v(6DH{XLq_;)$-f=L)|*!7{(L9`DIxrfBA5 z#5@hp%93n5Vy=l7?=fAobv7p1+F`Dmbs3Y^V`qrdE&!SWc8*}!V-LfAu?)R*JVq5K z*-k`e(KSeTl--2@KczMgG7}nO6MX}q!{iv+=(RHPS7XKnlUdIw2Qdyicrjb+aslr@mMj5 zJvWSYjhUYJ_$lf-H2c5!sa-xDD0RjYZPV6#2gG zbV%8;T@CyP=u2{A>eO1*5D==6_ny7TB;zp_(g?rpM&zVF38|Hj{^8jDM;SUOwbR6 zrFwN(hjjY*5*@^OYJJx*lI{fS9ECsuRte$mcPoFmUS=GO;S^8$iytn*s*Gn?z)X+* zA07!Xm{k65eOGT%S#$dwt|i7{h}X7AZ|8oOw$LS0cm^?;=aA%M6hvmDpUJl7QHaIJZ|*vFD&R z${Eb|l|RzA!!4LpVjiqW3b>1a+m$tSH>)dd2O%w>6Xc3+ErP^gD@xiTE3?}+d@3=J z3292geJt`yDvK&_Tyvd{T3)YgU9+_ae9~0fD{D!km1Pw-8hMpBD(fkWCl!@gcJYqE zp|Yr|T_!Rk9x?<^-;TfUE-6ICxw;1a2D|Rw#QZz@f(Q7u#2~|d->#lxY1E^U!R%a} zWLa&Ie^fsmrgZb$wA)YP=ydvY?!5Nqh7L&u8>d2?+;b+m-#`6KQ)ia+rKVHTvW?S8 z#$ELLSTqb;@g zGO<&PKsyorY=5Z|<6Tm{k(yoQk0q-ZF6R3}Np%J2N@IzbB+-ex_EkJ|b8Q#>K3tN5 z-vGU(pg5tGa#iMspxhF^e>RoP%6ndV>~lk%n5%0ec&-#`Eq$XQ3;3wc@hu*Sa1)#k@RUoS&vpdq1I>pFd!+HTbiboH9b zdKyV8f3L1ADZto;`%v`1{F5&wVSKZwOm(s-f#nJ7JuUdgT~cLUgG`yfAjk|ito1MX z^R_J0YLgOh^6yx~3Wg06L!2x?7FgSEEp1zTqb+E&Wj0RNT%7WcT9Yx0Lud&MW0uYG zz^8h_C=pC$rj;&ElS_EBn?EdPJz;#4={uvt@gAE(8q|%I_?cY7$D}@H=R}sf{G%*a ze0%i|JiR}YcSd8zgD5{kZ!u$gKI8mfd+6I3U*vP=*C7doRGZu2;tkC~W6%5cZW3*w}u`vO-WnOIkhFh|sRO zO4_h@V7}3uzRZh{gseqR#7xUdYZ8s_cArr)9R}&BA^oCje#pM zw}0g`=JUV(NmC(pg_TAqt=j%J)h^%I-FESE-Xp;(Kx1dU2bJ9~-)O4u>be8MVYxNc zk#c|l)m+^Xh~oos>bk)bKpsd`8%7>j#9B)V@&8Uz+}w>brrh82VdR z`)}$?w}{5Rd@g;c%+QAFo{dY&u+C-TA$syRFzmbF0H7o|-PB58kg9k?=Sp2#;+Of(!0(FhV46mZNda4s$$!6KivNXEV zAaT^OPGh`A*WU>Zh>K2FeFF;*LNDcTt zyZCem;)GhVZL7}V3qCP1+g2GyHnQeWA&>^y$HY`uqKJ8etJ>x645Xc|P&hWbisYj- zT)ju@*hhKGEB4_h3w|p5~n@YQ-*rhnNij#qZ<3qlD#9cpbFcz)?$UQ z*@S}GX3J9XNaRl5ouv@5nGqxyuUll?0-_x6^3AKld44Fbc23N%hkF$6fSo^B?!Xw@$T1PwP5j zqrU24()^n5@=Hytr|rR}f0T5^Fw2N>lU6L54^?3$WNw6UB;Pjelc@_l`<(d3IhQca zS6jx!=a3!qbT1vE1zJ* zL8BEK62^yZGQAmgKktf9DAPW=(@OA3Wi#4BeH-2i;kQtSVJg4I#PpwQ6zY_%2)3Uz zG2&U4rEx8^&6LugR1kp>I4QzxRs_osgH?Dwnm*E@KT;x^7UF9?#^K%hdJe=RynfZe z_Lzs-qbo|$NT?qNOVMeN&m?1lIThkmXFtg}5Z)7JSQ~(`!x(fCeKgn}_9;B&Bdyeb z*HSC!-Siv*3)Ay&^}=TD`YsPcr4qe#mc%GW+L-)Xk8W?oX~hG8P$^U+on>b1$^w47 zy%+%xOR&`HEz}X|us&fGd>C3DT!6hHR2m~bX^3J^8ob$)1_wN8h{r?v${(w`p;wyQ zqw%88z8GE?*2pE=g$32QH|NglDR8mOQ^vaNF)>L=HIiMG!^0J*6C)1B8`}ah(9x<&)**M&Je$4`Vv~1-!?V`v3H6mf z=KV_Br7dXV@$7op@Vc4T`K}#ku)@O?=mWiwEtGz^-}DI@Y>h3x=nE6|L)G~OaxA_W ze6nD|gNLE@XkB=IFByK`_%QSVcA~7;ThfEaT=>rafSpun8AJv4X2+0OPcuKdblTUM zdpxVI7>>7-u!=-#TnV!d&d~3)wR{KYUxtsz%Z%BK`xEVuH63r}ilZ~xbXvT#L1tw% z7Bn13!8(fm;8BM66oRqIG5nJbL!=_S0u2AMFzj@SPZLY^^fu37EHo{$ipEF3P4u)N z{_yLd^TW(cXw^HcI2@Q4I2iePE}2pcJV zsV{Jm{S9cF^qmH7$ff>906cVz4_6(#S(hkb_?lPv!C_#Ag# zTY;#<=hf*=Z0N!c4;?%#^KR5UlW=ZyKCGf;`3q$DNC;&RE4zVVzmn!VmC;f@G#0-F z(;V|-V-aLoX<8W_fp;WONT7@#eNC1H%IH!-X{sC3Abgr*L13&Hg>tDjt&WZ`et#D4 zCE|r_T0e)a?Kzr#Qf`*`=)6UK|EJ`mFIxBijeKV0dqh4wEYI)%6Zs@~bkzTw0?C1A zKU2RjrO!!t(PgC%{j|f6!8xxz|C~!!VA1axI$1kXGq(7a68(s1bjZ3Ndv__2@K3(l zP#*N%JATe*aOmBou1kSM-y`f>6w`c6&6nZT6!DgT7Kzak{7@OYwi%rHRX|S5uvKp86XWVLq~@9k zqaHS4cGSmc*U;4{52hWL6T<+p5tW#Lb_)Fkz7!1IlLCz6&eXg@`7)sD*rZ&_%2Ox0!y zJDIvc21r@g7mVr(esj~FVA<|_1a9$5TQvUzHAc^BFdu!krwSkdIeToYeOSmID|(AQih@ z%%{^7L(S2ie)u^Pn^a&zVS-hx(_me~b$(ij?Y^?S8@!GnQcu1(tOwz@&ehw}hja38 ztXh$Wnj$W;ul$jw#B@4sSYXYHK-7!;c{gZb(26_`*Pd4UkwaW)!Q%ow0}S&sEw$Yj zXlJ`G#v;GS-n1AmN_M9O-#TpLkZDyAW@&m>^*GZyD8I;AburV(f5706`OSKooQoCP z$*}9sZV^5f|hBGwBP_oGM-Ox#`*AJDhi!OK`vL~ zMX(Sor$l3?Zw@F60-TDCy&mD4;1c0IAuLZ#Tt?SME`}bXVCMq=FzA4NRVfKP*>?wmr z)kqsvV^1QZ()PS+Dj=ghGOG`_zmAq=MK{Ze%Vmb1vv2Rq3ouC>iQ;j_o;>fFp zSJLR5Hh<90ScAx$Hhl(FHTQ8qR_ENuvMdYR_m5nxDJj6i>)ac?E`Ezs?Qx-`dHAmK zi$9dm27VN76vD@?2zRm^T$+Ew*0i{LS=-{6+XpJ1;)A~ew~ff%3ND?L+qflfety{F zdz1NiJJ9T!jZ<_9ZyBn`4O(Ti7 zQDstIu{r=ZF%=h$9!Cb_+Z^Pl`{KDBFhIA1Q4A~5EQncFQqjW)6XG&5^X2k(Lliej zSVCaC=y$NO=xOd;+b<^AV4cXfmTmE*BmL@qTirFzw#&8scy7h@J%_~}7i$JT_PFq~ zZH8@8XDPp9MBUsBz#p0sl>rwRR1Qn(4Z2N^RK1m;fZ1l3>jA^KYNJo%glC3gf zczwW%aNl~{pkl*aWKdX-&fXUfr+zAeJe(l!0Wh&gFA8ty`>VlD2o1njn~}#Ad~QL1 z$M)bA(<60Xq4IbZTK4SzZah1BREb>xUJ14N9n=YlPa8e0RKyzGCn%_~e+jzFoPmv7 z(9_CkZAS~8p*frJazF`vPeO0!p*8E4TC0Qhc+FXorjAJKs%#Gyn;yaQrK?!>|X(@@v8ViJ~5d?%gQwxYoL@Uy2+ z7h;jeBac(2^`?*W?>)<}f97${<9PlNGhA;Zk~~B2egyi91o&WW9@+SE4M*`R5T2~A z2zrLQ<)A0Z61@VuCH$cLPCsCAt^QklnFp-SU|j*r0<3d&tEbQ4qpt{hio{6zJA)?# zXlmmGbj!;giK!l# zbRPkx6ca&EbejQ6hKHqw_Jwp4f`&jh5}5nY+mfive~$kx4di|);qHGW;l727z(q73 zP6w9@w+?P6+(Edra6iDA?U!&4a6{ny;G*Dka4X@qz9z% z+8>l~J>gv7eBi?2royGeWy39oTLt$4+(Edn;p*Y6A(I1~3!EBmJX|u|Jh-KB>*037 z6~Y~dqr)BgkipS0zDEF$EA1H)ajk0r_b<>=w*aoISs*ucX8;%N6v)S;pW>JRZg*e2 zONa13JED@cvZRz$ZF*dqR+f<@(}UJ!X3WftOOvH!$@Cc+veb<9nefPxU&rRT>xM7?t=Ys-*YJ^s)?{HeHsLoRY?8EKADBlx1q;5|NPNWEfHt zWfYBgP0=WHLV8?$s+NjMK%ibL)23?Y024`~1Z`H9Ql`z!M0WjBQ--w2ONcK-lg&-h zC(9Bt($XNYY(T%%tO2a>7HP7ydc;ZBXJ(`dRm)V#g7ulHuEDZ+ZF1b46qJ+}mjgnU zl0GLcHHE6M2kTzAvOsR@paA5?aj_Ev>3)<;1>#PH(+hMi&r%}aGQWTfh5-+0rv|0LIDp7SOg@!o))kINcyY+ zl3wlr?SN*{jFtkiz@BpgIs!w0J%EV2PQ`Bed_{nP?U{(4}0AUB!i;|L`A{DA#{i9jdda)I6p z91OY!Naa2O%7C&dfxNLJ1n3M}2OI?40HjwJ3W3y)OMxALRX}Q=V!Jd7{3k$)Z$Fjk z%LPdCgaff#VPkx;y@~BfJl|qFNQVBYJ(@v(bUu=i9xo(tGiJocWoZ*hMEDaDwF#*} zU0hZ|Tq@&X?{D~tm@z}2oI(L0X3R*6%hHSfIobq$My3#r@<|nm88ftT@hKEPYi>%C zeg+vVM87-l*Xc7Ap5SF_v-FuM33>`Qq+__4nXXObL@o&^OV`c?aI!=UY2UMm`XkYNcm^RHUk~P7;fBJ|2Zhy0St;}#Fn85Pt+#G8B+P-T1+NONX^JHWHPzvoW^DTd3qs#jP{MmQ}j%~Bve!R z&kb%2XQDqpm)JQenR)|ipO})RON~p=rfJjlxP0iSe%fT&--ysWPLpnAO;R??v+#qAj#JJJhakM zlcrn56LtNkv11c+Fm*z6Pf1VFr=Zu*(`NEh9;&+-hB-`jioRL17GoezW8MC=h{ia7 zD-6}~4?6pcd|UKaeKJ2I6S}Q9{>b|Dks;g0@dzzpM%>)E6by5XJU@RmCyT;3APdoE zC1j@PShwb6LDbcQQ{%F-nuW;X^fKobVS$;MaXHYJ5H&0XT{ANwIj317gi?4$nvO?(sR->3|TUo%4X@%1u4;TTqjE5%%%l$ah#4z!RVQWnX4-| z7yfi$0+)dqtror{aN^<1Hzp0!D zM^}y3`SC1%el#pKD=-!3g>mR3?;Ho-uuQF%X9@Iht$t!$s-XohQsmKflH!eMY?8s5 zXq@Pjko9Fcua z^pojL^ppKf^pm+x^uN~3Plh{@PsTvePxe63Z-cU_Pg%jyxGj#>T5brJ$jeVQh0IV~ zUn7{201Vz7f~I;IGDhX9FZ4y>ET{4~yWfunv+j_N>2`m~3mae`EEj^gcuBe~APQTP=&3Xg#T>0ZblN+JF1Netw#@%2DwZ6K$ED~EGTV%Pm>;Ci@A zaMGE9Tr6B69G8qwlEKluAQ7m8D}?*IIYJ_0=y4_2W3G?}6tDLGbe=$SjMQf7XqMoP zdi-6vshFiCAXX~U&*NoC0f*)^i`U3HO;C1Nu4QuChD8c&1{jDr1?8JXg-$3r%i%9V#%a!($e3jXS2gh zNFb)AGtBhxcV%buHD~RFQnON7>gT7Wa>S9%74_9)Y|erXGf^g!BoVck`;TRzvd{>3s{ z)`N|=ftlK2Fr5eLQnCWaM2_Icaw*c%ZAx6GHj=k`V6H6zkNAIvG`>?fT_Xs?gGa~d z8dEpplX*ou2Ddj+8R5YrLJ*Z7>jQPVh>X;fgdE%z2p7R9ZDv|ZI_xkR>7%v!l7XlXn z7Y#@8W8sqFba2^li{X~Tt%utRw+(J5Tp`?PI6BXCRKQ;YXN0SVYk=d@pg%Y%oD5D5 z7XTLpmkgH;w;XN_+y=Of2c!evFw>9);{@{3Yt!Pj zG(SO}8RSF0B8&2G^aqZ{k|ns&qlYFY4$a~7NyOnI8;wIoo*W!pSeP;`O_`NNz0A%?a_*^L;Rt}A{RE}6*@{^rJESKg(VwwD@>E<`t={+JaEup7uO*}Ts$65Ce2JvnKe5#Ej>f`LS~lUFlTOd&b%p8u@*7*&%Q^!^1|592Gu#%vii%8yPiW;-u)9$xQ!$9{&Fd{d28GKN{u4 z@z41=VSgM2{~Ja?NnYb077G5OLma^f7fG7_OeFv8PfXvuKL4z~%~O!y@;T#wM|{IY zio1HT6g#Z(kaCPGg0(GD_{|jY<8tUvaOW^$);8TBpX}}uszTSBs*h0 zknT?#fMlEFUSexHEP;+5)%78jxZ(ugC4={W#TLY5|+6nYhU_an0V1M9x-~ixeAl*!E1Cs4< z4{$KB5a{M9$-rzN&6sn6 zF9DYVC1?Q4fhNH9KvUpWpc#ZI9{{arAp95718smdKzpDA z&v7{h^9z-XW~FcD}2)BzoU^MNYh8lVINa^eH4i0=b^5e%5IK?7}ok^tz7XrL2e2;?LTgPern zkdrV1{S;_6AN>^Q0Mr4QWrKqSfGihe`;6mJyw?un@5+hK?$yakLI>H0=^!gHL$a6< z&EnDX8#NbwL21gY7efsdeill+Jq~v;B;-Kc0vA7_}LSL;k=E8+Jh^u?sPq;HbMUJ@Kd{R z1sBZ}egphrumrL8L3}EU+6eih;HP%simN}xPlt5mr#S$%4_C|rh)->VWTyP7ow&kB zaj313pYo^nLS<1LYBN+{lAqd*D{4;pWI-dur@B!4afJlvR`65WC_XKTTvJ;V&lj~vSHvbcDclvY>HKE%^r+!ZHC%8`DvaS!1N8~fPyM3F&)OKtN&Q3Qr}5`Pl%LKc^Jg_nOZ|rQMrjjx znTO*{a_ALw9$8;teMwAB^`SmRXE_Ej#lA(k(AnkC!dNYXcr8*proP1Vp2q8R46h^B z4@Yq0_&lf%!F>B;_EIJXjklC@G~%#+6~yb2^%)kQ^%=%b=j$W(8PaKlaL$;-5#Tg$ zL#z+5e%rjA1@m=GrRqQel8yBfcD{pneKkLq&Et#p59Me7;&>Cvw*_|H3FF%-8%yxa z2W7B22l9QF)tTv@)j61N%UOcfsSeG{WAd>&h-F9cS`y0+=g$-?JCc`!l^rgWM{R(W z!O9*k^i9$k(=i)Qf&@9za6J=yfLKNde@PD;Q1`y(fk=;dV7Ap)Qeba5%Z1W&n?TBwON*L z2w$h>d9^$TX?(A0DdSkQT=CqF6#P`jiM+g77*&X3XHG0XMyLxrC)5{3ebE?CX(*&+ z8rBn;%t8El5OqOg4(n$ldHGqKD51?!>9`kYj1$iHeX;IzkIC|3Et%yriof?{aUz8N zO8ErioQY-Oex)((1itODv_Z|{M>OM)6V4^&!$u8OZX`dVFn^eEUMLPdn-*n@;N@?c z&rxq8J!SGp_rjz@x`%fGu75ROgJ_zy`P)Xb&VEI{`lf%7Ht8WMd%B`GGC~k`1X1FdQ`5Fvyl<35*8) z9xxGj2B-t>1kMMR0ha<_1Fiuc0B!~z1MURw1r`Fo1|9{L1IvMQZLb0r0gb?mK(bj` z0Uv-q59D6M=W+oyz$-v|;7Onp@N=LXSPb+7UIK;zw*sSpyMVF4Z-A-5*MZr<8sK8! zm%vrPv%n3&8^CSAYrwt0>%bylCGa%xIFM{meSsCAwLr2hk?pA#bSjW+QT>7Spp$`Q zd$R^U0UZt`ThkDr6*8pX}_kk|J-9R58jX5E}FMtuigFvzwk*#Vf z=%qliJ$Vx!G}(;E#%BZ6gQmFv*|vrPb3yBY0if-H%Rzq(To0sq4%r0T0k?u43nW{b zGjI>+S-@=2y?_Tn#{tQ9*dAC48nml;RsyA<7Xd91zXOnLWE!9&_{)GUz(@)Q-yP@!ItREJ@%sToK+goO z2kium0G$M!3S0>!o8VwzGUzm*9+(d#+nhfz7xce?5ujDT<)9Y>8<0*8Tn~C9a4T>w za1YP`JP4cslp7nfnEZf5Bw0g z6gUUC2DkwjhIHM4n?X;ZaL|2#J3%J`3xS7#rN9zk1#l102rL9P08are*9GE>0njJX zI{@uLPX*Gw{dYho&_{rNz^{N&zz=|_z&C->NY@>>81!4fRlsRLDeBD~#m^CBrh6+k zi%)1ae`g%_n~HGp{*i1Vu8@rKWOe{%C1UqqwBD5XG~b9vDq6wWl$O~FXl5eX3KDqz zP`R$q4xL+OH%R2K=WH%a>4{I}vb8VFPro9cR`xdeX>4G&3tEFoJ&fi(bZ<739|zey zERG*Tm_MGEgZY`YOZ1aW%+KUw{uI7!=AXr%1LjX}mXD5a2aL}wHOx=zal|}X8)E!< z{JCfIHabJ%T#Z(Tiv9%t`p4qXn%5?NQ+!(OD)QOdA{L+No%v_-I%WQ3{+uy?8h>42 z{&Zfa%+D-LqM!6G`kTtt@oj?f=?+nhV`#>oBj}CpF|~r9?$0TeXxB*L>&|RL%wovw z3(QK!?opU!j``X768$tEV1D`){i*!9X8bgMZpiM{S-H$cz}haeJ+XCF%$6bY>AsHI zG{!6B?8^U=pX6s2OlE(H=W(ObpJ^-OU1&;7SKGL=;q<18CE)rPugjs$sS3o z$0W7tYaM@%-blfldcO2e2wdCHw1ey!s3ikQ$p5{j{yqxsf zj9qd-41k-A~`l?xp@=BYor?M{WAkk~6bx4ko$x@*QGo5<0nG!-W?n zjyzIwwGAYFb;vf$;7_;Dcj&z`;Or|uw>^7w@qo5<^GnwB+clyiQU^FxUya&y`fyxK z)s7ugPuPT*|1z`7!Smxk-uK(U6|csw8N`>-+vb%oyKY_i@x+fd4YyEyI%-B``SZ=y`pz*$?LO#nC$(~r z^x`e#CtcEWO5E7=ltC}rJANBsHrTUz=#K*;65f2F?1L`1N3L`pV%aq#eS|}LH_~>1 zd;fr4W)Yb^A74JdX5g1+rX;N!qS|t8!LQn#k=N(Gy+yVs^6}y0JNm5|HTpXo2>27 zW5vvpiLzd6lm!Z_w=Gk2UmeoUk<}gT|Mo`X%+Bdnoi`4?@BTukabbtfZn+sc{w11; zOTWxs^T?z~-+ehZt$vT;__dGh_E&!UO{T3je3bLtE;SF+j;szIcdl&hfC)Rk{d&Ny zZ5uxL#Ge!yFtYs4gZia?Upkg%9i3rzIJjh*YeSf2haVkdHvj5e|KN<~{UO~pzwq_J zmqSt(NYWomH%@fOF>HO6<8FMq-_Njg(d%6_XJ#w+F1!BnJC?&jM>id5;Tgcbj)^6A-VOH+I_AvmSxpj!jFm?S0>4;?0Sjiu=8BrOtVA-MWi&RU>-t zcI`D>=Cf?o_V#OHF2ih{%ZjzRfDpV-*%r} zdFf6Iz=RQt<>-&JVU5+-qW+Sbialb=qNxz_i$7LH=x6S%^{xkC> zuEBd!41--=7Ek&>`ctoRE@0k?oAHIlSxYOVH`kvjJvL#Pbix-g<(Cfq7VWmE(6n1< zxT$a1=x#f?W4*pD3eR~rw@h{3^^@BTebT1Cwan+mif%b)Gv^%7-n9Q_&KT1*wfxY5 zE$we#nwpxip!V(WD^-u*&4`~n&a>dSF=p`f=<9yxqMr@x(|P`+Z83)L`$x{4+cja| zt-2Z3zkiqFYxMBiY`*Q~{caC~ZF}{;7CgCP-7npDZ0V*+HiH5apDs8w)U0gOp1Z%? zxH{(DSF^5J)o%E4?96tXI)C)_=bt}pzs@IX^^p;Er{5SnW39%=_Tgu%Wp>`#=f4R$ zUwplfy7Q!OK7M7!&0ppgoc#X1DdUHl`j7oS$Qt=_(&`7}twN{W2->@Qi05bTWxRJr zlRnRR@1wcJqsmJ!%&ckHwtJ?kY}aQKOHM&?8@Q!@wR9hk?)Tay={>VUnThr`#fq1I+mUTI@Z)h$eBY?+ z*I7O|yls2acU68*oew-&IyXA_ox-iP{#i%v51YR}UjM3X?{3$2fAQXsPwgVMuh`-H zLy+gXH$M928_Cm)KVQf-$=U3U+$C>sh`6__>V(TKe;@DB$Fs_3ru|^C?d@?5_f3y( zxiNmTvaj^YM_Efk4peqLXKMel?rmk&c;om_Z;tt`Yn!1Tj6QVZ$`0$XcjK48cxV6F z-T_IMxctuV-ZFf5`u@P7i}OhQ+OBgGfBWU)3;uI9-yUkWASwKT$B=u4Kd)?O+bLyD zc-A)C{;>g_B!1RQUpU>{^?mQ3%C5e$*X_%o!0^XkrvX4Cmy1`p@(o7X$*7oj{GEYa9$0He{Cw_%_vgOX_t4fwQ?{HQ znkn^qDP-fJ!cIrFjd2ez+vV}j!2?fs&T;P@KE(Y@C-vUdPj!mQsb4O6!!GD|httCv zs(o%Ai0^ej4{}Rl=ZyX8qT^eOVW`uHSb@_8Z#T^>*peD|S|=!Y!%`%d!^Si~Z)x z$>W2+NwM&LxzOpZ#p_9R=_9&jTwC$FVUd2i;;r;!Zu?d#js-cFuFTo(biF;Dq{P7D zx0YUh(Sv*;N_VmX~bedipFQ&N~ZR{6x%~+E%{f5iR#4z7?*LJ9}^^ErGx_8aP zumN99>OX(T)dIujRk^B8UtDut6?QIdp;@idn-P4OCOCzrnE#kraT2q3oW#5%C$X^S zOe}hGCT;q0CfLQ;)Y6MHwNi7YSgvAbJ)SdbI}Iz9QaE!P183fD5og|h6=!a{iLtOY}@ryZk@-3Ad z;ck8DjXc6}^hzF(-o|5mVSa{CE>{Xd7(;V;1152Cq-M-?qkLK(^<-+rQLpi!0TPFZ zjB5I&?Yy6J{Sz3}qV`fgsrC#%riI_?q zz_j|)ODs?-#93d&JnI7((uV2mK$~i8S0uD9V=fn$l|r{HTwFp1e`AyNLMFSR;gg6G zvGgr}Ypu7L&ewE*G|tt>oOVIG{>8>g1sZetZ%?ge`}m_nT;Hu*qv>&DwN3UDUxcey z4!Qc4#zB|<&iU^6ltWR>ql#UdHSc2kf^mboBRt{wqhH_CXnx7N7q75H_)jrCyMCy- z7IjYJ@D;w2&Ydt>rQWXj*TwSENf)qtTR@4chx;x~uaL@yYx9tP^Vhl#&U-X-B0hF5 z_!)HUy*s@&e4@EDA+o2Y2J#hYfA8M;GtJtW%gu7X#kWvmkL3<{eXr){_v6p(Jc^y! za&J%1GXFxeX~DaF&y{pVej``RoxM*pFMV@Iqp2g(*N$oXb)jZa_?Xi-In*b>sn1@I z0~)VMGd*?p6iEMJ)E8^N)SMVI$7y=|f&N_0ZIk{#9MqgTHDuAi^L2jQ=G5Z7L5DQA zN3ZzV_9k|Li=Fj}`HI7u59jXN^8QNf5-0OJ_I6s4CiK@EKd#8bcXYYyJJs!qHM{Hc zPldkH)1NEXch(dZYc4%|{a&}W63}DKpN>1CDVpmXV72q9A6N6hQU2(NCNROF-HBi1 z{#--Nv?e1r7dLkEZZ$26Vd)UMrs(tuvoWy^}=n({Z-J#krc*AGuPQln)jG-sj$ z;mC&+VQc(2=K8ky7m)b<`|9|5KXThmW!UYas^|IRuOq#u85 zA9qTVwLLLBJ;}|hclYC>vpfc=IP+iNq^rFv+0Z`EA`63zAr+)*oEW$yPVb3zCPrB z%0@THZ&Ky*)>+NV_wrW#Qit$WYvx4vI;Y`Qb^W34<2ES&TCdzU&uNm^-G8(o3*RIu zw+fwNU9NelUu54Yv!QR}Z{E3K<(lIi_wRpw7TV*s-V@zkF4ye-`S60PageWYR*x5s zmuuXMsJ0yC5KNl7>wtfE#n#aAiI!hOJ zMt&VWh>yRZ>DbL?h{K+a{#-?H(F^M@XmY&Y*_q;t9SU>X&MCfpL37yB_R#eolxPoM ze)yTqMU8vK7v0``4gL9f<9oB~13xy56RsBm)*G+#Bb$gdxr`REs28I}+LyfpI*e= z1B@1t%V)HR4PzKBVs=*{y@0y!F0lFtSo0~PMXXrJXc5E4Fj~aI9*h=oGukJ$6A_n| zFj_?2I!22aox*4l3pI=uadSsTi^$zB=kph_;s~Qf^m&ufB1*FuEuwA&qeU$0&u9_X zbBq?TW-rDA93tjsFj_>}AV!N=RC|_>FJkN_MvKTzX0(W_x-(it`PXOo^dc6$!Dta9 zVi+xAjRT`ajQ#F3pI*fJt&A2?m&RxjxuJ{}G566aKD~%s5u+QCtI^m&AM|y~9zahZ zS+eK@mh_C6K6%*-sN2P!v1bE&gU$ugZ4G@VlGZxVXCiHZOTnjE%_<<-LFucJ^elHh zXfi8q0Lp-yfn*om3WT+d+Xlj7p}IagXnViKiEO=MHa83`<4MskiW1GBLtM4<4bOd&i+&dtbigG=XTU{V*4 zuo>yvY<*l3c3Y*G;!*!n%Q+&KD~3SpW8t4c;l%6aQWi@{`cKA-`PvtxnAU z!^5ly&-_1T>!!lSwVDY_{tq+#hsn%Nw<_;%(n$y6S-*=A35_n_9ed+rJ5jw;8h<{y z2zZ)-!dLwMs^Ec1YgE{@GKkCMnuEQEp8bPJ3*r_ zw&d~oEpNe#;`3VtUXv_Qe7w!zZJq}CutAAF4*eT#i!YO>owBkSn{RW}_E#o=*flXX+E2Mg;QZ>}|oD%$HNxoEOF79c;m4@ruB!!igKg7wnWxb>8rWgkM)B zoL}m?+)?moJQH{x#H#?WSv&9~9(_CDJ_aZuo`QH>k%ZfWN)8d~wx?9W`N4QFB%bYS z!pCX$LtjrK^0a_NpXe6AU4x@T46kS&-aUZ33ioH>W`hH`j&RMxOPi%9eg}^Lg2w#u zxjtSFvAl54zYd?_)iNC432l+SuvK_-`G-vm;3mS+A(q!XocK8t0tgzzTj#$$=C8wD zr~GyJg~=_$o0q?3MgaE#937&3t@Se|wPkqo^px&OtMI+8^pl^~GJWg%8Fhaho|5&~ z;ZL$#hPRgQ=z_lvzrOIV!-xJ&_~KUKt?Rexoxjfi&YLa6kG9g^gdHuzTc4jrw+?^(aLe?q<&P|F8Qwbmu~RL>Tc_WCp=EgU z^S{snYxdyi5Zia_@xjNkWq9lSZERbHH_t!C4{P$^>@YrxM+p3W<0SkzD)JT`Ksc_i z&pZC}U7P=&@7nB=L?&xfQ$w@02?o73G zvE_ZLmTer)X($%$85^9DsBPRg_MF*xZI%JM>+w6G!}8D1h!?Wt+|027H%XkC#_zk=6f~Dg8=aA8Nagnn9D@z~kk=(4_r`c=usbBQ(RVO* z@6Slp;;X^PQ6T8UG^~o5+$ZJ}(%Hv&5<{~Su+bTI`GdOnIra-A#h(T{kR-u|%uIZo zK&6*Q*(qX%KVfauGw+Ir2XyXkt zXKFJ=NiOnv=;QF=1s!WDFA|4onkfr<9u+!%OsLp=xXWha^{Erm=VE_B&XaW2tgU!T zLa83DHcQ6}6w`2R+#Ky6_?;vn{D(YR2gEn4L94L9^u$PAN;1>qR=9#Q-b@Voi;5uOr{4f1oiPpGzZngSCOadL3acEU6~BM$w752wz=C7O+o zOUXjV650vJU1nNK6gmvo#bOe6hv!=+7bj`Hk@CFO+T?SrY}EttK8Yz#k&bO!AI|%E zVX=<6#ZH)z=5y2VroAmekE0U!GmozaaM_Y!I4yi{<`(k)VJX-piNg7kU*&mYaPvc~ zN!+Vw6VOmfBHxSgr3mhGk}WVeg5%zzoX3WaCjU`h;s|OY+|Qw?#56)sU4;)eSNvC22Epj!h|+Fe;2S=ye7? z)$tiSEBwHL4xpu-liBFSbTyVzkv9@wsKB12{YV<3BQjE`(SyZ}&!3Mn~freRD(DN>)|Ka_ARs)}OI~+3R zR=}5-p5iOzjn9-D>r4Db0v?(9>tqsp?jeyqm;JX)6Qq0oEbgz9QaarB|D!{UNA^Cl zA^h3Vy1u!bwKYAv7Y{K!Ovm2)BYtz)oBPEygbl@k&B^~VEoLS=(Ufm#CdPU_+^i;^ z7*9kWlH&+__fh2idr~X!k!Y>A$zUKWzq5R_>oR z1KGbblmwJ5VamvH!(cUw} zGtzUKr`B_?XOZW5&nuoao=-g6dUf_1?6t*fhu0TgUwM^#UH7W>`oXK->!H^ZFH?oJ zqJzR-(M!=^;i~Xb_$xvc;}nw>GZb1yh9XC?O!21TBgLnRuNAe59~AY9hl(c(6K^YT zsdrcJp5FbuUA#TKRo=ngqr4}2Pw|fPp6zY$Uh2KV`z`NIK7Ky$`JDCn&d2C;*QdR2 zCtsQGWZyjHE@h3wi-E!O(xfQs*>9)n~sM{&Gt8Py2 z-tH6J6Wlv^hIx+ljPi{3oa!0t`Gx0ip4ghu%hJon>wWJ+Z@G`kx5W36?=#;H%AU#q z<%i0ls>`Yys$cyi{)7GH{_+0#{;U1p@c-2Rs{fDv)@nO-PqmABxH?*$sLoYyR_|7S zuKrSeQEjHN*9_EnX+ktpHA^(>HAR|hni|bbl3R{vZ~#u;PTob{T`rTW^( z@;UNc`EvPc`8xSt`62m9`8oL|`7d&Fw1UBIO1Ch#D7RR*bhm|Wue)t`JLC4PTZ5aq zdnfna?k?^@?i1Z-xT`#3JQjI;=27RF;q{8oYd&xKc=;|@ZdU%HTHu%Gx5RIm-wNn_ zt>2q|C_eztJprrS-f%nURs=1Tx}AoWCMePs-z$3h1}KwND)l(^Y;}%$iF&#g_R>wUocthbHNNS}0{188wS`1JD~AT-INI6QGt;|y{Q`RbDRJT?C^1JL;Qlw8vk1VJN^y+9o3`Mv8Yv+dZBu; z`c?H>^?T}K^;PvZ>ISuyroCo?<}D2ui?sx(Q(yTI`BRTOklEDB(<{kquGb>3PrWXC zReAm7)k`rRJ!psG6GgS+JH;;w3-7k*Gcxp;LEcJljdzH5ly{8xbnkrcP2Rh__j@1n zuJr!NyR%OqYO%=YEuZZ^hkQzWN_}qnSosd~o#i{v_a)!OzMFhMLOl+l4PN)X>)YV_ zyRV6|htfsqt@Kj{DrYFul{w0V%6#Qk~?@IYvc?sHXo!riCpqmP(YRxs9@bMJ-zd4YTZEgB zXHSf2eHAf^Sw4Gwy7;>Js(g2&ugaB?%6F9SD|aeCQ=U;)DQ_u%R{pMRr%F)0ttwG{ z>VMhaLET^NgSLE3eO7%zU7@a0f2+Qwu2-9CY%~KjQJRJ5qugdZqefX8d8+(%`E_}g z`(Teb9y@7<8V#b z4e^`qH`8ya-&=k={SNt+`+e*803)Nl{~&)q|1tit(E02B@B8obFZ1uCsiSiVVfBD~ zdAWR>o2|RAdy4xxcT1069vYmUQ@iG*r0e{k>s6$8dP}Kdpr6B`Hc0=R~_-+qCTa52puUjqcD;k*Hme^ zB6dCo%ZJNT$y(pQaq6);2rq~@@jdlT(?-!2%m0Bneu?LOlglR)>M_1-(J6d{xADm zsQqvS>Z6ILw6G{7TV*e0kn&aK1?7vXH*kK-Ro|!-7GtG09Qwsh){Z=$JZ3vyRI7 zf7&^p7uCu*j5{!q!9*_PA~k_rhH^2`Ip=-PIq%P-3keqk8A%*yE*RH^goKgMS`2^mFY6URuwY(KLQBu9@RKjZ`I5oN2Z zAcA+3q14*yy0P!jKzDwB+yFmikQTe>%Ys=nOJ*6bRRv3pt%)_Y&a9a=w-#22gh_i2#wJ=O;Cd} zngUy7K^A#hq-7ecK68V%(0pCmqkRzDh>qzL%r>KQy1-P1?T8(-<95O}Y-XqIjGeW8 zJCBJe+kst0Pd4n9ePDMnKYe>(k3e@*`^=u<`&if^C+tMPc5%$I;V>uVWSp$yJ5^Of zioj2K=m{+Xq;1{Ww;EQ{YFTY~sAC;kJ?jYhdu$D?p*4aor`9=ixqvd4R-P7ch7wLu z!8!JDk{a~irw!V~dD=Kp2WL8@13u&A}4&Y zEApa%{wRsEsGz0yL{-#89X@S{Ci1WiPU(m)61<0Q>x*MC5JNFSCXB^IOp)nlX!V)6 z5Oc8ilq*d04$tvjkWGnKFk3bBNRzjDhad7Iehk%5p!g}&zJSt8 zzAiRIRBVbZumS}uq@jBbnirsV1zOjja}yeOpzjg19YWU$G(Cr&m(X(^T1KJc7Br;L zFAeQ-(5(Q?D$uJ2t(wrOBM;?~JeEUwA}8`xp34h)DVHFQ4HZ?JV2*7?l~QT7qjG9j z6;w%8)E@k}ubQf@I%u{dB*PHQKT)UZTwS2!mTFyZ=&0V*TY6hlv|U>7=$ziw1zpk= z>;yHvubaB9JNi%`>0>=aj!g9Fis>%(5+t$#7T@%?K;sn2o%VLToVN=qFL@O&RQ>1s z3|N)bS%bCM0qY{Q`fLCK8?z}p!wxfN3l`#G9^o-;G6^&|<0+ouS?=>Z(zVP3C5%`%l|awg|; zAww#xBG|6tDglaO*s?Mzt9+GLMO9XTsv;K}s)fC)t9q)h25JP(n1YgLYOWTb#juWm zIN~~iZHMU;*g30xut!msb)c)dt{b|g4|G@ebRT&>(qlaZUC;C!bRF`-Uc`%eaWCN+ z$oQ0(@v_*C@?Oy^djWQ&y4S!qao}~mp4ayV-pCt+#?HJMSZv{il3`3>EEz{17)h2) zB{SGHeC&TkFl>;lChN%tIBjipudkcrHFAr*N&daJnyb$eS+UgG>i>WfbBeBAm{BWc zG4ySK#JrP}Q}jg)9g#yn1n7i5dSF3fNPQm(*+RNck?1j`xR2y+A+4uK=$J#1%RacL z>9m|X*Ak`?%M6_qm~~Kb7n|3KIR+cg@vd=q%S~Y8HeBj5SGg%{5n1dJJ~%UvEGi<6 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/ghc-7.10.shim b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/ghc-7.10.shim new file mode 100644 index 00000000000..16ae1ddead3 --- /dev/null +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/ghc-7.10.shim @@ -0,0 +1,2 @@ +path = "FINDSH\sh.exe" +args = "ghc-7.10" diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/ghc-pkg-7.10.exe b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/ghc-pkg-7.10.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 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 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/ghc-pkg-7.10.shim b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/ghc-pkg-7.10.shim new file mode 100644 index 00000000000..8558f8a0513 --- /dev/null +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/ghc-pkg-7.10.shim @@ -0,0 +1,2 @@ +path = "FINDSH\sh.exe" +args = "ghc-pkg-7.10" diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/setup.test.hs b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/setup.test.hs index 0b0a37413be..b5f6b4c88d6 100644 --- a/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/setup.test.hs +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/setup.test.hs @@ -1,9 +1,19 @@ import Test.Cabal.Prelude +import System.Directory -main = setupAndCabalTest $ expectBrokenIfWindows 10179 $ do +main = setupAndCabalTest $ do + when isWindows $ do + sh <- fmap takeDirectory <$> liftIO (findExecutable "sh") + case sh of + Nothing -> skip "no sh" + Just sh' -> do + let sh'' = concatMap (\c -> case c of + '\\' -> "\\\\\\\\" + x -> [x]) sh' + void $ shell "sed" [ "-i", "-e", "s/FINDSH/" <> sh'' <> "/g", "ghc-7.10.shim", "ghc-pkg-7.10.shim"] env <- getTestEnv let cwd = testCurrentDir env ghc_path <- programPathM ghcProgram r <- withEnv [("WITH_GHC", Just ghc_path)] - . fails $ setup' "configure" ["-w", cwd "ghc-7.10"] + . fails $ setup' "configure" ["-w", cwd if isWindows then "ghc-7.10.exe" else "ghc-7.10"] assertOutputContains "is version 9999999" r diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/bin/ghc-pkg.exe b/cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/bin/ghc-pkg.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 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 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/bin/ghc-pkg.shim b/cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/bin/ghc-pkg.shim new file mode 100644 index 00000000000..1c68332a0a6 --- /dev/null +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/bin/ghc-pkg.shim @@ -0,0 +1,2 @@ +path = "FINDSH\sh.exe" +args = "bin\ghc-pkg" diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/bin/ghc.exe b/cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/bin/ghc.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 zcmeFaeSB2awKsm|C6h@qVFpMbN|XVDVgni&(8LKk0Vau-;DpFbA|_}HX&kLmI43|$ zAn8doC&y{I&$WHpr}kbc+G=er)s`1+=_J9tAoAL)Sg6Kcsym)kqtIl)nDczsJ~K(M z?Y+I9-{mJzb-ni+JuWY*itL`t~|M0_)i0&_KaBq?xc0cg2d&ON9 z?yo+we#4FF>8Uw!&_i!b-Sp!AhFOWfAD`RdK7j8ZpWEur;qPtkr||CU*y{e@{JqV+ zhrf65_m9tQckjpdi~G0F>c{*2j&1Ij_cDJ(lx?jlOTN8h@E{k-Y)zF5J%LYuvrjnc+tPan@1Ay@XsRnns`RaO9l9Q>_w5n zllx3UArJk7N1sV>qg>$&CL#MDWTEIvr28hO1J6=I^&kAZQQWXqM4G$^nFudxYaH)H z5w{@RcjKn@_lx%n!jy**OKsnXcRt<|{`o+V8;xwjz!W4zk)De8vwxE>dgG=I4?Xf_ zfwxIO+XTx0;@{+3hS>lA-~R^`IB?=rkZM5on?9O~J&Ec$0_3j*N zFchBc+;3i2>+P22Irrab4x1}$TYAN!@Vzy)-eZ!*rzO>TkBf_(`yI=CNRj%rxoVFm zN?~!vcrIJ5e90}Qjb&q{>uNgH6**R!31XJaOyX2}Op=*JOrem~6V)t$(_s}ND{>rx zu#iBP`GBc>*wuO9Oo;Fp5OarU2rDadGJ*m1 zExhNKtNqHoIoWzlxCNmqz`hOORaM<9ax#cz`=?{Xgf~}( z>uQz9SNs70tHKXZkYHCO;=*6$L5ho5{isk_YDGDxoQ|ibH|#@3YagXH=g_O}_oyMH95zf>m~BOB8t2$~#h*I$M5C!Gcu|XUp>l1=%8WaTRq_cw?=+ebs1c zWLvDt`JJdG=G<=!-(Tx(mkKLu3yRIs4nVMq(w1-?ecPmmBPFJ=Il!L1Sr9^zRg+X! zzJ|?5o8-e8%Jv+WX?sq#R#rt2mZPY7lT=6$z9KCNZ#E#zk3*=9Ljb~y%L9yoY`{Mc zaC`vdwsa#QTLs99I5FZxc-I{#fAl%SqDpK`6h z2-}X*~nK>v06sDsQ^8sWYJ`v2* zGu;Sj52{NtDCUi&=g~4}%S)&|T(~X-K)x{8_yf!cpjkHRpsp?im-~Fkqdb(e65+}u zgd^7Fpgh%Gi28hJHVqN|jX>RebfxwH%8S%fVN;#z@}V0GIZ9Gy-7cf6|AM&`T^;?D zx;m^I=w%@jKxPGu&uqdHc&kfX9AAXz>u=zhp}(Qctf;%!0QDmSlmt*f85m}vSA=zI z*b5#o5c-ilgFprQcRba{a|R%SkPjGU)Ksta9A&dXg{H$KtU8$&MUNuMVTlqF4*FwN z4ql>jjXD4^m$`zFk?d$T0(B`?A*yGVA_zjP#H*U}H4Wro(1oY#nE^zhFOtIMs@HGW zv$wZMP||-!&&+4(dCk-GT=En>mp+MS?c&b5? zMe$Po!k%C8w{_0}yd!@5p2PIra&AP|yORWjP58f?68HS3r%32d+KVS4-ktO-gos?- zNzr&HY^{7SDs(p<#y2P<7~g6-$#7+5QVieieS(@U#J}rKpc`1N3fW0iB&d-6 zIVz}S_W!r3a2{0npS2xGDy`IfqiIRJXRjs@h)lgeoZ3oX!QL-n9r?e=uxf5r|c`7(*z)Ztx*E8$orDJ-Q5pHYs`R z42TErtZ9ylo6r7CSLQUG$ge@C;yv_Iw29scMcon*#_eI@?XU_ZuJtN+~YqpxA&?=AAS zJDYDp6zaG`NvFs<5i+B$5)YOEG^jb^nEDc4HM^_-V-bth3_ zVlXYK?Jd-%OXt|{@Lk19fTTL;(F<-9X9U@FibE@1>dm3BIiw!L7zG&p4K|nOL$0Yo z_OXGzXxDFM3vVMRH=r6d#tz($R~~yFuTT(5SKcreF6b!-$OE_!HlLM}*qNmu0+FGL zs;i3QuXbrm)UpB9g#P#UVe-5clBcSwQ{BMW>!=;Y7d1A#F91L*03=HJ`_!_*^-4M# zCseJgS=&p!(SQLIWUnBbF7>f3cpqhZP+7kSNXAX`FDIen1{XzZI`^7tXpqYdc0o$+O8PzWn%F90vlpGzFv+?o zTHVQ9EBHrhSYQVcU#0c$HF3Gvxb#0zL=dg?9aJTI%aE8PkD8<}v9~x6ir2LaNwe$D zAQ#)b3`J41v+g{7t~Wl#+(l6>Pwv%~bjqcqpX1Ly{-lgbI^)j)JiC&pJ`>Qc?hGff zn?SjvVS8QQF9B~gx`LSXK-oQ{exVUQL8{(eh*uL<-9CYqrqarTX<(Atg4Qfbz76y~ zNNKt4fpWGTeZV>QdU+FnGO0d zOwtTmVipprhR;-SIpw$W&Y;pg7;i@OnNl7p4`j$2E@BqBC~t_-oOU0Is{WYAe^K#| z=$ZH8b0GyPjX=adfJ}GuOoNfK5s!bs;~(*~_jVdnMlkfdRqy#;IRs>NtVFCW$E54n z6QmUOc#liT2k%0nHVLt*>60-9xA(cydK4~ehfl7(+Nq0wMORw5MJo48>A*? zu1A&N$Id!h=i_0*NMvuJnGl}|S%%>&9PNM+C59rM?5R&sZK+kZ=P0FC_C6s&UuJv( zenFB0l{ue?b{^@>k17{(9yi{`z?xUQd3zKh3Ml$KpQ^;yDXCNMz>P^8=cY$o`&+y66Q46*bpJ+lr3 z3=5G;efVs||E%JV87;W_Ec$u0)6jDw{ut?Z$O)12SaLu zUA?90wl8n~YM(S$-r=%HGu7gZrS7DEy-K`h=`4CpTRNLw&ZUCy`zF!8j^r8EqUs*-E*Xvl0fb>}OL2GtJ@R!?H5e)H#Fh-B()qt{r=~7Jf zkHlpH(ceF~eh-!7B6hBwP?iUB4Zg@!bvn3Bayx|U1r26}olx%odLPuj*8AT)2 z=M)RjQ8ruCy3_nI<%@Qu!XYgOl(~bq>&~T7n@JGoEWOWW7R2nO8|js~G+?s`;v_`k zm5fM>AWc@6I)J%++@$b;W-}txvh(5ON~LV1z<+W3O`hHf)uK*Rrmd#V0FVE%t;QZ#d5ZnKspai0bmO(xmYMWZa17h4q7&XtTLNTg}aO}NeJi5@0&NLt2Vjc8mYG` z$&sB_L|HaZzTn(3N$$5t>g~18H=L23_Tet54}!SC`SN=fr~E5~Yn_j*x)`aysOkvS zxa9skyo=pat>^+j!)?W;))G@Z z1~jI0Bd)F3+*)Ezb{-g=a>9vM?98y70)t-#q*k;xAEWTd}3J#4-Ul{(U80Mjj*X zina`Q(@+qdcdWXL+GKo69~(nzQ(e=CjYw|#h@R*!8~#?g@Cdr`sL8{l)`!Q#0X*vO z!(+$B3(lR%_`3_)c7~8`=Q?ED`4wc_`3SP@+=6U7cW!LzCz!+SjnFluU1m)D*ejBz+vG zie`a4QM=?m7#E!_|A~sh8t?9G{~%ecjXa%$Z-Mi-jkul0S&#;04Tj^+Wc=Ml3>rcd z+Jg96A07_}@Tk8Jj~yG4@D;?NeRym^9NHJz*9fSQ-_i33RbOSLnzm`;!(!yv&*r3+R4{m@w^N?=G{hjZVG9J~4^ z1hBQG*V$YM27MrE!aw5IN8dpO2B$c`sUkc<+Wr*SSk=p&V52d zxN~x{-0hOzAIv>&fT&-YXo}H*T_7V7pJd3+5;r~a=;5OW5xV3)dTcaEoM0#D(z^7j zHZ~V*zHO{d;<0S-9&u-hOYU}quMoF+V7PrIa1*~2+3xHcOON9}+)kojoYb0J0`ePQ z(kH|1m|z6a4)#OO5C_JHE!~M0@cxC$QDT+5?U)pdbO(LnKp7TfcT}UwM=h`Zq3+Ps#)5~ zboEpD(^09nxmUbVa|0tFBxutK)U|aSkC(w`y80R`MByMbJ$3;R@?pE`zX+W`{WDhI zetT0s*KzZ)Y+GFfQr}cZZ+2#~39A?@7K1a?B^09`3!AW7OV}_}X^=yL%H&W_u!E5N zs^3wt)gewXDhDt3unr@dDpx8UY%}VIRe}n>q26If;*Mzl&y5!KM0k#}*hS@|rKV)*jn&Hb* z?I`V1P37uF`?yi(?<}XWLetkcsyplgZ-he-7hSoqn8g=ho!;F=v2a_r3Uy&i~`tTn3x<>htv z%^zD6B=*7}an>tyiES`k^3+N@a?kf%rEYY{qodB|VoJC>XR&;FRJ40PaXv~5ipb*n z$h|MQ)HJ2kA%DXPy)6nRt23c`i~;s9=+T1+^N*+T(Z3tX>%UD}EBGmkRy9Xajdi%l zYD3fk$}4(Mzg;c0dwN)wMmD9oEPbOx-{{geX0RIp0ISDpo(IiR%m=^&!UP?5O)ylU z!kpwe>pA5a^62`>wHV0b8PpHdkJWaV$S$BZo~;)db^X2gFh}ozWMN@-UD5)dP_Acg z#bOeeCP1uFAIh<>E+?x$dx{UCM5pd1gWl5B*Z2f+=6W@qj8|Yrwec_l-Xi;^ByW+m zJ}I0IyF0gR7@Rt3X$DkfF&UdNGr(Sa(TG(t*0;{)U5n5(d8r$6M3*cuI#ghzhVPXu zp*YwDe@bKOOqKkpE>3SbE78scPhw;N;5J#S=d89Y7@mg~&p`$1AYzBaDZzL?>K2}F zisx)aJZ=|{)2!;-o}nO%!O@|r1{H57La3c z8TGXGXAIoklo9#FNdbd9(|My{ChCMirV!;kLt&xrDX2vuwh92a(L~JDlkP^E+?6GF zXUU^ko6f?PWq@52#g1@LT|((-ko&=|tWe}Y4!(eDD^S(bdC`xupqWV8IL*Cbl+&W!A|zp05?QEi#pXoSPM&xK9XZ0X`U*Lgp=#Csxc9;@Zv%|RX;>o6{6gQ zrn(^C#|0XS)Ku$pcL5l12-dBjQib%O5P0iLd|x2$9Pc`tsquK%mq&+b`Rc z#Rt@Gx$pJ|d-7H5cU;F2y~3VF!z_g~8%)?za(A%{&D7cH%;WBY+NVD@7-$1}t$(HGm;dx+y7RjSn{N8Mm48eOCqk2<6?`V!vE-Nf5- zc^j+Zu)(NC_C{nU_y+SDam_p~oK@$hdAss2K#;7=SIaObi&wKhVLs~?ra^kJs}Y26 zM;)bXe@||331T15^?^rM8qO2TN6@}1rC|hWog(#l&MsG~&v~mI;tWbW4x4M0bAMFv zpIJ)&YtoHg$u6dOqP2<*BOD;&(>%Kl)v4W|pSqDv?lJ?e97`2@muq`q!y>rzsnU3> z%CP5AE@lL=@nGg#37ojq{Xaubhh23( zqN#NN%uPc=%3%LGUhK7noSYk={=(AuXV2N%f|=smwFTEo>FlAgY}z@fq5EeUzGsq&6&K}^@{v)Nw>PHnbO6=YA)9-G=t5)pK}kLY&v15P)z1*m4S z%JKSl!6ky~FGT&+*FjWnXXOM!!!F}_(45*rDrAt|Ozc4<8Dp=1L=sT3kG+irHuf?d zb&Z5WDR3Zw7(&?Vdx6pjDzt0%U8p-(fSvyLDBa-@REZW9C@yo*@E=VTecAa9=VhJa>R?1K_H*PN-zPm~7)RA)}N$xMtF0 zn#@wf$#O$Ry69~4y9&Q7+6y-uyK}UW2O*_?98wQ);5Pu-7G1Jhx-_!|eQ30$f^tMw z`BdIuq?^@CY?LH@wY}65Q+6y?kE_9XEvI%`Th5Akkvny@({oB$HE&pQG~Ns&#inRqk~P_ULM>k0>e5#&R#z?7Ud_Fv?8w)P7n4RvR3@n=4>8SO9l6k7NCm*UgY{uc4x79-Jy}iGY_d}a8o|7;CCmF(5d*+SL3I zdwLB#5L%vuQ;=G0t%^h*M+l=ci6~`@M4qMu0Xt|s1IBHnWfy`0$QnHlMhWg~8R5wR z_5>J`&0dBa!n|a**8ufQ`TX9zG!MR9=m|o7(+ZNdGle&$@s~RTXwO)UI`& z*K62|eJ%1-Z+%U&l&X4LYQ$%1 zwMSN)koOZTvp526W%fu>U*SDlrZ^9^%ginJ?NlAFJ_)@|Gkbc$PZ4Vm#aUnd9^z8dSD8)N8Tp4E9iA z?SjxQ4X486q5{($7#o_PVp2dpn z1e961mKFn?zevbLzC{Cy{Uw!;=oy}~1vM^b3tRvM_H)3CPnCbZflpOfUn@2FN=DF^v8VY@|@vuK2r{#aRHmDockp zMq-e9s!nJG-_ws#d5Vklw6$Ix}g>UL>Gyf=NH2SZe{`&w5mgp|avfPn{S z#W76b7;?pr7Oaii7Jea8K2JEos5R{FF?3(m2{nI3fu3Q)4|iHAx~Q0YKPJ;b-tr%Ux~eLXVWy_;u4FX-Z_78L1$b01*Anco*I*Wg=~{Z3XR41h_GxsPG~2`a)5>x^Rn_UifusAri>; zq|HNs6dr9R0z?*V8gIcvlAT%*wrb|ErBW%HKgJrc5vU(~&W0? z*bh(~Wg!!ev33wv_6pmtQH$N!*g=u;tf*1lM^wQssQacH$;WG+} zrNl%Qf5+!zyBtf~@&)I<#uG)@e$8q54PM+{THSd79f<|@0dy?AXf#!0gTK0S*K^49 z1N{96e|zz_AAf?$ELbf3XphAZR3W(-A_I!p))6cTZ&aapofWUw>*v!95zyDWh%G!p2Kq5tBX9#!Dqqk`kP!b|h7U-6A`D0rfbm zxS;D0)=mWT5L`e>D5^e2IvVCvv)Zi`FGf?af0I$67RAV~q=?jR{|Fl;M=QR7QF~w} zHLLH?ki{NGy`8sDub&qv2jnLKnJPPm`~mnHRRq}dJHZykZu#(hu;*IpWqHRuLBdKB zMHjOO95Jh^s8wHq#3_-cb8Y}1kL7qCi~w~jxEP{sfs_hb_?9XB>jB8BJ3xzvQF4`J zmuua_UBwGGN4{=qOI-%Be<}CPy{2_aFrUvUpk*lDDMS*ZUtR{HU`X^xVZ0YBjCMNr z`$mkG0#WsNfPMNgHK{lsO(%RBP1b%_OBV}73K zFxGHgraZkE1BPpOc4Pf9VKg%L9h|i@*eUlI?NSkhL|j26?}IvDMa$+~dR)WBwo7JK z>6lua^?mGwhOlr#P)XJ%)#6=?KvG+AR%d@&uA3Jb^t4sa93BP9ge`KrvyAPi4I`#|U9U5Sm(mZH1*PVTm)T zzPKF@CTNqq)hbA2p~%pohWYIQ_Dl)Q#~6=rd>UJ{$pfzO6&qj4H|{7D#CxgBb_CTO zi#=yCh@AW3bz~+lw?NnicT~uS!2lDM@UaBst}pNpinD22i4^0+h&0Ia7;_8kQo?d? zO}?~Wn@MV-cGXzE`g}tPBw;cY*|097j`6&{mR)rM3$w&PgZK7W(=y^s!{Q!`XotyE zjm3X;KS~?RXfjBs)fwu^pt5F!HZCLw`}Va+#MhwWfhB}CYHgO+uuOrNRLU-T-x62D zVBm7@v#3V`>=)=`2;1whPFG2|rm_GPFUwF&a{d=2H;@e9&J>BwRDc(Wz1Q8x|0X;VH=>vt;xW) zH`xsQ7m-te2O&%eYX&jT!;>BIDwFNMW{e{~%0^%GU@eQC-1i~9l`^LId(aJv|7gU2 zPVt{Wmnr_=!$la@;E1203wxBZ^LXK}OlRA{NpUMib^q4@*jNLAV`10i)Wuw~5Ajv; zT)WAoE*O$yN!z~;V=FeY8yxbVW`^CBxgEoQm~m>(3Ge02X7$a8W0BhB{a8$Ggb+yb z;k4V3+LL?Cd&Jpt0&sIL!&Bt_K1=M?k3Z`5c8gPA{i|qt^|LplAbqmj?uKLXU(j$E zx@?UF08r%Zk%n@Qy&Bun|1T&m$4uKdjaTmsyZ+hgr8P#?gU(Q|C5D=(IbEh&r`TTW zOjPbdeTuU{Uo84FioBnQldxw|U@|Ch1Qa;d zAEpWP1as0!Orc+n}xU@n4POfBiWA&SqNK^ENn} zZ#T&8Jt7VEWAk07R!rpEf4UXYgNYWP2jsp%OFK1Siqi!rrm?;tpC{l-Z2S+}(9ib* z;|v{HybNbmCX)LYh<4VO0e0fr zan42htNI$ba>0>CP`BAzbZ0Z%mjzi*lCTw}RM~y~F(RLCf*#nT_iIGLVk?v>;0&{= zyv>Ruy2KcfWjT?+Lz+#g#P*s4{=GwLjr{<`K(xTLr9`}~sUU)|cvDlsx9II|D)=_N zCpQ%Uuc+E7ed$0Gz-W~R9;H|L0UDLsod>>2ujL1t=~dWN@W0|f{xuE+hfX<=U*ioR z*Bn4Cn6wX|5$2dd#yVk^2~?Mmjk@2_k-c$GR#Zyb#O20R*cif`PU`-d|9zu~zBNMlS~C zPtDlm`xM(3Y##Pw!qaMSa_)X?U#eaGmqC&c+jbWYk6DrT&u3Y#_= z1(#fW9g2^C5Gr{R<_IZC?SkJ}r0gPg4$5IqR2nXphe83i7tqM{>LOX6=u8>yU%UAP z{{rd@JJu=r+9E?c83};M5$mG?cw7y#dX$9H4=kl=h%em}Lyg#?8{RWQfp@e!X~t}b z1%k|03b<$BL~s^*w?C#`r>==%)1;%|RuRTfYf(Wy4hnQD=>&mRS??&B1Ov-spn#3o zSdje-h15<`Y~yP|s1hJs7IvCkA$g8~!O_i~=E2`+v|Y)QqhNQ(qF(s5HQqj3N^kDn zI~xa;O7N{M(JgQ)NNP)NwH3D|m$dpvorj_Uc1JmCL21W?9uMig*+BmATYD-a6j0M*{Jdl}u=wZYkk*8UvsJfc=X} zc9uCnXW(m*XF;9=)i}**SC4P$-M+a1LIwFer-mh$w`cPgoWCe@wZCUpyM|AA+v{gU ztdnq7o9)N|3xTEBDFncla5*s>2lHrSr@DUxTZy~RpsUf4*#$}G5E8Q(x*8E;3R?&M zMv9GRfdvAtOOzSsY7hp;iz~5wn2tW?V^M+uLtkBEJ^-+F15uP)NbajhB~-w-6yD%58W`Ev$gQVvs!#+aR~vNh zf*n}}bk2}WI4iCSn=05(QA@ljw~*UWMG$8ATc`;8H{_+9QSq9JAX`^Khtkg=J9*cl z^8s7>F<3q|$T|>P1r`GSMh}oNBC^8@n;v{0;*x%iy^4-24a3=Ld_xS9kj@((R`5xU(q8`dBdFd_`}lXR zCL+f7@xK5TNjOV@xR5wk9JQsbWxjh~O@+w8^(g{&69N0Uap@r1DL7lci-It%A7uD^ z%;Y%>v#e_43%2>{Qa;xm$DFu(0LjpwCwpS2kAqRhv98O)^n+cIm`O^j%R!iZ8J6#{ zW5c$BENOCGE4&)(w&D?|a@{V9c$^}h;be!Nf{f{1NrV-QIQA|)uWSx{i*fuEG$6A- zJc;?y<7`;w4gU8;n;Puod5pu3apsT*vdGs*n!<8%BorbOUL$t)7>ZX#{0(rVU!kxmI3%e#vK?q|&1hRnU41Oq}UUM-hJXgnP?&O@x~t7~Ui zo=D{T1|EQq61<)04h1SldkyedLBavV7>JiscajacZsnIqUg?>?K^mB7POxr0VlYb^ z9(W}2;C(Vt%cz0zNT6mR3;FlOg*JF)4|NzkQgCw$M8{u1WDH08B%$(l{FAdZV$6hF zuMwG0mw1PB_j6~hplbJw0Uj!PP@Umuczrc91 zP^}zR*9zASChf+*i8E_g=j^0>+LU;jBc6Zq4FYux`Szh2?ONPpCiTOoeAJUBG( zWRdW@eDY_I&Nq$D$CsFa3jxyLTxGcjnX1SK&8ofo&j^h91Qm14L2{SyJr>``ghdGV zWMFi_%rQ1V$i$5SLav($je+%EhjD;)&|p}oRKG=j14Hd*3`?JUSr4I<6k`&Vc0>MWo>8VUA{9Uj1p4&h ziJ*Tt5%gj(;r|TukEyuPRFGb62jwyK;6|W4S}l^{JHB#JuZ4tGcUV1V)Ox!o<{3PF z{PeNYuX#st1`@UAUf}*(?W1Pz;1;NBk-|LKNiAXbI`8PFYr@u01zT82$_DLnWP^CH z%)!u#A)FJoVuD8cX@3QrYNRJ3DmBo6q6Rj zcafFl@eiO!pLS>#7DJ_oGapX+SEz4=ly60ylHWT09OZ^ z5GEge_8?{tyvajq2|rH6oS0XF>_39^ycaAMWUVmr2iYyy-o!c+M*B|8R$n{{0LC~d zuUm|&$jo{-sIb>W4Wm;Ch-6>F27|sN2SLw}Vnp4=qeyfrJb~TDBLqkTWeG*I1&9DM zDN87h>f>_~DQLKiL$wV$+wD?j=yyU#kpN+uie1c4NxM;QGt|?%*q2DL!GqOvk0_%& zoi7rn#Qn8#Da{{oB!SKtP00QWo;@)Kaua;hySTPOpVLmYKi4-hI3niIgwJQ}-^WEb zbD(;|HsGhd<}U5(a%>$TUkclcJc>%mVu+>NhZX1=ARL;B|)7%ekMl zS#QIUJ7`-;*tnBEUI#gn)|$#HDEn;fxMxT^%}UYbklpt1H1)utK2Nko_HTc zI2os0!lt@RLGZy(|2fPf&|whrW53kEZpd%9N||_?#B4lqGO`IS-h$9rpHB3~2bgc? zmJ5d8CwH@)7b$}V&u%qyubWw_lmU9&D36-A{rK5OD5;&K+p29$};}8VkR- zo%?7bBG&ln0uoKoH)C2-2Uv!1-7R+iFQDY?OUht#T^^_r_m=rUtlU#Oz<6qPhv*CU39VUgYn`F zaS~iZTYhqZfQ`h)@dWapnBek-ZKoiHOCD)K3t>GlHmcH88}_LJbI^(};DSQa4hN0h z)$F?%uUaPNGV--0J-hvj|CeC#3UsMYQO|SJX1Rr;p zX?x;5+}i2fpOQPaZ__j|5BTvZ#zT&*IG&-0j78Y(=#;8(AkxwYa}eF?at9h!XIwdx zhpwfln-OJXz&Ssq(Tp z@#!JRj$v04oqL12_g+vGgrBKPS;k>4gJs4I&zLvCF-T5Ws*%mJgrGq`fus28_yHx1 z_9JXE*ym`%mb44#qjcvLGB^n`7X{W;?5?x-;N;vSW~lr5&)Ge zcJ>ow#`y4V zJAXklr8K=*%V00TO9vEn2iXQ%>>!vK4BPc3Pho+nXCCIgCBCJlvmXEn;~2xZ6_d^x zi3>1Nv09Ip=rQ^?3rF-&07uyP8Os3sPtXfXFCbrct`54w8G29%ip^DgT5xsNU8KkX zdQb=_;dHbZYDs6^;s+2ppB@wnXRtpfQdUyr3VKio6X|R56fVT#XAk>-gh+K}#QMX0 zFo2qeLAVQ4N#nY%j5Mu5&Hmwi>jA|$hFCG-Kp{Gp&WX|)#3fP`;W1>^k8rd0?fWcpmr*)7H~4r1YbyU7k>;+7-Q!Vkv`QpvFL1B1GJiTgu=D97-Z%N)OF1TJD{g+f1KSi3qAoT}WT#%e2IB(_ zc^VBd>?c9?7s%DB$1KpDuHv#O?8debHib?f_i%&PV_vRzCpfZhJrVgndQd2w&F<$t zOiQF8aWc37C)qE@*8^{018Xj}x8lZ2?1Rv>GDw^_K1Av6FJD5{WTPZeD980W&U#{W z=ID}Jm$E-M!pAE3d>S49fN2K2gmxZ9J5hIz;dKzKa}e5Adhp|!7H)1!oL6*m+{Xap zj3u4T9Jjj$>oTY$hry3%;sPq(9HZ%UW7~vA(Y#3KJL#OJp+(naQ*jQ1AJa@?*Z=p$ z>8xhFcn%fkF!)hT8zaG-KpuxJiKOEvErGY4BS7ah;}GT(1P+ED*POzBd?kec_PA!^ zcutUgjl}%_<8C756y0>fpmU;|*o_I`py`#Z(zwm?+pw!+M-dG?NYvC23@YTb)bcBkQ2L`UhS#ZP_i zWgo)mO6R&oi|#+4$SjYY{v6Bq+-2nBUvkb~p;&t|VWPr@1uWR-KW_&HMk--M7VSnt zwfZG=ji1cp-7xJK#vCY8^|)mQaceO$xTd%WW@XwJokaF+Lii*DzOdON(*?>zxF*9A zjU7H4&dkVmJ%P!8WnKRY)!7-IU-uN@auTz+fy=+&8mF4dkGJwOzme=mq1h|a@4Xkq zyJ)kZProI=$eo>Ic#9gct9N0`CeqNSG#rNGky3V4S#tt+o55{~`x~9Z%KI?>&cNB| zeRi3~6WoPh*!$@}gKGuhWK59qfSWEugsp&|0wR-MA7AvJhe0n4g93v!0iI5`7G6P5*jVa80g)Uk_vpNS8qlrwC&VHShOwUh#tNr!@5jYAP} zxe6lXSPIRO4eK^!81~y~2AX(G56d+u0ywDtHHSKFm)gOzmkf18#bs&%&U59);7NAB z9h+D?7KU(hPbWLf*e*j|QA&7}ux#0tx zkoe!AB{nPvTFx3qs-WtLEXT1$%;*OMH=IQVx0~ro@dpZ^al2pysqzl)Kn%91Ftt=+ zzfrZ*YHWpkX;i$u?e3Y@p$?OH^H7IfO2Y*ezei0N$8&IY`M3;Q`Xz2l_m5aIBK%0W zpe)O3TQSqxx@;aml^FY$-cjkN@m(z#;XUwa9Vukhp^szj^zlKehH*HNTn12P2)1z|_K$iNUsj-pBp z&ZmQO0MDo0Ajd3H4uW>=T8ii{&H`a|E>Dm@Rka@I_VMHEC9;mg2q7fW79>ozQ5vxB zUqB;GW*^^-UiHvjzt{k)V6*e_i9U9+Frcv+DD;vEiHSi5n}pDY710$NZk=t_?*r6_ z1PVQgLzL>HL_MG}DZu{EE#S)^(>Ejy30>?s2%G*mCaL)eP`WSzXS?WV@GErm8yiWr zA$CtfI_2SF3nM%#=7iWXgwe(Aqc(O6kM6s@il5{EHC1D2*UV~X7XQ)Z*m4hm-T z%D^;LRJY}=#&5v$`RkscP%$GLHGz;)574ps{%<0GtN$W<7xw`;_my3&l?zLShPfej z&Va8=Q{iHJ5k4wkz#y*Tg|xfE=2rh-Yl4PDN-V(k!)S_iF~Ln|Bhcf!1=b zaD1!;=N!!2r^wM!rNpi}o%>B#ohnW(ImDj27huOXVypYViQeTx0OAPUoymU2;Y|ZP zb{?i?3~vldpKDh_YOS%ioI?_L9j^#(;AU2P(q6+g%c*cK zs~*9eFmwXUd=-qll#P`BPo(j(Y3Sd`UU4pM#ag&s_?2idE?1$6Djcne4pd!lfN2%GN-yPseC{PUPCchhbV zgf5)1)t*{!r{u6)Mi?Ox9<|Q>?Q-mX(JjX|iBs?kB3qm-77WyGn+Yp#&DmW{9$12w z(rrsYKnYqcmw$;3$#80`UvE1DucEftJp_&J-XXS@V-;IAh_ITtoy`a6o2B9MO$fd` znPrJ{aywusW>#m*zX2Nd3A5!%F72kKNsY+*OH==&cm-KD5YV>nH!bSbwqo4Ez3N%S zRB0PfK$9oAUoy45rq#&oZm~>elSChZzlkckR%SLFg(vv80e+Cda4Tr&tAC^Sb=dL- zEHZ^^FB)M7g?}7m=aE~p1=(-$t_r8#)7Aq%9zFxZP@mZngJV)l7I?WCx*c3N!|qC0 z`?}4w1<7Kpnd}X4GEH{2(2BIH*ly}Sg+SO+_c*li5c>&T)ImM!Z22kT_fG z(g7#l8Gl9Z$d~X_BD7HD;Ae`la8lh99L&SUG><`>+Jv2As}N4rZY3WFo*K9^)hysZ zTs9W0dwJ@jvD92DYZAhfDkF|$NDB1?F+_Ug4j^G7j`%BLT2A%fgx0cMACau#vY`ie zx~+rFJFz>1>)e8{3d8P;@w<~RG9nFd{(0t^XBrz~;BYZi*9cnDNqsu@Nmtwi*wB~J zu)`T>Ljn0*B}HkNMd6Wu5xk5T4Bb+C^TCNHMsNlOa~X#12+kAYi#&l6I#`)qH9hO2 zvu@R$a*t2J;f#dTDzm>#7xv=-M2C@{)^TOBYI;tHlKMr3(`nawV!Gc!KIc3Q8W~(O z_L`dRu#&!(sNnDAxZjHH3=*H*s>*Xnb74V5c{LR~!cvy}?&w|gJZQBtareG{(HO)w3&mVpti>O2JRCL_7J;s5s?FPsuepl zt9FwDL7v1ZLyg}<%i!E2>t-o?$af!>c(4P`K=!Z+#!qDJcT$_~k z83rUM3v4Yl9@^piT(x{NUv+TpuxrKSd1TIX1leb}r;XghNY5M7gbgb7ZOKcR?MB{7 znC)Jmr3|J8nC-@la1+dS=K=2XW;;wV{5*(5abYaMK5tegCnh^`h;@~htA{a&`PhV) z6p1OA={mU`9z%^YGWrfTOwi3Y&So;;snssh$tNM$c)K8Fq7oAQ4t#rhYZZIH86h%D zMal-*TFg#ZH8pLu_kRYSomH2CF2;pyFyL&w53r1jq@2q0AbI~DJmdq<;z?j>?^d)q z_a)cDd1k1%zZKEc*@y|S*Vj=efEvqG=_21+xWQXv-F`hTfXCUG??iEwhz==+!YMd} z#2&s5RUzNuEJ&U-WZaYo$5TQ4f?99YJc%-%Au0uIi*c1*ioVg#Zbmty&?MIU0nwNA zE)0W4@{365ICqy`giwD38DTq%lrc8& z3XyvNdU&b5=@KXTd_GQM0q1^yMj)iX1A5VY)G7zyniY#2v+lT^{RD8-JniO!y+nQK zUMQ9s2gxRj-Q)BHq94LZu zfr{PRnvA;s&}{)<2-+!32f%{-t1&ZVgy1&3D?wFFfcz3V z>7RofBM1o*L3%ZQA|||CDJA8)TiA;;i3ljIwAqM2RXC~JS4uR&N3Bx&5P!99LUr(N zz=!7 zFM*^Dv>t9YUhqD8gI^dKpQY`PZz={0AuOhrGY2vdzWT;OCKzFTV;=kKdq&T1T+BX5 z1oPQDiQqi;`$TX)>rDiG>`)@Og1rT}GaH&hZH~`r%}}hU zspIZ0Fi_D?48*fwaY(yX99D}H+f z5_Ae_1GKSMyb`zak(;r66Jkg(!M2f@$ad$U5SaG3xEBpjL)kK~F zUev4rsesd8w;s*IlIAOzL=4|?X*$0plOVCF$W_6fMOu{>4e3jG+Ca1yWk|r{2m>aDPB!{S?!NI4$l6X!_7BPWC!|g!tBWw@F8LG5`Wxh` zVC5XwF|z)I7oAAf?;vKJtVIU4GYo7$M^=NVb@EOheq9Q@x+l&E#wEkFIzW%51eguu zs!G$~<}}7C=>hfvad$cuF&v<tIi0j8?EYVAyo3l zoHZ`B8;%W4e9w)1DhfI6qa(T;24yXQzQLKsbXgGngZ)}y)b6GZO`!r)G|J*`VL|I*a> zuBi>SE`A1nOp}1l09_)xMc;-C2gqgL5h?4z4qK~@{Rj37A|+`Be%F=^_R70p(%Crj z#4h5Z`u=^GO6Y9!7p?f&im4#nT%zMrdPq3MF&~@d*r5wRWsC2>2P@e3sSNG|nFnED z@3IN~UqeKALy$cUgt=NarLD}}_^~PaZc<}=pw-^xv*3J6|DDK&4fCFz>7f3J&BKU1}~YpY44~ax__4gS`M85lCwf=T%DAw%XL?RyA!d z@75k%dr@{#n}ounD6Cn!Yzy&YDw|ALD8To?3PPo;{-a~patW<(Ie*v7&Vh}>c~!NRc67NME2y_v zux*2%BPknj{_Kbq)<#(7+WW0AMBK$sUSpDq!9ud_XTS>Yt)-xBpnP=&y9WaZD`NQd zED7gDiuJW^_Qp%KIL~&eSW0TmD%Czh=Xm|+#HqN~4%%ti`NsBJHS=hDt6j5<`f!)u zj;SF~1!j%mr?}X$45JSG;EQo04wos$+Wh)27t_6b0Z`6@*05~gj{|^1z!FY)=<3|E zi!+8I0W&DQH5Hfq^=`7hl&hrdQ1TFtnU19>k);U3&RXJ?XpY5k_`ia>ZhGCvv5Y|TS< z%A8y>mi1c7n!0H^vZf;I*N}DXF3M=+!YzNTPWpk1SYyNQg_^abhW8{C&u*xl@kNUR zBOn`_5^$+Cd;M9Puz5ol48YIxVgTbgWc&`Vwie`v+t%SM^+Z9Li)0P%U6LCvE`a-X zZVxQ*L(YFk0NsUxs{^F1mwS4R4DIn`%W+FPex@l%J&6^DnADXlXxPr4ha&LnF*dkK z-wo04&61vrn;a8(LZikN0_aAJeOe02(UbzeV@oERiuue?Y*%9bz_oKIg8`XC%PQ+$ zU2j|C25U6q6r5U?4NP<(ik}db3kY>fC#rQ+F#2T}WW?L@jWRS{=G~k$L z2K}xon$?g!p|5o^f=%e_NmuqYNJ}!4dKtsQ(oM7kACwa{y8_I2_jvc(aL*Nd7L4vi zrLJJSV{tqCSjS@hOP8XKv^VCH>Gp6l&y zz-1z_hSWA&F`Z^?Eyk_m7_y&~s=d68-2XCQ z2FB(eW~(${6Lxgr7k+y?n|r}KVtSWpK~a}Upi>^EJ4s0hhMfBvvf#f1V7fePvf$T_ zz3SqYD6FuNVw{#7iDQ>5jd(wq5nXQSv~=r6`s#A_jnjk!KbQ&!#PLIqYu`%nIS_*9 z&vlS(@Z<uhNkT@=|Pmo=})&qD)yLBmT<4MzC^2Y2xzn~aamz~xE z+ooB#GUgiY_sQ+yNOU4`XX^I%3v8Ql4rdXpT#1`1%gagX!K5TjW4UOYVa-^7hU8rT zBCs5tJ*z(t{YVhsChY3ZK$_!9U3s(!+Xth5tYb!tMLV2m< zW~hi(e0}&`3tX*)RryWmnu1E}PRDkfx!Y{(^2bb?rL`KSKNzN6=>AwaOX19s(f=z5 z=r|-7E}OMN6U6Va%kR3=UaJ)GJ0*GY=>0o$#Z>vjB6ur*Xw_zul7tZkQ0_4u2{7$! zJt(HFmp|MfF2im5B770&<9D6^PR34fi{>Rbe*EY~Z7;uKYil znIw~BV1m4b7bTjYXw;$s1qUPu0aT(1k%UwOwyV*NcK;S;z*Yi@lV~Q7Q)&OQtE;rO z>aP9kZfzCB7bKI=B!C41RD*yD}F*j&|RAR~f!jUl(>}dD`gKJ&S4HA082;Bnw(3;;iBGUFR*!VEhtS2QwThv~0 zuSoONK4ftEn(Q9YLr>O93Fn1w83tHF@D^uqF!$t4!ckmx8OcE~)?AW``*Hb+{MWz< zs0|jb5GFaUw~+E;f{)ueKih8EM!C_jbQOT!MO`5-q2XlC>=)x5Q_bSkS6a?pA(OstVC5uOHU)aOG_)G zCCDEEu-q`jB6j`}=7GFWwf>pvsb2mXwg}M3Ztq<8a<{;*J!|Ha8C~Iyu5iWkSQ^X2 z_x8NtT(+BdOZ0eADiHr7IV^gNupS^=rmYu+A?4yNEh3cKe6uI-kT~KyI^Y zWUb6`)n`P+LKa(UbRntrN?l?mt%}!rh_3Zav(^Q&^yAh351pC++T!AP#dR*%d^?xz zd!_BC_)FW9Vy%hO6xOob=|Qbzs@|g)bb4%2+~v%wGBmWX1Aj3poB0bdXGaqmgr`pA*CL>4aR%Yzx$5@6U{rM&1qU#6D?gpnYV;br zNFP24qORixu_D_MTnJa*`(9QLB&^lgV*u~V9?}!D*DvUqC7jAW_NN;t29Ll8jfKa^ z417(b`==ME%Qn+jZ26)EJXBxb^l4OE3f9n|uzny<0Cyn}bP9M1K&?1y+-|&=^S*HA zHmZa|)D5~+`wbc;U||pM^s>m^FjB|~J22%fQYSH9V1J-lOR1DWVsJRzw8iNt;4p=` zNFQ1IUlx%QR$>#4qs8i3`X3q80ptCgCW^g?T&4eMaUOIMKPoTVX$+y8LcyWcfn10+m3ss%uZx*^_TFmq|VK|-{1J_m>&Odt>A@iSG6$N ztaWV&&rZ2b^75Z9i=@F=(a_$&ET^+ny-IMI+@MBkbEBp5PX*dz6|U)ilIhZKIiO7s z^u3EKxb}I75ngw*8WN^`&o^?~9loK{uJd_{O4Xk=A=W;4KQVN)hJ^aMmxw;?I@r^> z3Eno}&;!IsCrh9{qle?enQpql9+I0=he#8kmJ2`UC46YMbwE%0b6VJ6J zV;Y0&9^fG>9Mq0&gLU=11=l^u-}-gp1y`*h&%#ihBr7ac|D-u7cPR8S?{bCC*c4%Q zq5a{q0}elc@Qzstf0hwlFO8G>%{J?2bZB%KqfWwc;FaSFpRfl*A_xtxdrbdbqyLKg z+~7J94F=bVPu==;;zw6&;7}Fm1AZg{KOOR;lJ#DiE;W+cNCwqYuJjK9avRf^%c@UY z=}(-p$nMKDD-~TY?L;-_|MA1j4%Suk!2G^riY^KOmGzQ``d}9W8>*Ama;q`Clhz4! zEMOb7nxU(2q+=+V(-iKrGb)qreedx+{7-|j5pp&Zsxf!#)e{+O<$a!&_bT!>birjt z2bp(}dG#jgblYO7fDDW(lL{CpXPpL`{B||6CN2?1wvBUO4vc%W;Q!d0awRmi(B*Th zLZ)NxZkm&D!?$j;nuKbCR#6SMiMW4ospC5-qGir7TTF|)6o6;gHIy-3p*iR*7AkJ! zgx*0iQv2 zOcjk|C=tj$EC?IMD%aFiPM;_%E)^`jiz}U#PSvqPvkpn>a#~^}nH80-9p7K5B1YPC zt`A4;^c;6=_?vPsicBs>@;-J(F(#0Xu~yR%6uP;I+v%-Tw?p{?OI7QHW{2U ztm;9cR9;kuW=1$R)PilA+c;$=vVeMVeqcF5Fgv5B`|`7?TfQq466>RTMPaT8k}y#( z8vl?Oo74F&4Ppcr3L(r-54><#rhG88mme&nvD+llrPk)(Ka8jdC@X@(2<1W#RjS*x~QFOAv6R2J|EF1OJ;o3}M16w~X$JsriAtF6+0a97q&wO| zIp#{*DX6(#7Z`1OxP|0jafPp$#O!lF=(^60=zoaV^4&)G5!`3GzY-#*kX>@}$ zy;v>3M;2@zN!VW{W`CS}u zgEA#Zj-U31?e&i(Ne@cnwnV1K+Ppnf^sCSfXa|m3ky<@}@Tm0A%uE~uogB3ScM^lE z=Z(t5=LE^=o57NNrg!JkcV#QmXspIh2kb>0A+@cNtPf$)AEz$JQ8bf$%(!tLuKq;F zTo|*`doyX0QU{397ub$&x`1r^)8Eis^zwN}UoiUM(~bo$!G(hi4VQP`qy91KV4J9E zj9}1=qor!bR@RE8wpNXyv_Daed|TEzd+|J$SH{hvzmi__puU;LMDc-nDoxU~ijlAl z{I>jbIJ%M@R5~b8bLfULBR8m{_C%9nYTO*QY?1%K%@O%sEBWCt?;L%E zW_3##wzPWsG+FolX|0KJ3nv-3CJLRJ@JD$Pf|j|3`Zur@YmfqFapgB^2=f^V+ma}$ zQJce}j|cVd9}5w7(QfetD*ADlW1PJf-CAh!5Pb%Wo@f}o!VsV^yi<-Pho?R{u>~4x?a*BUPR#I>kkj|^d zax_Ooxk_kBiP}%8U2`Z;0FcnXHy6LpuSpWf#IQF{Jt__3WQ@34+0Cr{Z&p`*Nt!Qx z7n)4uXwQar&juHWv#b>7Oz*bk$8nD$H!&ZD=8S&h3>B(&x$=Zw^|FH1tylsvzaEi# zVK_3ktAZYyI$cPtr|uPEBMj9J9|lw;-K@xc`G>J?>P zY#1VBXk^VvAzaIbHat3kXs+2KM&01qFf+lsYx#dckbs{B^*aAB<_%~V91cXCOE(tN zLL?`ovZ+_JY{_ZX51SkWG@v-InM77gDhzvQfgRl}R7de-?fO(V&iL4 zfZ*~t1wcds_JB4c`4RgG49rk<#UEpb@ro^sd`m=h&A1K$%g66t>Ji5BSJk@b;RddO z_Y*_uLG0DS!A1Qks+(k$BO-31FB_^plsBynG}6q@0SHrE;sHC%H4I1wJ*w%Sxjo!~ zs3yO!p98DHjLKB!H0}UpHgF42f2Mu~_s|hRkmltp56~U8;)x9oA(8e7~zFKvv$8PnGtnBtQXM#$ltB2WT|%_ z_3q!K(U!%orUKB+3rm27{jt3Q)b6mo!rSWqi$LavhTVkmJ>UHwFUFh6604`h`ZqfK zG+7xvru|QedYO80$Tm7kb3SZ8MTAmyNE4@Q^Q3-Fp$fjolQ}_YKhgODkCc$y zQ!At#`2%Xcg?8^Q&%^KVUISf;&hTj8?3GR~Oa95stWSMkXD04Rq^@#;q8d88;2rf& z-51i2t3$UW#BN`XR3?Px*bAj9n*oZkpdRP2h~X)?>v+SYFOB|1Y>wbM<-2A&+OX8o z;*6|teVLdMT*--7i=YRqd&mSX#ncZiQEj}Ip*mg2uQd&}M@!Z3C0LvR$0b$|Z;lCo ziXeL+9QzXy&~ov!)o7jS@ugtgIy1oT(OZJ#PY^kWkcCy-3d6(QMq#n>A+o8stSe_5 zP2(zvIj#itkNY~{`R4Qz4Y7RtMxgiGasU%EMu&2fO=V@I(MAkVE^ogwNG%%l9D<7&_Wa1)X3@5x=Ui#DrTq`{Scc|9MC{&$JU^_WJN6RgB zK1EP3tbp>=BzhP6wI3-k^NNkqI2yS*^oWg#?(Ol-E~p1 zEyt!Zs74oLnDPGfT^vZ1PRlbs3V)JRtaeDB z;XkS`3CG;h;Fi1z3FH|&Dy$(#5h|W-@foU@i4rX61nh9iqM-i(4jS$}j@K9eX!b-| zPV(X#!i!YiDCi`bqbKs`9Dj$=@>J!NvfdNn&yqrul1=lI9f6N$+_yF6iMd70Pb{y@ z!8=?T#)n;%ke9h#8T>WMWvFYQ1J+QRCwNRp?y<%Z!eN||aReE&gFH1lAPf5kQs)quPg2;=5o-0D@lpH%kLD;2;9hW6 zctT8EW}6??t?~GgS#?_?5Mqt@E%oKYB`q#tTJ1(JVOK3c0{P+! zS`Ig83avy$cZn`D8*U?=BaB$ExPh(}f)CdDc&boVUDYF&FdU^#kTs(@a)dOE1>whWX zd_Hf&;+miI^&x0Nel!GiA=29eKhZWiMW3< zzEZ905Bvp>l1w+J(U&h7=NXU4K6HghPH+!M4C9d}c-~yipPbf0Rjz|%iOAcnIycEc z&E}CKL3D#|-&%soDw7t4e)%jU566SWk{IzB?Caa=rS_Jvr^^UluMoM+2= zqVxLaQp&)i}0nG=hb{<)O$*XB~{IddsBaQ0mKJ}r})BH_#wX7P9TGZJ^>>HRlc z8-*U6Z)kAiI&B%m0UNt|a2uWK&SNB#YnSL`)9hn9^TlhYw@=2QS z5@8yg{!PS8`qo{_nx1BM#bjd&C?42lM6M`-VSQXCBIp0FO4YmYLxI(9Tbch*O;p>; zd{C+c;;t+LQea$$B>9oum^jW_`ZABY=MTacxTzg%!VPkrQHljyTCw_75p6J_E4fj? z*wWFRZzRO>6EfU;X4#OOUQ`4z>12~$CNtKp4~PKT4Nr%%)HOaQ0Bume=D>J)63AJ7 zYLH`AmCIY@_7!o^x`5&a8`~{tt38~mP&9FAWPSeluEd+s#etU7fmPTo4%M-NS?!Ns z7Wk5DTqjbNgBUKHWmq8XMe*Es0T-*{>Qd76yQv|a7Y}}i#bakb>3Z&YY8so{>LR*D zo8gRv(D&nKiS;I@-8}lH(VQ)LGFxh3_%sZYP2B>$H80{OYbaxQ#c{clCGR~u&N&!- z`_Lg1#HNZR3z>=4lJ|HkZ>9nlX`6CXFk_Gae2=XNIl1CU9oN>Z?kW zTx21_X0Bha(zipW@r%=mKttnEi{H`cwIynlkOl@G4+WFpek^Q(`%#aMbc7ysi65KK zf>j3scki{Kl92}V?M*$TXejtBaCe8TCI3_EdD>>o5U5f^>oCfc&>(hub`lH4Eo`_^ zW~|Tul)JVci_P*8rXQzTDw`(wvQ9AP@;lKi2^Q=P-09?#KTo;1^Wl0DXLsrwxj@Qu z2^}OJUoX0E&}T2o@8Lsv7p#B#UmQvr%WNuKLUdG%#3oU&(AO8L+<2syLRFokqc4Ou5N4O%;== zQLqcdgxtn+k7;y}WO$oo$glHPF>=VxVT6kVo#}7c?3ihXI~}FR!!Dmat@(J^=}Xjj z0&+XZlS^Ri6XYo!7fd#Wus1B$Q$%ht+Be&{rOJBWHx92~BfNWjX&@609b~%`{>nYb zmd6hXGvz`S-2Ww6+ZNw0z6NXwz6||qC&4!V5RJT`(HlTv$g7UyD=@uF4pyDse+Ws* z)XCy7(DT^CB*!rMG{UiV5UQ!ki!*$edS2g^^4Te*&_OdU+DSv$fXo9VZj>9?Bcx0>m9==3|&wi)3i zk!cme%QYSk&+uIZa!OW9xYH>;2P!+h=cMp9-lg<5`|+?8-(qzq^^K|M2D;Oq-dEK} zWBNR=w*@{<_#5SeDx5$Cl4`a}i;GJYrcq{D1q{!=ADyNVr)5N_Q{dBt@TX=c?l3!XhuMic>2sSooov;HAah~CG=MWU+QXka1BVifCRsK~ ztXa?NJjPa%U8Nd~Y3aH7%#kf==~|pF(UGx-j)vIh3mi zhGsPeA!x`7z;(nY@_@s}2jNpL&jt)cljII-+Po?(H|xuLD(&?PkJJ}@y(p5#`@){w z#`=OId6fxh#a7^y6^C`G*cG8OAZFc%#g*2d+4V5Ap~KiKhfc}wmP2J{+}0*C5;TWn zSZ`EUb!+5>&X@t5K4*?7i|_w%iMi3YKB2mBnNQ_389nW1Di=m4{pG=WwC<6~H_&V? zllKk%Nn&VmG~&Qy&UD>rD4>-Nt{BT{hiIWDpvP1Y3nr;!y#BqgG@4yAq!K2(1|4SHG%U>^^;|r|2y%h{H5|u;+2x@OQY%; zqLVljTFD#?=07Hedha^LP%pSng7Sjp)sV~sq5Q{KP#X(X{%D!x>A(VbY6aUYvJem% z&pY)}*O~Bv_;r0;;KNpcw-EdpN6~~*Lz6%=YkLp9G>hrrBlI!zvMZ6a}z(-LJip-L*Pc&E&xPYHjOdUI~ z>T(pe={P-3SCOMQBH2i%Y(yGKkLcRxOG#DlMlvcBN_Eqo9`JDjA5jxUBkAy5F5GDU zM#dd|7Jt3^>?6q}ll(=)2uV4>-2Zs-JxonqD2=4_0;>{+AtJS68*+;_2l` zA!&~A;haSEvqxPyi^wX{Zm>oQIvUD9v6fE#9SK)jkJa-Nu5iwYylRn;{1>N`w+T&s zJ0_?@Bh~*Rtew%9`zJ8Wpm=I$ah!~r5-|;|hrW<7NBQY2!u-?TzGX8!uaCp_AYa%b zpwuP=<~Z$vQ>p&pm4j|CR%2t~=}~ZY=eU4%^H!Z+x;=tRv|)5PmPKL{U>(!$VSrbYbmCXF`%HUoXB{y~9RE_>ymB^ANz11%^+;c<*bdy@9OZ}o$2Wex@~ zqKIE7-4yr~Jj3s5sC*pQP$`&(KKh*vy&Ca;tf3jw(5VD`YYfx-$B_L*uQZup#u;-A zhXw1T5XUwMU&tK7myDC%c28i7tkv}r6sjvcK|RhayU_ExhuMp5zCWdM(Dy5X>8Q4W z_r>2(L7z9gbiX+6xpyI~Y$zmipePiQq&eaCzCt5h$T!hnQsw)ZxNN!*qdG-2rg>5B ze*R9TheF+iv?z%k>fp< zBvS(}Po@Uf{qz_&*p0%Oj9z5c0z|qDwf2_`OQuad%dg2(biGOkV6|2MfB7|U7d?ST zrBgoSk~jvMC)c3nU9Wk4_m3s&L2iS}0PGJ|9oC|X*i~?+j=|O7w0Ifn0<&20g2IIY zmP3dJg&7mkN&FfXWq%vU0GHBbM%CdG^{y1qtPa6{NtM6g*Sc38FG1q5_Us#5Emp$# zjm5*AjCpYd1;c}n_}2bCdj?XPO!ads!)J7cqCl(mKBF`2dR#UgK>6TIgjZ{v0;Gj8 zOmim)pc?M5Us{bXXT16VnrDQ2fj#xT!qN8lZ2N>vpGW*LR&sFcouN0(5_O(j4p+ASim8pR(^-Lq#UR+JhE_h%M9&HL~B-@l;H$ghq02_Oh`K+`I10wHjK%?-=m zV<1MG8>BxawuN+r{2igH!)zAZR>7v<&2fNPd|74UViYb$s$zQ28kxyF1}ApCaz>P3 z6L~4?dY)$-`$$U)`mCiXQzVamoH5#Wz8a>JkEIRj_|vpI)7JF>X>#(rMPS;0l#&6( zh_%FR*abux$k}BjYV?cI=w^Xa)_BHa1ju*>@#iq!i~PH{}r@s7{E0>O={rXrTiZsWh|xuH)6Qh2#b@T|8$oZmER`G4O$to7>#^LG{YGhSzj9IzJ6@h}o z+@1WULe?aLLs9-zE%YMS3Io?z2E7c^eD1e@MHkZRVqIaAkTK(p>;hyTt7p-^Mt9R22&TgxT|(GOpTyfd$pJ=o;5U2aI4SIWafQ) zX!hx$N$}L}ij7e#4+F=jR1(Wt)MIp``4%6esk~cbbfy0EzZ@e-_JA>B{hm8U&}zJH z4XFqpVwiSTq_s0>QG_4c@N4#ZN+8d5CV&7-;E*Dj-#LWX58dgq>EVeFVtLoUou(b8 zf}eIzCXZ}XXd-G;B{)yFzUT71J~DK}W-&r>1e!8Eujj&vgyvWQEty7BpxK_&;!ojr zJ5jXjclL`c7$Z&m-hzW${RBPV;1shRaU+E?#N)FV-q=li zV7mB(wfQd*U^4Zvy(`NN0Is#3C_acX- z7}$#uUM%>YCSzfCPly?T``FQo z%e%JRz_FJdU)UibO<2T9_rRYyc-M9Y&{g-{ZUM31G6taW4bd_g=+tuKh#k9d2UAobpvx|+0 zYZq8f(X7~K^;$u9Og7h~dred*H?Va*RY0!(49Xg+CQuC%k>Cf^g1#sV3`SEFQ5z5_ zV^QPi%^$X!I{W_&qb{yd4l{aMk=|k*=__O?sD$3fghOz6*6ucrYHRiT!Q!yuTbo=4 zn_Qr()8-pbq*2CTM9Y0iF|9m(WT?K&HQ@|uO-1iRlFVTjKhz=)?VO?Sp(n8CX|YxP zIP1VYbPiTl8qUO);ZL#Gg+x+7N`n4QI*w$JyLfBB(r%CYX@%r;Dg!*~JZ_%&Q z<=K~y5(LM$58`YvdvRlO@YVr-Fcq6<+|wfH|d;4Al|kcN6F5X=kv%B@NJ3X7gm?=6PitP<39F61pYYyKl_atRq6q zZaEQ-|6HoCk$fxdAYqV0+ax{p)0%v%u>F;g4TNMhu^h+< z8|b4yXR6q`UZH3xX1HsdR@dfEYWf+((|C&5O$2j=M0QV)BJ%N%K{}*epWiniE8lwQ zqv2K|MFYP)jiN)5=bdB`C!Q9@8f5(hKWNxob4rGbBZDg)JWC4}6L&nS^38~pPRqHC z8b8kMJH0@CJ+<>$a*ht}mG@iRtC%zwtLioJo5}plwES$1mxj_U%O5)trZ;kuOk@|9 z{F!O@CId-7yusL;mNgf`b(_FLzVkFVk5I5;FrFoZc_ z-}U^T%>T>zpB+$n6l3czW{OqJXwa)yIT24r(knGo(IV~JR?Y~4iea#X?$$Z!)s$4b z|0j;>!RecAywrW4E$KXF@|bK!vLA2G^re{3u88}1 zb9(Gcx+VRJ85sN+l}A%=#}v64?-?!Dv9oPTsYP2FI48Y0&;L+u<4;y_x{P8Nub#S! zWzc7Q0Ob0X^sMc8{_&4co5-zZifoy_TU0YISjPi2D7Tk1Tac&Kzlf6>ZIdt(IL_0f z0Sbc!{(PDal@;5nt5%|>P(W<;`Tj8Q1QzI?4H0C%hEVd>rcH%v^EWc{(?eBz(UVRp zJNg3PD^vZQ{!!{usu9S9thiA>`kt;+*9VYEHDWjQD|ZJS`t)cwqXlzS8c(e@Iif@` zM@3AzH*j|kQ0p^W^Sim|vIV*`;5ze%g;g@+6s9!pw+$ND%^FNU`hxnU@K~6~WCHb~ z$z6b*a%wv2$D-(uyz;Vuo}J{zA(BC}ST+>&;+ z@-E(xk{j~(y7MBbP*R@!b~l)gxne?64G9=v@y0@aabod8- zBpNEXJJ}FL$AU;pL;e|K8^>%8+4t>^`2wh)J>*iUfwkSX6K+cAWGvIKo;~D>?1YK@ zJ)R$(=O0J)Tx`$Z)$8+J6EYEuzd`Rbn){xou8tQyuB(AJGaVFI1N$0xl49S3&h&sP+N$@t8m_NkD+k#4j zg_ULfC!5%pTBL)@yCtPcCs52Yv&zXa|Jc1ktt8Dvb^Lx=QQUZ*jl6HMp_~xKm{seO zji|=d4Wtgc+_wTrVTbGjEfmKe0oV`}Q1~Y)tWf>abx;l(o*p>qTrrycxdx#nR+ouy ze8Uebj_t*PoYRPzdlnT5Yo_@gw=u(0D?%!qBCtiEgm-VLIBUO`KBg45!an3#?*0;@ zzB@Rg+$vzQW+^#=Qwhs+Yr2Gn-V72{L0?#5qN@O|qWFwVSF)d$#c!$^ILK_^ zPA7QW^#l4NHr0R@L|T~-pyp)HI!=D-v(apfjS#klt_J(G$*a>=&JTb>2-uZBQ84cE z1etdt{(iRldm3(tW)oyWA%b$DVNcKJkaLA^B+M3LiH?dDoTP&{#a+DU^DH9Q5$Y=H zWwQO1*mOfzUZVwaQYv14F)SS@vUOX5g++IQZWd736m^D(IF%m^@Dyjnq3TO{*RCKg z(OE>6fe{*70dVNVh^HYPbXW&0#vdlukC<~~-PYA#z`Hy+Ub9wMv=pi%LQA)#*P_ub zz{wMDX-Jwj)pz_%V|`NfjH~>K(OJ&OII=T#474y5`$GIcBx6&+ip*^U^rpP|-GTq~ zWU1-az!e(X!^lOLUb_@l0eC_KFYx*r@`t>K9*n{vGw;#WtIMI|0FOn9KX5X^|2<u$8jxh{4hhW8V-m6mLMeydCA-4hM zKfyI5~4kDE+0X}XtPN15TyW6n~;5MuY0__|Z4*=O5=tA4@u$&58 z=nc6Dl18;^I2y^WFtp4mNWC_jZe5A`Q=^bSMJ2fhr=D%W>w~kzH3`UQ``r!SJYIg^Kt@`t;E9Bw=JazMOJw|e2} zJzvq+Dz}`56dX(YI<1cz3V*lp{+>?*Rc#JQs# z;R2O=JNcI%xP6V$L9R_4a|G4yM6mqrV16UkZ4iV+1l!9m(+L9234vWvtWTaHnWJy$ z*I40kBKHFo$ibE*NL4_LUQxI-5guv9jfKTf%HFhsZb{vV=s^7g3BB(vy>vyQH~;kV zi$rA8j3M9KWb3HfMFxR|2WW7kKa~uYZ;m*KLFQD0&BaqIw^ByIyU_dNh#D5^A>5*U zQy!p;@Suksb$(;--F=Al^WWyz(eCIo9LCO}UmIs~k0Sv~474T;J)RTB^GmZ6=sgk# ze$kkO_?lc5yk`siXp8eEE9oL^=XEUoI+#W^ z2L+}X7-s~+(O{bYsHkSWXORW2{{Z6GtJ|VWccq-Ic*8yDO5xe^GlF%`@DQqdfWJWf zoyeuF`UU9O&T+HKrj7HbwA4MwSImgaXoboc9)NWX}YH3Z)1A?!1Hfu7hizC(Ky?qWs+f zE+D_*u3<)4yATMpVWXJ4JGkx@f+K@+Q8DFscwwEq8k;1g>6n2Ds>6bt9wTh%*EE;| zKJe9b8+lh(bKdon%>e zJXkl8jgDJ|;QC2C%nXK}B|I3qoR^xDx$Ht{t3XEsFRXzJwzbwhAwSf%weB&VWU|Tj z^&vYCnbr=HSl-$}I@7u~LIYuE-~?t6p@yBOXkD)n2HX1MabcC1b0k>zvM%gN{$fwN zBe?!Gp43kk(YtG<9`gb(NDtDeHT-~4scUUKwpOa=*%bDr_Bw46V>c}m+)RC*xm2c|Jvg;5{$=M{CcsEIf1i;qOB%Li) zAg2`@LO+Sl3vQCpHb=nQ>Z$!X$&9|76CvGYA@>_*4|-27gJvUOk&c&4Lvy3vre#h8 zC6nC7EVCUUX|AzWK4-06!(TR!kd(dWkP(t`!ZlxQNb1Sfq6cQ45CuK@w_4@YNp%pd z>Mn`Yo9$=Or$U1^Nz$V)8M*~#>+$A6XG#YIUeH4s?~Xe;#s=5j!QYZX@Fa<%e(;9b zHQSf~p@tpbF@93nU`QHZj-OOUy-_k?{G^GDpUgHHKfNH%9zPi{89(`D{3Of2XZ+sY zIB@(V6R#e{{_&HZ9WZ`UqrY$bB-3-oPq!l^%{A7_=d87l@mI!AI^*vdKdH{Z@sswS zJATpvbNpKM;K{P9baqW;cmpRVduoTtLi^h*^ax2{@M?#fD|EQILiZCIXmSQlvO;tB z3#+qETBccJqdBJ!M}HvIeCRk5IJ0c|WyR)XF=vOhf`aR0QEBF^P)*bpuj!G3Pze=_ z`euZF8uhlL0b9FP%7fN7<60)gTEM(+4|iPqB+zootMdn)#z5d*W!YT}G zXzo^|(2mBx(#}6x?G&%&f1{mOP5X{^q8X`ION_+H0;Wf)u0`f#T|?&9u7~XJ=K^Gw zp?8Sf-Ib|j!H~>acEtLF6x|C!))Z+QsIq2w?FT~p`z~JYsJwU)*E)4Op2gl|!=$>M z{K5=s(iZ;AUK(;U;CZRee6LXXF zI(Ez6Q=UgfrPA0W4d66*jV9o4Q=wp;v@TTF$TP{MW!8AS{+b?-hGyLtU3O~iJ>}~O zY?1^v-)DwSi4RpxfZ%6ad!Jt~>7nnn`XR8}HpkfJ)jPJolLh#ynFhkK%oBV}7Z%mI zM4lS3qnH&M(A8FjE;cK4b)!aUn5yZj=g|+PT{is+8=EG3%os^ zy2JAJ{Cb%b+LMHi)`hK$(7PQMYKAAM*$J_E`?bVAvCMZDdNv~sy_E)@59!2tjux{F zGuR~ThVx-VSH3s<4~{xvN|-4LwK|2Be77xcW^6+-3o>*a{QrVLYZ8TdYBy0T1rCW7 zB`Q2Rj?t96JD!`gZ|Lrskv5%1D+Pz7AIu8O!P2NM5w6Z$26_gWGiShhV9vbsduuJw zeJc#TqI2{*HCMN%?s5jfFjqL8xgOz=;SAjczih4!rr8f=fS*ACX%@(mz?RHVei~wl463#A8p=>ramL1EO|Kp-7pq*GbWOyk%4`=PmGp<`?>>s;+*p z)|##|Md|*z!LguoUoO#P(sV_HtT0=S@f+AA8E{+u880T6a29!swOMn%R?godZ!bw&-Bw!f z3EWC=LgM;+psPVj)Fquo$RtKkbL%0^ln*3i($W|q6QVAJOsX0uaS$?j|KAfbAqamj zA=Bd^gzOa(YeFWu{5OP5Q=W4P+4<5nezywzYUFb!#+(&_9#UTGCAW6tiKho{LBrr}65&R0(?RB%@X@g38qI_a1T#Y}Z*W+Gm(4cl+}C+vGXBO&9++ z&AHC3Pe^kNtXipgq4sCWMPo>+MOIpq`F*cuXZ#0)nqjGfvP#o^7nvK0?3{sD^$5vkVI?&gH?uA#`)jOS zDW7j}8f)u$z*;X=!ziv^VR!7pA>2G~(^3FV<@m3+nm$kMk~rBAt(PL+kp1=Py2=E2 z)3)tjy>xZ6b!6Ao{lL4^|B=Nq@W{m-MufunRHF=W;1+No^s^rNqM?Zp4RZx zFXOxI9_b^Li~N`7?yuhTAa%n;(>Ew4kGvBJK2V$(#faU5Yn<3U&{Ogc=OrjuC~>!q zVk&V|5KKj<1da`7BMk@_ph)B_0X^$%qyDNM9!$oP-%F$GY9wC_) zp*>i}&cwZ+Th)%D1T>^X3BA|^dz5cOB-fZ~HIM5?lO6?>PVfkIhBh_i zyXpmdB67DJ@5cmAiqd_Pu}y3`Pb6VBVSy1^>eI*bu#RZ1w3n7HP>qB8l}r4;8(4Ad zwMK}Qor}wgJhQ}ky&dADEsjWoj21&yb2uDyJ2qb2iiwjP7Vs$7 z0Fwj{i&g`-y}oI=`?;i^g|khFGN64EOgk}D^?JmaNw)bq0y_(Deh(%nn7rj5^VzT7 z-_R_EWbv#0@~+oJWN+&4Y81Rds_4Gh{E18f{Vv-=zZ?5)#Sx50T@wPGXkDqX@kHu2 z;93Om=qZQHZrpGylgzO zG)$AAFUIg97l%>be(vtyZ>>{gzzpEahy7yDP2=g|#B z@$T?EatS8dT2p{v0hSh_gp`F1f|vA6ctT?PYm5`Gc!YX zM9xk_*T}3o6@Bzh5_bKBb3nT?wtIfpYGxmrHnFrMxT%|xW5_|qdg(b`VM9A7SXB^Q zFI5X}k~Vr)zas zW%oShR&N|=`>~dE`K$L?(R387`^X`v^YnhW^d_r=_xN&h zjv5^efVzC7J)obVS3rmXz z42`bJfZp-_IWjvoX=F)T{TolegLeJx^j0Nx#f)v{9L?FmKPTPBI*HWEde? z@4?xj+ThzEH=WDPkc3!kNfQz8k!7<@^3v7E-GKLNl4&v#^wrhELQ1kcEEy%4UVO}f zLB>u)C+^xT*9rR3OvF{28P`+4Tt1P9@tDrTD&uDoYEeh74z$0VM_cvv(aI3DN25%@ZZoZONiIAouqA>ynb75P)nJ^*vj07SWGNP}}|y*P67 zT_RVtMMYI0H6 zkLdwj!VEV*4qv>}Nwcc3M~^PDq# z*%85;+L9TwO_ob@Z3TeHM07M`nmgU;+SFi}I&xQ>tY6Bbcn*>KS9;()_2>R?gLsT2 zf?>8)EGF_%6%q}zut+ul-#~`{6BO;o-ZXWgYelMOgB>fpQBK^1Lwq+SBIN~DMo&#q>^I@0?NmK%Wv-1q9QQ;@w**M{7Niwoj3#4J_ke2 zYx*1VJ#P~To&VvbWC54Evo$%^iZ7N^tj6ZQxiwk0qE(bbkP7&&lTL$Mfrsmh6*QNE znEvCW_F#tkuPa1FiK=9)FMcWYXI?QcE-zJ8FT?ZY9xqltc`#Z+cXx}PfCf%EI8<0= z?Syq~q_I>LNfbC*S&y(-C?d+td2|x9Ts!wR{RazUK0v3jP#uC3Lih9BS+liS{rkT% zO}BE=ed!xjuZ=-GzC)E)NAA@>-j?O(srCKezkoT26o@hEubyX+M6WCa?r9+y z`;Sl~Q9|m8ToGN7UWi-EdlOLc27d$Ph?z`q=~k>eRYg2I_Ol1hoZIvz127H(-4k(r zRw6b9yMpC=gXJA4;NWYszWgwHRKfD@pdXbN+*tPE-B(Tixrov<$b?G`drYb$2cHRQ ztocDP#%^`Wpga5wvV4O-_jg2xJ7F&ju+`8P1#5RQ6$GC3uni|a{tk7qybg5UAjVz8 z)vxFZi&1=k31!Jqhml}VCJXptbok|DYK@0w$(1JM=lNu!WLwlHrBt<$QCS3i%FgBE z)r~q=(bWd&a0xu_CAaCx`e}*U_n*XL-tI3!4>MNCM3d?6i0sBWS>^_eh3+3kWlTt` zl{iaqy_n~_DKNbn_!66MrdYOuXXdi7=OWi(sU;r6Ae)W8w3;dB%dZ2BXzmW1jk{G~ zyiORn+qGGeMF8O0j9!O4f6F>ZW`2#H#Q#l`;#e%(ypC`eAsj^I|#-^Y|V7S{D6V zWo}13^+Kq;(*=jy6IjQyv6Iso>Uky*(JqYJG3qz1o@b{|Nbs#JRnPsJQPS>HJB$yR zt=h654I>Ltp&)MDza(CqnrYTRyp3B%TBWL-;`DMt{Te>9{6GvYaFEnvPvlDKZKrV-ygUNIDrd!HlXPTVZF`iH13q_Ph4t;YM20@-j1 z`p|_IY6CZJ9{l{CnCACl;+IACaPULf4m*KXU#mRt5Iho2v*3}qbthHdb=8D#;&>wQ z#tQxV;Tg)0)338W6+@5uKNYF(Yvo%XCKRVx?JmKw1)wTmj`P7JXWH(Ya=285d-1EvP(mY?UkwY^z9W>GqA62#)Jzk=t?`i4f0@;qh0#@E#2QJ z7Yc%rKqZN#ii-8Orxws}bg2*9JhgQ^4ea-1`n{lnS&a)A^d2j`3p*k4sboDkauw)C z6cKN5{cXvYSuYjg&t1IcSg&RE^OG+Z-^D$ViIu5~Dy9Mf4KAned_6Ys%k1CZ=&`ZB z`an&QylE<9M5pLs>SFvNS$}nyQix}!$vFye%)sHoZ3v5(KHLPEZ3Q>#xT>u z=wo}s?2%Vwf0No4a*nB=Kk|yjOJWdAa8;tA@8$^C8yYqj6}Lsj0{GK6np^I^LH<#p zGQ0PKW#{Qpb?^mxkh+K|nuy^vUhW;+882oqlx5q}mdI$mq%0BOt~k-0KV*Xa_MBd8 zNVQ{?J7p6K3=u{~BhqE4Go`ebO)Q0$Sew|N>05!NSB0jpAFlr0%JvWZTK1tUOVnmq)4u{-Lmu!(0UbSstkm6R4u2nT&CsXyhIXk{`lSBs z?k}O8e;v368t*C%oRV$5TVm29z5H4|vKpZl$C~;jq78GtxvdxTjH=#tC>TAjX&4wQ zdTW4a2djW%>TI}e%7of>PwgcVw;)}tPUxKs6|{h0U)x~6e;Y4+H zyaZLb5b@kDS+!Mcw^kwxzsq#gZo=wpL9?;Fi+#)6wlqG zGe6J)wA?xHj8X5BwFynG{!>576-U=ylm($;$0}Bf`3~HChInMn{SSQT&mf`FP8L?gC1gb&Ig*Fpdu|?=n|WlB z$2cnkDH@-)4l6x5EkTrVd1|qm*TuYq1^=<+B72=lA~dQ{IeFZrK^n&!zw7HQ>Tk<1u>k?mb@aN;?$yI6h76b@_|1_JkE?O#<_ zb=n9%Q0z-p*_v*;Bmbp_G1QS`W(_M7m%tc~R4>7cnQKXfcnnVInk&p%-;X?X*Yc1X z?Yd5W8Y5%WkN7Uj@4@~guYj+{+KrRXXksJ4yBvh@iIlKe?14+w9Yja#9V6%8Nd{Zo zp*ilrDopoXm3d{ryF`X)V{V>8bA~a>bDT?X(g{{jpu%Na5=@H0KWr2R5DWNcLTVE!TAdkOYuP zd+yfjI(;c`Fa*)1_TGI)`1Zvy>EiR%O;_&b|a)Rr5 zF{x4Hr`ou)SY=~IhRHJ5Xx%Ksl|xp$YNC>GY4S$-5z~o6{3c9(RZkr;$uCxYhP~N6~k-&=!1`7ppP4Uv$Xam6Ht1W*DbJFc#^o#CP6CJV> zdhbVA%#4X5=L$~g0e)WdN4V+v34sW#xBun zX$WU`PHXf#U$I9<^V~D7lV?X{FwcF{P&53RfqTVSpZ^tzrIpEGo0R1MSdjl^!;ik$ zbEu)2mutyXR3+GO7Ls#Lw4wxUS0+c$r_%2CyVMIlfHI z?_8F|w9#fh2zu0|`6@E1A!}ANUo~vWZk$%_U+vkjMOdUmNolAhkU}l}$SCjhHZRM# z>_>-bLxHRNgHI8iOJ9+{Q0ioH*j|!yF;JI2*7Tos=}0m;*49W{5~$Jfhv@v0t6MA zOkTer`K)x+q+>N;janeGTV{K3rjuNQLjv2z6(SZ^4_Pr%)b?jh**Cex$WUOqV(!>{ zR|mS0>)es;G-hWz$5*em*``;I!#35kZ(4SR;mocGbgr%l^sNrvmF@B;cCAkn`szM7 zEL&ZT@sE--8?|o^-IncC2XRoo;As;2=98PdqGnq5Y5;-vU7?`c3CP&JHC(4G~FMb+W&_a z!M~$VJas=ILBw{{vx*L^@JtxqLo4`g<9}a;XW6bv6`oa%6`tD?(|;o$PVTDk?Ai8P znRveW)1&m~%Bl*_(QVVOM*O!rt-|x({A}kz@@lT|Tp4{R`^|26OGL}T+p^up-aykZ z9$fr)1{s4C>JC??qsMA+bQ>jiRCt=gNz=theC7D*S0j;M{fg9~lgfSVSw!XH#T-n` zq+*oTbiR#;B%+-!(TKvd&{^xLTwL;IUNvOoxQI24)~u$`O^qOC`IEJ?fygLkNuIpW zu!#FD8%0)dJ!>~UG+N)V-HG->SkQSgY4#}ac=$;p@lcJ_9&x{8V~iq++J^+HMDNe! zD4o@gO1MhS3WpCR;zNOj&ua>=oeuLkH7ks0uG1dwN=s`J9|>Q%9a{sRC8UMZT9>4? zEKZ9na|lQadq0~+Nhuz{0Y5@wb<$`FAjeW3S3EP z%^_Q($Hr=Iw2{$?@aKbTK9l0jp_oX`hSD}hjP|rd+#AgavQgULc^xDRevPK@Zp}L; zy#G6TDl(^-irn)y(F`u@+Pj!PrbCUiHVI55P)t(f8HWi8GEDl#$xB+e_oFdUoDfhs z>cUK{NNcS~YpO_VUQ)pni)jlnPH*Ze0Yxw(tOjRoLm(O!cLbseW!?^DBEe5C!yc`w z^XN(}J4#?0?*L>U<6+aKl5#W>=CPpW- z73v;7WKV0S_YVmgm-%Ej=W$wl_|V|ACRqhBd3X``t)&8NBXaTAxy=&HlexwbaTHVF7N#q>(TH7HP>uk0 zfMdNq+$E^U*c!ICtK8$TICHXEvfhIPG5pL`=`RAsv5PEj=_~71);F&(BJ#D1$S@mO zEmYXiSecx*3$OQPwYf_O=QhF62B%?-qH7@!-0r0D9jilSZ>RO%d(pWlxat_3jj))}{pO&$ta8X?gdC$dpJQs%t}B^L#Cp z+w}vLDJANk%?~UM`Bu-jvubs9%mZeD)Ji;H-qG&?GlcxjL^hfm_khV+tCv{UP;`kd z1H7JWH8EDa?|fYFmWn&hPPt+w2FJv`YWy5>>f>lq4p{C5A?AR7E>`EsGuYKBmG-Xt zk#j>F?{14mGcSsWC(CG=v?9Xb$}B1Q4Hkwz#xIbuF$+J?4c$KfAwj`$(U3v+dBQpo zsnLA^wA8dtgkOHamJ~E)WK4#Rk$RT(v(6DH{XLq_;)$-f=L)|*!7{(L9`DIxrfBA5 z#5@hp%93n5Vy=l7?=fAobv7p1+F`Dmbs3Y^V`qrdE&!SWc8*}!V-LfAu?)R*JVq5K z*-k`e(KSeTl--2@KczMgG7}nO6MX}q!{iv+=(RHPS7XKnlUdIw2Qdyicrjb+aslr@mMj5 zJvWSYjhUYJ_$lf-H2c5!sa-xDD0RjYZPV6#2gG zbV%8;T@CyP=u2{A>eO1*5D==6_ny7TB;zp_(g?rpM&zVF38|Hj{^8jDM;SUOwbR6 zrFwN(hjjY*5*@^OYJJx*lI{fS9ECsuRte$mcPoFmUS=GO;S^8$iytn*s*Gn?z)X+* zA07!Xm{k65eOGT%S#$dwt|i7{h}X7AZ|8oOw$LS0cm^?;=aA%M6hvmDpUJl7QHaIJZ|*vFD&R z${Eb|l|RzA!!4LpVjiqW3b>1a+m$tSH>)dd2O%w>6Xc3+ErP^gD@xiTE3?}+d@3=J z3292geJt`yDvK&_Tyvd{T3)YgU9+_ae9~0fD{D!km1Pw-8hMpBD(fkWCl!@gcJYqE zp|Yr|T_!Rk9x?<^-;TfUE-6ICxw;1a2D|Rw#QZz@f(Q7u#2~|d->#lxY1E^U!R%a} zWLa&Ie^fsmrgZb$wA)YP=ydvY?!5Nqh7L&u8>d2?+;b+m-#`6KQ)ia+rKVHTvW?S8 z#$ELLSTqb;@g zGO<&PKsyorY=5Z|<6Tm{k(yoQk0q-ZF6R3}Np%J2N@IzbB+-ex_EkJ|b8Q#>K3tN5 z-vGU(pg5tGa#iMspxhF^e>RoP%6ndV>~lk%n5%0ec&-#`Eq$XQ3;3wc@hu*Sa1)#k@RUoS&vpdq1I>pFd!+HTbiboH9b zdKyV8f3L1ADZto;`%v`1{F5&wVSKZwOm(s-f#nJ7JuUdgT~cLUgG`yfAjk|ito1MX z^R_J0YLgOh^6yx~3Wg06L!2x?7FgSEEp1zTqb+E&Wj0RNT%7WcT9Yx0Lud&MW0uYG zz^8h_C=pC$rj;&ElS_EBn?EdPJz;#4={uvt@gAE(8q|%I_?cY7$D}@H=R}sf{G%*a ze0%i|JiR}YcSd8zgD5{kZ!u$gKI8mfd+6I3U*vP=*C7doRGZu2;tkC~W6%5cZW3*w}u`vO-WnOIkhFh|sRO zO4_h@V7}3uzRZh{gseqR#7xUdYZ8s_cArr)9R}&BA^oCje#pM zw}0g`=JUV(NmC(pg_TAqt=j%J)h^%I-FESE-Xp;(Kx1dU2bJ9~-)O4u>be8MVYxNc zk#c|l)m+^Xh~oos>bk)bKpsd`8%7>j#9B)V@&8Uz+}w>brrh82VdR z`)}$?w}{5Rd@g;c%+QAFo{dY&u+C-TA$syRFzmbF0H7o|-PB58kg9k?=Sp2#;+Of(!0(FhV46mZNda4s$$!6KivNXEV zAaT^OPGh`A*WU>Zh>K2FeFF;*LNDcTt zyZCem;)GhVZL7}V3qCP1+g2GyHnQeWA&>^y$HY`uqKJ8etJ>x645Xc|P&hWbisYj- zT)ju@*hhKGEB4_h3w|p5~n@YQ-*rhnNij#qZ<3qlD#9cpbFcz)?$UQ z*@S}GX3J9XNaRl5ouv@5nGqxyuUll?0-_x6^3AKld44Fbc23N%hkF$6fSo^B?!Xw@$T1PwP5j zqrU24()^n5@=Hytr|rR}f0T5^Fw2N>lU6L54^?3$WNw6UB;Pjelc@_l`<(d3IhQca zS6jx!=a3!qbT1vE1zJ* zL8BEK62^yZGQAmgKktf9DAPW=(@OA3Wi#4BeH-2i;kQtSVJg4I#PpwQ6zY_%2)3Uz zG2&U4rEx8^&6LugR1kp>I4QzxRs_osgH?Dwnm*E@KT;x^7UF9?#^K%hdJe=RynfZe z_Lzs-qbo|$NT?qNOVMeN&m?1lIThkmXFtg}5Z)7JSQ~(`!x(fCeKgn}_9;B&Bdyeb z*HSC!-Siv*3)Ay&^}=TD`YsPcr4qe#mc%GW+L-)Xk8W?oX~hG8P$^U+on>b1$^w47 zy%+%xOR&`HEz}X|us&fGd>C3DT!6hHR2m~bX^3J^8ob$)1_wN8h{r?v${(w`p;wyQ zqw%88z8GE?*2pE=g$32QH|NglDR8mOQ^vaNF)>L=HIiMG!^0J*6C)1B8`}ah(9x<&)**M&Je$4`Vv~1-!?V`v3H6mf z=KV_Br7dXV@$7op@Vc4T`K}#ku)@O?=mWiwEtGz^-}DI@Y>h3x=nE6|L)G~OaxA_W ze6nD|gNLE@XkB=IFByK`_%QSVcA~7;ThfEaT=>rafSpun8AJv4X2+0OPcuKdblTUM zdpxVI7>>7-u!=-#TnV!d&d~3)wR{KYUxtsz%Z%BK`xEVuH63r}ilZ~xbXvT#L1tw% z7Bn13!8(fm;8BM66oRqIG5nJbL!=_S0u2AMFzj@SPZLY^^fu37EHo{$ipEF3P4u)N z{_yLd^TW(cXw^HcI2@Q4I2iePE}2pcJV zsV{Jm{S9cF^qmH7$ff>906cVz4_6(#S(hkb_?lPv!C_#Ag# zTY;#<=hf*=Z0N!c4;?%#^KR5UlW=ZyKCGf;`3q$DNC;&RE4zVVzmn!VmC;f@G#0-F z(;V|-V-aLoX<8W_fp;WONT7@#eNC1H%IH!-X{sC3Abgr*L13&Hg>tDjt&WZ`et#D4 zCE|r_T0e)a?Kzr#Qf`*`=)6UK|EJ`mFIxBijeKV0dqh4wEYI)%6Zs@~bkzTw0?C1A zKU2RjrO!!t(PgC%{j|f6!8xxz|C~!!VA1axI$1kXGq(7a68(s1bjZ3Ndv__2@K3(l zP#*N%JATe*aOmBou1kSM-y`f>6w`c6&6nZT6!DgT7Kzak{7@OYwi%rHRX|S5uvKp86XWVLq~@9k zqaHS4cGSmc*U;4{52hWL6T<+p5tW#Lb_)Fkz7!1IlLCz6&eXg@`7)sD*rZ&_%2Ox0!y zJDIvc21r@g7mVr(esj~FVA<|_1a9$5TQvUzHAc^BFdu!krwSkdIeToYeOSmID|(AQih@ z%%{^7L(S2ie)u^Pn^a&zVS-hx(_me~b$(ij?Y^?S8@!GnQcu1(tOwz@&ehw}hja38 ztXh$Wnj$W;ul$jw#B@4sSYXYHK-7!;c{gZb(26_`*Pd4UkwaW)!Q%ow0}S&sEw$Yj zXlJ`G#v;GS-n1AmN_M9O-#TpLkZDyAW@&m>^*GZyD8I;AburV(f5706`OSKooQoCP z$*}9sZV^5f|hBGwBP_oGM-Ox#`*AJDhi!OK`vL~ zMX(Sor$l3?Zw@F60-TDCy&mD4;1c0IAuLZ#Tt?SME`}bXVCMq=FzA4NRVfKP*>?wmr z)kqsvV^1QZ()PS+Dj=ghGOG`_zmAq=MK{Ze%Vmb1vv2Rq3ouC>iQ;j_o;>fFp zSJLR5Hh<90ScAx$Hhl(FHTQ8qR_ENuvMdYR_m5nxDJj6i>)ac?E`Ezs?Qx-`dHAmK zi$9dm27VN76vD@?2zRm^T$+Ew*0i{LS=-{6+XpJ1;)A~ew~ff%3ND?L+qflfety{F zdz1NiJJ9T!jZ<_9ZyBn`4O(Ti7 zQDstIu{r=ZF%=h$9!Cb_+Z^Pl`{KDBFhIA1Q4A~5EQncFQqjW)6XG&5^X2k(Lliej zSVCaC=y$NO=xOd;+b<^AV4cXfmTmE*BmL@qTirFzw#&8scy7h@J%_~}7i$JT_PFq~ zZH8@8XDPp9MBUsBz#p0sl>rwRR1Qn(4Z2N^RK1m;fZ1l3>jA^KYNJo%glC3gf zczwW%aNl~{pkl*aWKdX-&fXUfr+zAeJe(l!0Wh&gFA8ty`>VlD2o1njn~}#Ad~QL1 z$M)bA(<60Xq4IbZTK4SzZah1BREb>xUJ14N9n=YlPa8e0RKyzGCn%_~e+jzFoPmv7 z(9_CkZAS~8p*frJazF`vPeO0!p*8E4TC0Qhc+FXorjAJKs%#Gyn;yaQrK?!>|X(@@v8ViJ~5d?%gQwxYoL@Uy2+ z7h;jeBac(2^`?*W?>)<}f97${<9PlNGhA;Zk~~B2egyi91o&WW9@+SE4M*`R5T2~A z2zrLQ<)A0Z61@VuCH$cLPCsCAt^QklnFp-SU|j*r0<3d&tEbQ4qpt{hio{6zJA)?# zXlmmGbj!;giK!l# zbRPkx6ca&EbejQ6hKHqw_Jwp4f`&jh5}5nY+mfive~$kx4di|);qHGW;l727z(q73 zP6w9@w+?P6+(Edra6iDA?U!&4a6{ny;G*Dka4X@qz9z% z+8>l~J>gv7eBi?2royGeWy39oTLt$4+(Edn;p*Y6A(I1~3!EBmJX|u|Jh-KB>*037 z6~Y~dqr)BgkipS0zDEF$EA1H)ajk0r_b<>=w*aoISs*ucX8;%N6v)S;pW>JRZg*e2 zONa13JED@cvZRz$ZF*dqR+f<@(}UJ!X3WftOOvH!$@Cc+veb<9nefPxU&rRT>xM7?t=Ys-*YJ^s)?{HeHsLoRY?8EKADBlx1q;5|NPNWEfHt zWfYBgP0=WHLV8?$s+NjMK%ibL)23?Y024`~1Z`H9Ql`z!M0WjBQ--w2ONcK-lg&-h zC(9Bt($XNYY(T%%tO2a>7HP7ydc;ZBXJ(`dRm)V#g7ulHuEDZ+ZF1b46qJ+}mjgnU zl0GLcHHE6M2kTzAvOsR@paA5?aj_Ev>3)<;1>#PH(+hMi&r%}aGQWTfh5-+0rv|0LIDp7SOg@!o))kINcyY+ zl3wlr?SN*{jFtkiz@BpgIs!w0J%EV2PQ`Bed_{nP?U{(4}0AUB!i;|L`A{DA#{i9jdda)I6p z91OY!Naa2O%7C&dfxNLJ1n3M}2OI?40HjwJ3W3y)OMxALRX}Q=V!Jd7{3k$)Z$Fjk z%LPdCgaff#VPkx;y@~BfJl|qFNQVBYJ(@v(bUu=i9xo(tGiJocWoZ*hMEDaDwF#*} zU0hZ|Tq@&X?{D~tm@z}2oI(L0X3R*6%hHSfIobq$My3#r@<|nm88ftT@hKEPYi>%C zeg+vVM87-l*Xc7Ap5SF_v-FuM33>`Qq+__4nXXObL@o&^OV`c?aI!=UY2UMm`XkYNcm^RHUk~P7;fBJ|2Zhy0St;}#Fn85Pt+#G8B+P-T1+NONX^JHWHPzvoW^DTd3qs#jP{MmQ}j%~Bve!R z&kb%2XQDqpm)JQenR)|ipO})RON~p=rfJjlxP0iSe%fT&--ysWPLpnAO;R??v+#qAj#JJJhakM zlcrn56LtNkv11c+Fm*z6Pf1VFr=Zu*(`NEh9;&+-hB-`jioRL17GoezW8MC=h{ia7 zD-6}~4?6pcd|UKaeKJ2I6S}Q9{>b|Dks;g0@dzzpM%>)E6by5XJU@RmCyT;3APdoE zC1j@PShwb6LDbcQQ{%F-nuW;X^fKobVS$;MaXHYJ5H&0XT{ANwIj317gi?4$nvO?(sR->3|TUo%4X@%1u4;TTqjE5%%%l$ah#4z!RVQWnX4-| z7yfi$0+)dqtror{aN^<1Hzp0!D zM^}y3`SC1%el#pKD=-!3g>mR3?;Ho-uuQF%X9@Iht$t!$s-XohQsmKflH!eMY?8s5 zXq@Pjko9Fcua z^pojL^ppKf^pm+x^uN~3Plh{@PsTvePxe63Z-cU_Pg%jyxGj#>T5brJ$jeVQh0IV~ zUn7{201Vz7f~I;IGDhX9FZ4y>ET{4~yWfunv+j_N>2`m~3mae`EEj^gcuBe~APQTP=&3Xg#T>0ZblN+JF1Netw#@%2DwZ6K$ED~EGTV%Pm>;Ci@A zaMGE9Tr6B69G8qwlEKluAQ7m8D}?*IIYJ_0=y4_2W3G?}6tDLGbe=$SjMQf7XqMoP zdi-6vshFiCAXX~U&*NoC0f*)^i`U3HO;C1Nu4QuChD8c&1{jDr1?8JXg-$3r%i%9V#%a!($e3jXS2gh zNFb)AGtBhxcV%buHD~RFQnON7>gT7Wa>S9%74_9)Y|erXGf^g!BoVck`;TRzvd{>3s{ z)`N|=ftlK2Fr5eLQnCWaM2_Icaw*c%ZAx6GHj=k`V6H6zkNAIvG`>?fT_Xs?gGa~d z8dEpplX*ou2Ddj+8R5YrLJ*Z7>jQPVh>X;fgdE%z2p7R9ZDv|ZI_xkR>7%v!l7XlXn z7Y#@8W8sqFba2^li{X~Tt%utRw+(J5Tp`?PI6BXCRKQ;YXN0SVYk=d@pg%Y%oD5D5 z7XTLpmkgH;w;XN_+y=Of2c!evFw>9);{@{3Yt!Pj zG(SO}8RSF0B8&2G^aqZ{k|ns&qlYFY4$a~7NyOnI8;wIoo*W!pSeP;`O_`NNz0A%?a_*^L;Rt}A{RE}6*@{^rJESKg(VwwD@>E<`t={+JaEup7uO*}Ts$65Ce2JvnKe5#Ej>f`LS~lUFlTOd&b%p8u@*7*&%Q^!^1|592Gu#%vii%8yPiW;-u)9$xQ!$9{&Fd{d28GKN{u4 z@z41=VSgM2{~Ja?NnYb077G5OLma^f7fG7_OeFv8PfXvuKL4z~%~O!y@;T#wM|{IY zio1HT6g#Z(kaCPGg0(GD_{|jY<8tUvaOW^$);8TBpX}}uszTSBs*h0 zknT?#fMlEFUSexHEP;+5)%78jxZ(ugC4={W#TLY5|+6nYhU_an0V1M9x-~ixeAl*!E1Cs4< z4{$KB5a{M9$-rzN&6sn6 zF9DYVC1?Q4fhNH9KvUpWpc#ZI9{{arAp95718smdKzpDA z&v7{h^9z-XW~FcD}2)BzoU^MNYh8lVINa^eH4i0=b^5e%5IK?7}ok^tz7XrL2e2;?LTgPern zkdrV1{S;_6AN>^Q0Mr4QWrKqSfGihe`;6mJyw?un@5+hK?$yakLI>H0=^!gHL$a6< z&EnDX8#NbwL21gY7efsdeill+Jq~v;B;-Kc0vA7_}LSL;k=E8+Jh^u?sPq;HbMUJ@Kd{R z1sBZ}egphrumrL8L3}EU+6eih;HP%simN}xPlt5mr#S$%4_C|rh)->VWTyP7ow&kB zaj313pYo^nLS<1LYBN+{lAqd*D{4;pWI-dur@B!4afJlvR`65WC_XKTTvJ;V&lj~vSHvbcDclvY>HKE%^r+!ZHC%8`DvaS!1N8~fPyM3F&)OKtN&Q3Qr}5`Pl%LKc^Jg_nOZ|rQMrjjx znTO*{a_ALw9$8;teMwAB^`SmRXE_Ej#lA(k(AnkC!dNYXcr8*proP1Vp2q8R46h^B z4@Yq0_&lf%!F>B;_EIJXjklC@G~%#+6~yb2^%)kQ^%=%b=j$W(8PaKlaL$;-5#Tg$ zL#z+5e%rjA1@m=GrRqQel8yBfcD{pneKkLq&Et#p59Me7;&>Cvw*_|H3FF%-8%yxa z2W7B22l9QF)tTv@)j61N%UOcfsSeG{WAd>&h-F9cS`y0+=g$-?JCc`!l^rgWM{R(W z!O9*k^i9$k(=i)Qf&@9za6J=yfLKNde@PD;Q1`y(fk=;dV7Ap)Qeba5%Z1W&n?TBwON*L z2w$h>d9^$TX?(A0DdSkQT=CqF6#P`jiM+g77*&X3XHG0XMyLxrC)5{3ebE?CX(*&+ z8rBn;%t8El5OqOg4(n$ldHGqKD51?!>9`kYj1$iHeX;IzkIC|3Et%yriof?{aUz8N zO8ErioQY-Oex)((1itODv_Z|{M>OM)6V4^&!$u8OZX`dVFn^eEUMLPdn-*n@;N@?c z&rxq8J!SGp_rjz@x`%fGu75ROgJ_zy`P)Xb&VEI{`lf%7Ht8WMd%B`GGC~k`1X1FdQ`5Fvyl<35*8) z9xxGj2B-t>1kMMR0ha<_1Fiuc0B!~z1MURw1r`Fo1|9{L1IvMQZLb0r0gb?mK(bj` z0Uv-q59D6M=W+oyz$-v|;7Onp@N=LXSPb+7UIK;zw*sSpyMVF4Z-A-5*MZr<8sK8! zm%vrPv%n3&8^CSAYrwt0>%bylCGa%xIFM{meSsCAwLr2hk?pA#bSjW+QT>7Spp$`Q zd$R^U0UZt`ThkDr6*8pX}_kk|J-9R58jX5E}FMtuigFvzwk*#Vf z=%qliJ$Vx!G}(;E#%BZ6gQmFv*|vrPb3yBY0if-H%Rzq(To0sq4%r0T0k?u43nW{b zGjI>+S-@=2y?_Tn#{tQ9*dAC48nml;RsyA<7Xd91zXOnLWE!9&_{)GUz(@)Q-yP@!ItREJ@%sToK+goO z2kium0G$M!3S0>!o8VwzGUzm*9+(d#+nhfz7xce?5ujDT<)9Y>8<0*8Tn~C9a4T>w za1YP`JP4cslp7nfnEZf5Bw0g z6gUUC2DkwjhIHM4n?X;ZaL|2#J3%J`3xS7#rN9zk1#l102rL9P08are*9GE>0njJX zI{@uLPX*Gw{dYho&_{rNz^{N&zz=|_z&C->NY@>>81!4fRlsRLDeBD~#m^CBrh6+k zi%)1ae`g%_n~HGp{*i1Vu8@rKWOe{%C1UqqwBD5XG~b9vDq6wWl$O~FXl5eX3KDqz zP`R$q4xL+OH%R2K=WH%a>4{I}vb8VFPro9cR`xdeX>4G&3tEFoJ&fi(bZ<739|zey zERG*Tm_MGEgZY`YOZ1aW%+KUw{uI7!=AXr%1LjX}mXD5a2aL}wHOx=zal|}X8)E!< z{JCfIHabJ%T#Z(Tiv9%t`p4qXn%5?NQ+!(OD)QOdA{L+No%v_-I%WQ3{+uy?8h>42 z{&Zfa%+D-LqM!6G`kTtt@oj?f=?+nhV`#>oBj}CpF|~r9?$0TeXxB*L>&|RL%wovw z3(QK!?opU!j``X768$tEV1D`){i*!9X8bgMZpiM{S-H$cz}haeJ+XCF%$6bY>AsHI zG{!6B?8^U=pX6s2OlE(H=W(ObpJ^-OU1&;7SKGL=;q<18CE)rPugjs$sS3o z$0W7tYaM@%-blfldcO2e2wdCHw1ey!s3ikQ$p5{j{yqxsf zj9qd-41k-A~`l?xp@=BYor?M{WAkk~6bx4ko$x@*QGo5<0nG!-W?n zjyzIwwGAYFb;vf$;7_;Dcj&z`;Or|uw>^7w@qo5<^GnwB+clyiQU^FxUya&y`fyxK z)s7ugPuPT*|1z`7!Smxk-uK(U6|csw8N`>-+vb%oyKY_i@x+fd4YyEyI%-B``SZ=y`pz*$?LO#nC$(~r z^x`e#CtcEWO5E7=ltC}rJANBsHrTUz=#K*;65f2F?1L`1N3L`pV%aq#eS|}LH_~>1 zd;fr4W)Yb^A74JdX5g1+rX;N!qS|t8!LQn#k=N(Gy+yVs^6}y0JNm5|HTpXo2>27 zW5vvpiLzd6lm!Z_w=Gk2UmeoUk<}gT|Mo`X%+Bdnoi`4?@BTukabbtfZn+sc{w11; zOTWxs^T?z~-+ehZt$vT;__dGh_E&!UO{T3je3bLtE;SF+j;szIcdl&hfC)Rk{d&Ny zZ5uxL#Ge!yFtYs4gZia?Upkg%9i3rzIJjh*YeSf2haVkdHvj5e|KN<~{UO~pzwq_J zmqSt(NYWomH%@fOF>HO6<8FMq-_Njg(d%6_XJ#w+F1!BnJC?&jM>id5;Tgcbj)^6A-VOH+I_AvmSxpj!jFm?S0>4;?0Sjiu=8BrOtVA-MWi&RU>-t zcI`D>=Cf?o_V#OHF2ih{%ZjzRfDpV-*%r} zdFf6Iz=RQt<>-&JVU5+-qW+Sbialb=qNxz_i$7LH=x6S%^{xkC> zuEBd!41--=7Ek&>`ctoRE@0k?oAHIlSxYOVH`kvjJvL#Pbix-g<(Cfq7VWmE(6n1< zxT$a1=x#f?W4*pD3eR~rw@h{3^^@BTebT1Cwan+mif%b)Gv^%7-n9Q_&KT1*wfxY5 zE$we#nwpxip!V(WD^-u*&4`~n&a>dSF=p`f=<9yxqMr@x(|P`+Z83)L`$x{4+cja| zt-2Z3zkiqFYxMBiY`*Q~{caC~ZF}{;7CgCP-7npDZ0V*+HiH5apDs8w)U0gOp1Z%? zxH{(DSF^5J)o%E4?96tXI)C)_=bt}pzs@IX^^p;Er{5SnW39%=_Tgu%Wp>`#=f4R$ zUwplfy7Q!OK7M7!&0ppgoc#X1DdUHl`j7oS$Qt=_(&`7}twN{W2->@Qi05bTWxRJr zlRnRR@1wcJqsmJ!%&ckHwtJ?kY}aQKOHM&?8@Q!@wR9hk?)Tay={>VUnThr`#fq1I+mUTI@Z)h$eBY?+ z*I7O|yls2acU68*oew-&IyXA_ox-iP{#i%v51YR}UjM3X?{3$2fAQXsPwgVMuh`-H zLy+gXH$M928_Cm)KVQf-$=U3U+$C>sh`6__>V(TKe;@DB$Fs_3ru|^C?d@?5_f3y( zxiNmTvaj^YM_Efk4peqLXKMel?rmk&c;om_Z;tt`Yn!1Tj6QVZ$`0$XcjK48cxV6F z-T_IMxctuV-ZFf5`u@P7i}OhQ+OBgGfBWU)3;uI9-yUkWASwKT$B=u4Kd)?O+bLyD zc-A)C{;>g_B!1RQUpU>{^?mQ3%C5e$*X_%o!0^XkrvX4Cmy1`p@(o7X$*7oj{GEYa9$0He{Cw_%_vgOX_t4fwQ?{HQ znkn^qDP-fJ!cIrFjd2ez+vV}j!2?fs&T;P@KE(Y@C-vUdPj!mQsb4O6!!GD|httCv zs(o%Ai0^ej4{}Rl=ZyX8qT^eOVW`uHSb@_8Z#T^>*peD|S|=!Y!%`%d!^Si~Z)x z$>W2+NwM&LxzOpZ#p_9R=_9&jTwC$FVUd2i;;r;!Zu?d#js-cFuFTo(biF;Dq{P7D zx0YUh(Sv*;N_VmX~bedipFQ&N~ZR{6x%~+E%{f5iR#4z7?*LJ9}^^ErGx_8aP zumN99>OX(T)dIujRk^B8UtDut6?QIdp;@idn-P4OCOCzrnE#kraT2q3oW#5%C$X^S zOe}hGCT;q0CfLQ;)Y6MHwNi7YSgvAbJ)SdbI}Iz9QaE!P183fD5og|h6=!a{iLtOY}@ryZk@-3Ad z;ck8DjXc6}^hzF(-o|5mVSa{CE>{Xd7(;V;1152Cq-M-?qkLK(^<-+rQLpi!0TPFZ zjB5I&?Yy6J{Sz3}qV`fgsrC#%riI_?q zz_j|)ODs?-#93d&JnI7((uV2mK$~i8S0uD9V=fn$l|r{HTwFp1e`AyNLMFSR;gg6G zvGgr}Ypu7L&ewE*G|tt>oOVIG{>8>g1sZetZ%?ge`}m_nT;Hu*qv>&DwN3UDUxcey z4!Qc4#zB|<&iU^6ltWR>ql#UdHSc2kf^mboBRt{wqhH_CXnx7N7q75H_)jrCyMCy- z7IjYJ@D;w2&Ydt>rQWXj*TwSENf)qtTR@4chx;x~uaL@yYx9tP^Vhl#&U-X-B0hF5 z_!)HUy*s@&e4@EDA+o2Y2J#hYfA8M;GtJtW%gu7X#kWvmkL3<{eXr){_v6p(Jc^y! za&J%1GXFxeX~DaF&y{pVej``RoxM*pFMV@Iqp2g(*N$oXb)jZa_?Xi-In*b>sn1@I z0~)VMGd*?p6iEMJ)E8^N)SMVI$7y=|f&N_0ZIk{#9MqgTHDuAi^L2jQ=G5Z7L5DQA zN3ZzV_9k|Li=Fj}`HI7u59jXN^8QNf5-0OJ_I6s4CiK@EKd#8bcXYYyJJs!qHM{Hc zPldkH)1NEXch(dZYc4%|{a&}W63}DKpN>1CDVpmXV72q9A6N6hQU2(NCNROF-HBi1 z{#--Nv?e1r7dLkEZZ$26Vd)UMrs(tuvoWy^}=n({Z-J#krc*AGuPQln)jG-sj$ z;mC&+VQc(2=K8ky7m)b<`|9|5KXThmW!UYas^|IRuOq#u85 zA9qTVwLLLBJ;}|hclYC>vpfc=IP+iNq^rFv+0Z`EA`63zAr+)*oEW$yPVb3zCPrB z%0@THZ&Ky*)>+NV_wrW#Qit$WYvx4vI;Y`Qb^W34<2ES&TCdzU&uNm^-G8(o3*RIu zw+fwNU9NelUu54Yv!QR}Z{E3K<(lIi_wRpw7TV*s-V@zkF4ye-`S60PageWYR*x5s zmuuXMsJ0yC5KNl7>wtfE#n#aAiI!hOJ zMt&VWh>yRZ>DbL?h{K+a{#-?H(F^M@XmY&Y*_q;t9SU>X&MCfpL37yB_R#eolxPoM ze)yTqMU8vK7v0``4gL9f<9oB~13xy56RsBm)*G+#Bb$gdxr`REs28I}+LyfpI*e= z1B@1t%V)HR4PzKBVs=*{y@0y!F0lFtSo0~PMXXrJXc5E4Fj~aI9*h=oGukJ$6A_n| zFj_?2I!22aox*4l3pI=uadSsTi^$zB=kph_;s~Qf^m&ufB1*FuEuwA&qeU$0&u9_X zbBq?TW-rDA93tjsFj_>}AV!N=RC|_>FJkN_MvKTzX0(W_x-(it`PXOo^dc6$!Dta9 zVi+xAjRT`ajQ#F3pI*fJt&A2?m&RxjxuJ{}G566aKD~%s5u+QCtI^m&AM|y~9zahZ zS+eK@mh_C6K6%*-sN2P!v1bE&gU$ugZ4G@VlGZxVXCiHZOTnjE%_<<-LFucJ^elHh zXfi8q0Lp-yfn*om3WT+d+Xlj7p}IagXnViKiEO=MHa83`<4MskiW1GBLtM4<4bOd&i+&dtbigG=XTU{V*4 zuo>yvY<*l3c3Y*G;!*!n%Q+&KD~3SpW8t4c;l%6aQWi@{`cKA-`PvtxnAU z!^5ly&-_1T>!!lSwVDY_{tq+#hsn%Nw<_;%(n$y6S-*=A35_n_9ed+rJ5jw;8h<{y z2zZ)-!dLwMs^Ec1YgE{@GKkCMnuEQEp8bPJ3*r_ zw&d~oEpNe#;`3VtUXv_Qe7w!zZJq}CutAAF4*eT#i!YO>owBkSn{RW}_E#o=*flXX+E2Mg;QZ>}|oD%$HNxoEOF79c;m4@ruB!!igKg7wnWxb>8rWgkM)B zoL}m?+)?moJQH{x#H#?WSv&9~9(_CDJ_aZuo`QH>k%ZfWN)8d~wx?9W`N4QFB%bYS z!pCX$LtjrK^0a_NpXe6AU4x@T46kS&-aUZ33ioH>W`hH`j&RMxOPi%9eg}^Lg2w#u zxjtSFvAl54zYd?_)iNC432l+SuvK_-`G-vm;3mS+A(q!XocK8t0tgzzTj#$$=C8wD zr~GyJg~=_$o0q?3MgaE#937&3t@Se|wPkqo^px&OtMI+8^pl^~GJWg%8Fhaho|5&~ z;ZL$#hPRgQ=z_lvzrOIV!-xJ&_~KUKt?Rexoxjfi&YLa6kG9g^gdHuzTc4jrw+?^(aLe?q<&P|F8Qwbmu~RL>Tc_WCp=EgU z^S{snYxdyi5Zia_@xjNkWq9lSZERbHH_t!C4{P$^>@YrxM+p3W<0SkzD)JT`Ksc_i z&pZC}U7P=&@7nB=L?&xfQ$w@02?o73G zvE_ZLmTer)X($%$85^9DsBPRg_MF*xZI%JM>+w6G!}8D1h!?Wt+|027H%XkC#_zk=6f~Dg8=aA8Nagnn9D@z~kk=(4_r`c=usbBQ(RVO* z@6Slp;;X^PQ6T8UG^~o5+$ZJ}(%Hv&5<{~Su+bTI`GdOnIra-A#h(T{kR-u|%uIZo zK&6*Q*(qX%KVfauGw+Ir2XyXkt zXKFJ=NiOnv=;QF=1s!WDFA|4onkfr<9u+!%OsLp=xXWha^{Erm=VE_B&XaW2tgU!T zLa83DHcQ6}6w`2R+#Ky6_?;vn{D(YR2gEn4L94L9^u$PAN;1>qR=9#Q-b@Voi;5uOr{4f1oiPpGzZngSCOadL3acEU6~BM$w752wz=C7O+o zOUXjV650vJU1nNK6gmvo#bOe6hv!=+7bj`Hk@CFO+T?SrY}EttK8Yz#k&bO!AI|%E zVX=<6#ZH)z=5y2VroAmekE0U!GmozaaM_Y!I4yi{<`(k)VJX-piNg7kU*&mYaPvc~ zN!+Vw6VOmfBHxSgr3mhGk}WVeg5%zzoX3WaCjU`h;s|OY+|Qw?#56)sU4;)eSNvC22Epj!h|+Fe;2S=ye7? z)$tiSEBwHL4xpu-liBFSbTyVzkv9@wsKB12{YV<3BQjE`(SyZ}&!3Mn~freRD(DN>)|Ka_ARs)}OI~+3R zR=}5-p5iOzjn9-D>r4Db0v?(9>tqsp?jeyqm;JX)6Qq0oEbgz9QaarB|D!{UNA^Cl zA^h3Vy1u!bwKYAv7Y{K!Ovm2)BYtz)oBPEygbl@k&B^~VEoLS=(Ufm#CdPU_+^i;^ z7*9kWlH&+__fh2idr~X!k!Y>A$zUKWzq5R_>oR z1KGbblmwJ5VamvH!(cUw} zGtzUKr`B_?XOZW5&nuoao=-g6dUf_1?6t*fhu0TgUwM^#UH7W>`oXK->!H^ZFH?oJ zqJzR-(M!=^;i~Xb_$xvc;}nw>GZb1yh9XC?O!21TBgLnRuNAe59~AY9hl(c(6K^YT zsdrcJp5FbuUA#TKRo=ngqr4}2Pw|fPp6zY$Uh2KV`z`NIK7Ky$`JDCn&d2C;*QdR2 zCtsQGWZyjHE@h3wi-E!O(xfQs*>9)n~sM{&Gt8Py2 z-tH6J6Wlv^hIx+ljPi{3oa!0t`Gx0ip4ghu%hJon>wWJ+Z@G`kx5W36?=#;H%AU#q z<%i0ls>`Yys$cyi{)7GH{_+0#{;U1p@c-2Rs{fDv)@nO-PqmABxH?*$sLoYyR_|7S zuKrSeQEjHN*9_EnX+ktpHA^(>HAR|hni|bbl3R{vZ~#u;PTob{T`rTW^( z@;UNc`EvPc`8xSt`62m9`8oL|`7d&Fw1UBIO1Ch#D7RR*bhm|Wue)t`JLC4PTZ5aq zdnfna?k?^@?i1Z-xT`#3JQjI;=27RF;q{8oYd&xKc=;|@ZdU%HTHu%Gx5RIm-wNn_ zt>2q|C_eztJprrS-f%nURs=1Tx}AoWCMePs-z$3h1}KwND)l(^Y;}%$iF&#g_R>wUocthbHNNS}0{188wS`1JD~AT-INI6QGt;|y{Q`RbDRJT?C^1JL;Qlw8vk1VJN^y+9o3`Mv8Yv+dZBu; z`c?H>^?T}K^;PvZ>ISuyroCo?<}D2ui?sx(Q(yTI`BRTOklEDB(<{kquGb>3PrWXC zReAm7)k`rRJ!psG6GgS+JH;;w3-7k*Gcxp;LEcJljdzH5ly{8xbnkrcP2Rh__j@1n zuJr!NyR%OqYO%=YEuZZ^hkQzWN_}qnSosd~o#i{v_a)!OzMFhMLOl+l4PN)X>)YV_ zyRV6|htfsqt@Kj{DrYFul{w0V%6#Qk~?@IYvc?sHXo!riCpqmP(YRxs9@bMJ-zd4YTZEgB zXHSf2eHAf^Sw4Gwy7;>Js(g2&ugaB?%6F9SD|aeCQ=U;)DQ_u%R{pMRr%F)0ttwG{ z>VMhaLET^NgSLE3eO7%zU7@a0f2+Qwu2-9CY%~KjQJRJ5qugdZqefX8d8+(%`E_}g z`(Teb9y@7<8V#b z4e^`qH`8ya-&=k={SNt+`+e*803)Nl{~&)q|1tit(E02B@B8obFZ1uCsiSiVVfBD~ zdAWR>o2|RAdy4xxcT1069vYmUQ@iG*r0e{k>s6$8dP}Kdpr6B`Hc0=R~_-+qCTa52puUjqcD;k*Hme^ zB6dCo%ZJNT$y(pQaq6);2rq~@@jdlT(?-!2%m0Bneu?LOlglR)>M_1-(J6d{xADm zsQqvS>Z6ILw6G{7TV*e0kn&aK1?7vXH*kK-Ro|!-7GtG09Qwsh){Z=$JZ3vyRI7 zf7&^p7uCu*j5{!q!9*_PA~k_rhH^2`Ip=-PIq%P-3keqk8A%*yE*RH^goKgMS`2^mFY6URuwY(KLQBu9@RKjZ`I5oN2Z zAcA+3q14*yy0P!jKzDwB+yFmikQTe>%Ys=nOJ*6bRRv3pt%)_Y&a9a=w-#22gh_i2#wJ=O;Cd} zngUy7K^A#hq-7ecK68V%(0pCmqkRzDh>qzL%r>KQy1-P1?T8(-<95O}Y-XqIjGeW8 zJCBJe+kst0Pd4n9ePDMnKYe>(k3e@*`^=u<`&if^C+tMPc5%$I;V>uVWSp$yJ5^Of zioj2K=m{+Xq;1{Ww;EQ{YFTY~sAC;kJ?jYhdu$D?p*4aor`9=ixqvd4R-P7ch7wLu z!8!JDk{a~irw!V~dD=Kp2WL8@13u&A}4&Y zEApa%{wRsEsGz0yL{-#89X@S{Ci1WiPU(m)61<0Q>x*MC5JNFSCXB^IOp)nlX!V)6 z5Oc8ilq*d04$tvjkWGnKFk3bBNRzjDhad7Iehk%5p!g}&zJSt8 zzAiRIRBVbZumS}uq@jBbnirsV1zOjja}yeOpzjg19YWU$G(Cr&m(X(^T1KJc7Br;L zFAeQ-(5(Q?D$uJ2t(wrOBM;?~JeEUwA}8`xp34h)DVHFQ4HZ?JV2*7?l~QT7qjG9j z6;w%8)E@k}ubQf@I%u{dB*PHQKT)UZTwS2!mTFyZ=&0V*TY6hlv|U>7=$ziw1zpk= z>;yHvubaB9JNi%`>0>=aj!g9Fis>%(5+t$#7T@%?K;sn2o%VLToVN=qFL@O&RQ>1s z3|N)bS%bCM0qY{Q`fLCK8?z}p!wxfN3l`#G9^o-;G6^&|<0+ouS?=>Z(zVP3C5%`%l|awg|; zAww#xBG|6tDglaO*s?Mzt9+GLMO9XTsv;K}s)fC)t9q)h25JP(n1YgLYOWTb#juWm zIN~~iZHMU;*g30xut!msb)c)dt{b|g4|G@ebRT&>(qlaZUC;C!bRF`-Uc`%eaWCN+ z$oQ0(@v_*C@?Oy^djWQ&y4S!qao}~mp4ayV-pCt+#?HJMSZv{il3`3>EEz{17)h2) zB{SGHeC&TkFl>;lChN%tIBjipudkcrHFAr*N&daJnyb$eS+UgG>i>WfbBeBAm{BWc zG4ySK#JrP}Q}jg)9g#yn1n7i5dSF3fNPQm(*+RNck?1j`xR2y+A+4uK=$J#1%RacL z>9m|X*Ak`?%M6_qm~~Kb7n|3KIR+cg@vd=q%S~Y8HeBj5SGg%{5n1dJJ~%UvEGi<6 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/bin/ghc.shim b/cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/bin/ghc.shim new file mode 100644 index 00000000000..97596f1c171 --- /dev/null +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/bin/ghc.shim @@ -0,0 +1,2 @@ +path = "FINDSH\sh.exe" +args = "ghc" diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/setup.test.hs b/cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/setup.test.hs index 0b80a76a952..b188acc36d6 100644 --- a/cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/setup.test.hs +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/setup.test.hs @@ -1,10 +1,22 @@ import Test.Cabal.Prelude +import System.Directory -main = setupAndCabalTest $ expectBrokenIfWindows 10179 $ do - withSymlink "bin/ghc" "ghc" $ do +main = setupAndCabalTest $ do + when isWindows $ do + sh <- fmap takeDirectory <$> liftIO (findExecutable "sh") + case sh of + Nothing -> skip "no sh" + Just sh' -> do + let sh'' = concatMap (\c -> case c of + '\\' -> "\\\\\\\\" + x -> [x]) sh' + void $ shell "sed" [ "-i", "-e", "s/FINDSH/" <> sh'' <> "/g", "bin/ghc.shim", "bin/ghc-pkg.shim"] + (if isWindows + then withSymlink "bin/ghc.exe" "ghc.exe" . withSymlink "bin/ghc.shim" "ghc.shim" . withSymlink "bin/ghc" "ghc" + else withSymlink "bin/ghc" "ghc") $ do env <- getTestEnv let cwd = testCurrentDir env ghc_path <- programPathM ghcProgram r <- withEnv [("WITH_GHC", Just ghc_path)] - . fails $ setup' "configure" ["-w", cwd "ghc"] + . fails $ setup' "configure" ["-w", cwd if isWindows then "ghc.exe" else "ghc"] assertOutputContains "is version 9999999" r diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/bin/ghc-7.10.exe b/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/bin/ghc-7.10.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 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 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/bin/ghc-7.10.shim b/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/bin/ghc-7.10.shim new file mode 100644 index 00000000000..97596f1c171 --- /dev/null +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/bin/ghc-7.10.shim @@ -0,0 +1,2 @@ +path = "FINDSH\sh.exe" +args = "ghc" diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/bin/ghc-pkg-7.10.exe b/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/bin/ghc-pkg-7.10.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 zcmeFaeSB2awKsm|C6h@qVFpMbN|XVDVgni&(8LKk0Vau-;DpFbA|_}HX&kLmI43|$ zAn8doC&y{I&$WHpr}kbc+G=er)s`1+=_J9tAoAL)Sg6Kcsym)kqtIl)nDczsJ~K(M z?Y+I9-{mJzb-ni+JuWY*itL`t~|M0_)i0&_KaBq?xc0cg2d&ON9 z?yo+we#4FF>8Uw!&_i!b-Sp!AhFOWfAD`RdK7j8ZpWEur;qPtkr||CU*y{e@{JqV+ zhrf65_m9tQckjpdi~G0F>c{*2j&1Ij_cDJ(lx?jlOTN8h@E{k-Y)zF5J%LYuvrjnc+tPan@1Ay@XsRnns`RaO9l9Q>_w5n zllx3UArJk7N1sV>qg>$&CL#MDWTEIvr28hO1J6=I^&kAZQQWXqM4G$^nFudxYaH)H z5w{@RcjKn@_lx%n!jy**OKsnXcRt<|{`o+V8;xwjz!W4zk)De8vwxE>dgG=I4?Xf_ zfwxIO+XTx0;@{+3hS>lA-~R^`IB?=rkZM5on?9O~J&Ec$0_3j*N zFchBc+;3i2>+P22Irrab4x1}$TYAN!@Vzy)-eZ!*rzO>TkBf_(`yI=CNRj%rxoVFm zN?~!vcrIJ5e90}Qjb&q{>uNgH6**R!31XJaOyX2}Op=*JOrem~6V)t$(_s}ND{>rx zu#iBP`GBc>*wuO9Oo;Fp5OarU2rDadGJ*m1 zExhNKtNqHoIoWzlxCNmqz`hOORaM<9ax#cz`=?{Xgf~}( z>uQz9SNs70tHKXZkYHCO;=*6$L5ho5{isk_YDGDxoQ|ibH|#@3YagXH=g_O}_oyMH95zf>m~BOB8t2$~#h*I$M5C!Gcu|XUp>l1=%8WaTRq_cw?=+ebs1c zWLvDt`JJdG=G<=!-(Tx(mkKLu3yRIs4nVMq(w1-?ecPmmBPFJ=Il!L1Sr9^zRg+X! zzJ|?5o8-e8%Jv+WX?sq#R#rt2mZPY7lT=6$z9KCNZ#E#zk3*=9Ljb~y%L9yoY`{Mc zaC`vdwsa#QTLs99I5FZxc-I{#fAl%SqDpK`6h z2-}X*~nK>v06sDsQ^8sWYJ`v2* zGu;Sj52{NtDCUi&=g~4}%S)&|T(~X-K)x{8_yf!cpjkHRpsp?im-~Fkqdb(e65+}u zgd^7Fpgh%Gi28hJHVqN|jX>RebfxwH%8S%fVN;#z@}V0GIZ9Gy-7cf6|AM&`T^;?D zx;m^I=w%@jKxPGu&uqdHc&kfX9AAXz>u=zhp}(Qctf;%!0QDmSlmt*f85m}vSA=zI z*b5#o5c-ilgFprQcRba{a|R%SkPjGU)Ksta9A&dXg{H$KtU8$&MUNuMVTlqF4*FwN z4ql>jjXD4^m$`zFk?d$T0(B`?A*yGVA_zjP#H*U}H4Wro(1oY#nE^zhFOtIMs@HGW zv$wZMP||-!&&+4(dCk-GT=En>mp+MS?c&b5? zMe$Po!k%C8w{_0}yd!@5p2PIra&AP|yORWjP58f?68HS3r%32d+KVS4-ktO-gos?- zNzr&HY^{7SDs(p<#y2P<7~g6-$#7+5QVieieS(@U#J}rKpc`1N3fW0iB&d-6 zIVz}S_W!r3a2{0npS2xGDy`IfqiIRJXRjs@h)lgeoZ3oX!QL-n9r?e=uxf5r|c`7(*z)Ztx*E8$orDJ-Q5pHYs`R z42TErtZ9ylo6r7CSLQUG$ge@C;yv_Iw29scMcon*#_eI@?XU_ZuJtN+~YqpxA&?=AAS zJDYDp6zaG`NvFs<5i+B$5)YOEG^jb^nEDc4HM^_-V-bth3_ zVlXYK?Jd-%OXt|{@Lk19fTTL;(F<-9X9U@FibE@1>dm3BIiw!L7zG&p4K|nOL$0Yo z_OXGzXxDFM3vVMRH=r6d#tz($R~~yFuTT(5SKcreF6b!-$OE_!HlLM}*qNmu0+FGL zs;i3QuXbrm)UpB9g#P#UVe-5clBcSwQ{BMW>!=;Y7d1A#F91L*03=HJ`_!_*^-4M# zCseJgS=&p!(SQLIWUnBbF7>f3cpqhZP+7kSNXAX`FDIen1{XzZI`^7tXpqYdc0o$+O8PzWn%F90vlpGzFv+?o zTHVQ9EBHrhSYQVcU#0c$HF3Gvxb#0zL=dg?9aJTI%aE8PkD8<}v9~x6ir2LaNwe$D zAQ#)b3`J41v+g{7t~Wl#+(l6>Pwv%~bjqcqpX1Ly{-lgbI^)j)JiC&pJ`>Qc?hGff zn?SjvVS8QQF9B~gx`LSXK-oQ{exVUQL8{(eh*uL<-9CYqrqarTX<(Atg4Qfbz76y~ zNNKt4fpWGTeZV>QdU+FnGO0d zOwtTmVipprhR;-SIpw$W&Y;pg7;i@OnNl7p4`j$2E@BqBC~t_-oOU0Is{WYAe^K#| z=$ZH8b0GyPjX=adfJ}GuOoNfK5s!bs;~(*~_jVdnMlkfdRqy#;IRs>NtVFCW$E54n z6QmUOc#liT2k%0nHVLt*>60-9xA(cydK4~ehfl7(+Nq0wMORw5MJo48>A*? zu1A&N$Id!h=i_0*NMvuJnGl}|S%%>&9PNM+C59rM?5R&sZK+kZ=P0FC_C6s&UuJv( zenFB0l{ue?b{^@>k17{(9yi{`z?xUQd3zKh3Ml$KpQ^;yDXCNMz>P^8=cY$o`&+y66Q46*bpJ+lr3 z3=5G;efVs||E%JV87;W_Ec$u0)6jDw{ut?Z$O)12SaLu zUA?90wl8n~YM(S$-r=%HGu7gZrS7DEy-K`h=`4CpTRNLw&ZUCy`zF!8j^r8EqUs*-E*Xvl0fb>}OL2GtJ@R!?H5e)H#Fh-B()qt{r=~7Jf zkHlpH(ceF~eh-!7B6hBwP?iUB4Zg@!bvn3Bayx|U1r26}olx%odLPuj*8AT)2 z=M)RjQ8ruCy3_nI<%@Qu!XYgOl(~bq>&~T7n@JGoEWOWW7R2nO8|js~G+?s`;v_`k zm5fM>AWc@6I)J%++@$b;W-}txvh(5ON~LV1z<+W3O`hHf)uK*Rrmd#V0FVE%t;QZ#d5ZnKspai0bmO(xmYMWZa17h4q7&XtTLNTg}aO}NeJi5@0&NLt2Vjc8mYG` z$&sB_L|HaZzTn(3N$$5t>g~18H=L23_Tet54}!SC`SN=fr~E5~Yn_j*x)`aysOkvS zxa9skyo=pat>^+j!)?W;))G@Z z1~jI0Bd)F3+*)Ezb{-g=a>9vM?98y70)t-#q*k;xAEWTd}3J#4-Ul{(U80Mjj*X zina`Q(@+qdcdWXL+GKo69~(nzQ(e=CjYw|#h@R*!8~#?g@Cdr`sL8{l)`!Q#0X*vO z!(+$B3(lR%_`3_)c7~8`=Q?ED`4wc_`3SP@+=6U7cW!LzCz!+SjnFluU1m)D*ejBz+vG zie`a4QM=?m7#E!_|A~sh8t?9G{~%ecjXa%$Z-Mi-jkul0S&#;04Tj^+Wc=Ml3>rcd z+Jg96A07_}@Tk8Jj~yG4@D;?NeRym^9NHJz*9fSQ-_i33RbOSLnzm`;!(!yv&*r3+R4{m@w^N?=G{hjZVG9J~4^ z1hBQG*V$YM27MrE!aw5IN8dpO2B$c`sUkc<+Wr*SSk=p&V52d zxN~x{-0hOzAIv>&fT&-YXo}H*T_7V7pJd3+5;r~a=;5OW5xV3)dTcaEoM0#D(z^7j zHZ~V*zHO{d;<0S-9&u-hOYU}quMoF+V7PrIa1*~2+3xHcOON9}+)kojoYb0J0`ePQ z(kH|1m|z6a4)#OO5C_JHE!~M0@cxC$QDT+5?U)pdbO(LnKp7TfcT}UwM=h`Zq3+Ps#)5~ zboEpD(^09nxmUbVa|0tFBxutK)U|aSkC(w`y80R`MByMbJ$3;R@?pE`zX+W`{WDhI zetT0s*KzZ)Y+GFfQr}cZZ+2#~39A?@7K1a?B^09`3!AW7OV}_}X^=yL%H&W_u!E5N zs^3wt)gewXDhDt3unr@dDpx8UY%}VIRe}n>q26If;*Mzl&y5!KM0k#}*hS@|rKV)*jn&Hb* z?I`V1P37uF`?yi(?<}XWLetkcsyplgZ-he-7hSoqn8g=ho!;F=v2a_r3Uy&i~`tTn3x<>htv z%^zD6B=*7}an>tyiES`k^3+N@a?kf%rEYY{qodB|VoJC>XR&;FRJ40PaXv~5ipb*n z$h|MQ)HJ2kA%DXPy)6nRt23c`i~;s9=+T1+^N*+T(Z3tX>%UD}EBGmkRy9Xajdi%l zYD3fk$}4(Mzg;c0dwN)wMmD9oEPbOx-{{geX0RIp0ISDpo(IiR%m=^&!UP?5O)ylU z!kpwe>pA5a^62`>wHV0b8PpHdkJWaV$S$BZo~;)db^X2gFh}ozWMN@-UD5)dP_Acg z#bOeeCP1uFAIh<>E+?x$dx{UCM5pd1gWl5B*Z2f+=6W@qj8|Yrwec_l-Xi;^ByW+m zJ}I0IyF0gR7@Rt3X$DkfF&UdNGr(Sa(TG(t*0;{)U5n5(d8r$6M3*cuI#ghzhVPXu zp*YwDe@bKOOqKkpE>3SbE78scPhw;N;5J#S=d89Y7@mg~&p`$1AYzBaDZzL?>K2}F zisx)aJZ=|{)2!;-o}nO%!O@|r1{H57La3c z8TGXGXAIoklo9#FNdbd9(|My{ChCMirV!;kLt&xrDX2vuwh92a(L~JDlkP^E+?6GF zXUU^ko6f?PWq@52#g1@LT|((-ko&=|tWe}Y4!(eDD^S(bdC`xupqWV8IL*Cbl+&W!A|zp05?QEi#pXoSPM&xK9XZ0X`U*Lgp=#Csxc9;@Zv%|RX;>o6{6gQ zrn(^C#|0XS)Ku$pcL5l12-dBjQib%O5P0iLd|x2$9Pc`tsquK%mq&+b`Rc z#Rt@Gx$pJ|d-7H5cU;F2y~3VF!z_g~8%)?za(A%{&D7cH%;WBY+NVD@7-$1}t$(HGm;dx+y7RjSn{N8Mm48eOCqk2<6?`V!vE-Nf5- zc^j+Zu)(NC_C{nU_y+SDam_p~oK@$hdAss2K#;7=SIaObi&wKhVLs~?ra^kJs}Y26 zM;)bXe@||331T15^?^rM8qO2TN6@}1rC|hWog(#l&MsG~&v~mI;tWbW4x4M0bAMFv zpIJ)&YtoHg$u6dOqP2<*BOD;&(>%Kl)v4W|pSqDv?lJ?e97`2@muq`q!y>rzsnU3> z%CP5AE@lL=@nGg#37ojq{Xaubhh23( zqN#NN%uPc=%3%LGUhK7noSYk={=(AuXV2N%f|=smwFTEo>FlAgY}z@fq5EeUzGsq&6&K}^@{v)Nw>PHnbO6=YA)9-G=t5)pK}kLY&v15P)z1*m4S z%JKSl!6ky~FGT&+*FjWnXXOM!!!F}_(45*rDrAt|Ozc4<8Dp=1L=sT3kG+irHuf?d zb&Z5WDR3Zw7(&?Vdx6pjDzt0%U8p-(fSvyLDBa-@REZW9C@yo*@E=VTecAa9=VhJa>R?1K_H*PN-zPm~7)RA)}N$xMtF0 zn#@wf$#O$Ry69~4y9&Q7+6y-uyK}UW2O*_?98wQ);5Pu-7G1Jhx-_!|eQ30$f^tMw z`BdIuq?^@CY?LH@wY}65Q+6y?kE_9XEvI%`Th5Akkvny@({oB$HE&pQG~Ns&#inRqk~P_ULM>k0>e5#&R#z?7Ud_Fv?8w)P7n4RvR3@n=4>8SO9l6k7NCm*UgY{uc4x79-Jy}iGY_d}a8o|7;CCmF(5d*+SL3I zdwLB#5L%vuQ;=G0t%^h*M+l=ci6~`@M4qMu0Xt|s1IBHnWfy`0$QnHlMhWg~8R5wR z_5>J`&0dBa!n|a**8ufQ`TX9zG!MR9=m|o7(+ZNdGle&$@s~RTXwO)UI`& z*K62|eJ%1-Z+%U&l&X4LYQ$%1 zwMSN)koOZTvp526W%fu>U*SDlrZ^9^%ginJ?NlAFJ_)@|Gkbc$PZ4Vm#aUnd9^z8dSD8)N8Tp4E9iA z?SjxQ4X486q5{($7#o_PVp2dpn z1e961mKFn?zevbLzC{Cy{Uw!;=oy}~1vM^b3tRvM_H)3CPnCbZflpOfUn@2FN=DF^v8VY@|@vuK2r{#aRHmDockp zMq-e9s!nJG-_ws#d5Vklw6$Ix}g>UL>Gyf=NH2SZe{`&w5mgp|avfPn{S z#W76b7;?pr7Oaii7Jea8K2JEos5R{FF?3(m2{nI3fu3Q)4|iHAx~Q0YKPJ;b-tr%Ux~eLXVWy_;u4FX-Z_78L1$b01*Anco*I*Wg=~{Z3XR41h_GxsPG~2`a)5>x^Rn_UifusAri>; zq|HNs6dr9R0z?*V8gIcvlAT%*wrb|ErBW%HKgJrc5vU(~&W0? z*bh(~Wg!!ev33wv_6pmtQH$N!*g=u;tf*1lM^wQssQacH$;WG+} zrNl%Qf5+!zyBtf~@&)I<#uG)@e$8q54PM+{THSd79f<|@0dy?AXf#!0gTK0S*K^49 z1N{96e|zz_AAf?$ELbf3XphAZR3W(-A_I!p))6cTZ&aapofWUw>*v!95zyDWh%G!p2Kq5tBX9#!Dqqk`kP!b|h7U-6A`D0rfbm zxS;D0)=mWT5L`e>D5^e2IvVCvv)Zi`FGf?af0I$67RAV~q=?jR{|Fl;M=QR7QF~w} zHLLH?ki{NGy`8sDub&qv2jnLKnJPPm`~mnHRRq}dJHZykZu#(hu;*IpWqHRuLBdKB zMHjOO95Jh^s8wHq#3_-cb8Y}1kL7qCi~w~jxEP{sfs_hb_?9XB>jB8BJ3xzvQF4`J zmuua_UBwGGN4{=qOI-%Be<}CPy{2_aFrUvUpk*lDDMS*ZUtR{HU`X^xVZ0YBjCMNr z`$mkG0#WsNfPMNgHK{lsO(%RBP1b%_OBV}73K zFxGHgraZkE1BPpOc4Pf9VKg%L9h|i@*eUlI?NSkhL|j26?}IvDMa$+~dR)WBwo7JK z>6lua^?mGwhOlr#P)XJ%)#6=?KvG+AR%d@&uA3Jb^t4sa93BP9ge`KrvyAPi4I`#|U9U5Sm(mZH1*PVTm)T zzPKF@CTNqq)hbA2p~%pohWYIQ_Dl)Q#~6=rd>UJ{$pfzO6&qj4H|{7D#CxgBb_CTO zi#=yCh@AW3bz~+lw?NnicT~uS!2lDM@UaBst}pNpinD22i4^0+h&0Ia7;_8kQo?d? zO}?~Wn@MV-cGXzE`g}tPBw;cY*|097j`6&{mR)rM3$w&PgZK7W(=y^s!{Q!`XotyE zjm3X;KS~?RXfjBs)fwu^pt5F!HZCLw`}Va+#MhwWfhB}CYHgO+uuOrNRLU-T-x62D zVBm7@v#3V`>=)=`2;1whPFG2|rm_GPFUwF&a{d=2H;@e9&J>BwRDc(Wz1Q8x|0X;VH=>vt;xW) zH`xsQ7m-te2O&%eYX&jT!;>BIDwFNMW{e{~%0^%GU@eQC-1i~9l`^LId(aJv|7gU2 zPVt{Wmnr_=!$la@;E1203wxBZ^LXK}OlRA{NpUMib^q4@*jNLAV`10i)Wuw~5Ajv; zT)WAoE*O$yN!z~;V=FeY8yxbVW`^CBxgEoQm~m>(3Ge02X7$a8W0BhB{a8$Ggb+yb z;k4V3+LL?Cd&Jpt0&sIL!&Bt_K1=M?k3Z`5c8gPA{i|qt^|LplAbqmj?uKLXU(j$E zx@?UF08r%Zk%n@Qy&Bun|1T&m$4uKdjaTmsyZ+hgr8P#?gU(Q|C5D=(IbEh&r`TTW zOjPbdeTuU{Uo84FioBnQldxw|U@|Ch1Qa;d zAEpWP1as0!Orc+n}xU@n4POfBiWA&SqNK^ENn} zZ#T&8Jt7VEWAk07R!rpEf4UXYgNYWP2jsp%OFK1Siqi!rrm?;tpC{l-Z2S+}(9ib* z;|v{HybNbmCX)LYh<4VO0e0fr zan42htNI$ba>0>CP`BAzbZ0Z%mjzi*lCTw}RM~y~F(RLCf*#nT_iIGLVk?v>;0&{= zyv>Ruy2KcfWjT?+Lz+#g#P*s4{=GwLjr{<`K(xTLr9`}~sUU)|cvDlsx9II|D)=_N zCpQ%Uuc+E7ed$0Gz-W~R9;H|L0UDLsod>>2ujL1t=~dWN@W0|f{xuE+hfX<=U*ioR z*Bn4Cn6wX|5$2dd#yVk^2~?Mmjk@2_k-c$GR#Zyb#O20R*cif`PU`-d|9zu~zBNMlS~C zPtDlm`xM(3Y##Pw!qaMSa_)X?U#eaGmqC&c+jbWYk6DrT&u3Y#_= z1(#fW9g2^C5Gr{R<_IZC?SkJ}r0gPg4$5IqR2nXphe83i7tqM{>LOX6=u8>yU%UAP z{{rd@JJu=r+9E?c83};M5$mG?cw7y#dX$9H4=kl=h%em}Lyg#?8{RWQfp@e!X~t}b z1%k|03b<$BL~s^*w?C#`r>==%)1;%|RuRTfYf(Wy4hnQD=>&mRS??&B1Ov-spn#3o zSdje-h15<`Y~yP|s1hJs7IvCkA$g8~!O_i~=E2`+v|Y)QqhNQ(qF(s5HQqj3N^kDn zI~xa;O7N{M(JgQ)NNP)NwH3D|m$dpvorj_Uc1JmCL21W?9uMig*+BmATYD-a6j0M*{Jdl}u=wZYkk*8UvsJfc=X} zc9uCnXW(m*XF;9=)i}**SC4P$-M+a1LIwFer-mh$w`cPgoWCe@wZCUpyM|AA+v{gU ztdnq7o9)N|3xTEBDFncla5*s>2lHrSr@DUxTZy~RpsUf4*#$}G5E8Q(x*8E;3R?&M zMv9GRfdvAtOOzSsY7hp;iz~5wn2tW?V^M+uLtkBEJ^-+F15uP)NbajhB~-w-6yD%58W`Ev$gQVvs!#+aR~vNh zf*n}}bk2}WI4iCSn=05(QA@ljw~*UWMG$8ATc`;8H{_+9QSq9JAX`^Khtkg=J9*cl z^8s7>F<3q|$T|>P1r`GSMh}oNBC^8@n;v{0;*x%iy^4-24a3=Ld_xS9kj@((R`5xU(q8`dBdFd_`}lXR zCL+f7@xK5TNjOV@xR5wk9JQsbWxjh~O@+w8^(g{&69N0Uap@r1DL7lci-It%A7uD^ z%;Y%>v#e_43%2>{Qa;xm$DFu(0LjpwCwpS2kAqRhv98O)^n+cIm`O^j%R!iZ8J6#{ zW5c$BENOCGE4&)(w&D?|a@{V9c$^}h;be!Nf{f{1NrV-QIQA|)uWSx{i*fuEG$6A- zJc;?y<7`;w4gU8;n;Puod5pu3apsT*vdGs*n!<8%BorbOUL$t)7>ZX#{0(rVU!kxmI3%e#vK?q|&1hRnU41Oq}UUM-hJXgnP?&O@x~t7~Ui zo=D{T1|EQq61<)04h1SldkyedLBavV7>JiscajacZsnIqUg?>?K^mB7POxr0VlYb^ z9(W}2;C(Vt%cz0zNT6mR3;FlOg*JF)4|NzkQgCw$M8{u1WDH08B%$(l{FAdZV$6hF zuMwG0mw1PB_j6~hplbJw0Uj!PP@Umuczrc91 zP^}zR*9zASChf+*i8E_g=j^0>+LU;jBc6Zq4FYux`Szh2?ONPpCiTOoeAJUBG( zWRdW@eDY_I&Nq$D$CsFa3jxyLTxGcjnX1SK&8ofo&j^h91Qm14L2{SyJr>``ghdGV zWMFi_%rQ1V$i$5SLav($je+%EhjD;)&|p}oRKG=j14Hd*3`?JUSr4I<6k`&Vc0>MWo>8VUA{9Uj1p4&h ziJ*Tt5%gj(;r|TukEyuPRFGb62jwyK;6|W4S}l^{JHB#JuZ4tGcUV1V)Ox!o<{3PF z{PeNYuX#st1`@UAUf}*(?W1Pz;1;NBk-|LKNiAXbI`8PFYr@u01zT82$_DLnWP^CH z%)!u#A)FJoVuD8cX@3QrYNRJ3DmBo6q6Rj zcafFl@eiO!pLS>#7DJ_oGapX+SEz4=ly60ylHWT09OZ^ z5GEge_8?{tyvajq2|rH6oS0XF>_39^ycaAMWUVmr2iYyy-o!c+M*B|8R$n{{0LC~d zuUm|&$jo{-sIb>W4Wm;Ch-6>F27|sN2SLw}Vnp4=qeyfrJb~TDBLqkTWeG*I1&9DM zDN87h>f>_~DQLKiL$wV$+wD?j=yyU#kpN+uie1c4NxM;QGt|?%*q2DL!GqOvk0_%& zoi7rn#Qn8#Da{{oB!SKtP00QWo;@)Kaua;hySTPOpVLmYKi4-hI3niIgwJQ}-^WEb zbD(;|HsGhd<}U5(a%>$TUkclcJc>%mVu+>NhZX1=ARL;B|)7%ekMl zS#QIUJ7`-;*tnBEUI#gn)|$#HDEn;fxMxT^%}UYbklpt1H1)utK2Nko_HTc zI2os0!lt@RLGZy(|2fPf&|whrW53kEZpd%9N||_?#B4lqGO`IS-h$9rpHB3~2bgc? zmJ5d8CwH@)7b$}V&u%qyubWw_lmU9&D36-A{rK5OD5;&K+p29$};}8VkR- zo%?7bBG&ln0uoKoH)C2-2Uv!1-7R+iFQDY?OUht#T^^_r_m=rUtlU#Oz<6qPhv*CU39VUgYn`F zaS~iZTYhqZfQ`h)@dWapnBek-ZKoiHOCD)K3t>GlHmcH88}_LJbI^(};DSQa4hN0h z)$F?%uUaPNGV--0J-hvj|CeC#3UsMYQO|SJX1Rr;p zX?x;5+}i2fpOQPaZ__j|5BTvZ#zT&*IG&-0j78Y(=#;8(AkxwYa}eF?at9h!XIwdx zhpwfln-OJXz&Ssq(Tp z@#!JRj$v04oqL12_g+vGgrBKPS;k>4gJs4I&zLvCF-T5Ws*%mJgrGq`fus28_yHx1 z_9JXE*ym`%mb44#qjcvLGB^n`7X{W;?5?x-;N;vSW~lr5&)Ge zcJ>ow#`y4V zJAXklr8K=*%V00TO9vEn2iXQ%>>!vK4BPc3Pho+nXCCIgCBCJlvmXEn;~2xZ6_d^x zi3>1Nv09Ip=rQ^?3rF-&07uyP8Os3sPtXfXFCbrct`54w8G29%ip^DgT5xsNU8KkX zdQb=_;dHbZYDs6^;s+2ppB@wnXRtpfQdUyr3VKio6X|R56fVT#XAk>-gh+K}#QMX0 zFo2qeLAVQ4N#nY%j5Mu5&Hmwi>jA|$hFCG-Kp{Gp&WX|)#3fP`;W1>^k8rd0?fWcpmr*)7H~4r1YbyU7k>;+7-Q!Vkv`QpvFL1B1GJiTgu=D97-Z%N)OF1TJD{g+f1KSi3qAoT}WT#%e2IB(_ zc^VBd>?c9?7s%DB$1KpDuHv#O?8debHib?f_i%&PV_vRzCpfZhJrVgndQd2w&F<$t zOiQF8aWc37C)qE@*8^{018Xj}x8lZ2?1Rv>GDw^_K1Av6FJD5{WTPZeD980W&U#{W z=ID}Jm$E-M!pAE3d>S49fN2K2gmxZ9J5hIz;dKzKa}e5Adhp|!7H)1!oL6*m+{Xap zj3u4T9Jjj$>oTY$hry3%;sPq(9HZ%UW7~vA(Y#3KJL#OJp+(naQ*jQ1AJa@?*Z=p$ z>8xhFcn%fkF!)hT8zaG-KpuxJiKOEvErGY4BS7ah;}GT(1P+ED*POzBd?kec_PA!^ zcutUgjl}%_<8C756y0>fpmU;|*o_I`py`#Z(zwm?+pw!+M-dG?NYvC23@YTb)bcBkQ2L`UhS#ZP_i zWgo)mO6R&oi|#+4$SjYY{v6Bq+-2nBUvkb~p;&t|VWPr@1uWR-KW_&HMk--M7VSnt zwfZG=ji1cp-7xJK#vCY8^|)mQaceO$xTd%WW@XwJokaF+Lii*DzOdON(*?>zxF*9A zjU7H4&dkVmJ%P!8WnKRY)!7-IU-uN@auTz+fy=+&8mF4dkGJwOzme=mq1h|a@4Xkq zyJ)kZProI=$eo>Ic#9gct9N0`CeqNSG#rNGky3V4S#tt+o55{~`x~9Z%KI?>&cNB| zeRi3~6WoPh*!$@}gKGuhWK59qfSWEugsp&|0wR-MA7AvJhe0n4g93v!0iI5`7G6P5*jVa80g)Uk_vpNS8qlrwC&VHShOwUh#tNr!@5jYAP} zxe6lXSPIRO4eK^!81~y~2AX(G56d+u0ywDtHHSKFm)gOzmkf18#bs&%&U59);7NAB z9h+D?7KU(hPbWLf*e*j|QA&7}ux#0tx zkoe!AB{nPvTFx3qs-WtLEXT1$%;*OMH=IQVx0~ro@dpZ^al2pysqzl)Kn%91Ftt=+ zzfrZ*YHWpkX;i$u?e3Y@p$?OH^H7IfO2Y*ezei0N$8&IY`M3;Q`Xz2l_m5aIBK%0W zpe)O3TQSqxx@;aml^FY$-cjkN@m(z#;XUwa9Vukhp^szj^zlKehH*HNTn12P2)1z|_K$iNUsj-pBp z&ZmQO0MDo0Ajd3H4uW>=T8ii{&H`a|E>Dm@Rka@I_VMHEC9;mg2q7fW79>ozQ5vxB zUqB;GW*^^-UiHvjzt{k)V6*e_i9U9+Frcv+DD;vEiHSi5n}pDY710$NZk=t_?*r6_ z1PVQgLzL>HL_MG}DZu{EE#S)^(>Ejy30>?s2%G*mCaL)eP`WSzXS?WV@GErm8yiWr zA$CtfI_2SF3nM%#=7iWXgwe(Aqc(O6kM6s@il5{EHC1D2*UV~X7XQ)Z*m4hm-T z%D^;LRJY}=#&5v$`RkscP%$GLHGz;)574ps{%<0GtN$W<7xw`;_my3&l?zLShPfej z&Va8=Q{iHJ5k4wkz#y*Tg|xfE=2rh-Yl4PDN-V(k!)S_iF~Ln|Bhcf!1=b zaD1!;=N!!2r^wM!rNpi}o%>B#ohnW(ImDj27huOXVypYViQeTx0OAPUoymU2;Y|ZP zb{?i?3~vldpKDh_YOS%ioI?_L9j^#(;AU2P(q6+g%c*cK zs~*9eFmwXUd=-qll#P`BPo(j(Y3Sd`UU4pM#ag&s_?2idE?1$6Djcne4pd!lfN2%GN-yPseC{PUPCchhbV zgf5)1)t*{!r{u6)Mi?Ox9<|Q>?Q-mX(JjX|iBs?kB3qm-77WyGn+Yp#&DmW{9$12w z(rrsYKnYqcmw$;3$#80`UvE1DucEftJp_&J-XXS@V-;IAh_ITtoy`a6o2B9MO$fd` znPrJ{aywusW>#m*zX2Nd3A5!%F72kKNsY+*OH==&cm-KD5YV>nH!bSbwqo4Ez3N%S zRB0PfK$9oAUoy45rq#&oZm~>elSChZzlkckR%SLFg(vv80e+Cda4Tr&tAC^Sb=dL- zEHZ^^FB)M7g?}7m=aE~p1=(-$t_r8#)7Aq%9zFxZP@mZngJV)l7I?WCx*c3N!|qC0 z`?}4w1<7Kpnd}X4GEH{2(2BIH*ly}Sg+SO+_c*li5c>&T)ImM!Z22kT_fG z(g7#l8Gl9Z$d~X_BD7HD;Ae`la8lh99L&SUG><`>+Jv2As}N4rZY3WFo*K9^)hysZ zTs9W0dwJ@jvD92DYZAhfDkF|$NDB1?F+_Ug4j^G7j`%BLT2A%fgx0cMACau#vY`ie zx~+rFJFz>1>)e8{3d8P;@w<~RG9nFd{(0t^XBrz~;BYZi*9cnDNqsu@Nmtwi*wB~J zu)`T>Ljn0*B}HkNMd6Wu5xk5T4Bb+C^TCNHMsNlOa~X#12+kAYi#&l6I#`)qH9hO2 zvu@R$a*t2J;f#dTDzm>#7xv=-M2C@{)^TOBYI;tHlKMr3(`nawV!Gc!KIc3Q8W~(O z_L`dRu#&!(sNnDAxZjHH3=*H*s>*Xnb74V5c{LR~!cvy}?&w|gJZQBtareG{(HO)w3&mVpti>O2JRCL_7J;s5s?FPsuepl zt9FwDL7v1ZLyg}<%i!E2>t-o?$af!>c(4P`K=!Z+#!qDJcT$_~k z83rUM3v4Yl9@^piT(x{NUv+TpuxrKSd1TIX1leb}r;XghNY5M7gbgb7ZOKcR?MB{7 znC)Jmr3|J8nC-@la1+dS=K=2XW;;wV{5*(5abYaMK5tegCnh^`h;@~htA{a&`PhV) z6p1OA={mU`9z%^YGWrfTOwi3Y&So;;snssh$tNM$c)K8Fq7oAQ4t#rhYZZIH86h%D zMal-*TFg#ZH8pLu_kRYSomH2CF2;pyFyL&w53r1jq@2q0AbI~DJmdq<;z?j>?^d)q z_a)cDd1k1%zZKEc*@y|S*Vj=efEvqG=_21+xWQXv-F`hTfXCUG??iEwhz==+!YMd} z#2&s5RUzNuEJ&U-WZaYo$5TQ4f?99YJc%-%Au0uIi*c1*ioVg#Zbmty&?MIU0nwNA zE)0W4@{365ICqy`giwD38DTq%lrc8& z3XyvNdU&b5=@KXTd_GQM0q1^yMj)iX1A5VY)G7zyniY#2v+lT^{RD8-JniO!y+nQK zUMQ9s2gxRj-Q)BHq94LZu zfr{PRnvA;s&}{)<2-+!32f%{-t1&ZVgy1&3D?wFFfcz3V z>7RofBM1o*L3%ZQA|||CDJA8)TiA;;i3ljIwAqM2RXC~JS4uR&N3Bx&5P!99LUr(N zz=!7 zFM*^Dv>t9YUhqD8gI^dKpQY`PZz={0AuOhrGY2vdzWT;OCKzFTV;=kKdq&T1T+BX5 z1oPQDiQqi;`$TX)>rDiG>`)@Og1rT}GaH&hZH~`r%}}hU zspIZ0Fi_D?48*fwaY(yX99D}H+f z5_Ae_1GKSMyb`zak(;r66Jkg(!M2f@$ad$U5SaG3xEBpjL)kK~F zUev4rsesd8w;s*IlIAOzL=4|?X*$0plOVCF$W_6fMOu{>4e3jG+Ca1yWk|r{2m>aDPB!{S?!NI4$l6X!_7BPWC!|g!tBWw@F8LG5`Wxh` zVC5XwF|z)I7oAAf?;vKJtVIU4GYo7$M^=NVb@EOheq9Q@x+l&E#wEkFIzW%51eguu zs!G$~<}}7C=>hfvad$cuF&v<tIi0j8?EYVAyo3l zoHZ`B8;%W4e9w)1DhfI6qa(T;24yXQzQLKsbXgGngZ)}y)b6GZO`!r)G|J*`VL|I*a> zuBi>SE`A1nOp}1l09_)xMc;-C2gqgL5h?4z4qK~@{Rj37A|+`Be%F=^_R70p(%Crj z#4h5Z`u=^GO6Y9!7p?f&im4#nT%zMrdPq3MF&~@d*r5wRWsC2>2P@e3sSNG|nFnED z@3IN~UqeKALy$cUgt=NarLD}}_^~PaZc<}=pw-^xv*3J6|DDK&4fCFz>7f3J&BKU1}~YpY44~ax__4gS`M85lCwf=T%DAw%XL?RyA!d z@75k%dr@{#n}ounD6Cn!Yzy&YDw|ALD8To?3PPo;{-a~patW<(Ie*v7&Vh}>c~!NRc67NME2y_v zux*2%BPknj{_Kbq)<#(7+WW0AMBK$sUSpDq!9ud_XTS>Yt)-xBpnP=&y9WaZD`NQd zED7gDiuJW^_Qp%KIL~&eSW0TmD%Czh=Xm|+#HqN~4%%ti`NsBJHS=hDt6j5<`f!)u zj;SF~1!j%mr?}X$45JSG;EQo04wos$+Wh)27t_6b0Z`6@*05~gj{|^1z!FY)=<3|E zi!+8I0W&DQH5Hfq^=`7hl&hrdQ1TFtnU19>k);U3&RXJ?XpY5k_`ia>ZhGCvv5Y|TS< z%A8y>mi1c7n!0H^vZf;I*N}DXF3M=+!YzNTPWpk1SYyNQg_^abhW8{C&u*xl@kNUR zBOn`_5^$+Cd;M9Puz5ol48YIxVgTbgWc&`Vwie`v+t%SM^+Z9Li)0P%U6LCvE`a-X zZVxQ*L(YFk0NsUxs{^F1mwS4R4DIn`%W+FPex@l%J&6^DnADXlXxPr4ha&LnF*dkK z-wo04&61vrn;a8(LZikN0_aAJeOe02(UbzeV@oERiuue?Y*%9bz_oKIg8`XC%PQ+$ zU2j|C25U6q6r5U?4NP<(ik}db3kY>fC#rQ+F#2T}WW?L@jWRS{=G~k$L z2K}xon$?g!p|5o^f=%e_NmuqYNJ}!4dKtsQ(oM7kACwa{y8_I2_jvc(aL*Nd7L4vi zrLJJSV{tqCSjS@hOP8XKv^VCH>Gp6l&y zz-1z_hSWA&F`Z^?Eyk_m7_y&~s=d68-2XCQ z2FB(eW~(${6Lxgr7k+y?n|r}KVtSWpK~a}Upi>^EJ4s0hhMfBvvf#f1V7fePvf$T_ zz3SqYD6FuNVw{#7iDQ>5jd(wq5nXQSv~=r6`s#A_jnjk!KbQ&!#PLIqYu`%nIS_*9 z&vlS(@Z<uhNkT@=|Pmo=})&qD)yLBmT<4MzC^2Y2xzn~aamz~xE z+ooB#GUgiY_sQ+yNOU4`XX^I%3v8Ql4rdXpT#1`1%gagX!K5TjW4UOYVa-^7hU8rT zBCs5tJ*z(t{YVhsChY3ZK$_!9U3s(!+Xth5tYb!tMLV2m< zW~hi(e0}&`3tX*)RryWmnu1E}PRDkfx!Y{(^2bb?rL`KSKNzN6=>AwaOX19s(f=z5 z=r|-7E}OMN6U6Va%kR3=UaJ)GJ0*GY=>0o$#Z>vjB6ur*Xw_zul7tZkQ0_4u2{7$! zJt(HFmp|MfF2im5B770&<9D6^PR34fi{>Rbe*EY~Z7;uKYil znIw~BV1m4b7bTjYXw;$s1qUPu0aT(1k%UwOwyV*NcK;S;z*Yi@lV~Q7Q)&OQtE;rO z>aP9kZfzCB7bKI=B!C41RD*yD}F*j&|RAR~f!jUl(>}dD`gKJ&S4HA082;Bnw(3;;iBGUFR*!VEhtS2QwThv~0 zuSoONK4ftEn(Q9YLr>O93Fn1w83tHF@D^uqF!$t4!ckmx8OcE~)?AW``*Hb+{MWz< zs0|jb5GFaUw~+E;f{)ueKih8EM!C_jbQOT!MO`5-q2XlC>=)x5Q_bSkS6a?pA(OstVC5uOHU)aOG_)G zCCDEEu-q`jB6j`}=7GFWwf>pvsb2mXwg}M3Ztq<8a<{;*J!|Ha8C~Iyu5iWkSQ^X2 z_x8NtT(+BdOZ0eADiHr7IV^gNupS^=rmYu+A?4yNEh3cKe6uI-kT~KyI^Y zWUb6`)n`P+LKa(UbRntrN?l?mt%}!rh_3Zav(^Q&^yAh351pC++T!AP#dR*%d^?xz zd!_BC_)FW9Vy%hO6xOob=|Qbzs@|g)bb4%2+~v%wGBmWX1Aj3poB0bdXGaqmgr`pA*CL>4aR%Yzx$5@6U{rM&1qU#6D?gpnYV;br zNFP24qORixu_D_MTnJa*`(9QLB&^lgV*u~V9?}!D*DvUqC7jAW_NN;t29Ll8jfKa^ z417(b`==ME%Qn+jZ26)EJXBxb^l4OE3f9n|uzny<0Cyn}bP9M1K&?1y+-|&=^S*HA zHmZa|)D5~+`wbc;U||pM^s>m^FjB|~J22%fQYSH9V1J-lOR1DWVsJRzw8iNt;4p=` zNFQ1IUlx%QR$>#4qs8i3`X3q80ptCgCW^g?T&4eMaUOIMKPoTVX$+y8LcyWcfn10+m3ss%uZx*^_TFmq|VK|-{1J_m>&Odt>A@iSG6$N ztaWV&&rZ2b^75Z9i=@F=(a_$&ET^+ny-IMI+@MBkbEBp5PX*dz6|U)ilIhZKIiO7s z^u3EKxb}I75ngw*8WN^`&o^?~9loK{uJd_{O4Xk=A=W;4KQVN)hJ^aMmxw;?I@r^> z3Eno}&;!IsCrh9{qle?enQpql9+I0=he#8kmJ2`UC46YMbwE%0b6VJ6J zV;Y0&9^fG>9Mq0&gLU=11=l^u-}-gp1y`*h&%#ihBr7ac|D-u7cPR8S?{bCC*c4%Q zq5a{q0}elc@Qzstf0hwlFO8G>%{J?2bZB%KqfWwc;FaSFpRfl*A_xtxdrbdbqyLKg z+~7J94F=bVPu==;;zw6&;7}Fm1AZg{KOOR;lJ#DiE;W+cNCwqYuJjK9avRf^%c@UY z=}(-p$nMKDD-~TY?L;-_|MA1j4%Suk!2G^riY^KOmGzQ``d}9W8>*Ama;q`Clhz4! zEMOb7nxU(2q+=+V(-iKrGb)qreedx+{7-|j5pp&Zsxf!#)e{+O<$a!&_bT!>birjt z2bp(}dG#jgblYO7fDDW(lL{CpXPpL`{B||6CN2?1wvBUO4vc%W;Q!d0awRmi(B*Th zLZ)NxZkm&D!?$j;nuKbCR#6SMiMW4ospC5-qGir7TTF|)6o6;gHIy-3p*iR*7AkJ! zgx*0iQv2 zOcjk|C=tj$EC?IMD%aFiPM;_%E)^`jiz}U#PSvqPvkpn>a#~^}nH80-9p7K5B1YPC zt`A4;^c;6=_?vPsicBs>@;-J(F(#0Xu~yR%6uP;I+v%-Tw?p{?OI7QHW{2U ztm;9cR9;kuW=1$R)PilA+c;$=vVeMVeqcF5Fgv5B`|`7?TfQq466>RTMPaT8k}y#( z8vl?Oo74F&4Ppcr3L(r-54><#rhG88mme&nvD+llrPk)(Ka8jdC@X@(2<1W#RjS*x~QFOAv6R2J|EF1OJ;o3}M16w~X$JsriAtF6+0a97q&wO| zIp#{*DX6(#7Z`1OxP|0jafPp$#O!lF=(^60=zoaV^4&)G5!`3GzY-#*kX>@}$ zy;v>3M;2@zN!VW{W`CS}u zgEA#Zj-U31?e&i(Ne@cnwnV1K+Ppnf^sCSfXa|m3ky<@}@Tm0A%uE~uogB3ScM^lE z=Z(t5=LE^=o57NNrg!JkcV#QmXspIh2kb>0A+@cNtPf$)AEz$JQ8bf$%(!tLuKq;F zTo|*`doyX0QU{397ub$&x`1r^)8Eis^zwN}UoiUM(~bo$!G(hi4VQP`qy91KV4J9E zj9}1=qor!bR@RE8wpNXyv_Daed|TEzd+|J$SH{hvzmi__puU;LMDc-nDoxU~ijlAl z{I>jbIJ%M@R5~b8bLfULBR8m{_C%9nYTO*QY?1%K%@O%sEBWCt?;L%E zW_3##wzPWsG+FolX|0KJ3nv-3CJLRJ@JD$Pf|j|3`Zur@YmfqFapgB^2=f^V+ma}$ zQJce}j|cVd9}5w7(QfetD*ADlW1PJf-CAh!5Pb%Wo@f}o!VsV^yi<-Pho?R{u>~4x?a*BUPR#I>kkj|^d zax_Ooxk_kBiP}%8U2`Z;0FcnXHy6LpuSpWf#IQF{Jt__3WQ@34+0Cr{Z&p`*Nt!Qx z7n)4uXwQar&juHWv#b>7Oz*bk$8nD$H!&ZD=8S&h3>B(&x$=Zw^|FH1tylsvzaEi# zVK_3ktAZYyI$cPtr|uPEBMj9J9|lw;-K@xc`G>J?>P zY#1VBXk^VvAzaIbHat3kXs+2KM&01qFf+lsYx#dckbs{B^*aAB<_%~V91cXCOE(tN zLL?`ovZ+_JY{_ZX51SkWG@v-InM77gDhzvQfgRl}R7de-?fO(V&iL4 zfZ*~t1wcds_JB4c`4RgG49rk<#UEpb@ro^sd`m=h&A1K$%g66t>Ji5BSJk@b;RddO z_Y*_uLG0DS!A1Qks+(k$BO-31FB_^plsBynG}6q@0SHrE;sHC%H4I1wJ*w%Sxjo!~ zs3yO!p98DHjLKB!H0}UpHgF42f2Mu~_s|hRkmltp56~U8;)x9oA(8e7~zFKvv$8PnGtnBtQXM#$ltB2WT|%_ z_3q!K(U!%orUKB+3rm27{jt3Q)b6mo!rSWqi$LavhTVkmJ>UHwFUFh6604`h`ZqfK zG+7xvru|QedYO80$Tm7kb3SZ8MTAmyNE4@Q^Q3-Fp$fjolQ}_YKhgODkCc$y zQ!At#`2%Xcg?8^Q&%^KVUISf;&hTj8?3GR~Oa95stWSMkXD04Rq^@#;q8d88;2rf& z-51i2t3$UW#BN`XR3?Px*bAj9n*oZkpdRP2h~X)?>v+SYFOB|1Y>wbM<-2A&+OX8o z;*6|teVLdMT*--7i=YRqd&mSX#ncZiQEj}Ip*mg2uQd&}M@!Z3C0LvR$0b$|Z;lCo ziXeL+9QzXy&~ov!)o7jS@ugtgIy1oT(OZJ#PY^kWkcCy-3d6(QMq#n>A+o8stSe_5 zP2(zvIj#itkNY~{`R4Qz4Y7RtMxgiGasU%EMu&2fO=V@I(MAkVE^ogwNG%%l9D<7&_Wa1)X3@5x=Ui#DrTq`{Scc|9MC{&$JU^_WJN6RgB zK1EP3tbp>=BzhP6wI3-k^NNkqI2yS*^oWg#?(Ol-E~p1 zEyt!Zs74oLnDPGfT^vZ1PRlbs3V)JRtaeDB z;XkS`3CG;h;Fi1z3FH|&Dy$(#5h|W-@foU@i4rX61nh9iqM-i(4jS$}j@K9eX!b-| zPV(X#!i!YiDCi`bqbKs`9Dj$=@>J!NvfdNn&yqrul1=lI9f6N$+_yF6iMd70Pb{y@ z!8=?T#)n;%ke9h#8T>WMWvFYQ1J+QRCwNRp?y<%Z!eN||aReE&gFH1lAPf5kQs)quPg2;=5o-0D@lpH%kLD;2;9hW6 zctT8EW}6??t?~GgS#?_?5Mqt@E%oKYB`q#tTJ1(JVOK3c0{P+! zS`Ig83avy$cZn`D8*U?=BaB$ExPh(}f)CdDc&boVUDYF&FdU^#kTs(@a)dOE1>whWX zd_Hf&;+miI^&x0Nel!GiA=29eKhZWiMW3< zzEZ905Bvp>l1w+J(U&h7=NXU4K6HghPH+!M4C9d}c-~yipPbf0Rjz|%iOAcnIycEc z&E}CKL3D#|-&%soDw7t4e)%jU566SWk{IzB?Caa=rS_Jvr^^UluMoM+2= zqVxLaQp&)i}0nG=hb{<)O$*XB~{IddsBaQ0mKJ}r})BH_#wX7P9TGZJ^>>HRlc z8-*U6Z)kAiI&B%m0UNt|a2uWK&SNB#YnSL`)9hn9^TlhYw@=2QS z5@8yg{!PS8`qo{_nx1BM#bjd&C?42lM6M`-VSQXCBIp0FO4YmYLxI(9Tbch*O;p>; zd{C+c;;t+LQea$$B>9oum^jW_`ZABY=MTacxTzg%!VPkrQHljyTCw_75p6J_E4fj? z*wWFRZzRO>6EfU;X4#OOUQ`4z>12~$CNtKp4~PKT4Nr%%)HOaQ0Bume=D>J)63AJ7 zYLH`AmCIY@_7!o^x`5&a8`~{tt38~mP&9FAWPSeluEd+s#etU7fmPTo4%M-NS?!Ns z7Wk5DTqjbNgBUKHWmq8XMe*Es0T-*{>Qd76yQv|a7Y}}i#bakb>3Z&YY8so{>LR*D zo8gRv(D&nKiS;I@-8}lH(VQ)LGFxh3_%sZYP2B>$H80{OYbaxQ#c{clCGR~u&N&!- z`_Lg1#HNZR3z>=4lJ|HkZ>9nlX`6CXFk_Gae2=XNIl1CU9oN>Z?kW zTx21_X0Bha(zipW@r%=mKttnEi{H`cwIynlkOl@G4+WFpek^Q(`%#aMbc7ysi65KK zf>j3scki{Kl92}V?M*$TXejtBaCe8TCI3_EdD>>o5U5f^>oCfc&>(hub`lH4Eo`_^ zW~|Tul)JVci_P*8rXQzTDw`(wvQ9AP@;lKi2^Q=P-09?#KTo;1^Wl0DXLsrwxj@Qu z2^}OJUoX0E&}T2o@8Lsv7p#B#UmQvr%WNuKLUdG%#3oU&(AO8L+<2syLRFokqc4Ou5N4O%;== zQLqcdgxtn+k7;y}WO$oo$glHPF>=VxVT6kVo#}7c?3ihXI~}FR!!Dmat@(J^=}Xjj z0&+XZlS^Ri6XYo!7fd#Wus1B$Q$%ht+Be&{rOJBWHx92~BfNWjX&@609b~%`{>nYb zmd6hXGvz`S-2Ww6+ZNw0z6NXwz6||qC&4!V5RJT`(HlTv$g7UyD=@uF4pyDse+Ws* z)XCy7(DT^CB*!rMG{UiV5UQ!ki!*$edS2g^^4Te*&_OdU+DSv$fXo9VZj>9?Bcx0>m9==3|&wi)3i zk!cme%QYSk&+uIZa!OW9xYH>;2P!+h=cMp9-lg<5`|+?8-(qzq^^K|M2D;Oq-dEK} zWBNR=w*@{<_#5SeDx5$Cl4`a}i;GJYrcq{D1q{!=ADyNVr)5N_Q{dBt@TX=c?l3!XhuMic>2sSooov;HAah~CG=MWU+QXka1BVifCRsK~ ztXa?NJjPa%U8Nd~Y3aH7%#kf==~|pF(UGx-j)vIh3mi zhGsPeA!x`7z;(nY@_@s}2jNpL&jt)cljII-+Po?(H|xuLD(&?PkJJ}@y(p5#`@){w z#`=OId6fxh#a7^y6^C`G*cG8OAZFc%#g*2d+4V5Ap~KiKhfc}wmP2J{+}0*C5;TWn zSZ`EUb!+5>&X@t5K4*?7i|_w%iMi3YKB2mBnNQ_389nW1Di=m4{pG=WwC<6~H_&V? zllKk%Nn&VmG~&Qy&UD>rD4>-Nt{BT{hiIWDpvP1Y3nr;!y#BqgG@4yAq!K2(1|4SHG%U>^^;|r|2y%h{H5|u;+2x@OQY%; zqLVljTFD#?=07Hedha^LP%pSng7Sjp)sV~sq5Q{KP#X(X{%D!x>A(VbY6aUYvJem% z&pY)}*O~Bv_;r0;;KNpcw-EdpN6~~*Lz6%=YkLp9G>hrrBlI!zvMZ6a}z(-LJip-L*Pc&E&xPYHjOdUI~ z>T(pe={P-3SCOMQBH2i%Y(yGKkLcRxOG#DlMlvcBN_Eqo9`JDjA5jxUBkAy5F5GDU zM#dd|7Jt3^>?6q}ll(=)2uV4>-2Zs-JxonqD2=4_0;>{+AtJS68*+;_2l` zA!&~A;haSEvqxPyi^wX{Zm>oQIvUD9v6fE#9SK)jkJa-Nu5iwYylRn;{1>N`w+T&s zJ0_?@Bh~*Rtew%9`zJ8Wpm=I$ah!~r5-|;|hrW<7NBQY2!u-?TzGX8!uaCp_AYa%b zpwuP=<~Z$vQ>p&pm4j|CR%2t~=}~ZY=eU4%^H!Z+x;=tRv|)5PmPKL{U>(!$VSrbYbmCXF`%HUoXB{y~9RE_>ymB^ANz11%^+;c<*bdy@9OZ}o$2Wex@~ zqKIE7-4yr~Jj3s5sC*pQP$`&(KKh*vy&Ca;tf3jw(5VD`YYfx-$B_L*uQZup#u;-A zhXw1T5XUwMU&tK7myDC%c28i7tkv}r6sjvcK|RhayU_ExhuMp5zCWdM(Dy5X>8Q4W z_r>2(L7z9gbiX+6xpyI~Y$zmipePiQq&eaCzCt5h$T!hnQsw)ZxNN!*qdG-2rg>5B ze*R9TheF+iv?z%k>fp< zBvS(}Po@Uf{qz_&*p0%Oj9z5c0z|qDwf2_`OQuad%dg2(biGOkV6|2MfB7|U7d?ST zrBgoSk~jvMC)c3nU9Wk4_m3s&L2iS}0PGJ|9oC|X*i~?+j=|O7w0Ifn0<&20g2IIY zmP3dJg&7mkN&FfXWq%vU0GHBbM%CdG^{y1qtPa6{NtM6g*Sc38FG1q5_Us#5Emp$# zjm5*AjCpYd1;c}n_}2bCdj?XPO!ads!)J7cqCl(mKBF`2dR#UgK>6TIgjZ{v0;Gj8 zOmim)pc?M5Us{bXXT16VnrDQ2fj#xT!qN8lZ2N>vpGW*LR&sFcouN0(5_O(j4p+ASim8pR(^-Lq#UR+JhE_h%M9&HL~B-@l;H$ghq02_Oh`K+`I10wHjK%?-=m zV<1MG8>BxawuN+r{2igH!)zAZR>7v<&2fNPd|74UViYb$s$zQ28kxyF1}ApCaz>P3 z6L~4?dY)$-`$$U)`mCiXQzVamoH5#Wz8a>JkEIRj_|vpI)7JF>X>#(rMPS;0l#&6( zh_%FR*abux$k}BjYV?cI=w^Xa)_BHa1ju*>@#iq!i~PH{}r@s7{E0>O={rXrTiZsWh|xuH)6Qh2#b@T|8$oZmER`G4O$to7>#^LG{YGhSzj9IzJ6@h}o z+@1WULe?aLLs9-zE%YMS3Io?z2E7c^eD1e@MHkZRVqIaAkTK(p>;hyTt7p-^Mt9R22&TgxT|(GOpTyfd$pJ=o;5U2aI4SIWafQ) zX!hx$N$}L}ij7e#4+F=jR1(Wt)MIp``4%6esk~cbbfy0EzZ@e-_JA>B{hm8U&}zJH z4XFqpVwiSTq_s0>QG_4c@N4#ZN+8d5CV&7-;E*Dj-#LWX58dgq>EVeFVtLoUou(b8 zf}eIzCXZ}XXd-G;B{)yFzUT71J~DK}W-&r>1e!8Eujj&vgyvWQEty7BpxK_&;!ojr zJ5jXjclL`c7$Z&m-hzW${RBPV;1shRaU+E?#N)FV-q=li zV7mB(wfQd*U^4Zvy(`NN0Is#3C_acX- z7}$#uUM%>YCSzfCPly?T``FQo z%e%JRz_FJdU)UibO<2T9_rRYyc-M9Y&{g-{ZUM31G6taW4bd_g=+tuKh#k9d2UAobpvx|+0 zYZq8f(X7~K^;$u9Og7h~dred*H?Va*RY0!(49Xg+CQuC%k>Cf^g1#sV3`SEFQ5z5_ zV^QPi%^$X!I{W_&qb{yd4l{aMk=|k*=__O?sD$3fghOz6*6ucrYHRiT!Q!yuTbo=4 zn_Qr()8-pbq*2CTM9Y0iF|9m(WT?K&HQ@|uO-1iRlFVTjKhz=)?VO?Sp(n8CX|YxP zIP1VYbPiTl8qUO);ZL#Gg+x+7N`n4QI*w$JyLfBB(r%CYX@%r;Dg!*~JZ_%&Q z<=K~y5(LM$58`YvdvRlO@YVr-Fcq6<+|wfH|d;4Al|kcN6F5X=kv%B@NJ3X7gm?=6PitP<39F61pYYyKl_atRq6q zZaEQ-|6HoCk$fxdAYqV0+ax{p)0%v%u>F;g4TNMhu^h+< z8|b4yXR6q`UZH3xX1HsdR@dfEYWf+((|C&5O$2j=M0QV)BJ%N%K{}*epWiniE8lwQ zqv2K|MFYP)jiN)5=bdB`C!Q9@8f5(hKWNxob4rGbBZDg)JWC4}6L&nS^38~pPRqHC z8b8kMJH0@CJ+<>$a*ht}mG@iRtC%zwtLioJo5}plwES$1mxj_U%O5)trZ;kuOk@|9 z{F!O@CId-7yusL;mNgf`b(_FLzVkFVk5I5;FrFoZc_ z-}U^T%>T>zpB+$n6l3czW{OqJXwa)yIT24r(knGo(IV~JR?Y~4iea#X?$$Z!)s$4b z|0j;>!RecAywrW4E$KXF@|bK!vLA2G^re{3u88}1 zb9(Gcx+VRJ85sN+l}A%=#}v64?-?!Dv9oPTsYP2FI48Y0&;L+u<4;y_x{P8Nub#S! zWzc7Q0Ob0X^sMc8{_&4co5-zZifoy_TU0YISjPi2D7Tk1Tac&Kzlf6>ZIdt(IL_0f z0Sbc!{(PDal@;5nt5%|>P(W<;`Tj8Q1QzI?4H0C%hEVd>rcH%v^EWc{(?eBz(UVRp zJNg3PD^vZQ{!!{usu9S9thiA>`kt;+*9VYEHDWjQD|ZJS`t)cwqXlzS8c(e@Iif@` zM@3AzH*j|kQ0p^W^Sim|vIV*`;5ze%g;g@+6s9!pw+$ND%^FNU`hxnU@K~6~WCHb~ z$z6b*a%wv2$D-(uyz;Vuo}J{zA(BC}ST+>&;+ z@-E(xk{j~(y7MBbP*R@!b~l)gxne?64G9=v@y0@aabod8- zBpNEXJJ}FL$AU;pL;e|K8^>%8+4t>^`2wh)J>*iUfwkSX6K+cAWGvIKo;~D>?1YK@ zJ)R$(=O0J)Tx`$Z)$8+J6EYEuzd`Rbn){xou8tQyuB(AJGaVFI1N$0xl49S3&h&sP+N$@t8m_NkD+k#4j zg_ULfC!5%pTBL)@yCtPcCs52Yv&zXa|Jc1ktt8Dvb^Lx=QQUZ*jl6HMp_~xKm{seO zji|=d4Wtgc+_wTrVTbGjEfmKe0oV`}Q1~Y)tWf>abx;l(o*p>qTrrycxdx#nR+ouy ze8Uebj_t*PoYRPzdlnT5Yo_@gw=u(0D?%!qBCtiEgm-VLIBUO`KBg45!an3#?*0;@ zzB@Rg+$vzQW+^#=Qwhs+Yr2Gn-V72{L0?#5qN@O|qWFwVSF)d$#c!$^ILK_^ zPA7QW^#l4NHr0R@L|T~-pyp)HI!=D-v(apfjS#klt_J(G$*a>=&JTb>2-uZBQ84cE z1etdt{(iRldm3(tW)oyWA%b$DVNcKJkaLA^B+M3LiH?dDoTP&{#a+DU^DH9Q5$Y=H zWwQO1*mOfzUZVwaQYv14F)SS@vUOX5g++IQZWd736m^D(IF%m^@Dyjnq3TO{*RCKg z(OE>6fe{*70dVNVh^HYPbXW&0#vdlukC<~~-PYA#z`Hy+Ub9wMv=pi%LQA)#*P_ub zz{wMDX-Jwj)pz_%V|`NfjH~>K(OJ&OII=T#474y5`$GIcBx6&+ip*^U^rpP|-GTq~ zWU1-az!e(X!^lOLUb_@l0eC_KFYx*r@`t>K9*n{vGw;#WtIMI|0FOn9KX5X^|2<u$8jxh{4hhW8V-m6mLMeydCA-4hM zKfyI5~4kDE+0X}XtPN15TyW6n~;5MuY0__|Z4*=O5=tA4@u$&58 z=nc6Dl18;^I2y^WFtp4mNWC_jZe5A`Q=^bSMJ2fhr=D%W>w~kzH3`UQ``r!SJYIg^Kt@`t;E9Bw=JazMOJw|e2} zJzvq+Dz}`56dX(YI<1cz3V*lp{+>?*Rc#JQs# z;R2O=JNcI%xP6V$L9R_4a|G4yM6mqrV16UkZ4iV+1l!9m(+L9234vWvtWTaHnWJy$ z*I40kBKHFo$ibE*NL4_LUQxI-5guv9jfKTf%HFhsZb{vV=s^7g3BB(vy>vyQH~;kV zi$rA8j3M9KWb3HfMFxR|2WW7kKa~uYZ;m*KLFQD0&BaqIw^ByIyU_dNh#D5^A>5*U zQy!p;@Suksb$(;--F=Al^WWyz(eCIo9LCO}UmIs~k0Sv~474T;J)RTB^GmZ6=sgk# ze$kkO_?lc5yk`siXp8eEE9oL^=XEUoI+#W^ z2L+}X7-s~+(O{bYsHkSWXORW2{{Z6GtJ|VWccq-Ic*8yDO5xe^GlF%`@DQqdfWJWf zoyeuF`UU9O&T+HKrj7HbwA4MwSImgaXoboc9)NWX}YH3Z)1A?!1Hfu7hizC(Ky?qWs+f zE+D_*u3<)4yATMpVWXJ4JGkx@f+K@+Q8DFscwwEq8k;1g>6n2Ds>6bt9wTh%*EE;| zKJe9b8+lh(bKdon%>e zJXkl8jgDJ|;QC2C%nXK}B|I3qoR^xDx$Ht{t3XEsFRXzJwzbwhAwSf%weB&VWU|Tj z^&vYCnbr=HSl-$}I@7u~LIYuE-~?t6p@yBOXkD)n2HX1MabcC1b0k>zvM%gN{$fwN zBe?!Gp43kk(YtG<9`gb(NDtDeHT-~4scUUKwpOa=*%bDr_Bw46V>c}m+)RC*xm2c|Jvg;5{$=M{CcsEIf1i;qOB%Li) zAg2`@LO+Sl3vQCpHb=nQ>Z$!X$&9|76CvGYA@>_*4|-27gJvUOk&c&4Lvy3vre#h8 zC6nC7EVCUUX|AzWK4-06!(TR!kd(dWkP(t`!ZlxQNb1Sfq6cQ45CuK@w_4@YNp%pd z>Mn`Yo9$=Or$U1^Nz$V)8M*~#>+$A6XG#YIUeH4s?~Xe;#s=5j!QYZX@Fa<%e(;9b zHQSf~p@tpbF@93nU`QHZj-OOUy-_k?{G^GDpUgHHKfNH%9zPi{89(`D{3Of2XZ+sY zIB@(V6R#e{{_&HZ9WZ`UqrY$bB-3-oPq!l^%{A7_=d87l@mI!AI^*vdKdH{Z@sswS zJATpvbNpKM;K{P9baqW;cmpRVduoTtLi^h*^ax2{@M?#fD|EQILiZCIXmSQlvO;tB z3#+qETBccJqdBJ!M}HvIeCRk5IJ0c|WyR)XF=vOhf`aR0QEBF^P)*bpuj!G3Pze=_ z`euZF8uhlL0b9FP%7fN7<60)gTEM(+4|iPqB+zootMdn)#z5d*W!YT}G zXzo^|(2mBx(#}6x?G&%&f1{mOP5X{^q8X`ION_+H0;Wf)u0`f#T|?&9u7~XJ=K^Gw zp?8Sf-Ib|j!H~>acEtLF6x|C!))Z+QsIq2w?FT~p`z~JYsJwU)*E)4Op2gl|!=$>M z{K5=s(iZ;AUK(;U;CZRee6LXXF zI(Ez6Q=UgfrPA0W4d66*jV9o4Q=wp;v@TTF$TP{MW!8AS{+b?-hGyLtU3O~iJ>}~O zY?1^v-)DwSi4RpxfZ%6ad!Jt~>7nnn`XR8}HpkfJ)jPJolLh#ynFhkK%oBV}7Z%mI zM4lS3qnH&M(A8FjE;cK4b)!aUn5yZj=g|+PT{is+8=EG3%os^ zy2JAJ{Cb%b+LMHi)`hK$(7PQMYKAAM*$J_E`?bVAvCMZDdNv~sy_E)@59!2tjux{F zGuR~ThVx-VSH3s<4~{xvN|-4LwK|2Be77xcW^6+-3o>*a{QrVLYZ8TdYBy0T1rCW7 zB`Q2Rj?t96JD!`gZ|Lrskv5%1D+Pz7AIu8O!P2NM5w6Z$26_gWGiShhV9vbsduuJw zeJc#TqI2{*HCMN%?s5jfFjqL8xgOz=;SAjczih4!rr8f=fS*ACX%@(mz?RHVei~wl463#A8p=>ramL1EO|Kp-7pq*GbWOyk%4`=PmGp<`?>>s;+*p z)|##|Md|*z!LguoUoO#P(sV_HtT0=S@f+AA8E{+u880T6a29!swOMn%R?godZ!bw&-Bw!f z3EWC=LgM;+psPVj)Fquo$RtKkbL%0^ln*3i($W|q6QVAJOsX0uaS$?j|KAfbAqamj zA=Bd^gzOa(YeFWu{5OP5Q=W4P+4<5nezywzYUFb!#+(&_9#UTGCAW6tiKho{LBrr}65&R0(?RB%@X@g38qI_a1T#Y}Z*W+Gm(4cl+}C+vGXBO&9++ z&AHC3Pe^kNtXipgq4sCWMPo>+MOIpq`F*cuXZ#0)nqjGfvP#o^7nvK0?3{sD^$5vkVI?&gH?uA#`)jOS zDW7j}8f)u$z*;X=!ziv^VR!7pA>2G~(^3FV<@m3+nm$kMk~rBAt(PL+kp1=Py2=E2 z)3)tjy>xZ6b!6Ao{lL4^|B=Nq@W{m-MufunRHF=W;1+No^s^rNqM?Zp4RZx zFXOxI9_b^Li~N`7?yuhTAa%n;(>Ew4kGvBJK2V$(#faU5Yn<3U&{Ogc=OrjuC~>!q zVk&V|5KKj<1da`7BMk@_ph)B_0X^$%qyDNM9!$oP-%F$GY9wC_) zp*>i}&cwZ+Th)%D1T>^X3BA|^dz5cOB-fZ~HIM5?lO6?>PVfkIhBh_i zyXpmdB67DJ@5cmAiqd_Pu}y3`Pb6VBVSy1^>eI*bu#RZ1w3n7HP>qB8l}r4;8(4Ad zwMK}Qor}wgJhQ}ky&dADEsjWoj21&yb2uDyJ2qb2iiwjP7Vs$7 z0Fwj{i&g`-y}oI=`?;i^g|khFGN64EOgk}D^?JmaNw)bq0y_(Deh(%nn7rj5^VzT7 z-_R_EWbv#0@~+oJWN+&4Y81Rds_4Gh{E18f{Vv-=zZ?5)#Sx50T@wPGXkDqX@kHu2 z;93Om=qZQHZrpGylgzO zG)$AAFUIg97l%>be(vtyZ>>{gzzpEahy7yDP2=g|#B z@$T?EatS8dT2p{v0hSh_gp`F1f|vA6ctT?PYm5`Gc!YX zM9xk_*T}3o6@Bzh5_bKBb3nT?wtIfpYGxmrHnFrMxT%|xW5_|qdg(b`VM9A7SXB^Q zFI5X}k~Vr)zas zW%oShR&N|=`>~dE`K$L?(R387`^X`v^YnhW^d_r=_xN&h zjv5^efVzC7J)obVS3rmXz z42`bJfZp-_IWjvoX=F)T{TolegLeJx^j0Nx#f)v{9L?FmKPTPBI*HWEde? z@4?xj+ThzEH=WDPkc3!kNfQz8k!7<@^3v7E-GKLNl4&v#^wrhELQ1kcEEy%4UVO}f zLB>u)C+^xT*9rR3OvF{28P`+4Tt1P9@tDrTD&uDoYEeh74z$0VM_cvv(aI3DN25%@ZZoZONiIAouqA>ynb75P)nJ^*vj07SWGNP}}|y*P67 zT_RVtMMYI0H6 zkLdwj!VEV*4qv>}Nwcc3M~^PDq# z*%85;+L9TwO_ob@Z3TeHM07M`nmgU;+SFi}I&xQ>tY6Bbcn*>KS9;()_2>R?gLsT2 zf?>8)EGF_%6%q}zut+ul-#~`{6BO;o-ZXWgYelMOgB>fpQBK^1Lwq+SBIN~DMo&#q>^I@0?NmK%Wv-1q9QQ;@w**M{7Niwoj3#4J_ke2 zYx*1VJ#P~To&VvbWC54Evo$%^iZ7N^tj6ZQxiwk0qE(bbkP7&&lTL$Mfrsmh6*QNE znEvCW_F#tkuPa1FiK=9)FMcWYXI?QcE-zJ8FT?ZY9xqltc`#Z+cXx}PfCf%EI8<0= z?Syq~q_I>LNfbC*S&y(-C?d+td2|x9Ts!wR{RazUK0v3jP#uC3Lih9BS+liS{rkT% zO}BE=ed!xjuZ=-GzC)E)NAA@>-j?O(srCKezkoT26o@hEubyX+M6WCa?r9+y z`;Sl~Q9|m8ToGN7UWi-EdlOLc27d$Ph?z`q=~k>eRYg2I_Ol1hoZIvz127H(-4k(r zRw6b9yMpC=gXJA4;NWYszWgwHRKfD@pdXbN+*tPE-B(Tixrov<$b?G`drYb$2cHRQ ztocDP#%^`Wpga5wvV4O-_jg2xJ7F&ju+`8P1#5RQ6$GC3uni|a{tk7qybg5UAjVz8 z)vxFZi&1=k31!Jqhml}VCJXptbok|DYK@0w$(1JM=lNu!WLwlHrBt<$QCS3i%FgBE z)r~q=(bWd&a0xu_CAaCx`e}*U_n*XL-tI3!4>MNCM3d?6i0sBWS>^_eh3+3kWlTt` zl{iaqy_n~_DKNbn_!66MrdYOuXXdi7=OWi(sU;r6Ae)W8w3;dB%dZ2BXzmW1jk{G~ zyiORn+qGGeMF8O0j9!O4f6F>ZW`2#H#Q#l`;#e%(ypC`eAsj^I|#-^Y|V7S{D6V zWo}13^+Kq;(*=jy6IjQyv6Iso>Uky*(JqYJG3qz1o@b{|Nbs#JRnPsJQPS>HJB$yR zt=h654I>Ltp&)MDza(CqnrYTRyp3B%TBWL-;`DMt{Te>9{6GvYaFEnvPvlDKZKrV-ygUNIDrd!HlXPTVZF`iH13q_Ph4t;YM20@-j1 z`p|_IY6CZJ9{l{CnCACl;+IACaPULf4m*KXU#mRt5Iho2v*3}qbthHdb=8D#;&>wQ z#tQxV;Tg)0)338W6+@5uKNYF(Yvo%XCKRVx?JmKw1)wTmj`P7JXWH(Ya=285d-1EvP(mY?UkwY^z9W>GqA62#)Jzk=t?`i4f0@;qh0#@E#2QJ z7Yc%rKqZN#ii-8Orxws}bg2*9JhgQ^4ea-1`n{lnS&a)A^d2j`3p*k4sboDkauw)C z6cKN5{cXvYSuYjg&t1IcSg&RE^OG+Z-^D$ViIu5~Dy9Mf4KAned_6Ys%k1CZ=&`ZB z`an&QylE<9M5pLs>SFvNS$}nyQix}!$vFye%)sHoZ3v5(KHLPEZ3Q>#xT>u z=wo}s?2%Vwf0No4a*nB=Kk|yjOJWdAa8;tA@8$^C8yYqj6}Lsj0{GK6np^I^LH<#p zGQ0PKW#{Qpb?^mxkh+K|nuy^vUhW;+882oqlx5q}mdI$mq%0BOt~k-0KV*Xa_MBd8 zNVQ{?J7p6K3=u{~BhqE4Go`ebO)Q0$Sew|N>05!NSB0jpAFlr0%JvWZTK1tUOVnmq)4u{-Lmu!(0UbSstkm6R4u2nT&CsXyhIXk{`lSBs z?k}O8e;v368t*C%oRV$5TVm29z5H4|vKpZl$C~;jq78GtxvdxTjH=#tC>TAjX&4wQ zdTW4a2djW%>TI}e%7of>PwgcVw;)}tPUxKs6|{h0U)x~6e;Y4+H zyaZLb5b@kDS+!Mcw^kwxzsq#gZo=wpL9?;Fi+#)6wlqG zGe6J)wA?xHj8X5BwFynG{!>576-U=ylm($;$0}Bf`3~HChInMn{SSQT&mf`FP8L?gC1gb&Ig*Fpdu|?=n|WlB z$2cnkDH@-)4l6x5EkTrVd1|qm*TuYq1^=<+B72=lA~dQ{IeFZrK^n&!zw7HQ>Tk<1u>k?mb@aN;?$yI6h76b@_|1_JkE?O#<_ zb=n9%Q0z-p*_v*;Bmbp_G1QS`W(_M7m%tc~R4>7cnQKXfcnnVInk&p%-;X?X*Yc1X z?Yd5W8Y5%WkN7Uj@4@~guYj+{+KrRXXksJ4yBvh@iIlKe?14+w9Yja#9V6%8Nd{Zo zp*ilrDopoXm3d{ryF`X)V{V>8bA~a>bDT?X(g{{jpu%Na5=@H0KWr2R5DWNcLTVE!TAdkOYuP zd+yfjI(;c`Fa*)1_TGI)`1Zvy>EiR%O;_&b|a)Rr5 zF{x4Hr`ou)SY=~IhRHJ5Xx%Ksl|xp$YNC>GY4S$-5z~o6{3c9(RZkr;$uCxYhP~N6~k-&=!1`7ppP4Uv$Xam6Ht1W*DbJFc#^o#CP6CJV> zdhbVA%#4X5=L$~g0e)WdN4V+v34sW#xBun zX$WU`PHXf#U$I9<^V~D7lV?X{FwcF{P&53RfqTVSpZ^tzrIpEGo0R1MSdjl^!;ik$ zbEu)2mutyXR3+GO7Ls#Lw4wxUS0+c$r_%2CyVMIlfHI z?_8F|w9#fh2zu0|`6@E1A!}ANUo~vWZk$%_U+vkjMOdUmNolAhkU}l}$SCjhHZRM# z>_>-bLxHRNgHI8iOJ9+{Q0ioH*j|!yF;JI2*7Tos=}0m;*49W{5~$Jfhv@v0t6MA zOkTer`K)x+q+>N;janeGTV{K3rjuNQLjv2z6(SZ^4_Pr%)b?jh**Cex$WUOqV(!>{ zR|mS0>)es;G-hWz$5*em*``;I!#35kZ(4SR;mocGbgr%l^sNrvmF@B;cCAkn`szM7 zEL&ZT@sE--8?|o^-IncC2XRoo;As;2=98PdqGnq5Y5;-vU7?`c3CP&JHC(4G~FMb+W&_a z!M~$VJas=ILBw{{vx*L^@JtxqLo4`g<9}a;XW6bv6`oa%6`tD?(|;o$PVTDk?Ai8P znRveW)1&m~%Bl*_(QVVOM*O!rt-|x({A}kz@@lT|Tp4{R`^|26OGL}T+p^up-aykZ z9$fr)1{s4C>JC??qsMA+bQ>jiRCt=gNz=theC7D*S0j;M{fg9~lgfSVSw!XH#T-n` zq+*oTbiR#;B%+-!(TKvd&{^xLTwL;IUNvOoxQI24)~u$`O^qOC`IEJ?fygLkNuIpW zu!#FD8%0)dJ!>~UG+N)V-HG->SkQSgY4#}ac=$;p@lcJ_9&x{8V~iq++J^+HMDNe! zD4o@gO1MhS3WpCR;zNOj&ua>=oeuLkH7ks0uG1dwN=s`J9|>Q%9a{sRC8UMZT9>4? zEKZ9na|lQadq0~+Nhuz{0Y5@wb<$`FAjeW3S3EP z%^_Q($Hr=Iw2{$?@aKbTK9l0jp_oX`hSD}hjP|rd+#AgavQgULc^xDRevPK@Zp}L; zy#G6TDl(^-irn)y(F`u@+Pj!PrbCUiHVI55P)t(f8HWi8GEDl#$xB+e_oFdUoDfhs z>cUK{NNcS~YpO_VUQ)pni)jlnPH*Ze0Yxw(tOjRoLm(O!cLbseW!?^DBEe5C!yc`w z^XN(}J4#?0?*L>U<6+aKl5#W>=CPpW- z73v;7WKV0S_YVmgm-%Ej=W$wl_|V|ACRqhBd3X``t)&8NBXaTAxy=&HlexwbaTHVF7N#q>(TH7HP>uk0 zfMdNq+$E^U*c!ICtK8$TICHXEvfhIPG5pL`=`RAsv5PEj=_~71);F&(BJ#D1$S@mO zEmYXiSecx*3$OQPwYf_O=QhF62B%?-qH7@!-0r0D9jilSZ>RO%d(pWlxat_3jj))}{pO&$ta8X?gdC$dpJQs%t}B^L#Cp z+w}vLDJANk%?~UM`Bu-jvubs9%mZeD)Ji;H-qG&?GlcxjL^hfm_khV+tCv{UP;`kd z1H7JWH8EDa?|fYFmWn&hPPt+w2FJv`YWy5>>f>lq4p{C5A?AR7E>`EsGuYKBmG-Xt zk#j>F?{14mGcSsWC(CG=v?9Xb$}B1Q4Hkwz#xIbuF$+J?4c$KfAwj`$(U3v+dBQpo zsnLA^wA8dtgkOHamJ~E)WK4#Rk$RT(v(6DH{XLq_;)$-f=L)|*!7{(L9`DIxrfBA5 z#5@hp%93n5Vy=l7?=fAobv7p1+F`Dmbs3Y^V`qrdE&!SWc8*}!V-LfAu?)R*JVq5K z*-k`e(KSeTl--2@KczMgG7}nO6MX}q!{iv+=(RHPS7XKnlUdIw2Qdyicrjb+aslr@mMj5 zJvWSYjhUYJ_$lf-H2c5!sa-xDD0RjYZPV6#2gG zbV%8;T@CyP=u2{A>eO1*5D==6_ny7TB;zp_(g?rpM&zVF38|Hj{^8jDM;SUOwbR6 zrFwN(hjjY*5*@^OYJJx*lI{fS9ECsuRte$mcPoFmUS=GO;S^8$iytn*s*Gn?z)X+* zA07!Xm{k65eOGT%S#$dwt|i7{h}X7AZ|8oOw$LS0cm^?;=aA%M6hvmDpUJl7QHaIJZ|*vFD&R z${Eb|l|RzA!!4LpVjiqW3b>1a+m$tSH>)dd2O%w>6Xc3+ErP^gD@xiTE3?}+d@3=J z3292geJt`yDvK&_Tyvd{T3)YgU9+_ae9~0fD{D!km1Pw-8hMpBD(fkWCl!@gcJYqE zp|Yr|T_!Rk9x?<^-;TfUE-6ICxw;1a2D|Rw#QZz@f(Q7u#2~|d->#lxY1E^U!R%a} zWLa&Ie^fsmrgZb$wA)YP=ydvY?!5Nqh7L&u8>d2?+;b+m-#`6KQ)ia+rKVHTvW?S8 z#$ELLSTqb;@g zGO<&PKsyorY=5Z|<6Tm{k(yoQk0q-ZF6R3}Np%J2N@IzbB+-ex_EkJ|b8Q#>K3tN5 z-vGU(pg5tGa#iMspxhF^e>RoP%6ndV>~lk%n5%0ec&-#`Eq$XQ3;3wc@hu*Sa1)#k@RUoS&vpdq1I>pFd!+HTbiboH9b zdKyV8f3L1ADZto;`%v`1{F5&wVSKZwOm(s-f#nJ7JuUdgT~cLUgG`yfAjk|ito1MX z^R_J0YLgOh^6yx~3Wg06L!2x?7FgSEEp1zTqb+E&Wj0RNT%7WcT9Yx0Lud&MW0uYG zz^8h_C=pC$rj;&ElS_EBn?EdPJz;#4={uvt@gAE(8q|%I_?cY7$D}@H=R}sf{G%*a ze0%i|JiR}YcSd8zgD5{kZ!u$gKI8mfd+6I3U*vP=*C7doRGZu2;tkC~W6%5cZW3*w}u`vO-WnOIkhFh|sRO zO4_h@V7}3uzRZh{gseqR#7xUdYZ8s_cArr)9R}&BA^oCje#pM zw}0g`=JUV(NmC(pg_TAqt=j%J)h^%I-FESE-Xp;(Kx1dU2bJ9~-)O4u>be8MVYxNc zk#c|l)m+^Xh~oos>bk)bKpsd`8%7>j#9B)V@&8Uz+}w>brrh82VdR z`)}$?w}{5Rd@g;c%+QAFo{dY&u+C-TA$syRFzmbF0H7o|-PB58kg9k?=Sp2#;+Of(!0(FhV46mZNda4s$$!6KivNXEV zAaT^OPGh`A*WU>Zh>K2FeFF;*LNDcTt zyZCem;)GhVZL7}V3qCP1+g2GyHnQeWA&>^y$HY`uqKJ8etJ>x645Xc|P&hWbisYj- zT)ju@*hhKGEB4_h3w|p5~n@YQ-*rhnNij#qZ<3qlD#9cpbFcz)?$UQ z*@S}GX3J9XNaRl5ouv@5nGqxyuUll?0-_x6^3AKld44Fbc23N%hkF$6fSo^B?!Xw@$T1PwP5j zqrU24()^n5@=Hytr|rR}f0T5^Fw2N>lU6L54^?3$WNw6UB;Pjelc@_l`<(d3IhQca zS6jx!=a3!qbT1vE1zJ* zL8BEK62^yZGQAmgKktf9DAPW=(@OA3Wi#4BeH-2i;kQtSVJg4I#PpwQ6zY_%2)3Uz zG2&U4rEx8^&6LugR1kp>I4QzxRs_osgH?Dwnm*E@KT;x^7UF9?#^K%hdJe=RynfZe z_Lzs-qbo|$NT?qNOVMeN&m?1lIThkmXFtg}5Z)7JSQ~(`!x(fCeKgn}_9;B&Bdyeb z*HSC!-Siv*3)Ay&^}=TD`YsPcr4qe#mc%GW+L-)Xk8W?oX~hG8P$^U+on>b1$^w47 zy%+%xOR&`HEz}X|us&fGd>C3DT!6hHR2m~bX^3J^8ob$)1_wN8h{r?v${(w`p;wyQ zqw%88z8GE?*2pE=g$32QH|NglDR8mOQ^vaNF)>L=HIiMG!^0J*6C)1B8`}ah(9x<&)**M&Je$4`Vv~1-!?V`v3H6mf z=KV_Br7dXV@$7op@Vc4T`K}#ku)@O?=mWiwEtGz^-}DI@Y>h3x=nE6|L)G~OaxA_W ze6nD|gNLE@XkB=IFByK`_%QSVcA~7;ThfEaT=>rafSpun8AJv4X2+0OPcuKdblTUM zdpxVI7>>7-u!=-#TnV!d&d~3)wR{KYUxtsz%Z%BK`xEVuH63r}ilZ~xbXvT#L1tw% z7Bn13!8(fm;8BM66oRqIG5nJbL!=_S0u2AMFzj@SPZLY^^fu37EHo{$ipEF3P4u)N z{_yLd^TW(cXw^HcI2@Q4I2iePE}2pcJV zsV{Jm{S9cF^qmH7$ff>906cVz4_6(#S(hkb_?lPv!C_#Ag# zTY;#<=hf*=Z0N!c4;?%#^KR5UlW=ZyKCGf;`3q$DNC;&RE4zVVzmn!VmC;f@G#0-F z(;V|-V-aLoX<8W_fp;WONT7@#eNC1H%IH!-X{sC3Abgr*L13&Hg>tDjt&WZ`et#D4 zCE|r_T0e)a?Kzr#Qf`*`=)6UK|EJ`mFIxBijeKV0dqh4wEYI)%6Zs@~bkzTw0?C1A zKU2RjrO!!t(PgC%{j|f6!8xxz|C~!!VA1axI$1kXGq(7a68(s1bjZ3Ndv__2@K3(l zP#*N%JATe*aOmBou1kSM-y`f>6w`c6&6nZT6!DgT7Kzak{7@OYwi%rHRX|S5uvKp86XWVLq~@9k zqaHS4cGSmc*U;4{52hWL6T<+p5tW#Lb_)Fkz7!1IlLCz6&eXg@`7)sD*rZ&_%2Ox0!y zJDIvc21r@g7mVr(esj~FVA<|_1a9$5TQvUzHAc^BFdu!krwSkdIeToYeOSmID|(AQih@ z%%{^7L(S2ie)u^Pn^a&zVS-hx(_me~b$(ij?Y^?S8@!GnQcu1(tOwz@&ehw}hja38 ztXh$Wnj$W;ul$jw#B@4sSYXYHK-7!;c{gZb(26_`*Pd4UkwaW)!Q%ow0}S&sEw$Yj zXlJ`G#v;GS-n1AmN_M9O-#TpLkZDyAW@&m>^*GZyD8I;AburV(f5706`OSKooQoCP z$*}9sZV^5f|hBGwBP_oGM-Ox#`*AJDhi!OK`vL~ zMX(Sor$l3?Zw@F60-TDCy&mD4;1c0IAuLZ#Tt?SME`}bXVCMq=FzA4NRVfKP*>?wmr z)kqsvV^1QZ()PS+Dj=ghGOG`_zmAq=MK{Ze%Vmb1vv2Rq3ouC>iQ;j_o;>fFp zSJLR5Hh<90ScAx$Hhl(FHTQ8qR_ENuvMdYR_m5nxDJj6i>)ac?E`Ezs?Qx-`dHAmK zi$9dm27VN76vD@?2zRm^T$+Ew*0i{LS=-{6+XpJ1;)A~ew~ff%3ND?L+qflfety{F zdz1NiJJ9T!jZ<_9ZyBn`4O(Ti7 zQDstIu{r=ZF%=h$9!Cb_+Z^Pl`{KDBFhIA1Q4A~5EQncFQqjW)6XG&5^X2k(Lliej zSVCaC=y$NO=xOd;+b<^AV4cXfmTmE*BmL@qTirFzw#&8scy7h@J%_~}7i$JT_PFq~ zZH8@8XDPp9MBUsBz#p0sl>rwRR1Qn(4Z2N^RK1m;fZ1l3>jA^KYNJo%glC3gf zczwW%aNl~{pkl*aWKdX-&fXUfr+zAeJe(l!0Wh&gFA8ty`>VlD2o1njn~}#Ad~QL1 z$M)bA(<60Xq4IbZTK4SzZah1BREb>xUJ14N9n=YlPa8e0RKyzGCn%_~e+jzFoPmv7 z(9_CkZAS~8p*frJazF`vPeO0!p*8E4TC0Qhc+FXorjAJKs%#Gyn;yaQrK?!>|X(@@v8ViJ~5d?%gQwxYoL@Uy2+ z7h;jeBac(2^`?*W?>)<}f97${<9PlNGhA;Zk~~B2egyi91o&WW9@+SE4M*`R5T2~A z2zrLQ<)A0Z61@VuCH$cLPCsCAt^QklnFp-SU|j*r0<3d&tEbQ4qpt{hio{6zJA)?# zXlmmGbj!;giK!l# zbRPkx6ca&EbejQ6hKHqw_Jwp4f`&jh5}5nY+mfive~$kx4di|);qHGW;l727z(q73 zP6w9@w+?P6+(Edra6iDA?U!&4a6{ny;G*Dka4X@qz9z% z+8>l~J>gv7eBi?2royGeWy39oTLt$4+(Edn;p*Y6A(I1~3!EBmJX|u|Jh-KB>*037 z6~Y~dqr)BgkipS0zDEF$EA1H)ajk0r_b<>=w*aoISs*ucX8;%N6v)S;pW>JRZg*e2 zONa13JED@cvZRz$ZF*dqR+f<@(}UJ!X3WftOOvH!$@Cc+veb<9nefPxU&rRT>xM7?t=Ys-*YJ^s)?{HeHsLoRY?8EKADBlx1q;5|NPNWEfHt zWfYBgP0=WHLV8?$s+NjMK%ibL)23?Y024`~1Z`H9Ql`z!M0WjBQ--w2ONcK-lg&-h zC(9Bt($XNYY(T%%tO2a>7HP7ydc;ZBXJ(`dRm)V#g7ulHuEDZ+ZF1b46qJ+}mjgnU zl0GLcHHE6M2kTzAvOsR@paA5?aj_Ev>3)<;1>#PH(+hMi&r%}aGQWTfh5-+0rv|0LIDp7SOg@!o))kINcyY+ zl3wlr?SN*{jFtkiz@BpgIs!w0J%EV2PQ`Bed_{nP?U{(4}0AUB!i;|L`A{DA#{i9jdda)I6p z91OY!Naa2O%7C&dfxNLJ1n3M}2OI?40HjwJ3W3y)OMxALRX}Q=V!Jd7{3k$)Z$Fjk z%LPdCgaff#VPkx;y@~BfJl|qFNQVBYJ(@v(bUu=i9xo(tGiJocWoZ*hMEDaDwF#*} zU0hZ|Tq@&X?{D~tm@z}2oI(L0X3R*6%hHSfIobq$My3#r@<|nm88ftT@hKEPYi>%C zeg+vVM87-l*Xc7Ap5SF_v-FuM33>`Qq+__4nXXObL@o&^OV`c?aI!=UY2UMm`XkYNcm^RHUk~P7;fBJ|2Zhy0St;}#Fn85Pt+#G8B+P-T1+NONX^JHWHPzvoW^DTd3qs#jP{MmQ}j%~Bve!R z&kb%2XQDqpm)JQenR)|ipO})RON~p=rfJjlxP0iSe%fT&--ysWPLpnAO;R??v+#qAj#JJJhakM zlcrn56LtNkv11c+Fm*z6Pf1VFr=Zu*(`NEh9;&+-hB-`jioRL17GoezW8MC=h{ia7 zD-6}~4?6pcd|UKaeKJ2I6S}Q9{>b|Dks;g0@dzzpM%>)E6by5XJU@RmCyT;3APdoE zC1j@PShwb6LDbcQQ{%F-nuW;X^fKobVS$;MaXHYJ5H&0XT{ANwIj317gi?4$nvO?(sR->3|TUo%4X@%1u4;TTqjE5%%%l$ah#4z!RVQWnX4-| z7yfi$0+)dqtror{aN^<1Hzp0!D zM^}y3`SC1%el#pKD=-!3g>mR3?;Ho-uuQF%X9@Iht$t!$s-XohQsmKflH!eMY?8s5 zXq@Pjko9Fcua z^pojL^ppKf^pm+x^uN~3Plh{@PsTvePxe63Z-cU_Pg%jyxGj#>T5brJ$jeVQh0IV~ zUn7{201Vz7f~I;IGDhX9FZ4y>ET{4~yWfunv+j_N>2`m~3mae`EEj^gcuBe~APQTP=&3Xg#T>0ZblN+JF1Netw#@%2DwZ6K$ED~EGTV%Pm>;Ci@A zaMGE9Tr6B69G8qwlEKluAQ7m8D}?*IIYJ_0=y4_2W3G?}6tDLGbe=$SjMQf7XqMoP zdi-6vshFiCAXX~U&*NoC0f*)^i`U3HO;C1Nu4QuChD8c&1{jDr1?8JXg-$3r%i%9V#%a!($e3jXS2gh zNFb)AGtBhxcV%buHD~RFQnON7>gT7Wa>S9%74_9)Y|erXGf^g!BoVck`;TRzvd{>3s{ z)`N|=ftlK2Fr5eLQnCWaM2_Icaw*c%ZAx6GHj=k`V6H6zkNAIvG`>?fT_Xs?gGa~d z8dEpplX*ou2Ddj+8R5YrLJ*Z7>jQPVh>X;fgdE%z2p7R9ZDv|ZI_xkR>7%v!l7XlXn z7Y#@8W8sqFba2^li{X~Tt%utRw+(J5Tp`?PI6BXCRKQ;YXN0SVYk=d@pg%Y%oD5D5 z7XTLpmkgH;w;XN_+y=Of2c!evFw>9);{@{3Yt!Pj zG(SO}8RSF0B8&2G^aqZ{k|ns&qlYFY4$a~7NyOnI8;wIoo*W!pSeP;`O_`NNz0A%?a_*^L;Rt}A{RE}6*@{^rJESKg(VwwD@>E<`t={+JaEup7uO*}Ts$65Ce2JvnKe5#Ej>f`LS~lUFlTOd&b%p8u@*7*&%Q^!^1|592Gu#%vii%8yPiW;-u)9$xQ!$9{&Fd{d28GKN{u4 z@z41=VSgM2{~Ja?NnYb077G5OLma^f7fG7_OeFv8PfXvuKL4z~%~O!y@;T#wM|{IY zio1HT6g#Z(kaCPGg0(GD_{|jY<8tUvaOW^$);8TBpX}}uszTSBs*h0 zknT?#fMlEFUSexHEP;+5)%78jxZ(ugC4={W#TLY5|+6nYhU_an0V1M9x-~ixeAl*!E1Cs4< z4{$KB5a{M9$-rzN&6sn6 zF9DYVC1?Q4fhNH9KvUpWpc#ZI9{{arAp95718smdKzpDA z&v7{h^9z-XW~FcD}2)BzoU^MNYh8lVINa^eH4i0=b^5e%5IK?7}ok^tz7XrL2e2;?LTgPern zkdrV1{S;_6AN>^Q0Mr4QWrKqSfGihe`;6mJyw?un@5+hK?$yakLI>H0=^!gHL$a6< z&EnDX8#NbwL21gY7efsdeill+Jq~v;B;-Kc0vA7_}LSL;k=E8+Jh^u?sPq;HbMUJ@Kd{R z1sBZ}egphrumrL8L3}EU+6eih;HP%simN}xPlt5mr#S$%4_C|rh)->VWTyP7ow&kB zaj313pYo^nLS<1LYBN+{lAqd*D{4;pWI-dur@B!4afJlvR`65WC_XKTTvJ;V&lj~vSHvbcDclvY>HKE%^r+!ZHC%8`DvaS!1N8~fPyM3F&)OKtN&Q3Qr}5`Pl%LKc^Jg_nOZ|rQMrjjx znTO*{a_ALw9$8;teMwAB^`SmRXE_Ej#lA(k(AnkC!dNYXcr8*proP1Vp2q8R46h^B z4@Yq0_&lf%!F>B;_EIJXjklC@G~%#+6~yb2^%)kQ^%=%b=j$W(8PaKlaL$;-5#Tg$ zL#z+5e%rjA1@m=GrRqQel8yBfcD{pneKkLq&Et#p59Me7;&>Cvw*_|H3FF%-8%yxa z2W7B22l9QF)tTv@)j61N%UOcfsSeG{WAd>&h-F9cS`y0+=g$-?JCc`!l^rgWM{R(W z!O9*k^i9$k(=i)Qf&@9za6J=yfLKNde@PD;Q1`y(fk=;dV7Ap)Qeba5%Z1W&n?TBwON*L z2w$h>d9^$TX?(A0DdSkQT=CqF6#P`jiM+g77*&X3XHG0XMyLxrC)5{3ebE?CX(*&+ z8rBn;%t8El5OqOg4(n$ldHGqKD51?!>9`kYj1$iHeX;IzkIC|3Et%yriof?{aUz8N zO8ErioQY-Oex)((1itODv_Z|{M>OM)6V4^&!$u8OZX`dVFn^eEUMLPdn-*n@;N@?c z&rxq8J!SGp_rjz@x`%fGu75ROgJ_zy`P)Xb&VEI{`lf%7Ht8WMd%B`GGC~k`1X1FdQ`5Fvyl<35*8) z9xxGj2B-t>1kMMR0ha<_1Fiuc0B!~z1MURw1r`Fo1|9{L1IvMQZLb0r0gb?mK(bj` z0Uv-q59D6M=W+oyz$-v|;7Onp@N=LXSPb+7UIK;zw*sSpyMVF4Z-A-5*MZr<8sK8! zm%vrPv%n3&8^CSAYrwt0>%bylCGa%xIFM{meSsCAwLr2hk?pA#bSjW+QT>7Spp$`Q zd$R^U0UZt`ThkDr6*8pX}_kk|J-9R58jX5E}FMtuigFvzwk*#Vf z=%qliJ$Vx!G}(;E#%BZ6gQmFv*|vrPb3yBY0if-H%Rzq(To0sq4%r0T0k?u43nW{b zGjI>+S-@=2y?_Tn#{tQ9*dAC48nml;RsyA<7Xd91zXOnLWE!9&_{)GUz(@)Q-yP@!ItREJ@%sToK+goO z2kium0G$M!3S0>!o8VwzGUzm*9+(d#+nhfz7xce?5ujDT<)9Y>8<0*8Tn~C9a4T>w za1YP`JP4cslp7nfnEZf5Bw0g z6gUUC2DkwjhIHM4n?X;ZaL|2#J3%J`3xS7#rN9zk1#l102rL9P08are*9GE>0njJX zI{@uLPX*Gw{dYho&_{rNz^{N&zz=|_z&C->NY@>>81!4fRlsRLDeBD~#m^CBrh6+k zi%)1ae`g%_n~HGp{*i1Vu8@rKWOe{%C1UqqwBD5XG~b9vDq6wWl$O~FXl5eX3KDqz zP`R$q4xL+OH%R2K=WH%a>4{I}vb8VFPro9cR`xdeX>4G&3tEFoJ&fi(bZ<739|zey zERG*Tm_MGEgZY`YOZ1aW%+KUw{uI7!=AXr%1LjX}mXD5a2aL}wHOx=zal|}X8)E!< z{JCfIHabJ%T#Z(Tiv9%t`p4qXn%5?NQ+!(OD)QOdA{L+No%v_-I%WQ3{+uy?8h>42 z{&Zfa%+D-LqM!6G`kTtt@oj?f=?+nhV`#>oBj}CpF|~r9?$0TeXxB*L>&|RL%wovw z3(QK!?opU!j``X768$tEV1D`){i*!9X8bgMZpiM{S-H$cz}haeJ+XCF%$6bY>AsHI zG{!6B?8^U=pX6s2OlE(H=W(ObpJ^-OU1&;7SKGL=;q<18CE)rPugjs$sS3o z$0W7tYaM@%-blfldcO2e2wdCHw1ey!s3ikQ$p5{j{yqxsf zj9qd-41k-A~`l?xp@=BYor?M{WAkk~6bx4ko$x@*QGo5<0nG!-W?n zjyzIwwGAYFb;vf$;7_;Dcj&z`;Or|uw>^7w@qo5<^GnwB+clyiQU^FxUya&y`fyxK z)s7ugPuPT*|1z`7!Smxk-uK(U6|csw8N`>-+vb%oyKY_i@x+fd4YyEyI%-B``SZ=y`pz*$?LO#nC$(~r z^x`e#CtcEWO5E7=ltC}rJANBsHrTUz=#K*;65f2F?1L`1N3L`pV%aq#eS|}LH_~>1 zd;fr4W)Yb^A74JdX5g1+rX;N!qS|t8!LQn#k=N(Gy+yVs^6}y0JNm5|HTpXo2>27 zW5vvpiLzd6lm!Z_w=Gk2UmeoUk<}gT|Mo`X%+Bdnoi`4?@BTukabbtfZn+sc{w11; zOTWxs^T?z~-+ehZt$vT;__dGh_E&!UO{T3je3bLtE;SF+j;szIcdl&hfC)Rk{d&Ny zZ5uxL#Ge!yFtYs4gZia?Upkg%9i3rzIJjh*YeSf2haVkdHvj5e|KN<~{UO~pzwq_J zmqSt(NYWomH%@fOF>HO6<8FMq-_Njg(d%6_XJ#w+F1!BnJC?&jM>id5;Tgcbj)^6A-VOH+I_AvmSxpj!jFm?S0>4;?0Sjiu=8BrOtVA-MWi&RU>-t zcI`D>=Cf?o_V#OHF2ih{%ZjzRfDpV-*%r} zdFf6Iz=RQt<>-&JVU5+-qW+Sbialb=qNxz_i$7LH=x6S%^{xkC> zuEBd!41--=7Ek&>`ctoRE@0k?oAHIlSxYOVH`kvjJvL#Pbix-g<(Cfq7VWmE(6n1< zxT$a1=x#f?W4*pD3eR~rw@h{3^^@BTebT1Cwan+mif%b)Gv^%7-n9Q_&KT1*wfxY5 zE$we#nwpxip!V(WD^-u*&4`~n&a>dSF=p`f=<9yxqMr@x(|P`+Z83)L`$x{4+cja| zt-2Z3zkiqFYxMBiY`*Q~{caC~ZF}{;7CgCP-7npDZ0V*+HiH5apDs8w)U0gOp1Z%? zxH{(DSF^5J)o%E4?96tXI)C)_=bt}pzs@IX^^p;Er{5SnW39%=_Tgu%Wp>`#=f4R$ zUwplfy7Q!OK7M7!&0ppgoc#X1DdUHl`j7oS$Qt=_(&`7}twN{W2->@Qi05bTWxRJr zlRnRR@1wcJqsmJ!%&ckHwtJ?kY}aQKOHM&?8@Q!@wR9hk?)Tay={>VUnThr`#fq1I+mUTI@Z)h$eBY?+ z*I7O|yls2acU68*oew-&IyXA_ox-iP{#i%v51YR}UjM3X?{3$2fAQXsPwgVMuh`-H zLy+gXH$M928_Cm)KVQf-$=U3U+$C>sh`6__>V(TKe;@DB$Fs_3ru|^C?d@?5_f3y( zxiNmTvaj^YM_Efk4peqLXKMel?rmk&c;om_Z;tt`Yn!1Tj6QVZ$`0$XcjK48cxV6F z-T_IMxctuV-ZFf5`u@P7i}OhQ+OBgGfBWU)3;uI9-yUkWASwKT$B=u4Kd)?O+bLyD zc-A)C{;>g_B!1RQUpU>{^?mQ3%C5e$*X_%o!0^XkrvX4Cmy1`p@(o7X$*7oj{GEYa9$0He{Cw_%_vgOX_t4fwQ?{HQ znkn^qDP-fJ!cIrFjd2ez+vV}j!2?fs&T;P@KE(Y@C-vUdPj!mQsb4O6!!GD|httCv zs(o%Ai0^ej4{}Rl=ZyX8qT^eOVW`uHSb@_8Z#T^>*peD|S|=!Y!%`%d!^Si~Z)x z$>W2+NwM&LxzOpZ#p_9R=_9&jTwC$FVUd2i;;r;!Zu?d#js-cFuFTo(biF;Dq{P7D zx0YUh(Sv*;N_VmX~bedipFQ&N~ZR{6x%~+E%{f5iR#4z7?*LJ9}^^ErGx_8aP zumN99>OX(T)dIujRk^B8UtDut6?QIdp;@idn-P4OCOCzrnE#kraT2q3oW#5%C$X^S zOe}hGCT;q0CfLQ;)Y6MHwNi7YSgvAbJ)SdbI}Iz9QaE!P183fD5og|h6=!a{iLtOY}@ryZk@-3Ad z;ck8DjXc6}^hzF(-o|5mVSa{CE>{Xd7(;V;1152Cq-M-?qkLK(^<-+rQLpi!0TPFZ zjB5I&?Yy6J{Sz3}qV`fgsrC#%riI_?q zz_j|)ODs?-#93d&JnI7((uV2mK$~i8S0uD9V=fn$l|r{HTwFp1e`AyNLMFSR;gg6G zvGgr}Ypu7L&ewE*G|tt>oOVIG{>8>g1sZetZ%?ge`}m_nT;Hu*qv>&DwN3UDUxcey z4!Qc4#zB|<&iU^6ltWR>ql#UdHSc2kf^mboBRt{wqhH_CXnx7N7q75H_)jrCyMCy- z7IjYJ@D;w2&Ydt>rQWXj*TwSENf)qtTR@4chx;x~uaL@yYx9tP^Vhl#&U-X-B0hF5 z_!)HUy*s@&e4@EDA+o2Y2J#hYfA8M;GtJtW%gu7X#kWvmkL3<{eXr){_v6p(Jc^y! za&J%1GXFxeX~DaF&y{pVej``RoxM*pFMV@Iqp2g(*N$oXb)jZa_?Xi-In*b>sn1@I z0~)VMGd*?p6iEMJ)E8^N)SMVI$7y=|f&N_0ZIk{#9MqgTHDuAi^L2jQ=G5Z7L5DQA zN3ZzV_9k|Li=Fj}`HI7u59jXN^8QNf5-0OJ_I6s4CiK@EKd#8bcXYYyJJs!qHM{Hc zPldkH)1NEXch(dZYc4%|{a&}W63}DKpN>1CDVpmXV72q9A6N6hQU2(NCNROF-HBi1 z{#--Nv?e1r7dLkEZZ$26Vd)UMrs(tuvoWy^}=n({Z-J#krc*AGuPQln)jG-sj$ z;mC&+VQc(2=K8ky7m)b<`|9|5KXThmW!UYas^|IRuOq#u85 zA9qTVwLLLBJ;}|hclYC>vpfc=IP+iNq^rFv+0Z`EA`63zAr+)*oEW$yPVb3zCPrB z%0@THZ&Ky*)>+NV_wrW#Qit$WYvx4vI;Y`Qb^W34<2ES&TCdzU&uNm^-G8(o3*RIu zw+fwNU9NelUu54Yv!QR}Z{E3K<(lIi_wRpw7TV*s-V@zkF4ye-`S60PageWYR*x5s zmuuXMsJ0yC5KNl7>wtfE#n#aAiI!hOJ zMt&VWh>yRZ>DbL?h{K+a{#-?H(F^M@XmY&Y*_q;t9SU>X&MCfpL37yB_R#eolxPoM ze)yTqMU8vK7v0``4gL9f<9oB~13xy56RsBm)*G+#Bb$gdxr`REs28I}+LyfpI*e= z1B@1t%V)HR4PzKBVs=*{y@0y!F0lFtSo0~PMXXrJXc5E4Fj~aI9*h=oGukJ$6A_n| zFj_?2I!22aox*4l3pI=uadSsTi^$zB=kph_;s~Qf^m&ufB1*FuEuwA&qeU$0&u9_X zbBq?TW-rDA93tjsFj_>}AV!N=RC|_>FJkN_MvKTzX0(W_x-(it`PXOo^dc6$!Dta9 zVi+xAjRT`ajQ#F3pI*fJt&A2?m&RxjxuJ{}G566aKD~%s5u+QCtI^m&AM|y~9zahZ zS+eK@mh_C6K6%*-sN2P!v1bE&gU$ugZ4G@VlGZxVXCiHZOTnjE%_<<-LFucJ^elHh zXfi8q0Lp-yfn*om3WT+d+Xlj7p}IagXnViKiEO=MHa83`<4MskiW1GBLtM4<4bOd&i+&dtbigG=XTU{V*4 zuo>yvY<*l3c3Y*G;!*!n%Q+&KD~3SpW8t4c;l%6aQWi@{`cKA-`PvtxnAU z!^5ly&-_1T>!!lSwVDY_{tq+#hsn%Nw<_;%(n$y6S-*=A35_n_9ed+rJ5jw;8h<{y z2zZ)-!dLwMs^Ec1YgE{@GKkCMnuEQEp8bPJ3*r_ zw&d~oEpNe#;`3VtUXv_Qe7w!zZJq}CutAAF4*eT#i!YO>owBkSn{RW}_E#o=*flXX+E2Mg;QZ>}|oD%$HNxoEOF79c;m4@ruB!!igKg7wnWxb>8rWgkM)B zoL}m?+)?moJQH{x#H#?WSv&9~9(_CDJ_aZuo`QH>k%ZfWN)8d~wx?9W`N4QFB%bYS z!pCX$LtjrK^0a_NpXe6AU4x@T46kS&-aUZ33ioH>W`hH`j&RMxOPi%9eg}^Lg2w#u zxjtSFvAl54zYd?_)iNC432l+SuvK_-`G-vm;3mS+A(q!XocK8t0tgzzTj#$$=C8wD zr~GyJg~=_$o0q?3MgaE#937&3t@Se|wPkqo^px&OtMI+8^pl^~GJWg%8Fhaho|5&~ z;ZL$#hPRgQ=z_lvzrOIV!-xJ&_~KUKt?Rexoxjfi&YLa6kG9g^gdHuzTc4jrw+?^(aLe?q<&P|F8Qwbmu~RL>Tc_WCp=EgU z^S{snYxdyi5Zia_@xjNkWq9lSZERbHH_t!C4{P$^>@YrxM+p3W<0SkzD)JT`Ksc_i z&pZC}U7P=&@7nB=L?&xfQ$w@02?o73G zvE_ZLmTer)X($%$85^9DsBPRg_MF*xZI%JM>+w6G!}8D1h!?Wt+|027H%XkC#_zk=6f~Dg8=aA8Nagnn9D@z~kk=(4_r`c=usbBQ(RVO* z@6Slp;;X^PQ6T8UG^~o5+$ZJ}(%Hv&5<{~Su+bTI`GdOnIra-A#h(T{kR-u|%uIZo zK&6*Q*(qX%KVfauGw+Ir2XyXkt zXKFJ=NiOnv=;QF=1s!WDFA|4onkfr<9u+!%OsLp=xXWha^{Erm=VE_B&XaW2tgU!T zLa83DHcQ6}6w`2R+#Ky6_?;vn{D(YR2gEn4L94L9^u$PAN;1>qR=9#Q-b@Voi;5uOr{4f1oiPpGzZngSCOadL3acEU6~BM$w752wz=C7O+o zOUXjV650vJU1nNK6gmvo#bOe6hv!=+7bj`Hk@CFO+T?SrY}EttK8Yz#k&bO!AI|%E zVX=<6#ZH)z=5y2VroAmekE0U!GmozaaM_Y!I4yi{<`(k)VJX-piNg7kU*&mYaPvc~ zN!+Vw6VOmfBHxSgr3mhGk}WVeg5%zzoX3WaCjU`h;s|OY+|Qw?#56)sU4;)eSNvC22Epj!h|+Fe;2S=ye7? z)$tiSEBwHL4xpu-liBFSbTyVzkv9@wsKB12{YV<3BQjE`(SyZ}&!3Mn~freRD(DN>)|Ka_ARs)}OI~+3R zR=}5-p5iOzjn9-D>r4Db0v?(9>tqsp?jeyqm;JX)6Qq0oEbgz9QaarB|D!{UNA^Cl zA^h3Vy1u!bwKYAv7Y{K!Ovm2)BYtz)oBPEygbl@k&B^~VEoLS=(Ufm#CdPU_+^i;^ z7*9kWlH&+__fh2idr~X!k!Y>A$zUKWzq5R_>oR z1KGbblmwJ5VamvH!(cUw} zGtzUKr`B_?XOZW5&nuoao=-g6dUf_1?6t*fhu0TgUwM^#UH7W>`oXK->!H^ZFH?oJ zqJzR-(M!=^;i~Xb_$xvc;}nw>GZb1yh9XC?O!21TBgLnRuNAe59~AY9hl(c(6K^YT zsdrcJp5FbuUA#TKRo=ngqr4}2Pw|fPp6zY$Uh2KV`z`NIK7Ky$`JDCn&d2C;*QdR2 zCtsQGWZyjHE@h3wi-E!O(xfQs*>9)n~sM{&Gt8Py2 z-tH6J6Wlv^hIx+ljPi{3oa!0t`Gx0ip4ghu%hJon>wWJ+Z@G`kx5W36?=#;H%AU#q z<%i0ls>`Yys$cyi{)7GH{_+0#{;U1p@c-2Rs{fDv)@nO-PqmABxH?*$sLoYyR_|7S zuKrSeQEjHN*9_EnX+ktpHA^(>HAR|hni|bbl3R{vZ~#u;PTob{T`rTW^( z@;UNc`EvPc`8xSt`62m9`8oL|`7d&Fw1UBIO1Ch#D7RR*bhm|Wue)t`JLC4PTZ5aq zdnfna?k?^@?i1Z-xT`#3JQjI;=27RF;q{8oYd&xKc=;|@ZdU%HTHu%Gx5RIm-wNn_ zt>2q|C_eztJprrS-f%nURs=1Tx}AoWCMePs-z$3h1}KwND)l(^Y;}%$iF&#g_R>wUocthbHNNS}0{188wS`1JD~AT-INI6QGt;|y{Q`RbDRJT?C^1JL;Qlw8vk1VJN^y+9o3`Mv8Yv+dZBu; z`c?H>^?T}K^;PvZ>ISuyroCo?<}D2ui?sx(Q(yTI`BRTOklEDB(<{kquGb>3PrWXC zReAm7)k`rRJ!psG6GgS+JH;;w3-7k*Gcxp;LEcJljdzH5ly{8xbnkrcP2Rh__j@1n zuJr!NyR%OqYO%=YEuZZ^hkQzWN_}qnSosd~o#i{v_a)!OzMFhMLOl+l4PN)X>)YV_ zyRV6|htfsqt@Kj{DrYFul{w0V%6#Qk~?@IYvc?sHXo!riCpqmP(YRxs9@bMJ-zd4YTZEgB zXHSf2eHAf^Sw4Gwy7;>Js(g2&ugaB?%6F9SD|aeCQ=U;)DQ_u%R{pMRr%F)0ttwG{ z>VMhaLET^NgSLE3eO7%zU7@a0f2+Qwu2-9CY%~KjQJRJ5qugdZqefX8d8+(%`E_}g z`(Teb9y@7<8V#b z4e^`qH`8ya-&=k={SNt+`+e*803)Nl{~&)q|1tit(E02B@B8obFZ1uCsiSiVVfBD~ zdAWR>o2|RAdy4xxcT1069vYmUQ@iG*r0e{k>s6$8dP}Kdpr6B`Hc0=R~_-+qCTa52puUjqcD;k*Hme^ zB6dCo%ZJNT$y(pQaq6);2rq~@@jdlT(?-!2%m0Bneu?LOlglR)>M_1-(J6d{xADm zsQqvS>Z6ILw6G{7TV*e0kn&aK1?7vXH*kK-Ro|!-7GtG09Qwsh){Z=$JZ3vyRI7 zf7&^p7uCu*j5{!q!9*_PA~k_rhH^2`Ip=-PIq%P-3keqk8A%*yE*RH^goKgMS`2^mFY6URuwY(KLQBu9@RKjZ`I5oN2Z zAcA+3q14*yy0P!jKzDwB+yFmikQTe>%Ys=nOJ*6bRRv3pt%)_Y&a9a=w-#22gh_i2#wJ=O;Cd} zngUy7K^A#hq-7ecK68V%(0pCmqkRzDh>qzL%r>KQy1-P1?T8(-<95O}Y-XqIjGeW8 zJCBJe+kst0Pd4n9ePDMnKYe>(k3e@*`^=u<`&if^C+tMPc5%$I;V>uVWSp$yJ5^Of zioj2K=m{+Xq;1{Ww;EQ{YFTY~sAC;kJ?jYhdu$D?p*4aor`9=ixqvd4R-P7ch7wLu z!8!JDk{a~irw!V~dD=Kp2WL8@13u&A}4&Y zEApa%{wRsEsGz0yL{-#89X@S{Ci1WiPU(m)61<0Q>x*MC5JNFSCXB^IOp)nlX!V)6 z5Oc8ilq*d04$tvjkWGnKFk3bBNRzjDhad7Iehk%5p!g}&zJSt8 zzAiRIRBVbZumS}uq@jBbnirsV1zOjja}yeOpzjg19YWU$G(Cr&m(X(^T1KJc7Br;L zFAeQ-(5(Q?D$uJ2t(wrOBM;?~JeEUwA}8`xp34h)DVHFQ4HZ?JV2*7?l~QT7qjG9j z6;w%8)E@k}ubQf@I%u{dB*PHQKT)UZTwS2!mTFyZ=&0V*TY6hlv|U>7=$ziw1zpk= z>;yHvubaB9JNi%`>0>=aj!g9Fis>%(5+t$#7T@%?K;sn2o%VLToVN=qFL@O&RQ>1s z3|N)bS%bCM0qY{Q`fLCK8?z}p!wxfN3l`#G9^o-;G6^&|<0+ouS?=>Z(zVP3C5%`%l|awg|; zAww#xBG|6tDglaO*s?Mzt9+GLMO9XTsv;K}s)fC)t9q)h25JP(n1YgLYOWTb#juWm zIN~~iZHMU;*g30xut!msb)c)dt{b|g4|G@ebRT&>(qlaZUC;C!bRF`-Uc`%eaWCN+ z$oQ0(@v_*C@?Oy^djWQ&y4S!qao}~mp4ayV-pCt+#?HJMSZv{il3`3>EEz{17)h2) zB{SGHeC&TkFl>;lChN%tIBjipudkcrHFAr*N&daJnyb$eS+UgG>i>WfbBeBAm{BWc zG4ySK#JrP}Q}jg)9g#yn1n7i5dSF3fNPQm(*+RNck?1j`xR2y+A+4uK=$J#1%RacL z>9m|X*Ak`?%M6_qm~~Kb7n|3KIR+cg@vd=q%S~Y8HeBj5SGg%{5n1dJJ~%UvEGi<6 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/bin/ghc-pkg-7.10.shim b/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/bin/ghc-pkg-7.10.shim new file mode 100644 index 00000000000..5c1d58caf88 --- /dev/null +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/bin/ghc-pkg-7.10.shim @@ -0,0 +1,2 @@ +path = "FINDSH\sh.exe" +args = "bin\ghc-pkg-7.10" diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/setup.test.hs b/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/setup.test.hs index 150f2bc8739..bf9b16fa195 100644 --- a/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/setup.test.hs +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/setup.test.hs @@ -1,10 +1,22 @@ import Test.Cabal.Prelude +import System.Directory -main = setupAndCabalTest $ expectBrokenIfWindows 10179 $ do - withSymlink "bin/ghc-7.10" "ghc" $ do +main = setupAndCabalTest $ do + when isWindows $ do + sh <- fmap takeDirectory <$> liftIO (findExecutable "sh") + case sh of + Nothing -> skip "no sh" + Just sh' -> do + let sh'' = concatMap (\c -> case c of + '\\' -> "\\\\\\\\" + x -> [x]) sh' + void $ shell "sed" [ "-i", "-e", "s/FINDSH/" <> sh'' <> "/g", "bin/ghc-7.10.shim", "bin/ghc-pkg-7.10.shim"] + (if isWindows + then withSymlink "bin/ghc-7.10.exe" "ghc.exe" . withSymlink "bin/ghc-7.10.shim" "ghc.shim" . withSymlink "bin/ghc-7.10" "ghc" + else withSymlink "bin/ghc-7.10" "ghc") $ do env <- getTestEnv let cwd = testCurrentDir env ghc_path <- programPathM ghcProgram r <- withEnv [("WITH_GHC", Just ghc_path)] - . fails $ setup' "configure" ["-w", cwd "ghc"] + . fails $ setup' "configure" ["-w", cwd if isWindows then "ghc.exe" else "ghc"] assertOutputContains "is version 9999999" r diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/bin/ghc-7.10.exe b/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/bin/ghc-7.10.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 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 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/bin/ghc-7.10.shim b/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/bin/ghc-7.10.shim new file mode 100644 index 00000000000..97596f1c171 --- /dev/null +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/bin/ghc-7.10.shim @@ -0,0 +1,2 @@ +path = "FINDSH\sh.exe" +args = "ghc" diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/bin/ghc-pkg-ghc-7.10.exe b/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/bin/ghc-pkg-ghc-7.10.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 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 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/bin/ghc-pkg-ghc-7.10.shim b/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/bin/ghc-pkg-ghc-7.10.shim new file mode 100644 index 00000000000..7e9ba24d98b --- /dev/null +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/bin/ghc-pkg-ghc-7.10.shim @@ -0,0 +1,2 @@ +path = "FINDSH\sh.exe" +args = "bin\ghc-pkg-ghc-7.10" diff --git a/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/setup.test.hs b/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/setup.test.hs index 150f2bc8739..2f406ce6226 100644 --- a/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/setup.test.hs +++ b/cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/setup.test.hs @@ -1,10 +1,22 @@ import Test.Cabal.Prelude +import System.Directory -main = setupAndCabalTest $ expectBrokenIfWindows 10179 $ do - withSymlink "bin/ghc-7.10" "ghc" $ do +main = setupAndCabalTest $ do + when isWindows $ do + sh <- fmap takeDirectory <$> liftIO (findExecutable "sh") + case sh of + Nothing -> skip "no sh" + Just sh' -> do + let sh'' = concatMap (\c -> case c of + '\\' -> "\\\\\\\\" + x -> [x]) sh' + void $ shell "sed" [ "-i", "-e", "s/FINDSH/" <> sh'' <> "/g", "bin/ghc-7.10.shim", "bin/ghc-pkg-ghc-7.10.shim"] + (if isWindows + then withSymlink "bin/ghc-7.10.exe" "ghc.exe" . withSymlink "bin/ghc-7.10.shim" "ghc.shim" . withSymlink "bin/ghc-7.10" "ghc" + else withSymlink "bin/ghc-7.10" "ghc") $ do env <- getTestEnv let cwd = testCurrentDir env ghc_path <- programPathM ghcProgram r <- withEnv [("WITH_GHC", Just ghc_path)] - . fails $ setup' "configure" ["-w", cwd "ghc"] + . fails $ setup' "configure" ["-w", cwd if isWindows then "ghc.exe" else "ghc"] assertOutputContains "is version 9999999" r From 8fa4a27ca3fe0cd2f58280812807c0739bcaf49b Mon Sep 17 00:00:00 2001 From: Javier Sagredo Date: Wed, 31 Jul 2024 22:16:56 +0200 Subject: [PATCH 12/87] Enable autoreconf tests on Windows (cherry picked from commit b2e4856eec9092c4cd55db68a9870633b61107c6) --- .../PackageTests/Configure/cabal.test.hs | 25 +++++++++++++++--- .../PackageTests/Configure/setup.test.hs | 26 +++++++++++++++---- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/cabal-testsuite/PackageTests/Configure/cabal.test.hs b/cabal-testsuite/PackageTests/Configure/cabal.test.hs index afcc00cbf7a..cd419e8cee2 100644 --- a/cabal-testsuite/PackageTests/Configure/cabal.test.hs +++ b/cabal-testsuite/PackageTests/Configure/cabal.test.hs @@ -2,9 +2,26 @@ import Test.Cabal.Prelude import Control.Monad.IO.Class import Data.Maybe import System.Directory +import System.Environment +import Data.List (isSuffixOf) + -- Test for 'build-type: Configure' example from the setup manual. main = cabalTest $ do - hasAutoreconf <- liftIO $ fmap isJust $ findExecutable "autoreconf" - skipUnless "no autoreconf" hasAutoreconf - _ <- shell "autoreconf" ["-i"] - cabal "v2-build" [] + if isWindows + then do + (mCI, mSh) <- liftIO $ (,) <$> lookupEnv "CI" <*> lookupEnv "SHELL" + case (mCI, mSh) of + (Nothing, Nothing) -> skip "Missing $SHELL" + (Nothing, Just sh) -> do + env <- getTestEnv + void $ shell sh [ "-l", "-c", "cd $(cygpath -m '" <> testTmpDir env <> "') && autoreconf -i"] + cabal "v2-build" [] + (Just{}, _) -> do + env <- getTestEnv + void $ shell "C:\\msys64\\usr\\bin\\bash.exe" [ "-l", "-c", "cd $(cygpath -m '" <> testTmpDir env <> "') && autoreconf -i"] + cabal "v2-build" [] + else do + hasAutoreconf <- liftIO $ fmap isJust $ findExecutable "autoreconf" + skipUnless "no autoreconf" hasAutoreconf + _ <- shell "autoreconf" ["-i"] + cabal "v2-build" [] diff --git a/cabal-testsuite/PackageTests/Configure/setup.test.hs b/cabal-testsuite/PackageTests/Configure/setup.test.hs index 559b88c6ff2..5eaea387fe6 100644 --- a/cabal-testsuite/PackageTests/Configure/setup.test.hs +++ b/cabal-testsuite/PackageTests/Configure/setup.test.hs @@ -2,9 +2,25 @@ import Test.Cabal.Prelude import Control.Monad.IO.Class import Data.Maybe import System.Directory +import System.Environment + -- Test for 'build-type: Configure' example from the setup manual. -main = setupTest $ do - hasAutoreconf <- liftIO $ fmap isJust $ findExecutable "autoreconf" - skipUnless "no autoreconf" hasAutoreconf - _ <- shell "autoreconf" ["-i"] - setup_build [] +main = setupTest $ + if isWindows + then do + (mCI, mSh) <- liftIO $ (,) <$> lookupEnv "CI" <*> lookupEnv "SHELL" + case (mCI, mSh) of + (Nothing, Nothing) -> skip "Missing $SHELL" + (Nothing, Just sh) -> do + env <- getTestEnv + void $ shell sh [ "-l", "-c", "cd $(cygpath -m '" <> testTmpDir env <> "') && autoreconf -i"] + setup_build [] + (Just{}, _) -> do + env <- getTestEnv + void $ shell "C:\\msys64\\usr\\bin\\bash.exe" [ "-l", "-c", "cd $(cygpath -m '" <> testTmpDir env <> "') && autoreconf -i"] + setup_build [] + else do + hasAutoreconf <- liftIO $ fmap isJust $ findExecutable "autoreconf" + skipUnless "no autoreconf" hasAutoreconf + _ <- shell "autoreconf" ["-i"] + setup_build [] From 13e15d75ef219210f96204b8093c4ee2e0cc462e Mon Sep 17 00:00:00 2001 From: Javier Sagredo Date: Wed, 31 Jul 2024 23:09:43 +0200 Subject: [PATCH 13/87] Fix GHCJS BuildRunner test on Windows (cherry picked from commit de9d2295046b4555bb5aadf36db789d90c9d39ee) --- .../GHCJS/BuildRunner/cabal.test.hs | 6 ++- .../GHCJS/BuildRunner/scripts/cc.bat | 45 ++++++++++++++++++ .../GHCJS/BuildRunner/scripts/fake-ghcjs.exe | Bin 0 -> 115712 bytes .../GHCJS/BuildRunner/scripts/fake-ghcjs.shim | 2 + .../GHCJS/BuildRunner/scripts/ghcjs-pkg.exe | Bin 0 -> 115712 bytes .../GHCJS/BuildRunner/scripts/ghcjs-pkg.shim | 2 + 6 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/cc.bat create mode 100644 cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/fake-ghcjs.exe create mode 100644 cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/fake-ghcjs.shim create mode 100644 cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/ghcjs-pkg.exe create mode 100644 cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/ghcjs-pkg.shim diff --git a/cabal-testsuite/PackageTests/GHCJS/BuildRunner/cabal.test.hs b/cabal-testsuite/PackageTests/GHCJS/BuildRunner/cabal.test.hs index 245901c8bef..da8afae103e 100644 --- a/cabal-testsuite/PackageTests/GHCJS/BuildRunner/cabal.test.hs +++ b/cabal-testsuite/PackageTests/GHCJS/BuildRunner/cabal.test.hs @@ -1,7 +1,7 @@ import Test.Cabal.Prelude main = do - cabalTest . expectBrokenIfWindows 10179 . recordMode DoNotRecord $ do + cabalTest . recordMode DoNotRecord $ do cwd <- fmap testCurrentDir getTestEnv testInvokedWithBuildRunner cwd "test" [] testInvokedWithBuildRunner cwd "run" ["ghcjs-exe"] @@ -14,6 +14,8 @@ testInvokedWithBuildRunner cwd cabalCmd extraArgs = do [ "--ghcjs" , "--with-compiler", cwd fakeGhcjsPath ] + -- On windows point cabal to the right cc + ++ if isWindows then ["--with-gcc", "scripts/cc.bat"] else [] assertOutputContains magicString output where - fakeGhcjsPath = "scripts/fake-ghcjs.sh" + fakeGhcjsPath = if isWindows then "scripts/fake-ghcjs.exe" else "scripts/fake-ghcjs.sh" diff --git a/cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/cc.bat b/cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/cc.bat new file mode 100644 index 00000000000..b2300d2fd6b --- /dev/null +++ b/cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/cc.bat @@ -0,0 +1,45 @@ +@ECHO off + +FOR /f "delims=" %%A in ('call ghc.exe --print-libdir') do set "libdir=%%A" +FOR /f "delims=" %%A in ('call ghc.exe --numeric-version') do set "numVersion=%%A" +setlocal EnableDelayedExpansion + +call :compareVersions 9.4.1 %numVersion% +if %errorlevel% == 1 (set "cc=gcc.exe") else (set "cc=clang.exe") +CALL !libdir:lib=mingw\bin\!%cc% %* +EXIT /B %ERRORLEVEL% + +REM taken from https://stackoverflow.com/questions/15807762/compare-version-numbers-in-batch-file + +:compareVersions version1 version2 +:: +:: Compares two version numbers and returns the result in the ERRORLEVEL +:: +:: Returns 1 if version1 > version2 +:: 0 if version1 = version2 +:: -1 if version1 < version2 +:: +:: The nodes must be delimited by . or , or - +:: +:: Nodes are normally strictly numeric, without a 0 prefix. A letter suffix +:: is treated as a separate node +:: +setlocal enableDelayedExpansion +set "v1=%~1" +set "v2=%~2" +:loop +call :parseNode "%v1%" n1 v1 +call :parseNode "%v2%" n2 v2 +if %n1% gtr %n2% exit /b 1 +if %n1% lss %n2% exit /b -1 +if not defined v1 if not defined v2 exit /b 0 +if not defined v1 exit /b -1 +if not defined v2 exit /b 1 +goto :loop + + +:parseNode version nodeVar remainderVar +for /f "tokens=1* delims=." %%A in ("%~1") do ( + set "%~2=%%A" + set "%~3=%%B" +) diff --git a/cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/fake-ghcjs.exe b/cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/fake-ghcjs.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 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 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/fake-ghcjs.shim b/cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/fake-ghcjs.shim new file mode 100644 index 00000000000..725429e82d7 --- /dev/null +++ b/cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/fake-ghcjs.shim @@ -0,0 +1,2 @@ +path = "sh.exe" +args = "scripts/fake-ghcjs.sh" diff --git a/cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/ghcjs-pkg.exe b/cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/ghcjs-pkg.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 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 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/ghcjs-pkg.shim b/cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/ghcjs-pkg.shim new file mode 100644 index 00000000000..d330fc23e3e --- /dev/null +++ b/cabal-testsuite/PackageTests/GHCJS/BuildRunner/scripts/ghcjs-pkg.shim @@ -0,0 +1,2 @@ +path = "sh.exe" +args = "scripts/ghcjs-pkg" From 44486b99db60a009e45f71d4df55cdaea7840ba8 Mon Sep 17 00:00:00 2001 From: Javier Sagredo Date: Tue, 27 Aug 2024 23:34:35 +0200 Subject: [PATCH 14/87] Install autotools on Windows too (cherry picked from commit 8cf9533ab80705a349d5659ef180ab045945105b) --- .github/workflows/validate.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 432277a9d5c..2d8be7f02a3 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -133,7 +133,7 @@ jobs: key: ${{ runner.os }}-${{ matrix.ghc }}-${{ github.sha }} restore-keys: ${{ runner.os }}-${{ matrix.ghc }}- - - name: Work around git problem https://bugs.launchpad.net/ubuntu/+source/git/+bug/1993586 (cabal PR #8546) + - name: "Work around git problem https://bugs.launchpad.net/ubuntu/+source/git/+bug/1993586 (cabal PR #8546)" run: git config --global protocol.file.allow always # The tool is not essential to the rest of the test suite. If @@ -146,10 +146,15 @@ jobs: run: cabal install --ignore-project hackage-repo-tool # Needed by cabal-testsuite/PackageTests/Configure/setup.test.hs - - name: Install Autotools + - name: "MAC: Install Autotools" if: runner.os == 'macOS' run: brew install automake + # Needed by cabal-testsuite/PackageTests/Configure/setup.test.hs + - name: "WIN: Install Autotools" + if: runner.os == 'Windows' + run: /usr/bin/pacman --noconfirm -S autotools + - name: Set validate inputs run: | FLAGS="${{ env.COMMON_FLAGS }}" From 7d2a6b5cb0959970e282b3c317ff24a2311d9224 Mon Sep 17 00:00:00 2001 From: Javier Sagredo Date: Wed, 28 Aug 2024 00:27:31 +0200 Subject: [PATCH 15/87] Reenable PkgConfigParse on Windows (cherry picked from commit e420708c74a297496e64a092a1e2e7407321bb0a) --- .../PackageTests/PkgConfigParse/pkg-config.exe | Bin 0 -> 115712 bytes .../PkgConfigParse/pkg-config.shim | 2 ++ .../PackageTests/PkgConfigParse/setup.test.hs | 12 +++++++++++- 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 cabal-testsuite/PackageTests/PkgConfigParse/pkg-config.exe create mode 100644 cabal-testsuite/PackageTests/PkgConfigParse/pkg-config.shim diff --git a/cabal-testsuite/PackageTests/PkgConfigParse/pkg-config.exe b/cabal-testsuite/PackageTests/PkgConfigParse/pkg-config.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 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 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/PkgConfigParse/pkg-config.shim b/cabal-testsuite/PackageTests/PkgConfigParse/pkg-config.shim new file mode 100644 index 00000000000..2c187de462e --- /dev/null +++ b/cabal-testsuite/PackageTests/PkgConfigParse/pkg-config.shim @@ -0,0 +1,2 @@ +path = "FINDSH\sh.exe" +args = "pkg-config" \ No newline at end of file diff --git a/cabal-testsuite/PackageTests/PkgConfigParse/setup.test.hs b/cabal-testsuite/PackageTests/PkgConfigParse/setup.test.hs index 2528e7459e5..edebd2d131c 100644 --- a/cabal-testsuite/PackageTests/PkgConfigParse/setup.test.hs +++ b/cabal-testsuite/PackageTests/PkgConfigParse/setup.test.hs @@ -1,7 +1,17 @@ +import System.Directory import Test.Cabal.Prelude -- Test that invalid unicode in pkg-config output doesn't trip up cabal very much -main = cabalTest $ expectBrokenIfWindows 10179 $ do +main = cabalTest $ do + when isWindows $ do + sh <- fmap takeDirectory <$> liftIO (findExecutable "sh") + case sh of + Nothing -> skip "no sh" + Just sh' -> do + let sh'' = concatMap (\c -> case c of + '\\' -> "\\\\\\\\" + x -> [x]) sh' + void $ shell "sed" [ "-i", "-e", "s/FINDSH/" <> sh'' <> "/g", "pkg-config.shim"] cdir <- testCurrentDir `fmap` getTestEnv res <- cabal' "v2-build" ["--extra-prog-path="++cdir, "-v2"] assertOutputContains "Some pkg-config packages have names containing invalid unicode: or" res From 3cdc0a22a22d753025b80175e81ee556f2ee62c5 Mon Sep 17 00:00:00 2001 From: Rodrigo Mesquita Date: Tue, 1 Oct 2024 16:18:24 +0100 Subject: [PATCH 16/87] Prefer ErrorCall to ErrorCallWithLocation This future proofs the code for CLC#285, which will remove `ErrorCallWithLocation` to de-duplicate duplicate CallStacks. ErrorCall is already a pattern synonym with the same meaning as it will have in the future, so this change is backwards compatible too. (cherry picked from commit db683f26affc22ee6b41fd8209734533a015ebe2) --- Cabal-syntax/src/Distribution/Compat/Binary.hs | 2 +- Cabal-syntax/src/Distribution/Utils/Structured.hs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cabal-syntax/src/Distribution/Compat/Binary.hs b/Cabal-syntax/src/Distribution/Compat/Binary.hs index 8849fc13b10..4927ec1e69b 100644 --- a/Cabal-syntax/src/Distribution/Compat/Binary.hs +++ b/Cabal-syntax/src/Distribution/Compat/Binary.hs @@ -20,4 +20,4 @@ decodeOrFailIO :: Binary a => ByteString -> IO (Either String a) decodeOrFailIO bs = catch (evaluate (decode bs) >>= return . Right) handler where - handler (ErrorCallWithLocation str _) = return $ Left str + handler (ErrorCall str) = return $ Left str diff --git a/Cabal-syntax/src/Distribution/Utils/Structured.hs b/Cabal-syntax/src/Distribution/Utils/Structured.hs index 83ae28995a8..ec8463bd6d3 100644 --- a/Cabal-syntax/src/Distribution/Utils/Structured.hs +++ b/Cabal-syntax/src/Distribution/Utils/Structured.hs @@ -277,7 +277,7 @@ structuredDecodeOrFailIO :: (Binary.Binary a, Structured a) => LBS.ByteString -> structuredDecodeOrFailIO bs = catch (evaluate (structuredDecode bs) >>= return . Right) handler where - handler (ErrorCallWithLocation str _) = return $ Left str + handler (ErrorCall str) = return $ Left str -- | Lazily reconstruct a value previously written to a file. structuredDecodeFileOrFail :: (Binary.Binary a, Structured a) => FilePath -> IO (Either String a) From 851772e134e1606561b51117df634b0b7cc53a3c Mon Sep 17 00:00:00 2001 From: Matthew Pickering Date: Thu, 3 Oct 2024 16:02:44 +0100 Subject: [PATCH 17/87] Cabal: Take into account compilerBuildWay when computing final library ways In the profiling dynamic patch I made a mistake when computing the needed ways for a build. When building an executable, the Haskell modules need to be built * For the final link way * For the build way of the compiler if TH is enabled Before this patch, the modules were being built for all the configured library ways, which built modules in more configurations than the previous version of Cabal. Fixes #10418 (cherry picked from commit 27c266884265dc50804673eaa273d60e57eeeb91) --- Cabal/src/Distribution/Simple/GHC/Build.hs | 20 ++++++++++++++++--- .../PackageTests/BuildWays/p/CHANGELOG.md | 5 +++++ .../PackageTests/BuildWays/p/p.cabal | 18 +++++++++++++++++ .../PackageTests/BuildWays/p/src/MyLib.hs | 4 ++++ .../PackageTests/BuildWays/q/CHANGELOG.md | 5 +++++ .../PackageTests/BuildWays/q/app/Main.hs | 7 +++++++ .../PackageTests/BuildWays/q/q.cabal | 19 ++++++++++++++++++ .../PackageTests/BuildWays/setup.test.hs | 10 ++++++++++ changelog.d/i10418 | 13 ++++++++++++ 9 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 cabal-testsuite/PackageTests/BuildWays/p/CHANGELOG.md create mode 100644 cabal-testsuite/PackageTests/BuildWays/p/p.cabal create mode 100644 cabal-testsuite/PackageTests/BuildWays/p/src/MyLib.hs create mode 100644 cabal-testsuite/PackageTests/BuildWays/q/CHANGELOG.md create mode 100644 cabal-testsuite/PackageTests/BuildWays/q/app/Main.hs create mode 100644 cabal-testsuite/PackageTests/BuildWays/q/q.cabal create mode 100644 cabal-testsuite/PackageTests/BuildWays/setup.test.hs create mode 100644 changelog.d/i10418 diff --git a/Cabal/src/Distribution/Simple/GHC/Build.hs b/Cabal/src/Distribution/Simple/GHC/Build.hs index 1972e9d903f..c12fb7b2427 100644 --- a/Cabal/src/Distribution/Simple/GHC/Build.hs +++ b/Cabal/src/Distribution/Simple/GHC/Build.hs @@ -12,7 +12,7 @@ import Distribution.Simple.Flag (Flag) import Distribution.Simple.GHC.Build.ExtraSources import Distribution.Simple.GHC.Build.Link import Distribution.Simple.GHC.Build.Modules -import Distribution.Simple.GHC.Build.Utils (isHaskell) +import Distribution.Simple.GHC.Build.Utils (compilerBuildWay, isHaskell) import Distribution.Simple.LocalBuildInfo import Distribution.Simple.Program.Builtin (ghcProgram) import Distribution.Simple.Program.Db (requireProgram) @@ -73,6 +73,7 @@ build numJobs pkg_descr pbci = do verbosity = buildVerbosity pbci isLib = buildIsLib pbci lbi = localBuildInfo pbci + bi = buildBI pbci clbi = buildCLBI pbci isIndef = componentIsIndefinite clbi mbWorkDir = mbWorkDirLBI lbi @@ -111,9 +112,22 @@ build numJobs pkg_descr pbci = do (ghcProg, _) <- liftIO $ requireProgram verbosity ghcProgram (withPrograms lbi) + -- Ways which are wanted from configuration flags let wantedWays@(wantedLibWays, _, wantedExeWay) = buildWays lbi - liftIO $ info verbosity ("Wanted build ways(" ++ show isLib ++ "): " ++ show (if isLib then wantedLibWays isIndef else [wantedExeWay])) + -- Ways which are needed due to the compiler configuration + let doingTH = usesTemplateHaskellOrQQ bi + defaultGhcWay = compilerBuildWay (buildCompiler pbci) + wantedLibBuildWays = + if isLib + then wantedLibWays isIndef + else [wantedExeWay] + finalLibBuildWays = + wantedLibBuildWays + ++ [defaultGhcWay | doingTH && defaultGhcWay `notElem` wantedLibBuildWays] + + liftIO $ info verbosity ("Wanted build ways(" ++ show isLib ++ "): " ++ show wantedLibBuildWays) + liftIO $ info verbosity ("Final lib build ways(" ++ show isLib ++ "): " ++ show finalLibBuildWays) -- We need a separate build and link phase, and C sources must be compiled -- after Haskell modules, because C sources may depend on stub headers -- generated from compiling Haskell modules (#842, #3294). @@ -127,7 +141,7 @@ build numJobs pkg_descr pbci = do | otherwise -> (Nothing, Just mainFile) Nothing -> (Nothing, Nothing) - buildOpts <- buildHaskellModules numJobs ghcProg hsMainFile inputModules buildTargetDir (wantedLibWays isIndef) pbci + buildOpts <- buildHaskellModules numJobs ghcProg hsMainFile inputModules buildTargetDir finalLibBuildWays pbci extraSources <- buildAllExtraSources nonHsMainFile ghcProg buildTargetDir wantedWays pbci linkOrLoadComponent ghcProg diff --git a/cabal-testsuite/PackageTests/BuildWays/p/CHANGELOG.md b/cabal-testsuite/PackageTests/BuildWays/p/CHANGELOG.md new file mode 100644 index 00000000000..9ede8b27d4f --- /dev/null +++ b/cabal-testsuite/PackageTests/BuildWays/p/CHANGELOG.md @@ -0,0 +1,5 @@ +# Revision history for p + +## 0.1.0.0 -- YYYY-mm-dd + +* First version. Released on an unsuspecting world. diff --git a/cabal-testsuite/PackageTests/BuildWays/p/p.cabal b/cabal-testsuite/PackageTests/BuildWays/p/p.cabal new file mode 100644 index 00000000000..687cf16bc0c --- /dev/null +++ b/cabal-testsuite/PackageTests/BuildWays/p/p.cabal @@ -0,0 +1,18 @@ +cabal-version: 3.12 +name: p +version: 0.1.0.0 +license: NONE +author: Matthew Pickering +maintainer: matthewtpickering@gmail.com +build-type: Simple +extra-doc-files: CHANGELOG.md + +common warnings + ghc-options: -Wall + +library + import: warnings + exposed-modules: MyLib + build-depends: base + hs-source-dirs: src + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/BuildWays/p/src/MyLib.hs b/cabal-testsuite/PackageTests/BuildWays/p/src/MyLib.hs new file mode 100644 index 00000000000..e657c4403f6 --- /dev/null +++ b/cabal-testsuite/PackageTests/BuildWays/p/src/MyLib.hs @@ -0,0 +1,4 @@ +module MyLib (someFunc) where + +someFunc :: IO () +someFunc = putStrLn "someFunc" diff --git a/cabal-testsuite/PackageTests/BuildWays/q/CHANGELOG.md b/cabal-testsuite/PackageTests/BuildWays/q/CHANGELOG.md new file mode 100644 index 00000000000..62632c53766 --- /dev/null +++ b/cabal-testsuite/PackageTests/BuildWays/q/CHANGELOG.md @@ -0,0 +1,5 @@ +# Revision history for q + +## 0.1.0.0 -- YYYY-mm-dd + +* First version. Released on an unsuspecting world. diff --git a/cabal-testsuite/PackageTests/BuildWays/q/app/Main.hs b/cabal-testsuite/PackageTests/BuildWays/q/app/Main.hs new file mode 100644 index 00000000000..642b418a547 --- /dev/null +++ b/cabal-testsuite/PackageTests/BuildWays/q/app/Main.hs @@ -0,0 +1,7 @@ +{-# LANGUAGE TemplateHaskell #-} +module Main where + +import MyLib + +main :: IO () +main = someFunc diff --git a/cabal-testsuite/PackageTests/BuildWays/q/q.cabal b/cabal-testsuite/PackageTests/BuildWays/q/q.cabal new file mode 100644 index 00000000000..a4f2a1d65d7 --- /dev/null +++ b/cabal-testsuite/PackageTests/BuildWays/q/q.cabal @@ -0,0 +1,19 @@ +cabal-version: 3.12 +name: q +version: 0.1.0.0 +license: NONE +author: Matthew Pickering +maintainer: matthewtpickering@gmail.com +build-type: Simple +extra-doc-files: CHANGELOG.md + +common warnings + ghc-options: -Wall + +executable q + import: warnings + main-is: Main.hs + build-depends: p, base + hs-source-dirs: app + ghc-options: -dynamic-too + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/BuildWays/setup.test.hs b/cabal-testsuite/PackageTests/BuildWays/setup.test.hs new file mode 100644 index 00000000000..dd4531599e4 --- /dev/null +++ b/cabal-testsuite/PackageTests/BuildWays/setup.test.hs @@ -0,0 +1,10 @@ +import Test.Cabal.Prelude + +opts = ["--enable-shared", "--enable-library-vanilla", "--enable-library-profiling"] + +-- See #10418 +main = setupTest $ recordMode DoNotRecord $ withPackageDb $ do + skipIfNoSharedLibraries + skipIfNoProfiledLibraries + withDirectory "p" $ setup_install opts + withDirectory "q" $ setup_install opts diff --git a/changelog.d/i10418 b/changelog.d/i10418 new file mode 100644 index 00000000000..9a96e47a1e9 --- /dev/null +++ b/changelog.d/i10418 @@ -0,0 +1,13 @@ +synopsis: Fix build ways for modules in executables +packages: Cabal +prs: #10419 +issues: #10418 +significance: significant + +description: { + +- Modules belonging to executables were being built in too many ways. For instance, if you +had configured to build profiled library files then your executable modules would also +be built profiled. Which was a regression in behaviour since `Cabal-3.12`. + +} From 7c25fcb305663f5b26950b50f4d336a0a9f5afbe Mon Sep 17 00:00:00 2001 From: Rodrigo Mesquita Date: Mon, 7 Oct 2024 14:28:19 +0100 Subject: [PATCH 18/87] Fix build ways for foreign libs Patches the component build ways for foreign library components. --- Cabal/src/Distribution/Simple/GHC/Build.hs | 29 ++++++++++--------- .../PackageTests/ProfShared/setup.test.hs | 4 +-- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/Cabal/src/Distribution/Simple/GHC/Build.hs b/Cabal/src/Distribution/Simple/GHC/Build.hs index c12fb7b2427..0993e916886 100644 --- a/Cabal/src/Distribution/Simple/GHC/Build.hs +++ b/Cabal/src/Distribution/Simple/GHC/Build.hs @@ -12,7 +12,7 @@ import Distribution.Simple.Flag (Flag) import Distribution.Simple.GHC.Build.ExtraSources import Distribution.Simple.GHC.Build.Link import Distribution.Simple.GHC.Build.Modules -import Distribution.Simple.GHC.Build.Utils (compilerBuildWay, isHaskell) +import Distribution.Simple.GHC.Build.Utils (compilerBuildWay, isHaskell, withDynFLib) import Distribution.Simple.LocalBuildInfo import Distribution.Simple.Program.Builtin (ghcProgram) import Distribution.Simple.Program.Db (requireProgram) @@ -113,21 +113,24 @@ build numJobs pkg_descr pbci = do (ghcProg, _) <- liftIO $ requireProgram verbosity ghcProgram (withPrograms lbi) -- Ways which are wanted from configuration flags - let wantedWays@(wantedLibWays, _, wantedExeWay) = buildWays lbi + let wantedWays@(wantedLibWays, wantedFLibWay, wantedExeWay) = buildWays lbi -- Ways which are needed due to the compiler configuration let doingTH = usesTemplateHaskellOrQQ bi defaultGhcWay = compilerBuildWay (buildCompiler pbci) - wantedLibBuildWays = - if isLib - then wantedLibWays isIndef - else [wantedExeWay] - finalLibBuildWays = - wantedLibBuildWays - ++ [defaultGhcWay | doingTH && defaultGhcWay `notElem` wantedLibBuildWays] - - liftIO $ info verbosity ("Wanted build ways(" ++ show isLib ++ "): " ++ show wantedLibBuildWays) - liftIO $ info verbosity ("Final lib build ways(" ++ show isLib ++ "): " ++ show finalLibBuildWays) + wantedModBuildWays = case buildComponent pbci of + CLib _ -> wantedLibWays isIndef + CFLib fl -> [wantedFLibWay (withDynFLib fl)] + CExe _ -> [wantedExeWay] + CTest _ -> [wantedExeWay] + CBench _ -> [wantedExeWay] + finalModBuildWays = + wantedModBuildWays + ++ [defaultGhcWay | doingTH && defaultGhcWay `notElem` wantedModBuildWays] + compNameStr = showComponentName $ componentName $ buildComponent pbci + + liftIO $ info verbosity ("Wanted module build ways(" ++ compNameStr ++ "): " ++ show wantedModBuildWays) + liftIO $ info verbosity ("Final module build ways(" ++ compNameStr ++ "): " ++ show finalModBuildWays) -- We need a separate build and link phase, and C sources must be compiled -- after Haskell modules, because C sources may depend on stub headers -- generated from compiling Haskell modules (#842, #3294). @@ -141,7 +144,7 @@ build numJobs pkg_descr pbci = do | otherwise -> (Nothing, Just mainFile) Nothing -> (Nothing, Nothing) - buildOpts <- buildHaskellModules numJobs ghcProg hsMainFile inputModules buildTargetDir finalLibBuildWays pbci + buildOpts <- buildHaskellModules numJobs ghcProg hsMainFile inputModules buildTargetDir finalModBuildWays pbci extraSources <- buildAllExtraSources nonHsMainFile ghcProg buildTargetDir wantedWays pbci linkOrLoadComponent ghcProg diff --git a/cabal-testsuite/PackageTests/ProfShared/setup.test.hs b/cabal-testsuite/PackageTests/ProfShared/setup.test.hs index 84fcbd47e57..54147e34575 100644 --- a/cabal-testsuite/PackageTests/ProfShared/setup.test.hs +++ b/cabal-testsuite/PackageTests/ProfShared/setup.test.hs @@ -16,8 +16,8 @@ main = do let ls = lines (resultOutput r) - library_prefix = "Wanted build ways(True): " - executable_prefix = "Wanted build ways(False): " + library_prefix = "Wanted module build ways(library): " + executable_prefix = "Wanted module build ways(executable 'Prof'): " get_ways prefix = map (drop (length prefix)) (filter (prefix `isPrefixOf`) ls) library_ways = read_ways (get_ways library_prefix) From 0cb2c9577efb6990dc5347167982bee50c67997d Mon Sep 17 00:00:00 2001 From: Matthew Pickering Date: Thu, 3 Oct 2024 12:03:02 +0100 Subject: [PATCH 19/87] Fix ./setup install comand Running ./setup install will give you an error: ``` fromFlag NoFlag. Use fromFlagOrDefault CallStack (from HasCallStack): error, called at src/Distribution/Simple/Flag.hs:110:19 in Cabal-3.15.0.0-inplace:Distribution.Simple.Flag fromFlag, called at src/Distribution/Simple/Register.hs:161:16 in Cabal-3.15.0.0-inplace:Distribution.Simple.Register ``` This seems to not be tested anywhere and most people will use ./setup register in any case, but we should fix this for the next point release in 3.14 series. # Please enter the commit message for your changes. Lines starting Fixes #10416 (cherry picked from commit 2a178f2435b535e8a9a78cc22e989260e4d1384b) --- Cabal/src/Distribution/Simple.hs | 1 + .../Install/DistPrefInstall/CHANGELOG.md | 5 +++++ .../DistPrefInstall/DistPrefInstall.cabal | 18 ++++++++++++++++++ .../Install/DistPrefInstall/Setup.hs | 2 ++ .../Install/DistPrefInstall/setup.test.hs | 8 ++++++++ .../Install/DistPrefInstall/src/MyLib.hs | 4 ++++ changelog.d/t10416 | 11 +++++++++++ 7 files changed, 49 insertions(+) create mode 100644 cabal-testsuite/PackageTests/Install/DistPrefInstall/CHANGELOG.md create mode 100644 cabal-testsuite/PackageTests/Install/DistPrefInstall/DistPrefInstall.cabal create mode 100644 cabal-testsuite/PackageTests/Install/DistPrefInstall/Setup.hs create mode 100644 cabal-testsuite/PackageTests/Install/DistPrefInstall/setup.test.hs create mode 100644 cabal-testsuite/PackageTests/Install/DistPrefInstall/src/MyLib.hs create mode 100644 changelog.d/t10416 diff --git a/Cabal/src/Distribution/Simple.hs b/Cabal/src/Distribution/Simple.hs index ada1d6c7aad..3533cf78336 100644 --- a/Cabal/src/Distribution/Simple.hs +++ b/Cabal/src/Distribution/Simple.hs @@ -1094,6 +1094,7 @@ defaultInstallHook_setupHooks inst_hooks pkg_descr localbuildinfo _ flags = do defaultRegisterFlags { regInPlace = installInPlace flags , regPackageDB = installPackageDB flags + , registerCommonFlags = installCommonFlags flags } when (hasLibs pkg_descr) $ register pkg_descr localbuildinfo registerFlags diff --git a/cabal-testsuite/PackageTests/Install/DistPrefInstall/CHANGELOG.md b/cabal-testsuite/PackageTests/Install/DistPrefInstall/CHANGELOG.md new file mode 100644 index 00000000000..3d5552b0ba5 --- /dev/null +++ b/cabal-testsuite/PackageTests/Install/DistPrefInstall/CHANGELOG.md @@ -0,0 +1,5 @@ +# Revision history for DistPrefInstall + +## 0.1.0.0 -- YYYY-mm-dd + +* First version. Released on an unsuspecting world. diff --git a/cabal-testsuite/PackageTests/Install/DistPrefInstall/DistPrefInstall.cabal b/cabal-testsuite/PackageTests/Install/DistPrefInstall/DistPrefInstall.cabal new file mode 100644 index 00000000000..536d26b3648 --- /dev/null +++ b/cabal-testsuite/PackageTests/Install/DistPrefInstall/DistPrefInstall.cabal @@ -0,0 +1,18 @@ +cabal-version: 3.12 +name: DistPrefInstall +version: 0.1.0.0 +license: NONE +author: Matthew Pickering +maintainer: matthewtpickering@gmail.com +build-type: Simple +extra-doc-files: CHANGELOG.md + +common warnings + ghc-options: -Wall + +library + import: warnings + exposed-modules: MyLib + build-depends: base + hs-source-dirs: src + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/Install/DistPrefInstall/Setup.hs b/cabal-testsuite/PackageTests/Install/DistPrefInstall/Setup.hs new file mode 100644 index 00000000000..9a994af677b --- /dev/null +++ b/cabal-testsuite/PackageTests/Install/DistPrefInstall/Setup.hs @@ -0,0 +1,2 @@ +import Distribution.Simple +main = defaultMain diff --git a/cabal-testsuite/PackageTests/Install/DistPrefInstall/setup.test.hs b/cabal-testsuite/PackageTests/Install/DistPrefInstall/setup.test.hs new file mode 100644 index 00000000000..27b709e7070 --- /dev/null +++ b/cabal-testsuite/PackageTests/Install/DistPrefInstall/setup.test.hs @@ -0,0 +1,8 @@ +import Test.Cabal.Prelude + +main = setupTest $ recordMode DoNotRecord $ withPackageDb $ do + setup "configure" [] + setup "build" [] + setup "copy" [] + setup "install" [] + setup "sdist" [] diff --git a/cabal-testsuite/PackageTests/Install/DistPrefInstall/src/MyLib.hs b/cabal-testsuite/PackageTests/Install/DistPrefInstall/src/MyLib.hs new file mode 100644 index 00000000000..e657c4403f6 --- /dev/null +++ b/cabal-testsuite/PackageTests/Install/DistPrefInstall/src/MyLib.hs @@ -0,0 +1,4 @@ +module MyLib (someFunc) where + +someFunc :: IO () +someFunc = putStrLn "someFunc" diff --git a/changelog.d/t10416 b/changelog.d/t10416 new file mode 100644 index 00000000000..071b9b1ad95 --- /dev/null +++ b/changelog.d/t10416 @@ -0,0 +1,11 @@ +synopsis: Fix ./setup install command +packages: Cabal +prs: #10417 +issues: #10416 +significance: significant + +description: { + +- `./setup install` was failing with a `fromFlag NoFlag` error. It is now fixed. + +} From c5f0f6939805ccba7cd406a304251cdabe9972af Mon Sep 17 00:00:00 2001 From: brandon s allbery kf8nh Date: Thu, 19 Sep 2024 20:22:20 -0400 Subject: [PATCH 20/87] add Makefile targets for fix-whitespace `make whitespace` now runs `fix-whitespace --check --verbose` and `make fix-whitespace` runs `fix-whitespace --verbose`. (cherry picked from commit 2858dc0991130f52bc00cdc38e89e2a2eba8b06a) # Conflicts: # .github/workflows/whitespace.yml --- .github/workflows/whitespace.yml | 17 +++++++++++++++++ CONTRIBUTING.md | 4 +++- Makefile | 8 ++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/.github/workflows/whitespace.yml b/.github/workflows/whitespace.yml index 46088d3d351..895ace54b4d 100644 --- a/.github/workflows/whitespace.yml +++ b/.github/workflows/whitespace.yml @@ -7,8 +7,25 @@ on: jobs: whitespace: + defaults: + run: + shell: bash runs-on: ubuntu-latest steps: + - uses: actions/checkout@v4 +<<<<<<< HEAD - uses: andreasabel/fix-whitespace-action@v1 +======= + + - run: | + # no longer using the action because apparently we're supposed to use the Makefile here + wget -q https://github.com/agda/fix-whitespace/releases/download/v0.1/fix-whitespace-0.1-linux.binary + mkdir -p "$HOME/.local/bin" + mv fix-whitespace-0.1-linux.binary "$HOME/.local/bin/fix-whitespace" + chmod +x "$HOME/.local/bin/fix-whitespace" + echo "$HOME/.local/bin" >> $GITHUB_PATH + + - run: make whitespace +>>>>>>> 2858dc099 (add Makefile targets for fix-whitespace) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2049b978528..c02af86e872 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -191,7 +191,9 @@ Whitespace Conventions We use automated whitespace convention checking. Violations can be fixed by running [fix-whitespace](https://hackage.haskell.org/package/fix-whitespace). If -you push a fix of a whitespace violation, please do so in a _separate commit_. +you push a fix of a whitespace violation, please do so in a _separate commit_. For convenience, +`make whitespace` will show violations and `make fix-whitespace` will fix them, if the +`fix-whitespace` utility is installed. Other Conventions ----------------- diff --git a/Makefile b/Makefile index 4fd3d14c291..e995e9e4937 100644 --- a/Makefile +++ b/Makefile @@ -41,6 +41,14 @@ style-commit: ## Run the code styler on the previous commit @git diff --name-only HEAD $(COMMIT) Cabal Cabal-syntax cabal-install \ | grep '.hs$$' | xargs -P $(PROCS) -I {} fourmolu -q -i {} +.PHONY: whitespace +whitespace: ## Run fix-whitespace in check mode + fix-whitespace --check --verbose + +.PHONY: fix-whitespace +fix-whitespace: ## Run fix-whitespace in fix mode + fix-whitespace --verbose + # source generation: SPDX SPDX_LICENSE_HS:=Cabal-syntax/src/Distribution/SPDX/LicenseId.hs From 7d3188da60cd60ac66acd2e60af4fe4e0ed99a20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9cate?= Date: Tue, 8 Oct 2024 16:18:41 +0200 Subject: [PATCH 21/87] Update whitespace.yml --- .github/workflows/whitespace.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/whitespace.yml b/.github/workflows/whitespace.yml index 895ace54b4d..93c1a41b07f 100644 --- a/.github/workflows/whitespace.yml +++ b/.github/workflows/whitespace.yml @@ -15,9 +15,7 @@ jobs: steps: - uses: actions/checkout@v4 -<<<<<<< HEAD - - uses: andreasabel/fix-whitespace-action@v1 -======= + - run: | # no longer using the action because apparently we're supposed to use the Makefile here @@ -28,4 +26,3 @@ jobs: echo "$HOME/.local/bin" >> $GITHUB_PATH - run: make whitespace ->>>>>>> 2858dc099 (add Makefile targets for fix-whitespace) From 9b994d6f16a3211a697e3d3a32dea53ce6a5fb49 Mon Sep 17 00:00:00 2001 From: brandon s allbery kf8nh Date: Thu, 17 Oct 2024 14:58:49 -0400 Subject: [PATCH 22/87] add new non-compile-affecting options for ghc 9.12 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ghc 9.12 adds several new command line options, divided between `LANGUAGE`s (already added), warnings, new preprocessor control options, and compilation control options. Two options needed to be added to the list of options requiring `Int` parameters. The new options, excluding warning and language options, are: * `-fexpose-overloaded-unfoldings` * `-fmax-forced-spec-args=N` * `-fno-expose-overloaded-unfoldings` * `-fno-object-determinism` * `-fobject-determinism` * `-fwrite-if-compression=N` * `-optCmmP…` * `-optJSP…` * `-pgmCmmP` * `-pgmJSP` As they all affect compilation and store hashes, the only necessary change was to list the two numeric options so they will be parsed correctly. To the best of our understanding, `-pgm*` and `-opt*` options are already handled as a group. (cherry picked from commit 6578978c084d130cb0732beefeff2240466b5350) --- Cabal/src/Distribution/Simple/Program/GHC.hs | 1 + changelog.d/pr-10468 | 31 ++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 changelog.d/pr-10468 diff --git a/Cabal/src/Distribution/Simple/Program/GHC.hs b/Cabal/src/Distribution/Simple/Program/GHC.hs index ce0ea9db92a..86320cc9472 100644 --- a/Cabal/src/Distribution/Simple/Program/GHC.hs +++ b/Cabal/src/Distribution/Simple/Program/GHC.hs @@ -329,6 +329,7 @@ normaliseGhcArgs (Just ghcVersion) PackageDescription{..} ghcArgs ] , from [8, 2] ["-fmax-uncovered-patterns", "-fmax-errors"] , from [8, 4] $ to [8, 6] ["-fmax-valid-substitutions"] + , from [9, 12] ["-fmax-forced-spec-args", "-fwrite-if-compression"] ] dropIntFlag :: Bool -> String -> String -> Any diff --git a/changelog.d/pr-10468 b/changelog.d/pr-10468 new file mode 100644 index 00000000000..2b1511a609c --- /dev/null +++ b/changelog.d/pr-10468 @@ -0,0 +1,31 @@ +synopsis: Add new options from ghc 9.12 +packages: Cabal +prs: #10468 +significance: + +description: { + +- ghc 9.12 adds several new command line options, divided between + `LANGUAGE`s (already added), warnings, new preprocessor control options, + and compilation control options. Two options needed to be added to the + list of options requiring `Int` parameters. + + The new options, excluding warning and language options, are: + + * `-fexpose-overloaded-unfoldings` + * `-fmax-forced-spec-args=N` + * `-fno-expose-overloaded-unfoldings` + * `-fno-object-determinism` + * `-fobject-determinism` + * `-fwrite-if-compression=N` + * `-optCmmP…` + * `-optJSP…` + * `-pgmCmmP` + * `-pgmJSP` + + As they all affect compilation and store hashes, the only necessary + change was to list the two numeric options so they will be parsed + correctly. To the best of our understanding, `-pgm*` and `-opt*` + options are already handled as a group. + +} From 747078f7141d623ca5cb0bc497a695dddc85fb90 Mon Sep 17 00:00:00 2001 From: brandon s allbery kf8nh Date: Fri, 11 Oct 2024 11:43:00 -0400 Subject: [PATCH 23/87] switch validate to 22.04 for now `validate-old-ghcs` doesn't work on 24.04, which GHA just updated to; and it uses build artifacts from the earlier steps, so for now the whole thing needs to be downgraded to get thinsg working. We must address this properly later. (cherry picked from commit 85f0f0c6ce55235ce4eeaf70a9c0c2a9d61d2ade) --- .github/workflows/validate.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 2d8be7f02a3..c346838f93a 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -62,7 +62,7 @@ jobs: matrix: sys: - { os: windows-latest, shell: "C:/msys64/usr/bin/bash.exe -e {0}" } - - { os: ubuntu-latest, shell: bash } + - { os: ubuntu-22.04, shell: bash } - { os: macos-13, shell: bash } # If you remove something from here, then add it to the old-ghcs job. # Also a removed GHC from here means that we are actually dropping @@ -233,7 +233,7 @@ jobs: validate-old-ghcs: name: Validate old ghcs ${{ matrix.extra-ghc }} - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: validate strategy: @@ -362,7 +362,7 @@ jobs: needs: validate strategy: matrix: - os: [ubuntu-latest, macos-13, windows-latest] + os: [ubuntu-22.04, macos-13, windows-latest] # We only use one ghc version the used one for the next release (defined at top of the workflow) # We need to build an array dynamically to inject the appropiate env var in a previous job, # see https://docs.github.com/en/actions/learn-github-actions/expressions#fromjson From 9c802e93a1e7eecc818f5f78250109f83acad9be Mon Sep 17 00:00:00 2001 From: Zubin Duggal Date: Fri, 11 Oct 2024 16:34:24 +0530 Subject: [PATCH 24/87] Bump base bound to 4.21 for GHC 9.12 (cherry picked from commit a8d1a5a40d6df2f935c2e02c15590836aed763f3) --- .../buildinfo-reference-generator.cabal | 2 +- cabal-install-solver/cabal-install-solver.cabal | 4 ++-- cabal-install/cabal-install.cabal | 2 +- cabal-testsuite/cabal-testsuite.cabal | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/buildinfo-reference-generator/buildinfo-reference-generator.cabal b/buildinfo-reference-generator/buildinfo-reference-generator.cabal index 47068ee33b1..a09fc4dc62c 100644 --- a/buildinfo-reference-generator/buildinfo-reference-generator.cabal +++ b/buildinfo-reference-generator/buildinfo-reference-generator.cabal @@ -8,7 +8,7 @@ executable buildinfo-reference-generator ghc-options: -Wall main-is: Main.hs build-depends: - , base >=4.11 && <4.21 + , base >=4.11 && <4.22 , Cabal , Cabal-described , containers diff --git a/cabal-install-solver/cabal-install-solver.cabal b/cabal-install-solver/cabal-install-solver.cabal index 8a71e7c7881..cf8d2fdedbb 100644 --- a/cabal-install-solver/cabal-install-solver.cabal +++ b/cabal-install-solver/cabal-install-solver.cabal @@ -99,7 +99,7 @@ library build-depends: , array >=0.4 && <0.6 - , base >=4.13 && <4.21 + , base >=4.13 && <4.22 , bytestring >=0.10.6.0 && <0.13 , Cabal ^>=3.14 , Cabal-syntax ^>=3.14 @@ -131,7 +131,7 @@ Test-Suite unit-tests UnitTests.Distribution.Solver.Modular.MessageUtils build-depends: - , base >= 4.13 && <4.21 + , base >= 4.13 && <4.22 , Cabal-syntax , cabal-install-solver , tasty >= 1.2.3 && <1.6 diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index 300a8d8d8aa..4efd0d8f241 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -52,7 +52,7 @@ common warnings ghc-options: -Wnoncanonical-monadfail-instances common base-dep - build-depends: base >=4.13 && <4.21 + build-depends: base >=4.13 && <4.22 common cabal-dep build-depends: Cabal ^>=3.14 diff --git a/cabal-testsuite/cabal-testsuite.cabal b/cabal-testsuite/cabal-testsuite.cabal index 8cbd1e7657c..731cd374821 100644 --- a/cabal-testsuite/cabal-testsuite.cabal +++ b/cabal-testsuite/cabal-testsuite.cabal @@ -26,7 +26,7 @@ common shared default-language: Haskell2010 build-depends: - , base >= 4.11 && < 4.21 + , base >= 4.11 && < 4.22 -- this needs to match the in-tree lib:Cabal version , Cabal ^>= 3.14.0.0 From 460375d72e6e080e17d0afa60144fa7f445a6883 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 5 Nov 2024 21:27:18 +0000 Subject: [PATCH 25/87] fix `cabal install --program-suffix/prefix` (fix #10290 and #10476) (#10483) (#10510) * fix cabal install --program-suffix/prefix (fix #10290 and #10476) When checking for existing installations, cabal would not account for an affix (suffix or prefix). So, if you had a `hello` binary installed, installing a second one with a non-empty affix (a perfectly legal operation) would fail. The reason seemed to be a typo in 09c04e9aca5de2ca391eb859a5b295fdd617f5c6, which passed the arguments to the Symlink structure in a wrong order. When failing to install a binary because of an existing one, cabal would report suffix-less existing target even if a suffix was set. * Add regression tests for overwrite policies and porgram-affixes Add regression tests for the `program-prefix` and `program-suffix` flags combined with the overwrite-policy. In short, the overwrite-policy needs to take potential program affixes into account when deciding whether it will need to overwrite a program path during installation. --------- Co-authored-by: Fendor (cherry picked from commit ee3c31398c776ce210fd6bbb5000a7532ea43c31) Co-authored-by: Artem Pelenitsyn --- .../src/Distribution/Client/CmdInstall.hs | 4 +- .../ProgramAffixes/overwrite-policy.out | 160 ++++++++++++++++++ .../ProgramAffixes/overwrite-policy.test.hs | 66 ++++++++ 3 files changed, 228 insertions(+), 2 deletions(-) create mode 100644 cabal-testsuite/PackageTests/Install/ProgramAffixes/overwrite-policy.out create mode 100644 cabal-testsuite/PackageTests/Install/ProgramAffixes/overwrite-policy.test.hs diff --git a/cabal-install/src/Distribution/Client/CmdInstall.hs b/cabal-install/src/Distribution/Client/CmdInstall.hs index 210ac78ca01..1587b20a44d 100644 --- a/cabal-install/src/Distribution/Client/CmdInstall.hs +++ b/cabal-install/src/Distribution/Client/CmdInstall.hs @@ -1126,8 +1126,8 @@ symlink overwritePolicy installDir (mkSourceBinDir unit) - (mkExeName exe) (mkFinalExeName exe) + (mkExeName exe) -- | -- -- * When 'InstallCheckOnly', warn if install would fail overwrite policy @@ -1172,7 +1172,7 @@ installCheckUnitExes errorMessage installdir exe = case overwritePolicy of NeverOverwrite -> "Path '" - <> (installdir prettyShow exe) + <> (installdir mkFinalExeName exe) <> "' already exists. " <> "Use --overwrite-policy=always to overwrite." -- This shouldn't even be possible, but we keep it in case symlinking or diff --git a/cabal-testsuite/PackageTests/Install/ProgramAffixes/overwrite-policy.out b/cabal-testsuite/PackageTests/Install/ProgramAffixes/overwrite-policy.out new file mode 100644 index 00000000000..cf1c952c9d3 --- /dev/null +++ b/cabal-testsuite/PackageTests/Install/ProgramAffixes/overwrite-policy.out @@ -0,0 +1,160 @@ +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Build profile: -w ghc- -O1 +In order, the following will be built: + - p-1.0 (exe:p) (requires build) +Configuring p-1.0... +Preprocessing executable 'p' for p-1.0... +Building executable 'p' for p-1.0... +Installing executable p in +Warning: The directory /overwrite-policy.dist/home/.cabal/store/ghc-/incoming/new-/overwrite-policy.dist/home/.cabal/store/ghc-/-/bin is not in the system search path. +Symlinking 'p' to '/overwrite-policy.dist/usr/bin/p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Error: [Cabal-7149] +Path '/overwrite-policy.dist/usr/bin/p' already exists. Use --overwrite-policy=always to overwrite. +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Symlinking 'p' to '/overwrite-policy.dist/usr/bin/p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Symlinking 'p' to '/overwrite-policy.dist/usr/bin/p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Symlinking 'p' to '/overwrite-policy.dist/usr/bin/p-my-suffix' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Error: [Cabal-7149] +Path '/overwrite-policy.dist/usr/bin/p-my-suffix' already exists. Use --overwrite-policy=always to overwrite. +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Symlinking 'p' to '/overwrite-policy.dist/usr/bin/p-my-suffix' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Symlinking 'p' to '/overwrite-policy.dist/usr/bin/p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Symlinking 'p' to '/overwrite-policy.dist/usr/bin/p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Symlinking 'p' to '/overwrite-policy.dist/usr/bin/my-prefix-p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Error: [Cabal-7149] +Path '/overwrite-policy.dist/usr/bin/my-prefix-p' already exists. Use --overwrite-policy=always to overwrite. +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Symlinking 'p' to '/overwrite-policy.dist/usr/bin/my-prefix-p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Symlinking 'p' to '/overwrite-policy.dist/usr/bin/p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Symlinking 'p' to '/overwrite-policy.dist/usr/bin/p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Symlinking 'p' to '/overwrite-policy.dist/usr/bin/my-prefix-p-my-suffix' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Error: [Cabal-7149] +Path '/overwrite-policy.dist/usr/bin/my-prefix-p-my-suffix' already exists. Use --overwrite-policy=always to overwrite. +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Symlinking 'p' to '/overwrite-policy.dist/usr/bin/my-prefix-p-my-suffix' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Symlinking 'p' to '/overwrite-policy.dist/usr/bin/p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Copying 'p' to '/overwrite-policy.dist/usr/bin/p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Error: [Cabal-7149] +Path '/overwrite-policy.dist/usr/bin/p' already exists. Use --overwrite-policy=always to overwrite. +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Copying 'p' to '/overwrite-policy.dist/usr/bin/p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Copying 'p' to '/overwrite-policy.dist/usr/bin/p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Copying 'p' to '/overwrite-policy.dist/usr/bin/p-my-suffix' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Error: [Cabal-7149] +Path '/overwrite-policy.dist/usr/bin/p-my-suffix' already exists. Use --overwrite-policy=always to overwrite. +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Copying 'p' to '/overwrite-policy.dist/usr/bin/p-my-suffix' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Copying 'p' to '/overwrite-policy.dist/usr/bin/p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Copying 'p' to '/overwrite-policy.dist/usr/bin/p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Copying 'p' to '/overwrite-policy.dist/usr/bin/my-prefix-p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Error: [Cabal-7149] +Path '/overwrite-policy.dist/usr/bin/my-prefix-p' already exists. Use --overwrite-policy=always to overwrite. +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Copying 'p' to '/overwrite-policy.dist/usr/bin/my-prefix-p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Copying 'p' to '/overwrite-policy.dist/usr/bin/p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Copying 'p' to '/overwrite-policy.dist/usr/bin/p' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Copying 'p' to '/overwrite-policy.dist/usr/bin/my-prefix-p-my-suffix' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Error: [Cabal-7149] +Path '/overwrite-policy.dist/usr/bin/my-prefix-p-my-suffix' already exists. Use --overwrite-policy=always to overwrite. +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Copying 'p' to '/overwrite-policy.dist/usr/bin/my-prefix-p-my-suffix' +# cabal install +Wrote tarball sdist to /overwrite-policy.dist/work/./dist/sdist/p-1.0.tar.gz +Resolving dependencies... +Copying 'p' to '/overwrite-policy.dist/usr/bin/p' diff --git a/cabal-testsuite/PackageTests/Install/ProgramAffixes/overwrite-policy.test.hs b/cabal-testsuite/PackageTests/Install/ProgramAffixes/overwrite-policy.test.hs new file mode 100644 index 00000000000..f94fa436387 --- /dev/null +++ b/cabal-testsuite/PackageTests/Install/ProgramAffixes/overwrite-policy.test.hs @@ -0,0 +1,66 @@ +import Test.Cabal.Prelude +import System.FilePath (()) +import System.Directory (removeFile) + +main = cabalTest $ do + runTestForInstallMethod "symlink" + runTestForInstallMethod "copy" + +runTestForInstallMethod :: String -> TestM () +runTestForInstallMethod method = do + env <- getTestEnv + let installdir = testPrefixDir env "bin" + + -- install the binary, don't overwrite anything + cabal "install" + ["p", "--installdir", installdir, "--install-method", method, "--overwrite-policy", "never"] + -- install the binary, don't overwrite anything + fails $ cabal "install" + ["p", "--installdir", installdir, "--install-method", method, "--overwrite-policy", "never"] + -- install the binary again, forcing an overwrite, should succeed. + cabal "install" + ["p", "--installdir", installdir, "--install-method", method, "--overwrite-policy", "always"] + -- remove the installed binary. + liftIO $ removeFile (installdir "p" <.> exeExt) + + testPolicyForAffix installdir method ["--program-suffix", "-my-suffix"] + testPolicyForAffix installdir method ["--program-prefix", "my-prefix-"] + testPolicyForAffix installdir method ["--program-prefix", "my-prefix-", "--program-suffix", "-my-suffix"] + -- remove the installed binaries. + liftIO $ removeFile (installdir "p" <.> exeExt) + liftIO $ removeFile (installdir "p-my-suffix" <.> exeExt) + liftIO $ removeFile (installdir "my-prefix-p" <.> exeExt) + liftIO $ removeFile (installdir "my-prefix-p-my-suffix" <.> exeExt) + +-- | Run a policy test for a given 'install-method' and program-affix +-- (i.e., '--program-suffix' or '--program-prefix'). +-- +-- When a program affix is given, the installation should not be affected +-- by installing the binary with no affix and vice-versa. +-- So, installing the program without any affix is not affected by installations with +-- some program affix. +testPolicyForAffix :: FilePath -> String -> [String] -> TestM () +testPolicyForAffix installdir method affixArgs = do + -- install the binary again, forcing an overwrite, must succeed. + -- The rest of this test assumes the binary has been installed before. + cabal "install" + ["p", "--installdir", installdir, "--install-method", method, "--overwrite-policy", "always"] + + -- Install the binary with some program affix, don't need overwrite anything + cabal "install" + (["p", "--installdir", installdir, "--install-method", method, "--overwrite-policy", "never"] ++ affixArgs) + -- Once the binary is installed, we can't overwrite it unless we are told so. + fails $ cabal "install" + (["p", "--installdir", installdir, "--install-method", method, "--overwrite-policy", "never"] ++ affixArgs) + -- Successfully overwrite the binary if told so. + cabal "install" + (["p", "--installdir", installdir, "--install-method", method, "--overwrite-policy", "always"] ++ affixArgs) + + -- remove the installed binary. + liftIO $ removeFile (installdir "p" <.> exeExt) + -- Make sure we can still install the original program with no program affix without overwriting, + -- even though, the program is already installed with some affix. + cabal "install" + ["p", "--installdir", installdir, "--install-method", method, "--overwrite-policy", "never"] + +exeExt = if isWindows then "exe" else "" From 30f2bd2d65c144f53e3485cdb4020bd428c9d6a3 Mon Sep 17 00:00:00 2001 From: noiioiu <151288161+noiioiu@users.noreply.github.com> Date: Tue, 5 Nov 2024 21:33:21 -0600 Subject: [PATCH 26/87] Catch exception if git is not installed (#10486) * Catch exception if git is not installed * fix formatting * change type from IO to m * add maybeReadProcessWithExitCode * use maybeReadProcessWithExitCode * disambiguate P.catch * add TypeApplications pragma * add missing arguments * Add changelog entry * Add test for `cabal init` when `git` is not installed * Remove withSourceCopyDir from test * Remove withSourceCopyDir from test * Remove configure and build from test * Remove assert * Skip test on windows --------- Co-authored-by: noiioiu (cherry picked from commit e7bc62be2ed8abbf80431f25a675c38eda786401) --- .../Client/Init/NonInteractive/Heuristics.hs | 22 +++++++++---------- .../src/Distribution/Client/Init/Types.hs | 4 ++++ .../PackageTests/Init/init-without-git.out | 1 + .../Init/init-without-git.test.hs | 22 +++++++++++++++++++ changelog.d/pr-10486 | 12 ++++++++++ 5 files changed, 50 insertions(+), 11 deletions(-) create mode 100644 cabal-testsuite/PackageTests/Init/init-without-git.out create mode 100644 cabal-testsuite/PackageTests/Init/init-without-git.test.hs create mode 100644 changelog.d/pr-10486 diff --git a/cabal-install/src/Distribution/Client/Init/NonInteractive/Heuristics.hs b/cabal-install/src/Distribution/Client/Init/NonInteractive/Heuristics.hs index 138f9684553..e6838aa2e45 100644 --- a/cabal-install/src/Distribution/Client/Init/NonInteractive/Heuristics.hs +++ b/cabal-install/src/Distribution/Client/Init/NonInteractive/Heuristics.hs @@ -165,14 +165,14 @@ guessAuthorEmail = guessGitInfo "user.email" guessGitInfo :: Interactive m => String -> m (Maybe String) guessGitInfo target = do - localInfo <- readProcessWithExitCode "git" ["config", "--local", target] "" - if null $ snd' localInfo - then do - globalInfo <- readProcessWithExitCode "git" ["config", "--global", target] "" - case fst' globalInfo of - ExitSuccess -> return $ Just (trim $ snd' globalInfo) - _ -> return Nothing - else return $ Just (trim $ snd' localInfo) - where - fst' (x, _, _) = x - snd' (_, x, _) = x + localInfo <- maybeReadProcessWithExitCode "git" ["config", "--local", target] "" + case localInfo of + Nothing -> return Nothing + Just (_, localStdout, _) -> + if null localStdout + then do + globalInfo <- maybeReadProcessWithExitCode "git" ["config", "--global", target] "" + case globalInfo of + Just (ExitSuccess, globalStdout, _) -> return $ Just (trim globalStdout) + _ -> return Nothing + else return $ Just (trim localStdout) diff --git a/cabal-install/src/Distribution/Client/Init/Types.hs b/cabal-install/src/Distribution/Client/Init/Types.hs index 0887cb54a71..8da7ba2b52b 100644 --- a/cabal-install/src/Distribution/Client/Init/Types.hs +++ b/cabal-install/src/Distribution/Client/Init/Types.hs @@ -3,6 +3,7 @@ {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE LambdaCase #-} +{-# LANGUAGE TypeApplications #-} -- | -- Module : Distribution.Client.Init.Types @@ -346,6 +347,7 @@ class Monad m => Interactive m where doesFileExist :: FilePath -> m Bool canonicalizePathNoThrow :: FilePath -> m FilePath readProcessWithExitCode :: FilePath -> [String] -> String -> m (ExitCode, String, String) + maybeReadProcessWithExitCode :: FilePath -> [String] -> String -> m (Maybe (ExitCode, String, String)) getEnvironment :: m [(String, String)] getCurrentYear :: m Integer listFilesInside :: (FilePath -> m Bool) -> FilePath -> m [FilePath] @@ -389,6 +391,7 @@ instance Interactive PromptIO where doesFileExist = liftIO <$> P.doesFileExist canonicalizePathNoThrow = liftIO <$> P.canonicalizePathNoThrow readProcessWithExitCode a b c = liftIO $ Process.readProcessWithExitCode a b c + maybeReadProcessWithExitCode a b c = liftIO $ (Just <$> Process.readProcessWithExitCode a b c) `P.catch` const @_ @IOError (pure Nothing) getEnvironment = liftIO P.getEnvironment getCurrentYear = liftIO P.getCurrentYear listFilesInside test dir = do @@ -438,6 +441,7 @@ instance Interactive PurePrompt where readProcessWithExitCode !_ !_ !_ = do input <- pop return (ExitSuccess, input, "") + maybeReadProcessWithExitCode a b c = Just <$> readProcessWithExitCode a b c getEnvironment = fmap (map read) popList getCurrentYear = fmap read pop listFilesInside pred' !_ = do diff --git a/cabal-testsuite/PackageTests/Init/init-without-git.out b/cabal-testsuite/PackageTests/Init/init-without-git.out new file mode 100644 index 00000000000..9a143a9375c --- /dev/null +++ b/cabal-testsuite/PackageTests/Init/init-without-git.out @@ -0,0 +1 @@ +# cabal init diff --git a/cabal-testsuite/PackageTests/Init/init-without-git.test.hs b/cabal-testsuite/PackageTests/Init/init-without-git.test.hs new file mode 100644 index 00000000000..4c98f751c57 --- /dev/null +++ b/cabal-testsuite/PackageTests/Init/init-without-git.test.hs @@ -0,0 +1,22 @@ +import Test.Cabal.Prelude +import System.Directory +import System.FilePath +import Distribution.Simple.Utils +import Distribution.Verbosity + +-- Test cabal init when git is not installed +main = do + skipIfWindows "Might fail on windows." + tmp <- getTemporaryDirectory + withTempDirectory normal tmp "bin" $ + \bin -> cabalTest $ + do + ghc_path <- programPathM ghcProgram + cabal_path <- programPathM cabalProgram + withSymlink ghc_path (bin "ghc") . withSymlink cabal_path (bin "cabal") . + withEnv [("PATH", Just bin)] $ do + cwd <- fmap testSourceCopyDir getTestEnv + + void . withDirectory cwd $ do + cabalWithStdin "init" ["-i"] + "2\n\n5\n\n\n2\n\n\n\n\n\n\n\n\n\n" diff --git a/changelog.d/pr-10486 b/changelog.d/pr-10486 new file mode 100644 index 00000000000..237d2c857b0 --- /dev/null +++ b/changelog.d/pr-10486 @@ -0,0 +1,12 @@ +synopsis: Fix a bug that causes `cabal init` to crash if `git` is not installed +packages: cabal-install +prs: #10486 +issues: #10484 #8478 +significance: + +description: { + +- `cabal init` tries to use `git config` to guess the user's name and email. + It no longer crashes if there is no executable named `git` on $PATH. + +} From 505f8752716edc0e1f821dc2fd917d14513db507 Mon Sep 17 00:00:00 2001 From: brandon s allbery kf8nh Date: Tue, 1 Oct 2024 10:29:29 -0400 Subject: [PATCH 27/87] avoid incomplete record selection warning Per SPJ suggection. Closes: #10402 (cherry picked from commit b1798b5fe7e38e13de126ae785803d71e931be10) --- Cabal/src/Distribution/Simple/GHC/Build/Link.hs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Cabal/src/Distribution/Simple/GHC/Build/Link.hs b/Cabal/src/Distribution/Simple/GHC/Build/Link.hs index 3f9f00c9d28..ef9f33d79c9 100644 --- a/Cabal/src/Distribution/Simple/GHC/Build/Link.hs +++ b/Cabal/src/Distribution/Simple/GHC/Build/Link.hs @@ -735,7 +735,9 @@ runReplOrWriteFlags ghcProg lbi rflags ghcOpts pkg_name target = Flag out_dir -> do let uid = componentUnitId clbi this_unit = prettyShow uid - reexported_modules = [mn | LibComponentLocalBuildInfo{} <- [clbi], IPI.ExposedModule mn (Just{}) <- componentExposedModules clbi] + reexported_modules = + [ mn | LibComponentLocalBuildInfo{componentExposedModules = exposed_mods} <- [clbi], IPI.ExposedModule mn (Just{}) <- exposed_mods + ] hidden_modules = otherModules bi extra_opts = concat $ From 53bf6b21ee0540ed0682ebfc436b00bba0f36adc Mon Sep 17 00:00:00 2001 From: Artem Pelenitsyn Date: Thu, 31 Oct 2024 21:41:10 -0400 Subject: [PATCH 28/87] Print out which project file we're using by default (fix #8519) Before it's only printed under `-v`. --- .../Distribution/Client/ProjectPlanning.hs | 4 +- .../Includes2/cabal-external-target.out | 2 + .../Backpack/Includes2/cabal-external.out | 2 + .../Includes2/cabal-internal-target.out | 2 + .../Backpack/Includes2/cabal-internal.out | 2 + .../PackageTests/Backpack/Includes2/cov.out | 2 + .../Backpack/Includes3/cabal-external.out | 2 + .../Backpack/Includes3/cabal-internal.out | 5 +- .../Backpack/Includes3/cabal-repo.out | 4 + .../PackageTests/Backpack/Reexport2/cabal.out | 2 + .../PackageTests/Backpack/T6385/cabal.out | 2 + .../Backpack/bkpcabal01/cabal.out | 2 + .../BuildAutogenPackageGuard/cabal.out | 2 + .../PackageTests/BuildDeps/DepCycle/cabal.out | 2 + .../BuildDeps/InternalLibrary1/cabal.out | 2 + .../use-local-version-of-package.out | 4 + .../use-local-package-as-setup-dep.out | 2 + .../PackageTests/BuildToolDepends/setup.out | 2 + .../BuildTools/External/cabal.out | 2 + .../BuildTools/Internal/cabal.out | 2 + .../PackageTests/CmmSources/cabal.out | 2 + .../PackageTests/CmmSourcesDyn/cabal.out | 2 + .../PackageTests/CmmSourcesExe/cabal.out | 2 + .../ConditionalAndImport/cabal.out | 153 ++++++++++++++++++ .../ConditionalAndImport/cabal.test.hs | 2 +- .../PackageTests/ConfigFile/T8487/cabal.out | 2 + .../PackageTests/Configure/cabal.out | 2 + .../PackageTests/CopyHie/cabal.out | 2 + .../PackageTests/CustomSegfault/cabal.out | 2 + .../PackageTests/CustomTestCoverage/cabal.out | 2 + .../PackageTests/CustomWithoutCabal/cabal.out | 2 + .../CustomWithoutCabalDefaultMain/cabal.out | 2 + cabal-testsuite/PackageTests/Exec/cabal.out | 2 + .../PackageTests/ExecModern/cabal.out | 2 + .../PackageTests/ExternalCommand/cabal.out | 2 + .../PackageTests/ExternalCommandEnv/cabal.out | 2 + .../ExternalCommandExitCode/cabal.out | 2 + .../ExternalCommandHelp/cabal.out | 2 + .../PackageTests/ExtraPackages/cabal.out | 2 + .../PackageTests/ExtraProgPath/setup.out | 2 + .../FFI/CSourceDependsStub/cabal.out | 2 + .../PackageTests/FFI/ForeignOptsC/cabal.out | 2 + .../PackageTests/FFI/ForeignOptsCxx/cabal.out | 2 + .../PackageTests/HaddockArgs/hoogle.out | 2 + .../PackageTests/HaddockArgs/quickjump.out | 2 + .../HaddockBuildDepends/cabal.out | 2 + .../HaddockProject/haddock-project.out | 2 + .../PackageTests/HaddockWarn/cabal.out | 4 +- .../InternalLibraries/cabal-per-package.out | 2 + .../PackageTests/InternalLibraries/cabal.out | 2 + .../PackageTests/JS/JsSources/other-arch.out | 2 + .../JS/JsSourcesExe/other-arch.out | 2 + .../ListBin/SelectedComponent/cabal.out | 2 + .../MultiRepl/CabalMacros/cabal.out | 2 + .../MultiRepl/EnabledClosure/cabal.out | 2 + .../MultiRepl/EnabledSucc/cabal.out | 2 + .../MultiRepl/ExtraOptions/cabal.out | 2 + .../NotEnabledFail/cabal.multirepl-a.out | 2 + .../MultipleLibraries/Failing/cabal.out | 2 + .../MultipleLibraries/Successful/cabal.out | 2 + .../MultipleLibraries/T6083Post/cabal.out | 2 + .../T6083PostMixin/cabal.out | 2 + .../MultipleLibraries/T6083Pre/cabal.out | 2 + .../MultipleLibraries/T6083PreMixin/cabal.out | 2 + .../MultipleLibraries/T6894/cabal.out | 2 + .../CmdBench/MultipleBenchmarks/cabal.out | 4 + .../NewBuild/CmdBench/OptionsFlag/cabal.out | 2 + .../NewBuild/CmdBench/WarningRTS/cabal.out | 6 + .../NewBuild/CmdBuild/OnlyConfigure/cabal.out | 6 + .../NewBuild/CmdExec/GhcInvocation/cabal.out | 4 + .../NewBuild/CmdExec/RunExe/cabal.out | 4 + .../NewBuild/CmdRepl/CustomSetup/cabal.out | 2 + .../NewBuild/CmdRun/Datafiles/cabal.out | 4 + .../NewBuild/CmdRun/ExeAndLib/cabal.out | 4 + .../CmdRun/ExitCodePropagation/cabal.out | 2 + .../NewBuild/CmdRun/MultipleExes/cabal.out | 10 ++ .../CmdRun/MultiplePackages/cabal.out | 16 ++ .../NewBuild/CmdRun/RunMainBad/cabal.out | 2 + .../NewBuild/CmdRun/Script/cabal.out | 2 + .../NewBuild/CmdRun/ScriptBad/cabal.out | 2 + .../NewBuild/CmdRun/ScriptLiterate/cabal.out | 2 + .../NewBuild/CmdRun/Single/cabal.out | 12 ++ .../NewBuild/CmdRun/WarningRTS/cabal.out | 6 + .../NewBuild/CmdTest/OptionsFlag/cabal.out | 2 + .../NewBuild/CmdTest/WarningRTS/cabal.out | 6 + .../NewBuild/MonitorCabalFiles/cabal.out | 4 + .../PackageTests/NewBuild/T3827/cabal.out | 2 + .../PackageTests/NewBuild/T3978/cabal.out | 2 + .../PackageTests/NewBuild/T4017/cabal.out | 2 + .../PackageTests/NewBuild/T4405/cabal.out | 4 + .../PackageTests/NewBuild/T4477/cabal.out | 2 + .../PackageTests/NewBuild/T8875/cabal.out | 2 + .../NewConfigure/ConfigFile/cabal.out | 6 + .../LocalConfigOverwrite/cabal.out | 10 +- .../NewFreeze/BuildTools/new_freeze.out | 8 + .../NewFreeze/Flags/new_freeze.out | 8 + .../NewFreeze/FreezeFile/new_freeze.out | 20 +++ .../NewHaddock/DisableDoc/cabal.out | 2 + .../PackageTests/NewHaddock/Fails/cabal.out | 4 + .../HaddockForHackageCmdOutput/cabal.out | 2 + .../HaddockOutput/HaddockOutputCmd/cabal.out | 2 + .../HaddockOutputConfig/cabal.out | 2 + .../NewHaddock/ImplyDependencies/cabal.out | 2 + .../DeterministicTrivial/deterministic.out | 4 +- .../PackageTests/NewSdist/Globbing/cabal.out | 2 + .../ManyDataFiles/many-data-files.out | 2 + .../NewSdist/MultiTarget/all-output-dir.out | 2 + .../NewSdist/MultiTarget/all-test-sute.out | 2 + .../PackageTests/NewSdist/MultiTarget/all.out | 2 + .../MultiTarget/list-sources-output-dir.out | 2 + .../MultiTarget/multi-archive-to-stdout.out | 2 + .../MultiTarget/multi-list-sources.out | 2 + .../NewSdist/MultiTarget/multi-target.out | 2 + .../MultiTarget/target-remote-package.out | 2 + .../MultiTarget/valid-and-test-suite.out | 2 + .../NewSdist/NullTerminated/cabal.out | Bin 41 -> 107 bytes .../PackageTests/OfflineFlag/offlineFlag.out | 8 + .../PackageDB/cabal-fail-no-base.out | 2 + .../PackageDB/cabal-fail-no-p.out | 2 + .../PackageDB/cabal-fail-no-packagedbs.out | 2 + .../PackageDB/cabal-manual-packagedb.out | 2 + .../PackageDB/cabal-packagedb.out | 2 + .../PackageTests/Path/Config/cabal.out | 36 +++++ .../Project/CoverageProject/cabal.out | 2 + .../T4154/install-time-with-constraint.out | 2 + .../PackageTests/Regression/T4202/cabal.out | 6 + .../PackageTests/Regression/T4720/cabal.out | 2 + .../PackageTests/Regression/T4798/cabal.out | 2 + .../PackageTests/Regression/T4986/cabal.out | 4 +- .../PackageTests/Regression/T5213/cabal.out | 2 + .../Regression/T5213ExeCoverage/cabal.out | 2 + .../PackageTests/Regression/T5309/cabal.out | 6 + .../Regression/T5318/sdist-list-sources.out | 2 + .../PackageTests/Regression/T5677/cabal.out | 2 + .../PackageTests/Regression/T6334/cabal.out | 2 + .../PackageTests/Regression/T6440/cabal.out | 2 + .../PackageTests/Regression/T6853/cabal.out | 2 + .../Regression/T6961/DepExternal/cabal.out | 2 + .../Regression/T6961/DepInternal/cabal.out | 2 + .../Regression/T6961/Exe/cabal.out | 2 + .../Regression/T6961/Test/cabal.out | 2 + .../Regression/T7234/Fail/cabal.out | 2 + .../Regression/T7234/Success/cabal.out | 2 + .../PackageTests/Regression/T8507/cabal.out | 2 + .../PackageTests/Regression/T9640/cabal.out | 2 + .../PackageTests/Regression/T9756/cabal.out | 2 + .../RelativePathProjectImports/cabal.out | 10 ++ .../ReplNoLoad/cabal.exec-no-load.out | 2 + .../ReplNoLoad/cabal.exec-normal.out | 2 + .../ReplNoLoad/cabal.lib-no-load.out | 2 + .../ReplNoLoad/cabal.lib-normal.out | 2 + ...l.multiple-repl-options-multiple-flags.out | 2 + .../cabal.multiple-repl-options.out | 2 + ...e-repl-options-multiple-flags-negative.out | 2 + ...bal.single-repl-options-multiple-flags.out | 2 + .../ReplOptions/cabal.single-repl-options.out | 2 + .../PackageTests/SDist/T5195and5349/cabal.out | 2 + .../PackageTests/SDist/T7028/cabal.out | 2 + .../PackageTests/SDist/T7124/cabal-list.out | 2 + .../PackageTests/SDist/T7124/cabal.out | 2 + .../PackageTests/SDist/T7698/cabal.out | 2 + .../PackageTests/SDist/T8817/cabal.out | 2 + .../ShowBuildInfo/A/build-info-all.out | 2 + .../ShowBuildInfo/A/build-info-exe.out | 2 + .../ShowBuildInfo/A/remove-outdated.out | 4 + .../CompileFail/compile-fail.out | 4 + .../ShowBuildInfo/Complex/single.out | 10 ++ .../PackageTests/TestCodeGenerator/cabal.out | 2 + .../TestSuiteTests/ExeV10/cabal.out | 2 + .../TestSuiteTests/ExeV10/coverage.out | 2 + .../PackageTests/VersionPriority/0-local.out | 2 + .../PackageTests/VersionPriority/1-local.out | 10 ++ .../PackageTests/VersionPriority/1-web.out | 16 ++ .../PackageTests/VersionPriority/2-local.out | 18 +++ .../PackageTests/VersionPriority/2-web.out | 24 +++ .../PackageTests/VersionPriority/3-web.out | 34 ++++ changelog.d/pr-10507 | 16 ++ 177 files changed, 789 insertions(+), 9 deletions(-) create mode 100644 changelog.d/pr-10507 diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning.hs b/cabal-install/src/Distribution/Client/ProjectPlanning.hs index 50423b2d1df..98ef7b67789 100644 --- a/cabal-install/src/Distribution/Client/ProjectPlanning.hs +++ b/cabal-install/src/Distribution/Client/ProjectPlanning.hs @@ -396,8 +396,8 @@ rebuildProjectConfig sequence_ [ do - info verbosity . render . vcat $ - text "this build was affected by the following (project) config files:" + notice verbosity . render . vcat $ + text "Configuration is affected by the following files:" : [text "-" <+> docProjectConfigPath path] | Explicit path <- Set.toList $ projectConfigProvenance projectConfig ] diff --git a/cabal-testsuite/PackageTests/Backpack/Includes2/cabal-external-target.out b/cabal-testsuite/PackageTests/Backpack/Includes2/cabal-external-target.out index ff8d8b3f518..abca8b3cc98 100644 --- a/cabal-testsuite/PackageTests/Backpack/Includes2/cabal-external-target.out +++ b/cabal-testsuite/PackageTests/Backpack/Includes2/cabal-external-target.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.external.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Backpack/Includes2/cabal-external.out b/cabal-testsuite/PackageTests/Backpack/Includes2/cabal-external.out index 1c42b18b90a..d5aca3080fd 100644 --- a/cabal-testsuite/PackageTests/Backpack/Includes2/cabal-external.out +++ b/cabal-testsuite/PackageTests/Backpack/Includes2/cabal-external.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.external.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Backpack/Includes2/cabal-internal-target.out b/cabal-testsuite/PackageTests/Backpack/Includes2/cabal-internal-target.out index 2a91ccc557a..f9dfec2b574 100644 --- a/cabal-testsuite/PackageTests/Backpack/Includes2/cabal-internal-target.out +++ b/cabal-testsuite/PackageTests/Backpack/Includes2/cabal-internal-target.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.internal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Backpack/Includes2/cabal-internal.out b/cabal-testsuite/PackageTests/Backpack/Includes2/cabal-internal.out index 42f77888c8c..1bf07c32034 100644 --- a/cabal-testsuite/PackageTests/Backpack/Includes2/cabal-internal.out +++ b/cabal-testsuite/PackageTests/Backpack/Includes2/cabal-internal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.internal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Backpack/Includes2/cov.out b/cabal-testsuite/PackageTests/Backpack/Includes2/cov.out index 0d1b2c027b5..dde9cb4b37a 100644 --- a/cabal-testsuite/PackageTests/Backpack/Includes2/cov.out +++ b/cabal-testsuite/PackageTests/Backpack/Includes2/cov.out @@ -1,4 +1,6 @@ # cabal test +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Backpack/Includes3/cabal-external.out b/cabal-testsuite/PackageTests/Backpack/Includes3/cabal-external.out index 6e2abbf4a0c..5c8ce031497 100644 --- a/cabal-testsuite/PackageTests/Backpack/Includes3/cabal-external.out +++ b/cabal-testsuite/PackageTests/Backpack/Includes3/cabal-external.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.external.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Backpack/Includes3/cabal-internal.out b/cabal-testsuite/PackageTests/Backpack/Includes3/cabal-internal.out index f7e2f2d75ef..9597b8ca719 100644 --- a/cabal-testsuite/PackageTests/Backpack/Includes3/cabal-internal.out +++ b/cabal-testsuite/PackageTests/Backpack/Includes3/cabal-internal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.internal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -18,8 +20,7 @@ Configuring library 'indef' instantiated with Data.Map = containers-:Data.Map for I-0.1.0.0... Preprocessing library 'indef' for I-0.1.0.0... -Building library 'indef' instantiated with - Data.Map = containers-:Data.Map +Building library 'indef' instantiated with Data.Map = containers-:Data.Map for I-0.1.0.0... Configuring executable 'exe' for I-0.1.0.0... Preprocessing executable 'exe' for I-0.1.0.0... diff --git a/cabal-testsuite/PackageTests/Backpack/Includes3/cabal-repo.out b/cabal-testsuite/PackageTests/Backpack/Includes3/cabal-repo.out index d6fb3844873..d6033fc608c 100644 --- a/cabal-testsuite/PackageTests/Backpack/Includes3/cabal-repo.out +++ b/cabal-testsuite/PackageTests/Backpack/Includes3/cabal-repo.out @@ -1,6 +1,10 @@ # cabal v2-update +Configuration is affected by the following files: +- cabal.repo.project Downloading the latest package list from test-local-repo # cabal v2-build +Configuration is affected by the following files: +- cabal.repo.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Backpack/Reexport2/cabal.out b/cabal-testsuite/PackageTests/Backpack/Reexport2/cabal.out index 31c9428dcaf..2709b24a4d8 100644 --- a/cabal-testsuite/PackageTests/Backpack/Reexport2/cabal.out +++ b/cabal-testsuite/PackageTests/Backpack/Reexport2/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Error: Problem with module re-exports: diff --git a/cabal-testsuite/PackageTests/Backpack/T6385/cabal.out b/cabal-testsuite/PackageTests/Backpack/T6385/cabal.out index ad3387bf28b..7147f2ead8b 100644 --- a/cabal-testsuite/PackageTests/Backpack/T6385/cabal.out +++ b/cabal-testsuite/PackageTests/Backpack/T6385/cabal.out @@ -1,6 +1,8 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Backpack/bkpcabal01/cabal.out b/cabal-testsuite/PackageTests/Backpack/bkpcabal01/cabal.out index 3ebec1cc5c1..6308ceaefd3 100644 --- a/cabal-testsuite/PackageTests/Backpack/bkpcabal01/cabal.out +++ b/cabal-testsuite/PackageTests/Backpack/bkpcabal01/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/BuildAutogenPackageGuard/cabal.out b/cabal-testsuite/PackageTests/BuildAutogenPackageGuard/cabal.out index 512a50e37ee..8224b23be46 100644 --- a/cabal-testsuite/PackageTests/BuildAutogenPackageGuard/cabal.out +++ b/cabal-testsuite/PackageTests/BuildAutogenPackageGuard/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/BuildDeps/DepCycle/cabal.out b/cabal-testsuite/PackageTests/BuildDeps/DepCycle/cabal.out index 966c934480b..053a770072e 100644 --- a/cabal-testsuite/PackageTests/BuildDeps/DepCycle/cabal.out +++ b/cabal-testsuite/PackageTests/BuildDeps/DepCycle/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Error: Dependency cycle between the following components: diff --git a/cabal-testsuite/PackageTests/BuildDeps/InternalLibrary1/cabal.out b/cabal-testsuite/PackageTests/BuildDeps/InternalLibrary1/cabal.out index f00101f9ba2..eced886a5e8 100644 --- a/cabal-testsuite/PackageTests/BuildDeps/InternalLibrary1/cabal.out +++ b/cabal-testsuite/PackageTests/BuildDeps/InternalLibrary1/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/BuildTargets/UseLocalPackage/use-local-version-of-package.out b/cabal-testsuite/PackageTests/BuildTargets/UseLocalPackage/use-local-version-of-package.out index a1636d8cbff..92f3698edc6 100644 --- a/cabal-testsuite/PackageTests/BuildTargets/UseLocalPackage/use-local-version-of-package.out +++ b/cabal-testsuite/PackageTests/BuildTargets/UseLocalPackage/use-local-version-of-package.out @@ -1,6 +1,8 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -11,6 +13,8 @@ Building executable 'my-exe' for pkg-1.0... # pkg my-exe local pkg-1.0 # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: diff --git a/cabal-testsuite/PackageTests/BuildTargets/UseLocalPackageForSetup/use-local-package-as-setup-dep.out b/cabal-testsuite/PackageTests/BuildTargets/UseLocalPackageForSetup/use-local-package-as-setup-dep.out index 482ff118031..de46b91c396 100644 --- a/cabal-testsuite/PackageTests/BuildTargets/UseLocalPackageForSetup/use-local-package-as-setup-dep.out +++ b/cabal-testsuite/PackageTests/BuildTargets/UseLocalPackageForSetup/use-local-package-as-setup-dep.out @@ -1,6 +1,8 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: diff --git a/cabal-testsuite/PackageTests/BuildToolDepends/setup.out b/cabal-testsuite/PackageTests/BuildToolDepends/setup.out index 9a873303de8..1c2bd108bca 100644 --- a/cabal-testsuite/PackageTests/BuildToolDepends/setup.out +++ b/cabal-testsuite/PackageTests/BuildToolDepends/setup.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/BuildTools/External/cabal.out b/cabal-testsuite/PackageTests/BuildTools/External/cabal.out index b61bf0f1886..8fee1586cdc 100644 --- a/cabal-testsuite/PackageTests/BuildTools/External/cabal.out +++ b/cabal-testsuite/PackageTests/BuildTools/External/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/BuildTools/Internal/cabal.out b/cabal-testsuite/PackageTests/BuildTools/Internal/cabal.out index 37cab90e663..73d2639a82f 100644 --- a/cabal-testsuite/PackageTests/BuildTools/Internal/cabal.out +++ b/cabal-testsuite/PackageTests/BuildTools/Internal/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/CmmSources/cabal.out b/cabal-testsuite/PackageTests/CmmSources/cabal.out index 1664b64c7fc..f05bf7aa5a4 100644 --- a/cabal-testsuite/PackageTests/CmmSources/cabal.out +++ b/cabal-testsuite/PackageTests/CmmSources/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/CmmSourcesDyn/cabal.out b/cabal-testsuite/PackageTests/CmmSourcesDyn/cabal.out index 1664b64c7fc..f05bf7aa5a4 100644 --- a/cabal-testsuite/PackageTests/CmmSourcesDyn/cabal.out +++ b/cabal-testsuite/PackageTests/CmmSourcesDyn/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/CmmSourcesExe/cabal.out b/cabal-testsuite/PackageTests/CmmSourcesExe/cabal.out index 77b94906515..8ad5a59bac4 100644 --- a/cabal-testsuite/PackageTests/CmmSourcesExe/cabal.out +++ b/cabal-testsuite/PackageTests/CmmSourcesExe/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out b/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out index 7a6333d21bc..be9a79bbc22 100644 --- a/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out @@ -1,6 +1,11 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal v2-run +Configuration is affected by the following files: +- cabal.project +Configuration is affected by the following files: +- extra.project + imported by: cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -62,6 +67,15 @@ cyclical import of cyclical-2-out-out-self-b.config; imported by: cyclical-2-out-out-self.project # checking that cyclical check doesn't false-positive on same file names in different folders; hoping within a folder and then into a subfolder # cabal v2-build +Configuration is affected by the following files: +- noncyclical-same-filename-a.config + imported by: noncyclical-same-filename-a.project +Configuration is affected by the following files: +- noncyclical-same-filename-a.project +Configuration is affected by the following files: +- same-filename/noncyclical-same-filename-a.config + imported by: noncyclical-same-filename-a.config + imported by: noncyclical-same-filename-a.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -71,6 +85,15 @@ Preprocessing library for my-0.1... Building library for my-0.1... # checking that cyclical check doesn't false-positive on same file names in different folders; hoping into a subfolder and then back out again # cabal v2-build +Configuration is affected by the following files: +- noncyclical-same-filename-b.config + imported by: same-filename/noncyclical-same-filename-b.config + imported by: noncyclical-same-filename-b.project +Configuration is affected by the following files: +- noncyclical-same-filename-b.project +Configuration is affected by the following files: +- same-filename/noncyclical-same-filename-b.config + imported by: noncyclical-same-filename-b.project Up to date # checking that cyclical check catches a same file name that imports itself # cabal v2-build @@ -101,9 +124,139 @@ cyclical import of cyclical-same-filename-out-out-back.config; imported by: cyclical-same-filename-out-out-back.project # checking that imports work skipping into a subfolder and then back out again and again # cabal v2-build +Configuration is affected by the following files: +- hops-0.project +Configuration is affected by the following files: +- hops-2.config + imported by: hops/hops-1.config + imported by: hops-0.project +Configuration is affected by the following files: +- hops-4.config + imported by: hops/hops-3.config + imported by: hops-2.config + imported by: hops/hops-1.config + imported by: hops-0.project +Configuration is affected by the following files: +- hops-6.config + imported by: hops/hops-5.config + imported by: hops-4.config + imported by: hops/hops-3.config + imported by: hops-2.config + imported by: hops/hops-1.config + imported by: hops-0.project +Configuration is affected by the following files: +- hops-8.config + imported by: hops/hops-7.config + imported by: hops-6.config + imported by: hops/hops-5.config + imported by: hops-4.config + imported by: hops/hops-3.config + imported by: hops-2.config + imported by: hops/hops-1.config + imported by: hops-0.project +Configuration is affected by the following files: +- hops/hops-1.config + imported by: hops-0.project +Configuration is affected by the following files: +- hops/hops-3.config + imported by: hops-2.config + imported by: hops/hops-1.config + imported by: hops-0.project +Configuration is affected by the following files: +- hops/hops-5.config + imported by: hops-4.config + imported by: hops/hops-3.config + imported by: hops-2.config + imported by: hops/hops-1.config + imported by: hops-0.project +Configuration is affected by the following files: +- hops/hops-7.config + imported by: hops-6.config + imported by: hops/hops-5.config + imported by: hops-4.config + imported by: hops/hops-3.config + imported by: hops-2.config + imported by: hops/hops-1.config + imported by: hops-0.project +Configuration is affected by the following files: +- hops/hops-9.config + imported by: hops-8.config + imported by: hops/hops-7.config + imported by: hops-6.config + imported by: hops/hops-5.config + imported by: hops-4.config + imported by: hops/hops-3.config + imported by: hops-2.config + imported by: hops/hops-1.config + imported by: hops-0.project Up to date # checking conflicting constraints skipping into a subfolder and then back out again and again # cabal v2-build +Configuration is affected by the following files: +- oops-0.project +Configuration is affected by the following files: +- oops-2.config + imported by: oops/oops-1.config + imported by: oops-0.project +Configuration is affected by the following files: +- oops-4.config + imported by: oops/oops-3.config + imported by: oops-2.config + imported by: oops/oops-1.config + imported by: oops-0.project +Configuration is affected by the following files: +- oops-6.config + imported by: oops/oops-5.config + imported by: oops-4.config + imported by: oops/oops-3.config + imported by: oops-2.config + imported by: oops/oops-1.config + imported by: oops-0.project +Configuration is affected by the following files: +- oops-8.config + imported by: oops/oops-7.config + imported by: oops-6.config + imported by: oops/oops-5.config + imported by: oops-4.config + imported by: oops/oops-3.config + imported by: oops-2.config + imported by: oops/oops-1.config + imported by: oops-0.project +Configuration is affected by the following files: +- oops/oops-1.config + imported by: oops-0.project +Configuration is affected by the following files: +- oops/oops-3.config + imported by: oops-2.config + imported by: oops/oops-1.config + imported by: oops-0.project +Configuration is affected by the following files: +- oops/oops-5.config + imported by: oops-4.config + imported by: oops/oops-3.config + imported by: oops-2.config + imported by: oops/oops-1.config + imported by: oops-0.project +Configuration is affected by the following files: +- oops/oops-7.config + imported by: oops-6.config + imported by: oops/oops-5.config + imported by: oops-4.config + imported by: oops/oops-3.config + imported by: oops-2.config + imported by: oops/oops-1.config + imported by: oops-0.project +Configuration is affected by the following files: +- oops/oops-9.config + imported by: oops-8.config + imported by: oops/oops-7.config + imported by: oops-6.config + imported by: oops/oops-5.config + imported by: oops-4.config + imported by: oops/oops-3.config + imported by: oops-2.config + imported by: oops/oops-1.config + imported by: oops-0.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.test.hs b/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.test.hs index c1aea47ce85..b5429e39776 100644 --- a/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.test.hs +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.test.hs @@ -111,7 +111,7 @@ main = cabalTest . withRepo "repo" . recordMode RecordMarked $ do -- +-- hops/hops-9.config (no further imports so not cyclical) log "checking that imports work skipping into a subfolder and then back out again and again" hopping <- cabal' "v2-build" [ "--project-file=hops-0.project" ] - assertOutputContains "this build was affected by the following (project) config files:" hopping + assertOutputContains "Configuration is affected by the following files" hopping assertOutputContains "- hops-0.project" hopping assertOutputContains diff --git a/cabal-testsuite/PackageTests/ConfigFile/T8487/cabal.out b/cabal-testsuite/PackageTests/ConfigFile/T8487/cabal.out index bf17f93ac6c..507f9fc2ccb 100644 --- a/cabal-testsuite/PackageTests/ConfigFile/T8487/cabal.out +++ b/cabal-testsuite/PackageTests/ConfigFile/T8487/cabal.out @@ -1,4 +1,6 @@ # cabal build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O2 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Configure/cabal.out b/cabal-testsuite/PackageTests/Configure/cabal.out index 79a33e68892..019ac30955f 100644 --- a/cabal-testsuite/PackageTests/Configure/cabal.out +++ b/cabal-testsuite/PackageTests/Configure/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/CopyHie/cabal.out b/cabal-testsuite/PackageTests/CopyHie/cabal.out index a45daf37831..d6e8a9f3f42 100644 --- a/cabal-testsuite/PackageTests/CopyHie/cabal.out +++ b/cabal-testsuite/PackageTests/CopyHie/cabal.out @@ -1,6 +1,8 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/CustomSegfault/cabal.out b/cabal-testsuite/PackageTests/CustomSegfault/cabal.out index 80f27e69b58..2c7f2ea0ddc 100644 --- a/cabal-testsuite/PackageTests/CustomSegfault/cabal.out +++ b/cabal-testsuite/PackageTests/CustomSegfault/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/CustomTestCoverage/cabal.out b/cabal-testsuite/PackageTests/CustomTestCoverage/cabal.out index 8597dcc94df..f46d372f357 100644 --- a/cabal-testsuite/PackageTests/CustomTestCoverage/cabal.out +++ b/cabal-testsuite/PackageTests/CustomTestCoverage/cabal.out @@ -1,4 +1,6 @@ # cabal test +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/CustomWithoutCabal/cabal.out b/cabal-testsuite/PackageTests/CustomWithoutCabal/cabal.out index 74d7f6adf31..b2e823ff426 100644 --- a/cabal-testsuite/PackageTests/CustomWithoutCabal/cabal.out +++ b/cabal-testsuite/PackageTests/CustomWithoutCabal/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/CustomWithoutCabalDefaultMain/cabal.out b/cabal-testsuite/PackageTests/CustomWithoutCabalDefaultMain/cabal.out index 0e26184375c..49829f86e53 100644 --- a/cabal-testsuite/PackageTests/CustomWithoutCabalDefaultMain/cabal.out +++ b/cabal-testsuite/PackageTests/CustomWithoutCabalDefaultMain/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Exec/cabal.out b/cabal-testsuite/PackageTests/Exec/cabal.out index 7ce2cfb90f0..28952d14e4e 100644 --- a/cabal-testsuite/PackageTests/Exec/cabal.out +++ b/cabal-testsuite/PackageTests/Exec/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ExecModern/cabal.out b/cabal-testsuite/PackageTests/ExecModern/cabal.out index fc4e1b601b3..0e1b514edcb 100644 --- a/cabal-testsuite/PackageTests/ExecModern/cabal.out +++ b/cabal-testsuite/PackageTests/ExecModern/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ExternalCommand/cabal.out b/cabal-testsuite/PackageTests/ExternalCommand/cabal.out index 1c4c24db55c..a5139bb22a6 100644 --- a/cabal-testsuite/PackageTests/ExternalCommand/cabal.out +++ b/cabal-testsuite/PackageTests/ExternalCommand/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ExternalCommandEnv/cabal.out b/cabal-testsuite/PackageTests/ExternalCommandEnv/cabal.out index 1c4c24db55c..a5139bb22a6 100644 --- a/cabal-testsuite/PackageTests/ExternalCommandEnv/cabal.out +++ b/cabal-testsuite/PackageTests/ExternalCommandEnv/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ExternalCommandExitCode/cabal.out b/cabal-testsuite/PackageTests/ExternalCommandExitCode/cabal.out index 1c4c24db55c..a5139bb22a6 100644 --- a/cabal-testsuite/PackageTests/ExternalCommandExitCode/cabal.out +++ b/cabal-testsuite/PackageTests/ExternalCommandExitCode/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ExternalCommandHelp/cabal.out b/cabal-testsuite/PackageTests/ExternalCommandHelp/cabal.out index 1c4c24db55c..a5139bb22a6 100644 --- a/cabal-testsuite/PackageTests/ExternalCommandHelp/cabal.out +++ b/cabal-testsuite/PackageTests/ExternalCommandHelp/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ExtraPackages/cabal.out b/cabal-testsuite/PackageTests/ExtraPackages/cabal.out index 95c356b73f6..0ae87fbc8ef 100644 --- a/cabal-testsuite/PackageTests/ExtraPackages/cabal.out +++ b/cabal-testsuite/PackageTests/ExtraPackages/cabal.out @@ -1,6 +1,8 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ExtraProgPath/setup.out b/cabal-testsuite/PackageTests/ExtraProgPath/setup.out index 01fc2e5cfc0..a64476a2939 100644 --- a/cabal-testsuite/PackageTests/ExtraProgPath/setup.out +++ b/cabal-testsuite/PackageTests/ExtraProgPath/setup.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Warning: cannot determine version of /pkg-config : "" Resolving dependencies... diff --git a/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/cabal.out b/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/cabal.out index cdfe4ab10de..d7d7f802298 100644 --- a/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/cabal.out +++ b/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/FFI/ForeignOptsC/cabal.out b/cabal-testsuite/PackageTests/FFI/ForeignOptsC/cabal.out index 97e0b60ec7c..2db68152992 100644 --- a/cabal-testsuite/PackageTests/FFI/ForeignOptsC/cabal.out +++ b/cabal-testsuite/PackageTests/FFI/ForeignOptsC/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/FFI/ForeignOptsCxx/cabal.out b/cabal-testsuite/PackageTests/FFI/ForeignOptsCxx/cabal.out index 522304298c4..a95271222aa 100644 --- a/cabal-testsuite/PackageTests/FFI/ForeignOptsCxx/cabal.out +++ b/cabal-testsuite/PackageTests/FFI/ForeignOptsCxx/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/HaddockArgs/hoogle.out b/cabal-testsuite/PackageTests/HaddockArgs/hoogle.out index 3aeb5d42e04..4f2b2103045 100644 --- a/cabal-testsuite/PackageTests/HaddockArgs/hoogle.out +++ b/cabal-testsuite/PackageTests/HaddockArgs/hoogle.out @@ -1,6 +1,8 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/HaddockArgs/quickjump.out b/cabal-testsuite/PackageTests/HaddockArgs/quickjump.out index c892ec8e80a..4e304d38ece 100644 --- a/cabal-testsuite/PackageTests/HaddockArgs/quickjump.out +++ b/cabal-testsuite/PackageTests/HaddockArgs/quickjump.out @@ -1,6 +1,8 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/HaddockBuildDepends/cabal.out b/cabal-testsuite/PackageTests/HaddockBuildDepends/cabal.out index 8eff18e3d6c..8b0daaa45ad 100644 --- a/cabal-testsuite/PackageTests/HaddockBuildDepends/cabal.out +++ b/cabal-testsuite/PackageTests/HaddockBuildDepends/cabal.out @@ -1,6 +1,8 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/HaddockProject/haddock-project.out b/cabal-testsuite/PackageTests/HaddockProject/haddock-project.out index bfa16bf91c5..4f21f859ad9 100644 --- a/cabal-testsuite/PackageTests/HaddockProject/haddock-project.out +++ b/cabal-testsuite/PackageTests/HaddockProject/haddock-project.out @@ -3,6 +3,8 @@ Downloading the latest package list from test-local-repo # cabal haddock-project Warning: haddock-project command is experimental, it might break in the future Resolving dependencies... +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - async-2.2.4 (lib) (requires build) diff --git a/cabal-testsuite/PackageTests/HaddockWarn/cabal.out b/cabal-testsuite/PackageTests/HaddockWarn/cabal.out index fae3d5423de..bdf609a5940 100644 --- a/cabal-testsuite/PackageTests/HaddockWarn/cabal.out +++ b/cabal-testsuite/PackageTests/HaddockWarn/cabal.out @@ -1,3 +1,5 @@ # cabal v2-haddock +Configuration is affected by the following files: +- cabal.project Resolving dependencies... -No documentation was generated as this package does not contain a library. Perhaps you want to use the --haddock-all flag, or one or more of the --haddock-executables, --haddock-tests, --haddock-benchmarks or --haddock-internal flags. \ No newline at end of file +No documentation was generated as this package does not contain a library. Perhaps you want to use the --haddock-all flag, or one or more of the --haddock-executables, --haddock-tests, --haddock-benchmarks or --haddock-internal flags. diff --git a/cabal-testsuite/PackageTests/InternalLibraries/cabal-per-package.out b/cabal-testsuite/PackageTests/InternalLibraries/cabal-per-package.out index 72a24d04059..fabb3eb96bf 100644 --- a/cabal-testsuite/PackageTests/InternalLibraries/cabal-per-package.out +++ b/cabal-testsuite/PackageTests/InternalLibraries/cabal-per-package.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Error: Internal libraries only supported with per-component builds. diff --git a/cabal-testsuite/PackageTests/InternalLibraries/cabal.out b/cabal-testsuite/PackageTests/InternalLibraries/cabal.out index fba3d64f472..dce636019a9 100644 --- a/cabal-testsuite/PackageTests/InternalLibraries/cabal.out +++ b/cabal-testsuite/PackageTests/InternalLibraries/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/JS/JsSources/other-arch.out b/cabal-testsuite/PackageTests/JS/JsSources/other-arch.out index a07cc17dd35..5a9e791cfce 100644 --- a/cabal-testsuite/PackageTests/JS/JsSources/other-arch.out +++ b/cabal-testsuite/PackageTests/JS/JsSources/other-arch.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/JS/JsSourcesExe/other-arch.out b/cabal-testsuite/PackageTests/JS/JsSourcesExe/other-arch.out index 96e1bbadcf9..441e8b14ba4 100644 --- a/cabal-testsuite/PackageTests/JS/JsSourcesExe/other-arch.out +++ b/cabal-testsuite/PackageTests/JS/JsSourcesExe/other-arch.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ListBin/SelectedComponent/cabal.out b/cabal-testsuite/PackageTests/ListBin/SelectedComponent/cabal.out index 3728cc3e70e..a3613ceff25 100644 --- a/cabal-testsuite/PackageTests/ListBin/SelectedComponent/cabal.out +++ b/cabal-testsuite/PackageTests/ListBin/SelectedComponent/cabal.out @@ -1,4 +1,6 @@ # cabal list-bin +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/MultiRepl/CabalMacros/cabal.out b/cabal-testsuite/PackageTests/MultiRepl/CabalMacros/cabal.out index 9c141d7ac42..ec51444c0e4 100644 --- a/cabal-testsuite/PackageTests/MultiRepl/CabalMacros/cabal.out +++ b/cabal-testsuite/PackageTests/MultiRepl/CabalMacros/cabal.out @@ -1,4 +1,6 @@ # cabal v2-repl +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/MultiRepl/EnabledClosure/cabal.out b/cabal-testsuite/PackageTests/MultiRepl/EnabledClosure/cabal.out index 8944a7dba34..90c934d9535 100644 --- a/cabal-testsuite/PackageTests/MultiRepl/EnabledClosure/cabal.out +++ b/cabal-testsuite/PackageTests/MultiRepl/EnabledClosure/cabal.out @@ -1,4 +1,6 @@ # cabal v2-repl +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/MultiRepl/EnabledSucc/cabal.out b/cabal-testsuite/PackageTests/MultiRepl/EnabledSucc/cabal.out index 6571793245e..e077254e102 100644 --- a/cabal-testsuite/PackageTests/MultiRepl/EnabledSucc/cabal.out +++ b/cabal-testsuite/PackageTests/MultiRepl/EnabledSucc/cabal.out @@ -1,4 +1,6 @@ # cabal v2-repl +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/cabal.out b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/cabal.out index 2032e6d4542..ce8177d9bd9 100644 --- a/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/cabal.out +++ b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/cabal.out @@ -1,4 +1,6 @@ # cabal v2-repl +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/MultiRepl/NotEnabledFail/cabal.multirepl-a.out b/cabal-testsuite/PackageTests/MultiRepl/NotEnabledFail/cabal.multirepl-a.out index 3b38560a7d4..108004e859e 100644 --- a/cabal-testsuite/PackageTests/MultiRepl/NotEnabledFail/cabal.multirepl-a.out +++ b/cabal-testsuite/PackageTests/MultiRepl/NotEnabledFail/cabal.multirepl-a.out @@ -1,4 +1,6 @@ # cabal v2-repl +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Error: [Cabal-7076] Cannot open a repl for multiple components at once. The targets 'pkg-a' and 'pkg-b' refer to different components.. diff --git a/cabal-testsuite/PackageTests/MultipleLibraries/Failing/cabal.out b/cabal-testsuite/PackageTests/MultipleLibraries/Failing/cabal.out index 5dee45c63bd..a1a6e519a55 100644 --- a/cabal-testsuite/PackageTests/MultipleLibraries/Failing/cabal.out +++ b/cabal-testsuite/PackageTests/MultipleLibraries/Failing/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: diff --git a/cabal-testsuite/PackageTests/MultipleLibraries/Successful/cabal.out b/cabal-testsuite/PackageTests/MultipleLibraries/Successful/cabal.out index 272b9fc6b4c..48ccbdc36cb 100644 --- a/cabal-testsuite/PackageTests/MultipleLibraries/Successful/cabal.out +++ b/cabal-testsuite/PackageTests/MultipleLibraries/Successful/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/MultipleLibraries/T6083Post/cabal.out b/cabal-testsuite/PackageTests/MultipleLibraries/T6083Post/cabal.out index fb7bb90085f..b0122dc2950 100644 --- a/cabal-testsuite/PackageTests/MultipleLibraries/T6083Post/cabal.out +++ b/cabal-testsuite/PackageTests/MultipleLibraries/T6083Post/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/MultipleLibraries/T6083PostMixin/cabal.out b/cabal-testsuite/PackageTests/MultipleLibraries/T6083PostMixin/cabal.out index fb7bb90085f..b0122dc2950 100644 --- a/cabal-testsuite/PackageTests/MultipleLibraries/T6083PostMixin/cabal.out +++ b/cabal-testsuite/PackageTests/MultipleLibraries/T6083PostMixin/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/MultipleLibraries/T6083Pre/cabal.out b/cabal-testsuite/PackageTests/MultipleLibraries/T6083Pre/cabal.out index fbeef6a0af7..0eae2556c8c 100644 --- a/cabal-testsuite/PackageTests/MultipleLibraries/T6083Pre/cabal.out +++ b/cabal-testsuite/PackageTests/MultipleLibraries/T6083Pre/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/MultipleLibraries/T6083PreMixin/cabal.out b/cabal-testsuite/PackageTests/MultipleLibraries/T6083PreMixin/cabal.out index fbeef6a0af7..0eae2556c8c 100644 --- a/cabal-testsuite/PackageTests/MultipleLibraries/T6083PreMixin/cabal.out +++ b/cabal-testsuite/PackageTests/MultipleLibraries/T6083PreMixin/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/MultipleLibraries/T6894/cabal.out b/cabal-testsuite/PackageTests/MultipleLibraries/T6894/cabal.out index 8f3f3286d40..8622b4f95be 100644 --- a/cabal-testsuite/PackageTests/MultipleLibraries/T6894/cabal.out +++ b/cabal-testsuite/PackageTests/MultipleLibraries/T6894/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdBench/MultipleBenchmarks/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdBench/MultipleBenchmarks/cabal.out index cff1673e167..8d3e71f53dd 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdBench/MultipleBenchmarks/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdBench/MultipleBenchmarks/cabal.out @@ -1,4 +1,6 @@ # cabal v2-bench +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -10,6 +12,8 @@ Running 1 benchmarks... Benchmark foo: RUNNING... Benchmark foo: FINISH # cabal v2-bench +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - MultipleBenchmarks-1.0 (bench:bar) (first run) diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdBench/OptionsFlag/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdBench/OptionsFlag/cabal.out index 84b8bdd781b..a962f5da6a4 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdBench/OptionsFlag/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdBench/OptionsFlag/cabal.out @@ -1,4 +1,6 @@ # cabal v2-bench +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdBench/WarningRTS/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdBench/WarningRTS/cabal.out index 84eec3eeae3..2f194d22dc1 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdBench/WarningRTS/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdBench/WarningRTS/cabal.out @@ -1,4 +1,6 @@ # cabal bench +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Warning: Some RTS options were found standalone, which affect cabal and not the binary. Please note that +RTS inside the --benchmark-options argument suffices if your goal is to affect the benchmarked binary. For example, use "cabal test --benchmark-options='+RTS -N'" to pass the '-N' RTS option to your binary. Build profile: -w ghc- -O1 @@ -11,6 +13,8 @@ Running 1 benchmarks... Benchmark foo: RUNNING... Benchmark foo: FINISH # cabal bench +Configuration is affected by the following files: +- cabal.project Warning: Some RTS options were found standalone, which affect cabal and not the binary. Please note that +RTS inside the --benchmark-options argument suffices if your goal is to affect the benchmarked binary. For example, use "cabal test --benchmark-options='+RTS -N'" to pass the '-N' RTS option to your binary. Build profile: -w ghc- -O1 In order, the following will be built: @@ -21,6 +25,8 @@ Running 1 benchmarks... Benchmark foo: RUNNING... Benchmark foo: FINISH # cabal bench +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - WarningRTS-1.0 (bench:foo) (first run) diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdBuild/OnlyConfigure/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdBuild/OnlyConfigure/cabal.out index 594f392e735..7de34d52b59 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdBuild/OnlyConfigure/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdBuild/OnlyConfigure/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -7,6 +9,8 @@ In order, the following will be built: Configuring library for OnlyConfigure-1.0... Configuring executable 'foo' for OnlyConfigure-1.0... # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -17,6 +21,8 @@ Configuring library for OnlyConfigure-1.0... Configuring test suite 'bar' for OnlyConfigure-1.0... Configuring executable 'foo' for OnlyConfigure-1.0... # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdExec/GhcInvocation/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdExec/GhcInvocation/cabal.out index 437714d34bd..7e96d11422f 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdExec/GhcInvocation/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdExec/GhcInvocation/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -7,3 +9,5 @@ Configuring library for inplace-dep-1.0... Preprocessing library for inplace-dep-1.0... Building library for inplace-dep-1.0... # cabal v2-exec +Configuration is affected by the following files: +- cabal.project diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdExec/RunExe/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdExec/RunExe/cabal.out index 2ae9f2a0fd4..691cbb03f6f 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdExec/RunExe/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdExec/RunExe/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -7,3 +9,5 @@ Configuring executable 'foo' for RunExe-1.0... Preprocessing executable 'foo' for RunExe-1.0... Building executable 'foo' for RunExe-1.0... # cabal v2-exec +Configuration is affected by the following files: +- cabal.project diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRepl/CustomSetup/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdRepl/CustomSetup/cabal.out index d581aac783e..cc77b3c7b41 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRepl/CustomSetup/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRepl/CustomSetup/cabal.out @@ -1,4 +1,6 @@ # cabal v2-repl +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/cabal.out index 8893a5acdc9..ba2ac3912ac 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -7,6 +9,8 @@ Configuring executable 'foo' for foo-1.0... Preprocessing executable 'foo' for foo-1.0... Building executable 'foo' for foo-1.0... # cabal v2-run +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - foo-1.0 (lib) (first run) diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/ExeAndLib/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdRun/ExeAndLib/cabal.out index 02391a63734..4417a2fb4c8 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRun/ExeAndLib/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/ExeAndLib/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -7,5 +9,7 @@ Configuring executable 'foo' for ExeAndLib-1.0... Preprocessing executable 'foo' for ExeAndLib-1.0... Building executable 'foo' for ExeAndLib-1.0... # cabal v2-run +Configuration is affected by the following files: +- cabal.project Error: [Cabal-7070] The run command is for running executables, but the target 'ExeAndLib' refers to the library ExeAndLib from the package ExeAndLib-1.0. diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/ExitCodePropagation/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdRun/ExitCodePropagation/cabal.out index 0cf6a51332f..d2cbf7245af 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRun/ExitCodePropagation/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/ExitCodePropagation/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/MultipleExes/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdRun/MultipleExes/cabal.out index 2223a88a94c..b5e1175e983 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRun/MultipleExes/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/MultipleExes/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -7,6 +9,8 @@ Configuring executable 'foo' for MultipleExes-1.0... Preprocessing executable 'foo' for MultipleExes-1.0... Building executable 'foo' for MultipleExes-1.0... # cabal v2-run +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - MultipleExes-1.0 (exe:bar) (first run) @@ -14,12 +18,18 @@ Configuring executable 'bar' for MultipleExes-1.0... Preprocessing executable 'bar' for MultipleExes-1.0... Building executable 'bar' for MultipleExes-1.0... # cabal v2-run +Configuration is affected by the following files: +- cabal.project # cabal v2-run +Configuration is affected by the following files: +- cabal.project Error: [Cabal-7070] The run command is for running a single executable at once. The target '' refers to the package MultipleExes-1.0 which includes - executables: bar and foo # cabal v2-run +Configuration is affected by the following files: +- cabal.project Error: [Cabal-7070] The run command is for running a single executable at once. The target 'MultipleExes' refers to the package MultipleExes-1.0 which includes - executables: bar and foo diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/MultiplePackages/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdRun/MultiplePackages/cabal.out index 7f851dca6a8..54b0387e0e1 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRun/MultiplePackages/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/MultiplePackages/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -7,7 +9,11 @@ Configuring executable 'bar-exe' for bar-1.0... Preprocessing executable 'bar-exe' for bar-1.0... Building executable 'bar-exe' for bar-1.0... # cabal v2-run +Configuration is affected by the following files: +- cabal.project # cabal v2-run +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - foo-1.0 (exe:foo-exe) (first run) @@ -15,6 +21,8 @@ Configuring executable 'foo-exe' for foo-1.0... Preprocessing executable 'foo-exe' for foo-1.0... Building executable 'foo-exe' for foo-1.0... # cabal v2-run +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - bar-1.0 (exe:foo-exe) (first run) @@ -22,20 +30,28 @@ Configuring executable 'foo-exe' for bar-1.0... Preprocessing executable 'foo-exe' for bar-1.0... Building executable 'foo-exe' for bar-1.0... # cabal v2-run +Configuration is affected by the following files: +- cabal.project Error: [Cabal-7135] No targets given and there is no package in the current directory. Specify packages or components by name or location. See 'cabal build --help' for more details on target options. # cabal v2-run +Configuration is affected by the following files: +- cabal.project Error: [Cabal-7070] The run command is for running a single executable at once. The target 'bar' refers to the package bar-1.0 which includes - executables: bar-exe and foo-exe # cabal v2-run +Configuration is affected by the following files: +- cabal.project Error: [Cabal-7132] Ambiguous target 'foo-exe'. It could be: bar:foo-exe (component) foo:foo-exe (component) # cabal v2-run +Configuration is affected by the following files: +- cabal.project Error: [Cabal-7131] Unknown target 'foo:bar-exe'. The package foo has no component 'bar-exe'. diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/RunMainBad/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdRun/RunMainBad/cabal.out index 25b71f37cce..d836bcbed00 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRun/RunMainBad/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/RunMainBad/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Error: [Cabal-7070] The run command can only run an executable as a whole, not files or modules within them, but the target 'Main.hs' refers to the file Main.hs in the executable foo. diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Script/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Script/cabal.out index 936db57d6be..075d530474d 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Script/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Script/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/ScriptBad/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdRun/ScriptBad/cabal.out index be36f8398e0..aa977554b57 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRun/ScriptBad/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/ScriptBad/cabal.out @@ -1,3 +1,5 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Error: [Cabal-7121] Failed extracting script block: `{- cabal:` start marker not found diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/ScriptLiterate/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdRun/ScriptLiterate/cabal.out index 0615cc31a41..2c4abd1b407 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRun/ScriptLiterate/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/ScriptLiterate/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Single/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Single/cabal.out index 2d03fa7af39..1599052effd 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Single/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Single/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -7,9 +9,19 @@ Configuring executable 'foo' for Single-1.0... Preprocessing executable 'foo' for Single-1.0... Building executable 'foo' for Single-1.0... # cabal v2-run +Configuration is affected by the following files: +- cabal.project # cabal v2-run +Configuration is affected by the following files: +- cabal.project # cabal v2-run +Configuration is affected by the following files: +- cabal.project # cabal v2-run +Configuration is affected by the following files: +- cabal.project # cabal v2-run +Configuration is affected by the following files: +- cabal.project Error: [Cabal-7070] Cannot run the package bar, it is not in this project (either directly or indirectly). If you want to add it to the project then edit the cabal.project file. diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/WarningRTS/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdRun/WarningRTS/cabal.out index a7f6033bb1d..ac29846553e 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRun/WarningRTS/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/WarningRTS/cabal.out @@ -1,4 +1,6 @@ # cabal run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Warning: Your RTS options are applied to cabal, not the executable. Use '--' to separate cabal options from your executable options. For example, use 'cabal run -- +RTS -N to pass the '-N' RTS option to your executable. Build profile: -w ghc- -O1 @@ -8,5 +10,9 @@ Configuring executable 'foo' for WarningRTS-1.0... Preprocessing executable 'foo' for WarningRTS-1.0... Building executable 'foo' for WarningRTS-1.0... # cabal run +Configuration is affected by the following files: +- cabal.project Warning: Your RTS options are applied to cabal, not the executable. Use '--' to separate cabal options from your executable options. For example, use 'cabal run -- +RTS -N to pass the '-N' RTS option to your executable. # cabal run +Configuration is affected by the following files: +- cabal.project diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdTest/OptionsFlag/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdTest/OptionsFlag/cabal.out index 55aac7326b6..959dedbdb61 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdTest/OptionsFlag/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdTest/OptionsFlag/cabal.out @@ -1,4 +1,6 @@ # cabal v2-test +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdTest/WarningRTS/cabal.out b/cabal-testsuite/PackageTests/NewBuild/CmdTest/WarningRTS/cabal.out index aef2481eac8..c16c641e235 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdTest/WarningRTS/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/CmdTest/WarningRTS/cabal.out @@ -1,4 +1,6 @@ # cabal test +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Warning: Some RTS options were found standalone, which affect cabal and not the binary. Please note that +RTS inside the --test-options argument suffices if your goal is to affect the tested binary. For example, use "cabal test --test-options='+RTS -N'" to pass the '-N' RTS option to your binary. Build profile: -w ghc- -O1 @@ -13,6 +15,8 @@ Test suite foo: PASS Test suite logged to: /cabal.dist/work/./dist/build//ghc-/WarningRTS-1.0/t/foo/test/WarningRTS-1.0-foo.log 1 of 1 test suites (1 of 1 test cases) passed. # cabal test +Configuration is affected by the following files: +- cabal.project Warning: Some RTS options were found standalone, which affect cabal and not the binary. Please note that +RTS inside the --test-options argument suffices if your goal is to affect the tested binary. For example, use "cabal test --test-options='+RTS -N'" to pass the '-N' RTS option to your binary. Build profile: -w ghc- -O1 In order, the following will be built: @@ -25,6 +29,8 @@ Test suite foo: PASS Test suite logged to: /cabal.dist/work/./dist/build//ghc-/WarningRTS-1.0/t/foo/test/WarningRTS-1.0-foo.log 1 of 1 test suites (1 of 1 test cases) passed. # cabal test +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - WarningRTS-1.0 (test:foo) (first run) diff --git a/cabal-testsuite/PackageTests/NewBuild/MonitorCabalFiles/cabal.out b/cabal-testsuite/PackageTests/NewBuild/MonitorCabalFiles/cabal.out index 93f0fd7f938..20490c7cbd5 100644 --- a/cabal-testsuite/PackageTests/NewBuild/MonitorCabalFiles/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/MonitorCabalFiles/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -9,6 +11,8 @@ Building executable 'q' for q-0.1.0.0... Error: [Cabal-7125] Failed to build q-0.1.0.0-inplace-q. # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewBuild/T3827/cabal.out b/cabal-testsuite/PackageTests/NewBuild/T3827/cabal.out index 3c7beab60c7..6b549c4eb26 100644 --- a/cabal-testsuite/PackageTests/NewBuild/T3827/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/T3827/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewBuild/T3978/cabal.out b/cabal-testsuite/PackageTests/NewBuild/T3978/cabal.out index bb8adff32b7..3769d3ba3f7 100644 --- a/cabal-testsuite/PackageTests/NewBuild/T3978/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/T3978/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: diff --git a/cabal-testsuite/PackageTests/NewBuild/T4017/cabal.out b/cabal-testsuite/PackageTests/NewBuild/T4017/cabal.out index 2175160b583..0d86c44624e 100644 --- a/cabal-testsuite/PackageTests/NewBuild/T4017/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/T4017/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewBuild/T4405/cabal.out b/cabal-testsuite/PackageTests/NewBuild/T4405/cabal.out index 2b684028ae0..e91a6fe2c15 100644 --- a/cabal-testsuite/PackageTests/NewBuild/T4405/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/T4405/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -11,4 +13,6 @@ Configuring library for q-1.0... Preprocessing library for q-1.0... Building library for q-1.0... # cabal v2-build +Configuration is affected by the following files: +- cabal.project Up to date diff --git a/cabal-testsuite/PackageTests/NewBuild/T4477/cabal.out b/cabal-testsuite/PackageTests/NewBuild/T4477/cabal.out index e8c59896590..5904b7d5372 100644 --- a/cabal-testsuite/PackageTests/NewBuild/T4477/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/T4477/cabal.out @@ -1,4 +1,6 @@ # cabal v2-run +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewBuild/T8875/cabal.out b/cabal-testsuite/PackageTests/NewBuild/T8875/cabal.out index 7bb94dd545c..9a1118c9b2f 100644 --- a/cabal-testsuite/PackageTests/NewBuild/T8875/cabal.out +++ b/cabal-testsuite/PackageTests/NewBuild/T8875/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewConfigure/ConfigFile/cabal.out b/cabal-testsuite/PackageTests/NewConfigure/ConfigFile/cabal.out index f26ed6aac4d..1e95b7b237b 100644 --- a/cabal-testsuite/PackageTests/NewConfigure/ConfigFile/cabal.out +++ b/cabal-testsuite/PackageTests/NewConfigure/ConfigFile/cabal.out @@ -1,5 +1,11 @@ # cabal v2-configure +Configuration is affected by the following files: +- cabal.project Config file not written due to flag(s). # cabal v2-configure +Configuration is affected by the following files: +- cabal.project Config file not written due to flag(s). # cabal v2-configure +Configuration is affected by the following files: +- cabal.project diff --git a/cabal-testsuite/PackageTests/NewConfigure/LocalConfigOverwrite/cabal.out b/cabal-testsuite/PackageTests/NewConfigure/LocalConfigOverwrite/cabal.out index 316c05855bb..a8f7c951277 100644 --- a/cabal-testsuite/PackageTests/NewConfigure/LocalConfigOverwrite/cabal.out +++ b/cabal-testsuite/PackageTests/NewConfigure/LocalConfigOverwrite/cabal.out @@ -1,4 +1,12 @@ # cabal v2-configure +Configuration is affected by the following files: +- cabal.project +Configuration is affected by the following files: +- cabal.project.local 'cabal.project.local' already exists, backing it up to 'cabal.project.local~'. # cabal v2-configure -'foo.project.local' already exists, backing it up to 'foo.project.local~'. \ No newline at end of file +Configuration is affected by the following files: +- foo.project +Configuration is affected by the following files: +- foo.project.local +'foo.project.local' already exists, backing it up to 'foo.project.local~'. diff --git a/cabal-testsuite/PackageTests/NewFreeze/BuildTools/new_freeze.out b/cabal-testsuite/PackageTests/NewFreeze/BuildTools/new_freeze.out index ff47b1dd0cc..fa90f30f471 100644 --- a/cabal-testsuite/PackageTests/NewFreeze/BuildTools/new_freeze.out +++ b/cabal-testsuite/PackageTests/NewFreeze/BuildTools/new_freeze.out @@ -1,6 +1,8 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following would be built: @@ -9,9 +11,15 @@ In order, the following would be built: - my-library-dep-1.0 (lib) (requires build) - my-local-package-1.0 (lib) (first run) # cabal v2-freeze +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Wrote freeze file: /cabal.project.freeze # cabal v2-build +Configuration is affected by the following files: +- cabal.project +Configuration is affected by the following files: +- cabal.project.freeze Resolving dependencies... Build profile: -w ghc- -O1 In order, the following would be built: diff --git a/cabal-testsuite/PackageTests/NewFreeze/Flags/new_freeze.out b/cabal-testsuite/PackageTests/NewFreeze/Flags/new_freeze.out index d0cc7e4ee0c..84064b158d5 100644 --- a/cabal-testsuite/PackageTests/NewFreeze/Flags/new_freeze.out +++ b/cabal-testsuite/PackageTests/NewFreeze/Flags/new_freeze.out @@ -1,6 +1,8 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following would be built: @@ -8,9 +10,15 @@ In order, the following would be built: - my-library-dep-1.0 (lib) (requires build) - my-local-package-1.0 (lib) (first run) # cabal v2-freeze +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Wrote freeze file: /cabal.project.freeze # cabal v2-build +Configuration is affected by the following files: +- cabal.project +Configuration is affected by the following files: +- cabal.project.freeze Resolving dependencies... Build profile: -w ghc- -O1 In order, the following would be built: diff --git a/cabal-testsuite/PackageTests/NewFreeze/FreezeFile/new_freeze.out b/cabal-testsuite/PackageTests/NewFreeze/FreezeFile/new_freeze.out index 36278f47542..540a69d4128 100644 --- a/cabal-testsuite/PackageTests/NewFreeze/FreezeFile/new_freeze.out +++ b/cabal-testsuite/PackageTests/NewFreeze/FreezeFile/new_freeze.out @@ -1,19 +1,31 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following would be built: - my-library-dep-2.0 (lib) (requires build) - my-local-package-1.0 (exe:my-exe) (first run) # cabal v2-freeze +Configuration is affected by the following files: +- cabal.project Freeze file not written due to flag(s) # cabal v2-freeze +Configuration is affected by the following files: +- cabal.project Freeze file not written due to flag(s) # cabal v2-freeze +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Wrote freeze file: /cabal.project.freeze # cabal v2-build +Configuration is affected by the following files: +- cabal.project +Configuration is affected by the following files: +- cabal.project.freeze Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -27,12 +39,20 @@ Configuring executable 'my-exe' for my-local-package-1.0... Preprocessing executable 'my-exe' for my-local-package-1.0... Building executable 'my-exe' for my-local-package-1.0... # cabal v2-freeze +Configuration is affected by the following files: +- cabal.project +Configuration is affected by the following files: +- cabal.project.freeze Wrote freeze file: /cabal.project.freeze # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following would be built: - my-library-dep-2.0 (lib) (requires build) - my-local-package-1.0 (exe:my-exe) (configuration changed) # cabal v2-freeze +Configuration is affected by the following files: +- cabal.project Wrote freeze file: /cabal.project.freeze diff --git a/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.out b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.out index 0683a3921ce..5d630e959d4 100644 --- a/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.out +++ b/cabal-testsuite/PackageTests/NewHaddock/DisableDoc/cabal.out @@ -1,6 +1,8 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal haddock +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewHaddock/Fails/cabal.out b/cabal-testsuite/PackageTests/NewHaddock/Fails/cabal.out index bb0ee5b906d..19689952971 100644 --- a/cabal-testsuite/PackageTests/NewHaddock/Fails/cabal.out +++ b/cabal-testsuite/PackageTests/NewHaddock/Fails/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -9,6 +11,8 @@ Building library for example-1.0... Error: [Cabal-7125] Failed to build example-1.0-inplace. # cabal v2-haddock +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - example-1.0 (lib) (configuration changed) diff --git a/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockForHackageCmdOutput/cabal.out b/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockForHackageCmdOutput/cabal.out index 5a0ba914174..64bbea860f0 100644 --- a/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockForHackageCmdOutput/cabal.out +++ b/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockForHackageCmdOutput/cabal.out @@ -1,4 +1,6 @@ # cabal haddock +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputCmd/cabal.out b/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputCmd/cabal.out index 38614b49b84..6cfdece7f8d 100644 --- a/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputCmd/cabal.out +++ b/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputCmd/cabal.out @@ -1,6 +1,8 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal haddock +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputConfig/cabal.out b/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputConfig/cabal.out index 38614b49b84..6cfdece7f8d 100644 --- a/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputConfig/cabal.out +++ b/cabal-testsuite/PackageTests/NewHaddock/HaddockOutput/HaddockOutputConfig/cabal.out @@ -1,6 +1,8 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal haddock +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.out b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.out index 32f39065358..002abb6a29a 100644 --- a/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.out +++ b/cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.out @@ -1,6 +1,8 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal haddock +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/NewSdist/DeterministicTrivial/deterministic.out b/cabal-testsuite/PackageTests/NewSdist/DeterministicTrivial/deterministic.out index 72eb09e8a77..aa041be7ed4 100644 --- a/cabal-testsuite/PackageTests/NewSdist/DeterministicTrivial/deterministic.out +++ b/cabal-testsuite/PackageTests/NewSdist/DeterministicTrivial/deterministic.out @@ -1,2 +1,4 @@ # cabal v2-sdist -Wrote tarball sdist to /dist-newstyle/sdist/deterministic-0.tar.gz \ No newline at end of file +Configuration is affected by the following files: +- cabal.project +Wrote tarball sdist to /dist-newstyle/sdist/deterministic-0.tar.gz diff --git a/cabal-testsuite/PackageTests/NewSdist/Globbing/cabal.out b/cabal-testsuite/PackageTests/NewSdist/Globbing/cabal.out index c28bd059b30..a0d41690c88 100644 --- a/cabal-testsuite/PackageTests/NewSdist/Globbing/cabal.out +++ b/cabal-testsuite/PackageTests/NewSdist/Globbing/cabal.out @@ -1,4 +1,6 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project a/Main.hs a/a.cabal a/doc/index.html diff --git a/cabal-testsuite/PackageTests/NewSdist/ManyDataFiles/many-data-files.out b/cabal-testsuite/PackageTests/NewSdist/ManyDataFiles/many-data-files.out index 926e5a2560e..42bf006f13e 100644 --- a/cabal-testsuite/PackageTests/NewSdist/ManyDataFiles/many-data-files.out +++ b/cabal-testsuite/PackageTests/NewSdist/ManyDataFiles/many-data-files.out @@ -1,2 +1,4 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project Wrote tarball sdist to /dist-newstyle/sdist/many-data-files-0.tar.gz diff --git a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/all-output-dir.out b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/all-output-dir.out index abcbfc25590..f8fbb9a2c41 100644 --- a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/all-output-dir.out +++ b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/all-output-dir.out @@ -1,3 +1,5 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project Wrote tarball sdist to /archives/a-0.1.tar.gz Wrote tarball sdist to /archives/b-0.1.tar.gz diff --git a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/all-test-sute.out b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/all-test-sute.out index 83628c9a8e2..cf7d268fa44 100644 --- a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/all-test-sute.out +++ b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/all-test-sute.out @@ -1,3 +1,5 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project Error: [Cabal-7151] It is not possible to package only the test suites from a package for distribution. Only entire packages may be packaged for distribution. diff --git a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/all.out b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/all.out index e370f410fe4..bd7eb8add5b 100644 --- a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/all.out +++ b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/all.out @@ -1,3 +1,5 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project Wrote tarball sdist to /dist-newstyle/sdist/a-0.1.tar.gz Wrote tarball sdist to /dist-newstyle/sdist/b-0.1.tar.gz diff --git a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/list-sources-output-dir.out b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/list-sources-output-dir.out index 64b8452177f..2b9f08b3e5a 100644 --- a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/list-sources-output-dir.out +++ b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/list-sources-output-dir.out @@ -1,3 +1,5 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project Wrote source list to /lists/a-0.1.list Wrote source list to /lists/b-0.1.list diff --git a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/multi-archive-to-stdout.out b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/multi-archive-to-stdout.out index e8bc3312c87..b0670909503 100644 --- a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/multi-archive-to-stdout.out +++ b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/multi-archive-to-stdout.out @@ -1,3 +1,5 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project Error: [Cabal-7152] Can't write multiple tarballs to standard output! diff --git a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/multi-list-sources.out b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/multi-list-sources.out index dd464def39a..ffb2f9afe32 100644 --- a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/multi-list-sources.out +++ b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/multi-list-sources.out @@ -1,4 +1,6 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project a/Main.hs a/Test.hs a/a.cabal diff --git a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/multi-target.out b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/multi-target.out index e370f410fe4..bd7eb8add5b 100644 --- a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/multi-target.out +++ b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/multi-target.out @@ -1,3 +1,5 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project Wrote tarball sdist to /dist-newstyle/sdist/a-0.1.tar.gz Wrote tarball sdist to /dist-newstyle/sdist/b-0.1.tar.gz diff --git a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/target-remote-package.out b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/target-remote-package.out index 386eaff9b13..2265a38e933 100644 --- a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/target-remote-package.out +++ b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/target-remote-package.out @@ -1,3 +1,5 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project Error: [Cabal-7151] The package base cannot be packaged for distribution, because it is not local to this project. diff --git a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/valid-and-test-suite.out b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/valid-and-test-suite.out index 6c1e881f806..4da566899a8 100644 --- a/cabal-testsuite/PackageTests/NewSdist/MultiTarget/valid-and-test-suite.out +++ b/cabal-testsuite/PackageTests/NewSdist/MultiTarget/valid-and-test-suite.out @@ -1,3 +1,5 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project Error: [Cabal-7151] The component test suite 'a-tests' cannot be packaged for distribution on its own. Only entire packages may be packaged for distribution. diff --git a/cabal-testsuite/PackageTests/NewSdist/NullTerminated/cabal.out b/cabal-testsuite/PackageTests/NewSdist/NullTerminated/cabal.out index 90c82a7d6c4b247aeb6a4e609a5a95e76fb2ad78..23597943ecd587ce44317291a4288a6d6653a692 100644 GIT binary patch delta 87 zcmdPQ4pdf1PE1P7Q7ALgEl$ZSF5z;{&r8cpFD*(e$;{7F$ShV!OiN2mE=f&MNUBsQ m$w*a5%g@QlFVD -O1 In order, the following will be built: @@ -9,6 +13,8 @@ In order, the following will be built: Error: [Cabal-7125] --offline was specified, hence refusing to download the package: remote version 0.1.0.0. # cabal v2-build +Configuration is affected by the following files: +- cabal.repo.project Build profile: -w ghc- -O1 In order, the following will be built: - remote-0.1.0.0 (lib) (requires build) @@ -21,4 +27,6 @@ Configuring executable 'current' for current-0.1.0.0... Preprocessing executable 'current' for current-0.1.0.0... Building executable 'current' for current-0.1.0.0... # cabal v2-build +Configuration is affected by the following files: +- cabal.repo.project Up to date diff --git a/cabal-testsuite/PackageTests/PackageDB/cabal-fail-no-base.out b/cabal-testsuite/PackageTests/PackageDB/cabal-fail-no-base.out index 506ac48f14e..06e5d066600 100644 --- a/cabal-testsuite/PackageTests/PackageDB/cabal-fail-no-base.out +++ b/cabal-testsuite/PackageTests/PackageDB/cabal-fail-no-base.out @@ -8,6 +8,8 @@ Installing library in # Setup register Registering library for p-1.0... # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: diff --git a/cabal-testsuite/PackageTests/PackageDB/cabal-fail-no-p.out b/cabal-testsuite/PackageTests/PackageDB/cabal-fail-no-p.out index 2235fc32f50..4367c22aea3 100644 --- a/cabal-testsuite/PackageTests/PackageDB/cabal-fail-no-p.out +++ b/cabal-testsuite/PackageTests/PackageDB/cabal-fail-no-p.out @@ -8,6 +8,8 @@ Installing library in # Setup register Registering library for p-1.0... # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: diff --git a/cabal-testsuite/PackageTests/PackageDB/cabal-fail-no-packagedbs.out b/cabal-testsuite/PackageTests/PackageDB/cabal-fail-no-packagedbs.out index 5697c77102c..941aa1c2f51 100644 --- a/cabal-testsuite/PackageTests/PackageDB/cabal-fail-no-packagedbs.out +++ b/cabal-testsuite/PackageTests/PackageDB/cabal-fail-no-packagedbs.out @@ -1,3 +1,5 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Error: [Cabal-2300] No package databases have been specified. If you use --package-db=clear, you must follow it with --package-db= with 'global', 'user' or a specific file. diff --git a/cabal-testsuite/PackageTests/PackageDB/cabal-manual-packagedb.out b/cabal-testsuite/PackageTests/PackageDB/cabal-manual-packagedb.out index e1c59d1cbb8..6570a93a7c5 100644 --- a/cabal-testsuite/PackageTests/PackageDB/cabal-manual-packagedb.out +++ b/cabal-testsuite/PackageTests/PackageDB/cabal-manual-packagedb.out @@ -8,6 +8,8 @@ Installing library in # Setup register Registering library for p-1.0... # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/PackageDB/cabal-packagedb.out b/cabal-testsuite/PackageTests/PackageDB/cabal-packagedb.out index e1c59d1cbb8..6570a93a7c5 100644 --- a/cabal-testsuite/PackageTests/PackageDB/cabal-packagedb.out +++ b/cabal-testsuite/PackageTests/PackageDB/cabal-packagedb.out @@ -8,6 +8,8 @@ Installing library in # Setup register Registering library for p-1.0... # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Path/Config/cabal.out b/cabal-testsuite/PackageTests/Path/Config/cabal.out index 2263588109f..8e963e3eb4c 100644 --- a/cabal-testsuite/PackageTests/Path/Config/cabal.out +++ b/cabal-testsuite/PackageTests/Path/Config/cabal.out @@ -53,10 +53,16 @@ test-dir # cabal path /cabal.dist/home/.cabal # cabal path +Configuration is affected by the following files: +- fake.cabal.project /cabal.dist/home/.cabal # cabal path +Configuration is affected by the following files: +- fake.cabal.project {"cabal-version":"","cache-home":"/cabal.dist/home/.cabal"} # cabal path +Configuration is affected by the following files: +- fake.cabal.project /cabal.dist/home/.cabal # cabal path my-cache-dir @@ -71,10 +77,16 @@ my-cache-dir # cabal path /cabal.dist/home/.cabal/packages # cabal path +Configuration is affected by the following files: +- fake.cabal.project my-cache-dir # cabal path +Configuration is affected by the following files: +- fake.cabal.project {"cabal-version":"","remote-repo-cache":"my-cache-dir"} # cabal path +Configuration is affected by the following files: +- fake.cabal.project my-cache-dir # cabal path my-logs-dir @@ -89,10 +101,16 @@ my-logs-dir # cabal path /cabal.dist/home/.cabal/logs # cabal path +Configuration is affected by the following files: +- fake.cabal.project my-logs-dir # cabal path +Configuration is affected by the following files: +- fake.cabal.project {"cabal-version":"","logs-dir":"my-logs-dir"} # cabal path +Configuration is affected by the following files: +- fake.cabal.project my-logs-dir # cabal path my-store-dir @@ -107,10 +125,16 @@ my-store-dir # cabal path /cabal.dist/home/.cabal/store # cabal path +Configuration is affected by the following files: +- fake.cabal.project my-store-dir # cabal path +Configuration is affected by the following files: +- fake.cabal.project {"cabal-version":"","store-dir":"my-store-dir"} # cabal path +Configuration is affected by the following files: +- fake.cabal.project my-store-dir # cabal path fake-cabal.config @@ -125,10 +149,16 @@ fake-cabal.config # cabal path /cabal.dist/home/.cabal/config # cabal path +Configuration is affected by the following files: +- fake.cabal.project fake-cabal.config # cabal path +Configuration is affected by the following files: +- fake.cabal.project {"cabal-version":"","config-file":"fake-cabal.config"} # cabal path +Configuration is affected by the following files: +- fake.cabal.project fake-cabal.config # cabal path my-installdir @@ -143,8 +173,14 @@ my-installdir # cabal path /cabal.dist/home/.cabal/bin # cabal path +Configuration is affected by the following files: +- fake.cabal.project my-installdir # cabal path +Configuration is affected by the following files: +- fake.cabal.project {"cabal-version":"","installdir":"my-installdir"} # cabal path +Configuration is affected by the following files: +- fake.cabal.project my-installdir diff --git a/cabal-testsuite/PackageTests/Project/CoverageProject/cabal.out b/cabal-testsuite/PackageTests/Project/CoverageProject/cabal.out index 1278857b31d..3b7c1d4b788 100644 --- a/cabal-testsuite/PackageTests/Project/CoverageProject/cabal.out +++ b/cabal-testsuite/PackageTests/Project/CoverageProject/cabal.out @@ -1,4 +1,6 @@ # cabal test +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Regression/T4154/install-time-with-constraint.out b/cabal-testsuite/PackageTests/Regression/T4154/install-time-with-constraint.out index 7bc5e2e63a6..c5daa27101f 100644 --- a/cabal-testsuite/PackageTests/Regression/T4154/install-time-with-constraint.out +++ b/cabal-testsuite/PackageTests/Regression/T4154/install-time-with-constraint.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following would be built: diff --git a/cabal-testsuite/PackageTests/Regression/T4202/cabal.out b/cabal-testsuite/PackageTests/Regression/T4202/cabal.out index a7bae1abdb2..426ccd41ed8 100644 --- a/cabal-testsuite/PackageTests/Regression/T4202/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T4202/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -11,12 +13,16 @@ Configuring executable 'qexe' for q-1.0... Preprocessing executable 'qexe' for q-1.0... Building executable 'qexe' for q-1.0... # cabal v2-build +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - p-1.0 (lib) (file P.hs changed) Preprocessing library for p-1.0... Building library for p-1.0... # cabal v2-build +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - q-1.0 (exe:qexe) (file /cabal.dist/work/dist/build//ghc-/p-1.0/cache/build changed) diff --git a/cabal-testsuite/PackageTests/Regression/T4720/cabal.out b/cabal-testsuite/PackageTests/Regression/T4720/cabal.out index 3cf3d3afe28..34903b832da 100644 --- a/cabal-testsuite/PackageTests/Regression/T4720/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T4720/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Regression/T4798/cabal.out b/cabal-testsuite/PackageTests/Regression/T4798/cabal.out index 05de54b124c..55571a3f647 100644 --- a/cabal-testsuite/PackageTests/Regression/T4798/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T4798/cabal.out @@ -1,4 +1,6 @@ # cabal test +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Regression/T4986/cabal.out b/cabal-testsuite/PackageTests/Regression/T4986/cabal.out index 1ceb427b04c..fdec868d0a5 100644 --- a/cabal-testsuite/PackageTests/Regression/T4986/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T4986/cabal.out @@ -1 +1,3 @@ -# cabal v2-configure \ No newline at end of file +# cabal v2-configure +Configuration is affected by the following files: +- cabal.project diff --git a/cabal-testsuite/PackageTests/Regression/T5213/cabal.out b/cabal-testsuite/PackageTests/Regression/T5213/cabal.out index fb0e7ad7a9a..799c2005c0b 100644 --- a/cabal-testsuite/PackageTests/Regression/T5213/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T5213/cabal.out @@ -1,4 +1,6 @@ # cabal new-test +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Regression/T5213ExeCoverage/cabal.out b/cabal-testsuite/PackageTests/Regression/T5213ExeCoverage/cabal.out index 57cb186d882..1aaf72ce762 100644 --- a/cabal-testsuite/PackageTests/Regression/T5213ExeCoverage/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T5213ExeCoverage/cabal.out @@ -1,4 +1,6 @@ # cabal new-test +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Regression/T5309/cabal.out b/cabal-testsuite/PackageTests/Regression/T5309/cabal.out index e799843e5b6..a2f7566f38a 100644 --- a/cabal-testsuite/PackageTests/Regression/T5309/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T5309/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -15,6 +17,8 @@ Configuring executable 'exe-with-lib' for T5309-1.0.0.0... Preprocessing executable 'exe-with-lib' for T5309-1.0.0.0... Building executable 'exe-with-lib' for T5309-1.0.0.0... # cabal v2-test +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - T5309-1.0.0.0 (test:test-no-lib) (first run) @@ -36,6 +40,8 @@ Test suite test-with-lib: PASS Test suite logged to: /cabal.dist/work/./dist/build//ghc-/T5309-1.0.0.0/t/test-with-lib/test/T5309-1.0.0.0-test-with-lib.log 1 of 1 test suites (1 of 1 test cases) passed. # cabal v2-bench +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - T5309-1.0.0.0 (bench:bench-no-lib) (first run) diff --git a/cabal-testsuite/PackageTests/Regression/T5318/sdist-list-sources.out b/cabal-testsuite/PackageTests/Regression/T5318/sdist-list-sources.out index faefc513fe8..8e257e232a7 100644 --- a/cabal-testsuite/PackageTests/Regression/T5318/sdist-list-sources.out +++ b/cabal-testsuite/PackageTests/Regression/T5318/sdist-list-sources.out @@ -1,2 +1,4 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project Wrote source list to /empty-data-dir-0.list diff --git a/cabal-testsuite/PackageTests/Regression/T5677/cabal.out b/cabal-testsuite/PackageTests/Regression/T5677/cabal.out index 88bc2862665..d660ba36715 100644 --- a/cabal-testsuite/PackageTests/Regression/T5677/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T5677/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Regression/T6334/cabal.out b/cabal-testsuite/PackageTests/Regression/T6334/cabal.out index a0a58d72357..d011ce510c0 100644 --- a/cabal-testsuite/PackageTests/Regression/T6334/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T6334/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Regression/T6440/cabal.out b/cabal-testsuite/PackageTests/Regression/T6440/cabal.out index 5c24cecf81f..8de48ba2a8d 100644 --- a/cabal-testsuite/PackageTests/Regression/T6440/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T6440/cabal.out @@ -1,4 +1,6 @@ # cabal test +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Regression/T6853/cabal.out b/cabal-testsuite/PackageTests/Regression/T6853/cabal.out index 75fe8d9ef1c..2c7e916bd12 100644 --- a/cabal-testsuite/PackageTests/Regression/T6853/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T6853/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Regression/T6961/DepExternal/cabal.out b/cabal-testsuite/PackageTests/Regression/T6961/DepExternal/cabal.out index a063ee92cb8..2e8cfbf46cc 100644 --- a/cabal-testsuite/PackageTests/Regression/T6961/DepExternal/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T6961/DepExternal/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following would be built: diff --git a/cabal-testsuite/PackageTests/Regression/T6961/DepInternal/cabal.out b/cabal-testsuite/PackageTests/Regression/T6961/DepInternal/cabal.out index cda3c265371..495d99db1f8 100644 --- a/cabal-testsuite/PackageTests/Regression/T6961/DepInternal/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T6961/DepInternal/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: diff --git a/cabal-testsuite/PackageTests/Regression/T6961/Exe/cabal.out b/cabal-testsuite/PackageTests/Regression/T6961/Exe/cabal.out index bde31817cf4..ddd01927783 100644 --- a/cabal-testsuite/PackageTests/Regression/T6961/Exe/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T6961/Exe/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following would be built: diff --git a/cabal-testsuite/PackageTests/Regression/T6961/Test/cabal.out b/cabal-testsuite/PackageTests/Regression/T6961/Test/cabal.out index 8f28d66058a..8b24d62d861 100644 --- a/cabal-testsuite/PackageTests/Regression/T6961/Test/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T6961/Test/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following would be built: diff --git a/cabal-testsuite/PackageTests/Regression/T7234/Fail/cabal.out b/cabal-testsuite/PackageTests/Regression/T7234/Fail/cabal.out index 5c8ed7ba2c5..d19a9b23a47 100644 --- a/cabal-testsuite/PackageTests/Regression/T7234/Fail/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T7234/Fail/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: diff --git a/cabal-testsuite/PackageTests/Regression/T7234/Success/cabal.out b/cabal-testsuite/PackageTests/Regression/T7234/Success/cabal.out index a0c85309b1f..5accd75362d 100644 --- a/cabal-testsuite/PackageTests/Regression/T7234/Success/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T7234/Success/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Regression/T8507/cabal.out b/cabal-testsuite/PackageTests/Regression/T8507/cabal.out index a4b777afbbc..7f8230fe9fe 100644 --- a/cabal-testsuite/PackageTests/Regression/T8507/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T8507/cabal.out @@ -1,4 +1,6 @@ # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Regression/T9640/cabal.out b/cabal-testsuite/PackageTests/Regression/T9640/cabal.out index 4c0f119823f..e0d2968a2e3 100644 --- a/cabal-testsuite/PackageTests/Regression/T9640/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T9640/cabal.out @@ -1,6 +1,8 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/Regression/T9756/cabal.out b/cabal-testsuite/PackageTests/Regression/T9756/cabal.out index 61a814acd68..32930c9a727 100644 --- a/cabal-testsuite/PackageTests/Regression/T9756/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T9756/cabal.out @@ -12,6 +12,8 @@ Installing executable mybuilder in Warning: The directory /cabal.dist/home/.cabal/store/ghc-/incoming/new-/cabal.dist/home/.cabal/store/ghc-/-/bin is not in the system search path. Symlinking 'mybuilder' to '/cabal.dist/install/mybuilder' # cabal v2-build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/RelativePathProjectImports/cabal.out b/cabal-testsuite/PackageTests/RelativePathProjectImports/cabal.out index 53ac1b8e71c..d5870b1955b 100644 --- a/cabal-testsuite/PackageTests/RelativePathProjectImports/cabal.out +++ b/cabal-testsuite/PackageTests/RelativePathProjectImports/cabal.out @@ -1,4 +1,9 @@ # cabal build +Configuration is affected by the following files: +- cabal.project +Configuration is affected by the following files: +- dep/cabal.project + imported by: cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -15,6 +20,11 @@ Configuring library for main-0.1... Preprocessing library for main-0.1... Building library for main-0.1... # cabal build +Configuration is affected by the following files: +- cabal.project +Configuration is affected by the following files: +- dep/cabal.project + imported by: cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ReplNoLoad/cabal.exec-no-load.out b/cabal-testsuite/PackageTests/ReplNoLoad/cabal.exec-no-load.out index 6f2908d3f26..9177f4d5c37 100644 --- a/cabal-testsuite/PackageTests/ReplNoLoad/cabal.exec-no-load.out +++ b/cabal-testsuite/PackageTests/ReplNoLoad/cabal.exec-no-load.out @@ -1,5 +1,7 @@ # cabal clean # cabal repl +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ReplNoLoad/cabal.exec-normal.out b/cabal-testsuite/PackageTests/ReplNoLoad/cabal.exec-normal.out index 68ecdbe4008..b3e330f7e29 100644 --- a/cabal-testsuite/PackageTests/ReplNoLoad/cabal.exec-normal.out +++ b/cabal-testsuite/PackageTests/ReplNoLoad/cabal.exec-normal.out @@ -1,5 +1,7 @@ # cabal clean # cabal repl +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ReplNoLoad/cabal.lib-no-load.out b/cabal-testsuite/PackageTests/ReplNoLoad/cabal.lib-no-load.out index 6f2908d3f26..9177f4d5c37 100644 --- a/cabal-testsuite/PackageTests/ReplNoLoad/cabal.lib-no-load.out +++ b/cabal-testsuite/PackageTests/ReplNoLoad/cabal.lib-no-load.out @@ -1,5 +1,7 @@ # cabal clean # cabal repl +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ReplNoLoad/cabal.lib-normal.out b/cabal-testsuite/PackageTests/ReplNoLoad/cabal.lib-normal.out index 6f2908d3f26..9177f4d5c37 100644 --- a/cabal-testsuite/PackageTests/ReplNoLoad/cabal.lib-normal.out +++ b/cabal-testsuite/PackageTests/ReplNoLoad/cabal.lib-normal.out @@ -1,5 +1,7 @@ # cabal clean # cabal repl +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ReplOptions/cabal.multiple-repl-options-multiple-flags.out b/cabal-testsuite/PackageTests/ReplOptions/cabal.multiple-repl-options-multiple-flags.out index 374ac0dd8c3..e45e9385218 100644 --- a/cabal-testsuite/PackageTests/ReplOptions/cabal.multiple-repl-options-multiple-flags.out +++ b/cabal-testsuite/PackageTests/ReplOptions/cabal.multiple-repl-options-multiple-flags.out @@ -1,5 +1,7 @@ # cabal clean # cabal v2-repl +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ReplOptions/cabal.multiple-repl-options.out b/cabal-testsuite/PackageTests/ReplOptions/cabal.multiple-repl-options.out index 374ac0dd8c3..e45e9385218 100644 --- a/cabal-testsuite/PackageTests/ReplOptions/cabal.multiple-repl-options.out +++ b/cabal-testsuite/PackageTests/ReplOptions/cabal.multiple-repl-options.out @@ -1,5 +1,7 @@ # cabal clean # cabal v2-repl +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ReplOptions/cabal.single-repl-options-multiple-flags-negative.out b/cabal-testsuite/PackageTests/ReplOptions/cabal.single-repl-options-multiple-flags-negative.out index ba1bbef88db..9368db4d3dd 100644 --- a/cabal-testsuite/PackageTests/ReplOptions/cabal.single-repl-options-multiple-flags-negative.out +++ b/cabal-testsuite/PackageTests/ReplOptions/cabal.single-repl-options-multiple-flags-negative.out @@ -1,5 +1,7 @@ # cabal clean # cabal v2-repl +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ReplOptions/cabal.single-repl-options-multiple-flags.out b/cabal-testsuite/PackageTests/ReplOptions/cabal.single-repl-options-multiple-flags.out index 374ac0dd8c3..e45e9385218 100644 --- a/cabal-testsuite/PackageTests/ReplOptions/cabal.single-repl-options-multiple-flags.out +++ b/cabal-testsuite/PackageTests/ReplOptions/cabal.single-repl-options-multiple-flags.out @@ -1,5 +1,7 @@ # cabal clean # cabal v2-repl +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ReplOptions/cabal.single-repl-options.out b/cabal-testsuite/PackageTests/ReplOptions/cabal.single-repl-options.out index 374ac0dd8c3..e45e9385218 100644 --- a/cabal-testsuite/PackageTests/ReplOptions/cabal.single-repl-options.out +++ b/cabal-testsuite/PackageTests/ReplOptions/cabal.single-repl-options.out @@ -1,5 +1,7 @@ # cabal clean # cabal v2-repl +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/SDist/T5195and5349/cabal.out b/cabal-testsuite/PackageTests/SDist/T5195and5349/cabal.out index f42c4e98177..d6db93b0a25 100644 --- a/cabal-testsuite/PackageTests/SDist/T5195and5349/cabal.out +++ b/cabal-testsuite/PackageTests/SDist/T5195and5349/cabal.out @@ -1,4 +1,6 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project Warning: Ignoring directory '././actually-a-directory' listed in a Cabal package field which should only include files (not directories). Warning: Ignoring directory './actually-a-directory' listed in a Cabal package field which should only include files (not directories). Warning: Ignoring directory './actually-a-directory' listed in a Cabal package field which should only include files (not directories). diff --git a/cabal-testsuite/PackageTests/SDist/T7028/cabal.out b/cabal-testsuite/PackageTests/SDist/T7028/cabal.out index 222d3c33c8b..4ec2d96e545 100644 --- a/cabal-testsuite/PackageTests/SDist/T7028/cabal.out +++ b/cabal-testsuite/PackageTests/SDist/T7028/cabal.out @@ -1,2 +1,4 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project Wrote source list to /t7028-0.list diff --git a/cabal-testsuite/PackageTests/SDist/T7124/cabal-list.out b/cabal-testsuite/PackageTests/SDist/T7124/cabal-list.out index cb65c326a56..b45ccabcb39 100644 --- a/cabal-testsuite/PackageTests/SDist/T7124/cabal-list.out +++ b/cabal-testsuite/PackageTests/SDist/T7124/cabal-list.out @@ -1,4 +1,6 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project Wrote source list to /pkg-a-0.list Error: [Cabal-6661] filepath wildcard './data.txt' does not match any files. diff --git a/cabal-testsuite/PackageTests/SDist/T7124/cabal.out b/cabal-testsuite/PackageTests/SDist/T7124/cabal.out index 5dbaee755bc..ec1a61ec9f8 100644 --- a/cabal-testsuite/PackageTests/SDist/T7124/cabal.out +++ b/cabal-testsuite/PackageTests/SDist/T7124/cabal.out @@ -1,4 +1,6 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project Wrote tarball sdist to /pkg-a-0.tar.gz Error: [Cabal-6661] filepath wildcard './data.txt' does not match any files. diff --git a/cabal-testsuite/PackageTests/SDist/T7698/cabal.out b/cabal-testsuite/PackageTests/SDist/T7698/cabal.out index 99370eb5dd6..b4405270c12 100644 --- a/cabal-testsuite/PackageTests/SDist/T7698/cabal.out +++ b/cabal-testsuite/PackageTests/SDist/T7698/cabal.out @@ -1,2 +1,4 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project Wrote source list to /t7698-0.list diff --git a/cabal-testsuite/PackageTests/SDist/T8817/cabal.out b/cabal-testsuite/PackageTests/SDist/T8817/cabal.out index c99d15276fe..89e68f1c41e 100644 --- a/cabal-testsuite/PackageTests/SDist/T8817/cabal.out +++ b/cabal-testsuite/PackageTests/SDist/T8817/cabal.out @@ -1,2 +1,4 @@ # cabal v2-sdist +Configuration is affected by the following files: +- cabal.project Wrote tarball sdist to /t8817-0.tar.gz diff --git a/cabal-testsuite/PackageTests/ShowBuildInfo/A/build-info-all.out b/cabal-testsuite/PackageTests/ShowBuildInfo/A/build-info-all.out index e37e3fccc4d..638ea9ced39 100644 --- a/cabal-testsuite/PackageTests/ShowBuildInfo/A/build-info-all.out +++ b/cabal-testsuite/PackageTests/ShowBuildInfo/A/build-info-all.out @@ -1,4 +1,6 @@ # cabal build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ShowBuildInfo/A/build-info-exe.out b/cabal-testsuite/PackageTests/ShowBuildInfo/A/build-info-exe.out index 7c69357323d..036c131915c 100644 --- a/cabal-testsuite/PackageTests/ShowBuildInfo/A/build-info-exe.out +++ b/cabal-testsuite/PackageTests/ShowBuildInfo/A/build-info-exe.out @@ -1,4 +1,6 @@ # cabal build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/ShowBuildInfo/A/remove-outdated.out b/cabal-testsuite/PackageTests/ShowBuildInfo/A/remove-outdated.out index 3ad97d2f378..0b788f6c53e 100644 --- a/cabal-testsuite/PackageTests/ShowBuildInfo/A/remove-outdated.out +++ b/cabal-testsuite/PackageTests/ShowBuildInfo/A/remove-outdated.out @@ -1,4 +1,6 @@ # cabal build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -7,6 +9,8 @@ Configuring executable 'A' for A-0.1.0.0... Preprocessing executable 'A' for A-0.1.0.0... Building executable 'A' for A-0.1.0.0... # cabal v2-build +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - A-0.1.0.0 (exe:A) (configuration changed) diff --git a/cabal-testsuite/PackageTests/ShowBuildInfo/CompileFail/compile-fail.out b/cabal-testsuite/PackageTests/ShowBuildInfo/CompileFail/compile-fail.out index b0cae576cd6..a2ecb2be87d 100644 --- a/cabal-testsuite/PackageTests/ShowBuildInfo/CompileFail/compile-fail.out +++ b/cabal-testsuite/PackageTests/ShowBuildInfo/CompileFail/compile-fail.out @@ -1,4 +1,6 @@ # cabal build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -13,6 +15,8 @@ Building test suite 'CompileFail-test' for CompileFail-0.1.0.0... Error: [Cabal-7125] Failed to build CompileFail-0.1.0.0-inplace-CompileFail-test. # cabal build +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - CompileFail-0.1.0.0 (lib:failing) (first run) diff --git a/cabal-testsuite/PackageTests/ShowBuildInfo/Complex/single.out b/cabal-testsuite/PackageTests/ShowBuildInfo/Complex/single.out index 3825d1f6cf8..f46f8948e28 100644 --- a/cabal-testsuite/PackageTests/ShowBuildInfo/Complex/single.out +++ b/cabal-testsuite/PackageTests/ShowBuildInfo/Complex/single.out @@ -1,6 +1,8 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal build +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: @@ -17,10 +19,14 @@ Building executable 'Complex' for Complex-0.1.0.0... # show-build-info Complex exe:Complex {"cabal-lib-version":"","compiler":{"flavour":"ghc","compiler-id":"ghc-","path":""},"components":[{"type":"exe","name":"exe:Complex","unit-id":"Complex-0.1.0.0-inplace-Complex","compiler-args":["-fbuilding-cabal-package","-O","-outputdir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/x/Complex/build","-odir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/x/Complex/build","-hidir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/x/Complex/build","-hiedir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/x/Complex/build/extra-compilation-artifacts/hie","-stubdir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/x/Complex/build","-i","-iapp","-isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/x/Complex/build","-isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/x/Complex/build/Complex/autogen","-isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/x/Complex/build/global-autogen","-Isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/x/Complex/build/Complex/autogen","-Isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/x/Complex/build/global-autogen","-Isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/x/Complex/build","-optP-include","-optPsingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/x/Complex/build/Complex/autogen/cabal_macros.h","-this-unit-id","Complex-0.1.0.0-inplace-Complex","-hide-all-packages","-Wmissing-home-modules","-no-user-package-db","-package-db","/single.dist/home/.cabal/store/ghc-/package.db","-package-db","/single.dist/work/dist/packagedb/ghc-","-package-id","","-package-id","","-XHaskell2010","-threaded","-rtsopts","-with-rtsopts=-N -T","-Wredundant-constraints"],"modules":["Other","Paths_Complex"],"src-files":["Main.lhs"],"hs-src-dirs":["app"],"src-dir":"/","cabal-file":"Complex.cabal"}]} # cabal build +Configuration is affected by the following files: +- cabal.project Up to date # show-build-info Complex lib {"cabal-lib-version":"","compiler":{"flavour":"ghc","compiler-id":"ghc-","path":""},"components":[{"type":"lib","name":"lib","unit-id":"Complex-0.1.0.0-inplace","compiler-args":["-fbuilding-cabal-package","-O","-outputdir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/build","-odir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/build","-hidir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/build","-hiedir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/build/extra-compilation-artifacts/hie","-stubdir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/build","-i","-isrc","-idoesnt-exist","-isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/build","-isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/build/autogen","-isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/build/global-autogen","-Isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/build/autogen","-Isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/build/global-autogen","-Isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/build","-optP-include","-optPsingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/build/autogen/cabal_macros.h","-this-unit-id","Complex-0.1.0.0-inplace","-hide-all-packages","-Wmissing-home-modules","-no-user-package-db","-package-db","/single.dist/home/.cabal/store/ghc-/package.db","-package-db","/single.dist/work/dist/packagedb/ghc-","-package-id","","-XHaskell2010","-Wall"],"modules":["A","B","C","D","Paths_Complex"],"src-files":[],"hs-src-dirs":["src","doesnt-exist"],"src-dir":"/","cabal-file":"Complex.cabal"}]} # cabal build +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - criterion-1.1.4.0 (lib) (requires build) @@ -36,6 +42,8 @@ Building benchmark 'complex-benchmarks' for Complex-0.1.0.0... # show-build-info Complex bench:complex-benchmarks {"cabal-lib-version":"","compiler":{"flavour":"ghc","compiler-id":"ghc-","path":""},"components":[{"type":"bench","name":"bench:complex-benchmarks","unit-id":"Complex-0.1.0.0-inplace-complex-benchmarks","compiler-args":["-fbuilding-cabal-package","-O","-outputdir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/b/complex-benchmarks/build","-odir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/b/complex-benchmarks/build","-hidir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/b/complex-benchmarks/build","-hiedir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/b/complex-benchmarks/build/extra-compilation-artifacts/hie","-stubdir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/b/complex-benchmarks/build","-i","-ibenchmark","-isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/b/complex-benchmarks/build","-isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/b/complex-benchmarks/build/complex-benchmarks/autogen","-isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/b/complex-benchmarks/build/global-autogen","-Isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/b/complex-benchmarks/build/complex-benchmarks/autogen","-Isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/b/complex-benchmarks/build/global-autogen","-Isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/b/complex-benchmarks/build","-optP-include","-optPsingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/b/complex-benchmarks/build/complex-benchmarks/autogen/cabal_macros.h","-this-unit-id","Complex-0.1.0.0-inplace-complex-benchmarks","-hide-all-packages","-Wmissing-home-modules","-no-user-package-db","-package-db","/single.dist/home/.cabal/store/ghc-/package.db","-package-db","/single.dist/work/dist/packagedb/ghc-","-package-id","","-package-id","","-package-id","","-XHaskell2010","-Wall","-rtsopts","-threaded","-with-rtsopts=-N"],"modules":["Paths_Complex"],"src-files":["Main.hs"],"hs-src-dirs":["benchmark"],"src-dir":"/","cabal-file":"Complex.cabal"}]} # cabal build +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - test-framework-0.8.1.1 (lib) (requires build) @@ -51,6 +59,8 @@ Building test suite 'func-test' for Complex-0.1.0.0... # show-build-info Complex test:func-test {"cabal-lib-version":"","compiler":{"flavour":"ghc","compiler-id":"ghc-","path":""},"components":[{"type":"test","name":"test:func-test","unit-id":"Complex-0.1.0.0-inplace-func-test","compiler-args":["-fbuilding-cabal-package","-O","-outputdir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/t/func-test/build","-odir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/t/func-test/build","-hidir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/t/func-test/build","-hiedir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/t/func-test/build/extra-compilation-artifacts/hie","-stubdir","single.dist/work/./dist/build//ghc-/Complex-0.1.0.0/t/func-test/build","-i","-itest","-isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/t/func-test/build","-isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/t/func-test/build/func-test/autogen","-isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/t/func-test/build/global-autogen","-Isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/t/func-test/build/func-test/autogen","-Isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/t/func-test/build/global-autogen","-Isingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/t/func-test/build","-optP-include","-optPsingle.dist/work/./dist/build//ghc-/Complex-0.1.0.0/t/func-test/build/func-test/autogen/cabal_macros.h","-this-unit-id","Complex-0.1.0.0-inplace-func-test","-hide-all-packages","-Wmissing-home-modules","-no-user-package-db","-package-db","/single.dist/home/.cabal/store/ghc-/package.db","-package-db","/single.dist/work/dist/packagedb/ghc-","-package-id","","-package-id","","-package-id","","-XHaskell2010"],"modules":[],"src-files":["FuncMain.hs"],"hs-src-dirs":["test"],"src-dir":"/","cabal-file":"Complex.cabal"}]} # cabal build +Configuration is affected by the following files: +- cabal.project Build profile: -w ghc- -O1 In order, the following will be built: - another-framework-0.8.1.1 (lib) (requires build) diff --git a/cabal-testsuite/PackageTests/TestCodeGenerator/cabal.out b/cabal-testsuite/PackageTests/TestCodeGenerator/cabal.out index b6691231474..31af40384d3 100644 --- a/cabal-testsuite/PackageTests/TestCodeGenerator/cabal.out +++ b/cabal-testsuite/PackageTests/TestCodeGenerator/cabal.out @@ -1,4 +1,6 @@ # cabal v2-test +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/TestSuiteTests/ExeV10/cabal.out b/cabal-testsuite/PackageTests/TestSuiteTests/ExeV10/cabal.out index 8fb3ea6d6d3..c7dac223635 100644 --- a/cabal-testsuite/PackageTests/TestSuiteTests/ExeV10/cabal.out +++ b/cabal-testsuite/PackageTests/TestSuiteTests/ExeV10/cabal.out @@ -1,4 +1,6 @@ # cabal v2-test +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/TestSuiteTests/ExeV10/coverage.out b/cabal-testsuite/PackageTests/TestSuiteTests/ExeV10/coverage.out index 872dbd57eaf..0d98e24beaa 100644 --- a/cabal-testsuite/PackageTests/TestSuiteTests/ExeV10/coverage.out +++ b/cabal-testsuite/PackageTests/TestSuiteTests/ExeV10/coverage.out @@ -1,4 +1,6 @@ # cabal v2-test +Configuration is affected by the following files: +- cabal.project Resolving dependencies... Build profile: -w ghc- -O1 In order, the following will be built: diff --git a/cabal-testsuite/PackageTests/VersionPriority/0-local.out b/cabal-testsuite/PackageTests/VersionPriority/0-local.out index f57e8b4db97..176876e269f 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/0-local.out +++ b/cabal-testsuite/PackageTests/VersionPriority/0-local.out @@ -1,6 +1,8 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal v2-build +Configuration is affected by the following files: +- 0-local.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: diff --git a/cabal-testsuite/PackageTests/VersionPriority/1-local.out b/cabal-testsuite/PackageTests/VersionPriority/1-local.out index 0de3c6d5f1f..1806aebd5a8 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/1-local.out +++ b/cabal-testsuite/PackageTests/VersionPriority/1-local.out @@ -1,6 +1,11 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal v2-build +Configuration is affected by the following files: +- 1-local-constraints-import.project +Configuration is affected by the following files: +- stackage-local.config + imported by: 1-local-constraints-import.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: @@ -14,6 +19,11 @@ Could not resolve dependencies: [__1] fail (backjumping, conflict set: cabal-version-override, hashable) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: hashable (3), cabal-version-override (2) # cabal v2-build +Configuration is affected by the following files: +- 1-local-import-constraints.project +Configuration is affected by the following files: +- stackage-local.config + imported by: 1-local-import-constraints.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: diff --git a/cabal-testsuite/PackageTests/VersionPriority/1-web.out b/cabal-testsuite/PackageTests/VersionPriority/1-web.out index cfdaa0d2dbc..13e930c943b 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/1-web.out +++ b/cabal-testsuite/PackageTests/VersionPriority/1-web.out @@ -1,6 +1,14 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal v2-build +Configuration is affected by the following files: +- 1-web-constraints-import.project +Configuration is affected by the following files: +- project-stackage/nightly-2023-12-07.config + imported by: 1-web-constraints-import.project +Configuration is affected by the following files: +- with-ghc.config + imported by: 1-web-constraints-import.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: @@ -14,6 +22,14 @@ Could not resolve dependencies: [__1] fail (backjumping, conflict set: cabal-version-override, hashable) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: hashable (3), cabal-version-override (2) # cabal v2-build +Configuration is affected by the following files: +- 1-web-import-constraints.project +Configuration is affected by the following files: +- project-stackage/nightly-2023-12-07.config + imported by: 1-web-import-constraints.project +Configuration is affected by the following files: +- with-ghc.config + imported by: 1-web-import-constraints.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: diff --git a/cabal-testsuite/PackageTests/VersionPriority/2-local.out b/cabal-testsuite/PackageTests/VersionPriority/2-local.out index ccb733ca12e..211c4ee9d9c 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/2-local.out +++ b/cabal-testsuite/PackageTests/VersionPriority/2-local.out @@ -1,6 +1,15 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal v2-build +Configuration is affected by the following files: +- 2-local-constraints-import.project +Configuration is affected by the following files: +- hop-local.config + imported by: 2-local-constraints-import.project +Configuration is affected by the following files: +- stackage-local.config + imported by: hop-local.config + imported by: 2-local-constraints-import.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: @@ -15,6 +24,15 @@ Could not resolve dependencies: [__1] fail (backjumping, conflict set: cabal-version-override, hashable) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: hashable (3), cabal-version-override (2) # cabal v2-build +Configuration is affected by the following files: +- 2-local-import-constraints.project +Configuration is affected by the following files: +- hop-local.config + imported by: 2-local-import-constraints.project +Configuration is affected by the following files: +- stackage-local.config + imported by: hop-local.config + imported by: 2-local-import-constraints.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: diff --git a/cabal-testsuite/PackageTests/VersionPriority/2-web.out b/cabal-testsuite/PackageTests/VersionPriority/2-web.out index 15e5c01517b..d592a88a472 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/2-web.out +++ b/cabal-testsuite/PackageTests/VersionPriority/2-web.out @@ -1,6 +1,18 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal v2-build +Configuration is affected by the following files: +- 2-web-constraints-import.project +Configuration is affected by the following files: +- project-stackage/nightly-2023-12-07.config + imported by: stackage-web.config + imported by: 2-web-constraints-import.project +Configuration is affected by the following files: +- stackage-web.config + imported by: 2-web-constraints-import.project +Configuration is affected by the following files: +- with-ghc.config + imported by: 2-web-constraints-import.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: @@ -15,6 +27,18 @@ Could not resolve dependencies: [__1] fail (backjumping, conflict set: cabal-version-override, hashable) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: hashable (3), cabal-version-override (2) # cabal v2-build +Configuration is affected by the following files: +- 2-web-import-constraints.project +Configuration is affected by the following files: +- project-stackage/nightly-2023-12-07.config + imported by: stackage-web.config + imported by: 2-web-import-constraints.project +Configuration is affected by the following files: +- stackage-web.config + imported by: 2-web-import-constraints.project +Configuration is affected by the following files: +- with-ghc.config + imported by: 2-web-import-constraints.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: diff --git a/cabal-testsuite/PackageTests/VersionPriority/3-web.out b/cabal-testsuite/PackageTests/VersionPriority/3-web.out index 9321613639e..9f26901c50a 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/3-web.out +++ b/cabal-testsuite/PackageTests/VersionPriority/3-web.out @@ -1,6 +1,23 @@ # cabal v2-update Downloading the latest package list from test-local-repo # cabal v2-build +Configuration is affected by the following files: +- 3-web-constraints-import.project +Configuration is affected by the following files: +- hop-web.config + imported by: 3-web-constraints-import.project +Configuration is affected by the following files: +- project-stackage/nightly-2023-12-07.config + imported by: stackage-web.config + imported by: hop-web.config + imported by: 3-web-constraints-import.project +Configuration is affected by the following files: +- stackage-web.config + imported by: hop-web.config + imported by: 3-web-constraints-import.project +Configuration is affected by the following files: +- with-ghc.config + imported by: 3-web-constraints-import.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: @@ -16,6 +33,23 @@ Could not resolve dependencies: [__1] fail (backjumping, conflict set: cabal-version-override, hashable) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: hashable (3), cabal-version-override (2) # cabal v2-build +Configuration is affected by the following files: +- 3-web-import-constraints.project +Configuration is affected by the following files: +- hop-web.config + imported by: 3-web-import-constraints.project +Configuration is affected by the following files: +- project-stackage/nightly-2023-12-07.config + imported by: stackage-web.config + imported by: hop-web.config + imported by: 3-web-import-constraints.project +Configuration is affected by the following files: +- stackage-web.config + imported by: hop-web.config + imported by: 3-web-import-constraints.project +Configuration is affected by the following files: +- with-ghc.config + imported by: 3-web-import-constraints.project Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: diff --git a/changelog.d/pr-10507 b/changelog.d/pr-10507 new file mode 100644 index 00000000000..02897f71e19 --- /dev/null +++ b/changelog.d/pr-10507 @@ -0,0 +1,16 @@ +synopsis: Print out which project file we are using with the default verbosity +packages: cabal-install +prs: #10507 +issues: #8519 + +description: { + +- Many people have been burnt by cabal catching stray project files located up + the directory tree. This change tries to protect them at the expense of + producing more output by default. In particular, before this change, you could + see which project file is in use by supplying `-v` (the verbose mode), and + after the change we print this information with the default verbosity. + Changing the behaviour of cabal is out of scope of this change, and will + hopefully be done in the future versions (see #9353 for a way forward). + +} From 1f5b191f04f3dd4211e564078d5a4d54d2aacc6c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 8 Nov 2024 01:24:24 +0000 Subject: [PATCH 29/87] Backport #10316: Remove hashable dependency (#10536) * Remove hashable dependency (#10316) Co-authored-by: Artem Pelenitsyn (cherry picked from commit 5aaf8ea9e2510a8106d50b56b7349b508b308e34) # Conflicts: # cabal.bootstrap.project # cabal.release.project * fixup! conflicts --------- Co-authored-by: Jasper Van der Jeugt Co-authored-by: Artem Pelenitsyn Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- cabal-install/cabal-install.cabal | 2 - .../src/Distribution/Client/FileMonitor.hs | 36 ++++---- .../src/Distribution/Client/ProjectConfig.hs | 20 +++-- .../Distribution/Client/FileMonitor.hs | 10 +-- .../Distribution/Solver/Modular/QuickCheck.hs | 37 ++++----- .../Solver/Modular/QuickCheck/Utils.hs | 83 +++++++++++++++++++ cabal.bootstrap.project | 5 -- cabal.release.project | 3 - cabal.validate.project | 5 -- project-cabal/ghc-latest.config | 2 +- 10 files changed, 133 insertions(+), 70 deletions(-) diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index 4efd0d8f241..5360d2231c6 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -231,7 +231,6 @@ library edit-distance >= 0.2.2 && < 0.3, exceptions >= 0.10.4 && < 0.11, filepath >= 1.4.0.0 && < 1.6, - hashable >= 1.0 && < 1.6, HTTP >= 4000.1.5 && < 4000.5, mtl >= 2.0 && < 2.4, network-uri >= 2.6.0.2 && < 2.7, @@ -431,7 +430,6 @@ test-suite long-tests containers, directory, filepath, - hashable, mtl, network-uri >= 2.6.2.0 && <2.7, random, diff --git a/cabal-install/src/Distribution/Client/FileMonitor.hs b/cabal-install/src/Distribution/Client/FileMonitor.hs index 0872a9a9504..fb57aca1474 100644 --- a/cabal-install/src/Distribution/Client/FileMonitor.hs +++ b/cabal-install/src/Distribution/Client/FileMonitor.hs @@ -35,7 +35,6 @@ import Prelude () import Data.Binary.Get (runGetOrFail) import qualified Data.ByteString.Lazy as BS -import qualified Data.Hashable as Hashable import qualified Data.Map.Strict as Map import Control.Exception @@ -51,6 +50,7 @@ import qualified Control.Monad.State as State import Control.Monad.Trans (MonadIO, liftIO) import Distribution.Client.Glob +import Distribution.Client.HashValue import Distribution.Client.Utils (MergeResult (..), mergeBy) import Distribution.Compat.Time import Distribution.Simple.FileMonitor.Types @@ -83,8 +83,6 @@ data MonitorStateFileSet instance Binary MonitorStateFileSet instance Structured MonitorStateFileSet -type Hash = Int - -- | The state necessary to determine whether a monitored file has changed. -- -- This covers all the cases of 'MonitorFilePath' except for globs which is @@ -107,7 +105,7 @@ data MonitorStateFileStatus | -- | cached file mtime MonitorStateFileModTime !ModTime | -- | cached mtime and content hash - MonitorStateFileHashed !ModTime !Hash + MonitorStateFileHashed !ModTime !HashValue | MonitorStateDirExists | -- | cached dir mtime MonitorStateDirModTime !ModTime @@ -961,21 +959,21 @@ buildMonitorStateGlobRel -- updating a file monitor the set of files is the same or largely the same so -- we can grab the previously known content hashes with their corresponding -- mtimes. -type FileHashCache = Map FilePath (ModTime, Hash) +type FileHashCache = Map FilePath (ModTime, HashValue) -- | We declare it a cache hit if the mtime of a file is the same as before. -lookupFileHashCache :: FileHashCache -> FilePath -> ModTime -> Maybe Hash +lookupFileHashCache :: FileHashCache -> FilePath -> ModTime -> Maybe HashValue lookupFileHashCache hashcache file mtime = do (mtime', hash) <- Map.lookup file hashcache guard (mtime' == mtime) return hash -- | Either get it from the cache or go read the file -getFileHash :: FileHashCache -> FilePath -> FilePath -> ModTime -> IO Hash +getFileHash :: FileHashCache -> FilePath -> FilePath -> ModTime -> IO HashValue getFileHash hashcache relfile absfile mtime = case lookupFileHashCache hashcache relfile mtime of Just hash -> return hash - Nothing -> readFileHash absfile + Nothing -> readFileHashValue absfile -- | Build a 'FileHashCache' from the previous 'MonitorStateFileSet'. While -- in principle we could preserve the structure of the previous state, given @@ -998,7 +996,7 @@ readCacheFileHashes monitor = collectAllFileHashes singlePaths `Map.union` collectAllGlobHashes globPaths - collectAllFileHashes :: [MonitorStateFile] -> Map FilePath (ModTime, Hash) + collectAllFileHashes :: [MonitorStateFile] -> Map FilePath (ModTime, HashValue) collectAllFileHashes singlePaths = Map.fromList [ (fpath, (mtime, hash)) @@ -1010,7 +1008,7 @@ readCacheFileHashes monitor = singlePaths ] - collectAllGlobHashes :: [MonitorStateGlob] -> Map FilePath (ModTime, Hash) + collectAllGlobHashes :: [MonitorStateGlob] -> Map FilePath (ModTime, HashValue) collectAllGlobHashes globPaths = Map.fromList [ (fpath, (mtime, hash)) @@ -1018,7 +1016,7 @@ readCacheFileHashes monitor = , (fpath, (mtime, hash)) <- collectGlobHashes "" gstate ] - collectGlobHashes :: FilePath -> MonitorStateGlobRel -> [(FilePath, (ModTime, Hash))] + collectGlobHashes :: FilePath -> MonitorStateGlobRel -> [(FilePath, (ModTime, HashValue))] collectGlobHashes dir (MonitorStateGlobDirs _ _ _ entries) = [ res | (subdir, fstate) <- entries @@ -1043,13 +1041,13 @@ probeFileModificationTime root file mtime = do unless unchanged (somethingChanged file) -- | Within the @root@ directory, check if @file@ has its 'ModTime' and --- 'Hash' is the same as @mtime@ and @hash@, short-circuiting if it is +-- 'HashValue' is the same as @mtime@ and @hash@, short-circuiting if it is -- different. probeFileModificationTimeAndHash :: FilePath -> FilePath -> ModTime - -> Hash + -> HashValue -> ChangedM () probeFileModificationTimeAndHash root file mtime hash = do unchanged <- @@ -1092,12 +1090,12 @@ checkModificationTimeUnchanged root file mtime = return (mtime == mtime') -- | Returns @True@ if, inside the @root@ directory, @file@ has the --- same 'ModTime' and 'Hash' as @mtime and @chash@. +-- same 'ModTime' and 'HashValue' as @mtime and @chash@. checkFileModificationTimeAndHashUnchanged :: FilePath -> FilePath -> ModTime - -> Hash + -> HashValue -> IO Bool checkFileModificationTimeAndHashUnchanged root file mtime chash = handleIOException False $ do @@ -1105,15 +1103,9 @@ checkFileModificationTimeAndHashUnchanged root file mtime chash = if mtime == mtime' then return True else do - chash' <- readFileHash (root file) + chash' <- readFileHashValue (root file) return (chash == chash') --- | Read a non-cryptographic hash of a @file@. -readFileHash :: FilePath -> IO Hash -readFileHash file = - withBinaryFile file ReadMode $ \hnd -> - evaluate . Hashable.hash =<< BS.hGetContents hnd - -- | Given a directory @dir@, return @Nothing@ if its 'ModTime' -- is the same as @mtime@, and the new 'ModTime' if it is not. checkDirectoryModificationTime :: FilePath -> ModTime -> IO (Maybe ModTime) diff --git a/cabal-install/src/Distribution/Client/ProjectConfig.hs b/cabal-install/src/Distribution/Client/ProjectConfig.hs index aabb318e9d9..72328978d2f 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig.hs @@ -96,6 +96,7 @@ import Distribution.Client.GlobalFlags ( RepoContext (..) , withRepoContext' ) +import Distribution.Client.HashValue import Distribution.Client.HttpUtils ( HttpTransport , configureTransport @@ -185,6 +186,10 @@ import Distribution.Types.PackageVersionConstraint import Distribution.Types.SourceRepo ( RepoType (..) ) +import Distribution.Utils.Generic + ( toUTF8BS + , toUTF8LBS + ) import Distribution.Utils.NubList ( fromNubList ) @@ -203,11 +208,9 @@ import Control.Exception (handle) import Control.Monad.Trans (liftIO) import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as LBS -import qualified Data.Hashable as Hashable import qualified Data.List.NonEmpty as NE import qualified Data.Map as Map import qualified Data.Set as Set -import Numeric (showHex) import Network.URI ( URI (..) @@ -1655,7 +1658,7 @@ localFileNameForRemoteTarball :: URI -> FilePath localFileNameForRemoteTarball uri = mangleName uri ++ "-" - ++ showHex locationHash "" + ++ showHashValue locationHash where mangleName = truncateString 10 @@ -1665,15 +1668,15 @@ localFileNameForRemoteTarball uri = . dropTrailingPathSeparator . uriPath - locationHash :: Word - locationHash = fromIntegral (Hashable.hash (uriToString id uri "")) + locationHash :: HashValue + locationHash = hashValue (toUTF8LBS (uriToString id uri "")) -- | The name to use for a local file or dir for a remote 'SourceRepo'. -- This is deterministic based on the source repo identity details, and -- intended to produce non-clashing file names for different repos. localFileNameForRemoteRepo :: SourceRepoList -> FilePath localFileNameForRemoteRepo SourceRepositoryPackage{srpType, srpLocation} = - mangleName srpLocation ++ "-" ++ showHex locationHash "" + mangleName srpLocation ++ "-" ++ showHashValue locationHash where mangleName = truncateString 10 @@ -1682,9 +1685,10 @@ localFileNameForRemoteRepo SourceRepositoryPackage{srpType, srpLocation} = . dropTrailingPathSeparator -- just the parts that make up the "identity" of the repo - locationHash :: Word + locationHash :: HashValue locationHash = - fromIntegral (Hashable.hash (show srpType, srpLocation)) + hashValue $ + LBS.fromChunks [toUTF8BS srpLocation, toUTF8BS (show srpType)] -- | Truncate a string, with a visual indication that it is truncated. truncateString :: Int -> String -> String diff --git a/cabal-install/tests/UnitTests/Distribution/Client/FileMonitor.hs b/cabal-install/tests/UnitTests/Distribution/Client/FileMonitor.hs index 88901d17cb7..77f84108563 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/FileMonitor.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/FileMonitor.hs @@ -32,7 +32,7 @@ tests :: Int -> [TestTree] tests mtimeChange = [ testGroup "Structured hashes" - [ testCase "MonitorStateFile" $ structureHash (Proxy :: Proxy MonitorStateFile) @?= Fingerprint 0xe4108804c34962f6 0x06e94f8fc9e48e13 + [ testCase "MonitorStateFile" $ structureHash (Proxy :: Proxy MonitorStateFile) @?= Fingerprint 0xe1339b9dcfdfe19d 0x9135a5f30da7ca82 , testCase "MonitorStateGlob" $ structureHash (Proxy :: Proxy MonitorStateGlob) @?= Fingerprint fingerprintStateGlob1 fingerprintStateGlob2 , testCase "MonitorStateFileSet" $ structureHash (Proxy :: Proxy MonitorStateFileSet) @?= Fingerprint fingerprintStateFileSet1 fingerprintStateFileSet2 ] @@ -88,10 +88,10 @@ tests mtimeChange = Windows -> expectFailBecause msg _ -> id fingerprintStateGlob1, fingerprintStateGlob2, fingerprintStateFileSet1, fingerprintStateFileSet2 :: Word64 - fingerprintStateGlob1 = 0x8d6292a27f48ab78 - fingerprintStateGlob2 = 0xa69393cf17cb6c71 - fingerprintStateFileSet1 = 0x441fcb5eaf403013 - fingerprintStateFileSet2 = 0x129db82bba47f56f + fingerprintStateGlob1 = 0x1f9edda22b7e8de6 + fingerprintStateGlob2 = 0xda1d085c9fc6f5db + fingerprintStateFileSet1 = 0x00ac4a0df546905d + fingerprintStateFileSet2 = 0x5b2b2df018b1fa83 -- Check the file system behaves the way we expect it to diff --git a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/QuickCheck.hs b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/QuickCheck.hs index c891f60692b..2b308d770ae 100644 --- a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/QuickCheck.hs +++ b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/QuickCheck.hs @@ -10,7 +10,6 @@ import Prelude () import Control.Arrow ((&&&)) import Data.Either (lefts) -import Data.Hashable (Hashable (..)) import Data.List (groupBy, isInfixOf) import Text.Show.Pretty (parseValue, valToStr) @@ -20,7 +19,7 @@ import Test.QuickCheck.Instances.Cabal () import Test.Tasty (TestTree) import Distribution.Types.Flag (FlagName) -import Distribution.Utils.ShortText (ShortText) +import Distribution.Utils.ShortText (ShortText, fromShortText) import Distribution.Client.Setup (defaultMaxBackjumps) @@ -47,7 +46,8 @@ import Distribution.Version import UnitTests.Distribution.Solver.Modular.DSL import UnitTests.Distribution.Solver.Modular.QuickCheck.Utils - ( testPropertyWithSeed + ( ArbitraryOrd (..) + , testPropertyWithSeed ) tests :: [TestTree] @@ -223,6 +223,9 @@ newtype VarOrdering = VarOrdering { unVarOrdering :: Variable P.QPN -> Variable P.QPN -> Ordering } +instance Arbitrary VarOrdering where + arbitrary = VarOrdering <$> arbitraryCompare + solve :: EnableBackjumping -> FineGrainedConflicts @@ -618,22 +621,18 @@ instance Arbitrary OptionalStanza where shrink BenchStanzas = [TestStanzas] shrink TestStanzas = [] --- Randomly sorts solver variables using 'hash'. --- TODO: Sorting goals with this function is very slow. -instance Arbitrary VarOrdering where - arbitrary = do - f <- arbitrary :: Gen (Int -> Int) - return $ VarOrdering (comparing (f . hash)) - -instance Hashable pn => Hashable (Variable pn) -instance Hashable a => Hashable (P.Qualified a) -instance Hashable P.PackagePath -instance Hashable P.Qualifier -instance Hashable P.Namespace -instance Hashable OptionalStanza -instance Hashable FlagName -instance Hashable PackageName -instance Hashable ShortText +instance ArbitraryOrd pn => ArbitraryOrd (Variable pn) +instance ArbitraryOrd a => ArbitraryOrd (P.Qualified a) +instance ArbitraryOrd P.PackagePath +instance ArbitraryOrd P.Qualifier +instance ArbitraryOrd P.Namespace +instance ArbitraryOrd OptionalStanza +instance ArbitraryOrd FlagName +instance ArbitraryOrd PackageName +instance ArbitraryOrd ShortText where + arbitraryCompare = do + strc <- arbitraryCompare + pure $ \l r -> strc (fromShortText l) (fromShortText r) deriving instance Generic (Variable pn) deriving instance Generic (P.Qualified a) diff --git a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/QuickCheck/Utils.hs b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/QuickCheck/Utils.hs index c1882bc659a..24d61e1e72d 100644 --- a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/QuickCheck/Utils.hs +++ b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/QuickCheck/Utils.hs @@ -1,10 +1,17 @@ +{-# LANGUAGE DefaultSignatures #-} +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE TypeOperators #-} + module UnitTests.Distribution.Solver.Modular.QuickCheck.Utils ( testPropertyWithSeed + , ArbitraryOrd (..) ) where import Data.Tagged (Tagged, retag) +import GHC.Generics import System.Random (getStdRandom, random) +import qualified Test.QuickCheck as QC import Test.Tasty (TestTree) import Test.Tasty.Options (OptionDescription, lookupOption, setOption) import Test.Tasty.Providers (IsTest (..), singleTest) @@ -35,3 +42,79 @@ instance IsTest QCWithSeed where _ -> getStdRandom random notice normal $ "Using --quickcheck-replay=" ++ show replay run (setOption (QuickCheckReplayLegacy replay) options) test progress + +-- | Typeclass for doing arbitrary (but law-abiding) comparisons. See also +-- 'ArbitraryOrd', this is the version that works with 'GHC.Generics'. +class GArbitraryOrd f where + garbitraryCompare :: QC.Gen (f p -> f p -> Ordering) + +instance GArbitraryOrd V1 where + garbitraryCompare = pure $ \_ _ -> EQ + +instance GArbitraryOrd U1 where + garbitraryCompare = pure $ \_ _ -> EQ + +instance (GArbitraryOrd f, GArbitraryOrd g) => GArbitraryOrd (f :+: g) where + garbitraryCompare = do + bias <- QC.arbitrary + lcompare <- garbitraryCompare + rcompare <- garbitraryCompare + pure $ \l r -> + let args = if bias then (l, r) else (r, l) + in case args of + (L1 x, L1 y) -> lcompare x y + (L1 _, R1 _) -> LT + (R1 x, R1 y) -> rcompare x y + (R1 _, L1 _) -> GT + +instance (GArbitraryOrd f, GArbitraryOrd g) => GArbitraryOrd (f :*: g) where + garbitraryCompare = do + bias <- QC.arbitrary + xcompare <- garbitraryCompare + ycompare <- garbitraryCompare + pure $ \l r -> + let (x1 :*: y1, x2 :*: y2) = if bias then (l, r) else (r, l) + in case xcompare x1 x2 of + LT -> LT + EQ -> ycompare y1 y2 + GT -> GT + +instance GArbitraryOrd f => GArbitraryOrd (M1 i t f) where + garbitraryCompare = (\c (M1 l) (M1 r) -> c l r) <$> garbitraryCompare + +instance ArbitraryOrd c => GArbitraryOrd (K1 i c) where + garbitraryCompare = (\c (K1 l) (K1 r) -> c l r) <$> arbitraryCompare + +-- | Typeclass for doing arbitrary (but law-abiding) comparisons. +class ArbitraryOrd a where + arbitraryCompare :: QC.Gen (a -> a -> Ordering) + default arbitraryCompare + :: (Generic a, GArbitraryOrd (Rep a)) => QC.Gen (a -> a -> Ordering) + arbitraryCompare = (\c l r -> c (from l) (from r)) <$> garbitraryCompare + +instance ArbitraryOrd Char where + arbitraryCompare = arbitraryCompareReverseSection + +-- | Construct an arbitrary comparison by (conceptually) laying out all values +-- in a list, picking two values (since we are using arbitrary these should +-- be "good" values), and then reversing the section between these two values. +arbitraryCompareReverseSection + :: (QC.Arbitrary a, Ord a) => QC.Gen (a -> a -> Ordering) +arbitraryCompareReverseSection = do + x <- QC.arbitrary + y <- QC.arbitrary + let inside n = n >= min x y && n <= max x y + pure $ \l r -> if inside l && inside r then compare r l else compare l r + +instance ArbitraryOrd a => ArbitraryOrd [a] where + arbitraryCompare = do + shorterIsLess <- QC.arbitrary + cmp <- arbitraryCompare + let go [] [] = EQ + go [] (_ : _) = if shorterIsLess then LT else GT + go (_ : _) [] = if shorterIsLess then GT else LT + go (x : xs) (y : ys) = case cmp x y of + LT -> LT + EQ -> go xs ys + GT -> GT + pure go diff --git a/cabal.bootstrap.project b/cabal.bootstrap.project index ba6bd508966..9ef27f9e72d 100644 --- a/cabal.bootstrap.project +++ b/cabal.bootstrap.project @@ -9,9 +9,4 @@ packages: tests: False benchmarks: False --- This project file is used to generate bootstrap plans, --- as such we cannot enable "-march=native". -constraints: - hashable -arch-native - index-state: hackage.haskell.org 2024-09-05T17:19:45Z diff --git a/cabal.release.project b/cabal.release.project index bb67251661f..676e9f68587 100644 --- a/cabal.release.project +++ b/cabal.release.project @@ -2,7 +2,4 @@ import: project-cabal/pkgs/cabal.config import: project-cabal/pkgs/install.config import: project-cabal/pkgs/tests.config -constraints: - hashable -arch-native - index-state: hackage.haskell.org 2024-09-05T17:19:45Z diff --git a/cabal.validate.project b/cabal.validate.project index 2e3084cccf0..52c78411107 100644 --- a/cabal.validate.project +++ b/cabal.validate.project @@ -7,8 +7,3 @@ tests: True write-ghc-environment-files: never program-options ghc-options: -Werror - --- This project file is used to distribute the cabal-head binary, --- as such we cannot enable "-march=native". -constraints: - hashable -arch-native diff --git a/project-cabal/ghc-latest.config b/project-cabal/ghc-latest.config index 24810b986a4..8b745c024bb 100644 --- a/project-cabal/ghc-latest.config +++ b/project-cabal/ghc-latest.config @@ -10,7 +10,7 @@ -- when upgrading to a newer GHC if impl(ghc >= 9.12.0) allow-newer: - --windns:*, rere:*, tree-diff:*, uuid-types:*, these:*, hashable:*, assoc:*, semialign:*, indexed-traversable-instances:*, indexed-traversable:*, OneTuple:*, scientific:*, time-compat:*, text-short:*, integer-conversion:*, generically:*, data-fix:*, binary:* + --windns:*, rere:*, tree-diff:*, uuid-types:*, these:*, assoc:*, semialign:*, indexed-traversable-instances:*, indexed-traversable:*, OneTuple:*, scientific:*, time-compat:*, text-short:*, integer-conversion:*, generically:*, data-fix:*, binary:* -- Artem, 2024-04-21: I started and then gave up... *:base, *:template-haskell, text-short, *:deepseq, *:bytestring, *:ghc-prim From 93baa676bf670eb34a94aee55ecd819d83eda3db Mon Sep 17 00:00:00 2001 From: Rebecca Turner Date: Tue, 27 Aug 2024 13:08:48 -0700 Subject: [PATCH 30/87] Don't error if package index is missing (fix #10504) All of the packages Cabal needs may already be present in the local package database; we don't know yet! This is a partial revert of #8944. See: https://github.com/haskell/cabal/pull/8944#issuecomment-2313147439 (cherry picked from commit d58a75ef4adab36688878420cc9e2c25bca41ec4) --- cabal-install/src/Distribution/Client/IndexUtils.hs | 4 ++-- cabal-testsuite/PackageTests/Get/T7248/cabal.out | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/cabal-install/src/Distribution/Client/IndexUtils.hs b/cabal-install/src/Distribution/Client/IndexUtils.hs index f66cf0d651c..705c62d62d1 100644 --- a/cabal-install/src/Distribution/Client/IndexUtils.hs +++ b/cabal-install/src/Distribution/Client/IndexUtils.hs @@ -457,8 +457,8 @@ readRepoIndex verbosity repoCtxt repo idxState = if isDoesNotExistError e then do case repo of - RepoRemote{..} -> dieWithException verbosity $ MissingPackageList repoRemote - RepoSecure{..} -> dieWithException verbosity $ MissingPackageList repoRemote + RepoRemote{..} -> warn verbosity $ exceptionMessageCabalInstall $ MissingPackageList repoRemote + RepoSecure{..} -> warn verbosity $ exceptionMessageCabalInstall $ MissingPackageList repoRemote RepoLocalNoIndex local _ -> warn verbosity $ "Error during construction of local+noindex " diff --git a/cabal-testsuite/PackageTests/Get/T7248/cabal.out b/cabal-testsuite/PackageTests/Get/T7248/cabal.out index a172b425d4d..0c6e3ce035c 100644 --- a/cabal-testsuite/PackageTests/Get/T7248/cabal.out +++ b/cabal-testsuite/PackageTests/Get/T7248/cabal.out @@ -1,4 +1,6 @@ # cabal get Warning: /cabal.config: Unrecognized stanza on line 3 -Error: [Cabal-7160] -The package list for 'repo.invalid' does not exist. Run 'cabal update' to download it. +Warning: The package list for 'repo.invalid' does not exist. Run 'cabal update' to download it. +Error: [Cabal-7100] +There is no package named 'a-b-s-e-n-t'. +You may need to run 'cabal update' to get the latest list of available packages. From 281927c13c8f682d9c335ac30a8da2191f3b2042 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 06:42:07 +0000 Subject: [PATCH 31/87] Backport #10548: Print info about current project file in use to stderr and ignore the imports by default (#10550) * Print info about current project file in use to stderr and ignore the imports by default (#10548) * Print info about current project file in use to stderr (fix #10547) * only report top-level project config files in the default verbosity in verbose mode report imported files too * fix tests * don't print anything when provenance is empty * fix tests * Apply suggestions from code review Co-authored-by: ffaf1 --------- Co-authored-by: ffaf1 (cherry picked from commit 7de199ad5eb91f8f32eee76ecd4577ac36c13225) # Conflicts: # cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out * fixup! fix conflicts --------- Co-authored-by: Artem Pelenitsyn --- .../Solver/Types/ProjectConfigPath.hs | 6 +++++ .../src/Distribution/Client/ProjectConfig.hs | 7 ++++++ .../Distribution/Client/ProjectPlanning.hs | 15 ++++++------ .../ConditionalAndImport/cabal.out | 23 ------------------- .../LocalConfigOverwrite/cabal.out | 2 -- .../NewFreeze/BuildTools/new_freeze.out | 1 - .../NewFreeze/Flags/new_freeze.out | 1 - .../NewFreeze/FreezeFile/new_freeze.out | 2 -- .../RelativePathProjectImports/cabal.out | 2 -- .../PackageTests/VersionPriority/1-local.out | 2 -- .../PackageTests/VersionPriority/1-web.out | 4 ---- .../PackageTests/VersionPriority/2-local.out | 4 ---- .../PackageTests/VersionPriority/2-web.out | 6 ----- .../PackageTests/VersionPriority/3-web.out | 8 ------- 14 files changed, 21 insertions(+), 62 deletions(-) diff --git a/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs b/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs index c57ade0c3e3..b98d493656c 100644 --- a/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs +++ b/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs @@ -16,6 +16,7 @@ module Distribution.Solver.Types.ProjectConfigPath -- * Checks and Normalization , isCyclicConfigPath + , isTopLevelConfigPath , canonicalizeConfigPath ) where @@ -138,6 +139,11 @@ nullProjectConfigPath = ProjectConfigPath $ "unused" :| [] isCyclicConfigPath :: ProjectConfigPath -> Bool isCyclicConfigPath (ProjectConfigPath p) = length p /= length (NE.nub p) +-- | Check if the project config path is top-level, meaning it was not included by +-- some other project config. +isTopLevelConfigPath :: ProjectConfigPath -> Bool +isTopLevelConfigPath (ProjectConfigPath p) = NE.length p == 1 + -- | Prepends the path of the importee to the importer path. consProjectConfigPath :: FilePath -> ProjectConfigPath -> ProjectConfigPath consProjectConfigPath p ps = ProjectConfigPath (p <| coerce ps) diff --git a/cabal-install/src/Distribution/Client/ProjectConfig.hs b/cabal-install/src/Distribution/Client/ProjectConfig.hs index 72328978d2f..89de6ea869c 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig.hs @@ -37,6 +37,7 @@ module Distribution.Client.ProjectConfig , writeProjectLocalFreezeConfig , writeProjectConfigFile , commandLineFlagsToProjectConfig + , onlyTopLevelProvenance -- * Packages within projects , ProjectPackageLocation (..) @@ -1753,3 +1754,9 @@ checkBadPerPackageCompilerPaths compilerPrograms packagesConfig = ] of [] -> return () ps -> throwIO (BadPerPackageCompilerPaths ps) + +-- | Filter out non-top-level project configs. +onlyTopLevelProvenance :: Set ProjectConfigProvenance -> Set ProjectConfigProvenance +onlyTopLevelProvenance = Set.filter $ \case + Implicit -> False + Explicit ps -> isTopLevelConfigPath ps diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning.hs b/cabal-install/src/Distribution/Client/ProjectPlanning.hs index 98ef7b67789..6ffbc97fcf3 100644 --- a/cabal-install/src/Distribution/Client/ProjectPlanning.hs +++ b/cabal-install/src/Distribution/Client/ProjectPlanning.hs @@ -192,6 +192,7 @@ import Distribution.Backpack.LinkedComponent import Distribution.Backpack.ModuleShape import Distribution.Simple.Utils +import Distribution.Verbosity import Distribution.Version import qualified Distribution.InstalledPackageInfo as IPI @@ -394,13 +395,13 @@ rebuildProjectConfig localPackages <- phaseReadLocalPackages (projectConfig <> cliConfig) return (projectConfig, localPackages) - sequence_ - [ do - notice verbosity . render . vcat $ - text "Configuration is affected by the following files:" - : [text "-" <+> docProjectConfigPath path] - | Explicit path <- Set.toList $ projectConfigProvenance projectConfig - ] + let configfiles = + [ text "-" <+> docProjectConfigPath path + | Explicit path <- Set.toList . (if verbosity >= verbose then id else onlyTopLevelProvenance) $ projectConfigProvenance projectConfig + ] + unless (null configfiles) $ + notice (verboseStderr verbosity) . render . vcat $ + text "Configuration is affected by the following files:" : configfiles return (projectConfig <> cliConfig, localPackages) where diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out b/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out index be9a79bbc22..534bd000a1a 100644 --- a/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out @@ -3,7 +3,6 @@ Downloading the latest package list from test-local-repo # cabal v2-run Configuration is affected by the following files: - cabal.project -Configuration is affected by the following files: - extra.project imported by: cabal.project Resolving dependencies... @@ -70,9 +69,7 @@ cyclical import of cyclical-2-out-out-self-b.config; Configuration is affected by the following files: - noncyclical-same-filename-a.config imported by: noncyclical-same-filename-a.project -Configuration is affected by the following files: - noncyclical-same-filename-a.project -Configuration is affected by the following files: - same-filename/noncyclical-same-filename-a.config imported by: noncyclical-same-filename-a.config imported by: noncyclical-same-filename-a.project @@ -89,9 +86,7 @@ Configuration is affected by the following files: - noncyclical-same-filename-b.config imported by: same-filename/noncyclical-same-filename-b.config imported by: noncyclical-same-filename-b.project -Configuration is affected by the following files: - noncyclical-same-filename-b.project -Configuration is affected by the following files: - same-filename/noncyclical-same-filename-b.config imported by: noncyclical-same-filename-b.project Up to date @@ -126,17 +121,14 @@ cyclical import of cyclical-same-filename-out-out-back.config; # cabal v2-build Configuration is affected by the following files: - hops-0.project -Configuration is affected by the following files: - hops-2.config imported by: hops/hops-1.config imported by: hops-0.project -Configuration is affected by the following files: - hops-4.config imported by: hops/hops-3.config imported by: hops-2.config imported by: hops/hops-1.config imported by: hops-0.project -Configuration is affected by the following files: - hops-6.config imported by: hops/hops-5.config imported by: hops-4.config @@ -144,7 +136,6 @@ Configuration is affected by the following files: imported by: hops-2.config imported by: hops/hops-1.config imported by: hops-0.project -Configuration is affected by the following files: - hops-8.config imported by: hops/hops-7.config imported by: hops-6.config @@ -154,22 +145,18 @@ Configuration is affected by the following files: imported by: hops-2.config imported by: hops/hops-1.config imported by: hops-0.project -Configuration is affected by the following files: - hops/hops-1.config imported by: hops-0.project -Configuration is affected by the following files: - hops/hops-3.config imported by: hops-2.config imported by: hops/hops-1.config imported by: hops-0.project -Configuration is affected by the following files: - hops/hops-5.config imported by: hops-4.config imported by: hops/hops-3.config imported by: hops-2.config imported by: hops/hops-1.config imported by: hops-0.project -Configuration is affected by the following files: - hops/hops-7.config imported by: hops-6.config imported by: hops/hops-5.config @@ -178,7 +165,6 @@ Configuration is affected by the following files: imported by: hops-2.config imported by: hops/hops-1.config imported by: hops-0.project -Configuration is affected by the following files: - hops/hops-9.config imported by: hops-8.config imported by: hops/hops-7.config @@ -194,17 +180,14 @@ Up to date # cabal v2-build Configuration is affected by the following files: - oops-0.project -Configuration is affected by the following files: - oops-2.config imported by: oops/oops-1.config imported by: oops-0.project -Configuration is affected by the following files: - oops-4.config imported by: oops/oops-3.config imported by: oops-2.config imported by: oops/oops-1.config imported by: oops-0.project -Configuration is affected by the following files: - oops-6.config imported by: oops/oops-5.config imported by: oops-4.config @@ -212,7 +195,6 @@ Configuration is affected by the following files: imported by: oops-2.config imported by: oops/oops-1.config imported by: oops-0.project -Configuration is affected by the following files: - oops-8.config imported by: oops/oops-7.config imported by: oops-6.config @@ -222,22 +204,18 @@ Configuration is affected by the following files: imported by: oops-2.config imported by: oops/oops-1.config imported by: oops-0.project -Configuration is affected by the following files: - oops/oops-1.config imported by: oops-0.project -Configuration is affected by the following files: - oops/oops-3.config imported by: oops-2.config imported by: oops/oops-1.config imported by: oops-0.project -Configuration is affected by the following files: - oops/oops-5.config imported by: oops-4.config imported by: oops/oops-3.config imported by: oops-2.config imported by: oops/oops-1.config imported by: oops-0.project -Configuration is affected by the following files: - oops/oops-7.config imported by: oops-6.config imported by: oops/oops-5.config @@ -246,7 +224,6 @@ Configuration is affected by the following files: imported by: oops-2.config imported by: oops/oops-1.config imported by: oops-0.project -Configuration is affected by the following files: - oops/oops-9.config imported by: oops-8.config imported by: oops/oops-7.config diff --git a/cabal-testsuite/PackageTests/NewConfigure/LocalConfigOverwrite/cabal.out b/cabal-testsuite/PackageTests/NewConfigure/LocalConfigOverwrite/cabal.out index a8f7c951277..14c74f590ec 100644 --- a/cabal-testsuite/PackageTests/NewConfigure/LocalConfigOverwrite/cabal.out +++ b/cabal-testsuite/PackageTests/NewConfigure/LocalConfigOverwrite/cabal.out @@ -1,12 +1,10 @@ # cabal v2-configure Configuration is affected by the following files: - cabal.project -Configuration is affected by the following files: - cabal.project.local 'cabal.project.local' already exists, backing it up to 'cabal.project.local~'. # cabal v2-configure Configuration is affected by the following files: - foo.project -Configuration is affected by the following files: - foo.project.local 'foo.project.local' already exists, backing it up to 'foo.project.local~'. diff --git a/cabal-testsuite/PackageTests/NewFreeze/BuildTools/new_freeze.out b/cabal-testsuite/PackageTests/NewFreeze/BuildTools/new_freeze.out index fa90f30f471..9674cd0cc8b 100644 --- a/cabal-testsuite/PackageTests/NewFreeze/BuildTools/new_freeze.out +++ b/cabal-testsuite/PackageTests/NewFreeze/BuildTools/new_freeze.out @@ -18,7 +18,6 @@ Wrote freeze file: /cabal.project.freeze # cabal v2-build Configuration is affected by the following files: - cabal.project -Configuration is affected by the following files: - cabal.project.freeze Resolving dependencies... Build profile: -w ghc- -O1 diff --git a/cabal-testsuite/PackageTests/NewFreeze/Flags/new_freeze.out b/cabal-testsuite/PackageTests/NewFreeze/Flags/new_freeze.out index 84064b158d5..8adf0bf2702 100644 --- a/cabal-testsuite/PackageTests/NewFreeze/Flags/new_freeze.out +++ b/cabal-testsuite/PackageTests/NewFreeze/Flags/new_freeze.out @@ -17,7 +17,6 @@ Wrote freeze file: /cabal.project.freeze # cabal v2-build Configuration is affected by the following files: - cabal.project -Configuration is affected by the following files: - cabal.project.freeze Resolving dependencies... Build profile: -w ghc- -O1 diff --git a/cabal-testsuite/PackageTests/NewFreeze/FreezeFile/new_freeze.out b/cabal-testsuite/PackageTests/NewFreeze/FreezeFile/new_freeze.out index 540a69d4128..f07819538f4 100644 --- a/cabal-testsuite/PackageTests/NewFreeze/FreezeFile/new_freeze.out +++ b/cabal-testsuite/PackageTests/NewFreeze/FreezeFile/new_freeze.out @@ -24,7 +24,6 @@ Wrote freeze file: /cabal.project.freeze # cabal v2-build Configuration is affected by the following files: - cabal.project -Configuration is affected by the following files: - cabal.project.freeze Resolving dependencies... Build profile: -w ghc- -O1 @@ -41,7 +40,6 @@ Building executable 'my-exe' for my-local-package-1.0... # cabal v2-freeze Configuration is affected by the following files: - cabal.project -Configuration is affected by the following files: - cabal.project.freeze Wrote freeze file: /cabal.project.freeze # cabal v2-build diff --git a/cabal-testsuite/PackageTests/RelativePathProjectImports/cabal.out b/cabal-testsuite/PackageTests/RelativePathProjectImports/cabal.out index d5870b1955b..10c4953236f 100644 --- a/cabal-testsuite/PackageTests/RelativePathProjectImports/cabal.out +++ b/cabal-testsuite/PackageTests/RelativePathProjectImports/cabal.out @@ -1,7 +1,6 @@ # cabal build Configuration is affected by the following files: - cabal.project -Configuration is affected by the following files: - dep/cabal.project imported by: cabal.project Resolving dependencies... @@ -22,7 +21,6 @@ Building library for main-0.1... # cabal build Configuration is affected by the following files: - cabal.project -Configuration is affected by the following files: - dep/cabal.project imported by: cabal.project Resolving dependencies... diff --git a/cabal-testsuite/PackageTests/VersionPriority/1-local.out b/cabal-testsuite/PackageTests/VersionPriority/1-local.out index 1806aebd5a8..acca1619534 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/1-local.out +++ b/cabal-testsuite/PackageTests/VersionPriority/1-local.out @@ -3,7 +3,6 @@ Downloading the latest package list from test-local-repo # cabal v2-build Configuration is affected by the following files: - 1-local-constraints-import.project -Configuration is affected by the following files: - stackage-local.config imported by: 1-local-constraints-import.project Resolving dependencies... @@ -21,7 +20,6 @@ After searching the rest of the dependency tree exhaustively, these were the goa # cabal v2-build Configuration is affected by the following files: - 1-local-import-constraints.project -Configuration is affected by the following files: - stackage-local.config imported by: 1-local-import-constraints.project Resolving dependencies... diff --git a/cabal-testsuite/PackageTests/VersionPriority/1-web.out b/cabal-testsuite/PackageTests/VersionPriority/1-web.out index 13e930c943b..f7ca5a23be8 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/1-web.out +++ b/cabal-testsuite/PackageTests/VersionPriority/1-web.out @@ -3,10 +3,8 @@ Downloading the latest package list from test-local-repo # cabal v2-build Configuration is affected by the following files: - 1-web-constraints-import.project -Configuration is affected by the following files: - project-stackage/nightly-2023-12-07.config imported by: 1-web-constraints-import.project -Configuration is affected by the following files: - with-ghc.config imported by: 1-web-constraints-import.project Resolving dependencies... @@ -24,10 +22,8 @@ After searching the rest of the dependency tree exhaustively, these were the goa # cabal v2-build Configuration is affected by the following files: - 1-web-import-constraints.project -Configuration is affected by the following files: - project-stackage/nightly-2023-12-07.config imported by: 1-web-import-constraints.project -Configuration is affected by the following files: - with-ghc.config imported by: 1-web-import-constraints.project Resolving dependencies... diff --git a/cabal-testsuite/PackageTests/VersionPriority/2-local.out b/cabal-testsuite/PackageTests/VersionPriority/2-local.out index 211c4ee9d9c..bf3ae4cb27c 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/2-local.out +++ b/cabal-testsuite/PackageTests/VersionPriority/2-local.out @@ -3,10 +3,8 @@ Downloading the latest package list from test-local-repo # cabal v2-build Configuration is affected by the following files: - 2-local-constraints-import.project -Configuration is affected by the following files: - hop-local.config imported by: 2-local-constraints-import.project -Configuration is affected by the following files: - stackage-local.config imported by: hop-local.config imported by: 2-local-constraints-import.project @@ -26,10 +24,8 @@ After searching the rest of the dependency tree exhaustively, these were the goa # cabal v2-build Configuration is affected by the following files: - 2-local-import-constraints.project -Configuration is affected by the following files: - hop-local.config imported by: 2-local-import-constraints.project -Configuration is affected by the following files: - stackage-local.config imported by: hop-local.config imported by: 2-local-import-constraints.project diff --git a/cabal-testsuite/PackageTests/VersionPriority/2-web.out b/cabal-testsuite/PackageTests/VersionPriority/2-web.out index d592a88a472..17bc5a01962 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/2-web.out +++ b/cabal-testsuite/PackageTests/VersionPriority/2-web.out @@ -3,14 +3,11 @@ Downloading the latest package list from test-local-repo # cabal v2-build Configuration is affected by the following files: - 2-web-constraints-import.project -Configuration is affected by the following files: - project-stackage/nightly-2023-12-07.config imported by: stackage-web.config imported by: 2-web-constraints-import.project -Configuration is affected by the following files: - stackage-web.config imported by: 2-web-constraints-import.project -Configuration is affected by the following files: - with-ghc.config imported by: 2-web-constraints-import.project Resolving dependencies... @@ -29,14 +26,11 @@ After searching the rest of the dependency tree exhaustively, these were the goa # cabal v2-build Configuration is affected by the following files: - 2-web-import-constraints.project -Configuration is affected by the following files: - project-stackage/nightly-2023-12-07.config imported by: stackage-web.config imported by: 2-web-import-constraints.project -Configuration is affected by the following files: - stackage-web.config imported by: 2-web-import-constraints.project -Configuration is affected by the following files: - with-ghc.config imported by: 2-web-import-constraints.project Resolving dependencies... diff --git a/cabal-testsuite/PackageTests/VersionPriority/3-web.out b/cabal-testsuite/PackageTests/VersionPriority/3-web.out index 9f26901c50a..d9eee435ab1 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/3-web.out +++ b/cabal-testsuite/PackageTests/VersionPriority/3-web.out @@ -3,19 +3,15 @@ Downloading the latest package list from test-local-repo # cabal v2-build Configuration is affected by the following files: - 3-web-constraints-import.project -Configuration is affected by the following files: - hop-web.config imported by: 3-web-constraints-import.project -Configuration is affected by the following files: - project-stackage/nightly-2023-12-07.config imported by: stackage-web.config imported by: hop-web.config imported by: 3-web-constraints-import.project -Configuration is affected by the following files: - stackage-web.config imported by: hop-web.config imported by: 3-web-constraints-import.project -Configuration is affected by the following files: - with-ghc.config imported by: 3-web-constraints-import.project Resolving dependencies... @@ -35,19 +31,15 @@ After searching the rest of the dependency tree exhaustively, these were the goa # cabal v2-build Configuration is affected by the following files: - 3-web-import-constraints.project -Configuration is affected by the following files: - hop-web.config imported by: 3-web-import-constraints.project -Configuration is affected by the following files: - project-stackage/nightly-2023-12-07.config imported by: stackage-web.config imported by: hop-web.config imported by: 3-web-import-constraints.project -Configuration is affected by the following files: - stackage-web.config imported by: hop-web.config imported by: 3-web-import-constraints.project -Configuration is affected by the following files: - with-ghc.config imported by: 3-web-import-constraints.project Resolving dependencies... From d246fa0ef6e1bb939adf449aba4e85962cfb74f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9cate?= Date: Thu, 21 Nov 2024 23:26:43 +0100 Subject: [PATCH 32/87] Bump versions of Cabal{,-syntax}, cabal-install{,-solver} to 3.14.1.0 (#10577) --- Cabal-syntax/Cabal-syntax.cabal | 2 +- Cabal/Cabal.cabal | 2 +- cabal-install-solver/cabal-install-solver.cabal | 2 +- cabal-install/cabal-install.cabal | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cabal-syntax/Cabal-syntax.cabal b/Cabal-syntax/Cabal-syntax.cabal index 8583b939f7b..29fc579d5eb 100644 --- a/Cabal-syntax/Cabal-syntax.cabal +++ b/Cabal-syntax/Cabal-syntax.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: Cabal-syntax -version: 3.14.0.0 +version: 3.14.1.0 copyright: 2003-2024, Cabal Development Team (see AUTHORS file) license: BSD-3-Clause license-file: LICENSE diff --git a/Cabal/Cabal.cabal b/Cabal/Cabal.cabal index 42b9ed1d48a..5354284d56e 100644 --- a/Cabal/Cabal.cabal +++ b/Cabal/Cabal.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: Cabal -version: 3.14.0.0 +version: 3.14.1.0 copyright: 2003-2024, Cabal Development Team (see AUTHORS file) license: BSD-3-Clause license-file: LICENSE diff --git a/cabal-install-solver/cabal-install-solver.cabal b/cabal-install-solver/cabal-install-solver.cabal index cf8d2fdedbb..dbdba88bbc1 100644 --- a/cabal-install-solver/cabal-install-solver.cabal +++ b/cabal-install-solver/cabal-install-solver.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: cabal-install-solver -version: 3.14.0.0 +version: 3.14.1.0 synopsis: The solver component of cabal-install description: The solver component used in the cabal-install command-line program. diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index 5360d2231c6..3487786b28b 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -1,7 +1,7 @@ Cabal-Version: 3.0 Name: cabal-install -Version: 3.14.0.0 +Version: 3.14.1.0 Synopsis: The command-line interface for Cabal and Hackage. Description: The \'cabal\' command-line program simplifies the process of managing From 4cb1e8fee80e1a2d39be91767e9aef4ddbc42b79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9cate?= Date: Fri, 22 Nov 2024 02:34:53 +0100 Subject: [PATCH 33/87] Create changelogs for 3.14.1.0 (#10576) * Create changelogs for 3.14.1.0 * Update release-notes/Cabal-3.14.1.0.md Co-authored-by: ffaf1 * Update release-notes/cabal-install-3.14.1.0.md Co-authored-by: ffaf1 --------- Co-authored-by: ffaf1 Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- Cabal-syntax/ChangeLog.md | 2 +- Cabal/ChangeLog.md | 3 ++ cabal-install-solver/ChangeLog.md | 2 +- cabal-install/changelog | 3 ++ changelog.d/i10418 | 13 -------- changelog.d/pr-10468 | 31 ------------------- changelog.d/pr-10486 | 12 -------- changelog.d/pr-10507 | 16 ---------- changelog.d/t10416 | 11 ------- release-notes/Cabal-3.14.1.0.md | 40 +++++++++++++++++++++++++ release-notes/cabal-install-3.14.1.0.md | 16 ++++++++++ 11 files changed, 64 insertions(+), 85 deletions(-) delete mode 100644 changelog.d/i10418 delete mode 100644 changelog.d/pr-10468 delete mode 100644 changelog.d/pr-10486 delete mode 100644 changelog.d/pr-10507 delete mode 100644 changelog.d/t10416 create mode 100644 release-notes/Cabal-3.14.1.0.md create mode 100644 release-notes/cabal-install-3.14.1.0.md diff --git a/Cabal-syntax/ChangeLog.md b/Cabal-syntax/ChangeLog.md index cbba98a3cc4..205dcdb9cf0 100644 --- a/Cabal-syntax/ChangeLog.md +++ b/Cabal-syntax/ChangeLog.md @@ -1 +1 @@ -Please see https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.14.0.0.md +Please see https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.14.1.0.md diff --git a/Cabal/ChangeLog.md b/Cabal/ChangeLog.md index ea3b88e1082..eab9242759a 100644 --- a/Cabal/ChangeLog.md +++ b/Cabal/ChangeLog.md @@ -1,3 +1,6 @@ +# 3.14.1.0 [Hécate](mailto:hecate+github@glitchbra.in) November 2024 +* See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.14.1.0.md + # 3.14.0.0 [Hécate](mailto:hecate+github@glitchbra.in) September 2024 * See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.14.0.0.md diff --git a/cabal-install-solver/ChangeLog.md b/cabal-install-solver/ChangeLog.md index 978ac0f1b07..64dfd69e966 100644 --- a/cabal-install-solver/ChangeLog.md +++ b/cabal-install-solver/ChangeLog.md @@ -1 +1 @@ -Please see https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.14.0.0.md +Please see https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.14.1.0.md diff --git a/cabal-install/changelog b/cabal-install/changelog index 67711276c8f..47a798c0be1 100644 --- a/cabal-install/changelog +++ b/cabal-install/changelog @@ -1,5 +1,8 @@ -*-change-log-*- +3.14.1.0 Hécate November 2024 + * See https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.14.1.0.md + 3.14.0.0 Hécate September 2024 * See https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.14.0.0.md diff --git a/changelog.d/i10418 b/changelog.d/i10418 deleted file mode 100644 index 9a96e47a1e9..00000000000 --- a/changelog.d/i10418 +++ /dev/null @@ -1,13 +0,0 @@ -synopsis: Fix build ways for modules in executables -packages: Cabal -prs: #10419 -issues: #10418 -significance: significant - -description: { - -- Modules belonging to executables were being built in too many ways. For instance, if you -had configured to build profiled library files then your executable modules would also -be built profiled. Which was a regression in behaviour since `Cabal-3.12`. - -} diff --git a/changelog.d/pr-10468 b/changelog.d/pr-10468 deleted file mode 100644 index 2b1511a609c..00000000000 --- a/changelog.d/pr-10468 +++ /dev/null @@ -1,31 +0,0 @@ -synopsis: Add new options from ghc 9.12 -packages: Cabal -prs: #10468 -significance: - -description: { - -- ghc 9.12 adds several new command line options, divided between - `LANGUAGE`s (already added), warnings, new preprocessor control options, - and compilation control options. Two options needed to be added to the - list of options requiring `Int` parameters. - - The new options, excluding warning and language options, are: - - * `-fexpose-overloaded-unfoldings` - * `-fmax-forced-spec-args=N` - * `-fno-expose-overloaded-unfoldings` - * `-fno-object-determinism` - * `-fobject-determinism` - * `-fwrite-if-compression=N` - * `-optCmmP…` - * `-optJSP…` - * `-pgmCmmP` - * `-pgmJSP` - - As they all affect compilation and store hashes, the only necessary - change was to list the two numeric options so they will be parsed - correctly. To the best of our understanding, `-pgm*` and `-opt*` - options are already handled as a group. - -} diff --git a/changelog.d/pr-10486 b/changelog.d/pr-10486 deleted file mode 100644 index 237d2c857b0..00000000000 --- a/changelog.d/pr-10486 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Fix a bug that causes `cabal init` to crash if `git` is not installed -packages: cabal-install -prs: #10486 -issues: #10484 #8478 -significance: - -description: { - -- `cabal init` tries to use `git config` to guess the user's name and email. - It no longer crashes if there is no executable named `git` on $PATH. - -} diff --git a/changelog.d/pr-10507 b/changelog.d/pr-10507 deleted file mode 100644 index 02897f71e19..00000000000 --- a/changelog.d/pr-10507 +++ /dev/null @@ -1,16 +0,0 @@ -synopsis: Print out which project file we are using with the default verbosity -packages: cabal-install -prs: #10507 -issues: #8519 - -description: { - -- Many people have been burnt by cabal catching stray project files located up - the directory tree. This change tries to protect them at the expense of - producing more output by default. In particular, before this change, you could - see which project file is in use by supplying `-v` (the verbose mode), and - after the change we print this information with the default verbosity. - Changing the behaviour of cabal is out of scope of this change, and will - hopefully be done in the future versions (see #9353 for a way forward). - -} diff --git a/changelog.d/t10416 b/changelog.d/t10416 deleted file mode 100644 index 071b9b1ad95..00000000000 --- a/changelog.d/t10416 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Fix ./setup install command -packages: Cabal -prs: #10417 -issues: #10416 -significance: significant - -description: { - -- `./setup install` was failing with a `fromFlag NoFlag` error. It is now fixed. - -} diff --git a/release-notes/Cabal-3.14.1.0.md b/release-notes/Cabal-3.14.1.0.md new file mode 100644 index 00000000000..3f8ccdb8dfc --- /dev/null +++ b/release-notes/Cabal-3.14.1.0.md @@ -0,0 +1,40 @@ +## Cabal and Cabal-syntax 3.14.1.0 changelog + +### Significant changes + +- Fix build ways for modules in executables [#10418](https://github.com/haskell/cabal/issues/10418) [#10419](https://github.com/haskell/cabal/pull/10419) + + - Modules belonging to executables were being built in too many ways. For instance, if you + had configured to build profiled library files then your executable modules would also + be built profiled. Which was a regression in behaviour since `Cabal-3.12`. + +- Fix `./setup install` command [#10416](https://github.com/haskell/cabal/issues/10416) [#10417](https://github.com/haskell/cabal/pull/10417) + + - `./setup install` was failing with a `fromFlag NoFlag` error. It is now fixed. + +### Other changes + +- Add new options from ghc 9.12 [#10468](https://github.com/haskell/cabal/pull/10468) + + - ghc 9.12 adds several new command line options, divided between + `LANGUAGE`s (already added), warnings, new preprocessor control options, + and compilation control options. Two options needed to be added to the + list of options requiring `Int` parameters. + + The new options, excluding warning and language options, are: + + * `-fexpose-overloaded-unfoldings` + * `-fmax-forced-spec-args=N` + * `-fno-expose-overloaded-unfoldings` + * `-fno-object-determinism` + * `-fobject-determinism` + * `-fwrite-if-compression=N` + * `-optCmmP…` + * `-optJSP…` + * `-pgmCmmP` + * `-pgmJSP` + + As they all affect compilation and store hashes, the only necessary + change was to list the two numeric options so they will be parsed + correctly. To the best of our understanding, `-pgm*` and `-opt*` + options are already handled as a group. diff --git a/release-notes/cabal-install-3.14.1.0.md b/release-notes/cabal-install-3.14.1.0.md new file mode 100644 index 00000000000..a0da01b2593 --- /dev/null +++ b/release-notes/cabal-install-3.14.1.0.md @@ -0,0 +1,16 @@ +## cabal-install and cabal-install-solver 3.14.1.0 changelog + +- Fix a bug that causes `cabal init` to crash if `git` is not installed [#8478](https://github.com/haskell/cabal/issues/8478) [#10484](https://github.com/haskell/cabal/issues/10484) [#10486](https://github.com/haskell/cabal/pull/10486) + + - `cabal init` tries to use `git config` to guess the user's name and email. + It no longer crashes if there is no executable named `git` on `$PATH`. + +- Print out which project file we are using with the default verbosity [#8519](https://github.com/haskell/cabal/issues/8519) [#10507](https://github.com/haskell/cabal/pull/10507) + + - Many people have been burnt by cabal catching stray project files located up + the directory tree. This change tries to protect them at the expense of + producing more output by default. In particular, before this change, you could + see which project file is in use by supplying `-v` (the verbose mode), and + after the change we print this information with the default verbosity. + Changing the behaviour of cabal is out of scope of this change, and will + hopefully be done in the future versions (see #9353 for a way forward). From 269fd808e5d80223a229b6b19edfe6f5b109007a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9cate=20Moonlight?= Date: Sat, 23 Nov 2024 23:21:33 +0100 Subject: [PATCH 34/87] Remove extraneous entry for 3.12.0.0 --- Cabal/ChangeLog.md | 1 - 1 file changed, 1 deletion(-) diff --git a/Cabal/ChangeLog.md b/Cabal/ChangeLog.md index eab9242759a..ba5c56e1705 100644 --- a/Cabal/ChangeLog.md +++ b/Cabal/ChangeLog.md @@ -8,7 +8,6 @@ * See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.12.1.0.md # 3.12.0.0 [Francesco Ariis](mailto:fa-ml@ariis.it) May 2024 -# 3.12.0.0 [Francesco Ariis](mailto:fa-ml@ariis.it) March 2024 * See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.12.0.0.md # 3.10.3.0 [Hécate](mailto:hecate+github@glitchbra.in) January 2024 From 99386c15ae6c876c754f3c0eb30f7bde3251eaad Mon Sep 17 00:00:00 2001 From: sheaf Date: Fri, 6 Dec 2024 15:59:53 +0100 Subject: [PATCH 35/87] 3.14: make Cabal-hooks version track Cabal version (#10579) * Make Cabal-hooks version track Cabal version As pointed out in #10412, it isn't currently feasible to version the Cabal-hooks version separately from Cabal due to the large amount of re-exports (in particular the LocalBuildInfo type and its dependencies). For the time being, we will version Cabal-hooks along with the major Cabal library version. * Update Cabal-hooks/changelog.md --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- Cabal-hooks/Cabal-hooks.cabal | 2 +- Cabal-hooks/changelog.md | 2 +- Cabal-hooks/src/Distribution/Simple/SetupHooks.hs | 2 +- bootstrap/linux-9.0.2.json | 2 +- bootstrap/linux-9.2.8.json | 2 +- bootstrap/linux-9.4.8.json | 2 +- bootstrap/linux-9.6.4.json | 2 +- bootstrap/linux-9.8.2.json | 2 +- cabal-testsuite/main/cabal-tests.hs | 8 +++----- 9 files changed, 11 insertions(+), 13 deletions(-) diff --git a/Cabal-hooks/Cabal-hooks.cabal b/Cabal-hooks/Cabal-hooks.cabal index c089b84aba3..f048c5b7b8b 100644 --- a/Cabal-hooks/Cabal-hooks.cabal +++ b/Cabal-hooks/Cabal-hooks.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: Cabal-hooks -version: 0.1 +version: 3.14 copyright: 2023, Cabal Development Team license: BSD-3-Clause license-file: LICENSE diff --git a/Cabal-hooks/changelog.md b/Cabal-hooks/changelog.md index ea633b2936a..4085c8b8ba8 100644 --- a/Cabal-hooks/changelog.md +++ b/Cabal-hooks/changelog.md @@ -1,6 +1,6 @@ # Changelog for `Cabal-hooks` -## 0.1 – December 2023 +## 3.14 – November 2024 * Initial release of the `Hooks` API. diff --git a/Cabal-hooks/src/Distribution/Simple/SetupHooks.hs b/Cabal-hooks/src/Distribution/Simple/SetupHooks.hs index 2b49ffc5e5f..1d7afa39daa 100644 --- a/Cabal-hooks/src/Distribution/Simple/SetupHooks.hs +++ b/Cabal-hooks/src/Distribution/Simple/SetupHooks.hs @@ -260,7 +260,7 @@ Usage example: > custom-setup > setup-depends: > base >= 4.18 && < 5, -> Cabal-hooks >= 0.1 && < 0.2 +> Cabal-hooks >= 3.14 && < 3.15 > > The declared Cabal version should also be at least 3.14. diff --git a/bootstrap/linux-9.0.2.json b/bootstrap/linux-9.0.2.json index b407f6a317c..9fa92b0b66b 100644 --- a/bootstrap/linux-9.0.2.json +++ b/bootstrap/linux-9.0.2.json @@ -202,7 +202,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "0.1" + "version": "3.14" }, { "cabal_sha256": "60e78b6c60dc32a77ce6c37ed5ca4e838fc5f76f02836ef64d93cd21cc002325", diff --git a/bootstrap/linux-9.2.8.json b/bootstrap/linux-9.2.8.json index a74b9bcc3fa..9088a4799fd 100644 --- a/bootstrap/linux-9.2.8.json +++ b/bootstrap/linux-9.2.8.json @@ -172,7 +172,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "0.1" + "version": "3.14" }, { "cabal_sha256": "60e78b6c60dc32a77ce6c37ed5ca4e838fc5f76f02836ef64d93cd21cc002325", diff --git a/bootstrap/linux-9.4.8.json b/bootstrap/linux-9.4.8.json index 7fe3e31ec28..4ddab765c6d 100644 --- a/bootstrap/linux-9.4.8.json +++ b/bootstrap/linux-9.4.8.json @@ -172,7 +172,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "0.1" + "version": "3.14" }, { "cabal_sha256": "60e78b6c60dc32a77ce6c37ed5ca4e838fc5f76f02836ef64d93cd21cc002325", diff --git a/bootstrap/linux-9.6.4.json b/bootstrap/linux-9.6.4.json index b3b67ed65b0..983f6f1a2d2 100644 --- a/bootstrap/linux-9.6.4.json +++ b/bootstrap/linux-9.6.4.json @@ -132,7 +132,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "0.1" + "version": "3.14" }, { "cabal_sha256": "60e78b6c60dc32a77ce6c37ed5ca4e838fc5f76f02836ef64d93cd21cc002325", diff --git a/bootstrap/linux-9.8.2.json b/bootstrap/linux-9.8.2.json index 3176a3e6f04..6b7c83b46af 100644 --- a/bootstrap/linux-9.8.2.json +++ b/bootstrap/linux-9.8.2.json @@ -136,7 +136,7 @@ "revision": null, "source": "local", "src_sha256": null, - "version": "0.1" + "version": "3.14" }, { "cabal_sha256": "60e78b6c60dc32a77ce6c37ed5ca4e838fc5f76f02836ef64d93cd21cc002325", diff --git a/cabal-testsuite/main/cabal-tests.hs b/cabal-testsuite/main/cabal-tests.hs index 4ffdadd4352..b565eea3e60 100644 --- a/cabal-testsuite/main/cabal-tests.hs +++ b/cabal-testsuite/main/cabal-tests.hs @@ -161,12 +161,10 @@ buildCabalLibsSpecific ver verb mbGhc builddir_rel = do csgot <- doesDirectoryExist (dir "Cabal-syntax-" ++ ver) unless csgot $ runProgramInvocation verb ((programInvocation cabal ["get", "Cabal-syntax-" ++ ver]) { progInvokeCwd = Just dir }) - let hooksVerFromVer _ = "0.1" - hooksVer = hooksVerFromVer ver - chgot <- doesDirectoryExist (dir "Cabal-hooks-" ++ hooksVer) + chgot <- doesDirectoryExist (dir "Cabal-hooks-" ++ ver) unless chgot $ - runProgramInvocation verb ((programInvocation cabal ["get", "Cabal-hooks-" ++ hooksVer]) { progInvokeCwd = Just dir }) - buildCabalLibsProject ("packages: Cabal-" ++ ver ++ " Cabal-syntax-" ++ ver ++ " Cabal-hooks-" ++ hooksVer) verb mbGhc dir + runProgramInvocation verb ((programInvocation cabal ["get", "Cabal-hooks-" ++ ver]) { progInvokeCwd = Just dir }) + buildCabalLibsProject ("packages: Cabal-" ++ ver ++ " Cabal-syntax-" ++ ver ++ " Cabal-hooks-" ++ ver) verb mbGhc dir buildCabalLibsIntree :: String -> Verbosity -> Maybe FilePath -> FilePath -> IO [FilePath] From ec2542f96ae21cf76dc007be389929480c599417 Mon Sep 17 00:00:00 2001 From: brandon s allbery kf8nh Date: Wed, 18 Dec 2024 18:47:31 -0500 Subject: [PATCH 36/87] sync `validate.yml` with `master` (#10459) * sync `validate.yml` with `master` Too many backorts in the wrong order = mayhem Giving up on Apple AArch64, `cabal-tests` hates it * fixup! Merge branch '3.14' into sync-validate.yml-3.14 --- .github/workflows/validate.yml | 146 ++++++++++++++++++++++----------- 1 file changed, 97 insertions(+), 49 deletions(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index c346838f93a..99abc202cdd 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -14,6 +14,11 @@ on: - "doc/**" - "**/README.md" - "CONTRIBUTING.md" + - "changelog.d/**" + # only top level for these, because various test packages have them too + - "*/ChangeLog.md" + - "*/changelog.md" + - "release-notes/**" branches: - master pull_request: @@ -21,6 +26,10 @@ on: - "doc/**" - "**/README.md" - "CONTRIBUTING.md" + - "changelog.d/**" + - "*/ChangeLog.md" + - "*/changelog.md" + - "release-notes/**" release: types: - created @@ -71,7 +80,7 @@ jobs: [ "9.10.1", "9.8.2", - "9.6.4", + "9.6.6", "9.4.8", "9.2.8", "9.0.2", @@ -175,6 +184,16 @@ jobs: - name: Validate build run: sh validate.sh $FLAGS -s build + - name: Canonicalize architecture + run: | + case ${{ runner.arch }} in + X86) arch=i386 ;; + X64) arch=x86_64 ;; + ARM64) arch=aarch64 ;; + *) echo "Unsupported architecture, please fix validate.yaml" 2>/dev/null; exit 1 ;; + esac + echo "CABAL_ARCH=$arch" >> "$GITHUB_ENV" + - name: Tar cabal head executable if: matrix.ghc == env.GHC_FOR_RELEASE run: | @@ -193,7 +212,7 @@ jobs: fi DIR=$(dirname "$CABAL_EXEC") FILE=$(basename "$CABAL_EXEC") - CABAL_EXEC_TAR="cabal-head-${{ runner.os }}-x86_64.tar.gz" + CABAL_EXEC_TAR="cabal-head-${{ runner.os }}-$CABAL_ARCH.tar.gz" tar -czvf "$CABAL_EXEC_TAR" -C "$DIR" "$FILE" echo "CABAL_EXEC_TAR=$CABAL_EXEC_TAR" >> "$GITHUB_ENV" @@ -204,32 +223,27 @@ jobs: if: matrix.ghc == env.GHC_FOR_RELEASE uses: actions/upload-artifact@v4 with: - name: cabal-${{ runner.os }}-x86_64 + name: cabal-${{ runner.os }}-${{ env.CABAL_ARCH }} path: ${{ env.CABAL_EXEC_TAR }} - - name: Validate lib-tests + - name: Validate tests env: # `rawSystemStdInOut reports text decoding errors` # test does not find ghc without the full path in windows GHCPATH: ${{ steps.setup-haskell.outputs.ghc-exe }} - run: sh validate.sh $FLAGS -s lib-tests - - - name: Validate lib-suite - run: sh validate.sh $FLAGS -s lib-suite - - - name: Validate cli-tests - run: sh validate.sh $FLAGS -s cli-tests - - - name: Validate cli-suite - run: sh validate.sh $FLAGS -s cli-suite - - - name: Validate solver-benchmarks-tests - if: matrix.ghc == env.GHC_FOR_SOLVER_BENCHMARKS - run: sh validate.sh $FLAGS -s solver-benchmarks-tests - - - name: Validate solver-benchmarks-run - if: matrix.ghc == env.GHC_FOR_SOLVER_BENCHMARKS - run: sh validate.sh $FLAGS -s solver-benchmarks-run + run: | + set +e + rc=0 + tests="lib-tests lib-suite cli-tests cli-suite" + if [ "${{ matrix.ghc }}" = "${{ env.GHC_FOR_SOLVER_BENCHMARKS }}" ]; then + tests="$tests solver-benchmarks-tests solver-benchmarks-run" + fi + for test in $tests; do + echo Validate "$test" + sh validate.sh $FLAGS -s "$test" || rc=1 + echo End "$test" + done + exit $rc validate-old-ghcs: name: Validate old ghcs ${{ matrix.extra-ghc }} @@ -283,11 +297,13 @@ jobs: restore-keys: ${{ runner.os }}-${{ env.GHC_FOR_RELEASE }}- - name: Validate build + id: build run: sh validate.sh ${{ env.COMMON_FLAGS }} -s build - name: "Validate lib-suite-extras --extra-hc ghc-${{ matrix.extra-ghc }}" env: EXTRA_GHC: ghc-${{ matrix.extra-ghc }} + continue-on-error: true run: sh validate.sh ${{ env.COMMON_FLAGS }} --lib-only -s lib-suite-extras --extra-hc "${{ env.EXTRA_GHC }}" build-alpine: @@ -357,19 +373,36 @@ jobs: # This one uses the cabal HEAD generated executable in the previous step # to build itself again, as sanity check dogfooding: - name: Dogfooding ${{ matrix.os }} ghc-${{ matrix.ghc }} - runs-on: ${{ matrix.os }} + name: Dogfooding ${{ matrix.sys.os }} ghc-${{ matrix.ghc }} + runs-on: ${{ matrix.sys.os }} needs: validate strategy: matrix: - os: [ubuntu-22.04, macos-13, windows-latest] + sys: + - { os: windows-latest, shell: "C:/msys64/usr/bin/bash.exe -e {0}" } + - { os: ubuntu-22.04, shell: bash } + - { os: macos-13, shell: bash } # We only use one ghc version the used one for the next release (defined at top of the workflow) # We need to build an array dynamically to inject the appropiate env var in a previous job, # see https://docs.github.com/en/actions/learn-github-actions/expressions#fromjson ghc: ${{ fromJSON (needs.validate.outputs.GHC_FOR_RELEASE) }} + defaults: + run: + shell: ${{ matrix.sys.shell }} steps: - - name: Work around XDG directories existence (haskell-actions/setup#62) + # TODO: make a reusable action for this + - name: Canonicalize architecture + run: | + case ${{ runner.arch }} in + X86) arch=i386 ;; + X64) arch=x86_64 ;; + ARM64) arch=aarch64 ;; + *) echo "Unsupported architecture" 2>/dev/null; exit 1 ;; + esac + echo "CABAL_ARCH=$arch" >> "$GITHUB_ENV" + + - name: "MAC: Work around XDG directories existence (haskell-actions/setup#62)" if: runner.os == 'macOS' run: | rm -rf ~/.config/cabal @@ -386,11 +419,11 @@ jobs: - name: Download cabal executable from workflow artifacts uses: actions/download-artifact@v4 with: - name: cabal-${{ runner.os }}-x86_64 + name: cabal-${{ runner.os }}-${{ env.CABAL_ARCH }} path: cabal-head - name: Untar the cabal executable - run: tar -xzf "./cabal-head/cabal-head-${{ runner.os }}-x86_64.tar.gz" -C cabal-head + run: tar -xzf "./cabal-head/cabal-head-${{ runner.os }}-$CABAL_ARCH.tar.gz" -C cabal-head - name: print-config using cabal HEAD run: sh validate.sh ${{ env.COMMON_FLAGS }} --with-cabal ./cabal-head/cabal -s print-config @@ -404,39 +437,54 @@ jobs: name: Create a GitHub prerelease with the binary artifacts runs-on: ubuntu-latest if: github.ref == 'refs/heads/master' + permissions: + contents: write # IMPORTANT! Any job added to the workflow should be added here too needs: [validate, validate-old-ghcs, build-alpine, dogfooding] steps: + # for now this is hardcoded. is there a better way? - uses: actions/download-artifact@v4 with: - name: cabal-Windows-x86_64 + pattern: cabal-* + path: binaries - - uses: actions/download-artifact@v4 + - name: Create GitHub prerelease + uses: softprops/action-gh-release@v2 with: - name: cabal-Linux-x86_64 + tag_name: cabal-head + prerelease: true + files: binaries/cabal-* - - uses: actions/download-artifact@v4 - with: - name: cabal-Linux-static-x86_64 + prerelease-lts: + name: Create a GitHub LTS prerelease with the binary artifacts + runs-on: ubuntu-latest + # The LTS branch is hardcoded for now, update it on a new LTS! + if: github.ref == 'refs/heads/3.12' - - uses: actions/download-artifact@v4 - with: - name: cabal-macOS-x86_64 + # IMPORTANT! Any job added to the workflow should be added here too + needs: [validate, validate-old-ghcs, build-alpine, dogfooding] - - name: Create GitHub prerelease - uses: marvinpinto/action-automatic-releases@v1.2.1 - with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - automatic_release_tag: cabal-head - prerelease: true - title: cabal-head - files: | - cabal-head-Windows-x86_64.tar.gz - cabal-head-Linux-x86_64.tar.gz - cabal-head-Linux-static-x86_64.tar.gz - cabal-head-macOS-x86_64.tar.gz + steps: + - uses: actions/download-artifact@v4 + with: + pattern: cabal-* + path: binaries + + - run: | + # bash-ism, but we forced bash above + mv cabal-{,lts-}head-Windows-x86_64.tar.gz + mv cabal-{,lts-}head-Linux-x86_64.tar.gz + mv cabal-{,lts-}head-Linux-static-x86_64.tar.gz + mv cabal-{,lts-}head-macOS-x86_64.tar.gz + + - name: Create GitHub prerelease + uses: softprops/action-gh-release@v2 + with: + tag_name: cabal-lts-head + prerelease: true + files: binaries/cabal-* # We use this job as a summary of the workflow # It will fail if any of the previous jobs does From 274efa32d3e42961a7cda7cfe44b42c9818ddb3e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 19 Dec 2024 02:21:54 +0000 Subject: [PATCH 37/87] add missing sdist skip job (#10452) There's little point in having a skip-on-docs trigger if there's no alternative, cf. the comment in validate.yml. (cherry picked from commit 01b9fdb8bfe960baea8c1a6ec765c20216319368) Co-authored-by: brandon s allbery kf8nh Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- .github/workflows/check-sdist.skip.yml | 48 ++++++++++++++++++++++++++ .github/workflows/check-sdist.yml | 14 ++++++++ 2 files changed, 62 insertions(+) create mode 100644 .github/workflows/check-sdist.skip.yml diff --git a/.github/workflows/check-sdist.skip.yml b/.github/workflows/check-sdist.skip.yml new file mode 100644 index 00000000000..522c9896f0d --- /dev/null +++ b/.github/workflows/check-sdist.skip.yml @@ -0,0 +1,48 @@ +name: Check sdist Skip + +# This Workflow is special and contains a workaround for a known limitation of GitHub CI. +# +# The problem: We don't want to run the "check sdist" jobs on PRs which contain only changes +# to the docs, since these jobs take a long time to complete without providing any benefit. +# We therefore use path-filtering in the workflow triggers for the check sdist jobs, namely +# "paths-ignore: doc/**". But the "Check sdist post job" is a required job, therefore a PR cannot +# be merged unless the "Bootstrap post job" completes succesfully, which it doesn't do if we +# filter it out. +# +# The solution: We use a second job with the same name which always returns the exit code 0. +# The logic implemented for "required" workflows accepts if 1) at least one job with that name +# runs through, AND 2) If multiple jobs of that name exist, then all jobs of that name have to +# finish successfully. +on: + push: + paths: + - 'doc/**' + - '**/README.md' + - 'CONTRIBUTING.md' + - "changelog.d/**" + # only top level for these, because various test packages have them too + - "*/ChangeLog.md" + - "*/changelog.md" + - "release-notes/**" + branches: + - master + pull_request: + paths: + - 'doc/**' + - '**/README.md' + - 'CONTRIBUTING.md' + - "changelog.d/**" + - "*/ChangeLog.md" + - "*/changelog.md" + - "release-notes/**" + release: + types: + - created + +jobs: + check-sdist-post-job: + if: always() + name: Check sdist post job + runs-on: ubuntu-latest + steps: + - run: exit 0 diff --git a/.github/workflows/check-sdist.yml b/.github/workflows/check-sdist.yml index d295ad0ccca..5d19fd8ca10 100644 --- a/.github/workflows/check-sdist.yml +++ b/.github/workflows/check-sdist.yml @@ -80,3 +80,17 @@ jobs: echo No matching bootlib Cabal version to test against. exit 0 fi + + check-sdist-post-job: + if: always() + name: Check sdist post job + runs-on: ubuntu-latest + # IMPORTANT! Any job added to the workflow should be added here too + needs: [dogfood-sdists] + + steps: + - run: | + echo "jobs info: ${{ toJSON(needs) }}" + - if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') + run: exit 1 + From 93c732bfa28ab4b0d18fcae02c9995d272bdc236 Mon Sep 17 00:00:00 2001 From: brandon s allbery kf8nh Date: Fri, 11 Oct 2024 17:34:18 -0400 Subject: [PATCH 38/87] try to run check-sdist on the right ghcs (cherry picked from commit 6a2b5a75b603e839a645c030c55fa1fa88104328) --- .github/workflows/check-sdist.yml | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/.github/workflows/check-sdist.yml b/.github/workflows/check-sdist.yml index 5d19fd8ca10..301fd973ec5 100644 --- a/.github/workflows/check-sdist.yml +++ b/.github/workflows/check-sdist.yml @@ -28,23 +28,17 @@ jobs: # No caching, since the point is to verify they can be installed "from scratch" # Don't run on master or a PR targeting master, because there's never an installable Cabal dogfood-sdists: - name: Dogfood sdist on ${{ matrix.os }} ghc-${{ matrix.ghc }} + name: Dogfood sdist on ghc-${{ matrix.ghc }} if: github.ref != 'refs/heads/master' && github.base_ref != 'master' - runs-on: ${{ matrix.os }} + runs-on: ubuntu-latest strategy: matrix: - os: [ubuntu-latest] # this should be kept up to date with the list in validate.yml, but should be the # *first* compiler release so we validate against what is hopefully the first # release of a corresponding Cabal and friends. it can also be short since it's # highly unlikely that we are releasing really old branches. ghc: - [ - "9.10.1", - "9.8.1", - "9.6.1", - "9.4.1", - ] + ["9.10.1", "9.8.1", "9.6.1"] steps: From eb4dcb7775e17d9d438009791a1096786e606c7e Mon Sep 17 00:00:00 2001 From: brandon s allbery kf8nh Date: Sat, 26 Oct 2024 14:02:27 -0400 Subject: [PATCH 39/87] final fixups to sdist check validated on 3.12 branch and applied in backport of #10448; this brings the fixes up to `master` (cherry picked from commit 8e076b6ee55f09e36eede06e4259a058101d625c) --- .github/workflows/check-sdist.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check-sdist.yml b/.github/workflows/check-sdist.yml index 301fd973ec5..61b0c274dd1 100644 --- a/.github/workflows/check-sdist.yml +++ b/.github/workflows/check-sdist.yml @@ -62,9 +62,9 @@ jobs: # (don't look at this too closely) sdist="$(ls dist-newstyle/sdist/cabal-install-*.tar.gz | sed -n '\,^dist-newstyle/sdist/cabal-install-[0-9.]*\.tar\.gz$,{;p;q;}')" # extract the cabal-install major version - ver="$(echo "$sdist" | sed -n 's,^dist-newstyle/sdist/cabal-install-\([0-9][0-9]*\.[0-9][0-9]*\)\.[0-9.]*$,\1,p')" + ver="$(echo "$sdist" | sed -n 's,^dist-newstyle/sdist/cabal-install-\([0-9][0-9]*\.[0-9][0-9]*\)\.[0-9.]*\.tar\.gz$,\1,p')" # dunno if this will ever be extended to freebsd, but grep -q is a gnu-ism - if ghc-pkg --global --simple-output list Cabal | grep "^Cabal-$cbl\\." >/dev/null; then + if ghc-pkg --global --simple-output list Cabal | grep "^Cabal-$ver\\." >/dev/null; then # sigh, someone broke installing from tarballs rm -rf cabal*.project Cabal Cabal-syntax cabal-install-solver cabal-install tar xfz "$sdist" From 37b5c959efc8eeaa6d8a66a6be45aad399b383f0 Mon Sep 17 00:00:00 2001 From: Phil de Joux Date: Fri, 20 Dec 2024 08:44:44 -0500 Subject: [PATCH 40/87] Support ghc-9.12 (cherry picked from commit a9377c2f4faa1704c66a5e90fd413bc99831c35a) --- Cabal/src/Distribution/Simple/GHC.hs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Cabal/src/Distribution/Simple/GHC.hs b/Cabal/src/Distribution/Simple/GHC.hs index db475a01dd5..17777b3f6db 100644 --- a/Cabal/src/Distribution/Simple/GHC.hs +++ b/Cabal/src/Distribution/Simple/GHC.hs @@ -164,14 +164,14 @@ configure verbosity hcPath hcPkgPath conf0 = do (userMaybeSpecifyPath "ghc" hcPath conf0) let implInfo = ghcVersionImplInfo ghcVersion - -- Cabal currently supports ghc >= 7.0.1 && < 9.12 + -- Cabal currently supports ghc >= 7.0.1 && < 9.14 -- ... and the following odd development version - unless (ghcVersion < mkVersion [9, 12]) $ + unless (ghcVersion < mkVersion [9, 14]) $ warn verbosity $ "Unknown/unsupported 'ghc' version detected " ++ "(Cabal " ++ prettyShow cabalVersion - ++ " supports 'ghc' version < 9.12): " + ++ " supports 'ghc' version < 9.14): " ++ programPath ghcProg ++ " is version " ++ prettyShow ghcVersion From 848c448216a87b33bb21e0ec10a086c2a438c38d Mon Sep 17 00:00:00 2001 From: Artem Pelenitsyn Date: Thu, 26 Dec 2024 10:29:49 -0500 Subject: [PATCH 41/87] CI: add GHC 9.12 (#10667) * GHC 9.12 compat: deriving Typeable has to go 9.12 turned it into a warning * GHC 9.12 compat: ErrorCallWithLocation got deprecated * CI: add 9.12 --- .github/workflows/validate.yml | 3 ++- Cabal-syntax/src/Distribution/Backpack.hs | 4 ++-- .../src/Distribution/CabalSpecVersion.hs | 2 +- Cabal-syntax/src/Distribution/Compat/Graph.hs | 2 -- .../src/Distribution/Compat/NonEmptySet.hs | 3 +-- .../src/Distribution/Compat/Semigroup.hs | 6 ++---- Cabal-syntax/src/Distribution/Compiler.hs | 7 +++---- Cabal-syntax/src/Distribution/License.hs | 2 +- Cabal-syntax/src/Distribution/ModuleName.hs | 2 +- Cabal-syntax/src/Distribution/SPDX/License.hs | 2 +- .../src/Distribution/SPDX/LicenseExceptionId.hs | 2 +- .../src/Distribution/SPDX/LicenseExpression.hs | 4 ++-- Cabal-syntax/src/Distribution/SPDX/LicenseId.hs | 2 +- .../src/Distribution/SPDX/LicenseReference.hs | 2 +- Cabal-syntax/src/Distribution/System.hs | 6 +++--- .../src/Distribution/Types/AbiDependency.hs | 3 +-- Cabal-syntax/src/Distribution/Types/AbiHash.hs | 3 +-- Cabal-syntax/src/Distribution/Types/Benchmark.hs | 2 +- .../src/Distribution/Types/BenchmarkInterface.hs | 2 +- .../src/Distribution/Types/BenchmarkType.hs | 2 +- Cabal-syntax/src/Distribution/Types/BuildInfo.hs | 2 +- Cabal-syntax/src/Distribution/Types/BuildType.hs | 2 +- .../src/Distribution/Types/ComponentId.hs | 2 +- .../src/Distribution/Types/ComponentName.hs | 5 ++--- .../Distribution/Types/ComponentRequestedSpec.hs | 3 +-- Cabal-syntax/src/Distribution/Types/CondTree.hs | 4 ++-- Cabal-syntax/src/Distribution/Types/Condition.hs | 2 +- Cabal-syntax/src/Distribution/Types/ConfVar.hs | 2 +- .../src/Distribution/Types/Dependency.hs | 2 +- .../src/Distribution/Types/ExeDependency.hs | 2 +- .../src/Distribution/Types/Executable.hs | 2 +- .../src/Distribution/Types/ExecutableScope.hs | 2 +- .../src/Distribution/Types/ExposedModule.hs | 3 +-- Cabal-syntax/src/Distribution/Types/Flag.hs | 6 +++--- .../src/Distribution/Types/ForeignLib.hs | 4 ++-- .../src/Distribution/Types/ForeignLibOption.hs | 2 +- .../src/Distribution/Types/ForeignLibType.hs | 2 +- .../Types/GenericPackageDescription.hs | 2 +- .../src/Distribution/Types/IncludeRenaming.hs | 2 +- .../Distribution/Types/InstalledPackageInfo.hs | 3 +-- .../Distribution/Types/LegacyExeDependency.hs | 2 +- Cabal-syntax/src/Distribution/Types/Library.hs | 2 +- .../src/Distribution/Types/LibraryName.hs | 2 +- .../src/Distribution/Types/LibraryVisibility.hs | 2 +- Cabal-syntax/src/Distribution/Types/Mixin.hs | 2 +- Cabal-syntax/src/Distribution/Types/Module.hs | 2 +- .../src/Distribution/Types/ModuleReexport.hs | 2 +- .../src/Distribution/Types/ModuleRenaming.hs | 2 +- .../src/Distribution/Types/MungedPackageId.hs | 2 +- .../src/Distribution/Types/MungedPackageName.hs | 2 +- .../src/Distribution/Types/PackageDescription.hs | 2 +- Cabal-syntax/src/Distribution/Types/PackageId.hs | 2 +- .../src/Distribution/Types/PackageName.hs | 2 +- .../Types/PackageVersionConstraint.hs | 2 +- .../Distribution/Types/PkgconfigDependency.hs | 2 +- .../src/Distribution/Types/PkgconfigName.hs | 2 +- .../src/Distribution/Types/PkgconfigVersion.hs | 2 +- .../Distribution/Types/PkgconfigVersionRange.hs | 2 +- .../src/Distribution/Types/SetupBuildInfo.hs | 2 +- .../src/Distribution/Types/SourceRepo.hs | 8 ++++---- Cabal-syntax/src/Distribution/Types/TestSuite.hs | 2 +- .../src/Distribution/Types/TestSuiteInterface.hs | 2 +- Cabal-syntax/src/Distribution/Types/TestType.hs | 2 +- Cabal-syntax/src/Distribution/Types/UnitId.hs | 4 ++-- .../Distribution/Types/UnqualComponentName.hs | 1 - Cabal-syntax/src/Distribution/Types/Version.hs | 2 +- .../src/Distribution/Types/VersionInterval.hs | 3 +-- .../Distribution/Types/VersionInterval/Legacy.hs | 4 +--- .../Distribution/Types/VersionRange/Internal.hs | 3 +-- Cabal-syntax/src/Distribution/Utils/Path.hs | 2 +- Cabal-syntax/src/Distribution/Utils/ShortText.hs | 4 ++-- Cabal-syntax/src/Language/Haskell/Extension.hs | 6 +++--- Cabal-tests/tests/UnitTests.hs | 4 ---- Cabal/src/Distribution/Backpack/ModuleShape.hs | 3 +-- Cabal/src/Distribution/Compat/Async.hs | 3 --- Cabal/src/Distribution/Compat/Time.hs | 3 +-- Cabal/src/Distribution/Simple/Compiler.hs | 11 +++++------ Cabal/src/Distribution/Simple/Configure.hs | 2 -- Cabal/src/Distribution/Simple/Errors.hs | 2 +- Cabal/src/Distribution/Simple/Flag.hs | 2 +- .../Distribution/Simple/GHC/EnvironmentParser.hs | 3 +-- Cabal/src/Distribution/Simple/InstallDirs.hs | 5 ++--- .../Distribution/Simple/InstallDirs/Internal.hs | 5 ++--- Cabal/src/Distribution/Simple/PackageIndex.hs | 3 +-- Cabal/src/Distribution/Simple/Program/Db.hs | 2 -- Cabal/src/Distribution/Simple/Program/Types.hs | 7 +++---- Cabal/src/Distribution/Simple/Setup/Benchmark.hs | 3 +-- Cabal/src/Distribution/Simple/Setup/Build.hs | 3 +-- Cabal/src/Distribution/Simple/Setup/Clean.hs | 3 +-- Cabal/src/Distribution/Simple/Setup/Config.hs | 3 +-- Cabal/src/Distribution/Simple/Setup/Global.hs | 3 +-- Cabal/src/Distribution/Simple/Setup/Haddock.hs | 7 +++---- Cabal/src/Distribution/Simple/Setup/Hscolour.hs | 3 +-- Cabal/src/Distribution/Simple/Setup/Register.hs | 3 +-- Cabal/src/Distribution/Simple/Setup/Repl.hs | 5 ++--- Cabal/src/Distribution/Simple/Setup/SDist.hs | 3 +-- Cabal/src/Distribution/Simple/Setup/Test.hs | 5 ++--- Cabal/src/Distribution/Simple/Utils.hs | 2 +- .../Types/ComponentLocalBuildInfo.hs | 3 +-- Cabal/src/Distribution/Types/DumpBuildInfo.hs | 3 +-- Cabal/src/Distribution/Types/GivenComponent.hs | 5 ++--- Cabal/src/Distribution/Types/LocalBuildInfo.hs | 3 +-- Cabal/src/Distribution/Utils/NubList.hs | 3 +-- Cabal/src/Distribution/Verbosity.hs | 3 +-- Cabal/src/Distribution/Verbosity/Internal.hs | 5 ++--- .../Distribution/Solver/Types/OptionalStanza.hs | 3 +-- .../src/Distribution/Solver/Types/PkgConfigDb.hs | 3 +-- .../Distribution/Solver/Types/SourcePackage.hs | 3 +-- .../src/Distribution/Client/Compat/Semaphore.hs | 4 +--- cabal-install/src/Distribution/Client/Errors.hs | 2 +- .../src/Distribution/Client/FileMonitor.hs | 2 +- .../src/Distribution/Client/HashValue.hs | 3 +-- .../src/Distribution/Client/IndexUtils.hs | 2 +- .../src/Distribution/Client/InstallPlan.hs | 2 -- .../Distribution/Client/ProjectBuilding/Types.hs | 4 +--- .../src/Distribution/Client/ProjectConfig.hs | 10 ++++------ .../Distribution/Client/ProjectConfig/Types.hs | 9 ++++----- .../Distribution/Client/ProjectPlanning/Types.hs | 7 +++---- .../src/Distribution/Client/SavedFlags.hs | 3 --- .../src/Distribution/Client/Security/HTTP.hs | 2 -- cabal-install/src/Distribution/Client/Setup.hs | 2 +- .../src/Distribution/Client/SolverInstallPlan.hs | 3 +-- .../Distribution/Client/Types/BuildResults.hs | 6 +++--- .../Distribution/Client/Types/PackageLocation.hs | 2 +- cabal-install/tests/IntegrationTests2.hs | 2 -- .../UnitTests/Distribution/Client/JobControl.hs | 4 +--- cabal-install/tests/UnitTests/Options.hs | 6 ------ cabal-testsuite/src/Test/Cabal/TestCode.hs | 6 ++---- project-cabal/ghc-latest.config | 16 ++++++++-------- templates/SPDX.LicenseExceptionId.template.hs | 2 +- templates/SPDX.LicenseId.template.hs | 2 +- 131 files changed, 172 insertions(+), 257 deletions(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 99abc202cdd..ae35656d5a4 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -78,8 +78,9 @@ jobs: # support, so the PR *must* have a changelog entry. ghc: [ + "9.12.1", "9.10.1", - "9.8.2", + "9.8.4", "9.6.6", "9.4.8", "9.2.8", diff --git a/Cabal-syntax/src/Distribution/Backpack.hs b/Cabal-syntax/src/Distribution/Backpack.hs index b30028bc41c..7115b852203 100644 --- a/Cabal-syntax/src/Distribution/Backpack.hs +++ b/Cabal-syntax/src/Distribution/Backpack.hs @@ -91,7 +91,7 @@ data OpenUnitId -- MUST NOT be for an indefinite component; an 'OpenUnitId' -- is guaranteed not to have any holes. DefiniteUnitId DefUnitId - deriving (Generic, Read, Show, Eq, Ord, Typeable, Data) + deriving (Generic, Read, Show, Eq, Ord, Data) -- TODO: cache holes? @@ -165,7 +165,7 @@ mkDefUnitId cid insts = data OpenModule = OpenModule OpenUnitId ModuleName | OpenModuleVar ModuleName - deriving (Generic, Read, Show, Eq, Ord, Typeable, Data) + deriving (Generic, Read, Show, Eq, Ord, Data) instance Binary OpenModule instance Structured OpenModule diff --git a/Cabal-syntax/src/Distribution/CabalSpecVersion.hs b/Cabal-syntax/src/Distribution/CabalSpecVersion.hs index 3d1f9418e4a..a81e8921a94 100644 --- a/Cabal-syntax/src/Distribution/CabalSpecVersion.hs +++ b/Cabal-syntax/src/Distribution/CabalSpecVersion.hs @@ -35,7 +35,7 @@ data CabalSpecVersion | -- 3.10: no changes CabalSpecV3_12 | CabalSpecV3_14 - deriving (Eq, Ord, Show, Read, Enum, Bounded, Typeable, Data, Generic) + deriving (Eq, Ord, Show, Read, Enum, Bounded, Data, Generic) instance Binary CabalSpecVersion instance Structured CabalSpecVersion diff --git a/Cabal-syntax/src/Distribution/Compat/Graph.hs b/Cabal-syntax/src/Distribution/Compat/Graph.hs index 1a6de3a571b..792cc47ce5f 100644 --- a/Cabal-syntax/src/Distribution/Compat/Graph.hs +++ b/Cabal-syntax/src/Distribution/Compat/Graph.hs @@ -1,6 +1,5 @@ {-# LANGUAGE BangPatterns #-} {-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} @@ -122,7 +121,6 @@ data Graph a = Graph , graphKeyToVertex :: Key a -> Maybe G.Vertex , graphBroken :: [(a, [Key a])] } - deriving (Typeable) -- NB: Not a Functor! (or Traversable), because you need -- to restrict Key a ~ Key b. We provide our own mapping diff --git a/Cabal-syntax/src/Distribution/Compat/NonEmptySet.hs b/Cabal-syntax/src/Distribution/Compat/NonEmptySet.hs index 17e3811e9a4..69dca8dd4cb 100644 --- a/Cabal-syntax/src/Distribution/Compat/NonEmptySet.hs +++ b/Cabal-syntax/src/Distribution/Compat/NonEmptySet.hs @@ -32,7 +32,6 @@ import Control.DeepSeq (NFData (..)) import Data.Data (Data) import Data.List.NonEmpty (NonEmpty (..)) import Data.Semigroup (Semigroup (..)) -import Data.Typeable (Typeable) import qualified Data.Foldable as F import qualified Data.Set as Set @@ -48,7 +47,7 @@ import Control.Monad (fail) -- | @since 3.4.0.0 newtype NonEmptySet a = NES (Set.Set a) - deriving (Eq, Ord, Typeable, Data, Read) + deriving (Eq, Ord, Data, Read) ------------------------------------------------------------------------------- -- Instances diff --git a/Cabal-syntax/src/Distribution/Compat/Semigroup.hs b/Cabal-syntax/src/Distribution/Compat/Semigroup.hs index 9db9f6ebe98..9ebc7f0f7f4 100644 --- a/Cabal-syntax/src/Distribution/Compat/Semigroup.hs +++ b/Cabal-syntax/src/Distribution/Compat/Semigroup.hs @@ -1,5 +1,4 @@ {-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} @@ -18,7 +17,6 @@ module Distribution.Compat.Semigroup , gmempty ) where -import Data.Typeable (Typeable) import Distribution.Compat.Binary (Binary) import Distribution.Utils.Structured (Structured) @@ -39,7 +37,7 @@ instance Semigroup (First' a) where -- | A copy of 'Data.Semigroup.Last'. newtype Last' a = Last' {getLast' :: a} - deriving (Eq, Ord, Read, Show, Generic, Binary, Typeable) + deriving (Eq, Ord, Read, Show, Generic, Binary) instance Structured a => Structured (Last' a) @@ -52,7 +50,7 @@ instance Functor Last' where -- | A wrapper around 'Maybe', providing the 'Semigroup' and 'Monoid' instances -- implemented for 'Maybe' since @base-4.11@. newtype Option' a = Option' {getOption' :: Maybe a} - deriving (Eq, Ord, Read, Show, Binary, Generic, Functor, Typeable) + deriving (Eq, Ord, Read, Show, Binary, Generic, Functor) instance Structured a => Structured (Option' a) diff --git a/Cabal-syntax/src/Distribution/Compiler.hs b/Cabal-syntax/src/Distribution/Compiler.hs index d715efbf951..571b0ad1b95 100644 --- a/Cabal-syntax/src/Distribution/Compiler.hs +++ b/Cabal-syntax/src/Distribution/Compiler.hs @@ -78,7 +78,7 @@ data CompilerFlavor | MHS -- MicroHS, see https://github.com/augustss/MicroHs | HaskellSuite String -- string is the id of the actual compiler | OtherCompiler String - deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Data) instance Binary CompilerFlavor instance Structured CompilerFlavor @@ -143,7 +143,6 @@ data PerCompilerFlavor v = PerCompilerFlavor v v , Read , Eq , Ord - , Typeable , Data , Functor , Foldable @@ -174,7 +173,7 @@ instance (Semigroup a, Monoid a) => Monoid (PerCompilerFlavor a) where -- ------------------------------------------------------------ data CompilerId = CompilerId CompilerFlavor Version - deriving (Eq, Generic, Ord, Read, Show, Typeable) + deriving (Eq, Generic, Ord, Read, Show) instance Binary CompilerId instance Structured CompilerId @@ -224,7 +223,7 @@ instance Binary CompilerInfo data AbiTag = NoAbiTag | AbiTag String - deriving (Eq, Generic, Show, Read, Typeable) + deriving (Eq, Generic, Show, Read) instance Binary AbiTag instance Structured AbiTag diff --git a/Cabal-syntax/src/Distribution/License.hs b/Cabal-syntax/src/Distribution/License.hs index f79ef6d0549..bcd2b84b63b 100644 --- a/Cabal-syntax/src/Distribution/License.hs +++ b/Cabal-syntax/src/Distribution/License.hs @@ -111,7 +111,7 @@ data License OtherLicense | -- | Indicates an erroneous license name. UnknownLicense String - deriving (Generic, Read, Show, Eq, Ord, Typeable, Data) + deriving (Generic, Read, Show, Eq, Ord, Data) instance Binary License instance Structured License diff --git a/Cabal-syntax/src/Distribution/ModuleName.hs b/Cabal-syntax/src/Distribution/ModuleName.hs index 90082d29f06..59c318004a9 100644 --- a/Cabal-syntax/src/Distribution/ModuleName.hs +++ b/Cabal-syntax/src/Distribution/ModuleName.hs @@ -40,7 +40,7 @@ import qualified Text.PrettyPrint as Disp -- | A valid Haskell module name. newtype ModuleName = ModuleName ShortText - deriving (Eq, Generic, Ord, Read, Show, Typeable, Data) + deriving (Eq, Generic, Ord, Read, Show, Data) unModuleName :: ModuleName -> String unModuleName (ModuleName s) = fromShortText s diff --git a/Cabal-syntax/src/Distribution/SPDX/License.hs b/Cabal-syntax/src/Distribution/SPDX/License.hs index af271e9115a..2331e66c669 100644 --- a/Cabal-syntax/src/Distribution/SPDX/License.hs +++ b/Cabal-syntax/src/Distribution/SPDX/License.hs @@ -41,7 +41,7 @@ data License NONE | -- | A valid SPDX License Expression as defined in Appendix IV. License LicenseExpression - deriving (Show, Read, Eq, Ord, Typeable, Data, Generic) + deriving (Show, Read, Eq, Ord, Data, Generic) instance Binary License instance Structured License diff --git a/Cabal-syntax/src/Distribution/SPDX/LicenseExceptionId.hs b/Cabal-syntax/src/Distribution/SPDX/LicenseExceptionId.hs index 2ab6eb9eeff..a82ade17265 100644 --- a/Cabal-syntax/src/Distribution/SPDX/LicenseExceptionId.hs +++ b/Cabal-syntax/src/Distribution/SPDX/LicenseExceptionId.hs @@ -104,7 +104,7 @@ data LicenseExceptionId | Vsftpd_openssl_exception -- ^ @vsftpd-openssl-exception@, vsftpd OpenSSL exception, SPDX License List 3.23, SPDX License List 3.25 | WxWindows_exception_3_1 -- ^ @WxWindows-exception-3.1@, WxWindows Library Exception 3.1 | X11vnc_openssl_exception -- ^ @x11vnc-openssl-exception@, x11vnc OpenSSL Exception, SPDX License List 3.23, SPDX License List 3.25 - deriving (Eq, Ord, Enum, Bounded, Show, Read, Typeable, Data, Generic) + deriving (Eq, Ord, Enum, Bounded, Show, Read, Data, Generic) instance Binary LicenseExceptionId where put = Binary.putWord8 . fromIntegral . fromEnum diff --git a/Cabal-syntax/src/Distribution/SPDX/LicenseExpression.hs b/Cabal-syntax/src/Distribution/SPDX/LicenseExpression.hs index c77314746f8..2fe784b2792 100644 --- a/Cabal-syntax/src/Distribution/SPDX/LicenseExpression.hs +++ b/Cabal-syntax/src/Distribution/SPDX/LicenseExpression.hs @@ -43,7 +43,7 @@ data LicenseExpression = ELicense !SimpleLicenseExpression !(Maybe LicenseExceptionId) | EAnd !LicenseExpression !LicenseExpression | EOr !LicenseExpression !LicenseExpression - deriving (Show, Read, Eq, Ord, Typeable, Data, Generic) + deriving (Show, Read, Eq, Ord, Data, Generic) -- | Simple License Expressions. data SimpleLicenseExpression @@ -53,7 +53,7 @@ data SimpleLicenseExpression ELicenseIdPlus LicenseId | -- | A SPDX user defined license reference: For example: @LicenseRef-23@, @LicenseRef-MIT-Style-1@, or @DocumentRef-spdx-tool-1.2:LicenseRef-MIT-Style-2@ ELicenseRef LicenseRef - deriving (Show, Read, Eq, Ord, Typeable, Data, Generic) + deriving (Show, Read, Eq, Ord, Data, Generic) simpleLicenseExpression :: LicenseId -> LicenseExpression simpleLicenseExpression i = ELicense (ELicenseId i) Nothing diff --git a/Cabal-syntax/src/Distribution/SPDX/LicenseId.hs b/Cabal-syntax/src/Distribution/SPDX/LicenseId.hs index 16421e475f9..a8a4b78180e 100644 --- a/Cabal-syntax/src/Distribution/SPDX/LicenseId.hs +++ b/Cabal-syntax/src/Distribution/SPDX/LicenseId.hs @@ -674,7 +674,7 @@ data LicenseId | ZPL_1_1 -- ^ @ZPL-1.1@, Zope Public License 1.1 | ZPL_2_0 -- ^ @ZPL-2.0@, Zope Public License 2.0 | ZPL_2_1 -- ^ @ZPL-2.1@, Zope Public License 2.1 - deriving (Eq, Ord, Enum, Bounded, Show, Read, Typeable, Data) + deriving (Eq, Ord, Enum, Bounded, Show, Read, Data) instance Binary LicenseId where -- Word16 is encoded in big endianess diff --git a/Cabal-syntax/src/Distribution/SPDX/LicenseReference.hs b/Cabal-syntax/src/Distribution/SPDX/LicenseReference.hs index 949d6c4d15d..38f83432692 100644 --- a/Cabal-syntax/src/Distribution/SPDX/LicenseReference.hs +++ b/Cabal-syntax/src/Distribution/SPDX/LicenseReference.hs @@ -24,7 +24,7 @@ data LicenseRef = LicenseRef { _lrDocument :: !(Maybe String) , _lrLicense :: !String } - deriving (Show, Read, Eq, Ord, Typeable, Data, Generic) + deriving (Show, Read, Eq, Ord, Data, Generic) -- | License reference. licenseRef :: LicenseRef -> String diff --git a/Cabal-syntax/src/Distribution/System.hs b/Cabal-syntax/src/Distribution/System.hs index 1bf6d598d03..1903ae40fc8 100644 --- a/Cabal-syntax/src/Distribution/System.hs +++ b/Cabal-syntax/src/Distribution/System.hs @@ -110,7 +110,7 @@ data OS | Wasi | Haiku | OtherOS String - deriving (Eq, Generic, Ord, Show, Read, Typeable, Data) + deriving (Eq, Generic, Ord, Show, Read, Data) instance Binary OS instance Structured OS @@ -213,7 +213,7 @@ data Arch | JavaScript | Wasm32 | OtherArch String - deriving (Eq, Generic, Ord, Show, Read, Typeable, Data) + deriving (Eq, Generic, Ord, Show, Read, Data) instance Binary Arch instance Structured Arch @@ -284,7 +284,7 @@ buildArch = classifyArch Permissive System.Info.arch -- ------------------------------------------------------------ data Platform = Platform Arch OS - deriving (Eq, Generic, Ord, Show, Read, Typeable, Data) + deriving (Eq, Generic, Ord, Show, Read, Data) instance Binary Platform instance Structured Platform diff --git a/Cabal-syntax/src/Distribution/Types/AbiDependency.hs b/Cabal-syntax/src/Distribution/Types/AbiDependency.hs index 2f380d15af2..54871978605 100644 --- a/Cabal-syntax/src/Distribution/Types/AbiDependency.hs +++ b/Cabal-syntax/src/Distribution/Types/AbiDependency.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} module Distribution.Types.AbiDependency where @@ -27,7 +26,7 @@ data AbiDependency = AbiDependency { depUnitId :: Package.UnitId , depAbiHash :: Package.AbiHash } - deriving (Eq, Generic, Read, Show, Typeable) + deriving (Eq, Generic, Read, Show) instance Pretty AbiDependency where pretty (AbiDependency uid abi) = diff --git a/Cabal-syntax/src/Distribution/Types/AbiHash.hs b/Cabal-syntax/src/Distribution/Types/AbiHash.hs index a1be416c4ba..4c018f44c7b 100644 --- a/Cabal-syntax/src/Distribution/Types/AbiHash.hs +++ b/Cabal-syntax/src/Distribution/Types/AbiHash.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} @@ -27,7 +26,7 @@ import Text.PrettyPrint (text) -- -- @since 2.0.0.2 newtype AbiHash = AbiHash ShortText - deriving (Eq, Show, Read, Generic, Typeable) + deriving (Eq, Show, Read, Generic) -- | Convert 'AbiHash' to 'String' -- diff --git a/Cabal-syntax/src/Distribution/Types/Benchmark.hs b/Cabal-syntax/src/Distribution/Types/Benchmark.hs index 13e5fe104e5..6da7ef9dcae 100644 --- a/Cabal-syntax/src/Distribution/Types/Benchmark.hs +++ b/Cabal-syntax/src/Distribution/Types/Benchmark.hs @@ -27,7 +27,7 @@ data Benchmark = Benchmark , benchmarkInterface :: BenchmarkInterface , benchmarkBuildInfo :: BuildInfo } - deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Data) instance Binary Benchmark instance Structured Benchmark diff --git a/Cabal-syntax/src/Distribution/Types/BenchmarkInterface.hs b/Cabal-syntax/src/Distribution/Types/BenchmarkInterface.hs index 02b20864479..d963404a91e 100644 --- a/Cabal-syntax/src/Distribution/Types/BenchmarkInterface.hs +++ b/Cabal-syntax/src/Distribution/Types/BenchmarkInterface.hs @@ -27,7 +27,7 @@ data BenchmarkInterface | -- | A benchmark that does not conform to one of the above -- interfaces for the given reason (e.g. unknown benchmark type). BenchmarkUnsupported BenchmarkType - deriving (Eq, Ord, Generic, Read, Show, Typeable, Data) + deriving (Eq, Ord, Generic, Read, Show, Data) instance Binary BenchmarkInterface instance Structured BenchmarkInterface diff --git a/Cabal-syntax/src/Distribution/Types/BenchmarkType.hs b/Cabal-syntax/src/Distribution/Types/BenchmarkType.hs index 9dd3fad3ff9..56fc49e1b63 100644 --- a/Cabal-syntax/src/Distribution/Types/BenchmarkType.hs +++ b/Cabal-syntax/src/Distribution/Types/BenchmarkType.hs @@ -22,7 +22,7 @@ data BenchmarkType BenchmarkTypeExe Version | -- | Some unknown benchmark type e.g. \"type: foo\" BenchmarkTypeUnknown String Version - deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Data) instance Binary BenchmarkType instance Structured BenchmarkType diff --git a/Cabal-syntax/src/Distribution/Types/BuildInfo.hs b/Cabal-syntax/src/Distribution/Types/BuildInfo.hs index 680b9bf49db..2d7a5edeae1 100644 --- a/Cabal-syntax/src/Distribution/Types/BuildInfo.hs +++ b/Cabal-syntax/src/Distribution/Types/BuildInfo.hs @@ -144,7 +144,7 @@ data BuildInfo = BuildInfo -- ^ Dependencies specific to a library or executable target , mixins :: [Mixin] } - deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Data) instance Binary BuildInfo instance Structured BuildInfo diff --git a/Cabal-syntax/src/Distribution/Types/BuildType.hs b/Cabal-syntax/src/Distribution/Types/BuildType.hs index b94279eaf2e..eba66ec5d1d 100644 --- a/Cabal-syntax/src/Distribution/Types/BuildType.hs +++ b/Cabal-syntax/src/Distribution/Types/BuildType.hs @@ -30,7 +30,7 @@ data BuildType | -- | uses user-supplied @Setup.hs@ or @Setup.lhs@ (default) Custom | Hooks - deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Data) instance Binary BuildType instance Structured BuildType diff --git a/Cabal-syntax/src/Distribution/Types/ComponentId.hs b/Cabal-syntax/src/Distribution/Types/ComponentId.hs index 47cf1d97ee3..cb13b92bfe0 100644 --- a/Cabal-syntax/src/Distribution/Types/ComponentId.hs +++ b/Cabal-syntax/src/Distribution/Types/ComponentId.hs @@ -32,7 +32,7 @@ import Text.PrettyPrint (text) -- -- @since 2.0.0.2 newtype ComponentId = ComponentId ShortText - deriving (Generic, Read, Show, Eq, Ord, Typeable, Data) + deriving (Generic, Read, Show, Eq, Ord, Data) -- | Construct a 'ComponentId' from a 'String' -- diff --git a/Cabal-syntax/src/Distribution/Types/ComponentName.hs b/Cabal-syntax/src/Distribution/Types/ComponentName.hs index 01ed6f7655f..b66a5a03867 100644 --- a/Cabal-syntax/src/Distribution/Types/ComponentName.hs +++ b/Cabal-syntax/src/Distribution/Types/ComponentName.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE PatternSynonyms #-} @@ -25,14 +24,14 @@ import qualified Text.PrettyPrint as Disp data ComponentName = CLibName LibraryName | CNotLibName NotLibComponentName - deriving (Eq, Generic, Ord, Read, Show, Typeable) + deriving (Eq, Generic, Ord, Read, Show) data NotLibComponentName = CNLFLibName {toCompName :: UnqualComponentName} | CNLExeName {toCompName :: UnqualComponentName} | CNLTestName {toCompName :: UnqualComponentName} | CNLBenchName {toCompName :: UnqualComponentName} - deriving (Eq, Generic, Ord, Read, Show, Typeable) + deriving (Eq, Generic, Ord, Read, Show) pattern CFLibName :: UnqualComponentName -> ComponentName pattern CFLibName n = CNotLibName (CNLFLibName n) diff --git a/Cabal-syntax/src/Distribution/Types/ComponentRequestedSpec.hs b/Cabal-syntax/src/Distribution/Types/ComponentRequestedSpec.hs index 224b38c839d..3adcb7ea1da 100644 --- a/Cabal-syntax/src/Distribution/Types/ComponentRequestedSpec.hs +++ b/Cabal-syntax/src/Distribution/Types/ComponentRequestedSpec.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} module Distribution.Types.ComponentRequestedSpec @@ -67,7 +66,7 @@ data ComponentRequestedSpec , benchmarksRequested :: Bool } | OneComponentRequestedSpec ComponentName - deriving (Generic, Read, Show, Eq, Typeable) + deriving (Generic, Read, Show, Eq) instance Binary ComponentRequestedSpec instance Structured ComponentRequestedSpec diff --git a/Cabal-syntax/src/Distribution/Types/CondTree.hs b/Cabal-syntax/src/Distribution/Types/CondTree.hs index 08a4d691faf..51959dbc948 100644 --- a/Cabal-syntax/src/Distribution/Types/CondTree.hs +++ b/Cabal-syntax/src/Distribution/Types/CondTree.hs @@ -61,7 +61,7 @@ data CondTree v c a = CondNode , condTreeConstraints :: c , condTreeComponents :: [CondBranch v c a] } - deriving (Show, Eq, Typeable, Data, Generic, Functor, Foldable, Traversable) + deriving (Show, Eq, Data, Generic, Functor, Foldable, Traversable) instance (Binary v, Binary c, Binary a) => Binary (CondTree v c a) instance (Structured v, Structured c, Structured a) => Structured (CondTree v c a) @@ -82,7 +82,7 @@ data CondBranch v c a = CondBranch , condBranchIfTrue :: CondTree v c a , condBranchIfFalse :: Maybe (CondTree v c a) } - deriving (Show, Eq, Typeable, Data, Generic, Functor, Traversable) + deriving (Show, Eq, Data, Generic, Functor, Traversable) -- This instance is written by hand because GHC 8.0.1/8.0.2 infinite -- loops when trying to derive it with optimizations. See diff --git a/Cabal-syntax/src/Distribution/Types/Condition.hs b/Cabal-syntax/src/Distribution/Types/Condition.hs index 114c25afa66..b7bcead95ac 100644 --- a/Cabal-syntax/src/Distribution/Types/Condition.hs +++ b/Cabal-syntax/src/Distribution/Types/Condition.hs @@ -19,7 +19,7 @@ data Condition c | CNot (Condition c) | COr (Condition c) (Condition c) | CAnd (Condition c) (Condition c) - deriving (Show, Eq, Typeable, Data, Generic) + deriving (Show, Eq, Data, Generic) -- | Boolean negation of a 'Condition' value. cNot :: Condition a -> Condition a diff --git a/Cabal-syntax/src/Distribution/Types/ConfVar.hs b/Cabal-syntax/src/Distribution/Types/ConfVar.hs index 220a6556fbd..bea2d21db52 100644 --- a/Cabal-syntax/src/Distribution/Types/ConfVar.hs +++ b/Cabal-syntax/src/Distribution/Types/ConfVar.hs @@ -19,7 +19,7 @@ data ConfVar | Arch Arch | PackageFlag FlagName | Impl CompilerFlavor VersionRange - deriving (Eq, Show, Typeable, Data, Generic) + deriving (Eq, Show, Data, Generic) instance Binary ConfVar instance Structured ConfVar diff --git a/Cabal-syntax/src/Distribution/Types/Dependency.hs b/Cabal-syntax/src/Distribution/Types/Dependency.hs index 222a699a3f9..768d3a60fc0 100644 --- a/Cabal-syntax/src/Distribution/Types/Dependency.hs +++ b/Cabal-syntax/src/Distribution/Types/Dependency.hs @@ -41,7 +41,7 @@ data Dependency PackageName VersionRange (NonEmptySet LibraryName) - deriving (Generic, Read, Show, Eq, Ord, Typeable, Data) + deriving (Generic, Read, Show, Eq, Ord, Data) depPkgName :: Dependency -> PackageName depPkgName (Dependency pn _ _) = pn diff --git a/Cabal-syntax/src/Distribution/Types/ExeDependency.hs b/Cabal-syntax/src/Distribution/Types/ExeDependency.hs index 17a79703fcc..849debdbf90 100644 --- a/Cabal-syntax/src/Distribution/Types/ExeDependency.hs +++ b/Cabal-syntax/src/Distribution/Types/ExeDependency.hs @@ -25,7 +25,7 @@ data ExeDependency PackageName UnqualComponentName -- name of executable component of package VersionRange - deriving (Generic, Read, Show, Eq, Ord, Typeable, Data) + deriving (Generic, Read, Show, Eq, Ord, Data) instance Binary ExeDependency instance Structured ExeDependency diff --git a/Cabal-syntax/src/Distribution/Types/Executable.hs b/Cabal-syntax/src/Distribution/Types/Executable.hs index a2140e074a7..2017a9ba8d2 100644 --- a/Cabal-syntax/src/Distribution/Types/Executable.hs +++ b/Cabal-syntax/src/Distribution/Types/Executable.hs @@ -26,7 +26,7 @@ data Executable = Executable , exeScope :: ExecutableScope , buildInfo :: BuildInfo } - deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Data) instance L.HasBuildInfo Executable where buildInfo f l = (\x -> l{buildInfo = x}) <$> f (buildInfo l) diff --git a/Cabal-syntax/src/Distribution/Types/ExecutableScope.hs b/Cabal-syntax/src/Distribution/Types/ExecutableScope.hs index 1221fae1c1a..5857fb436c2 100644 --- a/Cabal-syntax/src/Distribution/Types/ExecutableScope.hs +++ b/Cabal-syntax/src/Distribution/Types/ExecutableScope.hs @@ -18,7 +18,7 @@ import qualified Text.PrettyPrint as Disp data ExecutableScope = ExecutablePublic | ExecutablePrivate - deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Data) instance Pretty ExecutableScope where pretty ExecutablePublic = Disp.text "public" diff --git a/Cabal-syntax/src/Distribution/Types/ExposedModule.hs b/Cabal-syntax/src/Distribution/Types/ExposedModule.hs index 4afd03a3263..66eede651a4 100644 --- a/Cabal-syntax/src/Distribution/Types/ExposedModule.hs +++ b/Cabal-syntax/src/Distribution/Types/ExposedModule.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} module Distribution.Types.ExposedModule where @@ -18,7 +17,7 @@ data ExposedModule = ExposedModule { exposedName :: ModuleName , exposedReexport :: Maybe OpenModule } - deriving (Eq, Generic, Read, Show, Typeable) + deriving (Eq, Generic, Read, Show) instance Pretty ExposedModule where pretty (ExposedModule m reexport) = diff --git a/Cabal-syntax/src/Distribution/Types/Flag.hs b/Cabal-syntax/src/Distribution/Types/Flag.hs index eff71748d9f..9ba76ecd4c4 100644 --- a/Cabal-syntax/src/Distribution/Types/Flag.hs +++ b/Cabal-syntax/src/Distribution/Types/Flag.hs @@ -56,7 +56,7 @@ data PackageFlag = MkPackageFlag , flagDefault :: Bool , flagManual :: Bool } - deriving (Show, Eq, Typeable, Data, Generic) + deriving (Show, Eq, Data, Generic) instance Binary PackageFlag instance Structured PackageFlag @@ -80,7 +80,7 @@ emptyFlag name = -- -- @since 2.0.0.2 newtype FlagName = FlagName ShortText - deriving (Eq, Generic, Ord, Show, Read, Typeable, Data, NFData) + deriving (Eq, Generic, Ord, Show, Read, Data, NFData) -- | Construct a 'FlagName' from a 'String' -- @@ -127,7 +127,7 @@ instance Parsec FlagName where -- -- TODO: Why we record the multiplicity of the flag? newtype FlagAssignment = FlagAssignment {getFlagAssignment :: Map.Map FlagName (Int, Bool)} - deriving (Binary, Generic, NFData, Typeable) + deriving (Binary, Generic, NFData) instance Structured FlagAssignment diff --git a/Cabal-syntax/src/Distribution/Types/ForeignLib.hs b/Cabal-syntax/src/Distribution/Types/ForeignLib.hs index 0da75b06cc6..c8a1472ca56 100644 --- a/Cabal-syntax/src/Distribution/Types/ForeignLib.hs +++ b/Cabal-syntax/src/Distribution/Types/ForeignLib.hs @@ -61,9 +61,9 @@ data ForeignLib = ForeignLib -- This is a list rather than a maybe field so that we can flatten -- the condition trees (for instance, when creating an sdist) } - deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Data) -data LibVersionInfo = LibVersionInfo Int Int Int deriving (Data, Eq, Generic, Typeable) +data LibVersionInfo = LibVersionInfo Int Int Int deriving (Data, Eq, Generic) instance Ord LibVersionInfo where LibVersionInfo c r _ `compare` LibVersionInfo c' r' _ = diff --git a/Cabal-syntax/src/Distribution/Types/ForeignLibOption.hs b/Cabal-syntax/src/Distribution/Types/ForeignLibOption.hs index 5ed65410e70..e56afb7a45b 100644 --- a/Cabal-syntax/src/Distribution/Types/ForeignLibOption.hs +++ b/Cabal-syntax/src/Distribution/Types/ForeignLibOption.hs @@ -22,7 +22,7 @@ data ForeignLibOption -- This option is compulsory on Windows and unsupported -- on other platforms. ForeignLibStandalone - deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Data) instance Pretty ForeignLibOption where pretty ForeignLibStandalone = Disp.text "standalone" diff --git a/Cabal-syntax/src/Distribution/Types/ForeignLibType.hs b/Cabal-syntax/src/Distribution/Types/ForeignLibType.hs index 23617b80c48..6ab73d9e2fb 100644 --- a/Cabal-syntax/src/Distribution/Types/ForeignLibType.hs +++ b/Cabal-syntax/src/Distribution/Types/ForeignLibType.hs @@ -27,7 +27,7 @@ data ForeignLibType ForeignLibNativeStatic | -- TODO: Maybe this should record a string? ForeignLibTypeUnknown - deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Data) instance Pretty ForeignLibType where pretty ForeignLibNativeShared = Disp.text "native-shared" diff --git a/Cabal-syntax/src/Distribution/Types/GenericPackageDescription.hs b/Cabal-syntax/src/Distribution/Types/GenericPackageDescription.hs index 55ec8652304..97f4ed8cccb 100644 --- a/Cabal-syntax/src/Distribution/Types/GenericPackageDescription.hs +++ b/Cabal-syntax/src/Distribution/Types/GenericPackageDescription.hs @@ -71,7 +71,7 @@ data GenericPackageDescription = GenericPackageDescription ) ] } - deriving (Show, Eq, Typeable, Data, Generic) + deriving (Show, Eq, Data, Generic) instance Package GenericPackageDescription where packageId = packageId . packageDescription diff --git a/Cabal-syntax/src/Distribution/Types/IncludeRenaming.hs b/Cabal-syntax/src/Distribution/Types/IncludeRenaming.hs index c8cb70d91f1..411b46d6ce4 100644 --- a/Cabal-syntax/src/Distribution/Types/IncludeRenaming.hs +++ b/Cabal-syntax/src/Distribution/Types/IncludeRenaming.hs @@ -26,7 +26,7 @@ data IncludeRenaming = IncludeRenaming { includeProvidesRn :: ModuleRenaming , includeRequiresRn :: ModuleRenaming } - deriving (Show, Read, Eq, Ord, Typeable, Data, Generic) + deriving (Show, Read, Eq, Ord, Data, Generic) instance Binary IncludeRenaming instance Structured IncludeRenaming diff --git a/Cabal-syntax/src/Distribution/Types/InstalledPackageInfo.hs b/Cabal-syntax/src/Distribution/Types/InstalledPackageInfo.hs index b3e353876eb..f57457d2e5b 100644 --- a/Cabal-syntax/src/Distribution/Types/InstalledPackageInfo.hs +++ b/Cabal-syntax/src/Distribution/Types/InstalledPackageInfo.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TypeFamilies #-} @@ -95,7 +94,7 @@ data InstalledPackageInfo = InstalledPackageInfo , haddockHTMLs :: [FilePath] , pkgRoot :: Maybe FilePath } - deriving (Eq, Generic, Typeable, Read, Show) + deriving (Eq, Generic, Read, Show) instance Binary InstalledPackageInfo instance Structured InstalledPackageInfo diff --git a/Cabal-syntax/src/Distribution/Types/LegacyExeDependency.hs b/Cabal-syntax/src/Distribution/Types/LegacyExeDependency.hs index 7acf028d0b3..f5c08ac2747 100644 --- a/Cabal-syntax/src/Distribution/Types/LegacyExeDependency.hs +++ b/Cabal-syntax/src/Distribution/Types/LegacyExeDependency.hs @@ -26,7 +26,7 @@ data LegacyExeDependency = LegacyExeDependency String VersionRange - deriving (Generic, Read, Show, Eq, Ord, Typeable, Data) + deriving (Generic, Read, Show, Eq, Ord, Data) instance Binary LegacyExeDependency instance Structured LegacyExeDependency diff --git a/Cabal-syntax/src/Distribution/Types/Library.hs b/Cabal-syntax/src/Distribution/Types/Library.hs index 738965ea167..fd4b89b6a6a 100644 --- a/Cabal-syntax/src/Distribution/Types/Library.hs +++ b/Cabal-syntax/src/Distribution/Types/Library.hs @@ -31,7 +31,7 @@ data Library = Library -- ^ Whether this multilib can be used as a dependency for other packages. , libBuildInfo :: BuildInfo } - deriving (Generic, Show, Eq, Ord, Read, Typeable, Data) + deriving (Generic, Show, Eq, Ord, Read, Data) instance L.HasBuildInfo Library where buildInfo f l = (\x -> l{libBuildInfo = x}) <$> f (libBuildInfo l) diff --git a/Cabal-syntax/src/Distribution/Types/LibraryName.hs b/Cabal-syntax/src/Distribution/Types/LibraryName.hs index 2b8f53f4f89..1ceefda2e65 100644 --- a/Cabal-syntax/src/Distribution/Types/LibraryName.hs +++ b/Cabal-syntax/src/Distribution/Types/LibraryName.hs @@ -27,7 +27,7 @@ import qualified Text.PrettyPrint as Disp data LibraryName = LMainLibName | LSubLibName UnqualComponentName - deriving (Eq, Generic, Ord, Read, Show, Typeable, Data) + deriving (Eq, Generic, Ord, Read, Show, Data) instance Binary LibraryName instance Structured LibraryName diff --git a/Cabal-syntax/src/Distribution/Types/LibraryVisibility.hs b/Cabal-syntax/src/Distribution/Types/LibraryVisibility.hs index bf113488a5c..8ebd7d2a19d 100644 --- a/Cabal-syntax/src/Distribution/Types/LibraryVisibility.hs +++ b/Cabal-syntax/src/Distribution/Types/LibraryVisibility.hs @@ -23,7 +23,7 @@ data LibraryVisibility LibraryVisibilityPublic | -- | Internal library, default LibraryVisibilityPrivate - deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Data) instance Pretty LibraryVisibility where pretty LibraryVisibilityPublic = Disp.text "public" diff --git a/Cabal-syntax/src/Distribution/Types/Mixin.hs b/Cabal-syntax/src/Distribution/Types/Mixin.hs index 63fa6e30fd5..726651d3292 100644 --- a/Cabal-syntax/src/Distribution/Types/Mixin.hs +++ b/Cabal-syntax/src/Distribution/Types/Mixin.hs @@ -31,7 +31,7 @@ data Mixin = Mixin , mixinLibraryName :: LibraryName , mixinIncludeRenaming :: IncludeRenaming } - deriving (Show, Read, Eq, Ord, Typeable, Data, Generic) + deriving (Show, Read, Eq, Ord, Data, Generic) instance Binary Mixin instance Structured Mixin diff --git a/Cabal-syntax/src/Distribution/Types/Module.hs b/Cabal-syntax/src/Distribution/Types/Module.hs index e9febeff070..c275874ebe7 100644 --- a/Cabal-syntax/src/Distribution/Types/Module.hs +++ b/Cabal-syntax/src/Distribution/Types/Module.hs @@ -26,7 +26,7 @@ import qualified Text.PrettyPrint as Disp -- the 'InstalledPackageInfo'. data Module = Module DefUnitId ModuleName - deriving (Generic, Read, Show, Eq, Ord, Typeable, Data) + deriving (Generic, Read, Show, Eq, Ord, Data) instance Binary Module instance Structured Module diff --git a/Cabal-syntax/src/Distribution/Types/ModuleReexport.hs b/Cabal-syntax/src/Distribution/Types/ModuleReexport.hs index 0dae6002c3c..f7aa1e0a2fe 100644 --- a/Cabal-syntax/src/Distribution/Types/ModuleReexport.hs +++ b/Cabal-syntax/src/Distribution/Types/ModuleReexport.hs @@ -24,7 +24,7 @@ data ModuleReexport = ModuleReexport , moduleReexportOriginalName :: ModuleName , moduleReexportName :: ModuleName } - deriving (Eq, Ord, Generic, Read, Show, Typeable, Data) + deriving (Eq, Ord, Generic, Read, Show, Data) instance Binary ModuleReexport instance Structured ModuleReexport diff --git a/Cabal-syntax/src/Distribution/Types/ModuleRenaming.hs b/Cabal-syntax/src/Distribution/Types/ModuleRenaming.hs index 022a321a055..d0317205f6a 100644 --- a/Cabal-syntax/src/Distribution/Types/ModuleRenaming.hs +++ b/Cabal-syntax/src/Distribution/Types/ModuleRenaming.hs @@ -40,7 +40,7 @@ data ModuleRenaming | -- | Hiding renaming, e.g., @hiding (A, B)@, bringing all -- exported modules into scope except the hidden ones. HidingRenaming [ModuleName] - deriving (Show, Read, Eq, Ord, Typeable, Data, Generic) + deriving (Show, Read, Eq, Ord, Data, Generic) -- | Interpret a 'ModuleRenaming' as a partial map from 'ModuleName' -- to 'ModuleName'. For efficiency, you should partially apply it diff --git a/Cabal-syntax/src/Distribution/Types/MungedPackageId.hs b/Cabal-syntax/src/Distribution/Types/MungedPackageId.hs index f1e0904586d..8e879620478 100644 --- a/Cabal-syntax/src/Distribution/Types/MungedPackageId.hs +++ b/Cabal-syntax/src/Distribution/Types/MungedPackageId.hs @@ -28,7 +28,7 @@ data MungedPackageId = MungedPackageId , mungedVersion :: Version -- ^ The version of this package / component, eg 1.2 } - deriving (Generic, Read, Show, Eq, Ord, Typeable, Data) + deriving (Generic, Read, Show, Eq, Ord, Data) instance Binary MungedPackageId instance Structured MungedPackageId diff --git a/Cabal-syntax/src/Distribution/Types/MungedPackageName.hs b/Cabal-syntax/src/Distribution/Types/MungedPackageName.hs index 78b648993d4..25a0f055362 100644 --- a/Cabal-syntax/src/Distribution/Types/MungedPackageName.hs +++ b/Cabal-syntax/src/Distribution/Types/MungedPackageName.hs @@ -31,7 +31,7 @@ import qualified Text.PrettyPrint as Disp -- -- @since 2.0.0.2 data MungedPackageName = MungedPackageName !PackageName !LibraryName - deriving (Generic, Read, Show, Eq, Ord, Typeable, Data) + deriving (Generic, Read, Show, Eq, Ord, Data) instance Binary MungedPackageName instance Structured MungedPackageName diff --git a/Cabal-syntax/src/Distribution/Types/PackageDescription.hs b/Cabal-syntax/src/Distribution/Types/PackageDescription.hs index 5e64694ac1f..4b00a8ef526 100644 --- a/Cabal-syntax/src/Distribution/Types/PackageDescription.hs +++ b/Cabal-syntax/src/Distribution/Types/PackageDescription.hs @@ -151,7 +151,7 @@ data PackageDescription = PackageDescription , extraDocFiles :: [RelativePath Pkg File] , extraFiles :: [RelativePath Pkg File] } - deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Data) instance Binary PackageDescription instance Structured PackageDescription diff --git a/Cabal-syntax/src/Distribution/Types/PackageId.hs b/Cabal-syntax/src/Distribution/Types/PackageId.hs index b5c4764ad22..9cd88a2f810 100644 --- a/Cabal-syntax/src/Distribution/Types/PackageId.hs +++ b/Cabal-syntax/src/Distribution/Types/PackageId.hs @@ -28,7 +28,7 @@ data PackageIdentifier = PackageIdentifier , pkgVersion :: Version -- ^ the version of this package, eg 1.2 } - deriving (Generic, Read, Show, Eq, Ord, Typeable, Data) + deriving (Generic, Read, Show, Eq, Ord, Data) instance Binary PackageIdentifier instance Structured PackageIdentifier diff --git a/Cabal-syntax/src/Distribution/Types/PackageName.hs b/Cabal-syntax/src/Distribution/Types/PackageName.hs index 4cf9d1aeb59..cf7f92b76a0 100644 --- a/Cabal-syntax/src/Distribution/Types/PackageName.hs +++ b/Cabal-syntax/src/Distribution/Types/PackageName.hs @@ -27,7 +27,7 @@ import qualified Text.PrettyPrint as Disp -- -- @since 2.0.0.2 newtype PackageName = PackageName ShortText - deriving (Generic, Read, Show, Eq, Ord, Typeable, Data) + deriving (Generic, Read, Show, Eq, Ord, Data) -- | Convert 'PackageName' to 'String' unPackageName :: PackageName -> String diff --git a/Cabal-syntax/src/Distribution/Types/PackageVersionConstraint.hs b/Cabal-syntax/src/Distribution/Types/PackageVersionConstraint.hs index 9c328378d07..013226ca2d5 100644 --- a/Cabal-syntax/src/Distribution/Types/PackageVersionConstraint.hs +++ b/Cabal-syntax/src/Distribution/Types/PackageVersionConstraint.hs @@ -26,7 +26,7 @@ import qualified Distribution.Compat.CharParsing as P -- There are a few places in the codebase where 'Dependency' was used where -- 'PackageVersionConstraint' is not used instead (#5570). data PackageVersionConstraint = PackageVersionConstraint PackageName VersionRange - deriving (Generic, Read, Show, Eq, Typeable, Data) + deriving (Generic, Read, Show, Eq, Data) instance Binary PackageVersionConstraint instance Structured PackageVersionConstraint diff --git a/Cabal-syntax/src/Distribution/Types/PkgconfigDependency.hs b/Cabal-syntax/src/Distribution/Types/PkgconfigDependency.hs index 695d3a3a184..54c8da7f66d 100644 --- a/Cabal-syntax/src/Distribution/Types/PkgconfigDependency.hs +++ b/Cabal-syntax/src/Distribution/Types/PkgconfigDependency.hs @@ -23,7 +23,7 @@ data PkgconfigDependency = PkgconfigDependency PkgconfigName PkgconfigVersionRange - deriving (Generic, Read, Show, Eq, Ord, Typeable, Data) + deriving (Generic, Read, Show, Eq, Ord, Data) instance Binary PkgconfigDependency instance Structured PkgconfigDependency diff --git a/Cabal-syntax/src/Distribution/Types/PkgconfigName.hs b/Cabal-syntax/src/Distribution/Types/PkgconfigName.hs index c3a93dd27c1..595405780ff 100644 --- a/Cabal-syntax/src/Distribution/Types/PkgconfigName.hs +++ b/Cabal-syntax/src/Distribution/Types/PkgconfigName.hs @@ -24,7 +24,7 @@ import qualified Text.PrettyPrint as Disp -- -- @since 2.0.0.2 newtype PkgconfigName = PkgconfigName ShortText - deriving (Generic, Read, Show, Eq, Ord, Typeable, Data) + deriving (Generic, Read, Show, Eq, Ord, Data) -- | Convert 'PkgconfigName' to 'String' -- diff --git a/Cabal-syntax/src/Distribution/Types/PkgconfigVersion.hs b/Cabal-syntax/src/Distribution/Types/PkgconfigVersion.hs index dc328c44dda..d8db5b39bad 100644 --- a/Cabal-syntax/src/Distribution/Types/PkgconfigVersion.hs +++ b/Cabal-syntax/src/Distribution/Types/PkgconfigVersion.hs @@ -26,7 +26,7 @@ import qualified Text.PrettyPrint as PP -- -- @since 3.0 newtype PkgconfigVersion = PkgconfigVersion BS.ByteString - deriving (Generic, Read, Show, Typeable, Data) + deriving (Generic, Read, Show, Data) instance Eq PkgconfigVersion where PkgconfigVersion a == PkgconfigVersion b = rpmvercmp a b == EQ diff --git a/Cabal-syntax/src/Distribution/Types/PkgconfigVersionRange.hs b/Cabal-syntax/src/Distribution/Types/PkgconfigVersionRange.hs index fe74f70c7be..0699768409e 100644 --- a/Cabal-syntax/src/Distribution/Types/PkgconfigVersionRange.hs +++ b/Cabal-syntax/src/Distribution/Types/PkgconfigVersionRange.hs @@ -37,7 +37,7 @@ data PkgconfigVersionRange | PcOrEarlierVersion PkgconfigVersion -- =< version | PcUnionVersionRanges PkgconfigVersionRange PkgconfigVersionRange | PcIntersectVersionRanges PkgconfigVersionRange PkgconfigVersionRange - deriving (Generic, Read, Show, Eq, Ord, Typeable, Data) + deriving (Generic, Read, Show, Eq, Ord, Data) instance Binary PkgconfigVersionRange instance Structured PkgconfigVersionRange diff --git a/Cabal-syntax/src/Distribution/Types/SetupBuildInfo.hs b/Cabal-syntax/src/Distribution/Types/SetupBuildInfo.hs index 18a01523a9e..9feffbf71e6 100644 --- a/Cabal-syntax/src/Distribution/Types/SetupBuildInfo.hs +++ b/Cabal-syntax/src/Distribution/Types/SetupBuildInfo.hs @@ -25,7 +25,7 @@ data SetupBuildInfo = SetupBuildInfo -- internally, and doesn't correspond to anything in the .cabal -- file. See #3199. } - deriving (Generic, Show, Eq, Ord, Read, Typeable, Data) + deriving (Generic, Show, Eq, Ord, Read, Data) instance Binary SetupBuildInfo instance Structured SetupBuildInfo diff --git a/Cabal-syntax/src/Distribution/Types/SourceRepo.hs b/Cabal-syntax/src/Distribution/Types/SourceRepo.hs index 16a0fc60e0e..10ab9c16e63 100644 --- a/Cabal-syntax/src/Distribution/Types/SourceRepo.hs +++ b/Cabal-syntax/src/Distribution/Types/SourceRepo.hs @@ -77,7 +77,7 @@ data SourceRepo = SourceRepo -- relative to the root of the repository. This field is optional. If not -- given the default is \".\" ie no subdirectory. } - deriving (Eq, Ord, Generic, Read, Show, Typeable, Data) + deriving (Eq, Ord, Generic, Read, Show, Data) emptySourceRepo :: RepoKind -> SourceRepo emptySourceRepo kind = @@ -106,7 +106,7 @@ data RepoKind -- information to re-create the exact sources. RepoThis | RepoKindUnknown String - deriving (Eq, Generic, Ord, Read, Show, Typeable, Data) + deriving (Eq, Generic, Ord, Read, Show, Data) instance Binary RepoKind instance Structured RepoKind @@ -126,7 +126,7 @@ data KnownRepoType | Monotone | -- | @since 3.4.0.0 Pijul - deriving (Eq, Generic, Ord, Read, Show, Typeable, Data, Enum, Bounded) + deriving (Eq, Generic, Ord, Read, Show, Data, Enum, Bounded) instance Binary KnownRepoType instance Structured KnownRepoType @@ -146,7 +146,7 @@ instance Pretty KnownRepoType where data RepoType = KnownRepoType KnownRepoType | OtherRepoType String - deriving (Eq, Generic, Ord, Read, Show, Typeable, Data) + deriving (Eq, Generic, Ord, Read, Show, Data) instance Binary RepoType instance Structured RepoType diff --git a/Cabal-syntax/src/Distribution/Types/TestSuite.hs b/Cabal-syntax/src/Distribution/Types/TestSuite.hs index 6b3107cae71..129e17dabfb 100644 --- a/Cabal-syntax/src/Distribution/Types/TestSuite.hs +++ b/Cabal-syntax/src/Distribution/Types/TestSuite.hs @@ -28,7 +28,7 @@ data TestSuite = TestSuite , testBuildInfo :: BuildInfo , testCodeGenerators :: [String] } - deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Data) instance L.HasBuildInfo TestSuite where buildInfo f l = (\x -> l{testBuildInfo = x}) <$> f (testBuildInfo l) diff --git a/Cabal-syntax/src/Distribution/Types/TestSuiteInterface.hs b/Cabal-syntax/src/Distribution/Types/TestSuiteInterface.hs index 37e87155e48..a64d2f61f62 100644 --- a/Cabal-syntax/src/Distribution/Types/TestSuiteInterface.hs +++ b/Cabal-syntax/src/Distribution/Types/TestSuiteInterface.hs @@ -30,7 +30,7 @@ data TestSuiteInterface | -- | A test suite that does not conform to one of the above interfaces for -- the given reason (e.g. unknown test type). TestSuiteUnsupported TestType - deriving (Eq, Ord, Generic, Read, Show, Typeable, Data) + deriving (Eq, Ord, Generic, Read, Show, Data) instance Binary TestSuiteInterface instance Structured TestSuiteInterface diff --git a/Cabal-syntax/src/Distribution/Types/TestType.hs b/Cabal-syntax/src/Distribution/Types/TestType.hs index 6ac0866d6f1..88d3b3892f8 100644 --- a/Cabal-syntax/src/Distribution/Types/TestType.hs +++ b/Cabal-syntax/src/Distribution/Types/TestType.hs @@ -25,7 +25,7 @@ data TestType TestTypeLib Version | -- | Some unknown test type e.g. \"type: foo\" TestTypeUnknown String Version - deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Data) instance Binary TestType instance Structured TestType diff --git a/Cabal-syntax/src/Distribution/Types/UnitId.hs b/Cabal-syntax/src/Distribution/Types/UnitId.hs index 36a1d003b2e..0b5ca4bdf7b 100644 --- a/Cabal-syntax/src/Distribution/Types/UnitId.hs +++ b/Cabal-syntax/src/Distribution/Types/UnitId.hs @@ -64,7 +64,7 @@ import Text.PrettyPrint (text) -- flag, use the 'display' function, which will work on all -- versions of Cabal. newtype UnitId = UnitId ShortText - deriving (Generic, Read, Show, Eq, Ord, Typeable, Data, NFData) + deriving (Generic, Read, Show, Eq, Ord, Data, NFData) instance Binary UnitId instance Structured UnitId @@ -118,7 +118,7 @@ getHSLibraryName uid = "HS" ++ prettyShow uid -- that a 'UnitId' identified this way is definite; i.e., it has no -- unfilled holes. newtype DefUnitId = DefUnitId {unDefUnitId :: UnitId} - deriving (Generic, Read, Show, Eq, Ord, Typeable, Data, Binary, NFData, Pretty) + deriving (Generic, Read, Show, Eq, Ord, Data, Binary, NFData, Pretty) instance Structured DefUnitId diff --git a/Cabal-syntax/src/Distribution/Types/UnqualComponentName.hs b/Cabal-syntax/src/Distribution/Types/UnqualComponentName.hs index 3879cdd2169..f671759b42f 100644 --- a/Cabal-syntax/src/Distribution/Types/UnqualComponentName.hs +++ b/Cabal-syntax/src/Distribution/Types/UnqualComponentName.hs @@ -33,7 +33,6 @@ newtype UnqualComponentName = UnqualComponentName ShortText , Show , Eq , Ord - , Typeable , Data , Semigroup , Monoid -- TODO: bad enabler of bad monoids diff --git a/Cabal-syntax/src/Distribution/Types/Version.hs b/Cabal-syntax/src/Distribution/Types/Version.hs index 90ad33b1048..efb2d497b49 100644 --- a/Cabal-syntax/src/Distribution/Types/Version.hs +++ b/Cabal-syntax/src/Distribution/Types/Version.hs @@ -47,7 +47,7 @@ data Version -- which all fall into the [0..0xfffe] range), then PV0 -- MUST be used. This is essential for the 'Eq' instance -- to work. - deriving (Data, Eq, Generic, Typeable) + deriving (Data, Eq, Generic) instance Ord Version where compare (PV0 x) (PV0 y) = compare x y diff --git a/Cabal-syntax/src/Distribution/Types/VersionInterval.hs b/Cabal-syntax/src/Distribution/Types/VersionInterval.hs index afd9d665631..6f64a1fea35 100644 --- a/Cabal-syntax/src/Distribution/Types/VersionInterval.hs +++ b/Cabal-syntax/src/Distribution/Types/VersionInterval.hs @@ -1,5 +1,4 @@ {-# LANGUAGE BangPatterns #-} -{-# LANGUAGE DeriveDataTypeable #-} -- | This module implements a view of a 'VersionRange' as a finite -- list of separated version intervals. @@ -65,7 +64,7 @@ import Distribution.Types.VersionRange.Internal -- predicates for translation into foreign packaging systems that do not -- support complex version range expressions. newtype VersionIntervals = VersionIntervals [VersionInterval] - deriving (Eq, Show, Typeable) + deriving (Eq, Show) -- | Inspect the list of version intervals. unVersionIntervals :: VersionIntervals -> [VersionInterval] diff --git a/Cabal-syntax/src/Distribution/Types/VersionInterval/Legacy.hs b/Cabal-syntax/src/Distribution/Types/VersionInterval/Legacy.hs index f5e86d4a429..57e725b66d5 100644 --- a/Cabal-syntax/src/Distribution/Types/VersionInterval/Legacy.hs +++ b/Cabal-syntax/src/Distribution/Types/VersionInterval/Legacy.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} - -- | This module implements a view of a 'VersionRange' as a finite -- list of separated version intervals and provides the Boolean -- algebra operations union, intersection, and complement. @@ -96,7 +94,7 @@ asVersionIntervals = versionIntervals . toVersionIntervals -- predicates for translation into foreign packaging systems that do not -- support complex version range expressions. newtype VersionIntervals = VersionIntervals [VersionInterval] - deriving (Eq, Show, Typeable) + deriving (Eq, Show) -- | Inspect the list of version intervals. versionIntervals :: VersionIntervals -> [VersionInterval] diff --git a/Cabal-syntax/src/Distribution/Types/VersionRange/Internal.hs b/Cabal-syntax/src/Distribution/Types/VersionRange/Internal.hs index 7d7101d8660..d1a283ea84b 100644 --- a/Cabal-syntax/src/Distribution/Types/VersionRange/Internal.hs +++ b/Cabal-syntax/src/Distribution/Types/VersionRange/Internal.hs @@ -58,7 +58,7 @@ data VersionRange | MajorBoundVersion Version -- @^>= ver@ (same as >= ver && < MAJ(ver)+1) | UnionVersionRanges VersionRange VersionRange | IntersectVersionRanges VersionRange VersionRange - deriving (Data, Eq, Ord, Generic, Read, Show, Typeable) + deriving (Data, Eq, Ord, Generic, Read, Show) instance Binary VersionRange instance Structured VersionRange @@ -181,7 +181,6 @@ data VersionRangeF a , Generic , Read , Show - , Typeable , Functor , Foldable , Traversable diff --git a/Cabal-syntax/src/Distribution/Utils/Path.hs b/Cabal-syntax/src/Distribution/Utils/Path.hs index 0e1c7c191e4..a0f18a1dfdd 100644 --- a/Cabal-syntax/src/Distribution/Utils/Path.hs +++ b/Cabal-syntax/src/Distribution/Utils/Path.hs @@ -201,7 +201,7 @@ data AllowAbsolute -- until we interpret them (using e.g. 'interpretSymbolicPath'). newtype SymbolicPathX (allowAbsolute :: AllowAbsolute) (from :: Type) (to :: FileOrDir) = SymbolicPath FilePath - deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Data) type role SymbolicPathX nominal nominal nominal diff --git a/Cabal-syntax/src/Distribution/Utils/ShortText.hs b/Cabal-syntax/src/Distribution/Utils/ShortText.hs index 0b128de9698..e1aa36ff236 100644 --- a/Cabal-syntax/src/Distribution/Utils/ShortText.hs +++ b/Cabal-syntax/src/Distribution/Utils/ShortText.hs @@ -93,7 +93,7 @@ null :: ShortText -> Bool -- @since 2.0.0.2 #if HAVE_SHORTBYTESTRING newtype ShortText = ST { unST :: BS.Short.ShortByteString } - deriving (Eq,Ord,Generic,Data,Typeable) + deriving (Eq,Ord,Generic,Data) # if MIN_VERSION_binary(0,8,1) instance Binary ShortText where @@ -115,7 +115,7 @@ unsafeFromUTF8BS = ST . BS.Short.toShort null = BS.Short.null . unST #else newtype ShortText = ST { unST :: String } - deriving (Eq,Ord,Generic,Data,Typeable) + deriving (Eq,Ord,Generic,Data) instance Binary ShortText where put = put . encodeStringUtf8 . unST diff --git a/Cabal-syntax/src/Language/Haskell/Extension.hs b/Cabal-syntax/src/Language/Haskell/Extension.hs index dce34560586..c2a83f77aca 100644 --- a/Cabal-syntax/src/Language/Haskell/Extension.hs +++ b/Cabal-syntax/src/Language/Haskell/Extension.hs @@ -59,7 +59,7 @@ data Language GHC2024 | -- | An unknown language, identified by its name. UnknownLanguage String - deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Data) instance Binary Language instance Structured Language @@ -115,7 +115,7 @@ data Extension | -- | An unknown extension, identified by the name of its @LANGUAGE@ -- pragma. UnknownExtension String - deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Data) instance Binary Extension instance Structured Extension @@ -556,7 +556,7 @@ data KnownExtension | -- | Allow use of or-pattern syntax, condensing multiple patterns -- into a single one. OrPatterns - deriving (Generic, Show, Read, Eq, Ord, Enum, Bounded, Typeable, Data) + deriving (Generic, Show, Read, Eq, Ord, Enum, Bounded, Data) instance Binary KnownExtension instance Structured KnownExtension diff --git a/Cabal-tests/tests/UnitTests.hs b/Cabal-tests/tests/UnitTests.hs index cc0099175a8..4c26e3e92a8 100644 --- a/Cabal-tests/tests/UnitTests.hs +++ b/Cabal-tests/tests/UnitTests.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} module Main ( main ) where @@ -7,7 +6,6 @@ import Test.Tasty import Test.Tasty.Options import Data.Proxy -import Data.Typeable import Distribution.Simple.Utils import Distribution.Verbosity @@ -90,7 +88,6 @@ extraOptions = ] newtype OptionMtimeChangeDelay = OptionMtimeChangeDelay Int - deriving Typeable instance IsOption OptionMtimeChangeDelay where defaultValue = OptionMtimeChangeDelay 0 @@ -100,7 +97,6 @@ instance IsOption OptionMtimeChangeDelay where ++ "file modification, in microseconds" newtype GhcPath = GhcPath FilePath - deriving Typeable instance IsOption GhcPath where defaultValue = GhcPath "ghc" diff --git a/Cabal/src/Distribution/Backpack/ModuleShape.hs b/Cabal/src/Distribution/Backpack/ModuleShape.hs index 039a6a30239..aceb14d5bc4 100644 --- a/Cabal/src/Distribution/Backpack/ModuleShape.hs +++ b/Cabal/src/Distribution/Backpack/ModuleShape.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} -- | See @@ -31,7 +30,7 @@ data ModuleShape = ModuleShape { modShapeProvides :: OpenModuleSubst , modShapeRequires :: Set ModuleName } - deriving (Eq, Show, Generic, Typeable) + deriving (Eq, Show, Generic) instance Binary ModuleShape instance Structured ModuleShape diff --git a/Cabal/src/Distribution/Compat/Async.hs b/Cabal/src/Distribution/Compat/Async.hs index b1234c8e346..c0052b01185 100644 --- a/Cabal/src/Distribution/Compat/Async.hs +++ b/Cabal/src/Distribution/Compat/Async.hs @@ -1,5 +1,4 @@ {-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveDataTypeable #-} -- | 'Async', yet using 'MVar's. -- @@ -40,7 +39,6 @@ import Control.Exception , uninterruptibleMask_ ) import Control.Monad (void) -import Data.Typeable (Typeable) import GHC.Exts (inline) -- | Async, but based on 'MVar', as we don't depend on @stm@. @@ -143,7 +141,6 @@ data AsyncCancelled = AsyncCancelled deriving ( Show , Eq - , Typeable ) instance Exception AsyncCancelled where diff --git a/Cabal/src/Distribution/Compat/Time.hs b/Cabal/src/Distribution/Compat/Time.hs index 03d57449eb4..088c01950c0 100644 --- a/Cabal/src/Distribution/Compat/Time.hs +++ b/Cabal/src/Distribution/Compat/Time.hs @@ -1,5 +1,4 @@ {-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} @@ -55,7 +54,7 @@ import System.Posix.Files ( modificationTime ) -- | An opaque type representing a file's modification time, represented -- internally as a 64-bit unsigned integer in the Windows UTC format. newtype ModTime = ModTime Word64 - deriving (Binary, Generic, Bounded, Eq, Ord, Typeable) + deriving (Binary, Generic, Bounded, Eq, Ord) instance Structured ModTime diff --git a/Cabal/src/Distribution/Simple/Compiler.hs b/Cabal/src/Distribution/Simple/Compiler.hs index 52395a56668..32119deb519 100644 --- a/Cabal/src/Distribution/Simple/Compiler.hs +++ b/Cabal/src/Distribution/Simple/Compiler.hs @@ -1,5 +1,4 @@ {-# LANGUAGE DataKinds #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveFoldable #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DeriveGeneric #-} @@ -125,7 +124,7 @@ data Compiler = Compiler , compilerProperties :: Map String String -- ^ A key-value map for properties not covered by the above fields. } - deriving (Eq, Generic, Typeable, Show, Read) + deriving (Eq, Generic, Show, Read) instance Binary Compiler instance Structured Compiler @@ -200,7 +199,7 @@ data PackageDBX fp | UserPackageDB | -- | NB: the path might be relative or it might be absolute SpecificPackageDB fp - deriving (Eq, Generic, Ord, Show, Read, Typeable, Functor, Foldable, Traversable) + deriving (Eq, Generic, Ord, Show, Read, Functor, Foldable, Traversable) instance Binary fp => Binary (PackageDBX fp) instance Structured fp => Structured (PackageDBX fp) @@ -291,7 +290,7 @@ data OptimisationLevel = NoOptimisation | NormalOptimisation | MaximumOptimisation - deriving (Bounded, Enum, Eq, Generic, Read, Show, Typeable) + deriving (Bounded, Enum, Eq, Generic, Read, Show) instance Binary OptimisationLevel instance Structured OptimisationLevel @@ -324,7 +323,7 @@ data DebugInfoLevel | MinimalDebugInfo | NormalDebugInfo | MaximalDebugInfo - deriving (Bounded, Enum, Eq, Generic, Read, Show, Typeable) + deriving (Bounded, Enum, Eq, Generic, Read, Show) instance Binary DebugInfoLevel instance Structured DebugInfoLevel @@ -561,7 +560,7 @@ data ProfDetailLevel | ProfDetailAllFunctions | ProfDetailTopLate | ProfDetailOther String - deriving (Eq, Generic, Read, Show, Typeable) + deriving (Eq, Generic, Read, Show) instance Binary ProfDetailLevel instance Structured ProfDetailLevel diff --git a/Cabal/src/Distribution/Simple/Configure.hs b/Cabal/src/Distribution/Simple/Configure.hs index 033f3c9de54..7d8fdcbddfc 100644 --- a/Cabal/src/Distribution/Simple/Configure.hs +++ b/Cabal/src/Distribution/Simple/Configure.hs @@ -1,5 +1,4 @@ {-# LANGUAGE DataKinds #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} @@ -202,7 +201,6 @@ data ConfigStateFileError PackageIdentifier PackageIdentifier (Either ConfigStateFileError LocalBuildInfo) - deriving (Typeable) -- | Format a 'ConfigStateFileError' as a user-facing error message. dispConfigStateFileError :: ConfigStateFileError -> Doc diff --git a/Cabal/src/Distribution/Simple/Errors.hs b/Cabal/src/Distribution/Simple/Errors.hs index c1cc75b5ad1..76b0f912bd2 100644 --- a/Cabal/src/Distribution/Simple/Errors.hs +++ b/Cabal/src/Distribution/Simple/Errors.hs @@ -172,7 +172,7 @@ data CabalException | UnknownVersionDb String VersionRange FilePath | MissingCoveredInstalledLibrary UnitId | SetupHooksException SetupHooksException - deriving (Show, Typeable) + deriving (Show) exceptionCode :: CabalException -> Int exceptionCode e = case e of diff --git a/Cabal/src/Distribution/Simple/Flag.hs b/Cabal/src/Distribution/Simple/Flag.hs index f8598697028..2cd9cc53d8c 100644 --- a/Cabal/src/Distribution/Simple/Flag.hs +++ b/Cabal/src/Distribution/Simple/Flag.hs @@ -62,7 +62,7 @@ import Prelude () -- 'NoFlag' and later flags override earlier ones. -- -- Isomorphic to 'Maybe' a. -data Flag a = Flag a | NoFlag deriving (Eq, Generic, Show, Read, Typeable, Foldable, Traversable) +data Flag a = Flag a | NoFlag deriving (Eq, Generic, Show, Read, Foldable, Traversable) instance Binary a => Binary (Flag a) instance Structured a => Structured (Flag a) diff --git a/Cabal/src/Distribution/Simple/GHC/EnvironmentParser.hs b/Cabal/src/Distribution/Simple/GHC/EnvironmentParser.hs index 709a375a703..41067d9dba3 100644 --- a/Cabal/src/Distribution/Simple/GHC/EnvironmentParser.hs +++ b/Cabal/src/Distribution/Simple/GHC/EnvironmentParser.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE LambdaCase #-} @@ -44,7 +43,7 @@ parseEnvironmentFileLine = clearDb = P.string "clear-package-db" newtype ParseErrorExc = ParseErrorExc P.ParseError - deriving (Show, Typeable) + deriving (Show) instance Exception ParseErrorExc diff --git a/Cabal/src/Distribution/Simple/InstallDirs.hs b/Cabal/src/Distribution/Simple/InstallDirs.hs index b478aefe511..86e6fa08777 100644 --- a/Cabal/src/Distribution/Simple/InstallDirs.hs +++ b/Cabal/src/Distribution/Simple/InstallDirs.hs @@ -1,5 +1,4 @@ {-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} @@ -101,7 +100,7 @@ data InstallDirs dir = InstallDirs , haddockdir :: dir , sysconfdir :: dir } - deriving (Eq, Read, Show, Functor, Generic, Typeable) + deriving (Eq, Read, Show, Functor, Generic) instance Binary dir => Binary (InstallDirs dir) instance Structured dir => Structured (InstallDirs dir) @@ -389,7 +388,7 @@ prefixRelativeInstallDirs pkgId libname compilerId platform dirs = -- | An abstract path, possibly containing variables that need to be -- substituted for to get a real 'FilePath'. newtype PathTemplate = PathTemplate [PathComponent] - deriving (Eq, Ord, Generic, Typeable) + deriving (Eq, Ord, Generic) instance Binary PathTemplate instance Structured PathTemplate diff --git a/Cabal/src/Distribution/Simple/InstallDirs/Internal.hs b/Cabal/src/Distribution/Simple/InstallDirs/Internal.hs index 9c411b7dcc1..a65c706af20 100644 --- a/Cabal/src/Distribution/Simple/InstallDirs/Internal.hs +++ b/Cabal/src/Distribution/Simple/InstallDirs/Internal.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} module Distribution.Simple.InstallDirs.Internal @@ -12,7 +11,7 @@ import Prelude () data PathComponent = Ordinary FilePath | Variable PathTemplateVariable - deriving (Eq, Ord, Generic, Typeable) + deriving (Eq, Ord, Generic) instance Binary PathComponent instance Structured PathComponent @@ -65,7 +64,7 @@ data PathTemplateVariable TestSuiteResultVar | -- | The name of the benchmark being run BenchmarkNameVar - deriving (Eq, Ord, Generic, Typeable) + deriving (Eq, Ord, Generic) instance Binary PathTemplateVariable instance Structured PathTemplateVariable diff --git a/Cabal/src/Distribution/Simple/PackageIndex.hs b/Cabal/src/Distribution/Simple/PackageIndex.hs index 927e10ae878..ead66c6dc8b 100644 --- a/Cabal/src/Distribution/Simple/PackageIndex.hs +++ b/Cabal/src/Distribution/Simple/PackageIndex.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} @@ -142,7 +141,7 @@ data PackageIndex a = PackageIndex -- preserved. See #1463 for discussion. packageIdIndex :: !(Map (PackageName, LibraryName) (Map Version [a])) } - deriving (Eq, Generic, Show, Read, Typeable) + deriving (Eq, Generic, Show, Read) instance Binary a => Binary (PackageIndex a) instance Structured a => Structured (PackageIndex a) diff --git a/Cabal/src/Distribution/Simple/Program/Db.hs b/Cabal/src/Distribution/Simple/Program/Db.hs index a9aefa7d649..c76b38e9923 100644 --- a/Cabal/src/Distribution/Simple/Program/Db.hs +++ b/Cabal/src/Distribution/Simple/Program/Db.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-} @@ -106,7 +105,6 @@ data ProgramDb = ProgramDb , progOverrideEnv :: [(String, Maybe String)] , configuredProgs :: ConfiguredProgs } - deriving (Typeable) type UnconfiguredProgram = (Program, Maybe FilePath, [ProgArg]) type UnconfiguredProgs = Map.Map String UnconfiguredProgram diff --git a/Cabal/src/Distribution/Simple/Program/Types.hs b/Cabal/src/Distribution/Simple/Program/Types.hs index 630b22580cf..81bbdccfcc3 100644 --- a/Cabal/src/Distribution/Simple/Program/Types.hs +++ b/Cabal/src/Distribution/Simple/Program/Types.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-} @@ -107,7 +106,7 @@ data ProgramSearchPathEntry ProgramSearchPathDir FilePath | -- | The system default ProgramSearchPathDefault - deriving (Show, Eq, Generic, Typeable) + deriving (Show, Eq, Generic) instance Binary ProgramSearchPathEntry instance Structured ProgramSearchPathEntry @@ -147,7 +146,7 @@ data ConfiguredProgram = ConfiguredProgram -- monitor to detect when the re-configuring the program might give a -- different result (e.g. found in a different location). } - deriving (Eq, Generic, Read, Show, Typeable) + deriving (Eq, Generic, Read, Show) instance Binary ConfiguredProgram instance Structured ConfiguredProgram @@ -160,7 +159,7 @@ data ProgramLocation UserSpecified {locationPath :: FilePath} | -- | The program was found automatically. FoundOnSystem {locationPath :: FilePath} - deriving (Eq, Generic, Read, Show, Typeable) + deriving (Eq, Generic, Read, Show) instance Binary ProgramLocation instance Structured ProgramLocation diff --git a/Cabal/src/Distribution/Simple/Setup/Benchmark.hs b/Cabal/src/Distribution/Simple/Setup/Benchmark.hs index 36fc446b5a1..a46073ba434 100644 --- a/Cabal/src/Distribution/Simple/Setup/Benchmark.hs +++ b/Cabal/src/Distribution/Simple/Setup/Benchmark.hs @@ -1,6 +1,5 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} @@ -56,7 +55,7 @@ data BenchmarkFlags = BenchmarkFlags { benchmarkCommonFlags :: !CommonSetupFlags , benchmarkOptions :: [PathTemplate] } - deriving (Show, Generic, Typeable) + deriving (Show, Generic) pattern BenchmarkCommonFlags :: Flag Verbosity diff --git a/Cabal/src/Distribution/Simple/Setup/Build.hs b/Cabal/src/Distribution/Simple/Setup/Build.hs index 09aad42bdc8..c0aedc25bd0 100644 --- a/Cabal/src/Distribution/Simple/Setup/Build.hs +++ b/Cabal/src/Distribution/Simple/Setup/Build.hs @@ -1,6 +1,5 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} @@ -62,7 +61,7 @@ data BuildFlags = BuildFlags , buildNumJobs :: Flag (Maybe Int) , buildUseSemaphore :: Flag String } - deriving (Read, Show, Generic, Typeable) + deriving (Read, Show, Generic) pattern BuildCommonFlags :: Flag Verbosity diff --git a/Cabal/src/Distribution/Simple/Setup/Clean.hs b/Cabal/src/Distribution/Simple/Setup/Clean.hs index 6a1974f323e..8700e32b4a3 100644 --- a/Cabal/src/Distribution/Simple/Setup/Clean.hs +++ b/Cabal/src/Distribution/Simple/Setup/Clean.hs @@ -1,6 +1,5 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} @@ -54,7 +53,7 @@ data CleanFlags = CleanFlags { cleanCommonFlags :: !CommonSetupFlags , cleanSaveConf :: Flag Bool } - deriving (Show, Generic, Typeable) + deriving (Show, Generic) pattern CleanCommonFlags :: Flag Verbosity diff --git a/Cabal/src/Distribution/Simple/Setup/Config.hs b/Cabal/src/Distribution/Simple/Setup/Config.hs index 15c1d77f553..3b65169d1ab 100644 --- a/Cabal/src/Distribution/Simple/Setup/Config.hs +++ b/Cabal/src/Distribution/Simple/Setup/Config.hs @@ -1,6 +1,5 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} @@ -235,7 +234,7 @@ data ConfigFlags = ConfigFlags -- `build-tool-depends` will be ignored. This allows a Cabal package with -- build-tool-dependencies to be built even if the tool is not found. } - deriving (Generic, Read, Show, Typeable) + deriving (Generic, Read, Show) pattern ConfigCommonFlags :: Flag Verbosity diff --git a/Cabal/src/Distribution/Simple/Setup/Global.hs b/Cabal/src/Distribution/Simple/Setup/Global.hs index b230289446d..540edab9783 100644 --- a/Cabal/src/Distribution/Simple/Setup/Global.hs +++ b/Cabal/src/Distribution/Simple/Setup/Global.hs @@ -1,6 +1,5 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-} @@ -51,7 +50,7 @@ data GlobalFlags = GlobalFlags , globalNumericVersion :: Flag Bool , globalWorkingDir :: Flag (SymbolicPath CWD (Dir Pkg)) } - deriving (Generic, Typeable) + deriving (Generic) defaultGlobalFlags :: GlobalFlags defaultGlobalFlags = diff --git a/Cabal/src/Distribution/Simple/Setup/Haddock.hs b/Cabal/src/Distribution/Simple/Setup/Haddock.hs index aee2210d907..1bfe4b6be76 100644 --- a/Cabal/src/Distribution/Simple/Setup/Haddock.hs +++ b/Cabal/src/Distribution/Simple/Setup/Haddock.hs @@ -1,6 +1,5 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} @@ -76,7 +75,7 @@ import qualified Text.PrettyPrint as Disp -- from documentation tarballs, and we might also want to use different -- flags than for development builds, so in this case we store the generated -- documentation in @/doc/html/-docs@. -data HaddockTarget = ForHackage | ForDevelopment deriving (Eq, Show, Generic, Typeable) +data HaddockTarget = ForHackage | ForDevelopment deriving (Eq, Show, Generic) instance Binary HaddockTarget instance Structured HaddockTarget @@ -117,7 +116,7 @@ data HaddockFlags = HaddockFlags , haddockOutputDir :: Flag FilePath , haddockUseUnicode :: Flag Bool } - deriving (Show, Generic, Typeable) + deriving (Show, Generic) pattern HaddockCommonFlags :: Flag Verbosity @@ -452,7 +451,7 @@ data HaddockProjectFlags = HaddockProjectFlags haddockProjectResourcesDir :: Flag String , haddockProjectUseUnicode :: Flag Bool } - deriving (Show, Generic, Typeable) + deriving (Show, Generic) defaultHaddockProjectFlags :: HaddockProjectFlags defaultHaddockProjectFlags = diff --git a/Cabal/src/Distribution/Simple/Setup/Hscolour.hs b/Cabal/src/Distribution/Simple/Setup/Hscolour.hs index 1c62c2dedca..56632d5d2f7 100644 --- a/Cabal/src/Distribution/Simple/Setup/Hscolour.hs +++ b/Cabal/src/Distribution/Simple/Setup/Hscolour.hs @@ -1,6 +1,5 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} @@ -58,7 +57,7 @@ data HscolourFlags = HscolourFlags , hscolourBenchmarks :: Flag Bool , hscolourForeignLibs :: Flag Bool } - deriving (Show, Generic, Typeable) + deriving (Show, Generic) pattern HscolourCommonFlags :: Flag Verbosity diff --git a/Cabal/src/Distribution/Simple/Setup/Register.hs b/Cabal/src/Distribution/Simple/Setup/Register.hs index bbd17932245..f7b9e80e007 100644 --- a/Cabal/src/Distribution/Simple/Setup/Register.hs +++ b/Cabal/src/Distribution/Simple/Setup/Register.hs @@ -1,6 +1,5 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} @@ -62,7 +61,7 @@ data RegisterFlags = RegisterFlags , regInPlace :: Flag Bool , regPrintId :: Flag Bool } - deriving (Show, Generic, Typeable) + deriving (Show, Generic) pattern RegisterCommonFlags :: Flag Verbosity diff --git a/Cabal/src/Distribution/Simple/Setup/Repl.hs b/Cabal/src/Distribution/Simple/Setup/Repl.hs index 4321a9466cb..423aaa47cf8 100644 --- a/Cabal/src/Distribution/Simple/Setup/Repl.hs +++ b/Cabal/src/Distribution/Simple/Setup/Repl.hs @@ -1,6 +1,5 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} @@ -59,7 +58,7 @@ data ReplOptions = ReplOptions , replOptionsNoLoad :: Flag Bool , replOptionsFlagOutput :: Flag FilePath } - deriving (Show, Generic, Typeable) + deriving (Show, Generic) pattern ReplCommonFlags :: Flag Verbosity @@ -102,7 +101,7 @@ data ReplFlags = ReplFlags , replReload :: Flag Bool , replReplOptions :: ReplOptions } - deriving (Show, Generic, Typeable) + deriving (Show, Generic) instance Binary ReplFlags instance Structured ReplFlags diff --git a/Cabal/src/Distribution/Simple/Setup/SDist.hs b/Cabal/src/Distribution/Simple/Setup/SDist.hs index 6caf8e51e52..218d1e9f209 100644 --- a/Cabal/src/Distribution/Simple/Setup/SDist.hs +++ b/Cabal/src/Distribution/Simple/Setup/SDist.hs @@ -1,6 +1,5 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} @@ -57,7 +56,7 @@ data SDistFlags = SDistFlags , sDistDirectory :: Flag FilePath , sDistListSources :: Flag FilePath } - deriving (Show, Generic, Typeable) + deriving (Show, Generic) pattern SDistCommonFlags :: Flag Verbosity diff --git a/Cabal/src/Distribution/Simple/Setup/Test.hs b/Cabal/src/Distribution/Simple/Setup/Test.hs index e4c2706eed6..45f77c938e0 100644 --- a/Cabal/src/Distribution/Simple/Setup/Test.hs +++ b/Cabal/src/Distribution/Simple/Setup/Test.hs @@ -1,6 +1,5 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PatternSynonyms #-} @@ -61,7 +60,7 @@ import qualified Text.PrettyPrint as Disp -- ------------------------------------------------------------ data TestShowDetails = Never | Failures | Always | Streaming | Direct - deriving (Eq, Ord, Enum, Bounded, Generic, Show, Typeable) + deriving (Eq, Ord, Enum, Bounded, Generic, Show) instance Binary TestShowDetails instance Structured TestShowDetails @@ -102,7 +101,7 @@ data TestFlags = TestFlags , -- TODO: think about if/how options are passed to test exes testOptions :: [PathTemplate] } - deriving (Show, Generic, Typeable) + deriving (Show, Generic) pattern TestCommonFlags :: Flag Verbosity diff --git a/Cabal/src/Distribution/Simple/Utils.hs b/Cabal/src/Distribution/Simple/Utils.hs index 3688f602759..e3252506882 100644 --- a/Cabal/src/Distribution/Simple/Utils.hs +++ b/Cabal/src/Distribution/Simple/Utils.hs @@ -389,7 +389,7 @@ die' verbosity msg = withFrozenCallStack $ do -- Type which will be a wrapper for cabal -expections and cabal-install exceptions data VerboseException a = VerboseException CallStack POSIXTime Verbosity a - deriving (Show, Typeable) + deriving (Show) -- Function which will replace the existing die' call sites dieWithException :: (HasCallStack, Show a1, Typeable a1, Exception (VerboseException a1)) => Verbosity -> a1 -> IO a diff --git a/Cabal/src/Distribution/Types/ComponentLocalBuildInfo.hs b/Cabal/src/Distribution/Types/ComponentLocalBuildInfo.hs index 0728656620e..615cd4e3aa8 100644 --- a/Cabal/src/Distribution/Types/ComponentLocalBuildInfo.hs +++ b/Cabal/src/Distribution/Types/ComponentLocalBuildInfo.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE TypeFamilies #-} @@ -108,7 +107,7 @@ data ComponentLocalBuildInfo , componentExeDeps :: [UnitId] , componentInternalDeps :: [UnitId] } - deriving (Generic, Read, Show, Typeable) + deriving (Generic, Read, Show) instance Binary ComponentLocalBuildInfo instance Structured ComponentLocalBuildInfo diff --git a/Cabal/src/Distribution/Types/DumpBuildInfo.hs b/Cabal/src/Distribution/Types/DumpBuildInfo.hs index 2b3dae8888f..99020febc35 100644 --- a/Cabal/src/Distribution/Types/DumpBuildInfo.hs +++ b/Cabal/src/Distribution/Types/DumpBuildInfo.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} module Distribution.Types.DumpBuildInfo @@ -10,7 +9,7 @@ import Distribution.Compat.Prelude data DumpBuildInfo = NoDumpBuildInfo | DumpBuildInfo - deriving (Read, Show, Eq, Ord, Enum, Bounded, Generic, Typeable) + deriving (Read, Show, Eq, Ord, Enum, Bounded, Generic) instance Binary DumpBuildInfo instance Structured DumpBuildInfo diff --git a/Cabal/src/Distribution/Types/GivenComponent.hs b/Cabal/src/Distribution/Types/GivenComponent.hs index 235c8c372a0..c06fcbbfb4e 100644 --- a/Cabal/src/Distribution/Types/GivenComponent.hs +++ b/Cabal/src/Distribution/Types/GivenComponent.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} module Distribution.Types.GivenComponent @@ -25,7 +24,7 @@ data GivenComponent = GivenComponent -- only, not for any component , givenComponentId :: ComponentId } - deriving (Generic, Read, Show, Eq, Typeable) + deriving (Generic, Read, Show, Eq) instance Binary GivenComponent instance Structured GivenComponent @@ -42,7 +41,7 @@ data PromisedComponent = PromisedComponent -- only, not for any component , promisedComponentId :: ComponentId } - deriving (Generic, Read, Show, Eq, Typeable) + deriving (Generic, Read, Show, Eq) instance Binary PromisedComponent instance Structured PromisedComponent diff --git a/Cabal/src/Distribution/Types/LocalBuildInfo.hs b/Cabal/src/Distribution/Types/LocalBuildInfo.hs index 107eefc2766..8204d59c693 100644 --- a/Cabal/src/Distribution/Types/LocalBuildInfo.hs +++ b/Cabal/src/Distribution/Types/LocalBuildInfo.hs @@ -1,5 +1,4 @@ {-# LANGUAGE DataKinds #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE FlexibleContexts #-} @@ -144,7 +143,7 @@ data LocalBuildInfo = NewLocalBuildInfo -- ^ Information about a package configuration -- that can be modified by the user at configuration time. } - deriving (Generic, Read, Show, Typeable) + deriving (Generic, Read, Show) {-# COMPLETE LocalBuildInfo #-} diff --git a/Cabal/src/Distribution/Utils/NubList.hs b/Cabal/src/Distribution/Utils/NubList.hs index 2a7e69a7a85..09da19aa5ae 100644 --- a/Cabal/src/Distribution/Utils/NubList.hs +++ b/Cabal/src/Distribution/Utils/NubList.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE ScopedTypeVariables #-} @@ -22,7 +21,7 @@ import qualified Text.Read as R -- | NubList : A de-duplicated list that maintains the original order. newtype NubList a = NubList {fromNubList :: [a]} - deriving (Eq, Generic, Typeable) + deriving (Eq, Generic) -- NubList assumes that nub retains the list order while removing duplicate -- elements (keeping the first occurrence). Documentation for "Data.List.nub" diff --git a/Cabal/src/Distribution/Verbosity.hs b/Cabal/src/Distribution/Verbosity.hs index bab48bbed21..c81c6dd8630 100644 --- a/Cabal/src/Distribution/Verbosity.hs +++ b/Cabal/src/Distribution/Verbosity.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} ----------------------------------------------------------------------------- @@ -92,7 +91,7 @@ data Verbosity = Verbosity , vFlags :: Set VerbosityFlag , vQuiet :: Bool } - deriving (Generic, Show, Read, Typeable) + deriving (Generic, Show, Read) mkVerbosity :: VerbosityLevel -> Verbosity mkVerbosity l = Verbosity{vLevel = l, vFlags = Set.empty, vQuiet = False} diff --git a/Cabal/src/Distribution/Verbosity/Internal.hs b/Cabal/src/Distribution/Verbosity/Internal.hs index b8f55cf5b98..9d851f59f07 100644 --- a/Cabal/src/Distribution/Verbosity/Internal.hs +++ b/Cabal/src/Distribution/Verbosity/Internal.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} module Distribution.Verbosity.Internal @@ -10,7 +9,7 @@ import Distribution.Compat.Prelude import Prelude () data VerbosityLevel = Silent | Normal | Verbose | Deafening - deriving (Generic, Show, Read, Eq, Ord, Enum, Bounded, Typeable) + deriving (Generic, Show, Read, Eq, Ord, Enum, Bounded) instance Binary VerbosityLevel instance Structured VerbosityLevel @@ -24,7 +23,7 @@ data VerbosityFlag | -- | @since 3.4.0.0 VStderr | VNoWarn - deriving (Generic, Show, Read, Eq, Ord, Enum, Bounded, Typeable) + deriving (Generic, Show, Read, Eq, Ord, Enum, Bounded) instance Binary VerbosityFlag instance Structured VerbosityFlag diff --git a/cabal-install-solver/src/Distribution/Solver/Types/OptionalStanza.hs b/cabal-install-solver/src/Distribution/Solver/Types/OptionalStanza.hs index cde029d195b..457cd6c9b13 100644 --- a/cabal-install-solver/src/Distribution/Solver/Types/OptionalStanza.hs +++ b/cabal-install-solver/src/Distribution/Solver/Types/OptionalStanza.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} module Distribution.Solver.Types.OptionalStanza ( -- * OptionalStanza @@ -38,7 +37,7 @@ import Distribution.Utils.Structured (Structured (..), nominalStructure) data OptionalStanza = TestStanzas | BenchStanzas - deriving (Eq, Ord, Enum, Bounded, Show, Generic, Typeable) + deriving (Eq, Ord, Enum, Bounded, Show, Generic) -- | String representation of an OptionalStanza. showStanza :: OptionalStanza -> String diff --git a/cabal-install-solver/src/Distribution/Solver/Types/PkgConfigDb.hs b/cabal-install-solver/src/Distribution/Solver/Types/PkgConfigDb.hs index ccf52ea2c8c..a16bde1f0b0 100644 --- a/cabal-install-solver/src/Distribution/Solver/Types/PkgConfigDb.hs +++ b/cabal-install-solver/src/Distribution/Solver/Types/PkgConfigDb.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE LambdaCase #-} ----------------------------------------------------------------------------- @@ -53,7 +52,7 @@ import Distribution.Verbosity (Verbosity) -- but we don't know the exact version (because parsing of the version number -- failed). newtype PkgConfigDb = PkgConfigDb (M.Map PkgconfigName (Maybe PkgconfigVersion)) - deriving (Show, Generic, Typeable) + deriving (Show, Generic) instance Binary PkgConfigDb instance Structured PkgConfigDb diff --git a/cabal-install-solver/src/Distribution/Solver/Types/SourcePackage.hs b/cabal-install-solver/src/Distribution/Solver/Types/SourcePackage.hs index 35cba9b6e4a..0162f6e7f02 100644 --- a/cabal-install-solver/src/Distribution/Solver/Types/SourcePackage.hs +++ b/cabal-install-solver/src/Distribution/Solver/Types/SourcePackage.hs @@ -1,5 +1,4 @@ {-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE DeriveDataTypeable #-} module Distribution.Solver.Types.SourcePackage ( PackageDescriptionOverride , SourcePackage(..) @@ -25,7 +24,7 @@ data SourcePackage loc = SourcePackage , srcpkgSource :: loc , srcpkgDescrOverride :: PackageDescriptionOverride } - deriving (Eq, Show, Generic, Typeable) + deriving (Eq, Show, Generic) instance Binary loc => Binary (SourcePackage loc) instance Structured loc => Structured (SourcePackage loc) diff --git a/cabal-install/src/Distribution/Client/Compat/Semaphore.hs b/cabal-install/src/Distribution/Client/Compat/Semaphore.hs index 42c398b5c33..60fda2cf389 100644 --- a/cabal-install/src/Distribution/Client/Compat/Semaphore.hs +++ b/cabal-install/src/Distribution/Client/Compat/Semaphore.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# OPTIONS_GHC -funbox-strict-fields #-} module Distribution.Client.Compat.Semaphore @@ -22,13 +21,12 @@ import Control.Exception (mask_, onException) import Control.Monad (join, unless) import Data.List.NonEmpty (NonEmpty (..)) import qualified Data.List.NonEmpty as NE -import Data.Typeable (Typeable) -- | 'QSem' is a quantity semaphore in which the resource is acquired -- and released in units of one. It provides guaranteed FIFO ordering -- for satisfying blocked `waitQSem` calls. data QSem = QSem !(TVar Int) !(TVar [TVar Bool]) !(TVar [TVar Bool]) - deriving (Eq, Typeable) + deriving (Eq) newQSem :: Int -> IO QSem newQSem i = atomically $ do diff --git a/cabal-install/src/Distribution/Client/Errors.hs b/cabal-install/src/Distribution/Client/Errors.hs index d25c59af41e..665f34edf9a 100644 --- a/cabal-install/src/Distribution/Client/Errors.hs +++ b/cabal-install/src/Distribution/Client/Errors.hs @@ -186,7 +186,7 @@ data CabalInstallException | MissingPackageList RemoteRepo | CmdPathAcceptsNoTargets | CmdPathCommandDoesn'tSupportDryRun - deriving (Show, Typeable) + deriving (Show) exceptionCodeCabalInstall :: CabalInstallException -> Int exceptionCodeCabalInstall e = case e of diff --git a/cabal-install/src/Distribution/Client/FileMonitor.hs b/cabal-install/src/Distribution/Client/FileMonitor.hs index fb57aca1474..61607dd1996 100644 --- a/cabal-install/src/Distribution/Client/FileMonitor.hs +++ b/cabal-install/src/Distribution/Client/FileMonitor.hs @@ -1121,7 +1121,7 @@ checkDirectoryModificationTime dir mtime = handleErrorCall :: a -> IO a -> IO a handleErrorCall e = handle handler where - handler (ErrorCallWithLocation _ _) = return e + handler (ErrorCall _) = return e -- | Run an IO computation, returning @e@ if there is any 'IOException'. -- diff --git a/cabal-install/src/Distribution/Client/HashValue.hs b/cabal-install/src/Distribution/Client/HashValue.hs index e19956b7ed3..c5698f27f1e 100644 --- a/cabal-install/src/Distribution/Client/HashValue.hs +++ b/cabal-install/src/Distribution/Client/HashValue.hs @@ -1,5 +1,4 @@ {-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} module Distribution.Client.HashValue @@ -38,7 +37,7 @@ import System.IO (IOMode (..), withBinaryFile) -- package ids. newtype HashValue = HashValue BS.ByteString - deriving (Eq, Generic, Show, Typeable) + deriving (Eq, Generic, Show) -- Cannot do any sensible validation here. Although we use SHA256 -- for stuff we hash ourselves, we can also get hashes from TUF diff --git a/cabal-install/src/Distribution/Client/IndexUtils.hs b/cabal-install/src/Distribution/Client/IndexUtils.hs index 705c62d62d1..d3a6c86a3fe 100644 --- a/cabal-install/src/Distribution/Client/IndexUtils.hs +++ b/cabal-install/src/Distribution/Client/IndexUtils.hs @@ -692,7 +692,7 @@ data PreferredVersionsParseError = PreferredVersionsParseError , preferredVersionsOriginalDependency :: String -- ^ Original input that produced the parser error. } - deriving (Generic, Read, Show, Eq, Ord, Typeable) + deriving (Generic, Read, Show, Eq, Ord) -- | Parse `preferred-versions` file, collecting parse errors that can be shown -- in error messages. diff --git a/cabal-install/src/Distribution/Client/InstallPlan.hs b/cabal-install/src/Distribution/Client/InstallPlan.hs index 46212baaccc..df719fa5926 100644 --- a/cabal-install/src/Distribution/Client/InstallPlan.hs +++ b/cabal-install/src/Distribution/Client/InstallPlan.hs @@ -1,6 +1,5 @@ {-# LANGUAGE BangPatterns #-} {-# LANGUAGE ConstraintKinds #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE ScopedTypeVariables #-} @@ -258,7 +257,6 @@ data GenericInstallPlan ipkg srcpkg = GenericInstallPlan { planGraph :: !(Graph (GenericPlanPackage ipkg srcpkg)) , planIndepGoals :: !IndependentGoals } - deriving (Typeable) -- | 'GenericInstallPlan' specialised to most commonly used types. type InstallPlan = diff --git a/cabal-install/src/Distribution/Client/ProjectBuilding/Types.hs b/cabal-install/src/Distribution/Client/ProjectBuilding/Types.hs index 397a01ee68e..864455cb540 100644 --- a/cabal-install/src/Distribution/Client/ProjectBuilding/Types.hs +++ b/cabal-install/src/Distribution/Client/ProjectBuilding/Types.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} - -- | Types for the "Distribution.Client.ProjectBuilding" -- -- Moved out to avoid module cycles. @@ -156,7 +154,7 @@ data BuildFailure = BuildFailure { buildFailureLogFile :: Maybe FilePath , buildFailureReason :: BuildFailureReason } - deriving (Show, Typeable) + deriving (Show) instance Exception BuildFailure diff --git a/cabal-install/src/Distribution/Client/ProjectConfig.hs b/cabal-install/src/Distribution/Client/ProjectConfig.hs index 89de6ea869c..b828bda12d3 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig.hs @@ -1,5 +1,4 @@ {-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE RecordWildCards #-} @@ -655,7 +654,7 @@ data BadProjectRoot | BadProjectRootAbsoluteFileNotFound FilePath | BadProjectRootDirFileNotFound FilePath FilePath | BadProjectRootFileBroken FilePath - deriving (Show, Typeable, Eq) + deriving (Show, Eq) instance Exception BadProjectRoot where displayException = renderBadProjectRoot @@ -890,7 +889,7 @@ data ProjectPackageLocation -- | Exception thrown by 'findProjectPackages'. data BadPackageLocations = BadPackageLocations (Set ProjectConfigProvenance) [BadPackageLocation] - deriving (Show, Typeable) + deriving (Show) instance Exception BadPackageLocations where displayException = renderBadPackageLocations @@ -1548,7 +1547,6 @@ data CabalFileParseError -- ^ We might discover the spec version the package needs [PWarning] -- ^ warnings - deriving (Typeable) -- | Manual instance which skips file contents instance Show CabalFileParseError where @@ -1600,7 +1598,7 @@ readSourcePackageCabalFile verbosity pkgfilename content = data CabalFileSearchFailure = NoCabalFileFound FilePath | MultipleCabalFilesFound FilePath - deriving (Show, Typeable) + deriving (Show) instance Exception CabalFileSearchFailure @@ -1710,7 +1708,7 @@ truncateString n s data BadPerPackageCompilerPaths = BadPerPackageCompilerPaths [(PackageName, String)] - deriving (Show, Typeable) + deriving (Show) instance Exception BadPerPackageCompilerPaths where displayException = renderBadPerPackageCompilerPaths diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs b/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs index a2826390de6..1a2b6ae2fa6 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} @@ -152,7 +151,7 @@ data ProjectConfig = ProjectConfig -- any packages which are explicitly named in `cabal.project`. , projectConfigSpecificPackage :: MapMappend PackageName PackageConfig } - deriving (Eq, Show, Generic, Typeable) + deriving (Eq, Show, Generic) -- | That part of the project configuration that only affects /how/ we build -- and not the /value/ of the things we build. This means this information @@ -338,7 +337,7 @@ instance Structured PackageConfig -- | Newtype wrapper for 'Map' that provides a 'Monoid' instance that takes -- the last value rather than the first value for overlapping keys. newtype MapLast k v = MapLast {getMapLast :: Map k v} - deriving (Eq, Show, Functor, Generic, Binary, Typeable) + deriving (Eq, Show, Functor, Generic, Binary) instance (Structured k, Structured v) => Structured (MapLast k v) @@ -354,7 +353,7 @@ instance Ord k => Semigroup (MapLast k v) where -- | Newtype wrapper for 'Map' that provides a 'Monoid' instance that -- 'mappend's values of overlapping keys rather than taking the first. newtype MapMappend k v = MapMappend {getMapMappend :: Map k v} - deriving (Eq, Show, Functor, Generic, Binary, Typeable) + deriving (Eq, Show, Functor, Generic, Binary) instance (Structured k, Structured v) => Structured (MapMappend k v) @@ -439,7 +438,7 @@ data SolverSettings = SolverSettings -- solverSettingOverrideReinstall :: Bool, -- solverSettingUpgradeDeps :: Bool } - deriving (Eq, Show, Generic, Typeable) + deriving (Eq, Show, Generic) instance Binary SolverSettings instance Structured SolverSettings diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning/Types.hs b/cabal-install/src/Distribution/Client/ProjectPlanning/Types.hs index 31a0d5df248..c5f018e8ea6 100644 --- a/cabal-install/src/Distribution/Client/ProjectPlanning/Types.hs +++ b/cabal-install/src/Distribution/Client/ProjectPlanning/Types.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} @@ -193,7 +192,7 @@ data ElaboratedSharedConfig = ElaboratedSharedConfig -- used. , pkgConfigReplOptions :: ReplOptions } - deriving (Show, Generic, Typeable) + deriving (Show, Generic) -- TODO: [code cleanup] no Eq instance @@ -338,7 +337,7 @@ data ElaboratedConfiguredPackage = ElaboratedConfiguredPackage elabPkgOrComp :: ElaboratedPackageOrComponent -- ^ Component/package specific information } - deriving (Eq, Show, Generic, Typeable) + deriving (Eq, Show, Generic) normaliseConfiguredPackage :: ElaboratedSharedConfig @@ -934,7 +933,7 @@ data SetupScriptStyle | SetupCustomImplicitDeps | SetupNonCustomExternalLib | SetupNonCustomInternalLib - deriving (Eq, Show, Generic, Typeable) + deriving (Eq, Show, Generic) instance Binary SetupScriptStyle instance Structured SetupScriptStyle diff --git a/cabal-install/src/Distribution/Client/SavedFlags.hs b/cabal-install/src/Distribution/Client/SavedFlags.hs index 1a598a58fd7..1f752e11bd4 100644 --- a/cabal-install/src/Distribution/Client/SavedFlags.hs +++ b/cabal-install/src/Distribution/Client/SavedFlags.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} - module Distribution.Client.SavedFlags ( readCommandFlags , writeCommandFlags @@ -67,7 +65,6 @@ data SavedArgsError = SavedArgsErrorHelp Args | SavedArgsErrorList Args | SavedArgsErrorOther Args [String] - deriving (Typeable) instance Show SavedArgsError where show (SavedArgsErrorHelp args) = diff --git a/cabal-install/src/Distribution/Client/Security/HTTP.hs b/cabal-install/src/Distribution/Client/Security/HTTP.hs index 941d0b28dab..010ee830224 100644 --- a/cabal-install/src/Distribution/Client/Security/HTTP.hs +++ b/cabal-install/src/Distribution/Client/Security/HTTP.hs @@ -1,5 +1,4 @@ {-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE RecordWildCards #-} @@ -180,7 +179,6 @@ mkReqHeaders reqHeaders mRange' = -------------------------------------------------------------------------------} data UnexpectedResponse = UnexpectedResponse URI Int - deriving (Typeable) instance HC.Pretty UnexpectedResponse where pretty (UnexpectedResponse uri code) = diff --git a/cabal-install/src/Distribution/Client/Setup.hs b/cabal-install/src/Distribution/Client/Setup.hs index 78e864d1a65..faa33e47113 100644 --- a/cabal-install/src/Distribution/Client/Setup.hs +++ b/cabal-install/src/Distribution/Client/Setup.hs @@ -1621,7 +1621,7 @@ data CheckFlags = CheckFlags { checkVerbosity :: Flag Verbosity , checkIgnore :: [CheckExplanationIDString] } - deriving (Show, Typeable) + deriving (Show) defaultCheckFlags :: CheckFlags defaultCheckFlags = diff --git a/cabal-install/src/Distribution/Client/SolverInstallPlan.hs b/cabal-install/src/Distribution/Client/SolverInstallPlan.hs index f4422080a4b..17dcf6d9398 100644 --- a/cabal-install/src/Distribution/Client/SolverInstallPlan.hs +++ b/cabal-install/src/Distribution/Client/SolverInstallPlan.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE TypeFamilies #-} @@ -93,7 +92,7 @@ data SolverInstallPlan = SolverInstallPlan { planIndex :: !SolverPlanIndex , planIndepGoals :: !IndependentGoals } - deriving (Typeable, Generic) + deriving (Generic) {- -- | Much like 'planPkgIdOf', but mapping back to full packages. diff --git a/cabal-install/src/Distribution/Client/Types/BuildResults.hs b/cabal-install/src/Distribution/Client/Types/BuildResults.hs index 55c01534620..61ad6e41c96 100644 --- a/cabal-install/src/Distribution/Client/Types/BuildResults.hs +++ b/cabal-install/src/Distribution/Client/Types/BuildResults.hs @@ -32,7 +32,7 @@ data BuildFailure | BuildFailed SomeException | TestsFailed SomeException | InstallFailed SomeException - deriving (Show, Typeable, Generic) + deriving (Show, Generic) instance Exception BuildFailure @@ -48,9 +48,9 @@ data BuildResult deriving (Show, Generic) data DocsResult = DocsNotTried | DocsFailed | DocsOk - deriving (Show, Generic, Typeable) + deriving (Show, Generic) data TestsResult = TestsNotTried | TestsOk - deriving (Show, Generic, Typeable) + deriving (Show, Generic) instance Binary BuildFailure instance Binary BuildResult diff --git a/cabal-install/src/Distribution/Client/Types/PackageLocation.hs b/cabal-install/src/Distribution/Client/Types/PackageLocation.hs index 2f4993e22bd..9a0537aae7a 100644 --- a/cabal-install/src/Distribution/Client/Types/PackageLocation.hs +++ b/cabal-install/src/Distribution/Client/Types/PackageLocation.hs @@ -37,7 +37,7 @@ data PackageLocation local RepoTarballPackage Repo PackageId local | -- | A package available from a version control system source repository RemoteSourceRepoPackage SourceRepoMaybe local - deriving (Show, Functor, Eq, Ord, Generic, Typeable) + deriving (Show, Functor, Eq, Ord, Generic) instance Binary local => Binary (PackageLocation local) instance Structured local => Structured (PackageLocation local) diff --git a/cabal-install/tests/IntegrationTests2.hs b/cabal-install/tests/IntegrationTests2.hs index e6373cd18b8..4b0c6e46813 100644 --- a/cabal-install/tests/IntegrationTests2.hs +++ b/cabal-install/tests/IntegrationTests2.hs @@ -1,7 +1,6 @@ {- FOURMOLU_DISABLE -} {-# LANGUAGE CPP #-} {-# LANGUAGE BangPatterns #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE OverloadedStrings #-} @@ -1818,7 +1817,6 @@ mkProjectConfig (GhcPath ghcPath) = data GhcPath = GhcPath (Maybe FilePath) - deriving Typeable instance IsOption GhcPath where defaultValue = GhcPath Nothing diff --git a/cabal-install/tests/UnitTests/Distribution/Client/JobControl.hs b/cabal-install/tests/UnitTests/Distribution/Client/JobControl.hs index 73769f91b18..068037a1706 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/JobControl.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/JobControl.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} - module UnitTests.Distribution.Client.JobControl (tests) where import Distribution.Client.JobControl @@ -178,7 +176,7 @@ prop_cancel_parallel (Positive (Small maxJobLimit)) xs ys = do return $ Set.fromList (xs' ++ ys') `Set.isSubsetOf` Set.fromList (xs ++ ys) data TestException = TestException Int - deriving (Typeable, Show) + deriving (Show) instance Exception TestException diff --git a/cabal-install/tests/UnitTests/Options.hs b/cabal-install/tests/UnitTests/Options.hs index 232f80a2711..6971d271a17 100644 --- a/cabal-install/tests/UnitTests/Options.hs +++ b/cabal-install/tests/UnitTests/Options.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE DeriveDataTypeable #-} - module UnitTests.Options ( OptionShowSolverLog (..) , OptionMtimeChangeDelay (..) @@ -9,7 +7,6 @@ module UnitTests.Options where import Data.Proxy -import Data.Typeable import Test.Tasty.Options @@ -25,7 +22,6 @@ extraOptions = ] newtype OptionShowSolverLog = OptionShowSolverLog Bool - deriving (Typeable) instance IsOption OptionShowSolverLog where defaultValue = OptionShowSolverLog False @@ -35,7 +31,6 @@ instance IsOption OptionShowSolverLog where optionCLParser = flagCLParser Nothing (OptionShowSolverLog True) newtype OptionMtimeChangeDelay = OptionMtimeChangeDelay Int - deriving (Typeable) instance IsOption OptionMtimeChangeDelay where defaultValue = OptionMtimeChangeDelay 0 @@ -47,7 +42,6 @@ instance IsOption OptionMtimeChangeDelay where ++ "file modification, in microseconds" newtype RunNetworkTests = RunNetworkTests Bool - deriving (Typeable) instance IsOption RunNetworkTests where defaultValue = RunNetworkTests True diff --git a/cabal-testsuite/src/Test/Cabal/TestCode.hs b/cabal-testsuite/src/Test/Cabal/TestCode.hs index fc24b216285..ddaa0239465 100644 --- a/cabal-testsuite/src/Test/Cabal/TestCode.hs +++ b/cabal-testsuite/src/Test/Cabal/TestCode.hs @@ -1,5 +1,4 @@ {-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} @@ -17,7 +16,6 @@ module Test.Cabal.TestCode ( ) where import Control.Exception (Exception (..)) -import Data.Typeable (Typeable) ------------------------------------------------------------------------------- -- TestCode @@ -31,7 +29,7 @@ data TestCode | TestCodeFail | TestCodeFlakyFailed IssueID | TestCodeFlakyPassed IssueID - deriving (Eq, Show, Read, Typeable) + deriving (Eq, Show, Read) instance Exception TestCode where @@ -53,7 +51,7 @@ isTestCodeSkip _ = False type TestPassed = Bool newtype IssueID = IssueID Int - deriving newtype (Eq, Typeable, Num, Show, Read) + deriving newtype (Eq, Num, Show, Read) data FlakyStatus = NotFlaky diff --git a/project-cabal/ghc-latest.config b/project-cabal/ghc-latest.config index 8b745c024bb..96042ad583b 100644 --- a/project-cabal/ghc-latest.config +++ b/project-cabal/ghc-latest.config @@ -14,11 +14,11 @@ if impl(ghc >= 9.12.0) -- Artem, 2024-04-21: I started and then gave up... *:base, *:template-haskell, text-short, *:deepseq, *:bytestring, *:ghc-prim - repository head.hackage.ghc.haskell.org - url: https://ghc.gitlab.haskell.org/head.hackage/ - secure: True - key-threshold: 3 - root-keys: - 26021a13b401500c8eb2761ca95c61f2d625bfef951b939a8124ed12ecf07329 - 7541f32a4ccca4f97aea3b22f5e593ba2c0267546016b992dfadcd2fe944e55d - f76d08be13e9a61a377a85e2fb63f4c5435d40f8feb3e12eb05905edb8cdea89 +-- repository head.hackage.ghc.haskell.org +-- url: https://ghc.gitlab.haskell.org/head.hackage/ +-- secure: True +-- key-threshold: 3 +-- root-keys: +-- 26021a13b401500c8eb2761ca95c61f2d625bfef951b939a8124ed12ecf07329 +-- 7541f32a4ccca4f97aea3b22f5e593ba2c0267546016b992dfadcd2fe944e55d +-- f76d08be13e9a61a377a85e2fb63f4c5435d40f8feb3e12eb05905edb8cdea89 diff --git a/templates/SPDX.LicenseExceptionId.template.hs b/templates/SPDX.LicenseExceptionId.template.hs index aea2fedb586..0ef6787416b 100644 --- a/templates/SPDX.LicenseExceptionId.template.hs +++ b/templates/SPDX.LicenseExceptionId.template.hs @@ -32,7 +32,7 @@ import qualified Text.PrettyPrint as Disp -- | SPDX License Exceptions identifiers list v3.25 data LicenseExceptionId {{ licenseIds }} - deriving (Eq, Ord, Enum, Bounded, Show, Read, Typeable, Data, Generic) + deriving (Eq, Ord, Enum, Bounded, Show, Read, Data, Generic) instance Binary LicenseExceptionId where put = Binary.putWord8 . fromIntegral . fromEnum diff --git a/templates/SPDX.LicenseId.template.hs b/templates/SPDX.LicenseId.template.hs index 58e04801398..be48789fdc3 100644 --- a/templates/SPDX.LicenseId.template.hs +++ b/templates/SPDX.LicenseId.template.hs @@ -35,7 +35,7 @@ import qualified Text.PrettyPrint as Disp -- | SPDX License identifiers list v3.25 data LicenseId {{ licenseIds }} - deriving (Eq, Ord, Enum, Bounded, Show, Read, Typeable, Data) + deriving (Eq, Ord, Enum, Bounded, Show, Read, Data) instance Binary LicenseId where -- Word16 is encoded in big endianess From b28ee38e0949546b9c27967ebb7175a8053887c0 Mon Sep 17 00:00:00 2001 From: brandon s allbery kf8nh Date: Thu, 26 Dec 2024 09:13:28 -0500 Subject: [PATCH 42/87] fix unix dependency correctly Patching `cabal.release.project` still allows the buggy `unix` release to be installed via Hackage. (cherry picked from commit 87ce0fc51ec6b6ad88c34b3de0ab72972ed8d91b) --- Cabal/Cabal.cabal | 2 +- bootstrap/linux-9.0.2.json | 149 ++++++++++++++------------- bootstrap/linux-9.2.8.json | 102 +++++++++++-------- bootstrap/linux-9.4.8.json | 98 ++++++++++-------- bootstrap/linux-9.6.4.json | 152 +++++++++++++++++---------- bootstrap/linux-9.8.2.json | 164 +++++++++++++++++++----------- cabal-install/cabal-install.cabal | 2 +- cabal.bootstrap.project | 2 +- cabal.release.project | 2 +- 9 files changed, 393 insertions(+), 280 deletions(-) diff --git a/Cabal/Cabal.cabal b/Cabal/Cabal.cabal index 5354284d56e..f509f5c36a3 100644 --- a/Cabal/Cabal.cabal +++ b/Cabal/Cabal.cabal @@ -49,7 +49,7 @@ library if os(windows) build-depends: Win32 >= 2.3.0.0 && < 2.15 else - build-depends: unix >= 2.6.0.0 && < 2.9 + build-depends: unix >= 2.8.6.0 && < 2.9 ghc-options: -Wall diff --git a/bootstrap/linux-9.0.2.json b/bootstrap/linux-9.0.2.json index 9fa92b0b66b..0ce16e721b4 100644 --- a/bootstrap/linux-9.0.2.json +++ b/bootstrap/linux-9.0.2.json @@ -63,29 +63,27 @@ ], "dependencies": [ { - "cabal_sha256": "a4a1975fde77e289b605c45a3ef78d731d8c1834e4cef311152d910a1e94d98c", - "component": "lib:data-array-byte", + "cabal_sha256": "3eee5d3658b657371d0f940f1f38feefc2ebdf8592a32d3d0734f28c61f80ba0", + "component": "lib:bytestring", "flags": [], - "package": "data-array-byte", - "revision": 3, + "package": "bytestring", + "revision": 0, "source": "hackage", - "src_sha256": "1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600", - "version": "0.1.0.1" + "src_sha256": "6bd8fa536ed6a8278bc98dfa9fdf2c91da662bea58fde929a6ba8a38bbe9d7eb", + "version": "0.11.5.3" }, { - "cabal_sha256": "98e79e1c97117143e4012983509ec95f7e5e4f6adff6914d07812a39f83404b9", - "component": "lib:bytestring", - "flags": [ - "-pure-haskell" - ], - "package": "bytestring", - "revision": 1, + "cabal_sha256": "2efc549644dd418bad537d1601fdd437c440d807265016bd993b6996c679ad2f", + "component": "lib:os-string", + "flags": [], + "package": "os-string", + "revision": 0, "source": "hackage", - "src_sha256": "ebc3b8a6ef74a5cd6ddbb8d447d1c9a5fd4964c7975ebcae0b8ab0bcc406cc8c", - "version": "0.12.1.0" + "src_sha256": "339c35fd3a290522f23de4e33528423cfd0b0a8f22946b0b9816a817b926cba0", + "version": "2.0.7" }, { - "cabal_sha256": "345cbb1afe414a09e47737e4d14cbd51891a734e67c0ef3d77a1439518bb81e8", + "cabal_sha256": "099c33e0e570dad93390e1c01c1f4bc6e4f13587de8e199df3c94a6cb62c7434", "component": "lib:filepath", "flags": [ "-cpphs" @@ -93,32 +91,44 @@ "package": "filepath", "revision": 0, "source": "hackage", - "src_sha256": "88d6452fd199e333e66e68d2dc5d715f5c6d361661a4a8add88320a82864b788", - "version": "1.4.300.2" + "src_sha256": "54aa86c432f593273d7b9f607c5b5e0a1628c2674c6f4e3b5a54eb0c83db5caf", + "version": "1.5.4.0" }, { - "cabal_sha256": "3f702a252a313a7bcb56e3908a14e7f9f1b40e41b7bdc8ae8a9605a1a8686f06", + "cabal_sha256": "5b7f8afd7a879c3c8c3c636fd3c7543cdd5e0b514b7da90e76907ccd11434031", "component": "lib:unix", "flags": [ - "-os-string" + "+os-string" ], "package": "unix", + "revision": 1, + "source": "hackage", + "src_sha256": "8117599bb3e4aa1d4656710afbc85aef2a75483eddfac5338f8cc88fb505eea2", + "version": "2.8.6.0" + }, + { + "cabal_sha256": "e3e1866eab82cb28f6a5f28507643da3987008b737e66a3c7398f39f16d824dc", + "component": "lib:file-io", + "flags": [ + "+os-string" + ], + "package": "file-io", "revision": 0, "source": "hackage", - "src_sha256": "5ab6c346aef2eb9bf80b4d29ca7e22063fc23e52fd69fbc4d18a9f98b154e424", - "version": "2.8.5.1" + "src_sha256": "e3d9113a015c57e3d8c2294550c41544f84a265291fed96cca697f91b6e86f52", + "version": "0.1.4" }, { - "cabal_sha256": "fbeec9ec346e5272167f63dcb86af513b457a7b9fc36dc818e4c7b81608d612b", + "cabal_sha256": "2490137bb7738bd79392959458ef5f276219ea5ba8a9a56d3e0b06315c1bb917", "component": "lib:directory", "flags": [ - "-os-string" + "+os-string" ], "package": "directory", - "revision": 0, + "revision": 1, "source": "hackage", - "src_sha256": "e864ed54ddfc6e15d2eb02c87f4be8edd7719e1f9cea13e0f86909400b6ea768", - "version": "1.3.8.5" + "src_sha256": "20a24846117fc5f8751d974b7de07210a161989410467e9adca525381b8e64cc", + "version": "1.3.9.0" }, { "cabal_sha256": "de553eefe0b6548a560e9d8100486310548470a403c1fa21108dd03713da5fc7", @@ -141,18 +151,17 @@ "version": "0.8.9.2" }, { - "cabal_sha256": "78c3fb91055d0607a80453327f087b9dc82168d41d0dca3ff410d21033b5e87d", + "cabal_sha256": "71b5fa8c64d3c1fd0a08f993463220867b08290a2256e94b0952bf0e8f5a45cc", "component": "lib:text", "flags": [ "-developer", - "-pure-haskell", "+simdutf" ], "package": "text", "revision": 1, "source": "hackage", - "src_sha256": "e40cdda8b285f4d72476ed35dc2f5f167d524e6b38bb5ec964d00ee1ff24feab", - "version": "2.1.1" + "src_sha256": "c735be650a898606ce9f2c8642bc6ac6123eea82871d5e90f92797801f59efad", + "version": "2.0.2" }, { "cabal_sha256": "8407cbd428d7f640a0fff8891bd2f7aca13cebe70a5e654856f8abec9a648b56", @@ -165,34 +174,34 @@ "version": "3.1.17.0" }, { - "cabal_sha256": null, + "cabal_sha256": "557a2b20dc85f052c86c5a06dcbd7c6995f2d0391bbff8e62c90b4b5975211da", "component": "lib:Cabal-syntax", "flags": [], "package": "Cabal-syntax", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { - "cabal_sha256": "e16e2fd54934028fb21665bc0045f6133487ff77f95a37643d14bfdf339cbaff", + "cabal_sha256": "9a0b2ef8096517fa0e0c7a5e9a5c2ae5744ed824c3331005f9408245810df345", "component": "lib:process", "flags": [], "package": "process", "revision": 0, "source": "hackage", - "src_sha256": "fa06e25ce7f59205a8f41a449654f6d1b4f79d3959193006cfbc34f4c4bc68fb", - "version": "1.6.22.0" + "src_sha256": "496fe0566c3915b112e9772ac9c967dfeb8d5ca04895e54ae0160522bee76e65", + "version": "1.6.25.0" }, { - "cabal_sha256": null, + "cabal_sha256": "d24c689fd4b56cd12f8225562c00657e97c528849a2fc3d535557a83ca5f8dfc", "component": "lib:Cabal", "flags": [], "package": "Cabal", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { "cabal_sha256": null, @@ -205,19 +214,19 @@ "version": "3.14" }, { - "cabal_sha256": "60e78b6c60dc32a77ce6c37ed5ca4e838fc5f76f02836ef64d93cd21cc002325", + "cabal_sha256": "276325277350cd2c2c88916ed3ae5cd35b2b4f494ec594fbd9534081eb7fb759", "component": "exe:hsc2hs", "flags": [ "-in-ghc-tree" ], "package": "hsc2hs", - "revision": 2, + "revision": 3, "source": "hackage", "src_sha256": "6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76", "version": "0.68.10" }, { - "cabal_sha256": "17b834d2b75df8a8aef05de523280f613bb9c9aa9c31f269d5b90c1431a3749b", + "cabal_sha256": "b0fafb2834530084f6406017500ae619f9e5e2049787a6750c68e0d331fd62dc", "component": "lib:network", "flags": [ "-devel" @@ -225,8 +234,8 @@ "package": "network", "revision": 0, "source": "hackage", - "src_sha256": "efb04947946f52cccba802c2a8fc2f4259f0bdfd0bce95094c84e71583647f0c", - "version": "3.2.2.0" + "src_sha256": "dbd8a10456908294eb5ab9c522bf2da75444d958429a643a821464213698523e", + "version": "3.2.6.0" }, { "cabal_sha256": "129a59ba3ccfcd06192fd6da899e2711ae276a466915a047bd6727e4a0321d2e", @@ -274,27 +283,27 @@ "version": "0.9.2" }, { - "cabal_sha256": "573f3ab242f75465a0d67ce9d84202650a1606575e6dbd6d31ffcf4767a9a379", + "cabal_sha256": "50b2f002c68fe67730ee7a3cd8607486197dd99b084255005ad51ecd6970a41b", "component": "lib:hashable", "flags": [ - "-arch-native", + "+containers", "+integer-gmp", "-random-initial-seed" ], "package": "hashable", "revision": 0, "source": "hackage", - "src_sha256": "3baee4c9027a08830d148ec524cbc0471de645e1e8426d46780ef2758df0e8da", - "version": "1.4.7.0" + "src_sha256": "e1b305c280e66ad827edeaedd6933b9fc4174f626882877eab2a08344e665e87", + "version": "1.4.1.0" }, { - "cabal_sha256": "cf9e6afba8e01830ca0d32a12b98d481cf389688762c80d1870a1db2061ebf35", + "cabal_sha256": "b7648c6165729a973d95cb328f9fd874813a81c727707e8b2552b4f03399763b", "component": "lib:async", "flags": [ "-bench" ], "package": "async", - "revision": 2, + "revision": 3, "source": "hackage", "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", "version": "2.2.5" @@ -352,17 +361,17 @@ "version": "0.2.2.1" }, { - "cabal_sha256": null, + "cabal_sha256": "c4c8fd9c71b9e813053d94408c621e7b13355c4ca1d3eaed35b8f8956eae9b87", "component": "lib:cabal-install-solver", "flags": [ "-debug-expensive-assertions", "-debug-tracetree" ], "package": "cabal-install-solver", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { "cabal_sha256": "acb64f2af52d81b0bb92c266f11d43def726a7a7b74a2c23d219e160b54edec7", @@ -416,16 +425,6 @@ "src_sha256": "72d86f8aa625b461f4397f737346f78a1700a7ffbff55cf6375c5e18916e986d", "version": "0.1.2" }, - { - "cabal_sha256": "7699e7ae9bf74d056a62f384ceef8dfb2aa660f3f7c8016e9703f3b995e5e030", - "component": "lib:os-string", - "flags": [], - "package": "os-string", - "revision": 0, - "source": "hackage", - "src_sha256": "22fcc7d5fc66676b5dfc57b714d2caf93cce2d5a79d242168352f9eb0fe2f18a", - "version": "2.0.6" - }, { "cabal_sha256": "e9f151d9999be8953443e730524b2792e9c0a4fb5b1463097fa1a8230870fd8a", "component": "lib:tar-internal", @@ -447,15 +446,15 @@ "version": "0.6.3.0" }, { - "cabal_sha256": "bae1c5a6092d65c5e763246f91e04fef3f43e37cb055130725c9a973c88a250f", + "cabal_sha256": "85e64a75c0b490506a7edaa2d54950c668e66b65758bb08bb14cd31faf53a206", "component": "lib:zlib", "flags": [ "-bundled-c-zlib", "+non-blocking-ffi", - "-pkg-config" + "+pkg-config" ], "package": "zlib", - "revision": 1, + "revision": 2, "source": "hackage", "src_sha256": "6edd38b6b81df8d274952aa85affa6968ae86b2231e1d429ce8bc9083e6a55bc", "version": "0.7.1.0" @@ -506,11 +505,11 @@ "version": "0.96.0.1" }, { - "cabal_sha256": "4868265ab5760d2fdeb96625b138c8df25d41b9ee2651fa299ed019a69403045", + "cabal_sha256": "3e196e1362e4d0ec9dfcd7f8d58b24fac91beafaa1c8ee34dc9dee489c362377", "component": "lib:resolv", "flags": [], "package": "resolv", - "revision": 3, + "revision": 4, "source": "hackage", "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b", "version": "0.2.0.2" @@ -536,30 +535,30 @@ "version": "1.0.0" }, { - "cabal_sha256": null, + "cabal_sha256": "3583679b022200ca7bc8cb7ff1cd254887b82af6cec5bbd404aa66ea9ea5d083", "component": "lib:cabal-install", "flags": [ "+lukko", "+native-dns" ], "package": "cabal-install", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { - "cabal_sha256": null, + "cabal_sha256": "3583679b022200ca7bc8cb7ff1cd254887b82af6cec5bbd404aa66ea9ea5d083", "component": "exe:cabal", "flags": [ "+lukko", "+native-dns" ], "package": "cabal-install", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", diff --git a/bootstrap/linux-9.2.8.json b/bootstrap/linux-9.2.8.json index 9088a4799fd..a43699746da 100644 --- a/bootstrap/linux-9.2.8.json +++ b/bootstrap/linux-9.2.8.json @@ -79,17 +79,17 @@ ], "dependencies": [ { - "cabal_sha256": "7699e7ae9bf74d056a62f384ceef8dfb2aa660f3f7c8016e9703f3b995e5e030", + "cabal_sha256": "2efc549644dd418bad537d1601fdd437c440d807265016bd993b6996c679ad2f", "component": "lib:os-string", "flags": [], "package": "os-string", "revision": 0, "source": "hackage", - "src_sha256": "22fcc7d5fc66676b5dfc57b714d2caf93cce2d5a79d242168352f9eb0fe2f18a", - "version": "2.0.6" + "src_sha256": "339c35fd3a290522f23de4e33528423cfd0b0a8f22946b0b9816a817b926cba0", + "version": "2.0.7" }, { - "cabal_sha256": "0c64bc9a4f5946c86a8f0527bf40c8ba51e2c02d36eea0e20ea558c8d94166e8", + "cabal_sha256": "099c33e0e570dad93390e1c01c1f4bc6e4f13587de8e199df3c94a6cb62c7434", "component": "lib:filepath", "flags": [ "-cpphs" @@ -97,32 +97,44 @@ "package": "filepath", "revision": 0, "source": "hackage", - "src_sha256": "d807ec44fe53de7c7e0eeb41c9ee9185a09163821cf50549d73d875197931a5a", - "version": "1.5.3.0" + "src_sha256": "54aa86c432f593273d7b9f607c5b5e0a1628c2674c6f4e3b5a54eb0c83db5caf", + "version": "1.5.4.0" }, { - "cabal_sha256": "3f702a252a313a7bcb56e3908a14e7f9f1b40e41b7bdc8ae8a9605a1a8686f06", + "cabal_sha256": "5b7f8afd7a879c3c8c3c636fd3c7543cdd5e0b514b7da90e76907ccd11434031", "component": "lib:unix", "flags": [ "+os-string" ], "package": "unix", + "revision": 1, + "source": "hackage", + "src_sha256": "8117599bb3e4aa1d4656710afbc85aef2a75483eddfac5338f8cc88fb505eea2", + "version": "2.8.6.0" + }, + { + "cabal_sha256": "e3e1866eab82cb28f6a5f28507643da3987008b737e66a3c7398f39f16d824dc", + "component": "lib:file-io", + "flags": [ + "+os-string" + ], + "package": "file-io", "revision": 0, "source": "hackage", - "src_sha256": "5ab6c346aef2eb9bf80b4d29ca7e22063fc23e52fd69fbc4d18a9f98b154e424", - "version": "2.8.5.1" + "src_sha256": "e3d9113a015c57e3d8c2294550c41544f84a265291fed96cca697f91b6e86f52", + "version": "0.1.4" }, { - "cabal_sha256": "fbeec9ec346e5272167f63dcb86af513b457a7b9fc36dc818e4c7b81608d612b", + "cabal_sha256": "2490137bb7738bd79392959458ef5f276219ea5ba8a9a56d3e0b06315c1bb917", "component": "lib:directory", "flags": [ "+os-string" ], "package": "directory", - "revision": 0, + "revision": 1, "source": "hackage", - "src_sha256": "e864ed54ddfc6e15d2eb02c87f4be8edd7719e1f9cea13e0f86909400b6ea768", - "version": "1.3.8.5" + "src_sha256": "20a24846117fc5f8751d974b7de07210a161989410467e9adca525381b8e64cc", + "version": "1.3.9.0" }, { "cabal_sha256": "de553eefe0b6548a560e9d8100486310548470a403c1fa21108dd03713da5fc7", @@ -135,34 +147,34 @@ "version": "3.5.1.0" }, { - "cabal_sha256": null, + "cabal_sha256": "557a2b20dc85f052c86c5a06dcbd7c6995f2d0391bbff8e62c90b4b5975211da", "component": "lib:Cabal-syntax", "flags": [], "package": "Cabal-syntax", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { - "cabal_sha256": "e16e2fd54934028fb21665bc0045f6133487ff77f95a37643d14bfdf339cbaff", + "cabal_sha256": "9a0b2ef8096517fa0e0c7a5e9a5c2ae5744ed824c3331005f9408245810df345", "component": "lib:process", "flags": [], "package": "process", "revision": 0, "source": "hackage", - "src_sha256": "fa06e25ce7f59205a8f41a449654f6d1b4f79d3959193006cfbc34f4c4bc68fb", - "version": "1.6.22.0" + "src_sha256": "496fe0566c3915b112e9772ac9c967dfeb8d5ca04895e54ae0160522bee76e65", + "version": "1.6.25.0" }, { - "cabal_sha256": null, + "cabal_sha256": "d24c689fd4b56cd12f8225562c00657e97c528849a2fc3d535557a83ca5f8dfc", "component": "lib:Cabal", "flags": [], "package": "Cabal", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { "cabal_sha256": null, @@ -175,19 +187,19 @@ "version": "3.14" }, { - "cabal_sha256": "60e78b6c60dc32a77ce6c37ed5ca4e838fc5f76f02836ef64d93cd21cc002325", + "cabal_sha256": "276325277350cd2c2c88916ed3ae5cd35b2b4f494ec594fbd9534081eb7fb759", "component": "exe:hsc2hs", "flags": [ "-in-ghc-tree" ], "package": "hsc2hs", - "revision": 2, + "revision": 3, "source": "hackage", "src_sha256": "6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76", "version": "0.68.10" }, { - "cabal_sha256": "17b834d2b75df8a8aef05de523280f613bb9c9aa9c31f269d5b90c1431a3749b", + "cabal_sha256": "b0fafb2834530084f6406017500ae619f9e5e2049787a6750c68e0d331fd62dc", "component": "lib:network", "flags": [ "-devel" @@ -195,8 +207,8 @@ "package": "network", "revision": 0, "source": "hackage", - "src_sha256": "efb04947946f52cccba802c2a8fc2f4259f0bdfd0bce95094c84e71583647f0c", - "version": "3.2.2.0" + "src_sha256": "dbd8a10456908294eb5ab9c522bf2da75444d958429a643a821464213698523e", + "version": "3.2.6.0" }, { "cabal_sha256": "129a59ba3ccfcd06192fd6da899e2711ae276a466915a047bd6727e4a0321d2e", @@ -234,11 +246,11 @@ "version": "4000.4.1" }, { - "cabal_sha256": "a4a1975fde77e289b605c45a3ef78d731d8c1834e4cef311152d910a1e94d98c", + "cabal_sha256": "3a4040018d8f90beef81ecd0ba37f266a9aaad3e902dd790f09056f892ba22fb", "component": "lib:data-array-byte", "flags": [], "package": "data-array-byte", - "revision": 3, + "revision": 4, "source": "hackage", "src_sha256": "1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600", "version": "0.1.0.1" @@ -258,13 +270,13 @@ "version": "1.4.7.0" }, { - "cabal_sha256": "cf9e6afba8e01830ca0d32a12b98d481cf389688762c80d1870a1db2061ebf35", + "cabal_sha256": "b7648c6165729a973d95cb328f9fd874813a81c727707e8b2552b4f03399763b", "component": "lib:async", "flags": [ "-bench" ], "package": "async", - "revision": 2, + "revision": 3, "source": "hackage", "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", "version": "2.2.5" @@ -322,17 +334,17 @@ "version": "0.2.2.1" }, { - "cabal_sha256": null, + "cabal_sha256": "c4c8fd9c71b9e813053d94408c621e7b13355c4ca1d3eaed35b8f8956eae9b87", "component": "lib:cabal-install-solver", "flags": [ "-debug-expensive-assertions", "-debug-tracetree" ], "package": "cabal-install-solver", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { "cabal_sha256": "acb64f2af52d81b0bb92c266f11d43def726a7a7b74a2c23d219e160b54edec7", @@ -407,15 +419,15 @@ "version": "0.6.3.0" }, { - "cabal_sha256": "bae1c5a6092d65c5e763246f91e04fef3f43e37cb055130725c9a973c88a250f", + "cabal_sha256": "85e64a75c0b490506a7edaa2d54950c668e66b65758bb08bb14cd31faf53a206", "component": "lib:zlib", "flags": [ "-bundled-c-zlib", "+non-blocking-ffi", - "-pkg-config" + "+pkg-config" ], "package": "zlib", - "revision": 1, + "revision": 2, "source": "hackage", "src_sha256": "6edd38b6b81df8d274952aa85affa6968ae86b2231e1d429ce8bc9083e6a55bc", "version": "0.7.1.0" @@ -466,11 +478,11 @@ "version": "0.96.0.1" }, { - "cabal_sha256": "4868265ab5760d2fdeb96625b138c8df25d41b9ee2651fa299ed019a69403045", + "cabal_sha256": "3e196e1362e4d0ec9dfcd7f8d58b24fac91beafaa1c8ee34dc9dee489c362377", "component": "lib:resolv", "flags": [], "package": "resolv", - "revision": 3, + "revision": 4, "source": "hackage", "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b", "version": "0.2.0.2" @@ -496,30 +508,30 @@ "version": "1.0.0" }, { - "cabal_sha256": null, + "cabal_sha256": "3583679b022200ca7bc8cb7ff1cd254887b82af6cec5bbd404aa66ea9ea5d083", "component": "lib:cabal-install", "flags": [ "+lukko", "+native-dns" ], "package": "cabal-install", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { - "cabal_sha256": null, + "cabal_sha256": "3583679b022200ca7bc8cb7ff1cd254887b82af6cec5bbd404aa66ea9ea5d083", "component": "exe:cabal", "flags": [ "+lukko", "+native-dns" ], "package": "cabal-install", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", diff --git a/bootstrap/linux-9.4.8.json b/bootstrap/linux-9.4.8.json index 4ddab765c6d..2cd01139cc8 100644 --- a/bootstrap/linux-9.4.8.json +++ b/bootstrap/linux-9.4.8.json @@ -79,17 +79,17 @@ ], "dependencies": [ { - "cabal_sha256": "7699e7ae9bf74d056a62f384ceef8dfb2aa660f3f7c8016e9703f3b995e5e030", + "cabal_sha256": "2efc549644dd418bad537d1601fdd437c440d807265016bd993b6996c679ad2f", "component": "lib:os-string", "flags": [], "package": "os-string", "revision": 0, "source": "hackage", - "src_sha256": "22fcc7d5fc66676b5dfc57b714d2caf93cce2d5a79d242168352f9eb0fe2f18a", - "version": "2.0.6" + "src_sha256": "339c35fd3a290522f23de4e33528423cfd0b0a8f22946b0b9816a817b926cba0", + "version": "2.0.7" }, { - "cabal_sha256": "0c64bc9a4f5946c86a8f0527bf40c8ba51e2c02d36eea0e20ea558c8d94166e8", + "cabal_sha256": "099c33e0e570dad93390e1c01c1f4bc6e4f13587de8e199df3c94a6cb62c7434", "component": "lib:filepath", "flags": [ "-cpphs" @@ -97,32 +97,44 @@ "package": "filepath", "revision": 0, "source": "hackage", - "src_sha256": "d807ec44fe53de7c7e0eeb41c9ee9185a09163821cf50549d73d875197931a5a", - "version": "1.5.3.0" + "src_sha256": "54aa86c432f593273d7b9f607c5b5e0a1628c2674c6f4e3b5a54eb0c83db5caf", + "version": "1.5.4.0" }, { - "cabal_sha256": "3f702a252a313a7bcb56e3908a14e7f9f1b40e41b7bdc8ae8a9605a1a8686f06", + "cabal_sha256": "5b7f8afd7a879c3c8c3c636fd3c7543cdd5e0b514b7da90e76907ccd11434031", "component": "lib:unix", "flags": [ "+os-string" ], "package": "unix", + "revision": 1, + "source": "hackage", + "src_sha256": "8117599bb3e4aa1d4656710afbc85aef2a75483eddfac5338f8cc88fb505eea2", + "version": "2.8.6.0" + }, + { + "cabal_sha256": "e3e1866eab82cb28f6a5f28507643da3987008b737e66a3c7398f39f16d824dc", + "component": "lib:file-io", + "flags": [ + "+os-string" + ], + "package": "file-io", "revision": 0, "source": "hackage", - "src_sha256": "5ab6c346aef2eb9bf80b4d29ca7e22063fc23e52fd69fbc4d18a9f98b154e424", - "version": "2.8.5.1" + "src_sha256": "e3d9113a015c57e3d8c2294550c41544f84a265291fed96cca697f91b6e86f52", + "version": "0.1.4" }, { - "cabal_sha256": "fbeec9ec346e5272167f63dcb86af513b457a7b9fc36dc818e4c7b81608d612b", + "cabal_sha256": "2490137bb7738bd79392959458ef5f276219ea5ba8a9a56d3e0b06315c1bb917", "component": "lib:directory", "flags": [ "+os-string" ], "package": "directory", - "revision": 0, + "revision": 1, "source": "hackage", - "src_sha256": "e864ed54ddfc6e15d2eb02c87f4be8edd7719e1f9cea13e0f86909400b6ea768", - "version": "1.3.8.5" + "src_sha256": "20a24846117fc5f8751d974b7de07210a161989410467e9adca525381b8e64cc", + "version": "1.3.9.0" }, { "cabal_sha256": "de553eefe0b6548a560e9d8100486310548470a403c1fa21108dd03713da5fc7", @@ -135,34 +147,34 @@ "version": "3.5.1.0" }, { - "cabal_sha256": null, + "cabal_sha256": "557a2b20dc85f052c86c5a06dcbd7c6995f2d0391bbff8e62c90b4b5975211da", "component": "lib:Cabal-syntax", "flags": [], "package": "Cabal-syntax", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { - "cabal_sha256": "e16e2fd54934028fb21665bc0045f6133487ff77f95a37643d14bfdf339cbaff", + "cabal_sha256": "9a0b2ef8096517fa0e0c7a5e9a5c2ae5744ed824c3331005f9408245810df345", "component": "lib:process", "flags": [], "package": "process", "revision": 0, "source": "hackage", - "src_sha256": "fa06e25ce7f59205a8f41a449654f6d1b4f79d3959193006cfbc34f4c4bc68fb", - "version": "1.6.22.0" + "src_sha256": "496fe0566c3915b112e9772ac9c967dfeb8d5ca04895e54ae0160522bee76e65", + "version": "1.6.25.0" }, { - "cabal_sha256": null, + "cabal_sha256": "d24c689fd4b56cd12f8225562c00657e97c528849a2fc3d535557a83ca5f8dfc", "component": "lib:Cabal", "flags": [], "package": "Cabal", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { "cabal_sha256": null, @@ -175,19 +187,19 @@ "version": "3.14" }, { - "cabal_sha256": "60e78b6c60dc32a77ce6c37ed5ca4e838fc5f76f02836ef64d93cd21cc002325", + "cabal_sha256": "276325277350cd2c2c88916ed3ae5cd35b2b4f494ec594fbd9534081eb7fb759", "component": "exe:hsc2hs", "flags": [ "-in-ghc-tree" ], "package": "hsc2hs", - "revision": 2, + "revision": 3, "source": "hackage", "src_sha256": "6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76", "version": "0.68.10" }, { - "cabal_sha256": "17b834d2b75df8a8aef05de523280f613bb9c9aa9c31f269d5b90c1431a3749b", + "cabal_sha256": "b0fafb2834530084f6406017500ae619f9e5e2049787a6750c68e0d331fd62dc", "component": "lib:network", "flags": [ "-devel" @@ -195,8 +207,8 @@ "package": "network", "revision": 0, "source": "hackage", - "src_sha256": "efb04947946f52cccba802c2a8fc2f4259f0bdfd0bce95094c84e71583647f0c", - "version": "3.2.2.0" + "src_sha256": "dbd8a10456908294eb5ab9c522bf2da75444d958429a643a821464213698523e", + "version": "3.2.6.0" }, { "cabal_sha256": "129a59ba3ccfcd06192fd6da899e2711ae276a466915a047bd6727e4a0321d2e", @@ -248,13 +260,13 @@ "version": "1.4.7.0" }, { - "cabal_sha256": "cf9e6afba8e01830ca0d32a12b98d481cf389688762c80d1870a1db2061ebf35", + "cabal_sha256": "b7648c6165729a973d95cb328f9fd874813a81c727707e8b2552b4f03399763b", "component": "lib:async", "flags": [ "-bench" ], "package": "async", - "revision": 2, + "revision": 3, "source": "hackage", "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", "version": "2.2.5" @@ -312,17 +324,17 @@ "version": "0.2.2.1" }, { - "cabal_sha256": null, + "cabal_sha256": "c4c8fd9c71b9e813053d94408c621e7b13355c4ca1d3eaed35b8f8956eae9b87", "component": "lib:cabal-install-solver", "flags": [ "-debug-expensive-assertions", "-debug-tracetree" ], "package": "cabal-install-solver", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { "cabal_sha256": "acb64f2af52d81b0bb92c266f11d43def726a7a7b74a2c23d219e160b54edec7", @@ -397,15 +409,15 @@ "version": "0.6.3.0" }, { - "cabal_sha256": "bae1c5a6092d65c5e763246f91e04fef3f43e37cb055130725c9a973c88a250f", + "cabal_sha256": "85e64a75c0b490506a7edaa2d54950c668e66b65758bb08bb14cd31faf53a206", "component": "lib:zlib", "flags": [ "-bundled-c-zlib", "+non-blocking-ffi", - "-pkg-config" + "+pkg-config" ], "package": "zlib", - "revision": 1, + "revision": 2, "source": "hackage", "src_sha256": "6edd38b6b81df8d274952aa85affa6968ae86b2231e1d429ce8bc9083e6a55bc", "version": "0.7.1.0" @@ -456,11 +468,11 @@ "version": "0.96.0.1" }, { - "cabal_sha256": "4868265ab5760d2fdeb96625b138c8df25d41b9ee2651fa299ed019a69403045", + "cabal_sha256": "3e196e1362e4d0ec9dfcd7f8d58b24fac91beafaa1c8ee34dc9dee489c362377", "component": "lib:resolv", "flags": [], "package": "resolv", - "revision": 3, + "revision": 4, "source": "hackage", "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b", "version": "0.2.0.2" @@ -486,30 +498,30 @@ "version": "1.0.0" }, { - "cabal_sha256": null, + "cabal_sha256": "3583679b022200ca7bc8cb7ff1cd254887b82af6cec5bbd404aa66ea9ea5d083", "component": "lib:cabal-install", "flags": [ "+lukko", "+native-dns" ], "package": "cabal-install", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { - "cabal_sha256": null, + "cabal_sha256": "3583679b022200ca7bc8cb7ff1cd254887b82af6cec5bbd404aa66ea9ea5d083", "component": "exe:cabal", "flags": [ "+lukko", "+native-dns" ], "package": "cabal-install", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", diff --git a/bootstrap/linux-9.6.4.json b/bootstrap/linux-9.6.4.json index 983f6f1a2d2..67ea0360bd1 100644 --- a/bootstrap/linux-9.6.4.json +++ b/bootstrap/linux-9.6.4.json @@ -60,22 +60,10 @@ "package": "exceptions", "version": "0.10.7" }, - { - "package": "filepath", - "version": "1.4.200.1" - }, { "package": "time", "version": "1.12.2" }, - { - "package": "unix", - "version": "2.8.4.0" - }, - { - "package": "directory", - "version": "1.3.8.1" - }, { "package": "binary", "version": "0.8.9.1" @@ -87,13 +75,67 @@ { "package": "parsec", "version": "3.1.16.1" - }, - { - "package": "process", - "version": "1.6.17.0" } ], "dependencies": [ + { + "cabal_sha256": "2efc549644dd418bad537d1601fdd437c440d807265016bd993b6996c679ad2f", + "component": "lib:os-string", + "flags": [], + "package": "os-string", + "revision": 0, + "source": "hackage", + "src_sha256": "339c35fd3a290522f23de4e33528423cfd0b0a8f22946b0b9816a817b926cba0", + "version": "2.0.7" + }, + { + "cabal_sha256": "099c33e0e570dad93390e1c01c1f4bc6e4f13587de8e199df3c94a6cb62c7434", + "component": "lib:filepath", + "flags": [ + "-cpphs" + ], + "package": "filepath", + "revision": 0, + "source": "hackage", + "src_sha256": "54aa86c432f593273d7b9f607c5b5e0a1628c2674c6f4e3b5a54eb0c83db5caf", + "version": "1.5.4.0" + }, + { + "cabal_sha256": "5b7f8afd7a879c3c8c3c636fd3c7543cdd5e0b514b7da90e76907ccd11434031", + "component": "lib:unix", + "flags": [ + "+os-string" + ], + "package": "unix", + "revision": 1, + "source": "hackage", + "src_sha256": "8117599bb3e4aa1d4656710afbc85aef2a75483eddfac5338f8cc88fb505eea2", + "version": "2.8.6.0" + }, + { + "cabal_sha256": "e3e1866eab82cb28f6a5f28507643da3987008b737e66a3c7398f39f16d824dc", + "component": "lib:file-io", + "flags": [ + "+os-string" + ], + "package": "file-io", + "revision": 0, + "source": "hackage", + "src_sha256": "e3d9113a015c57e3d8c2294550c41544f84a265291fed96cca697f91b6e86f52", + "version": "0.1.4" + }, + { + "cabal_sha256": "2490137bb7738bd79392959458ef5f276219ea5ba8a9a56d3e0b06315c1bb917", + "component": "lib:directory", + "flags": [ + "+os-string" + ], + "package": "directory", + "revision": 1, + "source": "hackage", + "src_sha256": "20a24846117fc5f8751d974b7de07210a161989410467e9adca525381b8e64cc", + "version": "1.3.9.0" + }, { "cabal_sha256": "de553eefe0b6548a560e9d8100486310548470a403c1fa21108dd03713da5fc7", "component": "exe:alex", @@ -105,24 +147,34 @@ "version": "3.5.1.0" }, { - "cabal_sha256": null, + "cabal_sha256": "557a2b20dc85f052c86c5a06dcbd7c6995f2d0391bbff8e62c90b4b5975211da", "component": "lib:Cabal-syntax", "flags": [], "package": "Cabal-syntax", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { - "cabal_sha256": null, + "cabal_sha256": "9a0b2ef8096517fa0e0c7a5e9a5c2ae5744ed824c3331005f9408245810df345", + "component": "lib:process", + "flags": [], + "package": "process", + "revision": 0, + "source": "hackage", + "src_sha256": "496fe0566c3915b112e9772ac9c967dfeb8d5ca04895e54ae0160522bee76e65", + "version": "1.6.25.0" + }, + { + "cabal_sha256": "d24c689fd4b56cd12f8225562c00657e97c528849a2fc3d535557a83ca5f8dfc", "component": "lib:Cabal", "flags": [], "package": "Cabal", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { "cabal_sha256": null, @@ -135,19 +187,19 @@ "version": "3.14" }, { - "cabal_sha256": "60e78b6c60dc32a77ce6c37ed5ca4e838fc5f76f02836ef64d93cd21cc002325", + "cabal_sha256": "276325277350cd2c2c88916ed3ae5cd35b2b4f494ec594fbd9534081eb7fb759", "component": "exe:hsc2hs", "flags": [ "-in-ghc-tree" ], "package": "hsc2hs", - "revision": 2, + "revision": 3, "source": "hackage", "src_sha256": "6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76", "version": "0.68.10" }, { - "cabal_sha256": "17b834d2b75df8a8aef05de523280f613bb9c9aa9c31f269d5b90c1431a3749b", + "cabal_sha256": "b0fafb2834530084f6406017500ae619f9e5e2049787a6750c68e0d331fd62dc", "component": "lib:network", "flags": [ "-devel" @@ -155,8 +207,8 @@ "package": "network", "revision": 0, "source": "hackage", - "src_sha256": "efb04947946f52cccba802c2a8fc2f4259f0bdfd0bce95094c84e71583647f0c", - "version": "3.2.2.0" + "src_sha256": "dbd8a10456908294eb5ab9c522bf2da75444d958429a643a821464213698523e", + "version": "3.2.6.0" }, { "cabal_sha256": "129a59ba3ccfcd06192fd6da899e2711ae276a466915a047bd6727e4a0321d2e", @@ -194,36 +246,26 @@ "version": "4000.4.1" }, { - "cabal_sha256": "7699e7ae9bf74d056a62f384ceef8dfb2aa660f3f7c8016e9703f3b995e5e030", - "component": "lib:os-string", - "flags": [], - "package": "os-string", - "revision": 0, - "source": "hackage", - "src_sha256": "22fcc7d5fc66676b5dfc57b714d2caf93cce2d5a79d242168352f9eb0fe2f18a", - "version": "2.0.6" - }, - { - "cabal_sha256": "fc68b07d957ade5a0a0beadd560a8d093ceac30b2f35c85eed3bcf7889a25975", + "cabal_sha256": "2f23146cbe0325029927b221647695a4c7d6e97548ff731110979e34361f58ef", "component": "lib:hashable", "flags": [ "-arch-native", "-random-initial-seed" ], "package": "hashable", - "revision": 0, + "revision": 1, "source": "hackage", "src_sha256": "e58b3a8e18da5f6cd7e937e5fd683e500bb1f8276b3768269759119ca0cddb6a", "version": "1.5.0.0" }, { - "cabal_sha256": "cf9e6afba8e01830ca0d32a12b98d481cf389688762c80d1870a1db2061ebf35", + "cabal_sha256": "b7648c6165729a973d95cb328f9fd874813a81c727707e8b2552b4f03399763b", "component": "lib:async", "flags": [ "-bench" ], "package": "async", - "revision": 2, + "revision": 3, "source": "hackage", "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", "version": "2.2.5" @@ -281,17 +323,17 @@ "version": "0.2.2.1" }, { - "cabal_sha256": null, + "cabal_sha256": "c4c8fd9c71b9e813053d94408c621e7b13355c4ca1d3eaed35b8f8956eae9b87", "component": "lib:cabal-install-solver", "flags": [ "-debug-expensive-assertions", "-debug-tracetree" ], "package": "cabal-install-solver", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { "cabal_sha256": "acb64f2af52d81b0bb92c266f11d43def726a7a7b74a2c23d219e160b54edec7", @@ -366,15 +408,15 @@ "version": "0.6.3.0" }, { - "cabal_sha256": "bae1c5a6092d65c5e763246f91e04fef3f43e37cb055130725c9a973c88a250f", + "cabal_sha256": "85e64a75c0b490506a7edaa2d54950c668e66b65758bb08bb14cd31faf53a206", "component": "lib:zlib", "flags": [ "-bundled-c-zlib", "+non-blocking-ffi", - "-pkg-config" + "+pkg-config" ], "package": "zlib", - "revision": 1, + "revision": 2, "source": "hackage", "src_sha256": "6edd38b6b81df8d274952aa85affa6968ae86b2231e1d429ce8bc9083e6a55bc", "version": "0.7.1.0" @@ -425,11 +467,11 @@ "version": "0.96.0.1" }, { - "cabal_sha256": "4868265ab5760d2fdeb96625b138c8df25d41b9ee2651fa299ed019a69403045", + "cabal_sha256": "3e196e1362e4d0ec9dfcd7f8d58b24fac91beafaa1c8ee34dc9dee489c362377", "component": "lib:resolv", "flags": [], "package": "resolv", - "revision": 3, + "revision": 4, "source": "hackage", "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b", "version": "0.2.0.2" @@ -455,30 +497,30 @@ "version": "1.0.0" }, { - "cabal_sha256": null, + "cabal_sha256": "3583679b022200ca7bc8cb7ff1cd254887b82af6cec5bbd404aa66ea9ea5d083", "component": "lib:cabal-install", "flags": [ "+lukko", "+native-dns" ], "package": "cabal-install", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { - "cabal_sha256": null, + "cabal_sha256": "3583679b022200ca7bc8cb7ff1cd254887b82af6cec5bbd404aa66ea9ea5d083", "component": "exe:cabal", "flags": [ "+lukko", "+native-dns" ], "package": "cabal-install", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", diff --git a/bootstrap/linux-9.8.2.json b/bootstrap/linux-9.8.2.json index 6b7c83b46af..605975ada35 100644 --- a/bootstrap/linux-9.8.2.json +++ b/bootstrap/linux-9.8.2.json @@ -60,22 +60,10 @@ "package": "exceptions", "version": "0.10.7" }, - { - "package": "filepath", - "version": "1.4.200.1" - }, { "package": "time", "version": "1.12.2" }, - { - "package": "unix", - "version": "2.8.4.0" - }, - { - "package": "directory", - "version": "1.3.8.1" - }, { "package": "binary", "version": "0.8.9.1" @@ -87,17 +75,67 @@ { "package": "parsec", "version": "3.1.17.0" + } + ], + "dependencies": [ + { + "cabal_sha256": "2efc549644dd418bad537d1601fdd437c440d807265016bd993b6996c679ad2f", + "component": "lib:os-string", + "flags": [], + "package": "os-string", + "revision": 0, + "source": "hackage", + "src_sha256": "339c35fd3a290522f23de4e33528423cfd0b0a8f22946b0b9816a817b926cba0", + "version": "2.0.7" }, { - "package": "process", - "version": "1.6.18.0" + "cabal_sha256": "099c33e0e570dad93390e1c01c1f4bc6e4f13587de8e199df3c94a6cb62c7434", + "component": "lib:filepath", + "flags": [ + "-cpphs" + ], + "package": "filepath", + "revision": 0, + "source": "hackage", + "src_sha256": "54aa86c432f593273d7b9f607c5b5e0a1628c2674c6f4e3b5a54eb0c83db5caf", + "version": "1.5.4.0" }, { - "package": "semaphore-compat", - "version": "1.0.0" - } - ], - "dependencies": [ + "cabal_sha256": "5b7f8afd7a879c3c8c3c636fd3c7543cdd5e0b514b7da90e76907ccd11434031", + "component": "lib:unix", + "flags": [ + "+os-string" + ], + "package": "unix", + "revision": 1, + "source": "hackage", + "src_sha256": "8117599bb3e4aa1d4656710afbc85aef2a75483eddfac5338f8cc88fb505eea2", + "version": "2.8.6.0" + }, + { + "cabal_sha256": "e3e1866eab82cb28f6a5f28507643da3987008b737e66a3c7398f39f16d824dc", + "component": "lib:file-io", + "flags": [ + "+os-string" + ], + "package": "file-io", + "revision": 0, + "source": "hackage", + "src_sha256": "e3d9113a015c57e3d8c2294550c41544f84a265291fed96cca697f91b6e86f52", + "version": "0.1.4" + }, + { + "cabal_sha256": "2490137bb7738bd79392959458ef5f276219ea5ba8a9a56d3e0b06315c1bb917", + "component": "lib:directory", + "flags": [ + "+os-string" + ], + "package": "directory", + "revision": 1, + "source": "hackage", + "src_sha256": "20a24846117fc5f8751d974b7de07210a161989410467e9adca525381b8e64cc", + "version": "1.3.9.0" + }, { "cabal_sha256": "de553eefe0b6548a560e9d8100486310548470a403c1fa21108dd03713da5fc7", "component": "exe:alex", @@ -109,24 +147,34 @@ "version": "3.5.1.0" }, { - "cabal_sha256": null, + "cabal_sha256": "557a2b20dc85f052c86c5a06dcbd7c6995f2d0391bbff8e62c90b4b5975211da", "component": "lib:Cabal-syntax", "flags": [], "package": "Cabal-syntax", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { - "cabal_sha256": null, + "cabal_sha256": "9a0b2ef8096517fa0e0c7a5e9a5c2ae5744ed824c3331005f9408245810df345", + "component": "lib:process", + "flags": [], + "package": "process", + "revision": 0, + "source": "hackage", + "src_sha256": "496fe0566c3915b112e9772ac9c967dfeb8d5ca04895e54ae0160522bee76e65", + "version": "1.6.25.0" + }, + { + "cabal_sha256": "d24c689fd4b56cd12f8225562c00657e97c528849a2fc3d535557a83ca5f8dfc", "component": "lib:Cabal", "flags": [], "package": "Cabal", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { "cabal_sha256": null, @@ -139,19 +187,19 @@ "version": "3.14" }, { - "cabal_sha256": "60e78b6c60dc32a77ce6c37ed5ca4e838fc5f76f02836ef64d93cd21cc002325", + "cabal_sha256": "276325277350cd2c2c88916ed3ae5cd35b2b4f494ec594fbd9534081eb7fb759", "component": "exe:hsc2hs", "flags": [ "-in-ghc-tree" ], "package": "hsc2hs", - "revision": 2, + "revision": 3, "source": "hackage", "src_sha256": "6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76", "version": "0.68.10" }, { - "cabal_sha256": "17b834d2b75df8a8aef05de523280f613bb9c9aa9c31f269d5b90c1431a3749b", + "cabal_sha256": "b0fafb2834530084f6406017500ae619f9e5e2049787a6750c68e0d331fd62dc", "component": "lib:network", "flags": [ "-devel" @@ -159,8 +207,8 @@ "package": "network", "revision": 0, "source": "hackage", - "src_sha256": "efb04947946f52cccba802c2a8fc2f4259f0bdfd0bce95094c84e71583647f0c", - "version": "3.2.2.0" + "src_sha256": "dbd8a10456908294eb5ab9c522bf2da75444d958429a643a821464213698523e", + "version": "3.2.6.0" }, { "cabal_sha256": "129a59ba3ccfcd06192fd6da899e2711ae276a466915a047bd6727e4a0321d2e", @@ -198,36 +246,26 @@ "version": "4000.4.1" }, { - "cabal_sha256": "7699e7ae9bf74d056a62f384ceef8dfb2aa660f3f7c8016e9703f3b995e5e030", - "component": "lib:os-string", - "flags": [], - "package": "os-string", - "revision": 0, - "source": "hackage", - "src_sha256": "22fcc7d5fc66676b5dfc57b714d2caf93cce2d5a79d242168352f9eb0fe2f18a", - "version": "2.0.6" - }, - { - "cabal_sha256": "fc68b07d957ade5a0a0beadd560a8d093ceac30b2f35c85eed3bcf7889a25975", + "cabal_sha256": "2f23146cbe0325029927b221647695a4c7d6e97548ff731110979e34361f58ef", "component": "lib:hashable", "flags": [ "-arch-native", "-random-initial-seed" ], "package": "hashable", - "revision": 0, + "revision": 1, "source": "hackage", "src_sha256": "e58b3a8e18da5f6cd7e937e5fd683e500bb1f8276b3768269759119ca0cddb6a", "version": "1.5.0.0" }, { - "cabal_sha256": "cf9e6afba8e01830ca0d32a12b98d481cf389688762c80d1870a1db2061ebf35", + "cabal_sha256": "b7648c6165729a973d95cb328f9fd874813a81c727707e8b2552b4f03399763b", "component": "lib:async", "flags": [ "-bench" ], "package": "async", - "revision": 2, + "revision": 3, "source": "hackage", "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", "version": "2.2.5" @@ -285,17 +323,17 @@ "version": "0.2.2.1" }, { - "cabal_sha256": null, + "cabal_sha256": "c4c8fd9c71b9e813053d94408c621e7b13355c4ca1d3eaed35b8f8956eae9b87", "component": "lib:cabal-install-solver", "flags": [ "-debug-expensive-assertions", "-debug-tracetree" ], "package": "cabal-install-solver", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { "cabal_sha256": "acb64f2af52d81b0bb92c266f11d43def726a7a7b74a2c23d219e160b54edec7", @@ -370,15 +408,15 @@ "version": "0.6.3.0" }, { - "cabal_sha256": "bae1c5a6092d65c5e763246f91e04fef3f43e37cb055130725c9a973c88a250f", + "cabal_sha256": "85e64a75c0b490506a7edaa2d54950c668e66b65758bb08bb14cd31faf53a206", "component": "lib:zlib", "flags": [ "-bundled-c-zlib", "+non-blocking-ffi", - "-pkg-config" + "+pkg-config" ], "package": "zlib", - "revision": 1, + "revision": 2, "source": "hackage", "src_sha256": "6edd38b6b81df8d274952aa85affa6968ae86b2231e1d429ce8bc9083e6a55bc", "version": "0.7.1.0" @@ -429,11 +467,11 @@ "version": "0.96.0.1" }, { - "cabal_sha256": "4868265ab5760d2fdeb96625b138c8df25d41b9ee2651fa299ed019a69403045", + "cabal_sha256": "3e196e1362e4d0ec9dfcd7f8d58b24fac91beafaa1c8ee34dc9dee489c362377", "component": "lib:resolv", "flags": [], "package": "resolv", - "revision": 3, + "revision": 4, "source": "hackage", "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b", "version": "0.2.0.2" @@ -449,30 +487,40 @@ "version": "0.1.7.4" }, { - "cabal_sha256": null, + "cabal_sha256": "2de5218cef72b8ef090bd7d0fd930ffa143242a120c62e013b5cf039858f1855", + "component": "lib:semaphore-compat", + "flags": [], + "package": "semaphore-compat", + "revision": 3, + "source": "hackage", + "src_sha256": "1c6e6fab021c2ccee5d86112fb1c0bd016d15e0cf70c489dae5fb5ec156ed9e2", + "version": "1.0.0" + }, + { + "cabal_sha256": "3583679b022200ca7bc8cb7ff1cd254887b82af6cec5bbd404aa66ea9ea5d083", "component": "lib:cabal-install", "flags": [ "+lukko", "+native-dns" ], "package": "cabal-install", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { - "cabal_sha256": null, + "cabal_sha256": "3583679b022200ca7bc8cb7ff1cd254887b82af6cec5bbd404aa66ea9ea5d083", "component": "exe:cabal", "flags": [ "+lukko", "+native-dns" ], "package": "cabal-install", - "revision": null, + "revision": 0, "source": "local", "src_sha256": null, - "version": "3.14.0.0" + "version": "3.14.1.0" }, { "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index 3487786b28b..a34d0da4794 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -260,7 +260,7 @@ library -- newer directory for symlinks build-depends: Win32 >= 2.8 && < 3, directory >=1.3.1.0 else - build-depends: unix >= 2.5 && < 2.9 + build-depends: unix >= 2.5 && < 2.8 || >= 2.8.6.0 && < 2.9 if flag(lukko) build-depends: lukko >= 0.1 && <0.2 diff --git a/cabal.bootstrap.project b/cabal.bootstrap.project index 9ef27f9e72d..bd75ec5c289 100644 --- a/cabal.bootstrap.project +++ b/cabal.bootstrap.project @@ -9,4 +9,4 @@ packages: tests: False benchmarks: False -index-state: hackage.haskell.org 2024-09-05T17:19:45Z +index-state: hackage.haskell.org 2024-11-20T00:00:00Z diff --git a/cabal.release.project b/cabal.release.project index 676e9f68587..c7258f78093 100644 --- a/cabal.release.project +++ b/cabal.release.project @@ -2,4 +2,4 @@ import: project-cabal/pkgs/cabal.config import: project-cabal/pkgs/install.config import: project-cabal/pkgs/tests.config -index-state: hackage.haskell.org 2024-09-05T17:19:45Z +index-state: hackage.haskell.org 2024-11-20T00:00:00Z From 316320fa9ab089be5d42f5458e740f272c097682 Mon Sep 17 00:00:00 2001 From: brandon s allbery kf8nh Date: Thu, 26 Dec 2024 20:56:13 -0500 Subject: [PATCH 43/87] bump version numbers for 3.14.1.1 --- Cabal-syntax/Cabal-syntax.cabal | 2 +- Cabal/Cabal.cabal | 2 +- cabal-install-solver/cabal-install-solver.cabal | 2 +- cabal-install/cabal-install.cabal | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cabal-syntax/Cabal-syntax.cabal b/Cabal-syntax/Cabal-syntax.cabal index 29fc579d5eb..a6df8e9e85d 100644 --- a/Cabal-syntax/Cabal-syntax.cabal +++ b/Cabal-syntax/Cabal-syntax.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: Cabal-syntax -version: 3.14.1.0 +version: 3.14.1.1 copyright: 2003-2024, Cabal Development Team (see AUTHORS file) license: BSD-3-Clause license-file: LICENSE diff --git a/Cabal/Cabal.cabal b/Cabal/Cabal.cabal index f509f5c36a3..19ec3528455 100644 --- a/Cabal/Cabal.cabal +++ b/Cabal/Cabal.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: Cabal -version: 3.14.1.0 +version: 3.14.1.1 copyright: 2003-2024, Cabal Development Team (see AUTHORS file) license: BSD-3-Clause license-file: LICENSE diff --git a/cabal-install-solver/cabal-install-solver.cabal b/cabal-install-solver/cabal-install-solver.cabal index dbdba88bbc1..55ed6f4f30f 100644 --- a/cabal-install-solver/cabal-install-solver.cabal +++ b/cabal-install-solver/cabal-install-solver.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: cabal-install-solver -version: 3.14.1.0 +version: 3.14.1.1 synopsis: The solver component of cabal-install description: The solver component used in the cabal-install command-line program. diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index a34d0da4794..e3250ffa751 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -1,7 +1,7 @@ Cabal-Version: 3.0 Name: cabal-install -Version: 3.14.1.0 +Version: 3.14.1.1 Synopsis: The command-line interface for Cabal and Hackage. Description: The \'cabal\' command-line program simplifies the process of managing From a23fe27afd52cfc27641fd291880f76334310e59 Mon Sep 17 00:00:00 2001 From: brandon s allbery kf8nh Date: Fri, 13 Sep 2024 23:13:16 -0400 Subject: [PATCH 44/87] changelogs are docs We don't mark changelogs as documentation, so CI unnecessarily does full checks when we add changelogs. Correct this. NOTE: we only accept changelog files from top-level subdirectories. There are changelog files in various tests that must be considered to be "code". (cherry picked from commit 871c0d46a3d5d18f8726dcc0aa66e0466890166a) --- .github/workflows/bootstrap.skip.yml | 9 +++++++++ .github/workflows/bootstrap.yml | 9 +++++++++ .github/workflows/check-sdist.yml | 9 +++++++++ .github/workflows/validate.skip.yml | 9 +++++++++ 4 files changed, 36 insertions(+) diff --git a/.github/workflows/bootstrap.skip.yml b/.github/workflows/bootstrap.skip.yml index 3a47870b533..40ccb0ae9bc 100644 --- a/.github/workflows/bootstrap.skip.yml +++ b/.github/workflows/bootstrap.skip.yml @@ -19,6 +19,11 @@ on: - 'doc/**' - '**/README.md' - 'CONTRIBUTING.md' + - "changelog.d/**" + # only top level for these, because various test packages have them too + - "*/ChangeLog.md" + - "*/changelog.md" + - "release-notes/**" branches: - master pull_request: @@ -26,6 +31,10 @@ on: - 'doc/**' - '**/README.md' - 'CONTRIBUTING.md' + - "changelog.d/**" + - "*/ChangeLog.md" + - "*/changelog.md" + - "release-notes/**" release: types: - created diff --git a/.github/workflows/bootstrap.yml b/.github/workflows/bootstrap.yml index 5a4ed59dfc5..640802e5403 100644 --- a/.github/workflows/bootstrap.yml +++ b/.github/workflows/bootstrap.yml @@ -14,6 +14,11 @@ on: - 'doc/**' - '**/README.md' - 'CONTRIBUTING.md' + - "changelog.d/**" + # only top level for these, because various test packages have them too + - "*/ChangeLog.md" + - "*/changelog.md" + - "release-notes/**" branches: - master pull_request: @@ -21,6 +26,10 @@ on: - 'doc/**' - '**/README.md' - 'CONTRIBUTING.md' + - "changelog.d/**" + - "*/ChangeLog.md" + - "*/changelog.md" + - "release-notes/**" release: types: - created diff --git a/.github/workflows/check-sdist.yml b/.github/workflows/check-sdist.yml index 61b0c274dd1..70d76cdfe77 100644 --- a/.github/workflows/check-sdist.yml +++ b/.github/workflows/check-sdist.yml @@ -11,6 +11,11 @@ on: - "doc/**" - "**/README.md" - "CONTRIBUTING.md" + - "changelog.d/**" + # only top level for these, because various test packages have them too + - "*/ChangeLog.md" + - "*/changelog.md" + - "release-notes/**" branches: - master pull_request: @@ -18,6 +23,10 @@ on: - "doc/**" - "**/README.md" - "CONTRIBUTING.md" + - "changelog.d/**" + - "*/ChangeLog.md" + - "*/changelog.md" + - "release-notes/**" release: types: - created diff --git a/.github/workflows/validate.skip.yml b/.github/workflows/validate.skip.yml index af608e92d49..f4aa50ae191 100644 --- a/.github/workflows/validate.skip.yml +++ b/.github/workflows/validate.skip.yml @@ -19,6 +19,11 @@ on: - 'doc/**' - '**/README.md' - 'CONTRIBUTING.md' + - "changelog.d/**" + # only top level for these, because various test packages have them too + - "*/ChangeLog.md" + - "*/changelog.md" + - "release-notes/**" branches: - master pull_request: @@ -26,6 +31,10 @@ on: - 'doc/**' - '**/README.md' - 'CONTRIBUTING.md' + - "changelog.d/**" + - "*/ChangeLog.md" + - "*/changelog.md" + - "release-notes/**" release: types: - created From 15d9d9765cdd0e8870ea8b0f1c63835f55fdd03f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9cate?= Date: Sun, 29 Dec 2024 16:11:05 +0100 Subject: [PATCH 45/87] Changelog for 3.14.1.1 (#10675) --- release-notes/Cabal-3.14.1.1.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 release-notes/Cabal-3.14.1.1.md diff --git a/release-notes/Cabal-3.14.1.1.md b/release-notes/Cabal-3.14.1.1.md new file mode 100644 index 00000000000..451573ff9a4 --- /dev/null +++ b/release-notes/Cabal-3.14.1.1.md @@ -0,0 +1,6 @@ +Cabal and Cabal-syntax 3.14.1.1 changelog and release notes +--- + +### Significant changes + +- Support for GHC 9.12 [10671](https://github.com/haskell/cabal/pull/10671) From 1ae3ae01cfb8b807314dd08c1c9953b2064b49d3 Mon Sep 17 00:00:00 2001 From: Phil de Joux Date: Thu, 2 Jan 2025 07:01:28 -0500 Subject: [PATCH 46/87] Move cabal path to project configuration group (cherry picked from commit d9d57e793efa4b3698b1ccc6d1a7dcb0fc3309bd) --- doc/cabal-commands.rst | 124 ++++++++++++++++++++--------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/doc/cabal-commands.rst b/doc/cabal-commands.rst index c1987afbfd8..c0881517fa3 100644 --- a/doc/cabal-commands.rst +++ b/doc/cabal-commands.rst @@ -285,68 +285,6 @@ cabal preferences. It is very useful when you are e.g. first configuring Note how ``--augment`` syntax follows ``cabal user-config diff`` output. -cabal path -^^^^^^^^^^ - -``cabal path`` allows to query for paths used by ``cabal``. -For example, it allows to query for the directories of the cache, store, -installed binaries, and so on. - -:: - - $ whoami - alice - - $ cabal path - compiler-flavour: ghc - compiler-id: ghc-9.8.2 - compiler-path: /home/alice/.ghcup/bin/ghc - cache-home: /home/alice/.cabal - remote-repo-cache: /home/alice/.cabal/packages - logs-dir: /home/alice/.cabal/logs - store-dir: /home/alice/.cabal/store - config-file: /home/alice/.cabal/config - installdir: /home/alice/.cabal/bin - -Or using the json output: - -:: - - $ cabal path --output-format=json | jq - -.. code-block:: json - - { - "cabal-version": "3.13.0.0", - "compiler": { - "flavour": "ghc", - "id": "ghc-9.8.2", - "path": "/home/alice/.ghcup/bin/ghc" - }, - "cache-home": "/home/alice/.cabal", - "remote-repo-cache": "/home/alice/.cabal/packages", - "logs-dir": "/home/alice/.cabal/logs", - "store-dir": "/home/alice/.cabal/store", - "config-file": "/home/alice/.cabal/config", - "installdir": "/home/alice/.cabal/bin" - } - -If ``cabal path`` is passed a single option naming a path, then that -path will be printed *without* any label: - -:: - - $ cabal path --installdir - /home/alice/.cabal/bin - -While this interface is intended to be used for scripting, it is an experimental command. -Scripting example: - -:: - - $ ls $(cabal path --installdir) - ... - .. _command-group-database: Package database commands @@ -734,6 +672,68 @@ Examples: be used without arguments, in that case major version bumps are ignored for all packages. +cabal path +^^^^^^^^^^ + +``cabal path`` allows to query for paths used by ``cabal``. +For example, it allows to query for the directories of the cache, store, +installed binaries, and so on. + +:: + + $ whoami + alice + + $ cabal path + compiler-flavour: ghc + compiler-id: ghc-9.8.2 + compiler-path: /home/alice/.ghcup/bin/ghc + cache-home: /home/alice/.cabal + remote-repo-cache: /home/alice/.cabal/packages + logs-dir: /home/alice/.cabal/logs + store-dir: /home/alice/.cabal/store + config-file: /home/alice/.cabal/config + installdir: /home/alice/.cabal/bin + +Or using the json output: + +:: + + $ cabal path --output-format=json | jq + +.. code-block:: json + + { + "cabal-version": "3.13.0.0", + "compiler": { + "flavour": "ghc", + "id": "ghc-9.8.2", + "path": "/home/alice/.ghcup/bin/ghc" + }, + "cache-home": "/home/alice/.cabal", + "remote-repo-cache": "/home/alice/.cabal/packages", + "logs-dir": "/home/alice/.cabal/logs", + "store-dir": "/home/alice/.cabal/store", + "config-file": "/home/alice/.cabal/config", + "installdir": "/home/alice/.cabal/bin" + } + +If ``cabal path`` is passed a single option naming a path, then that +path will be printed *without* any label: + +:: + + $ cabal path --installdir + /home/alice/.cabal/bin + +While this interface is intended to be used for scripting, it is an experimental command. +Scripting example: + +:: + + $ ls $(cabal path --installdir) + ... + .. _command-group-build: Project building and installing From 4feb1665cdbbafbaca04889f57e46f50815bd8a8 Mon Sep 17 00:00:00 2001 From: James Blackburn Date: Sun, 5 Jan 2025 06:21:10 +0000 Subject: [PATCH 47/87] Rename cabal hooks readme The master README.md links to a README.md in the Cabal-hooks directory but said link does not exist because the file is named "readme.md" Resolves: #10715 (cherry picked from commit 09928d5504c9f5d91862f56647f984de338247d6) --- Cabal-hooks/{changelog.md => CHANGELOG.md} | 0 Cabal-hooks/{readme.md => README.md} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename Cabal-hooks/{changelog.md => CHANGELOG.md} (100%) rename Cabal-hooks/{readme.md => README.md} (100%) diff --git a/Cabal-hooks/changelog.md b/Cabal-hooks/CHANGELOG.md similarity index 100% rename from Cabal-hooks/changelog.md rename to Cabal-hooks/CHANGELOG.md diff --git a/Cabal-hooks/readme.md b/Cabal-hooks/README.md similarity index 100% rename from Cabal-hooks/readme.md rename to Cabal-hooks/README.md From 7d048fe7fbcf8dadfcf0ca7315cffc9acac771b0 Mon Sep 17 00:00:00 2001 From: Phil de Joux Date: Mon, 11 Nov 2024 07:45:55 -0500 Subject: [PATCH 48/87] Add Ord instance for ProjectConfigPath - Consider URI in Ord instance - Use <> in Ord instance of ProjectConfigPath - Add unconsProjectConfigPath - Add docProjectConfigFiles - Remove docProjectConfigPaths - Clarify sorting haddocks for Ord ProjectConfigPath (cherry picked from commit 124d47163bde123c66543e78327f7c1c5aaa27fd) --- .../Solver/Types/ProjectConfigPath.hs | 61 ++++++++++++++++--- .../src/Distribution/Client/ProjectConfig.hs | 2 +- changelog.d/pr-10546 | 9 +++ 3 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 changelog.d/pr-10546 diff --git a/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs b/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs index b98d493656c..25de1091d66 100644 --- a/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs +++ b/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs @@ -1,4 +1,5 @@ {-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE ViewPatterns #-} module Distribution.Solver.Types.ProjectConfigPath ( @@ -7,10 +8,11 @@ module Distribution.Solver.Types.ProjectConfigPath , projectConfigPathRoot , nullProjectConfigPath , consProjectConfigPath + , unconsProjectConfigPath -- * Messages , docProjectConfigPath - , docProjectConfigPaths + , docProjectConfigFiles , cyclicalImportMsg , docProjectConfigPathFailReason @@ -21,17 +23,19 @@ module Distribution.Solver.Types.ProjectConfigPath ) where import Distribution.Solver.Compat.Prelude hiding (toList, (<>)) +import qualified Distribution.Solver.Compat.Prelude as P ((<>)) import Prelude (sequence) import Data.Coerce (coerce) import Data.List.NonEmpty ((<|)) -import Network.URI (parseURI) +import Network.URI (parseURI, parseAbsoluteURI) import System.Directory import System.FilePath import qualified Data.List.NonEmpty as NE import Distribution.Solver.Modular.Version (VR) import Distribution.Pretty (prettyShow) import Text.PrettyPrint +import Distribution.Simple.Utils (ordNub) -- | Path to a configuration file, either a singleton project root, or a longer -- list representing a path to an import. The path is a non-empty list that we @@ -45,7 +49,41 @@ import Text.PrettyPrint -- List elements are relative to each other but once canonicalized, elements are -- relative to the directory of the project root. newtype ProjectConfigPath = ProjectConfigPath (NonEmpty FilePath) - deriving (Eq, Ord, Show, Generic) + deriving (Eq, Show, Generic) + +-- | Sorts URIs after local file paths and longer file paths after shorter ones +-- as measured by the number of path segments. If still equal, then sorting is +-- lexical. +-- +-- The project itself, a single element root path, compared to any of the +-- configuration paths it imports, should always sort first. Comparing one +-- project root path against another is done lexically. +instance Ord ProjectConfigPath where + compare pa@(ProjectConfigPath (NE.toList -> as)) pb@(ProjectConfigPath (NE.toList -> bs)) = + case (as, bs) of + -- There should only ever be one root project path, only one path + -- with length 1. Comparing it to itself should be EQ. Don't assume + -- this though, do a comparison anyway when both sides have length + -- 1. The root path, the project itself, should always be the first + -- path in a sorted listing. + ([a], [b]) -> compare a b + ([_], _) -> LT + (_, [_]) -> GT + + (a:_, b:_) -> case (parseAbsoluteURI a, parseAbsoluteURI b) of + (Just ua, Just ub) -> compare ua ub P.<> compare aImporters bImporters + (Just _, Nothing) -> GT + (Nothing, Just _) -> LT + (Nothing, Nothing) -> compare (splitPath a) (splitPath b) P.<> compare aImporters bImporters + _ -> + compare (length as) (length bs) + P.<> compare (length aPaths) (length bPaths) + P.<> compare aPaths bPaths + where + aPaths = splitPath <$> as + bPaths = splitPath <$> bs + aImporters = snd $ unconsProjectConfigPath pa + bImporters = snd $ unconsProjectConfigPath pb instance Binary ProjectConfigPath instance Structured ProjectConfigPath @@ -95,15 +133,16 @@ docProjectConfigPath (ProjectConfigPath (p :| ps)) = vcat $ -- , ProjectConfigPath ("project-cabal/pkgs/integration-tests.config" :| ["project-cabal/pkgs.config","cabal.project"]) -- , ProjectConfigPath ("project-cabal/pkgs/tests.config" :| ["project-cabal/pkgs.config","cabal.project"]) -- ] --- return . render $ docProjectConfigPaths ps +-- return . render $ docProjectConfigFiles ps -- :} -- "- cabal.project\n- project-cabal/constraints.config\n- project-cabal/ghc-latest.config\n- project-cabal/ghc-options.config\n- project-cabal/pkgs.config\n- project-cabal/pkgs/benchmarks.config\n- project-cabal/pkgs/buildinfo.config\n- project-cabal/pkgs/cabal.config\n- project-cabal/pkgs/install.config\n- project-cabal/pkgs/integration-tests.config\n- project-cabal/pkgs/tests.config" -docProjectConfigPaths :: [ProjectConfigPath] -> Doc -docProjectConfigPaths ps = vcat - [ text "-" <+> text p | ProjectConfigPath (p :| _) <- ps ] +docProjectConfigFiles :: [ProjectConfigPath] -> Doc +docProjectConfigFiles ps = vcat + [ text "-" <+> text p + | p <- ordNub [ p | ProjectConfigPath (p :| _) <- ps ] + ] --- | A message for a cyclical import, assuming the head of the path is the --- duplicate. +-- | A message for a cyclical import, a "cyclical import of". cyclicalImportMsg :: ProjectConfigPath -> Doc cyclicalImportMsg path@(ProjectConfigPath (duplicate :| _)) = vcat @@ -148,6 +187,10 @@ isTopLevelConfigPath (ProjectConfigPath p) = NE.length p == 1 consProjectConfigPath :: FilePath -> ProjectConfigPath -> ProjectConfigPath consProjectConfigPath p ps = ProjectConfigPath (p <| coerce ps) +-- | Split the path into the importee and the importer path. +unconsProjectConfigPath :: ProjectConfigPath -> (FilePath, Maybe ProjectConfigPath) +unconsProjectConfigPath ps = fmap ProjectConfigPath <$> NE.uncons (coerce ps) + -- | Make paths relative to the directory of the root of the project, not -- relative to the file they were imported from. makeRelativeConfigPath :: FilePath -> ProjectConfigPath -> ProjectConfigPath diff --git a/cabal-install/src/Distribution/Client/ProjectConfig.hs b/cabal-install/src/Distribution/Client/ProjectConfig.hs index b828bda12d3..6390ab75e11 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig.hs @@ -936,7 +936,7 @@ renderBadPackageLocations (BadPackageLocations provenance bpls) renderExplicit = "When using configuration from:\n" - ++ render (nest 2 . docProjectConfigPaths $ mapMaybe getExplicit (Set.toList provenance)) + ++ render (nest 2 . docProjectConfigFiles $ mapMaybe getExplicit (Set.toList provenance)) ++ "\nThe following errors occurred:\n" ++ render (nest 2 $ vcat ((text "-" <+>) . text <$> map renderBadPackageLocation bpls)) diff --git a/changelog.d/pr-10546 b/changelog.d/pr-10546 new file mode 100644 index 00000000000..1851e21c0e4 --- /dev/null +++ b/changelog.d/pr-10546 @@ -0,0 +1,9 @@ +--- +synopsis: Add an Ord instance for ProjectConfigPath +packages: [cabal-install-solver] +prs: 10546 +--- + +Add an `Ord` instance for `ProjectConfigPath` that sorts URIs after local paths +and longer paths after shorter ones. Deduplicate the printing of "Configuration is +affected by the following files" messages. From 6d2b9bbe4f67000625ac7d511ea72ef43596eee5 Mon Sep 17 00:00:00 2001 From: Phil de Joux Date: Mon, 9 Dec 2024 19:51:54 -0500 Subject: [PATCH 49/87] Add test projects - Add woops test - Regen expected output without duplication - Add "when using config from" tests - Remove unnecessary normalizeWindowsOutput - Change assertion message - Match on (\n|\r\n) for line endings - Note /tmp/cabal-testsuite-*/ not seen on Windows - Always have the project itself sort first - Use with-ghc.config with woops project - Remove docProjectConfigPaths - docProjectConfigFiles is the better name when not reporting "imported by" - Use --dry-run for config listing tests - Only use woops project once in tests - Don't use same project twice in tests - Put dedup test into its own folder - Simplify the project file names - Can be done now that the test is in its own folder - Move using config dedup test to ProjectImport dir - Remove an additional test on yops project - checking "using config from message" without URI imports - Add simple test for changelog - Better explain the message changes - Redo the test so the project doesn't sort 1st - Don't need to specify default project explicitly - Add a z-empty.config lexically sorted last (cherry picked from commit 73a13f125a1c93b1e1500346713f69152ce4993a) --- .../ConditionalAndImport/cabal.out | 4 +- .../ConditionalAndImport/with-ghc.config | 7 ++ .../DedupUsingConfigFromComplex/0.config | 7 ++ .../DedupUsingConfigFromComplex/2.config | 2 + .../DedupUsingConfigFromComplex/4.config | 2 + .../DedupUsingConfigFromComplex/6.config | 2 + .../DedupUsingConfigFromComplex/8.config | 2 + .../DedupUsingConfigFromComplex/cabal.out | 3 + .../DedupUsingConfigFromComplex/cabal.test.hs | 42 ++++++++++ .../DedupUsingConfigFromComplex/cfg/1.config | 2 + .../DedupUsingConfigFromComplex/cfg/3.config | 2 + .../DedupUsingConfigFromComplex/cfg/5.config | 2 + .../DedupUsingConfigFromComplex/cfg/7.config | 2 + .../DedupUsingConfigFromComplex/cfg/9.config | 2 + .../no-pkg-1/README.md | 2 + .../no-pkg-3/README.md | 2 + .../no-pkgs.project | 7 ++ .../with-ghc.config | 7 ++ .../a-very-extra.config | 2 + .../an-extra.config | 2 + .../DedupUsingConfigFromSimple/cabal.out | 1 + .../DedupUsingConfigFromSimple/cabal.project | 9 +++ .../DedupUsingConfigFromSimple/cabal.test.hs | 24 ++++++ .../with-ghc.config | 7 ++ .../DedupUsingConfigFromSimple/z-empty.config | 1 + changelog.d/pr-10546 | 81 ++++++++++++++++++- 26 files changed, 220 insertions(+), 6 deletions(-) create mode 100644 cabal-testsuite/PackageTests/ConditionalAndImport/with-ghc.config create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/0.config create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/2.config create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/4.config create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/6.config create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/8.config create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cabal.out create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cabal.test.hs create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/1.config create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/3.config create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/5.config create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/7.config create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/9.config create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/no-pkg-1/README.md create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/no-pkg-3/README.md create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/no-pkgs.project create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/with-ghc.config create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/a-very-extra.config create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/an-extra.config create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/cabal.out create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/cabal.project create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/cabal.test.hs create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/with-ghc.config create mode 100644 cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/z-empty.config diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out b/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out index 534bd000a1a..63038c95bbd 100644 --- a/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out @@ -67,9 +67,9 @@ cyclical import of cyclical-2-out-out-self-b.config; # checking that cyclical check doesn't false-positive on same file names in different folders; hoping within a folder and then into a subfolder # cabal v2-build Configuration is affected by the following files: +- noncyclical-same-filename-a.project - noncyclical-same-filename-a.config imported by: noncyclical-same-filename-a.project -- noncyclical-same-filename-a.project - same-filename/noncyclical-same-filename-a.config imported by: noncyclical-same-filename-a.config imported by: noncyclical-same-filename-a.project @@ -83,10 +83,10 @@ Building library for my-0.1... # checking that cyclical check doesn't false-positive on same file names in different folders; hoping into a subfolder and then back out again # cabal v2-build Configuration is affected by the following files: +- noncyclical-same-filename-b.project - noncyclical-same-filename-b.config imported by: same-filename/noncyclical-same-filename-b.config imported by: noncyclical-same-filename-b.project -- noncyclical-same-filename-b.project - same-filename/noncyclical-same-filename-b.config imported by: noncyclical-same-filename-b.project Up to date diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/with-ghc.config b/cabal-testsuite/PackageTests/ConditionalAndImport/with-ghc.config new file mode 100644 index 00000000000..140a00be1b9 --- /dev/null +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/with-ghc.config @@ -0,0 +1,7 @@ +-- WARNING: Override the `with-compiler: ghc-x.y.z` of the stackage import, of +-- https://www.stackage.org/nightly-yyyy-mm-dd/cabal.config. Otherwise tests +-- will fail with: +-- -Error: [Cabal-5490] +-- -Cannot find the program 'ghc'. User-specified path 'ghc-x.y.z' does not +-- refer to an executable and the program is not on the system path. +with-compiler: ghc diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/0.config b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/0.config new file mode 100644 index 00000000000..05195095cb0 --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/0.config @@ -0,0 +1,7 @@ +import: cfg/1.config +import: cfg/3.config +import: cfg/5.config +import: cfg/7.config +import: cfg/9.config + +import: with-ghc.config diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/2.config b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/2.config new file mode 100644 index 00000000000..80143e396c8 --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/2.config @@ -0,0 +1,2 @@ +import: cfg/3.config +import: https://www.stackage.org/lts-21.25/cabal.config diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/4.config b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/4.config new file mode 100644 index 00000000000..8b84982cc3e --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/4.config @@ -0,0 +1,2 @@ +import: cfg/5.config +import: https://www.stackage.org/lts-21.25/cabal.config diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/6.config b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/6.config new file mode 100644 index 00000000000..43ce76e8766 --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/6.config @@ -0,0 +1,2 @@ +import: cfg/7.config +import: https://www.stackage.org/lts-21.25/cabal.config diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/8.config b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/8.config new file mode 100644 index 00000000000..28d0551160f --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/8.config @@ -0,0 +1,2 @@ +import: cfg/9.config +import: https://www.stackage.org/lts-21.25/cabal.config diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cabal.out b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cabal.out new file mode 100644 index 00000000000..437612a2eca --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cabal.out @@ -0,0 +1,3 @@ +# checking "using config from message" with URI imports +# cabal v2-build +# checking that package directories and locations are reported in order diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cabal.test.hs b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cabal.test.hs new file mode 100644 index 00000000000..e354b356d7f --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cabal.test.hs @@ -0,0 +1,42 @@ +import Test.Cabal.Prelude + +main = cabalTest . recordMode RecordMarked $ do + let log = recordHeader . pure + + log "checking \"using config from message\" with URI imports" + out <- fails $ cabal' "v2-build" [ "all", "--dry-run", "--project-file=no-pkgs.project" ] + + -- Use assertRegex when the output is tainted by the temp directory, like + -- this: + -- + -- When using configuration from: + -- - /tmp/cabal-testsuite-282695/cabal.project + -- - /tmp/cabal-testsuite-282695/2.config etc + assertRegex + "Project configuration with URI imports is listed in full" + "When using configuration from:(\n|\r\n) \ + \ .*no-pkgs\\.project(\n|\r\n) \ + \ .*0\\.config(\n|\r\n) \ + \ .*2\\.config(\n|\r\n) \ + \ .*4\\.config(\n|\r\n) \ + \ .*6\\.config(\n|\r\n) \ + \ .*8\\.config(\n|\r\n) \ + \ .*1\\.config(\n|\r\n) \ + \ .*3\\.config(\n|\r\n) \ + \ .*5\\.config(\n|\r\n) \ + \ .*7\\.config(\n|\r\n) \ + \ .*9\\.config(\n|\r\n) \ + \ .*with-ghc\\.config(\n|\r\n) \ + \ .*https://www.stackage.org/lts-21.25/cabal.config(\n|\r\n)" + out + + log "checking that package directories and locations are reported in order" + assertOutputContains + "The following errors occurred: \ + \ - The package directory 'no-pkg-1' does not contain any .cabal file. \ + \ - The package location 'no-pkg-2-dir' does not exist. \ + \ - The package directory 'no-pkg-3' does not contain any .cabal file. \ + \ - The package location 'no-pkg-4-dir' does not exist." + out + + return () diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/1.config b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/1.config new file mode 100644 index 00000000000..126a94da61d --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/1.config @@ -0,0 +1,2 @@ +import: ../2.config +import: https://www.stackage.org/lts-21.25/cabal.config diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/3.config b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/3.config new file mode 100644 index 00000000000..f40b183e472 --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/3.config @@ -0,0 +1,2 @@ +import: ../4.config +import: https://www.stackage.org/lts-21.25/cabal.config diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/5.config b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/5.config new file mode 100644 index 00000000000..7f579a54345 --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/5.config @@ -0,0 +1,2 @@ +import: ../6.config +import: https://www.stackage.org/lts-21.25/cabal.config diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/7.config b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/7.config new file mode 100644 index 00000000000..7cd98c9c244 --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/7.config @@ -0,0 +1,2 @@ +import: ../8.config +import: https://www.stackage.org/lts-21.25/cabal.config diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/9.config b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/9.config new file mode 100644 index 00000000000..44d1cc5e562 --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/cfg/9.config @@ -0,0 +1,2 @@ +-- No imports here +import: https://www.stackage.org/lts-21.25/cabal.config diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/no-pkg-1/README.md b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/no-pkg-1/README.md new file mode 100644 index 00000000000..ba73c42531f --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/no-pkg-1/README.md @@ -0,0 +1,2 @@ +There's intentionally no package here but the directory for the package exists +so that the project can find it. diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/no-pkg-3/README.md b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/no-pkg-3/README.md new file mode 100644 index 00000000000..ba73c42531f --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/no-pkg-3/README.md @@ -0,0 +1,2 @@ +There's intentionally no package here but the directory for the package exists +so that the project can find it. diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/no-pkgs.project b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/no-pkgs.project new file mode 100644 index 00000000000..0d723a9e298 --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/no-pkgs.project @@ -0,0 +1,7 @@ +packages: + no-pkg-1 + no-pkg-2-dir + no-pkg-3 + no-pkg-4-dir + +import: 0.config diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/with-ghc.config b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/with-ghc.config new file mode 100644 index 00000000000..140a00be1b9 --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromComplex/with-ghc.config @@ -0,0 +1,7 @@ +-- WARNING: Override the `with-compiler: ghc-x.y.z` of the stackage import, of +-- https://www.stackage.org/nightly-yyyy-mm-dd/cabal.config. Otherwise tests +-- will fail with: +-- -Error: [Cabal-5490] +-- -Cannot find the program 'ghc'. User-specified path 'ghc-x.y.z' does not +-- refer to an executable and the program is not on the system path. +with-compiler: ghc diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/a-very-extra.config b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/a-very-extra.config new file mode 100644 index 00000000000..c0f8dc3cc73 --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/a-very-extra.config @@ -0,0 +1,2 @@ +import: https://www.stackage.org/lts-21.25/cabal.config +import: https://www.stackage.org/lts-21.25/cabal.config diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/an-extra.config b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/an-extra.config new file mode 100644 index 00000000000..c0f8dc3cc73 --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/an-extra.config @@ -0,0 +1,2 @@ +import: https://www.stackage.org/lts-21.25/cabal.config +import: https://www.stackage.org/lts-21.25/cabal.config diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/cabal.out b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/cabal.out new file mode 100644 index 00000000000..92fd8204a40 --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/cabal.out @@ -0,0 +1 @@ +# cabal v2-build diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/cabal.project b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/cabal.project new file mode 100644 index 00000000000..32308f3491f --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/cabal.project @@ -0,0 +1,9 @@ +packages: no-pkg-dir +import: z-empty.config +import: an-extra.config +import: an-extra.config +import: a-very-extra.config +import: a-very-extra.config +import: https://www.stackage.org/lts-21.25/cabal.config +import: https://www.stackage.org/lts-21.25/cabal.config +import: with-ghc.config diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/cabal.test.hs b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/cabal.test.hs new file mode 100644 index 00000000000..cf37d1621a6 --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/cabal.test.hs @@ -0,0 +1,24 @@ +import Test.Cabal.Prelude + +main = cabalTest . recordMode RecordMarked $ do + let log = recordHeader . pure + + out <- fails $ cabal' "v2-build" [ "all", "--dry-run" ] + + -- Use assertRegex when the output is tainted by the temp directory, like + -- this: + -- + -- When using configuration from: + -- - /tmp/cabal-testsuite-282695/cabal.project + assertRegex + "Project configuration is listed in full and deduplicated" + "When using configuration from:(\n|\r\n) \ + \ .*cabal\\.project(\n|\r\n) \ + \ .*a-very-extra\\.config(\n|\r\n) \ + \ .*an-extra\\.config(\n|\r\n) \ + \ .*with-ghc\\.config(\n|\r\n) \ + \ .*z-empty\\.config(\n|\r\n) \ + \ .*https://www.stackage.org/lts-21.25/cabal.config(\n|\r\n)" + out + + return () diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/with-ghc.config b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/with-ghc.config new file mode 100644 index 00000000000..140a00be1b9 --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/with-ghc.config @@ -0,0 +1,7 @@ +-- WARNING: Override the `with-compiler: ghc-x.y.z` of the stackage import, of +-- https://www.stackage.org/nightly-yyyy-mm-dd/cabal.config. Otherwise tests +-- will fail with: +-- -Error: [Cabal-5490] +-- -Cannot find the program 'ghc'. User-specified path 'ghc-x.y.z' does not +-- refer to an executable and the program is not on the system path. +with-compiler: ghc diff --git a/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/z-empty.config b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/z-empty.config new file mode 100644 index 00000000000..771bb389fde --- /dev/null +++ b/cabal-testsuite/PackageTests/ProjectImport/DedupUsingConfigFromSimple/z-empty.config @@ -0,0 +1 @@ +-- This file is intentionally empty, just this comment. diff --git a/changelog.d/pr-10546 b/changelog.d/pr-10546 index 1851e21c0e4..db0951505f0 100644 --- a/changelog.d/pr-10546 +++ b/changelog.d/pr-10546 @@ -1,9 +1,82 @@ --- -synopsis: Add an Ord instance for ProjectConfigPath +synopsis: Deduplicate "using configuration from" message packages: [cabal-install-solver] prs: 10546 --- -Add an `Ord` instance for `ProjectConfigPath` that sorts URIs after local paths -and longer paths after shorter ones. Deduplicate the printing of "Configuration is -affected by the following files" messages. +## Using Configuration From Message Changes + +Deduplicates and sorts the list of configuration files and URIs printed with the +"using configuration from" message. This message is shown when there's a build +failure. We can trigger that message by using a non-existant package in the +project, "no-pkg-dir". + +If an import is repeated in a `.project` or `.config` file it only imported once +but if the same import is made from an imported file then it was being repeated +in the message. Additional problems were not showing the project first and +mixing configuration files and URIs together. + +* The test set up: + + ``` + $ cat cabal.project + cat cabal.project + packages: no-pkg-dir + import: z-empty.config + import: an-extra.config + import: an-extra.config + import: a-very-extra.config + import: a-very-extra.config + import: https://www.stackage.org/lts-21.25/cabal.config + import: https://www.stackage.org/lts-21.25/cabal.config + + $ cat an-extra.config + import: https://www.stackage.org/lts-21.25/cabal.config + import: https://www.stackage.org/lts-21.25/cabal.config + + $ cat a-very-extra.config + import: https://www.stackage.org/lts-21.25/cabal.config + import: https://www.stackage.org/lts-21.25/cabal.config + + $ cat z-empty.config + - This file is intentionally empty, just this comment. + ``` + +* Before the fix: + + ``` + $ ~/.ghcup/bin/cabal-3.12.1.0 build all --dry-run + When using configuration from: + - a-very-extra.config + - an-extra.config + - cabal.project + - https://www.stackage.org/lts-21.25/cabal.config + - https://www.stackage.org/lts-21.25/cabal.config + - https://www.stackage.org/lts-21.25/cabal.config + - z-empty.config + The following errors occurred: + - The package location 'no-pkg-dir' does not exist. + ``` + +* After the fix: + + ``` + $ cabal build all --dry-run + When using configuration from: + - cabal.project + - a-very-extra.config + - an-extra.config + - z-empty.config + - https://www.stackage.org/lts-21.25/cabal.config + The following errors occurred: + - The package location 'no-pkg-dir' does not exist. + ``` + +## Ord ProjectConfigPath Instance Changes + +Adds a custom `Ord` instance for `ProjectConfigPath` that sorts URIs after local +file paths and longer file paths after shorter ones as measured by the number of +path segments. If still equal, then sorting is lexical. The project itself, a +single element root path, compared to any of the configuration paths it imports, +should always sort first. Comparing one project root path against another is +done lexically. From 18ee99421c5d63879835bf9ff06b12ea40719056 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 14 Jan 2025 21:25:45 +0000 Subject: [PATCH 50/87] Backport #10723: Remove unused -XCPP (#10752) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Remove redundant -XCPP - Remove redundant -XCPP from Cabal-tree-diff - Remove redundant -XCPP from cabal-install - Remove redundant -XCPP from Cabal - Remove redundant -XCPP from Cabal-QuickCheck - Remove redundant -XCPP from Cabal-syntax - Remove redundant -XCPP from Cabal-tests - Remove redundant -XCPP from cabal-testsuite (cherry picked from commit 7965c7fce1da968c02bce88ac60f90cffa83a336) # Conflicts: # Cabal-syntax/src/Distribution/Compat/Binary.hs # Cabal-syntax/src/Distribution/Utils/Generic.hs # cabal-install/src/Distribution/Client/CmdUpdate.hs # cabal-install/src/Distribution/Client/InstallSymlink.hs # cabal-install/src/Distribution/Client/Targets.hs * fix conflicts --------- Co-authored-by: Phil de Joux Co-authored-by: Hécate Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- Cabal-QuickCheck/src/Test/QuickCheck/GenericArbitrary.hs | 1 - Cabal-syntax/src/Distribution/Compat/Binary.hs | 3 --- Cabal-syntax/src/Distribution/Compat/Exception.hs | 2 -- Cabal-syntax/src/Distribution/Compat/Graph.hs | 5 ----- Cabal-syntax/src/Distribution/Compat/MonadFail.hs | 2 -- Cabal-syntax/src/Distribution/Compat/Newtype.hs | 1 - Cabal-syntax/src/Distribution/Compat/Prelude.hs | 1 - Cabal-syntax/src/Distribution/Compat/Semigroup.hs | 1 - Cabal-syntax/src/Distribution/FieldGrammar/Class.hs | 1 - Cabal-syntax/src/Distribution/Fields/ParseResult.hs | 1 - Cabal-syntax/src/Distribution/PackageDescription/Parsec.hs | 3 --- Cabal-syntax/src/Distribution/Parsec.hs | 1 - Cabal-syntax/src/Distribution/System.hs | 3 --- Cabal-syntax/src/Distribution/Utils/Generic.hs | 4 ---- .../tests/UnitTests/Distribution/CabalSpecVersion.hs | 1 - Cabal-tests/tests/UnitTests/Distribution/Utils/CharSet.hs | 1 - .../tests/UnitTests/Distribution/Utils/Structured.hs | 1 - Cabal-tree-diff/src/Data/TreeDiff/Instances/Cabal.hs | 1 - .../src/Data/TreeDiff/Instances/CabalLanguage.hs | 1 - Cabal-tree-diff/src/Data/TreeDiff/Instances/CabalSPDX.hs | 1 - .../src/Data/TreeDiff/Instances/CabalVersion.hs | 1 - Cabal/src/Distribution/Compat/Async.hs | 2 -- Cabal/src/Distribution/Compat/ResponseFile.hs | 1 - Cabal/src/Distribution/Compat/Stack.hs | 1 - Cabal/src/Distribution/Simple/GHCJS.hs | 1 - Cabal/src/Distribution/Simple/Setup.hs | 3 --- Cabal/src/Distribution/Simple/Setup/Benchmark.hs | 3 --- Cabal/src/Distribution/Simple/Setup/Build.hs | 3 --- Cabal/src/Distribution/Simple/Setup/Clean.hs | 3 --- Cabal/src/Distribution/Simple/Setup/Common.hs | 3 --- Cabal/src/Distribution/Simple/Setup/Copy.hs | 3 --- Cabal/src/Distribution/Simple/Setup/Global.hs | 3 --- Cabal/src/Distribution/Simple/Setup/Haddock.hs | 3 --- Cabal/src/Distribution/Simple/Setup/Hscolour.hs | 3 --- Cabal/src/Distribution/Simple/Setup/Install.hs | 3 --- Cabal/src/Distribution/Simple/Setup/Register.hs | 3 --- Cabal/src/Distribution/Simple/Setup/Repl.hs | 3 --- Cabal/src/Distribution/Simple/Setup/SDist.hs | 3 --- Cabal/src/Distribution/Simple/Setup/Test.hs | 3 --- Cabal/src/Distribution/Utils/MapAccum.hs | 2 -- Cabal/src/Distribution/Utils/Progress.hs | 1 - cabal-install/src/Distribution/Client/Check.hs | 6 ------ cabal-install/src/Distribution/Client/CmdOutdated.hs | 5 ----- cabal-install/src/Distribution/Client/CmdPath.hs | 5 ----- cabal-install/src/Distribution/Client/CmdUpdate.hs | 3 --- cabal-install/src/Distribution/Client/Configure.hs | 5 ----- cabal-install/src/Distribution/Client/FileMonitor.hs | 1 - cabal-install/src/Distribution/Client/GenBounds.hs | 6 ------ cabal-install/src/Distribution/Client/IndexUtils.hs | 5 ----- cabal-install/src/Distribution/Client/InstallSymlink.hs | 6 ------ cabal-install/src/Distribution/Client/Main.hs | 5 ----- cabal-install/src/Distribution/Client/Manpage.hs | 4 ---- cabal-install/src/Distribution/Client/ProjectBuilding.hs | 1 - cabal-install/src/Distribution/Client/ProjectConfig.hs | 1 - cabal-install/src/Distribution/Client/Sandbox.hs | 5 ----- cabal-install/src/Distribution/Client/Security/HTTP.hs | 1 - cabal-install/src/Distribution/Client/Targets.hs | 7 ------- cabal-install/src/Distribution/Deprecated/ParseUtils.hs | 1 - cabal-install/src/Distribution/Deprecated/ReadP.hs | 5 ----- .../tests/UnitTests/Distribution/Client/FileMonitor.hs | 2 -- cabal-install/tests/UnitTests/Distribution/Client/Glob.hs | 1 - .../tests/UnitTests/Distribution/Client/UserConfig.hs | 2 -- .../UnitTests/Distribution/Solver/Modular/QuickCheck.hs | 1 - .../UnitTests/Distribution/Solver/Types/OptionalStanza.hs | 2 -- cabal-testsuite/main/cabal-tests.hs | 1 - cabal-testsuite/src/Test/Cabal/TestCode.hs | 1 - 66 files changed, 168 deletions(-) diff --git a/Cabal-QuickCheck/src/Test/QuickCheck/GenericArbitrary.hs b/Cabal-QuickCheck/src/Test/QuickCheck/GenericArbitrary.hs index 29f0b5d85e9..0a9f92be693 100644 --- a/Cabal-QuickCheck/src/Test/QuickCheck/GenericArbitrary.hs +++ b/Cabal-QuickCheck/src/Test/QuickCheck/GenericArbitrary.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE TypeOperators #-} diff --git a/Cabal-syntax/src/Distribution/Compat/Binary.hs b/Cabal-syntax/src/Distribution/Compat/Binary.hs index 4927ec1e69b..ffb1c987e6f 100644 --- a/Cabal-syntax/src/Distribution/Compat/Binary.hs +++ b/Cabal-syntax/src/Distribution/Compat/Binary.hs @@ -1,6 +1,3 @@ -{-# LANGUAGE CPP #-} -{-# LANGUAGE PatternSynonyms #-} - module Distribution.Compat.Binary ( decodeOrFailIO , decodeFileOrFail' diff --git a/Cabal-syntax/src/Distribution/Compat/Exception.hs b/Cabal-syntax/src/Distribution/Compat/Exception.hs index e2a9419e5a5..048ef25158b 100644 --- a/Cabal-syntax/src/Distribution/Compat/Exception.hs +++ b/Cabal-syntax/src/Distribution/Compat/Exception.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE CPP #-} - module Distribution.Compat.Exception ( catchIO , catchExit diff --git a/Cabal-syntax/src/Distribution/Compat/Graph.hs b/Cabal-syntax/src/Distribution/Compat/Graph.hs index 792cc47ce5f..c716563f52a 100644 --- a/Cabal-syntax/src/Distribution/Compat/Graph.hs +++ b/Cabal-syntax/src/Distribution/Compat/Graph.hs @@ -1,15 +1,10 @@ {-# LANGUAGE BangPatterns #-} -{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-} ------------------------------------------------------------------------------ - ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Compat.Graph -- Copyright : (c) Edward Z. Yang 2016 diff --git a/Cabal-syntax/src/Distribution/Compat/MonadFail.hs b/Cabal-syntax/src/Distribution/Compat/MonadFail.hs index 3516aef7e77..4185bca592f 100644 --- a/Cabal-syntax/src/Distribution/Compat/MonadFail.hs +++ b/Cabal-syntax/src/Distribution/Compat/MonadFail.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE CPP #-} - -- | Compatibility layer for "Control.Monad.Fail" module Distribution.Compat.MonadFail (Control.Monad.Fail.MonadFail (fail)) where diff --git a/Cabal-syntax/src/Distribution/Compat/Newtype.hs b/Cabal-syntax/src/Distribution/Compat/Newtype.hs index 56f55a9282b..c4275bed305 100644 --- a/Cabal-syntax/src/Distribution/Compat/Newtype.hs +++ b/Cabal-syntax/src/Distribution/Compat/Newtype.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-} diff --git a/Cabal-syntax/src/Distribution/Compat/Prelude.hs b/Cabal-syntax/src/Distribution/Compat/Prelude.hs index 2d6f92b5da6..59401b5d00e 100644 --- a/Cabal-syntax/src/Distribution/Compat/Prelude.hs +++ b/Cabal-syntax/src/Distribution/Compat/Prelude.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE Trustworthy #-} diff --git a/Cabal-syntax/src/Distribution/Compat/Semigroup.hs b/Cabal-syntax/src/Distribution/Compat/Semigroup.hs index 9ebc7f0f7f4..679cabb69e2 100644 --- a/Cabal-syntax/src/Distribution/Compat/Semigroup.hs +++ b/Cabal-syntax/src/Distribution/Compat/Semigroup.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} diff --git a/Cabal-syntax/src/Distribution/FieldGrammar/Class.hs b/Cabal-syntax/src/Distribution/FieldGrammar/Class.hs index df8b69414f2..fa815a49a5e 100644 --- a/Cabal-syntax/src/Distribution/FieldGrammar/Class.hs +++ b/Cabal-syntax/src/Distribution/FieldGrammar/Class.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE RankNTypes #-} diff --git a/Cabal-syntax/src/Distribution/Fields/ParseResult.hs b/Cabal-syntax/src/Distribution/Fields/ParseResult.hs index aad7de2737a..912ea7fb02f 100644 --- a/Cabal-syntax/src/Distribution/Fields/ParseResult.hs +++ b/Cabal-syntax/src/Distribution/Fields/ParseResult.hs @@ -1,5 +1,4 @@ {-# LANGUAGE BangPatterns #-} -{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-} diff --git a/Cabal-syntax/src/Distribution/PackageDescription/Parsec.hs b/Cabal-syntax/src/Distribution/PackageDescription/Parsec.hs index ae4c0cfec6b..9ea72925f78 100644 --- a/Cabal-syntax/src/Distribution/PackageDescription/Parsec.hs +++ b/Cabal-syntax/src/Distribution/PackageDescription/Parsec.hs @@ -1,11 +1,8 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE Rank2Types #-} {-# LANGUAGE ScopedTypeVariables #-} ------------------------------------------------------------------------------ - -- | -- Module : Distribution.PackageDescription.Parsec -- Copyright : Isaac Jones 2003-2005 diff --git a/Cabal-syntax/src/Distribution/Parsec.hs b/Cabal-syntax/src/Distribution/Parsec.hs index 3bf62597222..d0197616fd6 100644 --- a/Cabal-syntax/src/Distribution/Parsec.hs +++ b/Cabal-syntax/src/Distribution/Parsec.hs @@ -1,5 +1,4 @@ {-# LANGUAGE BangPatterns #-} -{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE RankNTypes #-} diff --git a/Cabal-syntax/src/Distribution/System.hs b/Cabal-syntax/src/Distribution/System.hs index 1903ae40fc8..78a9b3819c9 100644 --- a/Cabal-syntax/src/Distribution/System.hs +++ b/Cabal-syntax/src/Distribution/System.hs @@ -1,10 +1,7 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} ------------------------------------------------------------------------------ - -- | -- Module : Distribution.System -- Copyright : Duncan Coutts 2007-2008 diff --git a/Cabal-syntax/src/Distribution/Utils/Generic.hs b/Cabal-syntax/src/Distribution/Utils/Generic.hs index 997e0132f5a..f56d9db3630 100644 --- a/Cabal-syntax/src/Distribution/Utils/Generic.hs +++ b/Cabal-syntax/src/Distribution/Utils/Generic.hs @@ -1,12 +1,8 @@ {-# LANGUAGE BangPatterns #-} -{-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Utils.Generic -- Copyright : Isaac Jones, Simon Marlow 2003-2004 diff --git a/Cabal-tests/tests/UnitTests/Distribution/CabalSpecVersion.hs b/Cabal-tests/tests/UnitTests/Distribution/CabalSpecVersion.hs index 52fb5c7a689..2a23d3d23f1 100644 --- a/Cabal-tests/tests/UnitTests/Distribution/CabalSpecVersion.hs +++ b/Cabal-tests/tests/UnitTests/Distribution/CabalSpecVersion.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -fno-warn-deprecations #-} module UnitTests.Distribution.CabalSpecVersion (tests) where diff --git a/Cabal-tests/tests/UnitTests/Distribution/Utils/CharSet.hs b/Cabal-tests/tests/UnitTests/Distribution/Utils/CharSet.hs index a7d629ccb08..9efa58cc672 100644 --- a/Cabal-tests/tests/UnitTests/Distribution/Utils/CharSet.hs +++ b/Cabal-tests/tests/UnitTests/Distribution/Utils/CharSet.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} module UnitTests.Distribution.Utils.CharSet where import Prelude hiding (Foldable(..)) diff --git a/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs b/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs index 025440c3598..408e39b7dd1 100644 --- a/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs +++ b/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} module UnitTests.Distribution.Utils.Structured (tests) where import Data.Proxy (Proxy (..)) diff --git a/Cabal-tree-diff/src/Data/TreeDiff/Instances/Cabal.hs b/Cabal-tree-diff/src/Data/TreeDiff/Instances/Cabal.hs index 15fae62649e..a63faa3510c 100644 --- a/Cabal-tree-diff/src/Data/TreeDiff/Instances/Cabal.hs +++ b/Cabal-tree-diff/src/Data/TreeDiff/Instances/Cabal.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -freduction-depth=0 #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Data.TreeDiff.Instances.Cabal () where diff --git a/Cabal-tree-diff/src/Data/TreeDiff/Instances/CabalLanguage.hs b/Cabal-tree-diff/src/Data/TreeDiff/Instances/CabalLanguage.hs index 78f6a7e5aa8..194ea34df80 100644 --- a/Cabal-tree-diff/src/Data/TreeDiff/Instances/CabalLanguage.hs +++ b/Cabal-tree-diff/src/Data/TreeDiff/Instances/CabalLanguage.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -freduction-depth=0 #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Data.TreeDiff.Instances.CabalLanguage () where diff --git a/Cabal-tree-diff/src/Data/TreeDiff/Instances/CabalSPDX.hs b/Cabal-tree-diff/src/Data/TreeDiff/Instances/CabalSPDX.hs index 2926129cb3d..520cbf8c894 100644 --- a/Cabal-tree-diff/src/Data/TreeDiff/Instances/CabalSPDX.hs +++ b/Cabal-tree-diff/src/Data/TreeDiff/Instances/CabalSPDX.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -freduction-depth=0 #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Data.TreeDiff.Instances.CabalSPDX () where diff --git a/Cabal-tree-diff/src/Data/TreeDiff/Instances/CabalVersion.hs b/Cabal-tree-diff/src/Data/TreeDiff/Instances/CabalVersion.hs index 3c2ac454dde..4321fd0bc3d 100644 --- a/Cabal-tree-diff/src/Data/TreeDiff/Instances/CabalVersion.hs +++ b/Cabal-tree-diff/src/Data/TreeDiff/Instances/CabalVersion.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -freduction-depth=0 #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Data.TreeDiff.Instances.CabalVersion where diff --git a/Cabal/src/Distribution/Compat/Async.hs b/Cabal/src/Distribution/Compat/Async.hs index c0052b01185..7615a29a176 100644 --- a/Cabal/src/Distribution/Compat/Async.hs +++ b/Cabal/src/Distribution/Compat/Async.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE CPP #-} - -- | 'Async', yet using 'MVar's. -- -- Adopted from @async@ library diff --git a/Cabal/src/Distribution/Compat/ResponseFile.hs b/Cabal/src/Distribution/Compat/ResponseFile.hs index 8619ae56962..568e659c094 100644 --- a/Cabal/src/Distribution/Compat/ResponseFile.hs +++ b/Cabal/src/Distribution/Compat/ResponseFile.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-} diff --git a/Cabal/src/Distribution/Compat/Stack.hs b/Cabal/src/Distribution/Compat/Stack.hs index 616a66d090d..425e53a990e 100644 --- a/Cabal/src/Distribution/Compat/Stack.hs +++ b/Cabal/src/Distribution/Compat/Stack.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE ImplicitParams #-} {-# LANGUAGE RankNTypes #-} diff --git a/Cabal/src/Distribution/Simple/GHCJS.hs b/Cabal/src/Distribution/Simple/GHCJS.hs index 748855a6bbd..9b9939f2413 100644 --- a/Cabal/src/Distribution/Simple/GHCJS.hs +++ b/Cabal/src/Distribution/Simple/GHCJS.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-} diff --git a/Cabal/src/Distribution/Simple/Setup.hs b/Cabal/src/Distribution/Simple/Setup.hs index dfde4466b30..84cb560246f 100644 --- a/Cabal/src/Distribution/Simple/Setup.hs +++ b/Cabal/src/Distribution/Simple/Setup.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} @@ -6,8 +5,6 @@ {-# LANGUAGE LambdaCase #-} {-# LANGUAGE RankNTypes #-} ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Simple.Setup -- Copyright : Isaac Jones 2003-2004 diff --git a/Cabal/src/Distribution/Simple/Setup/Benchmark.hs b/Cabal/src/Distribution/Simple/Setup/Benchmark.hs index a46073ba434..f33e374c15d 100644 --- a/Cabal/src/Distribution/Simple/Setup/Benchmark.hs +++ b/Cabal/src/Distribution/Simple/Setup/Benchmark.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} @@ -6,8 +5,6 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-} ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Simple.Benchmark -- Copyright : Isaac Jones 2003-2004 diff --git a/Cabal/src/Distribution/Simple/Setup/Build.hs b/Cabal/src/Distribution/Simple/Setup/Build.hs index c0aedc25bd0..8c124027a1e 100644 --- a/Cabal/src/Distribution/Simple/Setup/Build.hs +++ b/Cabal/src/Distribution/Simple/Setup/Build.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} @@ -6,8 +5,6 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-} ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Simple.Setup.Build -- Copyright : Isaac Jones 2003-2004 diff --git a/Cabal/src/Distribution/Simple/Setup/Clean.hs b/Cabal/src/Distribution/Simple/Setup/Clean.hs index 8700e32b4a3..1e5e8038031 100644 --- a/Cabal/src/Distribution/Simple/Setup/Clean.hs +++ b/Cabal/src/Distribution/Simple/Setup/Clean.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} @@ -6,8 +5,6 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-} ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Simple.Setup.Clean -- Copyright : Isaac Jones 2003-2004 diff --git a/Cabal/src/Distribution/Simple/Setup/Common.hs b/Cabal/src/Distribution/Simple/Setup/Common.hs index 0a1422b327f..3baa7d347fd 100644 --- a/Cabal/src/Distribution/Simple/Setup/Common.hs +++ b/Cabal/src/Distribution/Simple/Setup/Common.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} @@ -6,8 +5,6 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-} ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Simple.Setup.Common -- Copyright : Isaac Jones 2003-2004 diff --git a/Cabal/src/Distribution/Simple/Setup/Copy.hs b/Cabal/src/Distribution/Simple/Setup/Copy.hs index 719592b656e..4bdc5b8b21f 100644 --- a/Cabal/src/Distribution/Simple/Setup/Copy.hs +++ b/Cabal/src/Distribution/Simple/Setup/Copy.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} @@ -7,8 +6,6 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-} ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Simple.Setup.Copy -- Copyright : Isaac Jones 2003-2004 diff --git a/Cabal/src/Distribution/Simple/Setup/Global.hs b/Cabal/src/Distribution/Simple/Setup/Global.hs index 540edab9783..fa7994b39ec 100644 --- a/Cabal/src/Distribution/Simple/Setup/Global.hs +++ b/Cabal/src/Distribution/Simple/Setup/Global.hs @@ -1,11 +1,8 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-} ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Simple.Setup.Global -- Copyright : Isaac Jones 2003-2004 diff --git a/Cabal/src/Distribution/Simple/Setup/Haddock.hs b/Cabal/src/Distribution/Simple/Setup/Haddock.hs index 1bfe4b6be76..33bec5e1258 100644 --- a/Cabal/src/Distribution/Simple/Setup/Haddock.hs +++ b/Cabal/src/Distribution/Simple/Setup/Haddock.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} @@ -6,8 +5,6 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-} ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Simple.Setup.Haddock -- Copyright : Isaac Jones 2003-2004 diff --git a/Cabal/src/Distribution/Simple/Setup/Hscolour.hs b/Cabal/src/Distribution/Simple/Setup/Hscolour.hs index 56632d5d2f7..4ee69d99b9b 100644 --- a/Cabal/src/Distribution/Simple/Setup/Hscolour.hs +++ b/Cabal/src/Distribution/Simple/Setup/Hscolour.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} @@ -6,8 +5,6 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-} ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Simple.Setup.Hscolour -- Copyright : Isaac Jones 2003-2004 diff --git a/Cabal/src/Distribution/Simple/Setup/Install.hs b/Cabal/src/Distribution/Simple/Setup/Install.hs index eb909612c6d..b83505a46cd 100644 --- a/Cabal/src/Distribution/Simple/Setup/Install.hs +++ b/Cabal/src/Distribution/Simple/Setup/Install.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} @@ -7,8 +6,6 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-} ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Simple.Setup.Install -- Copyright : Isaac Jones 2003-2004 diff --git a/Cabal/src/Distribution/Simple/Setup/Register.hs b/Cabal/src/Distribution/Simple/Setup/Register.hs index f7b9e80e007..e768ca94887 100644 --- a/Cabal/src/Distribution/Simple/Setup/Register.hs +++ b/Cabal/src/Distribution/Simple/Setup/Register.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} @@ -6,8 +5,6 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-} ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Simple.Setup.Register -- Copyright : Isaac Jones 2003-2004 diff --git a/Cabal/src/Distribution/Simple/Setup/Repl.hs b/Cabal/src/Distribution/Simple/Setup/Repl.hs index 423aaa47cf8..1c3e1578e0e 100644 --- a/Cabal/src/Distribution/Simple/Setup/Repl.hs +++ b/Cabal/src/Distribution/Simple/Setup/Repl.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} @@ -6,8 +5,6 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-} ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Simple.Setup.Repl -- Copyright : Isaac Jones 2003-2004 diff --git a/Cabal/src/Distribution/Simple/Setup/SDist.hs b/Cabal/src/Distribution/Simple/Setup/SDist.hs index 218d1e9f209..2e560dcc6b9 100644 --- a/Cabal/src/Distribution/Simple/Setup/SDist.hs +++ b/Cabal/src/Distribution/Simple/Setup/SDist.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} @@ -6,8 +5,6 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-} ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Simple.Setup.SDist -- Copyright : Isaac Jones 2003-2004 diff --git a/Cabal/src/Distribution/Simple/Setup/Test.hs b/Cabal/src/Distribution/Simple/Setup/Test.hs index 45f77c938e0..6e5da7d7643 100644 --- a/Cabal/src/Distribution/Simple/Setup/Test.hs +++ b/Cabal/src/Distribution/Simple/Setup/Test.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} @@ -6,8 +5,6 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-} ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Simple.Test -- Copyright : Isaac Jones 2003-2004 diff --git a/Cabal/src/Distribution/Utils/MapAccum.hs b/Cabal/src/Distribution/Utils/MapAccum.hs index 31f62d7d02f..d141649ff83 100644 --- a/Cabal/src/Distribution/Utils/MapAccum.hs +++ b/Cabal/src/Distribution/Utils/MapAccum.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE CPP #-} - module Distribution.Utils.MapAccum (mapAccumM) where import Distribution.Compat.Prelude diff --git a/Cabal/src/Distribution/Utils/Progress.hs b/Cabal/src/Distribution/Utils/Progress.hs index a2c17b69113..292dfdc64cd 100644 --- a/Cabal/src/Distribution/Utils/Progress.hs +++ b/Cabal/src/Distribution/Utils/Progress.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveFunctor #-} -- Note: This module was copied from cabal-install. diff --git a/cabal-install/src/Distribution/Client/Check.hs b/cabal-install/src/Distribution/Client/Check.hs index f8c1d456751..cc119324a49 100644 --- a/cabal-install/src/Distribution/Client/Check.hs +++ b/cabal-install/src/Distribution/Client/Check.hs @@ -1,9 +1,3 @@ -{-# LANGUAGE CPP #-} - ------------------------------------------------------------------------------ - ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Client.Check -- Copyright : (c) Lennart Kolmodin 2008 diff --git a/cabal-install/src/Distribution/Client/CmdOutdated.hs b/cabal-install/src/Distribution/Client/CmdOutdated.hs index ed40a1a85e6..ab5e7cc21a0 100644 --- a/cabal-install/src/Distribution/Client/CmdOutdated.hs +++ b/cabal-install/src/Distribution/Client/CmdOutdated.hs @@ -1,11 +1,6 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE RecordWildCards #-} ------------------------------------------------------------------------------ - ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Client.CmdOutdated -- Maintainer : cabal-devel@haskell.org diff --git a/cabal-install/src/Distribution/Client/CmdPath.hs b/cabal-install/src/Distribution/Client/CmdPath.hs index 8ca8d6181f1..0d3e538a625 100644 --- a/cabal-install/src/Distribution/Client/CmdPath.hs +++ b/cabal-install/src/Distribution/Client/CmdPath.hs @@ -1,12 +1,7 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE RecordWildCards #-} ------------------------------------------------------------------------------ - ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Client.CmdPath -- Maintainer : cabal-devel@haskell.org diff --git a/cabal-install/src/Distribution/Client/CmdUpdate.hs b/cabal-install/src/Distribution/Client/CmdUpdate.hs index c388ba39871..c438ed6b2cf 100644 --- a/cabal-install/src/Distribution/Client/CmdUpdate.hs +++ b/cabal-install/src/Distribution/Client/CmdUpdate.hs @@ -1,6 +1,3 @@ -{-# LANGUAGE CPP #-} -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TupleSections #-} diff --git a/cabal-install/src/Distribution/Client/Configure.hs b/cabal-install/src/Distribution/Client/Configure.hs index 6634f874071..0051be9e399 100644 --- a/cabal-install/src/Distribution/Client/Configure.hs +++ b/cabal-install/src/Distribution/Client/Configure.hs @@ -1,10 +1,5 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} ------------------------------------------------------------------------------ - ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Client.Configure -- Copyright : (c) David Himmelstrup 2005, diff --git a/cabal-install/src/Distribution/Client/FileMonitor.hs b/cabal-install/src/Distribution/Client/FileMonitor.hs index 61607dd1996..6883b6b107d 100644 --- a/cabal-install/src/Distribution/Client/FileMonitor.hs +++ b/cabal-install/src/Distribution/Client/FileMonitor.hs @@ -1,5 +1,4 @@ {-# LANGUAGE BangPatterns #-} -{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} diff --git a/cabal-install/src/Distribution/Client/GenBounds.hs b/cabal-install/src/Distribution/Client/GenBounds.hs index 935db05fa43..d5fb7a5b240 100644 --- a/cabal-install/src/Distribution/Client/GenBounds.hs +++ b/cabal-install/src/Distribution/Client/GenBounds.hs @@ -1,9 +1,3 @@ -{-# LANGUAGE CPP #-} - ------------------------------------------------------------------------------ - ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Client.GenBounds -- Copyright : (c) Doug Beardsley 2015 diff --git a/cabal-install/src/Distribution/Client/IndexUtils.hs b/cabal-install/src/Distribution/Client/IndexUtils.hs index d3a6c86a3fe..505a8ba1190 100644 --- a/cabal-install/src/Distribution/Client/IndexUtils.hs +++ b/cabal-install/src/Distribution/Client/IndexUtils.hs @@ -1,5 +1,4 @@ {-# LANGUAGE BangPatterns #-} -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE GADTs #-} @@ -8,10 +7,6 @@ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} ------------------------------------------------------------------------------ - ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Client.IndexUtils -- Copyright : (c) Duncan Coutts 2008 diff --git a/cabal-install/src/Distribution/Client/InstallSymlink.hs b/cabal-install/src/Distribution/Client/InstallSymlink.hs index 7a470843779..4d650a0a8c1 100644 --- a/cabal-install/src/Distribution/Client/InstallSymlink.hs +++ b/cabal-install/src/Distribution/Client/InstallSymlink.hs @@ -1,12 +1,6 @@ -{-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE RecordWildCards #-} ------------------------------------------------------------------------------ - ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Client.InstallSymlink -- Copyright : (c) Duncan Coutts 2008 diff --git a/cabal-install/src/Distribution/Client/Main.hs b/cabal-install/src/Distribution/Client/Main.hs index e6278a5ef9a..efaabff8837 100644 --- a/cabal-install/src/Distribution/Client/Main.hs +++ b/cabal-install/src/Distribution/Client/Main.hs @@ -1,12 +1,7 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE ScopedTypeVariables #-} ------------------------------------------------------------------------------ - ------------------------------------------------------------------------------ - -- | -- Module : Main -- Copyright : (c) David Himmelstrup 2005 diff --git a/cabal-install/src/Distribution/Client/Manpage.hs b/cabal-install/src/Distribution/Client/Manpage.hs index fa543239b79..42480f33d9e 100644 --- a/cabal-install/src/Distribution/Client/Manpage.hs +++ b/cabal-install/src/Distribution/Client/Manpage.hs @@ -1,7 +1,3 @@ -{-# LANGUAGE CPP #-} - ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Client.Manpage -- Copyright : (c) Maciek Makowski 2015 diff --git a/cabal-install/src/Distribution/Client/ProjectBuilding.hs b/cabal-install/src/Distribution/Client/ProjectBuilding.hs index 4d7bde7fc55..27e097b5586 100644 --- a/cabal-install/src/Distribution/Client/ProjectBuilding.hs +++ b/cabal-install/src/Distribution/Client/ProjectBuilding.hs @@ -1,5 +1,4 @@ {-# LANGUAGE BangPatterns #-} -{-# LANGUAGE CPP #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE NamedFieldPuns #-} diff --git a/cabal-install/src/Distribution/Client/ProjectConfig.hs b/cabal-install/src/Distribution/Client/ProjectConfig.hs index 6390ab75e11..042e5c9187a 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE RecordWildCards #-} diff --git a/cabal-install/src/Distribution/Client/Sandbox.hs b/cabal-install/src/Distribution/Client/Sandbox.hs index d4523d784c5..732856a3d8f 100644 --- a/cabal-install/src/Distribution/Client/Sandbox.hs +++ b/cabal-install/src/Distribution/Client/Sandbox.hs @@ -1,12 +1,7 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-} ------------------------------------------------------------------------------ - ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Client.Sandbox -- Maintainer : cabal-devel@haskell.org diff --git a/cabal-install/src/Distribution/Client/Security/HTTP.hs b/cabal-install/src/Distribution/Client/Security/HTTP.hs index 010ee830224..9eafc7bdae2 100644 --- a/cabal-install/src/Distribution/Client/Security/HTTP.hs +++ b/cabal-install/src/Distribution/Client/Security/HTTP.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE RecordWildCards #-} diff --git a/cabal-install/src/Distribution/Client/Targets.hs b/cabal-install/src/Distribution/Client/Targets.hs index 1a37c9c73b9..a4a9188b57a 100644 --- a/cabal-install/src/Distribution/Client/Targets.hs +++ b/cabal-install/src/Distribution/Client/Targets.hs @@ -1,14 +1,7 @@ -{-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveFoldable #-} -{-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE ScopedTypeVariables #-} ------------------------------------------------------------------------------ - ------------------------------------------------------------------------------ - -- | -- Module : Distribution.Client.Targets -- Copyright : (c) Duncan Coutts 2011 diff --git a/cabal-install/src/Distribution/Deprecated/ParseUtils.hs b/cabal-install/src/Distribution/Deprecated/ParseUtils.hs index e1d389ac9aa..e432b0a2333 100644 --- a/cabal-install/src/Distribution/Deprecated/ParseUtils.hs +++ b/cabal-install/src/Distribution/Deprecated/ParseUtils.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE Rank2Types #-} ----------------------------------------------------------------------------- -- This module is meant to be local-only to Distribution... diff --git a/cabal-install/src/Distribution/Deprecated/ReadP.hs b/cabal-install/src/Distribution/Deprecated/ReadP.hs index 2e6f9c189b8..69e1c38006e 100644 --- a/cabal-install/src/Distribution/Deprecated/ReadP.hs +++ b/cabal-install/src/Distribution/Deprecated/ReadP.hs @@ -1,10 +1,5 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE GADTs #-} ------------------------------------------------------------------------------ - ------------------------------------------------------------------------------ - -- | -- -- Module : Distribution.Deprecated.ReadP diff --git a/cabal-install/tests/UnitTests/Distribution/Client/FileMonitor.hs b/cabal-install/tests/UnitTests/Distribution/Client/FileMonitor.hs index 77f84108563..d14f87d06da 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/FileMonitor.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/FileMonitor.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE CPP #-} - module UnitTests.Distribution.Client.FileMonitor (tests) where import Distribution.Parsec (simpleParsec) diff --git a/cabal-install/tests/UnitTests/Distribution/Client/Glob.hs b/cabal-install/tests/UnitTests/Distribution/Client/Glob.hs index c51ce7e2448..38d245a045c 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/Glob.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/Glob.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module UnitTests.Distribution.Client.Glob (tests) where diff --git a/cabal-install/tests/UnitTests/Distribution/Client/UserConfig.hs b/cabal-install/tests/UnitTests/Distribution/Client/UserConfig.hs index 91ed61c86cd..a9cb90c64f1 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/UserConfig.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/UserConfig.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE CPP #-} - module UnitTests.Distribution.Client.UserConfig ( tests ) where diff --git a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/QuickCheck.hs b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/QuickCheck.hs index 2b308d770ae..d53729e1a21 100644 --- a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/QuickCheck.hs +++ b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/QuickCheck.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE StandaloneDeriving #-} {-# OPTIONS_GHC -fno-warn-orphans #-} diff --git a/cabal-install/tests/UnitTests/Distribution/Solver/Types/OptionalStanza.hs b/cabal-install/tests/UnitTests/Distribution/Solver/Types/OptionalStanza.hs index 3e2959b01f2..61f94ea28b4 100644 --- a/cabal-install/tests/UnitTests/Distribution/Solver/Types/OptionalStanza.hs +++ b/cabal-install/tests/UnitTests/Distribution/Solver/Types/OptionalStanza.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE CPP #-} - module UnitTests.Distribution.Solver.Types.OptionalStanza ( tests ) where diff --git a/cabal-testsuite/main/cabal-tests.hs b/cabal-testsuite/main/cabal-tests.hs index b565eea3e60..d4531d269d9 100644 --- a/cabal-testsuite/main/cabal-tests.hs +++ b/cabal-testsuite/main/cabal-tests.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE NondecreasingIndentation #-} {-# LANGUAGE PatternGuards #-} {-# LANGUAGE ScopedTypeVariables #-} diff --git a/cabal-testsuite/src/Test/Cabal/TestCode.hs b/cabal-testsuite/src/Test/Cabal/TestCode.hs index ddaa0239465..1809f5e1239 100644 --- a/cabal-testsuite/src/Test/Cabal/TestCode.hs +++ b/cabal-testsuite/src/Test/Cabal/TestCode.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} From e4a532ceb3f6ec8cb98b10b534536c1dd4d63b95 Mon Sep 17 00:00:00 2001 From: Matthew Pickering Date: Fri, 14 Mar 2025 12:23:02 +0000 Subject: [PATCH 51/87] Add test for #10717 The test checks that if you change directory when running a test executable that you can still access datafiles. --- .../PackageTests/DataDirSetupTest/Setup.hs | 2 + .../DataDirSetupTest/cabal.test.hs | 5 ++ .../DataDirSetupTest/datadir-test.cabal | 27 +++++++++++ .../DataDirSetupTest/src/MyLib.hs | 6 +++ .../DataDirSetupTest/test/DataDirTest.hs | 48 +++++++++++++++++++ .../DataDirSetupTest/testdata/sample.txt | 1 + 6 files changed, 89 insertions(+) create mode 100644 cabal-testsuite/PackageTests/DataDirSetupTest/Setup.hs create mode 100644 cabal-testsuite/PackageTests/DataDirSetupTest/cabal.test.hs create mode 100644 cabal-testsuite/PackageTests/DataDirSetupTest/datadir-test.cabal create mode 100644 cabal-testsuite/PackageTests/DataDirSetupTest/src/MyLib.hs create mode 100644 cabal-testsuite/PackageTests/DataDirSetupTest/test/DataDirTest.hs create mode 100644 cabal-testsuite/PackageTests/DataDirSetupTest/testdata/sample.txt diff --git a/cabal-testsuite/PackageTests/DataDirSetupTest/Setup.hs b/cabal-testsuite/PackageTests/DataDirSetupTest/Setup.hs new file mode 100644 index 00000000000..9a994af677b --- /dev/null +++ b/cabal-testsuite/PackageTests/DataDirSetupTest/Setup.hs @@ -0,0 +1,2 @@ +import Distribution.Simple +main = defaultMain diff --git a/cabal-testsuite/PackageTests/DataDirSetupTest/cabal.test.hs b/cabal-testsuite/PackageTests/DataDirSetupTest/cabal.test.hs new file mode 100644 index 00000000000..e779c5cb62b --- /dev/null +++ b/cabal-testsuite/PackageTests/DataDirSetupTest/cabal.test.hs @@ -0,0 +1,5 @@ +import Test.Cabal.Prelude + +main = setupAndCabalTest $ do + setup_build ["--enable-tests"] + setup "test" ["--show-details=streaming"] diff --git a/cabal-testsuite/PackageTests/DataDirSetupTest/datadir-test.cabal b/cabal-testsuite/PackageTests/DataDirSetupTest/datadir-test.cabal new file mode 100644 index 00000000000..b17ed9835fe --- /dev/null +++ b/cabal-testsuite/PackageTests/DataDirSetupTest/datadir-test.cabal @@ -0,0 +1,27 @@ +cabal-version: 2.4 +name: datadir-test +version: 0.1.0.0 +synopsis: Test for datadir environment variable +license: BSD-3-Clause +author: Cabal Test Suite +maintainer: cabal-dev@haskell.org +build-type: Simple + +data-files: + testdata/sample.txt + +library + exposed-modules: MyLib + build-depends: base >=4.7 && <5 + other-modules: Paths_datadir_test + hs-source-dirs: src + default-language: Haskell2010 + +test-suite datadir-test + type: exitcode-stdio-1.0 + main-is: DataDirTest.hs + hs-source-dirs: test + build-depends: base >=4.7 && <5, + datadir-test, + directory + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/DataDirSetupTest/src/MyLib.hs b/cabal-testsuite/PackageTests/DataDirSetupTest/src/MyLib.hs new file mode 100644 index 00000000000..5aa2db01bdb --- /dev/null +++ b/cabal-testsuite/PackageTests/DataDirSetupTest/src/MyLib.hs @@ -0,0 +1,6 @@ +module MyLib (getDataFileName) where + +import qualified Paths_datadir_test as Paths + +getDataFileName :: FilePath -> IO FilePath +getDataFileName = Paths.getDataFileName diff --git a/cabal-testsuite/PackageTests/DataDirSetupTest/test/DataDirTest.hs b/cabal-testsuite/PackageTests/DataDirSetupTest/test/DataDirTest.hs new file mode 100644 index 00000000000..1c5d14b7f0b --- /dev/null +++ b/cabal-testsuite/PackageTests/DataDirSetupTest/test/DataDirTest.hs @@ -0,0 +1,48 @@ +{-# LANGUAGE ScopedTypeVariables #-} +module Main where + +import Control.Monad (when) +import System.Directory (createDirectory, doesFileExist, getCurrentDirectory, setCurrentDirectory) +import System.Environment (getEnv) +import System.Exit (exitFailure, exitSuccess) +import System.IO (hPutStrLn, stderr) +import MyLib (getDataFileName) +import Control.Exception + +main :: IO () +main = do + -- Print the datadir environment variable + dataDirEnv <- getEnv "datadir_test_datadir" + putStrLn $ "datadir_test_datadir: " ++ dataDirEnv + + -- Get path to our test data file + dataFilePath <- getDataFileName "testdata/sample.txt" + putStrLn $ "Data file path: " ++ dataFilePath + + -- Check that we can access the file + fileExists <- doesFileExist dataFilePath + putStrLn $ "File exists: " ++ show fileExists + + -- Create a subdirectory and change into it + currentDir <- getCurrentDirectory + putStrLn $ "Current directory: " ++ currentDir + createDirectory "subdir" `catch` \(_ :: SomeException) -> pure () + setCurrentDirectory "subdir" + newDir <- getCurrentDirectory + putStrLn $ "New directory: " ++ newDir + + -- Try to access the data file again after changing directory + dataFilePathAfterCd <- getDataFileName "testdata/sample.txt" + putStrLn $ "Data file path after cd: " ++ dataFilePathAfterCd + + fileExistsAfterCd <- doesFileExist dataFilePathAfterCd + putStrLn $ "File exists after cd: " ++ show fileExistsAfterCd + + -- Exit with error if we can't find the file + when (not fileExistsAfterCd) $ do + hPutStrLn stderr "ERROR: Could not find data file after changing directory!" + hPutStrLn stderr $ "datadir_test_datadir was set to: " ++ dataDirEnv + exitFailure + + putStrLn "SUCCESS: Data file found correctly even after changing directory!" + exitSuccess diff --git a/cabal-testsuite/PackageTests/DataDirSetupTest/testdata/sample.txt b/cabal-testsuite/PackageTests/DataDirSetupTest/testdata/sample.txt new file mode 100644 index 00000000000..464ea37bec0 --- /dev/null +++ b/cabal-testsuite/PackageTests/DataDirSetupTest/testdata/sample.txt @@ -0,0 +1 @@ +This is test data for the datadir test. From bf2a09ad8c016f23bc6ad8abeaa40c7b62692d4b Mon Sep 17 00:00:00 2001 From: Matthew Pickering Date: Fri, 14 Mar 2025 12:55:51 +0000 Subject: [PATCH 52/87] Backport: Set to an absolute path Ticket #10717 points out that the _datadir environment variable should be set to an absolute path since the test executables may change directory during their invocation. This is easily fixed by using the absoluteWorkingDirLBI function, which was introduced in 027bddfcdf3ba298376c60be1ccf664ebc394cec, However, in order to perform the fix in a PVP compliant manner, you have to write it in this horrible way of adding a new function and leaving the old broken function in it's place. Fixes #10717 --- Cabal/src/Distribution/Simple/Bench.hs | 6 +- Cabal/src/Distribution/Simple/Build.hs | 73 +++++++++++++------ Cabal/src/Distribution/Simple/Haddock.hs | 3 +- Cabal/src/Distribution/Simple/Test.hs | 6 +- cabal-install/src/Distribution/Client/Run.hs | 7 +- .../DataDirSetupTest/cabal.cabal.out | 13 ++++ .../PackageTests/DataDirSetupTest/cabal.out | 13 ++++ changelog.d/pr-10828.md | 10 +++ 8 files changed, 100 insertions(+), 31 deletions(-) create mode 100644 cabal-testsuite/PackageTests/DataDirSetupTest/cabal.cabal.out create mode 100644 cabal-testsuite/PackageTests/DataDirSetupTest/cabal.out create mode 100644 changelog.d/pr-10828.md diff --git a/Cabal/src/Distribution/Simple/Bench.hs b/Cabal/src/Distribution/Simple/Bench.hs index dc4cf97a5bb..fbc71d43bcb 100644 --- a/Cabal/src/Distribution/Simple/Bench.hs +++ b/Cabal/src/Distribution/Simple/Bench.hs @@ -26,7 +26,7 @@ import Prelude () import Distribution.Compat.Environment import qualified Distribution.PackageDescription as PD import Distribution.Pretty -import Distribution.Simple.Build (addInternalBuildTools) +import Distribution.Simple.Build (addInternalBuildToolsFixed) import Distribution.Simple.BuildPaths import Distribution.Simple.Compiler import Distribution.Simple.Errors @@ -58,6 +58,7 @@ bench -- ^ flags sent to benchmark -> IO () bench args pkg_descr lbi flags = do + curDir <- LBI.absoluteWorkingDirLBI lbi let verbosity = fromFlag $ benchmarkVerbosity flags benchmarkNames = args pkgBenchmarks = PD.benchmarks pkg_descr @@ -72,7 +73,8 @@ bench args pkg_descr lbi flags = do lbi { -- Include any build-tool-depends on build tools internal to the current package. LBI.withPrograms = - addInternalBuildTools + addInternalBuildToolsFixed + (Just curDir) pkg_descr lbi (benchmarkBuildInfo bm) diff --git a/Cabal/src/Distribution/Simple/Build.hs b/Cabal/src/Distribution/Simple/Build.hs index e153c25b9d7..9c257eb071c 100644 --- a/Cabal/src/Distribution/Simple/Build.hs +++ b/Cabal/src/Distribution/Simple/Build.hs @@ -48,6 +48,7 @@ module Distribution.Simple.Build -- * Handling of internal build tools , addInternalBuildTools + , addInternalBuildToolsFixed ) where import Distribution.Compat.Prelude @@ -188,13 +189,15 @@ build_setupHooks -- dumped. dumpBuildInfo verbosity distPref (configDumpBuildInfo (configFlags lbi)) pkg_descr lbi flags + curDir <- absoluteWorkingDirLBI lbi + -- Now do the actual building (\f -> foldM_ f (installedPkgs lbi) componentsToBuild) $ \index target -> do let comp = targetComponent target clbi = targetCLBI target bi = componentBuildInfo comp -- Include any build-tool-depends on build tools internal to the current package. - progs' = addInternalBuildTools pkg_descr lbi bi (withPrograms lbi) + progs' = addInternalBuildToolsFixed (Just curDir) pkg_descr lbi bi (withPrograms lbi) lbi' = lbi { withPrograms = progs' @@ -376,17 +379,20 @@ repl_setupHooks internalPackageDB <- createInternalPackageDB verbosity lbi distPref - let lbiForComponent comp lbi' = - lbi' - { withPackageDB = withPackageDB lbi ++ [internalPackageDB] - , withPrograms = - -- Include any build-tool-depends on build tools internal to the current package. - addInternalBuildTools - pkg_descr - lbi' - (componentBuildInfo comp) - (withPrograms lbi') - } + let lbiForComponent comp lbi' = do + curDir <- absoluteWorkingDirLBI lbi' + return $ + lbi' + { withPackageDB = withPackageDB lbi' ++ [internalPackageDB] + , withPrograms = + -- Include any build-tool-depends on build tools internal to the current package. + addInternalBuildToolsFixed + (Just curDir) + pkg_descr + lbi' + (componentBuildInfo comp) + (withPrograms lbi') + } runPreBuildHooks :: LocalBuildInfo -> TargetInfo -> IO () runPreBuildHooks lbi2 tgt = let inputs = @@ -404,7 +410,7 @@ repl_setupHooks [ do let clbi = targetCLBI subtarget comp = targetComponent subtarget - lbi' = lbiForComponent comp lbi + lbi' <- lbiForComponent comp lbi preBuildComponent runPreBuildHooks verbosity lbi' subtarget buildComponent (mempty{buildCommonFlags = mempty{setupVerbosity = toFlag verbosity}}) @@ -421,7 +427,7 @@ repl_setupHooks -- REPL for target components let clbi = targetCLBI target comp = targetComponent target - lbi' = lbiForComponent comp lbi + lbi' <- lbiForComponent comp lbi preBuildComponent runPreBuildHooks verbosity lbi' target replComponent flags verbosity pkg_descr lbi' suffixHandlers comp clbi distPref @@ -925,13 +931,18 @@ createInternalPackageDB verbosity lbi distPref = do -- directory environment variable for the current package to the current -- 'progOverrideEnv', so that any programs configured from now on will be -- able to invoke these build tools. -addInternalBuildTools - :: PackageDescription +-- +-- NB: This function will be removed in the next Cabal major version +-- (use addInternalBuildTools instead). This function is introduced solely for +-- backporting in a PVP compliant way. +addInternalBuildToolsFixed + :: Maybe (AbsolutePath (Dir Pkg)) + -> PackageDescription -> LocalBuildInfo -> BuildInfo -> ProgramDb -> ProgramDb -addInternalBuildTools pkg lbi bi progs = +addInternalBuildToolsFixed mpwd pkg lbi bi progs = prependProgramSearchPathNoLogging internalToolPaths [pkgDataDirVar] @@ -950,13 +961,27 @@ addInternalBuildTools pkg lbi bi progs = buildDir lbi makeRelativePathEx (toolName' toolName' <.> exeExtension (hostPlatform lbi)) ] - mbWorkDir = mbWorkDirLBI lbi - rawDataDir = dataDir pkg - dataDirPath - | null $ getSymbolicPath rawDataDir = - interpretSymbolicPath mbWorkDir sameDirectory - | otherwise = - interpretSymbolicPath mbWorkDir rawDataDir + + dataDirPath :: FilePath + dataDirPath = + case mpwd of + -- This is an absolute path, so if a process changes directory, it can still + -- find the datadir (#10717) + Just pwd -> interpretSymbolicPathAbsolute pwd (dataDir pkg) + -- This is just wrong, but implemented for PVP compliance.. + Nothing -> interpretSymbolicPathCWD (dataDir pkg) + +{-# WARNING addInternalBuildTools "This function is broken, use addInternalBuildToolsFixed instead" #-} + +-- | A backwards compatible (broken) version of `addInternalBuildTools`, do not +-- use this function. Use 'addInternalBuildToolsFixed' instead. +addInternalBuildTools + :: PackageDescription + -> LocalBuildInfo + -> BuildInfo + -> ProgramDb + -> ProgramDb +addInternalBuildTools = addInternalBuildToolsFixed Nothing -- TODO: build separate libs in separate dirs so that we can build -- multiple libs, e.g. for 'LibTest' library-style test suites diff --git a/Cabal/src/Distribution/Simple/Haddock.hs b/Cabal/src/Distribution/Simple/Haddock.hs index ba025a85549..1769a994cdb 100644 --- a/Cabal/src/Distribution/Simple/Haddock.hs +++ b/Cabal/src/Distribution/Simple/Haddock.hs @@ -336,12 +336,13 @@ haddock_setupHooks createInternalPackageDB verbosity lbi (flag $ setupDistPref . haddockCommonFlags) (\f -> foldM_ f (installedPkgs lbi) targets') $ \index target -> do + curDir <- absoluteWorkingDirLBI lbi let component = targetComponent target clbi = targetCLBI target bi = componentBuildInfo component -- Include any build-tool-depends on build tools internal to the current package. - progs' = addInternalBuildTools pkg_descr lbi bi (withPrograms lbi) + progs' = addInternalBuildToolsFixed (Just curDir) pkg_descr lbi bi (withPrograms lbi) lbi' = lbi { withPrograms = progs' diff --git a/Cabal/src/Distribution/Simple/Test.hs b/Cabal/src/Distribution/Simple/Test.hs index 5b7a6daa718..d9b2c7557f0 100644 --- a/Cabal/src/Distribution/Simple/Test.hs +++ b/Cabal/src/Distribution/Simple/Test.hs @@ -27,7 +27,7 @@ import Prelude () import qualified Distribution.PackageDescription as PD import Distribution.Pretty -import Distribution.Simple.Build (addInternalBuildTools) +import Distribution.Simple.Build (addInternalBuildToolsFixed) import Distribution.Simple.Compiler import Distribution.Simple.Hpc import Distribution.Simple.InstallDirs @@ -70,6 +70,7 @@ test -- ^ flags sent to test -> IO () test args pkg_descr lbi0 flags = do + curDir <- LBI.absoluteWorkingDirLBI lbi0 let common = testCommonFlags flags verbosity = fromFlag $ setupVerbosity common distPref = fromFlag $ setupDistPref common @@ -95,7 +96,8 @@ test args pkg_descr lbi0 flags = do lbi { withPrograms = -- Include any build-tool-depends on build tools internal to the current package. - addInternalBuildTools + addInternalBuildToolsFixed + (Just curDir) pkg_descr lbi (PD.testBuildInfo suite) diff --git a/cabal-install/src/Distribution/Client/Run.hs b/cabal-install/src/Distribution/Client/Run.hs index 7ff4c8bb5e8..447d7cf1b1e 100644 --- a/cabal-install/src/Distribution/Client/Run.hs +++ b/cabal-install/src/Distribution/Client/Run.hs @@ -28,13 +28,14 @@ import Distribution.PackageDescription , TestSuite (..) ) import Distribution.Simple (PackageDBX (..)) -import Distribution.Simple.Build (addInternalBuildTools) +import Distribution.Simple.Build (addInternalBuildToolsFixed) import Distribution.Simple.BuildPaths (exeExtension) import Distribution.Simple.Compiler (CompilerFlavor (..), compilerFlavor) import Distribution.Simple.Flag (fromFlag) import Distribution.Simple.LocalBuildInfo ( ComponentName (..) , LocalBuildInfo (..) + , absoluteWorkingDirLBI , buildDir , depLibraryPaths , interpretSymbolicPathLBI @@ -143,6 +144,7 @@ splitRunArgs verbosity lbi args = -- | Run a given executable. run :: Verbosity -> LocalBuildInfo -> Executable -> [String] -> IO () run verbosity lbi exe exeArgs = do + curDir <- absoluteWorkingDirLBI lbi let distPref = fromFlag $ configDistPref $ configFlags lbi buildPref = buildDir lbi pkg_descr = localPkgDescr lbi @@ -154,7 +156,8 @@ run verbosity lbi exe exeArgs = do { withPackageDB = withPackageDB lbi ++ [SpecificPackageDB internalPkgDb] , -- Include any build-tool-depends on build tools internal to the current package. withPrograms = - addInternalBuildTools + addInternalBuildToolsFixed + (Just curDir) pkg_descr lbi (buildInfo exe) diff --git a/cabal-testsuite/PackageTests/DataDirSetupTest/cabal.cabal.out b/cabal-testsuite/PackageTests/DataDirSetupTest/cabal.cabal.out new file mode 100644 index 00000000000..f1e923b5ca8 --- /dev/null +++ b/cabal-testsuite/PackageTests/DataDirSetupTest/cabal.cabal.out @@ -0,0 +1,13 @@ +# Setup configure +Configuring datadir-test-0.1.0.0... +# Setup build +Preprocessing library for datadir-test-0.1.0.0... +Building library for datadir-test-0.1.0.0... +Preprocessing test suite 'datadir-test' for datadir-test-0.1.0.0... +Building test suite 'datadir-test' for datadir-test-0.1.0.0... +# Setup test +Running 1 test suites... +Test suite datadir-test: RUNNING... +Test suite datadir-test: PASS +Test suite logged to: cabal.cabal.dist/work/dist/test/datadir-test-0.1.0.0-datadir-test.log +1 of 1 test suites (1 of 1 test cases) passed. diff --git a/cabal-testsuite/PackageTests/DataDirSetupTest/cabal.out b/cabal-testsuite/PackageTests/DataDirSetupTest/cabal.out new file mode 100644 index 00000000000..eadbc3aeac3 --- /dev/null +++ b/cabal-testsuite/PackageTests/DataDirSetupTest/cabal.out @@ -0,0 +1,13 @@ +# Setup configure +Configuring datadir-test-0.1.0.0... +# Setup build +Preprocessing library for datadir-test-0.1.0.0... +Building library for datadir-test-0.1.0.0... +Preprocessing test suite 'datadir-test' for datadir-test-0.1.0.0... +Building test suite 'datadir-test' for datadir-test-0.1.0.0... +# Setup test +Running 1 test suites... +Test suite datadir-test: RUNNING... +Test suite datadir-test: PASS +Test suite logged to: cabal.dist/work/dist/test/datadir-test-0.1.0.0-datadir-test.log +1 of 1 test suites (1 of 1 test cases) passed. diff --git a/changelog.d/pr-10828.md b/changelog.d/pr-10828.md new file mode 100644 index 00000000000..9e78761441a --- /dev/null +++ b/changelog.d/pr-10828.md @@ -0,0 +1,10 @@ +--- +synopsis: Set _datadir to an absolute path when running tests +packages: [Cabal] +prs: 10828 +issues: [10717] +--- + +Fix a regression where `_datadir` was set to a relative path. This +caused issues when running testsuites which changed the working directory and +accessed datafiles. From 3df4158aff9325d239f97243b7461a3471d45f3a Mon Sep 17 00:00:00 2001 From: brandon s allbery kf8nh Date: Sat, 12 Oct 2024 20:43:24 -0400 Subject: [PATCH 53/87] kill a `continue-on-error` It doesn't do what we really want, nor really does anything else that isn't an unwieldy-at-best stack of conditions. (cherry picked from commit b5ad3c4c63869ebd498c0e51ae3d1c30fe9e3640) --- .github/workflows/validate.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index ae35656d5a4..93bb9b9633d 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -245,6 +245,12 @@ jobs: echo End "$test" done exit $rc + # The above ensures all the tests get run, for a single platform+ghc. + # Trying to ensure they run for *all* combinations but still fail + # at the end seems to be extremely difficult at best. It's doable, + # but it requires a continuously growing stack of conditions and + # one possibly nightmarish final conditional. 'fail-fast' gets us + # partway there, at least, but is still imperfect. validate-old-ghcs: name: Validate old ghcs ${{ matrix.extra-ghc }} @@ -304,8 +310,9 @@ jobs: - name: "Validate lib-suite-extras --extra-hc ghc-${{ matrix.extra-ghc }}" env: EXTRA_GHC: ghc-${{ matrix.extra-ghc }} - continue-on-error: true run: sh validate.sh ${{ env.COMMON_FLAGS }} --lib-only -s lib-suite-extras --extra-hc "${{ env.EXTRA_GHC }}" + # See the comment above about running all tests but still failing if one + # of them does; it also applies here. build-alpine: name: Build statically linked using alpine From dde61f91bc7bc32c4d18e608ee236f614f09c93f Mon Sep 17 00:00:00 2001 From: brandon s allbery kf8nh Date: Fri, 6 Dec 2024 11:45:01 -0500 Subject: [PATCH 54/87] OpenBSD `--strip-unneeded` strips too much Brought to our attention by maerwald; see https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/ports/lang/ghc/patches/patch-libraries_Cabal_Cabal_Distribution_Simple_Program_Strip_hs. (cherry picked from commit cd4bd1f6e8701e12e157898354fa4e33535a4001) --- Cabal/src/Distribution/Simple/Program/Strip.hs | 4 ++++ changelog.d/pr-10616 | 11 +++++++++++ 2 files changed, 15 insertions(+) create mode 100644 changelog.d/pr-10616 diff --git a/Cabal/src/Distribution/Simple/Program/Strip.hs b/Cabal/src/Distribution/Simple/Program/Strip.hs index bb43e5ed47d..af7bbfc9754 100644 --- a/Cabal/src/Distribution/Simple/Program/Strip.hs +++ b/Cabal/src/Distribution/Simple/Program/Strip.hs @@ -58,6 +58,10 @@ stripLib verbosity (Platform arch os) progdb path = do IOS -> return () AIX -> return () Solaris -> return () + OpenBSD -> + -- '--strip-unneeded' sometimes strips too much on OpenBSD. + -- -- See https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/ports/lang/ghc/patches/patch-libraries_Cabal_Cabal_Distribution_Simple_Program_Strip_hs + return () Windows -> -- Stripping triggers a bug in 'strip.exe' for -- libraries with lots identically named modules. See diff --git a/changelog.d/pr-10616 b/changelog.d/pr-10616 new file mode 100644 index 00000000000..89d6bc1d985 --- /dev/null +++ b/changelog.d/pr-10616 @@ -0,0 +1,11 @@ +--- +synopsis: "OpenBSD `--strip-unneeded` sometimes strips too much" +packages: [Cabal] +prs: 10616 +--- + +OpenBSD's `--strip-unneeded` thinks some symbols are unneeded that are in fact +needed when C bits are involved, so suppress its use. + +Taken from the OpenBSD ports repo (https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/ports/lang/ghc/patches/patch-libraries_Cabal_Cabal_Distribution_Simple_Program_Strip_hs); +brought to our attention by maerwald. From 63f66173d1f477f3f21fc819ccdd279c10c64802 Mon Sep 17 00:00:00 2001 From: PHO Date: Sun, 12 May 2024 13:03:31 +0900 Subject: [PATCH 55/87] Suppress ghc-pkg warnings emitted when an empty packages is being registered When a package contains a library that has no modules, "./Setup register" tries to register the library with fields "haddock-interfaces:" and "haddock-html:" pointing at non-existent files or directories, and "ghc-pkg register" warns about them. To suppress the warnings prevent these fields from being generated when there are no modules. (cherry picked from commit 65218ced42a0e9c598f177546fbfd4b11ee14184) --- Cabal/src/Distribution/Simple/Register.hs | 4 ++-- .../HaddockEmptyLib/empty/empty.cabal | 6 ++++++ .../PackageTests/HaddockEmptyLib/setup.cabal.out | 13 +++++++++++++ .../PackageTests/HaddockEmptyLib/setup.out | 13 +++++++++++++ .../PackageTests/HaddockEmptyLib/setup.test.hs | 6 ++++++ changelog.d/pr-9997 | 15 +++++++++++++++ 6 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 cabal-testsuite/PackageTests/HaddockEmptyLib/empty/empty.cabal create mode 100644 cabal-testsuite/PackageTests/HaddockEmptyLib/setup.cabal.out create mode 100644 cabal-testsuite/PackageTests/HaddockEmptyLib/setup.out create mode 100644 cabal-testsuite/PackageTests/HaddockEmptyLib/setup.test.hs create mode 100644 changelog.d/pr-9997 diff --git a/Cabal/src/Distribution/Simple/Register.hs b/Cabal/src/Distribution/Simple/Register.hs index 90704e68269..70ee283dd61 100644 --- a/Cabal/src/Distribution/Simple/Register.hs +++ b/Cabal/src/Distribution/Simple/Register.hs @@ -549,8 +549,8 @@ generalInstalledPackageInfo adjustRelIncDirs pkg abi_hash lib lbi clbi installDi , IPI.ldOptions = ldOptions bi , IPI.frameworks = map getSymbolicPath $ frameworks bi , IPI.frameworkDirs = map getSymbolicPath $ extraFrameworkDirs bi - , IPI.haddockInterfaces = [haddockdir installDirs haddockLibraryPath pkg lib] - , IPI.haddockHTMLs = [htmldir installDirs] + , IPI.haddockInterfaces = [haddockdir installDirs haddockLibraryPath pkg lib | hasModules] + , IPI.haddockHTMLs = [htmldir installDirs | hasModules] , IPI.pkgRoot = Nothing , IPI.libVisibility = libVisibility lib } diff --git a/cabal-testsuite/PackageTests/HaddockEmptyLib/empty/empty.cabal b/cabal-testsuite/PackageTests/HaddockEmptyLib/empty/empty.cabal new file mode 100644 index 00000000000..e848e5ab2d6 --- /dev/null +++ b/cabal-testsuite/PackageTests/HaddockEmptyLib/empty/empty.cabal @@ -0,0 +1,6 @@ +name: emptyLib +Cabal-version: >= 1.2 +version: 1.0 +build-type: Simple + +Library diff --git a/cabal-testsuite/PackageTests/HaddockEmptyLib/setup.cabal.out b/cabal-testsuite/PackageTests/HaddockEmptyLib/setup.cabal.out new file mode 100644 index 00000000000..90a9995cfb2 --- /dev/null +++ b/cabal-testsuite/PackageTests/HaddockEmptyLib/setup.cabal.out @@ -0,0 +1,13 @@ +# Setup configure +Configuring emptyLib-1.0... +# Setup build +Preprocessing library for emptyLib-1.0... +Building library for emptyLib-1.0... +# Setup haddock +Preprocessing library for emptyLib-1.0... +Running Haddock on library for emptyLib-1.0... +Warning: Haddocks are being requested, but there aren't any modules given to create documentation for. +# Setup copy +Installing library in +# Setup register +Registering library for emptyLib-1.0... diff --git a/cabal-testsuite/PackageTests/HaddockEmptyLib/setup.out b/cabal-testsuite/PackageTests/HaddockEmptyLib/setup.out new file mode 100644 index 00000000000..90a9995cfb2 --- /dev/null +++ b/cabal-testsuite/PackageTests/HaddockEmptyLib/setup.out @@ -0,0 +1,13 @@ +# Setup configure +Configuring emptyLib-1.0... +# Setup build +Preprocessing library for emptyLib-1.0... +Building library for emptyLib-1.0... +# Setup haddock +Preprocessing library for emptyLib-1.0... +Running Haddock on library for emptyLib-1.0... +Warning: Haddocks are being requested, but there aren't any modules given to create documentation for. +# Setup copy +Installing library in +# Setup register +Registering library for emptyLib-1.0... diff --git a/cabal-testsuite/PackageTests/HaddockEmptyLib/setup.test.hs b/cabal-testsuite/PackageTests/HaddockEmptyLib/setup.test.hs new file mode 100644 index 00000000000..c91d5216275 --- /dev/null +++ b/cabal-testsuite/PackageTests/HaddockEmptyLib/setup.test.hs @@ -0,0 +1,6 @@ +import Test.Cabal.Prelude +-- Test install when the library is empty, for #9997 +main = setupAndCabalTest $ + withPackageDb $ + withDirectory "empty" $ + setup_install_with_docs [] diff --git a/changelog.d/pr-9997 b/changelog.d/pr-9997 new file mode 100644 index 00000000000..592e29c0963 --- /dev/null +++ b/changelog.d/pr-9997 @@ -0,0 +1,15 @@ +synopsis: Suppress ghc-pkg warnings emitted when an empty packages is being registered +packages: Cabal +prs: #9997 + +description: { + +When a package contains a library that has no modules, `./Setup register` +tries to register the library with fields `haddock-interfaces:` and +`haddock-html:` pointing at non-existent files or directories, and `ghc-pkg +register` warns about them. + +To suppress the warnings prevent these fields from being generated when +there are no modules. + +} From e9247a22b9d5444b2e0065416ea6a8053f69244e Mon Sep 17 00:00:00 2001 From: Rebecca Turner Date: Fri, 4 Oct 2024 15:56:32 -0700 Subject: [PATCH 56/87] Make `cabal-testsuite` filterable with `--pattern` This adds the `Tasty` `-p`/`--pattern` argument to the `cabal-testsuite` tests, making it possible to filter `cabal-testsuite` tests just like the other test suites: ./validate.sh -s build -s cli-suite -p HaddockKeepTmpsCustom (cherry picked from commit 2d7b84d9fa36ff24c1ec5bef2456a1774991e61c) --- cabal-testsuite/cabal-testsuite.cabal | 2 ++ cabal-testsuite/main/cabal-tests.hs | 44 ++++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/cabal-testsuite/cabal-testsuite.cabal b/cabal-testsuite/cabal-testsuite.cabal index 731cd374821..061f36f129c 100644 --- a/cabal-testsuite/cabal-testsuite.cabal +++ b/cabal-testsuite/cabal-testsuite.cabal @@ -104,6 +104,8 @@ executable cabal-tests -- dependencies specific to exe:cabal-tests , clock ^>= 0.7.2 || ^>=0.8 , directory + , tasty + , containers build-tool-depends: cabal-testsuite:setup default-extensions: TypeOperators diff --git a/cabal-testsuite/main/cabal-tests.hs b/cabal-testsuite/main/cabal-tests.hs index d4531d269d9..8f75bbda487 100644 --- a/cabal-testsuite/main/cabal-tests.hs +++ b/cabal-testsuite/main/cabal-tests.hs @@ -22,7 +22,19 @@ import Control.Exception import Control.Monad import GHC.Conc (numCapabilities) import Data.List +import Data.Proxy (Proxy(Proxy)) +import qualified Data.Sequence as Seq (fromList) import Text.Printf +import qualified Test.Tasty.Options as Tasty + ( OptionSet + , OptionDescription (Option) + , lookupOption + ) +import qualified Test.Tasty.Runners as Tasty + ( optionParser + , TestPattern + , testPatternMatches + ) import qualified System.Clock as Clock import System.IO import System.FilePath @@ -71,7 +83,8 @@ data MainArgs = MainArgs { mainArgQuiet :: Bool, mainArgDistDir :: Maybe FilePath, mainArgCabalSpec :: Maybe CabalLibSpec, - mainCommonArgs :: CommonArgs + mainCommonArgs :: CommonArgs, + mainTastyArgs :: Tasty.OptionSet } data CabalLibSpec = BootCabalLib | InTreeCabalLib FilePath FilePath | SpecificCabalLib String FilePath @@ -116,6 +129,17 @@ mainArgParser = MainArgs <> metavar "DIR")) <*> optional cabalLibSpecParser <*> commonArgParser + <*> tastyArgParser + +tastyArgParser :: Parser Tasty.OptionSet +tastyArgParser = + let (warnings, parser) = + Tasty.optionParser + [ Tasty.Option (Proxy @Tasty.TestPattern) + ] + in if null warnings + then parser + else error $ unlines ("Failed to create parser for Tasty CLI options:" : warnings) -- Unpack and build a specific released version of Cabal and Cabal-syntax libraries buildCabalLibsProject :: String -> Verbosity -> Maybe FilePath -> FilePath -> IO [FilePath] @@ -181,6 +205,7 @@ main = do -- Parse arguments. N.B. 'helper' adds the option `--help`. args <- execParser $ info (mainArgParser <**> helper) mempty let verbosity = if mainArgVerbose args then verbose else normal + testPattern = Tasty.lookupOption @Tasty.TestPattern (mainTastyArgs args) pkg_dbs <- -- Not path to cabal-install so we're not going to run cabal-install tests so we @@ -261,7 +286,7 @@ main = do -- NB: getDirectoryContentsRecursive is lazy IO, but it -- doesn't handle directories disappearing gracefully. Fix -- this! - (single_tests, multi_tests) <- evaluate (partitionTests test_scripts) + (single_tests, multi_tests) <- evaluate (partitionTests testPattern test_scripts) let all_tests = multi_tests ++ single_tests margin = maximum (map length all_tests) + 2 hPutStrLn stderr $ "tests to run: " ++ show (length all_tests) @@ -378,10 +403,19 @@ main = do findTests :: IO [FilePath] findTests = getDirectoryContentsRecursive "." -partitionTests :: [FilePath] -> ([FilePath], [FilePath]) -partitionTests = go [] [] +-- | Partition a list of paths into a tuple of test paths and multi-test paths. +-- +-- Non-test paths and test paths that don't match the given `Tasty.TestPattern` are dropped. +partitionTests :: Tasty.TestPattern -> [FilePath] -> ([FilePath], [FilePath]) +partitionTests testPattern paths = + go [] [] paths where - go ts ms [] = (ts, ms) + -- Filter a list, keeping only paths that match the @pattern@. + keepPatternMatches = filter (Tasty.testPatternMatches testPattern . toTastyPath) + + toTastyPath path = Seq.fromList $ splitDirectories path + + go ts ms [] = (keepPatternMatches ts, keepPatternMatches ms) go ts ms (f:fs) = -- NB: Keep this synchronized with isTestFile case takeExtensions f of From bf6556e599203b9e159e3ee95c39a66b6f40584a Mon Sep 17 00:00:00 2001 From: Rebecca Turner Date: Fri, 8 Nov 2024 11:01:42 -0800 Subject: [PATCH 57/87] Update cabal-testsuite README.md (cherry picked from commit 33b767848179d4f0ff314f88ef2a1a17f830197d) --- cabal-testsuite/README.md | 53 ++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/cabal-testsuite/README.md b/cabal-testsuite/README.md index 73b39d56801..2c3d17e6150 100644 --- a/cabal-testsuite/README.md +++ b/cabal-testsuite/README.md @@ -1,18 +1,21 @@ cabal-testsuite is a suite of integration tests for Cabal-based frameworks. -How to run ----------- +# How to run 1. Build `cabal-testsuite` (`cabal build cabal-testsuite:cabal-tests`) 2. Run the `cabal-tests` executable. It will scan for all tests in your current directory and subdirectories and run them. - To run a specific set of tests, use `cabal-tests --with-cabal=CABALBIN PATH ...`. - (e.g. `cabal run cabal-testsuite:cabal-tests -- --with-cabal=cabal cabal-testsuite/PackageTests/TestOptions/setup.test.hs`) - You can control parallelism using the `-j` flag. There are a few useful flags: +* To run a specific set of tests, pass the path to a `.test.hs` file to run or + use the `-p`/`--pattern` flag to filter tests. + + See the ["Selecting tests"](#selecting-tests) section below for more details. + +* `-j INT` controls the number of threads used for running tests. + * `--with-cabal PATH` can be used to specify the path of a `cabal-install` executable. IF YOU DO NOT SPECIFY THIS FLAG, CABAL INSTALL TESTS WILL NOT RUN. @@ -28,6 +31,28 @@ There are a few useful flags: * `--keep-tmp-files` can be used to keep the temporary directories that tests are run in. +## Selecting tests + +To run a specific set of tests, use `cabal-tests --with-cabal=CABALBIN PATH ...`, e.g.: + +``` +cabal run cabal-testsuite:cabal-tests -- \ + --with-cabal=cabal \ + cabal-testsuite/PackageTests/TestOptions/setup.test.hs +``` + +Alternatively, use `-p`/`--pattern` to select tests dynamically: + +``` +cabal run cabal-testsuite:cabal-tests -- \ + --with-cabal=cabal \ + --pattern "/TestOptions/" +``` + +See [the documentation for Tasty pattern +syntax](https://hackage.haskell.org/package/tasty#patterns) for more +information. + ## Which Cabal library version do cabal-install tests use? By default the `cabal-install` tests will use the `Cabal` library which comes with @@ -74,8 +99,7 @@ components have broken doctests our CI currently checks that `Cabal-syntax` and `Cabal` doctests pass via `make doctest-install && make doctest` (you can use this `make`-based workflow too). -How to write ------------- +# How to write If you learn better by example, just look at the tests that live in `cabal-testsuite/PackageTests`; if you `git log -p`, you can @@ -155,8 +179,7 @@ allow multiple tests to be defined in one file but run in parallel; at the moment, these just indicate long running tests that should be run early (to avoid straggling). -Frequently asked questions --------------------------- +# Frequently asked questions For all of these answers, to see examples of the functions in question, grep the test suite. @@ -223,8 +246,7 @@ long before editing a file, in order for file system timestamp resolution to pick it up. Use `withDelay` and `delay` prior to making a modification. -Hermetic tests --------------- +# Hermetic tests Tests are run in a fresh temporary system directory. This attempts to isolate the tests from anything specific to do with your directory structure. In particular @@ -235,8 +257,7 @@ tests from anything specific to do with your directory structure. In particular * You must `git add` all files which are relevant to the test, otherwise they will not be copied. -Design notes ------------- +# Design notes This is the second rewrite of the integration testing framework. The primary goal was to use Haskell as the test language (letting us take @@ -296,8 +317,7 @@ figure out how to get out the threading setting, and then spawn that many GHCi servers to service the running threads. Improvements welcome. -Expect tests ------------- +# Expect tests An expect test (aka _golden test_) is a test where we read out the output of the test @@ -366,8 +386,7 @@ Some other notes: on the output for the string you're looking for. Try to be deterministic, but sometimes it's not (easily) possible. -Non-goals ---------- +# Non-goals Here are some things we do not currently plan on supporting: From 27ed84db8c3173ba81a47e4c6a9d881fc5dd18c2 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 27 Mar 2025 09:54:42 +0000 Subject: [PATCH 58/87] Backport #10493: Remove text for sandbox in replCommand (#10863) * remove text for sandbox in replCommand (cherry picked from commit e3823b529337ddc0b038c3f498535d7e3582c4fa) * delete white-space after '\n' in a string (cherry picked from commit bdeb4e6755fdcb1553773341fd6764e201f79fce) * Add changelog (cherry picked from commit 5913791bb9a0b5e04cd97ababa99f7ad36b87967) --------- Co-authored-by: Sdywolf --- Cabal/src/Distribution/Simple/Setup/Repl.hs | 3 +-- changelog.d/pr-10493 | 11 +++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 changelog.d/pr-10493 diff --git a/Cabal/src/Distribution/Simple/Setup/Repl.hs b/Cabal/src/Distribution/Simple/Setup/Repl.hs index 1c3e1578e0e..4b73cb34b99 100644 --- a/Cabal/src/Distribution/Simple/Setup/Repl.hs +++ b/Cabal/src/Distribution/Simple/Setup/Repl.hs @@ -129,8 +129,7 @@ replCommand progDb = , commandDescription = Just $ \pname -> wrapText $ "If the current directory contains no package, ignores COMPONENT " - ++ "parameters and opens an interactive interpreter session; if a " - ++ "sandbox is present, its package database will be used.\n" + ++ "parameters and opens an interactive interpreter session.\n" ++ "\n" ++ "Otherwise, (re)configures with the given or default flags, and " ++ "loads the interpreter with the relevant modules. For executables, " diff --git a/changelog.d/pr-10493 b/changelog.d/pr-10493 new file mode 100644 index 00000000000..ec4beabe2df --- /dev/null +++ b/changelog.d/pr-10493 @@ -0,0 +1,11 @@ +synopsis: Remove descriptions for sandbox in replCommand +packages: Cabal +prs: #10493 +issues: #10482 +significance: significant + +description: { + +- Text provided by `Setup.hs repl --help` contained outdated information concerning sandbox, which have now been removed. + +} \ No newline at end of file From 7c1d6984def02b3fc9c284fe89a432a968ce84e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9cate=20Moonlight?= Date: Sat, 4 Jan 2025 22:38:32 +0100 Subject: [PATCH 59/87] cabal-install 3.14.1.1 release notes (cherry picked from commit c465f978f9433808cb7f4a7d40c61c95ad341858) --- release-notes/cabal-install-3.14.1.1.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 release-notes/cabal-install-3.14.1.1.md diff --git a/release-notes/cabal-install-3.14.1.1.md b/release-notes/cabal-install-3.14.1.1.md new file mode 100644 index 00000000000..594bcb701ca --- /dev/null +++ b/release-notes/cabal-install-3.14.1.1.md @@ -0,0 +1,5 @@ +## cabal-install 3.14.1.1 changelog + +### Significant changes + +- Support for GHC 9.12 [10671](https://github.com/haskell/cabal/pull/10671) From ba80c83e3590c206e56ce5aa805de7975f42cd05 Mon Sep 17 00:00:00 2001 From: Matthew Pickering Date: Wed, 8 Jan 2025 14:06:57 +0000 Subject: [PATCH 60/87] Cabal: Honour -working-dir flag when running test executables A simple fix to run the test executable in the `-working-dir`. Fixes #10704 (cherry picked from commit a7f94e789ebdacbf265b91706065ea13384cf562) --- Cabal/src/Distribution/Simple/Test/ExeV10.hs | 8 ++++-- .../PackageTests/TestChangeDir/cabal.project | 3 +++ .../PackageTests/TestChangeDir/cabal.test.hs | 6 +++++ .../regression-simple/CHANGELOG.md | 5 ++++ .../regression-simple/bench/Main.hs | 4 +++ .../regression-simple/do-i-exist.txt | 1 + .../regression-simple/regression-simple.cabal | 27 +++++++++++++++++++ .../regression-simple/test/Main.hs | 4 +++ changelog.d/pr-10725 | 12 +++++++++ 9 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 cabal-testsuite/PackageTests/TestChangeDir/cabal.project create mode 100644 cabal-testsuite/PackageTests/TestChangeDir/cabal.test.hs create mode 100644 cabal-testsuite/PackageTests/TestChangeDir/regression-simple/CHANGELOG.md create mode 100644 cabal-testsuite/PackageTests/TestChangeDir/regression-simple/bench/Main.hs create mode 100644 cabal-testsuite/PackageTests/TestChangeDir/regression-simple/do-i-exist.txt create mode 100644 cabal-testsuite/PackageTests/TestChangeDir/regression-simple/regression-simple.cabal create mode 100644 cabal-testsuite/PackageTests/TestChangeDir/regression-simple/test/Main.hs create mode 100644 changelog.d/pr-10725 diff --git a/Cabal/src/Distribution/Simple/Test/ExeV10.hs b/Cabal/src/Distribution/Simple/Test/ExeV10.hs index a90ce833703..8e20efffe51 100644 --- a/Cabal/src/Distribution/Simple/Test/ExeV10.hs +++ b/Cabal/src/Distribution/Simple/Test/ExeV10.hs @@ -125,13 +125,17 @@ runTest pkg_descr lbi clbi hpcMarkupInfo flags suite = do -- drain the output. evaluate (force logText) + let mbWorkDir = + interpretSymbolicPathCWD + <$> flagToMaybe (setupWorkingDir (testCommonFlags flags)) + (exit, logText) <- case testWrapper flags of Flag path -> rawSystemIOWithEnvAndAction verbosity path (cmd : opts) - Nothing + mbWorkDir (Just shellEnv') getLogText -- these handles are automatically closed @@ -143,7 +147,7 @@ runTest pkg_descr lbi clbi hpcMarkupInfo flags suite = do verbosity cmd opts - Nothing + mbWorkDir (Just shellEnv') getLogText -- these handles are automatically closed diff --git a/cabal-testsuite/PackageTests/TestChangeDir/cabal.project b/cabal-testsuite/PackageTests/TestChangeDir/cabal.project new file mode 100644 index 00000000000..410dbc32d08 --- /dev/null +++ b/cabal-testsuite/PackageTests/TestChangeDir/cabal.project @@ -0,0 +1,3 @@ +packages: regression-simple + +tests: True diff --git a/cabal-testsuite/PackageTests/TestChangeDir/cabal.test.hs b/cabal-testsuite/PackageTests/TestChangeDir/cabal.test.hs new file mode 100644 index 00000000000..2aaf2ac3933 --- /dev/null +++ b/cabal-testsuite/PackageTests/TestChangeDir/cabal.test.hs @@ -0,0 +1,6 @@ +import Test.Cabal.Prelude + +main = cabalTest . recordMode DoNotRecord $ do + -- Building a target that contains whitespace + cabal "test" ["regression-simple"] + cabal "bench" ["regression-simple"] diff --git a/cabal-testsuite/PackageTests/TestChangeDir/regression-simple/CHANGELOG.md b/cabal-testsuite/PackageTests/TestChangeDir/regression-simple/CHANGELOG.md new file mode 100644 index 00000000000..728a34daa36 --- /dev/null +++ b/cabal-testsuite/PackageTests/TestChangeDir/regression-simple/CHANGELOG.md @@ -0,0 +1,5 @@ +# Revision history for regression-simple + +## 0.1.0.0 -- YYYY-mm-dd + +* First version. Released on an unsuspecting world. diff --git a/cabal-testsuite/PackageTests/TestChangeDir/regression-simple/bench/Main.hs b/cabal-testsuite/PackageTests/TestChangeDir/regression-simple/bench/Main.hs new file mode 100644 index 00000000000..d4be9546a21 --- /dev/null +++ b/cabal-testsuite/PackageTests/TestChangeDir/regression-simple/bench/Main.hs @@ -0,0 +1,4 @@ +module Main (main) where + +main :: IO () +main = readFile "do-i-exist.txt" >>= print diff --git a/cabal-testsuite/PackageTests/TestChangeDir/regression-simple/do-i-exist.txt b/cabal-testsuite/PackageTests/TestChangeDir/regression-simple/do-i-exist.txt new file mode 100644 index 00000000000..044c92dc6a5 --- /dev/null +++ b/cabal-testsuite/PackageTests/TestChangeDir/regression-simple/do-i-exist.txt @@ -0,0 +1 @@ +I exist diff --git a/cabal-testsuite/PackageTests/TestChangeDir/regression-simple/regression-simple.cabal b/cabal-testsuite/PackageTests/TestChangeDir/regression-simple/regression-simple.cabal new file mode 100644 index 00000000000..527908d1f16 --- /dev/null +++ b/cabal-testsuite/PackageTests/TestChangeDir/regression-simple/regression-simple.cabal @@ -0,0 +1,27 @@ +cabal-version: 3.14 +name: regression-simple +version: 0.1.0.0 +license: NONE +author: Matthew Pickering +maintainer: matthewtpickering@gmail.com +build-type: Simple +extra-doc-files: CHANGELOG.md + +common warnings + ghc-options: -Wall + +test-suite regression-simple-test + import: warnings + default-language: Haskell2010 + type: exitcode-stdio-1.0 + hs-source-dirs: test + main-is: Main.hs + build-depends: base + +benchmark regression-simple-bench + import: warnings + default-language: Haskell2010 + type: exitcode-stdio-1.0 + hs-source-dirs: bench + main-is: Main.hs + build-depends: base diff --git a/cabal-testsuite/PackageTests/TestChangeDir/regression-simple/test/Main.hs b/cabal-testsuite/PackageTests/TestChangeDir/regression-simple/test/Main.hs new file mode 100644 index 00000000000..d4be9546a21 --- /dev/null +++ b/cabal-testsuite/PackageTests/TestChangeDir/regression-simple/test/Main.hs @@ -0,0 +1,4 @@ +module Main (main) where + +main :: IO () +main = readFile "do-i-exist.txt" >>= print diff --git a/changelog.d/pr-10725 b/changelog.d/pr-10725 new file mode 100644 index 00000000000..07ebe4e263f --- /dev/null +++ b/changelog.d/pr-10725 @@ -0,0 +1,12 @@ +synopsis: Honour the `-working-dir` flag when executing testsuite executables. +packages: Cabal +prs: #10725 +issues: #10704 +significance: + +description: { + +Honour the `-working-dir` flag when executing testsuite executables. This fixes a +regression in Cabal-3.14.0.0. + +} From a6c4858a3e05a7a6a4bbab8491ad121d0b682fd1 Mon Sep 17 00:00:00 2001 From: Artem Pelenitsyn Date: Thu, 27 Mar 2025 09:27:33 -0400 Subject: [PATCH 61/87] remove the *-skip workflows (fix #10868) this essentially reverts https://github.com/haskell/cabal/pull/9355 (cherry picked from commit 718a816ce8fccb49222164bb7ec10c7e98d21187) --- .github/workflows/bootstrap.skip.yml | 48 -------------------------- .github/workflows/bootstrap.yml | 20 ----------- .github/workflows/check-sdist.skip.yml | 48 -------------------------- .github/workflows/check-sdist.yml | 17 --------- .github/workflows/validate.skip.yml | 48 -------------------------- .github/workflows/validate.yml | 20 ----------- 6 files changed, 201 deletions(-) delete mode 100644 .github/workflows/bootstrap.skip.yml delete mode 100644 .github/workflows/check-sdist.skip.yml delete mode 100644 .github/workflows/validate.skip.yml diff --git a/.github/workflows/bootstrap.skip.yml b/.github/workflows/bootstrap.skip.yml deleted file mode 100644 index 40ccb0ae9bc..00000000000 --- a/.github/workflows/bootstrap.skip.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: Bootstrap Skip - -# This Workflow is special and contains a workaround for a known limitation of GitHub CI. -# -# The problem: We don't want to run the "bootstrap" jobs on PRs which contain only changes -# to the docs, since these jobs take a long time to complete without providing any benefit. -# We therefore use path-filtering in the workflow triggers for the bootstrap jobs, namely -# "paths-ignore: doc/**". But the "Bootstrap post job" is a required job, therefore a PR cannot -# be merged unless the "Bootstrap post job" completes succesfully, which it doesn't do if we -# filter it out. -# -# The solution: We use a second job with the same name which always returns the exit code 0. -# The logic implemented for "required" workflows accepts if 1) at least one job with that name -# runs through, AND 2) If multiple jobs of that name exist, then all jobs of that name have to -# finish successfully. -on: - push: - paths: - - 'doc/**' - - '**/README.md' - - 'CONTRIBUTING.md' - - "changelog.d/**" - # only top level for these, because various test packages have them too - - "*/ChangeLog.md" - - "*/changelog.md" - - "release-notes/**" - branches: - - master - pull_request: - paths: - - 'doc/**' - - '**/README.md' - - 'CONTRIBUTING.md' - - "changelog.d/**" - - "*/ChangeLog.md" - - "*/changelog.md" - - "release-notes/**" - release: - types: - - created - -jobs: - bootstrap-post-job: - if: always() - name: Bootstrap post job - runs-on: ubuntu-latest - steps: - - run: exit 0 diff --git a/.github/workflows/bootstrap.yml b/.github/workflows/bootstrap.yml index 640802e5403..9436a24cb6f 100644 --- a/.github/workflows/bootstrap.yml +++ b/.github/workflows/bootstrap.yml @@ -5,31 +5,11 @@ concurrency: group: ${{ github.ref }}-${{ github.workflow }} cancel-in-progress: true -# Note: This workflow file contains the required job "Bootstrap post job". We are using path filtering -# here to ignore PRs which only change documentation. This can cause a problem, see the workflow file -# "bootstrap.skip.yml" for a description of the problem and the solution provided in that file. on: push: - paths-ignore: - - 'doc/**' - - '**/README.md' - - 'CONTRIBUTING.md' - - "changelog.d/**" - # only top level for these, because various test packages have them too - - "*/ChangeLog.md" - - "*/changelog.md" - - "release-notes/**" branches: - master pull_request: - paths-ignore: - - 'doc/**' - - '**/README.md' - - 'CONTRIBUTING.md' - - "changelog.d/**" - - "*/ChangeLog.md" - - "*/changelog.md" - - "release-notes/**" release: types: - created diff --git a/.github/workflows/check-sdist.skip.yml b/.github/workflows/check-sdist.skip.yml deleted file mode 100644 index 522c9896f0d..00000000000 --- a/.github/workflows/check-sdist.skip.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: Check sdist Skip - -# This Workflow is special and contains a workaround for a known limitation of GitHub CI. -# -# The problem: We don't want to run the "check sdist" jobs on PRs which contain only changes -# to the docs, since these jobs take a long time to complete without providing any benefit. -# We therefore use path-filtering in the workflow triggers for the check sdist jobs, namely -# "paths-ignore: doc/**". But the "Check sdist post job" is a required job, therefore a PR cannot -# be merged unless the "Bootstrap post job" completes succesfully, which it doesn't do if we -# filter it out. -# -# The solution: We use a second job with the same name which always returns the exit code 0. -# The logic implemented for "required" workflows accepts if 1) at least one job with that name -# runs through, AND 2) If multiple jobs of that name exist, then all jobs of that name have to -# finish successfully. -on: - push: - paths: - - 'doc/**' - - '**/README.md' - - 'CONTRIBUTING.md' - - "changelog.d/**" - # only top level for these, because various test packages have them too - - "*/ChangeLog.md" - - "*/changelog.md" - - "release-notes/**" - branches: - - master - pull_request: - paths: - - 'doc/**' - - '**/README.md' - - 'CONTRIBUTING.md' - - "changelog.d/**" - - "*/ChangeLog.md" - - "*/changelog.md" - - "release-notes/**" - release: - types: - - created - -jobs: - check-sdist-post-job: - if: always() - name: Check sdist post job - runs-on: ubuntu-latest - steps: - - run: exit 0 diff --git a/.github/workflows/check-sdist.yml b/.github/workflows/check-sdist.yml index 70d76cdfe77..a0455d0f003 100644 --- a/.github/workflows/check-sdist.yml +++ b/.github/workflows/check-sdist.yml @@ -7,26 +7,9 @@ concurrency: on: push: - paths-ignore: - - "doc/**" - - "**/README.md" - - "CONTRIBUTING.md" - - "changelog.d/**" - # only top level for these, because various test packages have them too - - "*/ChangeLog.md" - - "*/changelog.md" - - "release-notes/**" branches: - master pull_request: - paths-ignore: - - "doc/**" - - "**/README.md" - - "CONTRIBUTING.md" - - "changelog.d/**" - - "*/ChangeLog.md" - - "*/changelog.md" - - "release-notes/**" release: types: - created diff --git a/.github/workflows/validate.skip.yml b/.github/workflows/validate.skip.yml deleted file mode 100644 index f4aa50ae191..00000000000 --- a/.github/workflows/validate.skip.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: Validate Skip - -# This Workflow is special and contains a workaround for a known limitation of GitHub CI. -# -# The problem: We don't want to run the "validate" jobs on PRs which contain only changes -# to the docs, since these jobs take a long time to complete without providing any benefit. -# We therefore use path-filtering in the workflow triggers for the validate jobs, namely -# "paths-ignore: doc/**". But the "Validate post job" is a required job, therefore a PR cannot -# be merged unless the "Validate post job" completes succesfully, which it doesn't do if we -# filter it out. -# -# The solution: We use a second job with the same name which always returns the exit code 0. -# The logic implemented for "required" workflows accepts if 1) at least one job with that name -# runs through, AND 2) If multiple jobs of that name exist, then all jobs of that name have to -# finish successfully. -on: - push: - paths: - - 'doc/**' - - '**/README.md' - - 'CONTRIBUTING.md' - - "changelog.d/**" - # only top level for these, because various test packages have them too - - "*/ChangeLog.md" - - "*/changelog.md" - - "release-notes/**" - branches: - - master - pull_request: - paths: - - 'doc/**' - - '**/README.md' - - 'CONTRIBUTING.md' - - "changelog.d/**" - - "*/ChangeLog.md" - - "*/changelog.md" - - "release-notes/**" - release: - types: - - created - -jobs: - validate-post-job: - if: always() - name: Validate post job - runs-on: ubuntu-latest - steps: - - run: exit 0 diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 93bb9b9633d..6a4af0abbd8 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -5,31 +5,11 @@ concurrency: group: ${{ github.ref }}-${{ github.workflow }} cancel-in-progress: true -# Note: This workflow file contains the required job "Validate post job". We are using path filtering -# here to ignore PRs which only change documentation. This can cause a problem, see the workflow file -# "validate.skip.yml" for a description of the problem and the solution provided in that file. on: push: - paths-ignore: - - "doc/**" - - "**/README.md" - - "CONTRIBUTING.md" - - "changelog.d/**" - # only top level for these, because various test packages have them too - - "*/ChangeLog.md" - - "*/changelog.md" - - "release-notes/**" branches: - master pull_request: - paths-ignore: - - "doc/**" - - "**/README.md" - - "CONTRIBUTING.md" - - "changelog.d/**" - - "*/ChangeLog.md" - - "*/changelog.md" - - "release-notes/**" release: types: - created From 4646e1d2476fcb3d762cb04a128500c9daf922ca Mon Sep 17 00:00:00 2001 From: Artem Pelenitsyn Date: Wed, 8 Jan 2025 22:35:29 -0500 Subject: [PATCH 62/87] cabal-install.cabal: bump upper bound for random (cherry picked from commit 9cf21b8c2434f380775baf85a5ca1f4408f568ee) --- cabal-install/cabal-install.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index e3250ffa751..ff04a08dbb1 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -236,7 +236,7 @@ library network-uri >= 2.6.0.2 && < 2.7, pretty >= 1.1 && < 1.2, process >= 1.2.3.0 && < 1.7, - random >= 1.2 && < 1.3, + random >= 1.2 && < 1.4, stm >= 2.0 && < 2.6, tar >= 0.5.0.3 && < 0.7, time >= 1.5.0.1 && < 1.15, From bbbec9b599cceccf81122081b7b1ed7a9f30e117 Mon Sep 17 00:00:00 2001 From: Javier Sagredo Date: Thu, 9 Jan 2025 00:54:01 +0100 Subject: [PATCH 63/87] Fix file+noindex URI usage on Windows (cherry picked from commit e10db1905267f94f027002cf24a58ed265fd6e5b) --- Cabal-syntax/src/Distribution/Utils/Path.hs | 40 +++++++++++++++++++ Makefile | 4 +- .../src/Distribution/Client/Config.hs | 12 +++++- .../src/Distribution/Client/GlobalFlags.hs | 7 ++-- .../src/Distribution/Client/IndexUtils.hs | 4 +- .../Client/ProjectConfig/Legacy.hs | 27 +++++++++++-- .../Distribution/Client/ProjectConfig.hs | 6 ++- .../src/Test/Cabal/OutputNormalizer.hs | 10 ++++- cabal-testsuite/src/Test/Cabal/Prelude.hs | 6 +-- changelog.d/pr-10728 | 14 +++++++ doc/config.rst | 4 ++ 11 files changed, 115 insertions(+), 19 deletions(-) create mode 100644 changelog.d/pr-10728 diff --git a/Cabal-syntax/src/Distribution/Utils/Path.hs b/Cabal-syntax/src/Distribution/Utils/Path.hs index a0f18a1dfdd..b082c17b5ff 100644 --- a/Cabal-syntax/src/Distribution/Utils/Path.hs +++ b/Cabal-syntax/src/Distribution/Utils/Path.hs @@ -67,6 +67,9 @@ module Distribution.Utils.Path -- ** Module names , moduleNameSymbolicPath + + -- * Windows + , asPosixPath ) where import Distribution.Compat.Prelude @@ -86,6 +89,8 @@ import qualified Distribution.Compat.CharParsing as P import qualified System.Directory as Directory import qualified System.FilePath as FilePath +import qualified System.FilePath.Posix as Posix +import qualified System.FilePath.Windows as Windows import Data.Kind ( Type @@ -531,3 +536,38 @@ data Response -- -- See Note [Symbolic paths] in Distribution.Utils.Path. data PkgConf + +------------------------------------------------------------------------------- + +-- * Windows utils + +------------------------------------------------------------------------------- + +-- | Sometimes we need to represent a Windows path (that might have been +-- normalized) as a POSIX path, for example in URIs, as that is what +-- @network-uri@ understands. Furthermore they need to use the @\\\\.\\@ DOS +-- device syntax or otherwise the filepath will be unusable. +-- +-- >>> import Network.URI +-- >>> uriPath <$> parseURI "file+noindex://C:/foo.txt" +-- Just "/foo.txt" +-- >>> parseURI "file+noindex://C:\foo.txt" +-- Nothing +-- >>> uriPath <$> parseURI "file+noindex:///C:/foo.txt" +-- Just "/C:/foo.txt" +-- >>> uriPath <$> parseURI "file+noindex:////./C:/foo.txt" +-- Just "//./C:/foo.txt" +-- +-- Out of the ones above, only the last one can be used from anywhere in the +-- system, after normalization into @"\\\\.\\C:/foo.txt"@ (see filepath#247 for +-- why there is a forward slash there): +-- +-- >>> import Network.URI +-- >>> import qualified System.FilePath.Windows as Windows +-- >>> Windows.normalise . uriPath <$> parseURI "file+noindex:////./C:/foo.txt" +-- Just "\\\\.\\C:/foo.txt" +asPosixPath :: FilePath -> FilePath +asPosixPath p = + -- We don't use 'isPathSeparator' because @Windows.isPathSeparator + -- Posix.pathSeparator == True@. + [if x == Windows.pathSeparator then Posix.pathSeparator else x | x <- p] diff --git a/Makefile b/Makefile index e995e9e4937..aefab8b55cf 100644 --- a/Makefile +++ b/Makefile @@ -111,8 +111,8 @@ ghcid-cli : ghcid -c 'cabal repl cabal-install' .PHONY: doctest -doctest : - cd Cabal-syntax && $(DOCTEST) +doctest: + cd Cabal-syntax && $(DOCTEST) --build-depends=network-uri cd Cabal-described && $(DOCTEST) cd Cabal && $(DOCTEST) cd cabal-install-solver && $(DOCTEST) diff --git a/cabal-install/src/Distribution/Client/Config.hs b/cabal-install/src/Distribution/Client/Config.hs index 2faf9e1756d..7c1183317ee 100644 --- a/cabal-install/src/Distribution/Client/Config.hs +++ b/cabal-install/src/Distribution/Client/Config.hs @@ -226,7 +226,8 @@ import System.Directory , renameFile ) import System.FilePath - ( takeDirectory + ( normalise + , takeDirectory , (<.>) , () ) @@ -1679,7 +1680,14 @@ postProcessRepo lineno reponameStr repo0 = do -- Note: the trailing colon is important "file+noindex:" -> do let uri = remoteRepoURI repo0 - return $ Left $ LocalRepo reponame (uriPath uri) (uriFragment uri == "#shared-cache") + return $ + Left $ + LocalRepo + reponame + -- Normalization of Windows paths that use @//./@ does not fully + -- normalize the path (see filepath#247), but it is still usable. + (normalise (uriPath uri)) + (uriFragment uri == "#shared-cache") _ -> do let repo = repo0{remoteRepoName = reponame} diff --git a/cabal-install/src/Distribution/Client/GlobalFlags.hs b/cabal-install/src/Distribution/Client/GlobalFlags.hs index 6b41a79b5ef..2fd19e71b50 100644 --- a/cabal-install/src/Distribution/Client/GlobalFlags.hs +++ b/cabal-install/src/Distribution/Client/GlobalFlags.hs @@ -57,7 +57,8 @@ import Network.URI , uriScheme ) import System.FilePath - ( () + ( isAbsolute + , () ) import qualified Distribution.Client.Security.DNS as Sec.DNS @@ -69,8 +70,6 @@ import qualified Hackage.Security.Client.Repository.Remote as Sec.Remote import qualified Hackage.Security.Util.Path as Sec import qualified Hackage.Security.Util.Pretty as Sec -import qualified System.FilePath.Posix as FilePath.Posix - -- ------------------------------------------------------------ -- * Global flags @@ -192,7 +191,7 @@ withRepoContext' ignoreExpiry extraPaths = \callback -> do for_ localNoIndexRepos $ \local -> - unless (FilePath.Posix.isAbsolute (localRepoPath local)) $ + unless (isAbsolute (localRepoPath local)) $ warn verbosity $ "file+noindex " ++ unRepoName (localRepoName local) ++ " repository path is not absolute; this is fragile, and not recommended" diff --git a/cabal-install/src/Distribution/Client/IndexUtils.hs b/cabal-install/src/Distribution/Client/IndexUtils.hs index 505a8ba1190..d31780b48f4 100644 --- a/cabal-install/src/Distribution/Client/IndexUtils.hs +++ b/cabal-install/src/Distribution/Client/IndexUtils.hs @@ -456,7 +456,7 @@ readRepoIndex verbosity repoCtxt repo idxState = RepoSecure{..} -> warn verbosity $ exceptionMessageCabalInstall $ MissingPackageList repoRemote RepoLocalNoIndex local _ -> warn verbosity $ - "Error during construction of local+noindex " + "Error during construction of file+noindex " ++ unRepoName (localRepoName local) ++ " repository index: " ++ show e @@ -516,7 +516,7 @@ whenCacheOutOfDate index action = do then action else if localNoIndex index - then return () -- TODO: don't update cache for local+noindex repositories + then return () -- TODO: don't update cache for file+noindex repositories else do indexTime <- getModTime $ indexFile index cacheTime <- getModTime $ cacheFile index diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs b/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs index a4191325f8b..cd857dabc3f 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs @@ -173,7 +173,7 @@ import Distribution.Simple.Command , option , reqArg' ) -import Distribution.System (Arch, OS) +import Distribution.System (Arch, OS (Windows), buildOS) import Distribution.Types.PackageVersionConstraint ( PackageVersionConstraint ) @@ -185,7 +185,7 @@ import Distribution.Utils.Path hiding import qualified Data.ByteString.Char8 as BS import qualified Data.Map as Map import qualified Data.Set as Set -import Network.URI (URI (..), parseURI) +import Network.URI (URI (..), nullURIAuth, parseURI) import System.Directory (createDirectoryIfMissing, makeAbsolute) import System.FilePath (isAbsolute, isPathSeparator, makeValid, splitFileName, ()) import Text.PrettyPrint @@ -2043,9 +2043,30 @@ remoteRepoSectionDescr = localToRemote :: LocalRepo -> RemoteRepo localToRemote (LocalRepo name path sharedCache) = (emptyRemoteRepo name) - { remoteRepoURI = URI "file+noindex:" Nothing path "" (if sharedCache then "#shared-cache" else "") + { remoteRepoURI = + normaliseFileNoIndexURI buildOS $ + URI + "file+noindex:" + (Just nullURIAuth) + path + "" + (if sharedCache then "#shared-cache" else "") } +-- | When on Windows, we need to convert the path to be POSIX-style. +-- +-- >>> normaliseFileNoIndexURI Windows (URI "file+noindex:" (Just nullURIAuth) "\\\\.\\C:\\dev\\foo" "" "") +-- file+noindex:////./C:/dev/foo +-- +-- See haddocks of 'asPosixPath' for some examples of why this is needed for +-- @network-uri@. +normaliseFileNoIndexURI :: OS -> URI -> URI +normaliseFileNoIndexURI os uri@(URI scheme auth path query fragment) + | "file+noindex:" <- scheme + , Windows <- os = + URI scheme auth (asPosixPath path) query fragment + | otherwise = uri + ------------------------------- -- Local field utils -- diff --git a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs index 1996dab1a1d..91c8dc57966 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs @@ -33,6 +33,7 @@ import qualified Distribution.Simple.InstallDirs as InstallDirs import Distribution.Simple.Program.Db import Distribution.Simple.Program.Types import Distribution.Simple.Utils (toUTF8BS) +import Distribution.System (OS (Windows), buildOS) import Distribution.Types.PackageVersionConstraint import Distribution.Version @@ -1016,7 +1017,10 @@ instance Arbitrary LocalRepo where arbitrary = LocalRepo <$> arbitrary - <*> elements ["/tmp/foo", "/tmp/bar"] -- TODO: generate valid absolute paths + <*> elements + ( (if buildOS == Windows then map (normalise . ("//./C:" ++)) else id) + ["/tmp/foo", "/tmp/bar"] + ) -- TODO: generate valid absolute paths <*> arbitrary instance Arbitrary PreSolver where diff --git a/cabal-testsuite/src/Test/Cabal/OutputNormalizer.hs b/cabal-testsuite/src/Test/Cabal/OutputNormalizer.hs index 33e1522526b..62b3d3f3ed3 100644 --- a/cabal-testsuite/src/Test/Cabal/OutputNormalizer.hs +++ b/cabal-testsuite/src/Test/Cabal/OutputNormalizer.hs @@ -46,7 +46,7 @@ normalizeOutput nenv = . resub (posixRegexEscape "tmp/src-" ++ "[0-9]+") "" . resub (posixRegexEscape (normalizerTmpDir nenv) ++ sameDir) "/" . resub (posixRegexEscape (normalizerCanonicalTmpDir nenv) ++ sameDir) "/" - -- Munge away C: prefix on filenames (Windows). We convert C:\\ to \\. + -- Munge away C:\ prefix on filenames (Windows). We convert C:\ to \. . (if buildOS == Windows then resub "([A-Z]):\\\\" "\\\\" else id) . appEndo (F.fold (map (Endo . packageIdRegex) (normalizerKnownPackages nenv))) -- Look for 0.1/installed-0d6uzW7Ubh1Fb4TB5oeQ3G @@ -78,6 +78,14 @@ normalizeOutput nenv = else id) . normalizeBuildInfoJson . maybe id normalizePathCmdOutput (normalizerCabalInstallVersion nenv) + -- Munge away \\.\C:/ prefix on paths (Windows). We convert @\\.\C:/@ to + -- @\@. We need to do this before the step above as that one would convert + -- @\\.\@ to @\.\@. + -- + -- These paths might come up in file+noindex URIs due to @filepath@ + -- normalizing @//./C:/foo.txt@ paths to @\\.\C:/foo.txt@, see + -- (filepath#247). + . (if buildOS == Windows then resub "\\\\\\\\\\.\\\\([A-Z]):/" "\\\\" else id) -- hackage-security locks occur non-deterministically . resub "(Released|Acquired|Waiting) .*hackage-security-lock\n" "" where diff --git a/cabal-testsuite/src/Test/Cabal/Prelude.hs b/cabal-testsuite/src/Test/Cabal/Prelude.hs index 50f9395d74a..609cddd8e0b 100644 --- a/cabal-testsuite/src/Test/Cabal/Prelude.hs +++ b/cabal-testsuite/src/Test/Cabal/Prelude.hs @@ -44,7 +44,7 @@ import Distribution.PackageDescription import Test.Utils.TempTestDir (withTestDir) import Distribution.Verbosity (normal) import Distribution.Utils.Path - ( makeSymbolicPath, relativeSymbolicPath, interpretSymbolicPathCWD ) + ( asPosixPath, makeSymbolicPath, relativeSymbolicPath, interpretSymbolicPathCWD ) import Distribution.Compat.Stack @@ -614,9 +614,7 @@ withRepo repo_dir m = do -- TODO: Arguably should undo everything when we're done... where repoUri env ="file+noindex://" ++ (if isWindows - then map (\x -> case x of - '\\' -> '/' - _ -> x) + then joinDrive "//./" . asPosixPath else id) (testRepoDir env) -- | Given a directory (relative to the 'testCurrentDir') containing diff --git a/changelog.d/pr-10728 b/changelog.d/pr-10728 new file mode 100644 index 00000000000..1f960058507 --- /dev/null +++ b/changelog.d/pr-10728 @@ -0,0 +1,14 @@ +synopsis: Fix `file+noindex` URI usage on Windows +packages: cabal-install +prs: #10728 +issues: #10703 +significance: + +description: { + +- `file+noindex` repositories in Windows systems must use the format `file+noindex:////./C:/path/to/repo`. + This syntax comes from https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats#dos-device-paths, + and is the only syntax for DOS paths fully supported by the `network-uri` package, which Cabal uses to + interpret URIs in repository stanzas. + +} diff --git a/doc/config.rst b/doc/config.rst index 36a53f958b0..9f4ccc18318 100644 --- a/doc/config.rst +++ b/doc/config.rst @@ -200,6 +200,10 @@ repository. ``package-name-version.tar.gz`` files in the directory, and will use optional corresponding ``package-name-version.cabal`` files as new revisions. +.. note:: + On Windows systems, the path has to be prefixed by ``//./`` as in + ``url: file+noindex:////./C:/absolute/path/to/directory``. + For example, if ``/absolute/path/to/directory`` looks like :: From 667525f25d02d58c71558bf576cec7629eca8e14 Mon Sep 17 00:00:00 2001 From: Javier Sagredo Date: Thu, 9 Jan 2025 11:07:17 +0100 Subject: [PATCH 64/87] Create noindex.cache if missing (cherry picked from commit 2528f7370866f22b6360631602a59367809e8e20) --- .../src/Distribution/Client/IndexUtils.hs | 18 +++++++++++++----- changelog.d/pr-10730 | 11 +++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 changelog.d/pr-10730 diff --git a/cabal-install/src/Distribution/Client/IndexUtils.hs b/cabal-install/src/Distribution/Client/IndexUtils.hs index d31780b48f4..d3dbe533cd8 100644 --- a/cabal-install/src/Distribution/Client/IndexUtils.hs +++ b/cabal-install/src/Distribution/Client/IndexUtils.hs @@ -1115,12 +1115,14 @@ readIndexCache verbosity index = do -- 'dieWithException's if it fails again). Throws IOException if any arise. readNoIndexCache :: Verbosity -> Index -> IO NoIndexCache readNoIndexCache verbosity index = do - cacheOrFail <- readNoIndexCache' index + cacheOrFail <- readNoIndexCache' verbosity index case cacheOrFail of Left msg -> do warn verbosity $ concat - [ "Parsing the index cache failed (" + [ "Parsing the index cache for repo \"" + , unRepoName (repoName repo) + , "\" failed (" , msg , "). " , "Trying to regenerate the index cache..." @@ -1128,10 +1130,12 @@ readNoIndexCache verbosity index = do updatePackageIndexCacheFile verbosity index - either (dieWithException verbosity . CorruptedIndexCache) return =<< readNoIndexCache' index + either (dieWithException verbosity . CorruptedIndexCache) return =<< readNoIndexCache' verbosity index -- we don't hash cons local repository cache, they are hopefully small Right res -> return res + where + RepoIndex _ctxt repo = index -- | Read the 'Index' cache from the filesystem. Throws IO exceptions -- if any arise and returns Left on invalid input. @@ -1142,8 +1146,12 @@ readIndexCache' index | otherwise = Right . read00IndexCache <$> BSS.readFile (cacheFile index) -readNoIndexCache' :: Index -> IO (Either String NoIndexCache) -readNoIndexCache' index = structuredDecodeFileOrFail (cacheFile index) +readNoIndexCache' :: Verbosity -> Index -> IO (Either String NoIndexCache) +readNoIndexCache' verbosity index = do + exists <- doesFileExist (cacheFile index) + if exists + then structuredDecodeFileOrFail (cacheFile index) + else updatePackageIndexCacheFile verbosity index >> readNoIndexCache' verbosity index -- | Write the 'Index' cache to the filesystem writeIndexCache :: Index -> Cache -> IO () diff --git a/changelog.d/pr-10730 b/changelog.d/pr-10730 new file mode 100644 index 00000000000..e313e8f2283 --- /dev/null +++ b/changelog.d/pr-10730 @@ -0,0 +1,11 @@ +synopsis: Create `noindex.cache` file if missing +packages: cabal-install +prs: #10730 +issues: #9891 +significance: + +description: { + +- Local+noindex repositories will have their `noindex.cache` file created the first time they are accessed. + +} From 9b140f4a3736f554085edf2350360238dbe70151 Mon Sep 17 00:00:00 2001 From: Javier Sagredo Date: Thu, 20 Mar 2025 15:44:15 +0100 Subject: [PATCH 65/87] Concat arguments when enabling haddock (#10783) * Concat arguments when enabling haddock Arguments were unioned with <> which is left-biased, therefore -haddock swallowed all other args as indeed described in #10782. I think the bug was introduced by 80f0a65, which makes the expression modified in this PR to be non-empty if documentation was enabled. Fixes #10782 * Add test for #10783 (concatenate arguments when enabling haddock) --------- Co-authored-by: Matthew Pickering Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> (cherry picked from commit ef29ebb28d515dc9094a4adaf5daa4e9c17792fc) --- .../src/Distribution/Client/ProjectPlanning.hs | 17 ++++++++++------- .../HaddockArgsCombine/CHANGELOG.md | 5 +++++ .../HaddockArgsCombine/HaddockArgsCombine.cabal | 14 ++++++++++++++ .../PackageTests/HaddockArgsCombine/app/Main.hs | 6 ++++++ .../PackageTests/HaddockArgsCombine/cabal.out | 8 ++++++++ .../HaddockArgsCombine/cabal.test.hs | 3 +++ changelog.d/pr-10783 | 11 +++++++++++ 7 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 cabal-testsuite/PackageTests/HaddockArgsCombine/CHANGELOG.md create mode 100644 cabal-testsuite/PackageTests/HaddockArgsCombine/HaddockArgsCombine.cabal create mode 100644 cabal-testsuite/PackageTests/HaddockArgsCombine/app/Main.hs create mode 100644 cabal-testsuite/PackageTests/HaddockArgsCombine/cabal.out create mode 100644 cabal-testsuite/PackageTests/HaddockArgsCombine/cabal.test.hs create mode 100644 changelog.d/pr-10783 diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning.hs b/cabal-install/src/Distribution/Client/ProjectPlanning.hs index 6ffbc97fcf3..102c08a7a92 100644 --- a/cabal-install/src/Distribution/Client/ProjectPlanning.hs +++ b/cabal-install/src/Distribution/Client/ProjectPlanning.hs @@ -2265,13 +2265,16 @@ elaborateInstallPlan ] <> perPkgOptionMapLast pkgid packageConfigProgramPaths elabProgramArgs = - Map.fromList - [ (programId prog, args) - | prog <- configuredPrograms compilerprogdb - , let args = programOverrideArgs $ addHaddockIfDocumentationEnabled prog - , not (null args) - ] - <> perPkgOptionMapMappend pkgid packageConfigProgramArgs + Map.unionWith + (++) + ( Map.fromList + [ (programId prog, args) + | prog <- configuredPrograms compilerprogdb + , let args = programOverrideArgs $ addHaddockIfDocumentationEnabled prog + , not (null args) + ] + ) + (perPkgOptionMapMappend pkgid packageConfigProgramArgs) elabProgramPathExtra = perPkgOptionNubList pkgid packageConfigProgramPathExtra elabConfigureScriptArgs = perPkgOptionList pkgid packageConfigConfigureArgs elabExtraLibDirs = perPkgOptionList pkgid packageConfigExtraLibDirs diff --git a/cabal-testsuite/PackageTests/HaddockArgsCombine/CHANGELOG.md b/cabal-testsuite/PackageTests/HaddockArgsCombine/CHANGELOG.md new file mode 100644 index 00000000000..8f36ef2ecea --- /dev/null +++ b/cabal-testsuite/PackageTests/HaddockArgsCombine/CHANGELOG.md @@ -0,0 +1,5 @@ +# Revision history for HaddockArgsCombine + +## 0.1.0.0 -- YYYY-mm-dd + +* First version. Released on an unsuspecting world. diff --git a/cabal-testsuite/PackageTests/HaddockArgsCombine/HaddockArgsCombine.cabal b/cabal-testsuite/PackageTests/HaddockArgsCombine/HaddockArgsCombine.cabal new file mode 100644 index 00000000000..8a5eb8ffa65 --- /dev/null +++ b/cabal-testsuite/PackageTests/HaddockArgsCombine/HaddockArgsCombine.cabal @@ -0,0 +1,14 @@ +cabal-version: 3.14 +name: HaddockArgsCombine +version: 0.1.0.0 +license: NONE +author: Matthew Pickering +maintainer: matthewtpickering@gmail.com +build-type: Simple +extra-doc-files: CHANGELOG.md + +executable HaddockArgsCombine + main-is: Main.hs + build-depends: base + hs-source-dirs: app + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/HaddockArgsCombine/app/Main.hs b/cabal-testsuite/PackageTests/HaddockArgsCombine/app/Main.hs new file mode 100644 index 00000000000..9b1ce43a481 --- /dev/null +++ b/cabal-testsuite/PackageTests/HaddockArgsCombine/app/Main.hs @@ -0,0 +1,6 @@ +module Main where + +import Data.List + +main :: IO () +main = putStrLn "Hello, Haskell!" diff --git a/cabal-testsuite/PackageTests/HaddockArgsCombine/cabal.out b/cabal-testsuite/PackageTests/HaddockArgsCombine/cabal.out new file mode 100644 index 00000000000..f7671fe3af4 --- /dev/null +++ b/cabal-testsuite/PackageTests/HaddockArgsCombine/cabal.out @@ -0,0 +1,8 @@ +# cabal v2-run +Resolving dependencies... +Build profile: -w ghc- -O1 +In order, the following will be built: + - HaddockArgsCombine-0.1.0.0 (exe:HaddockArgsCombine) (first run) +Configuring executable 'HaddockArgsCombine' for HaddockArgsCombine-0.1.0.0... +Preprocessing executable 'HaddockArgsCombine' for HaddockArgsCombine-0.1.0.0... +Building executable 'HaddockArgsCombine' for HaddockArgsCombine-0.1.0.0... diff --git a/cabal-testsuite/PackageTests/HaddockArgsCombine/cabal.test.hs b/cabal-testsuite/PackageTests/HaddockArgsCombine/cabal.test.hs new file mode 100644 index 00000000000..d04a4c94062 --- /dev/null +++ b/cabal-testsuite/PackageTests/HaddockArgsCombine/cabal.test.hs @@ -0,0 +1,3 @@ +import Test.Cabal.Prelude +main = cabalTest $ do + fails $ cabal "v2-run" ["--ghc-options=-Wall -Werror", "--enable-documentation"] diff --git a/changelog.d/pr-10783 b/changelog.d/pr-10783 new file mode 100644 index 00000000000..a8efcf12cda --- /dev/null +++ b/changelog.d/pr-10783 @@ -0,0 +1,11 @@ +synopsis: GHC arguments are no longer swallowed by enabling documentation +packages: Cabal +prs: #10783 +issues: #10782 +significance: significant + +description: { + +- Arguments to GHC are now properly concatenated with `-haddock` if documentation is enabled. + +} From ce26c3c9ee76fce68e6180140e221eb5c99f2463 Mon Sep 17 00:00:00 2001 From: Artem Pelenitsyn Date: Fri, 28 Mar 2025 14:33:58 -0400 Subject: [PATCH 66/87] fix cabal-instlal-solver-3.14 API change https://github.com/haskell/cabal/pull/10546 changed the Solver API by renaming a function and was backported to 3.14 in https://github.com/haskell/cabal/pull/10753 This commit reverts the renaming but not anything else from #10546. --- .../Distribution/Solver/Types/ProjectConfigPath.hs | 8 ++++---- .../src/Distribution/Client/ProjectConfig.hs | 2 +- changelog.d/solver-api-change-fixup-3.14 | 12 ++++++++++++ 3 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 changelog.d/solver-api-change-fixup-3.14 diff --git a/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs b/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs index 25de1091d66..db5e9956aed 100644 --- a/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs +++ b/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs @@ -12,7 +12,7 @@ module Distribution.Solver.Types.ProjectConfigPath -- * Messages , docProjectConfigPath - , docProjectConfigFiles + , docProjectConfigPaths , cyclicalImportMsg , docProjectConfigPathFailReason @@ -133,11 +133,11 @@ docProjectConfigPath (ProjectConfigPath (p :| ps)) = vcat $ -- , ProjectConfigPath ("project-cabal/pkgs/integration-tests.config" :| ["project-cabal/pkgs.config","cabal.project"]) -- , ProjectConfigPath ("project-cabal/pkgs/tests.config" :| ["project-cabal/pkgs.config","cabal.project"]) -- ] --- return . render $ docProjectConfigFiles ps +-- return . render $ docProjectConfigPaths ps -- :} -- "- cabal.project\n- project-cabal/constraints.config\n- project-cabal/ghc-latest.config\n- project-cabal/ghc-options.config\n- project-cabal/pkgs.config\n- project-cabal/pkgs/benchmarks.config\n- project-cabal/pkgs/buildinfo.config\n- project-cabal/pkgs/cabal.config\n- project-cabal/pkgs/install.config\n- project-cabal/pkgs/integration-tests.config\n- project-cabal/pkgs/tests.config" -docProjectConfigFiles :: [ProjectConfigPath] -> Doc -docProjectConfigFiles ps = vcat +docProjectConfigPaths :: [ProjectConfigPath] -> Doc +docProjectConfigPaths ps = vcat [ text "-" <+> text p | p <- ordNub [ p | ProjectConfigPath (p :| _) <- ps ] ] diff --git a/cabal-install/src/Distribution/Client/ProjectConfig.hs b/cabal-install/src/Distribution/Client/ProjectConfig.hs index 042e5c9187a..1d44139fbf4 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig.hs @@ -935,7 +935,7 @@ renderBadPackageLocations (BadPackageLocations provenance bpls) renderExplicit = "When using configuration from:\n" - ++ render (nest 2 . docProjectConfigFiles $ mapMaybe getExplicit (Set.toList provenance)) + ++ render (nest 2 . docProjectConfigPaths $ mapMaybe getExplicit (Set.toList provenance)) ++ "\nThe following errors occurred:\n" ++ render (nest 2 $ vcat ((text "-" <+>) . text <$> map renderBadPackageLocation bpls)) diff --git a/changelog.d/solver-api-change-fixup-3.14 b/changelog.d/solver-api-change-fixup-3.14 new file mode 100644 index 00000000000..e1278566054 --- /dev/null +++ b/changelog.d/solver-api-change-fixup-3.14 @@ -0,0 +1,12 @@ +synopsis: Revert renaming from #10546 +packages: cabal-install-solver + +description: { + +https://github.com/haskell/cabal/pull/10546 changed the Solver API by +renaming a function and was backported to 3.14 in +https://github.com/haskell/cabal/pull/10753. In particular, +`docProjectConfigPaths` was renamed to `docProjectConfigFiles`. +This change reverts the renaming but not anything else from #10546. + +} From d2f8a7ab002b5e410989342defc72d63abf79719 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9cate=20Moonlight?= Date: Mon, 16 Dec 2024 14:44:56 +0100 Subject: [PATCH 67/87] Comment optional post-install field in the ghcup metadata script and fix typos (cherry picked from commit bcbbcb895b1f23254fee270a7639a26222b603f4) --- .../create-release-metadata-for-ghcup.sh | 49 +++++++------------ 1 file changed, 19 insertions(+), 30 deletions(-) diff --git a/scripts/release/create-release-metadata-for-ghcup.sh b/scripts/release/create-release-metadata-for-ghcup.sh index c8683c2b85c..6cf3415ce75 100755 --- a/scripts/release/create-release-metadata-for-ghcup.sh +++ b/scripts/release/create-release-metadata-for-ghcup.sh @@ -26,49 +26,42 @@ cat < /dev/stdout viTags: - Latest viChangeLog: https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-$RELEASE.md - viPostInstall: *cabal-${RELEASE//./}-post-install + # uncomment viPostInstall if the release needs a post-install message + # viPostInstall: &cabal-${RELEASE//./}-post-install | viArch: A_64: Linux_UnknownLinux: unknown_versioning: &cabal-${RELEASE//./}-64 - dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-x86_64-linux-alpine3_12.tar.xz - dlSubdir: cabal-install-$RELEASE - dlHash: $(sha256sum "cabal-install-$RELEASE-x86_64-linux-alpine3_12.tar.xz" | awk '{ print $1 }') + dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-x86_64-linux-alpine3_12.tar.xz + dlHash: $(sha256sum "cabal-install-$RELEASE-x86_64-linux-alpine3_12.tar.xz" | awk '{ print $1 }') Linux_Alpine: - unknown_versioning: &cabal-${RELEASE//./}-64 + unknown_versioning: *cabal-${RELEASE//./}-64 Linux_CentOS: unknown_versioning: &cabal-${RELEASE//./}-64-centos7 - dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-x86_64-linux-centos7.tar.xz - dlSubdir: cabal-install-$RELEASE - dlHash: $(sha256sum "cabal-install-$RELEASE-x86_64-linux-centos7.tar.xz" | awk '{ print $1 }') + dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-x86_64-linux-centos7.tar.xz + dlHash: $(sha256sum "cabal-install-$RELEASE-x86_64-linux-centos7.tar.xz" | awk '{ print $1 }') Linux_Debian: - ' ( >= 9 && < 10)': &cabal-${RELEASE//./}-64-debian + '( >= 9 && < 10)': &cabal-${RELEASE//./}-64-debian dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-x86_64-linux-deb9.tar.xz - dlSubdir: cabal-install-$RELEASE dlHash: $(sha256sum "cabal-install-$RELEASE-x86_64-linux-deb9.tar.xz" | awk '{ print $1 }') - ' ( == 10 && < 11)': + '( == 10 && < 11)': dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-x86_64-linux-deb10.tar.xz - dlSubdir: cabal-install-$RELEASE dlHash: $(sha256sum "cabal-install-$RELEASE-x86_64-linux-deb10.tar.xz" | awk '{ print $1 }') - ' ( >= 11)': + '( >= 11)': dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-x86_64-linux-deb11.tar.xz - dlSubdir: cabal-install-$RELEASE dlHash: $(sha256sum "cabal-install-$RELEASE-x86_64-linux-deb11.tar.xz" | awk '{ print $1 }') - unknown_versioning: &cabal-${RELEASE//./}-64-debian + unknown_versioning: *cabal-${RELEASE//./}-64-debian Linux_Fedora: '>= 33': dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-x86_64-linux-fedora33.tar.xz - dlSubdir: cabal-install-$RELEASE dlHash: $(sha256sum "cabal-install-$RELEASE-x86_64-linux-fedora33.tar.xz" | awk '{ print $1 }') - unknown_versioning: &cabal-${RELEASE//./}-64-centos7 + unknown_versioning: *cabal-${RELEASE//./}-64-centos7 Linux_Ubuntu: '< 20': &cabal-${RELEASE//./}-64-ubuntu18 dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-x86_64-linux-ubuntu18_04.tar.xz - dlSubdir: cabal-install-$RELEASE dlHash: $(sha256sum "cabal-install-$RELEASE-x86_64-linux-ubuntu18_04.tar.xz" | awk '{ print $1 }') '>= 20': &cabal-${RELEASE//./}-64-ubuntu20 dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-x86_64-linux-ubuntu20_04.tar.xz - dlSubdir: cabal-install-$RELEASE dlHash: $(sha256sum "cabal-install-$RELEASE-x86_64-linux-ubuntu20_04.tar.xz" | awk '{ print $1 }') unknown_versioning: *cabal-${RELEASE//./}-64-ubuntu18 Linux_Mint: @@ -78,48 +71,44 @@ cat < /dev/stdout Darwin: unknown_versioning: dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-x86_64-darwin.tar.xz - dlSubdir: cabal-install-$RELEASE dlHash: $(sha256sum "cabal-install-$RELEASE-x86_64-darwin.tar.xz" | awk '{ print $1 }') Windows: unknown_versioning: dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-x86_64-windows.zip - dlSubdir: cabal-install-$RELEASE dlHash: $(sha256sum "cabal-install-$RELEASE-x86_64-windows.zip" | awk '{ print $1 }') FreeBSD: unknown_versioning: - dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-x86_64-freebsd.tar.xz - dlSubdir: cabal-install-$RELEASE - dlHash: $(sha256sum "cabal-install-$RELEASE-x86_64-freebsd.tar.xz" | awk '{ print $1 }') + dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-x86_64-freebsd-14.tar.xz + dlHash: $(sha256sum "cabal-install-$RELEASE-x86_64-freebsd-14.tar.xz" | awk '{ print $1 }') A_32: Linux_UnknownLinux: unknown_versioning: &cabal-${RELEASE//./}-32 dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-i386-linux-alpine3_12.tar.xz - dlSubdir: cabal-install-$RELEASE dlHash: $(sha256sum "cabal-install-$RELEASE-i386-linux-alpine3_12.tar.xz" | awk '{ print $1 }') Linux_Alpine: unknown_versioning: *cabal-${RELEASE//./}-32 Linux_Debian: '( >= 9 )': dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-i386-linux-deb9.tar.xz - dlSubdir: cabal-install-$RELEASE dlHash: $(sha256sum "cabal-install-$RELEASE-i386-linux-deb9.tar.xz" | awk '{ print $1 }') unknown_versioning: *cabal-${RELEASE//./}-32 A_ARM64: Darwin: unknown_versioning: dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-aarch64-darwin.tar.xz - dlSubdir: cabal-install-$RELEASE dlHash: $(sha256sum "cabal-install-$RELEASE-aarch64-darwin.tar.xz" | awk '{ print $1 }') Linux_Debian: - '( >= 10 && < 11)': &cabal-31020-arm64 + '( >= 10 && < 11)': &cabal-${RELEASE//./}-arm64 dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-aarch64-linux-deb10.tar.xz - dlSubdir: cabal-install-$RELEASE dlHash: $(sha256sum "cabal-install-$RELEASE-aarch64-linux-deb10.tar.xz" | awk '{ print $1 }') '( >= 11)': dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-aarch64-linux-deb11.tar.xz - dlSubdir: cabal-install-$RELEASE dlHash: $(sha256sum "cabal-install-$RELEASE-aarch64-linux-deb11.tar.xz" | awk '{ print $1 }') unknown_versioning: *cabal-${RELEASE//./}-arm64 + Linux_Alpine: + unknown_versioning: + dlUri: https://downloads.haskell.org/~cabal/cabal-install-$RELEASE/cabal-install-$RELEASE-aarch64-linux-alpine3_18.tar.xz + dlHash: $(sha256sum "cabal-install-$RELEASE-aarch64-linux-alpine3_18.tar.xz" | awk '{ print $1 }') Linux_UnknownLinux: unknown_versioning: *cabal-${RELEASE//./}-arm64 EOF From d0f93f9f30387450d48651a4e72435e80a5d7cc1 Mon Sep 17 00:00:00 2001 From: Mikolaj Konarski Date: Fri, 28 Mar 2025 22:23:55 +0100 Subject: [PATCH 68/87] A changelog fixup for the 'fix cabal-instlal-solver-3.14 API change' quickfix --- changelog.d/solver-api-change-fixup-3.14 | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog.d/solver-api-change-fixup-3.14 b/changelog.d/solver-api-change-fixup-3.14 index e1278566054..05561d5f495 100644 --- a/changelog.d/solver-api-change-fixup-3.14 +++ b/changelog.d/solver-api-change-fixup-3.14 @@ -1,5 +1,6 @@ synopsis: Revert renaming from #10546 packages: cabal-install-solver +prs: #10546 description: { From 9b57ba154099cf4e7434badd6aaaa769c899a2c2 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 28 Mar 2025 23:30:23 +0000 Subject: [PATCH 69/87] Backport #10746: Fix file+noindex URI usage on Windows (#10876) * Fix local+noindex repos on Windows (cherry picked from commit 9a0e8a46a7a1165f000d5c96740bfe99fbf90897) # Conflicts: # Makefile * fixup! Makefile doctest rule was changed back to what it once was * fixup! Fix local+noindex repos on Windows --------- Co-authored-by: Javier Sagredo Co-authored-by: Artem Pelenitsyn Co-authored-by: brandon s allbery kf8nh Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- Cabal-syntax/src/Distribution/Utils/Path.hs | 40 ----------------- .../src/Distribution/Client/Config.hs | 2 - .../Client/ProjectConfig/Legacy.hs | 18 +------- .../src/Distribution/Client/Types/Repo.hs | 45 +++++++++++++++++++ .../Distribution/Client/ProjectConfig.hs | 2 +- .../src/Test/Cabal/OutputNormalizer.hs | 8 ---- cabal-testsuite/src/Test/Cabal/Prelude.hs | 13 ++++-- changelog.d/pr-10728 | 10 ++--- doc/config.rst | 4 +- 9 files changed, 64 insertions(+), 78 deletions(-) diff --git a/Cabal-syntax/src/Distribution/Utils/Path.hs b/Cabal-syntax/src/Distribution/Utils/Path.hs index b082c17b5ff..a0f18a1dfdd 100644 --- a/Cabal-syntax/src/Distribution/Utils/Path.hs +++ b/Cabal-syntax/src/Distribution/Utils/Path.hs @@ -67,9 +67,6 @@ module Distribution.Utils.Path -- ** Module names , moduleNameSymbolicPath - - -- * Windows - , asPosixPath ) where import Distribution.Compat.Prelude @@ -89,8 +86,6 @@ import qualified Distribution.Compat.CharParsing as P import qualified System.Directory as Directory import qualified System.FilePath as FilePath -import qualified System.FilePath.Posix as Posix -import qualified System.FilePath.Windows as Windows import Data.Kind ( Type @@ -536,38 +531,3 @@ data Response -- -- See Note [Symbolic paths] in Distribution.Utils.Path. data PkgConf - -------------------------------------------------------------------------------- - --- * Windows utils - -------------------------------------------------------------------------------- - --- | Sometimes we need to represent a Windows path (that might have been --- normalized) as a POSIX path, for example in URIs, as that is what --- @network-uri@ understands. Furthermore they need to use the @\\\\.\\@ DOS --- device syntax or otherwise the filepath will be unusable. --- --- >>> import Network.URI --- >>> uriPath <$> parseURI "file+noindex://C:/foo.txt" --- Just "/foo.txt" --- >>> parseURI "file+noindex://C:\foo.txt" --- Nothing --- >>> uriPath <$> parseURI "file+noindex:///C:/foo.txt" --- Just "/C:/foo.txt" --- >>> uriPath <$> parseURI "file+noindex:////./C:/foo.txt" --- Just "//./C:/foo.txt" --- --- Out of the ones above, only the last one can be used from anywhere in the --- system, after normalization into @"\\\\.\\C:/foo.txt"@ (see filepath#247 for --- why there is a forward slash there): --- --- >>> import Network.URI --- >>> import qualified System.FilePath.Windows as Windows --- >>> Windows.normalise . uriPath <$> parseURI "file+noindex:////./C:/foo.txt" --- Just "\\\\.\\C:/foo.txt" -asPosixPath :: FilePath -> FilePath -asPosixPath p = - -- We don't use 'isPathSeparator' because @Windows.isPathSeparator - -- Posix.pathSeparator == True@. - [if x == Windows.pathSeparator then Posix.pathSeparator else x | x <- p] diff --git a/cabal-install/src/Distribution/Client/Config.hs b/cabal-install/src/Distribution/Client/Config.hs index 7c1183317ee..e25e9612003 100644 --- a/cabal-install/src/Distribution/Client/Config.hs +++ b/cabal-install/src/Distribution/Client/Config.hs @@ -1684,8 +1684,6 @@ postProcessRepo lineno reponameStr repo0 = do Left $ LocalRepo reponame - -- Normalization of Windows paths that use @//./@ does not fully - -- normalize the path (see filepath#247), but it is still usable. (normalise (uriPath uri)) (uriFragment uri == "#shared-cache") _ -> do diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs b/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs index cd857dabc3f..f7cd9928fd3 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs @@ -39,7 +39,7 @@ import Distribution.Types.Flag (FlagName, parsecFlagAssignment) import Distribution.Client.ProjectConfig.Types import Distribution.Client.Types.AllowNewer (AllowNewer (..), AllowOlder (..)) -import Distribution.Client.Types.Repo (LocalRepo (..), RemoteRepo (..), emptyRemoteRepo) +import Distribution.Client.Types.Repo (LocalRepo (..), RemoteRepo (..), emptyRemoteRepo, normaliseFileNoIndexURI) import Distribution.Client.Types.RepoName (RepoName (..), unRepoName) import Distribution.Client.Types.SourceRepo (SourceRepoList, sourceRepositoryPackageGrammar) @@ -173,7 +173,7 @@ import Distribution.Simple.Command , option , reqArg' ) -import Distribution.System (Arch, OS (Windows), buildOS) +import Distribution.System (Arch, OS, buildOS) import Distribution.Types.PackageVersionConstraint ( PackageVersionConstraint ) @@ -2053,20 +2053,6 @@ remoteRepoSectionDescr = (if sharedCache then "#shared-cache" else "") } --- | When on Windows, we need to convert the path to be POSIX-style. --- --- >>> normaliseFileNoIndexURI Windows (URI "file+noindex:" (Just nullURIAuth) "\\\\.\\C:\\dev\\foo" "" "") --- file+noindex:////./C:/dev/foo --- --- See haddocks of 'asPosixPath' for some examples of why this is needed for --- @network-uri@. -normaliseFileNoIndexURI :: OS -> URI -> URI -normaliseFileNoIndexURI os uri@(URI scheme auth path query fragment) - | "file+noindex:" <- scheme - , Windows <- os = - URI scheme auth (asPosixPath path) query fragment - | otherwise = uri - ------------------------------- -- Local field utils -- diff --git a/cabal-install/src/Distribution/Client/Types/Repo.hs b/cabal-install/src/Distribution/Client/Types/Repo.hs index b5606725432..83ecc454863 100644 --- a/cabal-install/src/Distribution/Client/Types/Repo.hs +++ b/cabal-install/src/Distribution/Client/Types/Repo.hs @@ -15,6 +15,9 @@ module Distribution.Client.Types.Repo , repoName , isRepoRemote , maybeRepoRemote + + -- * Windows + , normaliseFileNoIndexURI ) where import Distribution.Client.Compat.Prelude @@ -23,6 +26,7 @@ import Prelude () import Network.URI (URI (..), nullURI, parseAbsoluteURI, uriToString) import Distribution.Simple.Utils (toUTF8BS) +import Distribution.System (OS (Windows)) import Distribution.Client.HashValue (hashValue, showHashValue, truncateHash) @@ -32,6 +36,9 @@ import qualified Text.PrettyPrint as Disp import Distribution.Client.Types.RepoName +import qualified System.FilePath.Posix as Posix +import qualified System.FilePath.Windows as Windows + ------------------------------------------------------------------------------- -- Remote repository ------------------------------------------------------------------------------- @@ -190,3 +197,41 @@ repoName :: Repo -> RepoName repoName (RepoLocalNoIndex r _) = localRepoName r repoName (RepoRemote r _) = remoteRepoName r repoName (RepoSecure r _) = remoteRepoName r + +------------------------------------------------------------------------------- + +-- * Windows utils + +------------------------------------------------------------------------------- + +-- | When on Windows, we need to convert the paths in URIs to be POSIX-style. +-- +-- >>> import Network.URI +-- >>> normaliseFileNoIndexURI Windows (URI "file+noindex:" (Just nullURIAuth) "C:\\dev\\foo" "" "") +-- file+noindex:C:/dev/foo +-- +-- Other formats of file paths are not understood by @network-uri@: +-- +-- >>> import Network.URI +-- >>> uriPath <$> parseURI "file+noindex://C:/foo.txt" +-- Just "/foo.txt" +-- >>> parseURI "file+noindex://C:\foo.txt" +-- Nothing +-- >>> uriPath <$> parseURI "file+noindex:///C:/foo.txt" +-- Just "/C:/foo.txt" +-- >>> uriPath <$> parseURI "file+noindex:C:/foo.txt" +-- Just "C:/foo.txt" +-- +-- Out of the ones above, only the last one can be used from anywhere in the +-- system. +normaliseFileNoIndexURI :: OS -> URI -> URI +normaliseFileNoIndexURI os uri@(URI scheme _auth path query fragment) + | "file+noindex:" <- scheme + , Windows <- os = + URI scheme Nothing (asPosixPath path) query fragment + | otherwise = uri + where + asPosixPath p = + -- We don't use 'isPathSeparator' because @Windows.isPathSeparator + -- Posix.pathSeparator == True@. + [if x == Windows.pathSeparator then Posix.pathSeparator else x | x <- p] diff --git a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs index 91c8dc57966..1733153f856 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs @@ -1018,7 +1018,7 @@ instance Arbitrary LocalRepo where LocalRepo <$> arbitrary <*> elements - ( (if buildOS == Windows then map (normalise . ("//./C:" ++)) else id) + ( (if buildOS == Windows then map (normalise . ("C:" ++)) else id) ["/tmp/foo", "/tmp/bar"] ) -- TODO: generate valid absolute paths <*> arbitrary diff --git a/cabal-testsuite/src/Test/Cabal/OutputNormalizer.hs b/cabal-testsuite/src/Test/Cabal/OutputNormalizer.hs index 62b3d3f3ed3..f361ae68737 100644 --- a/cabal-testsuite/src/Test/Cabal/OutputNormalizer.hs +++ b/cabal-testsuite/src/Test/Cabal/OutputNormalizer.hs @@ -78,14 +78,6 @@ normalizeOutput nenv = else id) . normalizeBuildInfoJson . maybe id normalizePathCmdOutput (normalizerCabalInstallVersion nenv) - -- Munge away \\.\C:/ prefix on paths (Windows). We convert @\\.\C:/@ to - -- @\@. We need to do this before the step above as that one would convert - -- @\\.\@ to @\.\@. - -- - -- These paths might come up in file+noindex URIs due to @filepath@ - -- normalizing @//./C:/foo.txt@ paths to @\\.\C:/foo.txt@, see - -- (filepath#247). - . (if buildOS == Windows then resub "\\\\\\\\\\.\\\\([A-Z]):/" "\\\\" else id) -- hackage-security locks occur non-deterministically . resub "(Released|Acquired|Waiting) .*hackage-security-lock\n" "" where diff --git a/cabal-testsuite/src/Test/Cabal/Prelude.hs b/cabal-testsuite/src/Test/Cabal/Prelude.hs index 609cddd8e0b..e6cdf2c74a5 100644 --- a/cabal-testsuite/src/Test/Cabal/Prelude.hs +++ b/cabal-testsuite/src/Test/Cabal/Prelude.hs @@ -44,7 +44,7 @@ import Distribution.PackageDescription import Test.Utils.TempTestDir (withTestDir) import Distribution.Verbosity (normal) import Distribution.Utils.Path - ( asPosixPath, makeSymbolicPath, relativeSymbolicPath, interpretSymbolicPathCWD ) + ( makeSymbolicPath, relativeSymbolicPath, interpretSymbolicPathCWD ) import Distribution.Compat.Stack @@ -72,6 +72,8 @@ import Network.Wait (waitTcpVerbose) import System.Environment import System.Process import System.IO +import qualified System.FilePath.Posix as Posix +import qualified System.FilePath.Windows as Windows #ifndef mingw32_HOST_OS import System.Posix.Resource @@ -613,9 +615,12 @@ withRepo repo_dir m = do withReaderT (\env' -> env' { testHaveRepo = True }) m -- TODO: Arguably should undo everything when we're done... where - repoUri env ="file+noindex://" ++ (if isWindows - then joinDrive "//./" . asPosixPath - else id) (testRepoDir env) + repoUri env ="file+noindex:" ++ (if isWindows + then map (\x -> if x == Windows.pathSeparator + then Posix.pathSeparator + else x + ) + else ("//" ++)) (testRepoDir env) -- | Given a directory (relative to the 'testCurrentDir') containing -- a series of directories representing packages, generate an diff --git a/changelog.d/pr-10728 b/changelog.d/pr-10728 index 1f960058507..d8cee5a84eb 100644 --- a/changelog.d/pr-10728 +++ b/changelog.d/pr-10728 @@ -1,14 +1,14 @@ synopsis: Fix `file+noindex` URI usage on Windows packages: cabal-install -prs: #10728 +prs: #10728 #10746 issues: #10703 significance: description: { -- `file+noindex` repositories in Windows systems must use the format `file+noindex:////./C:/path/to/repo`. - This syntax comes from https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats#dos-device-paths, - and is the only syntax for DOS paths fully supported by the `network-uri` package, which Cabal uses to - interpret URIs in repository stanzas. +- `file+noindex` repositories in Windows systems must use the format + `file+noindex:C:/path/to/repo`. This is the only syntax for DOS paths fully + supported by the `network-uri` package, which Cabal uses to interpret URIs in + repository stanzas. } diff --git a/doc/config.rst b/doc/config.rst index 9f4ccc18318..2ee635a3d4f 100644 --- a/doc/config.rst +++ b/doc/config.rst @@ -201,8 +201,8 @@ repository. corresponding ``package-name-version.cabal`` files as new revisions. .. note:: - On Windows systems, the path has to be prefixed by ``//./`` as in - ``url: file+noindex:////./C:/absolute/path/to/directory``. + On Windows systems, the URL must start directly with the absolute path as in + ``url: file+noindex:C:/absolute/path/to/directory``. For example, if ``/absolute/path/to/directory`` looks like :: From f772e0b2cc90ec1dfcf9a4d4bfc112f674c4c68f Mon Sep 17 00:00:00 2001 From: Phil de Joux Date: Sun, 12 Jan 2025 14:19:24 -0500 Subject: [PATCH 70/87] Fix casing of extra-source-files in Cabal-hooks (cherry picked from commit 963a684ccc5b3cb25e90b477bd86bce2d539c669) --- Cabal-hooks/Cabal-hooks.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cabal-hooks/Cabal-hooks.cabal b/Cabal-hooks/Cabal-hooks.cabal index f048c5b7b8b..f3a7e2c024e 100644 --- a/Cabal-hooks/Cabal-hooks.cabal +++ b/Cabal-hooks/Cabal-hooks.cabal @@ -15,7 +15,7 @@ category: Distribution build-type: Simple extra-source-files: - readme.md changelog.md + README.md CHANGELOG.md source-repository head type: git From 412c08840b849009d6a4fe572263e028dad375e2 Mon Sep 17 00:00:00 2001 From: Artem Pelenitsyn Date: Fri, 28 Mar 2025 15:11:34 -0400 Subject: [PATCH 71/87] cabal-install on 3.14 depends on an unreleased Cabal fuction, so, needs a lower bound bump the function in question is `addInternalBuildToolsFixed` (introduced in https://github.com/haskell/cabal/pull/10838) --- Cabal/Cabal.cabal | 2 +- cabal-install/cabal-install.cabal | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cabal/Cabal.cabal b/Cabal/Cabal.cabal index 19ec3528455..e875d008429 100644 --- a/Cabal/Cabal.cabal +++ b/Cabal/Cabal.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: Cabal -version: 3.14.1.1 +version: 3.14.2 copyright: 2003-2024, Cabal Development Team (see AUTHORS file) license: BSD-3-Clause license-file: LICENSE diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index ff04a08dbb1..8a24c3d7808 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -55,7 +55,7 @@ common base-dep build-depends: base >=4.13 && <4.22 common cabal-dep - build-depends: Cabal ^>=3.14 + build-depends: Cabal >=3.14.2 && <3.15 common cabal-syntax-dep build-depends: Cabal-syntax ^>=3.14 From d714099c59499be1a7dd50e40b71e8d2fa505e60 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 29 Mar 2025 06:13:35 +0000 Subject: [PATCH 72/87] Backport #10731: cabal-install: Be less eager to configure external programs (#10875) * Revert "cabal-install configureCompiler: configure progdb" This reverts commit 8bdda9c0b6231f05eda3e06f677ec5b71bfbb7cf. In configureCompiler the call to configureAllKnownPrograms was too eager. When called it selected the version of tools from PATH (such as alex), and then when a package was configured these tools were passed using `--with-alex` options to configure, which meant that the build-tool-depends versions were not used. (See #10692) Why was this call introduced in the first place? Because configureCompiler would a different result depending on whether: * It is run for the first time, the `ProgramDb` will contain unconfigured programs. * It is run subsequently, `ProgramDb` is read from disk, it does not contain unconfigured programs. Reverting this commit rexposes the bug that the serialised ProgramDb will not contain UnconfiguredPrograms (in the case where reconfiguring is avoided). However, there are no code paths which require this logic in `cabal-install` currently. The configuration phase happens again each time that `Cabal` is called, with a populated `ProgramDb`. We will fix this before the next major `cabal-install` release, but it would not be suitable to backport. In the future we will fix this properly by refactoring `configureCompiler` so that `ProgramDb` is not serialised. The general approach will be to make `configCompilerEx` return a pair of configured programs (`ghc` and `ghc-pkg`) and expose an additional function from `Cabal` which uses these two programs to perform the modifications to the `ProgramDb` which `configCompilerEx` performs. Also see #2238 and #9840 Fixes #10692 (cherry picked from commit 1c64bb8c1de5492a3315cd6eabbdbfc486d9bbc8) # Conflicts: # cabal-testsuite/PackageTests/ExtraProgPath/setup.out * Add a test to check that build-tool-depends are used (#10692) The testcase is not so easy to write because * The bug only surfaces when the build-tool you are depending on is known (ie alex, happy etc) * But then it is tricky to write a test, as we can't depend on the known tools or bundle the source for them. * So we create a fake "alex", which cabal then invokes on a fake ".x" file. This is maybe a bit fragile if the way cabal invokes alex changes in future, but then the test can be modified as well. Ticket #10692 (cherry picked from commit 24f839517c49668a35545f9731866839255a632c) * Add a test to check that extra-prog-path is honoured for local packages Whilst fixing #10692, I realised there was also this bug where extra-prog-path would not be honoured for specific packages. The idea behind extra-prog-path is that each local package can use a different version of a preprocessor if desired. (cherry picked from commit 2c19bf35024c66d2b296f6c6e27b1b19bbf01d81) * fixup! fix conflict --------- Co-authored-by: Matthew Pickering Co-authored-by: Artem Pelenitsyn Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- .../Distribution/Client/ProjectPlanning.hs | 51 +++++++++++++++--- .../BuildToolDependsExternal/cabal.project | 2 + .../BuildToolDependsExternal/client/Hello.x | 3 ++ .../client/client.cabal | 13 +++++ .../pre-proc/MyCustomPreprocessor.hs | 13 +++++ .../pre-proc/pre-proc.cabal | 17 ++++++ .../BuildToolDependsExternal/scripts/alex | 4 ++ .../BuildToolDependsExternal/setup.out | 14 +++++ .../BuildToolDependsExternal/setup.test.hs | 5 ++ .../PackageTests/ExtraProgPath/setup.out | 2 + .../ExtraProgPathLocal/cabal.project | 1 + .../ExtraProgPathLocal/client/Hello.x | 3 ++ .../ExtraProgPathLocal/client/client.cabal | 12 +++++ .../ExtraProgPathLocal/scripts/alex | 3 ++ .../ExtraProgPathLocal/scripts/alex.exe | Bin 0 -> 115712 bytes .../ExtraProgPathLocal/scripts/alex.shim | 2 + .../ExtraProgPathLocal/scripts2/alex | 4 ++ .../ExtraProgPathLocal/scripts2/alex.exe | Bin 0 -> 115712 bytes .../ExtraProgPathLocal/scripts2/alex.shim | 2 + .../PackageTests/ExtraProgPathLocal/setup.out | 10 ++++ .../ExtraProgPathLocal/setup.test.hs | 39 ++++++++++++++ changelog.d/pr-10731 | 4 ++ 22 files changed, 198 insertions(+), 6 deletions(-) create mode 100644 cabal-testsuite/PackageTests/BuildToolDependsExternal/cabal.project create mode 100644 cabal-testsuite/PackageTests/BuildToolDependsExternal/client/Hello.x create mode 100644 cabal-testsuite/PackageTests/BuildToolDependsExternal/client/client.cabal create mode 100644 cabal-testsuite/PackageTests/BuildToolDependsExternal/pre-proc/MyCustomPreprocessor.hs create mode 100644 cabal-testsuite/PackageTests/BuildToolDependsExternal/pre-proc/pre-proc.cabal create mode 100755 cabal-testsuite/PackageTests/BuildToolDependsExternal/scripts/alex create mode 100644 cabal-testsuite/PackageTests/BuildToolDependsExternal/setup.out create mode 100644 cabal-testsuite/PackageTests/BuildToolDependsExternal/setup.test.hs create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathLocal/cabal.project create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathLocal/client/Hello.x create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathLocal/client/client.cabal create mode 100755 cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts/alex create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts/alex.exe create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts/alex.shim create mode 100755 cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts2/alex create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts2/alex.exe create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts2/alex.shim create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathLocal/setup.out create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathLocal/setup.test.hs create mode 100644 changelog.d/pr-10731 diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning.hs b/cabal-install/src/Distribution/Client/ProjectPlanning.hs index 102c08a7a92..644ff8326ba 100644 --- a/cabal-install/src/Distribution/Client/ProjectPlanning.hs +++ b/cabal-install/src/Distribution/Client/ProjectPlanning.hs @@ -471,6 +471,7 @@ configureCompiler let fileMonitorCompiler = newFileMonitor $ distProjectCacheFile "compiler" progsearchpath <- liftIO $ getSystemSearchPath + rerunIfChanged verbosity fileMonitorCompiler @@ -486,7 +487,7 @@ configureCompiler let extraPath = fromNubList packageConfigProgramPathExtra progdb <- liftIO $ prependProgramSearchPath verbosity extraPath [] defaultProgramDb let progdb' = userSpecifyPaths (Map.toList (getMapLast packageConfigProgramPaths)) progdb - (comp, plat, progdb'') <- + result@(_, _, progdb'') <- liftIO $ Cabal.configCompilerEx hcFlavor @@ -503,17 +504,55 @@ configureCompiler -- programs it cares about, and those are the ones we monitor here. monitorFiles (programsMonitorFiles progdb'') - -- Configure the unconfigured programs in the program database, - -- as we can't serialise unconfigured programs. - -- See also #2241 and #9840. - finalProgDb <- liftIO $ configureAllKnownPrograms verbosity progdb'' + -- Note: There is currently a bug here: we are dropping unconfigured + -- programs from the 'ProgramDb' when we re-use the cache created by + -- 'rerunIfChanged'. + -- + -- See Note [Caching the result of configuring the compiler] - return (comp, plat, finalProgDb) + return result where hcFlavor = flagToMaybe projectConfigHcFlavor hcPath = flagToMaybe projectConfigHcPath hcPkg = flagToMaybe projectConfigHcPkg +{- Note [Caching the result of configuring the compiler] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +We can't straightforwardly cache anything that contains a 'ProgramDb', because +the 'Binary' instance for 'ProgramDb' discards all unconfigured programs. +See that instance, as well as 'restoreProgramDb', for a few more details. + +This means that if we try to cache the result of configuring the compiler (which +contains a 'ProgramDb'): + + - On the first run, we will obtain a 'ProgramDb' which may contain several + unconfigured programs. In particular, configuring GHC will add tools such + as `ar` and `ld` as unconfigured programs to the 'ProgramDb', with custom + logic for finding their location based on the location of the GHC binary. + - On subsequent runs, if we use the cache created by 'rerunIfChanged', we will + deserialise the 'ProgramDb' from disk, which means it won't include any + unconfigured programs, which might mean we are unable to find 'ar' or 'ld'. + +This is not currently a huge problem because, in the Cabal library, we eagerly +re-run the configureCompiler step (thus recovering any lost information), but +this is wasted work that we should stop doing in Cabal, given that cabal-install +has already figured out all the necessary information about the compiler. + +To fix this bug, we can't simply eagerly configure all unconfigured programs, +as was originally attempted, for a couple of reasons: + + - it does more work than necessary, by configuring programs that we may not + end up needing, + - it means that we prioritise system executables for built-in build tools + (such as `alex` and `happy`), instead of using the proper version for a + package or package component, as specified by a `build-tool-depends` stanza + or by package-level `extra-prog-path` arguments. + This lead to bug reports #10633 and #10692. + +See #9840 for more information about the problems surrounding the lossly +Binary ProgramDb instance. +-} + ------------------------------------------------------------------------------ -- * Deciding what to do: making an 'ElaboratedInstallPlan' diff --git a/cabal-testsuite/PackageTests/BuildToolDependsExternal/cabal.project b/cabal-testsuite/PackageTests/BuildToolDependsExternal/cabal.project new file mode 100644 index 00000000000..359fdc811bd --- /dev/null +++ b/cabal-testsuite/PackageTests/BuildToolDependsExternal/cabal.project @@ -0,0 +1,2 @@ +packages: client +optional-packages: pre-proc diff --git a/cabal-testsuite/PackageTests/BuildToolDependsExternal/client/Hello.x b/cabal-testsuite/PackageTests/BuildToolDependsExternal/client/Hello.x new file mode 100644 index 00000000000..28f179506bf --- /dev/null +++ b/cabal-testsuite/PackageTests/BuildToolDependsExternal/client/Hello.x @@ -0,0 +1,3 @@ +module Main where + +main = print 0 diff --git a/cabal-testsuite/PackageTests/BuildToolDependsExternal/client/client.cabal b/cabal-testsuite/PackageTests/BuildToolDependsExternal/client/client.cabal new file mode 100644 index 00000000000..a13e99b682a --- /dev/null +++ b/cabal-testsuite/PackageTests/BuildToolDependsExternal/client/client.cabal @@ -0,0 +1,13 @@ +name: client +version: 0.1.0.0 +synopsis: Checks build-tool-depends are put in PATH +license: BSD3 +category: Testing +build-type: Simple +cabal-version: >=1.10 + +executable hello-world + main-is: Hello.hs + build-depends: base + build-tool-depends: pre-proc:alex + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/BuildToolDependsExternal/pre-proc/MyCustomPreprocessor.hs b/cabal-testsuite/PackageTests/BuildToolDependsExternal/pre-proc/MyCustomPreprocessor.hs new file mode 100644 index 00000000000..bcc4af46d1c --- /dev/null +++ b/cabal-testsuite/PackageTests/BuildToolDependsExternal/pre-proc/MyCustomPreprocessor.hs @@ -0,0 +1,13 @@ +module Main where + +import System.Environment +import System.IO + +-- This is a "fake" version of alex, so it should take the command line arguments +-- as alex. +main :: IO () +main = do + (_:"-o":target:source:_) <- getArgs + let f '0' = '1' + f c = c + writeFile target . map f =<< readFile source diff --git a/cabal-testsuite/PackageTests/BuildToolDependsExternal/pre-proc/pre-proc.cabal b/cabal-testsuite/PackageTests/BuildToolDependsExternal/pre-proc/pre-proc.cabal new file mode 100644 index 00000000000..5724eb58296 --- /dev/null +++ b/cabal-testsuite/PackageTests/BuildToolDependsExternal/pre-proc/pre-proc.cabal @@ -0,0 +1,17 @@ +name: pre-proc +version: 999.999.999 +synopsis: Checks build-tool-depends are put in PATH +license: BSD3 +category: Testing +build-type: Simple +cabal-version: >=1.10 + +executable alex + main-is: MyCustomPreprocessor.hs + build-depends: base, directory + default-language: Haskell2010 + +executable bad-do-not-build-me + main-is: MyMissingPreprocessor.hs + build-depends: base, directory + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/BuildToolDependsExternal/scripts/alex b/cabal-testsuite/PackageTests/BuildToolDependsExternal/scripts/alex new file mode 100755 index 00000000000..27bdc4e880d --- /dev/null +++ b/cabal-testsuite/PackageTests/BuildToolDependsExternal/scripts/alex @@ -0,0 +1,4 @@ +#! /usr/bin/env bash + +echo "I am not the alex you are looking for" +exit 1 diff --git a/cabal-testsuite/PackageTests/BuildToolDependsExternal/setup.out b/cabal-testsuite/PackageTests/BuildToolDependsExternal/setup.out new file mode 100644 index 00000000000..0600824409d --- /dev/null +++ b/cabal-testsuite/PackageTests/BuildToolDependsExternal/setup.out @@ -0,0 +1,14 @@ +# cabal v2-build +Configuration is affected by the following files: +- cabal.project +Resolving dependencies... +Build profile: -w ghc- -O1 +In order, the following will be built: + - pre-proc-999.999.999 (exe:alex) (first run) + - client-0.1.0.0 (exe:hello-world) (first run) +Configuring executable 'alex' for pre-proc-999.999.999... +Preprocessing executable 'alex' for pre-proc-999.999.999... +Building executable 'alex' for pre-proc-999.999.999... +Configuring executable 'hello-world' for client-0.1.0.0... +Preprocessing executable 'hello-world' for client-0.1.0.0... +Building executable 'hello-world' for client-0.1.0.0... diff --git a/cabal-testsuite/PackageTests/BuildToolDependsExternal/setup.test.hs b/cabal-testsuite/PackageTests/BuildToolDependsExternal/setup.test.hs new file mode 100644 index 00000000000..6575b355838 --- /dev/null +++ b/cabal-testsuite/PackageTests/BuildToolDependsExternal/setup.test.hs @@ -0,0 +1,5 @@ +import Test.Cabal.Prelude +-- Test build-tool-depends isn't influenced by PATH +main = cabalTest $ do + env <- getTestEnv + addToPath (testTmpDir env "scripts/") $ cabal "v2-build" ["client"] diff --git a/cabal-testsuite/PackageTests/ExtraProgPath/setup.out b/cabal-testsuite/PackageTests/ExtraProgPath/setup.out index a64476a2939..13729def443 100644 --- a/cabal-testsuite/PackageTests/ExtraProgPath/setup.out +++ b/cabal-testsuite/PackageTests/ExtraProgPath/setup.out @@ -3,6 +3,8 @@ Configuration is affected by the following files: - cabal.project Warning: cannot determine version of /pkg-config : "" +Warning: cannot determine version of /pkg-config : +"" Resolving dependencies... Error: [Cabal-7107] Could not resolve dependencies: diff --git a/cabal-testsuite/PackageTests/ExtraProgPathLocal/cabal.project b/cabal-testsuite/PackageTests/ExtraProgPathLocal/cabal.project new file mode 100644 index 00000000000..7c64e37f6d3 --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathLocal/cabal.project @@ -0,0 +1 @@ +packages: client diff --git a/cabal-testsuite/PackageTests/ExtraProgPathLocal/client/Hello.x b/cabal-testsuite/PackageTests/ExtraProgPathLocal/client/Hello.x new file mode 100644 index 00000000000..9f36e8f8813 --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathLocal/client/Hello.x @@ -0,0 +1,3 @@ +This file is deliberately an invalid .x file, +to ensure that we pick up the local alex script rather than +any system-wide alex executable. diff --git a/cabal-testsuite/PackageTests/ExtraProgPathLocal/client/client.cabal b/cabal-testsuite/PackageTests/ExtraProgPathLocal/client/client.cabal new file mode 100644 index 00000000000..825fb893922 --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathLocal/client/client.cabal @@ -0,0 +1,12 @@ +name: client +version: 0.1.0.0 +synopsis: Checks build-tool-depends are put in PATH +license: BSD3 +category: Testing +build-type: Simple +cabal-version: >=1.10 + +executable hello-world + main-is: Hello.hs + build-depends: base + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts/alex b/cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts/alex new file mode 100755 index 00000000000..5fd07c9795b --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts/alex @@ -0,0 +1,3 @@ +#! /usr/bin/env bash + +echo "I am not the alex you are looking for" diff --git a/cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts/alex.exe b/cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts/alex.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 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 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts/alex.shim b/cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts/alex.shim new file mode 100644 index 00000000000..1b827e8f883 --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts/alex.shim @@ -0,0 +1,2 @@ +path = "FINDSH/sh.exe" +args = "SCRIPTSDIR/alex" diff --git a/cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts2/alex b/cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts2/alex new file mode 100755 index 00000000000..671539c560e --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts2/alex @@ -0,0 +1,4 @@ +#! /usr/bin/env bash + +echo "I am the alex you are looking for" +echo "module Main where main = print ()" > $3 diff --git a/cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts2/alex.exe b/cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts2/alex.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 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 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts2/alex.shim b/cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts2/alex.shim new file mode 100644 index 00000000000..0ab606d997a --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathLocal/scripts2/alex.shim @@ -0,0 +1,2 @@ +path = "FINDSH/sh.exe" +args = "SCRIPTS2DIR/alex" diff --git a/cabal-testsuite/PackageTests/ExtraProgPathLocal/setup.out b/cabal-testsuite/PackageTests/ExtraProgPathLocal/setup.out new file mode 100644 index 00000000000..8bcc416af16 --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathLocal/setup.out @@ -0,0 +1,10 @@ +# cabal v2-build +Configuration is affected by the following files: +- cabal.project +Resolving dependencies... +Build profile: -w ghc- -O1 +In order, the following will be built: + - client-0.1.0.0 (exe:hello-world) (first run) +Configuring executable 'hello-world' for client-0.1.0.0... +Preprocessing executable 'hello-world' for client-0.1.0.0... +Building executable 'hello-world' for client-0.1.0.0... diff --git a/cabal-testsuite/PackageTests/ExtraProgPathLocal/setup.test.hs b/cabal-testsuite/PackageTests/ExtraProgPathLocal/setup.test.hs new file mode 100644 index 00000000000..496d5822dd1 --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathLocal/setup.test.hs @@ -0,0 +1,39 @@ +import Test.Cabal.Prelude +import System.Directory + +-- Test package-local extra-prog-path works. +main = cabalTest $ do + env <- getTestEnv + let + testDir = testCurrentDir env + tmpDir = testTmpDir env + scripts1 = tmpDir "scripts" + scripts2 = tmpDir "scripts2" + + ------------------------- + -- Workaround for the fact that, on Windows, Cabal will only look for + -- .exe files to satisfy executable dependencs. So we have to create + -- shim alex.exe files (the good one in 'scripts2', the bad one in 'scripts') + -- with the logic below. + when isWindows $ do + mb_sh <- fmap takeDirectory <$> liftIO (findExecutable "sh") + case mb_sh of + Nothing -> skip "no sh" + Just sh -> do + let escape = concatMap (\c -> case c of '\\' -> "\\\\\\\\"; x -> [x]) + void $ shell "sed" [ "-i", "-e", "s/FINDSH/" <> escape sh <> "/g", escape (scripts1 "alex.shim"), escape (scripts2 "alex.shim") ] + void $ shell "sed" [ "-i", "-e", "s/SCRIPTSDIR/" <> escape scripts1 <> "/g", escape (scripts1 "alex.shim") ] + void $ shell "sed" [ "-i", "-e", "s/SCRIPTS2DIR/" <> escape scripts2 <> "/g", escape (scripts2 "alex.shim") ] + + -- End of Windows workarounds + ------------------------------ + + -- Add the 'scripts' directory to PATH, and add the 'scripts2' directory + -- to extra-prog-path. + -- + -- This checks that the executables in extra-prog-path take priority over + -- those in PATH: 'scripts/alex' will fail, while 'scripts2/alex' will succeed. + + liftIO $ appendFile (testDir "cabal.project") $ + "\npackage client\n extra-prog-path:" ++ scripts2 + addToPath scripts1 $ cabal "v2-build" ["client"] diff --git a/changelog.d/pr-10731 b/changelog.d/pr-10731 new file mode 100644 index 00000000000..7cc8054901f --- /dev/null +++ b/changelog.d/pr-10731 @@ -0,0 +1,4 @@ +synopsis: Fix regression where build-tool-depends are not used +packages: cabal-install +prs: #10731 +issues: #10633 #10692 From 6ed7aee3e782130060feb87bea8efd3f9ac6ec65 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 29 Mar 2025 10:34:04 +0000 Subject: [PATCH 73/87] Backport #10554: Additional version bound checks (#10749) * Add version range constraint operator checks - Check for LEQ upper bounds - Check for GT lower bounds - Check for trailing zero upper bounds - Add missing gtLowerBound to checks - Handle ^>= versions with its IntersectVersionRangesF - Set baseline for cabal init generated bounds - Use recursive functions for checking bounds - Handle union version ranges - Update test expectations with --accept in other tests - Use inclusive lower bound for issue-8646.cabal - Satisfy the parsimonious test for messages - Allow exceptions to 25 char limit explain ids - Rename Is* to Has* to match previous predicates - Move predicates to VersionRange module - Add changelog - Remove unit-test guards that aren't needed - Shorten check IDs - Add warnings to cabal check section of user guide - Terminate bulleted list with full stop - Remove links to pvp.haskell.org - Note version constraint guidelines and mistakes - Add listSep - Reuse queryVersionRange - Bundle pattern synonyms with VersionRangeF - Add doctest docs for version range predicates - Used named chunk for predicate examples - Add predicate subsections for types of bounds - Change lte- to le- prefix - Satisfy fourmolu - Flip sense of LE and GT haddocks - Drop Has prefix on patterns, use LE not LEQ - avoid name clash with has*Bound (VersionRange -> Bool) predicates - use TZ not TrailingZero, a two-letter prefix like the other two - Test expectations with shorter check messages - Remove unused LANGUAGE pragmas - Satisfy hlint - Promote to haddocks, move NOTE about dashes - Rerun --accept test to generate VersionBound/cabal.out - rewrite was not triggered by only a trailing whitespace differerence - Fixup version range of ImpossibleVersionRangeLib - Fixup version range of NonConfCheck/PackageVersionsInternal - Fixup version range of NonConfCheck/PackageVersionsInternalSimple - Fixup version range of NonConfCheck/PackageVersionsLibInt - Fixup version range of NonConfCheck/PackageVersionsStraddle - Fixup version range of NonConfCheck/SetupBounds - Move to DepVersionRange/VersionConstraintOperators - Move to DepVersionRange/UnboundedInternalDep - Move to DepVersionRange/InternalLibDep - Move to DepVersionRange/BaseDep - Move to DepVersionRange/CustomSetupBaseDep (cherry picked from commit d46f325c52de101a3fd83bcdf0348c70e9119a01) # Conflicts: # Cabal/src/Distribution/PackageDescription/Check/Common.hs # Cabal/src/Distribution/PackageDescription/Check/Warning.hs * fixup! resolve two trivial conflicts --------- Co-authored-by: Phil de Joux Co-authored-by: Artem Pelenitsyn --- .../src/Distribution/Types/VersionRange.hs | 101 +++++++++++++++--- .../Types/VersionRange/Internal.hs | 20 +++- Cabal-syntax/src/Distribution/Version.hs | 3 + .../ParserTests/regressions/issue-8646.cabal | 2 +- .../Distribution/PackageDescription/Check.hs | 16 ++- .../PackageDescription/Check/Common.hs | 23 ++-- .../PackageDescription/Check/Target.hs | 19 +++- .../PackageDescription/Check/Warning.hs | 63 ++++++++--- .../ImpossibleVersionRangeLib/cabal.out | 2 +- .../ImpossibleVersionRangeLib/pkg.cabal | 2 +- .../BaseDep}/cabal.out | 0 .../BaseDep}/cabal.test.hs | 0 .../BaseDep}/pkg.cabal | 0 .../CustomSetupBaseDep}/Setup.hs | 0 .../CustomSetupBaseDep}/cabal.out | 0 .../CustomSetupBaseDep}/cabal.test.hs | 0 .../CustomSetupBaseDep}/pkg.cabal | 2 +- .../InternalLibDep}/cabal.out | 0 .../InternalLibDep}/cabal.test.hs | 0 .../InternalLibDep}/pkg.cabal | 4 +- .../UnboundedInternalDep}/cabal.out | 0 .../UnboundedInternalDep}/cabal.test.hs | 0 .../UnboundedInternalDep}/pkg.cabal | 2 +- .../VersionConstraintOperators/cabal.out | 18 ++++ .../VersionConstraintOperators/cabal.test.hs | 4 + .../VersionConstraintOperators/pkg.cabal | 25 +++++ .../PackageVersionsInternal/pkg.cabal | 2 +- .../PackageVersionsStraddle/pkg.cabal | 4 +- changelog.d/pr-10554 | 12 +++ doc/cabal-commands.rst | 35 +++++- 30 files changed, 302 insertions(+), 57 deletions(-) rename cabal-testsuite/PackageTests/Check/{NonConfCheck/PackageVersions => DepVersionRange/BaseDep}/cabal.out (100%) rename cabal-testsuite/PackageTests/Check/{NonConfCheck/PackageVersions => DepVersionRange/BaseDep}/cabal.test.hs (100%) rename cabal-testsuite/PackageTests/Check/{NonConfCheck/PackageVersions => DepVersionRange/BaseDep}/pkg.cabal (100%) rename cabal-testsuite/PackageTests/Check/{NonConfCheck/SetupBounds => DepVersionRange/CustomSetupBaseDep}/Setup.hs (100%) rename cabal-testsuite/PackageTests/Check/{NonConfCheck/SetupBounds => DepVersionRange/CustomSetupBaseDep}/cabal.out (100%) rename cabal-testsuite/PackageTests/Check/{NonConfCheck/SetupBounds => DepVersionRange/CustomSetupBaseDep}/cabal.test.hs (100%) rename cabal-testsuite/PackageTests/Check/{NonConfCheck/SetupBounds => DepVersionRange/CustomSetupBaseDep}/pkg.cabal (90%) rename cabal-testsuite/PackageTests/Check/{NonConfCheck/PackageVersionsLibInt => DepVersionRange/InternalLibDep}/cabal.out (100%) rename cabal-testsuite/PackageTests/Check/{NonConfCheck/PackageVersionsLibInt => DepVersionRange/InternalLibDep}/cabal.test.hs (100%) rename cabal-testsuite/PackageTests/Check/{NonConfCheck/PackageVersionsLibInt => DepVersionRange/InternalLibDep}/pkg.cabal (84%) rename cabal-testsuite/PackageTests/Check/{NonConfCheck/PackageVersionsInternalSimple => DepVersionRange/UnboundedInternalDep}/cabal.out (100%) rename cabal-testsuite/PackageTests/Check/{NonConfCheck/PackageVersionsInternalSimple => DepVersionRange/UnboundedInternalDep}/cabal.test.hs (100%) rename cabal-testsuite/PackageTests/Check/{NonConfCheck/PackageVersionsInternalSimple => DepVersionRange/UnboundedInternalDep}/pkg.cabal (92%) create mode 100644 cabal-testsuite/PackageTests/Check/DepVersionRange/VersionConstraintOperators/cabal.out create mode 100644 cabal-testsuite/PackageTests/Check/DepVersionRange/VersionConstraintOperators/cabal.test.hs create mode 100644 cabal-testsuite/PackageTests/Check/DepVersionRange/VersionConstraintOperators/pkg.cabal create mode 100644 changelog.d/pr-10554 diff --git a/Cabal-syntax/src/Distribution/Types/VersionRange.hs b/Cabal-syntax/src/Distribution/Types/VersionRange.hs index c470b93c0d2..c1e72f728ac 100644 --- a/Cabal-syntax/src/Distribution/Types/VersionRange.hs +++ b/Cabal-syntax/src/Distribution/Types/VersionRange.hs @@ -1,7 +1,26 @@ +{-# LANGUAGE LambdaCase #-} +{-# LANGUAGE ViewPatterns #-} + module Distribution.Types.VersionRange - ( -- * Version ranges + ( -- * Version Range VersionRange + -- ** Predicates + -- $predicate-examples + + -- *** Lower Bound + , hasLowerBound + , hasGTLowerBound + + -- *** Upper Bound + , hasUpperBound + , hasLEUpperBound + , hasTrailingZeroUpperBound + + -- *** Any Version + , isAnyVersion + , isAnyVersionLight + -- ** Constructing , anyVersion , noVersion @@ -16,32 +35,31 @@ module Distribution.Types.VersionRange , withinVersion , majorBoundVersion - -- ** Inspection + -- ** Modification + , normaliseVersionRange + , stripParensVersionRange - -- - -- See "Distribution.Version" for more utilities. + -- ** Inspection , withinRange , foldVersionRange - , normaliseVersionRange - , stripParensVersionRange - , hasUpperBound - , hasLowerBound - -- ** Cata & ana + -- ** Parser + , versionRangeParser + + -- * Version F-Algebra , VersionRangeF (..) + , projectVersionRange + , embedVersionRange , cataVersionRange , anaVersionRange , hyloVersionRange - , projectVersionRange - , embedVersionRange - -- ** Utilities - , isAnyVersion - , isAnyVersionLight + -- * Version Utilities + + -- See "Distribution.Version" for more utilities. , wildcardUpperBound , majorUpperBound , isWildcardRange - , versionRangeParser ) where import Distribution.Compat.Prelude @@ -172,6 +190,9 @@ isWildcardRange ver1 ver2 = check (versionNumbers ver1) (versionNumbers ver2) -- | Does the version range have an upper bound? -- -- @since 1.24.0.0 +-- +-- >>> forM ["< 1", ">= 0 && < 1", ">= 0 || < 1", "^>= 4.20.0.0"] (fmap hasUpperBound . simpleParsec) +-- Just [True,True,False,True] hasUpperBound :: VersionRange -> Bool hasUpperBound = foldVersionRange @@ -188,6 +209,9 @@ hasUpperBound = -- the implicit >=0 lower bound. -- -- @since 1.24.0.0 +-- +-- >>> forM ["< 1", ">= 0 && < 1", ">= 0 || < 1", "^>= 4.20.0.0"] (fmap hasLowerBound . simpleParsec) +-- Just [False,True,False,True] hasLowerBound :: VersionRange -> Bool hasLowerBound = foldVersionRange @@ -197,3 +221,50 @@ hasLowerBound = (const False) (&&) (||) + +-- | Is the upper bound version range (less than or equal (LE, <=)? +-- +-- >>> forM ["< 1", "<= 1", ">= 0 && < 1", ">= 0 || < 1", ">= 0 && <= 1", ">= 0 || <= 1", "^>= 4.20.0.0"] (fmap hasLEUpperBound . simpleParsec) +-- Just [False,True,False,False,True,True,False] +hasLEUpperBound :: VersionRange -> Bool +hasLEUpperBound = queryVersionRange (\case LEUpperBound -> True; _ -> False) hasLEUpperBound + +-- | Is the lower bound version range greater than (GT, >)? +-- +-- >>> forM ["< 1", ">= 0 && < 1", ">= 0 || < 1", "> 0 && < 1", "> 0 || < 1", "^>= 4.20.0.0"] (fmap hasGTLowerBound . simpleParsec) +-- Just [False,False,False,True,True,False] +hasGTLowerBound :: VersionRange -> Bool +hasGTLowerBound = queryVersionRange (\case GTLowerBound -> True; _ -> False) hasGTLowerBound + +-- | Does the upper bound version range have a trailing zero? +-- +-- >>> forM ["< 1", "< 1.1", "< 1.0", "< 1.1.0", "^>= 4.20.0.0"] (fmap hasTrailingZeroUpperBound . simpleParsec) +-- Just [False,False,True,True,False] +hasTrailingZeroUpperBound :: VersionRange -> Bool +hasTrailingZeroUpperBound = queryVersionRange (\case TZUpperBound -> True; _ -> False) hasTrailingZeroUpperBound + +queryVersionRange :: (VersionRangeF VersionRange -> Bool) -> (VersionRange -> Bool) -> VersionRange -> Bool +queryVersionRange pf p (projectVersionRange -> v) = + let f = queryVersionRange pf p + in pf v || case v of + IntersectVersionRangesF x y -> f x || f y + UnionVersionRangesF x y -> f x || f y + _ -> False + +-- $setup +-- >>> import Distribution.Parsec +-- >>> import Data.Traversable + +-- $predicate-examples +-- +-- The parsed 'VersionRange' of each version constraint used in the examples for +-- 'hasUpperBound' and 'hasLowerBound' are: +-- +-- >>> simpleParsec "< 1" :: Maybe VersionRange +-- Just (EarlierVersion (mkVersion [1])) +-- >>> simpleParsec ">= 0 && < 1" :: Maybe VersionRange +-- Just (IntersectVersionRanges (OrLaterVersion (mkVersion [0])) (EarlierVersion (mkVersion [1]))) +-- >>> simpleParsec ">= 0 || < 1" :: Maybe VersionRange +-- Just (UnionVersionRanges (OrLaterVersion (mkVersion [0])) (EarlierVersion (mkVersion [1]))) +-- >>> simpleParsec "^>= 4.20.0.0" :: Maybe VersionRange +-- Just (MajorBoundVersion (mkVersion [4,20,0,0])) diff --git a/Cabal-syntax/src/Distribution/Types/VersionRange/Internal.hs b/Cabal-syntax/src/Distribution/Types/VersionRange/Internal.hs index d1a283ea84b..067cba7695f 100644 --- a/Cabal-syntax/src/Distribution/Types/VersionRange/Internal.hs +++ b/Cabal-syntax/src/Distribution/Types/VersionRange/Internal.hs @@ -5,7 +5,9 @@ {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE ViewPatterns #-} -- | The only purpose of this module is to prevent the export of -- 'VersionRange' constructors from @@ -25,7 +27,7 @@ module Distribution.Types.VersionRange.Internal , intersectVersionRanges , withinVersion , majorBoundVersion - , VersionRangeF (..) + , VersionRangeF (.., LEUpperBound, GTLowerBound, TZUpperBound) , projectVersionRange , embedVersionRange , cataVersionRange @@ -186,6 +188,22 @@ data VersionRangeF a , Traversable ) +pattern LEUpperBound, GTLowerBound, TZUpperBound :: VersionRangeF a +pattern LEUpperBound <- OrEarlierVersionF _ +pattern GTLowerBound <- LaterVersionF _ +pattern TZUpperBound <- (upperTrailingZero -> True) + +upperTrailingZero :: VersionRangeF a -> Bool +upperTrailingZero (OrEarlierVersionF x) = trailingZero x +upperTrailingZero (EarlierVersionF x) = trailingZero x +upperTrailingZero _ = False + +trailingZero :: Version -> Bool +trailingZero (versionNumbers -> vs) + | [0] <- vs = False + | 0 : _ <- reverse vs = True + | otherwise = False + -- | Generic destructor for 'VersionRange'. -- -- @since 2.2 diff --git a/Cabal-syntax/src/Distribution/Version.hs b/Cabal-syntax/src/Distribution/Version.hs index 80383358037..76aed461228 100644 --- a/Cabal-syntax/src/Distribution/Version.hs +++ b/Cabal-syntax/src/Distribution/Version.hs @@ -50,6 +50,9 @@ module Distribution.Version , stripParensVersionRange , hasUpperBound , hasLowerBound + , hasLEUpperBound + , hasTrailingZeroUpperBound + , hasGTLowerBound -- ** Cata & ana , VersionRangeF (..) diff --git a/Cabal-tests/tests/ParserTests/regressions/issue-8646.cabal b/Cabal-tests/tests/ParserTests/regressions/issue-8646.cabal index d631357925f..c7576037132 100644 --- a/Cabal-tests/tests/ParserTests/regressions/issue-8646.cabal +++ b/Cabal-tests/tests/ParserTests/regressions/issue-8646.cabal @@ -11,6 +11,6 @@ license: BSD-3-Clause executable test main-is: ExeMain.hs - build-depends: base > 4 && < 5 + build-depends: base >= 4 && < 5 default-language: Haskell2010 ghc-options: -main-is ExeMain diff --git a/Cabal/src/Distribution/PackageDescription/Check.hs b/Cabal/src/Distribution/PackageDescription/Check.hs index 8bab6ec961a..2d9750de77d 100644 --- a/Cabal/src/Distribution/PackageDescription/Check.hs +++ b/Cabal/src/Distribution/PackageDescription/Check.hs @@ -568,8 +568,20 @@ checkSetupBuildInfo (Just (SetupBuildInfo ds _)) = do rck = PackageDistSuspiciousWarn . MissingUpperBounds CETSetup - checkPVP ick is - checkPVPs rck rs + leuck = + PackageDistSuspiciousWarn + . LEUpperBounds CETSetup + tzuck = + PackageDistSuspiciousWarn + . TrailingZeroUpperBounds CETSetup + gtlck = + PackageDistSuspiciousWarn + . GTLowerBounds CETSetup + checkPVP (checkDependencyVersionRange $ not . hasUpperBound) ick is + checkPVPs (checkDependencyVersionRange $ not . hasUpperBound) rck rs + checkPVPs (checkDependencyVersionRange hasLEUpperBound) leuck ds + checkPVPs (checkDependencyVersionRange hasTrailingZeroUpperBound) tzuck ds + checkPVPs (checkDependencyVersionRange hasGTLowerBound) gtlck ds checkPackageId :: Monad m => PackageIdentifier -> CheckM m () checkPackageId (PackageIdentifier pkgName_ _pkgVersion_) = do diff --git a/Cabal/src/Distribution/PackageDescription/Check/Common.hs b/Cabal/src/Distribution/PackageDescription/Check/Common.hs index 4c528831430..149f3617fc3 100644 --- a/Cabal/src/Distribution/PackageDescription/Check/Common.hs +++ b/Cabal/src/Distribution/PackageDescription/Check/Common.hs @@ -16,6 +16,7 @@ module Distribution.PackageDescription.Check.Common , partitionDeps , checkPVP , checkPVPs + , checkDependencyVersionRange ) where import Distribution.Compat.Prelude @@ -116,34 +117,32 @@ partitionDeps ads ns ds = do -- for important dependencies like base). checkPVP :: Monad m - => (String -> PackageCheck) -- Warn message dependend on name + => (Dependency -> Bool) + -> (String -> PackageCheck) -- Warn message depends on name -- (e.g. "base", "Cabal"). -> [Dependency] -> CheckM m () -checkPVP ckf ds = do - let ods = checkPVPPrim ds +checkPVP p ckf ds = do + let ods = filter p ds mapM_ (tellP . ckf . unPackageName . depPkgName) ods -- PVP dependency check for a list of dependencies. Some code duplication -- is sadly needed to provide more ergonimic error messages. checkPVPs :: Monad m - => ( [String] + => (Dependency -> Bool) + -> ( [String] -> PackageCheck -- Grouped error message, depends on a -- set of names. ) -> [Dependency] -- Deps to analyse. -> CheckM m () -checkPVPs cf ds +checkPVPs p cf ds | null ns = return () | otherwise = tellP (cf ns) where - ods = checkPVPPrim ds + ods = filter p ds ns = map (unPackageName . depPkgName) ods --- Returns dependencies without upper bounds. -checkPVPPrim :: [Dependency] -> [Dependency] -checkPVPPrim ds = filter withoutUpper ds - where - withoutUpper :: Dependency -> Bool - withoutUpper (Dependency _ ver _) = not . hasUpperBound $ ver +checkDependencyVersionRange :: (VersionRange -> Bool) -> Dependency -> Bool +checkDependencyVersionRange p (Dependency _ ver _) = p ver diff --git a/Cabal/src/Distribution/PackageDescription/Check/Target.hs b/Cabal/src/Distribution/PackageDescription/Check/Target.hs index c40fc0ef09a..0bf173cb980 100644 --- a/Cabal/src/Distribution/PackageDescription/Check/Target.hs +++ b/Cabal/src/Distribution/PackageDescription/Check/Target.hs @@ -331,17 +331,30 @@ checkBuildInfo cet ams ads bi = do checkAutogenModules ams bi -- PVP: we check for base and all other deps. + let ds = mergeDependencies $ targetBuildDepends bi (ids, rds) <- partitionDeps ads [mkUnqualComponentName "base"] - (mergeDependencies $ targetBuildDepends bi) + ds let ick = const (PackageDistInexcusable BaseNoUpperBounds) rck = PackageDistSuspiciousWarn . MissingUpperBounds cet - checkPVP ick ids + leuck = PackageDistSuspiciousWarn . LEUpperBounds cet + tzuck = PackageDistSuspiciousWarn . TrailingZeroUpperBounds cet + gtlck = PackageDistSuspiciousWarn . GTLowerBounds cet + checkPVP (checkDependencyVersionRange $ not . hasUpperBound) ick ids unless (isInternalTarget cet) - (checkPVPs rck rds) + (checkPVPs (checkDependencyVersionRange $ not . hasUpperBound) rck rds) + unless + (isInternalTarget cet) + (checkPVPs (checkDependencyVersionRange hasLEUpperBound) leuck ds) + unless + (isInternalTarget cet) + (checkPVPs (checkDependencyVersionRange hasTrailingZeroUpperBound) tzuck ds) + unless + (isInternalTarget cet) + (checkPVPs (checkDependencyVersionRange hasGTLowerBound) gtlck ds) -- Custom fields well-formedness (ASCII). mapM_ checkCustomField (customFieldsBI bi) diff --git a/Cabal/src/Distribution/PackageDescription/Check/Warning.hs b/Cabal/src/Distribution/PackageDescription/Check/Warning.hs index 8588333c1a5..78f256ec211 100644 --- a/Cabal/src/Distribution/PackageDescription/Check/Warning.hs +++ b/Cabal/src/Distribution/PackageDescription/Check/Warning.hs @@ -256,6 +256,9 @@ data CheckExplanation | UnknownCompiler [String] | BaseNoUpperBounds | MissingUpperBounds CEType [String] + | LEUpperBounds CEType [String] + | TrailingZeroUpperBounds CEType [String] + | GTLowerBounds CEType [String] | SuspiciousFlagName [String] | DeclaredUsedFlags (Set.Set FlagName) (Set.Set FlagName) | NonASCIICustomField [String] @@ -419,6 +422,9 @@ data CheckExplanationID | CIUnknownCompiler | CIBaseNoUpperBounds | CIMissingUpperBounds + | CILEUpperBounds + | CITrailingZeroUpperBounds + | CIGTLowerBounds | CISuspiciousFlagName | CIDeclaredUsedFlags | CINonASCIICustomField @@ -561,6 +567,9 @@ checkExplanationId (UnknownArch{}) = CIUnknownArch checkExplanationId (UnknownCompiler{}) = CIUnknownCompiler checkExplanationId (BaseNoUpperBounds{}) = CIBaseNoUpperBounds checkExplanationId (MissingUpperBounds{}) = CIMissingUpperBounds +checkExplanationId (LEUpperBounds{}) = CILEUpperBounds +checkExplanationId (TrailingZeroUpperBounds{}) = CITrailingZeroUpperBounds +checkExplanationId (GTLowerBounds{}) = CIGTLowerBounds checkExplanationId (SuspiciousFlagName{}) = CISuspiciousFlagName checkExplanationId (DeclaredUsedFlags{}) = CIDeclaredUsedFlags checkExplanationId (NonASCIICustomField{}) = CINonASCIICustomField @@ -588,11 +597,13 @@ checkExplanationId (WrongFieldForExpectedDocFiles{}) = CIWrongFieldForExpectedDo type CheckExplanationIDString = String --- A one-word identifier for each CheckExplanation --- --- ☞ N.B: if you modify anything here, remeber to change the documentation --- in @doc/cabal-commands.rst@! +-- | A one-word identifier for each @CheckExplanation@. ppCheckExplanationId :: CheckExplanationID -> CheckExplanationIDString +-- NOTE: If you modify anything here, remember to change the documentation +-- in @doc/cabal-commands.rst@! +-- NOTE: These strings will have to satisfy a test that these messages don't +-- have too many dashes: +-- $ cabal run Cabal-tests:unit-tests -- --pattern=Parsimonious ppCheckExplanationId CIParseWarning = "parser-warning" ppCheckExplanationId CINoNameField = "no-name-field" ppCheckExplanationId CINoVersionField = "no-version-field" @@ -708,6 +719,9 @@ ppCheckExplanationId CIUnknownArch = "unknown-arch" ppCheckExplanationId CIUnknownCompiler = "unknown-compiler" ppCheckExplanationId CIBaseNoUpperBounds = "missing-bounds-important" ppCheckExplanationId CIMissingUpperBounds = "missing-upper-bounds" +ppCheckExplanationId CILEUpperBounds = "le-upper-bounds" +ppCheckExplanationId CITrailingZeroUpperBounds = "tz-upper-bounds" +ppCheckExplanationId CIGTLowerBounds = "gt-lower-bounds" ppCheckExplanationId CISuspiciousFlagName = "suspicious-flag" ppCheckExplanationId CIDeclaredUsedFlags = "unused-flag" ppCheckExplanationId CINonASCIICustomField = "non-ascii" @@ -1301,15 +1315,33 @@ ppExplanation BaseNoUpperBounds = ++ "version. For example if you have tested your package with 'base' " ++ "version 4.5 and 4.6 then use 'build-depends: base >= 4.5 && < 4.7'." ppExplanation (MissingUpperBounds ct names) = - let separator = "\n - " - in "On " - ++ ppCET ct - ++ ", " - ++ "these packages miss upper bounds:" - ++ separator - ++ List.intercalate separator names - ++ "\n" - ++ "Please add them. There is more information at https://pvp.haskell.org/" + "On " + ++ ppCET ct + ++ ", " + ++ "these packages miss upper bounds:" + ++ listSep names + ++ "Please add them. There is more information at https://pvp.haskell.org/" +ppExplanation (LEUpperBounds ct names) = + "On " + ++ ppCET ct + ++ ", " + ++ "these packages have less than or equals (<=) upper bounds:" + ++ listSep names + ++ "Please use less than (<) for upper bounds." +ppExplanation (TrailingZeroUpperBounds ct names) = + "On " + ++ ppCET ct + ++ ", " + ++ "these packages have upper bounds with trailing zeros:" + ++ listSep names + ++ "Please avoid trailing zeros for upper bounds." +ppExplanation (GTLowerBounds ct names) = + "On " + ++ ppCET ct + ++ ", " + ++ "these packages have greater than (>) lower bounds:" + ++ listSep names + ++ "Please use greater than or equals (>=) for lower bounds." ppExplanation (SuspiciousFlagName invalidFlagNames) = "Suspicious flag names: " ++ unwords invalidFlagNames @@ -1471,6 +1503,11 @@ ppExplanation (WrongFieldForExpectedDocFiles extraDocFileSupport field paths) = -- * Formatting utilities +listSep :: [String] -> String +listSep names = + let separator = "\n - " + in separator ++ List.intercalate separator names ++ "\n" + commaSep :: [String] -> String commaSep = List.intercalate ", " diff --git a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Fields/ImpossibleVersionRangeLib/cabal.out b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Fields/ImpossibleVersionRangeLib/cabal.out index c037b09c0f5..37bb62112ca 100644 --- a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Fields/ImpossibleVersionRangeLib/cabal.out +++ b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Fields/ImpossibleVersionRangeLib/cabal.out @@ -1,4 +1,4 @@ # cabal check The package will not build sanely due to these errors: -Error: [impossible-dep] The package has an impossible version range for a dependency on an internal library: pkg:internal >1.0 && <2.0. This version range does not include the current package, and must be removed as the current package's library will always be used. +Error: [impossible-dep] The package has an impossible version range for a dependency on an internal library: pkg:internal >=1.0 && <2. This version range does not include the current package, and must be removed as the current package's library will always be used. Error: Hackage would reject this package. diff --git a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Fields/ImpossibleVersionRangeLib/pkg.cabal b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Fields/ImpossibleVersionRangeLib/pkg.cabal index ffebdd5ee04..64165ade3cb 100644 --- a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Fields/ImpossibleVersionRangeLib/pkg.cabal +++ b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Fields/ImpossibleVersionRangeLib/pkg.cabal @@ -10,7 +10,7 @@ license: GPL-3.0-or-later library exposed-modules: Module build-depends: base == 4.*, - internal > 1.0 && < 2.0 + internal >= 1.0 && < 2 default-language: Haskell2010 library internal diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersions/cabal.out b/cabal-testsuite/PackageTests/Check/DepVersionRange/BaseDep/cabal.out similarity index 100% rename from cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersions/cabal.out rename to cabal-testsuite/PackageTests/Check/DepVersionRange/BaseDep/cabal.out diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersions/cabal.test.hs b/cabal-testsuite/PackageTests/Check/DepVersionRange/BaseDep/cabal.test.hs similarity index 100% rename from cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersions/cabal.test.hs rename to cabal-testsuite/PackageTests/Check/DepVersionRange/BaseDep/cabal.test.hs diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersions/pkg.cabal b/cabal-testsuite/PackageTests/Check/DepVersionRange/BaseDep/pkg.cabal similarity index 100% rename from cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersions/pkg.cabal rename to cabal-testsuite/PackageTests/Check/DepVersionRange/BaseDep/pkg.cabal diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/SetupBounds/Setup.hs b/cabal-testsuite/PackageTests/Check/DepVersionRange/CustomSetupBaseDep/Setup.hs similarity index 100% rename from cabal-testsuite/PackageTests/Check/NonConfCheck/SetupBounds/Setup.hs rename to cabal-testsuite/PackageTests/Check/DepVersionRange/CustomSetupBaseDep/Setup.hs diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/SetupBounds/cabal.out b/cabal-testsuite/PackageTests/Check/DepVersionRange/CustomSetupBaseDep/cabal.out similarity index 100% rename from cabal-testsuite/PackageTests/Check/NonConfCheck/SetupBounds/cabal.out rename to cabal-testsuite/PackageTests/Check/DepVersionRange/CustomSetupBaseDep/cabal.out diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/SetupBounds/cabal.test.hs b/cabal-testsuite/PackageTests/Check/DepVersionRange/CustomSetupBaseDep/cabal.test.hs similarity index 100% rename from cabal-testsuite/PackageTests/Check/NonConfCheck/SetupBounds/cabal.test.hs rename to cabal-testsuite/PackageTests/Check/DepVersionRange/CustomSetupBaseDep/cabal.test.hs diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/SetupBounds/pkg.cabal b/cabal-testsuite/PackageTests/Check/DepVersionRange/CustomSetupBaseDep/pkg.cabal similarity index 90% rename from cabal-testsuite/PackageTests/Check/NonConfCheck/SetupBounds/pkg.cabal rename to cabal-testsuite/PackageTests/Check/DepVersionRange/CustomSetupBaseDep/pkg.cabal index 1c184cb17d4..3aa5c161924 100644 --- a/cabal-testsuite/PackageTests/Check/NonConfCheck/SetupBounds/pkg.cabal +++ b/cabal-testsuite/PackageTests/Check/DepVersionRange/CustomSetupBaseDep/pkg.cabal @@ -9,7 +9,7 @@ maintainer: none@example.com license: GPL-3.0-or-later custom-setup - setup-depends: base > 1 + setup-depends: base >= 1 library exposed-modules: Foo diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsLibInt/cabal.out b/cabal-testsuite/PackageTests/Check/DepVersionRange/InternalLibDep/cabal.out similarity index 100% rename from cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsLibInt/cabal.out rename to cabal-testsuite/PackageTests/Check/DepVersionRange/InternalLibDep/cabal.out diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsLibInt/cabal.test.hs b/cabal-testsuite/PackageTests/Check/DepVersionRange/InternalLibDep/cabal.test.hs similarity index 100% rename from cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsLibInt/cabal.test.hs rename to cabal-testsuite/PackageTests/Check/DepVersionRange/InternalLibDep/cabal.test.hs diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsLibInt/pkg.cabal b/cabal-testsuite/PackageTests/Check/DepVersionRange/InternalLibDep/pkg.cabal similarity index 84% rename from cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsLibInt/pkg.cabal rename to cabal-testsuite/PackageTests/Check/DepVersionRange/InternalLibDep/pkg.cabal index 3d5b861f059..a4e0eecab0d 100644 --- a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsLibInt/pkg.cabal +++ b/cabal-testsuite/PackageTests/Check/DepVersionRange/InternalLibDep/pkg.cabal @@ -9,12 +9,12 @@ license: GPL-3.0-or-later library exposed-modules: Foo - build-depends: base <= 3.10, + build-depends: base < 3.10, int-lib default-language: Haskell2010 library int-lib exposed-modules: Bar - build-depends: text > 1 + build-depends: text >= 1 default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsInternalSimple/cabal.out b/cabal-testsuite/PackageTests/Check/DepVersionRange/UnboundedInternalDep/cabal.out similarity index 100% rename from cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsInternalSimple/cabal.out rename to cabal-testsuite/PackageTests/Check/DepVersionRange/UnboundedInternalDep/cabal.out diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsInternalSimple/cabal.test.hs b/cabal-testsuite/PackageTests/Check/DepVersionRange/UnboundedInternalDep/cabal.test.hs similarity index 100% rename from cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsInternalSimple/cabal.test.hs rename to cabal-testsuite/PackageTests/Check/DepVersionRange/UnboundedInternalDep/cabal.test.hs diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsInternalSimple/pkg.cabal b/cabal-testsuite/PackageTests/Check/DepVersionRange/UnboundedInternalDep/pkg.cabal similarity index 92% rename from cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsInternalSimple/pkg.cabal rename to cabal-testsuite/PackageTests/Check/DepVersionRange/UnboundedInternalDep/pkg.cabal index 06c47e49740..eb60e1c4472 100644 --- a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsInternalSimple/pkg.cabal +++ b/cabal-testsuite/PackageTests/Check/DepVersionRange/UnboundedInternalDep/pkg.cabal @@ -9,7 +9,7 @@ license: GPL-3.0-or-later library exposed-modules: Foo - build-depends: text < 5.0 + build-depends: text < 5 default-language: Haskell2010 executable prova diff --git a/cabal-testsuite/PackageTests/Check/DepVersionRange/VersionConstraintOperators/cabal.out b/cabal-testsuite/PackageTests/Check/DepVersionRange/VersionConstraintOperators/cabal.out new file mode 100644 index 00000000000..e566ffae18a --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/DepVersionRange/VersionConstraintOperators/cabal.out @@ -0,0 +1,18 @@ +# cabal check +These warnings may cause trouble when distributing the package: +Warning: [missing-upper-bounds] On library, these packages miss upper bounds: + - missing-upper + - exclusive-minimums-missing-upper + - or-exclusive-minimums-missing-upper + - or-inclusive-maximums-missing-upper +Please add them. There is more information at https://pvp.haskell.org/ +Warning: [le-upper-bounds] On library, these packages have less than or equals (<=) upper bounds: + - inclusive-maximums + - and-inclusive-maximums + - or-inclusive-maximums-missing-upper +Please use less than (<) for upper bounds. +Warning: [gt-lower-bounds] On library, these packages have greater than (>) lower bounds: + - exclusive-minimums-missing-upper + - and-exclusive-minimums + - or-exclusive-minimums-missing-upper +Please use greater than or equals (>=) for lower bounds. diff --git a/cabal-testsuite/PackageTests/Check/DepVersionRange/VersionConstraintOperators/cabal.test.hs b/cabal-testsuite/PackageTests/Check/DepVersionRange/VersionConstraintOperators/cabal.test.hs new file mode 100644 index 00000000000..60a32cb7374 --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/DepVersionRange/VersionConstraintOperators/cabal.test.hs @@ -0,0 +1,4 @@ +import Test.Cabal.Prelude + +main = cabalTest $ + cabal "check" [] diff --git a/cabal-testsuite/PackageTests/Check/DepVersionRange/VersionConstraintOperators/pkg.cabal b/cabal-testsuite/PackageTests/Check/DepVersionRange/VersionConstraintOperators/pkg.cabal new file mode 100644 index 00000000000..f8fc673e14c --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/DepVersionRange/VersionConstraintOperators/pkg.cabal @@ -0,0 +1,25 @@ +cabal-version: 3.0 +name: pkg +synopsis: synopsis +description: description +version: 0 +category: example +maintainer: none@example.com +license: GPL-3.0-or-later + +library + exposed-modules: Foo + default-language: Haskell2010 + build-depends: + , base ^>= 4.20.0.0 + + , missing-upper >= 0 + , missing-lower < 1 + + , exclusive-minimums-missing-upper > 0 + , and-exclusive-minimums > 0 && < 1 + , or-exclusive-minimums-missing-upper > 0 || < 1 + + , inclusive-maximums <= 1 + , and-inclusive-maximums >= 0 && <= 1 + , or-inclusive-maximums-missing-upper >= 0 || <= 1 diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsInternal/pkg.cabal b/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsInternal/pkg.cabal index 91943d4987a..cbd71c314f5 100644 --- a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsInternal/pkg.cabal +++ b/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsInternal/pkg.cabal @@ -10,7 +10,7 @@ license: GPL-3.0-or-later library exposed-modules: Foo default-language: Haskell2010 - build-depends: base <= 3.10 + build-depends: base < 3.10 executable test-exe main-is: Main.hs diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsStraddle/pkg.cabal b/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsStraddle/pkg.cabal index b21ffe61f12..37d3948e696 100644 --- a/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsStraddle/pkg.cabal +++ b/cabal-testsuite/PackageTests/Check/NonConfCheck/PackageVersionsStraddle/pkg.cabal @@ -10,6 +10,6 @@ license: GPL-3.0-or-later library exposed-modules: Foo default-language: Haskell2010 - build-depends: base > 2, - base <= 3.10 + build-depends: base >= 2, + base < 3.10 diff --git a/changelog.d/pr-10554 b/changelog.d/pr-10554 new file mode 100644 index 00000000000..569bba5e0d8 --- /dev/null +++ b/changelog.d/pr-10554 @@ -0,0 +1,12 @@ +--- +synopsis: Adds more version range checks to `cabal check`. +packages: [Cabal-syntax, Cabal] +prs: 10554 +issues: 9806 +--- + +For dependencies, warns about and checks that version range bounds for: + +- lower bounds are inclusive, don't use (>) +- upper bounds are exclusive, don't use (<=) +- upper bounds don't have trailing zeros, don't end with (*.0). diff --git a/doc/cabal-commands.rst b/doc/cabal-commands.rst index c0881517fa3..4215bd29678 100644 --- a/doc/cabal-commands.rst +++ b/doc/cabal-commands.rst @@ -1390,7 +1390,10 @@ A list of all warnings with their constructor: - ``unknown-arch``: unknown architecture in condition. - ``unknown-compiler``: unknown compiler in condition. - ``missing-bounds-important``: missing upper bounds for important dependencies (``base``, and for ``custom-setup`` ``Cabal`` too). -- ``missing-upper-bounds``: missing upper bound in dependency (excluding test-suites and benchmarks). +- ``missing-upper-bounds``: missing upper bound in dependency [#dep-excl]_. +- ``le-upper-bounds``: less than or equals (<=) constraint on upper bound in dependency [#dep-excl]_. +- ``tz-upper-bounds``: trailing zero (\*.0) upper bound in dependency [#dep-excl]_. +- ``gt-lower-bounds``: greater than (>) constraint on lower bound in dependency [#dep-excl]_. - ``suspicious-flag``: troublesome flag name (e.g. starting with a dash). - ``unused-flag``: unused user flags. - ``non-ascii``: non-ASCII characters in custom field. @@ -1416,6 +1419,36 @@ A list of all warnings with their constructor: - ``no-docs``: missing expected documentation files (changelog). - ``doc-place``: documentation files listed in ``extra-source-files`` instead of ``extra-doc-files``. +.. [#dep-excl] In dependencies excluding test-suites and benchmarks. + +.. note:: + + ``cabal check`` warns on subexpressions (individual version constraints) of + a version range that are of the form, ``> version``, ``<= version``, ``<= + version.0[...0]``. These are considered suspicious because they are likely + to be mistakes. Guidelines for individual version constraints within + version ranges and examples of mistakes when not following these are: + + "A lower bound should be inclusive." + + Asking for ``base > 4.11`` when you actually want ``base >= 4.12`` is an + example of making this mistake. Versions make a dense space, so there + are infinitely many versions that are ``> 4.11`` and ``< 4.12``. + + "An upper bound should be exclusive." + + Asking for ``base <= 4.19.1.0`` when the last published version is + ``base-4.19.1.0`` is an example of making this mistake. This blocks + patch releases that should always be fine according to the PVP. The + correct minor bound is ``base < 4.19.2``. + + "An upper bound should not have trailing zeros." + + Asking for ``base < 4.20.0.0`` when you meant allow any ``base-4.19.*`` + version is an example of making this mistake. In fact, ``base-4.20`` and + ``base-4.20.0`` are not excluded by the bound. The correct bound is ``< + 4.20``. + .. _cabal-sdist: cabal sdist From 2f2a29cf24b9effad90792d1d776e7a3e79f5d48 Mon Sep 17 00:00:00 2001 From: Bryan Richter Date: Tue, 18 Mar 2025 17:18:20 +0200 Subject: [PATCH 74/87] Use a newer ci-images for centos7 (cherry picked from commit 9159c0077423bc3be57a7546f33561ebc13e7df9) --- .gitlab-ci.yml | 9 ++++++++- .gitlab/ci.sh | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 31066604616..87b6d0de22a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -38,7 +38,6 @@ linux: - ARCH: x86_64 TAG: x86_64-linux OS: - - centos7 - deb9 - deb10 - deb11 @@ -50,6 +49,14 @@ linux: - ubuntu18_04 - ubuntu20_04 - ubuntu22_04 + # Pull this one from the future, since it's missing. + # We can't move the entire file to this DOCKER_REV, because + # i386-linux-deb9 is missing from it. + - ARCH: x86_64 + TAG: x86_64-linux + OS: centos7 + DOCKER_REV: f2d12519f45a13a61fcca03a949f927ceead6492 + - ARCH: aarch64 TAG: aarch64-linux OS: diff --git a/.gitlab/ci.sh b/.gitlab/ci.sh index 1515a6afe22..94abd39cdf9 100755 --- a/.gitlab/ci.sh +++ b/.gitlab/ci.sh @@ -4,7 +4,14 @@ set -Eeuo pipefail source "$CI_PROJECT_DIR/.gitlab/common.sh" -if [[ "$(uname)" == "Linux" ]]; then +## Figure out how to get the Haskell toolchain. + +# For backport, the centos image no longer has the right GHC version, so use +# ghcup. +if [[ -f /etc/os-release && "$(grep ^ID /etc/os-release)" =~ "centos" ]]; then + . "$CI_PROJECT_DIR/.gitlab/ghcup.sh" +# All the other ones are fine. +elif [[ "$(uname)" == "Linux" ]]; then export PATH="/opt/ghc/${GHC_VERSION}/bin:${PATH}" # Not all runners use ci-images, so ghcup is used. else From cf1e436b0752a1229247ea752f5b716771da64db Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 31 Mar 2025 11:04:33 +0000 Subject: [PATCH 75/87] Backport #10719: Follow HLint suggestion: use fewer imports (#10733) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Remove CPP MIN_VERSION_base(4,11,0) in Cabal.Monad (cherry picked from commit c7f3def10b73056a60e5ffe28c3af63b8b1ecb9c) * Follow hlint suggestion: use fewer imports - Use fewer imports with CPP in Compat.Time - Use fewer imports in IntegrationTests2 - Use fewer imports in Distribution.Client.ProjectPlanning - Use fewer imports in Distribution.Client.Config - Use fewer imports in Distribution.Client.NixStyleOptions - Use fewer imports in Internal.TempFile - Use fewer imports in Distribution.Client.Store - Use fewer imports in Distribution.Client.SetupWrapper - Use fewer imports in Disribution.Simple.GHC - Use fewer imports in NeedleHaystack - Remove unused -XCPP from Client.ProjectPlanning - Enable hlint suggestion "Use fewer imports" - Ignore custom setup test files from Idris and Doctest (cherry picked from commit 217f08ac58a597d14222d6c0fe1322a91387653f) # Conflicts: # .hlint.yaml # cabal-install/tests/IntegrationTests2.hs # cabal-testsuite/src/Test/Cabal/NeedleHaystack.hs * Bump hlint warning counts (cherry picked from commit d165dfda4361a7c1c51b6e7869ffcb2c0311b6d0) # Conflicts: # .hlint.yaml * resolve conflicts * remove redundant imports * fix style --------- Co-authored-by: Phil de Joux Co-authored-by: Hécate Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- .hlint.yaml | 8 +- .../Distribution/Compat/Internal/TempFile.hs | 4 +- Cabal/src/Distribution/Compat/Time.hs | 9 +- Cabal/src/Distribution/Simple/GHC.hs | 23 +- .../src/Distribution/Client/CmdTest.hs | 4 +- .../src/Distribution/Client/Config.hs | 8 +- .../Distribution/Client/ProjectPlanning.hs | 15 +- .../src/Distribution/Client/SetupWrapper.hs | 6 +- .../src/Distribution/Client/Store.hs | 3 +- cabal-install/tests/IntegrationTests2.hs | 26 +- cabal-testsuite/src/Test/Cabal/Monad.hs | 4 - .../src/Test/Cabal/NeedleHaystack.hs | 276 ++++++++++++++++++ 12 files changed, 341 insertions(+), 45 deletions(-) create mode 100644 cabal-testsuite/src/Test/Cabal/NeedleHaystack.hs diff --git a/.hlint.yaml b/.hlint.yaml index 0170ee22ebd..506bbbdb2c4 100644 --- a/.hlint.yaml +++ b/.hlint.yaml @@ -49,9 +49,8 @@ - ignore: {name: "Use concatMap"} # 1 hint - ignore: {name: "Use const"} # 36 hints - ignore: {name: "Use elem"} # 2 hints -- ignore: {name: "Use fewer imports"} # 19 hints - ignore: {name: "Use first"} # 4 hints -- ignore: {name: "Use fmap"} # 24 hints +- ignore: {name: "Use fmap"} # 25 hints - ignore: {name: "Use fold"} # 1 hint - ignore: {name: "Use for"} # 1 hint - ignore: {name: "Use forM_"} # 1 hint @@ -67,7 +66,7 @@ - ignore: {name: "Use isNothing"} # 1 hint - ignore: {name: "Use lambda-case"} # 47 hints - ignore: {name: "Use lefts"} # 1 hint -- ignore: {name: "Use list comprehension"} # 16 hints +- ignore: {name: "Use list comprehension"} # 19 hints - ignore: {name: "Use list literal"} # 3 hints - ignore: {name: "Use list literal pattern"} # 11 hints - ignore: {name: "Use map once"} # 7 hints @@ -96,6 +95,9 @@ - arguments: - --ignore-glob=Cabal-syntax/src/Distribution/Fields/Lexer.hs + - --ignore-glob=Cabal-tests/tests/custom-setup/CabalDoctestSetup.hs + - --ignore-glob=Cabal-tests/tests/custom-setup/IdrisSetup.hs + - --ignore-glob=cabal-testsuite/PackageTests/BuildWays/q/app/Main.hs - --ignore-glob=cabal-testsuite/PackageTests/CmmSources/src/Demo.hs - --ignore-glob=cabal-testsuite/PackageTests/CmmSourcesDyn/src/Demo.hs - --ignore-glob=cabal-testsuite/PackageTests/CmmSourcesExe/src/Demo.hs diff --git a/Cabal/src/Distribution/Compat/Internal/TempFile.hs b/Cabal/src/Distribution/Compat/Internal/TempFile.hs index 5d3683be079..89f8575b6e8 100644 --- a/Cabal/src/Distribution/Compat/Internal/TempFile.hs +++ b/Cabal/src/Distribution/Compat/Internal/TempFile.hs @@ -15,17 +15,17 @@ import System.FilePath (()) import System.IO (Handle, openBinaryTempFile, openTempFile) #if defined(__IO_MANAGER_WINIO__) import System.IO (openBinaryTempFileWithDefaultPermissions) +import System.Posix.Internals (c_getpid) #else import Control.Exception (onException) import Data.Bits ((.|.)) import Foreign.C (CInt, eEXIST, getErrno, errnoToIOError) import GHC.IO.Handle.FD (fdToHandle) -import System.Posix.Internals (c_open, c_close, o_EXCL, o_BINARY, withFilePath, +import System.Posix.Internals (c_getpid, c_open, c_close, o_EXCL, o_BINARY, withFilePath, o_CREAT, o_RDWR, o_NONBLOCK, o_NOCTTY) #endif import System.IO.Error (isAlreadyExistsError) -import System.Posix.Internals (c_getpid) #if defined(mingw32_HOST_OS) || defined(ghcjs_HOST_OS) import System.Directory ( createDirectory ) diff --git a/Cabal/src/Distribution/Compat/Time.hs b/Cabal/src/Distribution/Compat/Time.hs index 088c01950c0..cce1ceaf819 100644 --- a/Cabal/src/Distribution/Compat/Time.hs +++ b/Cabal/src/Distribution/Compat/Time.hs @@ -41,13 +41,14 @@ import System.Win32.Types ( BOOL, DWORD, LPCTSTR, LPVOID, withTString ) #else -import System.Posix.Files ( FileStatus, getFileStatus ) - +import System.Posix.Files + ( FileStatus, getFileStatus #if MIN_VERSION_unix(2,6,0) -import System.Posix.Files ( modificationTimeHiRes ) + , modificationTimeHiRes #else -import System.Posix.Files ( modificationTime ) + , modificationTime #endif + ) #endif diff --git a/Cabal/src/Distribution/Simple/GHC.hs b/Cabal/src/Distribution/Simple/GHC.hs index 17777b3f6db..0bd81875d72 100644 --- a/Cabal/src/Distribution/Simple/GHC.hs +++ b/Cabal/src/Distribution/Simple/GHC.hs @@ -125,24 +125,29 @@ import Distribution.Utils.Path import Distribution.Verbosity import Distribution.Version import Language.Haskell.Extension -import System.Directory - ( canonicalizePath - , createDirectoryIfMissing - , doesDirectoryExist - , doesFileExist - , getAppUserDataDirectory - , getDirectoryContents - ) import System.FilePath ( isRelative , takeDirectory ) import qualified System.Info #ifndef mingw32_HOST_OS -import System.Directory (renameFile) import System.Posix (createSymbolicLink) #endif /* mingw32_HOST_OS */ +{- FOURMOLU_DISABLE -} +import System.Directory + ( canonicalizePath + , createDirectoryIfMissing + , doesDirectoryExist + , doesFileExist + , getAppUserDataDirectory + , getDirectoryContents +#ifndef mingw32_HOST_OS + , renameFile +#endif + ) +{- FOURMOLU_ENABLE -} + import Distribution.Simple.Setup (BuildingWhat (..)) import Distribution.Simple.Setup.Build diff --git a/cabal-install/src/Distribution/Client/CmdTest.hs b/cabal-install/src/Distribution/Client/CmdTest.hs index 7c1adffdc91..3812bd6af87 100644 --- a/cabal-install/src/Distribution/Client/CmdTest.hs +++ b/cabal-install/src/Distribution/Client/CmdTest.hs @@ -33,7 +33,8 @@ import Distribution.Client.NixStyleOptions ) import Distribution.Client.ProjectOrchestration import Distribution.Client.Setup - ( ConfigFlags (..) + ( CommonSetupFlags (..) + , ConfigFlags (..) , GlobalFlags (..) ) import Distribution.Client.TargetProblem @@ -66,7 +67,6 @@ import Distribution.Verbosity import qualified System.Exit (exitSuccess) import Distribution.Client.Errors -import Distribution.Client.Setup (CommonSetupFlags (..)) import GHC.Environment ( getFullArgs ) diff --git a/cabal-install/src/Distribution/Client/Config.hs b/cabal-install/src/Distribution/Client/Config.hs index e25e9612003..e3c768643ce 100644 --- a/cabal-install/src/Distribution/Client/Config.hs +++ b/cabal-install/src/Distribution/Client/Config.hs @@ -49,7 +49,10 @@ module Distribution.Client.Config ) where import Distribution.Client.Compat.Prelude -import Distribution.Compat.Environment (lookupEnv) +import Distribution.Compat.Environment + ( getEnvironment + , lookupEnv + ) import Prelude () import Language.Haskell.Extension (Language (Haskell2010)) @@ -126,9 +129,6 @@ import Distribution.Client.Version ( cabalInstallVersion ) import qualified Distribution.Compat.CharParsing as P -import Distribution.Compat.Environment - ( getEnvironment - ) import Distribution.Compiler ( CompilerFlavor (..) , defaultCompilerFlavor diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning.hs b/cabal-install/src/Distribution/Client/ProjectPlanning.hs index 644ff8326ba..bf130a2f362 100644 --- a/cabal-install/src/Distribution/Client/ProjectPlanning.hs +++ b/cabal-install/src/Distribution/Client/ProjectPlanning.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveFunctor #-} @@ -100,7 +99,18 @@ module Distribution.Client.ProjectPlanning ) where import Distribution.Client.Compat.Prelude -import Text.PrettyPrint (render) +import Text.PrettyPrint + ( colon + , comma + , fsep + , hang + , punctuate + , quotes + , render + , text + , vcat + , ($$) + ) import Prelude () import Distribution.Client.Config @@ -220,7 +230,6 @@ import qualified Data.Set as Set import Distribution.Client.Errors import Distribution.Solver.Types.ProjectConfigPath import System.FilePath -import Text.PrettyPrint (colon, comma, fsep, hang, punctuate, quotes, text, vcat, ($$)) import qualified Text.PrettyPrint as Disp -- | Check that an 'ElaboratedConfiguredPackage' actually makes diff --git a/cabal-install/src/Distribution/Client/SetupWrapper.hs b/cabal-install/src/Distribution/Client/SetupWrapper.hs index 1b401ff6f7c..78833af6d15 100644 --- a/cabal-install/src/Distribution/Client/SetupWrapper.hs +++ b/cabal-install/src/Distribution/Client/SetupWrapper.hs @@ -143,7 +143,10 @@ import Distribution.Simple.Program.GHC , renderGhcOptions ) import Distribution.Simple.Setup - ( Flag (..), CommonSetupFlags (..), GlobalFlags (..) + ( CommonSetupFlags (..) + , Flag (..) + , GlobalFlags (..) + , globalCommand ) import Distribution.Simple.Utils ( cabalVersion @@ -175,7 +178,6 @@ import Distribution.Verbosity import Data.List (foldl1') import qualified Data.Map.Lazy as Map -import Distribution.Simple.Setup (globalCommand) import Distribution.Client.Compat.ExecutablePath (getExecutablePath) import Distribution.Compat.Process (proc) import System.Directory (doesFileExist) diff --git a/cabal-install/src/Distribution/Client/Store.hs b/cabal-install/src/Distribution/Client/Store.hs index 9ffe6099c7f..dcf4c78d02c 100644 --- a/cabal-install/src/Distribution/Client/Store.hs +++ b/cabal-install/src/Distribution/Client/Store.hs @@ -47,8 +47,7 @@ import System.FilePath import Lukko #else import System.IO (openFile, IOMode(ReadWriteMode), hClose) -import GHC.IO.Handle.Lock (hLock, hTryLock, LockMode(ExclusiveLock)) -import GHC.IO.Handle.Lock (hUnlock) +import GHC.IO.Handle.Lock (LockMode (ExclusiveLock), hLock, hTryLock, hUnlock) #endif -- $concurrency diff --git a/cabal-install/tests/IntegrationTests2.hs b/cabal-install/tests/IntegrationTests2.hs index 4b0c6e46813..486ebc8edc0 100644 --- a/cabal-install/tests/IntegrationTests2.hs +++ b/cabal-install/tests/IntegrationTests2.hs @@ -45,24 +45,31 @@ import qualified Distribution.Client.CmdBench as CmdBench import qualified Distribution.Client.CmdHaddock as CmdHaddock import qualified Distribution.Client.CmdListBin as CmdListBin +import qualified Distribution.Client.CmdHaddockProject as CmdHaddockProject +import Distribution.Client.Config (SavedConfig (savedGlobalFlags), createDefaultConfigFile, loadConfig) +import Distribution.Client.GlobalFlags + ( GlobalFlags + , defaultGlobalFlags + , globalNix + ) +import Distribution.Client.Setup (globalCommand, globalStoreDir) +import Distribution.ModuleName (ModuleName) import Distribution.Package import Distribution.PackageDescription import Distribution.InstalledPackageInfo (InstalledPackageInfo) -import Distribution.Simple.Setup (toFlag, HaddockFlags(..), defaultHaddockFlags) -import Distribution.Client.Setup (globalCommand) -import Distribution.Client.Config (loadConfig, SavedConfig(savedGlobalFlags), createDefaultConfigFile) +import Distribution.Simple.Setup + ( toFlag, + HaddockFlags(..), + defaultHaddockFlags, + HaddockProjectFlags(..), + defaultHaddockProjectFlags ) import Distribution.Simple.Compiler import Distribution.Simple.Command import qualified Distribution.Simple.Flag as Flag import Distribution.System import Distribution.Version -import Distribution.ModuleName (ModuleName) import Distribution.Text import Distribution.Utils.Path (unsafeMakeSymbolicPath) -import qualified Distribution.Client.CmdHaddockProject as CmdHaddockProject -import Distribution.Client.Setup (globalStoreDir) -import Distribution.Client.GlobalFlags (defaultGlobalFlags) -import Distribution.Simple.Setup (HaddockProjectFlags(..), defaultHaddockProjectFlags) import qualified Data.Map as Map import qualified Data.Set as Set @@ -83,10 +90,9 @@ import Test.Tasty.Options import Data.Tagged (Tagged(..)) import qualified Data.ByteString as BS -import Distribution.Client.GlobalFlags (GlobalFlags, globalNix) +import Data.Maybe (fromJust) import Distribution.Simple.Flag (Flag (Flag, NoFlag)) import Distribution.Types.ParStrat -import Data.Maybe (fromJust) #if !MIN_VERSION_directory(1,2,7) removePathForcibly :: FilePath -> IO () diff --git a/cabal-testsuite/src/Test/Cabal/Monad.hs b/cabal-testsuite/src/Test/Cabal/Monad.hs index 38534402d26..4c383220b21 100644 --- a/cabal-testsuite/src/Test/Cabal/Monad.hs +++ b/cabal-testsuite/src/Test/Cabal/Monad.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE ScopedTypeVariables #-} -- | The test monad @@ -88,9 +87,6 @@ import Distribution.Verbosity import Distribution.Version import Control.Concurrent.Async -#if !MIN_VERSION_base(4,11,0) -import Data.Monoid ((<>)) -#endif import Data.Monoid (mempty) import qualified Control.Exception as E import Control.Monad diff --git a/cabal-testsuite/src/Test/Cabal/NeedleHaystack.hs b/cabal-testsuite/src/Test/Cabal/NeedleHaystack.hs new file mode 100644 index 00000000000..0e8dfae9038 --- /dev/null +++ b/cabal-testsuite/src/Test/Cabal/NeedleHaystack.hs @@ -0,0 +1,276 @@ +{-# LANGUAGE MultiWayIf #-} +{-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE ViewPatterns #-} + +-- | Functions for searching for a needle in a haystack, with transformations +-- for the strings to search in and the search strings such as re-encoding line +-- breaks or delimiting lines. Both LF and CRLF line breaks are recognized. +module Test.Cabal.NeedleHaystack + ( TxContains(..) + , txContainsId + , NeedleHaystack(..) + , symNeedleHaystack + , multilineNeedleHaystack + , needleHaystack + , lineBreaksToSpaces + , normalizePathSeparators + , encodeLf + , delimitLines + ) where + +import Prelude hiding (unlines) +import qualified Prelude (unlines) +import Data.Maybe (isJust) +import Distribution.System +import Distribution.Utils.Generic (unsnoc) +import Data.List (isPrefixOf, tails) +import qualified System.FilePath.Posix as Posix +import qualified System.FilePath.Windows as Windows +import Network.URI (parseURI) + +{- +Note [Multiline Needles] +~~~~~~~~~~~~~~~~~~~~~~~~ + +How we search for multiline strings in output that varies by platform. + +Reading Expected Multiline Strings Verbatim +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +With @ghc-9.12.1@ adding @-XMultilineStrings@, writing multiline string +expectations for @cabal-testsuite/PackageTests/**/*.test.hs@ test scripts might +be have been easier but for a catch. We run these tests with older @GHC@ +versions so would need to use @-XCPP@ for those versions and the C preprocessor +does not play nicely with string gaps. While it is possible to encode a +multiline string as a single line with embedded LF characters or by breaking the +line up arbitrarily and using @++@ concatenation or by calling unlines on a list +of lines, string gaps are the multiline strings of Haskell prior to +@-XMultilineStrings@. + +To avoid these problems and for the convenience of pasting the expected value +verbatim into a file, @readFileVerbatim@ can read the expected multiline output +for tests from a text file. This has the same implementation as @readFile@ from +the @strict-io@ package to avoid problems at cleanup. + +Warning: Windows file locking hack: hit the retry limit 3 while trying to remove +C:\Users\\AppData\Local\Temp\cabal-testsuite-8376 +cabal.test.hs: +C:\Users\\AppData\Local\Temp\cabal-testsuite-8376\errors.expect.txt: removePathForcibly:DeleteFile +"\\\\?\\C:\\Users\\\\AppData\\Local\\Temp\\cabal-testsuite-8376\\errors.expect.txt": +permission denied (The process cannot access the file because it is being used by another process.) + +The other process accessing the file is @C:\WINDOWS\System32\svchost.exe@ +running a @QueryDirectory@ event and this problem only occurs when the test +fails. + +Hidden Actual Value Modification +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The @assertOutputContains@ function was modifying the actual value (the test +output) with @concatOutput@ before checking if it contained the expected value. +This function, now renamed as @lineBreaksToSpaces@, would remove CR values and +convert LF values to spaces. + +With this setup, false positives were possible. An expected value using string +gaps and spaces would match a @concatOutput@ modified actual value of +"foo_bar_baz", where '_' was any of space, LF or CRLF in the unmodified actual +value. The latter two are false positive matches. + +> let expect = "foo \ +> \bar \ +> \baz" + +False negatives were also possible. An expected value set up using string gaps +with LF characters or with @-XMultilineStrings@ wouldn't match an actual value +of "foo_bar_baz", where '_' was either LF or CRLF because these characters had +been replaced by spaces in the actual value, modified before the comparison. + +> let expect = "foo\n\ +> \bar\n\ +> \baz" + +> {-# LANGUAGE MultilineStrings #-} +> +> let expect = """ +> foo +> bar +> baz +> """ + +We had these problems: + +1. The actual value was changed before comparison and this change was not visible. +2. The expected value was not changed in the same way as the actual value. This + made it possible for equal values to become unequal (false negatives) and for + unequal values to become equal (false positives). + +Explicit Changes and Visible Line Delimiters +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To fix these problems, an added @assertOn@ function takes a @NeedleHaystack@ +configuration for how the search is made, what to expect (to find the expected +value or not) and how to display the expected and actual values. + +A pilcrow ¶ is often used to visibly display line endings but our terminal +output is restricted to ASCII so lines are delimited between @^@ and @$@ +markers. The needle (the expected output fragment) is shown annotated this way +and the haystack (the actual output) can optionally be shown this way too. + +This is still a lenient match, allowing LF to match CRLF, but @encodeLf@ doesn't +replace LF with spaces like @concatOutput@ (@lineBreaksToSpaces@) did: + +If you choose to display the actual value by setting +@NeedleHaystack{displayHaystack = True}@ then its lines will be delimited. + +With @assertOn@, supplying string transformation to both the needle and haystack +before comparison and before display can help find out why an expected value is +or isn't found in the test output. +-} + +-- | Transformations for the search strings and the text to search in. +data TxContains = + TxContains + { + -- | Reverse conversion for display, applied to the forward converted value. + txBwd :: (String -> String), + -- | Forward conversion for comparison. + txFwd :: (String -> String) + } + +-- | Identity transformation for the search strings and the text to search in, +-- leaves them unchanged. +txContainsId :: TxContains +txContainsId = TxContains id id + +-- | Conversions of the needle and haystack strings, the seach string and the +-- text to search in. +data NeedleHaystack = + NeedleHaystack + { + expectNeedleInHaystack :: Bool, + displayHaystack :: Bool, + txNeedle :: TxContains, + txHaystack :: TxContains + } + +-- | Symmetric needle and haystack functions, the same conversion for each going +-- forward and the same coversion for each going backward. +symNeedleHaystack :: (String -> String) -> (String -> String) -> NeedleHaystack +symNeedleHaystack bwd fwd = let tx = TxContains bwd fwd in NeedleHaystack True False tx tx + +-- | Multiline needle and haystack functions with symmetric conversions. Going +-- forward converts line breaks to @"\\n"@. Going backward adds visible +-- delimiters to lines. +multilineNeedleHaystack :: NeedleHaystack +multilineNeedleHaystack = symNeedleHaystack delimitLines encodeLf + +-- | Minimal set up for finding the needle in the haystack. Doesn't change the +-- strings and doesn't display the haystack in any assertion failure message. +needleHaystack :: NeedleHaystack +needleHaystack = NeedleHaystack True False txContainsId txContainsId + +-- | Replace line breaks with spaces, correctly handling @"\\r\\n"@. +-- +-- >>> lineBreaksToSpaces "foo\nbar\r\nbaz" +-- "foo bar baz" +-- +-- >>> lineBreaksToSpaces "foo\nbar\r\nbaz\n" +-- "foo bar baz" +-- +-- >>> lineBreaksToSpaces "\nfoo\nbar\r\nbaz\n" +-- " foo bar baz" +lineBreaksToSpaces :: String -> String +lineBreaksToSpaces = unwords . lines . filter ((/=) '\r') + +-- | Replaces path separators found with those of the current OS, URL-like paths +-- excluded. +-- +-- > buildOS == Linux; normalizePathSeparators "foo\bar\baz" => "foo/bar/baz" +-- > buildOS == Windows; normalizePathSeparators "foo/bar/baz" => "foo\bar\baz" +normalizePathSeparators :: String -> String +normalizePathSeparators = + unlines . map normalizePathSeparator . lines + where + normalizePathSeparator p = + if | any (isJust . parseURI) (tails p) -> p + | buildOS == Windows -> + [if Posix.isPathSeparator c then Windows.pathSeparator else c| c <- p] + | otherwise -> + [if Windows.isPathSeparator c then Posix.pathSeparator else c| c <- p] + +-- | @unlines@ from base will add a trailing newline if there isn't one already +-- but this one doesn't +-- +-- >>> lines "abc" +-- ["abc"] +-- +-- >>> Data.List.unlines $ lines "abc" +-- "abc\n" +-- +-- >>> unlines $ lines "abc" +-- "abc" +unlines :: [String] -> String +unlines = maybe "" fst . unsnoc . Prelude.unlines + +-- | Replace line CRLF line breaks with LF line breaks. +-- +-- >>> encodeLf "foo\nbar\r\nbaz" +-- "foo\nbar\nbaz" +-- +-- >>> encodeLf "foo\nbar\r\nbaz\n" +-- "foo\nbar\nbaz\n" +-- +-- >>> encodeLf "\nfoo\nbar\r\nbaz\n" +-- "\nfoo\nbar\nbaz\n" +-- +-- >>> encodeLf "\n\n\n" +-- "\n\n\n" +encodeLf :: String -> String +encodeLf = filter (/= '\r') + +-- | Mark lines with visible delimiters, @^@ at the start and @$@ at the end. +-- +-- >>> delimitLines "" +-- "^$" +-- +-- >>> delimitLines "\n" +-- "^$\n" +-- +-- >>> delimitLines "\n\n" +-- "^$\n^$\n" +-- +-- >>> delimitLines "\n\n\n" +-- "^$\n^$\n^$\n" +-- +-- >>> delimitLines $ encodeLf "foo\nbar\r\nbaz" +-- "^foo$\n^bar$\n^baz$" +-- +-- >>> delimitLines $ encodeLf "foo\nbar\r\nbaz\n" +-- "^foo$\n^bar$\n^baz$\n" +-- +-- >>> delimitLines $ encodeLf "\nfoo\nbar\r\nbaz\n" +-- "^$\n^foo$\n^bar$\n^baz$\n" +delimitLines:: String -> String +delimitLines "" = "^$" +delimitLines "\n" = "^$\n" +delimitLines ('\n' : xs) = "^$\n" ++ delimitLines xs +delimitLines output = fixupStart . fixupEnd $ + foldr + (\c acc -> c : + if | "\n" == acc -> "$\n" + |("\n" `isPrefixOf` acc) -> "$\n^" ++ drop 1 acc + | otherwise -> acc + ) + "" + output + where + fixupStart :: String -> String + fixupStart s@[] = s + fixupStart s@('^' : _) = s + fixupStart s = '^' : s + + fixupEnd :: String -> String + fixupEnd s@[] = s + fixupEnd s@(reverse -> '$' : _) = s + fixupEnd s@(reverse -> '\n' : '$' : _) = s + fixupEnd s = s ++ "$" From abaaad2bfaf5f5297f00c09357da9b9120ae5ca0 Mon Sep 17 00:00:00 2001 From: Mike Pilgrem Date: Sat, 15 Mar 2025 20:30:09 +0000 Subject: [PATCH 76/87] Complete the documentation of main-is field Explains the use of GHC's `-main-is` option in Cabal files, when the usual convention of `Main.main` is not being followed. (cherry picked from commit f2d90986bf05c45ba55f80dab25d3b8254184544) --- doc/cabal-package-description-file.rst | 38 ++++++++++++++++++++------ 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/doc/cabal-package-description-file.rst b/doc/cabal-package-description-file.rst index 6ae467b4774..1aed08d5172 100644 --- a/doc/cabal-package-description-file.rst +++ b/doc/cabal-package-description-file.rst @@ -1028,12 +1028,32 @@ build information fields (see the section on `build information`_). .. pkg-field:: main-is: filename (required) - The name of the ``.hs`` or ``.lhs`` file containing the ``Main`` - module. Note that it is the ``.hs`` filename that must be listed, - even if that file is generated using a preprocessor. The source file - must be relative to one of the directories listed in - :pkg-field:`hs-source-dirs`. Further, while the name of the file may - vary, the module itself must be named ``Main``. + By convention, a Haskell program must have a module called ``Main`` which + exports an IO action named ``main``. When the program is executed, the + action is performed. This field specifies the name of the ``.hs`` or + ``.lhs`` source file containing that module. It is the ``.hs`` filename that + must be listed, even if that file is generated using a preprocessor. The + file must be relative to one of the directories listed in + :pkg-field:`hs-source-dirs`. + + Further, while the name of the source file may vary, if the convention is + being followed, the module itself must be named ``Main`` and export + ``main``. + + However, GHC's ``-main-is`` option can be used to change the name of the + relevant IO action. For example, if source file ``MyMainSourceFile.hs`` + contains a module named ``MyMainModule`` exporting ``myMainFunc`` and that + is to be the relevant IO action, you can specify: + + :: + + executable my-app + main-is: MyMainSourceFile.hs + ghc-options: -main-is MyMainModule.myMainFunc + build-depends: + base + default-language: Haskell2010 + Starting with ``cabal-version: 1.18`` this field supports specifying a C, C++, or objC source file as the main entry point. @@ -1090,7 +1110,7 @@ field. even if that file is generated using a preprocessor. The source file must be relative to one of the directories listed in :pkg-field:`hs-source-dirs`. This field is analogous to the ``main-is`` field - of an executable section. + of an executable section; see that documentation for further information. Test suites using the ``detailed-0.9`` interface are modules exporting the symbol ``tests :: IO [Test]``. The ``Test`` type is exported by the @@ -1249,8 +1269,8 @@ standard output and error channels. even if that file is generated using a preprocessor. The source file must be relative to one of the directories listed in :pkg-field:`hs-source-dirs`. This field is analogous to the ``main-is`` - field of an executable section. Further, while the name of the file may - vary, the module itself must be named ``Main``. + field of an executable section; see that documentation for further + information. Example: """"""""""""""""""""""""""""""""""""""""""""""""""""""" From a8cf469bda50690975adc97ce27650e35a0ca15c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 31 Mar 2025 16:30:02 +0000 Subject: [PATCH 77/87] Backport #10827: Fix environment variable handling when running executables (#10887) * Fix environment variable handling when running executables This fixes a bug where environment variables were duplicated when running executables. ``` overrideEnv <- fromMaybe [] <$> getEffectiveEnvironment ([("PATH", Just newPath)] ++ envOverrides) let shellEnv = overrideEnv ++ existingEnv ``` Since getEffectiveEnvironment already calls getEnvironment internally, if any overrides are passed then the result is a complete environment. Appending it to the already existing environment results in duplicated environment variables. The fix: * Added getFullEnvironment function to handle the common pattern correctly * Updated code in Bench, Test/ExeV10, Test/LibV09, and Client/Run to use this function In the future it would be good to generalise `getFullEnvironment` further so it can also handle the `addLibraryPath` case, which modifies an environment variable, rather than merely setting or unsetting it. Fixes #10718 (cherry picked from commit 4375dd5f776e1fb9e94a21942ecc8130908f0313) * Add test for duplicate environment variables when invoking testsuite Adds a simple test case that identifies and reports duplicate environment variables in the Cabal environment. For issue (#10718) (cherry picked from commit 6e54b2353a73a567fad51ea0730993c7c958891c) --------- Co-authored-by: Matthew Pickering --- Cabal/src/Distribution/Simple/Bench.hs | 6 +----- Cabal/src/Distribution/Simple/Program/Run.hs | 18 ++++++++++++++++++ Cabal/src/Distribution/Simple/Test/ExeV10.hs | 12 +++++++----- Cabal/src/Distribution/Simple/Test/LibV09.hs | 14 +++++++------- cabal-install/src/Distribution/Client/Run.hs | 5 +---- .../PackageTests/DuplicateEnvVars/cabal.out | 0 .../DuplicateEnvVars/cabal.project | 1 + .../DuplicateEnvVars/cabal.test.hs | 5 +++++ .../PackageTests/DuplicateEnvVars/p/Main.hs | 16 ++++++++++++++++ .../PackageTests/DuplicateEnvVars/p/p.cabal | 10 ++++++++++ changelog.d/pr-10827.md | 11 +++++++++++ 11 files changed, 77 insertions(+), 21 deletions(-) create mode 100644 cabal-testsuite/PackageTests/DuplicateEnvVars/cabal.out create mode 100644 cabal-testsuite/PackageTests/DuplicateEnvVars/cabal.project create mode 100644 cabal-testsuite/PackageTests/DuplicateEnvVars/cabal.test.hs create mode 100644 cabal-testsuite/PackageTests/DuplicateEnvVars/p/Main.hs create mode 100644 cabal-testsuite/PackageTests/DuplicateEnvVars/p/p.cabal create mode 100644 changelog.d/pr-10827.md diff --git a/Cabal/src/Distribution/Simple/Bench.hs b/Cabal/src/Distribution/Simple/Bench.hs index fbc71d43bcb..7cf706657d3 100644 --- a/Cabal/src/Distribution/Simple/Bench.hs +++ b/Cabal/src/Distribution/Simple/Bench.hs @@ -23,7 +23,6 @@ module Distribution.Simple.Bench import Distribution.Compat.Prelude import Prelude () -import Distribution.Compat.Environment import qualified Distribution.PackageDescription as PD import Distribution.Pretty import Distribution.Simple.Build (addInternalBuildToolsFixed) @@ -92,15 +91,12 @@ bench args pkg_descr lbi flags = do dieWithException verbosity $ NoBenchMarkProgram cmd - existingEnv <- getEnvironment - -- Compute the appropriate environment for running the benchmark let progDb = LBI.withPrograms lbiForBench pathVar = progSearchPath progDb envOverrides = progOverrideEnv progDb newPath <- programSearchPathAsPATHVar pathVar - overrideEnv <- fromMaybe [] <$> getEffectiveEnvironment ([("PATH", Just newPath)] ++ envOverrides) - let shellEnv = overrideEnv ++ existingEnv + shellEnv <- getFullEnvironment ([("PATH", Just newPath)] ++ envOverrides) -- Add (DY)LD_LIBRARY_PATH if needed shellEnv' <- diff --git a/Cabal/src/Distribution/Simple/Program/Run.hs b/Cabal/src/Distribution/Simple/Program/Run.hs index 88afef0af91..3a6a7a37833 100644 --- a/Cabal/src/Distribution/Simple/Program/Run.hs +++ b/Cabal/src/Distribution/Simple/Program/Run.hs @@ -30,6 +30,7 @@ module Distribution.Simple.Program.Run , getProgramInvocationOutputAndErrors , getProgramInvocationLBSAndErrors , getEffectiveEnvironment + , getFullEnvironment ) where import Distribution.Compat.Prelude @@ -236,6 +237,12 @@ getProgramInvocationIODataAndErrors -- | Return the current environment extended with the given overrides. -- If an entry is specified twice in @overrides@, the second entry takes -- precedence. +-- +-- getEffectiveEnvironment returns 'Nothing' when there are no overrides. +-- It returns an argument that is suitable to pass directly to 'CreateProcess' to +-- override the environment. +-- If you need the full environment to manipulate further, even when there are no overrides, +-- then call 'getFullEnvironment'. getEffectiveEnvironment :: [(String, Maybe String)] -> IO (Maybe [(String, String)]) @@ -247,6 +254,17 @@ getEffectiveEnvironment overrides = update (var, Nothing) = Map.delete var update (var, Just val) = Map.insert var val +-- | Like 'getEffectiveEnvironment', but when no overrides are specified, +-- returns the full environment instead of 'Nothing'. +getFullEnvironment + :: [(String, Maybe String)] + -> IO [(String, String)] +getFullEnvironment overrides = do + menv <- getEffectiveEnvironment overrides + case menv of + Just env -> return env + Nothing -> getEnvironment + -- | Like the unix xargs program. Useful for when we've got very long command -- lines that might overflow an OS limit on command line length and so you -- need to invoke a command multiple times to get all the args in. diff --git a/Cabal/src/Distribution/Simple/Test/ExeV10.hs b/Cabal/src/Distribution/Simple/Test/ExeV10.hs index 8e20efffe51..3ad112af2bb 100644 --- a/Cabal/src/Distribution/Simple/Test/ExeV10.hs +++ b/Cabal/src/Distribution/Simple/Test/ExeV10.hs @@ -8,7 +8,6 @@ module Distribution.Simple.Test.ExeV10 import Distribution.Compat.Prelude import Prelude () -import Distribution.Compat.Environment import qualified Distribution.PackageDescription as PD import Distribution.Simple.BuildPaths import Distribution.Simple.Compiler @@ -64,8 +63,6 @@ runTest pkg_descr lbi clbi hpcMarkupInfo flags suite = do way = guessWay lbi tixDir_ = i $ tixDir distPref way - existingEnv <- getEnvironment - let cmd = i (LBI.buildDir lbi) testName' @@ -92,13 +89,18 @@ runTest pkg_descr lbi clbi hpcMarkupInfo flags suite = do pathVar = progSearchPath progDb envOverrides = progOverrideEnv progDb newPath <- programSearchPathAsPATHVar pathVar - overrideEnv <- fromMaybe [] <$> getEffectiveEnvironment ([("PATH", Just newPath)] ++ envOverrides) let opts = map (testOption pkg_descr lbi suite) (testOptions flags) tixFile = packageRoot (testCommonFlags flags) getSymbolicPath (tixFilePath distPref way (testName')) - shellEnv = [("HPCTIXFILE", tixFile) | isCoverageEnabled] ++ overrideEnv ++ existingEnv + + shellEnv <- + getFullEnvironment + ( [("PATH", Just newPath)] + ++ [("HPCTIXFILE", Just tixFile) | isCoverageEnabled] + ++ envOverrides + ) -- Add (DY)LD_LIBRARY_PATH if needed shellEnv' <- diff --git a/Cabal/src/Distribution/Simple/Test/LibV09.hs b/Cabal/src/Distribution/Simple/Test/LibV09.hs index 3807cc9ae9d..1d2de6f8a41 100644 --- a/Cabal/src/Distribution/Simple/Test/LibV09.hs +++ b/Cabal/src/Distribution/Simple/Test/LibV09.hs @@ -17,7 +17,6 @@ import Distribution.Compat.Prelude import Distribution.Types.UnqualComponentName import Prelude () -import Distribution.Compat.Environment import Distribution.Compat.Internal.TempFile import Distribution.Compat.Process (proc) import Distribution.ModuleName @@ -70,7 +69,6 @@ runTest pkg_descr lbi clbi hpcMarkupInfo flags suite = do way = guessWay lbi let mbWorkDir = LBI.mbWorkDirLBI lbi - existingEnv <- getEnvironment let cmd = interpretSymbolicPath mbWorkDir (LBI.buildDir lbi) @@ -100,15 +98,17 @@ runTest pkg_descr lbi clbi hpcMarkupInfo flags suite = do pathVar = progSearchPath progDb envOverrides = progOverrideEnv progDb newPath <- programSearchPathAsPATHVar pathVar - overrideEnv <- fromMaybe [] <$> getEffectiveEnvironment ([("PATH", Just newPath)] ++ envOverrides) -- Run test executable let opts = map (testOption pkg_descr lbi suite) $ testOptions flags tixFile = i $ tixFilePath distPref way testName' - shellEnv = - [("HPCTIXFILE", tixFile) | isCoverageEnabled] - ++ overrideEnv - ++ existingEnv + + shellEnv <- + getFullEnvironment + ( [("PATH", Just newPath)] + ++ [("HPCTIXFILE", Just tixFile) | isCoverageEnabled] + ++ envOverrides + ) -- Add (DY)LD_LIBRARY_PATH if needed shellEnv' <- if LBI.withDynExe lbi diff --git a/cabal-install/src/Distribution/Client/Run.hs b/cabal-install/src/Distribution/Client/Run.hs index 447d7cf1b1e..4366b5dfea2 100644 --- a/cabal-install/src/Distribution/Client/Run.hs +++ b/cabal-install/src/Distribution/Client/Run.hs @@ -60,7 +60,6 @@ import Distribution.Types.UnqualComponentName import qualified Distribution.Simple.GHCJS as GHCJS import Distribution.Client.Errors -import Distribution.Compat.Environment (getEnvironment) import Distribution.Utils.Path -- | Return the executable to run and any extra arguments that should be @@ -181,13 +180,11 @@ run verbosity lbi exe exeArgs = do return (p, []) -- Compute the appropriate environment for running the executable - existingEnv <- getEnvironment let progDb = withPrograms lbiForExe pathVar = progSearchPath progDb envOverrides = progOverrideEnv progDb newPath <- programSearchPathAsPATHVar pathVar - overrideEnv <- fromMaybe [] <$> getEffectiveEnvironment ([("PATH", Just newPath)] ++ envOverrides) - let env = overrideEnv ++ existingEnv + env <- getFullEnvironment ([("PATH", Just newPath)] ++ envOverrides) -- Add (DY)LD_LIBRARY_PATH if needed env' <- diff --git a/cabal-testsuite/PackageTests/DuplicateEnvVars/cabal.out b/cabal-testsuite/PackageTests/DuplicateEnvVars/cabal.out new file mode 100644 index 00000000000..e69de29bb2d diff --git a/cabal-testsuite/PackageTests/DuplicateEnvVars/cabal.project b/cabal-testsuite/PackageTests/DuplicateEnvVars/cabal.project new file mode 100644 index 00000000000..58d710ed2dd --- /dev/null +++ b/cabal-testsuite/PackageTests/DuplicateEnvVars/cabal.project @@ -0,0 +1 @@ +packages: p diff --git a/cabal-testsuite/PackageTests/DuplicateEnvVars/cabal.test.hs b/cabal-testsuite/PackageTests/DuplicateEnvVars/cabal.test.hs new file mode 100644 index 00000000000..f02f9350102 --- /dev/null +++ b/cabal-testsuite/PackageTests/DuplicateEnvVars/cabal.test.hs @@ -0,0 +1,5 @@ +import Test.Cabal.Prelude + +main = cabalTest $ recordMode DoNotRecord $ do + res <- cabal' "test" ["all"] + assertOutputContains "No duplicate environment variables found" res diff --git a/cabal-testsuite/PackageTests/DuplicateEnvVars/p/Main.hs b/cabal-testsuite/PackageTests/DuplicateEnvVars/p/Main.hs new file mode 100644 index 00000000000..42bf2496553 --- /dev/null +++ b/cabal-testsuite/PackageTests/DuplicateEnvVars/p/Main.hs @@ -0,0 +1,16 @@ +module Main where + +import Data.List (group, sort) +import System.Environment (getEnvironment) + +main = do + env <- getEnvironment + let sortedEnv = sort env + duplicates = filter (\g -> length g > 1) $ group $ map fst sortedEnv + + if null duplicates + then putStrLn "No duplicate environment variables found." + else do + putStrLn "Found duplicate environment variables:" + mapM_ (\d -> putStrLn $ " - " ++ head d) duplicates + fail "Test failed due to duplicate environment variables" diff --git a/cabal-testsuite/PackageTests/DuplicateEnvVars/p/p.cabal b/cabal-testsuite/PackageTests/DuplicateEnvVars/p/p.cabal new file mode 100644 index 00000000000..23bc3d59902 --- /dev/null +++ b/cabal-testsuite/PackageTests/DuplicateEnvVars/p/p.cabal @@ -0,0 +1,10 @@ +cabal-version: 3.0 +name: p +version: 0.1.0.0 +build-type: Simple + +test-suite env-test + default-language: Haskell2010 + type: exitcode-stdio-1.0 + main-is: Main.hs + build-depends: base diff --git a/changelog.d/pr-10827.md b/changelog.d/pr-10827.md new file mode 100644 index 00000000000..9fb5b7b8328 --- /dev/null +++ b/changelog.d/pr-10827.md @@ -0,0 +1,11 @@ +--- +synopsis: "Fix duplicate environment variables in test and benchmark runs" +packages: [Cabal, cabal-install] +prs: 10827 +issues: 10718 +--- + +Cabal no longer creates duplicate environment variables when running test +suites, benchmarks, or internal executables. Previously, when setting up the +environment for these processes, Cabal would append the overridden environment +to the existing environment, creating duplicates of the same variable. From a89dd4eb276d8486022195aa70872075007038f4 Mon Sep 17 00:00:00 2001 From: Yuto Takano Date: Mon, 31 Mar 2025 11:35:23 +0200 Subject: [PATCH 78/87] Append paths in global config to progdb in configureCompiler v2 (#10826) * Append paths in global config to progdb in `configureCompiler` * Add test to check global extra-prog-path is used in `configureCompiler` We add a new PackageTest for cabal-install, which makes sure that the extra-prog-path in the global config is used when resolving pkg-config instead of anything already on PATH. We do this by specifying a "bad" pkg-config to extra-prog-path that returns exit code 1. On Windows, Cabal logs are identical in the following two cases: - the override didn't work, and pkg-config was not found on the system - the override did work, and querying it failed (expectedly) To work around this, we add a "good" pkg-config script to PATH before- hand, so that cabal succeeds in the first case and the logs differ. This test is a stripped down reproduction of what happens when a user on Windows adds MSYS2 paths to extra-prog-path but not the system PATH. This is a reasonable setup (often, adding MSYS2 to system PATH is not good practice), and is even created automatically by GHCup. * Refactor `configureCompiler` path addition for cleaner variable names * Remove unnecessary build target from ExtraProgPathGlobal test command * Fix ExtraProgPathGlobal test failing on Mac/Unix for missing +x perms * Rename pr-10790 changelog to pr-10826 as it superceded * Add hashtag before PR/issue numbers in changelog for 10826 --------- Co-authored-by: Javier Sagredo (cherry picked from commit 74601f46289dcd52b3cc8e3a8ff6e6f307dd3ab8) --- .../Distribution/Client/ProjectPlanning.hs | 18 ++++-- .../ExtraProgPathGlobal/MyLibrary.hs | 1 + .../ExtraProgPathGlobal/cabal.project | 1 + .../PackageTests/ExtraProgPathGlobal/my.cabal | 20 ++++++ .../scripts-winpath/pkg-config | 49 ++++++++++++++ .../scripts-winpath/pkg-config.exe | Bin 0 -> 115712 bytes .../scripts-winpath/pkg-config.shim | 2 + .../ExtraProgPathGlobal/scripts/pkg-config | 3 + .../scripts/pkg-config.exe | Bin 0 -> 115712 bytes .../scripts/pkg-config.shim | 2 + .../ExtraProgPathGlobal/setup.out | 14 ++++ .../ExtraProgPathGlobal/setup.test.hs | 60 ++++++++++++++++++ changelog.d/pr-10826 | 11 ++++ 13 files changed, 174 insertions(+), 7 deletions(-) create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathGlobal/MyLibrary.hs create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathGlobal/cabal.project create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathGlobal/my.cabal create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts-winpath/pkg-config create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts-winpath/pkg-config.exe create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts-winpath/pkg-config.shim create mode 100755 cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts/pkg-config create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts/pkg-config.exe create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts/pkg-config.shim create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathGlobal/setup.out create mode 100644 cabal-testsuite/PackageTests/ExtraProgPathGlobal/setup.test.hs create mode 100644 changelog.d/pr-10826 diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning.hs b/cabal-install/src/Distribution/Client/ProjectPlanning.hs index bf130a2f362..8068ba39a9e 100644 --- a/cabal-install/src/Distribution/Client/ProjectPlanning.hs +++ b/cabal-install/src/Distribution/Client/ProjectPlanning.hs @@ -470,6 +470,7 @@ configureCompiler { projectConfigHcFlavor , projectConfigHcPath , projectConfigHcPkg + , projectConfigProgPathExtra } , projectConfigLocalPackages = PackageConfig @@ -493,25 +494,28 @@ configureCompiler ) $ do liftIO $ info verbosity "Compiler settings changed, reconfiguring..." - let extraPath = fromNubList packageConfigProgramPathExtra - progdb <- liftIO $ prependProgramSearchPath verbosity extraPath [] defaultProgramDb - let progdb' = userSpecifyPaths (Map.toList (getMapLast packageConfigProgramPaths)) progdb - result@(_, _, progdb'') <- + progdb <- + liftIO $ + -- Add paths in the global config + prependProgramSearchPath verbosity (fromNubList projectConfigProgPathExtra) [] defaultProgramDb + -- Add paths in the local config + >>= prependProgramSearchPath verbosity (fromNubList packageConfigProgramPathExtra) [] + >>= pure . userSpecifyPaths (Map.toList (getMapLast packageConfigProgramPaths)) + result@(_, _, progdb') <- liftIO $ Cabal.configCompilerEx hcFlavor hcPath hcPkg - progdb' + progdb verbosity - -- Note that we added the user-supplied program locations and args -- for /all/ programs, not just those for the compiler prog and -- compiler-related utils. In principle we don't know which programs -- the compiler will configure (and it does vary between compilers). -- We do know however that the compiler will only configure the -- programs it cares about, and those are the ones we monitor here. - monitorFiles (programsMonitorFiles progdb'') + monitorFiles (programsMonitorFiles progdb') -- Note: There is currently a bug here: we are dropping unconfigured -- programs from the 'ProgramDb' when we re-use the cache created by diff --git a/cabal-testsuite/PackageTests/ExtraProgPathGlobal/MyLibrary.hs b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/MyLibrary.hs new file mode 100644 index 00000000000..a51c414bcd2 --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/MyLibrary.hs @@ -0,0 +1 @@ +module MyLibrary () where diff --git a/cabal-testsuite/PackageTests/ExtraProgPathGlobal/cabal.project b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/cabal.project new file mode 100644 index 00000000000..0d7f076e888 --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/cabal.project @@ -0,0 +1 @@ +packages: *.cabal diff --git a/cabal-testsuite/PackageTests/ExtraProgPathGlobal/my.cabal b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/my.cabal new file mode 100644 index 00000000000..a5b78b076f9 --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/my.cabal @@ -0,0 +1,20 @@ +name: CheckExtraProgPathGlobal +version: 0.1 +license: BSD3 +license-file: LICENSE +author: Yuto Takano +maintainer: Yuto Takano +synopsis: Check Extra Prog Path Global +category: PackageTests +build-type: Simple +cabal-version: 2.0 + +description: + Check that Cabal recognizes an override of the prog path. + +Library + pkgconfig-depends: zlib + default-language: Haskell2010 + build-depends: base <5.0 + exposed-modules: + MyLibrary diff --git a/cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts-winpath/pkg-config b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts-winpath/pkg-config new file mode 100644 index 00000000000..8e11e375648 --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts-winpath/pkg-config @@ -0,0 +1,49 @@ +#!/bin/sh + +set -eu + +# ugly, but "good enough" for this test +# This will need to be updated whenever cabal invokes pkg-config +# in new ways +case "$*" in + '--version') + echo 2.1.0 # whatever + ;; + + '--variable pc_path pkg-config') + echo '.' + ;; + + '--list-all') + printf 'zlib zlib - zlib compression library\n' + # \256 = \xAE is the iso-8859-1 (latin-1) encoded version of U+00AE, + # i.e. the "registered sign": ® + # This resulted in problems, see #9608 + printf 'vpl Intel\256 Video Processing Library - Accelerated video decode, encode, and frame processing capabilities on Intel\256 GPUs\n' + # \360 = \xF0 is latin-1 for ð; this is orð, Icelandic for "word"/"words". + printf 'or\360 Icelandic characters\n' + ;; + + '--modversion '*) + shift # drop the --modversion + for arg; do + case "$arg" in + zlib) echo 1.3; ;; # whatever + vpl) echo 2.10; ;; # whatever + # No entry for orð here; let's not even try to match on that + *) + echo >&2 "Package $arg was not found in the pkg-config search path." + exit 1 + esac + done + ;; + + # Ignore some stuff we're not implementing + '--cflags '*) ;; + '--libs '*) ;; + + *) + echo >&2 "pkg-config: unrecognised arguments $* (this is an incomplete shim)" + exit 1 + ;; +esac diff --git a/cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts-winpath/pkg-config.exe b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts-winpath/pkg-config.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 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 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts-winpath/pkg-config.shim b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts-winpath/pkg-config.shim new file mode 100644 index 00000000000..3b34632849f --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts-winpath/pkg-config.shim @@ -0,0 +1,2 @@ +path = "FINDSH/sh.exe" +args = "SCRIPTSWINPATHDIR/pkg-config" diff --git a/cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts/pkg-config b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts/pkg-config new file mode 100755 index 00000000000..8093036d3e2 --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts/pkg-config @@ -0,0 +1,3 @@ +#!/bin/sh + +exit 1; diff --git a/cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts/pkg-config.exe b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts/pkg-config.exe new file mode 100644 index 0000000000000000000000000000000000000000..537023174dc7a094f693b3d9ef17fa234e6a4bf8 GIT binary patch literal 115712 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 M@bv#5|6v9G1`gwa{r~^~ literal 0 HcmV?d00001 diff --git a/cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts/pkg-config.shim b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts/pkg-config.shim new file mode 100644 index 00000000000..c5115969480 --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/scripts/pkg-config.shim @@ -0,0 +1,2 @@ +path = "FINDSH/sh.exe" +args = "SCRIPTSDIR/pkg-config" diff --git a/cabal-testsuite/PackageTests/ExtraProgPathGlobal/setup.out b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/setup.out new file mode 100644 index 00000000000..c3836228383 --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/setup.out @@ -0,0 +1,14 @@ +# cabal v2-build +Configuration is affected by the following files: +- cabal.project +Warning: cannot determine version of /scripts/pkg-config : +"" +Warning: cannot determine version of /scripts/pkg-config : +"" +Resolving dependencies... +Error: [Cabal-7107] +Could not resolve dependencies: +[__0] next goal: CheckExtraProgPathGlobal (user goal) +[__0] rejecting: CheckExtraProgPathGlobal-0.1 (pkg-config package zlib-any is needed but no pkg-config executable was found or querying it failed) +[__0] fail (backjumping, conflict set: CheckExtraProgPathGlobal) +After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: CheckExtraProgPathGlobal (2) diff --git a/cabal-testsuite/PackageTests/ExtraProgPathGlobal/setup.test.hs b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/setup.test.hs new file mode 100644 index 00000000000..5aba770b18b --- /dev/null +++ b/cabal-testsuite/PackageTests/ExtraProgPathGlobal/setup.test.hs @@ -0,0 +1,60 @@ +import Test.Cabal.Prelude +import System.Directory + +-- Test that extra-prog-path in the global cabal config (~/.cabal/config) +-- overrides the path for pkg-config while resolving a dependency on zlib. +-- Specifically, this test emulates the scenario on Windows where pkg-config +-- doesn't exist natively and must be provided via extra-prog-path. +main = cabalTest $ do + env <- getTestEnv + let + testDir = testCurrentDir env + tmpDir = testTmpDir env + -- Scripts is where we put a bad pkg-config + scripts = tmpDir "scripts" + -- Scripts-Winpath contains a mock pkg-config that returns good results. + -- We add this to PATH on Windows before executing the test so we can tell + -- apart when Cabal uses the override or not. + scripts_winpath = tmpDir "scripts-winpath" + + ------------------------- + -- Workaround for the fact that, on Windows, Cabal will only look for + -- .exe files to satisfy executable dependencies. So we have to create a + -- shim pkg-config.exe file in 'script'. This is a thin wrapper (which is + -- explicitly added to Git) that calls whatever is defined in the .shim + -- file. In our case, we rewrite the .shim file as below so that the + -- pkg-config script is executed using sh. + when isWindows $ do + mb_sh <- fmap takeDirectory <$> liftIO (findExecutable "sh") + case mb_sh of + Nothing -> skip "no sh" + Just sh -> do + let escape = concatMap (\c -> case c of '\\' -> "\\\\\\\\"; x -> [x]) + void $ shell "sed" [ "-i", "-e", "s/FINDSH/" <> escape sh <> "/g", escape (scripts "pkg-config.shim"), escape (scripts_winpath "pkg-config.shim") ] + void $ shell "sed" [ "-i", "-e", "s/SCRIPTSDIR/" <> escape scripts <> "/g", escape (scripts "pkg-config.shim") ] + void $ shell "sed" [ "-i", "-e", "s/SCRIPTSWINPATHDIR/" <> escape scripts_winpath <> "/g", escape (scripts_winpath "pkg-config.shim") ] + + -- End of Windows workaround + ------------------------------ + + -- On Windows, we want it to find the "scripts/pkg-config" (which will + -- return exit code 1), instead of what we add to the path + -- ("scripts-winpath/pkg-config", which will return exit code 0). This is + -- because Windows doesn't have a system pkg-config by default. If we didn't + -- add a known-to-be-good mock pkg-config in the path, we wouldn't be able + -- to tell apart from Cabal logs whether it wasn't able to find pkg-config + -- at all (test fail) or whether the override worked and it found the bad + -- one but couldn't query it (test success). + -- + -- On other systems, we want it to find "scripts/pkg-config" (exit code 1) + -- instead of the system pkg-config (success). + let wrap_test = if isWindows then addToPath scripts_winpath else id + + -- Add global config override in ~/.cabal/config (in the test environment). + liftIO $ appendFile (testUserCabalConfigFile env) $ + "\nextra-prog-path: " ++ scripts + liftIO $ putStrLn $ testUserCabalConfigFile env + + -- On correct behaviour, cabal should fail because it found our exit-code-1 + -- pkg-config through the global extra-prog-path. + fails $ wrap_test $ cabal "v2-build" [] diff --git a/changelog.d/pr-10826 b/changelog.d/pr-10826 new file mode 100644 index 00000000000..6dbc33217a4 --- /dev/null +++ b/changelog.d/pr-10826 @@ -0,0 +1,11 @@ +synopsis: Prepend the global extra paths to the `ProgramDb` sooner +packages: cabal-install +prs: #10826 +issues: #9800 +significance: significant + +description: { + +- The initial configuration of programs was done without the `extra-prog-path` from the global cabal configuration. This meant that in some cases, some executables were not found. In particular this manifested as Windows users who didn't add the MSYS2 paths to the global PATH couldn't make use of `pkg-config`. + +} From c9411cbe729f1b432e30f860b40e4c3cc62c0e7e Mon Sep 17 00:00:00 2001 From: Matthew Pickering Date: Fri, 21 Mar 2025 11:04:28 +0000 Subject: [PATCH 79/87] Fix multi-repl when only building some internal library targets When combining together --dependency and --promised-dependency flags, we were using `Map.union` in the wrong place. If you had a dependency and promised-dependency from the same package (ie when using an internal library) then the promised dependency wouldn't be taken into account. The fix is straightforward, don't use `Map.union`. First create a list of everything and then create a map using `fromListWith`. Fixes #10775 (cherry picked from commit c2cdfc01e7f07e152f29511cef1d8ae198ed4cc9) --- Cabal/src/Distribution/Backpack/Configure.hs | 6 ++-- .../MultiRepl/InternalLibs/cabal.out | 16 +++++++++ .../MultiRepl/InternalLibs/cabal.project | 1 + .../MultiRepl/InternalLibs/cabal.test.hs | 7 ++++ .../MultiRepl/InternalLibs/components/x/X.hs | 1 + .../MultiRepl/InternalLibs/components/y/Y.hs | 1 + .../MultiRepl/InternalLibs/components/z/Z.hs | 1 + .../MultiRepl/InternalLibs/foo.cabal | 33 +++++++++++++++++++ changelog.d/pr-10841.md | 11 +++++++ 9 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 cabal-testsuite/PackageTests/MultiRepl/InternalLibs/cabal.out create mode 100644 cabal-testsuite/PackageTests/MultiRepl/InternalLibs/cabal.project create mode 100644 cabal-testsuite/PackageTests/MultiRepl/InternalLibs/cabal.test.hs create mode 100644 cabal-testsuite/PackageTests/MultiRepl/InternalLibs/components/x/X.hs create mode 100644 cabal-testsuite/PackageTests/MultiRepl/InternalLibs/components/y/Y.hs create mode 100644 cabal-testsuite/PackageTests/MultiRepl/InternalLibs/components/z/Z.hs create mode 100644 cabal-testsuite/PackageTests/MultiRepl/InternalLibs/foo.cabal create mode 100644 changelog.d/pr-10841.md diff --git a/Cabal/src/Distribution/Backpack/Configure.hs b/Cabal/src/Distribution/Backpack/Configure.hs index f3dec5055ee..4d740778e7c 100644 --- a/Cabal/src/Distribution/Backpack/Configure.hs +++ b/Cabal/src/Distribution/Backpack/Configure.hs @@ -103,6 +103,8 @@ configureComponentLocalBuildInfos let conf_pkg_map = Map.fromListWith Map.union + $ + -- Normal dependencies [ ( pc_pkgname pkg , Map.singleton (pc_compname pkg) @@ -115,8 +117,8 @@ configureComponentLocalBuildInfos ) | pkg <- prePkgDeps ] - `Map.union` Map.fromListWith - Map.union + ++ + -- Promised dependencies [ (pkg, Map.singleton (ann_cname aid) aid) | ConfiguredPromisedComponent pkg aid <- promisedPkgDeps ] diff --git a/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/cabal.out b/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/cabal.out new file mode 100644 index 00000000000..31adc84d9fa --- /dev/null +++ b/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/cabal.out @@ -0,0 +1,16 @@ +# cabal v2-repl +Configuration is affected by the following files: +- cabal.project +Resolving dependencies... +Build profile: -w ghc- -O1 +In order, the following will be built: + - foo-0.1.0.0 (interactive) (lib:x) (first run) + - foo-0.1.0.0 (lib:y) (first run) + - foo-0.1.0.0 (interactive) (lib:z) (first run) +Configuring library 'x' for foo-0.1.0.0... +Preprocessing library 'x' for foo-0.1.0.0... +Configuring library 'y' for foo-0.1.0.0... +Preprocessing library 'y' for foo-0.1.0.0... +Building library 'y' for foo-0.1.0.0... +Configuring library 'z' for foo-0.1.0.0... +Preprocessing library 'z' for foo-0.1.0.0... diff --git a/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/cabal.project b/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/cabal.project new file mode 100644 index 00000000000..e6fdbadb439 --- /dev/null +++ b/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/cabal.project @@ -0,0 +1 @@ +packages: . diff --git a/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/cabal.test.hs b/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/cabal.test.hs new file mode 100644 index 00000000000..9f9bf6b1e7a --- /dev/null +++ b/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/cabal.test.hs @@ -0,0 +1,7 @@ + +import Test.Cabal.Prelude + +main = do + cabalTest $ do + skipUnlessGhcVersion ">= 9.4" + void $ cabalWithStdin "v2-repl" ["--enable-multi-repl","x", "z"] "" diff --git a/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/components/x/X.hs b/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/components/x/X.hs new file mode 100644 index 00000000000..e970dea80c5 --- /dev/null +++ b/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/components/x/X.hs @@ -0,0 +1 @@ +module X where diff --git a/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/components/y/Y.hs b/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/components/y/Y.hs new file mode 100644 index 00000000000..4385338c3c3 --- /dev/null +++ b/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/components/y/Y.hs @@ -0,0 +1 @@ +module Y where diff --git a/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/components/z/Z.hs b/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/components/z/Z.hs new file mode 100644 index 00000000000..9b0bdc618e6 --- /dev/null +++ b/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/components/z/Z.hs @@ -0,0 +1 @@ +module Z where diff --git a/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/foo.cabal b/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/foo.cabal new file mode 100644 index 00000000000..fa261a57771 --- /dev/null +++ b/cabal-testsuite/PackageTests/MultiRepl/InternalLibs/foo.cabal @@ -0,0 +1,33 @@ +cabal-version: 3.14 + +name: foo +version: 0.1.0.0 +build-type: Simple + +library x + exposed-modules: + X + hs-source-dirs: + components/x + build-depends: + base + +library y + exposed-modules: + Y + hs-source-dirs: + components/y + build-depends: + base + -- uncommenting this causes 'make show' to pass + -- , foo:x + +library z + exposed-modules: + Z + hs-source-dirs: + components/z + build-depends: + base + , foo:x + , foo:y diff --git a/changelog.d/pr-10841.md b/changelog.d/pr-10841.md new file mode 100644 index 00000000000..ab1cf038867 --- /dev/null +++ b/changelog.d/pr-10841.md @@ -0,0 +1,11 @@ +--- +synopsis: Fix `cabal repl --enable-multi-repl` when only specifying some targets from a package. +packages: [Cabal] +prs: 10841 +issues: [10775] +--- + +Fix a bug `cabal repl --enable-multi-repl` where the repl would fail to start if you +only specified some targets to be loaded. + +In particular, if you are using internal libraries you may be affected by this bug. From 9896af0d8aa794c2b8b837d877cd3c73a4e4a286 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 15:41:53 +0000 Subject: [PATCH 80/87] Backport #10800: cabal-install: Fix the directory the build folder is created in (#10888) * testsuite: Set TMPDIR to a specific folder rather than the test root If things start getting created in the TMPDIR, then it is better to not place them directly in the project root next to the source and test files. This also makes it easier to write tests which are sensitive to what is created in the CWD. (cherry picked from commit c64a32d7cbf75b54806b3e4378fa24a2ef0e0978) # Conflicts: # cabal-testsuite/PackageTests/HaddockKeepTmpsCustom/cabal.test.hs # cabal-testsuite/PackageTests/HaddockKeepsTmps/cabal.test.hs # cabal-testsuite/src/Test/Cabal/Monad.hs * cabal-install: Fix the directory the build folder is created in Clearly this path needs to be relative to the CWD, and the correct offset is passed as the `srcdir` parameter. Fixes #10772 (cherry picked from commit 85ef030b7a20f84144837fd7659eb82bfd3a4efd) * Add tests which check build/dist-newstyle folders are not created with v2-run The existing test CmdRun/Script is modified to test the case when v2-run is executed in a project context. This test checks that a "build" folder is not created in the CWD (#10772) A new test is also added which checks what happens in the "no context" case. A separate bug was fixed in this area recently but no test added which verifies the change (#10686) (cherry picked from commit 852430c24d5990429fd946203a9e75915d5bb006) * Quickfix the conflicts in tests; let's see if it works * Remove test updates for which we lack machinery * Remove the added test and all the modifications to an old test --------- Co-authored-by: Matthew Pickering Co-authored-by: Mikolaj Konarski --- .../Client/ProjectBuilding/UnpackedPackage.hs | 2 +- cabal-testsuite/src/Test/Cabal/Monad.hs | 11 +++++++++++ changelog.d/pr-10800 | 12 ++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 changelog.d/pr-10800 diff --git a/cabal-install/src/Distribution/Client/ProjectBuilding/UnpackedPackage.hs b/cabal-install/src/Distribution/Client/ProjectBuilding/UnpackedPackage.hs index f1486388b8c..43e685a0338 100644 --- a/cabal-install/src/Distribution/Client/ProjectBuilding/UnpackedPackage.hs +++ b/cabal-install/src/Distribution/Client/ProjectBuilding/UnpackedPackage.hs @@ -447,7 +447,7 @@ buildInplaceUnpackedPackage -- TODO: [code cleanup] there is duplication between the -- distdirlayout and the builddir here builddir is not -- enough, we also need the per-package cachedir - createDirectoryIfMissingVerbose verbosity True $ getSymbolicPath builddir + createDirectoryIfMissingVerbose verbosity True $ interpretSymbolicPath (Just srcdir) builddir createDirectoryIfMissingVerbose verbosity True diff --git a/cabal-testsuite/src/Test/Cabal/Monad.hs b/cabal-testsuite/src/Test/Cabal/Monad.hs index 4c383220b21..5059daf13c8 100644 --- a/cabal-testsuite/src/Test/Cabal/Monad.hs +++ b/cabal-testsuite/src/Test/Cabal/Monad.hs @@ -34,6 +34,7 @@ module Test.Cabal.Monad ( testPrefixDir, testLibInstallDir, testDistDir, + testSystemTmpDir, testPackageDbDir, testRepoDir, testKeysDir, @@ -406,6 +407,10 @@ runTestM mode m = -- effect on Windows. , ("CABAL_DIR", Just (testCabalDir env)) , ("CABAL_CONFIG", Just (testUserCabalConfigFile env)) + -- Set `TMPDIR` so that temporary files aren't created in the global `TMPDIR`. + , ("TMPDIR", Just (testSystemTmpDir env)) + -- Windows uses `TMP` for the `TMPDIR`. + , ("TMP", Just (testSystemTmpDir env)) ], testShouldFail = False, testRelativeCurrentDir = ".", @@ -544,6 +549,7 @@ initWorkDir :: TestM () initWorkDir = do env <- getTestEnv liftIO $ createDirectoryIfMissing True (testWorkDir env) + liftIO $ createDirectoryIfMissing True (testSystemTmpDir env) @@ -820,6 +826,11 @@ testName env = testSubName env <.> testMode env testWorkDir :: TestEnv -> FilePath testWorkDir env = testTmpDir env (testName env <.> "dist") +-- The folder which TMPDIR is set to. +-- This is different to testTmpDir, which is the folder which is the test is run from. +testSystemTmpDir :: TestEnv -> FilePath +testSystemTmpDir env = testWorkDir env "tmp" + -- | The absolute prefix where installs go. testPrefixDir :: TestEnv -> FilePath testPrefixDir env = testWorkDir env "usr" diff --git a/changelog.d/pr-10800 b/changelog.d/pr-10800 new file mode 100644 index 00000000000..5c92176dc30 --- /dev/null +++ b/changelog.d/pr-10800 @@ -0,0 +1,12 @@ +synopsis: Fix regression where 'build' folder was created in CWD when running a standlone script. +packages: cabal-install +prs: #10800 +issues: #10772 +significance: + +description: { + +Fix a regression where the `build` folder was created in the current directory +when running a standalone script. + +} From f49a5fa6834cf477d64d9ad01bb54d9dbbc02d13 Mon Sep 17 00:00:00 2001 From: ffaf1 Date: Wed, 2 Apr 2025 20:22:23 +0200 Subject: [PATCH 81/87] Backport #10895: Preflight checks (#10899) Move doc files to `extra-doc-files` Bump open-browser Remove trailing zeroes from dependency --- Cabal-hooks/Cabal-hooks.cabal | 2 +- cabal-install/cabal-install.cabal | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cabal-hooks/Cabal-hooks.cabal b/Cabal-hooks/Cabal-hooks.cabal index f3a7e2c024e..de228d89e9a 100644 --- a/Cabal-hooks/Cabal-hooks.cabal +++ b/Cabal-hooks/Cabal-hooks.cabal @@ -14,7 +14,7 @@ description: category: Distribution build-type: Simple -extra-source-files: +extra-doc-files: README.md CHANGELOG.md source-repository head diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index 8a24c3d7808..52f1f865a84 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -221,7 +221,7 @@ library build-depends: async >= 2.0 && < 2.3, array >= 0.4 && < 0.6, - base16-bytestring >= 0.1.1 && < 1.1.0.0, + base16-bytestring >= 0.1.1 && < 1.1, binary >= 0.7.3 && < 0.9, bytestring >= 0.10.6.0 && < 0.13, containers >= 0.5.6.2 && < 0.8, @@ -244,7 +244,7 @@ library hackage-security >= 0.6.2.0 && < 0.7, text >= 1.2.3 && < 1.3 || >= 2.0 && < 2.2, parsec >= 3.1.13.0 && < 3.2, - open-browser >= 0.2.1.0 && < 0.3, + open-browser >= 0.2.1.0 && < 0.4, regex-base >= 0.94.0.0 && <0.95, regex-posix >= 0.96.0.0 && <0.97, safe-exceptions >= 0.1.7.0 && < 0.2, From 79567b2e46f662d9740276b19af6941b5e32d909 Mon Sep 17 00:00:00 2001 From: Artem Pelenitsyn Date: Wed, 2 Apr 2025 21:50:48 -0400 Subject: [PATCH 82/87] bump version fields of our packages to 3.14.2.0 --- Cabal-hooks/Cabal-hooks.cabal | 136 +++++++++--------- Cabal-syntax/Cabal-syntax.cabal | 2 +- Cabal/Cabal.cabal | 2 +- .../cabal-install-solver.cabal | 2 +- cabal-install/cabal-install.cabal | 2 +- doc/conf.py | 2 +- 6 files changed, 73 insertions(+), 73 deletions(-) diff --git a/Cabal-hooks/Cabal-hooks.cabal b/Cabal-hooks/Cabal-hooks.cabal index de228d89e9a..4109173a09c 100644 --- a/Cabal-hooks/Cabal-hooks.cabal +++ b/Cabal-hooks/Cabal-hooks.cabal @@ -1,68 +1,68 @@ -cabal-version: 2.2 -name: Cabal-hooks -version: 3.14 -copyright: 2023, Cabal Development Team -license: BSD-3-Clause -license-file: LICENSE -author: Cabal Development Team -maintainer: cabal-devel@haskell.org -homepage: http://www.haskell.org/cabal/ -bug-reports: https://github.com/haskell/cabal/issues -synopsis: API for the Hooks build-type -description: - User-facing API for the Hooks build-type. -category: Distribution -build-type: Simple - -extra-doc-files: - README.md CHANGELOG.md - -source-repository head - type: git - location: https://github.com/haskell/cabal/ - subdir: Cabal-hooks - -library - default-language: Haskell2010 - hs-source-dirs: src - - build-depends: - Cabal-syntax >= 3.14 && < 3.15, - Cabal >= 3.14 && < 3.15, - base >= 4.13 && < 5, - containers >= 0.5.0.0 && < 0.8, - transformers >= 0.5.6.0 && < 0.7 - - ghc-options: -Wall -fno-ignore-asserts -fwarn-tabs -fwarn-incomplete-uni-patterns -fwarn-incomplete-record-updates - - exposed-modules: - Distribution.Simple.SetupHooks - - other-extensions: - BangPatterns - CPP - DefaultSignatures - DeriveDataTypeable - DeriveFoldable - DeriveFunctor - DeriveGeneric - DeriveTraversable - ExistentialQuantification - FlexibleContexts - FlexibleInstances - GeneralizedNewtypeDeriving - ImplicitParams - KindSignatures - LambdaCase - NondecreasingIndentation - OverloadedStrings - PatternSynonyms - RankNTypes - RecordWildCards - ScopedTypeVariables - StandaloneDeriving - Trustworthy - TypeFamilies - TypeOperators - TypeSynonymInstances - UndecidableInstances +cabal-version: 2.2 +name: Cabal-hooks +version: 3.14 +copyright: 2023, Cabal Development Team +license: BSD-3-Clause +license-file: LICENSE +author: Cabal Development Team +maintainer: cabal-devel@haskell.org +homepage: http://www.haskell.org/cabal/ +bug-reports: https://github.com/haskell/cabal/issues +synopsis: API for the Hooks build-type +description: + User-facing API for the Hooks build-type. +category: Distribution +build-type: Simple + +extra-doc-files: + README.md CHANGELOG.md + +source-repository head + type: git + location: https://github.com/haskell/cabal/ + subdir: Cabal-hooks + +library + default-language: Haskell2010 + hs-source-dirs: src + + build-depends: + Cabal-syntax >= 3.14 && < 3.15, + Cabal >= 3.14 && < 3.15, + base >= 4.13 && < 5, + containers >= 0.5.0.0 && < 0.8, + transformers >= 0.5.6.0 && < 0.7 + + ghc-options: -Wall -fno-ignore-asserts -fwarn-tabs -fwarn-incomplete-uni-patterns -fwarn-incomplete-record-updates + + exposed-modules: + Distribution.Simple.SetupHooks + + other-extensions: + BangPatterns + CPP + DefaultSignatures + DeriveDataTypeable + DeriveFoldable + DeriveFunctor + DeriveGeneric + DeriveTraversable + ExistentialQuantification + FlexibleContexts + FlexibleInstances + GeneralizedNewtypeDeriving + ImplicitParams + KindSignatures + LambdaCase + NondecreasingIndentation + OverloadedStrings + PatternSynonyms + RankNTypes + RecordWildCards + ScopedTypeVariables + StandaloneDeriving + Trustworthy + TypeFamilies + TypeOperators + TypeSynonymInstances + UndecidableInstances diff --git a/Cabal-syntax/Cabal-syntax.cabal b/Cabal-syntax/Cabal-syntax.cabal index a6df8e9e85d..71303e5f220 100644 --- a/Cabal-syntax/Cabal-syntax.cabal +++ b/Cabal-syntax/Cabal-syntax.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: Cabal-syntax -version: 3.14.1.1 +version: 3.14.2.0 copyright: 2003-2024, Cabal Development Team (see AUTHORS file) license: BSD-3-Clause license-file: LICENSE diff --git a/Cabal/Cabal.cabal b/Cabal/Cabal.cabal index e875d008429..733de988b3a 100644 --- a/Cabal/Cabal.cabal +++ b/Cabal/Cabal.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: Cabal -version: 3.14.2 +version: 3.14.2.0 copyright: 2003-2024, Cabal Development Team (see AUTHORS file) license: BSD-3-Clause license-file: LICENSE diff --git a/cabal-install-solver/cabal-install-solver.cabal b/cabal-install-solver/cabal-install-solver.cabal index 55ed6f4f30f..ef9de96fe38 100644 --- a/cabal-install-solver/cabal-install-solver.cabal +++ b/cabal-install-solver/cabal-install-solver.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: cabal-install-solver -version: 3.14.1.1 +version: 3.14.2.0 synopsis: The solver component of cabal-install description: The solver component used in the cabal-install command-line program. diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index 52f1f865a84..b1888aedd61 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -1,7 +1,7 @@ Cabal-Version: 3.0 Name: cabal-install -Version: 3.14.1.1 +Version: 3.14.2.0 Synopsis: The command-line interface for Cabal and Hackage. Description: The \'cabal\' command-line program simplifies the process of managing diff --git a/doc/conf.py b/doc/conf.py index 6f70381427d..bf606f1fb0d 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -13,7 +13,7 @@ sys.path.insert(0, os.path.abspath('.')) import cabaldomain -version = "3.13.0.0" +version = "3.14.2.0" extensions = [ 'sphinx.ext.extlinks', From 7bd6198c0f23a64bf175a98e4a9f8573ae6415c5 Mon Sep 17 00:00:00 2001 From: Matthew Pickering Date: Wed, 2 Apr 2025 10:44:40 +0100 Subject: [PATCH 83/87] Add release notes for 3.14.2.0 release --- Cabal-hooks/CHANGELOG.md | 3 + Cabal-syntax/ChangeLog.md | 2 +- Cabal/ChangeLog.md | 3 + cabal-install-solver/ChangeLog.md | 2 +- cabal-install/changelog | 3 + changelog.d/pr-10493 | 11 --- changelog.d/pr-10546 | 82 ------------------ changelog.d/pr-10554 | 12 --- changelog.d/pr-10616 | 11 --- changelog.d/pr-10725 | 12 --- changelog.d/pr-10728 | 14 --- changelog.d/pr-10730 | 11 --- changelog.d/pr-10731 | 4 - changelog.d/pr-10783 | 11 --- changelog.d/pr-10800 | 12 --- changelog.d/pr-10826 | 11 --- changelog.d/pr-10827.md | 11 --- changelog.d/pr-10828.md | 10 --- changelog.d/pr-10841.md | 11 --- changelog.d/pr-9997 | 15 ---- changelog.d/solver-api-change-fixup-3.14 | 13 --- release-notes/Cabal-3.14.2.0.md | 60 +++++++++++++ release-notes/cabal-install-3.14.2.0.md | 103 +++++++++++++++++++++++ 23 files changed, 174 insertions(+), 253 deletions(-) delete mode 100644 changelog.d/pr-10493 delete mode 100644 changelog.d/pr-10546 delete mode 100644 changelog.d/pr-10554 delete mode 100644 changelog.d/pr-10616 delete mode 100644 changelog.d/pr-10725 delete mode 100644 changelog.d/pr-10728 delete mode 100644 changelog.d/pr-10730 delete mode 100644 changelog.d/pr-10731 delete mode 100644 changelog.d/pr-10783 delete mode 100644 changelog.d/pr-10800 delete mode 100644 changelog.d/pr-10826 delete mode 100644 changelog.d/pr-10827.md delete mode 100644 changelog.d/pr-10828.md delete mode 100644 changelog.d/pr-10841.md delete mode 100644 changelog.d/pr-9997 delete mode 100644 changelog.d/solver-api-change-fixup-3.14 create mode 100644 release-notes/Cabal-3.14.2.0.md create mode 100644 release-notes/cabal-install-3.14.2.0.md diff --git a/Cabal-hooks/CHANGELOG.md b/Cabal-hooks/CHANGELOG.md index 4085c8b8ba8..2143a41771f 100644 --- a/Cabal-hooks/CHANGELOG.md +++ b/Cabal-hooks/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog for `Cabal-hooks` +## 3.14.2 - April 2025 + * No changes + ## 3.14 – November 2024 * Initial release of the `Hooks` API. diff --git a/Cabal-syntax/ChangeLog.md b/Cabal-syntax/ChangeLog.md index 205dcdb9cf0..15eaf05e88b 100644 --- a/Cabal-syntax/ChangeLog.md +++ b/Cabal-syntax/ChangeLog.md @@ -1 +1 @@ -Please see https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.14.1.0.md +Please see https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.14.2.0.md diff --git a/Cabal/ChangeLog.md b/Cabal/ChangeLog.md index ba5c56e1705..9481418c91c 100644 --- a/Cabal/ChangeLog.md +++ b/Cabal/ChangeLog.md @@ -1,3 +1,6 @@ +# 3.14.2.0 [Mikolaj Konarski](mailto:mikolaj@well-typed.com) April 2025 +* See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.14.2.0.md + # 3.14.1.0 [Hécate](mailto:hecate+github@glitchbra.in) November 2024 * See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.14.1.0.md diff --git a/cabal-install-solver/ChangeLog.md b/cabal-install-solver/ChangeLog.md index 64dfd69e966..e98218e072c 100644 --- a/cabal-install-solver/ChangeLog.md +++ b/cabal-install-solver/ChangeLog.md @@ -1 +1 @@ -Please see https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.14.1.0.md +Please see https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.14.2.0.md diff --git a/cabal-install/changelog b/cabal-install/changelog index 47a798c0be1..63f64ddfe49 100644 --- a/cabal-install/changelog +++ b/cabal-install/changelog @@ -1,5 +1,8 @@ -*-change-log-*- +3.14.2.0 Mikolaj Konarski April 2025 + * See https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.14.2.0.md + 3.14.1.0 Hécate November 2024 * See https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.14.1.0.md diff --git a/changelog.d/pr-10493 b/changelog.d/pr-10493 deleted file mode 100644 index ec4beabe2df..00000000000 --- a/changelog.d/pr-10493 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Remove descriptions for sandbox in replCommand -packages: Cabal -prs: #10493 -issues: #10482 -significance: significant - -description: { - -- Text provided by `Setup.hs repl --help` contained outdated information concerning sandbox, which have now been removed. - -} \ No newline at end of file diff --git a/changelog.d/pr-10546 b/changelog.d/pr-10546 deleted file mode 100644 index db0951505f0..00000000000 --- a/changelog.d/pr-10546 +++ /dev/null @@ -1,82 +0,0 @@ ---- -synopsis: Deduplicate "using configuration from" message -packages: [cabal-install-solver] -prs: 10546 ---- - -## Using Configuration From Message Changes - -Deduplicates and sorts the list of configuration files and URIs printed with the -"using configuration from" message. This message is shown when there's a build -failure. We can trigger that message by using a non-existant package in the -project, "no-pkg-dir". - -If an import is repeated in a `.project` or `.config` file it only imported once -but if the same import is made from an imported file then it was being repeated -in the message. Additional problems were not showing the project first and -mixing configuration files and URIs together. - -* The test set up: - - ``` - $ cat cabal.project - cat cabal.project - packages: no-pkg-dir - import: z-empty.config - import: an-extra.config - import: an-extra.config - import: a-very-extra.config - import: a-very-extra.config - import: https://www.stackage.org/lts-21.25/cabal.config - import: https://www.stackage.org/lts-21.25/cabal.config - - $ cat an-extra.config - import: https://www.stackage.org/lts-21.25/cabal.config - import: https://www.stackage.org/lts-21.25/cabal.config - - $ cat a-very-extra.config - import: https://www.stackage.org/lts-21.25/cabal.config - import: https://www.stackage.org/lts-21.25/cabal.config - - $ cat z-empty.config - - This file is intentionally empty, just this comment. - ``` - -* Before the fix: - - ``` - $ ~/.ghcup/bin/cabal-3.12.1.0 build all --dry-run - When using configuration from: - - a-very-extra.config - - an-extra.config - - cabal.project - - https://www.stackage.org/lts-21.25/cabal.config - - https://www.stackage.org/lts-21.25/cabal.config - - https://www.stackage.org/lts-21.25/cabal.config - - z-empty.config - The following errors occurred: - - The package location 'no-pkg-dir' does not exist. - ``` - -* After the fix: - - ``` - $ cabal build all --dry-run - When using configuration from: - - cabal.project - - a-very-extra.config - - an-extra.config - - z-empty.config - - https://www.stackage.org/lts-21.25/cabal.config - The following errors occurred: - - The package location 'no-pkg-dir' does not exist. - ``` - -## Ord ProjectConfigPath Instance Changes - -Adds a custom `Ord` instance for `ProjectConfigPath` that sorts URIs after local -file paths and longer file paths after shorter ones as measured by the number of -path segments. If still equal, then sorting is lexical. The project itself, a -single element root path, compared to any of the configuration paths it imports, -should always sort first. Comparing one project root path against another is -done lexically. diff --git a/changelog.d/pr-10554 b/changelog.d/pr-10554 deleted file mode 100644 index 569bba5e0d8..00000000000 --- a/changelog.d/pr-10554 +++ /dev/null @@ -1,12 +0,0 @@ ---- -synopsis: Adds more version range checks to `cabal check`. -packages: [Cabal-syntax, Cabal] -prs: 10554 -issues: 9806 ---- - -For dependencies, warns about and checks that version range bounds for: - -- lower bounds are inclusive, don't use (>) -- upper bounds are exclusive, don't use (<=) -- upper bounds don't have trailing zeros, don't end with (*.0). diff --git a/changelog.d/pr-10616 b/changelog.d/pr-10616 deleted file mode 100644 index 89d6bc1d985..00000000000 --- a/changelog.d/pr-10616 +++ /dev/null @@ -1,11 +0,0 @@ ---- -synopsis: "OpenBSD `--strip-unneeded` sometimes strips too much" -packages: [Cabal] -prs: 10616 ---- - -OpenBSD's `--strip-unneeded` thinks some symbols are unneeded that are in fact -needed when C bits are involved, so suppress its use. - -Taken from the OpenBSD ports repo (https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/ports/lang/ghc/patches/patch-libraries_Cabal_Cabal_Distribution_Simple_Program_Strip_hs); -brought to our attention by maerwald. diff --git a/changelog.d/pr-10725 b/changelog.d/pr-10725 deleted file mode 100644 index 07ebe4e263f..00000000000 --- a/changelog.d/pr-10725 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Honour the `-working-dir` flag when executing testsuite executables. -packages: Cabal -prs: #10725 -issues: #10704 -significance: - -description: { - -Honour the `-working-dir` flag when executing testsuite executables. This fixes a -regression in Cabal-3.14.0.0. - -} diff --git a/changelog.d/pr-10728 b/changelog.d/pr-10728 deleted file mode 100644 index d8cee5a84eb..00000000000 --- a/changelog.d/pr-10728 +++ /dev/null @@ -1,14 +0,0 @@ -synopsis: Fix `file+noindex` URI usage on Windows -packages: cabal-install -prs: #10728 #10746 -issues: #10703 -significance: - -description: { - -- `file+noindex` repositories in Windows systems must use the format - `file+noindex:C:/path/to/repo`. This is the only syntax for DOS paths fully - supported by the `network-uri` package, which Cabal uses to interpret URIs in - repository stanzas. - -} diff --git a/changelog.d/pr-10730 b/changelog.d/pr-10730 deleted file mode 100644 index e313e8f2283..00000000000 --- a/changelog.d/pr-10730 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Create `noindex.cache` file if missing -packages: cabal-install -prs: #10730 -issues: #9891 -significance: - -description: { - -- Local+noindex repositories will have their `noindex.cache` file created the first time they are accessed. - -} diff --git a/changelog.d/pr-10731 b/changelog.d/pr-10731 deleted file mode 100644 index 7cc8054901f..00000000000 --- a/changelog.d/pr-10731 +++ /dev/null @@ -1,4 +0,0 @@ -synopsis: Fix regression where build-tool-depends are not used -packages: cabal-install -prs: #10731 -issues: #10633 #10692 diff --git a/changelog.d/pr-10783 b/changelog.d/pr-10783 deleted file mode 100644 index a8efcf12cda..00000000000 --- a/changelog.d/pr-10783 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: GHC arguments are no longer swallowed by enabling documentation -packages: Cabal -prs: #10783 -issues: #10782 -significance: significant - -description: { - -- Arguments to GHC are now properly concatenated with `-haddock` if documentation is enabled. - -} diff --git a/changelog.d/pr-10800 b/changelog.d/pr-10800 deleted file mode 100644 index 5c92176dc30..00000000000 --- a/changelog.d/pr-10800 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Fix regression where 'build' folder was created in CWD when running a standlone script. -packages: cabal-install -prs: #10800 -issues: #10772 -significance: - -description: { - -Fix a regression where the `build` folder was created in the current directory -when running a standalone script. - -} diff --git a/changelog.d/pr-10826 b/changelog.d/pr-10826 deleted file mode 100644 index 6dbc33217a4..00000000000 --- a/changelog.d/pr-10826 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Prepend the global extra paths to the `ProgramDb` sooner -packages: cabal-install -prs: #10826 -issues: #9800 -significance: significant - -description: { - -- The initial configuration of programs was done without the `extra-prog-path` from the global cabal configuration. This meant that in some cases, some executables were not found. In particular this manifested as Windows users who didn't add the MSYS2 paths to the global PATH couldn't make use of `pkg-config`. - -} diff --git a/changelog.d/pr-10827.md b/changelog.d/pr-10827.md deleted file mode 100644 index 9fb5b7b8328..00000000000 --- a/changelog.d/pr-10827.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -synopsis: "Fix duplicate environment variables in test and benchmark runs" -packages: [Cabal, cabal-install] -prs: 10827 -issues: 10718 ---- - -Cabal no longer creates duplicate environment variables when running test -suites, benchmarks, or internal executables. Previously, when setting up the -environment for these processes, Cabal would append the overridden environment -to the existing environment, creating duplicates of the same variable. diff --git a/changelog.d/pr-10828.md b/changelog.d/pr-10828.md deleted file mode 100644 index 9e78761441a..00000000000 --- a/changelog.d/pr-10828.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -synopsis: Set _datadir to an absolute path when running tests -packages: [Cabal] -prs: 10828 -issues: [10717] ---- - -Fix a regression where `_datadir` was set to a relative path. This -caused issues when running testsuites which changed the working directory and -accessed datafiles. diff --git a/changelog.d/pr-10841.md b/changelog.d/pr-10841.md deleted file mode 100644 index ab1cf038867..00000000000 --- a/changelog.d/pr-10841.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -synopsis: Fix `cabal repl --enable-multi-repl` when only specifying some targets from a package. -packages: [Cabal] -prs: 10841 -issues: [10775] ---- - -Fix a bug `cabal repl --enable-multi-repl` where the repl would fail to start if you -only specified some targets to be loaded. - -In particular, if you are using internal libraries you may be affected by this bug. diff --git a/changelog.d/pr-9997 b/changelog.d/pr-9997 deleted file mode 100644 index 592e29c0963..00000000000 --- a/changelog.d/pr-9997 +++ /dev/null @@ -1,15 +0,0 @@ -synopsis: Suppress ghc-pkg warnings emitted when an empty packages is being registered -packages: Cabal -prs: #9997 - -description: { - -When a package contains a library that has no modules, `./Setup register` -tries to register the library with fields `haddock-interfaces:` and -`haddock-html:` pointing at non-existent files or directories, and `ghc-pkg -register` warns about them. - -To suppress the warnings prevent these fields from being generated when -there are no modules. - -} diff --git a/changelog.d/solver-api-change-fixup-3.14 b/changelog.d/solver-api-change-fixup-3.14 deleted file mode 100644 index 05561d5f495..00000000000 --- a/changelog.d/solver-api-change-fixup-3.14 +++ /dev/null @@ -1,13 +0,0 @@ -synopsis: Revert renaming from #10546 -packages: cabal-install-solver -prs: #10546 - -description: { - -https://github.com/haskell/cabal/pull/10546 changed the Solver API by -renaming a function and was backported to 3.14 in -https://github.com/haskell/cabal/pull/10753. In particular, -`docProjectConfigPaths` was renamed to `docProjectConfigFiles`. -This change reverts the renaming but not anything else from #10546. - -} diff --git a/release-notes/Cabal-3.14.2.0.md b/release-notes/Cabal-3.14.2.0.md new file mode 100644 index 00000000000..12594ac8c1d --- /dev/null +++ b/release-notes/Cabal-3.14.2.0.md @@ -0,0 +1,60 @@ +Cabal and Cabal-syntax 3.14.2.0 changelog and release notes +--- + +### Significant changes + +- GHC arguments are no longer swallowed by enabling documentation [#10782](https://github.com/haskell/cabal/issues/10782) [#10783](https://github.com/haskell/cabal/pull/10783) + + Arguments to GHC are now properly concatenated with `-haddock` if documentation is enabled. + +- Honour the `-working-dir` flag when executing testsuite executables. [#10704](https://github.com/haskell/cabal/issues/10704) [#10725](https://github.com/haskell/cabal/pull/10725) + + Honour the `-working-dir` flag when executing testsuite executables. This fixes a + regression in Cabal-3.14.0.0. + +- Fix duplicate environment variables in test and benchmark runs [#10718](https://github.com/haskell/cabal/issues/10718) [#10827](https://github.com/haskell/cabal/pull/10827) + + Cabal no longer creates duplicate environment variables when running test + suites, benchmarks, or internal executables. Previously, when setting up the + environment for these processes, Cabal would append the overridden environment + to the existing environment, creating duplicates of the same variable. + +- Set _datadir to an absolute path when running tests [#10717](https://github.com/haskell/cabal/issues/10717) [#10828](https://github.com/haskell/cabal/pull/10828) + + Fix a regression where `_datadir` was set to a relative path. This + caused issues when running testsuites which changed the working directory and + accessed datafiles. + +### Other changes + +- Remove descriptions for sandbox in replCommand [#10482](https://github.com/haskell/cabal/issues/10482) [#10493](https://github.com/haskell/cabal/pull/10493) + + Text provided by `Setup.hs repl --help` contained outdated information concerning sandbox, which have now been removed. + +- Adds more version range checks to `cabal check`. [#9806](https://github.com/haskell/cabal/issues/9806) [#10554](https://github.com/haskell/cabal/pull/10554) + + For dependencies, warns about and checks that version range bounds for: + + - lower bounds are inclusive, don't use (>) + - upper bounds are exclusive, don't use (<=) + - upper bounds don't have trailing zeros, don't end with (*.0). + +- OpenBSD `--strip-unneeded` sometimes strips too much [#10616](https://github.com/haskell/cabal/pull/10616) + + OpenBSD's `--strip-unneeded` thinks some symbols are unneeded that are in fact + needed when C bits are involved, so suppress its use. + + Taken from the OpenBSD ports repo (https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/ports/lang/ghc/patches/patch-libraries_Cabal_Cabal_Distribution_Simple_Program_Strip_hs); + brought to our attention by maerwald. + + +- Suppress ghc-pkg warnings emitted when an empty packages is being registered [#9997](https://github.com/haskell/cabal/pull/9997) + + When a package contains a library that has no modules, `./Setup register` + tries to register the library with fields `haddock-interfaces:` and + `haddock-html:` pointing at non-existent files or directories, and `ghc-pkg + register` warns about them. + + To suppress the warnings prevent these fields from being generated when + there are no modules. + diff --git a/release-notes/cabal-install-3.14.2.0.md b/release-notes/cabal-install-3.14.2.0.md new file mode 100644 index 00000000000..77822206356 --- /dev/null +++ b/release-notes/cabal-install-3.14.2.0.md @@ -0,0 +1,103 @@ +## cabal-install and cabal-install-solver 3.14.2.0 changelog + +### Significant changes + +- Honour `extra-prog-path` from the the global configuration [#9800](https://github.com/haskell/cabal/issues/9800) [#10826](https://github.com/haskell/cabal/pull/10826) + + The initial configuration of programs was done without the `extra-prog-path` from the global cabal configuration. This meant that in some cases, some executables were not found. In particular this manifested as Windows users who didn't add the MSYS2 paths to the global PATH couldn't make use of `pkg-config`. + +- Fix regression where build-tool-depends are not used [#10633](https://github.com/haskell/cabal/issues/10633) [#10692](https://github.com/haskell/cabal/issues/10692) [#10731](https://github.com/haskell/cabal/pull/10731) + + Fixes a regression from 3.14.1.0 where a globally found executable would be found + rather than a dependency specified with `build-tool-depends`. + +- Fix `cabal repl --enable-multi-repl` when only specifying some targets from a package. [#10775](https://github.com/haskell/cabal/issues/10775) [#10841](https://github.com/haskell/cabal/pull/10841) + + Fix a bug `cabal repl --enable-multi-repl` where the repl would fail to start if you + only specified some targets to be loaded. + In particular, if you are using internal libraries you may be affected by this bug. + +### Other changes + +- Fix `file+noindex` URI usage on Windows [#10703](https://github.com/haskell/cabal/issues/10703) [#10728](https://github.com/haskell/cabal/pull/10728) [#10746](https://github.com/haskell/cabal/pull/10746) + + `file+noindex` repositories in Windows systems must use the format + `file+noindex:C:/path/to/repo`. This is the only syntax for DOS paths fully + supported by the `network-uri` package, which Cabal uses to interpret URIs in + repository stanzas. + +- Create `noindex.cache` file if missing [#9891](https://github.com/haskell/cabal/issues/9891) [#10730](https://github.com/haskell/cabal/pull/10730) + + Local+noindex repositories will have their `noindex.cache` file created the first time they are accessed. + +- Fix regression where 'build' folder was created in CWD when running a standlone script. [#10772](https://github.com/haskell/cabal/issues/10772) [#10800](https://github.com/haskell/cabal/pull/10800) + + Fix a regression where the `build` folder was created in the current directory + when running a standalone script. + +- Fix duplicate environment variables in test and benchmark runs [#10718](https://github.com/haskell/cabal/issues/10718) [#10827](https://github.com/haskell/cabal/pull/10827) + + Cabal no longer creates duplicate environment variables when running test + suites, benchmarks, or internal executables. Previously, when setting up the + environment for these processes, Cabal would append the overridden environment + to the existing environment, creating duplicates of the same variable. + +- Deduplicate "using configuration from" message [#10546](https://github.com/haskell/cabal/pull/10546) + + Deduplicates and sorts the list of configuration files and URIs printed with the + "using configuration from" message. This message is shown when there's a build + failure. We can trigger that message by using a non-existant package in the + project, "no-pkg-dir". + + If an import is repeated in a `.project` or `.config` file it only imported once + but if the same import is made from an imported file then it was being repeated + in the message. Additional problems were not showing the project first and + mixing configuration files and URIs together. + + * Before the fix: + + ``` + $ ~/.ghcup/bin/cabal-3.12.1.0 build all --dry-run + When using configuration from: + - a-very-extra.config + - an-extra.config + - cabal.project + - https://www.stackage.org/lts-21.25/cabal.config + - https://www.stackage.org/lts-21.25/cabal.config + - https://www.stackage.org/lts-21.25/cabal.config + - z-empty.config + The following errors occurred: + - The package location 'no-pkg-dir' does not exist. + ``` + + * After the fix: + + ``` + $ cabal build all --dry-run + When using configuration from: + - cabal.project + - a-very-extra.config + - an-extra.config + - z-empty.config + - https://www.stackage.org/lts-21.25/cabal.config + The following errors occurred: + - The package location 'no-pkg-dir' does not exist. + ``` +- Add a custom `Ord` instance for `ProjectConfigPath` ([#10546](https://github.com/haskell/cabal/pull/10546)) + + The instance sorts URIs after local + file paths and longer file paths after shorter ones as measured by the number of + path segments. If still equal, then sorting is lexical. The project itself, a + single element root path, compared to any of the configuration paths it imports, + should always sort first. Comparing one project root path against another is + done lexically. + +### Unresolved Issues + +- Using the short git hashes in source-repository-package will no longer work [#10605](https://github.com/haskell/cabal/issues/10605) + + It has always been assumed, but not checked, that you will specify the + tag of a repository package using an unambiguous hash. If you encounter this + problem then replace your short hash with a full long hash for a backward and forward + compatible fix. + From b2606feafc6b607aafc9fc0482032bcd7a46374d Mon Sep 17 00:00:00 2001 From: Matthew Pickering Date: Wed, 2 Apr 2025 11:04:50 +0100 Subject: [PATCH 84/87] Remove redundant Other Changes header Fixes #10685 --- release-notes/Cabal-3.14.0.0.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/release-notes/Cabal-3.14.0.0.md b/release-notes/Cabal-3.14.0.0.md index 004a462db8f..e8bbc987257 100644 --- a/release-notes/Cabal-3.14.0.0.md +++ b/release-notes/Cabal-3.14.0.0.md @@ -88,8 +88,6 @@ Cabal and Cabal-syntax 3.14.0.0 changelog and release notes - Add `OrPatterns` extension (GHC proposal #958) [#10339](https://github.com/haskell/cabal/pull/10339) -### Other changes - - Add flag `--ignore-build-tools` [#10128](https://github.com/haskell/cabal/pull/10128) - Adds flag `--ignore-build-tools` which allows a user to ignore the tool From 822997d2498ee997857624483252753691dae706 Mon Sep 17 00:00:00 2001 From: Mikolaj Konarski Date: Thu, 3 Apr 2025 15:30:47 +0200 Subject: [PATCH 85/87] Apply suggestions from code review Co-authored-by: Artem Pelenitsyn --- release-notes/Cabal-3.14.2.0.md | 2 +- release-notes/cabal-install-3.14.2.0.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/release-notes/Cabal-3.14.2.0.md b/release-notes/Cabal-3.14.2.0.md index 12594ac8c1d..3b700eb3542 100644 --- a/release-notes/Cabal-3.14.2.0.md +++ b/release-notes/Cabal-3.14.2.0.md @@ -19,7 +19,7 @@ Cabal and Cabal-syntax 3.14.2.0 changelog and release notes environment for these processes, Cabal would append the overridden environment to the existing environment, creating duplicates of the same variable. -- Set _datadir to an absolute path when running tests [#10717](https://github.com/haskell/cabal/issues/10717) [#10828](https://github.com/haskell/cabal/pull/10828) +- Set `_datadir` to an absolute path when running tests [#10717](https://github.com/haskell/cabal/issues/10717) [#10828](https://github.com/haskell/cabal/pull/10828) Fix a regression where `_datadir` was set to a relative path. This caused issues when running testsuites which changed the working directory and diff --git a/release-notes/cabal-install-3.14.2.0.md b/release-notes/cabal-install-3.14.2.0.md index 77822206356..2e8ea041d6d 100644 --- a/release-notes/cabal-install-3.14.2.0.md +++ b/release-notes/cabal-install-3.14.2.0.md @@ -6,7 +6,7 @@ The initial configuration of programs was done without the `extra-prog-path` from the global cabal configuration. This meant that in some cases, some executables were not found. In particular this manifested as Windows users who didn't add the MSYS2 paths to the global PATH couldn't make use of `pkg-config`. -- Fix regression where build-tool-depends are not used [#10633](https://github.com/haskell/cabal/issues/10633) [#10692](https://github.com/haskell/cabal/issues/10692) [#10731](https://github.com/haskell/cabal/pull/10731) +- Fix regression where `build-tool-depends` is not used [#10633](https://github.com/haskell/cabal/issues/10633) [#10692](https://github.com/haskell/cabal/issues/10692) [#10731](https://github.com/haskell/cabal/pull/10731) Fixes a regression from 3.14.1.0 where a globally found executable would be found rather than a dependency specified with `build-tool-depends`. @@ -42,7 +42,7 @@ environment for these processes, Cabal would append the overridden environment to the existing environment, creating duplicates of the same variable. -- Deduplicate "using configuration from" message [#10546](https://github.com/haskell/cabal/pull/10546) +- Deduplicate the "using configuration from" message [#10546](https://github.com/haskell/cabal/pull/10546) Deduplicates and sorts the list of configuration files and URIs printed with the "using configuration from" message. This message is shown when there's a build From 478a5fcbf678141f03856172d43634048463ed33 Mon Sep 17 00:00:00 2001 From: Artem Pelenitsyn Date: Tue, 8 Apr 2025 23:47:03 -0400 Subject: [PATCH 86/87] Cabal 3.14.2 depends on Cabal-syntax at least 3.14.2 --- Cabal/Cabal.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cabal/Cabal.cabal b/Cabal/Cabal.cabal index 733de988b3a..718abe5a643 100644 --- a/Cabal/Cabal.cabal +++ b/Cabal/Cabal.cabal @@ -34,7 +34,7 @@ library hs-source-dirs: src build-depends: - Cabal-syntax ^>= 3.14, + Cabal-syntax >= 3.14.2 && < 3.15, array >= 0.4.0.1 && < 0.6, base >= 4.13 && < 5, bytestring >= 0.10.0.0 && < 0.13, From 3e0c825d119f80be5d8cf667e4e8344656d043ac Mon Sep 17 00:00:00 2001 From: Francesco Ariis Date: Sun, 9 Nov 2025 09:26:34 +0100 Subject: [PATCH 87/87] Bump QuickCheck --- Cabal-QuickCheck/Cabal-QuickCheck.cabal | 2 +- cabal-install/cabal-install.cabal | 27 ++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/Cabal-QuickCheck/Cabal-QuickCheck.cabal b/Cabal-QuickCheck/Cabal-QuickCheck.cabal index 86c6f301935..aa010c6b054 100644 --- a/Cabal-QuickCheck/Cabal-QuickCheck.cabal +++ b/Cabal-QuickCheck/Cabal-QuickCheck.cabal @@ -16,7 +16,7 @@ library , bytestring , Cabal ^>=3.14.0.0 , Cabal-syntax ^>=3.14.0.0 - , QuickCheck ^>=2.13.2 || ^>=2.14 + , QuickCheck >= 2.13.2 && < 2.18 exposed-modules: Test.QuickCheck.GenericArbitrary diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index b1888aedd61..40efe8393e5 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -332,6 +332,7 @@ test-suite unit-tests UnitTests.Options build-depends: +<<<<<<< HEAD array, bytestring, cabal-install, @@ -354,6 +355,30 @@ test-suite unit-tests tasty-hunit >= 0.10, tree-diff, QuickCheck >= 2.14.3 && <2.16 +======= + , array + , bytestring + , cabal-install + , Cabal-tree-diff + , Cabal-QuickCheck + , Cabal-tests + , containers + , directory + , filepath + , mtl + , network-uri >= 2.6.2.0 && <2.7 + , random + , tar + , time + , zlib + , tasty >= 1.2.3 && <1.6 + , tasty-golden >=2.3.1.1 && <2.4 + , tasty-quickcheck ^>=0.11 + , tasty-expected-failure + , tasty-hunit >= 0.10 + , tree-diff + , QuickCheck >= 2.14.3 && <2.18 +>>>>>>> af3395c34 (Bump QuickCheck) -- Tests to run with a limited stack and heap size @@ -438,5 +463,5 @@ test-suite long-tests tasty-expected-failure, tasty-hunit >= 0.10, tasty-quickcheck <0.12, - QuickCheck >= 2.14 && <2.16, + QuickCheck >= 2.14 && <2.18, pretty-show >= 1.6.15