Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

source_patterns for atdgen? #558

Open
gildor478 opened this issue Oct 24, 2020 · 0 comments
Open

source_patterns for atdgen? #558

gildor478 opened this issue Oct 24, 2020 · 0 comments

Comments

@gildor478
Copy link
Member

This feature request has been migrated from artifact #1660 on forge.ocamlcore.org. It was assigned to user102.

user116 posted on 2016-08-23 19:10:23:

Cannot figure if source_patterns can be used with atdgen which generates multiple ml files from single atd file.
Consider:

$ cat my.atd
type t = { x : int }

$ cat q.ml
let () = print_endline @@ My_j.string_of_t { My_t.x = 2 }

$ cat _oasis
OASISFormat: 0.4
Name: qqq
Version: q
Synopsis: q
Authors: q
License: WTFPL
Plugins: DevFiles (0.4)
BuildTools: ocamlbuild
OCamlVersion: >= 4.02
AlphaFeatures: source_patterns

Executable q
Path: .
BuildTools: ocamlbuild
MainIs: q.ml
BuildDepends: atdgen

Library qlib
Modules: My_j
ImplementationPatterns+: ${module}.atd
Path: .

$ cat myocamlbuild_config.ml
open Printf
open Ocamlbuild_plugin

let setup_ c =
let ml = sprintf "_%c.ml" c in
let prod = "%" ^ ml in
rule ("atdgen: .atd -> " ^ ml) ~dep:"%.atd" ~prods:[prod; prod^"i"] begin fun env _ ->
Cmd (S (
[ P "atdgen"; T (tags_of_pathname (env prod) ++ "atdgen");
A (sprintf "-%c" c)
] @
(if c = 'j' then [A "-j-std"] else []) @ (* better use _tags? *)
[A (env "%.atd"); ]
))
end

let setup () =
setup_ 't';
setup_ 'b';
setup_ 'j';
setup_ 'v';
pflag ["atdgen"] "atdgen" (fun s -> S [A s]);
()

let () = setup ()

oasis setup and make produce :

W: Cannot find source file matching module 'My_j' in library qlib.
W: Use InterfacePatterns or ImplementationPatterns to define this file with feature "source_patterns".

Any advice to get rid of these warnings?

user102 replied on 2016-08-23 19:44:38:

So it is not yet possible to do that yet with source pattern, because you need an extra function, like OASISString.strip_ends_with. If I add it, you will be able to do:
ImplementationPatterns: ${strip_ends_with "_j" module}.atd

user102 replied on 2016-08-23 19:44:38:

Moved from Bugs to Feature Requests

user116 replied on 2016-08-23 20:00:03:

Note that there are 4 extensions to strip, so will need 4 patterns. Guess it is still better than current hordes of warnings (btw is it really useful - maybe just give an option to switch it altogether?)

user102 replied on 2016-08-23 21:20:16:

is it really useful:

dunno.

It is really useful to copy the .mli files to the target directory and make the API readable through these files.

Now, you can argue that we can also generate a good doc...

Other point where it is really useful (but not yet done): restrict the use "*.mli" in _tags and prevent dependency leaks when everything in the same directory...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant