~/.octaverc overwrites OCTAVE_PATH!!

Ben Abbott bpabbott at mac.com
Mon Dec 22 22:15:25 CST 2008


On Dec 22, 2008, at 5:34 PM, Rosen Diankov wrote:

>
> 2008/12/22 Ben Abbott <bpabbott at mac.com>:
>>
>> On Dec 22, 2008, at 1:37 PM, Rosen Diankov wrote:
>>>
>>> 2008/12/21 Ben Abbott <bpabbott at mac.com>:
>>>>
>>>> On Dec 21, 2008, at 3:38 PM, Rosen Diankov wrote:
>>>>
>>>>> Hi all,
>>>>>
>>>>> I'm trying to append my own directory with octave files
>>>>> (/usr/local/myoctavefiles) to the automatically set octave  
>>>>> paths. At
>>>>> first, I tried doing
>>>>>
>>>>> export OCTAVE_PATH=/usr/local/myoctavefiles
>>>>>
>>>>> but it didn't work since the auto-generated ~/.octaverc file (from
>>>>> savepath) overwrites any added paths via the path function. Ie,  
>>>>> the
>>>>> ~/.octaverc file looks like:
>>>>>
>>>>> ## Begin savepath auto-created section, do not edit
>>>>> path ('/usr/local/share/...',...)
>>>>> ## End savepath auto-created section
>>>>>
>>>>> So the next obvious thing to do was to call
>>>>> addpath('/usr/local/myoctavefiles') right after the '## End  
>>>>> savepath
>>>>> ...', but this has a very dangerous side-effect. The problem is  
>>>>> that
>>>>> the next time the user calls 'savepath', it will put
>>>>> /usr/local/myoctavefiles inside the auto-generated code. And  
>>>>> even if I
>>>>> remove my addpath or set OCTAVE_PATH to something different, my  
>>>>> path
>>>>> will remain added to the octave path!
>>>>>
>>>>> So I propose a small savepath change that always puts
>>>>> getenv('OCTAVE_PATH') inside the auto-generated code.
>>>>> It would be great if this makes it into octave 3.0.4
>>>>>
>>>>> thank you,
>>>>> rosen diankov
>>>>
>>>> If I understand you correctly you'd like to be able to  
>>>> dynamically add a
>>>> specific path when octave is run. Have you looked at the command  
>>>> line
>>>> options. For example,
>>>>
>>>>     octave --path "/usr/local/myoctavefiles"
>>>>
>>>> Other command line options are detailed at the link below.
>>>>
>>>>
>>>>
>>>> http://www.gnu.org/software/octave/doc/interpreter/Command-Line-Options.html#Command-Line-Options
>>>>
>>>> Ben
>>
>>>
>>> It doesn't work, the ~/.octaverc file overwrites any paths from
>>> OCTAVE_PATH, -p, or --path because savepath directly calls path. it
>>> would be great if at least it called addpath.
>>>
>>> rosen,
>>
>> Do you mean you'd like to have the lines added to .octaverc by  
>> savepath use
>> "addpath(...)" rather than "path(...)"?
>>
>> sigh ... I find the savepath command more trouble that it is  
>> worth :-(
>>
>> You may find the best solution it to modify .octaverc by manually  
>> and use
>> addpath() to include your local octave directories.
>>
>> In any event, we will want to be compatible with matlab. Does  
>> matlab provide
>> the functionality you're looking for?
>>
>> Ben
>>
>
> I agree with you. the current savepath does break some things about
> the flow of paths in octave. We recently started using octave for a
> robotics framework ROS
> (http://pr.willowgarage.com/wiki/rosoct#preview) and we are starting
> to create many packages that optionally have octave code that use a
> core ROS 'octave library'. In order for those functions to be visible
> in octave, they have to be added to the path, so I would like the
> users to be able to add a simple
>
> export OCTAVE_PATH=...
>
> in their .bashrc that automatically finds the correct directory and
> includes it. The path will be dependent on the particular directory
> their checkout tree lies in (which can change).
>
> The problem with savepath is that it sucks in the current paths into
> its one 'path' call, which makes using multiple build trees of the
> robotics framework very hard.
>
> According to the matlab savepath, there is a separate 'userpath'
> variable that gets combined with the current paths.
>
> Ideally, savepath would remove all directories in OCTAVE_PATH before
> making the addpath call (there's no reason it should be calling path).
>
> thanks,
> rosen,

A proper fix will be slightly more a bit more difficult than patching  
savepath.m. In addition to OCTAVE_PATH a proper solution should also  
treat the command line path option in the same fashion. My c/c++  
skills are essentially non-existent, but this looks like a simple task  
(maybe even I can manage it).

What is needed it to make the "tpath" in load_path::do_initialize  of  
load-path.cc were available to m-files.

----------------------
   std::string tpath = load_path::command_line_path;

   if (tpath.empty ())
     tpath = octave_env::getenv ("OCTAVE_PATH");
----------------------

Can anyone tell me if such is *already* available to m-files. I'd  
tried adding the code below to load-path.cc, but it doesn't work ...  
which I expect demonstrates my c/c++ incompetence ;-)

----------------------
DEFUN (commandlinepath, , ,
     "-*- texinfo -*-\n\
@deftypefn {Built-in Function} {} commandlinepath (@dots{})\n\
Return the command line path variable.\n\
\n\
@seealso{path, addpath, rmpath, genpath, pathdef, savepath, pathsep}\n\
@end deftypefn")
{
   return octave_value (load_path::command_line_path);
}
----------------------

Can someone enlighten me as to what I'm doing wrong? ... a "make" from  
the src directory produces the result below.

----------------------
$ make
making defaults.h from defaults.h.in
defaults.h is unchanged
make: --cppflags: Command not found
make: --ldflags: Command not found
making oct-conf.h from oct-conf.h.in
oct-conf.h is unchanged
g++ -c -g -I/sw/include -FOpenGL -I/sw/include/freetype2 -I/sw/include  
-fPIC -I. -I.. -I../liboctave -I../src -I../libcruft/misc  - 
DHAVE_CONFIG_H -mieee-fp -Wall -W -Wshadow -Wold-style-cast -g -O2  
load-path.cc -o pic/load-path.o
load-path.cc: In function ‘octave_value_list Fcommandlinepath(const  
octave_value_list&, int)’:
load-path.cc:48: error: ‘std::string load_path::command_line_path’ is  
private
load-path.cc:1783: error: within this context
make: *** [pic/load-path.o] Error 1
----------------------

Ben




More information about the Help-octave mailing list