From: Andreas H. <ah...@us...> - 2003-11-30 21:02:53
|
Update of /cvsroot/jvcl/dev/JVCL3/install/JVCL3Install In directory sc8-pr-cvs1:/tmp/cvs-serv31072/install/JVCL3Install Modified Files: BuildHelpers.pas CoreData.pas FrmMain.dfm FrmMain.pas FrmMake.pas JVCL3Install.dpr Log Message: Update Index: BuildHelpers.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/install/JVCL3Install/BuildHelpers.pas,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** BuildHelpers.pas 30 Nov 2003 00:20:18 -0000 1.1 --- BuildHelpers.pas 30 Nov 2003 21:02:48 -0000 1.2 *************** *** 17,21 **** Contributor(s): - ! Last Modified: 2003-11-28 You may retrieve the latest version of this file at the Project JEDI's JVCL home page, --- 17,21 ---- Contributor(s): - ! Last Modified: 2003-11-30 You may retrieve the latest version of this file at the Project JEDI's JVCL home page, *************** *** 81,84 **** --- 81,85 ---- property Make: TMakeFile read FMake; property Cleaning: Boolean read FCleaning write FCleaning; + property CreatedFiles: TStrings read FCreatedFiles; end; *************** *** 87,93 **** ReplaceAll, IgnoreCase: Boolean): string; procedure CreateCfgFile(const Filename, SearchPaths, LibDir: string); ! function PrepareBpg(const Filename, SearchPaths, LibDir, BplDir, DcpDir: string): TPrepareBpgData; // PrepareBpg creates Filename{.bpg->.mak) and the needed cfg files. // returns the number of Projects to compile (PROJECTS=xxx)" implementation --- 88,106 ---- ReplaceAll, IgnoreCase: Boolean): string; procedure CreateCfgFile(const Filename, SearchPaths, LibDir: string); ! function PrepareBpg(const Filename: string; Target: TTargetInfo): TPrepareBpgData; // PrepareBpg creates Filename{.bpg->.mak) and the needed cfg files. // returns the number of Projects to compile (PROJECTS=xxx)" + function PrepareDcpBpg(const MakeFilename: string; Files: TStrings; + Target: TTargetInfo; IsJcl: Boolean): TPrepareBpgData; + procedure CreateDelphiPackageForBCB(Package: TPackageInfo; Files: TStrings; IsJcl: Boolean); + procedure MoveBCBFiles(const Dir: string; Target: TTargetInfo); + + const + JclIncludePaths = '..\..\source\common'; + JclSourcePaths = '..\..\source\windows;..\..\source\vcl;..\..\source\visclx'; + JclLibDir = '..\..\lib'; + JVCLIncludePaths = '..\..\common'; + JVCLSourcePaths = '..\..\run;..\..\design'; + implementation *************** *** 101,105 **** '#------------------------------------------------------------------------------#'#10 + 'MAKE = "$(ROOT)\bin\make.exe" -$(MAKEFLAGS) -f$**'#10 + ! 'DCC = "$(ROOT)\bin\dcc32.exe" -U"$(DCPDIR)" -LE"$(BPLDIR)" -LN"$(DCPDIR)" -Q -W -H -M $(DCCOPT) "$&.dpk"'#10 + 'BRCC = "$(ROOT)\bin\brcc32.exe" $**'#10 + '#------------------------------------------------------------------------------#'#10; --- 114,118 ---- '#------------------------------------------------------------------------------#'#10 + 'MAKE = "$(ROOT)\bin\make.exe" -$(MAKEFLAGS) -f$**'#10 + ! 'DCC = "$(ROOT)\bin\dcc32.exe" -U"$(DCPDIR)" -LE"$(BPLDIR)" -LN"$(DCPDIR)" -Q -W -H -M $(DCCOPT)'#10 +// "$&.dpk"'#10 + 'BRCC = "$(ROOT)\bin\brcc32.exe" $**'#10 + '#------------------------------------------------------------------------------#'#10; *************** *** 180,184 **** // Ersetzungstext einfügen ! if LenReplaceText > 0 then begin Move(ReplaceText[1], Result[Len + 1], LenReplaceText); --- 193,197 ---- // Ersetzungstext einfügen ! if LenReplaceText > 0 then begin Move(ReplaceText[1], Result[Len + 1], LenReplaceText); *************** *** 209,219 **** Rewrite(f); try WriteLn(f, '-N"..\..\' + LibDir + '"'); WriteLn(f, '-LE"..\..\' + LibDir + '"'); WriteLn(f, '-LN"..\..\' + LibDir + '"'); ! WriteLn(f, '-U"..\..\' + LibDir + ';..\..\run;..\..\common;..\..\Resources"'); ! WriteLn(f, '-O"..\..\run;..\..\common;..\..\Resources"'); ! WriteLn(f, '-I"..\..\run;..\..\common;..\..\Resources"'); ! WriteLn(f, '-R"..\..\run;..\..\common;..\..\Resources"'); List := TStringList.Create; --- 222,233 ---- Rewrite(f); try + WriteLn(f, '-Q'); WriteLn(f, '-N"..\..\' + LibDir + '"'); WriteLn(f, '-LE"..\..\' + LibDir + '"'); WriteLn(f, '-LN"..\..\' + LibDir + '"'); ! WriteLn(f, '-U"..\..\' + LibDir + ';..\..\run;..\..\common"'); ! WriteLn(f, '-O"..\..\run;..\..\common;..\..\dcu"'); ! WriteLn(f, '-I"..\..\common'); ! WriteLn(f, '-R"..\..\Resources"'); List := TStringList.Create; *************** *** 234,253 **** end; ! function PrepareBpg(const Filename, SearchPaths, LibDir, BplDir, DcpDir: string): TPrepareBpgData; var - Make: TMakeFile; Lines: TStrings; i, ActIndex: Integer; ! S, Dir: string; ! CfgFile, SourceFile: string; begin ! Result := TPrepareBpgData.Create; ! ! Make := TMakeFile.Create(Filename); try ! Result.FMake := Make; ! Result.FCleaning := True; ! ! Lines := TStringList.Create; Lines.Add('#------------------------------------------------------------------------------#'); --- 248,269 ---- end; ! procedure CreateMakeFile(Make: TMakeFile; const Path, MakeFileName, ! SearchPaths, LibDir, BplDir, DcpDir: string; ! CreatedFiles: TStrings; BCBTarget: Boolean; MajorVersion: Integer); var Lines: TStrings; i, ActIndex: Integer; ! S, Dir, SourceFile: string; ! CfgFile: string; begin ! Lines := TStringList.Create; try ! for i := 0 to Make.TargetCount - 1 do ! if Pos('..\', Make.Targets[i].Sources) > 0 then ! begin ! ActIndex := Make.Projects.IndexOf(Make.Targets[i].Name); ! if ActIndex <> -1 then ! Make.Projects.Delete(ActIndex); ! end; Lines.Add('#------------------------------------------------------------------------------#'); *************** *** 274,277 **** --- 290,296 ---- for i := 0 to Make.TargetCount - 1 do begin + if Pos('..\', Make.Targets[i].Sources) > 0 then + Continue; + Lines.Add(Make.Targets[i].Name + ': ' + Make.Targets[i].Sources); Lines.Add(#9'@echo.'); *************** *** 285,288 **** --- 304,308 ---- begin S := Make.Targets[i].Actions[ActIndex]; + if CompareText(S, '$(DCC)') = 0 then S := S + Format(' "%s"', [SourceFile]); S := FastStringReplace(S, '$**', SourceFile, True, False); S := FastStringReplace(S, '$*', Copy(SourceFile, 1, Length(SourceFile) - Length(ExtractFileExt(SourceFile))), True, False); *************** *** 295,310 **** Lines.Add(''); ! CfgFile := ChangeFileExt(ExtractFilePath(Filename) + Make.Targets[i].Sources, '.cfg'); ! CreateCfgFile(CfgFile, SearchPaths, LibDir); ! Result.FCreatedFiles.Add(CfgFile); end; ! Lines.SaveToFile(ChangeFileExt(Filename, '.mak')); ! Result.FCreatedFiles.Add(ChangeFileExt(Filename, '.mak')); finally ! // Make.Free; done in Result.Destroy end; end; { TMakeTarget } --- 315,558 ---- Lines.Add(''); ! CfgFile := ChangeFileExt(Path + Make.Targets[i].Sources, '.cfg'); ! if not BCBTarget then ! begin ! CreateCfgFile(CfgFile, SearchPaths, LibDir); ! CreatedFiles.Add(CfgFile); ! end ! else ! begin ! CreatedFiles.Add(ChangeFileExt(CfgFile, '.mak')); // created by $(BCB)\bin\bpr2mak.exe ! CreatedFiles.Add(ChangeFileExt(CfgFile, '') + IntToStr(MajorVersion) + '0.tds'); // created by $(BCB)\bin\bcc32 ! end; end; ! Lines.SaveToFile(MakeFileName); ! CreatedFiles.Add(MakeFileName); finally ! Lines.Free; end; end; + function PrepareBpg(const Filename: string; Target: TTargetInfo): TPrepareBpgData; + var + Make: TMakeFile; + begin + Result := TPrepareBpgData.Create; + try + Make := TMakeFile.Create(Filename); + try + Result.FMake := Make; + Result.FCleaning := True; + + CreateMakeFile(Make, ExtractFilePath(FileName), ChangeFileExt(FileName, '.mak'), + Target.SearchPaths, Target.LibDir, Target.BplDir, Target.DcpDir, + Result.FCreatedFiles, Target.IsBCB, Target.MajorVersion); + finally + // Make.Free; done in Result.Destroy by the caller + end; + except + Result.Free; + raise; + end; + end; + + function PrepareDcpBpg(const MakeFilename: string; Files: TStrings; + Target: TTargetInfo; IsJcl: Boolean): TPrepareBpgData; + var + Make: TMakeFile; + i: Integer; + Item: TMakeTarget; + Name: string; + begin + Result := TPrepareBpgData.Create; + try + Make := TMakeFile.Create(''); + try + Result.FMake := Make; + Result.FCleaning := True; + for i := 0 to Files.Count - 1 do + begin + Name := ChangeFileExt(ExtractFileName(Files[i]), '.bpl'); + Make.Projects.Add(Name); + Item := TMakeTarget.Create; + Make.FTargets.Add(Item); + Item.FName := Name; + if IsJcl then + Item.FSources := Target.JclDirName + '\' + else + Item.FSources := Target.JVCLDirName + '\'; + Item.FSources := Item.FSources + ChangeFileExt(Name, '.dpk'); + Item.Actions.Add('$(DCC)'); + end; + + CreateMakeFile(Make, ExtractFilePath(MakeFileName), MakeFileName, + Target.SearchPaths, Target.LibDir, Target.BplDir, Target.DcpDir, + Result.FCreatedFiles, Target.IsBCB, Target.MajorVersion); + finally + // Make.Free; done in Result.Destroy by the caller + end; + except + Result.Free; + raise; + end; + end; + + const + DelphiPackageFile = + 'package %s;'#10 + // <- package name + ''#10 + + '{$R *.res}'#10 + + '{$ALIGN 8}'#10 + + '{$ASSERTIONS OFF}'#10 + + '{$BOOLEVAL OFF}'#10 + + '{$DEBUGINFO OFF}'#10 + + '{$EXTENDEDSYNTAX ON}'#10 + + '{$IMPORTEDDATA ON}'#10 + + '{$IOCHECKS ON}'#10 + + '{$LOCALSYMBOLS OFF}'#10 + + '{$LONGSTRINGS ON}'#10 + + '{$OPENSTRINGS ON}'#10 + + '{$OPTIMIZATION ON}'#10 + + '{$OVERFLOWCHECKS OFF}'#10 + + '{$RANGECHECKS ON}'#10 + + '{$REFERENCEINFO OFF}'#10 + + '{$SAFEDIVIDE OFF}'#10 + + '{$STACKFRAMES OFF}'#10 + + '{$TYPEDADDRESS OFF}'#10 + + '{$VARSTRINGCHECKS ON}'#10 + + '{$WRITEABLECONST ON}'#10 + + '{$MINENUMSIZE 1}'#10 + + '{$IMAGEBASE $4100000}'#10 + + '{$DESCRIPTION ''%s''}'#10 + // <- Description + '{$RUNONLY}'#10 + + '{$IMPLICITBUILD OFF}'; + + procedure CreateDelphiPackageForBCB(Package: TPackageInfo; Files: TStrings; IsJcl: Boolean); + var + Filename, Prefix: string; + S, FormName, Name: string; + Lines: TStrings; + i, ps: Integer; + begin + // LibVer is added in CoreData.CreateJclPackageList for IsJcl + if IsJcl then + begin + if Package.Target.IsDelphi then Prefix := 'D' else Prefix := 'C'; + end + else + Prefix := ''; + + if IsJcl then + Filename := JCLPackageDir + '\' + Package.Target.JclDirName + '\' + else + Filename := JVCLPackageDir + '\' + Package.Target.JVCLDirName + '\'; + Filename := Filename + Prefix + Package.DisplayName + '.dpk'; + + Lines := TStringList.Create; + try + Lines.Text := Format(DelphiPackageFile, [Prefix + Package.DisplayName, Package.Description]); + if (Package.Target.MajorVersion >= 6) and (IsJcl) then + Lines.Add('{$LIBSUFFIX ''' + IntToStr(Package.Target.MajorVersion) + '0''}'); + if Package.Target.IsPersonal then + begin + if Package.Target.MajorVersion = 6 then + Lines.Add('{$DEFINE D6PersonalEdition}'); + Lines.Add('{$DEFINE DelphiPersonalEdition}'); + end; + + Lines.Add(''); + Lines.Add('requires'); + for i := 0 to Package.RequireCount - 1 do + begin + if Package.Target.IsTargetFor(Package.Requires[i].Targets) then + begin + Name := Package.Requires[i].Name; + if StartsWith(AnsiLowerCase(Name), 'jv') then + begin + ps := Pos('-r', AnsiLowerCase(Name)); + if ps > 0 then + begin + Delete(Name, ps, MaxInt); + Name := Name + 'C' + IntToStr(Package.Target.MajorVersion) + 'R'; + end + else + begin + ps := Pos('-d', AnsiLowerCase(Name)); + if ps > 0 then + begin + Delete(Name, ps, MaxInt); + Name := Name + 'C' + IntToStr(Package.Target.MajorVersion) + 'D'; + end + end; + end; + if Package.Requires[i].Condition <> '' then + Lines.Add('{$IFDEF ' + Package.Requires[i].Condition + '}'); + Lines.Add(' ' + Name + ','); + if Package.Requires[i].Condition <> '' then + Lines.Add('{$ENDIF}'); + end; + end; + S := Lines[Lines.Count - 1]; + S[Length(S)] := ';'; + Lines[Lines.Count - 1] := S; + + Lines.Add(''); + Lines.Add('contains'); + for i := 0 to Package.ContaionCount - 1 do + begin + if Package.Target.IsTargetFor(Package.Contains[i].Targets) then + begin + if Package.Contains[i].Condition <> '' then + Lines.Add('{$IFDEF ' + Package.Contains[i].Condition + '}'); + + if Package.Contains[i].FormName <> '' then + FormName := ' {' + Package.Contains[i].FormName + '},' + else + FormName := ','; + + Lines.Add(' ' + ChangeFileExt(ExtractFileName(Package.Contains[i].Name), '') + + ' in ''' + Package.Contains[i].Name + '''' + FormName); + if Package.Contains[i].Condition <> '' then + Lines.Add('{$ENDIF}'); + end; + end; + S := Lines[Lines.Count - 1]; + S[Length(S)] := ';'; + Lines[Lines.Count - 1] := S; + + Lines.Add(''); + Lines.Add('end.'); + + Lines.SaveToFile(FileName); + Files.Add(FileName); + finally + Lines.Free; + end; + end; + + procedure MoveBCBFiles(const Dir: string; Target: TTargetInfo); + var + sr: TSearchRec; + Ext: string; + begin + if not DirectoryExists(Target.DcpDir) then + Exit; + + if FindFirst(Dir + '\*.*', faAnyFile and not faDirectory, sr) = 0 then + try + repeat + Ext := AnsiLowerCase(ExtractFileExt(sr.Name)); + if (Ext = '.bpl') then + MoveFile(Dir + '\' + sr.Name, Target.BplDir + '\' + sr.Name) + else if (Ext = '.bpi') or (Ext = '.dcp') or (Ext = '.lib') then + MoveFile(Dir + '\' + sr.Name, Target.DcpDir + '\' + sr.Name) + else if (Ext = '.tds') then + DeleteFile(Dir + '\' + sr.Name); + until FindNext(sr) <> 0; + finally + FindClose(sr); + end; + end; { TMakeTarget } *************** *** 329,333 **** FProjects := TStringList.Create; FTargets := TObjectList.Create; ! LoadFromFile(Filename); end; --- 577,582 ---- FProjects := TStringList.Create; FTargets := TObjectList.Create; ! if Filename <> '' then ! LoadFromFile(Filename); end; Index: CoreData.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/install/JVCL3Install/CoreData.pas,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** CoreData.pas 30 Nov 2003 00:20:18 -0000 1.1 --- CoreData.pas 30 Nov 2003 21:02:48 -0000 1.2 *************** *** 17,21 **** Contributor(s): - ! Last Modified: 2003-11-28 You may retrieve the latest version of this file at the Project JEDI's JVCL home page, --- 17,21 ---- Contributor(s): - ! Last Modified: 2003-11-30 You may retrieve the latest version of this file at the Project JEDI's JVCL home page, *************** *** 38,42 **** interface uses ! Windows, SysUtils, Classes, Contnrs, Registry; type --- 38,42 ---- interface uses ! Windows, SysUtils, Classes, Contnrs, Registry, JvSimpleXML; type *************** *** 61,64 **** --- 61,65 ---- FKnownPackages: TStrings; FIsJVCLInstalled: Boolean; + FIsJCLInstalled: Boolean; FCompileFor: Boolean; *************** *** 67,70 **** --- 68,72 ---- FBuild: Boolean; FDeveloperInstall: Boolean; + FInstallJcl: Boolean; function GetSymbol: string; *************** *** 78,81 **** --- 80,87 ---- function AddRemovePaths(const Paths: string; const NewPaths: array of string; Add: Boolean): string; + function GetJclDirName: string; + function GetIsBCB: Boolean; + function GetIsDelphi: Boolean; + function GetJVCLDirName: string; protected procedure ClearPalette(reg: TRegistry; const Name: string); *************** *** 85,89 **** procedure AddRemoveJVCLPaths(Add: Boolean); ! procedure ReadData; // reads data from the registry public constructor Create(ATargetList: TTargetList); --- 91,95 ---- procedure AddRemoveJVCLPaths(Add: Boolean); ! procedure ReadData; public constructor Create(ATargetList: TTargetList); *************** *** 95,98 **** --- 101,105 ---- function ExpandDirMacros(const Path: string): string; + function IsTargetFor(const Targets: string): Boolean; property Executable: string read FExecutable; *************** *** 106,111 **** --- 113,122 ---- property LastUpdate: Integer read FLastUpdate; property DisplayName: string read GetDisplayName; + property IsBCB: Boolean read GetIsBCB; + property IsDelphi: Boolean read GetIsDelphi; property Symbol: string read GetSymbol; property BpgName: string read GetBpgName; + property JclDirName: string read GetJclDirName; // c5, c6, d5, d6, d7(, k3) + property JVCLDirName: string read GetJVCLDirName; // directory in Packages\ property LibDir: string read GetLibDir; // relative to $(JVCL) *************** *** 115,119 **** property KnownPackages: TStrings read FKnownPackages; property IsJVCLInstalled: Boolean read FIsJVCLInstalled; ! property IsOldJVCLInstalled: Integer read GetIsOldJVCLInstalled; // 1, 2 property CompileFor: Boolean read FCompileFor write FCompileFor; --- 126,131 ---- property KnownPackages: TStrings read FKnownPackages; property IsJVCLInstalled: Boolean read FIsJVCLInstalled; ! property IsOldJVCLInstalled: Integer read GetIsOldJVCLInstalled; // JVCL 1 or 2 ! property IsJCLInstalled: Boolean read FIsJCLInstalled; property CompileFor: Boolean read FCompileFor write FCompileFor; *************** *** 122,125 **** --- 134,138 ---- property Build: Boolean read FBuild write FBuild; property DeveloperInstall: Boolean read FDeveloperInstall write FDeveloperInstall; + property InstallJcl: Boolean read FInstallJcl write FInstallJcl; property Packages: TPackageList read FPackages; *************** *** 148,155 **** FName: string; FTargets: string; public ! constructor Create(const AName, ATargets: string); property Name: string read FName; property Targets: string read FTargets; end; --- 161,184 ---- FName: string; FTargets: string; + FCondition: string; public ! constructor Create(const AName, ATargets, ACondition: string); property Name: string read FName; property Targets: string read FTargets; + property Condition: string read FCondition; + end; + + TContainsFile = class(TObject) + private + FName: string; + FTargets: string; + FFormName: string; + FCondition: string; + public + constructor Create(const AName, ATargets, AFormName, ACondition: string); + property Name: string read FName; + property Targets: string read FTargets; + property FormName: string read FFormName; + property Condition: string read FCondition; end; *************** *** 157,165 **** private FPackageList: TPackageList; ! FName: string; FDisplayName: string; FDescription: string; FRequires: TObjectList; FRequiresDB: Boolean; FIsInstalled: Boolean; --- 186,196 ---- private FPackageList: TPackageList; ! FXmlDir: string; // depends on IsJclPackage and set in Create ! FName: string; FDisplayName: string; FDescription: string; FRequires: TObjectList; + FContains: TObjectList; FRequiresDB: Boolean; FIsInstalled: Boolean; *************** *** 172,179 **** function GetTarget: TTargetInfo; function GetBplName: string; protected procedure ReadXmlPackage; public ! constructor Create(const AName: string; APackageList: TPackageList); destructor Destroy; override; --- 203,212 ---- function GetTarget: TTargetInfo; function GetBplName: string; + function GetContainCount: Integer; + function GetContains(Index: Integer): TContainsFile; protected procedure ReadXmlPackage; public ! constructor Create(const AName, AXmlDir: string; APackageList: TPackageList); destructor Destroy; override; *************** *** 187,190 **** --- 220,225 ---- property Requires[Index: Integer]: TRequirePkg read GetRequires; property RequiresDB: Boolean read FRequiresDB; + property ContaionCount: Integer read GetContainCount; + property Contains[Index: Integer]: TContainsFile read GetContains; property IsInstalled: Boolean read FIsInstalled; *************** *** 215,222 **** --- 250,262 ---- var TargetList: TTargetList; + JVCLDir: string; JVCLPackageDir: string; JVCLPackageXmlDir: string; + JCLDir: string; + JCLPackageDir: string; + JCLPackageXmlDir: string; // only runtime packages + procedure SplitPaths(const Paths: string; List: TStrings); function CombinePaths(List: TStrings): string; *************** *** 225,229 **** --- 265,273 ---- function SubStr(const Text: string; StartIndex, EndIndex: Integer): string; function IsDelphiRunning: Boolean; + function FindCmdSwitch(const Switch: string): Boolean; + function MoveFile(const Source, Dest: string): Boolean; + + function CreateJclPackageList(Target: TTargetInfo): TPackageList; implementation *************** *** 243,251 **** ); ! function GetPackageGroupName(Target: TTargetInfo): string; begin with Target do begin ! if FProductName = 'Delphi' then Result := 'D' + IntToStr(MajorVersion) else --- 287,295 ---- ); ! function GetPackageGroupDir(Target: TTargetInfo): string; begin with Target do begin ! if IsDelphi then Result := 'D' + IntToStr(MajorVersion) else *************** *** 257,268 **** else Result := Result + 'Std'; - - Result := Result + ' Packages.bpg'; end; end; function GetBplNameFrom(const PkgName: string; Target: TTargetInfo): string; begin ! if Target.ProductName = 'Delphi' then Result := PkgName + 'D' + IntToStr(Target.MajorVersion) + 'D.bpl' else --- 301,315 ---- else Result := Result + 'Std'; end; end; + function GetPackageGroupName(Target: TTargetInfo): string; + begin + Result := GetPackageGroupDir(Target) + ' Packages.bpg'; + end; + function GetBplNameFrom(const PkgName: string; Target: TTargetInfo): string; begin ! if Target.IsDelphi then Result := PkgName + 'D' + IntToStr(Target.MajorVersion) + 'D.bpl' else *************** *** 272,275 **** --- 319,421 ---- // ----------------------------------------------------------------------------- + function CreateJclPackageList(Target: TTargetInfo): TPackageList; + var + Item: TPackageInfo; + LibVer: string; + begin + Result := TPackageList.Create(Target); + try + // prefix is added in BuildHelpers.CreateDelphiPackageForBCB + if Target.MajorVersion < 6 then LibVer := '50' else LibVer := ''; + + Item := TPackageInfo.Create('Jcl' + LibVer + '-R', JCLPackageXmlDir, Result); + Result.FItems.Add(Item); + + if Target.MajorVersion > 5 then + begin + Item := TPackageInfo.Create('JclVcl-R', JCLPackageXmlDir, Result); + Result.FItems.Add(Item); + + Item := TPackageInfo.Create('JclVClx-R', JCLPackageXmlDir, Result); + Result.FItems.Add(Item); + end; + except + Result.Free; + raise; + end; + end; + + + function FindCmdSwitch(const Switch: string): Boolean; + var i: Integer; + begin + Result := True; + for i := 1 to ParamCount do + if CompareText(Switch, ParamStr(i)) = 0 then + Exit; + Result := False; + end; + + function IsUNCPath(const Filename: string): Boolean; + begin + Result := Copy(Filename, 1, 2) = PathDelim + PathDelim; + end; + + function GetUNCShare(const Filename: string): string; + var nps: Integer; + begin // nur für WIN-Dateisystem + Result := ''; + if Filename = '' then exit; + if IsUNCPath(Filename) then // UNC-Pfad + begin + Result := Copy(Filename, 3, Length(Filename)); + nps := pos(PathDelim, Result); + Delete(Result, 1, nps); // Rechnername entfernen + Result := Copy(Result, 1, pos(PathDelim, Result) - 1); // Share extrahieren + Result := Copy(Filename, 1, nps + 2) + Result; + end else Result := Copy(Filename, 1, 2); + end; + + function CopyOneFile(const SourceFileName, DestFileName: string): Boolean; + begin + Result := Windows.CopyFile(PChar(SourceFileName), PChar(DestFileName), False); + end; + + function MoveFile(const Source, Dest: string): Boolean; + var CopyNecessary: Boolean; + begin + Result := False; + if (Source = '') or (Dest = '') or (not FileExists(Source)) then Exit; + if CompareText(Source, Dest) = 0 then + begin + Result := True; + Exit; + end; + + ForceDirectories(ExtractFilePath(Dest)); // Ordner erstellen + if FileExists(Dest) then + begin + SetFileAttributes(PChar(Dest), 0); + DeleteFile(Dest); + end; + + CopyNecessary := True; + // ? gleiches Laufwerk + if CompareText(GetUNCShare(Source), GetUNCShare(Dest)) = 0 then + CopyNecessary := not RenameFile(Source, Dest); + + if CopyNecessary then + begin + if CopyOneFile(Source, Dest) then + begin + SetFileAttributes(PChar(Source), 0); + DeleteFile(Source); + Result := True; + end; + end + else + Result := True; + end; + function IsVersionNumber(const S: string): Boolean; var *************** *** 507,511 **** if StartsWith(AnsiLowerCase(NewPaths[DirIndex]), AnsiLowerCase(RootDir) + '\') then begin ! if FProductName = 'Delphi' then List.Add('$(DELPHI)' + Copy(NewPaths[DirIndex], 1 + Length(RootDir), MaxInt)) else --- 653,657 ---- if StartsWith(AnsiLowerCase(NewPaths[DirIndex]), AnsiLowerCase(RootDir) + '\') then begin ! if IsDelphi then List.Add('$(DELPHI)' + Copy(NewPaths[DirIndex], 1 + Length(RootDir), MaxInt)) else *************** *** 631,639 **** function TTargetInfo.GetSymbol: string; begin ! if FProductName = 'Delphi' then ! Result := 'D' ! else ! Result := 'C'; ! Result := Result + IntToStr(MajorVersion); --- 777,781 ---- function TTargetInfo.GetSymbol: string; begin ! if IsDelphi then Result := 'D' else Result := 'C'; Result := Result + IntToStr(MajorVersion); *************** *** 694,697 **** --- 836,847 ---- end; + function TTargetInfo.GetJclDirName: string; + begin + if IsDelphi then + Result := 'd' + IntToStr(MajorVersion) + else + Result := 'c' + IntToStr(MajorVersion); + end; + function TTargetInfo.GetLibDir: string; begin *************** *** 703,706 **** --- 853,857 ---- reg: TRegistry; i: Integer; + JclFileName: string; begin reg := TRegistry.Create; *************** *** 723,727 **** FLastUpdate := i; - FCompileFor := True; reg.CloseKey; --- 874,877 ---- *************** *** 753,756 **** --- 903,922 ---- end; GetKnownPackages; + + FCompileFor := True; + + // check for JCL: + if IsDelphi then + JclFileName := 'DJcl' + IntToStr(MajorVersion) + '0' + else + JclFileName := 'CJcl' + IntToStr(MajorVersion) + '0'; + FIsJCLInstalled := (FileExists(FBplDir + '\' + JclFileName + '.bpl')) and + (FileExists(FBplDir + '\' + JclFileName + '.dcp')); + + // Jcl is not installed and we have a JCL directory + FInstallJcl := ((not IsJCLInstalled) or (IsOldJVCLInstalled <> 0)) + and (JCLDir <> ''); + + FCompileFor := FCompileFor and not ((not FIsJCLInstalled) and (JCLDir = '')); end; *************** *** 843,847 **** OldDir := ExpandDirMacros(OldDir); ! if FProductName = 'Delphi' then VerName := IntToStr(MajorVersion) + '0' else --- 1009,1013 ---- OldDir := ExpandDirMacros(OldDir); ! if IsDelphi then VerName := IntToStr(MajorVersion) + '0' else *************** *** 890,893 **** --- 1056,1082 ---- end; + function TTargetInfo.IsTargetFor(const Targets: string): Boolean; + begin + if Targets = 'all' then + Result := True + else + Result := Pos(',' + AnsiLowerCase(Symbol) + ',', ',' + AnsiLowerCase(Targets) + ',') > 0; + end; + + function TTargetInfo.GetIsBCB: Boolean; + begin + Result := not GetIsDelphi; + end; + + function TTargetInfo.GetIsDelphi: Boolean; + begin + Result := FProductName = 'Delphi'; + end; + + function TTargetInfo.GetJVCLDirName: string; + begin + Result := GetPackageGroupDir(Self); + end; + { TTargetList } *************** *** 926,949 **** try reg.RootKey := HKEY_LOCAL_MACHINE; ! // obtain Delphi Targets ! if reg.OpenKeyReadOnly(cDelphiKeyName) then begin ! reg.GetKeyNames(Names); ! for i := 0 to Names.Count - 1 do begin ! if IsVersionNumber(Names[i]) then ! ReadTargetData(cDelphiKeyName + '\' + Names[i], 'Delphi', Names[i]); end; - reg.CloseKey; end; ! // obtain BCB Targets ! if reg.OpenKeyReadOnly(cBCBKeyName) then begin ! reg.GetKeyNames(Names); ! for i := 0 to Names.Count - 1 do ! if IsVersionNumber(Names[i]) then ! ReadTargetData(cBCBKeyName + '\' + Names[i], 'C++Builder', Names[i]); ! reg.CloseKey; end; finally --- 1115,1145 ---- try reg.RootKey := HKEY_LOCAL_MACHINE; ! ! if not FindCmdSwitch('-NoDelphi') then begin ! // obtain Delphi Targets ! if reg.OpenKeyReadOnly(cDelphiKeyName) then begin ! reg.GetKeyNames(Names); ! for i := 0 to Names.Count - 1 do ! begin ! if IsVersionNumber(Names[i]) then ! ReadTargetData(cDelphiKeyName + '\' + Names[i], 'Delphi', Names[i]); ! end; ! reg.CloseKey; end; end; ! if not FindCmdSwitch('-NoBCB') then begin ! // obtain BCB Targets ! if reg.OpenKeyReadOnly(cBCBKeyName) then ! begin ! reg.GetKeyNames(Names); ! for i := 0 to Names.Count - 1 do ! if IsVersionNumber(Names[i]) then ! ReadTargetData(cBCBKeyName + '\' + Names[i], 'C++Builder', Names[i]); ! reg.CloseKey; ! end; end; finally *************** *** 986,999 **** { TRequirePkg } ! constructor TRequirePkg.Create(const AName, ATargets: string); begin inherited Create; FName := AName; FTargets := ATargets; end; { TPackageInfo } ! constructor TPackageInfo.Create(const AName: string; APackageList: TPackageList); begin inherited Create; --- 1182,1208 ---- { TRequirePkg } ! constructor TRequirePkg.Create(const AName, ATargets, ACondition: string); ! begin ! inherited Create; ! FName := AName; ! FTargets := ATargets; ! FCondition := ACondition; ! end; ! ! { TContainsFile } ! ! constructor TContainsFile.Create(const AName, ATargets, AFormName, ! ACondition: string); begin inherited Create; FName := AName; FTargets := ATargets; + FFormName := AFormName; + FCondition := ACondition; end; { TPackageInfo } ! constructor TPackageInfo.Create(const AName, AXmlDir: string; APackageList: TPackageList); begin inherited Create; *************** *** 1001,1009 **** --- 1210,1227 ---- FName := AName; FRequires := TObjectList.Create; + FContains := TObjectList.Create; FInstall := True; + FXmlDir := AXmlDir; ReadXmlPackage; // fills FDisplayName, FDescription, FRequires end; + destructor TPackageInfo.Destroy; + begin + FRequires.Free; + FContains.Free; + inherited Destroy; + end; + function TPackageInfo.DependsOn(PackageInfo: TPackageInfo): Boolean; var i: Integer; *************** *** 1014,1021 **** if CompareText(PackageInfo.Name, Requires[i].Name) = 0 then begin ! if Requires[i].Targets = 'all' then ! Result := True ! else ! Result := Pos(',' + Target.Symbol + ',', ',' + Requires[i].Targets + ',') > 0; Exit; end; --- 1232,1236 ---- if CompareText(PackageInfo.Name, Requires[i].Name) = 0 then begin ! Result := Target.IsTargetFor(Requires[i].Targets); Exit; end; *************** *** 1023,1035 **** end; ! destructor TPackageInfo.Destroy; begin ! FRequires.Free; ! inherited Destroy; end; ! function TPackageInfo.GetBplName: string; begin ! Result := GetBplNameFrom(FDisplayName, Target); end; --- 1238,1254 ---- end; ! function TPackageInfo.GetBplName: string; begin ! Result := GetBplNameFrom(FDisplayName, Target); end; ! function TPackageInfo.GetContainCount: Integer; begin ! Result := FContains.Count; ! end; ! ! function TPackageInfo.GetContains(Index: Integer): TContainsFile; ! begin ! Result := TContainsFile(FContains.Items[Index]); end; *************** *** 1051,1111 **** procedure TPackageInfo.ReadXmlPackage; var ! S: string; ! i, ps: Integer; ! RequirePkgName, RequireTarget, PkgName: string; begin FRequires.Clear; ! // *** ! // (ahuser) Maybe we should use JvSimpleXml.pas here, but I do not want to ! // depend on JVCL/JCL code. ! // *** ! ! S := ReadStringFromFile(JVCLPackageXmlDir + '\' + FName + '.xml'); ! ps := Pos('<Package Name="', S); ! if ps > 0 then ! begin ! Delete(S, 1, ps + 14); ! ps := Pos('"', S); ! FDisplayName := Copy(S, 1, ps - 1); ! end; ! ps := Pos('<Description>', S); ! if ps > 0 then ! begin ! Delete(S, 1, ps + 12); ! ps := Pos('</Description>', S); ! FDescription := Copy(S, 1, ps - 1); ! end; ! repeat ! ps := Pos('<Package Name="', S); ! if ps = 0 then ! Break; // -> leave ! Delete(S, 1, ps + 14); ! ps := Pos('"', S); ! RequirePkgName := Copy(S, 1, ps - 1); ! if Pos('dcldb', AnsiLowerCase(RequirePkgName)) > 0 then ! FRequiresDB := True; ! // require only designtime packages ! if (Copy(RequirePkgName, 1, 2) = 'Jv') and (Pos('-D', RequirePkgName) > 0) then begin ! ps := Pos('Targets="', S); ! if (ps > 0) and (ps < Pos('<Package Name="', S)) then ! begin ! Delete(S, 1, ps + 8); ! ps := Pos('"', S); ! RequireTarget := Copy(S, 1, ps - 1); ! end ! else RequireTarget := 'all'; // add new require item ! FRequires.Add(TRequirePkg.Create(RequirePkgName, RequireTarget)); end; ! until False; // not installed or an older version of the package already installed --- 1270,1337 ---- procedure TPackageInfo.ReadXmlPackage; var ! i: Integer; ! RequirePkgName, RequireTarget, PkgName, ! ContainsFileName, FormName, Condition: string; ! xml: TJvSimpleXML; ! RootNode : TJvSimpleXmlElemClassic; ! RequiredNode: TJvSimpleXmlElem; ! PackageNode: TJvSimpleXmlElem; ! ContainsNode: TJvSimpleXmlElem; ! FileNode: TJvSimpleXmlElem; begin FRequires.Clear; + FRequiresDB := False; ! xml := TJvSimpleXML.Create(nil); ! try ! xml.LoadFromFile(FXmlDir + '\' + FName + '.xml'); ! RootNode := xml.Root; ! RequiredNode := RootNode.Items.ItemNamed['Requires']; ! ContainsNode := rootNode.Items.ItemNamed['Contains']; ! FDisplayName := RootNode.Properties.ItemNamed['Name'].Value; ! FDescription := RootNode.Items.ItemNamed['Description'].Value; ! // requires ! for i := 0 to RequiredNode.Items.Count -1 do ! begin ! PackageNode := RequiredNode.Items[i]; ! RequirePkgName := PackageNode.Properties.ItemNamed['Name'].Value; ! if Pos('dcldb', AnsiLowerCase(RequirePkgName)) > 0 then ! FRequiresDB := True; ! // require only designtime packages ! { if StartsWith(RequirePkgName, 'Jv') and (Pos('-D', RequirePkgName) > 0) then ! begin} ! RequireTarget := PackageNode.Properties.ItemNamed['Targets'].Value; ! if RequireTarget = '' then ! RequireTarget := 'all'; ! Condition := PackageNode.Properties.ItemNamed['Condition'].Value; ! // add new require item ! FRequires.Add(TRequirePkg.Create(RequirePkgName, RequireTarget, Condition)); ! { end;} ! end; ! // contains ! for i := 0 to ContainsNode.Items.Count -1 do begin ! FileNode := ContainsNode.Items[i]; ! ContainsFileName := FileNode.Properties.ItemNamed['Name'].Value; ! ! RequireTarget := FileNode.Properties.ItemNamed['Targets'].Value; ! if RequireTarget = '' then RequireTarget := 'all'; + FormName := FileNode.Properties.ItemNamed['Formname'].Value; + Condition := FileNode.Properties.ItemNamed['Condition'].Value; + // add new require item ! FContains.Add(TContainsFile.Create(ContainsFileName, RequireTarget, FormName, Condition)); end; ! ! finally ! xml.Free; ! end; // not installed or an older version of the package already installed *************** *** 1212,1216 **** Item := nil; try ! Item := TPackageInfo.Create(ChangeFileExt(sr.Name, ''), Self); FItems.Add(Item); except --- 1438,1442 ---- Item := nil; try ! Item := TPackageInfo.Create(ChangeFileExt(sr.Name, ''), JVCLPackageXmlDir, Self); FItems.Add(Item); except *************** *** 1237,1240 **** --- 1463,1479 ---- JVCLPackageDir := JVCLDir + '\packages'; JVCLPackageXmlDir := JVCLPackageDir + '\xml'; + + JCLDir := ExtractFileDir(JVCLDir) + '\jcl'; + if DirectoryExists(JCLDir) then + begin + JCLPackageDir := JCLDir + '\packages'; + JCLPackageXmlDir := JCLPackageDir + '\xml'; + end + else + begin + JCLDir := ''; + JCLPackageDir := ''; + JCLPackageXmlDir := ''; + end; TargetList := TTargetList.Create; Index: FrmMain.dfm =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/install/JVCL3Install/FrmMain.dfm,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** FrmMain.dfm 30 Nov 2003 00:20:18 -0000 1.1 --- FrmMain.dfm 30 Nov 2003 21:02:48 -0000 1.2 *************** *** 26,29 **** --- 26,30 ---- Caption = 'Installed Delphi/BCB &Versions:' FocusControl = ListViewTargets + OnClick = LblVersionsClick end object LblPackages: TLabel *************** *** 34,37 **** --- 35,39 ---- Caption = '&Design-time Packages:' FocusControl = ListViewPackages + OnClick = LblPackagesClick end object ImageOpen: TImage *************** *** 88,93 **** end object imgProjectJEDI: TImage ! Left = 37 ! Top = 450 Width = 116 Height = 31 --- 90,95 ---- end object imgProjectJEDI: TImage ! Left = 43 ! Top = 460 Width = 116 Height = 31 *************** *** 250,254 **** Top = 200 Width = 5 ! Height = 57 Shape = bsRightLine end --- 252,256 ---- Top = 200 Width = 5 ! Height = 77 Shape = bsRightLine end *************** *** 274,277 **** --- 276,286 ---- Shape = bsTopLine end + object Bevel5: TBevel + Left = 12 + Top = 276 + Width = 17 + Height = 9 + Shape = bsTopLine + end object PanelBottom: TPanel Left = 0 *************** *** 281,285 **** Align = alBottom BevelOuter = bvNone ! TabOrder = 6 object BevelTop: TBevel Left = 0 --- 290,294 ---- Align = alBottom BevelOuter = bvNone ! TabOrder = 7 object BevelTop: TBevel Left = 0 *************** *** 515,519 **** object CheckBoxClearJVCLPalette: TCheckBox Left = 16 ! Top = 228 Width = 185 Height = 17 --- 524,528 ---- object CheckBoxClearJVCLPalette: TCheckBox Left = 16 ! Top = 268 Width = 185 Height = 17 *************** *** 524,528 **** ParentShowHint = False ShowHint = True ! TabOrder = 3 OnClick = CheckBoxClearJVCLPaletteClick end --- 533,537 ---- ParentShowHint = False ShowHint = True ! TabOrder = 5 OnClick = CheckBoxClearJVCLPaletteClick end *************** *** 543,551 **** object GroupBoxOptions: TGroupBox Left = 8 ! Top = 280 Width = 193 Height = 161 Caption = ' JVCL.INC - Options (global) ' ! TabOrder = 5 object BtnAdvancedOptions: TBitBtn Left = 88 --- 552,560 ---- object GroupBoxOptions: TGroupBox Left = 8 ! Top = 296 Width = 193 Height = 161 Caption = ' JVCL.INC - Options (global) ' ! TabOrder = 6 object BtnAdvancedOptions: TBitBtn Left = 88 *************** *** 590,600 **** Height = 17 Hint = ! 'JVCL 3 supports Windows XP theming. For Delphi/BCB 5 and 6'#13#10'you ' + ! 'need the ThemeManager (http://www.delphigems.com) and'#13#10'a modifie' + ! 'd ThemeManager package (see JVCL readme.htm)' Caption = '&XP Theme Support' ParentShowHint = False ShowHint = True TabOrder = 1 end object CheckBoxOptRegGlobalDsgnEditor: TCheckBox --- 599,612 ---- Height = 17 Hint = ! 'Activate this if you have Mike Lischke'#39's Theme Manager'#13#10'(http://' + ! 'www.lischke-online.de) installed and available and'#13#10'you are usin' + ! 'g Delphi/BCB 6 or below. The ThemeManager'#13#10'package must be compi' + ! 'led as "never-build package".'#13#10'For more information see readme.h' + ! 'tm' Caption = '&XP Theme Support' ParentShowHint = False ShowHint = True TabOrder = 1 + OnClick = CheckBoxOptThemingClick end object CheckBoxOptRegGlobalDsgnEditor: TCheckBox *************** *** 603,607 **** --- 615,624 ---- Width = 169 Height = 17 + Hint = + 'Enable this if you want to register property and component'#13#10'edit' + + 'ors included in JVCL for non-JVCL components as well.' Caption = '&Register global design editors' + ParentShowHint = False + ShowHint = True TabOrder = 2 end *************** *** 611,615 **** --- 628,637 ---- Width = 169 Height = 17 + Hint = + 'Enable this if you want to use the dxgettext'#13#10'(http://dxgettext.' + + 'sourceforge.net) translation tool.' Caption = 'Dxge&ttext is installed' + ParentShowHint = False + ShowHint = True TabOrder = 3 end *************** *** 619,623 **** --- 641,650 ---- Width = 169 Height = 17 + Hint = + 'This enables GIF image support. Deactivate this if you '#13#10'are usi' + + 'ng another GIF image support library.' Caption = 'Use Jv&GIF' + ParentShowHint = False + ShowHint = True TabOrder = 4 end *************** *** 635,638 **** --- 662,683 ---- ShowHint = True TabOrder = 4 + OnClick = CheckBoxClearJVCLPaletteClick + end + object CheckBoxInstallJcl: TCheckBox + Left = 16 + Top = 228 + Width = 185 + Height = 17 + Hint = 'Install the JCL packages that are needed by the JVCL 3.' + Caption = 'Install JCL' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + ParentShowHint = False + ShowHint = True + TabOrder = 3 OnClick = CheckBoxClearJVCLPaletteClick end Index: FrmMain.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/install/JVCL3Install/FrmMain.pas,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** FrmMain.pas 30 Nov 2003 00:20:18 -0000 1.1 --- FrmMain.pas 30 Nov 2003 21:02:48 -0000 1.2 *************** *** 17,21 **** Contributor(s): - ! Last Modified: 2003-11-28 You may retrieve the latest version of this file at the Project JEDI's JVCL home page, --- 17,21 ---- Contributor(s): - ! Last Modified: 2003-11-30 You may retrieve the latest version of this file at the Project JEDI's JVCL home page, *************** *** 36,39 **** --- 36,41 ---- -NoUpdateCheck Do not check for installed updates -IgnoreDelphi Do not check for running Delphi/BCB instances + -NoDelphi Ignore Delphi product targets (see CodeData.TTargetList.GetTargets) + -NoBCB Ignore C++Builder product targets (see CodeData.TTargetList.GetTargets) } *************** *** 80,83 **** --- 82,87 ---- Bevel3: TBevel; Bevel4: TBevel; + CheckBoxInstallJcl: TCheckBox; + Bevel5: TBevel; procedure BtnQuitClick(Sender: TObject); procedure BtnAdvancedOptionsClick(Sender: TObject); *************** *** 99,102 **** --- 103,108 ---- procedure imgProjectJEDIMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure LblVersionsClick(Sender: TObject); + procedure LblPackagesClick(Sender: TObject); private { Private-Deklarationen } *************** *** 128,141 **** {$R *.dfm} - function FindCmdSwitch(const Switch: string): Boolean; - var i: Integer; - begin - Result := True; - for i := 1 to ParamCount do - if CompareText(Switch, ParamStr(i)) = 0 then - Exit; - Result := False; - end; - function NoYesDlg(const Text: string): TModalResult; var Dlg: TForm; --- 134,137 ---- *************** *** 281,304 **** try // special handling for XP Theme Support (Delphi 7) ! try ! if (SelTarget <> nil) and (SelTarget.MajorVersion >= 7) then ! begin ! CheckBoxOptTheming.Checked := True; ! CheckBoxOptTheming.Enabled := False; ! end ! else ! begin ! CheckBoxOptTheming.Checked := FormMainConfig.Config.Enabled['JVCLThemesEnabled']; ! CheckBoxOptTheming.Enabled := True; ! end; ! finally ! CheckBoxOptTheming.OnClick := CheckBoxOptThemingClick; ! end; // load configuration CheckBoxOptRegGlobalDsgnEditor.Checked := FormMainConfig.Config.Enabled['JVCL_REGISTER_GLOBAL_DESIGNEDITORS']; CheckBoxOptDxgettext.Checked := FormMainConfig.Config.Enabled['USE_DXGETTEXT']; CheckBoxOptJvGIF.Checked := FormMainConfig.Config.Enabled['USE_Jv_GIF']; - finally Dec(FLockOptClick); --- 277,287 ---- try // special handling for XP Theme Support (Delphi 7) ! CheckBoxOptTheming.Enabled := (SelTarget <> nil) and (SelTarget.MajorVersion < 7); // load configuration + CheckBoxOptTheming.Checked := FormMainConfig.Config.Enabled['JVCLThemesEnabled']; CheckBoxOptRegGlobalDsgnEditor.Checked := FormMainConfig.Config.Enabled['JVCL_REGISTER_GLOBAL_DESIGNEDITORS']; CheckBoxOptDxgettext.Checked := FormMainConfig.Config.Enabled['USE_DXGETTEXT']; CheckBoxOptJvGIF.Checked := FormMainConfig.Config.Enabled['USE_Jv_GIF']; finally Dec(FLockOptClick); *************** *** 320,324 **** NeedsUpdate := 0; ! if Target.ProductName = 'Delphi' then begin case Target.MajorVersion of --- 303,307 ---- NeedsUpdate := 0; ! if Target.IsDelphi then begin case Target.MajorVersion of *************** *** 361,364 **** --- 344,348 ---- procedure TFormMain.FormCreate(Sender: TObject); begin + Application.HintHidePause := 10000; if not FindCmdSwitch('-IgnoreDelphi') then begin *************** *** 405,420 **** Item: TListItem; Selected: Boolean); begin ! if Selected then ! begin ! CheckTargetUpdates(Item.Data); ! Update_JVCL_INC_Config; ! CheckBoxClearJVCLPalette.Checked := SelTarget.ClearJVCLPalette; ! CheckBoxBuild.Checked := SelTarget.Build; ! CheckBoxDeveloperInstall.Checked := SelTarget.DeveloperInstall; end; - UpdatePackageList; - CheckBoxClearJVCLPalette.Enabled := Selected; - CheckBoxBuild.Enabled := Selected; - CheckBoxDeveloperInstall.Enabled := Selected; end; --- 389,423 ---- Item: TListItem; Selected: Boolean); begin ! Inc(FLockOptClick); ! try ! CheckBoxClearJVCLPalette.Enabled := Selected; ! CheckBoxBuild.Enabled := Selected; ! CheckBoxDeveloperInstall.Enabled := Selected; ! CheckBoxInstallJcl.Enabled := Selected; ! if Selected then ! begin ! CheckTargetUpdates(Item.Data); ! Update_JVCL_INC_Config; ! CheckBoxClearJVCLPalette.Checked := SelTarget.ClearJVCLPalette; ! CheckBoxBuild.Checked := SelTarget.Build; ! CheckBoxDeveloperInstall.Checked := SelTarget.DeveloperInstall; ! CheckBoxInstallJcl.Checked := SelTarget.InstallJcl; ! if (SelTarget.IsJCLInstalled) and (SelTarget.IsOldJVCLInstalled = 0) then ! CheckBoxInstallJcl.Font.Style := [] ! else ! CheckBoxInstallJcl.Font.Style := [fsBold]; ! end ! else ! begin ! CheckBoxClearJVCLPalette.Checked := False; ! CheckBoxBuild.Checked := False; ! CheckBoxDeveloperInstall.Checked := False; ! CheckBoxInstallJcl.Checked := False; ! CheckBoxInstallJcl.Font.Style := [] ! end; ! UpdatePackageList; ! finally ! Dec(FLockOptClick); end; end; *************** *** 484,487 **** --- 487,497 ---- Exit; end; + if (not TTargetInfo(Item.Data).IsJCLInstalled) and (JCLDir = '') then + begin + if not FInFillingList then + MessageDlg('JCL is not installed for this target and no JCL directory available.'#10 + + 'Please install the newest JCL or download it to $(JVCL)\..\JCL', mtWarning, [mbOk], 0); + Item.Checked := False; + end; end; TTargetInfo(Item.Data).CompileFor := Item.Checked; *************** *** 505,508 **** --- 515,519 ---- procedure TFormMain.CheckBoxClearJVCLPaletteClick(Sender: TObject); begin + if FLockOptClick > 0 then Exit; if SelTarget <> nil then begin *************** *** 510,513 **** --- 521,525 ---- SelTarget.Build := CheckBoxBuild.Checked; SelTarget.DeveloperInstall := CheckBoxDeveloperInstall.Checked; + SelTarget.InstallJcl := CheckBoxInstallJcl.Checked; end; end; *************** *** 631,634 **** --- 643,656 ---- end; UpdatePackageCheckStates; + end; + + procedure TFormMain.LblVersionsClick(Sender: TObject); + begin + ListViewTargets.SetFocus; + end; + + procedure TFormMain.LblPackagesClick(Sender: TObject); + begin + ListViewPackages.SetFocus; end; Index: FrmMake.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/install/JVCL3Install/FrmMake.pas,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** FrmMake.pas 30 Nov 2003 00:20:18 -0000 1.1 --- FrmMake.pas 30 Nov 2003 21:02:48 -0000 1.2 *************** *** 17,21 **** Contributor(s): - ! Last Modified: 2003-11-28 You may retrieve the latest version of this file at the Project JEDI's JVCL home page, --- 17,21 ---- Contributor(s): - ! Last Modified: 2003-11-30 You may retrieve the latest version of this file at the Project JEDI's JVCL home page, *************** *** 31,34 **** --- 31,38 ---- {$WARN UNSAFE_CODE OFF} {$WARN UNSAFE_CAST OFF} + {$WARN UNIT_PLATFORM OFF} + {$ENDIF} + {$IFDEF VER140} + {$WARN UNIT_PLATFORM OFF} {$ENDIF} *************** *** 78,81 **** --- 82,90 ---- {$R *.dfm} + {const + JclDccOptions = // -LN, -LE are not possible because they are overwritten + '-I"' + JclIncludePaths + '" ' + // see BuildHelpers + '-U"' + JclUnitPaths + '"';} + function Has(Text: string; const Values: array of string): Boolean; var *************** *** 98,101 **** --- 107,111 ---- FCurLine: string; FMaxPackages: Integer; + FException: Exception; function GetAborted: Boolean; *************** *** 112,115 **** --- 122,128 ---- procedure InitPkgProgressBar; procedure IncPkgProgressBar; + function CompilePackageGroup(const BpgFilename, IncludePaths, + UnitPaths, SourcePaths, OutDir, LibOutDir: string; + IsJcl: Boolean): Boolean; protected procedure Execute; override; *************** *** 181,185 **** FormMake.MemoLog.SelLength := 0; end ! else if Has(FCurLine, ['hint: ', 'hinweis: ', 'suggérer: ']) then begin FormMake.MemoLog.SelStart := FormMake.MemoLog.SelStart - Length(FCurLine) - 2; --- 194,198 ---- FormMake.MemoLog.SelLength := 0; end ! else if Has(FCurLine, ['hint: ', 'hinweis: ', 'suggestion: ']) then begin FormMake.MemoLog.SelStart := FormMake.MemoLog.SelStart - Length(FCurLine) - 2; *************** *** 214,218 **** procedure TMakeThread.ExceptionError; begin ! Application.HandleException(Self); end; --- 227,238 ---- procedure TMakeThread.ExceptionError; begin ! FCurLine := ''; ! UpdateCurLine; ! FCurLine := '---------------------------------------------------------------'; ! UpdateCurLine; ! FCurLine := Format('JVCL 3 Package Installer: Exception: [%s] %s', ! [Exception(FException).ClassName, Exception(FException).Message]); ! UpdateCurLine; ! Application.ShowException(FException); end; *************** *** 222,283 **** if Terminated then Exit; try ! for i := 0 to TargetList.Count - 1 do ! begin ! FTarget := TargetList[i]; ! if FTarget.CompileFor then begin ! FAction := 'Compiling packages...'; ! Synchronize(UpdateTarget); ! FError := not MakeTarget; ! if (not FError) and (not Aborted) then begin ! FAction := 'Installing packages...'; ! Synchronize(UpdateAction); ! FTarget.RegistryInstall; ! Synchronize(IncTargetProgress); end; end; - FTarget := nil; - if (Aborted) or (FError) then - Break; - end; - except - on E: Exception do - begin - FError := True; - Synchronize(ExceptionError); end; end; - Terminate; - Synchronize(Finished); end; ! function TMakeThread.MakeTarget: Boolean; var PrepareBpgData: TPrepareBpgData; begin ! Result := False; ! if Aborted then Exit; // create make file ! PrepareBpgData := PrepareBpg(JVCLPackageDir + '\' + FTarget.BpgName, ! FTarget.SearchPaths, FTarget.LibDir, FTarget.BplDir, FTarget.DcpDir); try FMaxPackages := PrepareBpgData.Make.Projects.Count; Synchronize(InitPkgProgressBar); ! if FTarget.Build then ! SetEnvironmentVariable('DCCOPT', '-B') ! else ! SetEnvironmentVariable('DCCOPT', nil); ! ! SetEnvironmentVariable('ROOT', PChar(FTarget.RootDir)); ! SetEnvironmentVariable('DCPDIR', Pointer(FTarget.DcpDir)); ! SetEnvironmentVariable('BPLDIR', Pointer(FTarget.BplDir)); ! Result := CaptureExecute('"' + FTarget.RootDir + '\Bin\make.exe"', '-f"' + ChangeFileExt(FTarget.BpgName, '.mak') + '"', JVCLPackageDir, CaptureLine) = 0; finally PrepareBpgData.Cleaning := Result; PrepareBpgData.Free; end; end; --- 242,419 ---- if Terminated then Exit; try ! try ! for i := 0 to TargetList.Count - 1 do begin ! FTarget := TargetList[i]; ! if FTarget.CompileFor then begin ! FAction := 'Compiling packages...'; ! Synchronize(UpdateTarget); ! FError := not MakeTarget; ! if (not FError) and (not Aborted) then ! begin ! FAction := 'Installing packages...'; ! Synchronize(UpdateAction); ! FTarget.RegistryInstall; ! Synchronize(IncTargetProgress); ! end; end; + FTarget := nil; + if (Aborted) or (FError) then + Break; + end; + except + on E: Exception do + begin + FException := E; + FError := True; + Synchronize(ExceptionError); end; end; + finally + Terminate; + Synchronize(Finished); end; end; ! function TMakeThread.CompilePackageGroup(const BpgFilename, IncludePaths, ! UnitPaths, SourcePaths, OutDir, LibOutDir: string; IsJcl: Boolean): Boolean; var PrepareBpgData: TPrepareBpgData; + Build, Options, DcpOptions, StartDir: string; + JclMakeFilename: string; + Files: TStrings; + PackageList: TPackageList; + i: Integer; begin ! Result := True; ! ! StartDir := ExtractFileDir(BpgFilename); ! if FTarget.Build then Build := '-B ' else Build := ''; ! ! Options := Build; ! if IncludePaths <> '' then Options := Options + Format('-I"%s" ', [IncludePaths]); ! if UnitPaths <> '' then Options := Options + Format('-U"%s" ', [UnitPaths]); ! if OutDir <> '' then Options := Options + Format('-N"%s" ', [OutDir]); ! ! DcpOptions := Options; ! // Add source paths to "Options" but not to "DcpOptions" ! if SourcePaths <> '' then Options := Options + Format('-U"%s" ', [SourcePaths]); ! ! SetEnvironmentVariable('DCCOPT', nil); // used by Delphi ! SetEnvironmentVariable('DCC32', nil); // used by BCB ! SetEnvironmentVariable('ROOT', PChar(FTarget.RootDir)); ! SetEnvironmentVariable('DCPDIR', Pointer(FTarget.DcpDir)); ! if FTarget.IsBCB then ! SetEnvironmentVariable('BPLDIR', PChar(FTarget.DcpDir)) // corrected by MoveBCBFiles ! else ! SetEnvironmentVariable('BPLDIR', Pointer(FTarget.BplDir)); ! ! ! if FTarget.IsDelphi then ! SetEnvironmentVariable('DCCOPT', Pointer(Options)) ! else ! SetEnvironmentVariable('DCC32', PChar('dcc32 -Q ' + Options)); ! // create make file ! PrepareBpgData := PrepareBpg(BpgFilename, FTarget); try FMaxPackages := PrepareBpgData.Make.Projects.Count; + if (FTarget.IsBCB) and (IsJcl) then FMaxPackages := FMaxPackages * 2; // include DCP creation steps Synchronize(InitPkgProgressBar); ! // compile ! Result := CaptureExecute('"' + FTarget.RootDir + '\Bin\make.exe"', ! Build + '-f"' + ChangeFileExt(BpgFilename, '.mak') + '"', StartDir, CaptureLine) = 0; + if FTarget.IsBCB then + MoveBCBFiles(LibOutDir, FTarget); // move .lib, .bpi to DcpDir, .bpl to BplDir and deletes .tds finally + SetEnvironmentVariable('DCCOPT', nil); + SetEnvironmentVariable('DCC32', nil); + PrepareBpgData.Cleaning := Result; PrepareBpgData.Free; end; + + if (Result) and (FTarget.IsBCB) and IsJcl then + begin + // ***** + // C++BUILDER .dcp creation + // ***** + // create Delphi packages for BCB .dcp compilation + Files := TStringList.Create; // files that were created + try + if IsJcl then + PackageList := CreateJclPackageList(FTarget) + else + PackageList := FTarget.Packages; // WRONG. contains only design-time packages and have generic names instead of BCB x.0 names + try + for i := 0 to PackageList.Count - 1 do + CreateDelphiPackageForBCB(PackageList[i], Files, IsJcl); + finally + if isJcl then + PackageList.Free; + end; + + JclMakeFilename := ChangeFileExt(BpgFilename, '') + 'dcp.mak'; + // create make file + PrepareBpgData := PrepareDcpBpg(JclMakeFilename, Files, FTarget, IsJcl); + try + PrepareBpgData.CreatedFiles.AddStrings(Files); + SetEnvironmentVariable('DCCOPT', Pointer(DcpOptions)); + + // compile + Result := CaptureExecute('"' + FTarget.RootDir + '\Bin\make.exe"', + ... [truncated message content] |