program MakeVer;

{
  Makes INI-style version file from Delphi .dof file.

  Author:    Phil Hess.
  Copyright: Copyright (C) 2007 Phil Hess. All rights reserved.
  License:   Modified LGPL.
}

{$IFDEF FPC}
 {$MODE Delphi}
{$ELSE}
 {$APPTYPE CONSOLE}
{$ENDIF} 
{$R+,Q+}

uses
  SysUtils,
  Classes,
  IniFiles;
  
const
  ProgramName    = 'MakeVer';
  ProgramVersion = '0.02';
  
  DofFileExt     = '.dof';      {Delphi project options file extension}
  VerFileExt     = '.version';  {Linux/Mac version info file extension}
  
  VersionSection = 'Version Info Keys';

var
  DofFileName : string;
  VerFileName : string;
  DofIniFile  : TIniFile;
  VerIniFile  : TIniFile;
  VerStrList  : TStringList;
{$IFNDEF FPC}
  MatchFound  : TFilenameCaseMatch;
{$ENDIF}
  ItemNum     : Integer;

begin

  if ParamCount = 0 then  {List program useage?}
    begin
    WriteLn(ProgramName, ', version ', ProgramVersion,
            ' - makes INI-style version file from Delphi .dof file.');
    WriteLn('Usage: ', ProgramName, ' filename', DofFileExt);
    Halt;
    end;

   {Get name of Delphi project options file from command line}
  DofFileName := ParamStr(1);
  if ExtractFileExt(DofFileName) = '' then
    DofFileName := DofFileName + DofFileExt;
{$IFNDEF FPC}
  DofFileName := ExpandFileNameCase(DofFileName, MatchFound);
{$ELSE}
  DofFileName := ExpandFileName(DofFileName);
{$ENDIF}
    
  VerFileName := ChangeFileExt(DofFileName, VerFileExt);
  
  if not FileExists(DofFileName) then
    begin
    WriteLn(DofFileName, ' does not exist');
    Halt;
    end;
    
  DofIniFile := TIniFile.Create(DofFileName);
  VerStrList := TStringList.Create;
  DofIniFile.ReadSectionValues(VersionSection, VerStrList); {Load vers strings}
  VerIniFile := TIniFile.Create(VerFileName);
  for ItemNum := 0 to Pred(VerStrList.Count) do {Write to version file}
    begin
    VerIniFile.WriteString(VersionSection, VerStrList.Names[ItemNum],
                           VerStrList.Values[VerStrList.Names[ItemNum]]);
    end;    
  VerIniFile.UpdateFile;  {Save to file}
  VerIniFile.Free;
  DofIniFile.Free;    
  WriteLn(VerFileName, ' successfully created');

end.