better detection of LCC-Win32 and easier to use with scilab
Allan Cornet [Tue, 29 Jan 2008 09:47:24 +0000 (09:47 +0000)]
install lcc and launch scilab after

scilab/modules/dynamic_link/etc/dynamic_link.start
scilab/modules/dynamic_link/macros/VCtoLCCLib.sci
scilab/modules/dynamic_link/macros/configure_lcc.sci
scilab/modules/dynamic_link/macros/findlcccompiler.sci
scilab/modules/dynamic_link/macros/with_lcc.sci

index 70024d8..e4d93a4 100644 (file)
@@ -8,11 +8,6 @@ load('SCI/modules/dynamic_link/macros/lib');
 // ====================================================================
 //add help chapter
 add_module_help_chapter('dynamic_link');
-// LCC initialization =================================================
-global LCC; 
-if ~MSDOS then
- LCC=%F;
-end
 // Configure Environment Variables for Ms Visual C ====================
 if MSDOS then
        if (~isdef('WSCI')) then
@@ -20,14 +15,13 @@ if MSDOS then
        end
        if (findmsvccompiler()<>'unknown') then
     configure_msvc();
-    LCC=%F; // Always choose MsVc if it is installed by default
-    clear configure_msvc
+    clear configure_msvc 
   else
     if ( findlcccompiler() ) then
-      LCC=%T;
       configure_lcc();
-      clear configure_lcc findlcccompiler
+      clear configure_lcc
     end
+    clear findlcccompiler
   end
   clear findmsvccompiler
 end
index 2f974fd..4d5b691 100644 (file)
@@ -1,42 +1,48 @@
-//-------------------------------------------------------------------
-// Allan CORNET INRIA 2004 - 2006
-// Export LibScilab for LCC compiler
-//-------------------------------------------------------------------
+//==========================================
+// Allan CORNET
+// INRIA 2008
+// Export Libraries of Scilab for LCC compiler
+//==========================================
 function VCtoLCCLib()
-if with_lcc()==%t then
-       if MSDOS==%t then
-               DirCur=pwd();
+  // LCC-Win32 only on Windows
+  if (findlcccompiler() == %t) then
+               DirCur = pwd();
                chdir(WSCI+'\bin');
                mkdir('lcclib');
-       
+
                Exportalibrary('LibScilab');
+               Exportalibrary('libf2c');
                ExportAtlasLibrary();
                Exportalibrary('lapack');
                Exportalibrary('scicos');
-               Exportalibrary('libf2c');
                Exportalibrary('intersci');
+               Exportalibrary('dynamic_link');
+               Exportalibrary('scioutput_stream');
+               Exportalibrary('MALLOC');
        
                chdir(DirCur);
        end
+       
 end
+
 endfunction
-//-------------------------------------------------------------------
-function bOK=Exportalibrary(libraryname)
+//==========================================
+function bOK = Exportalibrary(libraryname)
   printf('\nExports from '+libraryname+'.dll\n');
        unix('pedump /exp '+libraryname+'.dll >'+TMPDIR+filesep()+libraryname+'.lcc');
        printf('Converting Library');
        
-       fw=mopen(TMPDIR+filesep()+libraryname+'.exp',"w");
-       fr=mopen(TMPDIR+filesep()+libraryname+'.lcc',"r");
+       fw = mopen(TMPDIR+filesep()+libraryname+'.exp',"w");
+       fr = mopen(TMPDIR+filesep()+libraryname+'.lcc',"r");
        
        if (meof(fr) == 0) then 
-               line=mfscanf(1,fr,"%s");
+               line = mfscanf(1,fr,"%s");
                mfprintf(fw,"%s\n",line);
                printf('.');
        end
 
        while ( meof(fr) == 0)
-               line=mfscanf(1,fr,"%s");
+               line = mfscanf(1,fr,"%s");
                if (line ~= []) then
                        mfprintf(fw,"_%s\n",line);
                end
@@ -46,28 +52,30 @@ function bOK=Exportalibrary(libraryname)
        mclose(fr);
        
        printf('\nBuild '+libraryname+'.lib (Please waiting).\n');
-       command='buildLib ""'+TMPDIR+filesep()+libraryname+'.exp""'+' ""'+WSCI+'\bin\lcclib\'+libraryname+'.lib""';
+       command = 'buildLib ""'+TMPDIR+filesep()+libraryname+'.exp""'+' ""'+WSCI+'\bin\lcclib\'+libraryname+'.lib""';
        unix(command);
        bOK=%T;
 endfunction
-//-------------------------------------------------------------------
+//==========================================
 function ExportAtlasLibrary()
        
        printf('\nExports from blasplus.dll\n')
        unix('pedump /exp blasplus.dll >'+TMPDIR+'\blasplus.lcc');
        printf('Converting Library');
        
-       fw=mopen(TMPDIR+'\blaspluslcc.exp',"w");
-       fr=mopen(TMPDIR+'\blasplus.lcc',"r");
+       fw = mopen(TMPDIR+'\blaspluslcc.exp',"w");
+       fr = mopen(TMPDIR+'\blasplus.lcc',"r");
 
        if (meof(fr) == 0) then 
-               line=mfscanf(1,fr,"%s");
+               line = mfscanf(1,fr,"%s");
                mfprintf(fw,"blasplus.dll\n");
        end
 
        i=1;
+       // TO DO : update this part
+       // see MKL compatibility
        while ( meof(fr) == 0)
-               line=mfscanf(1,fr,"%s");
+               line = mfscanf(1,fr,"%s");
                if (line ~= []) then
                        mfprintf(fw,"_%s_  %s @%d\n",line,line,i);
                        i=i+1;
@@ -80,4 +88,4 @@ function ExportAtlasLibrary()
        printf('\nBuild Atlas.lib\n');
        unix('buildLib ""'+TMPDIR+'\Atlaslcc.exp""'+' ""'+WSCI+'\bin\lcclib\'+'blasplus.lib""');
 endfunction
-//-------------------------------------------------------------------
+//==========================================
index dcfb7dc..7891693 100644 (file)
@@ -33,7 +33,16 @@ function bOK = configure_lcc()
                 PATH;
       err = setenv('PATH',NEWPATH);
       if (err == %F) then bOK = %F,return,end
-      bOK=%T;
+      
+      LCCLIB_DIR = SCI+'/bin/lcclib';
+      
+      if ( (fileinfo(LCCLIB_DIR) == []) | (ls(LCCLIB_DIR+'/*.lib') == []) ) then
+        printf('\nConverts libraries to use LCC-Win32.\n');
+        bOK = call_VCtoLCCLib();
+      else
+        bOK = %T;
+      end
+      
     else
       bOK=%F;
     end
@@ -41,3 +50,12 @@ function bOK = configure_lcc()
   
 endfunction
 //==========================================
+function r = call_VCtoLCCLib()
+  try
+    VCtoLCCLib();
+    r = %T;
+  catch
+    r = %F;
+  end
+endfunction
+//==========================================
index 456da96..5858896 100644 (file)
@@ -7,9 +7,10 @@ function res = findlcccompiler()
   res = %F;
   if MSDOS then
     try
-      winqueryreg('HKEY_CURRENT_USER', ..
-                  'Software\lcc\compiler', ..
-                  'includepath');
+      lccincludepath = winqueryreg('HKEY_CURRENT_USER', ..
+                                   'Software\lcc\compiler', ..
+                                   'includepath');
+                        
     catch
       return;
     end
@@ -18,7 +19,14 @@ function res = findlcccompiler()
       winqueryreg('HKEY_CURRENT_USER', ..
                   'Software\lcc\lcclnk', ..
                   'libpath');
-      res = %T;
+      index = strindex(lccincludepath,filesep());
+      szindex = size(index);
+      lccbasepath = part(lccincludepath,[1:index(szindex(2))]);
+      lccbinpath = lccbasepath + 'bin';
+      lccexe = lccbinpath + filesep() + 'lcc.exe';
+      if ( fileinfo(lccexe) <> [] ) then
+        res = %T;
+      end
     catch
       return; 
     end
index 8a551aa..9203531 100644 (file)
@@ -3,7 +3,24 @@
 // Allan CORNET
 //==========================================
 function r = with_lcc()
-  global LCC
-  r = LCC;
+
+ if MSDOS then // Windows
+    // Visual Studio C++ 
+    if ( findmsvccompiler() <> 'unknown' ) then 
+      r = %F;
+    else
+      // LCC-WIN32
+      if ( findlcccompiler() == %T ) then
+        r = %T;
+      else
+      // another compiler
+        r = %F;
+      end
+    end
+  
+  else // LINUX
+    r = %F;
+  end
+
 endfunction
 //==========================================
\ No newline at end of file