From 212bf52e05047dd3839a53f27009382bc4e3f17e Mon Sep 17 00:00:00 2001 From: Patrick Baudin <patrick.baudin@cea.fr> Date: Fri, 13 Jan 2023 15:01:32 +0100 Subject: [PATCH] removing print_api plug-in --- src/plugins/print_api/.gitignore | 8 - src/plugins/print_api/Print_api.ml | 23 -- src/plugins/print_api/dune | 30 -- src/plugins/print_api/dune-project | 25 -- src/plugins/print_api/frama-c-print_api.opam | 0 src/plugins/print_api/grammar.mly | 41 -- src/plugins/print_api/lexer.mli | 23 -- src/plugins/print_api/lexer.mll | 34 -- src/plugins/print_api/print_interface.ml | 370 ------------------- src/plugins/print_api/print_interface.mli | 23 -- 10 files changed, 577 deletions(-) delete mode 100644 src/plugins/print_api/.gitignore delete mode 100644 src/plugins/print_api/Print_api.ml delete mode 100644 src/plugins/print_api/dune delete mode 100644 src/plugins/print_api/dune-project delete mode 100644 src/plugins/print_api/frama-c-print_api.opam delete mode 100644 src/plugins/print_api/grammar.mly delete mode 100644 src/plugins/print_api/lexer.mli delete mode 100644 src/plugins/print_api/lexer.mll delete mode 100644 src/plugins/print_api/print_interface.ml delete mode 100644 src/plugins/print_api/print_interface.mli diff --git a/src/plugins/print_api/.gitignore b/src/plugins/print_api/.gitignore deleted file mode 100644 index ec0601a1e42..00000000000 --- a/src/plugins/print_api/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -/META.frama-c-print_api -/dynamic_plugins.mli -/grammar.ml -/grammar.mli -/grammar.output -/lexer.ml -/.depend -/_build diff --git a/src/plugins/print_api/Print_api.ml b/src/plugins/print_api/Print_api.ml deleted file mode 100644 index 1846c234793..00000000000 --- a/src/plugins/print_api/Print_api.ml +++ /dev/null @@ -1,23 +0,0 @@ -(**************************************************************************) -(* *) -(* This file is part of Frama-C. *) -(* *) -(* Copyright (C) 2007-2022 *) -(* 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). *) -(* *) -(**************************************************************************) - -(* Nothing is exported. *) diff --git a/src/plugins/print_api/dune b/src/plugins/print_api/dune deleted file mode 100644 index 04a23dd1088..00000000000 --- a/src/plugins/print_api/dune +++ /dev/null @@ -1,30 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ;; -;; This file is part of Frama-C. ;; -;; ;; -;; Copyright (C) 2007-2022 ;; -;; 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). ;; -;; ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -; ( library -; (name print_api) -; (public_name frama-c-print_api.core) -; (flags -open Frama_c_kernel) -; (libraries frama-c.kernel frama-c-callgraph.core frama-c-eva.core frama-c-postdominators.core) -; ) - -; (plugin (optional) (name print_api) (libraries frama-c-print_api.core) (site (frama-c plugins))) diff --git a/src/plugins/print_api/dune-project b/src/plugins/print_api/dune-project deleted file mode 100644 index 6c3c7e48222..00000000000 --- a/src/plugins/print_api/dune-project +++ /dev/null @@ -1,25 +0,0 @@ -(lang dune 3.2) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ;; -;; This file is part of Frama-C. ;; -;; ;; -;; Copyright (C) 2007-2022 ;; -;; 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). ;; -;; ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(name frama-c-print_api) -(using dune_site 0.1) diff --git a/src/plugins/print_api/frama-c-print_api.opam b/src/plugins/print_api/frama-c-print_api.opam deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/plugins/print_api/grammar.mly b/src/plugins/print_api/grammar.mly deleted file mode 100644 index c32ee7fd2a9..00000000000 --- a/src/plugins/print_api/grammar.mly +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************/ -/* */ -/* This file is part of Frama-C. */ -/* */ -/* Copyright (C) 2007-2022 */ -/* 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). */ -/* */ -/**************************************************************************/ - - %{ - %} - -%token <string> WORD -%token LPAR -%token RPAR -%token COMMA -%token EOF -%start main -%type <string> main -%% -main: -type_string EOF { $1 } -word: WORD { $1 } -type_string: word { $1 } - | type_string word { "'a "^$2 } - | LPAR type_string COMMA type_string RPAR word { "('a,'b) "^$6 } - | LPAR type_string COMMA type_string COMMA type_string RPAR word { "('a,'b,'c) "^$8 } - | LPAR type_string COMMA type_string COMMA type_string COMMA type_string RPAR word { "('a,'b,'c,'d) "^$10 } diff --git a/src/plugins/print_api/lexer.mli b/src/plugins/print_api/lexer.mli deleted file mode 100644 index b030b67784f..00000000000 --- a/src/plugins/print_api/lexer.mli +++ /dev/null @@ -1,23 +0,0 @@ -(**************************************************************************) -(* *) -(* This file is part of Frama-C. *) -(* *) -(* Copyright (C) 2007-2022 *) -(* 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). *) -(* *) -(**************************************************************************) - -val token: Lexing.lexbuf -> Grammar.token diff --git a/src/plugins/print_api/lexer.mll b/src/plugins/print_api/lexer.mll deleted file mode 100644 index 634d35e0a76..00000000000 --- a/src/plugins/print_api/lexer.mll +++ /dev/null @@ -1,34 +0,0 @@ -(**************************************************************************) -(* *) -(* This file is part of Frama-C. *) -(* *) -(* Copyright (C) 2007-2022 *) -(* 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 token = parse - | [' ' '\t'] { token lexbuf } - | [ ^ '(' ',' ')' ' ' ]* { Grammar.WORD (Lexing.lexeme lexbuf) } - | '(' { Grammar.LPAR } - | ')' { Grammar.RPAR } - | ',' { Grammar.COMMA } - | eof {Grammar.EOF } - - diff --git a/src/plugins/print_api/print_interface.ml b/src/plugins/print_api/print_interface.ml deleted file mode 100644 index 5e38cda7e38..00000000000 --- a/src/plugins/print_api/print_interface.ml +++ /dev/null @@ -1,370 +0,0 @@ -(**************************************************************************) -(* *) -(* This file is part of Frama-C. *) -(* *) -(* Copyright (C) 2007-2022 *) -(* 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). *) -(* *) -(**************************************************************************) - -(** Register the new plugin. *) -module Self = - Plugin.Register - (struct - let name = "Print interface" - let shortname = "print_api" - let help = "This plugin creates a file containing all \ - the registered signatures of the dynamic plugins" - end) - -(** Register the new Frama-C option "-print_api". *) -module Enabled = - Self.String - (struct - let option_name = "-print_api" - let help = "creates a .mli file for the dynamic plugins inside the \ - supplied directory" - let arg_name = "dir" - let default = "" - end) - -type function_element = - { name: string; - type_string: string; - datatype_string: string } - -(** Each object of the table is going to be composed of : - (function_name, type_string) - and its corresponding key is "plugin_name" *) -let functions_tbl = Hashtbl.create 97 - -(** [type_to_add] contains types not referenced in [reference] and to be added - in the interface. The list [reference] contains the names of the regular - types of OCaml and the registered types of static plugins and kernel *) -let type_to_add: (string, string * string) Hashtbl.t = Hashtbl.create 97 - -let clash_with_compilation_unit = - let h = Hashtbl.create 97 in - List.iter (fun s -> Hashtbl.add h s ()) Fc_config.compilation_unit_names; - fun s -> - Hashtbl.mem h s || Hashtbl.mem h (String.lowercase_ascii s) - -(** Modules can depend on each other, when a value of a given module depend - on a type of another. It is then important to print them in an appropriate - order. *) -module Module_deps = Graph.Imperative.Digraph.Concrete(Datatype.String) -let module_deps = Module_deps.create () - -(** Comments are registered apart in the module Dynamic *) -module Comment: sig - val add: string -> string -> unit - val find: string -> string -end = struct - let tbl: (string, string) Hashtbl.t = Hashtbl.create 97 - let add k v = if v <> "" then Hashtbl.add tbl k v - let find k = try Hashtbl.find tbl k with Not_found -> "" -end - -(**returns a list of the substrings *) -let split_dot s = Str.split (Str.regexp_string ".") s - -let get_name i s = - let li = split_dot s in - let rec get_name_aux i j l = - if i < j then match i, l with - | _, [] -> "" - | 0, h :: _ -> h - | _ , _ :: q -> get_name_aux (i-1) (j-1) q - else - "" - in - get_name_aux i (List.length li) li - -let sub_string_dot i s = - let rec sub_string_dot_aux j = - if j < i then get_name j s ^ "." ^ sub_string_dot_aux (j+1) - else get_name i s - in - sub_string_dot_aux 0 - -(** If s = "module1.module2 ... .fname", then [function_name s] = "fname" *) -let function_name s = - let rec function_name_aux i s = - match i , get_name (i+2) s , get_name (i+1) s with - | 0,"","" -> "" - | _,"",f -> f - | _,_,_ -> function_name_aux (i+1) s - in - function_name_aux 0 s - -(** If s = "module1.module2 ... .fname", - then [long_function_name s] = "module2 ... .fname" *) -let long_function_name s = - let pt_idx = ref 0 in - try - for i = 0 to String.length s - 1 do - if s.[i] = '.' then begin - pt_idx := i; - raise Exit - end - done; - s - with Exit -> - Str.string_after s (!pt_idx + 1) - -(** when considering s = "plugin_name_0.plugin_name_1.function_name", - [plugin_name s] ="plugin_name_0.plugin_name_1" *) -let plugin_name s = - let rec plugin_name_aux i s = - match i , get_name (i+2) s , get_name (i+1) s with - | 0, "", "" -> get_name 0 s - | _, "", _ -> sub_string_dot i s - | _, _, _ -> plugin_name_aux (i+1) s - in - plugin_name_aux 0 s - -let sub_string_dot_compare i s1 s2 = sub_string_dot i s1 = sub_string_dot i s2 - -let first_divergence m1 m2 = - let rec aux i = if sub_string_dot_compare i m1 m2 then aux (i+1) else i in - sub_string_dot (aux 0) m1 - -(* m1 depends on m2 *) -let add_module_dep m1 m2 = - Module_deps.add_edge module_deps m2 (first_divergence m1 m2) - -let find_module_deps m1 = - (* add the vertex in order to avoid OCamlGraph crashing on a non-existent - vertex. *) - Module_deps.add_vertex module_deps m1; - let deps = Module_deps.pred module_deps m1 in - let rec find_real_module m1 m = - let complete_name = m1 ^ "." ^ m in - if Hashtbl.mem type_to_add complete_name || - Hashtbl.mem functions_tbl complete_name - then complete_name - else - let pre_m1 = plugin_name m1 in - if m1 = pre_m1 then m else find_real_module m1 m - in - List.map (find_real_module m1) deps - -(** true if m2 is a sub-module of m1 *) -let is_submodule m1 m2 = let m1' = first_divergence m1 m2 in m1 = m1' - -(** [analyse_type] is called each time a new value is added to [functions_tbl] - in the function [fill_tbl]. It considers what is given by - [Type.get_embedded_type_name type_string], tests if the type to analyse is - not already recorded in the [reference] list or creates the corresponding - type in the Hashtable [type_to add] where the key is the module name of this - type. *) -let analyse_type name l = - let add_type tbl name module_name typ = - let add_type_aux t s ty = - let temp = try Hashtbl.find_all t s with Not_found -> [] in - if not (List.mem ty temp) then Hashtbl.add t s ty - in - if function_name name = module_name - then add_type_aux tbl name typ - else begin - if name <> module_name then add_module_dep name module_name; - add_type_aux tbl module_name typ - end - in - let analyse_type_aux s = - if not (String.contains s '>') && (String.contains s '.') then - if not (String.contains s ' ') then begin - let s_name = get_name 0 s in - if not (clash_with_compilation_unit s_name) then - let typ_n = function_name s in - let module_name = plugin_name s in - add_type type_to_add name module_name (typ_n, s) - end else - let lexbuf = Lexing.from_string s in - let param, type_name = - let l = - Str.split (Str.regexp_string " ") (Grammar.main Lexer.token lexbuf) - in - match l with - | [ h ] -> "", h - | [h1; h2 ] -> h1, h2 - | _ -> "", "" - in - let ty_name = get_name 0 type_name in - if String.contains type_name '.' - && not (clash_with_compilation_unit ty_name) - then - let typ_n = param ^ " " ^ function_name type_name in - let module_name = plugin_name type_name in - add_type type_to_add name module_name (typ_n, type_name) - in - List.iter analyse_type_aux (List.rev l) - -let is_option key = String.length key > 1 && String.rcontains_from key 1 '-' - -(** It fills [function_tbl] with the content of [dynamic_values] which is a - Hashtable recorded in the module Dynamic. This Hashtable also contains - options like: "-hello-help" or "-hello-debug". The 'if' is taking away this - useless strings and the module named "Dynamic" and fills the table with the - suitable names. *) -let fill_tbl key typ _ = - if not (is_option key || get_name 0 key = "Dynamic") then - let type_list = Type.get_embedded_type_names typ in - let func_elem = - { name = function_name key ; - type_string = Type.name typ ; - datatype_string = Type.ml_name typ } - in - Hashtbl.add functions_tbl (plugin_name key) func_elem; - analyse_type (plugin_name key) type_list - -(** It replaces the sub-strings "Plugin.type" of all the string [type_string] - used in the module named "Plugin" by "type". - It also removes the option structure (e.g. "~gid:string" is replaced by - "string"). *) -let repair_type module_name type_string = - let rec remove_param_name s = - try - let c = String.index s ':' in - let after = remove_param_name (Str.string_after s (c+1)) in - try - let n = String.index s '~' in - if n < c then - if n = 0 then after - else remove_param_name (Str.string_before s n) ^ after - else - s - with Not_found -> - if c = 0 then after - else - let sp = String.rindex (Str.string_before s c) ' ' in - remove_param_name (Str.string_before s (sp + 1)) ^ after - with Not_found -> - s - in - let remove_name_module s module_n = - Str.global_replace (Str.regexp (module_n ^ "\\.")) "" s - in - match split_dot module_name with - | [] -> type_string - | l -> List.fold_left remove_name_module (remove_param_name type_string) l - -(** For each key of the table [functions_tbl], [print_plugin] takes all - the pieces of information found in the Hashtable [dynamic_values] - of the module Dynamic and stored in the 3 Hashtables - ([functions_tb]l, [type_to_add], [comment_tbl]) and builds up a string - in order to write the signature of this module in the .mli file *) -let print_plugin fmt = - let modules_list: (string, unit) Hashtbl.t = Hashtbl.create 7 in - let rec space i = match i with - | 0 -> "" - | _ -> space (i-1) ^ " " - in - let rec print_types fmt sp = function - | [] -> () - | (h, long_h) :: q -> - Format.fprintf fmt "@\n%stype %s@\n%s \ - (** @@call by writing [T.ty] where [T] has previously been defined by: \ - [module T = Type.Abstract(struct let name = %s end)]. Be careful to replace occurrences of %s by T.ty anywhere else in this doc. *)" - sp h sp long_h long_h; - print_types fmt sp q - in - let rec print_one_plugin fmt i key1 = - if not (get_name i key1 = "") then - let module_name = sub_string_dot i key1 in - if not (Hashtbl.mem modules_list module_name) then begin - Hashtbl.add modules_list module_name (); - (* Check whether there are some modules to be treated before us. *) - let deps = find_module_deps key1 in - let extern, sub_modules = List.partition (is_submodule key1) deps in - List.iter (print_one_plugin fmt i) extern; - let short_module_name = - String.capitalize_ascii (get_name i key1) - in - let space_i = space i in - Format.fprintf fmt "\n \n%smodule %s:\n%ssig " - space_i - short_module_name - space_i; - List.iter (print_one_plugin fmt (succ i)) sub_modules; - let module_types = - try Hashtbl.find_all type_to_add module_name - with Not_found -> [] - in - print_types fmt (space i) module_types ; - let print_one_plugin_aux fmt key elem = - if sub_string_dot i key = module_name then - let succ_i = succ i in - if get_name succ_i key = "" then begin - let plugin_name = sub_string_dot 0 key1 in - let found_comment = Comment.find (key ^ "." ^ elem.name) in - Format.fprintf fmt - "@\n%s@[ @[val %s:@ %s@]@\n%s@[ (** %s\n\ - @@call Dynamic.get ~plugin:\"%s\" \"%s\" %s *)@]@]@\n" - space_i - elem.name - (repair_type module_name elem.type_string) - space_i - found_comment - plugin_name - (long_function_name (key ^ "." ^ elem.name)) - elem.datatype_string; - Hashtbl.remove functions_tbl key - end else - print_one_plugin fmt succ_i key - in - Hashtbl.iter (print_one_plugin_aux fmt) functions_tbl ; - Format.fprintf fmt "\n%send" (space i) - end - in - let print_all fmt i key _ = print_one_plugin fmt i key in - Format.fprintf fmt "@[%t@]" - (fun fmt -> Hashtbl.iter (print_all fmt 0) functions_tbl) - -(** [print] is the main function of this module. - It takes one argument which is the path and opens the - file path/dynamic_plugins.mli. It fills [functions_tbl], - [comment_tbl] and [type_to_add] - using the functions [fill_tbl] and [add_comment] and then - prints the plugins in the file with [print_plugin] *) -let print path = - try - Dynamic.iter fill_tbl; - Dynamic.iter_comment Comment.add; - let channel = open_out (path ^ "/dynamic_plugins.mli") in - let fmt = Format.formatter_of_out_channel channel in - Format.fprintf fmt - "@[@[(** This@ module@ contains@ all@ the@ dynamically@ \ - registered@ plugins *)@]@ %t@]" - print_plugin; - close_out channel - with Sys_error _ as e -> - Self.error "%s" (Printexc.to_string e) - -(** register [print (path : string)] *) -let print = - Dynamic.register - ~comment: "Create a .mli file used by 'make doc' \ - to generate the html documentation of dynamic plug-ins.\ - It takes the path where to create this file as an argument." - ~plugin:"Print_api" - "run" - (Datatype.func Datatype.string Datatype.unit) - print - -let run () = if not (Enabled.is_default ()) then print (Enabled.get ()) - -let () = Db.Main.extend run diff --git a/src/plugins/print_api/print_interface.mli b/src/plugins/print_api/print_interface.mli deleted file mode 100644 index c91bbaf0c76..00000000000 --- a/src/plugins/print_api/print_interface.mli +++ /dev/null @@ -1,23 +0,0 @@ -(**************************************************************************) -(* *) -(* This file is part of Frama-C. *) -(* *) -(* Copyright (C) 2007-2022 *) -(* 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). *) -(* *) -(**************************************************************************) - -(** Register the plugin in the Frama-C kernel. Nothing is exported. *) -- GitLab