diff --git a/Sharpmake.Generators/Apple/XCodeProj.cs b/Sharpmake.Generators/Apple/XCodeProj.cs index c8125b475..923fa09a7 100644 --- a/Sharpmake.Generators/Apple/XCodeProj.cs +++ b/Sharpmake.Generators/Apple/XCodeProj.cs @@ -1501,17 +1501,25 @@ private Options.ExplicitOptions GenerateOptions(XCodeGenerationContext context) // linker(ld) of Xcode: only accept libfilename without prefix and suffix. linkerOptions.AddRange(libFiles.Select(library => { + bool hasLibraryExtension = Path.HasExtension(library) && + ((Path.GetExtension(library).EndsWith(".a", StringComparison.OrdinalIgnoreCase) || + Path.GetExtension(library).EndsWith(".dylib", StringComparison.OrdinalIgnoreCase) + )); + // deal with full library path: add libdir and libname if (Path.IsPathFullyQualified(library)) { + // Special case with full path: pass them as is. + // This is to leave the possibility to force the extension, + // preventing conflict if the folder contains both .a and .dylib version. + if (hasLibraryExtension) + return library; + conf.LibraryPaths.Add(Path.GetDirectoryName(library)); library = Path.GetFileName(library); } - if (Path.HasExtension(library) && - ((Path.GetExtension(library).EndsWith(".a", StringComparison.OrdinalIgnoreCase) || - Path.GetExtension(library).EndsWith(".dylib", StringComparison.OrdinalIgnoreCase) - ))) + if (hasLibraryExtension) { library = Path.GetFileNameWithoutExtension(library); if (library.StartsWith("lib")) diff --git a/Sharpmake.Platforms/Sharpmake.CommonPlatforms/Apple/BaseApplePlatform.cs b/Sharpmake.Platforms/Sharpmake.CommonPlatforms/Apple/BaseApplePlatform.cs index cb213ed39..497777b15 100644 --- a/Sharpmake.Platforms/Sharpmake.CommonPlatforms/Apple/BaseApplePlatform.cs +++ b/Sharpmake.Platforms/Sharpmake.CommonPlatforms/Apple/BaseApplePlatform.cs @@ -360,21 +360,10 @@ public void SetupDynamicLibraryPaths(Project.Configuration configuration, Depend dependency.TargetFileFullNameWithExtension, dependency.TargetFileOrderNumber); } - else if (dependency.Project.SharpmakeProjectType == Project.ProjectTypeAttribute.Export && configuration.IsFastBuild) - { - if (dependencySetting.HasFlag(DependencySetting.LibraryFiles)) - configuration.AddDependencyBuiltTargetLibraryFile(Path.Combine(dependency.TargetLibraryPath, dependency.TargetFileFullNameWithExtension), dependency.TargetFileOrderNumber); - } else { - if (dependencySetting.HasFlag(DependencySetting.LibraryPaths)) - configuration.DependenciesOtherLibraryPaths.Add(dependency.TargetPath, dependency.TargetLibraryPathOrderNumber); if (dependencySetting.HasFlag(DependencySetting.LibraryFiles)) - configuration.DependenciesOtherLibraryFiles.Add( - dependency.PreferRelativePaths ? - dependency.TargetFileName : - dependency.TargetFileFullNameWithExtension, - dependency.TargetFileOrderNumber); + configuration.AddDependencyBuiltTargetLibraryFile(Path.Combine(dependency.TargetLibraryPath, dependency.TargetFileFullNameWithExtension), dependency.TargetFileOrderNumber); } } @@ -392,21 +381,10 @@ public void SetupStaticLibraryPaths(Project.Configuration configuration, Depende dependency.TargetFileFullNameWithExtension, dependency.TargetFileOrderNumber); } - else if (dependency.Project.SharpmakeProjectType == Project.ProjectTypeAttribute.Export && configuration.IsFastBuild) - { - if (dependencySetting.HasFlag(DependencySetting.LibraryFiles)) - configuration.DependenciesOtherLibraryFiles.Add(Path.Combine(dependency.TargetLibraryPath, dependency.TargetFileFullNameWithExtension), dependency.TargetFileOrderNumber); - } else { - if (dependencySetting.HasFlag(DependencySetting.LibraryPaths)) - configuration.DependenciesOtherLibraryPaths.Add(dependency.TargetLibraryPath, dependency.TargetLibraryPathOrderNumber); if (dependencySetting.HasFlag(DependencySetting.LibraryFiles)) - configuration.DependenciesOtherLibraryFiles.Add( - dependency.PreferRelativePaths ? - dependency.TargetFileName : - dependency.TargetFileFullNameWithExtension, - dependency.TargetFileOrderNumber); + configuration.DependenciesOtherLibraryFiles.Add(Path.Combine(dependency.TargetLibraryPath, dependency.TargetFileFullNameWithExtension), dependency.TargetFileOrderNumber); } }