1 Star 0 Fork 1

Vinton/poco_openssl

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
build.ps1 22.57 KB
一键复制 编辑 原始数据 按行查看 历史
Alex Fabijanic 提交于 2018-04-12 16:14 . cleanup master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786
# This script will download and build OpenSSL in debug, release
# or both configurations for Win32 or x64.
#
# Requires PowerShell version 3.0 or newer
#
# Usage:
# ------
# build.ps1 [-openssl_release 1.0.0 | 1.1.0]
# [-vs_version 150 | 140 | 120 | 110 | 100 | 90]
# [-config release | debug | both]
# [-platform Win32 | x64]
# [-library shared | static | both]
#
# Example: C:\>powershell -ExecutionPolicy RemoteSigned \
# -File build.ps1 -openssl_release 1.1.0 -vs_version 120 \
# -config both -platform x64 -library both
#
# Modified and adapted for POCO from https://github.com/hadouken/openssl
# (see https://github.com/hadouken/openssl/blob/master/LICENSE for license)
#
[CmdletBinding()]
Param
(
[Parameter()]
[ValidatePattern("1\.[0-9]\.[0-9][a-z]*")]
[string] $openssl_release = "1.1.0",
[Parameter()]
[ValidateSet(90, 100, 110, 120, 140, 150)]
[int] $vs_version = 120,
[Parameter()]
[ValidateSet('release', 'debug', 'both')]
[string] $config = 'release',
[Parameter()]
[ValidateSet('Win32', 'x64')]
[string] $platform = 'x64',
[Parameter()]
[ValidateSet('shared', 'static', 'both')]
[string] $library = 'shared'
)
$configstr = $config
if ($config -eq 'both') { $configstr = "debug and release"}
$librarystr = $library
if ($library -eq 'both') { $librarystr = "shared and static"}
Write-Host "Building VS$vs_version ($platform), Config: $configstr, Library: $librarystr"
Write-host "Please wait, this may take some time ..."
$BUILD_ROOT = Join-Path $PSScriptRoot "VS_$vs_version"
$PACKAGES_DIRECTORY = Join-Path $PSScriptRoot "packages"
$OUTPUT_BIN_DIRECTORY = $BUILD_ROOT
$OUTPUT_INC_DIRECTORY = Join-Path $BUILD_ROOT "include"
$VERSION = "0.0.0"
if (Test-Path Env:\APPVEYOR_BUILD_VERSION) {
$VERSION = $env:APPVEYOR_BUILD_VERSION
}
# 7zip configuration section
$7ZIP_VERSION = "18.01"
$7ZIPNODOTVERSION = $7ZIP_VERSION -replace "\.", ""
$7ZIP_NAME = "7z-$7ZIPNODOTVERSION-x64"
$7ZIP_DIRECTORY = Join-Path $PACKAGES_DIRECTORY $7ZIP_NAME
$7ZIP_TOOL = Join-Path $7ZIP_DIRECTORY "\Files\7-Zip\7z.exe"
$7ZIP_PACKAGE_FILE = "7z$7ZIPNODOTVERSION.msi"
$7ZIPINSTALLER = "$PACKAGES_DIRECTORY\$7ZIP_PACKAGE_FILE"
$7ZIP_DOWNLOAD_URL = "http://7-zip.org/a/$7ZIP_PACKAGE_FILE"
# NASM configuration section
$NASM_VERSION = "2.13"
$NASM_DIRECTORY = Join-Path $PACKAGES_DIRECTORY "nasm-$NASM_VERSION"
$NASM_PACKAGE_FILE = "nasm-$NASM_VERSION-win32.zip"
$NASM_DOWNLOAD_URL = "http://www.nasm.us/pub/nasm/releasebuilds/$NASM_VERSION/win32/$NASM_PACKAGE_FILE"
# Strawberry Perl configuration section
#$PERL_VERSION = "5.20.1.1"
$PERL_VERSION = "5.26.1.1"
$PERL_DIRECTORY = Join-Path $PACKAGES_DIRECTORY "strawberry-perl-$PERL_VERSION"
$PERL_PACKAGE_FILE = "strawberry-perl-$PERL_VERSION-32bit-portable.zip"
$PERL_DOWNLOAD_URL = "http://strawberryperl.com/download/$PERL_VERSION/$PERL_PACKAGE_FILE"
# OpenSSL configuration section
$OPENSSL_VERSION = $openssl_release
$ver_arr = $OPENSSL_VERSION.Split(".")
$OPENSSL_MAJOR_VERSION = $ver_arr[0]
$OPENSSL_MINOR_VERSION = $ver_arr[1]
$OPENSSL_DIRECTORY = Join-Path $PACKAGES_DIRECTORY "openssl-$OPENSSL_VERSION"
$OPENSSL_CLEAN_DIRECTORY = Join-Path $PACKAGES_DIRECTORY "openssl-$OPENSSL_VERSION.clean"
$OPENSSL_PACKAGE_FILE = "openssl-$OPENSSL_VERSION.tar.gz"
$OPENSSL_DOWNLOAD_URL = "https://www.openssl.org/source/$OPENSSL_PACKAGE_FILE"
function Download-File {
param (
[string]$url,
[string]$target
)
$webClient = new-object System.Net.WebClient
$webClient.DownloadFile($url, $target)
}
function Extract-File {
param (
[string]$file,
[string]$target
)
if (Test-Path -Path $7ZIP_TOOL) { & "$7ZIP_TOOL" x $file -o"$target" -y }
else {
# first time, no 7Zip yet, install
$cmd = "cmd /c start /wait msiexec"
$target = "TARGETDIR=$7ZIP_DIRECTORY"
$log = "/log $PACKAGES_DIRECTORY\7zip_install.log"
$exp = "$cmd /a $7ZIPINSTALLER /quiet /qn /norestart $target $log"
Write-Host "Installing 7Zip: $exp"
Invoke-Expression $exp
}
}
function Load-DevelopmentTools {
# Set environment variables for Visual Studio Command Prompt
if ($vs_version -eq 0)
{
if ($Env:VS150COMNTOOLS -ne '') { $script:vs_version = 150 }
elseif ($Env:VS140COMNTOOLS -ne '') { $script:vs_version = 140 }
elseif ($Env:VS120COMNTOOLS -ne '') { $script:vs_version = 120 }
elseif ($Env:VS110COMNTOOLS -ne '') { $script:vs_version = 110 }
elseif ($Env:VS100COMNTOOLS -ne '') { $script:vs_version = 100 }
elseif ($Env:VS90COMNTOOLS -ne '') { $script:vs_version = 90 }
else
{
Write-Host 'Visual Studio not found, exiting.'
Exit
}
}
$vsct = "VS$($vs_version)COMNTOOLS"
$vsdir = (Get-Item Env:$vsct).Value
$Command = ''
if ($vs_version -ge 150)
{
if ($platform -eq 'x64')
{
$Command = "$($vsdir)\..\..\VC\Auxiliary\Build\vcvars64.bat"
}
else
{
$Command = "$($vsdir)\..\..\VC\Auxiliary\Build\vcvars32.bat"
}
}
else
{
if ($platform -eq 'x64')
{
$Command = "$($vsdir)..\..\VC\bin\x86_amd64\vcvarsx86_amd64.bat"
}
else
{
$Command = "$($vsdir)vsvars32.bat"
}
}
$tempFile = [IO.Path]::GetTempFileName()
cmd /c " `"$Command`" && set > `"$tempFile`" "
Get-Content $tempFile | Foreach-Object {
if($_ -match "^(.*?)=(.*)$")
{
Set-Content "Env:$($matches[1])" $matches[2]
}
}
Remove-Item $tempFile
}
function Download-Package {
param (
[string]$url,
[string]$file
)
$dir = $PACKAGES_DIRECTORY
if (!(Test-Path $dir)) {
New-Item -ItemType Directory -Path $dir | Out-Null
}
if (!(Test-Path (Join-Path $dir $file))) {
Write-Host "Downloading $file from $url"
Download-File $url (Join-Path $dir $file)
}
}
function Download {
# Download 7zip
Download-Package $7ZIP_DOWNLOAD_URL $7ZIP_PACKAGE_FILE
# Download NASM
Download-Package $NASM_DOWNLOAD_URL $NASM_PACKAGE_FILE
# Download Strawberry-Perl
Download-Package $PERL_DOWNLOAD_URL $PERL_PACKAGE_FILE
# Download OpenSSL
Download-Package $OPENSSL_DOWNLOAD_URL $OPENSSL_PACKAGE_FILE
}
function Unzip-Package {
param (
[string]$dir,
[string]$file
)
$pdir = $PACKAGES_DIRECTORY
if (!(Test-Path $dir)) {
Write-Host "Unpacking $file"
Extract-File (Join-Path $pdir $file) $dir
}
}
function Unzip {
Unzip-Package $7ZIP_DIRECTORY $7ZIP_PACKAGE_FILE
Unzip-Package $PERL_DIRECTORY $PERL_PACKAGE_FILE
# Unpack NASM separately, package has nested dir layout
if (!(Test-Path $NASM_DIRECTORY)) {
Write-Host "Unpacking $NASM_PACKAGE_FILE"
Extract-File (Join-Path $PACKAGES_DIRECTORY $NASM_PACKAGE_FILE) $PACKAGES_DIRECTORY
}
}
function Unpack-OpenSSL
{
if (!(Test-Path -Path $OPENSSL_CLEAN_DIRECTORY -ErrorAction SilentlyContinue)) {
# Unpack OpenSSL
Write-Host "Unpacking $OPENSSL_PACKAGE_FILE"
$tmp = Join-Path $PACKAGES_DIRECTORY $OPENSSL_PACKAGE_FILE
& "$7ZIP_TOOL" x $tmp -o"$PACKAGES_DIRECTORY" -y
if ($LastExitCode -ne 0) {
Write-Host "Error extracting files"
Exit 1
}
$tmp = $tmp.replace('.gz', '')
& "$7ZIP_TOOL" x $tmp -o"$PACKAGES_DIRECTORY" -y
if ($LastExitCode -ne 0) {
Write-Host "Error extracting files"
Exit 1
}
# This is a clean code base that will be copied and used by each individual build
Start-Sleep 1
Rename-Item -path $OPENSSL_DIRECTORY -newname "$OPENSSL_CLEAN_DIRECTORY" -force
if ($? -eq $false) {
Write-Host "Error renaming OpenSSL directory [$OPENSSL_DIRECTORY] to [$OPENSSL_CLEAN_DIRECTORY]"
Exit 1
}
}
# Clean up stale files from the previous build
Start-Sleep 1
if (Test-Path -Path $OPENSSL_DIRECTORY -ErrorAction SilentlyContinue) {
Remove-Item $OPENSSL_DIRECTORY -Recurse -Force
if ($? -eq $false) {
Write-Host "Error removing old OpenSSL directory: $OPENSSL_DIRECTORY"
Exit 1
}
}
# Copy clean directory tree for this build
Start-Sleep 1
Copy-Item -Path "$OPENSSL_CLEAN_DIRECTORY" -Destination "$OPENSSL_DIRECTORY" -Recurse -Force
if ($? -eq $false) {
Write-Host "Error copying clean OpenSSL directory [$OPENSSL_CLEAN_DIRECTORY] to [$OPENSSL_DIRECTORY]"
Exit 1
}
}
function Replace-String
{
param (
[string]$file,
[string]$original,
[string]$replacement
)
(Get-Content $file).replace($original, $replacement) | Set-Content $file
}
function Compile-OpenSSL-10
{
param (
[string]$winplatform,
[string]$configuration,
[string]$target,
[string]$library
)
# start every build with clean directory
Unpack-OpenSSL
Start-Sleep 1
pushd $OPENSSL_DIRECTORY
# Set up portable Strawberry Perl
$env:Path = "$(Join-Path $PERL_DIRECTORY perl\site\bin);" + $env:Path
$env:Path = "$(Join-Path $PERL_DIRECTORY perl\bin);" + $env:Path
$env:Path = "$(Join-Path $PERL_DIRECTORY c\bin);" + $env:Path
$d = ""
if ($configuration -eq "debug") { $d = "d" }
$l = ""
if ($library -eq "shared") { $l = "MD" }
else { $l = "MT" }
$b = "32"
if ($winplatform -eq "win64") { $b = "64" }
# Set up nasm
$env:Path = "$NASM_DIRECTORY;" + $env:Path
perl Configure $target --prefix="$OPENSSL_DIRECTORY/bin/$winplatform/$configuration"
# Run nasm
cmd /c ms\do_nasm.bat
if ($winplatform -eq "win64") {
# do not edit these replaces - they must be exactly like this, tabs and all
Replace-String "util\pl\VC-32.pl" "`$ssl= `"ssleay32`"" `
"`$ssl= `"libssl`""
Replace-String "util\pl\VC-32.pl" "`$crypto=`"libeay32`"" `
"`$crypto=`"libcrypto`""
Replace-String "util\pl\VC-32.pl" "`$crypto=`"libeayfips32`"" `
"`$crypto=`"libcryptofips`""
Replace-String "ms\do_win64a.bat" "perl util\mkdef.pl 32 libeay > ms\libeay32.def" `
"perl util\mkdef.pl $b libeay > ms\libcrypto.def"
Replace-String "ms\do_win64a.bat" "perl util\mkdef.pl 32 ssleay > ms\ssleay32.def" `
"perl util\mkdef.pl $b ssleay > ms\libssl.def"
cmd /c ms\do_win64a
Replace-String "ms\libcrypto.def" "LIBEAY32" "LIBCRYPTO"
Replace-String "ms\libssl.def" "SSLEAY32" "LIBSSL"
}
else {
Replace-String "ms\libeay32.def" "LIBEAY32" "LIBCRYPTO"
Replace-String "ms\ssleay32.def" "SSLEAY32" "LIBSSL"
}
$lib = ""
if ($library -eq "shared") { $lib = "dll" }
if ($configuration -eq "debug") {
Replace-String "ms\nt$lib.mak" "`$(TMP_D)/lib" "`$(TMP_D)/openssl"
}
# Run nmake
nmake -f ms\nt$lib.mak
# Run nmake install
nmake -f ms\nt$lib.mak install
popd
}
function Replace-Line
{
param (
[string]$file,
[string]$regex,
[string]$replacement
)
(Get-Content $file) | Foreach-Object {$_ -replace "^$regex.*", "$replacement"} | Set-Content $file
}
function Get-Suffix
{
param (
[string]$configuration,
[string]$library
)
$suffix = ""
if ($library -eq "static") { $suffix = "mt" }
if ($configuration -eq "debug") { $suffix = "$($suffix)d" }
return $suffix
}
function Compile-OpenSSL-11
{
param (
[string]$winplatform,
[string]$configuration,
[string]$target,
[string]$library
)
# start every build with clean directory
Unpack-OpenSSL
Start-Sleep 1
pushd $OPENSSL_DIRECTORY
# Set up portable Strawberry Perl
$env:Path = "$(Join-Path $PERL_DIRECTORY perl\site\bin);" + $env:Path
$env:Path = "$(Join-Path $PERL_DIRECTORY perl\bin);" + $env:Path
$env:Path = "$(Join-Path $PERL_DIRECTORY c\bin);" + $env:Path
$lnk = "shared"
$opts = ""
if ($library -eq "static") { $lnk = "no-shared" }
# Set up nasm
$env:Path = "$NASM_DIRECTORY;" + $env:Path
if ($library -eq "shared") {
# edit build.info, to replace default name decoration for DLLS
$suffix = Get-Suffix $configuration $library
$replace = " SHARED_NAME[libcrypto]=libcrypto"
$regex = [Regex]::Escape($replace)
Replace-Line "build.info" "^$regex.*" "$($replace)$($suffix)"
$replace = " SHARED_NAME[libssl]=libssl"
$regex = [Regex]::Escape($replace)
Replace-Line "build.info" "^$regex.*" "$($replace)$($suffix)"
}
$openssldir = "$OPENSSL_DIRECTORY\ssl"
$prefix = "$OPENSSL_DIRECTORY\bin\$winplatform\$configuration"
$cmd = "perl Configure $target --api=1.0.0 $opts --prefix=$prefix --openssldir=$openssldir $lnk"
Write-Host $cmd
Invoke-Expression $cmd
nmake
nmake install_sw
# ugly hack - we want all versions of VS to be able to link with VS 120 libs
# older versions CRT libs miss some functions (related to SSE2), so we extract
# the object containing those functions and put it in a separate library
# (only needed for 32-bit static libs, built with /MT)
if (($script:vs_version -eq 120) -and ($library -eq "static")) {
$crtlib = "msvcrt.lib"
if ($configuration -eq "debug") { $crtlib = "msvcrtd.lib" }
$ftolObjPath = Invoke-Expression "lib /NOLOGO /LIST msvcrt.lib | findstr ftol3 2>&1"
Write-Host "ftolObjPath :[$ftolObjPath]"
if ($ftolObjPath) {
Write-Host "Found $ftolObjPath"
$ftolOut = Split-Path $ftolObjPath -leaf
if ($ftolOut) {
Write-Host "Found $ftolOut"
$extFtol = "$prefix\$ftolOut"
Write-Host "Extracting $ftolObjPath to $extFtol"
Invoke-Expression "lib /NOLOGO /EXTRACT:$ftolObjPath /OUT:$extFtol msvcrt.lib"
$suffix = Get-Suffix $configuration $library
$libPreVS2013CRT = "$prefix\lib\libPreVS2013CRT$($suffix).lib"
Write-Host "Creating $libPreVS2013CRT from $extFtol"
Invoke-Expression "lib /NOLOGO /OUT:$libPreVS2013CRT $extFtol"
}
}
}
popd
}
function Compile-OpenSSL
{
param (
[string]$winplatform,
[string]$configuration,
[string]$target,
[string]$library
)
Write-Host "**********************************************************"
Write-Host " Compiling $winplatform $configuration $target $library"
Write-Host "**********************************************************"
if (($OPENSSL_MAJOR_VERSION -eq 1) -and ($OPENSSL_MINOR_VERSION -eq 0)) {
Compile-OpenSSL-10 $winplatform $configuration $target $library
}
elseif (($OPENSSL_MAJOR_VERSION -ge 1) -and ($OPENSSL_MINOR_VERSION -ge 1)) {
Compile-OpenSSL-11 $winplatform $configuration $target $library
}
else {
throw "Only versions >= 1.0.x are supported"
}
}
function Output-OpenSSL-10
{
param (
[string]$winplatform,
[string]$configuration,
[string]$library
)
pushd $OPENSSL_DIRECTORY
$t = Join-Path $OUTPUT_BIN_DIRECTORY "$winplatform"
$lib = "lib"
$d = ""
if ($configuration -eq "debug") { $d = "d" }
$l = ""
if ($library -eq "shared") { $l = "MD" }
else { $l = "MT" }
$b = "32"
if ($winplatform -eq "win64") { $b = "64" }
# Copy output files
if ($library -eq "shared") {
xcopy /y bin\$winplatform\$configuration\bin\*.dll "$t\bin\$configuration\*"
if ($winplatform -eq "win32") {
$path = "$t\bin\$configuration\libcrypto.dll"
if (Test-Path $path) { Remove-Item $path -force }
$path = "$t\bin\$configuration\libeay32.dll"
Rename-Item -path $path -newname "libcrypto.dll" -force
$path = "$t\bin\$configuration\libssl.dll"
if (Test-Path $path) { Remove-Item $path -force }
$path = "$t\bin\$configuration\ssleay32.dll"
Rename-Item -path $path -newname "libssl.dll" -force
}
$lib = "bin"
}
xcopy /y bin\$winplatform\$configuration\lib\*.lib "$t\$lib\$configuration\*"
if ($configuration -eq "debug") {
$tmp = Join-Path $OPENSSL_DIRECTORY "tmp32.dbg"
if (Test-Path "$tmp\openssl.pdb") {
xcopy /y "$tmp\openssl.pdb" "$t\$lib\$configuration\*" /E
}
}
if ($winplatform -eq "win32") {
$path = "$t\$lib\$configuration\libcrypto.lib"
if (Test-Path $path) { Remove-Item $path -force }
$path = "$t\$lib\$configuration\libeay32.lib"
Rename-Item -path $path -newname "libcrypto.lib" -force
$path = "$t\$lib\$configuration\libssl.lib"
if (Test-Path $path) { Remove-Item $path -force }
$path = "$t\$lib\$configuration\ssleay32.lib"
Rename-Item -path $path -newname "libssl.lib" -force
}
if (!(Test-Path -Path "$OUTPUT_INC_DIRECTORY")) {
xcopy /y bin\$winplatform\$configuration\include\* "$OUTPUT_INC_DIRECTORY\*" /E
}
popd
}
function Do-XCopy
{
param (
[string]$source,
[string]$target
)
xcopy /y "$source" "$target" /E /C
}
function Output-OpenSSL-11 {
param (
[string]$winplatform,
[string]$configuration,
[string]$library
)
pushd $OPENSSL_DIRECTORY
$t = Join-Path $OUTPUT_BIN_DIRECTORY "$winplatform"
# Copy output files
$lib = "lib"
$srcpath = "bin\$winplatform\$configuration\$lib"
$destpath = "$t\$lib\$configuration"
if ($library -eq "shared") {
$lib = "bin"
$destpath = "$t\$lib\$configuration"
Do-XCopy "$srcpath\*.lib" "$destpath\*"
$srcpath = "bin\$winplatform\$configuration\$lib"
Do-XCopy "$srcpath\*.dll" "$destpath\*"
Do-XCopy "$srcpath\*.pdb" "$destpath\*"
}
else {
Do-XCopy "$srcpath\*.lib" "$destpath\*"
Do-XCopy "$srcpath\*.pdb" "$destpath\*"
}
$suffix = Get-Suffix $configuration $library
if ($suffix) {
Write-Host "Renaming $configuration $library libraries, adding suffix: $suffix"
Move-Item -Path "$destpath\libcrypto.lib" -Destination "$destpath\libcrypto$($suffix).lib" -Force
Move-Item -Path "$destpath\libssl.lib" -Destination "$destpath\libssl$($suffix).lib" -Force
if ((Test-Path -Path "$destpath\libcrypto.pdb")) {
Move-Item -Path "$destpath\libcrypto.pdb" -Destination "$destpath\libcrypto$($suffix).pdb" -Force
}
if ((Test-Path -Path "$destpath\libssl.pdb")) {
Move-Item -Path "$destpath\libssl.pdb" -Destination "$destpath\libssl$($suffix).pdb" -Force
}
}
$path = "$destpath\openssl.*"
if (Test-Path $path) { Remove-Item $path -force }
if (!(Test-Path -Path "$OUTPUT_INC_DIRECTORY")) {
New-Item -ItemType Directory -Force -Path $OUTPUT_INC_DIRECTORY
}
# copy headers
Do-XCopy "bin\$winplatform\$configuration\include\*" "$OUTPUT_INC_DIRECTORY\*"
# add info for poco to know it is using its own openssl
# and which VS version it was built with
# first, let's make sure we don't do this multiple times
$regex = [Regex]::Escape("POCO_OPENSSLV_H_INCLUDED")
$found = $false
Get-Content $OUTPUT_INC_DIRECTORY\openssl\opensslv.h | ForEach { if ($_ -match "^[ -~]*$regex[ -~]*") {
$found = $true
break
}}
# clean file, stamp it
if (!$found) {
Add-Content $OUTPUT_INC_DIRECTORY\openssl\opensslv.h "`n/* begin POCO OpenSSL script generated, do not edit manually */`n"
Add-Content $OUTPUT_INC_DIRECTORY\openssl\opensslv.h "#ifndef POCO_OPENSSLV_H_INCLUDED`n"
Add-Content $OUTPUT_INC_DIRECTORY\openssl\opensslv.h " #define POCO_OPENSSLV_H_INCLUDED`n"
Add-Content $OUTPUT_INC_DIRECTORY\openssl\opensslv.h " #define POCO_INTERNAL_OPENSSL_MSVC_VER $vs_version`n"
Add-Content $OUTPUT_INC_DIRECTORY\openssl\opensslv.h "#endif // POCO_OPENSSLV_H_INCLUDED`n"
Add-Content $OUTPUT_INC_DIRECTORY\openssl\opensslv.h "/* end POCO OpenSSL script generated */`n"
}
$applinkSource = "ms\applink.c"
$applinkTarget = "$OUTPUT_INC_DIRECTORY\openssl\applink.c"
if ((Test-Path -Path $applinkSource) -and !(Test-Path -Path $applinkTarget)) {
Copy-Item $applinkSource -Destination $applinkTarget
}
popd
}
function Output-OpenSSL {
param (
[string]$winplatform,
[string]$configuration,
[string]$library
)
Write-Host "************************************************"
Write-Host " Copying $winplatform $configuration $library"
Write-Host "************************************************"
if (($OPENSSL_MAJOR_VERSION -eq 1) -and ($OPENSSL_MINOR_VERSION -eq 0)) {
Output-OpenSSL-10 $winplatform $configuration $library
}
elseif (($OPENSSL_MAJOR_VERSION -ge 1) -and ($OPENSSL_MINOR_VERSION -ge 1)) {
Output-OpenSSL-11 $winplatform $configuration $library
}
else {
throw "Only versions >= 1.0.x are supported"
}
}
function Copy-To-Build
{
# (re)create universal build directory where every version build ends up
if (!(Test-Path -PathType Container -Path $PSScriptRoot\build)) {
New-Item -ItemType Directory -Path "$PSScriptRoot\build" -Force
}
Do-XCopy "$BUILD_ROOT\*" "$PSScriptRoot\build\*" -Force
# write VS version
Set-Content -Path "$PSScriptRoot\build\vs_version" -Value "$vs_version"
}
function Build-Win32
{
if (($config -eq "debug") -or ($config -eq "both")) {
if (($library -eq "shared") -or ($library -eq "both")) {
Compile-OpenSSL "win32" "debug" "debug-VC-WIN32" "shared"
Output-OpenSSL "win32" "debug" "shared"
}
if (($library -eq "static") -or ($library -eq "both")) {
Compile-OpenSSL "win32" "debug" "debug-VC-WIN32" "static"
Output-OpenSSL "win32" "debug" "static"
}
}
if (($config -eq "release") -or ($config -eq "both")) {
if (($library -eq "shared") -or ($library -eq "both")) {
Compile-OpenSSL "win32" "release" "VC-WIN32" "shared"
Output-OpenSSL "win32" "release" "shared"
}
if (($library -eq "static") -or ($library -eq "both")) {
Compile-OpenSSL "win32" "release" "VC-WIN32" "static"
Output-OpenSSL "win32" "release" "static"
}
}
}
function Build-Win64
{
if (($config -eq "debug") -or ($config -eq "both")) {
if (($library -eq "shared") -or ($library -eq "both")) {
Compile-OpenSSL "win64" "debug" "debug-VC-WIN64A" "shared"
Output-OpenSSL "win64" "debug" "shared"
}
if (($library -eq "static") -or ($library -eq "both")) {
Compile-OpenSSL "win64" "debug" "debug-VC-WIN64A" "static"
Output-OpenSSL "win64" "debug" "static"
}
}
if (($config -eq "release") -or ($config -eq "both")) {
if (($library -eq "shared") -or ($library -eq "both")) {
Compile-OpenSSL "win64" "release" "VC-WIN64A" "shared"
Output-OpenSSL "win64" "release" "shared"
}
if (($library -eq "static") -or ($library -eq "both")) {
Compile-OpenSSL "win64" "release" "VC-WIN64A" "static"
Output-OpenSSL "win64" "release" "static"
}
}
}
function Main
{
Download
Unzip
Load-DevelopmentTools
if ($platform -eq "Win32") { Build-Win32 }
elseif ($platform -eq "x64") { Build-Win64 }
else {
Write-Error "Unknown platform: $platform, allowed values: [Win32 | x64]"
Exit 1
}
Copy-To-Build
}
Main
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/vintonliu/poco_openssl.git
git@gitee.com:vintonliu/poco_openssl.git
vintonliu
poco_openssl
poco_openssl
master

搜索帮助