f6b35d65d2d18f03848b9a2cf47dec582cca268d
[scilab.git] / scilab / modules / atoms / macros / atomsInstall.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 // Installation of a toolbox
13
14 function result = atomsInstall(packages,allusers)
15         
16         result = %F;
17         
18         // Get scilab version (needed for later)
19         // =========================================================================
20         sciversion = strcat(string(getversion('scilab')) + ".");
21         
22         // Check input parameters
23         // =========================================================================
24         
25         rhs = argn(2);
26         
27         if rhs < 1 | rhs > 2 then
28                 error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"),"atomsInstall",1,2))
29         end
30         
31         if type(packages) <> 10 then
32                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsInstall",1));
33         end
34         
35         packages = stripblanks(packages);
36         
37         // Install for all users or just for me ?
38         // =========================================================================
39         
40         if rhs == 1 then
41                 // By default, install for all users (if we have write access of course !)
42                 if atomsAUWriteAccess() then
43                         allusers = %T; 
44                 else
45                         allusers = %F;
46                 end
47         
48         else
49                 // Just check if it's a boolean
50                 if type(allusers) <> 4 then
51                         error(msprintf(gettext("%s: Wrong type for input argument #%d: A boolean expected.\n"),"atomsInstall",2));
52                 end
53                 
54                 // Check if we have the write access
55                 if allusers & ~ atomsAUWriteAccess() then
56                         error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsInstall",2,pathconvert(SCI+"/.atoms")));
57                 end
58         end
59         
60         // We are installing new package, so we have a net connection
61         // => update the package list
62         // =========================================================================
63         
64         atomsGetTOOLBOXES(%T);
65         
66         // Loop on packages and get the following informations :
67         // - package name
68         // - package version
69         // - status
70         //  + Update
71         //  + New Installation
72         //  + The most recent version is already installed
73         // =========================================================================
74         
75         for i=1:size(packages,"*")
76                 
77                 package = packages(i);
78                 
79                 if size(regexp(package,"/\s/") ,"*" ) > 1 then
80                         error(msprintf(gettext("%s: Wrong value for input argument #%d: it must contain at most one space.\n"),"atomsInstall",1));
81                 end
82                 
83                 if size(regexp(package,"/\s/") ,"*" ) == 0 then
84                         // install the most recent version of the package
85                         name    = package;
86                         version = "0";
87                 else
88                         // A version is specified
89                         space   = regexp(package,"/\s/");
90                         name    = part(package,[1:space-1]);
91                         version = part(package,[space+1:length(package)]);
92                 end
93                 
94                 package_names(i)    = name;
95                 package_versions(i) = version;
96                 
97                 // Ok, The syntax is correct, Now check if it's a valid package
98                 
99                 if ~ atomsIsPackage(package_names(i),package_versions(i)) then
100                         if package_versions(i) == "0" then
101                                 package_full_name = package_names(i);
102                         else
103                                 package_full_name = package_names(i)+" - "+package_versions(i);
104                         end
105                         error(msprintf(gettext("%s: The package %s is not available.\n"),"atomsInstall",1,package_full_name));
106                 end
107                 
108                 // Get the package version is not specified, get the most recent version
109                 if package_versions(i) == "0" then
110                         package_versions(i) = atomsGetMRVersion(package_names(i));
111                 end
112                 
113                 // Check if the package is already installed
114                 if atomsIsInstalled(package_names(i),package_versions(i),%T) then
115                         error(msprintf(gettext("%s: The package %s is already installed.\n"),"atomsInstall",package_full_name));
116                 end
117                 
118                 // Check if the wanted version is compatible with the current scilab version.
119                 this_package_details = atomsToolboxDetails(package_names(i),package_versions(i));
120                 if ~ atomsIsCompatible(this_package_details("ScilabVersion")) then
121                         error(msprintf(gettext("%s: The package %s is not compatible with the current scilab version.\n"),"atomsInstall",package_full_name));
122                 end
123                 
124                 
125                 
126                 
127                 
128                 
129                 
130                 
131                 
132                 
133                 
134                 
135                 // Register the successfully installed package
136                 atomsInstallRegister(package_names(i),package_versions(i));
137         end
138         
139         
140         
141
142 //      global conflictingList
143 //      global conflictLocal
144 //      global nomconflictLocal
145 //      global conflictVersion
146 // 
147 //      rhs = argn(2)
148 //      if (rhs == 2 | rhs == 1 | rhs == 3) then
149 //      // We check if the arguments exist
150 //      if rhs == 1
151 //              checkVersionScilab = %t
152 //      end
153 //      if rhs <= 2
154 //              version = ""
155 //      end
156 //      // We remove the special characters
157 //      name = atomsNormalizeName(name)
158 //      // We go to the dedicated directory
159 //      rep = atomsToolboxDirectory()
160 //      cd (rep)
161 //      // Required to empty the global variables before any use of atomsCheckConflict
162 //      clearglobal conflictingList
163 //      clearglobal conflictLocal
164 //      clearglobal nomconflictLocal
165 //      clearglobal conflictVersion
166 //      // Retrieve of the list of toolboxes to install
167 //      listTool = atomsCheckConflict(name, version, checkVersionScilab)
168 //      // If there is an empty line, it is because a dependency is missing
169 //      if find(listTool == "") <> []
170 //              if conflictLocal == 1
171 //              atomsDisplayMessage(sprintf(_("The Toolbox version %s locally present doesn''t match. Update it.\n"),nomconflictLocal))
172 //              elseif listTool <> ""
173 //              atomsDisplayMessage(_("Impossible to install all the dependencies.\n"))
174 //              end
175 //              result =  %f
176 //              return result
177 //      elseif conflictVersion == 1
178 //              atomsDisplayMessage(sprintf(_("Conflit of version for %s"),nomconflictLocal))
179 //              result =  %f
180 //              return result
181 //      end
182 //      // Retrieve of the toolboxes list which are already in local
183 //      cd (rep)
184 //      listLocal = ls()
185 //      // Treatment of the toolboxes to install
186 //      [m, n] = size(listTool)
187 //      for i=1:m
188 //              [name, version] = atomsSeparateVersionDep(listTool(i))
189 //              // If it is locally present, we pass to the following one
190 //              if find(listLocal == name) <> []
191 //              continue
192 //              else
193 //              atomsDisplayMessage(_("Is going to be install: ") + name)
194 //              if ~atomsDlInstall(name, version)
195 //                      disp(_("Error during the installation"))
196 //                      result = %f
197 //                      return result
198 //              end
199 //              end
200 //      end
201 //      result = %t
202 //      return result
203
204
205
206 endfunction