[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