Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
Signed-off-by: Rudi Grinberg <[email protected]>
  • Loading branch information
rgrinberg committed Nov 16, 2020
1 parent 91853fb commit d797c34
Show file tree
Hide file tree
Showing 17 changed files with 107 additions and 185 deletions.
23 changes: 22 additions & 1 deletion src/dune_rules/compilation_context.ml
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ type t =
; vimpl : Vimpl.t option
; modes : Mode.Dict.Set.t
; bin_annot : bool
; renames : (Lib.t * Module_name.t) list Or_exn.t
; modules_of_lib : Lib.t -> Modules.t Or_exn.t
}

let super_context t = t.super_context
Expand Down Expand Up @@ -209,6 +209,20 @@ let for_alias_module t =
; sandbox
}

let for_root_module t =
let flags =
let project = Scope.project t.scope in
let dune_version = Dune_project.dune_version project in
Ocaml_flags.default ~profile:(Super_context.context t.super_context).profile
~dune_version
in
{ t with
flags =
Ocaml_flags.append_common flags
[ "-w"; "-49"; "-nopervasives"; "-nostdlib" ]
; stdlib = None
}

let for_module_generated_at_link_time cctx ~requires ~module_ =
let opaque =
(* Cmi's of link time generated modules are compiled with -opaque, hence
Expand Down Expand Up @@ -237,3 +251,10 @@ let for_plugin_executable t ~embed_in_plugin_libraries =
{ t with requires_link }

let without_bin_annot t = { t with bin_annot = false }

let root_module_entries t =
Some (
let+ requires = t.requires_compile in
List.map requires ~f:(fun require ->
)
)
11 changes: 4 additions & 7 deletions src/dune_rules/compilation_context.mli
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ val create :
-> ?vimpl:Vimpl.t
-> ?modes:Dune_file.Mode_conf.Set.Details.t Mode.Dict.t
-> ?bin_annot:bool
-> ?renames:(Lib.t * Module_name.t) list Or_exn.t
-> unit
-> t

Expand Down Expand Up @@ -91,6 +90,8 @@ val modes : t -> Mode.Dict.Set.t

val for_wrapped_compat : t -> t

val for_root_module : t -> t

val for_module_generated_at_link_time :
t -> requires:Lib.t list Or_exn.t -> module_:Module.t -> t

Expand All @@ -101,9 +102,5 @@ val bin_annot : t -> bool

val without_bin_annot : t -> t

type rename =
{ new_name : Module_name.t
; old_name : Module_name.t
}

val renames : t -> rename list Or_exn.t
val root_module_entries :
t -> (Module_name.t * Module_name.t list) list Or_exn.t option
1 change: 0 additions & 1 deletion src/dune_rules/dir_contents.ml
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,6 @@ end = struct
(* Manually add files generated by the (select ...) dependencies *)
List.filter_map buildable.libraries ~f:(fun dep ->
match (dep : Lib_dep.t) with
| Rename _
| Re_export _
| Direct _ ->
None
Expand Down
33 changes: 1 addition & 32 deletions src/dune_rules/dune_file.ml
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,8 @@ module Lib_deps = struct
| Optional
| Forbidden

let rename_unwrapped_error loc =
User_error.raise ~loc
[ Pp.text "rename may not be used in unwrapped libraries" ]

let decode for_ =
let+ loc = loc
and+ project = Dune_project.get_exn ()
and+ t =
let allow_re_export =
match for_ with
Expand Down Expand Up @@ -98,22 +93,6 @@ module Lib_deps = struct
(Lib_name.to_string name)
] )
in
let check_rename =
match for_ with
| Library (Some (Simple false)) -> rename_unwrapped_error
| Library _ -> fun _loc -> ()
| Executable ->
if Dune_project.wrapped_executables project then
fun _loc ->
()
else
fun loc ->
User_error.raise ~loc
[ Pp.text
"rename may not be used in executables without \
wrapped_executables switched on in the dune-project file"
]
in
ignore
( List.fold_left t ~init:Lib_name.Map.empty ~f:(fun acc x ->
match x with
Expand All @@ -134,7 +113,7 @@ module Lib_deps = struct

let info t ~kind =
List.concat_map t ~f:(function
| Re_export (_, s)
| Lib_dep.Re_export (_, s)
| Direct (_, s) ->
[ (s, kind) ]
| Select { choices; _ } ->
Expand Down Expand Up @@ -328,16 +307,6 @@ module Buildable = struct
the "lib" prefix, however, since standard linkers require it). *)
| Some name -> (loc, Foreign.Archive.stubs name) :: foreign_archives
in
( match (root_module, for_) with
| None, _ -> ()
| Some (loc, _), Executable ->
if not (Dune_project.wrapped_executables project) then
User_message.raise ~loc
[ Pp.text
"root_module requires the executable to be wrapped. Please set \
(wrapped_executables true) in your dune-project"
]
| Some (loc, _), Library w -> assert false );
{ loc
; preprocess
; preprocessor_deps
Expand Down
2 changes: 0 additions & 2 deletions src/dune_rules/dune_file.mli
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@ module Lib_deps : sig
val info : t -> kind:Lib_deps_info.Kind.t -> Lib_deps_info.t

val decode : for_ -> t Dune_lang.Decoder.t

val rename_unwrapped_error : Loc.t -> 'a
end

(** [preprocess] and [preprocessor_deps] fields *)
Expand Down
2 changes: 0 additions & 2 deletions src/dune_rules/exe_rules.ml
Original file line number Diff line number Diff line change
Expand Up @@ -138,11 +138,9 @@ let executables_rules ~sctx ~dir ~expander ~dir_contents ~scope ~compile_info
| Other { kind = Shared_object; _ } -> true
| _ -> false)
in
let renames = Lib.Compile.renames compile_info in
Compilation_context.create () ~super_context:sctx ~expander ~scope ~obj_dir
~modules ~flags ~requires_link ~requires_compile ~preprocessing:pp
~js_of_ocaml ~opaque:Inherit_from_settings ~dynlink ~package:exes.package
~renames
in
let requires_compile = Compilation_context.requires_compile cctx in
let preprocess =
Expand Down
47 changes: 9 additions & 38 deletions src/dune_rules/lib.ml
Original file line number Diff line number Diff line change
Expand Up @@ -240,9 +240,8 @@ module T = struct
; unique_id : Id.t
; re_exports : t list Or_exn.t
; (* [requires] is contains all required libraries, including the ones
mentioned in [renames] and in [re_exports]. *)
mentioned in [re_exports]. *)
requires : t list Or_exn.t
; renames : (t * Module_name.t) list Or_exn.t
; ppx_runtime_deps : t list Or_exn.t
; pps : t list Or_exn.t
; resolved_selects : Resolved_select.t list
Expand Down Expand Up @@ -986,7 +985,6 @@ module rec Resolve : sig
; pps : lib list Or_exn.t
; selects : Resolved_select.t list
; re_exports : lib list Or_exn.t
; renames : (lib * Module_name.t) list Or_exn.t
}

val resolve_deps_and_add_runtime_deps :
Expand Down Expand Up @@ -1090,7 +1088,7 @@ end = struct
(Package.Name.to_string p')
] )))
in
let { requires; pps; selects = resolved_selects; re_exports; renames } =
let { requires; pps; selects = resolved_selects; re_exports } =
let pps =
Preprocess.Per_module.pps
(Preprocess.Per_module.with_instrumentation (Lib_info.preprocess info)
Expand Down Expand Up @@ -1146,7 +1144,6 @@ end = struct
; lib_config = db.lib_config
; re_exports
; project
; renames
}
in
t.sub_systems <-
Expand Down Expand Up @@ -1247,15 +1244,13 @@ end = struct
{ resolved : t list Or_exn.t
; selects : Resolved_select.t list
; re_exports : t list Or_exn.t
; renames : (lib * Module_name.t) list Or_exn.t
}

type resolved =
{ requires : lib list Or_exn.t
; pps : lib list Or_exn.t
; selects : Resolved_select.t list
; re_exports : lib list Or_exn.t
; renames : (lib * Module_name.t) list Or_exn.t
}

let resolve_complex_deps db deps ~private_deps ~stack : resolved_deps =
Expand Down Expand Up @@ -1284,9 +1279,9 @@ end = struct
in
(res, { Resolved_select.src_fn; dst_fn = result_fn })
in
let res, resolved_selects, re_exports, renames =
List.fold_left deps ~init:(Ok [], [], Ok [], Ok [])
~f:(fun (acc_res, acc_selects, acc_re_exports, acc_renames) dep ->
let res, resolved_selects, re_exports =
List.fold_left deps ~init:(Ok [], [], Ok [])
~f:(fun (acc_res, acc_selects, acc_re_exports) dep ->
match (dep : Lib_dep.t) with
| Re_export (loc, name) ->
let lib = resolve_dep db (loc, name) ~private_deps ~stack in
Expand All @@ -1300,43 +1295,26 @@ end = struct
and+ acc_res = acc_res in
lib :: acc_res
in
(acc_res, acc_selects, acc_re_exports, acc_renames)
| Rename ((loc, name), to_) ->
let lib = resolve_dep db (loc, name) ~private_deps ~stack in
let acc_res =
let+ lib = lib
and+ acc_res = acc_res in
lib :: acc_res
in
let acc_renames =
let+ lib = lib
and+ acc_renames = acc_renames in
(lib, to_) :: acc_renames
in
(acc_res, acc_selects, acc_re_exports, acc_renames)
(acc_res, acc_selects, acc_re_exports)
| Direct (loc, name) ->
let acc_res =
let+ lib = resolve_dep db (loc, name) ~private_deps ~stack
and+ acc_res = acc_res in
lib :: acc_res
in
(acc_res, acc_selects, acc_re_exports, acc_renames)
(acc_res, acc_selects, acc_re_exports)
| Select select ->
let res, resolved_select = resolve_select select in
let acc_res =
let+ res = res
and+ acc_res = acc_res in
List.rev_append res acc_res
in
( acc_res
, resolved_select :: acc_selects
, acc_re_exports
, acc_renames ))
(acc_res, resolved_select :: acc_selects, acc_re_exports))
in
let res = Result.map ~f:List.rev res in
let re_exports = Result.map ~f:List.rev re_exports in
let renames = Result.map ~f:List.rev renames in
{ resolved = res; selects = resolved_selects; re_exports; renames }
{ resolved = res; selects = resolved_selects; re_exports }

type pp_deps =
{ pps : t list Or_exn.t
Expand Down Expand Up @@ -1405,7 +1383,6 @@ end = struct
; pps
; selects = resolved.selects
; re_exports = resolved.re_exports
; renames = resolved.renames
}

let resolve_deps_and_add_runtime_deps db deps ~private_deps ~pps ~dune_version
Expand Down Expand Up @@ -1628,11 +1605,8 @@ module Compile = struct
; resolved_selects : Resolved_select.t list
; lib_deps_info : Lib_deps_info.t
; sub_systems : Sub_system0.Instance.t Lazy.t Sub_system_name.Map.t
; renames : (lib * Module_name.t) list Or_exn.t
}

let renames t = t.renames

let make_lib_deps_info ~user_written_deps ~pps ~kind =
Lib_deps_info.merge
(Dune_file.Lib_deps.info user_written_deps ~kind)
Expand Down Expand Up @@ -1684,7 +1658,6 @@ module Compile = struct
; pps = t.pps
; lib_deps_info
; sub_systems = t.sub_systems
; renames = t.renames
}

let direct_requires t = t.direct_requires
Expand Down Expand Up @@ -1821,7 +1794,6 @@ module DB = struct
; pps
; selects = resolved_selects
; re_exports = _
; renames
} =
Resolve.resolve_deps_and_add_runtime_deps t deps ~pps
~private_deps:Allow_all ~stack:Dep_stack.empty
Expand Down Expand Up @@ -1855,7 +1827,6 @@ module DB = struct
; resolved_selects
; lib_deps_info
; sub_systems = Sub_system_name.Map.empty
; renames
}

(* Here we omit the [only_ppx_deps_allowed] check because by the time we reach
Expand Down
2 changes: 0 additions & 2 deletions src/dune_rules/lib.mli
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,6 @@ module Compile : sig

(** Sub-systems used in this compilation context *)
val sub_systems : t -> sub_system list

val renames : t -> (lib * Module_name.t) list Or_exn.t
end
with type lib := t

Expand Down
15 changes: 0 additions & 15 deletions src/dune_rules/lib_dep.ml
Original file line number Diff line number Diff line change
@@ -1,21 +1,6 @@
open! Dune_engine
open Stdune

module Rename = struct
type t = (Loc.t * Lib_name.t) * Module_name.t

let decode : t Dune_lang.Decoder.t =
let open Dune_lang.Decoder in
let+ lib = Lib_name.decode_loc
and+ () = keyword "->"
and+ module_name = Module_name.decode in
(lib, module_name)

let to_dyn ((_, name), m) =
let open Dyn.Encoder in
pair Lib_name.to_dyn Module_name.to_dyn (name, m)
end

module Select = struct
module Choice = struct
type t =
Expand Down
5 changes: 0 additions & 5 deletions src/dune_rules/lib_dep.mli
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,10 @@ module Select : sig
val to_dyn : t -> Dyn.t
end

module Rename : sig
type t = (Loc.t * Lib_name.t) * Module_name.t
end

type t =
| Direct of (Loc.t * Lib_name.t)
| Re_export of (Loc.t * Lib_name.t)
| Select of Select.t
| Rename of Rename.t

val to_dyn : t -> Dyn.t

Expand Down
3 changes: 1 addition & 2 deletions src/dune_rules/lib_rules.ml
Original file line number Diff line number Diff line change
Expand Up @@ -372,11 +372,10 @@ let cctx (lib : Library.t) ~sctx ~source_modules ~dir ~expander ~scope
Dune_file.Mode_conf.Set.eval_detailed lib.modes ~has_native
in
let package = Dune_file.Library.package lib in
let renames = Lib.Compile.renames compile_info in
Compilation_context.create () ~super_context:sctx ~expander ~scope ~obj_dir
~modules ~flags ~requires_compile ~requires_link ~preprocessing:pp
~opaque:Inherit_from_settings ~js_of_ocaml:(Some lib.buildable.js_of_ocaml)
~dynlink ?stdlib:lib.stdlib ~package ?vimpl ~modes ~renames
~dynlink ?stdlib:lib.stdlib ~package ?vimpl ~modes

let library_rules (lib : Library.t) ~cctx ~source_modules ~dir_contents
~compile_info =
Expand Down
Loading

0 comments on commit d797c34

Please sign in to comment.