Add msbuild feature to use z-applocal, and avoid trying to applocal deploy for non executable project types. (#35012)

* Hook up z-applocal, work started by @vicroms.

* Fix spelling of utf8

* Use standard warning formats.

* Don't get in the way of stdout.

* Don't try to Applocal deploy if the linker does not run.

* Make VcpkgUseBuiltInApplocalDeps docs a bit nicer.

* Change to (experimental) prefix.

* Add an X.
This commit is contained in:
Billy O'Neal 2023-11-10 12:00:25 -08:00 committed by GitHub
parent 1e8122f2f8
commit 11610eabb9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 45 additions and 10 deletions

View File

@ -41,6 +41,20 @@
</BoolProperty.DataSource>
</BoolProperty>
<BoolProperty Name="VcpkgApplocalDeps" DisplayName="App-locally deploy DLLs" Category="General" Default="true"
Description="Copies DLL dependencies from the vcpkg installed tree to the project output directory.">
<BoolProperty.DataSource>
<DataSource Persistence="ProjectFile" Label="Vcpkg" HasConfigurationCondition="false" />
</BoolProperty.DataSource>
</BoolProperty>
<BoolProperty Name="VcpkgXUseBuiltInApplocalDeps" DisplayName="Use built-in app-local deployment" Category="General" Default="false"
Description="(experimental) When copying DLL dependencies, use built-in-to-vcpkg implementation rather than PowerShell script.">
<BoolProperty.DataSource>
<DataSource Persistence="ProjectFile" Label="Vcpkg" HasConfigurationCondition="false" />
</BoolProperty.DataSource>
</BoolProperty>
<StringProperty Name="VcpkgRoot" DisplayName="Vcpkg Root" Category="General" Subtype="folder" Visible="false"
Description="Root path where Vcpkg is located. Be careful with changing this one. It is, for example, unable to update this property page from the new location without restarting visual studio.">
<StringProperty.DataSource>

View File

@ -34,6 +34,7 @@
Tried to add /lib as a parameter to the linker call but was unable to find a way to pass it as the first parameter. -->
<VcpkgAutoLink Condition="'$(UseLldLink)' == 'true' OR '$(PlatformToolset.ToLower())' == 'clangcl'">false</VcpkgAutoLink>
<VcpkgApplocalDeps Condition="'$(VcpkgApplocalDeps)' == ''">true</VcpkgApplocalDeps>
<VcpkgXUseBuiltInApplocalDeps Condition="'$(VcpkgXUseBuiltInApplocalDeps)' == ''">false</VcpkgXUseBuiltInApplocalDeps>
<!-- Classic Mode: The following line is edited by the mint standalone bundle script to be false for standlone copies -->
<VcpkgEnableClassic Condition="'$(VcpkgEnableClassic)' == ''">true</VcpkgEnableClassic>

View File

@ -182,8 +182,12 @@
Importance="High" />
<Exec Command="%22$(_ZVcpkgExecutable)%22 install $(_ZVcpkgHostTripletParameter) --x-wait-for-lock --triplet %22$(VcpkgTriplet)%22 --vcpkg-root %22$(_ZVcpkgRoot)\%22 %22--x-manifest-root=$(_ZVcpkgManifestRoot)\%22 %22--x-install-root=$(_ZVcpkgInstalledDir)\%22 $(VcpkgAdditionalInstallOptions)"
StandardOutputImportance="High"
IgnoreStandardErrorWarningFormat="true"
CustomWarningRegularExpression="([Ee]rror|[Ww]arning):" />
StandardErrorImportance="High"
UseUtf8Encoding="Always"
StdOutEncoding="utf-8"
StdErrEncoding="utf-8"
UseCommandProcessor="false"
/>
<WriteLinesToFile File="$(_ZVcpkgTLogFileLocation)"
Lines="@(_ZVcpkgInstallManifestDependenciesInputs -> '^%(Identity)')"
Encoding="Unicode"
@ -196,16 +200,33 @@
</Target>
<Target Name="AppLocalFromInstalled" AfterTargets="CopyFilesToOutputDirectory" BeforeTargets="CopyLocalFilesOutputGroup;RegisterOutput"
Condition="'$(_ZVcpkgClassicOrManifest)' == 'true' and '$(VcpkgApplocalDeps)' == 'true' and '$(LinkSkippedExecution)' != 'true'">
Condition="'$(_ZVcpkgClassicOrManifest)' == 'true' and '$(VcpkgApplocalDeps)' == 'true' and '$(LinkSkippedExecution)' != 'true' and '@(Link)' != ''">
<Message Text="[vcpkg] Starting VcpkgApplocalDeps" Importance="low" />
<PropertyGroup>
<_ZVcpkgAppLocalPowerShellCommonArguments>-ExecutionPolicy Bypass -noprofile -File "$(MSBuildThisFileDirectory)applocal.ps1" "$(TargetPath)" "$(_ZVcpkgCurrentInstalledDir)$(_ZVcpkgConfigSubdir)bin" "$(TLogLocation)$(ProjectName).write.1u.tlog" "$(IntDir)vcpkg.applocal.log"</_ZVcpkgAppLocalPowerShellCommonArguments>
<_ZVcpkgApplocalInstalledBinDir>$(_ZVcpkgCurrentInstalledDir)$(_ZVcpkgConfigSubdir)bin</_ZVcpkgApplocalInstalledBinDir>
<_ZVcpkgApplocalTLogPath>$(TLogLocation)$(ProjectName).write.1u.tlog</_ZVcpkgApplocalTLogPath>
<_ZVcpkgApplocalCopiedFilesLogPath>$(IntDir)vcpkg.applocal.log</_ZVcpkgApplocalCopiedFilesLogPath>
<_ZVcpkgApplocalBuiltinArguments>--target-binary="$(TargetPath)" --installed-bin-dir="$(_ZVcpkgApplocalInstalledBinDir)" --tlog-file="$(_ZVcpkgApplocalTLogPath)" --copied-files-log="$(_ZVcpkgApplocalCopiedFilesLogPath)"</_ZVcpkgApplocalBuiltinArguments>
<_ZVcpkgAppLocalPowerShellCommonArguments>-ExecutionPolicy Bypass -noprofile -File "$(MSBuildThisFileDirectory)applocal.ps1" "$(TargetPath)" "$(_ZVcpkgApplocalInstalledBinDir)" "$(_ZVcpkgApplocalTLogPath)" "$(_ZVcpkgApplocalCopiedFilesLogPath)"</_ZVcpkgAppLocalPowerShellCommonArguments>
</PropertyGroup>
<Exec
Condition="'$(VcpkgXUseBuiltInApplocalDeps)' == 'true'"
Command="%22$(_ZVcpkgExecutable)%22 z-applocal $(_ZVcpkgApplocalBuiltinArguments)"
UseUtf8Encoding="Always"
StdOutEncoding="utf-8"
StdErrEncoding="utf-8"
UseCommandProcessor="false"
IgnoreExitCode="true">
<Output TaskParameter="ExitCode"
PropertyName="_ZVcpkgAppLocalExitCode" />
</Exec>
<Warning Text="[vcpkg] Failed to gather app local DLL dependencies, program may not run. Set VcpkgApplocalDeps to false in your project file to suppress this warning. Builtin arguments: $(_ZVcpkgApplocalBuiltinArguments)"
Condition="$(_ZVcpkgAppLocalExitCode) != 0 and '$(VcpkgXUseBuiltInApplocalDeps)' == 'true'"/>
<!-- Search %PATH% for pwsh.exe if it is available. -->
<Exec
Condition="'$(VcpkgXUseBuiltInApplocalDeps)' != 'true'"
Command="pwsh.exe $(_ZVcpkgAppLocalPowerShellCommonArguments)"
StandardOutputImportance="Normal"
StandardErrorImportance="Normal"
IgnoreExitCode="true"
UseCommandProcessor="false">
<Output TaskParameter="ExitCode"
@ -216,17 +237,16 @@
Condition="$(_ZVcpkgAppLocalExitCode) == 9009" />
<Exec
Command="%22$(SystemRoot)\System32\WindowsPowerShell\v1.0\powershell.exe%22 $(_ZVcpkgAppLocalPowerShellCommonArguments)"
StandardOutputImportance="Normal"
StandardErrorImportance="Normal"
IgnoreExitCode="true"
UseCommandProcessor="false"
Condition="$(_ZVcpkgAppLocalExitCode) == 9009">
Condition="$(_ZVcpkgAppLocalExitCode) == 9009 and '$(VcpkgXUseBuiltInApplocalDeps)' != 'true'">
<Output TaskParameter="ExitCode"
PropertyName="_ZVcpkgAppLocalExitCode" />
</Exec>
<!-- We're ignoring the above exit codes, so translate into a warning if both failed. -->
<Warning Text="[vcpkg] Failed to gather app local DLL dependencies, program may not run. Set VcpkgApplocalDeps to false in your project file to suppress this warning. PowerShell arguments: $(_ZVcpkgAppLocalPowerShellCommonArguments)"
Condition="$(_ZVcpkgAppLocalExitCode) != 0"/>
Condition="$(_ZVcpkgAppLocalExitCode) != 0 and '$(VcpkgXUseBuiltInApplocalDeps)' != 'true'"/>
<ReadLinesFromFile File="$(IntDir)vcpkg.applocal.log"
Condition="$(_ZVcpkgAppLocalExitCode) == 0">
<Output TaskParameter="Lines" ItemName="VcpkgAppLocalDLLs" />