-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[MERGE #838] MicroBuild v2: changes to project files and build script…
…s to enable building in MBv2, and PGO builds of ChakraCore; add nuspec for ChakraCore. Merge pull request #838 from dilijev:mbv2-s Thanks to @Cellule for helping with the PGO configurations. Includes initial work on NuGet as requested in issue #85
- Loading branch information
Showing
22 changed files
with
602 additions
and
41 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
<Import Project="Common.Build.ProjectConfiguration.props" /> | ||
<Import Project="MicroBuildv2.Build.ProjectConfiguration.props" /> | ||
</Project> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
<Import Project="$(SolutionDir)packages\MicroBuild.Core.0.2.0\build\MicroBuild.Core.props" Condition="Exists('$(SolutionDir)packages\MicroBuild.Core.0.2.0\build\MicroBuild.Core.props')" /> | ||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> | ||
<PropertyGroup> | ||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> | ||
</PropertyGroup> | ||
<Error Condition="!Exists('$(SolutionDir)packages\MicroBuild.Core.0.2.0\build\MicroBuild.Core.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)packages\MicroBuild.Core.0.2.0\build\MicroBuild.Core.props'))" /> | ||
<Error Condition="!Exists('$(SolutionDir)packages\MicroBuild.Core.0.2.0\build\MicroBuild.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)packages\MicroBuild.Core.0.2.0\build\MicroBuild.Core.targets'))" /> | ||
</Target> | ||
<Import Project="$(SolutionDir)packages\MicroBuild.Core.0.2.0\build\MicroBuild.Core.targets" Condition="Exists('$(SolutionDir)packages\MicroBuild.Core.0.2.0\build\MicroBuild.Core.targets')" /> | ||
</Project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<package xmlns="http://schemas.microsoft.com/packaging/2011/10/nuspec.xsd"> | ||
<metadata> | ||
<id>Microsoft.ChakraCore</id> | ||
<version>1.2</version> | ||
<authors>Chakra Team</authors> | ||
<owners>Chakra Team</owners> | ||
<licenseUrl>https://github.com/Microsoft/ChakraCore/blob/master/LICENSE.txt</licenseUrl> | ||
<projectUrl>https://github.com/Microsoft/ChakraCore</projectUrl> | ||
<requireLicenseAcceptance>false</requireLicenseAcceptance> | ||
<developmentDependency>true</developmentDependency> | ||
<description>ChakraCore is the core part of the Chakra Javascript engine that powers Microsoft Edge.</description> | ||
<!-- | ||
<releaseNotes>**** TODO: need link</releaseNotes> | ||
--> | ||
<copyright>Copyright (C) 2016 Microsoft</copyright> | ||
<language>en-US</language> | ||
<tags>Chakra,ChakraCore</tags> | ||
</metadata> | ||
<files> | ||
<file src="VcBuild\bin\x86_release\ChakraCore.dll" target="x86\ChakraCore.dll" /> | ||
<file src="VcBuild\bin\x86_release\ChakraCore.pdb" target="x86\ChakraCore.pdb" /> | ||
<file src="VcBuild\bin\x86_release\ch.exe" target="x86\ch.exe" /> | ||
<file src="VcBuild\bin\x86_release\ch.pdb" target="x86\ch.pdb" /> | ||
<file src="VcBuild\bin\x64_release\ChakraCore.dll" target="x64\ChakraCore.dll" /> | ||
<file src="VcBuild\bin\x64_release\ChakraCore.pdb" target="x64\ChakraCore.pdb" /> | ||
<file src="VcBuild\bin\x64_release\ch.exe" target="x64\ch.exe" /> | ||
<file src="VcBuild\bin\x64_release\ch.pdb" target="x64\ch.pdb" /> | ||
</files> | ||
</package> |
5 changes: 5 additions & 0 deletions
5
Build/packages/MicroBuild.Core.0.2.0/build/MicroBuild.Core.props
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
<Import Project="$(MSBuildThisFileDirectory)\MicroBuild.Plugin.props" Condition="'$(MicroBuildSentinelFile)' == ''" /> | ||
<Import Project="$(MicroBuildPluginDirectory)\MicroBuild.Plugins.*\**\build\MicroBuild.Plugins.*.props" Condition="'$(MicroBuildPluginDirectory)' != ''" /> | ||
</Project> |
5 changes: 5 additions & 0 deletions
5
Build/packages/MicroBuild.Core.0.2.0/build/MicroBuild.Core.targets
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
<Import Project="$(MSBuildThisFileDirectory)\MicroBuild.Plugin.props" Condition="'$(MicroBuildSentinelFile)' == ''" /> | ||
<Import Project="$(MicroBuildPluginDirectory)\MicroBuild.Plugins.*\**\build\MicroBuild.Plugins.*.targets" Condition="'$(MicroBuildPluginDirectory)' != ''" /> | ||
</Project> |
29 changes: 29 additions & 0 deletions
29
Build/packages/MicroBuild.Core.0.2.0/build/MicroBuild.Plugin.props
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
<PropertyGroup> | ||
<!-- MicroBuild plugins can be installed in any parent directory up the tree from the project that is building. | ||
The use of a sentinel file (which will be installed automatically due to package dependencies from any plugin) | ||
will help us locate the plugin packages directory while being constrained to using MSBuild's intrinsic functions, | ||
since we want the imports to occur at evaluation time instead of when a specific target is executing. | ||
Note: All MicroBuild plugins must be installed to the same directory (under the same packages folder). If plugins | ||
are installed to different directories, the plugins which are in the directories closest to the executing project | ||
up the hierarchy will be discovered, and the ones higher up the tree will be ignored. | ||
--> | ||
<MicroBuildSentinelFile>packages\MicroBuild.Core.Sentinel.1.0.0\sentinel.txt</MicroBuildSentinelFile> | ||
<MicroBuildSentinelFileV3>MicroBuild.Core.Sentinel\1.0.0\sentinel.txt</MicroBuildSentinelFileV3> | ||
|
||
<MicroBuildPluginDirectory>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), $(MicroBuildSentinelFile)))</MicroBuildPluginDirectory> | ||
<MicroBuildPluginDirectory Condition="'$(MicroBuildPluginDirectory)' != ''">$(MicroBuildPluginDirectory)\packages</MicroBuildPluginDirectory> | ||
|
||
<!-- Some people might want to put the plugin packages directly in their Nuget v3 global cache. This doesn't happen by default, | ||
but we will allow for it here. We don't support nuget.config's globalPackagesFolder setting here because we don't have a good | ||
way to load/parse that file with MSBuild intrinsics. We can check the other two mechanisms though, which are the %NUGET_PACKAGES% | ||
environment variable and %USERPROFILE%\.nuget\packages --> | ||
<MicroBuildPluginDirectory Condition="'$(MicroBuildPluginDirectory)' == '' and '$(NUGET_PACKAGES)' != '' and Exists('$(NUGET_PACKAGES)\$(MicroBuildSentinelFileV3)')">$(NUGET_PACKAGES)</MicroBuildPluginDirectory> | ||
<MicroBuildPluginDirectory Condition="'$(MicroBuildPluginDirectory)' == '' and '$(USERPROFILE)' != '' and Exists('$(USERPROFILE)\.nuget\packages\$(MicroBuildSentinelFileV3)')">$(USERPROFILE)\.nuget\packages</MicroBuildPluginDirectory> | ||
|
||
<!-- Allow for the ability to override the plugin directory, for example in automated builds --> | ||
<MicroBuildPluginDirectory Condition="'$(MicroBuildOverridePluginDirectory)' != ''">$(MicroBuildOverridePluginDirectory)</MicroBuildPluginDirectory> | ||
</PropertyGroup> | ||
</Project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
#------------------------------------------------------------------------------------------------------- | ||
# Copyright (C) Microsoft. All rights reserved. | ||
# Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. | ||
#------------------------------------------------------------------------------------------------------- | ||
|
||
# Finalize Build Script | ||
# | ||
# This script is run as the final step in a build definition | ||
# to clean up and produce metadata about the build. | ||
|
||
# | ||
# Clean up the sentinel which previously marked this build flavor as incomplete. | ||
# | ||
|
||
Remove-Item -Path ${Env:FlavorBuildIncompleteFile} -Force | ||
|
||
# | ||
# Create build status JSON file for this flavor. | ||
# | ||
|
||
$FullOutputPath = Join-Path $Env:DROP_ROOT $Env:OutputPath | ||
$BuildLogsPath = Join-Path $FullOutputPath "buildlogs" | ||
$buildFlavorErrFile = Join-Path $BuildLogsPath "build_${Env:BuildPlatform}${Env:BuildConfiguration}.err" | ||
|
||
# If build_{}{}.err contains any text then there were build errors and we record that the build failed. | ||
$BuildFailed = $false | ||
if (Test-Path $buildFlavorErrFile) { | ||
$BuildFailed = (Get-Item $buildFlavorErrFile).length -gt 0 | ||
} | ||
|
||
$status = "passed" | ||
if ($BuildFailed) { | ||
$status = "failed" | ||
} | ||
|
||
$buildFlavorJsonFile = Join-Path $FullOutputPath "${Env:FlavorName}.json" | ||
$buildFlavorJson = New-Object System.Object | ||
|
||
$buildFlavorJson | Add-Member -type NoteProperty -name status -value $status | ||
$buildFlavorJson | Add-Member -type NoteProperty -name arch -value $Env:BuildPlatform | ||
$buildFlavorJson | Add-Member -type NoteProperty -name flavor -value $Env:BuildConfiguration | ||
|
||
$buildFlavorJson | ConvertTo-Json | Write-Output | ||
$buildFlavorJson | ConvertTo-Json | Out-File $buildFlavorJsonFile -Encoding ascii |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,160 @@ | ||
#------------------------------------------------------------------------------------------------------- | ||
# Copyright (C) Microsoft. All rights reserved. | ||
# Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. | ||
#------------------------------------------------------------------------------------------------------- | ||
|
||
# Init Build Script | ||
# | ||
# Run this as the very first step in the build to configure the environment. | ||
# This is distinct from the Pre-Build script as there may be more non-script steps that need to be | ||
# taken before setting up and running the build. | ||
# For example, this script creates a cmd script which should be run to initialize environment variables. | ||
|
||
param ( | ||
[string]$envconfig = "ComputedEnvironment.cmd", | ||
|
||
[Parameter(Mandatory=$True)] | ||
[string]$oauth | ||
) | ||
|
||
$branch = $env:BUILD_SOURCEBRANCH | ||
if (-not $branch) { | ||
$branch = $(git rev-parse --symbolic-full-name HEAD) | ||
} | ||
|
||
$BranchName = $branch.split('/',3)[2] | ||
$BranchPath = $BranchName.replace('/','\') | ||
$CommitHash = ${env:BUILD_SOURCEVERSION} | ||
if (-not $CommitHash) { | ||
$CommitHash = $(git rev-parse HEAD) | ||
} | ||
|
||
$Username = $(git log $CommitHash -1 --pretty=%ae).split('@')[0] | ||
$CommitDateTime = [DateTime]$(git log $CommitHash -1 --pretty=%aD) | ||
$CommitTime = Get-Date $CommitDateTime -Format yyMMdd.HHmm | ||
|
||
# | ||
# (borrowed from pre_build.ps1) | ||
# Get PushID and PushDate from VSO | ||
# TODO (doilij) refactor this into a method in a util script. | ||
# | ||
|
||
# Get the git remote path and construct the rest API URI | ||
$remote = (iex "git remote -v")[0].split()[1].replace("_git", "_apis/git/repositories"); | ||
$remote = $remote.replace("mshttps", "https") | ||
|
||
# Get the pushId and push date time to use that for build number and build date time | ||
$uri = ("{0}/commits/{1}?api-version=1.0" -f $remote, $commitHash) | ||
$oauthToken = Get-Content $oauth | ||
$header = @{Authorization=("Basic {0}" -f $oauthToken) } | ||
$info = Invoke-RestMethod -Headers $header -Uri $uri -Method GET | ||
|
||
$BuildPushDate = [datetime]$info.push.date | ||
$PushDate = Get-Date $BuildPushDate -Format yyMMdd.HHmm | ||
$buildPushId = $info.push.pushId | ||
$buildPushIdPart1 = [int]([math]::Floor($buildPushId / 65536)) | ||
$buildPushIdPart2 = [int]($buildPushId % 65536) | ||
|
||
$PushID = "{0}.{1}" -f $buildPushIdPart1.ToString("00000"), $buildPushIdPart2.ToString("00000") | ||
$FullVersionString = "${Env:VERSION_MAJOR}.${Env:VERSION_MINOR}.${PushID}" | ||
|
||
# | ||
# (end code borrowed from pre_build.ps1) | ||
# | ||
|
||
# unless it is a build branch, subdivide the output directory by month | ||
if ($BranchPath.StartsWith("build")) { | ||
$YearAndMonth = "" | ||
} else { | ||
$YearAndMonth = Get-Date $BuildPushDate -Format yyMM | ||
} | ||
|
||
$YearAndMonthSeparator = "" | ||
if ($YearAndMonth) { | ||
$YearAndMonthSeparator = "\" | ||
} | ||
|
||
$BuildIdentifier = "${PushID}_${PushDate}_${Username}_${CommitHash}" | ||
$OutputPath = "${BranchPath}\${YearAndMonth}${YearAndMonthSeparator}${BuildIdentifier}" | ||
$FlavorName = "${Env:BuildPlatform}_${Env:BuildConfiguration}" | ||
|
||
# Create a sentinel file for each build flavor and for the overall build | ||
# to track whether the build is complete. | ||
# * build.incomplete # will be deleted when the release task completes | ||
# * ${arch}_${flavor}.incomplete # will be deleted when the build of this flavor completes | ||
|
||
$buildIncompleteFileContentsString = @" | ||
{0} in progress. | ||
The contents of this directory should not be relied on until the build completes. | ||
"@ | ||
|
||
$FullOutputPath = Join-Path ${env:DROP_ROOT} ${OutputPath} | ||
New-Item -ItemType Directory -Force -Path $FullOutputPath | ||
New-Item -ItemType Directory -Force -Path (Join-Path $Env:BUILD_BINARIESDIRECTORY "buildlogs") | ||
New-Item -ItemType Directory -Force -Path (Join-Path $Env:BUILD_BINARIESDIRECTORY "logs") | ||
|
||
$buildIncompleteFile = Join-Path $FullOutputPath "build.incomplete" | ||
$flavorBuildIncompleteFile = Join-Path $FullOutputPath "${FlavorName}.incomplete" | ||
|
||
if (-not (Test-Path $buildIncompleteFile)) { | ||
($buildIncompleteFileContentsString -f "Build") ` | ||
| Out-File $buildIncompleteFile -Encoding Ascii | ||
} | ||
if (-not (Test-Path $flavorBuildIncompleteFile)) { | ||
($buildIncompleteFileContentsString -f "Build of ${FlavorName}") ` | ||
| Out-File $flavorBuildIncompleteFile -Encoding Ascii | ||
} | ||
|
||
# Write the $envconfig script. | ||
|
||
@" | ||
set BranchName=${BranchName} | ||
set BranchPath=${BranchPath} | ||
set YearAndMonth=${YearAndMonth} | ||
set BuildIdentifier=${BuildIdentifier} | ||
set PushID=${PushID} | ||
set FullVersionString=${FullVersionString} | ||
set PushDate=${PushDate} | ||
set CommitTime=${CommitTime} | ||
set Username=${Username} | ||
set CommitHash=${CommitHash} | ||
set OutputPath=${OutputPath} | ||
set FlavorName=${FlavorName} | ||
set BuildIncompleteFile=${buildIncompleteFile} | ||
set FlavorBuildIncompleteFile=${flavorBuildIncompleteFile} | ||
"@ ` | ||
| Out-File $envconfig -Encoding Ascii | ||
|
||
# Use the MBv2 environment to construct a MBv1 VSO environment | ||
# for the sake of reusing the pre-build and post-build scripts as they are. | ||
|
||
@" | ||
set TF_BUILD_SOURCEGETVERSION=LG:${branch}:${CommitHash} | ||
set TF_BUILD_DROPLOCATION=${Env:BUILD_BINARIESDIRECTORY} | ||
set TF_BUILD_BUILDDEFINITIONNAME=${Env:BUILD_DEFINITIONNAME} | ||
set TF_BUILD_BUILDNUMBER=${Env:BUILD_BUILDNUMBER} | ||
set TF_BUILD_BUILDURI=${Env:BUILD_BUILDURI} | ||
"@ ` | ||
| Out-File $envconfig -Encoding Ascii -Append | ||
|
||
# Set VSO variables that can be consumed by other VSO tasks. | ||
# Uses command syntax documented here: | ||
# https://github.com/Microsoft/vso-agent-tasks/blob/master/docs/authoring/commands.md | ||
# Lines written to stdout that match this pattern are interpreted with this command syntax. | ||
|
||
Write-Output "Setting VSO variable VSO_OutputPath = ${OutputPath}" | ||
Write-Output "##vso[task.setvariable variable=VSO_OutputPath;]${OutputPath}" | ||
|
||
Write-Output "Setting VSO variable VSO_FullVersionString = ${FullVersionString}" | ||
Write-Output "##vso[task.setvariable variable=VSO_FullVersionString;]${FullVersionString}" | ||
|
||
# TODO (doilij): move this up and assign values | ||
|
||
# Inferable Environment (if not specified, inferred by pre_post_util.ps1): | ||
# $Env:TF_BUILD_SOURCESDIRECTORY (a.k.a. $srcpath) | ||
# $Env:TF_BUILD_BUILDDIRECTORY (a.k.a. $objpath) | ||
# $Env:TF_BUILD_BINARIESDIRECTORY (a.k.a. $binpath) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
#------------------------------------------------------------------------------------------------------- | ||
# Copyright (C) Microsoft. All rights reserved. | ||
# Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. | ||
#------------------------------------------------------------------------------------------------------- | ||
|
||
# PGO Build Workflow: | ||
# - pre_pgi.cmd | ||
# - build (with PGI instrumentation enabled) | ||
# - post_pgi.cmd | ||
# * pogo_training.ps1 | ||
# - pre_pgo.cmd | ||
# - build (using PGO profile) | ||
# - post_pgo.cmd | ||
|
||
param ( | ||
[string[]]$scenarios = @(), | ||
|
||
[string]$vcinstallroot = ${env:ProgramFiles(x86)}, | ||
[string]$vcbinpath = "Microsoft Visual Studio 14.0\VC\bin", | ||
[string]$dllname = "pgort140.dll", | ||
|
||
[Parameter(Mandatory=$True)] | ||
[string]$binary, | ||
|
||
[Parameter(Mandatory=$True)] | ||
[string]$arch, | ||
|
||
# force callers to specify this in case of future use | ||
[Parameter(Mandatory=$True)] | ||
[string]$flavor = "" | ||
) | ||
|
||
$binpath = Split-Path -Path $binary -Parent | ||
$pgoOutDll = Join-Path $binpath $dllname; | ||
if (-not (Test-Path ($pgoOutDll))) { | ||
if ($arch -eq "x64") { | ||
$dllname = Join-Path "amd64" $dllname | ||
} elseif ($arch -eq "arm") { | ||
$dllname = Join-Path "arm" $dllname | ||
} | ||
$pgoSrcDll = Join-Path $vcinstallroot (Join-Path $vcbinpath $dllname) | ||
Copy-Item $pgoSrcDll $pgoOutDll | ||
} | ||
|
||
for ($i = 0; $i -lt $scenarios.Length; $i = $i + 1) { | ||
$path = $scenarios[$i] | ||
|
||
$items = @() | ||
if (Test-Path $path -PathType Container) { | ||
# *.js files in directories | ||
$items = Get-ChildItem -Path $path -Filter "*.js" | % {join-path $path $_ } | ||
} | ||
else { | ||
$items = @($path) | ||
} | ||
|
||
for ($j = 0; $j -lt $items.Length; $j = $j + 1) { | ||
$testFile = $items[$j] | ||
Write-Host "$binary $testFile" | ||
iex "$binary $testFile" | ||
} | ||
} |
Oops, something went wrong.