sig
  val frama_c_display : bool -> unit
  module Make :
    functor
      (G : sig
             type t
             module V :
               sig
                 type t
                 val compare : t -> t -> int
                 val hash : t -> int
                 val equal : t -> t -> bool
                 val id : Service_graph.Make.t -> int
                 val name : Service_graph.Make.t -> string
                 val attributes :
                   Service_graph.Make.t ->
                   Graph.Graphviz.DotAttributes.vertex list
                 val entry_point : unit -> Service_graph.Make.t option
               end
             val iter_vertex :
               (Service_graph.Make.V.t -> unit) ->
               Service_graph.Make.t -> unit
             val iter_succ :
               (Service_graph.Make.V.t -> unit) ->
               Service_graph.Make.t -> Service_graph.Make.V.t -> unit
             val iter_pred :
               (Service_graph.Make.V.t -> unit) ->
               Service_graph.Make.t -> Service_graph.Make.V.t -> unit
             val fold_pred :
               (Service_graph.Make.V.t -> '-> 'a) ->
               Service_graph.Make.t -> Service_graph.Make.V.t -> '-> 'a
             val datatype_name : string
           end->
      sig
        type vertex = private {
          node : G.V.t;
          mutable is_root : bool;
          mutable root : Service_graph.Make.vertex;
        }
        type edge = private Inter_services | Inter_functions | Both
        module CallG :
          sig
            type t
            module V :
              sig
                type t = vertex
                val compare : t -> t -> int
                val hash : t -> int
                val equal : t -> t -> bool
                type label
                val create : label -> t
                val label : t -> label
              end
            type vertex = V.t
            module E :
              sig
                type t
                val compare : t -> t -> int
                type vertex = vertex
                val src : t -> vertex
                val dst : t -> vertex
                type label = edge
                val create : vertex -> label -> vertex -> t
                val label : t -> label
              end
            type edge = E.t
            val is_directed : bool
            val is_empty : t -> bool
            val nb_vertex : t -> int
            val nb_edges : t -> int
            val out_degree : t -> vertex -> int
            val in_degree : t -> vertex -> int
            val mem_vertex : t -> vertex -> bool
            val mem_edge : t -> vertex -> vertex -> bool
            val mem_edge_e : t -> edge -> bool
            val find_edge : t -> vertex -> vertex -> edge
            val find_all_edges : t -> vertex -> vertex -> edge list
            val succ : t -> vertex -> vertex list
            val pred : t -> vertex -> vertex list
            val succ_e : t -> vertex -> edge list
            val pred_e : t -> vertex -> edge list
            val iter_vertex : (vertex -> unit) -> t -> unit
            val fold_vertex : (vertex -> '-> 'a) -> t -> '-> 'a
            val iter_edges : (vertex -> vertex -> unit) -> t -> unit
            val fold_edges : (vertex -> vertex -> '-> 'a) -> t -> '-> 'a
            val iter_edges_e : (edge -> unit) -> t -> unit
            val fold_edges_e : (edge -> '-> 'a) -> t -> '-> 'a
            val map_vertex : (vertex -> vertex) -> t -> t
            val iter_succ : (vertex -> unit) -> t -> vertex -> unit
            val iter_pred : (vertex -> unit) -> t -> vertex -> unit
            val fold_succ : (vertex -> '-> 'a) -> t -> vertex -> '-> 'a
            val fold_pred : (vertex -> '-> 'a) -> t -> vertex -> '-> 'a
            val iter_succ_e : (edge -> unit) -> t -> vertex -> unit
            val fold_succ_e : (edge -> '-> 'a) -> t -> vertex -> '-> 'a
            val iter_pred_e : (edge -> unit) -> t -> vertex -> unit
            val fold_pred_e : (edge -> '-> 'a) -> t -> vertex -> '-> 'a
            module Datatype :
              sig
                type t = t
                val ty : t Type.t
                val name : string
                val descr : t Descr.t
                val packed_descr : Structural_descr.pack
                val reprs : t list
                val equal : t -> t -> bool
                val compare : t -> t -> int
                val hash : t -> int
                val pretty_code : Format.formatter -> t -> unit
                val internal_pretty_code :
                  Type.precedence -> Format.formatter -> t -> unit
                val pretty : Format.formatter -> t -> unit
                val varname : t -> string
                val mem_project : (Project_skeleton.t -> bool) -> t -> bool
                val copy : t -> t
              end
          end
        val compute :
          G.t -> Datatype.String.Set.t -> Service_graph.Make.CallG.t
        val output_graph :
          Pervasives.out_channel -> Service_graph.Make.CallG.t -> unit
        val entry_point : unit -> Service_graph.Make.CallG.V.t option
        module TP :
          sig
            type t = CallG.t
            module V :
              sig
                type t = vertex
                val compare : t -> t -> int
                val hash : t -> int
                val equal : t -> t -> bool
                type label
                val create : label -> t
                val label : t -> label
              end
            type vertex = V.t
            module E :
              sig
                type t = CallG.E.t
                val compare : t -> t -> int
                type vertex = vertex
                val src : t -> vertex
                val dst : t -> vertex
                type label
                val create : vertex -> label -> vertex -> t
                val label : t -> label
              end
            type edge = E.t
            val is_directed : bool
            val is_empty : t -> bool
            val nb_vertex : t -> int
            val nb_edges : t -> int
            val out_degree : t -> vertex -> int
            val in_degree : t -> vertex -> int
            val mem_vertex : t -> vertex -> bool
            val mem_edge : t -> vertex -> vertex -> bool
            val mem_edge_e : t -> edge -> bool
            val find_edge : t -> vertex -> vertex -> edge
            val find_all_edges : t -> vertex -> vertex -> edge list
            val succ : t -> vertex -> vertex list
            val pred : t -> vertex -> vertex list
            val succ_e : t -> vertex -> edge list
            val pred_e : t -> vertex -> edge list
            val iter_vertex : (vertex -> unit) -> t -> unit
            val fold_vertex : (vertex -> '-> 'a) -> t -> '-> 'a
            val iter_edges : (vertex -> vertex -> unit) -> t -> unit
            val fold_edges : (vertex -> vertex -> '-> 'a) -> t -> '-> 'a
            val iter_edges_e : (edge -> unit) -> t -> unit
            val fold_edges_e : (edge -> '-> 'a) -> t -> '-> 'a
            val map_vertex : (vertex -> vertex) -> t -> t
            val iter_succ : (vertex -> unit) -> t -> vertex -> unit
            val iter_pred : (vertex -> unit) -> t -> vertex -> unit
            val fold_succ : (vertex -> '-> 'a) -> t -> vertex -> '-> 'a
            val fold_pred : (vertex -> '-> 'a) -> t -> vertex -> '-> 'a
            val iter_succ_e : (edge -> unit) -> t -> vertex -> unit
            val fold_succ_e : (edge -> '-> 'a) -> t -> vertex -> '-> 'a
            val iter_pred_e : (edge -> unit) -> t -> vertex -> unit
            val fold_pred_e : (edge -> '-> 'a) -> t -> vertex -> '-> 'a
            val graph_attributes :
              t -> Graph.Graphviz.DotAttributes.graph list
            val default_vertex_attributes :
              t -> Graph.Graphviz.DotAttributes.vertex list
            val vertex_name : V.t -> string
            val vertex_attributes :
              V.t -> Graph.Graphviz.DotAttributes.vertex list
            val default_edge_attributes :
              t -> Graph.Graphviz.DotAttributes.edge list
            val edge_attributes :
              E.t -> Graph.Graphviz.DotAttributes.edge list
            val get_subgraph :
              V.t -> Graph.Graphviz.DotAttributes.subgraph option
          end
      end
end