1 Set-PSDebug -Trace 1
2 
3 $RELEASE_VERSION=$args[0]
4 $CMAKE_ARCH=$args[1]
5 $VCPKG_PATH=$args[2]
6 if($args.length -eq 4) {
7     if($args[3] -eq "zip") {
8         $ZIP = "TRUE"
9     }
10 }
11 
12 if($CMAKE_ARCH -eq "Win32") {
13     $ARCH="x86"
14 } else {
15     $ARCH="x64"
16 }
17 
18 $SOURCE_DIR="$PSScriptRoot/../.."
19 $BUILD_DIR="$SOURCE_DIR/win32_release"
20 $RELEASE_DIR="$SOURCE_DIR/yubico-piv-tool-$RELEASE_VERSION-$ARCH"
21 $RELEASE_ARCHIVE="$SOURCE_DIR/yubico-piv-tool-$RELEASE_VERSION-$ARCH.zip"
22 $LICENSES_DIR="$RELEASE_DIR/licenses"
23 
24 # Install prerequisites
25 cd $VCPKG_PATH
26 .\vcpkg.exe install openssl:$ARCH-windows
27 .\vcpkg.exe install getopt:$ARCH-windows
28 
29 $env:OPENSSL_ROOT_DIR ="$VCPKG_PATH/packages/openssl_$ARCH-windows"
30 
31 # Build for x86 architecture
32 cd $SOURCE_DIR
33 mkdir $BUILD_DIR; cd $BUILD_DIR
34 cmake -A "$CMAKE_ARCH" -DVERBOSE_CMAKE=1 -DGETOPT_LIB_DIR="$VCPKG_PATH/packages/getopt-win32_$ARCH-windows/lib" -DGETOPT_INCLUDE_DIR="$VCPKG_PATH/packages/getopt-win32_$ARCH-windows/include" -DCMAKE_INSTALL_PREFIX="$RELEASE_DIR" ..
35 cmake --build . -v --config Release
36 cmake --install .
37 cd $RELEASE_DIR/bin
38 if($ARCH -eq "x86")
39 {
40     cp $VCPKG_PATH/packages/openssl_x86-windows/bin/libcrypto-1_1.dll .
41     cp $VCPKG_PATH/packages/getopt-win32_x86-windows/bin/getopt.dll .
42 }
43 else
44 {
45     cp $VCPKG_PATH/packages/openssl_x64-windows/bin/libcrypto-1_1-x64.dll .
46     cp $VCPKG_PATH/packages/getopt-win32_x64-windows/bin/getopt.dll .
47 }
48 
49 # Create missing directories
50 mkdir -p $LICENSES_DIR
51 
52 # Copy licenses
53 $license=(Get-ChildItem -Path $SOURCE_DIR -Filter COPYING -Recurse -ErrorAction SilentlyContinue -Force | %{$_.FullName})
54 cp $license $LICENSES_DIR\yubico-piv-tool.txt
55 
56 $license=(Get-ChildItem -Path $VCPKG_PATH\buildtrees\openssl\src\ -Filter LICENSE -Recurse -ErrorAction SilentlyContinue -Force | %{$_.FullName})
57 cp $license $LICENSES_DIR\openssl.txt
58 
59 $license=(Get-ChildItem -Path $VCPKG_PATH\buildtrees\getopt-win32\src\ -Filter LICENSE -Recurse -ErrorAction SilentlyContinue -Force | %{$_.FullName})
60 cp $license $LICENSES_DIR\getopt.txt
61 
62 # Copy OpenSSL header files
63 cp -r $VCPKG_PATH\packages\openssl_$ARCH-windows\include\openssl $RELEASE_DIR/include/
64 
65 if($ZIP)
66 {
67     # Create a zip with the binaries
68     Add-Type -Assembly System.IO.Compression.FileSystem
69     $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
70     [System.IO.Compression.ZipFile]::CreateFromDirectory($RELEASE_DIR, $RELEASE_ARCHIVE, $compressionLevel, $true)
71     cd $SOURCE_DIR
72     rm -r $RELEASE_DIR
73 }
74 
75 # Clean directory
76 cd $SOURCE_DIR
77 rm -r $BUILD_DIR
78