From: <ah...@us...> - 2006-06-27 15:07:49
|
Revision: 10751 Author: ahuser Date: 2006-06-27 08:07:40 -0700 (Tue, 27 Jun 2006) ViewCVS: http://svn.sourceforge.net/jvcl/?rev=10751&view=rev Log Message: ----------- Dependency check bugfix Modified Paths: -------------- trunk/jvcl/install/JVCLInstall/Compile.pas Modified: trunk/jvcl/install/JVCLInstall/Compile.pas =================================================================== --- trunk/jvcl/install/JVCLInstall/Compile.pas 2006-06-27 13:54:00 UTC (rev 10750) +++ trunk/jvcl/install/JVCLInstall/Compile.pas 2006-06-27 15:07:40 UTC (rev 10751) @@ -930,7 +930,7 @@ var Files: TStrings; i: Integer; - DcpAge, FormAge, PasAge, DcuAge: Integer; + DcpAge, FormAge, PasAge, DcuAge, BplAge: Integer; PrjFilename: string; Filename: string; Changed: Boolean; @@ -941,11 +941,15 @@ Result := 0; PrjFilename := Project.SourceDir + PathDelim + ExtractFileName(Project.SourceName); DcpAge := FileAge(OutDirs.DcpDir + PathDelim + Project.DcpName); + BplAge := FileAge(OutDirs.BplDir + PathDelim + Project.TargetName); // .dpk/.bpk Changed := not TargetConfig.AutoDependencies or (DcpAge < FileAge(PrjFilename)) or - (DcpAge < FileAge(ChangeFileExt(PrjFilename, '.res'))); + (DcpAge < FileAge(ChangeFileExt(PrjFilename, '.res'))) or + (DcpAge > BplAge); // this happens if the .dcp is not for the .bpl + if DcpAge > BplAge then + DcpAge := BplAge; // compile units that are newer than the bpl if the bpl is older than the dcp if not Changed then begin for i := 0 to High(CommonDependencyFiles) do @@ -975,7 +979,7 @@ end; if not Changed then begin - // required JVCL package + // required JCL package for i := 0 to Project.JclDependencies.Count - 1 do begin if IsPackageUsed(Project.Owner, Project.JclDependenciesReqPkg[i]) then This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-08-23 11:46:03
|
Revision: 10910 Author: obones Date: 2006-08-23 04:45:55 -0700 (Wed, 23 Aug 2006) ViewCVS: http://svn.sourceforge.net/jvcl/?rev=10910&view=rev Log Message: ----------- When moving or inserting, the index must incremented not decremented Modified Paths: -------------- trunk/jvcl/install/JVCLInstall/Compile.pas Modified: trunk/jvcl/install/JVCLInstall/Compile.pas =================================================================== --- trunk/jvcl/install/JVCLInstall/Compile.pas 2006-08-23 07:34:47 UTC (rev 10909) +++ trunk/jvcl/install/JVCLInstall/Compile.pas 2006-08-23 11:45:55 UTC (rev 10910) @@ -1434,16 +1434,16 @@ if DepProject <> nil then begin Idx := List.IndexOf(DepProject); - if Idx = -1 then // must insert the + if Idx = -1 then // must insert the project in the list begin List.Insert(i, DepProject); - Dec(i); + Inc(i); end else if Idx > i then begin List.Move(idx, i); - Dec(i); + Inc(i); end; end; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-08-25 07:49:07
|
Revision: 10915 Author: obones Date: 2006-08-25 00:48:59 -0700 (Fri, 25 Aug 2006) ViewCVS: http://svn.sourceforge.net/jvcl/?rev=10915&view=rev Log Message: ----------- Package sorting now works again completely Modified Paths: -------------- trunk/jvcl/install/JVCLInstall/Compile.pas Modified: trunk/jvcl/install/JVCLInstall/Compile.pas =================================================================== --- trunk/jvcl/install/JVCLInstall/Compile.pas 2006-08-24 11:48:26 UTC (rev 10914) +++ trunk/jvcl/install/JVCLInstall/Compile.pas 2006-08-25 07:48:59 UTC (rev 10915) @@ -1394,62 +1394,66 @@ procedure TCompiler.SortProjectGroup(Group: TProjectGroup; List: TList); - procedure AddProject(Project: TPackageTarget); + procedure SortProject(Project: TPackageTarget; var ProjectIndex: Integer); var - i, Idx: Integer; - Dep: TPackageTarget; + ReqProjectIndex: Integer; + ReqPackage: TRequiredPackage; + ReqProject: TPackageTarget; + ListIndex: Integer; begin - for i := 0 to Project.RequireCount - 1 do + for ReqProjectIndex := 0 to Project.RequireCount - 1 do begin - Dep := Group.FindPackageByXmlName(Project.Requires[i].Name); - if Dep <> nil then + ReqPackage := Project.Requires[ReqProjectIndex]; + if IsPackageUsed(Group, ReqPackage) then begin - Idx := List.IndexOf(Dep); - if Idx = -1 then - List.Add(Dep); + // Two cases: the required project is not in the list so we need to add, + // or it's already there and not in front so we need to move it. + // In both cases, we need to sort the moved/added package recursively + // and increment the ProjectIndex only after the recursive sort is done + // so that packages required by the current required package are put + // in front of it as well. + ReqProject := Group.FindPackageByXmlName(ReqPackage.Name); + if Assigned(ReqProject) then + begin + ListIndex := List.IndexOf(ReqProject); + if ListIndex = -1 then + begin + List.Insert(ProjectIndex, ReqProject); + SortProject(ReqProject, ProjectIndex); + Inc(ProjectIndex); + end + else + if ListIndex > ProjectIndex then + begin + List.Move(ListIndex, ProjectIndex); + SortProject(ReqProject, ProjectIndex); + Inc(ProjectIndex); + end; + end; end; end; end; var - i, k, Idx: Integer; - Project, DepProject: TPackageTarget; + CurProject: TPackageTarget; + CurProjectIndex: Integer; begin - for i := 0 to Group.Count - 1 do - if Group[i].Compile then - List.Add(Group[i]); + // Add all projects to be compiled into list. + for CurProjectIndex := 0 to Group.Count - 1 do + if Group[CurProjectIndex].Compile then + List.Add(Group[CurProjectIndex]); - // sort - i := 0; - while i < List.Count do + // Sort according to dependency list: + // For each package that compile, put those it requires in front of it, and + // this recursively. + CurProjectIndex := 0; + while CurProjectIndex < List.Count do begin - Project := List[i]; - if Project.Compile then - begin - for k := 0 to Project.RequireCount - 1 do - begin - if IsPackageUsed(Group, Project.Requires[k]) then - begin - DepProject := Group.FindPackageByXmlName(Project.Requires[k].Name); - if DepProject <> nil then - begin - Idx := List.IndexOf(DepProject); - if Idx = -1 then // must insert the project in the list - begin - List.Insert(i, DepProject); - Inc(i); - end - else - if Idx > i then - begin - List.Move(idx, i); - Inc(i); - end; - end; - end; - end; - end; - Inc(i); + CurProject := List[CurProjectIndex]; + + SortProject(CurProject, CurProjectIndex); + + Inc(CurProjectIndex); end; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-08-31 19:04:11
|
Revision: 10924 http://svn.sourceforge.net/jvcl/?rev=10924&view=rev Author: obones Date: 2006-08-31 11:53:36 -0700 (Thu, 31 Aug 2006) Log Message: ----------- Typos in comments Modified Paths: -------------- trunk/jvcl/install/JVCLInstall/Compile.pas Modified: trunk/jvcl/install/JVCLInstall/Compile.pas =================================================================== --- trunk/jvcl/install/JVCLInstall/Compile.pas 2006-08-30 20:33:22 UTC (rev 10923) +++ trunk/jvcl/install/JVCLInstall/Compile.pas 2006-08-31 18:53:36 UTC (rev 10924) @@ -1444,8 +1444,8 @@ List.Add(Group[CurProjectIndex]); // Sort according to dependency list: - // For each package that compile, put those it requires in front of it, and - // this recursively. + // For each package that must be compiled, put those it requires in front + // of it, and this recursively. CurProjectIndex := 0; while CurProjectIndex < List.Count do begin This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2006-11-13 23:16:03
|
Revision: 11017 http://svn.sourceforge.net/jvcl/?rev=11017&view=rev Author: ahuser Date: 2006-11-13 15:15:54 -0800 (Mon, 13 Nov 2006) Log Message: ----------- fixed typo Modified Paths: -------------- trunk/jvcl/install/JVCLInstall/Compile.pas Modified: trunk/jvcl/install/JVCLInstall/Compile.pas =================================================================== --- trunk/jvcl/install/JVCLInstall/Compile.pas 2006-11-13 10:13:54 UTC (rev 11016) +++ trunk/jvcl/install/JVCLInstall/Compile.pas 2006-11-13 23:15:54 UTC (rev 11017) @@ -553,7 +553,7 @@ end; /// <summary> -/// Bcc32() compiles C++ files. It adds the compiles .obj file names to ObjFiles +/// Bcc32() compiles C++ files. It adds the compiled .obj file names to ObjFiles /// If the command could not be executed a message dialog is shown with the /// complete command line. Returns the ExitCode of the last/failed command. /// </summary> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2007-06-23 23:02:19
|
Revision: 11380 http://svn.sourceforge.net/jvcl/?rev=11380&view=rev Author: ahuser Date: 2007-06-23 16:02:18 -0700 (Sat, 23 Jun 2007) Log Message: ----------- Fixed accidentally committed file Modified Paths: -------------- trunk/jvcl/install/JVCLInstall/Compile.pas Modified: trunk/jvcl/install/JVCLInstall/Compile.pas =================================================================== --- trunk/jvcl/install/JVCLInstall/Compile.pas 2007-06-23 22:58:58 UTC (rev 11379) +++ trunk/jvcl/install/JVCLInstall/Compile.pas 2007-06-23 23:02:18 UTC (rev 11380) @@ -925,7 +925,7 @@ Changed := not TargetConfig.AutoDependencies or HaveFilesChanged(ObjFiles, AgeIndex) or - (BplAge < NewestObjAge) or {(LibAge < BpiAge) or} (BpiAge < NewestObjAge); + (BplAge < NewestObjAge) or (LibAge < BpiAge) or (BpiAge < NewestObjAge); if Changed then begin // link files (create .lib, .bpi and .bpl) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2007-07-18 18:06:44
|
Revision: 11418 http://svn.sourceforge.net/jvcl/?rev=11418&view=rev Author: ahuser Date: 2007-07-18 11:06:14 -0700 (Wed, 18 Jul 2007) Log Message: ----------- Fixed unnecessary ilink32.exe calls Modified Paths: -------------- trunk/jvcl/install/JVCLInstall/Compile.pas Modified: trunk/jvcl/install/JVCLInstall/Compile.pas =================================================================== --- trunk/jvcl/install/JVCLInstall/Compile.pas 2007-07-12 18:12:07 UTC (rev 11417) +++ trunk/jvcl/install/JVCLInstall/Compile.pas 2007-07-18 18:06:14 UTC (rev 11418) @@ -97,9 +97,9 @@ function Make(TargetConfig: ITargetConfig; Args: string; CaptureLine: TCaptureLine; StartDir: string = ''): Integer; function CompileCppPackage(TargetConfig: ITargetConfig; Project: TPackageTarget; - const DccOpt, BccOpt, IlinkOpt: string; DebugUnits: Boolean): Integer; + const DccOpt, BccOpt, IlinkOpt: string; DebugUnits: Boolean; var FilesCompiled: Boolean): Integer; function CompileDelphiPackage(TargetConfig: ITargetConfig; Project: TPackageTarget; - const DccOpt: string; DebugUnits: Boolean): Integer; + const DccOpt: string; DebugUnits: Boolean; var FilesCompiled: Boolean): Integer; function WriteDcc32Cfg(const Directory: string; TargetConfig: ITargetConfig; const DccOpt: string; DebugUnits: Boolean): string; // returns the dcc32.cfg filename @@ -136,6 +136,8 @@ function GeneratePackages(const Group, Targets, PackagesPath: string): Boolean; overload; function GenerateAllPackages: Boolean; overload; function CompileTarget(TargetConfig: TTargetConfig; PackageGroupKind: TPackageGroupKind): Boolean; + + //procedure AlterHppFiles(TargetConfig: ITargetConfig; Project: TPackageTarget); public constructor Create(AData: TJVCLData); destructor Destroy; override; @@ -795,15 +797,16 @@ /// </summary> function TCompiler.CompileCppPackage(TargetConfig: ITargetConfig; Project: TPackageTarget; const DccOpt, BccOpt, IlinkOpt: string; - DebugUnits: Boolean): Integer; + DebugUnits: Boolean; var FilesCompiled: Boolean): Integer; var PrjFilename, PkgFilename, ResFilename: string; PasFiles, CppFiles, ObjFiles, LibFiles, ResFiles: TStrings; i, ObjAge, NewestObjAge, AgeIndex: Integer; BplFilename, DcpFilename, BpiFilename, ObjFilename: string; - BplAge, DcpAge, LibAge, BpiAge: Integer; + {BplAge, }DcpAge, {LibAge,} BpiAge: Integer; Changed: Boolean; OutDirs: TOutputDirs; + FilesPackedTogether: Boolean; begin OutDirs := TargetConfig.GetOutputDirs(DebugUnits); @@ -811,9 +814,9 @@ BplFilename := OutDirs.BplDir + PathDelim + Project.TargetName; DcpFilename := OutDirs.DcpDir + PathDelim + Project.DcpName; BpiFilename := ChangeFileExt(DcpFilename, '.bpi'); - BplAge := FileAgeEx(BplFilename); + {BplAge := FileAgeEx(BplFilename);} DcpAge := FileAgeEx(DcpFilename); - LibAge := FileAgeEx(ChangeFileExt(DcpFilename, '.lib')); + {LibAge := FileAgeEx(ChangeFileExt(DcpFilename, '.lib'));} BpiAge := FileAgeEx(BpiFilename); PasFiles := nil; @@ -888,10 +891,11 @@ end; // compile Delphi files (creates only .dcu, .obj and .hpp files) - Result := CompileDelphiPackage(TargetConfig, Project, DccOpt + ' -JPHNE --BCB', DebugUnits); + Result := CompileDelphiPackage(TargetConfig, Project, DccOpt + ' -JPHNE --BCB', DebugUnits, FilesCompiled); if Result <> 0 then Exit; + FilesPackedTogether := False; Changed := not TargetConfig.AutoDependencies or HaveFilesChanged(ObjFiles, AgeIndex) or (DcpAge < NewestObjAge) or @@ -908,7 +912,7 @@ // the final dcp file. Result := CompileDelphiPackage(TargetConfig, Project, StringReplace(' ' + DccOpt + ' ', ' -B ', '', [rfReplaceAll]), - DebugUnits); + DebugUnits, FilesPackedTogether); if Result <> 0 then Exit; end; @@ -925,7 +929,9 @@ Changed := not TargetConfig.AutoDependencies or HaveFilesChanged(ObjFiles, AgeIndex) or - (BplAge < NewestObjAge) or (LibAge < BpiAge) or (BpiAge < NewestObjAge); + FilesCompiled or + FilesPackedTogether; + {(BplAge < NewestObjAge) or (LibAge < BpiAge) or (BpiAge < NewestObjAge)}; if Changed then begin // link files (create .lib, .bpi and .bpl) @@ -949,7 +955,7 @@ /// line of the failed command. Returns the ExitCode of the last/failed command. /// </summary> function TCompiler.CompileDelphiPackage(TargetConfig: ITargetConfig; Project: TPackageTarget; - const DccOpt: string; DebugUnits: Boolean): Integer; + const DccOpt: string; DebugUnits: Boolean; var FilesCompiled: Boolean): Integer; var Files: TStrings; i: Integer; @@ -1086,12 +1092,15 @@ end; end; + FilesCompiled := False; if Changed then begin Files := TStringList.Create; try Files.Add(ExtractFileName(ChangeFileExt(Project.SourceName, '.dpk'))); // force .dpk Result := Dcc32(TargetConfig, Project, DccOpt, DebugUnits, Files, nil); + if Result = 0 then + FilesCompiled := True; finally Files.Free; end; @@ -1530,6 +1539,7 @@ ProjectOrder: TList; Project: TPackageTarget; DebugProgress: string; + FilesCompiled: Boolean; function GetProjectIndex: Integer; begin @@ -1646,9 +1656,10 @@ Project := ProjectOrder[i]; CaptureLinePackageCompilation('[Compiling: ' + Project.TargetName + ']', FAborted); + FilesCompiled := False; if TargetConfig.Target.IsBCB and not TargetConfig.Target.IsBDS then begin - if CompileCppPackage(TargetConfig, Project, DccOpt, '', '', DebugUnits) <> 0 then + if CompileCppPackage(TargetConfig, Project, DccOpt, '', '', DebugUnits, FilesCompiled) <> 0 then begin if FAborted then Exit; @@ -1659,7 +1670,7 @@ else begin { Create .dcp and .bpl } - if CompileDelphiPackage(TargetConfig, Project, DccOpt, DebugUnits) <> 0 then + if CompileDelphiPackage(TargetConfig, Project, DccOpt, DebugUnits, FilesCompiled) <> 0 then begin if FAborted then Exit; @@ -1667,6 +1678,9 @@ Exit; end; end; + {if FilesCompiled and (TargetConfig.Target.SupportedPersonalities * [persBCB] <> []) then + AlterHppFiles(TargetConfig, Project);} + if FAborted then Exit; end; @@ -1772,6 +1786,117 @@ end; end; +/// <summary> +/// AlterHppFiles corrects the *.hpp files that the dcc32.exe compiler generated. +/// - Converts every '#define constant "string"' to "static const char +/// </summary> +(*procedure TCompiler.AlterHppFiles(TargetConfig: ITargetConfig; Project: TPackageTarget); + + function IsValidTypeName(const Name: string): Boolean; + var + I: Integer; + begin + Result := False; + for I := 1 to Length(Name) do + if not (Name[I] in ['A'..'Z', 'a'..'z', '0'..'9', ':', '_']) then + Exit; + Result := True; + end; + + function AlterDefine(var f: TextFile; Lines: TStrings): Boolean; + var + S, Name, TypeName: string; + ps: Integer; + Value: Integer; + begin + Result := False; + S := Trim(Copy(Lines[Lines.Count - 1], 9, MaxInt)); + ps := Pos(' ', S); + if (ps > 2) and (ps < Length(S)) then + begin + { #define name "string" => static const char* name = "string"; } + if S[ps + 1] = '"' then + begin + Name := Copy(S, 1, ps - 1); + Lines[Lines.Count - 1] := Format('static const char* %s = %s', [Name, Copy(S, ps + 1, MaxInt)]); + while not Eof(f) and (S[Length(S)] = '\') do // line continuation + begin + ReadLn(f, S); + Lines.Add(S); + end; + Lines[Lines.Count - 1] := Lines[Lines.Count - 1] + ';'; + Result := True; + end + else + { #define name (type)(value) => static const type name = (type)(value); } + if S[ps + 1] = '(' then + begin + Name := Copy(S, 1, ps - 1); + Delete(S, 1, ps + 1); + ps := Pos(')', S); + if ps > 2 then + begin + TypeName := Copy(S, 1, ps - 1); + if IsValidTypeName(TypeName) then + begin + Delete(S, 1, ps); + if (S <> '') and (S[1] = '(') and (S[Length(S)] = ')') and TryStrToInt(Copy(S, 2, Length(S) - 2), Value) then + begin + Lines[Lines.Count - 1] := Format('static const %s %s = (%s)(%d);', [TypeName, Name, TypeName, Value]); + Result := True; + end; + end; + end; + end; + end; + end; + + procedure AlterHppFile(const Filename: string); + var + Lines: TStrings; + Modified: Boolean; + S: string; + f: TextFile; + begin + Lines := TStringList.Create; + try + AssignFile(f, Filename); + Reset(f); + try + Modified := False; + while not Eof(f) do + begin + ReadLn(f, S); + Lines.Add(S); + if StartsWith(S, '#define ', False) then + begin + if AlterDefine(f, Lines) then + Modified := True; + end; + end; + finally + CloseFile(f); + end; + if Modified then + Lines.SaveToFile(Filename); + finally + Lines.Free; + end; + end; + +var + I: Integer; + HppDir, Filename: string; +begin + HppDir := TargetConfig.HppDir; + for I := 0 to Project.ContainCount - 1 do + begin + Filename := HppDir + PathDelim + ChangeFileExt(ExtractFileName(Project.Contains[I].Name), '.hpp'); + if FileExists(Filename) then + AlterHppFile(Filename); + end; +end;*) + type { TListConditionParser searches for the idents in the List. If an ident is in the list the ident is returned as True. } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |