[fpc-pascal] Use environment variables in configuration file?
hinst
hinstance at yandex.ru
Wed Jan 29 15:43:19 CET 2014
29.01.2014, 14:36, "Michael Van Canneyt" <michael at freepascal.org>:
> On Wed, 29 Jan 2014, Michael Van Canneyt wrote:
>
>> On Wed, 29 Jan 2014, hinst wrote:
>>> I want to use an environment variable in FPC configuration file; is this
>>> not possible?
>>> I created sample project which demonstrates the problem. I have one main
>>> source file and one unit which is located
>>> in subdirectory.
>>> I try to compile my program with this bash script:
>>>
>>> It looks like FPC does not substitute $mvar with meow. It does not compile
>>> my program.
>>> However if I change options variable to this:
>>> options="@cfg.txt -Mobjfpc pro.pas -Fu$mvar"
>>> Then my program gets compiled successfully.
>> Obviously, since the bash interpreter takes care of substitution, FPC never
>> sees $mvar.
>>> It means that:
>>> If I put -Fu$mvar in config file then it does not work
>>> If I put -Fu$mvar in bash script then it does work
>>>
>>> Which is strange because in standard config file fpc.cfg I can find not
>>> only built-in variables like $FPCVERSION but
>>> also environment variables like $LOCAL_APPDATA
>>>
>>> Examples:
>>> -FuD:\Lazarus\fpc\$FPCVERSION/units/$fpctarget/httpd22
>>> -Fu$LOCAL_APPDATA\FreePascal\fppkg/units/$FPCTARGET/*
>>> This I do not understand. How come that FPC when reading config file
>>> understands $LOCAL_APPDATA, but does not
>>> substitute variable I specified $mvar
>> Because there are several standard "placeholders" that FPC understands in the
>> config file. These placeholders start with $.
>> They are not environment variables, despite the notation with $.
>
> See globals.pas
>
> ReplaceSpecialFolder('$LOCAL_APPDATA',CSIDL_LOCAL_APPDATA);
> ReplaceSpecialFolder('$APPDATA',CSIDL_APPDATA);
> ReplaceSpecialFolder('$COMMON_APPDATA',CSIDL_COMMON_APPDATA);
> ReplaceSpecialFolder('$PERSONAL',CSIDL_PERSONAL);
> ReplaceSpecialFolder('$PROGRAM_FILES',CSIDL_PROGRAM_FILES);
> ReplaceSpecialFolder('$PROGRAM_FILES_COMMON',CSIDL_PROGRAM_FILES_COMMON);
> ReplaceSpecialFolder('$PROFILE',CSIDL_PROFILE);
>
> Is the standard list on Windows.
>
> And looking a bit further, I just see that you CAN do environment variables,
> if you enclose them in $$, so $mvar$ would do the trick.
>
> Michael.
Thanks! it worked
More information about the fpc-pascal
mailing list