@@ -324,7 +324,7 @@ Task ("component-setup").Does (() =>
324324} ) ;
325325
326326
327- Task ( "nuget-setup" ) . Does ( ( ) => {
327+ Task ( "nuget-setup" ) . IsDependentOn ( "buildtasks" ) . Does ( ( ) => {
328328 var templateText = FileReadText ( "./template.targets" ) ;
329329
330330 if ( FileExists ( "./generated.targets" ) )
@@ -365,9 +365,31 @@ Task ("nuget-setup").Does (() => {
365365 foreach ( var kvp in items )
366366 targetsText = targetsText . Replace ( kvp . Key , kvp . Value ) ;
367367
368- var targetsFile = string . Format ( "{0}/nuget/{1}.targets" , aar . Path , aar . NugetId ) ;
368+ var targetsFile = new FilePath ( string . Format ( "{0}/nuget/{1}.targets" , aar . Path , aar . NugetId ) ) ;
369369 FileWriteText ( targetsFile , targetsText ) ;
370370
371+ // Check for an existing .targets file in this nuget package
372+ // we need to merge the generated one with it if it exists
373+ // nuget only allows one automatic .targets file in the build/ folder
374+ // of the nuget package, which must be named {nuget-package-id}.targets
375+ // so we need to merge them all into one
376+ var mergeFile = new FilePath ( aar . Path + "/nuget/merge.targets" ) ;
377+
378+ if ( FileExists ( mergeFile ) ) {
379+ Information ( "merge.targets found, merging into generated file..." ) ;
380+
381+ // Load the doc to append to, and the doc to append
382+ var xOrig = System . Xml . Linq . XDocument . Load ( MakeAbsolute ( targetsFile ) . FullPath ) ;
383+ System . Xml . Linq . XNamespace nsOrig = xOrig . Root . Name . Namespace ;
384+ var xMerge = System . Xml . Linq . XDocument . Load ( MakeAbsolute ( mergeFile ) . FullPath ) ;
385+ System . Xml . Linq . XNamespace nsMerge = xMerge . Root . Name . Namespace ;
386+ // Add all the elements under <Project> into the existing file's <Project> node
387+ foreach ( var xItemToAdd in xMerge . Element ( nsMerge + "Project" ) . Elements ( ) )
388+ xOrig . Element ( nsOrig + "Project" ) . Add ( xItemToAdd ) ;
389+
390+ xOrig . Save ( MakeAbsolute ( targetsFile ) . FullPath ) ;
391+ }
392+
371393 // Merge each generated targets file into one main one
372394 // this makes one file to import into our actual binding projects
373395 // which is much easier/less maintenance
@@ -377,7 +399,7 @@ Task ("nuget-setup").Does (() => {
377399 // Load the doc to append to, and the doc to append
378400 var xFileRoot = System . Xml . Linq . XDocument . Load ( "./generated.targets" ) ;
379401 System . Xml . Linq . XNamespace nsRoot = xFileRoot . Root . Name . Namespace ;
380- var xFileChild = System . Xml . Linq . XDocument . Load ( targetsFile ) ;
402+ var xFileChild = System . Xml . Linq . XDocument . Load ( MakeAbsolute ( targetsFile ) . FullPath ) ;
381403 System . Xml . Linq . XNamespace nsChild = xFileRoot . Root . Name . Namespace ;
382404
383405 // Add all the elements under <Project> into the existing file's <Project> node
@@ -480,7 +502,7 @@ Task ("component-docs").Does (() =>
480502 }
481503} ) ;
482504
483- Task ( "libs" ) . IsDependentOn ( "genapi" ) . IsDependentOn ( "nuget-setup " ) ;
505+ Task ( "libs" ) . IsDependentOn ( "nuget-setup" ) . IsDependentOn ( " genapi") . IsDependentOn ( "libs-base " ) ;
484506
485507Task ( "genapi" ) . IsDependentOn ( "libs-base" ) . IsDependentOn ( "externals" ) . Does ( ( ) => {
486508
@@ -522,6 +544,15 @@ Task ("genapi").IsDependentOn ("libs-base").IsDependentOn ("externals").Does (()
522544 CopyFile ( "./v4/source/bin/Release/Xamarin.Android.Support.v4.dll" , "./output/Xamarin.Android.Support.v4.dll" ) ;
523545} ) ;
524546
547+ Task ( "buildtasks" ) . Does ( ( ) =>
548+ {
549+ NuGetRestore ( "./vector-drawable/buildtask/Vector-Drawable-BuildTasks.csproj" ) ;
550+
551+ DotNetBuild ( "./vector-drawable/buildtask/Vector-Drawable-BuildTasks.csproj" , c => c . Configuration = "Release" ) ;
552+
553+ CopyFile ( "./vector-drawable/buildtask/bin/Release/Xamarin.Android.Support.Tasks.VectorDrawable.targets" , "./vector-drawable/nuget/merge.targets" ) ;
554+ } ) ;
555+
525556SetupXamarinBuildTasks ( buildSpec , Tasks , Task ) ;
526557
527558RunTarget ( TARGET ) ;
0 commit comments