add management of VS 2015 in dynamic_link 33/17233/3
Antoine ELIAS [Tue, 22 Sep 2015 10:33:50 +0000 (12:33 +0200)]
Change-Id: I82de6da721698cfbcfc61ce450e558f0fdec8eba

scilab/modules/dynamic_link/macros/detectmsvc64tools.sci
scilab/modules/dynamic_link/macros/windows/dlwCompile.sci
scilab/modules/dynamic_link/macros/windows/dlwFindMsVcCompiler.sci
scilab/modules/dynamic_link/macros/windows/dlwGet64BitPath.sci
scilab/modules/dynamic_link/macros/windows/dlwGetSdkPath.sci [deleted file]
scilab/modules/dynamic_link/macros/windows/dlwGetVc14ExpressPath.sci [new file with mode: 0644]
scilab/modules/dynamic_link/macros/windows/dlwGetVc14ProPath.sci [new file with mode: 0644]
scilab/modules/dynamic_link/macros/windows/dlwGetVisualStudioPath.sci
scilab/modules/dynamic_link/macros/windows/dlwIsExpress.sci [new file with mode: 0644]
scilab/modules/dynamic_link/macros/windows/dlwIsVc14Express.sci [new file with mode: 0644]
scilab/modules/dynamic_link/macros/windows/dlwIsVc14Pro.sci [new file with mode: 0644]

index fb566f8..13a685d 100644 (file)
@@ -44,7 +44,10 @@ function bOK = detectmsvc64tools()
 
     if win64() then
         compiler = findmsvccompiler();
-        supported_compiler = ["msvc120pro", ..
+        supported_compiler = [ ...
+        "msvc140pro", ..
+        "msvc140express", ..
+        "msvc120pro", ..
         "msvc120express", ..
         "msvc110pro", ..
         "msvc110express", ..
@@ -56,7 +59,7 @@ function bOK = detectmsvc64tools()
 
         if (find(supported_compiler == compiler) <> []) then
             MSVCBIN64PATH = dlwGet64BitPath();
-            if dlwIsVc11Express() | dlwIsVc12Express() then
+            if dlwIsVc11Express() | dlwIsVc12Express() | dlwIsVc14Express() then
                 MSVCBIN64PATH = MSVCBIN64PATH + filesep() + "VC\bin";
             else
                 MSVCBIN64PATH = MSVCBIN64PATH + filesep() + "VC\bin\amd64";
index b36cac2..60afa2a 100644 (file)
@@ -1,5 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) DIGITEO - 2011  - Allan CORNET
+// Copyright (C) Scilab Enterprises - 2015  - 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
@@ -62,7 +63,11 @@ function filename = writeBatchFile(cmd)
     end
 
     if win64() then
-        arch = "x64";
+        if dlwIsExpress() then
+            arch = "x86_amd64";
+        else
+            arch = "x64";
+        end
     else
         arch = "x86";
     end
index 48b73a5..59bbcf2 100644 (file)
@@ -16,8 +16,11 @@ function MSCompiler = dlwFindMsVcCompiler()
 
     val = getenv("SCILAB_PREFERED_MSVC", "");
     if val <> "" then
-        funcs = list(dlwIsVc12Express,dlwIsVc12Pro,dlwIsVc11Express,dlwIsVc11Pro,dlwIsVc10Express,dlwIsVc10Pro);
-        compilers = ["msvc120express";
+        funcs = list(dlwIsVc14Express,dlwIsVc12Pro,dlwIsVc14Express,dlwIsVc12Pro,dlwIsVc11Express,dlwIsVc11Pro,dlwIsVc10Express,dlwIsVc10Pro);
+        compilers = [ ...
+        "msvc140express";
+        "msvc140pro";
+        "msvc120express";
         "msvc120pro";
         "msvc110express";
         "msvc110pro";
@@ -33,6 +36,16 @@ function MSCompiler = dlwFindMsVcCompiler()
         end
     end
 
+    if dlwIsVc14Express() then
+        MSCompiler = "msvc140express";     // Microsoft Visual 2015 Express
+        return;
+    end
+
+    if dlwIsVc14Pro() then
+        MSCompiler = "msvc140pro";       // Microsoft Visual 2015 Professional / Community (or more)
+        return;
+    end
+
     if dlwIsVc12Express() then
         MSCompiler = "msvc120express";     // Microsoft Visual 2013 Express
         return;
index c7a65e8..6bd4141 100644 (file)
@@ -12,43 +12,51 @@ function vcPath64 = dlwGet64BitPath();
     vcPath64 = [];
     if win64() then
         MSCompiler = findmsvccompiler();
-        if (MSCompiler == 'msvc120express' | MSCompiler == 'msvc110express' | MSCompiler == 'msvc100express' | MSCompiler == 'msvc90express') then
-            programFilesx86Path = getenv('ProgramFiles(x86)', '');
-            if (programFilesx86Path <> '') then
-                if isfile(programFilesx86Path + '\Microsoft Visual Studio 12.0\VC\bin\cl.exe') then
-                    vcPath64 = programFilesx86Path + '\Microsoft Visual Studio 12.0';
+        if find(MSCompiler == ["msvc140express";"msvc120express";"msvc110express";"msvc100express";"msvc90express"]) then
+            programFilesx86Path = getenv("ProgramFiles(x86)", "");
+            if (programFilesx86Path <> "") then
+                if isfile(programFilesx86Path + "\Microsoft Visual Studio 14.0\VC\bin\cl.exe") then
+                    vcPath64 = programFilesx86Path + "\Microsoft Visual Studio 14.0";
                     return
                 end
 
-                if isfile(programFilesx86Path + '\Microsoft Visual Studio 11.0\VC\bin\cl.exe') then
-                    vcPath64 = programFilesx86Path + '\Microsoft Visual Studio 11.0';
+                if isfile(programFilesx86Path + "\Microsoft Visual Studio 12.0\VC\bin\cl.exe") then
+                    vcPath64 = programFilesx86Path + "\Microsoft Visual Studio 12.0";
                     return
                 end
-                
-                if isfile(programFilesx86Path + '\Microsoft Visual Studio 10.0\VC\bin\amd64\cl.exe') then
-                    vcPath64 = programFilesx86Path + '\Microsoft Visual Studio 10.0';
+
+                if isfile(programFilesx86Path + "\Microsoft Visual Studio 11.0\VC\bin\cl.exe") then
+                    vcPath64 = programFilesx86Path + "\Microsoft Visual Studio 11.0";
                     return
                 end
-                
-                if isfile(programFilesx86Path + '\Microsoft Visual Studio 9.0\VC\bin\amd64\cl.exe') then
-                    vcPath64 = programFilesx86Path + '\Microsoft Visual Studio 9.0';
+
+                if isfile(programFilesx86Path + "\Microsoft Visual Studio 10.0\VC\bin\amd64\cl.exe") then
+                    vcPath64 = programFilesx86Path + "\Microsoft Visual Studio 10.0";
+                    return
+                end
+
+                if isfile(programFilesx86Path + "\Microsoft Visual Studio 9.0\VC\bin\amd64\cl.exe") then
+                    vcPath64 = programFilesx86Path + "\Microsoft Visual Studio 9.0";
                 end
             end
         else
             select MSCompiler,
-            // Microsoft Visual 2013 Studio Professional
-            case  'msvc120pro' then
+                // Microsoft Visual 2015 Studio Professional
+            case  "msvc140pro" then
+                vcPath64 = dlwGetVc14ProPath(); //same as VS2012
+                // Microsoft Visual 2013 Studio Professional
+            case  "msvc120pro" then
                 vcPath64 = dlwGetVc12ProPath(); //same as VS2012
-            // Microsoft Visual 2012 Studio Professional
-            case  'msvc110pro' then
+                // Microsoft Visual 2012 Studio Professional
+            case  "msvc110pro" then
                 vcPath64 = dlwGetVc11ProPath();
-            // Microsoft Visual 2010 Studio Professional
-            case  'msvc100pro' then
+                // Microsoft Visual 2010 Studio Professional
+            case  "msvc100pro" then
                 vcPath64 = dlwGetVc10ProPath();
-            // Microsoft Visual 2008 Studio Professional
+                // Microsoft Visual 2008 Studio Professional
             case  "msvc90pro" then
                 vcPath64 = dlwGetVc90ProPath();
-            // Microsoft Visual 2008 Studio Standard
+                // Microsoft Visual 2008 Studio Standard
             case  "msvc90std" then
                 vcPath64 = dlwGetVc90StdPath();
             else
diff --git a/scilab/modules/dynamic_link/macros/windows/dlwGetSdkPath.sci b/scilab/modules/dynamic_link/macros/windows/dlwGetSdkPath.sci
deleted file mode 100644 (file)
index 92357bf..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) DIGITEO - 2010-2011 - 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.1-en.txt
-
-//=============================================================================
-function SDKpath = dlwGetSdkPath()
-
-    SDKpath = [];
-
-    compiler = findmsvccompiler();
-    entries = [];
-
-    //detect sdk 8 only for VS >= 2012
-    if find(compiler == ["msvc120express";"msvc120pro";"msvc110express";"msvc110pro"]) <> [] then;
-        entries = [entries ;
-        "Software\Microsoft\Microsoft SDKs\Windows\v8.0A" "InstallationFolder" ; .. // Windows 8 A
-        "Software\Microsoft\Microsoft SDKs\Windows\v8.0" "InstallationFolder" .. // Windows 8
-        ];
-    end
-
-    entries = [entries;
-    "Software\Microsoft\Microsoft SDKs\Windows\v7.0" "InstallationFolder"; .. // Microsoft Windows SDK 7.0
-    "Software\Microsoft\Microsoft SDKs\Windows\v7.0A" "InstallationFolder"; .. // Microsoft Windows SDK 7.0A
-    "Software\Microsoft\Microsoft SDKs\Windows\v7.1" "InstallationFolder"; .. // Microsoft Windows SDK 7.1
-    "Software\Microsoft\Microsoft SDKs\Windows" "CurrentInstallFolder" ; .. // Vista & Seven SDK
-    "Software\Microsoft\MicrosoftSDK\InstalledSDKs\D2FF9F89-8AA2-4373-8A31-C838BF4DBBE1" "Install Dir" ; .. // Windows 2003 R2 SDK
-    "Software\Microsoft\MicrosoftSDK\InstalledSDKs\8F9E5EF3-A9A5-491B-A889-C58EFFECE8B3" "Install Dir" .. // Windows 2003 SDK
-    ];
-
-    for i = 1:size(entries(:,1),"*")
-        err = execstr("SDKpath = winqueryreg(""HKEY_LOCAL_MACHINE"", entries(i,1), entries(i,2))", "errcatch");
-        // remove last file separator if it exists
-        if err == 0 & SDKpath <> [] then
-            SDKpath = pathconvert(SDKpath, %f, %t);
-            // We check that returned path exists
-            // case: install and uninstall sdk, uninstaller does not remove registry key
-            if isdir(SDKpath) then
-                break;
-            else
-                SDKpath = [];
-            end
-        else
-            errclear();
-        end
-    end
-endfunction
-//=============================================================================
diff --git a/scilab/modules/dynamic_link/macros/windows/dlwGetVc14ExpressPath.sci b/scilab/modules/dynamic_link/macros/windows/dlwGetVc14ExpressPath.sci
new file mode 100644 (file)
index 0000000..e9d39e2
--- /dev/null
@@ -0,0 +1,28 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) Scilab Enterprises - 2014 - 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.1-en.txt
+
+//=============================================================================
+function vcPath = dlwGetVc14ExpressPath()
+    vcPath = [];
+    try
+        vcPath = winqueryreg("HKEY_LOCAL_MACHINE", ..
+        "Software\Microsoft\VisualStudio\14.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/dlwGetVc14ProPath.sci b/scilab/modules/dynamic_link/macros/windows/dlwGetVc14ProPath.sci
new file mode 100644 (file)
index 0000000..675c25c
--- /dev/null
@@ -0,0 +1,29 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) Scilab Enterprises - 2015 - 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.1-en.txt
+
+//=============================================================================
+function vcPath = dlwGetVc14ProPath()
+    vcPath = [];
+    try
+        vcPath = winqueryreg("HKEY_LOCAL_MACHINE", ..
+        "Software\Microsoft\VisualStudio\14.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
+//=============================================================================
index 97b9071..e349417 100644 (file)
@@ -13,6 +13,12 @@ function VSPath = dlwGetVisualStudioPath()
 
     VSPath = "";
     select msvc
+        // Microsoft Visual 2015 Studio Professional
+    case  "msvc140pro" then
+        VSPath = dlwGetVc14ProPath();
+        // Microsoft Visual 2015 Express
+    case  "msvc140express" then
+        VSPath = dlwGetVc14ExpressPath();
         // Microsoft Visual 2013 Studio Professional
     case  "msvc120pro" then
         VSPath = dlwGetVc12ProPath();
diff --git a/scilab/modules/dynamic_link/macros/windows/dlwIsExpress.sci b/scilab/modules/dynamic_link/macros/windows/dlwIsExpress.sci
new file mode 100644 (file)
index 0000000..d895423
--- /dev/null
@@ -0,0 +1,18 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) Scilab Enterprises - 2015  - 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.1-en.txt
+//=============================================================================
+function ret = dlwIsExpress()
+    ret = %f;
+    if  dlwIsVc10Express() | ...
+        dlwIsVc11Express() | ...
+        dlwIsVc12Express() | ...
+        dlwIsVc14Express() then
+        ret = %t;
+    end
+endfunction
\ No newline at end of file
diff --git a/scilab/modules/dynamic_link/macros/windows/dlwIsVc14Express.sci b/scilab/modules/dynamic_link/macros/windows/dlwIsVc14Express.sci
new file mode 100644 (file)
index 0000000..202b318
--- /dev/null
@@ -0,0 +1,20 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) Scilab Enterprises - 2015 - 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.1-en.txt
+
+//=============================================================================
+function bOK = dlwIsVc14Express()
+    bOK = %f;
+    try
+        if winqueryreg("key", "HKLM", "Software\Microsoft\DevDiv\wdexpress\Servicing\14.0") <> [] then
+            bOK = %t;
+        end
+    catch
+    end
+endfunction
+//=============================================================================
diff --git a/scilab/modules/dynamic_link/macros/windows/dlwIsVc14Pro.sci b/scilab/modules/dynamic_link/macros/windows/dlwIsVc14Pro.sci
new file mode 100644 (file)
index 0000000..90b5a1d
--- /dev/null
@@ -0,0 +1,21 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) Scilab Enterprises - 2015 - 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.1-en.txt
+
+//=============================================================================
+function bOK = dlwIsVc14Pro()
+    bOK = %f;
+    try
+        if winqueryreg("HKLM", "Software\Microsoft\DevDiv\vs\Servicing\14.0\devenv", "install") == 1  & ...
+            dlwIsVc14Express() == %f then
+            bOK = %t;
+        end
+    catch
+    end
+endfunction
+//=============================================================================