[fpc-pascal] A patched unit overriding the default - like Delphi supports

Marco van de Voort marcov at stack.nl
Thu Jun 17 11:44:01 CEST 2010


In our previous episode, Mattias Gaertner said:
> > > If your project then included a new *.pas files with earlier unit search
> > > path pointing to that new *.pas, it would recompile it and its *.dcu will
> > > be generated inside your project's output path, thus used instead of the
> > > original one in the Delphi7\Projects\Bpl path.
> > 
> > Were it third party or components that come with Delphi that you replaced?
> 
> If only the unit implementation changes, and you don't use inlines and
> you compile the unit with the same compiler flags, can this ppu be used
> instead of the original?

I don't know if and how exactly this works. 

Anyway, I'll just list some points that  I know about the subject, maybe one
of the other devels will correct any mistakes and/or enhance stuff.

* recompiling is done based on source timestamps and for .ppu's matching
    CRCs of the interface section.
* one ppu/dcu is not the other due to the recompile behaviour modification  
   settings (-Ur see below), which can force "never recompile this .ppu" 
   automatically.
* Contrary to Delphi, FPC also recompiles when it detected modified .incs
* the makefile parameter RELEASE=1 afaik also enabled -Ur and this is done
   for releases. So behaviour may differ between snapshot and release.
   God knows what 3rd party builders and the various *nix packagers do.
 
The recompilation behaviour is determined:

* -Ur (FPC)
* {$implicitbuild on/off}  which is think is a .dpk only directive
* -Z   "enable never build" dcc32 cmdline opt.

which all do the same thing, they allow to set a "don't recompile on source
changes" flag to be set in the .ppu/dcu.

However it is not a matter of simply adding a feature here. Recompilation
behaviour is a double edged sword:

- disable automatic recompilation (e.g. -Ur everywhere), and 
   advanced users can not do this kind of tricks
- enable it, and all newbies "can't find unit system"
- then there is the matter of the .inc recompilation. FPC source a lot of
  .incs and all the names of these .inc files would be "forbidden" for users 
   if the FPC distro was not compiled with -Ur.

Personally I don't like such schemes (also on Delphi) because while
disciplined users can/may be able to make them work if they are very
careful, it is totally unsupportable for general consumption. 

And, as said, there are (support) consequences to disabling -Ur.




More information about the fpc-pascal mailing list