@@ -12,11 +12,13 @@ open Types
1212open EzFile.OP
1313
1414module OpamParser = struct
15- let value_from_string s f =
16- try OpamParser. value_from_string s f
17- with exn ->
18- Printf. eprintf " Error with [%s]:\n " s;
19- raise exn
15+ module FullPos = struct
16+ let value_from_string s f =
17+ try OpamParser.FullPos. value_from_string s f
18+ with exn ->
19+ Printf. eprintf " Error with [%s]:\n " s;
20+ raise exn
21+ end
2022end
2123
2224let dev_repo p =
@@ -26,13 +28,15 @@ let dev_repo p =
2628
2729let opam_of_project kind package =
2830 let p = package.project in
29- let open OpamParserTypes in
30- let file_name = " opam" in
31- let pos = (file_name, 0 , 0 ) in
32- let string s = String (pos, s) in
33- let list v = List (pos, v) in
34- let var_string s v = Variable (pos, s, string v) in
35- let var_list s v = Variable (pos, s, list v) in
31+ let open OpamParserTypes.FullPos in
32+ let filename = " opam" in
33+ let pos = { filename ; start = 0 ,0 ; stop = 0 , 0 } in
34+ let elem pelem = { pelem ; pos } in
35+ let string s = elem ( String s ) in
36+ let list v = elem ( List ( elem v )) in
37+ let var s v = elem ( Variable ( elem s, v)) in
38+ let var_string s v = var s ( string v ) in
39+ let var_list s v = var s ( list v ) in
3640 let optionals = ref [] in
3741 let add_optional_string s = function
3842 | None -> ()
@@ -44,20 +48,20 @@ let opam_of_project kind package =
4448 add_optional_string " dev-repo" (dev_repo p);
4549 add_optional_string " tags"
4650 ( match p.github_organization with
47- | None -> None
48- | Some github_organization ->
49- Some (Printf. sprintf " org:%s" github_organization) );
51+ | None -> None
52+ | Some github_organization ->
53+ Some (Printf. sprintf " org:%s" github_organization) );
5054
5155 let build_commands =
5256 match kind, package.kind with
5357 | Deps , _
5458 | _ , Virtual -> []
5559 | _ ->
56- [ Variable
57- ( pos,
58- " build " ,
59- OpamParser. value_from_string
60- {|
60+ [
61+ var " build "
62+ (
63+ OpamParser.FullPos . value_from_string
64+ {|
6165[
6266 [" dune" " subst" ] {pinned}
6367 [" dune" " build" " -p" name " -j" jobs " @install"
@@ -66,65 +70,61 @@ let opam_of_project kind package =
6670 ]
6771]
6872| }
69- file_name )
70- ]
73+ filename )
74+ ]
7175 in
7276 let depend_of_dep name d =
7377 let b = Buffer. create 100 in
7478 Printf. bprintf b {| " %s" { | } name;
7579 List. iteri
7680 (fun i version ->
77- if i > 0 then Printf. bprintf b " & " ;
78- match version with
79- | Version -> Printf. bprintf b " = version"
80- | NoVersion -> ()
81- | Semantic (major , minor , fix ) ->
82- Printf. bprintf b {|>= " %d.%d.%d" & < " %d.0.0" | } major minor fix
83- (major + 1 )
84- | Lt version -> Printf. bprintf b {| < " %s" | } version
85- | Le version -> Printf. bprintf b {| < = " %s" | } version
86- | Eq version -> Printf. bprintf b {| = " %s" | } version
87- | Ge version -> Printf. bprintf b {| > = " %s" | } version
88- | Gt version -> Printf. bprintf b {| > " %s" | } version)
81+ if i > 0 then Printf. bprintf b " & " ;
82+ match version with
83+ | Version -> Printf. bprintf b " = version"
84+ | NoVersion -> ()
85+ | Semantic (major , minor , fix ) ->
86+ Printf. bprintf b {|>= " %d.%d.%d" & < " %d.0.0" | } major minor fix
87+ (major + 1 )
88+ | Lt version -> Printf. bprintf b {| < " %s" | } version
89+ | Le version -> Printf. bprintf b {| < = " %s" | } version
90+ | Eq version -> Printf. bprintf b {| = " %s" | } version
91+ | Ge version -> Printf. bprintf b {| > = " %s" | } version
92+ | Gt version -> Printf. bprintf b {| > " %s" | } version)
8993 d.depversions;
9094 if d.deptest then Printf. bprintf b " with-test " ;
9195 if d.depdoc then Printf. bprintf b " with-doc " ;
9296 Printf. bprintf b " }\n " ;
9397 (* Printf.eprintf "parse: %s\n%!" s; *)
94- OpamParser. value_from_string (Buffer. contents b) file_name
98+ OpamParser.FullPos. value_from_string (Buffer. contents b) filename
9599 in
96100 let depends =
97- [ Variable
98- ( pos,
99- " depends" ,
101+ [ var " depends" (
100102 match kind with
101103 | ProgramPart ->
102- List
103- ( pos,
104- [ OpamParser. value_from_string
104+ list
105+ [ OpamParser.FullPos. value_from_string
105106 (Printf. sprintf
106107 {|
107108 " %s" { = version }
108109| }
109110 (Misc. package_lib package))
110- file_name
111- ] )
111+ filename
112+ ]
112113 | Single
113114 | LibraryPart
114115 | Deps ->
115- List
116- ( pos,
117- OpamParser. value_from_string
118- (Printf. sprintf {| " ocaml" { > = " %s" } | } p.min_edition)
119- file_name
120- :: OpamParser. value_from_string
121- (Printf. sprintf {| " dune" { > = " %s" } | }
122- Globals. current_dune_version)
123- file_name
124- :: List. map
125- (fun (name , d ) -> depend_of_dep name d)
126- (Misc. p_dependencies package)
127- @ List. map
116+ list
117+ ( OpamParser.FullPos. value_from_string
118+ (Printf. sprintf {| " ocaml" { > = " %s" } | } p.min_edition)
119+ filename
120+ :: OpamParser.FullPos. value_from_string
121+ (Printf. sprintf {| " dune" { > = " %s" } | }
122+ Globals. current_dune_version)
123+ filename
124+ :: List. map
125+ (fun (name , d ) -> depend_of_dep name d)
126+ (Misc. p_dependencies package)
127+ @ List. map
128128 (fun (name , d ) -> depend_of_dep name d)
129129 (Misc. p_tools package) ) )
130130 ]
@@ -133,39 +133,39 @@ let opam_of_project kind package =
133133 [ var_string " opam-version" " 2.0" ;
134134 var_string " name"
135135 ( match kind with
136- | LibraryPart -> Misc. package_lib package
137- | Single
138- | ProgramPart ->
139- package.name
140- | Deps -> package.name );
136+ | LibraryPart -> Misc. package_lib package
137+ | Single
138+ | ProgramPart ->
139+ package.name
140+ | Deps -> package.name );
141141 var_string " version" (Misc. p_version package);
142142 var_string " license" (License. name p);
143143 var_string " synopsis"
144144 ( match kind with
145- | LibraryPart -> Misc. p_synopsis package ^ " (library)"
146- | Deps -> Misc. p_synopsis package
147- | Single
148- | ProgramPart ->
149- Misc. p_synopsis package );
145+ | LibraryPart -> Misc. p_synopsis package ^ " (library)"
146+ | Deps -> Misc. p_synopsis package
147+ | Single
148+ | ProgramPart ->
149+ Misc. p_synopsis package );
150150 var_string " description" (Misc. p_description package);
151151 var_list " authors" (List. map string (Misc. p_authors package));
152152 var_list " maintainer" (List. map string p.authors)
153153 ]
154154 @ List. rev ! optionals @ build_commands @ depends
155155 in
156- let f = { file_contents; file_name } in
157- let s = OpamPrinter. opamfile f in
156+ let f = { file_contents; file_name = filename } in
157+ let s = OpamPrinter.FullPos. opamfile f in
158158 String. concat " \n "
159159 ( [ " # This file was generated by `drom` from `drom.toml`." ;
160160 " # Do not modify or add to the `skip` field of `drom.toml`." ;
161161 s
162162 ]
163- @
164- let s = Subst. package_paren (" " , package) " opam-trailer" in
165- if s = " " then
166- []
167- else
168- [ s ] )
163+ @
164+ let s = Subst. package_paren (" " , package) " opam-trailer" in
165+ if s = " " then
166+ []
167+ else
168+ [ s ] )
169169
170170let () = Unix. putenv " OPAMCLI" " 2.0"
171171
0 commit comments