Message ID | 9e31af33a03e3581f3c124b6b53241a34c31e42e.1700161584.git.philip@philipmcgrath.com |
---|---|
State | New |
Headers | show |
Series | gnu: Add KaTeX, lessc, and flow-remove-types. | expand |
Am Donnerstag, dem 16.11.2023 um 14:15 -0500 schrieb Philip McGrath: > * gnu/packages/web.scm (ocaml-flow-parser): New variable. > --- > gnu/packages/web.scm | 95 > ++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 95 insertions(+) > > diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm > index 9efc6ebc9d..b222c2ae40 100644 > --- a/gnu/packages/web.scm > +++ b/gnu/packages/web.scm > @@ -96,6 +96,7 @@ (define-module (gnu packages web) > #:use-module (guix build-system cargo) > #:use-module (guix build-system cmake) > #:use-module (guix build-system copy) > + #:use-module (guix build-system dune) > #:use-module (guix build-system glib-or-gtk) > #:use-module (guix build-system gnu) > #:use-module (guix build-system go) > @@ -173,6 +174,7 @@ (define-module (gnu packages web) > #:use-module (gnu packages node) > #:use-module (gnu packages node-xyz) > #:use-module (gnu packages nss) > + #:use-module (gnu packages ocaml) > #:use-module (gnu packages openldap) > #:use-module (gnu packages openstack) > #:use-module (gnu packages package-management) > @@ -1938,6 +1940,99 @@ (define-public esbuild > and other data, for distribution on the web.") > (license license:expat))) > > +(define-public ocaml-flow-parser > + (package > + (name "ocaml-flow-parser") > + (version "0.159.0") > + (outputs '("out" "js")) > + (source > + (origin > + (method git-fetch) > + (uri (git-reference > + (url "https://github.com/facebook/flow") > + (commit (string-append "v" version)))) > + (sha256 > + (base32 > "1i9svf641s24nj4w6y9vvglzg29h0lr4n9a6mvwrn9psy9x1lril")) > + (file-name (git-file-name "flow" version)))) > + (build-system dune-build-system) > + (propagated-inputs (list ocaml-base > + ocaml-core-kernel > + ocaml-dtoa > + ocaml-sedlex > + ocaml-wtf8)) > + (native-inputs (list js-of-ocaml > + ocamlbuild > + ocaml-findlib > + ocaml-ounit2 > + ocaml-ppx-deriving > + ocaml-ppx-gen-rec > + ocaml-visitors)) > + (arguments > + (list > + #:tests? #f ; tests need lwt_ppx > + #:package "flow_parser" > + #:phases > + #~(modify-phases %standard-phases > + (add-before 'build 'chdir > + (lambda args > + (chdir "src/parser"))) > + (add-before 'build 'patch-source > + (lambda args > + ;; Avoid errors with newer OCaml: > + ;; "Error (warning 16 [unerasable-optional- > argument]):" > + ;; " this optional argument cannot be erased." > + ;; "Error (warning 69 [unused-field]):" > + ;; " mutable record field buf is never mutated." > + ;; "Error (warning 70 [missing-mli]): Cannot find > interface file." > + (substitute* "_tags" > + (("<\\*\\.ml\\*>: warn[(]-39[)]") > + "<*.ml*>: warn(-16-39-70)")) > + (substitute* "../../_tags" > + (("<\\*\\*/\\*.ml\\*>: ") > + "<**/*.ml*>: warn(-69), ")) > + ;; Deprecation of Js.Unsafe.variable, Js.Error, > Js.raise_js_error > + (substitute* "flow_parser_js.ml" > + (("Js\\.Unsafe\\.variable") > + "Js.Unsafe.pure_js_expr")) > + (substitute* "flow_parser_dot_js.ml" > + (("Js\\.Error") > + "Js_of_ocaml.Js_error.Exn") > + (("Js\\.raise_js_error") > + "Js_of_ocaml.Js_error.raise_")))) > + (replace 'build > + (lambda args > + (invoke "make" > + (string-append "CC=" #$(cc-for-target)) > + "build-parser"))) You might want to let-bind (invoke "make" "CC=..." <>) so that you can call it with a single argument in this and other phases. > + (add-after 'build 'build-js > + (lambda args > + (invoke "make" > + (string-append "CC=" #$(cc-for-target)) > + "js"))) > + (replace 'check > + (lambda* (#:key tests? #:allow-other-keys) > + (when tests? > + (invoke "make" > + (string-append "CC=" #$(cc-for-target)) > + "test-ocaml")))) > + (replace 'install > + (lambda args > + (invoke "make" > + (string-append "CC=" #$(cc-for-target)) > + "ocamlfind-install"))) > + (add-after 'install 'install-js > + (lambda args > + (install-file "flow_parser.js" > + (string-append #$output:js > + > "/share/javascript/flow"))))))) > + (properties `((upstream-name . "flow_parser"))) > + (home-page "https://flow.org") > + (synopsis "Parser for the Flow JavaScript type system") > + (description "Flow is a gradual type system for JavaScript. > This package > +provides the Flow parser, which is an OCaml library that can also be > compiled > +to JavaScript.") > + (license license:expat))) > + Cheers
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm index 9efc6ebc9d..b222c2ae40 100644 --- a/gnu/packages/web.scm +++ b/gnu/packages/web.scm @@ -96,6 +96,7 @@ (define-module (gnu packages web) #:use-module (guix build-system cargo) #:use-module (guix build-system cmake) #:use-module (guix build-system copy) + #:use-module (guix build-system dune) #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system gnu) #:use-module (guix build-system go) @@ -173,6 +174,7 @@ (define-module (gnu packages web) #:use-module (gnu packages node) #:use-module (gnu packages node-xyz) #:use-module (gnu packages nss) + #:use-module (gnu packages ocaml) #:use-module (gnu packages openldap) #:use-module (gnu packages openstack) #:use-module (gnu packages package-management) @@ -1938,6 +1940,99 @@ (define-public esbuild and other data, for distribution on the web.") (license license:expat))) +(define-public ocaml-flow-parser + (package + (name "ocaml-flow-parser") + (version "0.159.0") + (outputs '("out" "js")) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/facebook/flow") + (commit (string-append "v" version)))) + (sha256 + (base32 "1i9svf641s24nj4w6y9vvglzg29h0lr4n9a6mvwrn9psy9x1lril")) + (file-name (git-file-name "flow" version)))) + (build-system dune-build-system) + (propagated-inputs (list ocaml-base + ocaml-core-kernel + ocaml-dtoa + ocaml-sedlex + ocaml-wtf8)) + (native-inputs (list js-of-ocaml + ocamlbuild + ocaml-findlib + ocaml-ounit2 + ocaml-ppx-deriving + ocaml-ppx-gen-rec + ocaml-visitors)) + (arguments + (list + #:tests? #f ; tests need lwt_ppx + #:package "flow_parser" + #:phases + #~(modify-phases %standard-phases + (add-before 'build 'chdir + (lambda args + (chdir "src/parser"))) + (add-before 'build 'patch-source + (lambda args + ;; Avoid errors with newer OCaml: + ;; "Error (warning 16 [unerasable-optional-argument]):" + ;; " this optional argument cannot be erased." + ;; "Error (warning 69 [unused-field]):" + ;; " mutable record field buf is never mutated." + ;; "Error (warning 70 [missing-mli]): Cannot find interface file." + (substitute* "_tags" + (("<\\*\\.ml\\*>: warn[(]-39[)]") + "<*.ml*>: warn(-16-39-70)")) + (substitute* "../../_tags" + (("<\\*\\*/\\*.ml\\*>: ") + "<**/*.ml*>: warn(-69), ")) + ;; Deprecation of Js.Unsafe.variable, Js.Error, Js.raise_js_error + (substitute* "flow_parser_js.ml" + (("Js\\.Unsafe\\.variable") + "Js.Unsafe.pure_js_expr")) + (substitute* "flow_parser_dot_js.ml" + (("Js\\.Error") + "Js_of_ocaml.Js_error.Exn") + (("Js\\.raise_js_error") + "Js_of_ocaml.Js_error.raise_")))) + (replace 'build + (lambda args + (invoke "make" + (string-append "CC=" #$(cc-for-target)) + "build-parser"))) + (add-after 'build 'build-js + (lambda args + (invoke "make" + (string-append "CC=" #$(cc-for-target)) + "js"))) + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "make" + (string-append "CC=" #$(cc-for-target)) + "test-ocaml")))) + (replace 'install + (lambda args + (invoke "make" + (string-append "CC=" #$(cc-for-target)) + "ocamlfind-install"))) + (add-after 'install 'install-js + (lambda args + (install-file "flow_parser.js" + (string-append #$output:js + "/share/javascript/flow"))))))) + (properties `((upstream-name . "flow_parser"))) + (home-page "https://flow.org") + (synopsis "Parser for the Flow JavaScript type system") + (description "Flow is a gradual type system for JavaScript. This package +provides the Flow parser, which is an OCaml library that can also be compiled +to JavaScript.") + (license license:expat))) + (define-public tinyproxy (package (name "tinyproxy")