[Lazarus] Is win32 svn broken?
Gregory M. Turner
gmt at malth.us
Thu Oct 13 15:32:12 CEST 2011
----- Original Message -----
> 13.10.2011 11:06, Juha Manninen пишет:
> > Hi
> >
> > Please test with r32866.
> > You must do "make clean all" first and then build from the "Build
>
> Already tested. Still broken.
I have a bit more info on this.
In some sense, the problem seems to come down to line 14 of ide/Makefile.fpc:
[target]
programs=lazarus startlazarus lazbuild
Lazarus IDE wants to "make -C ide all" while (effectively) OPT='... -olazarus.new.exe' due to it being in idemake.cfg which is, I believe, going to be applied to all fpc invocations which GNU make uses to solve for "lazarus.exe startlazarus.exe lazbuild.exe". As a test of this hypothesis, build+clean and let it fail. Now apply this patch:
Index: buildlazdialog.pas
===================================================================
--- buildlazdialog.pas (revision 32869)
+++ buildlazdialog.pas (working copy)
@@ -262,7 +262,7 @@
Tool.Title:=lisIDE;
Tool.WorkingDirectory:=WorkingDirectory;
case Options.IdeBuildMode of
- bmBuild: Tool.CmdLineParams:='all';
+ bmBuild: Tool.CmdLineParams:='ide';
bmCleanBuild: Tool.CmdLineParams:='clean all';
end;
// append extra options
--
Next replace lazarus.exe with the old working version and go into build+clean options and turn off the "clean" radio button and checkbox. Save that and build the ide. (Voila, it works!)
So, assuming I'm right about this, one reasonable solution is:
1) stop -olazarus.new.exe from going into idemake.cfg; instead of that...
2) create somewhere in the jumble of pass-by-reference ide-build info variables to remember that the ide target was locked
3) separate out the make invocations for each of lazarus($ext), startlazarus($ext) and lazbuild($ext). Everything is all set up in "Tool" above -- most of that can be recycled so this is not so horrible as it sounds perhaps.
4) append -olazarus.new.exe to the OPT= clause of just lazarus($ext), and only when the locked flag got set
Arguably a better solution would be to just decide if the IDE is locked, and if so, export an environment variable to make. Then hack up ide/Makefile.fpc to contain some target-specific magical thingy which adds -olazarus.new($ext) only to the lazarus.exe($ext) target and only if that variable is set. However Makefile.fpc had might as well be sendmail.cf to me -- such techniques are too advanced for my weak Makefile-foo.
I'd be happy to hack up an attempt at the 1-4 approach if some more knowledgeable person can confirm that this seems correct, I think I have a pretty good idea of where all the code goes.
-gmt
More information about the Lazarus
mailing list