MythTV on Mac x86
MythTV currently does not build on the new Intel based Apple Macintosh platforms. This page is intended to share information among the people attempting to get this working.
In the 'contrib' directory of the MythTV source code, there is a perl script which automates the build process for MythTV on MacOS systems. The script is called osx-packager.pl. My descriptions of changes needed assume that script as a starting point.
Changes Needed
Here's a brief summary of chages I made to get further into the build process (updated with Brendan White's config info):
- Enable backend, 'osx-packager.pl -enable-backend'. Otherwise, the frontend fails when necessary components aren't available.
- Update QT version being used. 3.3.4 doesn't compile with gcc 4.0; 3.3.5 compiles but generates a bus error when displaying Myth menus. Using a development snapshot of 3.3.6 seems to work. Replace the QT url in osx-packager with the following: ftp://ftp.trolltech.com/qt/snapshots/qt-mac-free-3.3.6-snapshot-20060311.tar.gz
- Override URL for libdvdnav in osx-packager.pl, was not available where the script was looking for it. I set it to: http://umn.dl.sourceforge.net/sourceforge/dvd/libdvdnav-0.1.10.tar.gz
- libdvdnav: Endian byte swapping missing from bswap.h. Probably due to not recognizing the arch. See bswap changes described below.
- libexif: compile failed. comment out the 'static' in exif-utils.c line 83.
- libdvdread: Endian byte swapping missing from bswap.h. Probably due to not recognizing the arch. Instead of the generic else case for bswap, you can use the Apple-supplied routines:
#elif defined(__APPLE__) #include <libkern/OSByteOrder.h> #define B2N_16(x) x = OSSwapBigToHostConstInt16(x) #define B2N_32(x) x = OSSwapBigToHostConstInt32(x) #define B2N_64(x) x = OSSwapBigToHostConstInt64(x)
MythTV changes:
- Update osx-packager.pl to add configure parameters used in building MythTV. In the section "configure mythplugins, and mythtv, etc", the 'mythtv' portion should look something like this:
'mythtv' => [ '--disable-distcc', '--disable-mmx', '--arch=i686', '--extra-cxxflags=-msse -msse2 -msse3', '--prefix=' . $PREFIX, ],
- Fix libs/libavcodec/liba52/resample.c -- Even though mmx has been disabled, there are some silly assumptions in this file. remove the ifdef that includes resample_mmx.c. Also remove the ifdef ARCH_X86 stanzas.
- 3rd bswap.h patch, in file 'libs/libmythdvdnav/bswap.h'. See bswap changes described above.
- Fix libs/libfreemheg/BaseClasses.h (called from Actions.cpp), #include <malloc.h> to #include <sys/malloc.h>
Current Status
Application successfully compiles. MythTV menu system displays, and communicates with backend.
Seg Faults when trying to display video. Doesn't display list of programs from backend.
Useful Links
ffmpeg updates for mmx assembly code
Other Notes
'/proc/cpuinfo/' is used to determine CPU type in linux builds. In MacOS, "/usr/sbin/system_profiler SPHardwareDataType" could be used to determine the architecture and CPU type.