From e6f856e795e4c1ebae56eb37d0236ea07afba673 Mon Sep 17 00:00:00 2001 From: dtrg Date: Sun, 30 Jul 2006 23:33:31 +0000 Subject: [PATCH] Updated to the latest version of pm. --- first/c.pm | 98 ++++++++++++++++++++++++++++++++++++----------------- pm | Bin 83018 -> 83170 bytes 2 files changed, 66 insertions(+), 32 deletions(-) diff --git a/first/c.pm b/first/c.pm index 65284c0d9..59c0bb0b8 100644 --- a/first/c.pm +++ b/first/c.pm @@ -5,6 +5,7 @@ local io_open = io.open local string_gsub = string.gsub local string_gfind = string.gfind +local string_find = string.find local table_insert = table.insert local table_getn = table.getn local filetime = pm.filetime @@ -14,7 +15,6 @@ local filetime = pm.filetime CCOMPILER = "gcc" CC = "%CCOMPILER% %CBUILDFLAGS% %CDYNINCLUDES% %CINCLUDES% %CDEFINES% %CEXTRAFLAGS% -c -o %out% %in%" CPROGRAM = "%CCOMPILER% %CBUILDFLAGS% %CLINKFLAGS% %CEXTRAFLAGS% -o %out% %in% %CLIBRARIES%" -CDEPENDS = "%CCOMPILER% %CBUILDFLAGS% %CDYNINCLUDES% %CINCLUDES% %CDEFINES% %CEXTRAFLAGS% -MM -MG %in% > %out%" AR = "%RM% %out% && ar cr %out% %in% && ranlib %out%" CBUILDFLAGS = {"-g"} @@ -28,37 +28,61 @@ CLIBRARIES = EMPTY --- Manage C file dependencies ---------------------------------------------- local dependency_cache = {} -local function load_dependency_file(fn) - local o = dependency_cache[fn] +local function calculate_dependencies(filename, includes) + -- Cache values, so we don't recalculate dependencies needlessly. + + local o = dependency_cache[filename] if o then return o end - -- Read in the dependency file. + local deps = {} + deps[filename] = true - local f = io_open(fn) - if not f then - print("failed to open "..fn) - return nil + local calcdeps = 0 + calcdeps = function(filename, file) + file = file or io.open(filename) + if not file then + return + end + + local localincludes = string_gsub(filename, "/[^/]*$", "") + if localincludes then + localincludes = {localincludes, unpack(includes)} + else + localincludes = includes + end + + for line in file:lines() do + local _, _, f = string_find(line, '^[ \t]*#[ \t]*include[ \t]*["<]([^"]+)[">]') + if f then + for _, path in ipairs(localincludes) do + local subfilename = path.."/"..f + local subfile = io.open(subfilename) + if subfile then + if not deps[subfilename] then + deps[subfilename] = true + calcdeps(subfilename, subfile) + end + break + end + end + end + end + + -- Explicit close to avoid having to wait for the garbage collector + -- to free up the underlying fd. + + file:close() end - f = f:read("*a") - - -- Massage the dependency file into a string containing one unescaped - -- filename per line. - - f = string_gsub(f, "^.*[^\\]: *", "") - f = string_gsub(f, "\\\r?\n", "") - f = string_gsub(f, "([^\\]) +", "%1\n") - f = string_gsub(f, "\\", "") - - -- Parse the string. + calcdeps(filename) o = {} - for l in string_gfind(f, "[^\n]+") do - table_insert(o, l) + for i, _ in pairs(deps) do + table_insert(o, i) end - - dependency_cache[fn] = o + + dependency_cache[filename] = o return o end @@ -91,19 +115,29 @@ simple_with_clike_dependencies = simple { end end, - __dependencies = function(self, inputs, outputs) - local obj = simple { - CDYNINCLUDES = self.CDYNINCLUDES, - command = self.makedepends, - outputs = {"%U%-%I%.d"}, - unpack(inputs) - } - local o = obj:__build() - local depends = load_dependency_file(o[1]) + __dependencies = function(self, inputs, outputs) + local cincludes = self.CINCLUDES + if (type(cincludes) == "string") then + cincludes = {cincludes} + end + + local includes = {} + for _, i in ipairs(cincludes) do + local _, _, p = string_find(i, "^-I[ \t]*(.+)$") + if p then + table_insert(includes, p) + end + end + + local depends = calculate_dependencies(inputs[1], includes) if not depends then self:__error("could not determine the dependencies for ", pm.rendertable(inputs)) end + if pm.verbose then + pm.message('"', inputs[1], '" appears to depend on ', + pm.rendertable(depends)) + end return depends end, diff --git a/pm b/pm index a0c183bf3e87eb804a1117cbcb04d66645be553a..bd58427ccee0ae960593d0739ab0a246a231f212 100755 GIT binary patch delta 10778 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 YSXfw7lglj{1M)-7gXk@{=q&+a7OL~PPyhe` delta 10617 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 TTP`943$n+9fG)RyE&*Z|W`#!f -- 2.34.1