文章目录
OpenSSl 版本变化
-
从openssl 1.1.0版本以后就不再有ms\do_*.bat这样的文件,而是直接使用nmake命令
-
在 1.0.x 之前版本中编译出的动态库名称为 libeasy32.dll 和 ssleasy32.dll, 从1.1.x 版本之后修改为 libssl.dll 和 libcrypto.dll
预编译版本网站
https://www.npcglib.org/~stathis/blog/precompiled-openssl/
configure参数说明
基本参数
详细参见INSTALL文档
- debug-平台
编译debug版本,例如:debug-VC-WIN32,编译生成VC-WIN32调试版本 - –debug debug 版本
–release release 版本
默认是 release - –openssldir=OPENSSLDIR
安装目录,默认是 /usr/local/ssl 。 - –prefix=PREFIX
设置 lib include bin 目录的前缀,默认为 OPENSSLDIR 目录。 - –install_prefix=DESTDIR
设置安装时以此目录作为"根"目录,通常用于打包,默认为空。 - zlib
zlib-dynamic
no-zlib
使用静态的zlib压缩库、使用动态的zlib压缩库、不使用zlib压缩功能。 - threads
no-threads
是否编译支持多线程的库。默认支持。 - shared
no-shared
是否生成动态连接库。 - asm
no-asm
是否在编译过程中使用汇编代码加快编译过程。 - enable-sse2
no-sse2
启用/禁用SSE2指令集加速。如果你的CPU支持SSE2指令集,就可以打开,否则就要关闭。 - gmp
no-gmp
启用/禁用GMP库 - rfc3779
no-rfc3779
启用/禁用实现X509v3证书的IP地址扩展 - krb5
no-krb5
启用/禁用 Kerberos 5 支持 - ssl
no-ssl
ssl2
ssl3
no-ssl2
no-ssl3
tls
no-tls
启用/禁用 SSL(包含了SSL2/SSL3) TLS 协议支持。 - dso
no-dso
启用/禁用调用其它动态链接库的功能。[提示]no-dso仅在no-shared的前提下可用。
禁用选项
- no-md2,no-md4,no-mdc2,no-ripemd
摘要算法 - no-des,no-rc2,no-rc4,no-rc5,no-idea,no-bf,no-cast,no-camellia
对称加密算法 - no-ec,no-dsa,no-ecdsa,no-dh,no-ecdh
不对称加密算法 - no-comp
数据压缩算法 - no-store
对象存储功能
1.0.1s 编译
windows + visual studio
(1)安装perl
(2)安装NASM,然后将安装路径加入path。
(3)运行visual studio命令行,cd到openssl路径,执行:
#> perl configure debug-VC-WIN32 no-shared --openssldir=C:/openssl-1.0.1s --prefix=C:/openssl-1.0.1s/lib
#>ms\do_ms.bat
#>nmake -f ms\ntdll.mak
#>nmake -f ms\ntdll.mak install
(4)命令
nmake -f ms\ntdll.mak #动态库
nmake -f ms\nt.mak #静态库
nmake -f ms\ntdll.mak test #测试动态库
nmake -f ms\nt.mak test #测试静态库
nmake -f ms\ntdll.mak install #安装动态库
nmake -f ms\nt.mak install #安装静态库
nmake -f ms\ntdll.mak clean #清理
nmake -f ms\nt.mak clean #清理
1.1.1l 编译
windows + visual studio
(1)安装perl
(2)安装NASM,然后将安装路径加入path。
(3)运行visual studio命令行,cd到openssl路径,执行:
#> perl configure debug-VC-WIN32 no-shared --openssldir=C:/openssl-1.1.1l --prefix=C:/openssl-1.1.1l/lib
#> ppm install dmake
#> nmake
#> namke test
#> nmake install
编译脚本
@echo off
SETLOCAL EnableExtensions EnableDelayedExpansion
:: VS 版本
SET VS_VERSION=2019
:: VS VC 路径
SET VISUAL_STUDIO_VC=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC
:: Set CYGWIN_DIR to the location of your Cygwin root ( one level up from /bin )
:: Make sure you install the following cygwin packages: p7zip, md5sum, patch
SET CYGWIN_DIR=C:\cygwin64
SET PERL_ROOT=C:\Strawberry\perl\bin
rem ========================================================================================================
SET SEVENZIP_CMD=7z
SET MD5SUM_CMD=md5sum
SET DATE_CMD=date
SET PATCH_CMD=patch
SET DOS2UNIX_CMD=dos2unix
rem ========================================================================================================
SET BUILD_PROJECT=openssl
SET PROJECT_VERSION=1.1.0k
:: 这里需要改为你自己的路径
SET PROJECT_SRC_DIR=C:\Users\Pig\Desktop\openssl-OpenSSL_1_1_1k
SET PROJECT_BUILD_DIR=C:\Users\Pig\Desktop\openssl-OpenSSL_1_1_1k\build
SET PROJECT_INSTALL_DIR=C:\Users\Pig\Desktop\openssl-OpenSSL_1_1_1k\install
rem ========================================================================================================
rem == PLEASE DO NOT EDIT BELOW THIS LINE
rem ========================================================================================================
rem We load the config file first
call :loadconfig "%~dpn0"
rem we then carry on execution
call :execScript %0 %1 %2 %3 %4
ENDLOCAL
@exit /B 0
rem ========================================================================================================
rem == Pseudo-function to load config
rem ========================================================================================================
:loadconfig
rem set the variable HOSTNAME by executing the command (that's the computer's name)
FOR /F "delims=" %%a IN ('hostname') DO @set HOSTNAME=%%a
rem strip double quotes
set scriptFile=%1
set scriptFile=%scriptFile:"=%
rem We use two files: myScript.conf and myScript.<HOSTNAME>
rem myScript.<HOSTNAME> overrides myScript.conf
rem %~dpn0 is the full file minus the extension.
FOR %%c IN (
"!scriptFile!.conf"
"!scriptFile!.!HOSTNAME!"
) DO (
IF EXIST "%%c" (
ECHO.
ECHO # Loading local configuration from: %%c
ECHO.
FOR /F "usebackq delims=" %%v IN (%%c) DO (set %%v)
)
)
GOTO :eof
rem ========================================================================================================
:execScript
rem Use this pseudo-function to write the code of your main script
SETLOCAL EnableExtensions EnableDelayedExpansion
SET scriptName=%1
SET arg[0]=%2
SET arg[1]=%3
SET arg[2]=%4
SET arg[3]=%5
:: ATTENTION: this is down here because out-of-source builds are not supported DO NOT CHANGE IT!
:: SET PROJECT_BUILD_DIR=!PROJECT_SRC_DIR!\build
IF "!SEVENZIP_CMD_OPTIONS!" == "" (
SET SEVENZIP_CMD_OPTIONS=a -r -mx9
)
FOR /F "delims=" %%a IN ('!CYGWIN_DIR!/bin/cygpath -p -u !SEVENZIP_CMD!') DO @set __SEVENZIP_CMD=%%a
IF "!arg[0]!" == "" GOTO usage
IF NOT EXIST "!PROJECT_SRC_DIR!" (
ECHO.
CALL :exitB "ERROR: Source directory !PROJECT_SRC_DIR! does not exist or does not contain the !BUILD_PROJECT! sources. Aborting."
GOTO :eof
)
IF "!VS_VERSION!" == "2019" (
SET VISUAL_STUDIO_VC=!VISUAL_STUDIO_VC!\Auxiliary\Build
pushd "!VISUAL_STUDIO_VC!\..\..\..\Common7\Tools\"
call "!VISUAL_STUDIO_VC!\..\..\..\Common7\Tools\vsdevcmd.bat" -clean_env
popd
)
IF NOT EXIST "!VISUAL_STUDIO_VC!\vcvarsall.bat" (
ECHO.
CALL :exitB "ERROR: !VISUAL_STUDIO_VC!\vcvarsall.bat does not exist. Aborting."
GOTO :eof
)
IF "!DATE_CMD_OPTIONS!" == "" (
SET DATE_CMD_OPTIONS=%%d %%b %%Y
)
SET argC=-1
FOR %%x in (%*) DO SET /A argC+=1
if /i "!arg[0]!" == "build" (
if !argC! == 2 (
if /i "!arg[1]!" == "all" (
echo.
echo You are about to build all permutations [x86^|x64] [static^|shared] [debug^|release]
echo.
timeout /t 5
call :buildall
goto :eof
) else (
goto usage
)
) else if !argC! == 4 (
call :callArch !arg[1]! !arg[2]! !arg[3]!
goto :eof
) else (
goto usage
)
) else if /i "!arg[0]!" == "package" (
if !argC! == 2 (
if /i "!arg[1]!" == "all" (
echo.
echo You are about to package all permutations [x86^|x64] [static^|shared] [debug^|release]
echo.
timeout /t 5
call :createPackage
goto :eof
) else (
goto usage
)
) else if !argC! == 3 (
echo.
echo This feature is currently unsupported. Only "package all" is supported at this time.
echo.
goto usage
REM set archGood=false
REM if /i "!arg[1]!" == "x86" set archGood=true
REM if /i "!arg[1]!" == "x64" set archGood=true
REM if /i "!archGood!" == "true" (
REM call :createPackage !arg[0]! !arg[1]!
REM goto :eof
REM ) else (
REM goto usage
REM )
) else (
goto usage
)
) else if /i "!arg[0]!" == "patch" (
call :patch !PROJECT_VERSION!
) else if /i "!arg[0]!" == "unpatch" (
call :unpatch !PROJECT_VERSION!
) else if !argC! == 3 (
call :callArch !arg[0]! !arg[1]! !arg[2]!
GOTO :eof
) else (
GOTO usage
)
ENDLOCAL
GOTO :eof
rem ========================================================================================================
:printConfiguration
SETLOCAL EnableExtensions EnableDelayedExpansion
SET PATH=!CYGWIN_DIR!\bin;!CYGWIN_DIR!\usr\bin;!PATH!
echo.
echo PATH: !PATH!
echo.
echo VS_VERSION: !VS_VERSION!
echo VISUAL_STUDIO_VC: !VISUAL_STUDIO_VC!
echo CYGWIN_DIR: !CYGWIN_DIR!
echo.
bash -c "echo -n \" SEVENZIP_CMD: \" & which !__SEVENZIP_CMD!"
echo SEVENZIP_CMD_OPTIONS: !SEVENZIP_CMD_OPTIONS!
bash -c "echo -n \" MD5SUM_CMD: \" & which !MD5SUM_CMD!"
bash -c "echo -n \" DATE_CMD: \" & which !DATE_CMD!"
bash -c "echo -n \" PATCH_CMD: \" & which !PATCH_CMD!"
echo.
echo BUILD_PROJECT: !BUILD_PROJECT!
echo PROJECT_VERSION: !PROJECT_VERSION!
echo PROJECT_SRC_DIR: !PROJECT_SRC_DIR!
echo PROJECT_BUILD_DIR: !PROJECT_BUILD_DIR!
echo PROJECT_INSTALL_DIR: !PROJECT_INSTALL_DIR!
ENDLOCAL
goto :eof
rem ========================================================================================================
:callArch
set archGood=false
if /i "%1" == "x86" set archGood=true
if /i "%1" == "x64" set archGood=true
if /i "!archGood!" == "true" (
set linkGood=false
if /i "%2"=="static" set linkGood=true
if /i "%2"=="shared" set linkGood=true
if /i "!linkGood!" == "true" (
set buildGood=false
if /i "%3" == "debug" set buildGood=true
if /i "%3" == "release" set buildGood=true
if /i "!buildGood!" == "true" (
call :build %1 %2 %3
goto :eof
)
)
)
goto usage
goto :eof
rem ========================================================================================================
:usage
call :printConfiguration
ECHO:
ECHO Error in script usage. The correct usage is:
ECHO:
ECHO !scriptName! [patch^|unpatch] - apply/remove patches to the sources
ECHO !scriptName! build [all^|x86^|x64] ^<[static^|shared] [debug^|release]^> - builds all or specific permutations
ECHO !scriptName! package [all^|x86^|x64] ^<[static^|shared]^> - creates a package file
ECHO:
GOTO :eof
rem ========================================================================================================
:unpatch
rem remove patches from the sources
call :patch %1 unpatch
goto :eof
:patch
rem patch sources
::
:: To create a patch for mkdef.pl:
:: $ diff -u "F:\openssl-1.0.1e-orig\util\mk1mf.pl" "F:\openssl-1.0.1e\util\mk1mf.pl" > "%SSBUILDER_ROOT%\misc\openssl-1.0.1e-mk1mf.pl.patch"
:: $ diff -u "F:\openssl-1.0.1e-orig\util\mkdef.pl" "F:\openssl-1.0.1e\util\mkdef.pl" > "%SSBUILDER_ROOT%\misc\openssl-1.0.1e-mkdef.pl.patch"
:: $ diff -u "F:\openssl-1.0.1e-orig\util\pl\VC-32.pl" "F:\openssl-1.0.1e\util\pl\VC-32.pl" > "%SSBUILDER_ROOT%\misc\openssl-1.0.1e-VC-32.pl.patch"
::
:: To apply the patch:
:: cd into the unmodified openssl-x.x.x source directory
:: patch [--dry-run] -p2 -i "D:\dev\ssbuilder\misc\openssl-1.0.1e-mkdef.pl.patch"
:: patch [--dry-run] -p2 -i "D:\dev\ssbuilder\misc\openssl-1.0.1e-mkdef.pl.patch"
::
SETLOCAL EnableExtensions EnableDelayedExpansion
if /i "%2" == "unpatch" (
SET EXTRA_TEXT=Removing
SET EXTRA_FLAGS=-R
) else (
SET EXTRA_TEXT=Applying
)
SET PATH=!CYGWIN_DIR!\bin;!CYGWIN_DIR!\usr\bin;
SET CYGWIN=nodosfilewarning
ECHO.
ECHO !EXTRA_TEXT! patches to [!BUILD_PROJECT! v%~1] sources
ECHO.
pushd "!PROJECT_SRC_DIR!"
call :applyPatch !BUILD_PROJECT!-%~1.patch
popd
ENDLOCAL
goto :eof
:applyPatch
SET PATCH_FILE=%~dp0
SET PATCH_FILE=!PATCH_FILE!%1
IF NOT EXIST "!PATCH_FILE!" (
call :exitB "Patch: [!PATCH_FILE!] does not exist. Aborting."
) ELSE (
!DOS2UNIX_CMD! "!PATCH_FILE!"
!PATCH_CMD! --binary !EXTRA_FLAGS! -N -p1 -i "!PATCH_FILE!"
)
goto :eof
rem ========================================================================================================
:createPackage
call :printConfiguration
echo:
echo Packaging OpenSSL Library
echo:
SET DIST_DIR=!PROJECT_INSTALL_DIR!\!BUILD_PROJECT!-!PROJECT_VERSION!-vs!VS_VERSION!
echo !DIST_DIR!
@mkdir !DIST_DIR!\bin 2>nul
@mkdir !DIST_DIR!\bin64 2>nul
@mkdir !DIST_DIR!\lib 2>nul
@mkdir !DIST_DIR!\lib64 2>nul
@mkdir !DIST_DIR!\include 2>nul
@mkdir !DIST_DIR!\include64 2>nul
@mkdir !DIST_DIR!\ssl 2>nul
@mkdir !DIST_DIR!\logs 2>nul
call :packagetype
echo:
ENDLOCAL
@exit /B 0
rem ========================================================================================================
:: %1 library type (e.g. static)
:packagetype
SET DST_DIST=!BUILD_PROJECT!-!PROJECT_VERSION!-vs!VS_VERSION!
SET DST_DIST_DIR=!PROJECT_INSTALL_DIR!\!DST_DIST!
for %%l in (static shared) do (
for %%a in (x86 x64) do (
if /i "%%a" == "x86" (
SET BITS=32
SET BITSTR=
) else (
SET BITS=64
SET BITSTR=!BITS!
SET PREFIX_WIN=!PREFIX_WIN!!BITS!
)
for %%b in (debug release) do (
SET __ARCH=%%a
SET __BUILD=%%b
SET __LINK=%%l
SET SRC_DIST_DIR=!PROJECT_INSTALL_DIR!\!BUILD_PROJECT!-!__ARCH!-!__LINK!-!__BUILD!-vs!VS_VERSION!
echo [copy] !SRC_DIST_DIR! =^> !DST_DIST_DIR!
if exist "!SRC_DIST_DIR!" (
xcopy /Q /Y !SRC_DIST_DIR!\bin\*.dll !DST_DIST_DIR!\bin!BITSTR!\
xcopy /Q /Y !SRC_DIST_DIR!\bin\*.lib !DST_DIST_DIR!\bin!BITSTR!\
xcopy /Q /Y !SRC_DIST_DIR!\bin\*.pdb !DST_DIST_DIR!\bin!BITSTR!\
xcopy /Q /Y !SRC_DIST_DIR!\bin\*.exe !DST_DIST_DIR!\bin!BITSTR!\
xcopy /Q /Y !SRC_DIST_DIR!\lib\*.lib !DST_DIST_DIR!\lib!BITSTR!\
xcopy /Q /Y !SRC_DIST_DIR!\lib\*.pdb !DST_DIST_DIR!\lib!BITSTR!\
xcopy /Q /Y /E /I !SRC_DIST_DIR!\include !DST_DIST_DIR!\include!BITSTR!
xcopy /Q /Y /E /I !SRC_DIST_DIR!\ssl !DST_DIST_DIR!\ssl
xcopy /Q /Y /E /I !SRC_DIST_DIR!\html !DST_DIST_DIR!\html
xcopy /Q /Y /E /I !SRC_DIST_DIR!\logs !DST_DIST_DIR!\logs
)
)
)
)
echo Copied all files for: !BUILD_PROJECT! v!PROJECT_VERSION!
set README=!DST_DIST_DIR!\readme.precompiled.txt
echo !README!
pushd !PROJECT_INSTALL_DIR!
SETLOCAL EnableExtensions EnableDelayedExpansion
SET PATH=!CYGWIN_DIR!\bin;!CYGWIN_DIR!\usr\bin;!PATH!
echo. > !README!
bash -c "!DATE_CMD! +\"!DATE_CMD_OPTIONS!\"" >> !README!
echo ====================================================================================================================== >> !README!
echo url: http://www.npcglib.org/~stathis/blog/precompiled-openssl >> !README!
echo ====================================================================================================================== >> !README!
echo These are custom pre-built OpenSSL Libraries v!PROJECT_VERSION! (http://www.openssl.org). >> !README!
echo They are compiled with Cygwin/MSVC for 32/64-bit Windows, using Visual Studio !VS_VERSION!. >> !README!
echo. >> !README!
echo Please note that the OpenSSL Project (http://www.openssl.org) is the only official source of OpenSSL. >> !README!
echo These builds are created for my own personal use and therefore you are utilizing them at your own risk. >> !README!
echo My builds are unsupported and not endorsed by The OpenSSL Project. >> !README!
echo. >> !README!
echo I build these in the context of my own work and spare time, >> !README!
echo I do NOT charge any money, I do NOT make any money ... and NO I do NOT accept any donations^^! >> !README!
echo If you really like OpenSSL, if it has helped you or your company in any way, >> !README!
echo or you are feeling like giving back anyway, then please >> !README!
echo donate directly to the OpenSSL Project: https://www.openssl.org/support/donations.html >> !README!
echo The developers and countless contributors deserve it^^! >> !README!
echo. >> !README!
echo ------------------------------------------------------------------------------ >> !README!
echo 32-bit OpenSSL Libraries [shared] [runtime: dynamic (/MD)]]>> !README!
echo ------------------------------------------------------------------------------ >> !README!
echo release runtime dlls: bin\libcryptoMD.dll bin\libsslMD.dll >> !README!
echo release import libs: lib\libcryptoMD.lib lib\libsslMD.lib >> !README!
echo debug runtime dlls: bin\libcryptoMDd.dll bin\libsslMDd.dll >> !README!
echo debug import libs: lib\libcryptoMDd.lib lib\libsslMDd.lib >> !README!
echo. >> !README!
echo ------------------------------------------------------------------------------ >> !README!
echo 32-bit OpenSSL Libraries [static] [runtime: static (/MT)]]>> !README!
echo ------------------------------------------------------------------------------ >> !README!
echo release libs: lib\libcryptoMT.lib lib\libsslMT.lib >> !README!
echo debug libs: lib\libcryptoMTd.lib lib\libsslMTd.lib >> !README!
echo. >> !README!
echo ------------------------------------------------------------------------------ >> !README!
echo 64-bit OpenSSL Libraries [shared] [runtime: dynamic (/MD)]]>> !README!
echo ------------------------------------------------------------------------------ >> !README!
echo release runtime dlls: bin64\libcryptoMD.dll bin64\libsslMD.dll >> !README!
echo release import libs: lib64\libcryptoMD.lib lib64\libsslMD.lib >> !README!
echo debug runtime dlls: bin64\libcryptoMDd.dll bin64\libsslMDd.dll >> !README!
echo debug import libs: lib64\libcryptoMDd.lib lib64\libsslMDd.lib >> !README!
echo. >> !README!
echo ------------------------------------------------------------------------------ >> !README!
echo 64-bit OpenSSL Libraries [static] [runtime: static (/MT)]]>> !README!
echo ------------------------------------------------------------------------------ >> !README!
echo release libs: lib64\libcryptoMT.lib lib64\libsslMT.lib >> !README!
echo debug libs: lib64\libcryptoMTd.lib lib64\libsslMTd.lib >> !README!
echo. >> !README!
echo ====================================================================================================================== >> !README!
echo. >> !README!
echo If you have any comments or problems send me an email at: >> !README!
echo stathis ^<stathis@npcglib.org^> >> !README!
bash -c "cp -f \"!PROJECT_SRC_DIR!\AUTHORS\" \"!DST_DIST_DIR!\AUTHORS.txt\""
bash -c "cp -f \"!PROJECT_SRC_DIR!\ACKNOWLEDGEMENTS\" \"!DST_DIST_DIR!\ACKNOWLEDGEMENTS.txt\""
bash -c "cp -f \"!PROJECT_SRC_DIR!\CHANGES\" \"!DST_DIST_DIR!\CHANGES.txt\""
bash -c "cp -f \"!PROJECT_SRC_DIR!\CONTRIBUTING\" \"!DST_DIST_DIR!\CONTRIBUTING.txt\""
bash -c "cp -f \"!PROJECT_SRC_DIR!\README\" \"!DST_DIST_DIR!\README.txt\""
bash -c "cp -f \"!PROJECT_SRC_DIR!\README.ECC\" \"!DST_DIST_DIR!\README.ECC.txt\""
bash -c "cp -f \"!PROJECT_SRC_DIR!\FAQ\" \"!DST_DIST_DIR!\FAQ.txt\""
bash -c "cp -f \"!PROJECT_SRC_DIR!\NEWS\" \"!DST_DIST_DIR!\NEWS.txt\""
bash -c "cp -f \"!PROJECT_SRC_DIR!\NOTES.WIN\" \"!DST_DIST_DIR!\NOTES.WIN.txt\""
bash -c "cp -f \"!PROJECT_SRC_DIR!\LICENSE\" \"!DST_DIST_DIR!\LICENSE.txt\""
bash -c "cp -f \"!PROJECT_SRC_DIR!\FAQ\" \"!DST_DIST_DIR!\FAQ.txt\""
set __FILENAME=!DST_DIST!
set COMPRESSED_FILE=!__FILENAME!.7z
echo.
echo Packaging !BUILD_PROJECT! Library [v!PROJECT_VERSION!]
echo ----------------------------------------------------------------------------
echo [ Build in: !PROJECT_BUILD_DIR!]
echo [ Installation: !PROJECT_INSTALL_DIR!]
echo [ Packaging: !PROJECT_INSTALL_DIR!]
echo [ Compressed: !COMPRESSED_FILE!]
echo [ Readme: !README!]
echo ----------------------------------------------------------------------------
echo.
echo Compressing with: !__SEVENZIP_CMD! !SEVENZIP_CMD_OPTIONS! !COMPRESSED_FILE! !DST_DIST!
bash -c "!__SEVENZIP_CMD! !SEVENZIP_CMD_OPTIONS! !COMPRESSED_FILE! !DST_DIST!"
echo Compressing in: !COMPRESSED_FILE!
IF EXIST !COMPRESSED_FILE! (
for %%I in (!COMPRESSED_FILE!) do (
SET /A _fsize=%%~zI / 1024 / 1024
)
!MD5SUM_CMD! !COMPRESSED_FILE! 1> !__FILENAME!.md5
echo Generated md5sum !__FILENAME!.md5 [!_fsize!MB]
)
ENDLOCAL
popd
goto :eof
rem ========================================================================================================
:buildall
for %%a in (x86 x64) do (
for %%l in (shared static) do (
for %%b in (debug release) do (
call :build %%a %%l %%b
)
)
)
goto :eof
rem ========================================================================================================
:: call :build <x86|x64> <static|shared> <debug|release>
:build
SET __ARCH=%~1
SET __LINK=%~2
SET __BUILD=%~3
if /i "!__ARCH!" == "x86" (
SET BITS=32
SET BIT_STR=
) else (
SET BITS=64
SET BIT_STR=64
)
echo:
echo Building OpenSSL Library [!__ARCH!] [!__LINK!] [!__BUILD!]
echo:
SETLOCAL EnableExtensions EnableDelayedExpansion
IF "!VS_VERSION!" == "2019" (
pushd "!VISUAL_STUDIO_VC!\..\..\..\Common7\Tools\"
call "!VISUAL_STUDIO_VC!\..\..\..\Common7\Tools\vsdevcmd.bat" -clean_env
popd
)
call "!VISUAL_STUDIO_VC!\vcvarsall.bat" !__ARCH!
rem Place the linker and compiler of Visual Studio infront of any other binaries when searching
rem SET PATH=!PATH!;!CYGWIN_DIR!\bin;!CYGWIN_DIR!\usr\bin;
call :printConfiguration
call :buildtype !__ARCH! !__LINK! !__BUILD!
ENDLOCAL
goto :eof
rem ========================================================================================================
:: call :build <x86|x64> <static|shared> <debug|release>
:buildtype
SET __ARCH=%~1
SET __LINK=%~2
SET __BUILD=%~3
SET CYGWIN=nodosfilewarning
if /i "!__ARCH!" == "x86" (
SET BITS=32
SET BIT_STR=
) else (
SET BITS=64
SET BIT_STR=64
)
IF NOT EXIST "!PROJECT_BUILD_DIR!" (
mkdir "!PROJECT_BUILD_DIR!"
)
SET RUNTIME_SUFFIX=
if /i "!__LINK!" == "shared" (
SET RUNTIME_SUFFIX=MD
)
if /i "!__LINK!" == "static" (
SET RUNTIME_SUFFIX=MT
)
SET LIBSUFFIX=
if /i "!__BUILD!" == "debug" (
SET LIBSUFFIX=d
)
SET RUNTIME_FULL_SUFFIX=!RUNTIME_SUFFIX!!LIBSUFFIX!
SET DLL_STR=
if /i "!__LINK!" == "shared" (
SET DLL_STR=dll
)
SET INSTALL_DIR=!PROJECT_INSTALL_DIR!\!BUILD_PROJECT!-!__ARCH!-!__LINK!-!__BUILD!-vs!VS_VERSION!
SET B_CMD=perl !PROJECT_SRC_DIR!\Configure
SET COMMON_OPTIONS=enable-static-engine --prefix=!INSTALL_DIR! --openssldir=./ssl
SET MODE=VC-WIN
if /i "!__LINK!" == "shared" (
SET COMMON_OPTIONS=!COMMON_OPTIONS! shared
)
if /i "!__LINK!" == "static" (
SET COMMON_OPTIONS=!COMMON_OPTIONS! no-shared -static
)
if /i "!__BUILD!" == "debug" (
SET MODE=!__BUILD!-!MODE!
)
if /i "!__ARCH!" == "x86" (
SET MODE=!MODE!!BITS!
SET COMMON_OPTIONS=!COMMON_OPTIONS! no-asm
) else (
SET MODE=!MODE!!BITS!A
SET COMMON_OPTIONS=!COMMON_OPTIONS! no-asm
)
SET BUILD_DIR=!PROJECT_BUILD_DIR!\!BUILD_PROJECT!-!__ARCH!-!__LINK!-!__BUILD!-vs!VS_VERSION!
IF NOT EXIST "!BUILD_DIR!" (
mkdir "!BUILD_DIR!"
)
SET CONFIG_LOG_FILE=!BUILD_DIR!\!BUILD_PROJECT!-!__ARCH!-!__LINK!-!__BUILD!-vs!VS_VERSION!.config.log
SET BUILD_LOG_FILE=!BUILD_DIR!\!BUILD_PROJECT!-!__ARCH!-!__LINK!-!__BUILD!-vs!VS_VERSION!.build.log
SET TEST_LOG_FILE=!BUILD_DIR!\!BUILD_PROJECT!-!__ARCH!-!__LINK!-!__BUILD!-vs!VS_VERSION!.test.log
SET INSTALL_LOG_FILE=!BUILD_DIR!\!BUILD_PROJECT!-!__ARCH!-!__LINK!-!__BUILD!-vs!VS_VERSION!.install.log
ECHO. > !CONFIG_LOG_FILE!
SET B_CMD=!B_CMD! !MODE! !COMMON_OPTIONS!
echo Commands: !B_CMD!
timeout /t 10
rem pushd !PROJECT_SRC_DIR!
pushd !BUILD_DIR!
echo Configured with: !B_CMD! > !CONFIG_LOG_FILE! 2>&1
!B_CMD! >> !CONFIG_LOG_FILE! 2>&1
SET MK_CMD=nmake
ECHO. > !BUILD_LOG_FILE!
!MK_CMD! > !BUILD_LOG_FILE! 2>&1
rem !MK_CMD! list-tests > !TEST_LOG_FILE! 2>&1
!MK_CMD! test >> !TEST_LOG_FILE! 2>&1
IF NOT EXIST "!INSTALL_DIR!" (
mkdir "!INSTALL_DIR!"
)
rem !MK_CMD! DESTDIR=!INSTALL_DIR! install >> !INSTALL_LOG_FILE! 2>&1
!MK_CMD! install_sw >> !INSTALL_LOG_FILE! 2>&1
rem Install the OpenSSL configuration dir (./ssl)
!MK_CMD! install_ssldirs >> !INSTALL_LOG_FILE! 2>&1
rem Install the OpenSSL documentation dir (./html)
!MK_CMD! install_html_docs >> !INSTALL_LOG_FILE! 2>&1
IF NOT EXIST "!INSTALL_DIR!\logs" (
mkdir "!INSTALL_DIR!\logs"
)
xcopy /Q /Y !CONFIG_LOG_FILE! !INSTALL_DIR!\logs\ >> !INSTALL_LOG_FILE! 2>&1
xcopy /Q /Y !BUILD_LOG_FILE! !INSTALL_DIR!\logs\ >> !INSTALL_LOG_FILE! 2>&1
xcopy /Q /Y !TEST_LOG_FILE! !INSTALL_DIR!\logs\ >> !INSTALL_LOG_FILE! 2>&1
xcopy /Q /Y !INSTALL_LOG_FILE! !INSTALL_DIR!\logs\ >> !INSTALL_LOG_FILE! 2>&1
popd
goto :eof
rem ========================================================================================================
:toLower str -- converts uppercase character to lowercase
:: -- str [in,out] - valref of string variable to be converted
:$created 20060101 :$changed 20080219 :$categories StringManipulation
:$source http://www.dostips.com
if not defined %~1 EXIT /b
for %%a in ("A=a" "B=b" "C=c" "D=d" "E=e" "F=f" "G=g" "H=h" "I=i"
"J=j" "K=k" "L=l" "M=m" "N=n" "O=o" "P=p" "Q=q" "R=r"
"S=s" "T=t" "U=u" "V=v" "W=w" "X=x" "Y=y" "Z=z" "??
"?? "??) do (
call set %~1=%%%~1:%%~a%%
)
EXIT /b
rem ========================================================================================================
:: %1 an error message
:exitB
echo:
echo Error: %1
echo:
echo Contact stathis@npcglib.org
@exit /B 0