On Mon, Mar 26, 2012 at 8:41 AM, Juan Pablo Carbajal
<carba...@ifi.uzh.ch> wrote:
> On Sun, Mar 25, 2012 at 10:11 PM, Philip Nienhuis <pr.nienh...@hccnet.nl> 
> wrote:
>> Juan Pablo Carbajal wrote:
>>>
>>> On Sun, Mar 25, 2012 at 5:16 PM, Philip Nienhuis<pr.nienh...@hccnet.nl>
>>>  wrote:
>>>>
>>>> Clemens Buchacher wrote:
>>>>>
>>>>>
>>>>> On Sat, Mar 24, 2012 at 11:06:57PM +0100, Juan Pablo Carbajal wrote:
>>>>>>
>>>>>>
>>>>>> On Sat, Mar 24, 2012 at 10:02 PM, Clemens Buchacher<dri...@aon.at>
>>>>>>  wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> With svn r10045, I now get the following on load instead:
>>>>>>>
>>>>>>> warning: addpath: /home/drizzd/octave/geometry-1.4.2/geom2d: No such
>>>>>>> file or directory
>>>>>>> ...
>>>>>>>
>>>>>>> The problem is that the installation prefix is set only during
>>>>>>> installation, but not during module load.
>>>>>>>
>>>>>>> The only way I can find to determine this path reliably is to create a
>>>>>>> inst/geometry_module_path.m file which returns mfilename("fullpath").
>>>>>>
>>>>>>
>>>>>>
>>>>>> How does pkg knows the path to add in any other package when you use
>>>>>> prefix?
>>>>>
>>>>>
>>>>>
>>>>> The path to the root package directory is added by octave. It is only
>>>>> the subdirectories that are not accessible. I have the following other
>>>>> packages, and none of those seem to add subdirectories to the
>>>>> installation path:
>>>>>
>>>>>  audio communications control data-smoothing general image io
>>>>> linear-algebra
>>>>>  mechanics miscellaneous nan nnet octcdf optim plot queueing signal
>>>>> specfun
>>>>>  splines statistics struct symbolic
>>>>>
>>>>> The io packages seems to parse the installation directory from
>>>>> pkg('list')
>>>>> output for different reasons, but I find this quite ugly:
>>>>>
>>>>>  pkglist = pkg ("list");
>>>>>  javapkgind = find (cellfun(@(x) strcmp(x.name, "java"), pkglist), 1,
>>>>> "first");
>>>>
>>>>
>>>>
>>>> (no offense taken) What is so ugly about it?
>>>> (not that it's my code, yet to me it seems fairly succinct and AFAICS it
>>>> works OK)
>>>>
>>>> FYI it doesn't parse package installation dirs at all. It simply handles
>>>> a
>>>> "suggested" dependency on another package, by checking if that other
>>>> package
>>>> is loaded. If so, the rest of PKG_ADD adds entries to the javaclasspath.
>>>>
>>>>
>>>> Perhaps I missed the essentials from the discussion, but IMO somewhat
>>>> analogous code could be invoked for adding pkg subdirs the "regular"
>>>> search
>>>> path in Octave, including arch-dependent ones. It would put the
>>>> responsibility on developers/maintainers, but that's no big deal.
>>>> If we let pkg maintainers setup PKG_ADD / PKG_DEL themselves along these
>>>> lines, pkg.m could be kept simpler (it is already complicated enough).
>>>> Some
>>>> PKG_ADD/PKG_DEL example stanzas could be put on the OF developers page.
>>>>
>>>>
>>>> I like the suggested pkg_ind() function, but I would rather have it more
>>>> general along the lines of
>>>>
>>>>   <info>  = pkg_info (<package_name>, [<info_type>])
>>>>
>>>> which would return the entire info structure for just one arg (or [] if
>>>> the
>>>> package isn't found/installed/exist), and e.g.,
>>>>
>>>>   <installation_dir>  = pkg_info(<package_name>, "dir")
>>>>
>>>> for just one info field.
>>>> That would help "de-uglify" the io pkg's PKG_ADD :-)
>>>>
>>>> Philip
>>>
>>>
>>> Does this solves the problem with the arch dependent files? I think
>>> like this you only get the path to the installation of the package but
>>> not the compiled files, right?
>>> We need to store this information somewhere at the time pkg("prefix")
>>> is called. I think ~/.octave_packages could be used for this. It
>>> already containts the installation folder, we need to add just one
>>> field to the structure.
>>
>>
>> For each package (with compiled functions at least) in the file
>> octave_packages there is already the "archprefix" field, which points to the
>> compiled functions. It only lacks the last bit to the actual .oct files
>> (which AFAIU depend on the compiler version), but that can be gotten from
>> octave_config_info() (I think we need to glue to fields from that together).
>>
>> Philip
>
> So far we have the following function that works also with a query of
> several packages as a cell, which can be handy. How do we get the
> archpath? (the architecture dependent folder). Assuming that this
> function will be called by PKG_ADD (and use mfilename to get it) could
> be weak programming. *Note that the function uses cell2struct which is
> in package struct, but it can be replaced with a cellfun call.
>
> function [pkgpath archpath] = pkg_dir (pkgname)
>
>  [local_packages, global_packages] = pkg("list");
>  installed_pkgs_lst = {local_packages{:}, global_packages{:}};
>
>  installed_names = cellfun (@(x) x.name,
> installed_pkgs_lst,'uniformoutput',false);
>  [tf idx] = ismember (pkgname,installed_names);
>
>  # Issue a warning with the unmatched pkgs ?
>
>  dir = cellfun (@(x) x.dir, 
> {installed_pkgs_lst{idx(tf)}},'uniformoutput',false)
>
>  pkgpath = cell2fields (dir, {installed_names{idx(tf)}}, 1, struct ());
>  archpath = struct();
>
> endfunction
>
>
> --
> M. Sc. Juan Pablo Carbajal
> -----
> PhD Student
> University of Zürich
> http://ailab.ifi.uzh.ch/carbajal/

Bug corrected

function [pkgpath archpath] = pkg_dir (pkgname)

 [local_packages, global_packages] = pkg("list");
 installed_pkgs_lst = {local_packages{:}, global_packages{:}};

 installed_names = cellfun (@(x) x.name,
installed_pkgs_lst,'uniformoutput',false);
 [tf idx] = ismember (pkgname,installed_names);

 # Issue a warning with the unmatched pkgs ?

 dir = cellfun (@(x) x.dir, {installed_pkgs_lst{idx(tf)}},'uniformoutput',false)

 pkgpath = cell2struct (dir, {installed_names{idx(tf)}},2);
 archpath = struct();

endfunction

-- 
M. Sc. Juan Pablo Carbajal
-----
PhD Student
University of Zürich
http://ailab.ifi.uzh.ch/carbajal/

------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Octave-dev mailing list
Octave-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/octave-dev

Reply via email to