DoCheckIfProjectNeedsCompilation - Illegal character in format string
- Lazarus/FPC Version: Lazarus 2.2.0RC1 rUnversioned directory FPC 3.2.2 x86_64-openbsd-gtk2
- Operating System: OpenBSD
- CPU / Bitness: 64
What happens
When trying to build the project in Lazarus for the second time after making some modifications, it crashes with an EConvertError
.
Illegal character in format string
Stack trace:
$0000093C8F6A88F4
$0000093C8F6A9026
$0000093C8F6A8544
$0000093C8FE876E9 DOCHECKIFPROJECTNEEDSCOMPILATION, line 1389 of buildmanager.pas
$0000093C8F701DBB DOBUILDPROJECT, line 6968 of main.pp
$0000093C8F703584 DOINITPROJECTRUN, line 7284 of main.pp
$0000093C8F70389C DORUNPROJECT, line 7321 of main.pp
$0000093C8F6F8360 MNURUNPROJECTCLICKED, line 4591 of main.pp
$0000093C8FB929B7 DOONCLICK, line 1631 of idecommands.pas
$0000093C8FB929E4 DOONCLICK, line 1636 of idecommands.pas
$0000093C8FBB6150 CLICK, line 647 of toolbarintf.pas
$0000093C8F8457CF MOUSEUP, line 176 of include/toolbutton.inc
$0000093C8F7D9E54 DOMOUSEUP, line 2347 of include/control.inc
$0000093C8F7DABD5 WMLBUTTONUP, line 2829 of include/control.inc
$0000093C8F674336
$0000093C8F7D81D8 PERFORM, line 1617 of include/control.inc
$0000093C8F7CA344 ISCONTROLMOUSEMSG, line 4772 of include/wincontrol.inc
What did you expect
Compilation would happen.
Steps to reproduce
Open a Lazarus project. Build once, then make a modification to the source, and build again.
Notes
This issue seems to be very closely related with what was noted in this forum post: https://forum.lazarus.freepascal.org/index.php?topic=30938.0
Here's a program to view the locale string information:
program asdf;
uses clocale, sysutils;
begin
with formatsettings do begin
writeln('CurrencyFormat', ' ', CurrencyFormat);
writeln('NegCurrFormat', ' ', NegCurrFormat);
writeln('ThousandSeparator', ' ', Ord(ThousandSeparator));
writeln('DecimalSeparator', ' ', Ord(DecimalSeparator));
writeln('CurrencyDecimals', ' ', CurrencyDecimals);
writeln('DateSeparator', ' ', Ord(DateSeparator));
writeln('TimeSeprator', ' ', Ord(TimeSeparator));
writeln('ListSeparator', ' ', Ord(ListSeparator));
writeln('CurrencyString', ' ', CurrencyString);
writeln('ShortDateFormat', ' ', ShortDateFormat);
writeln('LongDateFormat', ' ', LongDateFormat);
writeln('TimeAMString', ' ', TimeAMString);
writeln('TimePMString', ' ', TimePMString);
writeln('ShortTimeFormat', ' ', ShortTimeFormat);
writeln('LongTimeFormat', ' ', LongTimeFormat);
writeln('TwoDigitYearCenturyWindow', ' ', TwoDigitYearCenturyWindow);
end;
end.
and the output:
CurrencyFormat 1
NegCurrFormat 5
ThousandSeparator 0
DecimalSeparator 0
CurrencyDecimals 127
DateSeparator 58
TimeSeprator 58
ListSeparator 44
CurrencyString
ShortDateFormat hh:nn:ss
LongDateFormat hh:nn:ss
TimeAMString PM
TimePMString Sunday
ShortTimeFormat hh:nn:ss ampm
LongTimeFormat AM
TwoDigitYearCenturyWindow 50
and the output of running locale
:
LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_MESSAGES="C"
LC_ALL=