Bug #9798 fixed - .quit script of atoms modules were not evaluated when leaving Scilab. 14/6514/2
Allan CORNET [Wed, 29 Feb 2012 10:43:55 +0000 (11:43 +0100)]
Change-Id: I53e85e6346fd9599cc640d00a25f857e344d0731

SEP/INDEX
SEP/SEP_077_atomsQuit.odt [new file with mode: 0644]
scilab/CHANGES_5.4.X
scilab/contrib/toolbox_skeleton/.gitignore
scilab/contrib/xcos_toolbox_skeleton/.gitignore
scilab/etc/scilab.quit
scilab/modules/atoms/help/en_US/atomsQuit.xml [new file with mode: 0644]
scilab/modules/atoms/macros/atomsQuit.sci [new file with mode: 0644]
scilab/modules/modules_manager/help/en_US/tbx_build_loader.xml
scilab/modules/modules_manager/macros/tbx_build_cleaner.sci
scilab/modules/modules_manager/macros/tbx_build_loader.sci

index c4d6b62..aadd06b 100644 (file)
--- a/SEP/INDEX
+++ b/SEP/INDEX
@@ -73,3 +73,4 @@ SEP #073: New convolution functions
 SEP #074: Atoms configuration files management
 SEP #075: New dec2base function
 SEP #076: atomsCheckModule function
+SEP #077: atomsQuit function
diff --git a/SEP/SEP_077_atomsQuit.odt b/SEP/SEP_077_atomsQuit.odt
new file mode 100644 (file)
index 0000000..6e47818
Binary files /dev/null and b/SEP/SEP_077_atomsQuit.odt differ
index 8190c3d..a138ff3 100644 (file)
@@ -171,6 +171,26 @@ Compatibility Functions
 
 * 'mtlb_conv' obsolete. Please use 'conv' instead.
 
+ATOMS
+=======
+
+* 'atomsQuit' function added to allow to call .quit of modules loaded by ATOMS
+  when user closes Scilab session. see SEP #77.
+
+* tbx_build_loader generates also a unloader.sce to allow to call .quit file of
+   an ATOMS module.
+
+* Bug #9798 fixed - .quit script of atoms modules were not evaluated when 
+                    leaving Scilab.
+
+* Bug #10494 fixed - atomsInstall and atomsLoad were not clearly distinguished
+                     in the documentation.
+
+* Bug #10500 fixed - ATOMS module without DESCRIPTION file returned a wrong
+                     error message.
+
+* Bug #10707 fixed - atomsInstall failed to use the path shortcut.
+
 
 Bug fixes
 =========
@@ -278,12 +298,6 @@ Bug fixes
 
 * Bug #10482 fixed - Wrong error message in format function fixed.
 
-* Bug #10494 fixed - atomsInstall and atomsLoad were not clearly distinguished
-                     in the documentation.
-
-* Bug #10500 fixed - ATOMS module without DESCRIPTION file returned a wrong
-                     error message.
-
 * Bug #10503 fixed - error(999.666) did trunc error code without an error.
 
 * Bug #10506 fixed - ssprint did not check input arguments.
@@ -355,8 +369,6 @@ Bug fixes
 
 * Bug #10685 fixed - inttrap help page moved to differential calculus module.
 
-* Bug #10707 fixed - atomsInstall failed to use the path shortcut.
-
 * Bug #10710 fixed - Wrong error message fixed in xml module.
 
 * Bug #10716 fixed - The help page of acos badly talked about vectors instead of matrices.
index 1195f35..d5d9066 100644 (file)
@@ -2,6 +2,7 @@
 # Generated files (common)
 #
 loader.sce
+unloader.sce
 cleaner.sce
 loader_gateway.sce
 cleaner_gateway.sce
index 26e6cd9..5339fd0 100644 (file)
@@ -3,6 +3,7 @@
 #
 cleaner.sce
 loader.sce
+unloader.sce
 jar/
 sci_gateway/c/xcos_toolbox_skeleton_c.c
 libxcos_toolbox_skeleton*.*
index 338710b..816b3c7 100644 (file)
 // ====================================================================
 function scilabQuit()
 
+  // ATOMS ===============================================================
+  if with_module("atoms") then
+    if sciargs() <> "-noatomsautoload" then
+      atomsQuit();
+    end
+  end
+
   // starts modules .quit
   modules = getmodules();
 
diff --git a/scilab/modules/atoms/help/en_US/atomsQuit.xml b/scilab/modules/atoms/help/en_US/atomsQuit.xml
new file mode 100644 (file)
index 0000000..2ee5fa9
--- /dev/null
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+  * Copyright (C) DIGITEO - 2012 - Allan CORNET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ -->
+<refentry version="5.0-subset Scilab" xml:id="atomsQuit" xml:lang="en"
+          xmlns="http://docbook.org/ns/docbook"
+          xmlns:xlink="http://www.w3.org/1999/xlink"
+          xmlns:svg="http://www.w3.org/2000/svg"
+          xmlns:ns3="http://www.w3.org/1999/xhtml"
+          xmlns:mml="http://www.w3.org/1998/Math/MathML"
+          xmlns:db="http://docbook.org/ns/docbook">
+  <refnamediv>
+    <refname>atomsQuit</refname>
+    <refpurpose>Unload (call .quit file of) external modules previously loaded by ATOMS</refpurpose>
+  </refnamediv>
+  
+  <refsynopsisdiv>
+    <title>Calling Sequence</title>
+    <synopsis>
+      result = atomsQuit();
+    </synopsis>
+  </refsynopsisdiv>
+  
+  <refsection>
+    <title>Arguments</title>
+    
+    <variablelist>
+      <varlistentry>
+        <term>result</term>
+        <listitem>
+          <para>scalar boolean %T or %F</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsection>
+  
+  <refsection>
+    <title>Description</title>
+    <para><literal>atomsQuit</literal>unload (call .quit file of) external modules previously loaded by ATOMS.</para>
+    <para>This function is called by SCI/etc/scilab.quit</para>
+  </refsection>
+
+  <refsection role="see also">
+    <title>See Also</title>
+    <simplelist type="inline">
+      <member>
+        <link linkend="atomsIsLoaded">atomsIsLoaded</link>
+      </member>
+      <member>
+        <link linkend="atomsGetLoaded">atomsGetLoaded</link>
+      </member>
+      <member>
+        <link linkend="atomsGetLoaded">atomsInstall</link>
+      </member>
+    </simplelist>
+  </refsection>
+  <refsection>
+    <title>History</title>
+    <revhistory>
+      <revision>
+        <revnumber>5.4.0</revnumber>
+        <revremark>This function added in Scilab 5.4.0</revremark>
+      </revision>
+    </revhistory>
+  </refsection>
+</refentry>
diff --git a/scilab/modules/atoms/macros/atomsQuit.sci b/scilab/modules/atoms/macros/atomsQuit.sci
new file mode 100644 (file)
index 0000000..cca4977
--- /dev/null
@@ -0,0 +1,49 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2012 - DIGITEO - Allan CORNET
+//
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+
+// Call .quit file of loaded modules
+
+function result = atomsQuit()
+
+  result = %T;
+
+  // Load Atoms Internals lib if it's not already loaded
+  // =========================================================================
+  if ~ exists("atomsinternalslib") then
+    load("SCI/modules/atoms/macros/atoms_internals/lib");
+  end
+
+  // If the autoload system is disabled, no need to continue
+  // =========================================================================
+  if atomsGetConfig("autoload") == "False" then
+    return;
+  end
+
+  atomsModulesLoaded = atomsGetLoaded();
+  sizeLoaded = size(atomsModulesLoaded);
+  for i = 1:sizeLoaded(1)
+
+    this_package_name = atomsModulesLoaded(i, 1);
+    this_package_path = atomsModulesLoaded(i, 4);
+    this_package_version = atomsModulesLoaded(i, 2);
+
+    if ~isempty(this_package_path) then
+      if isdir(this_package_path) then
+        moduleLoadedFullFilename = fullfile(this_package_path, "unloader.sce");
+        if isfile(moduleLoadedFullFilename) then
+          if exec(moduleLoadedFullFilename, "errcatch") <> 0 then
+            txt = msprintf(gettext("%s: An error occurred while unloading ''%s-%s'':\n"), "atomsQuit", this_package_name, this_package_version);
+            warning(txt);
+            result = %F;
+          end
+        end
+      end
+    end
+  end
+endfunction
index 5ba1fb3..f6ec0a6 100644 (file)
@@ -16,7 +16,7 @@
   </info>
   <refnamediv>
     <refname>tbx_build_loader</refname>
-    <refpurpose>Generate a loader.sce script (toolbox compilation process)</refpurpose>
+    <refpurpose>Generate loader.sce and unloader scripts (toolbox compilation process)</refpurpose>
   </refnamediv>
   <refsynopsisdiv>
     <title>Calling Sequence</title>
 tbx_build_loader("mytoolbox", get_absolute_file_path('builder.sce'))
  ]]></programlisting>
   </refsection>
+  <refsection>
+    <title>History</title>
+    <revhistory>
+      <revision>
+        <revnumber>5.4.0</revnumber>
+        <revremark>This function generates also an unloader.sce script</revremark>
+      </revision>
+    </revhistory>
+  </refsection>
+  
 </refentry>
index 1f6ecf2..f15639a 100644 (file)
@@ -1,6 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2009-2010 - DIGITEO - Allan CORNET
 // Copyright (C) 2010 - DIGITEO - Pierre MARECHAL
+// Copyright (C) 2009-2012 - DIGITEO - Allan CORNET
 //
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
 
 // Generate a cleaner.sce script for the toolbox
 
-function tbx_build_cleaner(name,path)
+function tbx_build_cleaner(name, path)
 
-    rhs = argn(2);
+  rhs = argn(2);
 
-    // Number of input arguments
+  // Number of input arguments
 
-    if and(rhs <> [1 2]) then
-        error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"),"tbx_build_cleaner",1,2));
-    end
-
-    // Input argument N°1
-    // → name
-
-    if type(name) <> 10 then
-        error(msprintf(gettext("%s: Wrong type for input argument #%d: A string expected.\n"),"tbx_build_cleaner",1));
-    end
+  if and(rhs <> [1 2]) then
+    error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"), "tbx_build_cleaner", 1, 2));
+  end
 
-    if size(name,"*") <> 1 then
-        error(msprintf(gettext("%s: Wrong size for input argument #%d: A string expected.\n"),"tbx_build_cleaner",1));
-    end
+  // Input argument N°1
+  // name
 
-    // Input argument N°2
-    // → path
+  if type(name) <> 10 then
+    error(msprintf(gettext("%s: Wrong type for input argument #%d: A string expected.\n"), "tbx_build_cleaner", 1));
+  end
 
-    if rhs < 2 then
-        path = pwd();
+  if size(name,"*") <> 1 then
+    error(msprintf(gettext("%s: Wrong size for input argument #%d: A string expected.\n"), "tbx_build_cleaner", 1));
+  end
 
-    else
-        if type(path) <> 10 then
-            error(msprintf(gettext("%s: Wrong type for input argument #%d: A string expected.\n"),"tbx_build_cleaner",2));
-        end
+  // Input argument N°2
+  // path
 
-        if size(path,"*") <> 1 then
-            error(msprintf(gettext("%s: Wrong size for input argument #%d: A string expected.\n"),"tbx_build_cleaner",2));
-        end
+  if rhs < 2 then
+    path = pwd();
+  else
+    if type(path) <> 10 then
+      error(msprintf(gettext("%s: Wrong type for input argument #%d: A string expected.\n"), "tbx_build_cleaner", 2));
+    end
 
-        if ~isdir(path) then
-            error(msprintf(gettext("%s: The directory ''%s'' doesn''t exist or is not read accessible.\n"),"tbx_build_cleaner",path));
-        end
+    if size(path,"*") <> 1 then
+      error(msprintf(gettext("%s: Wrong size for input argument #%d: A string expected.\n"), "tbx_build_cleaner", 2));
     end
 
-    // build the cleaner file
-
-    mprintf(gettext("Generating cleaner.sce...\n"));
-
-    cleanertxt = [
-        "// This file is released under the 3-clause BSD license. See COPYING-BSD.",
-        "// Generated by builder.sce: Please, do not edit this file",
-        "",
-        "try",
-        "    getversion(""scilab"");",
-        "catch",
-        "    error(""Scilab 5.0 or more is required."");",
-        "end",
-        "function perform_clean()",
-        "    root_tlbx = get_absolute_file_path(''cleaner.sce'');",
-        "",
-        "    if isfile(root_tlbx + ''/macros/cleanmacros.sce'') then",
-        "        exec(root_tlbx+''/macros/cleanmacros.sce'');",
-        "    end",
-        "",
-        "    if isfile(root_tlbx + ''/src/cleaner_src.sce'') then",
-        "        exec(root_tlbx+''/src/cleaner_src.sce'');",
-        "    end",
-        "",
-        "    if isfile(root_tlbx + ""/sci_gateway/cleaner_gateway.sce"") then",
-        "        exec(root_tlbx + ""/sci_gateway/cleaner_gateway.sce"");",
-        "        mdelete(root_tlbx + ""/sci_gateway/cleaner_gateway.sce"");",
-        "     end",
-        "",
-        "    if isfile(root_tlbx + ""/help/cleaner_help.sce"") then",
-        "        exec(root_tlbx + ""/help/cleaner_help.sce"");",
-        "    end",
-        "",
-        "    if isfile(root_tlbx + ""/loader.sce"") then",
-        "        mdelete(root_tlbx + ""/loader.sce"");",
-        "    end",
-        "endfunction",
-        "perform_clean();",
-        "clear perform_clean;"];
-
-    cleanerfile = pathconvert(path+"/cleaner.sce",%F);
-
-    if ~mputl(cleanertxt,cleanerfile) then
-        error(msprintf(gettext("%s: The file %s cannot been created, please check if you have write access on this file.\n"),"tbx_build_cleaner",cleanerfile));
+    if ~isdir(path) then
+      error(msprintf(gettext("%s: The directory ''%s'' doesn''t exist or is not read accessible.\n"), "tbx_build_cleaner", path));
     end
+  end
+
+  // build the cleaner file
+
+  mprintf(gettext("Generating cleaner.sce...\n"));
+
+  cleanertxt = [
+  "// This file is released under the 3-clause BSD license. See COPYING-BSD.",
+  "// Generated by builder.sce: Please, do not edit this file",
+  "",
+  "try",
+  "  getversion(""scilab"");",
+  "catch",
+  "  error(""Scilab 5.0 or more is required."");",
+  "end",
+  "function perform_clean()",
+  "  root_tlbx = get_absolute_file_path(''cleaner.sce'');",
+  "",
+  "  if isfile(root_tlbx + ''/macros/cleanmacros.sce'') then",
+  "    exec(root_tlbx+''/macros/cleanmacros.sce'');",
+  "  end",
+  "",
+  "  if isfile(root_tlbx + ''/src/cleaner_src.sce'') then",
+  "    exec(root_tlbx+''/src/cleaner_src.sce'');",
+  "  end",
+  "",
+  "  if isfile(root_tlbx + ""/sci_gateway/cleaner_gateway.sce"") then",
+  "    exec(root_tlbx + ""/sci_gateway/cleaner_gateway.sce"");",
+  "    mdelete(root_tlbx + ""/sci_gateway/cleaner_gateway.sce"");",
+  "   end",
+  "",
+  "  if isfile(root_tlbx + ""/help/cleaner_help.sce"") then",
+  "    exec(root_tlbx + ""/help/cleaner_help.sce"");",
+  "  end",
+  "",
+  "  if isfile(root_tlbx + ""/loader.sce"") then",
+  "    mdelete(root_tlbx + ""/loader.sce"");",
+  "  end",
+  "",    
+  "  if isfile(root_tlbx + ""/unloader.sce"") then",
+  "    mdelete(root_tlbx + ""/unloader.sce"");",
+  "  end",
+
+  "endfunction",
+  "perform_clean();",
+  "clear perform_clean;"];
+
+  cleanerfile = pathconvert(path+"/cleaner.sce", %F);
+
+  if ~mputl(cleanertxt, cleanerfile) then
+    error(msprintf(gettext("%s: The file %s cannot been created, please check if you have write access on this file.\n"), "tbx_build_cleaner", cleanerfile));
+  end
 
 endfunction
index b64379d..cc42963 100644 (file)
@@ -1,7 +1,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2008 - INRIA - Simon LIPP <simon.lipp@scilab.org>
-// Copyright (C) 2010 - DIGITEO - Allan CORNET
 // Copyright (C) 2010 - DIGITEO - Pierre MARECHAL
+// Copyright (C) 2010-2012 - DIGITEO - Allan CORNET
 //
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
 
 // Generate a loader.sce script for the toolbox
 
-function tbx_build_loader(name,path)
+function tbx_build_loader(name, path)
 
-    rhs = argn(2);
+  rhs = argn(2);
 
-    // Number of input arguments
+  // Number of input arguments
 
-    if and(rhs<> [1 2]) then
-        error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"),"tbx_build_loader",1,2));
-    end
-
-    // Input argument N°1
-    // → name
-
-    if type(name) <> 10 then
-        error(msprintf(gettext("%s: Wrong type for input argument #%d: A string expected.\n"),"tbx_build_loader",1));
-    end
-
-    if size(name,"*") <> 1 then
-        error(msprintf(gettext("%s: Wrong size for input argument #%d: A string expected.\n"),"tbx_build_loader",1));
-    end
+  if and(rhs <> [1 2]) then
+    error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"), "tbx_build_loader", 1, 2));
+  end
 
-    // Input argument N°2
-    // → path
+  // Input argument N°1
+  // name
 
-    if rhs < 2 then
-        path = pwd();
+  if type(name) <> 10 then
+    error(msprintf(gettext("%s: Wrong type for input argument #%d: A string expected.\n"), "tbx_build_loader", 1));
+  end
 
-    else
-        if type(path) <> 10 then
-            error(msprintf(gettext("%s: Wrong type for input argument #%d: A string expected.\n"),"tbx_build_loader",2));
-        end
+  if size(name, "*") <> 1 then
+    error(msprintf(gettext("%s: Wrong size for input argument #%d: A string expected.\n"), "tbx_build_loader", 1));
+  end
 
-        if size(path,"*") <> 1 then
-            error(msprintf(gettext("%s: Wrong size for input argument #%d: A string expected.\n"),"tbx_build_loader",2));
-        end
+  // Input argument N°2
+  // path
 
-        if ~isdir(path) then
-            error(msprintf(gettext("%s: The directory ''%s'' doesn''t exist or is not read accessible.\n"),"tbx_build_loader",path));
-        end
+  if rhs < 2 then
+    path = pwd();
+  else
+    if type(path) <> 10 then
+      error(msprintf(gettext("%s: Wrong type for input argument #%d: A string expected.\n"), "tbx_build_loader", 2));
     end
 
-    // build the loader file
-
-    mprintf(gettext("Generating loader.sce...\n"));
-
-    loadertxt = [
-        "// This file is released under the 3-clause BSD license. See COPYING-BSD.",
-        "// Generated by builder.sce: Please, do not edit this file",
-        "",
-        "try",
-        " getversion(""scilab"");",
-        "catch",
-        " error(""Scilab 5.0 or more is required."");",
-        "end;",
-        "",
-        "exec(get_absolute_file_path(""loader.sce"")+""etc"+filesep()+"""+"""+name+".start"");"];
-
-    loaderfile = pathconvert(path+"/loader.sce",%F);
+    if size(path,"*") <> 1 then
+      error(msprintf(gettext("%s: Wrong size for input argument #%d: A string expected.\n"), "tbx_build_loader", 2));
+    end
 
-    if ~mputl(loadertxt,loaderfile) then
-        error(msprintf(gettext("%s: The file %s cannot been created, please check if you have write access on this file.\n"),"tbx_build_loader",loaderfile));
+    if ~isdir(path) then
+      error(msprintf(gettext("%s: The directory ''%s'' doesn''t exist or is not read accessible.\n"), "tbx_build_loader", path));
     end
+  end
+
+  // build the loader file
+
+  mprintf(gettext("Generating loader.sce...\n"));
+
+  loadertxt = [
+  "// This file is released under the 3-clause BSD license. See COPYING-BSD.",
+  "// Generated by builder.sce: Please, do not edit this file",
+  "",
+  "try",
+  " getversion(""scilab"");",
+  "catch",
+  " error(""Scilab 5.0 or more is required."");",
+  "end;",
+  "",
+  "exec(get_absolute_file_path(""loader.sce"")+""etc"+filesep()+"""+"""+name+".start"");"];
+
+  loaderfile = pathconvert(path + "/loader.sce", %F);
+
+  if ~mputl(loadertxt, loaderfile) then
+    error(msprintf(gettext("%s: The file %s cannot been created, please check if you have write access on this file.\n"), "tbx_build_loader", loaderfile));
+  end
+
+  mprintf(gettext("Generating unloader.sce...\n"));
+  
+  unloadertxt = [
+  "// This file is released under the 3-clause BSD license. See COPYING-BSD.",
+  "// Generated by builder.sce: Please, do not edit this file",
+  "",
+  "try",
+  " getversion(""scilab"");",
+  "catch",
+  " error(""Scilab 5.4 or more is required."");",
+  "end;",
+  "",
+  "fileQuit = get_absolute_file_path(""unloader.sce"") + ""etc" + filesep() + """ + """ + name + ".quit"";",
+  "if isfile(fileQuit) then",
+  "  exec(fileQuit);",
+  "end"
+  ""];
+  
+  unloaderfile = pathconvert(path + "/unloader.sce", %F);
+
+  if ~mputl(unloadertxt, unloaderfile) then
+    error(msprintf(gettext("%s: The file %s cannot been created, please check if you have write access on this file.\n"), "tbx_build_loader", unloaderfile));
+  end
 
 endfunction