2016-04-21 15:57:02 +03:00
// Copyright 2013--2014 Xamarin Inc. All rights reserved.
using System ;
using System.Collections.Generic ;
using System.Diagnostics ;
using System.Globalization ;
using System.Linq ;
using System.IO ;
using System.Runtime.InteropServices ;
using System.Text ;
using System.Threading ;
using System.Threading.Tasks ;
using Mono.Cecil ;
using Mono.Tuner ;
using Mono.Linker ;
using Xamarin.Linker ;
using Xamarin.Utils ;
2016-05-11 14:10:35 +03:00
using XamCore.Registrar ;
2016-04-21 15:57:02 +03:00
#if MONOTOUCH
using MonoTouch ;
using MonoTouch.Tuner ;
using PlatformResolver = MonoTouch . Tuner . MonoTouchResolver ;
using PlatformLinkContext = MonoTouch . Tuner . MonoTouchLinkContext ;
#else
using MonoMac.Tuner ;
using PlatformResolver = Xamarin . Bundler . MonoMacResolver ;
using PlatformLinkContext = MonoMac . Tuner . MonoMacLinkContext ;
#endif
namespace Xamarin.Bundler {
public partial class Target {
public Application App ;
2017-01-25 12:47:51 +03:00
public AssemblyCollection Assemblies = new AssemblyCollection ( ) ; // The root assembly is not in this list.
2016-04-21 15:57:02 +03:00
public PlatformLinkContext LinkContext ;
2016-05-11 14:10:35 +03:00
public LinkerOptions LinkerOptions ;
2016-04-21 15:57:02 +03:00
public PlatformResolver Resolver = new PlatformResolver ( ) ;
public HashSet < string > Frameworks = new HashSet < string > ( ) ;
public HashSet < string > WeakFrameworks = new HashSet < string > ( ) ;
2016-12-23 20:50:35 +03:00
internal StaticRegistrar StaticRegistrar { get ; set ; }
2016-05-11 14:10:35 +03:00
#if MONOMAC
public bool Is32Build { get { return ! Driver . Is64Bit ; } }
public bool Is64Build { get { return Driver . Is64Bit ; } }
#endif
2016-04-21 15:57:02 +03:00
public Target ( Application app )
{
this . App = app ;
}
public void ExtractNativeLinkInfo ( List < Exception > exceptions )
{
foreach ( var a in Assemblies ) {
try {
a . ExtractNativeLinkInfo ( ) ;
2017-01-31 16:55:54 +03:00
#if MTOUCH
2017-02-03 09:40:44 +03:00
if ( a . HasLinkWithAttributes & & App . EnableBitCode & & ! App . OnlyStaticLibraries ) {
2017-01-31 16:55:54 +03:00
ErrorHelper . Warning ( 110 , "Incremental builds have been disabled because this version of Xamarin.iOS does not support incremental builds in projects that include third-party binding libraries and that compiles to bitcode." ) ;
2017-02-03 09:40:44 +03:00
App . ClearAssemblyBuildTargets ( ) ; // the default is to compile to static libraries, so just revert to the default.
2017-01-31 16:55:54 +03:00
}
#endif
2016-04-21 15:57:02 +03:00
} catch ( Exception e ) {
exceptions . Add ( e ) ;
}
}
2017-02-24 21:34:47 +03:00
#if MTOUCH
2017-02-28 12:11:40 +03:00
if ( ! App . OnlyStaticLibraries & & Assemblies . Count ( ( v ) = > v . HasLinkWithAttributes ) > 1 ) {
2017-02-24 21:34:47 +03:00
ErrorHelper . Warning ( 127 , "Incremental builds have been disabled because this version of Xamarin.iOS does not support incremental builds in projects that include more than one third-party binding libraries." ) ;
2017-02-28 12:11:40 +03:00
App . ClearAssemblyBuildTargets ( ) ; // the default is to compile to static libraries, so just revert to the default.
2017-02-24 21:34:47 +03:00
}
#endif
2016-04-21 15:57:02 +03:00
}
[DllImport (Constants.libSystemLibrary, SetLastError = true, EntryPoint = "strerror")]
static extern IntPtr _strerror ( int errno ) ;
internal static string strerror ( int errno )
{
return Marshal . PtrToStringAuto ( _strerror ( errno ) ) ;
}
[DllImport (Constants.libSystemLibrary, SetLastError = true)]
static extern string realpath ( string path , IntPtr zero ) ;
public static string GetRealPath ( string path )
{
var rv = realpath ( path , IntPtr . Zero ) ;
if ( rv ! = null )
return rv ;
var errno = Marshal . GetLastWin32Error ( ) ;
ErrorHelper . Warning ( 54 , "Unable to canonicalize the path '{0}': {1} ({2})." , path , strerror ( errno ) , errno ) ;
return path ;
}
}
}