diff --git a/Makefile.ac b/Makefile.ac index 346bbe4163..82e9328f94 100644 --- a/Makefile.ac +++ b/Makefile.ac @@ -151,9 +151,9 @@ print_version: @echo "Paparazzi version" $(GIT_DESC)$(VERSION_MATCH) @echo "-----------------------------------------------------------------------" -all_ac_h: $(SRCS_LIST) qt_project autopilot_h +all_ac_h: $(SRCS_LIST) qt_project -$(SRCS_LIST) : $(CONF_XML) $(AIRFRAME_H) $(MODULES_H) $(SETTINGS_H) $(MAKEFILE_AC) $(PERIODIC_H) +$(SRCS_LIST) : $(CONF_XML) $(AIRFRAME_H) $(MODULES_H) autopilot_h $(SETTINGS_H) $(MAKEFILE_AC) $(PERIODIC_H) @echo "TARGET: " $(TARGET) > $(SRCS_LIST) @echo "CFLAGS: " $(CFLAGS) >> $(SRCS_LIST) @echo "LDFLAGS: " $($(TARGET).LDFLAGS) >> $(SRCS_LIST) @@ -219,11 +219,12 @@ $(FLIGHT_PLAN_XML) : $(CONF)/$(FLIGHT_PLAN) $(CONF_XML) $(GENERATORS)/gen_flight $(Q)mv $($@_TMP) $@ $(Q)chmod a+r $@ -$(SETTINGS_H) : $(SETTINGS_XMLS_DEP) $(CONF_XML) $(SETTINGS_MODULES) $(SETTINGS_TELEMETRY) $(GENERATORS)/gen_settings.out +# split system settings (generated) from user settings with a '--' +$(SETTINGS_H) : $(SETTINGS_XMLS_DEP) $(CONF_XML) $(SETTINGS_MODULES) $(SETTINGS_TELEMETRY) $(GENERATORS)/gen_settings.out autopilot_h $(Q)test -d $(AC_GENERATED) || mkdir -p $(AC_GENERATED) @echo GENERATE $@ $(eval $@_TMP := $(shell $(MKTEMP))) - $(Q)$(GENERATORS)/gen_settings.out $(SETTINGS_XML) $(SETTINGS_TELEMETRY) $(SETTINGS_XMLS) $(SETTINGS_FLIGHTPLAN) $(SETTINGS_MODULES) > $($@_TMP) + $(Q)$(GENERATORS)/gen_settings.out $(SETTINGS_XML) $(SETTINGS_AUTOPILOT) $(SETTINGS_TELEMETRY) $(SETTINGS_FLIGHTPLAN) $(SETTINGS_MODULES) -- $(SETTINGS_XMLS) > $($@_TMP) $(Q)mv $($@_TMP) $@ $(Q)chmod a+r $@ $(Q)cp $(SETTINGS_XMLS_DEP) $(AIRCRAFT_CONF_DIR)/settings diff --git a/sw/tools/generators/gen_settings.ml b/sw/tools/generators/gen_settings.ml index a4fa420295..3579ee46a1 100644 --- a/sw/tools/generators/gen_settings.ml +++ b/sw/tools/generators/gen_settings.ml @@ -288,7 +288,7 @@ let supports_target = fun t targets -> else Str.string_match (Str.regexp (".*"^t^".*")) targets 0 -let join_xml_files = fun xml_files -> +let join_xml_files = fun xml_sys_files xml_user_files -> let dl_settings = ref [] and rc_settings = ref [] in let target = try Sys.getenv "TARGET" with _ -> "" in @@ -348,7 +348,18 @@ let join_xml_files = fun xml_files -> | Not_found -> [] in rc_settings := these_rc_settings @ !rc_settings; dl_settings := these_dl_settings @ !dl_settings) - xml_files; + xml_user_files; + + (* add system settings grouped under the same tab *) + let dl_sys = List.map (fun xml_file -> + let xml = ExtXml.parse_file xml_file in + (* take "second stage" dl_settings nodes *) + let dl = ExtXml.child xml "dl_settings" in + Xml.children dl + ) xml_sys_files in + dl_settings := Xml.Element("dl_settings", [("name", "System")], List.rev (List.flatten dl_sys)) :: !dl_settings; + + (* return final node *) Xml.Element("rc_settings",[],!rc_settings), Xml.Element("dl_settings",[],!dl_settings) @@ -357,13 +368,16 @@ let _ = if Array.length Sys.argv < 4 then failwith (Printf.sprintf "Usage: %s output_xml_file input_xml_file(s) input_xml_modules" Sys.argv.(0)); let h_name = "SETTINGS_H" - and xml_files = ref [] in - for i = 2 to Array.length Sys.argv - 1 do - xml_files := Sys.argv.(i) :: !xml_files; - done; + and xml_files = Array.to_list (Array.sub Sys.argv 2 (Array.length Sys.argv - 2)) in + (* split system settings and user settings based on '*' separator *) + let xml_sys_files, xml_user_files, _ = List.fold_left (fun (sys, user, delim) x -> + if x = "--" then (sys, user, true) + else if delim then (sys, x :: user, delim) + else (x :: sys, user, delim)) ([], [], false) xml_files + in try - printf "/* This file has been generated by gen_settings from %s */\n" (String.concat " " !xml_files); + printf "/* This file has been generated by gen_settings from %s */\n" (String.concat " " xml_files); printf "/* Version %s */\n" (Env.get_paparazzi_version ()); printf "/* Please DO NOT EDIT */\n\n"; @@ -371,7 +385,7 @@ let _ = define h_name ""; nl (); - let rc_settings, dl_settings = join_xml_files !xml_files in + let rc_settings, dl_settings = join_xml_files xml_sys_files xml_user_files in let xml = Xml.Element ("settings", [], [rc_settings; dl_settings]) in let f = open_out Sys.argv.(1) in