On Sat, 29 Oct 2011 22:25:22 +0200
cobines <[email protected]> wrote:

> 2011/10/29 Mattias Gaertner <[email protected]>:
> > On Sat, 29 Oct 2011 21:09:50 +0200
> > cobines <[email protected]> wrote:
> >
> >> Shouldn't the package files be rebuilt automatically?
> >
> > Yes. They are. The IDE even add the -B option if needed.
> > But there are some corner cases.
> >
> ....
> >
> > It does work in normal cases.
> 
> When package is built even manually, from the IDE or using lazbuild
> not all files are rebuilt.

Yes, and there are cases where rebuilding is not enough. For example
when a file was moved one package up, then you must delete ppu files.
Because fpc never does that, rebuilding is not always sufficient, even
with -B.


> I think it is FPC issue because it doesn't
> always work with 2.4.4 but it does with 2.5.1 and 2.7.1.
> 
> I'll put things into example.
> 
> I have virtualtreeview installed. In the package there is
> VTHeaderPopup that uses VirtualTrees and VirtualTrees that uses
> Controls (from LCL). I introduce a new function:
> 
> function TControl.AutoSizeSomething: Boolean; virtual;
> begin
>   Result := True;
> end;
> 
> I change TControl.AutoSizeDelayedHandle:
> 
> begin
> -  Result := (Parent = nil);
> +  Result := (Parent = nil) and AutoSizeSomething;
> end;
> 
> so that the function is used somewhere.
> 
> I clean virtualtreeview manually, open the .lpk press compile. The
> VTHeaderPopup.o contains ...AUTOSIZESOMETHING symbol.
> 
> I rename AutoSizeSomething -> AutoSizeNothing.
> 
> I open the virtualtreeview.lpk and press Compile. It rebuilds LCLBase,
> LCL and virtualtreeview. The VirtualTrees unit is rebuilt and now
> contains AUTOSIZENOTHING but the VTHeaderPopup unit is not rebuilt, it
> still contains AUTOSIZESOMETHING, so linking IDE would fail because
> cannot find the symbol.

Yes, that is a fpc bug. A few such cases were fixed in fpc, but afaik
there are still a few cases.
Of course the IDE can not detect such a thing neither, unless it
reimplements a whole ppu check like the compiler. Makes no sense.


> If from the package editor I choose
> "More/Recompile all required" then VTHeaderPopup is rebuilt (maybe
> adds -B?).

Yes.

 
> But like I said the problem seems to be gone starting with FPC 2.5.1,
> so as long as files are added to .lpk they should be rebuilt. The
> reason for cleaning might be when source files are not in .lpk or have
> been deleted but the *.ppu and *.o still exist.

Afaik this is only the symptom. The real problem is the algorithm
checking the dependency of the checksums in ppu files.


Mattias

--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to