162 lines
4.7 KiB
ObjectPascal
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.
|