10fffdb1e334dfca95bd9b30632e433f094cb3c3
[scilab.git] / scilab / modules / atoms / macros / atoms_internals / atomsGetDepParents.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
3 //
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at
8 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
9
10 // Internal function
11
12 // Give the list of packages that use this package (identified by its name and version)
13
14 function packages = atomsGetDepParents(package,section)
15         
16         rhs      = argn(2);
17         packages = [];
18         
19         // Check number of input arguments
20         // =========================================================================
21         
22         if rhs < 1 | rhs > 2 then
23                 error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsGetDepParents",1,2));
24         end
25         
26         // Check input parameters type
27         // =========================================================================
28         
29         if type(package) <> 10 then
30                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsGetDepParents",1));
31         end
32         
33         if or(size(package) <> [1 2]) then
34                 error(msprintf(gettext("%s: Wrong size for input argument #%d: 1x2 string matrix expected.\n"),"atomsGetDepParents",1));
35         end
36         
37         // All user management
38         // =========================================================================
39         
40         if rhs < 2 then
41                 section = "all";
42         
43         else
44                 
45                 if type(section) <> 10 then
46                         error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsGetDepParents",2));
47                 end
48                 
49                 if size(section,"*")<>1 then
50                         error(msprintf(gettext("%s: Wrong size for input argument #%d: Single string expected.\n"),"atomsGetDepParents",2));
51                 end
52                 
53                 if and(section<>["user","allusers","all"]) then
54                         error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'',''allusers'' or ''all'' expected.\n"),"atomsGetDepParents",2));
55                 end
56                 
57         end
58         
59         if section == "all" then
60                 sections = ["user","allusers"];
61         else
62                 sections = section;
63         end
64         
65         for i=1:size(sections,"*")
66                 
67                 // Load the installed_deps struct
68                 // =========================================================================
69                 [ child_deps,parent_deps ] = atomsLoadInstalleddeps(sections(i));
70                 
71                 // If name - version is not a field of the struct, the job is done
72                 // =========================================================================
73                 
74                 if ~ isfield(parent_deps,package(1)+" - "+package(2)) then
75                         return;
76                 end
77                 
78                 // Return the matrix associated with the wanted package (name - version)
79                 // =========================================================================
80                 
81                 packages_list = parent_deps(package(1)+" - "+package(2));
82                 
83                 for j=1:size(packages_list,"*")
84                         this_package_name    = part(packages_list(j),1:regexp(packages_list(j),"/\s-\s/","o")-1);
85                         this_package_version = part(packages_list(j),length(this_package_name)+4:length(packages_list(j)));
86                         packages = [ packages ; this_package_name this_package_version sections(i) ];
87                 end
88                 
89         end
90         
91 endfunction