Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-devel / 2016-11

Error seeking resources when copiling with {$R *.res}

5 messages · 3 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

NetSpirit

CONDITIONS
Unit file contains {$R *.res} directive. File *.res exists in the same directory where *.pp file for unit exists.
Compiled units resides in subdirectory, for example called 'units' (-FU command line switch).

DESCRIPTION
When project with such unit compiled first time - all work as expected. Compiled *.ppu files goes to 'units', resulting binary created.

On the second and next compilations we encounter en error: "Error: Can't open file 'D:\projectpath\units\Unit1.res'".

This error is a result of searching *.res in a directory where compiled units exists, but not in a directory where unit source file resided.

FPC VERSION: FPC 3.0.0, precompiled binaries for win32, win64 OS: Windows

TEST PROJECT:
Demo project for this bug in attach or download here: http://rgho.st/8GRBWVWcM
(Extract all files to disk; correct path to your FPC in 'compile.bat'; run 'compile.bat' two times)

Reply by email

Thaddy de Koning
to NetSpirit

On Fri, 4 Nov 2016 11:46:24 +0200 (EEST)
{$R *.res} in ONLY allowed for the project file.
You should never try to link in a * resource in a unit, because the * resolves to the main project name.
Same as in Delphi.
If you need a resource in a unit, resolve the full name, like {$R myunit1.res}
The main *.res is available over all units in a project.

"NetSpirit"

Show quoted text 33 lines
CONDITIONS Unit file contains {$R *.res} directive. File *.res exists in the same directory where *.pp file for unit exists. Compiled units resides in subdirectory, for example called 'units' (-FU command line switch). DESCRIPTION When project with such unit compiled first time - all work as expected. Compiled *.ppu files goes to 'units', resulting binary created. On the second and next compilations we encounter en error: "Error: Can't open file 'D:\projectpath\units\Unit1.res'". This error is a result of searching *.res in a directory where compiled units exists, but not in a directory where unit source file resided. FPC VERSION: FPC 3.0.0, precompiled binaries for win32, win64 OS: Windows TEST PROJECT: Demo project for this bug in attach or download here: http://rgho.st/8GRBWVWcM (Extract all files to disk; correct path to your FPC in 'compile.bat'; run 'compile.bat' two times) _______________________________________________ fpc-devel maillist - http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply by email

C Western
to Thaddy de Koning

Is {$R *.res} handled differently to {$R *.lfm}?

(My projects have lots of {$R *.lfm}

Thaddy de Koning wrote 51 lines
On Fri, 4 Nov 2016 11:46:24 +0200 (EEST) {$R *.res} in ONLY allowed for the project file. You should never try to link in a * resource in a unit, because the * resolves to the main project name. Same as in Delphi. If you need a resource in a unit, resolve the full name, like {$R myunit1.res} The main *.res is available over all units in a project. "NetSpirit" wrote: > CONDITIONS > Unit file contains {$R *.res} directive. File *.res exists in the same > directory where *.pp file for unit exists. > Compiled units resides in subdirectory, for example called > 'units' (-FU command line switch). > > DESCRIPTION > When project with such unit compiled first time - all work as > expected. Compiled *.ppu files goes to 'units', resulting binary > created. > > On the second and next compilations we encounter en error: > "Error: Can't open file 'D:\projectpath\units\Unit1.res'". > > This error is a result of searching *.res in a directory where > compiled units exists, but not in a directory where unit source file > resided. > > FPC VERSION: FPC 3.0.0, precompiled binaries for win32, win64 > OS: Windows > > TEST PROJECT: > Demo project for this bug in attach or download here: > http://rgho.st/8GRBWVWcM > (Extract all files to disk; correct path to your FPC in > 'compile.bat'; run 'compile.bat' two times) > > > > > _______________________________________________ > fpc-devel maillist - > http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel _______________________________________________ fpc-devel maillist - http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply by email

NetSpirit
to Thaddy de Koning: On Fri, 4 Nov 2016 11:46:24 +0200 (EEST) {$R *.res} in ONLY allowed for the project file.…

I am supply {$R *.res} only as generic example. With an {$R filename.res} the same problem.

I know this cases when compiling project:
1) Units available only in *.ppu/*.o (etc., compiled units). == Resource, linked by {$R} in these units must be searched relative to these compiled units.
2) Available both - source *.pp and compiled *.ppu, but *.pp unmodified, so used *.ppu for linking.
== a) Resource, linked by {$R} in these units must be searched relative to these compiled units.
== b) If not found - read source *.pp and search resource relative to this *.pp.
3) Available both - source *.pp and compiled *.ppu, but *.pp modified OR available only source *.pp and it recompiled.
== Resource, linked by {$R} in these units must be searched relative to *.pp.

In FPC 3.0.0 approach (1) and (2a) don't work, (2a) and (3) works partially - only the first compilation succeeded, when path's to *.res resolved by reading source *.pp files. The next compilations fails becouse *.res searched relative to *.ppu files, but we need put this *.res here manually. In previous versions there is no such behavior.

On Fri, 4 Nov 2016 11:46:24 +0200 (EEST) {$R *.res} in ONLY allowed for the project file. You should never try to link in a * resource in a unit, because the *

resolves to the main project name.

Same as in Delphi. If you need a resource in a unit, resolve the full name, like {$R

myunit1.res}

Show quoted text 8 lines
The main *.res is available over all units in a project. "NetSpirit" wrote: > CONDITIONS > Unit file contains {$R *.res} directive. File *.res exists in the same

directory where *.pp file for unit exists.

Show quoted text 9 lines
> Compiled units resides in subdirectory, for example called > 'units' (-FU command line switch). > DESCRIPTION > When project with such unit compiled first time - all work as > expected. Compiled *.ppu files goes to 'units', resulting binary created. > On the second and next compilations we encounter en error: > "Error: Can't open file 'D:\projectpath\units\Unit1.res'". > This error is a result of searching *.res in a directory where > compiled units exists, but not in a directory where unit source file

resided.

Show quoted text 12 lines
> FPC VERSION: FPC 3.0.0, precompiled binaries for win32, win64 > OS: Windows > TEST PROJECT: > Demo project for this bug in attach or download here: > http://rgho.st/8GRBWVWcM > (Extract all files to disk; correct path to your FPC in > 'compile.bat'; run 'compile.bat' two times) > _______________________________________________ > fpc-devel maillist - > http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply by email