295f0a0396f9e59500a2000a3aa7398c910bfcc0
[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 // === LICENSE_END ===
13
14 // Internal function
15
16 // Give the list of packages that use this package (identified by its name and version)
17
18 function packages = atomsGetDepParents(package,section)
19
20     rhs      = argn(2);
21     packages = [];
22
23     // Check number of input arguments
24     // =========================================================================
25
26     if rhs < 1 | rhs > 2 then
27         error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsGetDepParents",1,2));
28     end
29
30     // Check input parameters type
31     // =========================================================================
32
33     if type(package) <> 10 then
34         error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsGetDepParents",1));
35     end
36
37     if or(size(package) <> [1 2]) then
38         error(msprintf(gettext("%s: Wrong size for input argument #%d: 1x2 string matrix expected.\n"),"atomsGetDepParents",1));
39     end
40
41     // All user management
42     // =========================================================================
43
44     if rhs < 2 then
45         section = "all";
46
47     else
48
49         if type(section) <> 10 then
50             error(msprintf(gettext("%s: Wrong type for input argument #%d: string expected.\n"),"atomsGetDepParents",2));
51         end
52
53         if size(section,"*")<>1 then
54             error(msprintf(gettext("%s: Wrong size for input argument #%d: string expected.\n"),"atomsGetDepParents",2));
55         end
56
57         if and(section<>["user","allusers","all"]) then
58             error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'',''allusers'' or ''all'' expected.\n"),"atomsGetDepParents",2));
59         end
60
61     end
62
63     if section == "all" then
64         sections = ["user","allusers"];
65     else
66         sections = section;
67     end
68
69     for i=1:size(sections,"*")
70
71         // Load the installed_deps struct
72         // =========================================================================
73         [ child_deps,parent_deps ] = atomsLoadInstalleddeps(sections(i));
74
75         // If name - version is not a field of the struct, the job is done
76         // =========================================================================
77
78         if ~ isfield(parent_deps,package(1)+" - "+package(2)) then
79             return;
80         end
81
82         // Return the matrix associated with the wanted package (name - version)
83         // =========================================================================
84
85         packages_list = parent_deps(package(1)+" - "+package(2));
86
87         for j=1:size(packages_list,"*")
88             this_package_name    = part(packages_list(j),1:regexp(packages_list(j),"/\s-\s/","o")-1);
89             this_package_version = part(packages_list(j),length(this_package_name)+4:length(packages_list(j)));
90             packages = [ packages ; this_package_name this_package_version sections(i) ];
91         end
92
93     end
94
95 endfunction