From 86f7918d4da888765020df56547c26d51b44ff53 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 2 Apr 2019 13:26:31 +0200 Subject: [PATCH 01/16] Added failing tests for #2350. --- .../StackPanelTests.cs | 160 +++++++++++++++++- 1 file changed, 159 insertions(+), 1 deletion(-) diff --git a/tests/Avalonia.Controls.UnitTests/StackPanelTests.cs b/tests/Avalonia.Controls.UnitTests/StackPanelTests.cs index ba2716775a..722ad1c8ee 100644 --- a/tests/Avalonia.Controls.UnitTests/StackPanelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/StackPanelTests.cs @@ -1,7 +1,8 @@ // Copyright (c) The Avalonia Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. -using Avalonia.Controls; +using System.Linq; +using Avalonia.Layout; using Xunit; namespace Avalonia.Controls.UnitTests @@ -147,6 +148,151 @@ namespace Avalonia.Controls.UnitTests Assert.Equal(new Rect(50, 0, 50, 120), target.Children[2].Bounds); } + [Fact] + public void Arranges_Vertical_Children_With_Correct_Bounds() + { + var target = new StackPanel + { + Orientation = Orientation.Vertical, + Children = + { + new TestControl + { + HorizontalAlignment = HorizontalAlignment.Left, + MeasureSize = new Size(50, 10), + }, + new TestControl + { + HorizontalAlignment = HorizontalAlignment.Left, + MeasureSize = new Size(150, 10), + }, + new TestControl + { + HorizontalAlignment = HorizontalAlignment.Center, + MeasureSize = new Size(50, 10), + }, + new TestControl + { + HorizontalAlignment = HorizontalAlignment.Center, + MeasureSize = new Size(150, 10), + }, + new TestControl + { + HorizontalAlignment = HorizontalAlignment.Right, + MeasureSize = new Size(50, 10), + }, + new TestControl + { + HorizontalAlignment = HorizontalAlignment.Right, + MeasureSize = new Size(150, 10), + }, + new TestControl + { + HorizontalAlignment = HorizontalAlignment.Stretch, + MeasureSize = new Size(50, 10), + }, + new TestControl + { + HorizontalAlignment = HorizontalAlignment.Stretch, + MeasureSize = new Size(150, 10), + }, + } + }; + + target.Measure(new Size(100, 150)); + Assert.Equal(new Size(100, 80), target.DesiredSize); + + target.Arrange(new Rect(target.DesiredSize)); + + var bounds = target.Children.Select(x => x.Bounds).ToArray(); + + Assert.Equal( + new[] + { + new Rect(0, 0, 50, 10), + new Rect(0, 10, 150, 10), + new Rect(25, 20, 50, 10), + new Rect(-25, 30, 150, 10), + new Rect(50, 40, 50, 10), + new Rect(-50, 50, 150, 10), + new Rect(0, 60, 100, 10), + new Rect(0, 70, 150, 10), + + }, bounds); + } + + [Fact] + public void Arranges_Horizontal_Children_With_Correct_Bounds() + { + var target = new StackPanel + { + Orientation = Orientation.Horizontal, + Children = + { + new TestControl + { + VerticalAlignment = VerticalAlignment.Top, + MeasureSize = new Size(10, 50), + }, + new TestControl + { + VerticalAlignment = VerticalAlignment.Top, + MeasureSize = new Size(10, 150), + }, + new TestControl + { + VerticalAlignment = VerticalAlignment.Center, + MeasureSize = new Size(10, 50), + }, + new TestControl + { + VerticalAlignment = VerticalAlignment.Center, + MeasureSize = new Size(10, 150), + }, + new TestControl + { + VerticalAlignment = VerticalAlignment.Bottom, + MeasureSize = new Size(10, 50), + }, + new TestControl + { + VerticalAlignment = VerticalAlignment.Bottom, + MeasureSize = new Size(10, 150), + }, + new TestControl + { + VerticalAlignment = VerticalAlignment.Stretch, + MeasureSize = new Size(10, 50), + }, + new TestControl + { + VerticalAlignment = VerticalAlignment.Stretch, + MeasureSize = new Size(10, 150), + }, + } + }; + + target.Measure(new Size(150, 100)); + Assert.Equal(new Size(80, 100), target.DesiredSize); + + target.Arrange(new Rect(target.DesiredSize)); + + var bounds = target.Children.Select(x => x.Bounds).ToArray(); + + Assert.Equal( + new[] + { + new Rect(0, 0, 10, 50), + new Rect(10, 0, 10, 150), + new Rect(20, 25, 10, 50), + new Rect(30, -25, 10, 150), + new Rect(40, 50, 10, 50), + new Rect(50, -50, 10, 150), + new Rect(60, 0, 10, 100), + new Rect(70, 0, 10, 150), + }, bounds); + } + [Theory] [InlineData(Orientation.Horizontal)] [InlineData(Orientation.Vertical)] @@ -185,5 +331,17 @@ namespace Avalonia.Controls.UnitTests Assert.Equal(sizeWithTwoChildren, sizeWithThreeChildren); } + + private class TestControl : Control + { + public Size MeasureConstraint { get; private set; } + public Size MeasureSize { get; set; } + + protected override Size MeasureOverride(Size availableSize) + { + MeasureConstraint = availableSize; + return MeasureSize; + } + } } } From 7ac3556983050b29c8543321d51d272eecefb9b5 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 2 Apr 2019 14:24:06 +0200 Subject: [PATCH 02/16] Fixed StackPanel arrange pass. Now follow's WPF's behavior better. In order to get the desired outcome, the `.Constrain(availableSize)` call in `Layoutable.Measure` had to be removed. Controls that relied on that (`Image` and `ViewBox`) have to now call `Constrain` themselves. Fixes #2350 --- src/Avalonia.Controls/Image.cs | 11 ++--- src/Avalonia.Controls/StackPanel.cs | 54 ++++++--------------- src/Avalonia.Controls/Viewbox.cs | 2 +- src/Avalonia.Layout/LayoutExtensions.cs | 62 +++++++++++++++++++++++++ src/Avalonia.Layout/Layoutable.cs | 2 +- 5 files changed, 84 insertions(+), 47 deletions(-) create mode 100644 src/Avalonia.Layout/LayoutExtensions.cs diff --git a/src/Avalonia.Controls/Image.cs b/src/Avalonia.Controls/Image.cs index c696fe7975..fa6f5787be 100644 --- a/src/Avalonia.Controls/Image.cs +++ b/src/Avalonia.Controls/Image.cs @@ -81,23 +81,22 @@ namespace Avalonia.Controls protected override Size MeasureOverride(Size availableSize) { var source = Source; + var result = new Size(); if (source != null) { Size sourceSize = new Size(source.PixelSize.Width, source.PixelSize.Height); if (double.IsInfinity(availableSize.Width) || double.IsInfinity(availableSize.Height)) { - return sourceSize; + result = sourceSize; } else { - return Stretch.CalculateSize(availableSize, sourceSize); + result = Stretch.CalculateSize(availableSize, sourceSize); } } - else - { - return new Size(); - } + + return result.Constrain(availableSize); } /// diff --git a/src/Avalonia.Controls/StackPanel.cs b/src/Avalonia.Controls/StackPanel.cs index df0c113cc0..d89df8556b 100644 --- a/src/Avalonia.Controls/StackPanel.cs +++ b/src/Avalonia.Controls/StackPanel.cs @@ -4,6 +4,7 @@ using System; using System.Linq; using Avalonia.Input; +using Avalonia.Layout; namespace Avalonia.Controls { @@ -219,30 +220,16 @@ namespace Avalonia.Controls measuredWidth -= (hasVisibleChild ? spacing : 0); } - return new Size(measuredWidth, measuredHeight); + return new Size(measuredWidth, measuredHeight).Constrain(availableSize); } - /// - /// Arranges the control's children. - /// - /// The size allocated to the control. - /// The space taken. + /// protected override Size ArrangeOverride(Size finalSize) { var orientation = Orientation; - double arrangedWidth = finalSize.Width; - double arrangedHeight = finalSize.Height; - double spacing = Spacing; - bool hasVisibleChild = Children.Any(c => c.IsVisible); - - if (Orientation == Orientation.Vertical) - { - arrangedHeight = 0; - } - else - { - arrangedWidth = 0; - } + var spacing = Spacing; + var finalRect = new Rect(finalSize); + var pos = 0.0; foreach (Control child in Children) { @@ -251,32 +238,21 @@ namespace Avalonia.Controls if (orientation == Orientation.Vertical) { - double width = Math.Max(childWidth, arrangedWidth); - Rect childFinal = new Rect(0, arrangedHeight, width, childHeight); - ArrangeChild(child, childFinal, finalSize, orientation); - arrangedWidth = Math.Max(arrangedWidth, childWidth); - arrangedHeight += childHeight + (child.IsVisible ? spacing : 0); + var rect = new Rect(0, pos, childWidth, childHeight) + .Align(finalRect, child.HorizontalAlignment, VerticalAlignment.Top); + ArrangeChild(child, rect, finalSize, orientation); + pos += childHeight + spacing; } else { - double height = Math.Max(childHeight, arrangedHeight); - Rect childFinal = new Rect(arrangedWidth, 0, childWidth, height); - ArrangeChild(child, childFinal, finalSize, orientation); - arrangedWidth += childWidth + (child.IsVisible ? spacing : 0); - arrangedHeight = Math.Max(arrangedHeight, childHeight); + var rect = new Rect(pos, 0, childWidth, childHeight) + .Align(finalRect, HorizontalAlignment.Left, child.VerticalAlignment); + ArrangeChild(child, rect, finalSize, orientation); + pos += childWidth + spacing; } } - if (orientation == Orientation.Vertical) - { - arrangedHeight = Math.Max(arrangedHeight - (hasVisibleChild ? spacing : 0), finalSize.Height); - } - else - { - arrangedWidth = Math.Max(arrangedWidth - (hasVisibleChild ? spacing : 0), finalSize.Width); - } - - return new Size(arrangedWidth, arrangedHeight); + return finalSize; } internal virtual void ArrangeChild( diff --git a/src/Avalonia.Controls/Viewbox.cs b/src/Avalonia.Controls/Viewbox.cs index 3a070d07b2..781c93bcbe 100644 --- a/src/Avalonia.Controls/Viewbox.cs +++ b/src/Avalonia.Controls/Viewbox.cs @@ -49,7 +49,7 @@ namespace Avalonia.Controls var scale = GetScale(availableSize, childSize, Stretch); - return childSize * scale; + return (childSize * scale).Constrain(availableSize); } return new Size(); diff --git a/src/Avalonia.Layout/LayoutExtensions.cs b/src/Avalonia.Layout/LayoutExtensions.cs new file mode 100644 index 0000000000..737bbb083c --- /dev/null +++ b/src/Avalonia.Layout/LayoutExtensions.cs @@ -0,0 +1,62 @@ +using System; + +namespace Avalonia.Layout +{ + /// + /// Extension methods for layout types. + /// + public static class LayoutExtensions + { + /// + /// Aligns a rect in a constraining rect according to horizontal and vertical alignment + /// settings. + /// + /// The rect to align. + /// The constraining rect. + /// The horizontal alignment. + /// The vertical alignment. + /// + public static Rect Align( + this Rect rect, + Rect constraint, + HorizontalAlignment horizontalAlignment, + VerticalAlignment verticalAlignment) + { + switch (horizontalAlignment) + { + case HorizontalAlignment.Center: + rect = rect.WithX((constraint.Width - rect.Width) / 2); + break; + case HorizontalAlignment.Right: + rect = rect.WithX(constraint.Width - rect.Width); + break; + case HorizontalAlignment.Stretch: + rect = new Rect( + 0, + rect.Y, + Math.Max(constraint.Width, rect.Width), + rect.Height); + break; + } + + switch (verticalAlignment) + { + case VerticalAlignment.Center: + rect = rect.WithY((constraint.Height - rect.Height) / 2); + break; + case VerticalAlignment.Bottom: + rect = rect.WithY(constraint.Height - rect.Height); + break; + case VerticalAlignment.Stretch: + rect = new Rect( + rect.X, + 0, + rect.Width, + Math.Max(constraint.Height, rect.Height)); + break; + } + + return rect; + } + } +} diff --git a/src/Avalonia.Layout/Layoutable.cs b/src/Avalonia.Layout/Layoutable.cs index d5e3a1631e..662f48ec44 100644 --- a/src/Avalonia.Layout/Layoutable.cs +++ b/src/Avalonia.Layout/Layoutable.cs @@ -314,7 +314,7 @@ namespace Avalonia.Layout try { _measuring = true; - desiredSize = MeasureCore(availableSize).Constrain(availableSize); + desiredSize = MeasureCore(availableSize); } finally { From baa7c9da69b232b13386bfb414ff537a744f4a81 Mon Sep 17 00:00:00 2001 From: Benedikt Schroeder Date: Thu, 11 Apr 2019 17:49:56 +0200 Subject: [PATCH 03/16] Makes ScrollBar Thumb stylable --- src/Avalonia.Themes.Default/ScrollBar.xaml | 34 +++++++++++++++------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/src/Avalonia.Themes.Default/ScrollBar.xaml b/src/Avalonia.Themes.Default/ScrollBar.xaml index 2cb8ce2d24..edd678ed56 100644 --- a/src/Avalonia.Themes.Default/ScrollBar.xaml +++ b/src/Avalonia.Themes.Default/ScrollBar.xaml @@ -31,11 +31,18 @@ Focusable="False"/> - - - - - + + + - - - - - + + + Date: Fri, 12 Apr 2019 11:32:59 +0200 Subject: [PATCH 04/16] Move Thumb style outside the control template --- src/Avalonia.Themes.Default/ScrollBar.xaml | 40 +++++++--------------- 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/src/Avalonia.Themes.Default/ScrollBar.xaml b/src/Avalonia.Themes.Default/ScrollBar.xaml index edd678ed56..ca308b33c3 100644 --- a/src/Avalonia.Themes.Default/ScrollBar.xaml +++ b/src/Avalonia.Themes.Default/ScrollBar.xaml @@ -30,20 +30,7 @@ Classes="repeattrack" Focusable="False"/> - - - - - + - - - - - + + From 6f1ebdf76d5528d66cf898b9b2779b698a000170 Mon Sep 17 00:00:00 2001 From: Dariusz Komosinski Date: Tue, 16 Apr 2019 10:56:08 +0200 Subject: [PATCH 05/16] Update Numerge. --- nukebuild/Numerge | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nukebuild/Numerge b/nukebuild/Numerge index 4464343aef..aef10ae67d 160000 --- a/nukebuild/Numerge +++ b/nukebuild/Numerge @@ -1 +1 @@ -Subproject commit 4464343aef5c8ab7a42fcb20a483a6058199f8b8 +Subproject commit aef10ae67dc55c95f49b52a505a0be33bfa297a5 From 4413de463e504b9b29b925102a00aceaf96b746b Mon Sep 17 00:00:00 2001 From: Benedikt Schroeder Date: Tue, 16 Apr 2019 19:14:16 +0200 Subject: [PATCH 06/16] Remove unsupported line caps --- src/Avalonia.Controls/Shapes/Shape.cs | 72 ++++++++++-------- src/Avalonia.Visuals/Media/BrushExtensions.cs | 10 +-- src/Avalonia.Visuals/Media/Pen.cs | 72 ++++++++---------- src/Avalonia.Visuals/Media/PenLineCap.cs | 3 +- src/Skia/Avalonia.Skia/DrawingContextImpl.cs | 19 ++--- .../Avalonia.Direct2D1/PrimitiveExtensions.cs | 8 +- .../Avalonia.RenderTests/Shapes/PathTests.cs | 8 +- .../Shapes/PolylineTests.cs | 3 +- .../Path/Path_With_PenLineCap.expected.png | Bin 1155 -> 1522 bytes .../Path/Path_With_PenLineCap.expected.png | Bin 1155 -> 1522 bytes 10 files changed, 90 insertions(+), 105 deletions(-) diff --git a/src/Avalonia.Controls/Shapes/Shape.cs b/src/Avalonia.Controls/Shapes/Shape.cs index 57dbeba1cc..499dfb5320 100644 --- a/src/Avalonia.Controls/Shapes/Shape.cs +++ b/src/Avalonia.Controls/Shapes/Shape.cs @@ -21,13 +21,19 @@ namespace Avalonia.Controls.Shapes public static readonly StyledProperty> StrokeDashArrayProperty = AvaloniaProperty.Register>(nameof(StrokeDashArray)); - + public static readonly StyledProperty StrokeDashOffsetProperty = AvaloniaProperty.Register(nameof(StrokeDashOffset)); public static readonly StyledProperty StrokeThicknessProperty = AvaloniaProperty.Register(nameof(StrokeThickness)); + public static readonly StyledProperty StrokeLineCapProperty = + AvaloniaProperty.Register(nameof(StrokeLineCap), PenLineCap.Flat); + + public static readonly StyledProperty StrokeJoinProperty = + AvaloniaProperty.Register(nameof(StrokeJoin), PenLineJoin.Miter); + private Matrix _transform = Matrix.Identity; private Geometry _definingGeometry; private Geometry _renderedGeometry; @@ -36,7 +42,9 @@ namespace Avalonia.Controls.Shapes static Shape() { AffectsMeasure(StretchProperty, StrokeThicknessProperty); - AffectsRender(FillProperty, StrokeProperty, StrokeDashArrayProperty); + + AffectsRender(FillProperty, StrokeProperty, StrokeDashArrayProperty, StrokeDashOffsetProperty, + StrokeThicknessProperty, StrokeLineCapProperty, StrokeJoinProperty); } public Geometry DefiningGeometry @@ -106,7 +114,7 @@ namespace Avalonia.Controls.Shapes get { return GetValue(StrokeDashArrayProperty); } set { SetValue(StrokeDashArrayProperty, value); } } - + public double StrokeDashOffset { get { return GetValue(StrokeDashOffsetProperty); } @@ -119,13 +127,17 @@ namespace Avalonia.Controls.Shapes set { SetValue(StrokeThicknessProperty, value); } } - public PenLineCap StrokeDashCap { get; set; } = PenLineCap.Flat; - - public PenLineCap StrokeStartLineCap { get; set; } = PenLineCap.Flat; - - public PenLineCap StrokeEndLineCap { get; set; } = PenLineCap.Flat; + public PenLineCap StrokeLineCap + { + get { return GetValue(StrokeLineCapProperty); } + set { SetValue(StrokeLineCapProperty, value); } + } - public PenLineJoin StrokeJoin { get; set; } = PenLineJoin.Miter; + public PenLineJoin StrokeJoin + { + get { return GetValue(StrokeJoinProperty); } + set { SetValue(StrokeJoinProperty, value); } + } public override void Render(DrawingContext context) { @@ -133,8 +145,8 @@ namespace Avalonia.Controls.Shapes if (geometry != null) { - var pen = new Pen(Stroke, StrokeThickness, new DashStyle(StrokeDashArray, StrokeDashOffset), - StrokeDashCap, StrokeStartLineCap, StrokeEndLineCap, StrokeJoin); + var pen = new Pen(Stroke, StrokeThickness, new DashStyle(StrokeDashArray, StrokeDashOffset), + StrokeLineCap, StrokeJoin); context.DrawGeometry(Fill, pen, geometry); } } @@ -169,11 +181,11 @@ namespace Avalonia.Controls.Shapes protected void InvalidateGeometry() { - this._renderedGeometry = null; - this._definingGeometry = null; + _renderedGeometry = null; + _definingGeometry = null; InvalidateMeasure(); } - + protected override Size MeasureOverride(Size availableSize) { bool deferCalculateTransform; @@ -203,10 +215,10 @@ namespace Avalonia.Controls.Shapes return CalculateShapeSizeAndSetTransform(availableSize); } } - + protected override Size ArrangeOverride(Size finalSize) { - if(_calculateTransformOnArrange) + if (_calculateTransformOnArrange) { _calculateTransformOnArrange = false; CalculateShapeSizeAndSetTransform(finalSize); @@ -312,25 +324,25 @@ namespace Avalonia.Controls.Shapes private static void AffectsGeometryInvalidate(AvaloniaPropertyChangedEventArgs e) { - var control = e.Sender as Shape; + if (!(e.Sender is Shape control)) + { + return; + } - if (control != null) + // If the geometry is invalidated when Bounds changes, only invalidate when the Size + // portion changes. + if (e.Property == BoundsProperty) { - // If the geometry is invalidated when Bounds changes, only invalidate when the Size - // portion changes. - if (e.Property == BoundsProperty) - { - var oldBounds = (Rect)e.OldValue; - var newBounds = (Rect)e.NewValue; + var oldBounds = (Rect)e.OldValue; + var newBounds = (Rect)e.NewValue; - if (oldBounds.Size == newBounds.Size) - { - return; - } + if (oldBounds.Size == newBounds.Size) + { + return; } - - control.InvalidateGeometry(); } + + control.InvalidateGeometry(); } } } diff --git a/src/Avalonia.Visuals/Media/BrushExtensions.cs b/src/Avalonia.Visuals/Media/BrushExtensions.cs index cd351071dd..522953eb04 100644 --- a/src/Avalonia.Visuals/Media/BrushExtensions.cs +++ b/src/Avalonia.Visuals/Media/BrushExtensions.cs @@ -34,16 +34,14 @@ namespace Avalonia.Media { Contract.Requires(pen != null); - var brush = pen?.Brush?.ToImmutable(); - return pen == null || ReferenceEquals(pen?.Brush, brush) ? + var brush = pen.Brush?.ToImmutable(); + return ReferenceEquals(pen.Brush, brush) ? pen : new Pen( brush, thickness: pen.Thickness, - dashStyle: pen.DashStyle, - dashCap: pen.DashCap, - startLineCap: pen.StartLineCap, - endLineCap: pen.EndLineCap, + dashStyle: pen.DashStyle, + lineCap: pen.LineCap, lineJoin: pen.LineJoin, miterLimit: pen.MiterLimit); } diff --git a/src/Avalonia.Visuals/Media/Pen.cs b/src/Avalonia.Visuals/Media/Pen.cs index ddd8091801..ee427c913b 100644 --- a/src/Avalonia.Visuals/Media/Pen.cs +++ b/src/Avalonia.Visuals/Media/Pen.cs @@ -11,63 +11,45 @@ namespace Avalonia.Media /// /// Initializes a new instance of the class. /// - /// The brush used to draw. + /// The stroke color. /// The stroke thickness. /// The dash style. - /// The dash cap. - /// The start line cap. - /// The end line cap. + /// Specifies the type of graphic shape to use on both ends of a line. /// The line join. /// The miter limit. public Pen( - IBrush brush, + uint color, double thickness = 1.0, - DashStyle dashStyle = null, - PenLineCap dashCap = PenLineCap.Flat, - PenLineCap startLineCap = PenLineCap.Flat, - PenLineCap endLineCap = PenLineCap.Flat, - PenLineJoin lineJoin = PenLineJoin.Miter, - double miterLimit = 10.0) + DashStyle dashStyle = null, + PenLineCap lineCap = PenLineCap.Flat, + PenLineJoin lineJoin = PenLineJoin.Miter, + double miterLimit = 10.0) : this(new SolidColorBrush(color), thickness, dashStyle, lineCap, lineJoin, miterLimit) { - Brush = brush; - Thickness = thickness; - DashCap = dashCap; - StartLineCap = startLineCap; - EndLineCap = endLineCap; - LineJoin = lineJoin; - MiterLimit = miterLimit; - DashStyle = dashStyle; } /// /// Initializes a new instance of the class. /// - /// The stroke color. + /// The brush used to draw. /// The stroke thickness. /// The dash style. - /// The dash cap. - /// The start line cap. - /// The end line cap. + /// The line cap. /// The line join. /// The miter limit. public Pen( - uint color, + IBrush brush, double thickness = 1.0, - DashStyle dashStyle = null, - PenLineCap dashCap = PenLineCap.Flat, - PenLineCap startLineCap = PenLineCap.Flat, - PenLineCap endLineCap = PenLineCap.Flat, - PenLineJoin lineJoin = PenLineJoin.Miter, + DashStyle dashStyle = null, + PenLineCap lineCap = PenLineCap.Flat, + PenLineJoin lineJoin = PenLineJoin.Miter, double miterLimit = 10.0) { - Brush = new SolidColorBrush(color); + Brush = brush; Thickness = thickness; - StartLineCap = startLineCap; - EndLineCap = endLineCap; + LineCap = lineCap; LineJoin = lineJoin; MiterLimit = miterLimit; DashStyle = dashStyle; - DashCap = dashCap; } /// @@ -78,18 +60,26 @@ namespace Avalonia.Media /// /// Gets the stroke thickness. /// - public double Thickness { get; } = 1.0; + public double Thickness { get; } + /// + /// Specifies the style of dashed lines drawn with a object. + /// public DashStyle DashStyle { get; } - public PenLineCap DashCap { get; } - - public PenLineCap StartLineCap { get; } = PenLineCap.Flat; - - public PenLineCap EndLineCap { get; } = PenLineCap.Flat; + /// + /// Specifies the type of graphic shape to use on both ends of a line. + /// + public PenLineCap LineCap { get; } - public PenLineJoin LineJoin { get; } = PenLineJoin.Miter; + /// + /// Specifies how to join consecutive line or curve segments in a (subpath) contained in a object. + /// + public PenLineJoin LineJoin { get; } - public double MiterLimit { get; } = 10.0; + /// + /// The limit on the ratio of the miter length to half this pen's Thickness. + /// + public double MiterLimit { get; } } } diff --git a/src/Avalonia.Visuals/Media/PenLineCap.cs b/src/Avalonia.Visuals/Media/PenLineCap.cs index 56c5c040eb..83d8f11613 100644 --- a/src/Avalonia.Visuals/Media/PenLineCap.cs +++ b/src/Avalonia.Visuals/Media/PenLineCap.cs @@ -4,7 +4,6 @@ namespace Avalonia.Media { Flat, Round, - Square, - Triangle + Square } } diff --git a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs index e69d155305..ef37f69f45 100644 --- a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs +++ b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs @@ -573,25 +573,17 @@ namespace Avalonia.Skia // Need to modify dashes due to Skia modifying their lengths // https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/paths/dots // TODO: Still something is off, dashes are now present, but don't look the same as D2D ones. - float dashLengthModifier; - float gapLengthModifier; - switch (pen.StartLineCap) + switch (pen.LineCap) { case PenLineCap.Round: paint.StrokeCap = SKStrokeCap.Round; - dashLengthModifier = -paint.StrokeWidth; - gapLengthModifier = paint.StrokeWidth; break; case PenLineCap.Square: paint.StrokeCap = SKStrokeCap.Square; - dashLengthModifier = -paint.StrokeWidth; - gapLengthModifier = paint.StrokeWidth; break; default: paint.StrokeCap = SKStrokeCap.Butt; - dashLengthModifier = 0.0f; - gapLengthModifier = 0.0f; break; } @@ -617,13 +609,12 @@ namespace Avalonia.Skia for (var i = 0; i < srcDashes.Count; ++i) { - var lengthModifier = i % 2 == 0 ? dashLengthModifier : gapLengthModifier; - - // Avalonia dash lengths are relative, but Skia takes absolute sizes - need to scale - dashesArray[i] = (float) srcDashes[i] * paint.StrokeWidth + lengthModifier; + dashesArray[i] = (float) srcDashes[i] * paint.StrokeWidth; } - var pe = SKPathEffect.CreateDash(dashesArray, (float) pen.DashStyle.Offset); + var offset = (float)(pen.DashStyle.Offset * pen.Thickness); + + var pe = SKPathEffect.CreateDash(dashesArray, offset); paint.PathEffect = pe; rv.AddDisposable(pe); diff --git a/src/Windows/Avalonia.Direct2D1/PrimitiveExtensions.cs b/src/Windows/Avalonia.Direct2D1/PrimitiveExtensions.cs index 5209014271..6b0d30f250 100644 --- a/src/Windows/Avalonia.Direct2D1/PrimitiveExtensions.cs +++ b/src/Windows/Avalonia.Direct2D1/PrimitiveExtensions.cs @@ -122,14 +122,16 @@ namespace Avalonia.Direct2D1 /// The Direct2D brush. public static StrokeStyle ToDirect2DStrokeStyle(this Avalonia.Media.Pen pen, Factory factory) { + var d2dLineCap = pen.LineCap.ToDirect2D(); + var properties = new StrokeStyleProperties { DashStyle = DashStyle.Solid, MiterLimit = (float)pen.MiterLimit, LineJoin = pen.LineJoin.ToDirect2D(), - StartCap = pen.StartLineCap.ToDirect2D(), - EndCap = pen.EndLineCap.ToDirect2D(), - DashCap = pen.DashCap.ToDirect2D() + StartCap = d2dLineCap, + EndCap = d2dLineCap, + DashCap = d2dLineCap }; float[] dashes = null; if (pen.DashStyle?.Dashes != null && pen.DashStyle.Dashes.Count > 0) diff --git a/tests/Avalonia.RenderTests/Shapes/PathTests.cs b/tests/Avalonia.RenderTests/Shapes/PathTests.cs index 4703daca25..2fa93b49e2 100644 --- a/tests/Avalonia.RenderTests/Shapes/PathTests.cs +++ b/tests/Avalonia.RenderTests/Shapes/PathTests.cs @@ -334,11 +334,7 @@ namespace Avalonia.Direct2D1.RenderTests.Shapes CompareImages(); } -#if AVALONIA_SKIA_SKIP_FAIL - [Fact(Skip = "FIXME")] -#else [Fact] -#endif public async Task Path_With_PenLineCap() { Decorator target = new Decorator @@ -351,10 +347,8 @@ namespace Avalonia.Direct2D1.RenderTests.Shapes StrokeThickness = 10, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center, - StrokeDashCap = PenLineCap.Triangle, StrokeDashArray = new AvaloniaList(3, 1), - StrokeStartLineCap = PenLineCap.Round, - StrokeEndLineCap = PenLineCap.Square, + StrokeLineCap = PenLineCap.Round, Data = StreamGeometry.Parse("M 20,20 L 180,180"), } }; diff --git a/tests/Avalonia.RenderTests/Shapes/PolylineTests.cs b/tests/Avalonia.RenderTests/Shapes/PolylineTests.cs index 3b586d55ea..8afaeb8838 100644 --- a/tests/Avalonia.RenderTests/Shapes/PolylineTests.cs +++ b/tests/Avalonia.RenderTests/Shapes/PolylineTests.cs @@ -61,8 +61,7 @@ namespace Avalonia.Direct2D1.RenderTests.Shapes Points = polylinePoints, Stretch = Stretch.Uniform, StrokeJoin = PenLineJoin.Round, - StrokeStartLineCap = PenLineCap.Round, - StrokeEndLineCap = PenLineCap.Round, + StrokeLineCap = PenLineCap.Round, StrokeThickness = 10 } }; diff --git a/tests/TestFiles/Direct2D1/Shapes/Path/Path_With_PenLineCap.expected.png b/tests/TestFiles/Direct2D1/Shapes/Path/Path_With_PenLineCap.expected.png index d33068d62c9deb097896fc29422ed4f765f2daf4..a61ba9f080449b976575ff2faaf7d793aac7e5f9 100644 GIT binary patch literal 1522 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yF%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl}2EbxddW?Klsp8uxup*tayqEg>Z;J%+FI`*b<}H{$3&;5)~420g%%DmO{F7F9V!V& zIJ#e0p62U0yuJ8YT<`3=pKU&DI(Oyw<9j<_*H|(EU4RZw`yH|CjlCWF@B2!LE#Jd( ztiN49^=U7+VTSg4nZ*{Rz>ESIGr!JbM&6(T5 z!ll&MtUlV6t`f1Dt9DMh z(1yobFwX)#W}XE0*ouXJ>^Qd=s0*o|x_s)2$EV*PE}WX;aqh^1xxPv}rBB!AJ)C*t z=8Z=R))@=CRL(#CmH2dT^u`|6s1xoxe{RXLY}!*4(tb5H=7N*msk6&Ne>U3K7eC3p z`f6&j$;1mmbrj$w1w(XnUv8lm!&~lPd2T z;H$Dl5m%(ZTn~&jVEokZM9mOBS*Ej}|9ovx$#?bN@4a;Vy)CzX&NAjdUe{l{@iUjy zj4IWiHf(EsI#aaS-sVW1wB9&nd-^%XWmB~#NpCFP_bn-q@=*IA^7_Fq!)e>2fL`wUQ@_{d?xNm3 zNtuG?aQ}FA zs(Po*;@5vAwoK?R+TR07cH2WMQzegX+_Q(t(Yvx$!gZt7#0!^}-q7f{2uy^Pr%j>$ z6R(3rm*0_P^EBpLUzlhyd%EvmnbYw<#LMDx&qW^CV)Q&r`*~Tn86MBTyx6*P;+$Sb z?qa2#qQFcf_RM9{{j?UdWo|`kpvZc%^2WXob4$K?*SXv7Up?=BWW4(MKYw+;1-+Si zeZ)rENK0+T*U8~(KKMj zir!n)15A8Xwq{&Oz+`#uCp0zAEMkrHQQ0!FzZj?&lF6Pdz7xoD)x}Br=V?1o?>eZ3&F>ybmVM^c+PM3FOpd!-K)z4*}Q$iB} Dt%9q! literal 1155 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yF%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl|*^>lFzsfc@fcVS*?s6^XCKHq>2FBQJ-H3}`=2Odm_kdbq4YOq#d;WQ6u zeaIKUa*%^XsIi&l+Wq2LCU3L$Z#AF0F(MRJMfd&p*>N!&ha? z=hHWI+IFi6Mg7dn5j#{X%$a+|edo*RUv9b_T5M$-7r*uXu{ina_n)rr;(DF)=Fuln zo8nTXGk#qr>YTY9EKCy}6ofcjm>NA41UOlg8XZ&w5P}EqdDw6?nSFElbXa1`MpL22 z3+JYJusC_Ip2*R%Elf#}W9?E8mP7U59##C^zpB6JzU`fRpNihhKKxd>bhT%4r8rp;nX#c1#@*LIshHz5UoAYAzM@Ef!yYdbzy~$*_#d4`KxR(>wfeM zX!mA?G+|ENvq?L$l@`v82*=qvRM@vPM5M&m=>;`3Jffudm8s7>Gy@t zTlY)jdoM6-^85Ez?%4bE`Ns47+b>+cp1gVT)2vb^$7sz7vph1gRY7E?DTqw>Rxq6i z^q@nQ(!yT<<7t9RI$O+MowWnGdW#~?Sc5pRT6yJuTOQpvolE}x<-`?vw^$$D+;b;H z{^>R2`t&;a)#?Av{jvP^_n}zTs^uro`%PPYm6IiRDaih{Q$gg?s~~c&E+_)EqnUvb zX!dG<^K5XGtuX(s(_}L7LL0V}gcNLVdY^O~W+eKn?C*1wj#d`rc$?D+47M#&oen_X z1H&$=>&Zptk2!I2(X~^e`I~2~OlPdG*fF=Na*vaDe(zbLT=k75sCt8kUw?Q-*FOns zY3uzpTi5N|x9>et^0&{sNXV%+9xCf)*MGQEWAyFnL$MvFr%gW6AF*YNP^U%4+kGBK v7!T_R6&^6Xt}Mvz6C&}5fuVv&UHw1P$(b*HrVM%xNb!1@J z*w6hZkrl}2EbxddW?Klsp8uxup*tayqEg>Z;J%+FI`*b<}H{$3&;5)~420g%%DmO{F7F9V!V& zIJ#e0p62U0yuJ8YT<`3=pKU&DI(Oyw<9j<_*H|(EU4RZw`yH|CjlCWF@B2!LE#Jd( ztiN49^=U7+VTSg4nZ*{Rz>ESIGr!JbM&6(T5 z!ll&MtUlV6t`f1Dt9DMh z(1yobFwX)#W}XE0*ouXJ>^Qd=s0*o|x_s)2$EV*PE}WX;aqh^1xxPv}rBB!AJ)C*t z=8Z=R))@=CRL(#CmH2dT^u`|6s1xoxe{RXLY}!*4(tb5H=7N*msk6&Ne>U3K7eC3p z`f6&j$;1mmbrj$w1w(XnUv8lm!&~lPd2T z;H$Dl5m%(ZTn~&jVEokZM9mOBS*Ej}|9ovx$#?bN@4a;Vy)CzX&NAjdUe{l{@iUjy zj4IWiHf(EsI#aaS-sVW1wB9&nd-^%XWmB~#NpCFP_bn-q@=*IA^7_Fq!)e>2fL`wUQ@_{d?xNm3 zNtuG?aQ}FA zs(Po*;@5vAwoK?R+TR07cH2WMQzegX+_Q(t(Yvx$!gZt7#0!^}-q7f{2uy^Pr%j>$ z6R(3rm*0_P^EBpLUzlhyd%EvmnbYw<#LMDx&qW^CV)Q&r`*~Tn86MBTyx6*P;+$Sb z?qa2#qQFcf_RM9{{j?UdWo|`kpvZc%^2WXob4$K?*SXv7Up?=BWW4(MKYw+;1-+Si zeZ)rENK0+T*U8~(KKMj zir!n)15A8Xwq{&Oz+`#uCp0zAEMkrHQQ0!FzZj?&lF6Pdz7xoD)x}Br=V?1o?>eZ3&F>ybmVM^c+PM3FOpd!-K)z4*}Q$iB} Dt%9q! literal 1155 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yF%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl|*^>lFzsfc@fcVS*?s6^XCKHq>2FBQJ-H3}`=2Odm_kdbq4YOq#d;WQ6u zeaIKUa*%^XsIi&l+Wq2LCU3L$Z#AF0F(MRJMfd&p*>N!&ha? z=hHWI+IFi6Mg7dn5j#{X%$a+|edo*RUv9b_T5M$-7r*uXu{ina_n)rr;(DF)=Fuln zo8nTXGk#qr>YTY9EKCy}6ofcjm>NA41UOlg8XZ&w5P}EqdDw6?nSFElbXa1`MpL22 z3+JYJusC_Ip2*R%Elf#}W9?E8mP7U59##C^zpB6JzU`fRpNihhKKxd>bhT%4r8rp;nX#c1#@*LIshHz5UoAYAzM@Ef!yYdbzy~$*_#d4`KxR(>wfeM zX!mA?G+|ENvq?L$l@`v82*=qvRM@vPM5M&m=>;`3Jffudm8s7>Gy@t zTlY)jdoM6-^85Ez?%4bE`Ns47+b>+cp1gVT)2vb^$7sz7vph1gRY7E?DTqw>Rxq6i z^q@nQ(!yT<<7t9RI$O+MowWnGdW#~?Sc5pRT6yJuTOQpvolE}x<-`?vw^$$D+;b;H z{^>R2`t&;a)#?Av{jvP^_n}zTs^uro`%PPYm6IiRDaih{Q$gg?s~~c&E+_)EqnUvb zX!dG<^K5XGtuX(s(_}L7LL0V}gcNLVdY^O~W+eKn?C*1wj#d`rc$?D+47M#&oen_X z1H&$=>&Zptk2!I2(X~^e`I~2~OlPdG*fF=Na*vaDe(zbLT=k75sCt8kUw?Q-*FOns zY3uzpTi5N|x9>et^0&{sNXV%+9xCf)*MGQEWAyFnL$MvFr%gW6AF*YNP^U%4+kGBK v7!T_R6&^6Xt}Mvz6C&}5fuVv&UHw1P$(b*Hr Date: Thu, 18 Apr 2019 20:15:51 -0700 Subject: [PATCH 07/16] do not fire key drag event before any drag has happened --- src/Avalonia.Controls/Platform/InProcessDragSource.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/Platform/InProcessDragSource.cs b/src/Avalonia.Controls/Platform/InProcessDragSource.cs index f8ae9f4249..0918da1a90 100644 --- a/src/Avalonia.Controls/Platform/InProcessDragSource.cs +++ b/src/Avalonia.Controls/Platform/InProcessDragSource.cs @@ -147,7 +147,10 @@ namespace Avalonia.Platform e.Handled = true; } else if (e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl || e.Key == Key.LeftAlt || e.Key == Key.RightAlt) - RaiseEventAndUpdateCursor(RawDragEventType.DragOver, _lastRoot, _lastPosition, e.Modifiers); + { + if (_lastRoot != null) + RaiseEventAndUpdateCursor(RawDragEventType.DragOver, _lastRoot, _lastPosition, e.Modifiers); + } } private void ProcessMouseEvents(RawMouseEventArgs e) From 8562270c66ad5f9f21265ae2ce4230c5a4603fef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro?= Date: Sat, 20 Apr 2019 23:57:29 +0100 Subject: [PATCH 08/16] Fixed type name in XML comment. --- .../Collections/DataGridCollectionView.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Controls.DataGrid/Collections/DataGridCollectionView.cs b/src/Avalonia.Controls.DataGrid/Collections/DataGridCollectionView.cs index 4b4203ba40..92734b128d 100644 --- a/src/Avalonia.Controls.DataGrid/Collections/DataGridCollectionView.cs +++ b/src/Avalonia.Controls.DataGrid/Collections/DataGridCollectionView.cs @@ -927,7 +927,7 @@ namespace Avalonia.Collections /// ///

/// Clear a sort criteria by assigning SortDescription.Empty to this property. - /// One or more sort criteria in form of + /// One or more sort criteria in form of /// can be used, each specifying a property and direction to sort by. ///

///
@@ -4312,4 +4312,4 @@ namespace Avalonia.Collections } } } -} \ No newline at end of file +} From dda9dd729c5274637735fdfe8fe6545049ff97a3 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 23 Apr 2019 20:59:45 +0100 Subject: [PATCH 09/16] [Grid] add missing static set and get methods for IsSharedSizeScope property. --- src/Avalonia.Controls/Grid.cs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/Avalonia.Controls/Grid.cs b/src/Avalonia.Controls/Grid.cs index b51583d8b3..90a27d0b31 100644 --- a/src/Avalonia.Controls/Grid.cs +++ b/src/Avalonia.Controls/Grid.cs @@ -177,6 +177,17 @@ namespace Avalonia.Controls return element.GetValue(RowSpanProperty); } + + /// + /// Gets the value of the IsSharedSizeScope attached property for a control. + /// + /// The control. + /// The control's IsSharedSizeScope value. + public static bool GetIsSharedSizeScope(AvaloniaObject element) + { + return element.GetValue(IsSharedSizeScopeProperty); + } + /// /// Sets the value of the Column attached property for a control. /// @@ -217,6 +228,16 @@ namespace Avalonia.Controls element.SetValue(RowSpanProperty, value); } + /// + /// Sets the value of IsSharedSizeScope property for a control. + /// + /// The control. + /// The IsSharedSizeScope value. + public static void SetIsSharedSizeScope(AvaloniaObject element, bool value) + { + element.SetValue(IsSharedSizeScopeProperty, value); + } + /// /// Gets the result of the last column measurement. /// Use this result to reduce the arrange calculation. From e8cc8ec17feafed2ffecb2bf9321ea7b5ccae3f7 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 23 Apr 2019 21:07:25 +0100 Subject: [PATCH 10/16] fix datagrid xmlns attribute. --- src/Avalonia.Controls.DataGrid/Properties/AssemblyInfo.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Avalonia.Controls.DataGrid/Properties/AssemblyInfo.cs b/src/Avalonia.Controls.DataGrid/Properties/AssemblyInfo.cs index d5ad4c75f8..5c30a1b23e 100644 --- a/src/Avalonia.Controls.DataGrid/Properties/AssemblyInfo.cs +++ b/src/Avalonia.Controls.DataGrid/Properties/AssemblyInfo.cs @@ -8,7 +8,4 @@ using Avalonia.Metadata; [assembly: InternalsVisibleTo("Avalonia.Controls.UnitTests")] [assembly: InternalsVisibleTo("Avalonia.DesignerSupport")] -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia")] [assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Controls")] -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Controls.Primitives")] -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Controls.Collections")] From 0df770b1c46c1e0ffb86b7cee24e70cec95d1080 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 23 Apr 2019 21:47:29 +0100 Subject: [PATCH 11/16] fix datagrid xmlns --- src/Avalonia.Controls.DataGrid/Properties/AssemblyInfo.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Avalonia.Controls.DataGrid/Properties/AssemblyInfo.cs b/src/Avalonia.Controls.DataGrid/Properties/AssemblyInfo.cs index 5c30a1b23e..f15442addf 100644 --- a/src/Avalonia.Controls.DataGrid/Properties/AssemblyInfo.cs +++ b/src/Avalonia.Controls.DataGrid/Properties/AssemblyInfo.cs @@ -9,3 +9,5 @@ using Avalonia.Metadata; [assembly: InternalsVisibleTo("Avalonia.DesignerSupport")] [assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Controls")] +[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Controls.Collections")] +[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Controls.Primitives")] From 2c5956514e22313f31d4a790459ae956d6dcea36 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 24 Apr 2019 18:58:10 +0100 Subject: [PATCH 12/16] install xcode sdk --- azure-pipelines.yml | 5 + scripts/XcodeLegacy.sh | 1306 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1311 insertions(+) create mode 100755 scripts/XcodeLegacy.sh diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 39333f37ba..dcf21cf30f 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,6 +9,11 @@ jobs: script: | sudo apt-get update sudo apt-get install castxml + - task: CmdLine@2 + displayName: 'Install OSX Sdk' + inputs: + script: | + ./scripts/XcodeLegacy.sh -osx1013 - task: CmdLine@2 displayName: 'Install Nuke' diff --git a/scripts/XcodeLegacy.sh b/scripts/XcodeLegacy.sh new file mode 100755 index 0000000000..2a67dca414 --- /dev/null +++ b/scripts/XcodeLegacy.sh @@ -0,0 +1,1306 @@ +#!/bin/bash +# XCodeLegacy.sh +# +# Original author: Frederic Devernay +# Contributors: +# - Garrett Walbridge +# - Jae Liu +# - Eric Knibbe +# - Chris Roueche +# - Kris Coppieters +# - Nick Beadman / +# +# License: Creative Commons BY-NC-SA 3.0 http://creativecommons.org/licenses/by-nc-sa/3.0/ +# +# History: +# 1.0 (08/10/2012): First public version, supports Xcode up to version 4.6.3 +# 1.1 (20/09/2013): Xcode 5 removed llvm-gcc and 10.7 SDK support, grab them from Xcode 3 and 4 +# 1.2 (03/02/2014): Xcode 5 broke PPC assembly and linking; fix assembly and grab linker from Xcode 3 +# 1.3 (07/10/2014): Xcode 6 removed 10.8 SDK, grab it from Xcode 5.1.1 +# 1.4 (21/08/2015): Xcode 7 removed 10.9 and 10.10 SDKs, grab them from Xcode 6.4 +# 1.5 (15/10/2015): Fixes for OS X 10.11 El Capitan (nothing can be installed in /usr/bin because of the sandbox) +# 1.6 (11/11/2015): Fix buildpackages, fix /usr/bin/gcc on recent OS X, fix download messages +# 1.7 (05/04/2016): Xcode 7.3 disables support for older SDKs, fix that +# 1.8 (07/04/2016): add options to install only some SDKs or compilers only +# 1.9 (16/09/2016): Xcode 8 dropped 10.11 SDK, get it from Xcode 7.3.1 +# 2.0 (02/05/2017): Xcode 8 cannot always link i386 for OS X 10.5, use the Xcode 3 linker for this arch too. Force use of legacy assembler with GCC 4.x. +# 2.1 (17/01/2017): Xcode 9 dropped 10.12 SDK, get it from https://github.com/phracker/MacOSX-SDKs; fix compiling with GNU Ada, and many other fixes +# 2.2 (12/02/2019): Added support for using macOS High Sierra 10.13 SDK from Xcode 9.4.1 for use on Xcode 10/macOS 10.14 Mojave, also changed source of OS X 10.12 SDK to Xcode 8.3.3 + +#set -e # Exit immediately if a command exits with a non-zero status +#set -u # Treat unset variables as an error when substituting. +#set -x # Print commands and their arguments as they are executed. + +compilers=0 +osx104=0 +osx105=0 +osx106=0 +osx107=0 +osx108=0 +osx109=0 +osx1010=0 +osx1011=0 +osx1012=0 +osx1013=0 +gotoption=0 +error=0 + +while [[ $error = 0 ]] && [[ $# -gt 1 ]]; do + + case $1 in + -compilers) + compilers=1 + gotoption=1 + shift + ;; + -osx104) + osx104=1 + gotoption=1 + shift + ;; + -osx105) + osx105=1 + gotoption=1 + shift + ;; + -osx106) + osx106=1 + gotoption=1 + shift + ;; + -osx107) + osx107=1 + gotoption=1 + shift + ;; + -osx108) + osx108=1 + gotoption=1 + shift + ;; + -osx109) + osx109=1 + gotoption=1 + shift + ;; + -osx1010) + osx1010=1 + gotoption=1 + shift + ;; + -osx1011) + osx1011=1 + gotoption=1 + shift + ;; + -osx1012) + osx1012=1 + gotoption=1 + shift + ;; + -osx1013) + osx1013=1 + gotoption=1 + shift + ;; + *) + # unknown option or spurious arg + error=1 + ;; + esac + +done + +if [ $gotoption = 0 ]; then + compilers=1 + osx104=1 + osx105=1 + osx106=1 + osx107=1 + osx108=1 + osx109=1 + osx1010=1 + osx1011=1 + osx1012=1 + osx1013=1 +fi + +if [ $# != 1 ]; then + # ################################################################################ 80 cols + echo "Usage: $0 [-compilers|-osx104|-osx105|-osx106|-osx107|-osx108|-osx109|-osx1010|-osx1011|-osx1012|-osx1013] buildpackages|install|installbeta|cleanpackages|uninstall|uninstallbeta" + echo "" + echo "Description: Extracts / installs / cleans / uninstalls the following components" + echo "from Xcode 3.2.6, Xcode 4.6.3, Xcode 5.1.1, Xcode 6.4, Xcode 7.3.1, Xcode 8.3.3 and Xcode 9.4.1 which" + echo "are not available in Xcode >= 4.2:" + echo " - PPC assembler and linker" + echo " - GCC 4.0 and 4.2 compilers and Xcode plugins" + echo " - LLVM-GCC 4.2 compiler and Xcode plugin (Xcode >= 5)" + echo " - Mac OS X SDK 10.4u, 10.5, 10.6, 10.7, 10.8, 10.9, 10.10, 10.11, 10.12, 10.13" + echo "" + echo "An optional first argument may be provided to limit the operation (by default" + echo "everything is done):" + echo " -compilers : only install the gcc and llvm-gcc compilers, as well as the" + echo " corresponding Xcode plugins" + echo " -osx104 : only install Mac OSX 10.4 SDK" + echo " -osx105 : only install Mac OSX 10.5 SDK" + echo " -osx106 : only install Mac OSX 10.6 SDK" + echo " -osx107 : only install Mac OSX 10.7 SDK" + echo " -osx108 : only install OSX 10.8 SDK" + echo " -osx109 : only install OSX 10.9 SDK" + echo " -osx1010 : only install OSX 10.10 SDK" + echo " -osx1011 : only install OSX 10.11 SDK" + echo " -osx1012 : only install OSX 10.12 SDK" + echo " -osx1013 : only install OSX 10.13 SDK" + echo "Note that these can be combined. For example, to build and install the 10.9" + echo "and 10.10 SDKs, one could execute:" + echo " $ $0 -osx109 -osx1010 buildpackages" + echo " $ sudo $0 -osx109 -osx1010 install" + echo "" + echo "Typically, you will want to run this script with the buildpackages argument" + echo "first, then the install argument, and lastly the cleanpackages argument, in" + echo "order to properly install the legacy Xcode files." + echo "The install and uninstall phases have to be run with administrative rights, as" + echo "in:" + echo " $ sudo $0 install" + echo "The installbeta and uninstallbeta phases work on the beta versions of Xcode." + exit +fi + +if [ "$1" = "installbeta" ] || [ "$1" = "uninstallbeta" ]; then + XCODEAPP="/Applications/Xcode-beta.app" +else + XCODEAPP="/Applications/Xcode.app" +fi +XCODE42=0 +PLUGINDIR="$XCODEAPP/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins" +GCCDIR="$XCODEAPP/Contents/Developer" +SDKDIR="$GCCDIR/Platforms/MacOSX.platform/Developer" +if [ -d "$XCODEAPP" ]; then + echo "*** Info: found Xcode >= 4.3 in $XCODEAPP" +else + GCCDIR="/Developer" + XCODEAPP="$GCCDIR/Applications/Xcode.app" + PLUGINDIR="$GCCDIR/Library/Xcode/PrivatePlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins" + SDKDIR="$GCCDIR" + if [ -d "$XCODEAPP" ]; then + XCODE42=1 + echo "*** Info: found Xcode <= 4.2.1 in $XCODEAPP" + else + echo "*** Info: could not find Xcode 4.2 in /Developer/Applications nor Xcode >= 4.3 in /Applications" + fi +fi +PLATFORMDIR="$GCCDIR/Platforms/MacOSX.platform" +GCCINSTALLDIR="$GCCDIR/Toolchains/XcodeDefault.xctoolchain" +GCCLINKDIR=/usr +RELEASENUM=$(uname -r | awk -F. '{print $1}') +if [ "$RELEASENUM" -gt 14 ]; then + # on OSX 10.11 El Capitan, nothing can be installed in /usr because of the Sandbox + # install in Xcode instead, and put links in /usr/local + GCCLINKDIR=/usr/local +elif [ "$RELEASENUM" -lt 10 ]; then + echo "*** Error: This script requires Mac OS X 10.6 Snow Leopard or newer." + exit 1 +fi + +GCCFILES="usr/share/man/man7/fsf-funding.7 usr/share/man/man7/gfdl.7 usr/share/man/man7/gpl.7 usr/share/man/man1/*-4.0.1 usr/share/man/man1/*-4.0.1.1 usr/libexec/gcc/*-apple-darwin10/4.0.1 usr/lib/gcc/*-apple-darwin10/4.0.1 usr/include/gcc/darwin/4.0 usr/bin/*-4.0 usr/bin/*-4.0.1 usr/share/man/man1/*-4.2.1 usr/share/man/man1/*-4.2.1.1 usr/libexec/gcc/*-apple-darwin10/4.2.1 usr/lib/gcc/*-apple-darwin10/4.2.1 usr/include/gcc/darwin/4.2 usr/bin/*-4.2 usr/bin/*-4.2.1" +LLVMGCCFILES="usr/llvm-gcc-4.2 usr/share/man/man1/llvm-g*.1.gz" + +xc3="$(( compilers + osx104 + osx105 + osx106 != 0 ))" +xc4="$(( compilers + osx107 != 0 ))" +xc5="$(( osx108 != 0 ))" +xc6="$(( osx109 + osx1010 != 0 ))" +xc7="$(( osx1011 != 0 ))" +xc8="$(( osx1012 != 0 ))" +xc9="$(( osx1013 != 0 ))" + +# The sole argument is the macOS version (e.g. 10.12) +installSDK() { + macos="$1" + macosnodot="${macos//./}" + if [ -d "$SDKDIR/SDKs/MacOSX${macos}.sdk" ]; then + echo "*** Not installing MacOSX${macos}.sdk (found installed in $SDKDIR/SDKs/MacOSX${macos}.sdk, uninstall first to force install)" + else + if [ -f Xcode${macosnodot}SDK.tar.gz ]; then + (gzip -dc Xcode${macosnodot}SDK.tar.gz | (cd "$SDKDIR" || exit; tar xf -)) && echo "*** installed Xcode${macosnodot}SDK.tar.gz" + elif [ -f MacOSX${macos}.sdk.tar.xz ]; then + (gzip -dc MacOSX${macos}.sdk.tar.xz | (cd "$SDKDIR/SDKs" || exit; tar xf -)) && echo "*** installed MacOSX${macos}.sdk.tar.xz" + else + echo "*** Could not install MacOSX${macos}.sdk" + echo "*** Before installing:" + echo "- execute \"$0 buildpackages\"" + exit 1 + fi + touch "$SDKDIR/SDKs/MacOSX${macos}.sdk/legacy" + fi +} + +case $1 in + buildpackages) + ####################### + # PHASE 1: PACKAGING + # + missingdmg=0 + # note: Xcode links from http://stackoverflow.com/questions/10335747/how-to-download-xcode-4-5-6-7-and-get-the-dmg-file/10335943#10335943 + if [ "$xc3" = 1 ] && [ ! -f xcode_3.2.6_and_ios_sdk_4.3.dmg ]; then + echo "*** You should download Xcode 3.2.6. Login to:" + echo " https://developer.apple.com/downloads/" + echo "then download from:" + echo " https://developer.apple.com/devcenter/download.action?path=/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg" + echo "or" + echo " https://adcdownload.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg" + echo "and then run this script from within the same directory as the downloaded file" + missingdmg=1 + fi + if [ "$xc4" = 1 ] && [ ! -f xcode4630916281a.dmg ]; then + echo "*** You should download Xcode 4.6.3. Login to:" + echo " https://developer.apple.com/downloads/" + echo "then download from:" + echo " https://developer.apple.com/devcenter/download.action?path=/Developer_Tools/xcode_4.6.3/xcode4630916281a.dmg" + echo "or" + echo " https://adcdownload.apple.com/Developer_Tools/xcode_4.6.3/xcode4630916281a.dmg" + echo "and then run this script from within the same directory as the downloaded file" + missingdmg=1 + fi + if [ "$xc5" = 1 ] && [ ! -f xcode_5.1.1.dmg ]; then + echo "*** You should download Xcode 5.1.1. Login to:" + echo " https://developer.apple.com/downloads/" + echo "then download from:" + echo " https://developer.apple.com/devcenter/download.action?path=/Developer_Tools/xcode_5.1.1/xcode_5.1.1.dmg" + echo "or" + echo " https://adcdownload.apple.com/Developer_Tools/xcode_5.1.1/xcode_5.1.1.dmg" + echo "and then run this script from within the same directory as the downloaded file" + missingdmg=1 + fi + if [ "$xc6" = 1 ] && [ ! -f Xcode_6.4.dmg ]; then + echo "*** You should download Xcode 6.4. Login to:" + echo " https://developer.apple.com/downloads/" + echo "then download from:" + echo " https://developer.apple.com/devcenter/download.action?path=/Developer_Tools/Xcode_6.4/Xcode_6.4.dmg" + echo "or" + echo " https://adcdownload.apple.com/Developer_Tools/Xcode_6.4/Xcode_6.4.dmg" + echo "and then run this script from within the same directory as the downloaded file" + missingdmg=1 + fi + if [ "$xc7" = 1 ] && [ ! -f Xcode_7.3.1.dmg ]; then + echo "*** You should download Xcode 7.3.1. Login to:" + echo " https://developer.apple.com/downloads/" + echo "then download from:" + echo " https://developer.apple.com/devcenter/download.action?path=/Developer_Tools/Xcode_7.3.1/Xcode_7.3.1.dmg" + echo "or" + echo " https://adcdownload.apple.com/Developer_Tools/Xcode_7.3.1/Xcode_7.3.1.dmg" + echo "and then run this script from within the same directory as the downloaded file" + missingdmg=1 + fi + if [ "$xc8" = 1 ] && [ ! -f Xcode8.3.3.xip ]; then + echo "*** You should download Xcode 8.3.3. Login to:" + echo " https://developer.apple.com/downloads/" + echo "then download from:" + echo " https://download.developer.apple.com/Developer_Tools/Xcode_8.3.3/Xcode8.3.3.xip" + echo "and then run this script from within the same directory as the downloaded file" + missingdmg=1 + fi + if [ "$xc9" = 1 ] && [ ! -f Xcode_9.4.1.xip ]; then + echo "*** You should download Xcode 9.4.1. Login to:" + echo " https://developer.apple.com/downloads/" + echo "then download from:" + echo " https://download.developer.apple.com/Developer_Tools/Xcode_9.4.1/Xcode_9.4.1.xip" + echo "and then run this script from within the same directory as the downloaded file" + missingdmg=1 + fi + if [ "$missingdmg" = 1 ]; then + echo "*** at least one Xcode distribution is missing, cannot build packages - exiting now" + exit + fi + if [ "$xc8" = 1 ]; then + if [ -e Xcode.app ]; then + echo "*** A stray Xcode.app exists in the XcodeLegacy.sh folder. Remove it then try again." + exit + fi + fi + + MNTDIR="$(mktemp -d mount.XXX)" + ATTACH_OPTS=(-nobrowse -mountroot "$MNTDIR") + if [ "$xc3" = 1 ]; then + # you should download Xcode 3.2.6 from: + # http://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/getSoftware?bundleID=20792 + hdiutil attach xcode_3.2.6_and_ios_sdk_4.3.dmg "${ATTACH_OPTS[@]}" + if [ ! -d "$MNTDIR/Xcode and iOS SDK" ]; then + echo "*** Error while trying to attach disk image xcode_3.2.6_and_ios_sdk_4.3.dmg" + echo "Aborting" + exit + fi + if [ "$compilers" = 1 ]; then + rm -rf /tmp/XC3 + pkgutil --expand "$MNTDIR/Xcode and iOS SDK/Packages/DeveloperTools.pkg" /tmp/XC3 + (cd /tmp/XC3 || exit; gzip -dc Payload | cpio -id --quiet Library/Xcode/Plug-ins) #we only need these, see https://github.com/devernay/xcodelegacy/issues/8 + ( (cd /tmp/XC3/Library/Xcode/Plug-ins || exit; tar cf - "GCC 4.0.xcplugin") | gzip -c > XcodePluginGCC40.tar.gz) && echo "*** Created XcodePluginGCC40.tar.gz in directory $(pwd)" + ( (cd /tmp/XC3/Library/Xcode/Plug-ins || exit; tar cf - "GCC 4.2.xcplugin") | gzip -c > XcodePluginGCC42.tar.gz) && echo "*** Created XcodePluginGCC42.tar.gz in directory $(pwd)" + #( (cd /tmp/XC3/Library/Xcode/Plug-ins || exit; tar cf - "LLVM GCC 4.2.xcplugin") | gzip -c > XcodePluginLLVMGCC42.tar.gz) && echo "*** Created XcodePluginLLVMGCC42.tar.gz in directory $(pwd)" + # should be untarred in /Developer/Library/Xcode/PrivatePlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins + # gzip -dc XcodePluginGCC40.tar.gz | (cd /Developer/Library/Xcode/PrivatePlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins || exit; sudo tar xvf -) + + rm -rf /tmp/XC3 + pkgutil --expand "$MNTDIR/Xcode and iOS SDK/Packages/DeveloperToolsCLI.pkg" /tmp/XC3 + + (cd /tmp/XC3 || exit; gzip -dc Payload | cpio -id --quiet usr/bin usr/libexec) #we only need these, see https://github.com/devernay/xcodelegacy/issues/8 + ( (cd /tmp/XC3 || exit; tar cf - usr/libexec/gcc/darwin/ppc usr/libexec/gcc/darwin/ppc64 usr/libexec/gcc/darwin/i386 usr/libexec/gcc/darwin/x86_64) | gzip -c > Xcode3as.tar.gz) && echo "*** Created Xcode3as.tar.gz in directory $(pwd)" + ( (cd /tmp/XC3 || exit; tar cf - usr/bin/ld) | gzip -c > Xcode3ld.tar.gz) && echo "*** Created Xcode3ld.tar.gz in directory $(pwd)" + + #(cp "$MNTDIR/Xcode and iOS SDK/Packages/gcc4.0.pkg" xcode_3.2.6_gcc4.0.pkg) && echo "*** Created xcode_3.2.6_gcc4.0.pkg in directory $(pwd)" + rm -rf /tmp/XC3 + pkgutil --expand "$MNTDIR/Xcode and iOS SDK/Packages/gcc4.0.pkg" /tmp/XC3 + + (cd /tmp/XC3 || exit; gzip -dc Payload | cpio -id --quiet usr) #we only need these, see https://github.com/devernay/xcodelegacy/issues/8 + ( (cd /tmp/XC3 || exit; tar cf - usr) | gzip -c > Xcode3gcc40.tar.gz) && echo "*** Created Xcode3gcc40.tar.gz in directory $(pwd)" + + #(cp "$MNTDIR/Xcode and iOS SDK/Packages/gcc4.2.pkg" xcode_3.2.6_gcc4.2.pkg) && echo "*** Created xcode_3.2.6_gcc4.2.pkg in directory $(pwd)" + rm -rf /tmp/XC3 + pkgutil --expand "$MNTDIR/Xcode and iOS SDK/Packages/gcc4.2.pkg" /tmp/XC3 + + (cd /tmp/XC3 || exit; gzip -dc Payload | cpio -id --quiet usr) #we only need these, see https://github.com/devernay/xcodelegacy/issues/8 + ( (cd /tmp/XC3 || exit; tar cf - usr) | gzip -c > Xcode3gcc42.tar.gz) && echo "*** Created Xcode3gcc42.tar.gz in directory $(pwd)" + + #(cp "$MNTDIR/Xcode and iOS SDK/Packages/llvm-gcc4.2.pkg" xcode_3.2.6_llvm-gcc4.2.pkg) && echo "*** Created xcode_3.2.6_llvm-gcc4.2.pkg in directory $(pwd)" + rm -rf /tmp/XC3 + pkgutil --expand "$MNTDIR/Xcode and iOS SDK/Packages/llvm-gcc4.2.pkg" /tmp/XC3 + + (cd /tmp/XC3 || exit; gzip -dc Payload | cpio -id --quiet usr) #we only need these, see https://github.com/devernay/xcodelegacy/issues/8 + ( (cd /tmp/XC3 || exit; tar cf - usr) | gzip -c > Xcode3llvmgcc42.tar.gz) && echo "*** Created Xcode3llvmgcc42.tar.gz in directory $(pwd)" + fi + + rm -rf /tmp/XC3 + + if [ "$osx104" = 1 ] || [ "$osx105" = 1 ]; then + # use the latest version of the hashtable include, as recommended by: + # http://wiki.inkscape.org/wiki/index.php/HashtableFixOSX + # http://permalink.gmane.org/gmane.comp.graphics.inkscape.devel/32966 + # The version from gcc 4.0.4 fixes these four bugs: + # + # GCC Bugzilla Bug 23053 + # Const-correctness issue in TR1 hashtable + # + # + # GCC Bugzilla Bug 23465 + # Assignment fails on TR1 unordered containers + # + # + # GCC Bugzilla Bug 24054 + # std::tr1::unordered_map's erase does not seem to return a value + # + # + # GCC Bugzilla Bug 24064 + # tr1::unordered_map seems to seg-fault when caching hash values + # + + # see also: + # http://wayback.archive.org/web/20100810175143/http://mohri-lt.cs.nyu.edu:80/twiki/bin/view/FST/CompilingOnMacOSX + # (only fixes GCC Bugzilla Bug 23465) + + #curl -A 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6' 'https://gcc.gnu.org/viewcvs/gcc/branches/gcc-4_0-branch/libstdc%2B%2B-v3/include/tr1/hashtable?revision=95538&view=co' -o hashtable-gcc-4.0.0 + #curl -A 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6' 'https://gcc.gnu.org/viewcvs/gcc/branches/gcc-4_0-branch/libstdc%2B%2B-v3/include/tr1/hashtable?revision=104939&view=co' -o hashtable-gcc-4.0.4 + if false; then + # older version of the patch, for the record (only fixes 23053 and 23465) + cat > /tmp/hashtable.patch <, iterator>::type + Insert_Return_Type; + +- node* find_node (node* p, const key_type& k, typename hashtable::hash_code_t c); ++ node* find_node (node* p, const key_type& k, typename hashtable::hash_code_t c) const; + + std::pair insert (const value_type&, std::tr1::true_type); + iterator insert (const value_type&, std::tr1::false_type); +@@ -1042,8 +1042,9 @@ + node* n = ht.m_buckets[i]; + node** tail = m_buckets + i; + while (n) { +- *tail = m_allocate_node (n); +- (*tail).copy_code_from (n); ++ // *tail = m_allocate_node (n); ++ // (*tail).copy_code_from (n); ++ *tail = m_allocate_node (n->m_v); + tail = &((*tail)->m_next); + n = n->m_next; + } +@@ -1216,7 +1217,7 @@ + bool c, bool m, bool u> + typename hashtable::node* + hashtable +-::find_node (node* p, const key_type& k, typename hashtable::hash_code_t code) ++::find_node (node* p, const key_type& k, typename hashtable::hash_code_t code) const + { + for ( ; p ; p = p->m_next) + if (this->compare (k, code, p)) +EOF + fi + fi + + if [ "$osx104" = 1 ]; then + test -d /tmp/XC3-10.4 && rm -rf /tmp/XC3-10.4 + pkgutil --expand "$MNTDIR/Xcode and iOS SDK/Packages/MacOSX10.4.Universal.pkg" /tmp/XC3-10.4 + (cd /tmp/XC3-10.4 || exit; gzip -dc Payload | cpio -id --quiet SDKs/MacOSX10.4u.sdk) + SDKROOT=/tmp/XC3-10.4/SDKs/MacOSX10.4u.sdk + # should we install more than these? (fixed includes?) + # Add links to libstdc++ so that "g++-4.0 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4" works + ln -s ../../../i686-apple-darwin10/4.0.1/libstdc++.dylib $SDKROOT/usr/lib/gcc/i686-apple-darwin10/4.0.1/libstdc++.dylib + # Add links to libstdc++ so that "clang++ -stdlib=libstdc++ -isysroot /Developer/SDKs/MacOSX10.4u.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4" works + ln -s libstdc++.6.dylib $SDKROOT/usr/lib/libstdc++.dylib + # Fix tr1/hashtable + # see http://www.openfst.org/twiki/bin/view/FST/CompilingOnMacOSX https://gcc.gnu.org/ml/libstdc++/2005-08/msg00017.html https://gcc.gnu.org/bugzilla/show_bug.cgi?id=23053 + # in SDKs/MacOSX10.4u.sdk/usr/include/c++/4.0.0/tr1/hashtable + #(cd $SDKROOT/usr/include/c++/4.0.0/tr1 || exit; patch -p0 -d. < /tmp/hashtable.patch) + mv $SDKROOT/usr/include/c++/4.0.0/tr1/hashtable $SDKROOT/usr/include/c++/4.0.0/tr1/hashtable.orig + cp hashtable-gcc-4.0.4 $SDKROOT/usr/include/c++/4.0.0/tr1/hashtable + + # Add links for compatibility with GCC 4.2 + ln -s 4.0.1 $SDKROOT/usr/lib/gcc/i686-apple-darwin10/4.2.1 + ln -s 4.0.1 $SDKROOT/usr/lib/gcc/powerpc-apple-darwin10/4.2.1 + ln -s 4.0.1 $SDKROOT/usr/lib/i686-apple-darwin10/4.2.1 + ln -s 4.0.1 $SDKROOT/usr/lib/powerpc-apple-darwin10/4.2.1 + ln -s 4.0.0 $SDKROOT/usr/include/c++/4.2.1 + + ( (cd /tmp/XC3-10.4 || exit; tar cf - SDKs/MacOSX10.4u.sdk) | gzip -c > Xcode104SDK.tar.gz) && echo "*** Created Xcode104SDK.tar.gz in directory $(pwd)" + rm -rf /tmp/XC3-10.4 + fi + + if [ "$osx105" = 1 ]; then + test -d /tmp/XC3-10.5 && rm -rf /tmp/XC3-10.5 + pkgutil --expand "$MNTDIR/Xcode and iOS SDK/Packages/MacOSX10.5.pkg" /tmp/XC3-10.5 + (cd /tmp/XC3-10.5 || exit; gzip -dc Payload | cpio -id --quiet SDKs/MacOSX10.5.sdk) + SDKROOT=/tmp/XC3-10.5/SDKs/MacOSX10.5.sdk + # should we install more than these? (fixed includes?) + # Add links to libstdc++ so that "g++-4.0 -isysroot /Developer/SDKs/MacOSX10.5.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5" works + ln -s ../../../i686-apple-darwin10/4.0.1/libstdc++.dylib $SDKROOT/usr/lib/gcc/i686-apple-darwin10/4.0.1/libstdc++.dylib + ln -s ../../../i686-apple-darwin10/4.2.1/libstdc++.dylib $SDKROOT/usr/lib/gcc/i686-apple-darwin10/4.2.1/libstdc++.dylib + # Add links to libstdc++ so that "clang++ -stdlib=libstdc++ -isysroot /Developer/SDKs/MacOSX10.5.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5" works + ln -s libstdc++.6.dylib $SDKROOT/usr/lib/libstdc++.dylib + # fix AvailabilityInternal.h (see https://trac.macports.org/wiki/LeopardSDKFixes) + sed -i.orig -e 's/define __MAC_OS_X_VERSION_MAX_ALLOWED __MAC_10_6/define __MAC_OS_X_VERSION_MAX_ALLOWED 1058/' $SDKROOT/usr/include/AvailabilityInternal.h + # Fix tr1/hashtable + # see http://www.openfst.org/twiki/bin/view/FST/CompilingOnMacOSX https://gcc.gnu.org/ml/libstdc++/2005-08/msg00017.html https://gcc.gnu.org/bugzilla/show_bug.cgi?id=23053 + # in SDKs/MacOSX10.5.sdk/usr/include/c++/4.0.0/tr1/hashtable + # this also affects g++-4.2, since usr/include/c++/4.2.1 links to usr/include/c++/4.0.0 + #(cd $SDKROOT/usr/include/c++/4.0.0/tr1 || exit; patch -p0 -d. < /tmp/hashtable.patch) + mv $SDKROOT/usr/include/c++/4.0.0/tr1/hashtable $SDKROOT/usr/include/c++/4.0.0/tr1/hashtable.orig + cp hashtable-gcc-4.0.4 $SDKROOT/usr/include/c++/4.0.0/tr1/hashtable + fi + + if [ "$osx104" = 1 ] || [ "$osx105" = 1 ]; then + true + #rm /tmp/hashtable.patch + fi + + if [ $osx105 = 1 ] || [ $osx106 = 1 ]; then + test -d /tmp/XC3 && rm -rf /tmp/XC3 + pkgutil --expand "$MNTDIR/Xcode and iOS SDK/Packages/MacOSX10.6.pkg" /tmp/XC3 + (cd /tmp/XC3 || exit; gzip -dc Payload | cpio -id --quiet SDKs/MacOSX10.6.sdk) + SDKROOT=/tmp/XC3/SDKs/MacOSX10.6.sdk + # should we install more than these? (fixed includes?) + # Add links to libstdc++ so that "clang++ -stdlib=libstdc++ -isysroot /Developer/SDKs/MacOSX10.6.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.6" works + ln -s libstdc++.6.dylib $SDKROOT/usr/lib/libstdc++.dylib + + # fix buggy hashtable include (see above for explanations) + cp hashtable-gcc-4.0.4 $SDKROOT/usr/include/c++/4.0.0/tr1/hashtable + + if [ "$osx105" = 1 ]; then + # we also need to copy /usr/lib/libgcc_s.10.5.dylib from 10.6 SDK to 10.5SDK, see https://trac.macports.org/wiki/LeopardSDKFixes + # This should fix compiling the following: + # int main() { __uint128_t a = 100; __uint128_t b = 200; __uint128_t c = a / b; return 0; } + # with clang -isysroot /Developer/SDKs/MacOSX10.5.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5 conftest1.c + cp /tmp/XC3-10.5/SDKs/MacOSX10.5.sdk/usr/lib/libgcc_s.10.5.dylib /tmp/XC3-10.5/SDKs/MacOSX10.5.sdk/usr/lib/libgcc_s.10.5.dylib.bak + cp $SDKROOT/usr/lib/libgcc_s.10.5.dylib /tmp/XC3-10.5/SDKs/MacOSX10.5.sdk/usr/lib/libgcc_s.10.5.dylib + + ( (cd /tmp/XC3-10.5 || exit; tar cf - SDKs/MacOSX10.5.sdk) | gzip -c > Xcode105SDK.tar.gz) && echo "*** Created Xcode105SDK.tar.gz in directory $(pwd)" + fi + if [ "$osx106" = 1 ]; then + ( (cd /tmp/XC3 || exit; tar cf - SDKs/MacOSX10.6.sdk) | gzip -c > Xcode106SDK.tar.gz) && echo "*** Created Xcode106SDK.tar.gz in directory $(pwd)" + fi + rm -rf /tmp/XC3-10.5 /tmp/XC3 + fi + hdiutil detach "$MNTDIR/Xcode and iOS SDK" -force + fi + + if [ "$xc4" = 1 ]; then + hdiutil attach xcode4630916281a.dmg "${ATTACH_OPTS[@]}" + if [ ! -d "$MNTDIR/Xcode" ]; then + echo "*** Error while trying to attach disk image xcode4630916281a.dmg" + echo "Aborting" + rmdir "$MNTDIR" + exit + fi + if [ "$osx107" = 1 ]; then + ( (cd "$MNTDIR/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer" || exit; tar cf - SDKs/MacOSX10.7.sdk) | gzip -c > Xcode107SDK.tar.gz) && echo "*** Created Xcode107SDK.tar.gz in directory $(pwd)" + fi + if [ "$compilers" = 1 ]; then + ( (cd "$MNTDIR/Xcode/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins" || exit; tar cf - "GCC 4.2.xcplugin") | gzip -c > XcodePluginGCC42-Xcode4.tar.gz) && echo "*** Created XcodePluginGCC42-Xcode4.tar.gz in directory $(pwd)" + ( (cd "$MNTDIR/Xcode/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins" || exit; tar cf - "LLVM GCC 4.2.xcplugin") | gzip -c > XcodePluginLLVMGCC42.tar.gz) && echo "*** Created XcodePluginLLVMGCC42.tar.gz in directory $(pwd)" + fi + hdiutil detach "$MNTDIR/Xcode" -force + fi + + if [ "$xc5" = 1 ]; then + hdiutil attach xcode_5.1.1.dmg "${ATTACH_OPTS[@]}" + if [ ! -d "$MNTDIR/Xcode" ]; then + echo "*** Error while trying to attach disk image xcode_5.1.1.dmg" + echo "Aborting" + rmdir "$MNTDIR" + exit + fi + if [ "$osx108" = 1 ]; then + ( (cd "$MNTDIR/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer" || exit; tar cf - SDKs/MacOSX10.8.sdk) | gzip -c > Xcode108SDK.tar.gz) && echo "*** Created Xcode108SDK.tar.gz in directory $(pwd)" + fi + hdiutil detach "$MNTDIR/Xcode" -force + fi + + if [ "$xc6" = 1 ]; then + hdiutil attach Xcode_6.4.dmg "${ATTACH_OPTS[@]}" + if [ ! -d "$MNTDIR/Xcode" ]; then + echo "*** Error while trying to attach disk image Xcode_6.4.dmg" + echo "Aborting" + rmdir "$MNTDIR" + exit + fi + if [ "$osx109" = 1 ]; then + ( (cd "$MNTDIR/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer" || exit; tar cf - SDKs/MacOSX10.9.sdk) | gzip -c > Xcode109SDK.tar.gz) && echo "*** Created Xcode109SDK.tar.gz in directory $(pwd)" + fi + if [ "$osx1010" = 1 ]; then + ( (cd "$MNTDIR/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer" || exit; tar cf - SDKs/MacOSX10.10.sdk) | gzip -c > Xcode1010SDK.tar.gz) && echo "*** Created Xcode1010SDK.tar.gz in directory $(pwd)" + fi + hdiutil detach "$MNTDIR/Xcode" -force + fi + if [ "$xc7" = 1 ]; then + hdiutil attach Xcode_7.3.1.dmg "${ATTACH_OPTS[@]}" + if [ ! -d "$MNTDIR/Xcode" ]; then + echo "*** Error while trying to attach disk image Xcode_7.3.1.dmg" + echo "Aborting" + rmdir "$MNTDIR" + exit + fi + if [ "$osx1011" = 1 ]; then + ( (cd "$MNTDIR/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer" || exit; tar cf - SDKs/MacOSX10.11.sdk) | gzip -c > Xcode1011SDK.tar.gz) && echo "*** Created Xcode1011SDK.tar.gz in directory $(pwd)" + fi + hdiutil detach "$MNTDIR/Xcode" -force + fi + if [ "$xc8" = 1 ]; then + if [ "$osx1012" = 1 ]; then + echo "Extracting Mac OS X 10.12 SDK from Xcode 8.3.3. Be patient - this will take some time" + open Xcode8.3.3.xip + while [ ! -d Xcode.app ]; do + sleep 5 + done + sleep 5 + ( (cd "Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer" || exit; rm SDKs/MacOSX10.12.sdk; mv SDKs/MacOSX.sdk SDKs/MacOSX10.12.sdk; tar cf - SDKs/MacOSX10.12.sdk) | gzip -c > Xcode1012SDK.tar.gz) && echo "*** Created Xcode1012SDK.tar.gz in directory $(pwd)" + rm -rf Xcode.app + fi + fi + if [ "$xc9" = 1 ]; then + if [ "$osx1013" = 1 ]; then + echo "Extracting Mac OS X 10.13 SDK from Xcode 9.4.1. Be patient - this will take some time" + open Xcode_9.4.1.xip + while [ ! -d Xcode.app ]; do + sleep 5 + done + sleep 5 + ( (cd "Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer" || exit; rm SDKs/MacOSX10.13.sdk; mv SDKs/MacOSX.sdk SDKs/MacOSX10.13.sdk; tar cf - SDKs/MacOSX10.13.sdk) | gzip -c > Xcode1013SDK.tar.gz) && echo "*** Created Xcode1013SDK.tar.gz in directory $(pwd)" + rm -rf Xcode.app + fi + fi + rmdir "$MNTDIR" + ;; + + install|installbeta) + ####################### + # PHASE 2: INSTALLING + # + if [ $EUID -ne 0 ]; then + echo "*** Error: The install phase requires administrative rights. Please run it as:" + echo " $ sudo $0 install" + exit 1 + fi + if [ ! -d "$PLUGINDIR" ]; then + echo "*** Error: could not find Xcode 4.2 in /Developer/Applications nor Xcode >= 4.3 in /Applications, cannot install" + exit 1 + fi + if [ "$compilers" = 1 ]; then + if [ -d "$PLUGINDIR/GCC 4.0.xcplugin" ]; then + echo "*** Not installing XcodePluginGCC40.tar.gz (found installed in $PLUGINDIR/GCC 4.0.xcplugin, uninstall first to force install)" + else + (gzip -dc XcodePluginGCC40.tar.gz | (cd "$PLUGINDIR" || exit; tar xf -)) && touch "$PLUGINDIR/GCC 4.0.xcplugin/legacy" && echo "*** installed XcodePluginGCC40.tar.gz" + # Add entries expected by later xcodebuilds. + mv "$PLUGINDIR/GCC 4.0.xcplugin/Contents/Resources/GCC 4.0.xcspec" "$PLUGINDIR/GCC 4.0.xcplugin/Contents/Resources/GCC 4.0.xcspec-original" + sed '$ i\ +\ ExecDescription = \"Compile \$\(InputFile\)\"\;\ +\ ProgressDescription = \"Compiling \$\(InputFile\)\"\;\ +\ ExecDescriptionForPrecompile = \"Precompile \$\(InputFile\)\"\;\ +\ ProgressDescriptionForPrecompile = \"Precompiling \$\(InputFile\)\"\; +' < "$PLUGINDIR/GCC 4.0.xcplugin/Contents/Resources/GCC 4.0.xcspec-original" > "$PLUGINDIR/GCC 4.0.xcplugin/Contents/Resources/GCC 4.0.xcspec" + + echo "*** modified GCC 4.0.xcspec" + fi + if [ -d "$PLUGINDIR/GCC 4.2.xcplugin" ] && [ ! -f "$PLUGINDIR/GCC 4.2.xcplugin/Contents/Resources/GCC Generic.xcspec" ]; then + echo "*** Not installing XcodePluginGCC42.tar.gz (found installed in $PLUGINDIR/GCC 4.2.xcplugin, uninstall first to force install)" + else + if [ -f "$PLUGINDIR/GCC 4.2.xcplugin/Contents/Resources/GCC Generic.xcspec" ]; then + mv "$PLUGINDIR/GCC 4.2.xcplugin" "$PLUGINDIR/GCC 4.2.xcplugin-original" + fi + (gzip -dc XcodePluginGCC42.tar.gz | (cd "$PLUGINDIR" || exit; tar xf -)) && touch "$PLUGINDIR/GCC 4.2.xcplugin/legacy" && echo "*** installed XcodePluginGCC42.tar.gz" + # Add entries expected by later xcodebuilds. + mv "$PLUGINDIR/GCC 4.2.xcplugin/Contents/Resources/GCC 4.2.xcspec" "$PLUGINDIR/GCC 4.2.xcplugin/Contents/Resources/GCC 4.2.xcspec-original" + sed '$ i\ +\ ExecDescription = \"Compile \$\(InputFile\)\"\;\ +\ ProgressDescription = \"Compiling \$\(InputFile\)\"\;\ +\ ExecDescriptionForPrecompile = \"Precompile \$\(InputFile\)\"\;\ +\ ProgressDescriptionForPrecompile = \"Precompiling \$\(InputFile\)\"\; +' < "$PLUGINDIR/GCC 4.2.xcplugin/Contents/Resources/GCC 4.2.xcspec-original" > "$PLUGINDIR/GCC 4.2.xcplugin/Contents/Resources/GCC 4.2.xcspec" + echo "*** modified GCC 4.2.xcspec" + fi + if [ -d "$PLUGINDIR/LLVM GCC 4.2.xcplugin" ]; then + echo "*** Not installing XcodePluginLLVMGCC42.tar.gz (found installed in $PLUGINDIR/LLVM GCC 4.2.xcplugin, uninstall first to force install)" + else + (gzip -dc XcodePluginLLVMGCC42.tar.gz | (cd "$PLUGINDIR" || exit; tar xf -)) && touch "$PLUGINDIR/LLVM GCC 4.2.xcplugin/legacy" && echo "*** installed XcodePluginLLVMGCC42.tar.gz" + fi + + if [ -f "$GCCDIR/usr/libexec/gcc/darwin/ppc/as" ]; then + echo "*** Not installing Xcode3as.tar.gz (found installed in $GCCDIR/usr/libexec/gcc/darwin/ppc/as, uninstall first to force install)" + else + (gzip -dc Xcode3as.tar.gz | (cd "$GCCDIR" || exit; tar xf -)) + mkdir -p "$GCCINSTALLDIR/usr/bin" + mkdir -p "$GCCINSTALLDIR/usr/libexec/as/ppc" + mkdir -p "$GCCINSTALLDIR/usr/libexec/as/ppc64" + mkdir -p "$GCCINSTALLDIR/usr/libexec/as/i386" + mkdir -p "$GCCINSTALLDIR/usr/libexec/as/x86_64" + ln -sf "$GCCDIR/usr/libexec/gcc/darwin/ppc/as" "$GCCINSTALLDIR/usr/libexec/as/ppc/as" + ln -sf "$GCCDIR/usr/libexec/gcc/darwin/ppc64/as" "$GCCINSTALLDIR/usr/libexec/as/ppc64/as" + # Xcodes >= 4 already include an acceptable GNU legacy assembler + # (v1.38) for i386 and x86_64 in $GCCINSTALLDIR/usr/libexec/as. + # When they no longer do, enable these links (conditionally, + # of course). + #ln -sf "$GCCDIR/usr/libexec/gcc/darwin/i386/as" "$GCCINSTALLDIR/usr/libexec/as/i386/as" + #ln -sf "$GCCDIR/usr/libexec/gcc/darwin/x86_64/as" "$GCCINSTALLDIR/usr/libexec/as/x86_64/as" + + # Replace Xcode's modern toolchain assembler with a script + # that auto-selects the proper legacy assembler based on the + # command line's -arch parameter. Using a legacy assembler fixes + # "ld: too many personality routines for compact unwind" errors + # and "section '__textcoal_nt' is deprecated" warnings emitted + # by Xcode 7+ assemblers. + # First, though, don't overwrite the original assembler if + # XcodeLegacy is installed twice. + if [ -f "$GCCINSTALLDIR/usr/bin/as" ] && [ ! -f "$GCCINSTALLDIR/usr/bin/as-original" ]; then + mv "$GCCINSTALLDIR/usr/bin/as" "$GCCINSTALLDIR/usr/bin/as-original" + fi + # NB: While only gcc uses the assembler in our builds (it pipes the + # output of usr/libexec/gcc/*-apple-darwin10/4.*/ccobj1plus into + # usr/libexec/gcc/*-apple-darwin10/4.*/as -> usr/bin/as), we can't + # simply change the link to, say, usr/libexec/gcc/darwin/i386/as + # because the assembler seems to want the -arch parameter to match + # its containing folder. Hence, a script (like for ld, below). + # NB: To keep it simple, the script assumes that anyone invoking + # the toolchain's usr/bin/as wants to use Xcode 3's assembler. + # NB: AS_DIR resolves as the directory of the (source) link that + # invoked the script. + + # Note that we don't look for AS in $AS_DIR/../libexec/as/\$ARCH/as + # because gprbuild (from GNU Ada) calls as with both -m and -arch + # flags, and the arch-specific as doesn'b understand -m32 or -m64. + # We just look for as in a few places, and if it's not there, we + # look for as-original, starting in the current dir. + # In any case, we prune -m32 and -m64 from the as args. + # see https://github.com/devernay/xcodelegacy/issues/33 + cat <> "$GCCINSTALLDIR"/usr/bin/as +#!/bin/bash + +ARCH='' +ARCH_FOUND=0 +AS_ARGS=() +for var in "\$@" +do + if [ -z "\$ARCH" ] && [ "\$ARCH_FOUND" -eq '1' ]; then + ARCH="\$var" + AS_ARGS+=("\$var") + elif [ "\$var" = '-arch' ]; then + ARCH_FOUND=1 + AS_ARGS+=("\$var") + elif [ "\$var" = '-m32' ]; then + true + elif [ "\$var" = '-m64' ]; then + true + else + AS_ARGS+=("\$var") + fi +done + +AS_DIR=\`dirname "\$0"\` +AS_FOUND=0 +if [ "\$ARCH_FOUND" -eq '1' ]; then + if [ -x "\$AS_DIR/../../../as/\$ARCH/as" ]; then + AS="\$AS_DIR/../../../as/\$ARCH/as" + AS_FOUND=1 + elif [ -x "\$AS_DIR/../../../../../libexec/as/\$ARCH/as" ]; then + AS="\$AS_DIR/../../../../../libexec/as/\$ARCH/as" + AS_FOUND=1 + elif [ -x "\$AS_DIR/../../../../../../../usr/libexec/as/\$ARCH/as" ]; then + AS="\$AS_DIR/../../../../../../../usr/libexec/as/\$ARCH/as" + AS_FOUND=1 + fi +fi +if [ "\$AS_FOUND" -eq '1' ]; then + exec \$AS "\${AS_ARGS[@]}" +else + if [ -x "\$AS_DIR/as-original" ]; then + ASORIGINAL="\$AS_DIR/as-original" + elif [ -x "\$AS_DIR/../../../bin/as-original" ]; then + ASORIGINAL="\$AS_DIR/../../../bin/as-original" + elif [ -x "\$AS_DIR/../../../../bin/as-original" ]; then + ASORIGINAL="\$AS_DIR/../../../../bin/as-original" + elif [ -x "\$AS_DIR/../../../../../bin/as-original" ]; then + ASORIGINAL="\$AS_DIR/../../../../../bin/as-original" + else + echo "Error: cannot find as-original in \$AS_DIR/as-original or \$AS_DIR/../../../bin/as-original or \$AS_DIR/../../../../bin/as-original or \$AS_DIR/../../../../../bin/as-original" + exit 1 + fi + + exec \$ASORIGINAL "\$@" +fi +AS_EOF + chmod +x "$GCCINSTALLDIR/usr/bin/as" + echo "*** installed Xcode3as.tar.gz" + fi + + if [ -f "$GCCDIR/usr/libexec/gcc/darwin/ppc/ld" ]; then + echo "*** Not installing Xcode3ld.tar.gz (found installed in $GCCDIR/usr/libexec/gcc/darwin/ppc/ld, uninstall first to force install)" + elif [ $XCODE42 -eq 1 ]; then + echo "*** Not installing Xcode3ld.tar.gz (not required for Xcode <= 4.2.1)" + else + mkdir -p "$GCCDIR/tmp" + (gzip -dc Xcode3ld.tar.gz | (cd "$GCCDIR/tmp" || exit; tar xf -)) + cp "$GCCDIR/tmp/usr/bin/ld" "$GCCDIR/usr/libexec/gcc/darwin/ppc/" + ln "$GCCDIR/usr/libexec/gcc/darwin/ppc/ld" "$GCCDIR/usr/libexec/gcc/darwin/ppc64/ld" + rm -rf "$GCCDIR/tmp" + mkdir -p "$GCCINSTALLDIR/usr/libexec/ld/ppc" + mkdir -p "$GCCINSTALLDIR/usr/libexec/ld/ppc7400" + mkdir -p "$GCCINSTALLDIR/usr/libexec/ld/ppc970" + mkdir -p "$GCCINSTALLDIR/usr/libexec/ld/ppc64" + ln -sf "$GCCDIR/usr/libexec/gcc/darwin/ppc/ld" "$GCCINSTALLDIR/usr/libexec/ld/ppc/ld" + ln -sf "$GCCDIR/usr/libexec/gcc/darwin/ppc/ld" "$GCCINSTALLDIR/usr/libexec/ld/ppc7400/ld" + ln -sf "$GCCDIR/usr/libexec/gcc/darwin/ppc/ld" "$GCCINSTALLDIR/usr/libexec/ld/ppc970/ld" + ln -sf "$GCCDIR/usr/libexec/gcc/darwin/ppc64/ld" "$GCCINSTALLDIR/usr/libexec/ld/ppc64/ld" + # Xcode 8's ld fails to link i386 and x86_64 for OSX 10.5: https://github.com/devernay/xcodelegacy/issues/30 + # Since this ld is from Xcode 3.2.6 for OSX 10.6, this should be OK if the target OS is < 10.6 + # (which is checked by the stub ld script) + for arch in i386 x86_64; do + mkdir -p "$GCCDIR/usr/libexec/gcc/darwin/$arch" + ln "$GCCDIR/usr/libexec/gcc/darwin/ppc/ld" "$GCCDIR/usr/libexec/gcc/darwin/$arch/ld" + mkdir -p "$GCCINSTALLDIR/usr/libexec/ld/$arch" + ln -sf "$GCCDIR/usr/libexec/gcc/darwin/$arch/ld" "$GCCINSTALLDIR/usr/libexec/ld/$arch/ld" + done + # prevent overwriting the original ld if the script is run twice + if [ ! -f "$GCCINSTALLDIR/usr/bin/ld-original" ]; then + mv "$GCCINSTALLDIR/usr/bin/ld" "$GCCINSTALLDIR/usr/bin/ld-original" + fi + cat <> "$GCCINSTALLDIR"/usr/bin/ld +#!/bin/bash + +ARCH='' +ARCH_FOUND=0 +for var in "\$@" +do + if [ "\$ARCH_FOUND" -eq '1' ]; then + ARCH=\$var + ARCH_FOUND=2 + break + else + case "\$var" in + -mmacosx-version-min=10.[0-6]) + MACOSX_DEPLOYMENT_TARGET=\$( echo \$var | sed -e s/-mmacosx-version-min=// ) + ;; + -arch) + if [ "\$ARCH_FOUND" -ne '0' ]; then + echo "Warning: ld: multiple -arch flags" + fi + ARCH_FOUND=1 + ;; + esac + fi +done + +# use the old (Snow Leopard 10.6) ld only if ppc arch or the target macOS is <= 10.6 +USE_OLD_LD=0 +case "\$ARCH" in + ppc*) #ppc ppc7400 ppc970 ppc64 + USE_OLD_LD=1 + ;; +esac + +if [ -n \${MACOSX_DEPLOYMENT_TARGET+x} ]; then + # MACOSX_DEPLOYMENT_TARGET can either be set externally as an env variable, + # or as an ld option using -mmacosx-version-min=10.x + case "\${MACOSX_DEPLOYMENT_TARGET}" in + 10.[0-6]) + USE_OLD_LD=1 + ;; + esac +fi + +#echo "Running ld for \$ARCH ..." + +LD_DIR=\`dirname "\$0"\` +if [ -x "\$LD_DIR/ld-original" ]; then + LDORIGINAL="\$LD_DIR/ld-original" +elif [ -x "\$LD_DIR/../../../../bin/ld-original" ]; then + LDORIGINAL="\$LD_DIR/../../../../bin/ld-original" +elif [ -x "\$LD_DIR/../../../../../bin/ld-original" ]; then + LDORIGINAL="\$LD_DIR/../../../../../bin/ld-original" +else + echo "Error: cannot find ld-original in \$LD_DIR \$LD_DIR/../../../../bin or \$LD_DIR/../../../../../bin" + exit 1 +fi +LD_RESULT=255 +if [ "\$USE_OLD_LD" -eq '1' ]; then + ARGS=() + # strip the -dependency_info xxx, -object_path_lto xxx, -no_deduplicate, -export_dynamic flags + DEPINFO_FOUND=0 + OBJECT_PATH_LTO_FOUND=0 + for var in "\$@"; do + if [ "\$DEPINFO_FOUND" -eq '1' ]; then + DEPINFO_FOUND=0 + continue + elif [ "\$OBJECT_PATH_LTO_FOUND" -eq '1' ]; then + OBJECT_PATH_LTO_FOUND=0 + continue + elif [ "\$var" = '-dependency_info' ]; then + DEPINFO_FOUND=1 + continue + elif [ "\$var" = '-object_path_lto' ]; then + OBJECT_PATH_LTO_FOUND=1 + continue + elif [ "\$var" = '-no_deduplicate' ]; then + continue + elif [ "\$var" = '-export_dynamic' ]; then + continue + fi + + ARGS+=("\$var") + done + # the old ld is put in the ppc dir so as not to disturb more recent archs (i386, x86_64) + # works with ppc ppc7400 ppc970 ppc64 i386 x86_64 + LDARCHDIR=ppc + if [ -x "\$LD_DIR/../libexec/ld/\$LDARCHDIR/ld" ]; then + LD="\$LD_DIR/../libexec/ld/\$LDARCHDIR/ld" + elif [ -x "\$LD_DIR/../../../libexec/ld/\$LDARCHDIR/ld" ]; then + LD="\$LD_DIR/../../../libexec/ld/\$LDARCHDIR/ld" + elif [ -x "\$LD_DIR/../../../../libexec/ld/\$LDARCHDIR/ld" ]; then + LD="\$LD_DIR/../../../../libexec/ld/\$LDARCHDIR/ld" + elif [ -x "\$LD_DIR/../../../../../libexec/ld/\$LDARCHDIR/ld" ]; then + LD="\$LD_DIR/../../../../../libexec/ld/\$LDARCHDIR/ld" + else + echo "Error: cannot find ld for \$ARCH in \$LD_DIR/../libexec/ld/\$LDARCHDIR \$LD_DIR/../../../libexec/ld/\$LDARCHDIR \$LD_DIR/../../../../libexec/ld/\$LDARCHDIR or \$LD_DIR/../../../../../libexec/ld/\$LDARCHDIR" + exit 1 + fi + + \`\$LD "\${ARGS[@]}"\` + LD_RESULT=\$? +else + \`\$LDORIGINAL "\$@"\` + LD_RESULT=\$? +fi + +exit \$LD_RESULT +LD_EOF + chmod +x "$GCCINSTALLDIR/usr/bin/ld" + echo "*** installed Xcode3ld.tar.gz" + fi + + if [ -f "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec-original" ]; then + echo "*** Not modifying MacOSX Architectures.xcspec (found original at $PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec-original, uninstall first to force install)" + else + mv "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec" "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec-original" + { awk 'NR>1{print l}{l=$0}' "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec-original"; cat - < "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec" + { + Type = Architecture; + Identifier = ppc; + Name = "Minimal (32-bit PowerPC only)"; + Description = "32-bit PowerPC"; + "PerArchBuildSettingName" = PowerPC; + ByteOrder = big; + ListInEnum = YES; + SortNumber = 201; + }, + { + Type = Architecture; + Identifier = ppc7400; + Name = "PowerPC G4"; + Description = "32-bit PowerPC for G4 processor"; + ByteOrder = big; + ListInEnum = YES; + SortNumber = 202; + }, + { + Type = Architecture; + Identifier = ppc970; + Name = "PowerPC G5 32-bit"; + Description = "32-bit PowerPC for G5 processor"; + ByteOrder = big; + ListInEnum = YES; + SortNumber = 203; + }, + { + Type = Architecture; + Identifier = ppc64; + Name = "PowerPC 64-bit"; + Description = "64-bit PowerPC"; + "PerArchBuildSettingName" = "PowerPC 64-bit"; + ByteOrder = big; + ListInEnum = YES; + SortNumber = 204; + }, +) +SPEC_EOF + echo "*** modified MacOSX Architectures.xcspec" + fi + fi + + if [ "$osx104" = 1 ]; then + if [ -d "$SDKDIR/SDKs/MacOSX10.4u.sdk" ]; then + echo "*** Not installing Xcode104SDK.tar.gz (found installed in $SDKDIR/SDKs/MacOSX10.4u.sdk, uninstall first to force install)" + else + (gzip -dc Xcode104SDK.tar.gz | (cd "$SDKDIR" || exit; tar xf -)) && echo "*** installed Xcode104SDK.tar.gz" + touch "$SDKDIR/SDKs/MacOSX10.4u.sdk/legacy" + fi + fi + + if [ "$osx105" = 1 ]; then + if [ -d "$SDKDIR/SDKs/MacOSX10.5.sdk" ]; then + echo "*** Not installing Xcode105SDK.tar.gz (found installed in $SDKDIR/SDKs/MacOSX10.5.sdk, uninstall first to force install)" + else + (gzip -dc Xcode105SDK.tar.gz | (cd "$SDKDIR" || exit; tar xf -)) && echo "*** installed Xcode105SDK.tar.gz" + touch "$SDKDIR/SDKs/MacOSX10.5.sdk/legacy" + fi + fi + + if [ "$osx106" = 1 ]; then + if [ -d "$SDKDIR/SDKs/MacOSX10.6.sdk" ]; then + echo "*** Not installing Xcode106SDK.tar.gz (found installed in $SDKDIR/SDKs/MacOSX10.6.sdk, uninstall first to force install)" + else + (gzip -dc Xcode106SDK.tar.gz | (cd "$SDKDIR" || exit; tar xf -)) && echo "*** installed Xcode106SDK.tar.gz" + touch "$SDKDIR/SDKs/MacOSX10.6.sdk/legacy" + fi + fi + + if [ "$osx107" = 1 ]; then + installSDK 10.7 + fi + + if [ "$osx108" = 1 ]; then + installSDK 10.8 + fi + + if [ "$osx109" = 1 ]; then + installSDK 10.9 + fi + + if [ "$osx1010" = 1 ]; then + installSDK 10.10 + fi + + if [ "$osx1011" = 1 ]; then + installSDK 10.11 + fi + + if [ "$osx1012" = 1 ]; then + installSDK 10.12 + fi + + if [ "$osx1013" = 1 ]; then + installSDK 10.13 + fi + + if [ "$compilers" = 1 ]; then + if [ -f /usr/bin/gcc-4.0 ]; then + #echo "*** Not installing xcode_3.2.6_gcc4.0.pkg (found installed in /usr/bin/gcc-4.0, uninstall first to force install)" + echo "*** Not installing Xcode3gcc40.tar.gz (found installed in /usr/bin/gcc-4.0, uninstall first to force install)" + elif [ -f "$GCCINSTALLDIR/usr/bin/gcc-4.0" ]; then + echo "*** Not installing Xcode3gcc40.tar.gz (found installed in $GCCINSTALLDIR/usr/bin/gcc-4.0, uninstall first to force install)" + else + echo "*** Installing GCC 4.0" + #installer -pkg xcode_3.2.6_gcc4.0.pkg -target / + (gzip -dc Xcode3gcc40.tar.gz | (cd "$GCCINSTALLDIR" || exit; tar xf -)) && echo "*** installed Xcode3gcc40.tar.gz" + fi + if [ -f /usr/bin/gcc-4.2 ]; then + #echo "*** Not installing xcode_3.2.6_gcc4.2.pkg (found installed in /usr/bin/gcc-4.2, uninstall first to force install)" + echo "*** Not installing Xcode3gcc42.tar.gz (found installed in /usr/bin/gcc-4.2, uninstall first to force install)" + elif [ -f "$GCCINSTALLDIR/usr/bin/gcc-4.2" ]; then + echo "*** Not installing Xcode3gcc42.tar.gz (found installed in $GCCINSTALLDIR/usr/bin/gcc-4.2, uninstall first to force install)" + else + echo "*** Installing GCC 4.2" + #installer -pkg xcode_3.2.6_gcc4.2.pkg -target / + (gzip -dc Xcode3gcc42.tar.gz | (cd "$GCCINSTALLDIR" || exit; tar xf -)) && echo "*** installed Xcode3gcc42.tar.gz" + fi + if [ -f "$GCCINSTALLDIR/usr/bin/llvm-gcc-4.2" ]; then + echo "*** Not installing Xcode3llvmgcc42.tar.gz (found installed in $GCCINSTALLDIR/usr/bin/llvm-gcc-4.2, uninstall first to force install)" + else + echo "*** Installing LLVM GCC 4.2" + #installer -pkg xcode_3.2.6_llvm-gcc4.2.pkg -target / + (gzip -dc Xcode3llvmgcc42.tar.gz | (cd "$GCCINSTALLDIR" || exit; tar xf -)) && echo "*** installed Xcode3llvmgcc42.tar.gz" + if [ -f "$GCCDIR/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2" ]; then + for i in g++ gcc; do + ln -sf "$GCCINSTALLDIR"/usr/bin/powerpc-apple-darwin10-llvm-${i}-4.2 "$GCCDIR"/usr/bin/powerpc-apple-darwin"$RELEASENUM"-llvm-${i}-4.2 + ln -sf "$GCCINSTALLDIR"/usr/llvm-gcc-4.2/bin/powerpc-apple-darwin10-llvm-${i}-4.2 "$GCCDIR"/usr/llvm-gcc-4.2/bin/powerpc-apple-darwin"$RELEASENUM"-llvm-${i}-4.2 + ln -sf "$GCCINSTALLDIR"/usr/llvm-gcc-4.2/share/man/man1/powerpc-apple-darwin10-llvm-${i}.1.gz "$GCCDIR"/usr/llvm-gcc-4.2/share/man/man1/powerpc-apple-darwin"$RELEASENUM"-llvm-${i}.1.gz + done + ln -sf "$GCCINSTALLDIR"/usr/llvm-gcc-4.2/lib/gcc/powerpc-apple-darwin10 "$GCCDIR"/usr/llvm-gcc-4.2/lib/gcc/powerpc-apple-darwin10 + ln -sf "$GCCINSTALLDIR"/usr/llvm-gcc-4.2/libexec/gcc/powerpc-apple-darwin10 "$GCCDIR"/usr/llvm-gcc-4.2/libexec/gcc/powerpc-apple-darwin10 + fi + fi + + echo "*** Creating symbolic links to compliers in $GCCDIR and $GCCLINKDIR:" + if [ ! -d "$GCCDIR"/usr/bin ]; then + mkdir -p "$GCCDIR"/usr/bin + fi + if [ ! -d "$GCCLINKDIR"/bin ]; then + mkdir -p "$GCCLINKDIR"/bin + fi + for v in 4.0 4.2 4.0.1 4.2.1; do + for i in c++ cpp g++ gcc gcov llvm-cpp llvm-g++ llvm-gcc; do + for p in i686-apple-darwin10- powerpc-apple-darwin10- ""; do + if [ -f "$GCCINSTALLDIR"/usr/bin/${p}${i}-${v} ]; then + echo "$GCCINSTALLDIR"/usr/bin/${p}${i}-${v} exists + if [ ! -f "$GCCLINKDIR"/bin/${p}${i}-${v} ]; then + echo "* creating link $GCCLINKDIR/bin/${p}${i}-${v}" + ln -sf "$GCCINSTALLDIR"/usr/bin/${p}${i}-${v} "$GCCLINKDIR"/bin/${p}${i}-${v} + fi + if [ ! -f "$GCCDIR"/usr/bin/${p}${i}-${v} ]; then + echo "* creating link $GCCDIR/usr/bin/${p}${i}-${v}" + ln -sf "$GCCINSTALLDIR"/usr/bin/${p}${i}-${v} "$GCCDIR"/usr/bin/${p}${i}-${v} + fi + fi + done + done + done + # fix /usr/bin/gcc, see https://github.com/devernay/xcodelegacy/issues/19 + if [ -x /usr/bin/gcc ] && [ ! -x "$GCCINSTALLDIR/usr/bin/gcc" ] && [ -x "$GCCINSTALLDIR/usr/bin/clang" ]; then + # "xcode-select -r" sets /usr/bin/gcc to be the first gcc found in $GCCINSTALLDIR, which happens to be + # the directory $GCCINSTALLDIR/usr/libexec/gcc, and results in the following error: + # $ gcc + # gcc: error: can't exec '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/libexec/gcc' (errno=Permission denied) + # by putting a link to clang (which is the default Xcode behavior), we fix this + ln -s clang "$GCCINSTALLDIR/usr/bin/gcc" + # run gcc once so that xcode-select finds the right file for gcc + gcc 1>/dev/null 2>/dev/null + fi + fi + + # Xcode >= 7.3 disables support for older SDKs in /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Info.plist + # see https://github.com/devernay/xcodelegacy/issues/23 + if [ -f "$PLATFORMDIR/Info.plist-original" ]; then + echo "*** Not modifying MacOSX Info.plist (found original at $PLATFORMDIR/Info.plist-original, uninstall first to force install)" + elif [ -f "$PLATFORMDIR/Info.plist" ]; then + mv "$PLATFORMDIR/Info.plist" "$PLATFORMDIR/Info.plist-original" + plutil -remove MinimumSDKVersion -o "$PLATFORMDIR/Info.plist" "$PLATFORMDIR/Info.plist-original" + echo "*** modified MacOSX Info.plist" + fi + + if [ ! -L /Developer/SDKs ] && [ $XCODE42 -ne 1 ]; then + echo "*** Warning: /Developer/SDKs should be a symlink to $SDKDIR/SDKs" + echo "Check that /Developer exists, and fix /Developer/SDKs with:" + echo " $ sudo ln -sf '$SDKDIR/SDKs' /Developer/SDKs" + fi + ;; + + cleanpackages) + ####################### + # PHASE 3: CLEANING + # + + if [ "$compilers" = 1 ]; then + rm XcodePluginGCC40.tar.gz Xcode3as.tar.gz Xcode3ld.tar.gz xcode_3.2.6_gcc4.0.pkg xcode_3.2.6_gcc4.2.pkg xcode_3.2.6_llvm-gcc4.2.pkg XcodePluginGCC42-Xcode4.tar.gz XcodePluginGCC42.tar.gz XcodePluginLLVMGCC42.tar.gz Xcode3gcc40.tar.gz Xcode3gcc42.tar.gz Xcode3llvmgcc42.tar.gz 2>/dev/null + fi + #for i in 10.4u 10.5 10.6 10.7 10.8 10.9 10.10; do + if [ "$osx104" = 1 ]; then + rm Xcode104SDK.tar.gz 2>/dev/null + fi + if [ "$osx105" = 1 ]; then + rm Xcode105SDK.tar.gz 2>/dev/null + fi + if [ "$osx106" = 1 ]; then + rm Xcode106SDK.tar.gz 2>/dev/null + fi + if [ "$osx107" = 1 ]; then + rm Xcode107SDK.tar.gz 2>/dev/null + fi + if [ "$osx108" = 1 ]; then + rm Xcode108SDK.tar.gz 2>/dev/null + fi + if [ "$osx109" = 1 ]; then + rm Xcode109SDK.tar.gz 2>/dev/null + fi + if [ "$osx1010" = 1 ]; then + rm Xcode1010SDK.tar.gz 2>/dev/null + fi + if [ "$osx1011" = 1 ]; then + rm Xcode1011SDK.tar.gz 2>/dev/null + fi + if [ "$osx1012" = 1 ]; then + rm Xcode1012SDK.tar.gz 2>/dev/null + fi + if [ "$osx1012" = 1 ]; then + rm Xcode1013SDK.tar.gz 2>/dev/null + fi + + ;; + + uninstall|uninstallbeta) + ####################### + # PHASE 4: UNINSTALLING + # + if [ $EUID -ne 0 ]; then + echo "*** Error: The uninstall phase requires administrative rights. Please run it as:" + echo " $ sudo $0 uninstall" + exit 1 + fi + + if [ "$compilers" = 1 ]; then + if [ -f "$PLUGINDIR/GCC 4.0.xcplugin/legacy" ]; then + rm -rf "$PLUGINDIR/GCC 4.0.xcplugin" + fi + if [ -f "$PLUGINDIR/GCC 4.2.xcplugin/legacy" ]; then + rm -rf "$PLUGINDIR/GCC 4.2.xcplugin" + fi + if [ -d "$PLUGINDIR/GCC 4.2.xcplugin-original" ]; then + mv "$PLUGINDIR/GCC 4.2.xcplugin-original" "$PLUGINDIR/GCC 4.2.xcplugin" + fi + if [ -f "$PLUGINDIR/LLVM GCC 4.2.xcplugin/legacy" ]; then + rm -rf "$PLUGINDIR/LLVM GCC 4.2.xcplugin" + fi + for f in "$GCCDIR/usr/libexec/gcc/darwin/ppc" \ + "$GCCDIR/usr/libexec/gcc/darwin/ppc64" \ + "$GCCDIR/usr/libexec/gcc/darwin/i386" \ + "$GCCDIR/usr/libexec/gcc/darwin/x86_64" \ + "$GCCINSTALLDIR/usr/libexec/as/ppc" \ + "$GCCINSTALLDIR/usr/libexec/as/ppc64" \ + "$GCCINSTALLDIR/usr/libexec/ld/ppc" \ + "$GCCINSTALLDIR/usr/libexec/ld/ppc7400" \ + "$GCCINSTALLDIR/usr/libexec/ld/ppc970" \ + "$GCCINSTALLDIR/usr/libexec/ld/ppc64" \ + "$GCCINSTALLDIR/usr/libexec/ld/i386" \ + "$GCCINSTALLDIR/usr/libexec/ld/x86_64"; do + if [ -e "$f" ]; then + rm -rf "$f" + fi + done + if [ -f "$GCCINSTALLDIR/usr/bin/as-original" ]; then + rm "$GCCINSTALLDIR/usr/bin/as" + mv -f "$GCCINSTALLDIR/usr/bin/as-original" "$GCCINSTALLDIR/usr/bin/as" + fi + if [ -f "$GCCINSTALLDIR/usr/bin/ld-original" ]; then + rm "$GCCINSTALLDIR/usr/bin/ld" + mv -f "$GCCINSTALLDIR/usr/bin/ld-original" "$GCCINSTALLDIR/usr/bin/ld" + fi + # preserve original LLVM-GCC on Xcode 4 and earlier + if [ ! -d "$GCCDIR/Library/Perl" ] || [ -d "$GCCDIR/Library/Perl/5.10" ]; then + mv "$GCCDIR"/usr/bin/{gcov,i686-apple-darwin"$RELEASENUM"-llvm-g{++,cc},llvm-{cpp,g++,gcc}}-4.2 "$GCCDIR" + (cd "$GCCDIR" || exit; rm -rf $GCCFILES ) + mv "$GCCDIR"/*-4.2 "$GCCDIR"/usr/bin + (cd "$GCCDIR/usr/llvm-gcc-4.2" || exit; rm -f {bin,lib/gcc,libexec/gcc,share/man/man1}/powerpc*) + else + [ -f "$GCCDIR/usr/bin/gcov-4.2" ] && [ ! -L "$GCCDIR/usr/bin/gcov-4.2" ] && mv "$GCCDIR/usr/bin/gcov-4.2" "$GCCDIR" + (cd "$GCCDIR" || exit; rm -rf $GCCFILES $LLVMGCCFILES) + [ -f "$GCCDIR/gcov-4.2" ] && mv "$GCCDIR/gcov-4.2" "$GCCDIR/usr/bin" + fi + (cd "$GCCINSTALLDIR" || exit; rm -rf $GCCFILES $LLVMGCCFILES) + rmdir "$GCCINSTALLDIR/usr/include/gcc/darwin" "$GCCINSTALLDIR/usr/include/gcc" || : + rmdir "$GCCINSTALLDIR/usr/lib/"{i686-apple-darwin10,powerpc-apple-darwin10}"/4.2.1" "$GCCINSTALLDIR/usr/lib/"{gcc/,}{i686-apple-darwin10,powerpc-apple-darwin10} "$GCCINSTALLDIR/usr/lib/gcc" || : + rmdir "$GCCINSTALLDIR/usr/libexec/gcc/"{i686-apple-darwin10,powerpc-apple-darwin10} "$GCCINSTALLDIR/usr/libexec/gcc" "$GCCINSTALLDIR/usr/libexec/ld" "$GCCDIR/usr/libexec/gcc/darwin" "$GCCDIR/usr/libexec/gcc" || : + rmdir "$GCCINSTALLDIR/usr/share/man/man7" || : + if [ -f "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec-original" ]; then + rm "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec" + mv -f "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec-original" "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec" + fi + fi + #for i in 10.4u 10.5 10.6 10.7 10.8 10.9 10.10; do + if [ "$osx104" = 1 ]; then + i=10.4u + [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" + fi + if [ "$osx105" = 1 ]; then + i=10.5 + [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" + fi + if [ "$osx106" = 1 ]; then + i=10.6 + [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" + fi + if [ "$osx107" = 1 ]; then + i=10.7 + [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" + fi + if [ "$osx108" = 1 ]; then + i=10.8 + [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" + fi + if [ "$osx109" = 1 ]; then + i=10.9 + [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" + fi + if [ "$osx1010" = 1 ]; then + i=10.10 + [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" + fi + if [ "$osx1011" = 1 ]; then + i=10.11 + [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" + fi + if [ "$osx1012" = 1 ]; then + i=10.12 + [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" + fi + if [ "$osx1013" = 1 ]; then + i=10.13 + [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" + fi + + if [ "$compilers" = 1 ]; then + if [ "$GCCINSTALLDIR/usr/bin/gcc" -ef "$GCCINSTALLDIR/usr/bin/clang" ]; then + rm "$GCCINSTALLDIR/usr/bin/gcc" + fi + for b in llvm-g++ llvm-gcc; do + if [ -L $GCCINSTALLDIR/usr/bin/$b ] && [ ! -e $GCCINSTALLDIR/usr/bin/$b ]; then + rm $GCCINSTALLDIR/usr/bin/$b + fi + done + for b in c++-4.0 cpp-4.0 c++-4.2 cpp-4.2 gcc-4.0 g++-4.0 gcov-4.0 gcc-4.2 g++-4.2 gcov-4.2 llvm-cpp-4.2 llvm-g++-4.2 llvm-gcc-4.2; do + if [ -L $GCCLINKDIR/bin/$b ] && [ ! -e $GCCLINKDIR/bin/$b ]; then + rm $GCCLINKDIR/bin/$b + fi + done + for b in cpp-4.2.1 gcc-4.0.1 g++-4.0.1 gcc-4.2.1 g++-4.2.1 llvm-g++-4.2 llvm-gcc-4.2; do + if [ -L $GCCLINKDIR/bin/i686-apple-darwin10-$b ] && [ ! -e $GCCLINKDIR/bin/i686-apple-darwin10-$b ]; then + rm $GCCLINKDIR/bin/i686-apple-darwin10-$b + fi + done + for b in cpp-4.2.1 gcc-4.0.1 g++-4.0.1 gcc-4.2.1 g++-4.2.1 llvm-g++-4.2 llvm-gcc-4.2; do + if [ -L $GCCLINKDIR/bin/powerpc-apple-darwin10-$b ] && [ ! -e $GCCLINKDIR/bin/powerpc-apple-darwin10-$b ]; then + rm $GCCLINKDIR/bin/powerpc-apple-darwin10-$b + fi + done + fi + if [ -f "$PLATFORMDIR/Info.plist-original" ] && [ $(ls -1 "$SDKDIR"/SDKs/MacOSX*.sdk/legacy 2>/dev/null | wc -l) -eq 0 ]; then + rm "$PLATFORMDIR/Info.plist" + mv -f "$PLATFORMDIR/Info.plist-original" "$PLATFORMDIR/Info.plist" + fi + + ;; + +esac + + + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh From 72c0513c576383a3acd574e809cb5aa8eb420fd0 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 24 Apr 2019 19:02:10 +0100 Subject: [PATCH 13/16] install xcode sdk on osx not linux --- azure-pipelines.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index dcf21cf30f..1bf6b94092 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,11 +9,6 @@ jobs: script: | sudo apt-get update sudo apt-get install castxml - - task: CmdLine@2 - displayName: 'Install OSX Sdk' - inputs: - script: | - ./scripts/XcodeLegacy.sh -osx1013 - task: CmdLine@2 displayName: 'Install Nuke' @@ -50,6 +45,12 @@ jobs: curl -o ./mono.pkg https://download.mono-project.com/archive/5.18.0/macos-10-universal/MonoFramework-MDK-5.18.0.225.macos10.xamarin.universal.pkg sudo installer -verbose -pkg ./mono.pkg -target / + - task: CmdLine@2 + displayName: 'Install OSX Sdk' + inputs: + script: | + ./scripts/XcodeLegacy.sh -osx1013 + - task: Xcode@5 inputs: actions: 'build' From 46711423362eeb601634170230805591eeb859f4 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 24 Apr 2019 20:15:54 +0100 Subject: [PATCH 14/16] attempt to fix osx builds --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 1bf6b94092..576dd09715 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -32,7 +32,7 @@ jobs: - job: macOS pool: - vmImage: 'xcode9-macos10.13' + vmImage: 'macOS-10.14' steps: - task: DotNetCoreInstaller@0 inputs: From 7a03f3836ac39e0d4007598c8ca5f1e0aa39eba1 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 24 Apr 2019 20:16:58 +0100 Subject: [PATCH 15/16] dont install osx sdk manually --- azure-pipelines.yml | 6 - scripts/XcodeLegacy.sh | 1306 ---------------------------------------- 2 files changed, 1312 deletions(-) delete mode 100755 scripts/XcodeLegacy.sh diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 576dd09715..36377acea3 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -45,12 +45,6 @@ jobs: curl -o ./mono.pkg https://download.mono-project.com/archive/5.18.0/macos-10-universal/MonoFramework-MDK-5.18.0.225.macos10.xamarin.universal.pkg sudo installer -verbose -pkg ./mono.pkg -target / - - task: CmdLine@2 - displayName: 'Install OSX Sdk' - inputs: - script: | - ./scripts/XcodeLegacy.sh -osx1013 - - task: Xcode@5 inputs: actions: 'build' diff --git a/scripts/XcodeLegacy.sh b/scripts/XcodeLegacy.sh deleted file mode 100755 index 2a67dca414..0000000000 --- a/scripts/XcodeLegacy.sh +++ /dev/null @@ -1,1306 +0,0 @@ -#!/bin/bash -# XCodeLegacy.sh -# -# Original author: Frederic Devernay -# Contributors: -# - Garrett Walbridge -# - Jae Liu -# - Eric Knibbe -# - Chris Roueche -# - Kris Coppieters -# - Nick Beadman / -# -# License: Creative Commons BY-NC-SA 3.0 http://creativecommons.org/licenses/by-nc-sa/3.0/ -# -# History: -# 1.0 (08/10/2012): First public version, supports Xcode up to version 4.6.3 -# 1.1 (20/09/2013): Xcode 5 removed llvm-gcc and 10.7 SDK support, grab them from Xcode 3 and 4 -# 1.2 (03/02/2014): Xcode 5 broke PPC assembly and linking; fix assembly and grab linker from Xcode 3 -# 1.3 (07/10/2014): Xcode 6 removed 10.8 SDK, grab it from Xcode 5.1.1 -# 1.4 (21/08/2015): Xcode 7 removed 10.9 and 10.10 SDKs, grab them from Xcode 6.4 -# 1.5 (15/10/2015): Fixes for OS X 10.11 El Capitan (nothing can be installed in /usr/bin because of the sandbox) -# 1.6 (11/11/2015): Fix buildpackages, fix /usr/bin/gcc on recent OS X, fix download messages -# 1.7 (05/04/2016): Xcode 7.3 disables support for older SDKs, fix that -# 1.8 (07/04/2016): add options to install only some SDKs or compilers only -# 1.9 (16/09/2016): Xcode 8 dropped 10.11 SDK, get it from Xcode 7.3.1 -# 2.0 (02/05/2017): Xcode 8 cannot always link i386 for OS X 10.5, use the Xcode 3 linker for this arch too. Force use of legacy assembler with GCC 4.x. -# 2.1 (17/01/2017): Xcode 9 dropped 10.12 SDK, get it from https://github.com/phracker/MacOSX-SDKs; fix compiling with GNU Ada, and many other fixes -# 2.2 (12/02/2019): Added support for using macOS High Sierra 10.13 SDK from Xcode 9.4.1 for use on Xcode 10/macOS 10.14 Mojave, also changed source of OS X 10.12 SDK to Xcode 8.3.3 - -#set -e # Exit immediately if a command exits with a non-zero status -#set -u # Treat unset variables as an error when substituting. -#set -x # Print commands and their arguments as they are executed. - -compilers=0 -osx104=0 -osx105=0 -osx106=0 -osx107=0 -osx108=0 -osx109=0 -osx1010=0 -osx1011=0 -osx1012=0 -osx1013=0 -gotoption=0 -error=0 - -while [[ $error = 0 ]] && [[ $# -gt 1 ]]; do - - case $1 in - -compilers) - compilers=1 - gotoption=1 - shift - ;; - -osx104) - osx104=1 - gotoption=1 - shift - ;; - -osx105) - osx105=1 - gotoption=1 - shift - ;; - -osx106) - osx106=1 - gotoption=1 - shift - ;; - -osx107) - osx107=1 - gotoption=1 - shift - ;; - -osx108) - osx108=1 - gotoption=1 - shift - ;; - -osx109) - osx109=1 - gotoption=1 - shift - ;; - -osx1010) - osx1010=1 - gotoption=1 - shift - ;; - -osx1011) - osx1011=1 - gotoption=1 - shift - ;; - -osx1012) - osx1012=1 - gotoption=1 - shift - ;; - -osx1013) - osx1013=1 - gotoption=1 - shift - ;; - *) - # unknown option or spurious arg - error=1 - ;; - esac - -done - -if [ $gotoption = 0 ]; then - compilers=1 - osx104=1 - osx105=1 - osx106=1 - osx107=1 - osx108=1 - osx109=1 - osx1010=1 - osx1011=1 - osx1012=1 - osx1013=1 -fi - -if [ $# != 1 ]; then - # ################################################################################ 80 cols - echo "Usage: $0 [-compilers|-osx104|-osx105|-osx106|-osx107|-osx108|-osx109|-osx1010|-osx1011|-osx1012|-osx1013] buildpackages|install|installbeta|cleanpackages|uninstall|uninstallbeta" - echo "" - echo "Description: Extracts / installs / cleans / uninstalls the following components" - echo "from Xcode 3.2.6, Xcode 4.6.3, Xcode 5.1.1, Xcode 6.4, Xcode 7.3.1, Xcode 8.3.3 and Xcode 9.4.1 which" - echo "are not available in Xcode >= 4.2:" - echo " - PPC assembler and linker" - echo " - GCC 4.0 and 4.2 compilers and Xcode plugins" - echo " - LLVM-GCC 4.2 compiler and Xcode plugin (Xcode >= 5)" - echo " - Mac OS X SDK 10.4u, 10.5, 10.6, 10.7, 10.8, 10.9, 10.10, 10.11, 10.12, 10.13" - echo "" - echo "An optional first argument may be provided to limit the operation (by default" - echo "everything is done):" - echo " -compilers : only install the gcc and llvm-gcc compilers, as well as the" - echo " corresponding Xcode plugins" - echo " -osx104 : only install Mac OSX 10.4 SDK" - echo " -osx105 : only install Mac OSX 10.5 SDK" - echo " -osx106 : only install Mac OSX 10.6 SDK" - echo " -osx107 : only install Mac OSX 10.7 SDK" - echo " -osx108 : only install OSX 10.8 SDK" - echo " -osx109 : only install OSX 10.9 SDK" - echo " -osx1010 : only install OSX 10.10 SDK" - echo " -osx1011 : only install OSX 10.11 SDK" - echo " -osx1012 : only install OSX 10.12 SDK" - echo " -osx1013 : only install OSX 10.13 SDK" - echo "Note that these can be combined. For example, to build and install the 10.9" - echo "and 10.10 SDKs, one could execute:" - echo " $ $0 -osx109 -osx1010 buildpackages" - echo " $ sudo $0 -osx109 -osx1010 install" - echo "" - echo "Typically, you will want to run this script with the buildpackages argument" - echo "first, then the install argument, and lastly the cleanpackages argument, in" - echo "order to properly install the legacy Xcode files." - echo "The install and uninstall phases have to be run with administrative rights, as" - echo "in:" - echo " $ sudo $0 install" - echo "The installbeta and uninstallbeta phases work on the beta versions of Xcode." - exit -fi - -if [ "$1" = "installbeta" ] || [ "$1" = "uninstallbeta" ]; then - XCODEAPP="/Applications/Xcode-beta.app" -else - XCODEAPP="/Applications/Xcode.app" -fi -XCODE42=0 -PLUGINDIR="$XCODEAPP/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins" -GCCDIR="$XCODEAPP/Contents/Developer" -SDKDIR="$GCCDIR/Platforms/MacOSX.platform/Developer" -if [ -d "$XCODEAPP" ]; then - echo "*** Info: found Xcode >= 4.3 in $XCODEAPP" -else - GCCDIR="/Developer" - XCODEAPP="$GCCDIR/Applications/Xcode.app" - PLUGINDIR="$GCCDIR/Library/Xcode/PrivatePlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins" - SDKDIR="$GCCDIR" - if [ -d "$XCODEAPP" ]; then - XCODE42=1 - echo "*** Info: found Xcode <= 4.2.1 in $XCODEAPP" - else - echo "*** Info: could not find Xcode 4.2 in /Developer/Applications nor Xcode >= 4.3 in /Applications" - fi -fi -PLATFORMDIR="$GCCDIR/Platforms/MacOSX.platform" -GCCINSTALLDIR="$GCCDIR/Toolchains/XcodeDefault.xctoolchain" -GCCLINKDIR=/usr -RELEASENUM=$(uname -r | awk -F. '{print $1}') -if [ "$RELEASENUM" -gt 14 ]; then - # on OSX 10.11 El Capitan, nothing can be installed in /usr because of the Sandbox - # install in Xcode instead, and put links in /usr/local - GCCLINKDIR=/usr/local -elif [ "$RELEASENUM" -lt 10 ]; then - echo "*** Error: This script requires Mac OS X 10.6 Snow Leopard or newer." - exit 1 -fi - -GCCFILES="usr/share/man/man7/fsf-funding.7 usr/share/man/man7/gfdl.7 usr/share/man/man7/gpl.7 usr/share/man/man1/*-4.0.1 usr/share/man/man1/*-4.0.1.1 usr/libexec/gcc/*-apple-darwin10/4.0.1 usr/lib/gcc/*-apple-darwin10/4.0.1 usr/include/gcc/darwin/4.0 usr/bin/*-4.0 usr/bin/*-4.0.1 usr/share/man/man1/*-4.2.1 usr/share/man/man1/*-4.2.1.1 usr/libexec/gcc/*-apple-darwin10/4.2.1 usr/lib/gcc/*-apple-darwin10/4.2.1 usr/include/gcc/darwin/4.2 usr/bin/*-4.2 usr/bin/*-4.2.1" -LLVMGCCFILES="usr/llvm-gcc-4.2 usr/share/man/man1/llvm-g*.1.gz" - -xc3="$(( compilers + osx104 + osx105 + osx106 != 0 ))" -xc4="$(( compilers + osx107 != 0 ))" -xc5="$(( osx108 != 0 ))" -xc6="$(( osx109 + osx1010 != 0 ))" -xc7="$(( osx1011 != 0 ))" -xc8="$(( osx1012 != 0 ))" -xc9="$(( osx1013 != 0 ))" - -# The sole argument is the macOS version (e.g. 10.12) -installSDK() { - macos="$1" - macosnodot="${macos//./}" - if [ -d "$SDKDIR/SDKs/MacOSX${macos}.sdk" ]; then - echo "*** Not installing MacOSX${macos}.sdk (found installed in $SDKDIR/SDKs/MacOSX${macos}.sdk, uninstall first to force install)" - else - if [ -f Xcode${macosnodot}SDK.tar.gz ]; then - (gzip -dc Xcode${macosnodot}SDK.tar.gz | (cd "$SDKDIR" || exit; tar xf -)) && echo "*** installed Xcode${macosnodot}SDK.tar.gz" - elif [ -f MacOSX${macos}.sdk.tar.xz ]; then - (gzip -dc MacOSX${macos}.sdk.tar.xz | (cd "$SDKDIR/SDKs" || exit; tar xf -)) && echo "*** installed MacOSX${macos}.sdk.tar.xz" - else - echo "*** Could not install MacOSX${macos}.sdk" - echo "*** Before installing:" - echo "- execute \"$0 buildpackages\"" - exit 1 - fi - touch "$SDKDIR/SDKs/MacOSX${macos}.sdk/legacy" - fi -} - -case $1 in - buildpackages) - ####################### - # PHASE 1: PACKAGING - # - missingdmg=0 - # note: Xcode links from http://stackoverflow.com/questions/10335747/how-to-download-xcode-4-5-6-7-and-get-the-dmg-file/10335943#10335943 - if [ "$xc3" = 1 ] && [ ! -f xcode_3.2.6_and_ios_sdk_4.3.dmg ]; then - echo "*** You should download Xcode 3.2.6. Login to:" - echo " https://developer.apple.com/downloads/" - echo "then download from:" - echo " https://developer.apple.com/devcenter/download.action?path=/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg" - echo "or" - echo " https://adcdownload.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3.dmg" - echo "and then run this script from within the same directory as the downloaded file" - missingdmg=1 - fi - if [ "$xc4" = 1 ] && [ ! -f xcode4630916281a.dmg ]; then - echo "*** You should download Xcode 4.6.3. Login to:" - echo " https://developer.apple.com/downloads/" - echo "then download from:" - echo " https://developer.apple.com/devcenter/download.action?path=/Developer_Tools/xcode_4.6.3/xcode4630916281a.dmg" - echo "or" - echo " https://adcdownload.apple.com/Developer_Tools/xcode_4.6.3/xcode4630916281a.dmg" - echo "and then run this script from within the same directory as the downloaded file" - missingdmg=1 - fi - if [ "$xc5" = 1 ] && [ ! -f xcode_5.1.1.dmg ]; then - echo "*** You should download Xcode 5.1.1. Login to:" - echo " https://developer.apple.com/downloads/" - echo "then download from:" - echo " https://developer.apple.com/devcenter/download.action?path=/Developer_Tools/xcode_5.1.1/xcode_5.1.1.dmg" - echo "or" - echo " https://adcdownload.apple.com/Developer_Tools/xcode_5.1.1/xcode_5.1.1.dmg" - echo "and then run this script from within the same directory as the downloaded file" - missingdmg=1 - fi - if [ "$xc6" = 1 ] && [ ! -f Xcode_6.4.dmg ]; then - echo "*** You should download Xcode 6.4. Login to:" - echo " https://developer.apple.com/downloads/" - echo "then download from:" - echo " https://developer.apple.com/devcenter/download.action?path=/Developer_Tools/Xcode_6.4/Xcode_6.4.dmg" - echo "or" - echo " https://adcdownload.apple.com/Developer_Tools/Xcode_6.4/Xcode_6.4.dmg" - echo "and then run this script from within the same directory as the downloaded file" - missingdmg=1 - fi - if [ "$xc7" = 1 ] && [ ! -f Xcode_7.3.1.dmg ]; then - echo "*** You should download Xcode 7.3.1. Login to:" - echo " https://developer.apple.com/downloads/" - echo "then download from:" - echo " https://developer.apple.com/devcenter/download.action?path=/Developer_Tools/Xcode_7.3.1/Xcode_7.3.1.dmg" - echo "or" - echo " https://adcdownload.apple.com/Developer_Tools/Xcode_7.3.1/Xcode_7.3.1.dmg" - echo "and then run this script from within the same directory as the downloaded file" - missingdmg=1 - fi - if [ "$xc8" = 1 ] && [ ! -f Xcode8.3.3.xip ]; then - echo "*** You should download Xcode 8.3.3. Login to:" - echo " https://developer.apple.com/downloads/" - echo "then download from:" - echo " https://download.developer.apple.com/Developer_Tools/Xcode_8.3.3/Xcode8.3.3.xip" - echo "and then run this script from within the same directory as the downloaded file" - missingdmg=1 - fi - if [ "$xc9" = 1 ] && [ ! -f Xcode_9.4.1.xip ]; then - echo "*** You should download Xcode 9.4.1. Login to:" - echo " https://developer.apple.com/downloads/" - echo "then download from:" - echo " https://download.developer.apple.com/Developer_Tools/Xcode_9.4.1/Xcode_9.4.1.xip" - echo "and then run this script from within the same directory as the downloaded file" - missingdmg=1 - fi - if [ "$missingdmg" = 1 ]; then - echo "*** at least one Xcode distribution is missing, cannot build packages - exiting now" - exit - fi - if [ "$xc8" = 1 ]; then - if [ -e Xcode.app ]; then - echo "*** A stray Xcode.app exists in the XcodeLegacy.sh folder. Remove it then try again." - exit - fi - fi - - MNTDIR="$(mktemp -d mount.XXX)" - ATTACH_OPTS=(-nobrowse -mountroot "$MNTDIR") - if [ "$xc3" = 1 ]; then - # you should download Xcode 3.2.6 from: - # http://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/getSoftware?bundleID=20792 - hdiutil attach xcode_3.2.6_and_ios_sdk_4.3.dmg "${ATTACH_OPTS[@]}" - if [ ! -d "$MNTDIR/Xcode and iOS SDK" ]; then - echo "*** Error while trying to attach disk image xcode_3.2.6_and_ios_sdk_4.3.dmg" - echo "Aborting" - exit - fi - if [ "$compilers" = 1 ]; then - rm -rf /tmp/XC3 - pkgutil --expand "$MNTDIR/Xcode and iOS SDK/Packages/DeveloperTools.pkg" /tmp/XC3 - (cd /tmp/XC3 || exit; gzip -dc Payload | cpio -id --quiet Library/Xcode/Plug-ins) #we only need these, see https://github.com/devernay/xcodelegacy/issues/8 - ( (cd /tmp/XC3/Library/Xcode/Plug-ins || exit; tar cf - "GCC 4.0.xcplugin") | gzip -c > XcodePluginGCC40.tar.gz) && echo "*** Created XcodePluginGCC40.tar.gz in directory $(pwd)" - ( (cd /tmp/XC3/Library/Xcode/Plug-ins || exit; tar cf - "GCC 4.2.xcplugin") | gzip -c > XcodePluginGCC42.tar.gz) && echo "*** Created XcodePluginGCC42.tar.gz in directory $(pwd)" - #( (cd /tmp/XC3/Library/Xcode/Plug-ins || exit; tar cf - "LLVM GCC 4.2.xcplugin") | gzip -c > XcodePluginLLVMGCC42.tar.gz) && echo "*** Created XcodePluginLLVMGCC42.tar.gz in directory $(pwd)" - # should be untarred in /Developer/Library/Xcode/PrivatePlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins - # gzip -dc XcodePluginGCC40.tar.gz | (cd /Developer/Library/Xcode/PrivatePlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins || exit; sudo tar xvf -) - - rm -rf /tmp/XC3 - pkgutil --expand "$MNTDIR/Xcode and iOS SDK/Packages/DeveloperToolsCLI.pkg" /tmp/XC3 - - (cd /tmp/XC3 || exit; gzip -dc Payload | cpio -id --quiet usr/bin usr/libexec) #we only need these, see https://github.com/devernay/xcodelegacy/issues/8 - ( (cd /tmp/XC3 || exit; tar cf - usr/libexec/gcc/darwin/ppc usr/libexec/gcc/darwin/ppc64 usr/libexec/gcc/darwin/i386 usr/libexec/gcc/darwin/x86_64) | gzip -c > Xcode3as.tar.gz) && echo "*** Created Xcode3as.tar.gz in directory $(pwd)" - ( (cd /tmp/XC3 || exit; tar cf - usr/bin/ld) | gzip -c > Xcode3ld.tar.gz) && echo "*** Created Xcode3ld.tar.gz in directory $(pwd)" - - #(cp "$MNTDIR/Xcode and iOS SDK/Packages/gcc4.0.pkg" xcode_3.2.6_gcc4.0.pkg) && echo "*** Created xcode_3.2.6_gcc4.0.pkg in directory $(pwd)" - rm -rf /tmp/XC3 - pkgutil --expand "$MNTDIR/Xcode and iOS SDK/Packages/gcc4.0.pkg" /tmp/XC3 - - (cd /tmp/XC3 || exit; gzip -dc Payload | cpio -id --quiet usr) #we only need these, see https://github.com/devernay/xcodelegacy/issues/8 - ( (cd /tmp/XC3 || exit; tar cf - usr) | gzip -c > Xcode3gcc40.tar.gz) && echo "*** Created Xcode3gcc40.tar.gz in directory $(pwd)" - - #(cp "$MNTDIR/Xcode and iOS SDK/Packages/gcc4.2.pkg" xcode_3.2.6_gcc4.2.pkg) && echo "*** Created xcode_3.2.6_gcc4.2.pkg in directory $(pwd)" - rm -rf /tmp/XC3 - pkgutil --expand "$MNTDIR/Xcode and iOS SDK/Packages/gcc4.2.pkg" /tmp/XC3 - - (cd /tmp/XC3 || exit; gzip -dc Payload | cpio -id --quiet usr) #we only need these, see https://github.com/devernay/xcodelegacy/issues/8 - ( (cd /tmp/XC3 || exit; tar cf - usr) | gzip -c > Xcode3gcc42.tar.gz) && echo "*** Created Xcode3gcc42.tar.gz in directory $(pwd)" - - #(cp "$MNTDIR/Xcode and iOS SDK/Packages/llvm-gcc4.2.pkg" xcode_3.2.6_llvm-gcc4.2.pkg) && echo "*** Created xcode_3.2.6_llvm-gcc4.2.pkg in directory $(pwd)" - rm -rf /tmp/XC3 - pkgutil --expand "$MNTDIR/Xcode and iOS SDK/Packages/llvm-gcc4.2.pkg" /tmp/XC3 - - (cd /tmp/XC3 || exit; gzip -dc Payload | cpio -id --quiet usr) #we only need these, see https://github.com/devernay/xcodelegacy/issues/8 - ( (cd /tmp/XC3 || exit; tar cf - usr) | gzip -c > Xcode3llvmgcc42.tar.gz) && echo "*** Created Xcode3llvmgcc42.tar.gz in directory $(pwd)" - fi - - rm -rf /tmp/XC3 - - if [ "$osx104" = 1 ] || [ "$osx105" = 1 ]; then - # use the latest version of the hashtable include, as recommended by: - # http://wiki.inkscape.org/wiki/index.php/HashtableFixOSX - # http://permalink.gmane.org/gmane.comp.graphics.inkscape.devel/32966 - # The version from gcc 4.0.4 fixes these four bugs: - # - # GCC Bugzilla Bug 23053 - # Const-correctness issue in TR1 hashtable - # - # - # GCC Bugzilla Bug 23465 - # Assignment fails on TR1 unordered containers - # - # - # GCC Bugzilla Bug 24054 - # std::tr1::unordered_map's erase does not seem to return a value - # - # - # GCC Bugzilla Bug 24064 - # tr1::unordered_map seems to seg-fault when caching hash values - # - - # see also: - # http://wayback.archive.org/web/20100810175143/http://mohri-lt.cs.nyu.edu:80/twiki/bin/view/FST/CompilingOnMacOSX - # (only fixes GCC Bugzilla Bug 23465) - - #curl -A 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6' 'https://gcc.gnu.org/viewcvs/gcc/branches/gcc-4_0-branch/libstdc%2B%2B-v3/include/tr1/hashtable?revision=95538&view=co' -o hashtable-gcc-4.0.0 - #curl -A 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6' 'https://gcc.gnu.org/viewcvs/gcc/branches/gcc-4_0-branch/libstdc%2B%2B-v3/include/tr1/hashtable?revision=104939&view=co' -o hashtable-gcc-4.0.4 - if false; then - # older version of the patch, for the record (only fixes 23053 and 23465) - cat > /tmp/hashtable.patch <, iterator>::type - Insert_Return_Type; - -- node* find_node (node* p, const key_type& k, typename hashtable::hash_code_t c); -+ node* find_node (node* p, const key_type& k, typename hashtable::hash_code_t c) const; - - std::pair insert (const value_type&, std::tr1::true_type); - iterator insert (const value_type&, std::tr1::false_type); -@@ -1042,8 +1042,9 @@ - node* n = ht.m_buckets[i]; - node** tail = m_buckets + i; - while (n) { -- *tail = m_allocate_node (n); -- (*tail).copy_code_from (n); -+ // *tail = m_allocate_node (n); -+ // (*tail).copy_code_from (n); -+ *tail = m_allocate_node (n->m_v); - tail = &((*tail)->m_next); - n = n->m_next; - } -@@ -1216,7 +1217,7 @@ - bool c, bool m, bool u> - typename hashtable::node* - hashtable --::find_node (node* p, const key_type& k, typename hashtable::hash_code_t code) -+::find_node (node* p, const key_type& k, typename hashtable::hash_code_t code) const - { - for ( ; p ; p = p->m_next) - if (this->compare (k, code, p)) -EOF - fi - fi - - if [ "$osx104" = 1 ]; then - test -d /tmp/XC3-10.4 && rm -rf /tmp/XC3-10.4 - pkgutil --expand "$MNTDIR/Xcode and iOS SDK/Packages/MacOSX10.4.Universal.pkg" /tmp/XC3-10.4 - (cd /tmp/XC3-10.4 || exit; gzip -dc Payload | cpio -id --quiet SDKs/MacOSX10.4u.sdk) - SDKROOT=/tmp/XC3-10.4/SDKs/MacOSX10.4u.sdk - # should we install more than these? (fixed includes?) - # Add links to libstdc++ so that "g++-4.0 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4" works - ln -s ../../../i686-apple-darwin10/4.0.1/libstdc++.dylib $SDKROOT/usr/lib/gcc/i686-apple-darwin10/4.0.1/libstdc++.dylib - # Add links to libstdc++ so that "clang++ -stdlib=libstdc++ -isysroot /Developer/SDKs/MacOSX10.4u.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4" works - ln -s libstdc++.6.dylib $SDKROOT/usr/lib/libstdc++.dylib - # Fix tr1/hashtable - # see http://www.openfst.org/twiki/bin/view/FST/CompilingOnMacOSX https://gcc.gnu.org/ml/libstdc++/2005-08/msg00017.html https://gcc.gnu.org/bugzilla/show_bug.cgi?id=23053 - # in SDKs/MacOSX10.4u.sdk/usr/include/c++/4.0.0/tr1/hashtable - #(cd $SDKROOT/usr/include/c++/4.0.0/tr1 || exit; patch -p0 -d. < /tmp/hashtable.patch) - mv $SDKROOT/usr/include/c++/4.0.0/tr1/hashtable $SDKROOT/usr/include/c++/4.0.0/tr1/hashtable.orig - cp hashtable-gcc-4.0.4 $SDKROOT/usr/include/c++/4.0.0/tr1/hashtable - - # Add links for compatibility with GCC 4.2 - ln -s 4.0.1 $SDKROOT/usr/lib/gcc/i686-apple-darwin10/4.2.1 - ln -s 4.0.1 $SDKROOT/usr/lib/gcc/powerpc-apple-darwin10/4.2.1 - ln -s 4.0.1 $SDKROOT/usr/lib/i686-apple-darwin10/4.2.1 - ln -s 4.0.1 $SDKROOT/usr/lib/powerpc-apple-darwin10/4.2.1 - ln -s 4.0.0 $SDKROOT/usr/include/c++/4.2.1 - - ( (cd /tmp/XC3-10.4 || exit; tar cf - SDKs/MacOSX10.4u.sdk) | gzip -c > Xcode104SDK.tar.gz) && echo "*** Created Xcode104SDK.tar.gz in directory $(pwd)" - rm -rf /tmp/XC3-10.4 - fi - - if [ "$osx105" = 1 ]; then - test -d /tmp/XC3-10.5 && rm -rf /tmp/XC3-10.5 - pkgutil --expand "$MNTDIR/Xcode and iOS SDK/Packages/MacOSX10.5.pkg" /tmp/XC3-10.5 - (cd /tmp/XC3-10.5 || exit; gzip -dc Payload | cpio -id --quiet SDKs/MacOSX10.5.sdk) - SDKROOT=/tmp/XC3-10.5/SDKs/MacOSX10.5.sdk - # should we install more than these? (fixed includes?) - # Add links to libstdc++ so that "g++-4.0 -isysroot /Developer/SDKs/MacOSX10.5.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5" works - ln -s ../../../i686-apple-darwin10/4.0.1/libstdc++.dylib $SDKROOT/usr/lib/gcc/i686-apple-darwin10/4.0.1/libstdc++.dylib - ln -s ../../../i686-apple-darwin10/4.2.1/libstdc++.dylib $SDKROOT/usr/lib/gcc/i686-apple-darwin10/4.2.1/libstdc++.dylib - # Add links to libstdc++ so that "clang++ -stdlib=libstdc++ -isysroot /Developer/SDKs/MacOSX10.5.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5" works - ln -s libstdc++.6.dylib $SDKROOT/usr/lib/libstdc++.dylib - # fix AvailabilityInternal.h (see https://trac.macports.org/wiki/LeopardSDKFixes) - sed -i.orig -e 's/define __MAC_OS_X_VERSION_MAX_ALLOWED __MAC_10_6/define __MAC_OS_X_VERSION_MAX_ALLOWED 1058/' $SDKROOT/usr/include/AvailabilityInternal.h - # Fix tr1/hashtable - # see http://www.openfst.org/twiki/bin/view/FST/CompilingOnMacOSX https://gcc.gnu.org/ml/libstdc++/2005-08/msg00017.html https://gcc.gnu.org/bugzilla/show_bug.cgi?id=23053 - # in SDKs/MacOSX10.5.sdk/usr/include/c++/4.0.0/tr1/hashtable - # this also affects g++-4.2, since usr/include/c++/4.2.1 links to usr/include/c++/4.0.0 - #(cd $SDKROOT/usr/include/c++/4.0.0/tr1 || exit; patch -p0 -d. < /tmp/hashtable.patch) - mv $SDKROOT/usr/include/c++/4.0.0/tr1/hashtable $SDKROOT/usr/include/c++/4.0.0/tr1/hashtable.orig - cp hashtable-gcc-4.0.4 $SDKROOT/usr/include/c++/4.0.0/tr1/hashtable - fi - - if [ "$osx104" = 1 ] || [ "$osx105" = 1 ]; then - true - #rm /tmp/hashtable.patch - fi - - if [ $osx105 = 1 ] || [ $osx106 = 1 ]; then - test -d /tmp/XC3 && rm -rf /tmp/XC3 - pkgutil --expand "$MNTDIR/Xcode and iOS SDK/Packages/MacOSX10.6.pkg" /tmp/XC3 - (cd /tmp/XC3 || exit; gzip -dc Payload | cpio -id --quiet SDKs/MacOSX10.6.sdk) - SDKROOT=/tmp/XC3/SDKs/MacOSX10.6.sdk - # should we install more than these? (fixed includes?) - # Add links to libstdc++ so that "clang++ -stdlib=libstdc++ -isysroot /Developer/SDKs/MacOSX10.6.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.6" works - ln -s libstdc++.6.dylib $SDKROOT/usr/lib/libstdc++.dylib - - # fix buggy hashtable include (see above for explanations) - cp hashtable-gcc-4.0.4 $SDKROOT/usr/include/c++/4.0.0/tr1/hashtable - - if [ "$osx105" = 1 ]; then - # we also need to copy /usr/lib/libgcc_s.10.5.dylib from 10.6 SDK to 10.5SDK, see https://trac.macports.org/wiki/LeopardSDKFixes - # This should fix compiling the following: - # int main() { __uint128_t a = 100; __uint128_t b = 200; __uint128_t c = a / b; return 0; } - # with clang -isysroot /Developer/SDKs/MacOSX10.5.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5 conftest1.c - cp /tmp/XC3-10.5/SDKs/MacOSX10.5.sdk/usr/lib/libgcc_s.10.5.dylib /tmp/XC3-10.5/SDKs/MacOSX10.5.sdk/usr/lib/libgcc_s.10.5.dylib.bak - cp $SDKROOT/usr/lib/libgcc_s.10.5.dylib /tmp/XC3-10.5/SDKs/MacOSX10.5.sdk/usr/lib/libgcc_s.10.5.dylib - - ( (cd /tmp/XC3-10.5 || exit; tar cf - SDKs/MacOSX10.5.sdk) | gzip -c > Xcode105SDK.tar.gz) && echo "*** Created Xcode105SDK.tar.gz in directory $(pwd)" - fi - if [ "$osx106" = 1 ]; then - ( (cd /tmp/XC3 || exit; tar cf - SDKs/MacOSX10.6.sdk) | gzip -c > Xcode106SDK.tar.gz) && echo "*** Created Xcode106SDK.tar.gz in directory $(pwd)" - fi - rm -rf /tmp/XC3-10.5 /tmp/XC3 - fi - hdiutil detach "$MNTDIR/Xcode and iOS SDK" -force - fi - - if [ "$xc4" = 1 ]; then - hdiutil attach xcode4630916281a.dmg "${ATTACH_OPTS[@]}" - if [ ! -d "$MNTDIR/Xcode" ]; then - echo "*** Error while trying to attach disk image xcode4630916281a.dmg" - echo "Aborting" - rmdir "$MNTDIR" - exit - fi - if [ "$osx107" = 1 ]; then - ( (cd "$MNTDIR/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer" || exit; tar cf - SDKs/MacOSX10.7.sdk) | gzip -c > Xcode107SDK.tar.gz) && echo "*** Created Xcode107SDK.tar.gz in directory $(pwd)" - fi - if [ "$compilers" = 1 ]; then - ( (cd "$MNTDIR/Xcode/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins" || exit; tar cf - "GCC 4.2.xcplugin") | gzip -c > XcodePluginGCC42-Xcode4.tar.gz) && echo "*** Created XcodePluginGCC42-Xcode4.tar.gz in directory $(pwd)" - ( (cd "$MNTDIR/Xcode/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins" || exit; tar cf - "LLVM GCC 4.2.xcplugin") | gzip -c > XcodePluginLLVMGCC42.tar.gz) && echo "*** Created XcodePluginLLVMGCC42.tar.gz in directory $(pwd)" - fi - hdiutil detach "$MNTDIR/Xcode" -force - fi - - if [ "$xc5" = 1 ]; then - hdiutil attach xcode_5.1.1.dmg "${ATTACH_OPTS[@]}" - if [ ! -d "$MNTDIR/Xcode" ]; then - echo "*** Error while trying to attach disk image xcode_5.1.1.dmg" - echo "Aborting" - rmdir "$MNTDIR" - exit - fi - if [ "$osx108" = 1 ]; then - ( (cd "$MNTDIR/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer" || exit; tar cf - SDKs/MacOSX10.8.sdk) | gzip -c > Xcode108SDK.tar.gz) && echo "*** Created Xcode108SDK.tar.gz in directory $(pwd)" - fi - hdiutil detach "$MNTDIR/Xcode" -force - fi - - if [ "$xc6" = 1 ]; then - hdiutil attach Xcode_6.4.dmg "${ATTACH_OPTS[@]}" - if [ ! -d "$MNTDIR/Xcode" ]; then - echo "*** Error while trying to attach disk image Xcode_6.4.dmg" - echo "Aborting" - rmdir "$MNTDIR" - exit - fi - if [ "$osx109" = 1 ]; then - ( (cd "$MNTDIR/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer" || exit; tar cf - SDKs/MacOSX10.9.sdk) | gzip -c > Xcode109SDK.tar.gz) && echo "*** Created Xcode109SDK.tar.gz in directory $(pwd)" - fi - if [ "$osx1010" = 1 ]; then - ( (cd "$MNTDIR/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer" || exit; tar cf - SDKs/MacOSX10.10.sdk) | gzip -c > Xcode1010SDK.tar.gz) && echo "*** Created Xcode1010SDK.tar.gz in directory $(pwd)" - fi - hdiutil detach "$MNTDIR/Xcode" -force - fi - if [ "$xc7" = 1 ]; then - hdiutil attach Xcode_7.3.1.dmg "${ATTACH_OPTS[@]}" - if [ ! -d "$MNTDIR/Xcode" ]; then - echo "*** Error while trying to attach disk image Xcode_7.3.1.dmg" - echo "Aborting" - rmdir "$MNTDIR" - exit - fi - if [ "$osx1011" = 1 ]; then - ( (cd "$MNTDIR/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer" || exit; tar cf - SDKs/MacOSX10.11.sdk) | gzip -c > Xcode1011SDK.tar.gz) && echo "*** Created Xcode1011SDK.tar.gz in directory $(pwd)" - fi - hdiutil detach "$MNTDIR/Xcode" -force - fi - if [ "$xc8" = 1 ]; then - if [ "$osx1012" = 1 ]; then - echo "Extracting Mac OS X 10.12 SDK from Xcode 8.3.3. Be patient - this will take some time" - open Xcode8.3.3.xip - while [ ! -d Xcode.app ]; do - sleep 5 - done - sleep 5 - ( (cd "Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer" || exit; rm SDKs/MacOSX10.12.sdk; mv SDKs/MacOSX.sdk SDKs/MacOSX10.12.sdk; tar cf - SDKs/MacOSX10.12.sdk) | gzip -c > Xcode1012SDK.tar.gz) && echo "*** Created Xcode1012SDK.tar.gz in directory $(pwd)" - rm -rf Xcode.app - fi - fi - if [ "$xc9" = 1 ]; then - if [ "$osx1013" = 1 ]; then - echo "Extracting Mac OS X 10.13 SDK from Xcode 9.4.1. Be patient - this will take some time" - open Xcode_9.4.1.xip - while [ ! -d Xcode.app ]; do - sleep 5 - done - sleep 5 - ( (cd "Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer" || exit; rm SDKs/MacOSX10.13.sdk; mv SDKs/MacOSX.sdk SDKs/MacOSX10.13.sdk; tar cf - SDKs/MacOSX10.13.sdk) | gzip -c > Xcode1013SDK.tar.gz) && echo "*** Created Xcode1013SDK.tar.gz in directory $(pwd)" - rm -rf Xcode.app - fi - fi - rmdir "$MNTDIR" - ;; - - install|installbeta) - ####################### - # PHASE 2: INSTALLING - # - if [ $EUID -ne 0 ]; then - echo "*** Error: The install phase requires administrative rights. Please run it as:" - echo " $ sudo $0 install" - exit 1 - fi - if [ ! -d "$PLUGINDIR" ]; then - echo "*** Error: could not find Xcode 4.2 in /Developer/Applications nor Xcode >= 4.3 in /Applications, cannot install" - exit 1 - fi - if [ "$compilers" = 1 ]; then - if [ -d "$PLUGINDIR/GCC 4.0.xcplugin" ]; then - echo "*** Not installing XcodePluginGCC40.tar.gz (found installed in $PLUGINDIR/GCC 4.0.xcplugin, uninstall first to force install)" - else - (gzip -dc XcodePluginGCC40.tar.gz | (cd "$PLUGINDIR" || exit; tar xf -)) && touch "$PLUGINDIR/GCC 4.0.xcplugin/legacy" && echo "*** installed XcodePluginGCC40.tar.gz" - # Add entries expected by later xcodebuilds. - mv "$PLUGINDIR/GCC 4.0.xcplugin/Contents/Resources/GCC 4.0.xcspec" "$PLUGINDIR/GCC 4.0.xcplugin/Contents/Resources/GCC 4.0.xcspec-original" - sed '$ i\ -\ ExecDescription = \"Compile \$\(InputFile\)\"\;\ -\ ProgressDescription = \"Compiling \$\(InputFile\)\"\;\ -\ ExecDescriptionForPrecompile = \"Precompile \$\(InputFile\)\"\;\ -\ ProgressDescriptionForPrecompile = \"Precompiling \$\(InputFile\)\"\; -' < "$PLUGINDIR/GCC 4.0.xcplugin/Contents/Resources/GCC 4.0.xcspec-original" > "$PLUGINDIR/GCC 4.0.xcplugin/Contents/Resources/GCC 4.0.xcspec" - - echo "*** modified GCC 4.0.xcspec" - fi - if [ -d "$PLUGINDIR/GCC 4.2.xcplugin" ] && [ ! -f "$PLUGINDIR/GCC 4.2.xcplugin/Contents/Resources/GCC Generic.xcspec" ]; then - echo "*** Not installing XcodePluginGCC42.tar.gz (found installed in $PLUGINDIR/GCC 4.2.xcplugin, uninstall first to force install)" - else - if [ -f "$PLUGINDIR/GCC 4.2.xcplugin/Contents/Resources/GCC Generic.xcspec" ]; then - mv "$PLUGINDIR/GCC 4.2.xcplugin" "$PLUGINDIR/GCC 4.2.xcplugin-original" - fi - (gzip -dc XcodePluginGCC42.tar.gz | (cd "$PLUGINDIR" || exit; tar xf -)) && touch "$PLUGINDIR/GCC 4.2.xcplugin/legacy" && echo "*** installed XcodePluginGCC42.tar.gz" - # Add entries expected by later xcodebuilds. - mv "$PLUGINDIR/GCC 4.2.xcplugin/Contents/Resources/GCC 4.2.xcspec" "$PLUGINDIR/GCC 4.2.xcplugin/Contents/Resources/GCC 4.2.xcspec-original" - sed '$ i\ -\ ExecDescription = \"Compile \$\(InputFile\)\"\;\ -\ ProgressDescription = \"Compiling \$\(InputFile\)\"\;\ -\ ExecDescriptionForPrecompile = \"Precompile \$\(InputFile\)\"\;\ -\ ProgressDescriptionForPrecompile = \"Precompiling \$\(InputFile\)\"\; -' < "$PLUGINDIR/GCC 4.2.xcplugin/Contents/Resources/GCC 4.2.xcspec-original" > "$PLUGINDIR/GCC 4.2.xcplugin/Contents/Resources/GCC 4.2.xcspec" - echo "*** modified GCC 4.2.xcspec" - fi - if [ -d "$PLUGINDIR/LLVM GCC 4.2.xcplugin" ]; then - echo "*** Not installing XcodePluginLLVMGCC42.tar.gz (found installed in $PLUGINDIR/LLVM GCC 4.2.xcplugin, uninstall first to force install)" - else - (gzip -dc XcodePluginLLVMGCC42.tar.gz | (cd "$PLUGINDIR" || exit; tar xf -)) && touch "$PLUGINDIR/LLVM GCC 4.2.xcplugin/legacy" && echo "*** installed XcodePluginLLVMGCC42.tar.gz" - fi - - if [ -f "$GCCDIR/usr/libexec/gcc/darwin/ppc/as" ]; then - echo "*** Not installing Xcode3as.tar.gz (found installed in $GCCDIR/usr/libexec/gcc/darwin/ppc/as, uninstall first to force install)" - else - (gzip -dc Xcode3as.tar.gz | (cd "$GCCDIR" || exit; tar xf -)) - mkdir -p "$GCCINSTALLDIR/usr/bin" - mkdir -p "$GCCINSTALLDIR/usr/libexec/as/ppc" - mkdir -p "$GCCINSTALLDIR/usr/libexec/as/ppc64" - mkdir -p "$GCCINSTALLDIR/usr/libexec/as/i386" - mkdir -p "$GCCINSTALLDIR/usr/libexec/as/x86_64" - ln -sf "$GCCDIR/usr/libexec/gcc/darwin/ppc/as" "$GCCINSTALLDIR/usr/libexec/as/ppc/as" - ln -sf "$GCCDIR/usr/libexec/gcc/darwin/ppc64/as" "$GCCINSTALLDIR/usr/libexec/as/ppc64/as" - # Xcodes >= 4 already include an acceptable GNU legacy assembler - # (v1.38) for i386 and x86_64 in $GCCINSTALLDIR/usr/libexec/as. - # When they no longer do, enable these links (conditionally, - # of course). - #ln -sf "$GCCDIR/usr/libexec/gcc/darwin/i386/as" "$GCCINSTALLDIR/usr/libexec/as/i386/as" - #ln -sf "$GCCDIR/usr/libexec/gcc/darwin/x86_64/as" "$GCCINSTALLDIR/usr/libexec/as/x86_64/as" - - # Replace Xcode's modern toolchain assembler with a script - # that auto-selects the proper legacy assembler based on the - # command line's -arch parameter. Using a legacy assembler fixes - # "ld: too many personality routines for compact unwind" errors - # and "section '__textcoal_nt' is deprecated" warnings emitted - # by Xcode 7+ assemblers. - # First, though, don't overwrite the original assembler if - # XcodeLegacy is installed twice. - if [ -f "$GCCINSTALLDIR/usr/bin/as" ] && [ ! -f "$GCCINSTALLDIR/usr/bin/as-original" ]; then - mv "$GCCINSTALLDIR/usr/bin/as" "$GCCINSTALLDIR/usr/bin/as-original" - fi - # NB: While only gcc uses the assembler in our builds (it pipes the - # output of usr/libexec/gcc/*-apple-darwin10/4.*/ccobj1plus into - # usr/libexec/gcc/*-apple-darwin10/4.*/as -> usr/bin/as), we can't - # simply change the link to, say, usr/libexec/gcc/darwin/i386/as - # because the assembler seems to want the -arch parameter to match - # its containing folder. Hence, a script (like for ld, below). - # NB: To keep it simple, the script assumes that anyone invoking - # the toolchain's usr/bin/as wants to use Xcode 3's assembler. - # NB: AS_DIR resolves as the directory of the (source) link that - # invoked the script. - - # Note that we don't look for AS in $AS_DIR/../libexec/as/\$ARCH/as - # because gprbuild (from GNU Ada) calls as with both -m and -arch - # flags, and the arch-specific as doesn'b understand -m32 or -m64. - # We just look for as in a few places, and if it's not there, we - # look for as-original, starting in the current dir. - # In any case, we prune -m32 and -m64 from the as args. - # see https://github.com/devernay/xcodelegacy/issues/33 - cat <> "$GCCINSTALLDIR"/usr/bin/as -#!/bin/bash - -ARCH='' -ARCH_FOUND=0 -AS_ARGS=() -for var in "\$@" -do - if [ -z "\$ARCH" ] && [ "\$ARCH_FOUND" -eq '1' ]; then - ARCH="\$var" - AS_ARGS+=("\$var") - elif [ "\$var" = '-arch' ]; then - ARCH_FOUND=1 - AS_ARGS+=("\$var") - elif [ "\$var" = '-m32' ]; then - true - elif [ "\$var" = '-m64' ]; then - true - else - AS_ARGS+=("\$var") - fi -done - -AS_DIR=\`dirname "\$0"\` -AS_FOUND=0 -if [ "\$ARCH_FOUND" -eq '1' ]; then - if [ -x "\$AS_DIR/../../../as/\$ARCH/as" ]; then - AS="\$AS_DIR/../../../as/\$ARCH/as" - AS_FOUND=1 - elif [ -x "\$AS_DIR/../../../../../libexec/as/\$ARCH/as" ]; then - AS="\$AS_DIR/../../../../../libexec/as/\$ARCH/as" - AS_FOUND=1 - elif [ -x "\$AS_DIR/../../../../../../../usr/libexec/as/\$ARCH/as" ]; then - AS="\$AS_DIR/../../../../../../../usr/libexec/as/\$ARCH/as" - AS_FOUND=1 - fi -fi -if [ "\$AS_FOUND" -eq '1' ]; then - exec \$AS "\${AS_ARGS[@]}" -else - if [ -x "\$AS_DIR/as-original" ]; then - ASORIGINAL="\$AS_DIR/as-original" - elif [ -x "\$AS_DIR/../../../bin/as-original" ]; then - ASORIGINAL="\$AS_DIR/../../../bin/as-original" - elif [ -x "\$AS_DIR/../../../../bin/as-original" ]; then - ASORIGINAL="\$AS_DIR/../../../../bin/as-original" - elif [ -x "\$AS_DIR/../../../../../bin/as-original" ]; then - ASORIGINAL="\$AS_DIR/../../../../../bin/as-original" - else - echo "Error: cannot find as-original in \$AS_DIR/as-original or \$AS_DIR/../../../bin/as-original or \$AS_DIR/../../../../bin/as-original or \$AS_DIR/../../../../../bin/as-original" - exit 1 - fi - - exec \$ASORIGINAL "\$@" -fi -AS_EOF - chmod +x "$GCCINSTALLDIR/usr/bin/as" - echo "*** installed Xcode3as.tar.gz" - fi - - if [ -f "$GCCDIR/usr/libexec/gcc/darwin/ppc/ld" ]; then - echo "*** Not installing Xcode3ld.tar.gz (found installed in $GCCDIR/usr/libexec/gcc/darwin/ppc/ld, uninstall first to force install)" - elif [ $XCODE42 -eq 1 ]; then - echo "*** Not installing Xcode3ld.tar.gz (not required for Xcode <= 4.2.1)" - else - mkdir -p "$GCCDIR/tmp" - (gzip -dc Xcode3ld.tar.gz | (cd "$GCCDIR/tmp" || exit; tar xf -)) - cp "$GCCDIR/tmp/usr/bin/ld" "$GCCDIR/usr/libexec/gcc/darwin/ppc/" - ln "$GCCDIR/usr/libexec/gcc/darwin/ppc/ld" "$GCCDIR/usr/libexec/gcc/darwin/ppc64/ld" - rm -rf "$GCCDIR/tmp" - mkdir -p "$GCCINSTALLDIR/usr/libexec/ld/ppc" - mkdir -p "$GCCINSTALLDIR/usr/libexec/ld/ppc7400" - mkdir -p "$GCCINSTALLDIR/usr/libexec/ld/ppc970" - mkdir -p "$GCCINSTALLDIR/usr/libexec/ld/ppc64" - ln -sf "$GCCDIR/usr/libexec/gcc/darwin/ppc/ld" "$GCCINSTALLDIR/usr/libexec/ld/ppc/ld" - ln -sf "$GCCDIR/usr/libexec/gcc/darwin/ppc/ld" "$GCCINSTALLDIR/usr/libexec/ld/ppc7400/ld" - ln -sf "$GCCDIR/usr/libexec/gcc/darwin/ppc/ld" "$GCCINSTALLDIR/usr/libexec/ld/ppc970/ld" - ln -sf "$GCCDIR/usr/libexec/gcc/darwin/ppc64/ld" "$GCCINSTALLDIR/usr/libexec/ld/ppc64/ld" - # Xcode 8's ld fails to link i386 and x86_64 for OSX 10.5: https://github.com/devernay/xcodelegacy/issues/30 - # Since this ld is from Xcode 3.2.6 for OSX 10.6, this should be OK if the target OS is < 10.6 - # (which is checked by the stub ld script) - for arch in i386 x86_64; do - mkdir -p "$GCCDIR/usr/libexec/gcc/darwin/$arch" - ln "$GCCDIR/usr/libexec/gcc/darwin/ppc/ld" "$GCCDIR/usr/libexec/gcc/darwin/$arch/ld" - mkdir -p "$GCCINSTALLDIR/usr/libexec/ld/$arch" - ln -sf "$GCCDIR/usr/libexec/gcc/darwin/$arch/ld" "$GCCINSTALLDIR/usr/libexec/ld/$arch/ld" - done - # prevent overwriting the original ld if the script is run twice - if [ ! -f "$GCCINSTALLDIR/usr/bin/ld-original" ]; then - mv "$GCCINSTALLDIR/usr/bin/ld" "$GCCINSTALLDIR/usr/bin/ld-original" - fi - cat <> "$GCCINSTALLDIR"/usr/bin/ld -#!/bin/bash - -ARCH='' -ARCH_FOUND=0 -for var in "\$@" -do - if [ "\$ARCH_FOUND" -eq '1' ]; then - ARCH=\$var - ARCH_FOUND=2 - break - else - case "\$var" in - -mmacosx-version-min=10.[0-6]) - MACOSX_DEPLOYMENT_TARGET=\$( echo \$var | sed -e s/-mmacosx-version-min=// ) - ;; - -arch) - if [ "\$ARCH_FOUND" -ne '0' ]; then - echo "Warning: ld: multiple -arch flags" - fi - ARCH_FOUND=1 - ;; - esac - fi -done - -# use the old (Snow Leopard 10.6) ld only if ppc arch or the target macOS is <= 10.6 -USE_OLD_LD=0 -case "\$ARCH" in - ppc*) #ppc ppc7400 ppc970 ppc64 - USE_OLD_LD=1 - ;; -esac - -if [ -n \${MACOSX_DEPLOYMENT_TARGET+x} ]; then - # MACOSX_DEPLOYMENT_TARGET can either be set externally as an env variable, - # or as an ld option using -mmacosx-version-min=10.x - case "\${MACOSX_DEPLOYMENT_TARGET}" in - 10.[0-6]) - USE_OLD_LD=1 - ;; - esac -fi - -#echo "Running ld for \$ARCH ..." - -LD_DIR=\`dirname "\$0"\` -if [ -x "\$LD_DIR/ld-original" ]; then - LDORIGINAL="\$LD_DIR/ld-original" -elif [ -x "\$LD_DIR/../../../../bin/ld-original" ]; then - LDORIGINAL="\$LD_DIR/../../../../bin/ld-original" -elif [ -x "\$LD_DIR/../../../../../bin/ld-original" ]; then - LDORIGINAL="\$LD_DIR/../../../../../bin/ld-original" -else - echo "Error: cannot find ld-original in \$LD_DIR \$LD_DIR/../../../../bin or \$LD_DIR/../../../../../bin" - exit 1 -fi -LD_RESULT=255 -if [ "\$USE_OLD_LD" -eq '1' ]; then - ARGS=() - # strip the -dependency_info xxx, -object_path_lto xxx, -no_deduplicate, -export_dynamic flags - DEPINFO_FOUND=0 - OBJECT_PATH_LTO_FOUND=0 - for var in "\$@"; do - if [ "\$DEPINFO_FOUND" -eq '1' ]; then - DEPINFO_FOUND=0 - continue - elif [ "\$OBJECT_PATH_LTO_FOUND" -eq '1' ]; then - OBJECT_PATH_LTO_FOUND=0 - continue - elif [ "\$var" = '-dependency_info' ]; then - DEPINFO_FOUND=1 - continue - elif [ "\$var" = '-object_path_lto' ]; then - OBJECT_PATH_LTO_FOUND=1 - continue - elif [ "\$var" = '-no_deduplicate' ]; then - continue - elif [ "\$var" = '-export_dynamic' ]; then - continue - fi - - ARGS+=("\$var") - done - # the old ld is put in the ppc dir so as not to disturb more recent archs (i386, x86_64) - # works with ppc ppc7400 ppc970 ppc64 i386 x86_64 - LDARCHDIR=ppc - if [ -x "\$LD_DIR/../libexec/ld/\$LDARCHDIR/ld" ]; then - LD="\$LD_DIR/../libexec/ld/\$LDARCHDIR/ld" - elif [ -x "\$LD_DIR/../../../libexec/ld/\$LDARCHDIR/ld" ]; then - LD="\$LD_DIR/../../../libexec/ld/\$LDARCHDIR/ld" - elif [ -x "\$LD_DIR/../../../../libexec/ld/\$LDARCHDIR/ld" ]; then - LD="\$LD_DIR/../../../../libexec/ld/\$LDARCHDIR/ld" - elif [ -x "\$LD_DIR/../../../../../libexec/ld/\$LDARCHDIR/ld" ]; then - LD="\$LD_DIR/../../../../../libexec/ld/\$LDARCHDIR/ld" - else - echo "Error: cannot find ld for \$ARCH in \$LD_DIR/../libexec/ld/\$LDARCHDIR \$LD_DIR/../../../libexec/ld/\$LDARCHDIR \$LD_DIR/../../../../libexec/ld/\$LDARCHDIR or \$LD_DIR/../../../../../libexec/ld/\$LDARCHDIR" - exit 1 - fi - - \`\$LD "\${ARGS[@]}"\` - LD_RESULT=\$? -else - \`\$LDORIGINAL "\$@"\` - LD_RESULT=\$? -fi - -exit \$LD_RESULT -LD_EOF - chmod +x "$GCCINSTALLDIR/usr/bin/ld" - echo "*** installed Xcode3ld.tar.gz" - fi - - if [ -f "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec-original" ]; then - echo "*** Not modifying MacOSX Architectures.xcspec (found original at $PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec-original, uninstall first to force install)" - else - mv "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec" "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec-original" - { awk 'NR>1{print l}{l=$0}' "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec-original"; cat - < "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec" - { - Type = Architecture; - Identifier = ppc; - Name = "Minimal (32-bit PowerPC only)"; - Description = "32-bit PowerPC"; - "PerArchBuildSettingName" = PowerPC; - ByteOrder = big; - ListInEnum = YES; - SortNumber = 201; - }, - { - Type = Architecture; - Identifier = ppc7400; - Name = "PowerPC G4"; - Description = "32-bit PowerPC for G4 processor"; - ByteOrder = big; - ListInEnum = YES; - SortNumber = 202; - }, - { - Type = Architecture; - Identifier = ppc970; - Name = "PowerPC G5 32-bit"; - Description = "32-bit PowerPC for G5 processor"; - ByteOrder = big; - ListInEnum = YES; - SortNumber = 203; - }, - { - Type = Architecture; - Identifier = ppc64; - Name = "PowerPC 64-bit"; - Description = "64-bit PowerPC"; - "PerArchBuildSettingName" = "PowerPC 64-bit"; - ByteOrder = big; - ListInEnum = YES; - SortNumber = 204; - }, -) -SPEC_EOF - echo "*** modified MacOSX Architectures.xcspec" - fi - fi - - if [ "$osx104" = 1 ]; then - if [ -d "$SDKDIR/SDKs/MacOSX10.4u.sdk" ]; then - echo "*** Not installing Xcode104SDK.tar.gz (found installed in $SDKDIR/SDKs/MacOSX10.4u.sdk, uninstall first to force install)" - else - (gzip -dc Xcode104SDK.tar.gz | (cd "$SDKDIR" || exit; tar xf -)) && echo "*** installed Xcode104SDK.tar.gz" - touch "$SDKDIR/SDKs/MacOSX10.4u.sdk/legacy" - fi - fi - - if [ "$osx105" = 1 ]; then - if [ -d "$SDKDIR/SDKs/MacOSX10.5.sdk" ]; then - echo "*** Not installing Xcode105SDK.tar.gz (found installed in $SDKDIR/SDKs/MacOSX10.5.sdk, uninstall first to force install)" - else - (gzip -dc Xcode105SDK.tar.gz | (cd "$SDKDIR" || exit; tar xf -)) && echo "*** installed Xcode105SDK.tar.gz" - touch "$SDKDIR/SDKs/MacOSX10.5.sdk/legacy" - fi - fi - - if [ "$osx106" = 1 ]; then - if [ -d "$SDKDIR/SDKs/MacOSX10.6.sdk" ]; then - echo "*** Not installing Xcode106SDK.tar.gz (found installed in $SDKDIR/SDKs/MacOSX10.6.sdk, uninstall first to force install)" - else - (gzip -dc Xcode106SDK.tar.gz | (cd "$SDKDIR" || exit; tar xf -)) && echo "*** installed Xcode106SDK.tar.gz" - touch "$SDKDIR/SDKs/MacOSX10.6.sdk/legacy" - fi - fi - - if [ "$osx107" = 1 ]; then - installSDK 10.7 - fi - - if [ "$osx108" = 1 ]; then - installSDK 10.8 - fi - - if [ "$osx109" = 1 ]; then - installSDK 10.9 - fi - - if [ "$osx1010" = 1 ]; then - installSDK 10.10 - fi - - if [ "$osx1011" = 1 ]; then - installSDK 10.11 - fi - - if [ "$osx1012" = 1 ]; then - installSDK 10.12 - fi - - if [ "$osx1013" = 1 ]; then - installSDK 10.13 - fi - - if [ "$compilers" = 1 ]; then - if [ -f /usr/bin/gcc-4.0 ]; then - #echo "*** Not installing xcode_3.2.6_gcc4.0.pkg (found installed in /usr/bin/gcc-4.0, uninstall first to force install)" - echo "*** Not installing Xcode3gcc40.tar.gz (found installed in /usr/bin/gcc-4.0, uninstall first to force install)" - elif [ -f "$GCCINSTALLDIR/usr/bin/gcc-4.0" ]; then - echo "*** Not installing Xcode3gcc40.tar.gz (found installed in $GCCINSTALLDIR/usr/bin/gcc-4.0, uninstall first to force install)" - else - echo "*** Installing GCC 4.0" - #installer -pkg xcode_3.2.6_gcc4.0.pkg -target / - (gzip -dc Xcode3gcc40.tar.gz | (cd "$GCCINSTALLDIR" || exit; tar xf -)) && echo "*** installed Xcode3gcc40.tar.gz" - fi - if [ -f /usr/bin/gcc-4.2 ]; then - #echo "*** Not installing xcode_3.2.6_gcc4.2.pkg (found installed in /usr/bin/gcc-4.2, uninstall first to force install)" - echo "*** Not installing Xcode3gcc42.tar.gz (found installed in /usr/bin/gcc-4.2, uninstall first to force install)" - elif [ -f "$GCCINSTALLDIR/usr/bin/gcc-4.2" ]; then - echo "*** Not installing Xcode3gcc42.tar.gz (found installed in $GCCINSTALLDIR/usr/bin/gcc-4.2, uninstall first to force install)" - else - echo "*** Installing GCC 4.2" - #installer -pkg xcode_3.2.6_gcc4.2.pkg -target / - (gzip -dc Xcode3gcc42.tar.gz | (cd "$GCCINSTALLDIR" || exit; tar xf -)) && echo "*** installed Xcode3gcc42.tar.gz" - fi - if [ -f "$GCCINSTALLDIR/usr/bin/llvm-gcc-4.2" ]; then - echo "*** Not installing Xcode3llvmgcc42.tar.gz (found installed in $GCCINSTALLDIR/usr/bin/llvm-gcc-4.2, uninstall first to force install)" - else - echo "*** Installing LLVM GCC 4.2" - #installer -pkg xcode_3.2.6_llvm-gcc4.2.pkg -target / - (gzip -dc Xcode3llvmgcc42.tar.gz | (cd "$GCCINSTALLDIR" || exit; tar xf -)) && echo "*** installed Xcode3llvmgcc42.tar.gz" - if [ -f "$GCCDIR/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2" ]; then - for i in g++ gcc; do - ln -sf "$GCCINSTALLDIR"/usr/bin/powerpc-apple-darwin10-llvm-${i}-4.2 "$GCCDIR"/usr/bin/powerpc-apple-darwin"$RELEASENUM"-llvm-${i}-4.2 - ln -sf "$GCCINSTALLDIR"/usr/llvm-gcc-4.2/bin/powerpc-apple-darwin10-llvm-${i}-4.2 "$GCCDIR"/usr/llvm-gcc-4.2/bin/powerpc-apple-darwin"$RELEASENUM"-llvm-${i}-4.2 - ln -sf "$GCCINSTALLDIR"/usr/llvm-gcc-4.2/share/man/man1/powerpc-apple-darwin10-llvm-${i}.1.gz "$GCCDIR"/usr/llvm-gcc-4.2/share/man/man1/powerpc-apple-darwin"$RELEASENUM"-llvm-${i}.1.gz - done - ln -sf "$GCCINSTALLDIR"/usr/llvm-gcc-4.2/lib/gcc/powerpc-apple-darwin10 "$GCCDIR"/usr/llvm-gcc-4.2/lib/gcc/powerpc-apple-darwin10 - ln -sf "$GCCINSTALLDIR"/usr/llvm-gcc-4.2/libexec/gcc/powerpc-apple-darwin10 "$GCCDIR"/usr/llvm-gcc-4.2/libexec/gcc/powerpc-apple-darwin10 - fi - fi - - echo "*** Creating symbolic links to compliers in $GCCDIR and $GCCLINKDIR:" - if [ ! -d "$GCCDIR"/usr/bin ]; then - mkdir -p "$GCCDIR"/usr/bin - fi - if [ ! -d "$GCCLINKDIR"/bin ]; then - mkdir -p "$GCCLINKDIR"/bin - fi - for v in 4.0 4.2 4.0.1 4.2.1; do - for i in c++ cpp g++ gcc gcov llvm-cpp llvm-g++ llvm-gcc; do - for p in i686-apple-darwin10- powerpc-apple-darwin10- ""; do - if [ -f "$GCCINSTALLDIR"/usr/bin/${p}${i}-${v} ]; then - echo "$GCCINSTALLDIR"/usr/bin/${p}${i}-${v} exists - if [ ! -f "$GCCLINKDIR"/bin/${p}${i}-${v} ]; then - echo "* creating link $GCCLINKDIR/bin/${p}${i}-${v}" - ln -sf "$GCCINSTALLDIR"/usr/bin/${p}${i}-${v} "$GCCLINKDIR"/bin/${p}${i}-${v} - fi - if [ ! -f "$GCCDIR"/usr/bin/${p}${i}-${v} ]; then - echo "* creating link $GCCDIR/usr/bin/${p}${i}-${v}" - ln -sf "$GCCINSTALLDIR"/usr/bin/${p}${i}-${v} "$GCCDIR"/usr/bin/${p}${i}-${v} - fi - fi - done - done - done - # fix /usr/bin/gcc, see https://github.com/devernay/xcodelegacy/issues/19 - if [ -x /usr/bin/gcc ] && [ ! -x "$GCCINSTALLDIR/usr/bin/gcc" ] && [ -x "$GCCINSTALLDIR/usr/bin/clang" ]; then - # "xcode-select -r" sets /usr/bin/gcc to be the first gcc found in $GCCINSTALLDIR, which happens to be - # the directory $GCCINSTALLDIR/usr/libexec/gcc, and results in the following error: - # $ gcc - # gcc: error: can't exec '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/libexec/gcc' (errno=Permission denied) - # by putting a link to clang (which is the default Xcode behavior), we fix this - ln -s clang "$GCCINSTALLDIR/usr/bin/gcc" - # run gcc once so that xcode-select finds the right file for gcc - gcc 1>/dev/null 2>/dev/null - fi - fi - - # Xcode >= 7.3 disables support for older SDKs in /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Info.plist - # see https://github.com/devernay/xcodelegacy/issues/23 - if [ -f "$PLATFORMDIR/Info.plist-original" ]; then - echo "*** Not modifying MacOSX Info.plist (found original at $PLATFORMDIR/Info.plist-original, uninstall first to force install)" - elif [ -f "$PLATFORMDIR/Info.plist" ]; then - mv "$PLATFORMDIR/Info.plist" "$PLATFORMDIR/Info.plist-original" - plutil -remove MinimumSDKVersion -o "$PLATFORMDIR/Info.plist" "$PLATFORMDIR/Info.plist-original" - echo "*** modified MacOSX Info.plist" - fi - - if [ ! -L /Developer/SDKs ] && [ $XCODE42 -ne 1 ]; then - echo "*** Warning: /Developer/SDKs should be a symlink to $SDKDIR/SDKs" - echo "Check that /Developer exists, and fix /Developer/SDKs with:" - echo " $ sudo ln -sf '$SDKDIR/SDKs' /Developer/SDKs" - fi - ;; - - cleanpackages) - ####################### - # PHASE 3: CLEANING - # - - if [ "$compilers" = 1 ]; then - rm XcodePluginGCC40.tar.gz Xcode3as.tar.gz Xcode3ld.tar.gz xcode_3.2.6_gcc4.0.pkg xcode_3.2.6_gcc4.2.pkg xcode_3.2.6_llvm-gcc4.2.pkg XcodePluginGCC42-Xcode4.tar.gz XcodePluginGCC42.tar.gz XcodePluginLLVMGCC42.tar.gz Xcode3gcc40.tar.gz Xcode3gcc42.tar.gz Xcode3llvmgcc42.tar.gz 2>/dev/null - fi - #for i in 10.4u 10.5 10.6 10.7 10.8 10.9 10.10; do - if [ "$osx104" = 1 ]; then - rm Xcode104SDK.tar.gz 2>/dev/null - fi - if [ "$osx105" = 1 ]; then - rm Xcode105SDK.tar.gz 2>/dev/null - fi - if [ "$osx106" = 1 ]; then - rm Xcode106SDK.tar.gz 2>/dev/null - fi - if [ "$osx107" = 1 ]; then - rm Xcode107SDK.tar.gz 2>/dev/null - fi - if [ "$osx108" = 1 ]; then - rm Xcode108SDK.tar.gz 2>/dev/null - fi - if [ "$osx109" = 1 ]; then - rm Xcode109SDK.tar.gz 2>/dev/null - fi - if [ "$osx1010" = 1 ]; then - rm Xcode1010SDK.tar.gz 2>/dev/null - fi - if [ "$osx1011" = 1 ]; then - rm Xcode1011SDK.tar.gz 2>/dev/null - fi - if [ "$osx1012" = 1 ]; then - rm Xcode1012SDK.tar.gz 2>/dev/null - fi - if [ "$osx1012" = 1 ]; then - rm Xcode1013SDK.tar.gz 2>/dev/null - fi - - ;; - - uninstall|uninstallbeta) - ####################### - # PHASE 4: UNINSTALLING - # - if [ $EUID -ne 0 ]; then - echo "*** Error: The uninstall phase requires administrative rights. Please run it as:" - echo " $ sudo $0 uninstall" - exit 1 - fi - - if [ "$compilers" = 1 ]; then - if [ -f "$PLUGINDIR/GCC 4.0.xcplugin/legacy" ]; then - rm -rf "$PLUGINDIR/GCC 4.0.xcplugin" - fi - if [ -f "$PLUGINDIR/GCC 4.2.xcplugin/legacy" ]; then - rm -rf "$PLUGINDIR/GCC 4.2.xcplugin" - fi - if [ -d "$PLUGINDIR/GCC 4.2.xcplugin-original" ]; then - mv "$PLUGINDIR/GCC 4.2.xcplugin-original" "$PLUGINDIR/GCC 4.2.xcplugin" - fi - if [ -f "$PLUGINDIR/LLVM GCC 4.2.xcplugin/legacy" ]; then - rm -rf "$PLUGINDIR/LLVM GCC 4.2.xcplugin" - fi - for f in "$GCCDIR/usr/libexec/gcc/darwin/ppc" \ - "$GCCDIR/usr/libexec/gcc/darwin/ppc64" \ - "$GCCDIR/usr/libexec/gcc/darwin/i386" \ - "$GCCDIR/usr/libexec/gcc/darwin/x86_64" \ - "$GCCINSTALLDIR/usr/libexec/as/ppc" \ - "$GCCINSTALLDIR/usr/libexec/as/ppc64" \ - "$GCCINSTALLDIR/usr/libexec/ld/ppc" \ - "$GCCINSTALLDIR/usr/libexec/ld/ppc7400" \ - "$GCCINSTALLDIR/usr/libexec/ld/ppc970" \ - "$GCCINSTALLDIR/usr/libexec/ld/ppc64" \ - "$GCCINSTALLDIR/usr/libexec/ld/i386" \ - "$GCCINSTALLDIR/usr/libexec/ld/x86_64"; do - if [ -e "$f" ]; then - rm -rf "$f" - fi - done - if [ -f "$GCCINSTALLDIR/usr/bin/as-original" ]; then - rm "$GCCINSTALLDIR/usr/bin/as" - mv -f "$GCCINSTALLDIR/usr/bin/as-original" "$GCCINSTALLDIR/usr/bin/as" - fi - if [ -f "$GCCINSTALLDIR/usr/bin/ld-original" ]; then - rm "$GCCINSTALLDIR/usr/bin/ld" - mv -f "$GCCINSTALLDIR/usr/bin/ld-original" "$GCCINSTALLDIR/usr/bin/ld" - fi - # preserve original LLVM-GCC on Xcode 4 and earlier - if [ ! -d "$GCCDIR/Library/Perl" ] || [ -d "$GCCDIR/Library/Perl/5.10" ]; then - mv "$GCCDIR"/usr/bin/{gcov,i686-apple-darwin"$RELEASENUM"-llvm-g{++,cc},llvm-{cpp,g++,gcc}}-4.2 "$GCCDIR" - (cd "$GCCDIR" || exit; rm -rf $GCCFILES ) - mv "$GCCDIR"/*-4.2 "$GCCDIR"/usr/bin - (cd "$GCCDIR/usr/llvm-gcc-4.2" || exit; rm -f {bin,lib/gcc,libexec/gcc,share/man/man1}/powerpc*) - else - [ -f "$GCCDIR/usr/bin/gcov-4.2" ] && [ ! -L "$GCCDIR/usr/bin/gcov-4.2" ] && mv "$GCCDIR/usr/bin/gcov-4.2" "$GCCDIR" - (cd "$GCCDIR" || exit; rm -rf $GCCFILES $LLVMGCCFILES) - [ -f "$GCCDIR/gcov-4.2" ] && mv "$GCCDIR/gcov-4.2" "$GCCDIR/usr/bin" - fi - (cd "$GCCINSTALLDIR" || exit; rm -rf $GCCFILES $LLVMGCCFILES) - rmdir "$GCCINSTALLDIR/usr/include/gcc/darwin" "$GCCINSTALLDIR/usr/include/gcc" || : - rmdir "$GCCINSTALLDIR/usr/lib/"{i686-apple-darwin10,powerpc-apple-darwin10}"/4.2.1" "$GCCINSTALLDIR/usr/lib/"{gcc/,}{i686-apple-darwin10,powerpc-apple-darwin10} "$GCCINSTALLDIR/usr/lib/gcc" || : - rmdir "$GCCINSTALLDIR/usr/libexec/gcc/"{i686-apple-darwin10,powerpc-apple-darwin10} "$GCCINSTALLDIR/usr/libexec/gcc" "$GCCINSTALLDIR/usr/libexec/ld" "$GCCDIR/usr/libexec/gcc/darwin" "$GCCDIR/usr/libexec/gcc" || : - rmdir "$GCCINSTALLDIR/usr/share/man/man7" || : - if [ -f "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec-original" ]; then - rm "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec" - mv -f "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec-original" "$PLATFORMDIR/Developer/Library/Xcode/Specifications/MacOSX Architectures.xcspec" - fi - fi - #for i in 10.4u 10.5 10.6 10.7 10.8 10.9 10.10; do - if [ "$osx104" = 1 ]; then - i=10.4u - [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" - fi - if [ "$osx105" = 1 ]; then - i=10.5 - [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" - fi - if [ "$osx106" = 1 ]; then - i=10.6 - [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" - fi - if [ "$osx107" = 1 ]; then - i=10.7 - [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" - fi - if [ "$osx108" = 1 ]; then - i=10.8 - [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" - fi - if [ "$osx109" = 1 ]; then - i=10.9 - [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" - fi - if [ "$osx1010" = 1 ]; then - i=10.10 - [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" - fi - if [ "$osx1011" = 1 ]; then - i=10.11 - [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" - fi - if [ "$osx1012" = 1 ]; then - i=10.12 - [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" - fi - if [ "$osx1013" = 1 ]; then - i=10.13 - [ -f "$SDKDIR/SDKs/MacOSX${i}.sdk/legacy" ] && rm -rf "$SDKDIR/SDKs/MacOSX${i}.sdk" - fi - - if [ "$compilers" = 1 ]; then - if [ "$GCCINSTALLDIR/usr/bin/gcc" -ef "$GCCINSTALLDIR/usr/bin/clang" ]; then - rm "$GCCINSTALLDIR/usr/bin/gcc" - fi - for b in llvm-g++ llvm-gcc; do - if [ -L $GCCINSTALLDIR/usr/bin/$b ] && [ ! -e $GCCINSTALLDIR/usr/bin/$b ]; then - rm $GCCINSTALLDIR/usr/bin/$b - fi - done - for b in c++-4.0 cpp-4.0 c++-4.2 cpp-4.2 gcc-4.0 g++-4.0 gcov-4.0 gcc-4.2 g++-4.2 gcov-4.2 llvm-cpp-4.2 llvm-g++-4.2 llvm-gcc-4.2; do - if [ -L $GCCLINKDIR/bin/$b ] && [ ! -e $GCCLINKDIR/bin/$b ]; then - rm $GCCLINKDIR/bin/$b - fi - done - for b in cpp-4.2.1 gcc-4.0.1 g++-4.0.1 gcc-4.2.1 g++-4.2.1 llvm-g++-4.2 llvm-gcc-4.2; do - if [ -L $GCCLINKDIR/bin/i686-apple-darwin10-$b ] && [ ! -e $GCCLINKDIR/bin/i686-apple-darwin10-$b ]; then - rm $GCCLINKDIR/bin/i686-apple-darwin10-$b - fi - done - for b in cpp-4.2.1 gcc-4.0.1 g++-4.0.1 gcc-4.2.1 g++-4.2.1 llvm-g++-4.2 llvm-gcc-4.2; do - if [ -L $GCCLINKDIR/bin/powerpc-apple-darwin10-$b ] && [ ! -e $GCCLINKDIR/bin/powerpc-apple-darwin10-$b ]; then - rm $GCCLINKDIR/bin/powerpc-apple-darwin10-$b - fi - done - fi - if [ -f "$PLATFORMDIR/Info.plist-original" ] && [ $(ls -1 "$SDKDIR"/SDKs/MacOSX*.sdk/legacy 2>/dev/null | wc -l) -eq 0 ]; then - rm "$PLATFORMDIR/Info.plist" - mv -f "$PLATFORMDIR/Info.plist-original" "$PLATFORMDIR/Info.plist" - fi - - ;; - -esac - - - -# Local variables: -# mode: shell-script -# sh-basic-offset: 4 -# sh-indent-comment: t -# indent-tabs-mode: nil -# End: -# ex: ts=4 sw=4 et filetype=sh From 62b5efbe951bd7e4517f981eb18a6053afe3cc96 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 24 Apr 2019 20:19:30 +0100 Subject: [PATCH 16/16] use newer sdk --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 36377acea3..3f4fbb0d50 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -49,7 +49,7 @@ jobs: inputs: actions: 'build' scheme: '' - sdk: 'macosx10.13' + sdk: 'macosx10.14' configuration: 'Release' xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace' xcodeVersion: 'default' # Options: 8, 9, default, specifyPath