From 07c47f0c1b1df556ae022784da8604daad3cfec0 Mon Sep 17 00:00:00 2001 From: Allan Blanchard <allan.blanchard@cea.fr> Date: Wed, 17 May 2023 10:19:25 +0200 Subject: [PATCH] [cg] removed GUI (no more GTK2) --- src/plugins/callgraph/gui/cg_viewer.ml | 252 ---------------------- src/plugins/callgraph/gui/cg_viewer.mli | 23 -- src/plugins/callgraph/gui/dune | 50 ----- src/plugins/callgraph/gui/graph.dgraph.ml | 23 -- src/plugins/callgraph/gui/graph.gtk.ml | 23 -- 5 files changed, 371 deletions(-) delete mode 100644 src/plugins/callgraph/gui/cg_viewer.ml delete mode 100644 src/plugins/callgraph/gui/cg_viewer.mli delete mode 100644 src/plugins/callgraph/gui/dune delete mode 100644 src/plugins/callgraph/gui/graph.dgraph.ml delete mode 100644 src/plugins/callgraph/gui/graph.gtk.ml diff --git a/src/plugins/callgraph/gui/cg_viewer.ml b/src/plugins/callgraph/gui/cg_viewer.ml deleted file mode 100644 index 4eba1034a11..00000000000 --- a/src/plugins/callgraph/gui/cg_viewer.ml +++ /dev/null @@ -1,252 +0,0 @@ -(**************************************************************************) -(* *) -(* This file is part of Frama-C. *) -(* *) -(* Copyright (C) 2007-2023 *) -(* CEA (Commissariat à l'énergie atomique et aux énergies *) -(* alternatives) *) -(* *) -(* you can redistribute it and/or modify it under the terms of the GNU *) -(* Lesser General Public License as published by the Free Software *) -(* Foundation, version 2.1. *) -(* *) -(* It is distributed in the hope that it will be useful, *) -(* but WITHOUT ANY WARRANTY; without even the implied warranty of *) -(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *) -(* GNU Lesser General Public License for more details. *) -(* *) -(* See the GNU Lesser General Public License version 2.1 *) -(* for more details (enclosed in the file licenses/LGPLv2.1). *) -(* *) -(**************************************************************************) - -open Graph.S - -let ($) f x = f x - -type service_id = int - -module Service_view = DGraphContainer.Make(Services.Graphviz_attributes) - -class ['v, 'e, 'c] services_view view = object (self) - - val services: - (service_id, - bool ref * Services.G.V.t DGraphViewItem.view_item list ref) - Hashtbl.t - = Hashtbl.create 10 - - method is_root (n:'v DGraphViewItem.view_item) = n#item.Service_graph.is_root - - method is_deployed id = - try !(fst (Hashtbl.find services id)) with Not_found -> assert false - - method edge_kind (e: 'e DGraphViewItem.view_item) = - Services.G.E.label e#item - - method deploy node = - assert (self#is_root node); - let service = self#service node in - let deployed, nodes = Hashtbl.find services service in - assert (not !deployed); - deployed := true; - (* iterating on nodes of the current service *) - List.iter - (fun n -> - n#compute (); - if not (self#is_root n) then n#show (); - view#iter_succ_e - (fun e -> match self#edge_kind e with - | Service_graph.Inter_functions | Service_graph.Both -> - e#compute (); - e#show () - | Service_graph.Inter_services -> - e#hide ()) - n) - !nodes - - method undeploy node = - assert (self#is_root node); - let service = self#service node in - let deployed, nodes = Hashtbl.find services service in - assert !deployed; - deployed := false; - (* iterating on nodes of the current service *) - List.iter - (fun n -> - if not (self#is_root n) then n#hide (); - view#iter_succ_e - (fun e -> match self#edge_kind e with - | Service_graph.Inter_services | Service_graph.Both -> e#show () - | Service_graph.Inter_functions -> e#hide ()) - n) - !nodes - - method service n = - Kernel_function.get_id n#item.Service_graph.root.Service_graph.node - - initializer - let add_in_service n s = - try - let _, nodes = Hashtbl.find services s in - nodes := n :: !nodes - with Not_found -> - Hashtbl.add services s (ref false, ref [ n ]) - in - let connect_trigger_to_node n = - let callback = function - | `BUTTON_PRESS _ -> - if self#is_deployed (self#service n) then self#undeploy n - else self#deploy n; - false - | _ -> - false - in - n#connect_event ~callback - in - view#iter_nodes - (fun n -> - add_in_service n (self#service n); - if self#is_root n then connect_trigger_to_node n else n#hide ()); - view#iter_edges_e - (fun e -> match self#edge_kind e with - | Service_graph.Inter_services | Service_graph.Both -> e#show () - | Service_graph.Inter_functions -> e#hide ()) - -end - -(* Constructor copied from dGraphView *) -let services_view model = - let delay_node v = not v.Service_graph.is_root in - let delay_edge e = match Services.G.E.label e with - | Service_graph.Inter_services | Service_graph.Both -> false - | Service_graph.Inter_functions -> true - in - let view = Service_view.GView.view ~aa:true ~delay_node ~delay_edge model in - view#set_zoom_padding 0.025; - (* not very nice *) - ignore (new services_view view); - view#connect_highlighting_event (); - ignore $ view#set_center_scroll_region true; - view - -let make_service_view ~packing () = - let _, view = - Service_view.from_graph_with_commands - ~packing - ?root:(Services.entry_point ()) - ~mk_global_view:services_view - (Services.Subgraph.get ()) - in - view - -module Cg_view = DGraphContainer.Make(Cg.Graphviz_attributes) - -let make_cg_view ?root ~packing (): Cg_view.view_container = - let _, view = - Cg_view.from_graph_with_commands ~packing ?root (Cg.Subgraph.get ()) - in - view - -(* note: root is only used when services are not computed *) -let make_graph_view ?root services ~packing () = - if services then - (make_service_view ~packing () :> <adapt_zoom: unit -> unit>) - else - (make_cg_view ?root ~packing () :> <adapt_zoom: unit -> unit >) - -let has_entry_point () = - try ignore (Globals.entry_point ()); true - with Globals.No_such_entry_point _ -> false - -let can_show_service_graph () = - has_entry_point () && Options.Service_roots.is_empty () - -let get_current_function () = - match History.get_current () with - | Some (History.Global (Cil_types.GFunDecl (_, vi, _))) - | Some (History.Global (Cil_types.GFun ({Cil_types.svar = vi}, _))) -> - let kf = - try Globals.Functions.get vi - with Not_found -> Options.fatal "no kf for %a" Printer.pp_varinfo vi - in - if Kernel_function.is_definition kf then Some kf else None - | Some (History.Localizable l) -> Pretty_source.kf_of_localizable l - | _ -> None - -let warn_degrade reason = - GToolbox.message_box ~title:"Warning" - ("Services cannot be displayed due to " ^ reason ^ - ".\n\ - View degraded to non-service graph.\n\ - (use -cg-no-services to avoid this warning)") - -let main (window: Design.main_window_extension_points) = - ignore - ((window#menu_manager ())#add_plugin - [ Menu_manager.menubar "Show entire callgraph" - (Menu_manager.Unit_callback (fun () -> - (* note: if there is no entry point, or if the set of service - roots is not empty, we must 'degrade' the view and show a - non-service graph *) - let services, warn = - if Options.Services.get () then - let degrade = not (can_show_service_graph ()) in - not degrade, degrade - else false, false - in - try - (* display the callgraph through its dot output *) - Service_graph.frama_c_display true; - Dgraph_helper.graph_window - ~parent:window#main_window ~title:"Callgraph" - (make_graph_view services); - if warn then - warn_degrade - (if not (has_entry_point ()) then "absence of entry point" - else "set of service roots being non-empty") - with ex -> - GToolbox.message_box ~title:"Error" - ("Error loading callgraph: " ^ (Printexc.to_string ex)) - )); - Menu_manager.menubar "Show callgraph from current function" - ~sensitive:(fun () -> get_current_function () <> None) - (Menu_manager.Unit_callback (fun () -> - match get_current_function () with - | None -> - GToolbox.message_box ~title:"Error" "Error: no current function" - | Some kf -> - try - (* save old value, to restore it later *) - let old_roots = Options.Roots.get () in - Options.Roots.set (Kernel_function.Set.singleton kf); - let services, warn = - if Options.Services.get () && can_show_service_graph () - then begin - ignore (Services.Subgraph.get ()); (* compute subgraph *) - let is_root = Services.is_root kf in - is_root, not is_root - end - else false, false - in - Service_graph.frama_c_display true; - Dgraph_helper.graph_window - ~parent:window#main_window ~title:"Callgraph" - (make_graph_view ~root:kf services); - (* restore old value *) - Options.Roots.set old_roots; - if warn then - warn_degrade "node not being a service root" - with ex -> - GToolbox.message_box ~title:"Error" - ("Error loading callgraph: " ^ (Printexc.to_string ex)) - )) - ]) - -let () = Design.register_extension main - -(* -Local Variables: -compile-command: "make -C ../../.." -End: -*) diff --git a/src/plugins/callgraph/gui/cg_viewer.mli b/src/plugins/callgraph/gui/cg_viewer.mli deleted file mode 100644 index fae5d3d1a3c..00000000000 --- a/src/plugins/callgraph/gui/cg_viewer.mli +++ /dev/null @@ -1,23 +0,0 @@ -(**************************************************************************) -(* *) -(* This file is part of Frama-C. *) -(* *) -(* Copyright (C) 2007-2023 *) -(* CEA (Commissariat à l'énergie atomique et aux énergies *) -(* alternatives) *) -(* *) -(* you can redistribute it and/or modify it under the terms of the GNU *) -(* Lesser General Public License as published by the Free Software *) -(* Foundation, version 2.1. *) -(* *) -(* It is distributed in the hope that it will be useful, *) -(* but WITHOUT ANY WARRANTY; without even the implied warranty of *) -(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *) -(* GNU Lesser General Public License for more details. *) -(* *) -(* See the GNU Lesser General Public License version 2.1 *) -(* for more details (enclosed in the file licenses/LGPLv2.1). *) -(* *) -(**************************************************************************) - -(** Extension of the Frama-C GUI for the plugin. Nothing is exported. *) diff --git a/src/plugins/callgraph/gui/dune b/src/plugins/callgraph/gui/dune deleted file mode 100644 index 2d7ced2c466..00000000000 --- a/src/plugins/callgraph/gui/dune +++ /dev/null @@ -1,50 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ;; -;; This file is part of Frama-C. ;; -;; ;; -;; Copyright (C) 2007-2023 ;; -;; CEA (Commissariat à l'énergie atomique et aux énergies ;; -;; alternatives) ;; -;; ;; -;; you can redistribute it and/or modify it under the terms of the GNU ;; -;; Lesser General Public License as published by the Free Software ;; -;; Foundation, version 2.1. ;; -;; ;; -;; It is distributed in the hope that it will be useful, ;; -;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; -;; GNU Lesser General Public License for more details. ;; -;; ;; -;; See the GNU Lesser General Public License version 2.1 ;; -;; for more details (enclosed in the file licenses/LGPLv2.1). ;; -;; ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(rule - (alias frama-c-configure) - (deps (universe)) - (action (progn - (echo "Callgraph GUI:" %{lib-available:frama-c-callgraph.gui} "\n") - (echo " - Frama-C GUI:" %{lib-available:frama-c.gui} "\n") - (echo " - Callgraph:" %{lib-available:frama-c-callgraph.core} "\n") - (echo " - Ocamlgraph_gtk:" %{lib-available:ocamlgraph_gtk} "\n") - (echo " - Ocamlgraph Dgraph:" %{lib-available:ocamlgraph.dgraph} "\n") - ) - ) -) - -( library - (name callgraph_gui) - (public_name frama-c-callgraph.gui) - (optional) - (flags -open Frama_c_kernel -open Frama_c_gui -open Callgraph :standard -w -9) - (libraries - frama-c.kernel frama-c.gui frama-c-callgraph.core - (select graph.ml from - (!lablgtk3-sourceview3 ocamlgraph.dgraph -> graph.dgraph.ml) - (!lablgtk3-sourceview3 ocamlgraph_gtk -> graph.gtk.ml) - ) - ) -) - -(plugin (optional) (name callgraph-gui) (libraries frama-c-callgraph.gui) (site (frama-c plugins_gui))) diff --git a/src/plugins/callgraph/gui/graph.dgraph.ml b/src/plugins/callgraph/gui/graph.dgraph.ml deleted file mode 100644 index 9fda8eaf92a..00000000000 --- a/src/plugins/callgraph/gui/graph.dgraph.ml +++ /dev/null @@ -1,23 +0,0 @@ -(**************************************************************************) -(* *) -(* This file is part of Frama-C. *) -(* *) -(* Copyright (C) 2007-2023 *) -(* CEA (Commissariat à l'énergie atomique et aux énergies *) -(* alternatives) *) -(* *) -(* you can redistribute it and/or modify it under the terms of the GNU *) -(* Lesser General Public License as published by the Free Software *) -(* Foundation, version 2.1. *) -(* *) -(* It is distributed in the hope that it will be useful, *) -(* but WITHOUT ANY WARRANTY; without even the implied warranty of *) -(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *) -(* GNU Lesser General Public License for more details. *) -(* *) -(* See the GNU Lesser General Public License version 2.1 *) -(* for more details (enclosed in the file licenses/LGPLv2.1). *) -(* *) -(**************************************************************************) - -module S = Dgraph diff --git a/src/plugins/callgraph/gui/graph.gtk.ml b/src/plugins/callgraph/gui/graph.gtk.ml deleted file mode 100644 index 37157261798..00000000000 --- a/src/plugins/callgraph/gui/graph.gtk.ml +++ /dev/null @@ -1,23 +0,0 @@ -(**************************************************************************) -(* *) -(* This file is part of Frama-C. *) -(* *) -(* Copyright (C) 2007-2023 *) -(* CEA (Commissariat à l'énergie atomique et aux énergies *) -(* alternatives) *) -(* *) -(* you can redistribute it and/or modify it under the terms of the GNU *) -(* Lesser General Public License as published by the Free Software *) -(* Foundation, version 2.1. *) -(* *) -(* It is distributed in the hope that it will be useful, *) -(* but WITHOUT ANY WARRANTY; without even the implied warranty of *) -(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *) -(* GNU Lesser General Public License for more details. *) -(* *) -(* See the GNU Lesser General Public License version 2.1 *) -(* for more details (enclosed in the file licenses/LGPLv2.1). *) -(* *) -(**************************************************************************) - -module S = Graph_gtk -- GitLab