ide: fix project resources generation:

- generate for the temp projects
  - generate all resources in the project directory for now because fpc can't search in $R in other directories (there is only one line of code which needs to be changed to save in the output directory)

git-svn-id: trunk@22854 -
This commit is contained in:
paul 2009-11-28 16:50:20 +00:00
parent e97ed5a1c9
commit 55b9380fff
3 changed files with 45 additions and 40 deletions

View File

@ -9981,13 +9981,8 @@ begin
if not (Result in [mrOk,mrIgnore]) then exit;
end;
// create manifest
if Project1.Resources.XPManifest.UseManifest and (Project1.MainUnitID>=0)
and Project1.Resources.XPManifest.NeedManifest(Project1.Resources)
then begin
Result:=Project1.Resources.XPManifest.CreateManifestFile(TargetExeName);
if not (Result in [mrOk,mrIgnore]) then exit;
end;
if not Project1.Resources.Regenerate(Project1.MainFilename, False, True, TargetExeDirectory) then
Exit;
// execute compilation tool 'Before'
if not (pbfSkipTools in Flags) then begin

View File

@ -65,7 +65,7 @@ type
FXPManifest: TProjectXPManifest;
FProjectIcon: TProjectIcon;
procedure SetFileNames(const MainFileName: String);
procedure SetFileNames(const MainFileName, TestDir: String);
procedure SetModified(const AValue: Boolean);
procedure EmbeddedObjectModified(Sender: TObject);
function Update: Boolean;
@ -109,10 +109,23 @@ const
{ TProjectResources }
procedure TProjectResources.SetFileNames(const MainFileName: String);
procedure TProjectResources.SetFileNames(const MainFileName, TestDir: String);
begin
rcFileName := ChangeFileExt(MainFileName, '.rc');
lrsFileName := ChangeFileExt(MainFileName, '.lrs');
// rc is in the exectable dir
//rcFileName := TestDir + ExtractFileNameOnly(MainFileName) + '.rc';
// rc is in the project dir for now because {$R project1.rc} searches only in unit dir
// lrs is in the project dir also
if FileNameIsAbsolute(MainFileName) then
begin
rcFileName := ChangeFileExt(MainFileName, '.rc');
lrsFileName := ChangeFileExt(MainFileName, '.lrs');
end
else
begin
rcFileName := TestDir + ExtractFileNameOnly(MainFileName) + '.rc';
lrsFileName := TestDir + ExtractFileNameOnly(MainFileName) + '.lrs';
end;
end;
procedure TProjectResources.SetModified(const AValue: Boolean);
@ -241,7 +254,7 @@ begin
// remember old codebuffer filenames
LastrcFilename := rcFileName;
LastLrsFileName := lrsFileName;
SetFileNames(MainFileName);
SetFileNames(MainFileName, SaveToTestDir);
UpdateFlagLrsIncludeAllowed(MainFileName);
@ -342,7 +355,7 @@ begin
CodeBuf := CodeToolBoss.LoadFile(AFilename, False, False);
if CodeBuf <> nil then
begin
SetFileNames(AFileName);
SetFileNames(AFileName, '');
Filename := ExtractFileName(rcFileName);
//debugln(['TProjectResources.UpdateMainSourceFile HasSystemResources=',HasSystemResources,' Filename=',Filename,' HasLazarusResources=',HasLazarusResources]);
@ -479,10 +492,10 @@ begin
LastRcFilename := rcFileName;
LastLrsFileName := lrsFileName;
try
SetFileNames(CurFileName);
SetFileNames(CurFileName, '');
oldRcFilename := ExtractFileName(rcFileName);
oldLrsFileName := ExtractFileName(lrsFileName);
SetFileNames(NewFileName);
SetFileNames(NewFileName, '');
newRcFilename := ExtractFileName(rcFileName);
newLrsFileName := ExtractFileName(lrsFileName);

View File

@ -52,7 +52,7 @@ type
procedure SetUseManifest(const AValue: boolean);
public
function UpdateResources(AResources: TAbstractProjectResources; const MainFilename: string): Boolean; override;
function CreateManifestFile(ExeFilename: string): TModalResult;
function CreateManifestFile: Boolean;
function NeedManifest(AResources: TAbstractProjectResources): boolean;
property UseManifest: boolean read FUseManifest write SetUseManifest;
@ -89,7 +89,7 @@ const
procedure TProjectXPManifest.SetFileNames(const MainFilename: string);
begin
FManifestName := ExtractFileNameOnly(MainFilename)+'.manifest';
FManifestName := ChangeFileExt(MainFilename, '.manifest');
end;
procedure TProjectXPManifest.SetUseManifest(const AValue: boolean);
@ -109,42 +109,39 @@ begin
SetFileNames(MainFilename);
AResources.AddSystemResource(sManifest + ' "' + ManifestName + '"');
Result:=true;
AResources.AddSystemResource(sManifest + ' "' + ExtractFileName(ManifestName) + '"');
Result := CreateManifestFile;
end;
function TProjectXPManifest.CreateManifestFile(ExeFilename: string): TModalResult;
function TProjectXPManifest.CreateManifestFile: Boolean;
var
ManifestFileName: String;
Code: TCodeBuffer;
begin
Result := mrCancel;
if not FilenameIsAbsolute(ExeFilename) then exit(mrOk);
ManifestFileName:=ChangeFileExt(ExeFilename,'.manifest');
Result := False;
if not FilenameIsAbsolute(ManifestName) then exit(True);
// check if manifest file is uptodate
// (needed for readonly files and for version control systems)
Code:=CodeToolBoss.LoadFile(ManifestFileName,true,true);
if (Code<>nil) and (Code.Source=sManifestFileData) then exit(mrOk);
Code:=CodeToolBoss.LoadFile(ManifestName, True, True);
if (Code <> nil) and (Code.Source = sManifestFileData) then exit(True);
// save
if Code=nil then
Code:=CodeToolBoss.CreateFile(ManifestFileName);
Code.Source:=sManifestFileData;
Result:=SaveCodeBuffer(Code);
if Code = nil then
Code := CodeToolBoss.CreateFile(ManifestName);
Code.Source := sManifestFileData;
Result := SaveCodeBuffer(Code) = mrOk;
end;
function TProjectXPManifest.NeedManifest(AResources: TAbstractProjectResources
): boolean;
function TProjectXPManifest.NeedManifest(AResources: TAbstractProjectResources): boolean;
var
TargetOS: String;
begin
Result:=false;
if not UseManifest then exit;
if AResources.Project=nil then exit;
TargetOS:=AResources.Project.LazCompilerOptions.TargetOS;
if (TargetOS='') or (TargetOS='default') then
TargetOS:=GetDefaultTargetOS;
if (TargetOS<>'win32') and (TargetOS<>'win64') then exit;
Result:=true;
Result := False;
if not UseManifest then Exit;
if AResources.Project = nil then Exit;
TargetOS := AResources.Project.LazCompilerOptions.TargetOS;
if (TargetOS = '') or (TargetOS = 'default') then
TargetOS := GetDefaultTargetOS;
if (TargetOS <> 'win32') and (TargetOS <> 'win64') then Exit;
Result := True;
end;