{
* UFreePascalCompiler.pas
*
* Implements class that wraps the Free Pascal compiler. Controls compilation,
* processes compiler output and provides information about the compiler.
*
* v0.1 of 05 Mar 2005 - Original version.
* v0.2 of 20 Apr 2005 - Changed to use renamed IntfCompilers unit.
* v0.3 of 08 Jan 2006 - Major changes:
* - Revised signature of TFreePascalCompiler's Compile
* and DeleteObjFiles methods in line with changes to
* ICompiler.
* - Pushed up a lot of functionality common with
* TDelphiCompiler to TCompilerBase and made changes to
* reflect new relationship with base class.
* - Added support for user-defined and default command
* line switches.
* v0.4 of 09 Jan 2006 - Changed Clone method to call new CreateCopy
* constructor rather than doing copy itself.
* v1.0 of 24 May 2006 - Improved and corrected comments.
* - Removed unused unit reference.
* v1.1 of 24 Aug 2008 - Added Windows unit to enable inlining in Delphi 2006.
*
*
* ***** BEGIN LICENSE BLOCK *****
*
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The Original Code is UFreePascalCompiler.pas
*
* The Initial Developer of the Original Code is Peter Johnson
* (http://www.delphidabbler.com/).
*
* Portions created by the Initial Developer are Copyright (C) 2005-2008 Peter
* Johnson. All Rights Reserved.
*
* ***** END LICENSE BLOCK *****
}
unit UFreePascalCompiler;
interface
uses
// Project
IntfCommon, IntfCompilers, UCompilerBase;
type
{
TFreePascalCompiler:
Class that wraps the Free Pascal compiler. Controls compilation, processes
compiler output and provides information about the compiler.
}
TFreePascalCompiler = class(TCompilerBase,
IClonable, // can clone this object
ICompiler // this is a compiler
)
protected
{ IClonable }
function Clone: IInterface;
{Creates a new instance of the object that is an extact copy and returns
it.
@return Cloned object.
}
{ ICompiler method overrides }
function GetName: string; override;
{Provides the human readable name of the compiler.
@return Name of the compiler.
}
function GetID: TCompilerID; override;
{Provides the unique id of the compiler.
@return Compiler id.
}
function GetIDString: string; override;
{Provides a non-localisable string that identifies the compiler.
@return Compiler id string.
}
function GetDefaultSwitches: string; override;
{Returns default command line switches for compiler.
@return Switches separated by commas.
}
procedure DeleteObjFiles(const Path, Project: string); override;
{Deletes binary intermdiates files created during a compilation. Does
nothing if there has been no compilation.
@param Path [in] Path where project file is found.
@param Project [in] Name of project (source file)
}
end;
implementation
uses
// Delphi
SysUtils, Windows {for inlining},
// Project
UUtils;
resourcestring
// Name of compiler
sFreePascalName = 'Free Pascal';
{ TFreePascalCompiler }
function TFreePascalCompiler.Clone: IInterface;
{Creates a new instance of the object that is an extact copy and returns it.
@return Cloned object.
}
begin
Result := TFreePascalCompiler.CreateCopy(Self);
end;
procedure TFreePascalCompiler.DeleteObjFiles(const Path, Project: string);
{Deletes binary intermdiates files created during a compilation. Does
nothing if there has been no compilation.
@param Path [in] Path where project file is found.
@param Project [in] Name of project (source file)
}
begin
SysUtils.DeleteFile(DirToPath(Path) + ChangeFileExt(Project, '.o'));
SysUtils.DeleteFile(DirToPath(Path) + ChangeFileExt(Project, '.ppu'));
end;
function TFreePascalCompiler.GetDefaultSwitches: string;
{Returns default command line switches for compiler.
@return Switches separated by commas.
}
begin
Result := '-vew,' // emit error and warning messages
+ '-Mdelphi,' // compile in Delphi mode
+ '-Sghia,' // label/goto command,
// ANSI strings,
// C++ style inline
// Compile in Assert statements
+ '-Twin32,' // Windows 32 target
+ '-Ci'; // I/O checking
end;
function TFreePascalCompiler.GetID: TCompilerID;
{Provides the unique id of the compiler.
@return Compiler id.
}
begin
Result := ciFPC;
end;
function TFreePascalCompiler.GetIDString: string;
{Provides a non-localisable string that identifies the compiler.
@return Compiler id string.
}
begin
Result := 'FPC';
end;
function TFreePascalCompiler.GetName: string;
{Provides the human readable name of the compiler.
@return Name of the compiler.
}
begin
Result := sFreePascalName;
end;
end.