Imported Upstream version 7.59.0
[platform/upstream/curl.git] / projects / build-openssl.bat
index 3703a3f..21709b7 100644 (file)
@@ -6,11 +6,11 @@ rem *                             / __| | | | |_) | |
 rem *                            | (__| |_| |  _ <| |___
 rem *                             \___|\___/|_| \_\_____|
 rem *
-rem * Copyright (C) 2012 - 2014, Steve Holme, <steve_holme@hotmail.com>.
+rem * Copyright (C) 2012 - 2018, Steve Holme, <steve_holme@hotmail.com>.
 rem *
 rem * This software is licensed as described in the file COPYING, which
 rem * you should have received as part of this distribution. The terms
-rem * are also available at http://curl.haxx.se/docs/copyright.html.
+rem * are also available at https://curl.haxx.se/docs/copyright.html.
 rem *
 rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 rem * copies of the Software, and permit persons to whom the Software is
@@ -24,13 +24,24 @@ rem ***************************************************************************
 :begin
   rem Check we are running on a Windows NT derived OS
   if not "%OS%" == "Windows_NT" goto nodos
+
+  rem Set our variables
   setlocal
-  
-  rem Display the help
+  set VC_VER=
+  set BUILD_PLATFORM=
+
+  rem Ensure we have the required arguments
   if /i "%~1" == "" goto syntax
-  if /i "%~1" == "-?" goto syntax
-  if /i "%~1" == "-h" goto syntax
-  if /i "%~1" == "-help" goto syntax
+
+  rem Calculate the program files directory
+  if defined PROGRAMFILES (
+    set "PF=%PROGRAMFILES%"
+    set OS_PLATFORM=x86
+  )
+  if defined PROGRAMFILES(x86) (
+    set "PF=%PROGRAMFILES(x86)%"
+    set OS_PLATFORM=x64
+  )
 
 :parseArgs
   if "%~1" == "" goto prerequisites
@@ -67,6 +78,23 @@ rem ***************************************************************************
     set VC_VER=12.0
     set VC_DESC=VC12
     set "VC_PATH=Microsoft Visual Studio 12.0\VC"
+  ) else if /i "%~1" == "vc14" (
+    set VC_VER=14.0
+    set VC_DESC=VC14
+    set "VC_PATH=Microsoft Visual Studio 14.0\VC"
+  ) else if /i "%~1" == "vc15" (
+    set VC_VER=15.0
+    set VC_DESC=VC15
+
+    rem Determine the VC15 path based on the installed edition in decending
+    rem order (Enterprise, then Professional and finally Community)
+    if exist "%PF%\Microsoft Visual Studio\2017\Enterprise\VC" (
+      set "VC_PATH=Microsoft Visual Studio\2017\Enterprise\VC"
+    ) else if exist "%PF%\Microsoft Visual Studio\2017\Professional\VC" (
+      set "VC_PATH=Microsoft Visual Studio\2017\Professional\VC"
+    ) else (
+      set "VC_PATH=Microsoft Visual Studio\2017\Community\VC"
+    )
   ) else if /i "%~1%" == "x86" (
     set BUILD_PLATFORM=x86
   ) else if /i "%~1%" == "x64" (
@@ -75,6 +103,12 @@ rem ***************************************************************************
     set BUILD_CONFIG=debug
   ) else if /i "%~1%" == "release" (
     set BUILD_CONFIG=release
+  ) else if /i "%~1" == "-?" (
+    goto syntax
+  ) else if /i "%~1" == "-h" (
+    goto syntax
+  ) else if /i "%~1" == "-help" (
+    goto syntax
   ) else (
     if not defined START_DIR (
       set START_DIR=%~1%
@@ -86,28 +120,39 @@ rem ***************************************************************************
   shift & goto parseArgs
 
 :prerequisites
+  rem Compiler is a required parameter
+  if not defined VC_VER goto syntax
+
   rem Default the start directory if one isn't specified
   if not defined START_DIR set START_DIR=..\..\openssl
 
-  rem Calculate the program files directory
-  if defined PROGRAMFILES (
-    set "PF=%PROGRAMFILES%"
-    set OS_PLATFORM=x86
-  )
-  if defined PROGRAMFILES(x86) (
-    set "PF=%PROGRAMFILES(x86)%"
-    set OS_PLATFORM=x64
-  )
-
   rem Check we have a program files directory
   if not defined PF goto nopf
 
   rem Check we have Visual Studio installed
   if not exist "%PF%\%VC_PATH%" goto novc
 
+  rem Check we have Perl in our path
+  echo %PATH% | findstr /I /C:"\Perl" 1>nul
+  if errorlevel 1 (
+    rem It isn't so check we have it installed and set the path if it is
+    if exist "%SystemDrive%\Perl" (
+      set "PATH=%SystemDrive%\Perl\bin;%PATH%"
+    ) else (
+      if exist "%SystemDrive%\Perl64" (
+        set "PATH=%SystemDrive%\Perl64\bin;%PATH%"
+      ) else (
+        goto noperl
+      )
+    )
+  )
+
   rem Check the start directory exists
   if not exist "%START_DIR%" goto noopenssl
 
+  rem Check that OpenSSL is not unsupported version 1.1.0
+  if not exist "%START_DIR%\ms\do_ms.bat" goto unsupported
+
 :configure
   if "%BUILD_PLATFORM%" == "" (
     if "%VC_VER%" == "6.0" (
@@ -132,23 +177,29 @@ rem ***************************************************************************
     if "%VC_VER%" == "10.0" set VCVARS_PLATFORM=%BUILD_PLATFORM%
     if "%VC_VER%" == "11.0" set VCVARS_PLATFORM=amd64
     if "%VC_VER%" == "12.0" set VCVARS_PLATFORM=amd64
+    if "%VC_VER%" == "14.0" set VCVARS_PLATFORM=amd64
+    if "%VC_VER%" == "15.0" set VCVARS_PLATFORM=amd64
   )
 
 :start
   echo.
+  set SAVED_PATH=%CD%
+
   if "%VC_VER%" == "6.0" (
     call "%PF%\%VC_PATH%\bin\vcvars32"
   ) else if "%VC_VER%" == "7.0" (
     call "%PF%\%VC_PATH%\bin\vcvars32"
   ) else if "%VC_VER%" == "7.1" (
     call "%PF%\%VC_PATH%\bin\vcvars32"
+  ) else if "%VC_VER%" == "15.0" (
+    call "%PF%\%VC_PATH%\Auxiliary\Build\vcvarsall" %VCVARS_PLATFORM%
   ) else (
     call "%PF%\%VC_PATH%\vcvarsall" %VCVARS_PLATFORM%
   )
 
   echo.
-  set SAVED_PATH=%CD%
-  if defined START_DIR CD %START_DIR%
+  cd %SAVED_PATH%
+  cd %START_DIR%
   goto %BUILD_PLATFORM%
 
 :x64
@@ -156,7 +207,7 @@ rem ***************************************************************************
   set OUTDIR=build\Win64\%VC_DESC%
   if not exist %OUTDIR% md %OUTDIR%
 
-  if "%BUILD_CONFIG%" == "release" goto x64release\r
+  if "%BUILD_CONFIG%" == "release" goto x64release
 
 :x64debug
   rem Configuring 64-bit Debug Build
@@ -168,12 +219,22 @@ rem ***************************************************************************
   nmake -f ms\ntdll.mak
 
   rem Move the output directories
-  move out32.dbg "%OUTDIR%\LIB Debug"
-  move out32dll.dbg "%OUTDIR%\DLL Debug"
+  if exist "%OUTDIR%\LIB Debug" (
+    copy /y out32.dbg\* "%OUTDIR%\LIB Debug" 1>nul
+    rd out32.dbg /s /q
+  ) else (
+    move out32.dbg "%OUTDIR%\LIB Debug" 1>nul
+  )
+  if exist "%OUTDIR%\DLL Debug" (
+    copy /y out32dll.dbg\* "%OUTDIR%\DLL Debug" 1>nul
+    rd out32dll.dbg /s /q
+  ) else (
+    move out32dll.dbg "%OUTDIR%\DLL Debug" 1>nul
+  )
 
   rem Move the PDB files
-  move tmp32.dbg\lib.pdb "%OUTDIR%\LIB Debug"
-  move tmp32dll.dbg\lib.pdb "%OUTDIR%\DLL Debug"
+  move tmp32.dbg\lib.pdb "%OUTDIR%\LIB Debug" 1>nul
+  move tmp32dll.dbg\lib.pdb "%OUTDIR%\DLL Debug" 1>nul
   
   rem Remove the intermediate directories
   rd tmp32.dbg /s /q
@@ -189,14 +250,24 @@ rem ***************************************************************************
   call ms\do_win64a
   nmake -f ms\nt.mak
   nmake -f ms\ntdll.mak
-  
+
   rem Move the output directories
-  move out32 "%OUTDIR%\LIB Release"
-  move out32dll "%OUTDIR%\DLL Release"
+  if exist "%OUTDIR%\LIB Release" (
+    copy /y out32\* "%OUTDIR%\LIB Release" 1>nul
+    rd out32 /s /q
+  ) else (
+    move out32 "%OUTDIR%\LIB Release" 1>nul
+  )
+  if exist "%OUTDIR%\DLL Release" (
+    copy /y out32dll\* "%OUTDIR%\DLL Release" 1>nul
+    rd out32dll /s /q
+  ) else (
+    move out32dll "%OUTDIR%\DLL Release" 1>nul
+  )
 
   rem Move the PDB files
-  move tmp32\lib.pdb "%OUTDIR%\LIB Release"
-  move tmp32dll\lib.pdb "%OUTDIR%\DLL Release"
+  move tmp32\lib.pdb "%OUTDIR%\LIB Release" 1>nul
+  move tmp32dll\lib.pdb "%OUTDIR%\DLL Release" 1>nul
 
   rem Remove the intermediate directories
   rd tmp32 /s /q
@@ -221,12 +292,22 @@ rem ***************************************************************************
   nmake -f ms\ntdll.mak
 
   rem Move the output directories
-  move out32.dbg "%OUTDIR%\LIB Debug"
-  move out32dll.dbg "%OUTDIR%\DLL Debug"
+  if exist "%OUTDIR%\LIB Debug" (
+    copy /y out32.dbg\* "%OUTDIR%\LIB Debug" 1>nul
+    rd out32.dbg /s /q
+  ) else (
+    move out32.dbg "%OUTDIR%\LIB Debug" 1>nul
+  )
+  if exist "%OUTDIR%\DLL Debug" (
+    copy /y out32dll.dbg\* "%OUTDIR%\DLL Debug" 1>nul
+    rd out32dll.dbg /s /q
+  ) else (
+    move out32dll.dbg "%OUTDIR%\DLL Debug" 1>nul
+  )
 
   rem Move the PDB files
-  move tmp32.dbg\lib.pdb "%OUTDIR%\LIB Debug"
-  move tmp32dll.dbg\lib.pdb "%OUTDIR%\DLL Debug"
+  move tmp32.dbg\lib.pdb "%OUTDIR%\LIB Debug" 1>nul
+  move tmp32dll.dbg\lib.pdb "%OUTDIR%\DLL Debug" 1>nul
 
   rem Remove the intermediate directories
   rd tmp32.dbg /s /q
@@ -242,14 +323,24 @@ rem ***************************************************************************
   call ms\do_ms
   nmake -f ms\nt.mak
   nmake -f ms\ntdll.mak
-  
+
   rem Move the output directories
-  move out32 "%OUTDIR%\LIB Release"
-  move out32dll "%OUTDIR%\DLL Release"
+  if exist "%OUTDIR%\LIB Release" (
+    copy /y out32\* "%OUTDIR%\LIB Release" 1>nul
+    rd out32 /s /q
+  ) else (
+    move out32 "%OUTDIR%\LIB Release" 1>nul
+  )
+  if exist "%OUTDIR%\DLL Release" (
+    copy /y out32dll\* "%OUTDIR%\DLL Release" 1>nul
+    rd out32dll /s /q
+  ) else (
+    move out32dll "%OUTDIR%\DLL Release" 1>nul
+  )
 
   rem Move the PDB files
-  move tmp32\lib.pdb "%OUTDIR%\LIB Release"
-  move tmp32dll\lib.pdb "%OUTDIR%\DLL Release"
+  move tmp32\lib.pdb "%OUTDIR%\LIB Release" 1>nul
+  move tmp32dll\lib.pdb "%OUTDIR%\DLL Release" 1>nul
 
   rem Remove the intermediate directories
   rd tmp32 /s /q
@@ -260,7 +351,7 @@ rem ***************************************************************************
 :syntax
   rem Display the help
   echo.
-  echo Usage: build-openssl ^<compiler^> ^<platform^> [configuration] [directory]
+  echo Usage: build-openssl ^<compiler^> [platform] [configuration] [directory]
   echo.
   echo Compiler:
   echo.
@@ -272,6 +363,8 @@ rem ***************************************************************************
   echo vc10      - Use Visual Studio 2010
   echo vc11      - Use Visual Studio 2012
   echo vc12      - Use Visual Studio 2013
+  echo vc14      - Use Visual Studio 2015
+  echo vc15      - Use Visual Studio 2017
   echo.
   echo Platform:
   echo.
@@ -308,6 +401,11 @@ rem ***************************************************************************
   echo Error: %VC_DESC% is not installed
   goto error
 
+:noperl
+  echo.
+  echo Error: Perl is not installed
+  goto error
+
 :nox64
   echo.
   echo Error: %VC_DESC% does not support 64-bit builds
@@ -318,6 +416,14 @@ rem ***************************************************************************
   echo Error: Cannot locate OpenSSL source directory
   goto error
 
+:unsupported
+  echo.
+  echo Error: Unsupported OpenSSL version.
+  echo The pre-generated project files and this build script only support the
+  echo LTS version of OpenSSL ^(v1.0.2^). The next version of this build script
+  echo will support OpenSSL v1.1.0.
+  goto error
+
 :error
   if "%OS%" == "Windows_NT" endlocal
   exit /B 1