Opened 7 months ago

Last modified 7 months ago

#60819 new defect

sfml fails to build on 10.6.8 due to missing method backingScaleFactor

Reported by: programmingkidx Owned by:
Priority: Normal Milestone:
Component: ports Version:
Keywords: snowleopard leopard tiger Cc: rkitover@…, programmingkidx
Port: sfml


sfml fails to build on Mac OS 10.6.8 because of a missing method called backingScaleFactor. According to this page the method was added in Mac OS 10.7.

Here is the error message:

_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_multimedia_sfml/sfml/work/SFML-2.4.2/src/SFML/Window/OSX/ warning: instance method '-backingScaleFactor' not found (return type defaults to 'id') [-Wobjc-method-access]
:info:build     int scale = [[NSScreen mainScreen] backingScaleFactor];

This is caused later:

opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_multimedia_sfml/sfml/work/SFML-2.4.2/src/SFML/Window/OSX/ error: cannot initialize a variable of type 'int' with an rvalue of type 'id'
:info:build     int scale = [[NSScreen mainScreen] backingScaleFactor];
:info:build         ^       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Attachments (1)

main.log (519.2 KB) - added by programmingkidx 7 months ago.

Download all attachments as: .zip

Change History (10)

comment:1 Changed 7 months ago by programmingkidx

Cc: programmingkidx added

Changed 7 months ago by programmingkidx

Attachment: main.log added

comment:2 Changed 7 months ago by kencu (Ken)

Now you're running into some slightly harder stuff.

This is caused by advancements to the Apple SDKs over time. You have to either:

  1. build against a newer SDK (like the 10.7 SDK) and see if it works. It does sometimes. Sometimes, it does not, if the software wasn't written with that possibility in mind. See the libsdl2 Portfile for an example of this that works, and how it was done.
  2. rewrite the software to the SDK you are trying to build against, in this case the 10.6 SDK. Sometimes is pretty easy, a few #ifdefs or some #if __MAC_OS_X_VERSION_MAX_ALLOWED__ guards can get you there.

This particular error is pretty easy to fix, as the change from the 10.6 SDK is pretty minor and simple to implement. If you go into the macports portfile tree and do a search for that, something like :

cd `port dir sfml`../../ 

and then use your favourite searcher, I like the_silver_searcher

ag backingScaleFactor .

you might get lucky and find another port that has already patched this, and see what they did.

Or you can type "backingScaleFactor" into the "Search" box at the top right of this screen we're on here, and that will search for other tickets where this was handled.

Or "Google is your Friend" and sometimes there is a hit or two on the web for this.

Sometimes I download the last version of the software that did build on 10.6, and compare the source code to see what changed between the version that built on 10.6 and the version that did not build. That can give you some clues (I got wine working on 10.6.8 that way recently).

But -- never a trivial fix, nobody is likely to help you other than a very few of us, and it will not be fixed particularly quickly.

There is a user trying to automate some of these SDK evolution things, and that might (or might not) work -- we'll see.

comment:3 Changed 7 months ago by kencu (Ken)

Cc: programmingkidx removed
Keywords: snowleopard leopard tiger added
Summary: sfml fails to build due to missing method backingScaleFactorsfml fails to build on 10.6.8 due to missing method backingScaleFactor

comment:4 Changed 7 months ago by kencu (Ken)

Last edited 7 months ago by ryandesign (Ryan Schmidt) (previous) (diff)

comment:5 Changed 7 months ago by programmingkidx

  • The solution here was to return 1.0 on Mac OS 10.6 and under. I agree with this solution.
 // Support for OSX 10.6
  if (![[NSScreen mainScreen] respondsToSelector:@selector(backingScaleFactor)]) return 1.0f;

comment:6 Changed 7 months ago by kencu (Ken)

How about you try to put together a whole patch, and we'll see how it works. All my investment in you so far is just about ripe to pay off soon :> The idea is to have a patch that will work on all systems all the time, not (ideally) generate warnings, certainly not generate errors, and actually works in testing.

AFAICT backingScaleFactor is still not defined, right? Probably have to fix that too...or you'll get errors soon when that becomes an error...

You're making progress !

Last edited 7 months ago by kencu (Ken) (previous) (diff)

comment:7 Changed 7 months ago by rkitover (Rafael Kitover)

Hi guys, I'm the original port submitter.

If you are going to update the port, could you please bump up the version too, the current release is 2.5.1.

I could do this myself if you prefer.

comment:8 Changed 7 months ago by rkitover (Rafael Kitover)

As regards backingScaleFactor, I'm somewhat familiar with these APIs.

These are the HiDPI APIs added in 10.7.5 to support the then new "retina" macbook pros.

It should be fairly easy to patch around this stuff, and just set the scale to 1 if the API is not available.

It would be nice to get any patch merged upstream as well.

comment:9 Changed 7 months ago by programmingkidx

Cc: programmingkidx added
Note: See TracTickets for help on using tickets.