module ('general-c-rules', package.seeall) require "general-rules" local function scan_header_file (p_file, p_local, p_finished) local lst = dmt.scan_file (p_file, "#include\\s*<([\\/\\w\\.]+)>|#include\\s*\\\"([\\/\\w\\.]+)\\\"") for _, itm in ipairs (lst) do if p_finished[itm[1]] == nil then p_finished[itm[1]] = true dmt.depends (p_local, itm[1]) glb = dmt.resolve_file_name (itm[1]) if dmt.file_name_exists (glb) then scan_header_file (glb, itm[1], p_finished) end end end end local function c_header_scan () local fin = {} return function (p_file_node, p_environement) if p_file_node:exists () then scan_header_file (dmt.resolve_file_name (p_file_node:local_name ()), p_file_node:local_name (), fin) end end end local function define_rules () dmt.register_node ("shared-object", "c-shared-compile", "c-source") dmt.register_node ("static-object", "c-static-compile", "c-source") dmt.register_node ("depends", "mark-target-files", "c-header") dmt.associate_suffix ("c-header", "h;hpp;hxx;h++"); dmt.associate_suffix ("c-source", "c") dmt.associate_scanner ("c-source", c_header_scan ()); end define_rules ()