Sign in Join

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

Mailing lists / fpc-pascal / 2016-04

Is there a FPC symbol or define for the binary output filename?

1 message · 1 person ·

Reply by email Subscribe to this list Your subscription

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

Paul Michell

Hello All,

I'm writing a library that needs to be used as statically linked units in an application and also as a stand alone dll/so for use from other software. The library needs to know where its binary file is loaded on the host system. The following code in the main unit's Initialization section does what I need for Windows and Linux, but I would like to avoid having to hard code the compiled binary name into the source. Is there any system symbol or define I could use as a place-holder for the output filename? I would like to be able to replace 'libgiq' with something like {$i %FPCVERSION%} so that I don't need to remember to edit the library when re-using it in other projects. Also is there a better way to retrieve this information on Linux?

Thanks,

Paul

--------------------------------------------

{$IFDEF WINDOWS}
DataFolder :=
IncludeTrailingPathDelimiter(ExtractFilePath(GetModuleName(HInstance)));
{$ELSE}
If IsLibrary Then
   Begin
     AssignFile(DataFile, '/proc/self/maps');
     Try
       Reset(DataFile);
       While Not EOF(DataFile) Do
         Begin
           readln(DataFile, MapText);
           If Pos('libgiq', MapText)0 Then
             Begin
               DataFolder := ExtractFilePath(Copy(MapText,
LastDelimiter(' ',MapText)+1, Length(MapText)));
               Exit;
             End;
         End;
       CloseFile(DataFile);
     Except
       On E: EInOutError Do
         writeln('File handling error: ', E.Message);
     End;
   End
Else
   DataFolder := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)));
{$ENDIF}