From bd6d1e0b6ae443c0307cd587c1a9a5f765e6ff82 Mon Sep 17 00:00:00 2001
From: svenbarth <pascaldragon@googlemail.com>
Date: Wed, 12 Aug 2020 19:07:18 +0000
Subject: [PATCH] * do not automatically register the RC reader, because it
 captures any file, instead handle that in fpcres itself if the output format
 calls for it

git-svn-id: trunk@46395 -
---
 packages/fcl-res/src/rcreader.pp |  3 ++-
 utils/fpcres/fpcres.pas          |  1 +
 utils/fpcres/sourcehandler.pas   | 17 ++++++++++++-----
 3 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/packages/fcl-res/src/rcreader.pp b/packages/fcl-res/src/rcreader.pp
index 8f17be033e..d63b35f0b9 100644
--- a/packages/fcl-res/src/rcreader.pp
+++ b/packages/fcl-res/src/rcreader.pp
@@ -127,6 +127,7 @@ begin
 end;
 
 initialization
-  TResources.RegisterReader('.rc',TRCResourceReader);
+  { don't register automatically, as this is essentially a "catch all" }
+  //TResources.RegisterReader('.rc',TRCResourceReader);
 
 end.
diff --git a/utils/fpcres/fpcres.pas b/utils/fpcres/fpcres.pas
index 06f8dfe63c..d822729e49 100644
--- a/utils/fpcres/fpcres.pas
+++ b/utils/fpcres/fpcres.pas
@@ -218,6 +218,7 @@ begin
   sourcefiles.FileList.AddStrings(params.InputFiles);
   sourcefiles.RCDefines.AddStrings(params.RCDefines);
   sourcefiles.RCIncludeDirs.AddStrings(params.RCIncludeDirs);
+  sourcefiles.RCMode:=CurrentTarget.objformat=ofRes;
   try
     sourcefiles.Load(resources);
   except
diff --git a/utils/fpcres/sourcehandler.pas b/utils/fpcres/sourcehandler.pas
index cd488f6f28..568391b187 100644
--- a/utils/fpcres/sourcehandler.pas
+++ b/utils/fpcres/sourcehandler.pas
@@ -39,6 +39,7 @@ type
     fRCIncludeDirs: TStringList;
     fRCDefines: TStringList;
     fStreamList : TFPList;
+    fRCMode: Boolean;
   public
     constructor Create;
     destructor Destroy; override;
@@ -46,6 +47,7 @@ type
     property FileList : TStringList read fFileList;
     property RCIncludeDirs: TStringList read fRCIncludeDirs;
     property RCDefines: TStringList read fRCDefines;
+    property RCMode: Boolean read fRCMode write fRCMode;
   end;
   
 implementation
@@ -61,6 +63,7 @@ begin
   fStreamList:=TFPList.Create;
   fRCDefines:= TStringList.Create;
   fRCIncludeDirs:= TStringList.Create;
+  fRCMode:=False;
 end;
 
 destructor TSourceFiles.Destroy;
@@ -92,11 +95,15 @@ begin
         raise ECantOpenFileException.Create(fFileList[i]);
       end;
       fStreamList.Add(aStream);
-      try
-        aReader:=TResources.FindReader(aStream);
-      except
-        raise EUnknownInputFormatException.Create(fFileList[i]);
-      end;
+      { the RC reader reads anything, so handle that separately }
+      if fRCMode then
+        aReader:=TRCResourceReader.Create
+      else
+        try
+          aReader:=TResources.FindReader(aStream);
+        except
+          raise EUnknownInputFormatException.Create(fFileList[i]);
+        end;
       Messages.DoVerbose(Format('Chosen reader: %s',[aReader.Description]));
       try
         Messages.DoVerbose('Reading resource information...');