[fpc-devel] build unit dependency list

Mattias Gaertner nc-gaertnma at netcologne.de
Sat Aug 5 10:23:48 CEST 2006


On Fri, 4 Aug 2006 09:53:00 -0300
"Mario R. Carro" <mcarro at gmx.net> wrote:

> Hi, I have a few hand made makefiles for some (up to now) Delphi projects that 
> I use to build the releases. I would want to be able to automagically 
> generate the dependencies for the units in the projects. 
> 
> I found that Lazarus has a dependencies view window. So after some browsing I 
> wrote the following minimal test program:
> 
> program getpdeps;
> {$mode objfpc}{$H+}
> uses
>   Classes,
>   CodeCache,
>   CodeToolManager;
> var
>   IntfFiles, ImplFiles: TStrings;
>   Cache: TCodeCache;
>   Buffer: TCodeBuffer;
> begin
>   Cache := TCodeCache.Create;
>   IntfFiles := TStringList.Create;
>   ImplFiles := TStringList.Create;
>   try
>     Buffer := Cache.LoadFile(ParamStr(1));
>     CodeToolBoss.ActivateWriteLock;
>     try
>       CodeToolBoss.FindUsedUnitFiles(Buffer, IntfFiles, ImplFiles);
>       WriteLn('intf=' + IntfFiles.CommaText);
>       WriteLn('impl=' + ImplFiles.CommaText);
>     finally
>       CodeToolBoss.DeactivateWriteLock;
>       Buffer.Free;
>     end;
>   finally
>     Cache.Free;
>     IntfFiles.Free;
>     ImplFiles.Free;
>   end;
> end.
> 
> It does what I need but it fails because it couldn't find some units. How do I 
> tell CodeToolBoss where to find them?

See the codetools example finddeclaration.lpi.

BTW:
CodeToolBos already creates a code cache and many functions expect, that you only use that one.
To load a file, use Buffer:=CodeToolBoss.LoadFile.
And the ActivateWriteLock is only needed, when doing multiple searches.


Mattias



More information about the fpc-devel mailing list