17b8fdf59bc9e8835a4d0d626f529b1d5d2b8613
[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 // Copyright (C) 2012 - 2016 - Scilab Enterprises
5 //
6 // This file is hereby licensed under the terms of the GNU GPL v2.0,
7 // pursuant to article 5.3.4 of the CeCILL v.2.1.
8 // This file was originally licensed under the terms of the CeCILL v2.1,
9 // and continues to be available under such terms.
10 // For more information, see the COPYING file which you should have received
11 // along with this program.
12
13 // Internal function
14
15 // Give the list of packages that use this package (identified by its name and version)
16
17 function packages = atomsGetDepParents(package,section)
18
19     rhs      = argn(2);
20     packages = [];
21
22     // Check number of input arguments
23     // =========================================================================
24
25     if rhs < 1 | rhs > 2 then
26         error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsGetDepParents",1,2));
27     end
28
29     // Check input parameters type
30     // =========================================================================
31
32     if type(package) <> 10 then
33         error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsGetDepParents",1));
34     end
35
36     if or(size(package) <> [1 2]) then
37         error(msprintf(gettext("%s: Wrong size for input argument #%d: 1x2 string matrix expected.\n"),"atomsGetDepParents",1));
38     end
39
40     // All user management
41     // =========================================================================
42
43     if rhs < 2 then
44         section = "all";
45
46     else
47
48         if type(section) <> 10 then
49             error(msprintf(gettext("%s: Wrong type for input argument #%d: string expected.\n"),"atomsGetDepParents",2));
50         end
51
52         if size(section,"*")<>1 then
53             error(msprintf(gettext("%s: Wrong size for input argument #%d: string expected.\n"),"atomsGetDepParents",2));
54         end
55
56         if and(section<>["user","allusers","all"]) then
57             error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'',''allusers'' or ''all'' expected.\n"),"atomsGetDepParents",2));
58         end
59
60     end
61
62     if section == "all" then
63         sections = ["user","allusers"];
64     else
65         sections = section;
66     end
67
68     for i=1:size(sections,"*")
69
70         // Load the installed_deps struct
71         // =========================================================================
72         [ child_deps,parent_deps ] = atomsLoadInstalleddeps(sections(i));
73
74         // If name - version is not a field of the struct, the job is done
75         // =========================================================================
76
77         if ~ isfield(parent_deps,package(1)+" - "+package(2)) then
78             return;
79         end
80
81         // Return the matrix associated with the wanted package (name - version)
82         // =========================================================================
83
84         packages_list = parent_deps(package(1)+" - "+package(2));
85
86         for j=1:size(packages_list,"*")
87             this_package_name    = part(packages_list(j),1:regexp(packages_list(j),"/\s-\s/","o")-1);
88             this_package_version = part(packages_list(j),length(this_package_name)+4:length(packages_list(j)));
89             packages = [ packages ; this_package_name this_package_version sections(i) ];
90         end
91
92     end
93
94 endfunction