- installed packages and dependencies are now saved into binary files
[scilab.git] / scilab / modules / atoms / macros / atomsUpdate.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 // End user function
11
12 // update of a toolbox
13
14 function result = atomsUpdate(name,allusers)
15         
16         result = [];
17         
18         // Save the initial path
19         // =========================================================================
20         initialpath = pwd();
21         
22         // Verbose Mode ?
23         // =========================================================================
24         if strcmpi(atomsGetConfig("Verbose"),"True") == 0 then
25                 VERBOSE = %T;
26         else
27                 VERBOSE = %F;
28         end
29         
30         // Check input parameters
31         // =========================================================================
32         
33         rhs = argn(2);
34         
35         if rhs > 1 then
36                 error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"),"atomsUpdate",0,1))
37         end
38         
39         if (rhs>0) & (type(name)<>10) then
40                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsUpdate",1));
41         end
42         
43         name = stripblanks(name);
44         
45         // Install for all users or just for me ?
46         // =========================================================================
47         
48         if rhs == 1 then
49                 // By default, install for all users (if we have write access 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                         chdir(initialpath);
60                         error(msprintf(gettext("%s: Wrong type for input argument #%d: A boolean expected.\n"),"atomsInstall",2));
61                 end
62                 
63                 // Check if we have the write access
64                 if allusers & ~ atomsAUWriteAccess() then
65                         chdir(initialpath);
66                         error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsInstall",2,pathconvert(SCI+"/.atoms")));
67                 end
68         end
69         
70         // Check if all specified toolboxes are effectively installed
71         // =========================================================================
72         
73         for i=1:size(name,"*")
74                 if ~ atomsIsInstalled(name(i)) then
75                         chdir(initialpath);
76                         error(msprintf(gettext("%s: ''%s'' isn''t installed.\n"),"atomsUpdate",name(i)));
77                 end
78         end
79         
80         // Get scilab version (needed for later)
81         // =========================================================================
82         sciversion = strcat(string(getversion('scilab')) + ".");
83         
84         // List all installed packages (needed for later)
85         // =========================================================================
86         package_installed = atomsGetInstalled();
87         
88         // Update all the Toolboxes
89         // =========================================================================
90         
91         if rhs==0 | name == "all" | isempty(name) then
92                 package_installed = atomsGetInstalled();
93                 name              = package_installed(:,1);
94         end
95         
96         // Loop on name
97         // =========================================================================
98         
99         for i=1:size(name,"*")
100                 
101                 this_package_versions = atomsGetInstalledVers(name(i),allusers);
102                 this_package_MRV_ins  = this_package_versions(1);   // Most Recent Version Installed
103                 this_package_MRV_ava  = atomsGetMRVersion(name(i)); // Most Recent Version Available
104                 
105                 if atomsVersionCompare(this_package_MRV_ins,this_package_MRV_ava) == 0 then
106                         // The installed version is already the Most Recent Version Available
107                         if VERBOSE then
108                                 mprintf("\t%s (%s) : The most recent version is already installed\n",name(i),this_package_MRV_ins);
109                         end
110                         
111                         continue;
112                 end
113                 
114                 // Remove old toolboxes
115                 atomsRemove(name(i),allusers);
116                 
117                 // Install the new toolbox
118                 this_result = atomsInstall(name(i)+" "+this_package_MRV_ava,allusers);
119                 
120                 // Fill the output argument
121                 result = [ result ; this_result ];
122         end
123         
124         // Go to the initial location
125         // =========================================================================
126         chdir(initialpath);
127         
128 endfunction