me
/
guix
Archived
1
0
Fork 0

import: hackage: Filter internal libraries from inputs and native-inputs.

Fixes <https://issues.guix.gnu.org/54760>.

* guix/import/hackage.scm (filter-dependencies): Support multiple
OWN-NAMES.
(hackage-module->sexp): Filter OWN-NAMES from HACKAGE-DEPENDENCIES and
HACKAGE-NATIVE-DEPENDENCIES.
* tests/hackage.scm (test-cabal-internal-library-ignored): New variable.
("hackage->guix-package test internal libraries are ignored"): New testcase.
Lars-Dominik Braun 2022-05-22 11:20:07 +02:00
parent c3fbaee345
commit dedfcaa8e2
No known key found for this signature in database
GPG Key ID: F663943E08D8092A
2 changed files with 29 additions and 7 deletions

View File

@ -222,12 +222,13 @@ object."
'()))) '())))
(map cabal-dependency-name custom-setup-dependencies))) (map cabal-dependency-name custom-setup-dependencies)))
(define (filter-dependencies dependencies own-name) (define (filter-dependencies dependencies own-names)
"Filter the dependencies included with the GHC compiler from DEPENDENCIES, a "Filter the dependencies included with the GHC compiler from DEPENDENCIES, a
list with the names of dependencies. OWN-NAME is the name of the Cabal list with the names of dependencies. OWN-NAMES is the name of the Cabal
package being processed and is used to filter references to itself." package being processed and its internal libaries and is used to filter
references to itself."
(filter (lambda (d) (not (member (string-downcase d) (filter (lambda (d) (not (member (string-downcase d)
(cons own-name ghc-standard-libraries)))) (append own-names ghc-standard-libraries))))
dependencies)) dependencies))
(define* (hackage-module->sexp cabal cabal-hash (define* (hackage-module->sexp cabal cabal-hash
@ -248,9 +249,11 @@ the hash of the Cabal file."
(define source-url (define source-url
(hackage-source-url name version)) (hackage-source-url name version))
(define own-names (cons (cabal-package-name cabal)
(map cabal-library-name (cabal-package-library cabal))))
(define hackage-dependencies (define hackage-dependencies
(filter-dependencies (cabal-dependencies->names cabal) (filter-dependencies (cabal-dependencies->names cabal) own-names))
(cabal-package-name cabal)))
(define hackage-native-dependencies (define hackage-native-dependencies
(lset-difference (lset-difference
@ -260,7 +263,7 @@ the hash of the Cabal file."
(cabal-test-dependencies->names cabal) (cabal-test-dependencies->names cabal)
'()) '())
(cabal-custom-setup-dependencies->names cabal)) (cabal-custom-setup-dependencies->names cabal))
(cabal-package-name cabal)) own-names)
hackage-dependencies)) hackage-dependencies))
(define dependencies (define dependencies

View File

@ -368,6 +368,25 @@ executable cabal
(test-assert "hackage->guix-package test without final newline" (test-assert "hackage->guix-package test without final newline"
(eval-test-with-cabal test-cabal-no-final-newline match-ghc-foo)) (eval-test-with-cabal test-cabal-no-final-newline match-ghc-foo))
;; Make sure internal libraries will not be part of the dependencies.
(define test-cabal-internal-library-ignored
"name: foo
version: 1.0.0
homepage: http://test.org
synopsis: synopsis
description: description
license: BSD3
executable cabal
build-depends:
HTTP >= 4000.2.5 && < 4000.3,
internal
library internal
build-depends: mtl >= 2.0 && < 3
")
(test-assert "hackage->guix-package test internal libraries are ignored"
(eval-test-with-cabal test-cabal-internal-library-ignored match-ghc-foo))
;; Check if-elif-else statements ;; Check if-elif-else statements
(define test-cabal-if (define test-cabal-if
"name: foo "name: foo