Purposefully oblique description, I know.
Basically there are two ways of not supporting a platform.
One way is to not support the architecture. If I compile something as ppc64, noone on a G3 or G4 CPU will be able to run it natively, nor will x86 folks be able to run it under Rosetta. I can try to be cute, and compile something for x86 arch, cutting off all PPC folks. I can compile something optimized for PPC7400 CPU (G4). G5 and G4 systems will run it and G3s will not (This is exactly what Apple did with iMovie and iDVD in iLife ’06). Lastly, I can compile something in one of the “depreciated” formats, potentially for Classic, and cut off x86 folks, and annoy all PPC folks who would now have to start Classic to run my creation. Oh, the choices.
The other way is to restrict things by the configuration, and check during runtime.
Procedure for checking that the architecture you are using is supported by the application.
bash$ cd Example_App.app/Contents/MacOS
bash$ file Example_App
Example_App: Mach-O fat file with 2 architectures
Example_App (for architecture ppc): Mach-O executable ppc
Example_App (for architecture i386): Mach-O executable i386
or
bash$ cd Other_Example/Contents/MacOS
bash$ file Other_Example
Other_Example: header for PowerPC PEF executable
Step 2a) If application is Mach-O, then you can use lipo to see if it’s compiled as a generic or as a platform specific:
bash$ lipo -detailed_info Example_App
Fat header in: Example_App
fat_magic 0xcafebabe
nfat_arch 2
architecture ppc
cputype CPU_TYPE_POWERPC
cpusubtype CPU_SUBTYPE_POWERPC_ALL
offset 4096
size 23388
align 2^12 (4096)
architecture i386
cputype CPU_TYPE_I386
cpusubtype CPU_SUBTYPE_I386_ALL
offset 28672
size 26976
align 2^12 (4096)
If you see CPU_SUBTYPE_POWERPC_ALL, application is compiled for all PowerPC platforms, from G3 to G5.
What you do not want to see on a G3 or G4 system is:
bash$ lipo -detailed_info Example_App
Fat header in: Example_App
fat_magic 0xcafebabe
nfat_arch 1
architecture ppc64
cputype CPU_TYPE_POWERPC64
cpusubtype CPU_SUBTYPE_POWERPC_ALL
offset 28672
size 8488
align 2^12 (4096)
Then you need a 64 bit platform, which amounts to G5 of various speeds.
It is possible that the application is in Mach-o format, but not in fat format.
otool -h -v will decode the mach header, and tell you what cpu is required:
Step 2b) If application is PEF (Preferred Executable Format) or CFM (Code Fragment Manager) things might be harder. I've not yet encountered a CFM or PEF app that would not run on PPC platform in one way or another, so this section needs further expantion.
In case of a runtime check, most commonly it is the platform architecture that is checked.
Some Apple professional software has something like this in AppleSampleProApp.app/Contents/Info.plist
AELMinimumOSVersion
10.4.4
AELMinimumProKitVersion
576
AELMinimumQuickTimeVersion
7.0.4
ALEPlatform_PPC
AELRequiredCPUType
G4
CFBundleDevelopmentRegion
English
Getting rid of
ALEPlatform_PPC
AELRequiredCPUType
G4
tends to get the app to run under G3.
Lastly, if application says something similar to “Platform POWERBOOK4,1 Unsupported”, maybe running strings on SampleApplication/Contents/MacOS/SampleApplication combined with grep -i powerbook can reveal something.
bash$ strings SampleApplication | grep POWER
POWERBOOK5
POWERBOOK6
-
POWERBOOK6,3
POWERMAC7
POWERMAC9,1
POWERMAC3,6
POWERMAC11,2
-
POWERMAC11,1
So if you want to run this application on 500Mhz iBook G3 for some reason (hi, dAVE), it might make sense to fire up a hexeditor, and change one of the “allowed” arches to match yours.
For example to this:
bash$ strings SampleApplication | grep POWER
POWERBOOK4
POWERBOOK6
-
POWERBOOK6,3
POWERMAC7
POWERMAC9,1
POWERMAC3,6
POWERMAC11,2
-
POWERMAC11,1
But don’t mind me. I am just rambling.