On Wed, Apr 05, 2006 at 01:27:04PM +0200, Jonas Maebe wrote: > > On 5 apr 2006, at 13:22, Tom Verhoeff wrote: > > >In a programming course that I teach, some students are using > >Lazarus+FPC > >instead of Delphi. I made available two precompiled units, that > >is, the > >*.ppu and *.o files. However, when the students tried to compile > >their > >programs using these units, the compiler complained that it could not > >find the *.pas files. When compiling with -va (verbose all), it > >became > >apparent that the compiler disliked something about the *.ppu files. > >(Sorry, I didn't get the exact message from the students.) > > Without the exact message it's hard to tell.
Here are the relevant lines from -vaa (but -vu would have provided that as well): Unitsearch: Fig0.ppu Searching file Fig0.ppu... found PPU Loading Fig0.ppu (FIG0) PPU Name: Fig0.ppu (FIG0) PPU Source: Fig0.pas not found (FIG0) Recompiling Fig0, checksum changed for System The target OS is correct (I have made that mistake before, and the resulting error message is clear). The message "checksum changed for System" is not so clear. Now that I think of it (especially with System capitalized), it seems to imply that the compiled unit (Fig0.ppu) depends on the unit System, and when the unit System accessible by the compiler when finding Fig0.ppu differs from the checksum of the unit System used to compile Fig0.ppu, it triggers an automatic recompile of the unit begin loaded. It would certainly have helped me if the word "unit" was prepended to "System". Furthermore, the checksum did not "change" (there are two separate contexts; neither of which changed), but it differs from the one used to compile the unit being loaded. Thus, a better message might be: "checksum of current unit System differs from the one used to compile unit Fig0.ppu", or "unit Fig0.ppu was compiled with an incompatible System unit". > >Can someone explain to me under what circumstances FPC will > >(attempt to) > >recompile a unit for which *.ppu and *.o are already available? > >I couldn't find this in the documentation. Apparently, there is a dependency on the System unit, and incompatibility between System units can cause a recompile. Any other such dependencies? Is every separately compiled unit dependent on System? If not, under what circumstances will it depend on System? And on what other units? > There are lots of possible reasons. The main ones are > > 1) sources with the same name as those used in a unit are found, and > they are more recent than the ppu files This was not the case. > 2) incompatible ppu files because the internal structure changed and > the internal version number was increased Also this was not the case (the message would have been clearer). > Cause 1) can be solved by compiling using the -Ur switch. Good point. I will certainly do that in the future. > >Versions: I used FPC 2.0.1 to compile the units; the students > >used FPC 2.0.2 to compiler their programs. > > It's quite possible that your 2.0.1 uses a different ppu format than > the 2.0.2 release. That sounds rather vague. From my analysis above, it seems that updating your System unit will invalidate all (?) precompiled units (at least the ones that somehow "depend" on it). Or am I missing something here? Well, I did learn something. I hope it was useful for others as well. Thanks, Tom -- E-MAIL: T.Verhoeff @ TUE.NL | Fac. of Math. & Computing Science PHONE: +31 40 247 41 25 | Eindhoven University of Technology FAX: +31 40 247 54 04 | PO Box 513, NL-5600 MB Eindhoven http://www.win.tue.nl/~wstomv/ | The Netherlands _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal