Componentes.Terceros.jvcl/official/3.32/devtools/InstallerTests/DelphiPkgInstaller/Configuration.pas

162 lines
4.7 KiB
ObjectPascal

unit Configuration;
interface
uses
SysUtils, Classes, Contnrs, IniFiles, Registry, Dialogs, DelphiData;
type
TVersion = (d0, d5, d6, d7, d9, d9net);
const
VersionNames: array[TVersion] of string = (
'', 'Delphi 5.0', 'Delphi 6.0', 'Delphi 7.0', 'Delphi 2005', 'Delphi 2005'
);
type
TConfig = class(TObject)
private
FTitle: string;
FDefaultInstallDir: string;
FDefaultBplDir: string;
FLibraryPaths: TStrings;
FVersion: TVersion;
FVersionStr: string;
FInstallDir: string;
FBplDir: string;
FTarget: TCompileTarget;
FWizardPicture: string;
FWelcomePicture: string;
FStartupPicture: string;
public
constructor Create;
destructor Destroy; override;
procedure LoadFromFile(const Filename: string);
property Title: string read FTitle;
property DefaultInstallDir: string read FDefaultInstallDir;
property DefaultBplDir: string read FDefaultBplDir;
property LibraryPaths: TStrings read FLibraryPaths;
property Version: TVersion read FVersion;
property VersionStr: string read FVersionStr; // 'd5', 'd6', ...
property InstallDir: string read FInstallDir write FInstallDir;
property BplDir: string read FBplDir write FBplDir;
property Target: TCompileTarget read FTarget;
property WizardPicture: string read FWizardPicture;
property WelcomePicture: string read FWelcomePicture;
property StartupPicture: string read FStartupPicture;
end;
var
Config: TConfig;
function CheckValidDelphiInstallation: Boolean;
function ResolveDirectory(const Dir: string; ResolveInternals: Boolean = True): string;
var
CompilerList: TCompileTargetList;
implementation
function CheckValidDelphiInstallation: Boolean;
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Result := Reg.OpenKeyReadOnly(Config.Target.RegistryKey + '\Library');
finally
Reg.Free;
end;
end;
function ResolveDirectory(const Dir: string; ResolveInternals: Boolean = True): string;
begin
Result := Dir;
if ResolveInternals then
begin
Result := StringReplace(Result, '$(INSTALLDIR)', Config.InstallDir, [rfIgnoreCase]);
Result := StringReplace(Result, '$(INSTALLBPLDIR)', Config.BplDir, [rfIgnoreCase]);
end;
Result := StringReplace(Result, '$(ROOT)', Config.Target.RootDir, [rfIgnoreCase]);
Result := StringReplace(Result, '$(ROOTDIR)', Config.Target.RootDir, [rfIgnoreCase]);
Result := StringReplace(Result, '$(BDSPROJECTDIR)', Config.Target.BDSProjectsDir, [rfIgnoreCase]);
Result := StringReplace(Result, '$(PROJECTDIR)', Config.Target.ProjectDir, [rfIgnoreCase]);
Result := StringReplace(Result, '$(BPLDIR)', Config.Target.BplDir, [rfIgnoreCase]);
Result := Config.Target.ExpandDirMacros(Result);
end;
{ TConfig }
constructor TConfig.Create;
begin
inherited Create;
FLibraryPaths := TStringList.Create;
end;
destructor TConfig.Destroy;
begin
FLibraryPaths.Free;
inherited Destroy;
end;
procedure TConfig.LoadFromFile(const Filename: string);
var
Ini: TMemIniFile;
i: Integer;
begin
FLibraryPaths.Clear;
Ini := TMemIniFile.Create(Filename);
try
FTitle := Trim(Ini.ReadString('Installer', 'Title', ''));
FWizardPicture := Trim(Ini.ReadString('Installer', 'WizardPicture', ''));
FWelcomePicture := Trim(Ini.ReadString('Installer', 'WelcomePicture', ''));
FStartupPicture := Trim(Ini.ReadString('Installer', 'StartupPicture', ''));
FDefaultInstallDir := Trim(Ini.ReadString('Installer', 'DefaultInstallDir', '$(ROOTDIR)\Packages\JVCL'));
FDefaultBplDir := Trim(Ini.ReadString('Installer', 'DefaultBplDir', '$(Package DPL Output)'));
FVersion := d0;
FVersionStr := Trim(Ini.ReadString('Installer', 'Version', ''));
if SameText(FVersionStr, 'd5') then FVersion := d5
else if SameText(FVersionStr, 'd6') then FVersion := d6
else if SameText(FVersionStr, 'd7') then FVersion := d7
else if SameText(FVersionStr, 'd9') then FVersion := d9
else if SameText(FVersionStr, 'd9net') then FVersion := d9net;
Ini.ReadSectionValues('LibraryPaths', FLibraryPaths);
finally
Ini.Free;
end;
for i := 0 to CompilerList.Count - 1 do
if CompilerList[i].Name + ' ' + CompilerList[i].VersionStr = VersionNames[Config.Version] then
begin
FTarget := CompilerList[i];
Break;
end;
if FTarget <> nil then
begin
FBplDir := ResolveDirectory(FDefaultBplDir, False);
FInstallDir := ResolveDirectory(FDefaultInstallDir, False);
end;
end;
initialization
Config := TConfig.Create;
CompilerList := TCompileTargetList.Create;
Config.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Config\config.ini');
finalization
Config.Free;
end.