License Header change: Removed the LICENSE_END before beta
[scilab.git] / scilab / modules / atoms / macros / atoms_internals / atomsGetInstalledDetails.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 // Renvoie les d├ętails sur l'installation d'un package.
16
17 function res = atomsGetInstalledDetails(packages,section)
18
19     rhs = argn(2);
20     res = [];
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"),"atomsGetInstalledDetails",1,2));
27     end
28
29     // Check input parameters type
30     // =========================================================================
31
32     if type(packages) <> 10 then
33         error(msprintf(gettext("%s: Wrong type for input argument #%d: string expected.\n"),"atomsGetInstalledDetails",1));
34     end
35
36     if and(size(packages(1,:),"*") <> [2 3]) then
37         error(msprintf(gettext("%s: Wrong size for input argument #%d: mx2 or mx3 string matrix expected.\n"),"atomsGetInstalledDetails",1));
38     end
39
40     // Allusers/user management
41     // =========================================================================
42
43     if rhs < 2 then
44         section = "all";
45
46     else
47
48         // Process the 2nd input argument : section
49         // Allusers can be a boolean or equal to "user" or "allusers"
50
51         if type(section) <> 10 then
52             error(msprintf(gettext("%s: Wrong type for input argument #%d: Boolean or single string expected.\n"),"atomsGetInstalledDetails",2));
53         end
54
55         if and(section<>["user","allusers","all"]) then
56             error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'' or ''allusers'' or ''all'' expected.\n"),"atomsGetInstalledDetails",2));
57         end
58
59     end
60
61     // Complete packages matrix with empty columns
62     // =========================================================================
63
64     if size(packages(1,:),"*") == 2 then
65         packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
66     end
67
68     // Get the list of installed packages
69     // =========================================================================
70     installedpackages = atomsGetInstalled(section);
71
72     // Loop on name
73     // =========================================================================
74
75     for i=1:size(packages(:,1),"*")
76
77         // Filter on names
78         packages_filtered = installedpackages( find(installedpackages(:,1) == packages(i,1)) , : );
79
80         // Filter on section
81         if ~isempty(packages(i,3)) & packages(i,3)<>"all" then
82             packages_filtered = packages_filtered( find(packages_filtered(:,3) == packages(i,3)) , : );
83         end
84
85         // Filter on versions
86
87         //  + The packaging version is mentioned
88         if ~ isempty(strindex(packages(i,2),"-")) then
89             packages_filtered = packages_filtered( find(packages_filtered(:,2) == packages(i,2)) , : );
90
91             //  + The packaging version is not mentioned
92         else
93
94             candidates        = packages_filtered;
95             packages_filtered = [];
96
97             // Loop on installed versions
98             for j=1:size(candidates(:,2),"*")
99
100                 candidate_version = candidates(j,2);
101
102                 if ~ isempty(strindex(candidate_version,"-")) then
103                     candidate_version = part(candidate_version,1:strindex(candidate_version,"-")-1);
104                 end
105
106                 if packages(i,2) == candidate_version then
107                     packages_filtered = [ packages_filtered ; candidates(j,:) ];
108                 end
109
110             end
111
112         end
113
114         if ~ isempty(packages_filtered) then
115             res = [ res ; packages_filtered(1,:) ];
116         else
117             res = [ res ; "" "" "" "" "" ];
118         end
119
120     end
121
122 endfunction