[PATCH] Unbundle opam dependencies

  • Done
  • quality assurance status badge
Details
2 participants
  • Julien Lepiller
  • Ludovic Courtès
Owner
unassigned
Submitted by
Julien Lepiller
Severity
normal
J
J
Julien Lepiller wrote on 4 Apr 2019 20:54
(address . guix-patches@gnu.org)
20190404205437.5fe1bd60@lepiller.eu
Hi!

This patch series starts with two opam importer related patches: the
first one adds some more syntax to our parser, that I encountered when
importing opam dependencies. The second one makes the importer smarter
and make it choose the dune-build-system when possible.

Then the following patches add dependencies, updates one of them (the
new version doesn't depend on opam anymore, thanksfully) and the last
one changes the source of opam to use an unbundled source (the git
repo).
J
J
Julien Lepiller wrote on 4 Apr 2019 21:16
[PATCH 1/9] import: opam: Add more patterns to opam file parser.
(address . 35150@debbugs.gnu.org)
20190404191638.31953-1-julien@lepiller.eu
* guix/import/opam.scm: Add more patterns to peg parser.
---
guix/import/opam.scm | 22 ++++++++++++++++++----
1 file changed, 18 insertions(+), 4 deletions(-)

Toggle diff (70 lines)
diff --git a/guix/import/opam.scm b/guix/import/opam.scm
index 36028a01d6..b5069cd2f3 100644
--- a/guix/import/opam.scm
+++ b/guix/import/opam.scm
@@ -58,7 +58,12 @@
(define-peg-pattern weird-record all (and key (* SP) dict))
(define-peg-pattern key body (+ (or (range #\a #\z) "-")))
(define-peg-pattern value body (and (or conditional-value ground-value operator) (* SP)))
-(define-peg-pattern ground-value body (and (or multiline-string string-pat list-pat var) (* SP)))
+(define-peg-pattern choice-pat all (and (ignore "(") (* SP) choice (* SP) (ignore ")")))
+(define-peg-pattern choice body
+ (or (and (or conditional-value ground-value) (* SP) (ignore "|") (* SP) choice)
+ conditional-value
+ ground-value))
+(define-peg-pattern ground-value body (and (or multiline-string string-pat choice-pat list-pat var) (* SP)))
(define-peg-pattern conditional-value all (and ground-value (* SP) condition))
(define-peg-pattern string-pat all (and QUOTE (* STRCHR) QUOTE))
(define-peg-pattern list-pat all (and (ignore "[") (* SP) (* (and value (* SP))) (ignore "]")))
@@ -80,7 +85,8 @@
(define-peg-pattern condition-form2 body
(and (* SP) (or condition-greater-or-equal condition-greater
condition-lower-or-equal condition-lower
- condition-neq condition-eq condition-content) (* SP)))
+ condition-neq condition-eq condition-not
+ condition-content) (* SP)))
;(define-peg-pattern condition-operator all (and (ignore operator) (* SP) condition-string))
(define-peg-pattern condition-greater-or-equal all (and (ignore (and ">" "=")) (* SP) condition-string))
@@ -91,10 +97,12 @@
(define-peg-pattern condition-or all (and condition-form2 (* SP) (ignore "|") (* SP) condition-form))
(define-peg-pattern condition-eq all (and (? condition-content) (* SP) (ignore "=") (* SP) condition-content))
(define-peg-pattern condition-neq all (and (? condition-content) (* SP) (ignore (and "!" "=")) (* SP) condition-content))
-(define-peg-pattern condition-content body (or condition-string condition-var))
+(define-peg-pattern condition-not all (and (ignore (and "!")) (* SP) condition-content))
+(define-peg-pattern condition-content body (or condition-paren condition-string condition-var))
(define-peg-pattern condition-content2 body (and condition-content (* SP) (not-followed-by (or "&" "=" "!"))))
+(define-peg-pattern condition-paren body (and "(" condition-form ")"))
(define-peg-pattern condition-string all (and QUOTE (* STRCHR) QUOTE))
-(define-peg-pattern condition-var all (+ (or (range #\a #\z) "-")))
+(define-peg-pattern condition-var all (+ (or (range #\a #\z) "-" ":")))
(define (get-opam-repository)
"Update or fetch the latest version of the opam repository and return the
@@ -171,18 +179,24 @@ path to the repository."
(define (dependency->input dependency)
(match dependency
(('string-pat str) str)
+ ;; Arbitrary select the first dependency
+ (('choice-pat choice ...) (dependency->input (car choice)))
(('conditional-value val condition)
(if (native? condition) "" (dependency->input val)))))
(define (dependency->native-input dependency)
(match dependency
(('string-pat str) "")
+ ;; Arbitrary select the first dependency
+ (('choice-pat choice ...) (dependency->input (car choice)))
(('conditional-value val condition)
(if (native? condition) (dependency->input val) ""))))
(define (dependency->name dependency)
(match dependency
(('string-pat str) str)
+ ;; Arbitrary select the first dependency
+ (('choice-pat choice ...) (dependency->input (car choice)))
(('conditional-value val condition)
(dependency->name val))))
--
2.21.0
J
J
Julien Lepiller wrote on 4 Apr 2019 21:16
[PATCH 2/9] import: opam: Use dune-build-system when possible.
(address . 35150@debbugs.gnu.org)
20190404191638.31953-2-julien@lepiller.eu
* guix/import/opam.scm (opam->guix-package): Detect when dune can be used.
---
guix/import/opam.scm | 80 ++++++++++++++++++++++++++------------------
1 file changed, 48 insertions(+), 32 deletions(-)

Toggle diff (94 lines)
diff --git a/guix/import/opam.scm b/guix/import/opam.scm
index b5069cd2f3..5dcc0e97a3 100644
--- a/guix/import/opam.scm
+++ b/guix/import/opam.scm
@@ -247,39 +247,55 @@ path to the repository."
(url-dict (metadata-ref opam-content "url"))
(source-url (metadata-ref url-dict "src"))
(requirements (metadata-ref opam-content "depends"))
- (dependencies (dependency-list->names requirements))
+ (dependencies (filter
+ (lambda (name)
+ (not (member name '("dune" "jbuilder"))))
+ (dependency-list->names requirements)))
+ (native-dependencies (depends->native-inputs requirements))
(inputs (dependency-list->inputs (depends->inputs requirements)))
- (native-inputs (dependency-list->inputs (depends->native-inputs requirements))))
- (call-with-temporary-output-file
- (lambda (temp port)
- (and (url-fetch source-url temp)
- (values
- `(package
- (name ,(ocaml-name->guix-name name))
- (version ,(if (string-prefix? "v" version)
- (substring version 1)
- version))
- (source
- (origin
- (method url-fetch)
- (uri ,source-url)
- (sha256 (base32 ,(guix-hash-url temp)))))
- (build-system ocaml-build-system)
- ,@(if (null? inputs)
- '()
- `((inputs ,(list 'quasiquote inputs))))
- ,@(if (null? native-inputs)
- '()
- `((native-inputs ,(list 'quasiquote native-inputs))))
- ,@(if (equal? name (guix-name->opam-name (ocaml-name->guix-name name)))
- '()
- `((properties
- ,(list 'quasiquote `((upstream-name . ,name))))))
- (home-page ,(metadata-ref opam-content "homepage"))
- (synopsis ,(metadata-ref opam-content "synopsis"))
- (description ,(metadata-ref opam-content "description"))
- (license #f))
- dependencies))))))
+ (native-inputs (dependency-list->inputs
+ ;; Do not add dune nor jbuilder since they are
+ ;; implicit inputs of the dune-build-system.
+ (filter
+ (lambda (name)
+ (not (member name '("dune" "jbuilder"))))
+ native-dependencies))))
+ ;; If one of these are required at build time, it means we
+ ;; can use the much nicer dune-build-system.
+ (let ((use-dune? (or (member "dune" native-dependencies)
+ (member "jbuilder" native-dependencies))))
+ (call-with-temporary-output-file
+ (lambda (temp port)
+ (and (url-fetch source-url temp)
+ (values
+ `(package
+ (name ,(ocaml-name->guix-name name))
+ (version ,(if (string-prefix? "v" version)
+ (substring version 1)
+ version))
+ (source
+ (origin
+ (method url-fetch)
+ (uri ,source-url)
+ (sha256 (base32 ,(guix-hash-url temp)))))
+ (build-system ,(if use-dune?
+ 'dune-build-system
+ 'ocaml-build-system))
+ ,@(if (null? inputs)
+ '()
+ `((inputs ,(list 'quasiquote inputs))))
+ ,@(if (null? native-inputs)
+ '()
+ `((native-inputs ,(list 'quasiquote native-inputs))))
+ ,@(if (equal? name (guix-name->opam-name (ocaml-name->guix-name name)))
+ '()
+ `((properties
+ ,(list 'quasiquote `((upstream-name . ,name))))))
+ (home-page ,(metadata-ref opam-content "homepage"))
+ (synopsis ,(metadata-ref opam-content "synopsis"))
+ (description ,(metadata-ref opam-content "description"))
+ (license #f))
+ dependencies)))))))
(define (opam-recursive-import package-name)
(recursive-import package-name #f
--
2.21.0
J
J
Julien Lepiller wrote on 4 Apr 2019 21:16
[PATCH 3/9] gnu: Add ocaml-opam-file-format.
(address . 35150@debbugs.gnu.org)
20190404191638.31953-3-julien@lepiller.eu
* gnu/packages/ocaml.scm (ocaml-opam-file-format): New variable.
---
gnu/packages/ocaml.scm | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)

Toggle diff (40 lines)
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index 7bebf3921b..3b98de3ed7 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -302,6 +302,33 @@ functional, imperative and object-oriented styles of programming.")
for building OCaml library and programs.")
(license license:lgpl2.1+)))
+(define-public ocaml-opam-file-format
+ (package
+ (name "ocaml-opam-file-format")
+ (version "2.0.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/ocaml/opam-file-format")
+ (commit version)))
+ (sha256
+ (base32
+ "0fqb99asnair0043hhc8r158d6krv5nzvymd0xwycr5y72yrp0hv"))))
+ (build-system ocaml-build-system)
+ (arguments
+ `(#:tests? #f; No tests
+ #:make-flags (list (string-append "LIBDIR=" (assoc-ref %outputs "out")
+ "/lib/ocaml/site-lib"))
+ #:phases
+ (modify-phases %standard-phases
+ (delete 'configure))))
+ (home-page "https://opam.ocaml.org")
+ (synopsis "Parser and printer for the opam file syntax")
+ (description "This package contains a parser and a pretty-printer for
+the opam file fomat.")
+ ;; With static-linking exception
+ (license license:lgpl2.1+)))
+
(define-public opam
(package
(name "opam")
--
2.21.0
J
J
Julien Lepiller wrote on 4 Apr 2019 21:16
[PATCH 4/9] gnu: ocaml-cmdliner: Update to 1.0.3.
(address . 35150@debbugs.gnu.org)
20190404191638.31953-4-julien@lepiller.eu
* gnu/packages/ocaml.scm (ocaml-cmdliner): Update to 1.0.3.
---
gnu/packages/ocaml.scm | 30 ++++++++++++++++++------------
1 file changed, 18 insertions(+), 12 deletions(-)

Toggle diff (65 lines)
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index 3b98de3ed7..839dc9fea1 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -1640,32 +1640,28 @@ spans without being subject to operating system calendar time adjustments.")
(define-public ocaml-cmdliner
(package
(name "ocaml-cmdliner")
- (version "1.0.2")
+ (version "1.0.3")
(source (origin
(method url-fetch)
(uri (string-append "http://erratique.ch/software/cmdliner/releases/"
"cmdliner-" version ".tbz"))
(sha256
(base32
- "18jqphjiifljlh9jg8zpl6310p3iwyaqphdkmf89acyaix0s4kj1"))))
+ "0g3w4hvc1cx9x2yp5aqn6m2rl8lf9x1dn754hfq8m1sc1102lxna"))))
(build-system ocaml-build-system)
(inputs
`(("ocaml-result" ,ocaml-result)))
(native-inputs
- `(("ocamlbuild" ,ocamlbuild)
- ("opam" ,opam)))
+ `(("ocamlbuild" ,ocamlbuild)))
(arguments
`(#:tests? #f
- #:build-flags '("native=true" "native-dynlink=true")
+ #:make-flags (list (string-append "LIBDIR=" (assoc-ref %outputs "out")
+ "/lib/ocaml/site-lib/cmdliner"))
#:phases
(modify-phases %standard-phases
- (replace 'install
- ;; The makefile says 'adjust on cli invocation'
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- (invoke "make" "install" (string-append "PREFIX=" out))
- #t)))
(delete 'configure))))
+ (properties
+ `((ocaml4.02-variant . ,(delay ocaml4.02-cmdliner))))
(home-page "http://erratique.ch/software/cmdliner")
(synopsis "Declarative definition of command line interfaces for OCaml")
(description "Cmdliner is a module for the declarative definition of command
@@ -1677,7 +1673,17 @@ most of the POSIX and GNU conventions.")
(license license:bsd-3)))
(define-public ocaml4.02-cmdliner
- (package-with-ocaml4.02 ocaml-cmdliner))
+ (let ((base (package-with-ocaml4.02 (strip-ocaml4.02-variant ocaml-cmdliner))))
+ (package
+ (inherit base)
+ (version "1.0.2")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "http://erratique.ch/software/cmdliner/releases/"
+ "cmdliner-" version ".tbz"))
+ (sha256
+ (base32
+ "18jqphjiifljlh9jg8zpl6310p3iwyaqphdkmf89acyaix0s4kj1")))))))
(define-public ocaml-fmt
(package
--
2.21.0
J
J
Julien Lepiller wrote on 4 Apr 2019 21:16
[PATCH 5/9] gnu: Add ocaml-extlib.
(address . 35150@debbugs.gnu.org)
20190404191638.31953-5-julien@lepiller.eu
* gnu/packages/ocaml.scm (ocaml-extlib): New variable.
---
gnu/packages/ocaml.scm | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)

Toggle diff (40 lines)
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index 839dc9fea1..023f8efa69 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -302,6 +302,33 @@ functional, imperative and object-oriented styles of programming.")
for building OCaml library and programs.")
(license license:lgpl2.1+)))
+(define-public ocaml-extlib
+ (package
+ (name "ocaml-extlib")
+ (version "1.7.6")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://ygrek.org.ua/p/release/ocaml-extlib/"
+ "extlib-" version ".tar.gz"))
+ (sha256
+ (base32
+ "0wfs20v1yj5apdbj7214wdsr17ayh0qqq7ihidndvc8nmmwfa1dz"))))
+ (build-system ocaml-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (delete 'configure))))
+ (native-inputs
+ `(("ocaml-cppo" ,ocaml-cppo)))
+ (home-page "https://github.com/ygrek/ocaml-extlib")
+ (synopsis "Complete and small extension for OCaml standard library")
+ (description "This library adds new functions to OCaml standard library
+modules, modifies some functions in order to get better performances or
+safety (tail-recursive) and also provides new modules which should be useful
+for day to day programming.")
+ ;; With static-linking exception
+ (license license:lgpl2.1+)))
+
(define-public ocaml-opam-file-format
(package
(name "ocaml-opam-file-format")
--
2.21.0
J
J
Julien Lepiller wrote on 4 Apr 2019 21:16
[PATCH 6/9] gnu: Add ocaml-cudf.
(address . 35150@debbugs.gnu.org)
20190404191638.31953-6-julien@lepiller.eu
* gnu/packages/ocaml.scm (ocaml-cudf): New variable.
---
gnu/packages/ocaml.scm | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)

Toggle diff (47 lines)
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index 023f8efa69..263a318e58 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -329,6 +329,40 @@ for day to day programming.")
;; With static-linking exception
(license license:lgpl2.1+)))
+(define-public ocaml-cudf
+ (package
+ (name "ocaml-cudf")
+ (version "0.9")
+ (source
+ (origin
+ (method url-fetch)
+ (uri "https://gforge.inria.fr/frs/download.php/36602/cudf-0.9.tar.gz")
+ (sha256
+ (base32
+ "0771lwljqwwn3cryl0plny5a5dyyrj4z6bw66ha5n8yfbpcy8clr"))))
+ (build-system ocaml-build-system)
+ (propagated-inputs `(("ocaml-extlib" ,ocaml-extlib)))
+ (native-inputs
+ `(("perl" ,perl)
+ ("ocamlbuild" ,ocamlbuild)
+ ("ocaml-ounit" ,ocaml-ounit)))
+ (arguments
+ `(#:make-flags
+ (list
+ "all" "opt"
+ (string-append "BINDIR=" (assoc-ref %outputs "out")
+ "/bin"))
+ #:phases
+ (modify-phases %standard-phases
+ (delete 'configure))))
+ (home-page "http://www.mancoosi.org/cudf/")
+ (synopsis "CUDF library (part of the Mancoosi tools)")
+ (description "CUDF (for Common Upgradeability Description Format) is a
+format for describing upgrade scenarios in package-based Free and Open Source
+Software distribution.")
+ ;; With static-linking exception
+ (license license:lgpl2.1+)))
+
(define-public ocaml-opam-file-format
(package
(name "ocaml-opam-file-format")
--
2.21.0
J
J
Julien Lepiller wrote on 4 Apr 2019 21:16
[PATCH 7/9] gnu: Add ocaml-mccs.
(address . 35150@debbugs.gnu.org)
20190404191638.31953-7-julien@lepiller.eu
* gnu/packages/ocaml.scm (ocaml-mccs): New variable.
---
gnu/packages/ocaml.scm | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)

Toggle diff (41 lines)
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index 263a318e58..04d5a84d1a 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -363,6 +363,34 @@ Software distribution.")
;; With static-linking exception
(license license:lgpl2.1+)))
+(define-public ocaml-mccs
+ (package
+ (name "ocaml-mccs")
+ (version "1.1+9")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/AltGr/ocaml-mccs")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1i0hhkrqi7rqlainlg5pc4hibbx6b5dp3x99gmav8c3sbfvlk9mc"))))
+ (build-system dune-build-system)
+ (propagated-inputs `(("ocaml-cudf" ,ocaml-cudf)))
+ (home-page "http://www.i3s.unice.fr/~cpjm/misc/")
+ (synopsis "Upgrade path problem solver")
+ (description "Mccs (Multi Criteria CUDF Solver) is a CUDF problem solver.
+Mccs take as input a CUDF problem and computes the best solution according to
+a set of criteria. It relies on a Integer Programming solver or a
+Pseudo Boolean solver to achieve its task. Mccs can use a wide set of
+underlying solvers like Cplex, Gurobi, Lpsolver, Glpk, CbC, SCIP or WBO.")
+ (license (list
+ license:bsd-3
+ license:gpl3+
+ ;; With static-linking exception
+ license:lgpl2.1+))))
+
(define-public ocaml-opam-file-format
(package
(name "ocaml-opam-file-format")
--
2.21.0
J
J
Julien Lepiller wrote on 4 Apr 2019 21:16
[PATCH 9/9] gnu: opam: Unbundle dependencies.
(address . 35150@debbugs.gnu.org)
20190404191638.31953-9-julien@lepiller.eu
* gnu/packages/ocaml.scm (opam)[build-system]: Use ocaml-build-system.
[source]: Use unbundled sources.
[arguments]: Update.
[inputs, native-inputs, propagated-inputs]: Add missing dependencies.
---
gnu/packages/ocaml.scm | 50 +++++++++++++++++++++++-------------------
1 file changed, 28 insertions(+), 22 deletions(-)

Toggle diff (91 lines)
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index 0613bc29c6..58746d45df 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -475,28 +475,28 @@ the opam file fomat.")
(name "opam")
(version "2.0.3")
(source (origin
- (method url-fetch)
- ;; Use the '-full' version, which includes all the dependencies.
- (uri (string-append
- "https://github.com/ocaml/opam/releases/download/"
- version "/opam-full-" version ".tar.gz")
- ;; (string-append "https://github.com/ocaml/opam/archive/"
- ;; version ".tar.gz")
- )
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/ocaml/opam")
+ (commit version)))
+ (file-name (git-file-name name version))
(sha256
(base32
- "1qphm1grxx5j8li7f9qfpih4ylrnjl08b4ym8ma4ln44l56xm285"))))
- (build-system gnu-build-system)
+ "151zvyijrapi805xm0j88ixlrhdbssfagxr2i1w25aagcd18n5y4"))))
+ (build-system ocaml-build-system)
(arguments
- '(;; Sometimes, 'make -jX' would fail right after ./configure with
- ;; "Fatal error: exception End_of_file".
- #:parallel-build? #f
+ `(#:configure-flags
+ (list (string-append "SHELL="
+ (assoc-ref %build-inputs "bash")
+ "/bin/sh"))
;; For some reason, 'ocp-build' needs $TERM to be set.
- #:make-flags `("TERM=screen"
- ,(string-append "SHELL="
- (assoc-ref %build-inputs "bash")
- "/bin/sh"))
+ #:make-flags
+ (list "TERM=screen"
+ (string-append "SHELL="
+ (assoc-ref %build-inputs "bash")
+ "/bin/sh"))
+
#:test-target "tests"
;; FIXME: There's an obscure test failure:
@@ -522,12 +522,10 @@ the opam file fomat.")
;; isolated environment when building with opam.
;; This is necessary for packages to find external
;; dependencies, such as a C compiler, make, etc...
- (("^add_mounts ro /usr")
- "add_mounts ro /gnu /run/current-system /usr"))
+ (("^add_sys_mounts /usr")
+ "add_sys_mounts /gnu /run/current-system /usr"))
(substitute* "src/client/opamInitDefaults.ml"
(("\"bwrap\"") (string-append "\"" bwrap "\"")))
- ;; Build dependencies
- (apply invoke "make" "lib-ext" make-flags)
#t)))
(add-before 'check 'pre-check
(lambda _
@@ -536,7 +534,9 @@ the opam file fomat.")
(invoke "git" "config" "--global" "user.name" "Guix")
#t)))))
(native-inputs
- `(("git" ,git) ;for the tests
+ `(("dune" ,dune)
+ ("git" ,git) ;for the tests
+ ("ocaml-cppo" ,ocaml-cppo)
("python" ,python) ;for the tests
("camlp4" ,camlp4)))
(inputs
@@ -544,6 +544,12 @@ the opam file fomat.")
("ncurses" ,ncurses)
("curl" ,curl)
("bubblewrap" ,bubblewrap)))
+ (propagated-inputs
+ `(("ocaml-cmdliner" ,ocaml-cmdliner)
+ ("ocaml-dose3" ,ocaml-dose3)
+ ("ocaml-mccs" ,ocaml-mccs)
+ ("ocaml-opam-file-format" ,ocaml-opam-file-format)
+ ("ocaml-re" ,ocaml-re)))
(home-page "http://opam.ocamlpro.com/")
(synopsis "Package manager for OCaml")
(description
--
2.21.0
J
J
Julien Lepiller wrote on 4 Apr 2019 21:16
[PATCH 8/9] gnu: Add ocaml-dose3.
(address . 35150@debbugs.gnu.org)
20190404191638.31953-8-julien@lepiller.eu
* gnu/packages/ocaml.scm (ocaml-dose3): New variable.
* gnu/packages/patches/ocaml-dose3-Add-unix-as-dependency-to-dose3.common-in-META.in.patch:
New file.
* gnu/packages/patches/ocaml-dose3-Fix-for-ocaml-4.06.patch: New file.
* gnu/packages/patches/ocaml-dose3-dont-make-printconf.patch: New file.
* gnu/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add them.
---
gnu/local.mk | 4 +
gnu/packages/ocaml.scm | 52 +++++++
...ependency-to-dose3.common-in-META.in.patch | 25 ++++
.../ocaml-dose3-Fix-for-ocaml-4.06.patch | 52 +++++++
.../ocaml-dose3-Install-mli-cmx-etc.patch | 133 ++++++++++++++++++
.../ocaml-dose3-dont-make-printconf.patch | 9 ++
6 files changed, 275 insertions(+)
create mode 100644 gnu/packages/patches/ocaml-dose3-Add-unix-as-dependency-to-dose3.common-in-META.in.patch
create mode 100644 gnu/packages/patches/ocaml-dose3-Fix-for-ocaml-4.06.patch
create mode 100644 gnu/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch
create mode 100644 gnu/packages/patches/ocaml-dose3-dont-make-printconf.patch

Toggle diff (330 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index f9fd5d8fbc..858c13d8d7 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1103,6 +1103,10 @@ dist_patch_DATA = \
%D%/packages/patches/ocaml-CVE-2015-8869.patch \
%D%/packages/patches/ocaml-Add-a-.file-directive.patch \
%D%/packages/patches/ocaml-enable-ocamldoc-reproducibility.patch \
+ %D%/packages/patches/ocaml-dose3-Add-unix-as-dependency-to-dose3.common-in-META.in.patch \
+ %D%/packages/patches/ocaml-dose3-Fix-for-ocaml-4.06.patch \
+ %D%/packages/patches/ocaml-dose3-dont-make-printconf.patch \
+ %D%/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch \
%D%/packages/patches/omake-fix-non-determinism.patch \
%D%/packages/patches/ola-readdir-r.patch \
%D%/packages/patches/openbabel-fix-crash-on-nwchem-output.patch \
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index 04d5a84d1a..0613bc29c6 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -57,6 +57,7 @@
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages protobuf)
#:use-module (gnu packages python)
+ #:use-module (gnu packages python-xyz)
#:use-module (gnu packages sdl)
#:use-module (gnu packages sqlite)
#:use-module (gnu packages tex)
@@ -391,6 +392,57 @@ underlying solvers like Cplex, Gurobi, Lpsolver, Glpk, CbC, SCIP or WBO.")
;; With static-linking exception
license:lgpl2.1+))))
+(define-public ocaml-dose3
+ (package
+ (name "ocaml-dose3")
+ (version "5.0.1")
+ (source (origin
+ (method url-fetch)
+ (uri "https://gforge.inria.fr/frs/download.php/file/36063/dose3-5.0.1.tar.gz")
+ (sha256
+ (base32
+ "00yvyfm4j423zqndvgc1ycnmiffaa2l9ab40cyg23pf51qmzk2jm"))
+ (patches
+ (search-patches
+ "ocaml-dose3-Add-unix-as-dependency-to-dose3.common-in-META.in.patch"
+ "ocaml-dose3-Fix-for-ocaml-4.06.patch"
+ "ocaml-dose3-dont-make-printconf.patch"
+ "ocaml-dose3-Install-mli-cmx-etc.patch"))))
+ (build-system ocaml-build-system)
+ (arguments
+ `(#:configure-flags
+ (list (string-append "SHELL="
+ (assoc-ref %build-inputs "bash")
+ "/bin/sh"))
+ #:make-flags
+ (list (string-append "LIBDIR="
+ (assoc-ref %outputs "out")
+ "/lib/ocaml/site-lib"))))
+ (propagated-inputs
+ `(("ocaml-graph" ,ocaml-graph)
+ ("ocaml-cudf" ,ocaml-cudf)
+ ("ocaml-extlib" ,ocaml-extlib)
+ ("ocaml-re" ,ocaml-re)))
+ (native-inputs
+ `(("perl" ,perl)
+ ("python" ,python-2) ; for a test script
+ ("python2-pyyaml" ,python2-pyyaml) ; for a test script
+ ("ocaml-extlib" ,ocaml-extlib)
+ ("ocamlbuild" ,ocamlbuild)
+ ("ocaml-cppo" ,ocaml-cppo)))
+ (home-page "http://www.mancoosi.org/software/")
+ (synopsis "Package distribution management framework")
+ (description "Dose3 is a framework made of several OCaml libraries for
+managing distribution packages and their dependencies. Though not tied to
+any particular distribution, dose3 constitutes a pool of libraries which
+enable analyzing packages coming from various distributions. Besides basic
+functionalities for querying and setting package properties, dose3 also
+implements algorithms for solving more complex problems such as monitoring
+package evolutions, correct and complete dependency resolution and
+repository-wide uninstallability checks.")
+ ;; with static-linking exception
+ (license license:lgpl2.1+)))
+
(define-public ocaml-opam-file-format
(package
(name "ocaml-opam-file-format")
diff --git a/gnu/packages/patches/ocaml-dose3-Add-unix-as-dependency-to-dose3.common-in-META.in.patch b/gnu/packages/patches/ocaml-dose3-Add-unix-as-dependency-to-dose3.common-in-META.in.patch
new file mode 100644
index 0000000000..d2cc44c784
--- /dev/null
+++ b/gnu/packages/patches/ocaml-dose3-Add-unix-as-dependency-to-dose3.common-in-META.in.patch
@@ -0,0 +1,25 @@
+From b94cf24739818e5aff397e0a83b19ea32dc81f42 Mon Sep 17 00:00:00 2001
+From: Louis Gesbert <louis.gesbert@ocamlpro.com>
+Date: Tue, 6 Feb 2018 10:15:45 +0100
+Subject: [PATCH 3/3] Add "unix" as dependency to dose3.common in META.in
+
+---
+ META.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/META.in b/META.in
+index aa2cd8d..0f9d337 100644
+--- a/META.in
++++ b/META.in
+@@ -8,7 +8,7 @@ package "common" (
+ version = "@PACKAGE_VERSION@"
+ archive(byte) = "common.cma"
+ archive(native) = "common.cmxa"
+-requires = "extlib, re.pcre, cudf, @ZIP@, @BZ2@"
++requires = "extlib, re.pcre, cudf, unix, @ZIP@, @BZ2@"
+ )
+
+ package "algo" (
+--
+2.11.0
+
diff --git a/gnu/packages/patches/ocaml-dose3-Fix-for-ocaml-4.06.patch b/gnu/packages/patches/ocaml-dose3-Fix-for-ocaml-4.06.patch
new file mode 100644
index 0000000000..2c344af821
--- /dev/null
+++ b/gnu/packages/patches/ocaml-dose3-Fix-for-ocaml-4.06.patch
@@ -0,0 +1,52 @@
+From aeca7656f499d7f4595319858f242276920e31bb Mon Sep 17 00:00:00 2001
+From: Louis Gesbert <louis.gesbert@ocamlpro.com>
+Date: Sat, 2 Dec 2017 12:51:01 +0100
+Subject: [PATCH] Fix for ocaml 4.06
+
+---
+ common/criteria_lexer.mll | 8 ++++----
+ common/util.ml | 2 +-
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/common/criteria_lexer.mll b/common/criteria_lexer.mll
+index 71f9178..fc4eae3 100644
+--- a/common/criteria_lexer.mll
++++ b/common/criteria_lexer.mll
+@@ -18,7 +18,7 @@
+ let c = Lexing.lexeme_char lexbuf 2 in (* the delimiter can be any character *)
+ (* find the terminating delimiter *)
+ let endpos =
+- try String.index_from lexbuf.lex_buffer (lexbuf.lex_start_pos + 3) c with
++ try Bytes.index_from lexbuf.lex_buffer (lexbuf.lex_start_pos + 3) c with
+ |Invalid_argument _ ->
+ raise (Format822.Syntax_error (
+ Format822.error lexbuf "String too short"))
+@@ -27,9 +27,9 @@
+ Format822.error lexbuf (Printf.sprintf "cannot find: %c" c)))
+ in
+ let len = endpos - (lexbuf.lex_start_pos + 3) in
+- let s = String.sub lexbuf.lex_buffer (lexbuf.lex_start_pos + 3) len in
+- lexbuf.Lexing.lex_curr_pos <- lexbuf.Lexing.lex_start_pos + ((String.length s)+4);
+- s
++ let s = Bytes.sub lexbuf.lex_buffer (lexbuf.lex_start_pos + 3) len in
++ lexbuf.Lexing.lex_curr_pos <- lexbuf.Lexing.lex_start_pos + ((Bytes.length s)+4);
++ Bytes.to_string s
+
+ }
+
+diff --git a/common/util.ml b/common/util.ml
+index 598f266..36ca3d1 100644
+--- a/common/util.ml
++++ b/common/util.ml
+@@ -87,7 +87,7 @@ module MakeMessages(X : sig val label : string end) = struct
+ let clean label =
+ try
+ let s = Filename.chop_extension (Filename.basename label) in
+- String.capitalize s
++ String.capitalize_ascii s
+ with Invalid_argument _ -> label
+
+ let create ?(enabled=false) label =
+--
+2.11.0
+
diff --git a/gnu/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch b/gnu/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch
new file mode 100644
index 0000000000..41494e7b3c
--- /dev/null
+++ b/gnu/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch
@@ -0,0 +1,133 @@
+From b5314c20d8e3caf62fe0dc96ad937a2950158b23 Mon Sep 17 00:00:00 2001
+From: Louis Gesbert <louis.gesbert@ocamlpro.com>
+Date: Thu, 2 Mar 2017 12:19:56 +0100
+Subject: [PATCH] Install mli, cmx, etc.
+
+---
+ Makefile | 26 +++++++++++++-------------
+ 1 file changed, 13 insertions(+), 13 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 09464ff..5044d7f 100644
+--- a/Makefile
++++ b/Makefile
+@@ -56,7 +56,7 @@ $(DOSELIBS)/cudf.%:
+ @for i in _build/cudf/cudf.*; do \
+ if [ -e $$i ]; then \
+ cp $$i $(DOSELIBS) ; \
+- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
++ rm -f $(DOSELIBS)/*.mlpack ; \
+ fi ; \
+ done
+
+@@ -67,7 +67,7 @@ $(DOSELIBS)/common.%: common/*.ml common/*.mli
+ if [ -e $$i ]; then \
+ cp $$i $(DOSELIBS) ; \
+ rm $$i ;\
+- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
++ rm -f $(DOSELIBS)/*.mlpack ; \
+ fi ; \
+ done
+
+@@ -78,7 +78,7 @@ $(DOSELIBS)/versioning.%: versioning/*.ml versioning/*.mli
+ if [ -e $$i ]; then \
+ cp $$i $(DOSELIBS) ; \
+ rm $$i ;\
+- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
++ rm -f $(DOSELIBS)/*.mlpack ; \
+ fi ; \
+ done
+
+@@ -88,7 +88,7 @@ $(DOSELIBS)/algo.%: algo/*.ml algo/*.mli $(DOSELIBS)/common.%
+ if [ -e $$i ]; then \
+ cp $$i $(DOSELIBS) ; \
+ rm $$i ;\
+- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
++ rm -f $(DOSELIBS)/*.mlpack ; \
+ fi ; \
+ done
+
+@@ -98,7 +98,7 @@ $(DOSELIBS)/debian.%: deb/*.ml deb/*.mli $(DOSELIBS)/pef.%
+ if [ -e $$i ]; then \
+ cp $$i $(DOSELIBS) ; \
+ rm $$i ;\
+- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
++ rm -f $(DOSELIBS)/*.mlpack ; \
+ fi ; \
+ done
+
+@@ -108,7 +108,7 @@ $(DOSELIBS)/opam.%: opam/*.ml opam/*.mli $(DOSELIBS)/pef.%
+ if [ -e $$i ]; then \
+ cp $$i $(DOSELIBS) ; \
+ rm $$i ;\
+- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
++ rm -f $(DOSELIBS)/*.mlpack ; \
+ fi ; \
+ done
+
+@@ -118,7 +118,7 @@ $(DOSELIBS)/npm.%: npm/*.ml npm/*.mli $(DOSELIBS)/versioning.% $(DOSELIBS)/pef.%
+ if [ -e $$i ]; then \
+ cp $$i $(DOSELIBS) ; \
+ rm $$i ;\
+- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
++ rm -f $(DOSELIBS)/*.mlpack ; \
+ fi ; \
+ done
+
+@@ -128,7 +128,7 @@ $(DOSELIBS)/rpm.%: rpm/*.ml $(DOSELIBS)/algo.%
+ if [ -e $$i ]; then \
+ cp $$i $(DOSELIBS) ; \
+ rm $$i ;\
+- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
++ rm -f $(DOSELIBS)/*.mlpack ; \
+ fi ; \
+ done
+
+@@ -138,7 +138,7 @@ $(DOSELIBS)/pef.%: pef/*.ml pef/*.mli
+ if [ -e $$i ]; then \
+ cp $$i $(DOSELIBS) ; \
+ rm $$i ;\
+- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
++ rm -f $(DOSELIBS)/*.mlpack ; \
+ fi ; \
+ done
+
+@@ -148,7 +148,7 @@ $(DOSELIBS)/csw.%: opencsw/*.ml $(DOSELIBS)/versioning.%
+ if [ -e $$i ]; then \
+ cp $$i $(DOSELIBS) ; \
+ rm $$i ;\
+- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
++ rm -f $(DOSELIBS)/*.mlpack ; \
+ fi ; \
+ done
+
+@@ -158,7 +158,7 @@ $(DOSELIBS)/doseparse.%: $(DOSELIBS)/pef.% $(DOSELIBS)/debian.%
+ if [ -e $$i ]; then \
+ cp $$i $(DOSELIBS) ; \
+ rm $$i ;\
+- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx $(DOSELIBS)/*.ml ; \
++ rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.ml ; \
+ fi ; \
+ done
+
+@@ -168,7 +168,7 @@ $(DOSELIBS)/doseparseNoRpm.%: $(DOSELIBS)/pef.% $(DOSELIBS)/debian.%
+ if [ -e $$i ]; then \
+ cp $$i $(DOSELIBS) ;\
+ rm $$i ;\
+- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ;\
++ rm -f $(DOSELIBS)/*.mlpack ;\
+ fi ; \
+ done
+
+@@ -223,7 +223,7 @@ INSTALL_STUFF_ = META
+ INSTALL_STUFF_ += $(wildcard _build/doselibs/*.cma _build/doselibs/*.cmi)
+ INSTALL_STUFF_ += $(wildcard _build/doselibs/*.cmxa _build/doselibs/*.cmxs)
+ INSTALL_STUFF_ += $(wildcard _build/doselibs/*.a)
+-#INSTALL_STUFF_ += $(wildcard _build/*/*.mli)
++INSTALL_STUFF_ += $(wildcard _build/doselibs/*.mli) $(wildcard _build/doselibs/*.cmti) $(wildcard _build/doselibs/*.cmx)
+ INSTALL_STUFF_ += $(wildcard _build/rpm/*.so)
+
+ exclude_cudf = $(wildcard _build/doselibs/*cudf* _build/cudf/*)
+--
+2.11.0
+
diff --git a/gnu/packages/patches/ocaml-dose3-dont-make-printconf.patch b/gnu/packages/patches/ocaml-dose3-dont-make-printconf.patch
new file mode 100644
index 0000000000..84b6a3b81b
--- /dev/null
+++ b/gnu/packages/patches/ocaml-dose3-dont-make-printconf.patch
@@ -0,0 +1,9 @@
+--- a/configure
++++ b/configure
+@@ -6552,6 +6552,3 @@ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+ $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ fi
+-
+-
+-make printconf
--
2.21.0
L
L
Ludovic Courtès wrote on 10 Apr 2019 17:08
Re: [bug#35150] [PATCH 1/9] import: opam: Add more patterns to opam file parser.
(name . Julien Lepiller)(address . julien@lepiller.eu)(address . 35150@debbugs.gnu.org)
87v9zlc2z9.fsf@gnu.org
Hello,

Julien Lepiller <julien@lepiller.eu> skribis:

Toggle quote (2 lines)
> * guix/import/opam.scm: Add more patterns to peg parser.

It’d be nice to mention all the modified entities in the commit log.
Apart from that it LGTM.

Thanks,
Ludo’.
L
L
Ludovic Courtès wrote on 10 Apr 2019 17:09
Re: [bug#35150] [PATCH] Unbundle opam dependencies
(name . Julien Lepiller)(address . julien@lepiller.eu)(address . 35150@debbugs.gnu.org)
87r2a9c2y3.fsf@gnu.org
Hello!

Julien Lepiller <julien@lepiller.eu> skribis:

Toggle quote (10 lines)
> This patch series starts with two opam importer related patches: the
> first one adds some more syntax to our parser, that I encountered when
> importing opam dependencies. The second one makes the importer smarter
> and make it choose the dune-build-system when possible.
>
> Then the following patches add dependencies, updates one of them (the
> new version doesn't depend on opam anymore, thanksfully) and the last
> one changes the source of opam to use an unbundled source (the git
> repo).

Nice work! I threw a glance at these patches and they LGTM.

Thank you,
Ludo’.
J
J
Julien Lepiller wrote on 10 Apr 2019 21:48
(address . 35150-done@debbugs.gnu.org)
20190410214843.6552494c@sybil.lepiller.eu
Le Wed, 10 Apr 2019 17:09:08 +0200,
Ludovic Courtès <ludo@gnu.org> a écrit :

Toggle quote (19 lines)
> Hello!
>
> Julien Lepiller <julien@lepiller.eu> skribis:
>
> > This patch series starts with two opam importer related patches: the
> > first one adds some more syntax to our parser, that I encountered
> > when importing opam dependencies. The second one makes the importer
> > smarter and make it choose the dune-build-system when possible.
> >
> > Then the following patches add dependencies, updates one of them
> > (the new version doesn't depend on opam anymore, thanksfully) and
> > the last one changes the source of opam to use an unbundled source
> > (the git repo).
>
> Nice work! I threw a glance at these patches and they LGTM.
>
> Thank you,
> Ludo’.

Thank you!

pushed as 3e159dd0a46ba785f8a09bd86e6cacb5c1708bc9 -
e9b86fa0f101536f620f1dc50bf414585823a8f6.
Closed
?