lazbuild: create project unit directory, target directory and application bundle

git-svn-id: trunk@27872 -
This commit is contained in:
mattias 2010-10-26 07:53:40 +00:00
parent fa11cf2dab
commit 89a235667f

View File

@ -32,7 +32,7 @@ uses
// IDEIntf // IDEIntf
MacroIntf, PackageIntf, IDEDialogs, ProjectIntf, IDEExternToolIntf, MacroIntf, PackageIntf, IDEDialogs, ProjectIntf, IDEExternToolIntf,
// IDE // IDE
IDEProcs, InitialSetupDlgs, OutputFilter, CompilerOptions, IDEProcs, InitialSetupDlgs, OutputFilter, CompilerOptions, ApplicationBundle,
TransferMacros, EnvironmentOpts, IDETranslations, LazarusIDEStrConsts, TransferMacros, EnvironmentOpts, IDETranslations, LazarusIDEStrConsts,
MiscOptions, Project, LazConf, PackageDefs, PackageLinks, PackageSystem, MiscOptions, Project, LazConf, PackageDefs, PackageLinks, PackageSystem,
BuildLazDialog, BuildManager, BaseBuildManager; BuildLazDialog, BuildManager, BaseBuildManager;
@ -595,6 +595,9 @@ var
CompilerParams: String; CompilerParams: String;
ToolBefore: TProjectCompilationToolOptions; ToolBefore: TProjectCompilationToolOptions;
ToolAfter: TProjectCompilationToolOptions; ToolAfter: TProjectCompilationToolOptions;
UnitOutputDirectory: String;
TargetExeName: String;
TargetExeDir: String;
begin begin
Result:=false; Result:=false;
CloseProject(Project1); CloseProject(Project1);
@ -636,13 +639,35 @@ begin
WorkingDir:=Project1.ProjectDirectory; WorkingDir:=Project1.ProjectDirectory;
SrcFilename:=CreateRelativePath(Project1.MainUnitInfo.Filename,WorkingDir); SrcFilename:=CreateRelativePath(Project1.MainUnitInfo.Filename,WorkingDir);
// create unit output directory
UnitOutputDirectory:=Project1.CompilerOptions.GetUnitOutPath(false);
if not ForceDirectoriesUTF8(UnitOutputDirectory) then
Error(ErrorBuildFailed,'Unable to create project unit output directory '+UnitOutputDirectory);
// create target output directory
TargetExeName := Project1.CompilerOptions.CreateTargetFilename(Project1.MainFilename);
TargetExeDir := ExtractFilePath(TargetExeName);
if not ForceDirectoriesUTF8(TargetExeDir) then
Error(ErrorBuildFailed,'Unable to create project target directory '+TargetExeDir);
// update all lrs files // update all lrs files
MainBuildBoss.UpdateProjectAutomaticFiles(''); MainBuildBoss.UpdateProjectAutomaticFiles('');
// create application bundle
if Project1.UseAppBundle and (Project1.MainUnitID>=0)
and (MainBuildBoss.GetLCLWidgetType(true)=LCLPlatformDirNames[lpCarbon])
then begin
if not (CreateApplicationBundle(TargetExeName, Project1.Title) in [mrOk,mrIgnore]) then
Error(ErrorBuildFailed,'Unable to create application bundle for '+TargetExeName);
if not (CreateAppBundleSymbolicLink(TargetExeName) in [mrOk,mrIgnore]) then
Error(ErrorBuildFailed,'Unable to create application bundle symbolic link for '+TargetExeName);
end;
// regenerate resources // regenerate resources
if not Project1.Resources.Regenerate(SrcFileName, False, True, '') then if not Project1.Resources.Regenerate(SrcFileName, False, True, '') then
DebugLn('TMainIDE.DoSaveProject Project1.Resources.Regenerate failed'); DebugLn('TMainIDE.DoSaveProject Project1.Resources.Regenerate failed');
// get compiler parameters
if CompilerOverride <> '' then if CompilerOverride <> '' then
CompilerFilename := CompilerOverride CompilerFilename := CompilerOverride
else else