enable toolbox compilation with vs2012 on Windows 8 85/9785/6
Antoine ELIAS [Sat, 24 Nov 2012 07:34:33 +0000 (23:34 -0800)]
Change-Id: Ibfd2440ffd0831d0db7b6b5ee5170f2baeb4fb89

scilab/modules/dynamic_link/macros/detectmsvc64tools.sci
scilab/modules/dynamic_link/macros/windows/dlwConfigureVcx64.sci
scilab/modules/dynamic_link/macros/windows/dlwConfigureVcx86.sci
scilab/modules/dynamic_link/macros/windows/dlwFindMsVcCompiler.sci
scilab/modules/dynamic_link/macros/windows/dlwGet64BitPath.sci
scilab/modules/dynamic_link/macros/windows/dlwGetVc11ExpressPath.sci
scilab/modules/dynamic_link/macros/windows/dlwGetVc11ProPath.sci [new file with mode: 0644]
scilab/modules/dynamic_link/macros/windows/dlwIsVc11Express.sci [new file with mode: 0644]
scilab/modules/dynamic_link/macros/windows/dlwIsVc11Pro.sci [new file with mode: 0644]
scilab/modules/dynamic_link/macros/windows/dlwSetEnvCommonVc11.sci [new file with mode: 0644]
scilab/modules/dynamic_link/macros/windows/dlwSetEnvVc11.sci [new file with mode: 0644]

index e89cae0..2e20460 100644 (file)
@@ -42,13 +42,15 @@ function bOK = detectmsvc64tools()
         load("SCI/modules/dynamic_link/macros/windows/lib");
     end
 
-    if win64() then
-        compiler = findmsvccompiler();
-        supported_compiler = ["msvc100pro", ..
-        "msvc100express", ..
-        "msvc90pro", ..
-        "msvc90std", ..
-        "msvc90express"];
+  if win64() then
+    compiler = findmsvccompiler();
+    supported_compiler = ['msvc110pro', ..
+                          'msvc110express', ..
+                          'msvc100pro', ..
+                          'msvc100express', ..
+                          'msvc90pro', ..
+                          'msvc90std', ..
+                          'msvc90express'];
 
         if (find(supported_compiler == compiler) <> []) then
             MSVCBIN64PATH = dlwGet64BitPath() + filesep() + "VC\bin\amd64";
index 1d17175..6796544 100644 (file)
@@ -9,32 +9,38 @@
 
 //=============================================================================
 function bOK = dlwConfigureVcx64()
-    bOK = %F;
-    msvc = findmsvccompiler();
-
-    select msvc,
-        // Microsoft Visual 2010 Studio Professional
-    case  "msvc100pro" then
-        bOK = dlwSetEnvVc10(msvc, %t);
-
-        // Microsoft Visual 2010 Express
-    case  "msvc100express" then
-        bOK = dlwSetEnvVc10(msvc, %t);
-
-        // Microsoft Visual 2008 Studio Professional
-    case  "msvc90pro" then
-        bOK = dlwSetEnvVc90(msvc, %t);
-
-        // Microsoft Visual 2008 Studio Standard
-    case  "msvc90std" then
-        bOK = dlwSetEnvVc90(msvc, %t);
-
-        // Microsoft Visual 2008 Express
-    case  "msvc90express" then
-        bOK = dlwSetEnvVc90(msvc, %t);
-    else
-    end
+  bOK = %F;
+  msvc = findmsvccompiler();
+
+  select msvc,
+     // Microsoft Visual 2012 Studio Professional
+     case  'msvc110pro' then
+     bOK = dlwSetEnvVc11(msvc, %t);
+
+     // Microsoft Visual 2012 Express
+     case  'msvc110express' then
+     bOK = dlwSetEnvVc11(msvc, %t);
+     
+     // Microsoft Visual 2010 Studio Professional
+     case  'msvc100pro' then
+     bOK = dlwSetEnvVc10(msvc, %t);
+
+     // Microsoft Visual 2010 Express
+     case  'msvc100express' then
+     bOK = dlwSetEnvVc10(msvc, %t);
+
+     // Microsoft Visual 2008 Studio Professional
+     case  'msvc90pro' then
+     bOK = dlwSetEnvVc90(msvc, %t);
+
+     // Microsoft Visual 2008 Studio Standard
+     case  'msvc90std' then
+     bOK = dlwSetEnvVc90(msvc, %t);
+
+    // Microsoft Visual 2008 Express
+    case  'msvc90express' then
+    bOK = dlwSetEnvVc90(msvc, %t);
+  else
+  end  
 endfunction
 //=============================================================================
-
-
index 24131f0..60ad3d6 100644 (file)
@@ -9,50 +9,58 @@
 
 //=============================================================================
 function bOK = dlwConfigureVcx86()
-    bOK = %F;
-    msvc = findmsvccompiler();
-
-    select msvc,
-        // Microsoft Visual 2010 Studio Professional
-    case  "msvc100pro" then
-        bOK = dlwSetEnvVc10(msvc, %f);
-
-        // Microsoft Visual 2010 Express
-    case  "msvc100express" then
-        bOK = dlwSetEnvVc10(msvc, %f);
-
-        // Microsoft Visual 2008 Studio Professional
-    case  "msvc90pro" then
-        bOK = dlwSetEnvVc90(msvc, %f);
-
-        // Microsoft Visual 2008 Studio Standard
-    case  "msvc90std" then
-        bOK = dlwSetEnvVc90(msvc, %f);
-
-        // Microsoft Visual 2008 Express
-    case  "msvc90express" then
-        bOK = dlwSetEnvVc90(msvc, %f);
-
-        // Microsoft Visual 2005 Studio Professional
-    case  "msvc80pro" then
-        bOK = dlwSetEnvVc80(msvc);
-
-        // Microsoft Visual 2005 Studio Standard
-    case  "msvc80std" then
-        bOK = dlwSetEnvVc80(msvc);
-
-        // Microsoft Visual 2005 Express
-    case  "msvc80express" then
-        bOK = dlwSetEnvVc80(msvc);
-
-        // Microsoft Visual Studio .NET 2003
-    case  "msvc71" then
-        bOK = dlwSetEnvVc71();
-
-        // Microsoft Visual Studio .NET 2002
-    case  "msvc70" then
-        bOK = dlwSetEnvVc70();
-    else
-    end
+  bOK = %F;
+  msvc = findmsvccompiler();
+
+  select msvc,
+    // Microsoft Visual 2012 Studio Professional
+    case  'msvc110pro' then
+    bOK = dlwSetEnvVc11(msvc, %f);
+
+    // Microsoft Visual 2010 Studio Professional
+    case  'msvc100pro' then
+    bOK = dlwSetEnvVc10(msvc, %f);
+
+    // Microsoft Visual 2012 Express
+    case  'msvc110express' then
+    bOK = dlwSetEnvVc11(msvc, %f);
+
+    // Microsoft Visual 2010 Express
+    case  'msvc100express' then
+    bOK = dlwSetEnvVc10(msvc, %f);
+
+    // Microsoft Visual 2008 Studio Professional
+    case  'msvc90pro' then
+    bOK = dlwSetEnvVc90(msvc, %f);
+
+    // Microsoft Visual 2008 Studio Standard
+    case  'msvc90std' then
+    bOK = dlwSetEnvVc90(msvc, %f);
+
+    // Microsoft Visual 2008 Express
+    case  'msvc90express' then
+    bOK = dlwSetEnvVc90(msvc, %f);
+
+    // Microsoft Visual 2005 Studio Professional
+    case  'msvc80pro' then
+    bOK = dlwSetEnvVc80(msvc);
+
+    // Microsoft Visual 2005 Studio Standard
+    case  'msvc80std' then
+    bOK = dlwSetEnvVc80(msvc);
+    
+    // Microsoft Visual 2005 Express
+    case  'msvc80express' then
+    bOK = dlwSetEnvVc80(msvc);
+
+    // Microsoft Visual Studio .NET 2003
+    case  'msvc71' then
+    bOK = dlwSetEnvVc71();
+
+    // Microsoft Visual Studio .NET 2002
+    case  'msvc70' then
+    bOK = dlwSetEnvVc70();
+  else
+  end  
 endfunction
 //=============================================================================
index cf2d19e..432dff1 100644 (file)
@@ -13,8 +13,30 @@ function MSCompiler = dlwFindMsVcCompiler()
 
     // We use always last version of MS compiler
 
-    if dlwIsVc10Pro() & dlwIsVc10Express() then
-        MSCompiler = "msvc100express";     // Microsoft Visual 2010 Express with SDK extension
+
+  if dlwIsVc11Pro() & dlwIsVc11Express() then
+    MSCompiler = 'msvc110express';     // Microsoft Visual 2012 Express with SDK extension
+    return;
+  end
+
+  if dlwIsVc11Express() then
+    MSCompiler = 'msvc110express';     // Microsoft Visual 2012 Express
+    return;
+  end
+
+  if dlwIsVc11Pro() then
+    MSCompiler = 'msvc110pro';       // Microsoft Visual 2012 Professional (or more)
+    return;
+  end
+
+
+  if dlwIsVc10Pro() & dlwIsVc10Express() then
+    MSCompiler = 'msvc100express';     // Microsoft Visual 2010 Express with SDK extension
+    return;
+  end
+
+    if dlwIsVc10Express() then
+        MSCompiler = "msvc100express";     // Microsoft Visual 2010 Express
         return;
     end
 
@@ -23,11 +45,6 @@ function MSCompiler = dlwFindMsVcCompiler()
         return;
     end
 
-    if dlwIsVc10Express() then
-        MSCompiler = "msvc100express";     // Microsoft Visual 2010 Express
-        return;
-    end
-
     if dlwIsVc90Pro() then
         MSCompiler = "msvc90pro";      // Microsoft Visual 2008 Studio Professional
         return;
index 08e33ac..d07112f 100644 (file)
@@ -47,10 +47,6 @@ function vcPath64 = dlwGet64BitPath();
                 vcPath64 = [];
             end
         end
-        
-        // remove last file separator if it exists
-        if vcPath64 <> [] then
-        vcPath64 = pathconvert(vcPath64, %f, %t);
     end
 endfunction
 //=============================================================================
index 75fa41e..3f7c8bd 100644 (file)
@@ -12,7 +12,7 @@ function vcPath = dlwGetVc11ExpressPath()
   vcPath = [];
   try
     vcPath = winqueryreg('HKEY_LOCAL_MACHINE', ..
-                      'Software\Microsoft\VCExpress\11.0\Setup\VC', ..
+                      'Software\Microsoft\VCExpress\11.0\Setup\VS', ..
                       'ProductDir');
   catch
     // remove last error on 'winqueryreg' fails
@@ -20,15 +20,9 @@ function vcPath = dlwGetVc11ExpressPath()
     return;
   end
 
-  //remove VC in path
-  if isdir(vcPath) then
-      temp=pwd();cd(vcPath);cd("..");vcPath = pwd() + "\";cd(temp);   
-      // remove last file separator if it exists
-      if vcPath <> [] then
-        vcPath = pathconvert(vcPath, %f, %t);
-      end
-  else
-    vcPath = [];
-  end      
+  // remove last file separator if it exists
+  if vcPath <> [] then
+    vcPath = pathconvert(vcPath, %f, %t);
+  end
 endfunction
 //=============================================================================
diff --git a/scilab/modules/dynamic_link/macros/windows/dlwGetVc11ProPath.sci b/scilab/modules/dynamic_link/macros/windows/dlwGetVc11ProPath.sci
new file mode 100644 (file)
index 0000000..9b7c696
--- /dev/null
@@ -0,0 +1,29 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) Scilab Enterprises - 2012 - Antoine ELIAS
+//
+// 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
+
+//=============================================================================
+function vcPath = dlwGetVc11ProPath()
+  vcPath = [];
+  try
+    vcPath = winqueryreg('HKEY_LOCAL_MACHINE', ..
+                     'Software\Microsoft\VisualStudio\11.0\Setup\VS', ..
+                     'ProductDir');
+  catch
+    // remove last error on 'winqueryreg' fails
+    lasterror();
+    return;
+  end
+
+  // remove last file separator if it exists
+  if vcPath <> [] then
+    vcPath = pathconvert(vcPath, %f, %t);
+  end
+
+endfunction
+//=============================================================================
diff --git a/scilab/modules/dynamic_link/macros/windows/dlwIsVc11Express.sci b/scilab/modules/dynamic_link/macros/windows/dlwIsVc11Express.sci
new file mode 100644 (file)
index 0000000..68b72d7
--- /dev/null
@@ -0,0 +1,14 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) Scilab Enterprises - 2012 - Antoine ELIAS
+//
+// 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
+
+//=============================================================================
+function bOK = dlwIsVc11Express()
+  bOK = (dlwGetVc11ExpressPath() <> []);
+endfunction
+//=============================================================================
diff --git a/scilab/modules/dynamic_link/macros/windows/dlwIsVc11Pro.sci b/scilab/modules/dynamic_link/macros/windows/dlwIsVc11Pro.sci
new file mode 100644 (file)
index 0000000..a01d51c
--- /dev/null
@@ -0,0 +1,14 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) DIGITEO - 2010 - 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
+
+//=============================================================================
+function bOK = dlwIsVc11Pro()
+  bOK = (dlwGetVc11ProPath() <> []);
+endfunction
+//=============================================================================
diff --git a/scilab/modules/dynamic_link/macros/windows/dlwSetEnvCommonVc11.sci b/scilab/modules/dynamic_link/macros/windows/dlwSetEnvCommonVc11.sci
new file mode 100644 (file)
index 0000000..be89cdb
--- /dev/null
@@ -0,0 +1,198 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) Scilab Enterprises - 2012 - Antoine ELIAS
+//
+// 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
+
+//=============================================================================
+function bOK = dlwSetEnvCommonVc11(MSVSDir, IsExpress, bWin64)
+  bOK = %F;
+
+  windowsSdkPath = dlwGetSdkPath();
+  if (windowsSdkPath <> []) then
+    err = setenv('WindowsSdkDir', windowsSdkPath);
+  else
+    windowsSdkPath = '';
+  end
+
+  err = setenv('VSINSTALLDIR', MSVSDir);
+  if (err == %F) then
+    bOK = %F;
+    return
+  end
+
+  DevEnvDir = MSVSDir + '\Common7\IDE';
+  err = setenv('DevEnvDir', DevEnvDir);
+  if (err == %F) then
+    bOK = %F;
+    return
+  end
+
+  err = setenv('VCINSTALLDIR', MSVSDir + '\VC\');
+  if (err == %F) then
+    bOK = %F;
+    return
+  end
+
+  PATH = getenv('PATH', '');
+  INCLUDE = getenv('INCLUDE', '');
+  LIB = getenv('LIB', '');
+  LIBPATH = getenv('LIBPATH', '');
+
+  if bWin64 then
+    PATH = getNewPATHx64(PATH, MSVSDir, windowsSdkPath, IsExpress);
+    INCLUDE = getNewINCLUDEx64(INCLUDE, MSVSDir, windowsSdkPath, IsExpress);
+    LIB = getNewLIBx64(LIB, MSVSDir, windowsSdkPath, IsExpress);
+    LIBPATH = getNewLIBPATHx64(LIBPATH, MSVSDir, windowsSdkPath, IsExpress);
+  else
+    PATH = getNewPATHx86(PATH, MSVSDir, windowsSdkPath, IsExpress);
+    INCLUDE = getNewINCLUDEx86(INCLUDE, MSVSDir, windowsSdkPath, IsExpress);
+    LIB = getNewLIBx86(LIB, MSVSDir, windowsSdkPath, IsExpress);
+    LIBPATH = getNewLIBPATHx86(LIBPATH, MSVSDir, windowsSdkPath, IsExpress);
+  end
+
+  err = setenv('PATH', PATH);
+  if (err == %F) then
+    bOK = %F;
+    return
+  end
+
+  err = setenv('INCLUDE', INCLUDE);
+  if (err == %F) then
+    bOK = %F;
+    return
+  end
+
+  err = setenv('LIB', LIB);
+  if (err == %F) then
+    bOK = %F;
+    return
+  end
+
+  err = setenv('LIBPATH', LIBPATH);
+  if (err == %F) then
+    bOK = %F;
+    return
+  end
+
+  bOK = %T;
+endfunction
+//=============================================================================
+function newLIB = getNewLIBx64(LIB, msvsPath, sdkPath, bIsExpress)
+  newLIB = '';
+
+  if bIsExpress then
+    Vc64Path = dlwGet64BitPath();
+    newLIB = Vc64Path + '\VC\LIB\amd64' + pathsep();
+  else
+    newLIB = msvsPath + '\VC\ATLMFC\LIB\amd64' + pathsep() + ..
+             msvsPath + '\VC\LIB\amd64' + pathsep();
+  end
+
+  newLIB = newLIB + ..
+           sdkPath + '\lib\x64' + pathsep() + LIB + ..
+           getenv("PROGRAMFILES(X86)") + "\Windows Kits\8.0\Lib\win8\um\x64\;';
+
+endfunction
+//=============================================================================
+function newLIB = getNewLIBx86(LIB, msvsPath, sdkPath, bIsExpress)
+  newLIB = '';
+  if ~bIsExpress then
+    newLIB =  msvsPath + filesep() + 'VC\ATLMFC\LIB' + pathsep();
+  end
+  newLIB = newLIB + ..
+           msvsPath + filesep() + 'VC\LIB' + pathsep() + ..
+           sdkPath + filesep() + 'lib' + pathsep() + ..
+           LIB + ..
+           getenv("PROGRAMFILES(X86)") + "\Windows Kits\8.0\Lib\win8\um\x86\;';
+           
+endfunction
+//=============================================================================
+function newPATH = getNewPATHx64(PATH, msvsPath, sdkPath, bIsExpress)
+  newPATH = '';
+
+  if bIsExpress then
+    Vc64Path = dlwGet64BitPath();
+    newPATH = Vc64Path + '\VC\BIN\amd64' + pathsep();
+  else
+    newPATH = msvsPath + '\VC\BIN\amd64' + pathsep();
+  end
+
+  newPATH = newPATH + ..
+            msvsPath + '\VC\VCPackages' + pathsep() + ..
+            msvsPath + '\Common7\IDE' + pathsep() + ..
+            msvsPath + '\Common7\Tools' + pathsep() + ..
+            msvsPath + '\Common7\Tools\bin' + pathsep() + ..
+            sdkPath + '\bin\x64' + pathsep() + ..
+            sdkPath + '\bin\win64\x64' + pathsep() + ..
+            sdkPath + '\bin' + pathsep() + PATH;
+
+endfunction
+//=============================================================================
+function newPATH = getNewPATHx86(PATH, msvsPath, sdkPath, bIsExpress)
+  newPATH = msvsPath + '\Common7\IDE\' + pathsep() + ..
+            msvsPath + '\VC\bin' + pathsep() + ..
+            msvsPath + '\Common7\Tools'+ pathsep() + ..
+            msvsPath + '\VC\VCPackages' + pathsep() + ..
+            sdkPath + '\bin' + pathsep() + PATH + pathsep();
+endfunction
+//=============================================================================
+function newLIBPATH = getNewLIBPATHx64(LIBPATH, msvsPath, sdkPath, bIsExpress)
+  newLIBPATH = '';
+
+  if bIsExpress then
+    Vc64Path = dlwGet64BitPath();
+    newLIBPATH = Vc64Path +  '\VC\LIB\amd64' + pathsep() + LIBPATH;
+  else
+    newLIBPATH = msvsPath + '\VC\ATLMFC\LIB\amd64' + pathsep() + ..
+                 msvsPath + '\VC\LIB\amd64' + pathsep() + LIBPATH;
+  end
+
+endfunction
+//=============================================================================
+function newLIBPATH = getNewLIBPATHx86(LIBPATH, msvsPath, sdkPath, bIsExpress)
+  newLIBPATH = '';
+
+  if ~bIsExpress then
+    newLIBPATH = msvsPath + '\VC\ATLMFC\LIB' + pathsep();
+  end
+
+  newLIBPATH = newLIBPATH + ..
+               msvsPath + '\VC\LIB';
+endfunction
+//=============================================================================
+function newINCLUDE = getNewINCLUDEx64(INCLUDE, msvsPath, sdkPath, bIsExpress)
+  newINCLUDE = '';
+  if bIsExpress then
+    Vc64Path = dlwGet64BitPath();
+    newINCLUDE = Vc64Path + '\VC\INCLUDE' + pathsep();
+  else
+    newINCLUDE = msvsPath + '\VC\INCLUDE' + pathsep() + ..
+                 msvsPath + '\VC\ATLMFC\INCLUDE' + pathsep();
+  end
+
+  newINCLUDE = newINCLUDE + ..
+               sdkPath + '\include' + pathsep() + INCLUDE + ..
+               getenv("PROGRAMFILES(X86)") + '\Windows Kits\8.0\Include\um;' + ..
+               getenv("PROGRAMFILES(X86)") + '\Windows Kits\8.0\Include\shared;';
+
+endfunction
+//=============================================================================
+function newINCLUDE = getNewINCLUDEx86(INCLUDE, msvsPath, sdkPath, bIsExpress)
+  newINCLUDE = '';
+
+  if ~bIsExpress then
+    newINCLUDE = msvsPath + '\VC\ATLMFC\INCLUDE'  + pathsep();
+  end
+
+  newINCLUDE = newINCLUDE + ..
+               msvsPath + '\VC\INCLUDE'  + pathsep() + ..
+               sdkPath + '\include' + pathsep() + INCLUDE + ..
+              getenv("PROGRAMFILES(X86)") + '\Windows Kits\8.0\Include\um;' + ..
+              getenv("PROGRAMFILES(X86)") + '\Windows Kits\8.0\Include\shared;';
+;
+endfunction
+//=============================================================================
diff --git a/scilab/modules/dynamic_link/macros/windows/dlwSetEnvVc11.sci b/scilab/modules/dynamic_link/macros/windows/dlwSetEnvVc11.sci
new file mode 100644 (file)
index 0000000..a5aacca
--- /dev/null
@@ -0,0 +1,39 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) Scilab Enterprises - 2012 - Antoine ELIAS
+//
+// 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
+
+//=============================================================================
+function bOK = dlwSetEnvVc11(msCompiler, bWin64)
+  bOK = %F;
+  MSVSDir = '';
+  select msCompiler
+    case 'msvc110pro'
+      MSVSDir = dlwGetVc11ProPath();
+    case 'msvc110express'
+      MSVSDir = dlwGetVc11ExpressPath();
+  else
+    return
+  end
+  
+  // MS compiler path is wrong
+  if MSVSDir == [] then
+    return
+  end
+
+  IsExpress = (msCompiler == 'msvc110express');
+
+  VS110COMNTOOLS = MSVSDir + '\Common7\Tools\'
+  if ~setenv('VS110COMNTOOLS', VS110COMNTOOLS) then
+    bOK = %F;
+    return
+  end
+
+  bOK = dlwSetEnvCommonVc11(MSVSDir, IsExpress, bWin64);
+
+endfunction
+//=============================================================================