8f216834b0624e8580829623c5afc1850eaf595f
[scilab.git] / scilab / modules / atoms / macros / atomsAutoloadAdd.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 // Add toolboxes to the list of packages that are automaticaly loaded at Scilab start
11 // This function has an impact on the following files :
12 //  -> ATOMSDIR/autoloaded
13
14 // End-User function
15
16 function nbAdd = atomsAutoloadAdd(name,version,section)
17         
18         // Load Atoms Internals lib if it's not already loaded
19         // =========================================================================
20         if ~ exists("atomsinternalslib") then
21                 load("SCI/modules/atoms/macros/atoms_internals/lib");
22         end
23         
24         rhs            = argn(2);
25         nbAdd          = 0;
26         autoloaded     = []; // Column vector that contain autoloaded packages
27         
28         // Check number of input arguments
29         // =========================================================================
30         
31         if rhs < 2 | rhs > 3 then
32                 error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsAutoloadAdd",2,3));
33         end
34         
35         // Check input parameters type
36         // =========================================================================
37         
38         if type(name) <> 10 then
39                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsAutoloadAdd",1));
40         end
41         
42         if type(version) <> 10 then
43                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsAutoloadAdd",2));
44         end
45         
46         // name and version must have the same size
47         // =========================================================================
48         
49         if or( size(name) <> size(version) ) then
50                 error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same sizes expected.\n"),"atomsAutoloadAdd",1,2));
51         end
52         
53         // Allusers/user management
54         //   - If section is equal to "allusers", module(s) will added to the 
55         //     "autoload" list of the "allusers" section :
56         //       → SCI/.atoms/autoloaded
57         //   - Otherwise, module(s) will added to the "autoload" list of the "user"
58         //     section
59         //       → SCIHOME/atoms/autoloaded
60         // =========================================================================
61         
62         if rhs <= 2 then
63                 
64                 // By default: 
65                 //  → Add the module to the "autoload" list of the "allusers" section
66                 //    if we have the write access to SCI directory
67                 //  → Add the module to the "autoload" list of the "user" section otherwise
68                 
69                 if atomsAUWriteAccess() then
70                         section = "allusers"; 
71                 else
72                         section = "user";
73                 end
74                 
75         else
76                 
77                 // Process the 2nd input argument : allusers
78                 // Allusers can be equal to "user" or "allusers"
79                 
80                 if type(section) <> 10 then
81                         error(msprintf(gettext("%s: Wrong type for input argument #%d: A single-string expected.\n"),"atomsAutoloadAdd",3));
82                 end
83                 
84                 if and(section<>["user","allusers"]) then
85                         error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'' or ''allusers'' expected.\n"),"atomsAutoloadAdd",3));
86                 end
87                 
88                 // Check if we have the write access
89                 if (section=="allusers") & ~ atomsAUWriteAccess() then
90                         error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsAutoloadAdd",3,pathconvert(SCI+"/.atoms")));
91                 end
92                 
93         end
94         
95         // Define the path of the file that will record the change according to
96         // the "section" value
97         // =========================================================================
98         atoms_directory = atomsPath("system",section);
99         
100         // Does the atoms_directory exist, if not create it
101         // =========================================================================
102         
103         if ~ isdir(atoms_directory) then
104                 mkdir(atoms_directory);
105         end
106         
107         // Does the SCIHOME/atoms/autoloaded exist, if yes load it
108         // =========================================================================
109         
110         if fileinfo(atoms_directory+"autoloaded") <> [] then
111                 autoloaded = mgetl(atoms_directory+"autoloaded");
112         end
113         
114         // Check if all input modules are installed
115         // =========================================================================
116         
117         if ~ and(atomsIsInstalled(name,version)) then
118                 mprintf(gettext("%s: The following modules are not installed:\n"),"atomsAutoloadAdd");
119                 for i=1:size(name,"*")
120                         if ~ atomsIsInstalled(name(i),version(i)) then
121                                 mprintf(gettext("\t - ''%s - %s''\n"),name(i),version(i));
122                         end
123                 end
124                 error("");
125         end
126         
127         // A module installed in the user section cannot be add in the "autoload" list 
128         // of all users
129         
130         if (rhs>=3) & (section=="allusers") & (~ atomsIsInstalled(name,version,"allusers")) then
131                 mprintf(gettext("%s: The following modules are installed in the user section, you cannot add them in the ""autoload"" list for all users:\n"),"atomsAutoloadAdd");
132                 for i=1:size(name,"*")
133                         if ~ atomsIsInstalled(name(i),version(i),"allusers") then
134                                 mprintf(gettext("\t - ''%s - %s''\n"),name(i),version(i));
135                         end
136                 end
137                 error("");
138         end
139         
140         // Loop on each module specified as input argument
141         // =========================================================================
142         
143         for i=1:size(name,"*")
144                 
145                 // Add the package only if it doesn't already exist
146                 
147                 if find(autoloaded == name(i)+" - "+version(i)) == [] then
148                         nbAdd      = nbAdd + 1;
149                         autoloaded = [ autoloaded ; name(i)+" - "+version(i) ];
150                 end
151                 
152         end
153         
154         // Apply changes
155         // =========================================================================
156         
157         if nbAdd > 0 then
158                 mputl(autoloaded,atoms_directory+"autoloaded");
159         end
160         
161 endfunction