mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-11-04 02:40:00 +01:00 
			
		
		
		
	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:
		
							parent
							
								
									e97ed5a1c9
								
							
						
					
					
						commit
						55b9380fff
					
				@ -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
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user