Lazarus

Programming => Widgetset => Carbon => Topic started by: josh on June 16, 2019, 06:29:53 pm

Title: Is Mac carbon broken..
Post by: josh on June 16, 2019, 06:29:53 pm
Hi

I have an old app that must stay on carbon for s while yet; as it is run on old mac's.

I downloaded latest trunk of fpc and laz for x64 cocoa, and the cross compiler for i386 darwin.

If I try to compile any project; even a blank form I get error

carbongdiobjects.pp(2072,45) Error: Incompatible type for arg no. 1: Got "Array[0..1] Of Single", expected "TCarbonDashes"

Code: [Select]
case FStyle of
    PS_DASH:
      begin
        ADashes := GetDashes(CarbonDashStyle);
        CGContextSetLineDash(ADC.CGContext, 0, @ADashes[0], Length(ADashes));
      end;
    PS_DOT:
      begin
        ADashes := GetDashes(CarbonDotStyle);
        CGContext


Any ideas
Title: Re: Is Mac carbon broken..
Post by: dbannon on June 17, 2019, 01:50:55 am
Josh, I used fixes (rather than trunk) a few days ago to build the carbon version of my app. All good.

As its likely no one is updating anything to do with Carbon anymore, there would seem very little point in you using trunk anyway (?)

Davo
Title: Re: Is Mac carbon broken..
Post by: PascalDragon on June 17, 2019, 09:02:48 am
Josh, I used fixes (rather than trunk) a few days ago to build the carbon version of my app. All good.

As its likely no one is updating anything to do with Carbon anymore, there would seem very little point in you using trunk anyway (?)
Only because Carbon is no longer going to be supported on new Macs doesn't mean that Lazarus should stop supporting Carbon. For older Macs that might still be necessary.

@josh: maybe best report a bug.
Title: Re: Is Mac carbon broken..
Post by: Thaddy on June 17, 2019, 09:17:31 am
Maybe something like this, note I eddited the code later:
Code: Pascal  [Select]
  1. type PCarbonDashes = ^TCarbonDashes
  2.  
  3. // and
  4. CGContextSetLineDash(ADC.CGContext, 0, PCarbonDashes(@ADashes[0]), Length(ADashes));// count = length(Adashes) indeed
[
Anyway, I noticed that TCarbonDashes is declared as a dynamic array. now. So it can be that ADashes is declared wrong.
The error indicates you used a fixed length array[0..1] for ADashes instead of a dynamic array.
Title: Re: Is Mac carbon broken..
Post by: nsl on June 17, 2019, 02:38:29 pm

GetDashes expects parameter of type TCarbonDashes where
TCarbonDashes = array of Float32;

But the parameter passed is
CarbonDashStyle: Array [0..1] of Single

Float32 is alias for Single so should be assignment compatible.

I tried compiling the trunk code with version 3.0.4 I386 compiler and Carbon with no errors.

Could this be a compiler version issue?
Title: Re: Is Mac carbon broken..
Post by: Cyrax on June 17, 2019, 05:23:14 pm

GetDashes expects parameter of type TCarbonDashes where
TCarbonDashes = array of Float32;

But the parameter passed is
CarbonDashStyle: Array [0..1] of Single

Float32 is alias for Single so should be assignment compatible.

I tried compiling the trunk code with version 3.0.4 I386 compiler and Carbon with no errors.

Could this be a compiler version issue?

In FPC trunk, conversion from regular arrays to dynamic ones has been disabled by default. See this for more info and how to enable it : https://wiki.lazarus.freepascal.org/User_Changes_Trunk#Disabled_default_support_for_automatic_conversions_of_regular_arrays_to_dynamic_arrays
Title: Re: Is Mac carbon broken..
Post by: skalogryz on June 17, 2019, 07:52:49 pm
sounds like the fix is trivial
Quote
Remedy: Either change the code so it no longer assigns regular arrays to dynamic arrays, or add {$modeswitch arraytodynarray}
I have an old app that must stay on carbon for s while yet; as it is run on old mac's.
how old macOS are? (10.5, 10.4? older?)
Title: Re: Is Mac carbon broken..
Post by: josh on June 17, 2019, 08:39:05 pm
On trunk fpc and Lazarus
I have tried the {$modeswitch arraytodynarray}
in project lpr, and main unit1.pas of a an empty project, done a clean rebuild of blank form and get the same error.

Where should I be placing the {$modeswitch arraytodynarray} ?

Title: Re: Is Mac carbon broken..
Post by: skalogryz on June 17, 2019, 09:24:03 pm
seems like the fix is only used for parameters passing.

try this patch.
Code: Diff  [Select]
  1. Index: carbongdiobjects.pp
  2. ===================================================================
  3. --- carbongdiobjects.pp (revision 61402)
  4. +++ carbongdiobjects.pp (working copy)
  5. @@ -2022,13 +2022,13 @@
  6.   ------------------------------------------------------------------------------}
  7.  procedure TCarbonPen.Apply(ADC: TCarbonContext; UseROP2: Boolean);
  8.  
  9. -  function GetDashes(Source: TCarbonDashes): TCarbonDashes;
  10. +  function GetDashes(const Source: array of Single): TCarbonDashes;
  11.    var
  12.      i: Integer;
  13.    begin
  14. -    Result := Source;
  15. +    SetLength(Result, length(Source));
  16.      for i := Low(Result) to High(Result) do
  17. -      Result[i] := Result[i] * FWidth;
  18. +      Result[i] := Source[i] * FWidth;
  19.    end;
  20.  
  21.  var
  22.  

Oddly enough, this was the exact place I've recently rewritten Cocoa getting rid of dynamic arrays (and dynamic array reallocation) completely
Title: Re: Is Mac carbon broken..
Post by: josh on June 17, 2019, 11:57:59 pm
Hi

The patch is helping, I can now compile a empty form; but when targeting for carbon I am getting
Code: [Select]
Compile Project, CPU: i386, Target: /Users/josh/lazarus_trunk_cocoa/projects/project1: Success, Errors: 21
Error: ld: warning: text-based stub file /System/Library/Frameworks//OpenGL.framework/OpenGL.tbd and library file /System/Library/Frameworks//OpenGL.framework/OpenGL are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks//Foundation.framework/Foundation.tbd and library file /System/Library/Frameworks//Foundation.framework/Foundation are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks//Cocoa.framework/Cocoa.tbd and library file /System/Library/Frameworks//Cocoa.framework/Cocoa are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks//OpenGL.framework/OpenGL.tbd and library file /System/Library/Frameworks//OpenGL.framework/OpenGL are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.tbd and library file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.tbd and library file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks//ApplicationServices.framework/Versions/A/ApplicationServices.tbd and library file /System/Library/Frameworks//ApplicationServices.framework/Versions/A/ApplicationServices are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/Versions/A/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/Versions/A/CoreFoundation are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks//AppKit.framework/Versions/C/AppKit.tbd and library file /System/Library/Frameworks//AppKit.framework/Versions/C/AppKit are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks//CoreGraphics.framework/Versions/A/CoreGraphics.tbd and library file /System/Library/Frameworks//CoreGraphics.framework/Versions/A/CoreGraphics are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks//CoreText.framework/Versions/A/CoreText.tbd and library file /System/Library/Frameworks//CoreText.framework/Versions/A/CoreText are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks//ImageIO.framework/Versions/A/ImageIO.tbd and library file /System/Library/Frameworks//ImageIO.framework/Versions/A/ImageIO are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks//CoreServices.framework/Versions/A/CoreServices.tbd and library file /System/Library/Frameworks//CoreServices.framework/Versions/A/CoreServices are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis.tbd and library file /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation.tbd and library file /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks//CFNetwork.framework/Versions/A/CFNetwork.tbd and library file /System/Library/Frameworks//CFNetwork.framework/Versions/A/CFNetwork are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices are out of sync. Falling back to library file for linking.
Error: ld: warning: text-based stub file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList.tbd and library file /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList are out of sync. Falling back to library file for linking.


I added a few standard controls; label; combox and tmemo.
Moving around a putting some text in I then got estack overflow error
Title: Re: Is Mac carbon broken..
Post by: nsl on June 18, 2019, 12:47:46 pm
@skalogryz
Re: line style code in Cocoa. I have made additional comments to your changes as reported in Mantis #0034744. Would you be able to review please?

@josh
I get these warnings as well but my code compiles and runs OK
Title: Re: Is Mac carbon broken..
Post by: skalogryz on June 18, 2019, 02:50:28 pm
Re: line style code in Cocoa. I have made additional comments to your changes as reported in Mantis #0034744. Would you be able to review please?
from #34744
Quote
1) Thank you for implementing the added cosmetic pen styles.
nah. thank you for the patch.

Quote
2) The modification to the patterns for geometric pens is not implemented. I have attached powerpoint slides as evidence that better comparison is possible. These show even better agreement with Windows than my earlier patch.
ok. need to do more work (as shown on slide 6)

Quote
3) I have attached a zipped project of the test harness I used to comparing line styles.
test project is helpful indeed. mind if I publish it? (on github?)

Quote
4) There is no change to the Carbon implementation. Is this to remain legacy?
Yes. well, maybe THIS issue would trigger the change. But honestly, I don't really want to do ANY updates to carbon.
(I'd rather make cocoa run on prior version of macOS instead :))

aside question. what are you developing?
I've never seen ANY developer to prepare a powerpoint presentation as an evidence of (non)working code.

upd: please try the latest trunk. Geometric styles should now be much better.
Title: Re: Is Mac carbon broken..
Post by: nsl on June 18, 2019, 07:46:45 pm
Just tried revision 61411. Line styles now good. I'll close the ticket.

I have no problem if you wish to publish the test code on github.

I came across the line styles issue when transferring a small Windows scientific project using TAChart. The dotted lines did not look the same. I had recently got a MacBook and now that Lazarus is so much better on MacOS I thought I would give it a try.

My background is in scientific computing and very use to using Powerpoints to publish ideas to colleagues and managers.

Thank you for your help.