[modules] autoload modules from an other module

This commit is contained in:
Gautier Hattenberger
2016-06-15 18:22:23 +02:00
parent 5b78d9a7f2
commit 5b44eb8d2f
2 changed files with 18 additions and 4 deletions
+6 -1
View File
@@ -1,11 +1,12 @@
<!-- Paparazzi Modules DTD --> <!-- Paparazzi Modules DTD -->
<!ELEMENT module (doc,settings_file*,settings*,depends?,conflicts?,header,init*,periodic*,event*,datalink*,makefile*)> <!ELEMENT module (doc,settings_file*,settings*,depends?,conflicts?,autoload*,header,init*,periodic*,event*,datalink*,makefile*)>
<!ELEMENT doc (description,(define|configure|section)*)> <!ELEMENT doc (description,(define|configure|section)*)>
<!ELEMENT settings_file (file*)> <!ELEMENT settings_file (file*)>
<!ELEMENT settings (dl_settings?)> <!ELEMENT settings (dl_settings?)>
<!ELEMENT depends (#PCDATA)> <!ELEMENT depends (#PCDATA)>
<!ELEMENT conflicts (#PCDATA)> <!ELEMENT conflicts (#PCDATA)>
<!ELEMENT autoload EMPTY>
<!ELEMENT header (file*)> <!ELEMENT header (file*)>
<!ELEMENT init EMPTY> <!ELEMENT init EMPTY>
<!ELEMENT periodic EMPTY> <!ELEMENT periodic EMPTY>
@@ -31,6 +32,10 @@
name CDATA #REQUIRED name CDATA #REQUIRED
dir CDATA #IMPLIED> dir CDATA #IMPLIED>
<!ATTLIST autoload
name CDATA #REQUIRED
type CDATA #IMPLIED>
<!ATTLIST header> <!ATTLIST header>
<!ATTLIST init <!ATTLIST init
+12 -3
View File
@@ -128,7 +128,7 @@ let module_name = fun xml ->
exception Subsystem of string exception Subsystem of string
let get_module = fun m global_targets -> let get_module = fun m global_targets ->
match Xml.tag m with match Xml.tag m with
| "module" -> | "module" | "autoload" ->
let name = module_name m in let name = module_name m in
let filename = let filename =
let modtype = ExtXml.attrib_or_default m "type" "" in let modtype = ExtXml.attrib_or_default m "type" "" in
@@ -158,7 +158,15 @@ let get_module = fun m global_targets ->
let targets = Or (extra_targets, targets) in let targets = Or (extra_targets, targets) in
{ name = name; xml = xml; file = file; filename = filename; vpath = vpath; { name = name; xml = xml; file = file; filename = filename; vpath = vpath;
param = Xml.children m; targets = targets } param = Xml.children m; targets = targets }
| _ -> Xml2h.xml_error "module or load" | _ -> Xml2h.xml_error "module, autoload or load"
(** [get_autoloaded_modules module]
* Return a list of modules to be automaticaly added *)
let get_autoloaded_modules = fun m ->
let m = get_module m (Var "") in
List.fold_left (fun l t ->
if ExtXml.tag_is t "autoload" then (get_module t (Var "") :: l) else l
) [] (Xml.children m.xml)
(** [test_targets target targets] (** [test_targets target targets]
* Test if [target] is allowed [targets] * Test if [target] is allowed [targets]
@@ -195,9 +203,10 @@ let rec get_modules_of_airframe = fun ?target xml ->
| Xml.Element (tag, _attrs, children) when is_module tag -> | Xml.Element (tag, _attrs, children) when is_module tag ->
begin try begin try
let m = get_module xml targets in let m = get_module xml targets in
let al = get_autoloaded_modules xml in
List.fold_left List.fold_left
(fun acc xml -> iter_modules targets acc xml) (fun acc xml -> iter_modules targets acc xml)
(m :: modules) children (m :: (al @ modules)) children
with Subsystem file -> with Subsystem file ->
if subsystem_fallback then modules if subsystem_fallback then modules
else failwith ("Unkown module " ^ file) else failwith ("Unkown module " ^ file)