xamarin-macios/msbuild/Xamarin.iOS.Tasks.Core
Ankit Jain 05c8420f6c [msbuild] Fix Metal project builds with msbuild for XI/XM (#1130)
Building `MetalKitEssentials.Mac` project from `mac-ios-samples` repo with
msbuild fails with:

```
"/Users/ankit/dev/mac-ios-samples/MetalKitEssentials/MetalKitEssentials.Mac/MetalKitEssentials.Mac.csproj" (default target) (1) ->
(_SmeltMetal target) ->
  /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Mac/Xamarin.Mac.Common.targets : error : Tool exited with code: 1. Output: warning: unable to open file obj/Debug/metal/../../../../../../../Users/ankit/dev/mac-ios-samples/MetalKitEssentials/MetalKitEssentials.Mac/Resources/Shaders.dia for serializing diagnostics (Error opening output file 'obj/Debug/metal/../../../../../../../Users/ankit/dev/mac-ios-samples/MetalKitEssentials/MetalKitEssentials.Mac/Resources/Shaders.dia': No such file or directory) [-Wserialized-diagnostics] [/Users/ankit/dev/mac-ios-samples/MetalKitEssentials/MetalKitEssentials.Mac/MetalKitEssentials.Mac.csproj]
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Mac/Xamarin.Mac.Common.targets : error : warning: '-std=osx-metal1.0' is equivalent to '-std=osx-metal1.1' [/Users/ankit/dev/mac-ios-samples/MetalKitEssentials/MetalKitEssentials.Mac/MetalKitEssentials.Mac.csproj]
/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Mac/Xamarin.Mac.Common.targets : error : error: unable to open output file 'obj/Debug/metal/../../../../../../../Users/ankit/dev/mac-ios-samples/MetalKitEssentials/MetalKitEssentials.Mac/Resources/Shaders.air': 'Error opening output file 'obj/Debug/metal/../../../../../../../Users/ankit/dev/mac-ios-samples/MetalKitEssentials/MetalKitEssentials.Mac/Resources/Shaders.air': No such file or directory' [/Users/ankit/dev/mac-ios-samples/MetalKitEssentials/MetalKitEssentials.Mac/MetalKitEssentials.Mac.csproj]
```

The path
`obj/Debug/metal/../../../../../../../Users/ankit/dev/mac-ios-samples/MetalKitEssentials/MetalKitEssentials.Mac/Resources/Shaders.dia`
should be just `Resources/Shaders.dia`. This is from the `@(Metal)` item
passed to the `Metal` task as:

	<Metal SourceFile="%(Metal.Identity)" ..

- This item is defined in the user's project file.
- And the task invocation is in
	`/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Mac/Xamarin.Mac.Common.targets`.

- The `Metal` task (indirectly[2]) uses the `DefiningProjectFullPath`
  metadata from that `SoureFile`, and expects to get the path to the
  file that defined that `@(Metal)` item. But since we are using
  `%(Metal.Identity)`, to use task batching, msbuild converts the
  `%(Metal.Identity)` to a string and then "boxes" that as an ITaskItem,
  and thus newly created item passed to `SourceFile` will have
  `DefiningProjectFullPath` set to the `Xamarin.Mac.Common.targets`!

- And trying to create a relative path using that gives us
  `obj/Debug/metal/../../../../../../../Users/ankit/dev/mac-ios-samples/MetalKitEssentials/MetalKitEssentials.Mac/Resources/Shaders.dia`

- The fix is to use `'%(Metal.Identity)` in the `Condition` to cause
  task batching, but use `SourceFile="@(Metal)"` so that we get the
  original item!

- Fixed for iOS targets too

---
1. The actual code is in `BundleResources.GetVirtualProjectPath`.
   Other tasks using this were looked at and they are all using
   `ITaskItem[]` and so passing `@(Items)` and thus get the original
   items.

2. And the build works in xbuild, because it has `DefiningProjectFullPath`
   for the "boxed" item set to `""`. And `GetVirtualProjectPath` works
   around that.
2016-11-07 13:37:59 -05:00
..
Properties Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
Tasks [msbuild] Validate that WatchOS2 App Extensions do not have watch-companion set (#1089) 2016-11-02 10:52:40 +01:00
IPhoneSdks.cs Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
NoCode.cs Enables CoreCompile target for WatchOS App projects (#826) 2016-09-16 14:16:32 -04:00
Xamarin.MonoTouch.CSharp.targets [msbuild] Remove support for XI/Classic. (#976) 2016-10-13 10:47:46 +02:00
Xamarin.MonoTouch.FSharp.targets [msbuild] Remove support for XI/Classic. (#976) 2016-10-13 10:47:46 +02:00
Xamarin.TVOS-FrameworkList.xml.in Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
Xamarin.TVOS.AppExtension.CSharp.targets [msbuild] Add tvOS AppExtension targets 2016-04-26 10:19:54 -04:00
Xamarin.TVOS.AppExtension.Common.props [msbuild] Add tvOS AppExtension targets 2016-04-26 10:19:54 -04:00
Xamarin.TVOS.AppExtension.Common.targets [msbuild] Add tvOS AppExtension targets 2016-04-26 10:19:54 -04:00
Xamarin.TVOS.AppExtension.FSharp.targets Fix fsharp targets to detect 'F#' language. Fixes #43356 (#626) 2016-08-18 14:11:02 -04:00
Xamarin.TVOS.CSharp.targets Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
Xamarin.TVOS.Common.props Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
Xamarin.TVOS.Common.targets Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
Xamarin.TVOS.FSharp.targets Fix fsharp targets to detect 'F#' language. Fixes #43356 (#626) 2016-08-18 14:11:02 -04:00
Xamarin.TVOS.ObjCBinding.CSharp.targets Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
Xamarin.WatchOS-FrameworkList.xml.in Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
Xamarin.WatchOS.App.CSharp.targets Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
Xamarin.WatchOS.App.Common.props Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
Xamarin.WatchOS.App.Common.targets Enables CoreCompile target for WatchOS App projects (#826) 2016-09-16 14:16:32 -04:00
Xamarin.WatchOS.App.FSharp.targets Fix fsharp targets to detect 'F#' language. Fixes #43356 (#626) 2016-08-18 14:11:02 -04:00
Xamarin.WatchOS.AppExtension.CSharp.targets Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
Xamarin.WatchOS.AppExtension.Common.props [msbuild] Fixed IsWatchExtension state property (#913) 2016-10-03 13:44:31 -04:00
Xamarin.WatchOS.AppExtension.Common.targets [msbuild] Fixed IsWatchExtension state property (#913) 2016-10-03 13:44:31 -04:00
Xamarin.WatchOS.AppExtension.FSharp.targets Fix fsharp targets to detect 'F#' language. Fixes #43356 (#626) 2016-08-18 14:11:02 -04:00
Xamarin.WatchOS.CSharp.targets Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
Xamarin.WatchOS.Common.props Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
Xamarin.WatchOS.Common.targets Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
Xamarin.WatchOS.FSharp.targets Fix fsharp targets to detect 'F#' language. Fixes #43356 (#626) 2016-08-18 14:11:02 -04:00
Xamarin.WatchOS.ObjCBinding.CSharp.targets Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
Xamarin.iOS-FrameworkList.xml.in Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
Xamarin.iOS.AppExtension.CSharp.targets [msbuild] Set $(CscDebugFileExt) also, whenever overriding $(CscToolExe) (#896) 2016-09-28 14:37:44 -04:00
Xamarin.iOS.AppExtension.Common.props Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
Xamarin.iOS.AppExtension.Common.targets [msbuild] Fixed IsWatchExtension state property (#913) 2016-10-03 13:44:31 -04:00
Xamarin.iOS.AppExtension.FSharp.targets Fix fsharp targets to detect 'F#' language. Fixes #43356 (#626) 2016-08-18 14:11:02 -04:00
Xamarin.iOS.CSharp.targets [msbuild] Set $(CscDebugFileExt) also, whenever overriding $(CscToolExe) (#896) 2016-09-28 14:37:44 -04:00
Xamarin.iOS.Common.props [msbuild] Fixed IsWatchExtension state property (#913) 2016-10-03 13:44:31 -04:00
Xamarin.iOS.Common.targets [msbuild] Fix Metal project builds with msbuild for XI/XM (#1130) 2016-11-07 13:37:59 -05:00
Xamarin.iOS.FSharp.targets Fix fsharp targets to detect 'F#' language. Fixes #43356 (#626) 2016-08-18 14:11:02 -04:00
Xamarin.iOS.ObjCBinding.CSharp.props [msbuild] Remove support for XI/Classic. (#976) 2016-10-13 10:47:46 +02:00
Xamarin.iOS.ObjCBinding.CSharp.targets [msbuild] Rename and unify to IsMacEnabled (#193) 2016-06-16 13:14:43 -04:00
Xamarin.iOS.ObjCBinding.Common.props [msbuild] Rename and unify to IsMacEnabled (#193) 2016-06-16 13:14:43 -04:00
Xamarin.iOS.ObjCBinding.Common.targets [msbuild] Ensure that `BuildOnlySettings` is the first target to run for a `Build` (#841) 2016-09-15 21:38:55 -04:00
Xamarin.iOS.Tasks.Core.csproj Enables CoreCompile target for WatchOS App projects (#826) 2016-09-16 14:16:32 -04:00
Xamarin.iOS.WatchApp.CSharp.targets [msbuild] Set $(CscDebugFileExt) also, whenever overriding $(CscToolExe) (#896) 2016-09-28 14:37:44 -04:00
Xamarin.iOS.WatchApp.Common.props Build MSBuild targets & assemblies. 2016-04-24 14:48:44 -04:00
Xamarin.iOS.WatchApp.Common.targets [msbuild] Rename and unify to IsMacEnabled (#193) 2016-06-16 13:14:43 -04:00