diff --git a/ptests/ptests.ml b/ptests/ptests.ml index c1aed8cf914d023c58553ce0eb5bd7f81fed8425..31a83aa126504a85e11156dfbbf800ec87dc24d2 100644 --- a/ptests/ptests.ml +++ b/ptests/ptests.ml @@ -298,7 +298,8 @@ let example_msg = EXECNOW: ([LOG|BIN] <file>)+ <command> @[<v 0># Defines the command to execute to build a 'LOG' (textual) 'BIN' (binary) targets.@ \ # Note: the textual targets are compared to oracles.@]@ \ MODULE: <module>... @[<v 0># Compile the module and set the @PTEST_MODULE@ macro@]@ \ - PLUGIN: <plugin>... @[<v 0># Set the @PTEST_PLUGIN@ macro.@]@ \ + LIBS: <module>... @[<v 0># Don't compile the module but set the @PTEST_LIBS@ macro@]@ \ + PLUGIN: <plugin>... @[<v 0># Set the @PTEST_PLUGIN@ macro.@]@ \ LOG: <file>... @[<v 0># Defines targets built by the next sub-test command.@]@ \ CMD: <command> @[<v 0># Defines the command to execute for all tests in order to get results to be compared to oracles.@]@ \ OPT: <options> @[<v 0># Defines a sub-test using the 'CMD' definition: <command> <options>@]@ \ @@ -332,14 +333,16 @@ let example_msg = @@PTEST_CONFIG@@ # Test configuration suffix.@ \ @@PTEST_RESULT@@ # Shorthand alias to '@@PTEST_DIR@@/result@@PTEST_CONFIG@@' (the result directory dedicated to the tested configuration).@ \ @@PTEST_ORACLE@@ # Basename of the current oracle file (macro only usable in FILTER directives).@ \ + @@PTEST_LIBS@@ # Current list of module defined by the LIBS directive.@ \ @@PTEST_MODULE@@ # Current list of module defined by the MODULE directive.@ \ @@PTEST_PLUGIN@@ # Current list of plugins defined by the PLUGIN directive.@ \ @]@ \ Other macros can only be used in test commands (CMD and EXECNOW directives):@ \ @@PTEST_DEFAULT_OPTIONS@@ # The default option list: %s@ \ + @@PTEST_LOAD_LIBS@@ # The '-load-module' option related to the LIBS directive.@ \ @@PTEST_LOAD_MODULE@@ # The '-load-module' option related to the MODULE directive.@ \ @@PTEST_LOAD_PLUGIN@@ # The '-load-module' option related to the PLUGIN directive.@ \ - @@PTEST_LOAD_OPTIONS@@ # Shorthand alias to '@@PTEST_LOAD_PLUGIN@@ @@PTEST_LOAD_MODULE@@' .@ \ + @@PTEST_LOAD_OPTIONS@@ # Shorthand alias to '@@PTEST_LOAD_PLUGIN@@ @@PTEST_LOAD_LIBS@@ @@PTEST_LOAD_MODULE@@' .@ \ @@PTEST_OPTIONS@@ # The current list of options related to OPT and STDOPT directives (for CMD directives).@ \ @@frama-c@@ # Shortcut defined as follow: %s@ \ @@frama-c-cmd@@ # Shortcut defined as follow: %s@ \ @@ -735,6 +738,7 @@ type config = dc_execnow : execnow list; (** command to be launched before the toplevel(s) *) + dc_load_libs: string; (** load libs options. *) dc_load_module: string; (** load module options. *) dc_cmxs_module: StringSet.t; (** compiled modules. *) dc_macros: Macros.t; (** existing macros. *) @@ -797,6 +801,7 @@ end = struct "PTEST_PRE_OPTIONS", !macro_pre_options; "PTEST_POST_OPTIONS", !macro_post_options; "PTEST_MAKE_MODULE", "make -s"; + "PTEST_LIBS", ""; "PTEST_MODULE", ""; "PTEST_PLUGIN", ""; ] @@ -813,6 +818,7 @@ end = struct dc_commands = [ { toplevel= !default_toplevel; opts=""; macros=Macros.empty; exit_code=None; logs= []; timeout= ""} ]; dc_dont_run = false; dc_load_module = ""; + dc_load_libs = ""; dc_cmxs_module = StringSet.empty; dc_framac = true; dc_default_log = []; @@ -935,12 +941,12 @@ end = struct current end - let update_module s = + let update_module_libs s = "@PTEST_DIR@/" ^ (Filename.remove_extension s) ^ (if !use_byte then ".cmo" else ".cmxs") let add_make_modules ~file dir deps current = let deps,current = List.fold_left (fun ((deps,curr) as acc) s -> - let s = update_module s in + let s = update_module_libs s in if StringSet.mem s curr.dc_cmxs_module then acc else (deps ^ " " ^ s), @@ -953,20 +959,31 @@ end = struct config_exec ~warn:false ~once:true ~file dir (make_cmd ^ deps) current end - let update_module_macros modules macros = + let update_module_libs_macros pdef pload_def modules macros = let def = String.concat "," modules in let load_def = if String.(def = "") then "" else - "-load-module=" ^ (String.concat "," (List.map update_module modules)) + "-load-module=" ^ (String.concat "," (List.map update_module_libs modules)) in - Macros.add_list [ "PTEST_MODULE", def ; - "PTEST_LOAD_MODULE", load_def ; + Macros.add_list [ pdef, def ; + pload_def, load_def ; ] macros + let update_module_macros = + update_module_libs_macros "PTEST_MODULE" "PTEST_LOAD_MODULE" + + let update_libs_macros = + update_module_libs_macros "PTEST_LIBS" "PTEST_LOAD_LIBS" + let config_module ~file dir s current = let deps = str_split_list (Macros.expand current.dc_macros s) in let current = { current with dc_macros = update_module_macros deps current.dc_macros } in add_make_modules ~file dir deps current + let config_libs ~file dir s current = + let deps = str_split_list (Macros.expand current.dc_macros s) in + let current = { current with dc_macros = update_libs_macros deps current.dc_macros } in + current + let update_plugin_macros plugins macros = let def = String.concat "," plugins in let load_def = if String.(def = "") then "" else @@ -1056,6 +1073,8 @@ end = struct "MODULE", config_module; + "LIBS", config_libs; + "PLUGIN", config_plugins; "LOG", @@ -1300,6 +1319,7 @@ end = struct let ptest_file = Filename.sanitize ptest_file in let ptest_load_plugin = Macros.get "PTEST_LOAD_PLUGIN" cmd.macros in let ptest_load_module = Macros.get "PTEST_LOAD_MODULE" cmd.macros in + let ptest_load_libs = Macros.get "PTEST_LOAD_LIBS" cmd.macros in let macros = [ "PTEST_CONFIG", ptest_config; "PTEST_DIR", SubDir.get cmd.directory; @@ -1311,6 +1331,7 @@ end = struct "PTEST_OPT", cmd.options; "PTEST_LOAD_OPTIONS", (String.concat " " [ ptest_load_plugin ; + ptest_load_libs ; ptest_load_module ]) ] in diff --git a/src/plugins/wp/tests/wp_acsl/unsupported_builtin.i b/src/plugins/wp/tests/wp_acsl/unsupported_builtin.i index a91a3fbef4b34b38d8e5fec4f651c709801f4bf6..2c1a092d5a5046bb4cb1f64c8855c667c27d5a97 100644 --- a/src/plugins/wp/tests/wp_acsl/unsupported_builtin.i +++ b/src/plugins/wp/tests/wp_acsl/unsupported_builtin.i @@ -1,4 +1,5 @@ /* run.config + OPT: -load-module @PTEST_DIR@/@PTEST_NAME@.ml */ /* run.config_qualif