- installed packages and dependencies are now saved into binary files
[scilab.git] / scilab / modules / atoms / macros / atoms_internals / atomsInstallUnregister.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 // Delete an atoms package from the list of available package
11 // This function has an impact on the following files :
12 //  -> ATOMSDIR/installed
13 //  -> ATOMSDIR/installed_deps
14
15 function atomsInstallUnregister(name,version,allusers)
16         
17         rhs = argn(2);
18         
19         // Check number of input arguments
20         // =========================================================================
21         
22         if rhs < 2 | rhs > 3 then
23                 error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsInstallUnregister",2,3));
24         end
25         
26         // Check input parameters type
27         // =========================================================================
28         
29         if type(name) <> 10 then
30                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsInstallUnregister",1));
31         end
32         
33         if type(version) <> 10 then
34                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsInstallUnregister",2));
35         end
36         
37         // name and version must have the same size
38         // =========================================================================
39         
40         if or( size(name) <> size(version) ) then
41                 error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same sizes expected.\n"),"atomsInstallUnregister",1,2));
42         end
43         
44         // Apply changes for all users or just for me ?
45         // =========================================================================
46         
47         if rhs == 2 then
48                 // By default, add the repository for all users (if we have write access
49                 // of course !)
50                 if atomsAUWriteAccess() then
51                         allusers = %T; 
52                 else
53                         allusers = %F;
54                 end
55         
56         else
57                 // Just check if it's a boolean
58                 if type(allusers) <> 4 then
59                         error(msprintf(gettext("%s: Wrong type for input argument #%d: A boolean expected.\n"),"atomsInstallUnregister",2));
60                 end
61                 
62                 // Check if we have the write access
63                 if allusers & ~ atomsAUWriteAccess() then
64                         error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsInstallUnregister",2,pathconvert(SCI+"/.atoms")));
65                 end
66         end
67         
68         // Process installed
69         // =========================================================================
70         installed_before = atomsLoadInstalledStruct(allusers);
71         installed_after  = atomsRmfields(installed_before,name+" - "+version);
72         atomsSaveInstalled(installed_after);
73         
74         // Process installed dependencies
75         // =========================================================================
76         installed_deps_before = atomsLoadInstalleddeps(allusers);
77         installed_deps_after  = atomsRmfields(installed_deps_before,name+" - "+version);
78         atomsSaveInstalleddeps(installed_deps_after);
79         
80 endfunction
81
82
83 function struct_out = atomsRmfields(struct_in,fields_to_remove)
84         
85         rhs        = argn(2);
86         struct_out = struct();
87         
88         // Check number of input arguments
89         // =========================================================================
90         
91         if rhs <> 2 then
92                 error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"atomsRmfields",2));
93         end
94         
95         // Check input parameters type
96         // =========================================================================
97         
98         if type(struct_in) <> 17 then
99                 error(msprintf(gettext("%s: Wrong type for input argument #%d: Struct expected.\n"),"atomsRmfields",1));
100         end
101         
102         if type(fields_to_remove) <> 10 then
103                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsRmfields",1));
104         end
105         
106         // Get the fields of the 1st input argument
107         // =========================================================================    
108         
109         fields_in      = getfield(1,struct_in);
110         fields_in(1:2) = [];
111         
112         for i=1:size( fields_in,"*")
113                 if find(fields_in(i) == fields_to_remove) == [] then
114                         struct_out( fields_in(i) ) = struct_in(fields_in(i));
115                 end
116         end
117         
118 endfunction