# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4 # $Id$ PortSystem 1.0 PortGroup github 1.0 PortGroup qt4 1.0 PortGroup compiler_blacklist_versions 1.0 set shorthash 39686c6c # set fullhash 39686c6c6800053fe25764d2f27cfdfc2dd21fab set majorversion .27 set minorversion "" github.setup MythTV mythtv ${shorthash} checksums rmd160 bf830de2168ad591b27e3e2b009816996e1649e7 \ sha256 17b7c454d07a4237a1b3583651712a195e9712a88e04582a50868ea33b0c697e name mythtv-core${majorversion} version 0${majorversion}${minorversion}-Fixes-20140404 categories multimedia platforms darwin # i386 unsupported -- https://trac.macports.org/ticket/40337 supported_archs x86_64 license GPL-2 maintainers cogeco.ca:ctreleaven openmaintainer description personal video recorder (PVR) and media centre system long_description The ultimate Digital Video Recorder and home media \ center hub. Think of it as a Free and Open Source alternative \ to Windows Media Center or Tivo. homepage http://www.mythtv.org/ set nick mythtv set mythtvhomedir ${prefix}/var/mythtvuser set mythtvlogdir ${prefix}/var/log/${nick}${majorversion} set mythtvrundir ${prefix}/var/run/${nick}${majorversion} set mythtvpidfile ${mythtvrundir}/${nick} set plistdir ${prefix}/Library/LaunchDaemons set plistlabel org.mythtv.mythbackend set plistfile org.mythtv.mythbackend.plist set mythverstring v0${majorversion}${minorversion}-${shorthash}-MacPorts set mythbranch fixes/0${majorversion} set applescripts {Myth_Frontend Myth_Filldatabase Myth_Setup Myth_Stop_Start} set mysqlver mysql5 set perlver perl5.12 set perlbin ${prefix}/bin/${perlver} set perlmodver p5.12 set pythonver python2.6 set pythonbin ${prefix}/bin/${pythonver} set pymodver py26 depends_lib port:bzip2 \ port:libass \ port:libcdio \ port:libdvdcss \ port:libiconv \ port:libxml2 \ port:freetype \ port:lame \ port:faac \ port:x264 \ port:qt4-mac-${mysqlver}-plugin \ port:taglib \ port:zlib \ port:${pymodver}-mysql \ port:${pymodver}-lxml \ port:${pymodver}-urlgrabber \ port:${perlmodver}-dbd-mysql \ port:${perlmodver}-http-request-ascgi \ port:${perlmodver}-lwp-useragent-determined \ port:${perlmodver}-io-socket-inet6 \ port:${perlmodver}-datemanip \ port:${perlmodver}-net-upnp depends_build port:yasm port:pkgconfig conflicts mythtv-core.25 mythtv-core.26 depends_run port:logrotate pre-fetch { if {${os.platform} eq "darwin" && ${os.major} < 9} { ui_error "${name} ${version} requires Mac OS X 10.5 or greater." return -code error "incompatible Mac OS X version" } } #fix libmythtv linking against prior installed versions # see mythtv-dev thread, committed to master patchfiles-append patch-libs_fix_linking.diff # following patch currently required to support MythExpress # See ticket: http://code.mythtv.org/trac/ticket/10825 patchfiles-append patch-protect-metadata-loads-from-multiple-threads.diff # revert rpath linking stuff as it is non-functional in MacPorts patchfiles-append patch-rpath_linking.diff # patches to support freetype 2.5.1 changes to include layout # http://code.mythtv.org/trac/ticket/11967 patchfiles-append patch-freetype-2.5.1.diff post-extract { file mkdir ${worksrcpath}/macports foreach {applescript} ${applescripts} { copy ${filespath}/${applescript}.applescript ${worksrcpath}/macports/${applescript}.applescript } copy ${filespath}/${plistfile} ${worksrcpath}/macports/${plistfile} copy ${filespath}/logrotate.conf ${worksrcpath}/macports/logrotate.conf copy ${filespath}/logrotate.mythtv ${worksrcpath}/macports/logrotate.mythtv } post-patch { set sedPath ${worksrcpath}/mythtv/ ui_info "Make Myth utils use MacPorts Perl" reinplace -locale C "s|check_cmd perl -e|check_cmd ${perlbin} -e|" \ ${sedPath}configure reinplace -locale C "s|#!/usr/bin/env perl|#!${perlbin}|" \ ${sedPath}programs/scripts/internetcontent/topdocumentaryfilm.pl \ ${sedPath}programs/scripts/internetcontent/twit.tv.pl reinplace -locale C "s|#!/usr/bin/perl|#!${perlbin}|" \ ${sedPath}bindings/perl/Makefile.PL \ ${sedPath}bindings/perl/MythTV.pm \ ${sedPath}contrib/maintenance/optimize_mythdb.pl \ ${sedPath}contrib/user_jobs/mythlink.pl \ ${sedPath}programs/scripts/database/mythconverg_backup.pl \ ${sedPath}programs/scripts/database/mythconverg_restore.pl reinplace -locale C "s|/usr/local/bin|${prefix}/lib/${mysqlver}/bin|" \ ${sedPath}programs/scripts/database/mythconverg_backup.pl \ ${sedPath}programs/scripts/database/mythconverg_restore.pl ui_info "Record Myth version strings" reinplace -locale C "s#\${SOURCE_VERSION}#${mythverstring}#g" ${sedPath}version.sh reinplace -locale C "s#\${BRANCH}#${mythbranch}#g" ${sedPath}version.sh ui_info "Make Myth scripts use MacPorts Python <<<<" # Hack to install Python bindings in ${prefix}/Library/Frameworks/Python.framework/Versions/2.6 reinplace -locale C "s|\$(ROOT_FLAGS) \$(PREFIX_FLAGS)|\$(ROOT_FLAGS) \--prefix=\"${frameworks_dir}/Python.framework/Versions/2.6\"|" \ ${sedPath}/bindings/python/Makefile reinplace -locale C "s|/usr/local|${prefix}|" ${worksrcpath}/mythtv/bindings/python/MythTV/static.py reinplace -locale C "s|#!python|#!${pythonbin}|" \ ${worksrcpath}/mythtv/bindings/python/scripts/mythpython \ ${worksrcpath}/mythtv/bindings/python/scripts/mythwikiscripts fs-traverse f ${sedPath}/bindings/python/ { if [string equal [ file extension ${f} ] ".py" ] { reinplace -locale C "s|^#! */usr/bin/env python\$|#!${pythonbin}|" ${f} } } fs-traverse f ${sedPath}/programs/scripts/ { if [string equal [ file extension ${f} ] ".py" ] { reinplace -locale C "s|^#! */usr/bin/env python\$|#!${pythonbin}|" ${f} } } foreach f [glob -directory ${sedPath}/programs/scripts/hardwareprofile *.py] { # fix even though they're currently non-functional on OS X reinplace -locale C "s|^#!/usr/bin/python\$|#!${pythonbin}|" ${f} } foreach {applescript} ${applescripts} { reinplace -locale C "s|@PREFIX@|${prefix}|g" ${worksrcpath}/macports/${applescript}.applescript reinplace -locale C "s|@APPLICATIONS_DIR@|${applications_dir}|" ${worksrcpath}/macports/${applescript}.applescript reinplace -locale C "s|@MYTHTVLOGDIR@|${mythtvlogdir}|" ${worksrcpath}/macports/${applescript}.applescript reinplace -locale C "s|@MYTHTVPIDFILE@|${mythtvpidfile}|" ${worksrcpath}/macports/${applescript}.applescript } reinplace -locale C "s|@PREFIX@|${prefix}|g" ${worksrcpath}/macports/${plistfile} reinplace -locale C "s|@PLISTLABEL@|${plistlabel}|g" ${worksrcpath}/macports/${plistfile} reinplace -locale C "s|@PYTHONVER@|${pythonver}|" ${worksrcpath}/macports/${plistfile} reinplace -locale C "s|@MYTHTVLOGDIR@|${mythtvlogdir}|" ${worksrcpath}/macports/${plistfile} reinplace -locale C "s|@MYTHTVPIDFILE@|${mythtvpidfile}|" ${worksrcpath}/macports/${plistfile} reinplace -locale C "s|@PREFIX@|${prefix}|g" ${worksrcpath}/macports/logrotate.conf reinplace -locale C "s|@MYTHTVLOGDIR@|${mythtvlogdir}|g" ${worksrcpath}/macports/logrotate.mythtv reinplace -locale C "s|xxxyyyzzz|${mythtvpidfile}|" ${worksrcpath}/mythtv/configure } # Block various compilers: # # (shamelessly stolen from Qt4-mac, thanks Michael!) # * Some older versions of CLANG do not honor the LIBRARY_PATH # environment variables, which is required for compiling # this port when using MacPorts. The versions seem to be: MacPorts # CLANG 3.0 or earlier, and Apple CLANG 318.0.61 or older (XCode 4.3.3 and prior). # # See http://code.mythtv.org/trac/ticket/11070 # Run-time failures experienced with certain versions of Clang. Unable to discern cause. # Most recent version of clang seems OK, let's try again compiler.fallback-append apple-gcc-4.2 compiler.blacklist-append { clang <= 500.2.79 } \ macports-clang* # Clear all MacPorts flags...MythTV is smart enough to set up its own. # (ala qt4-mac/Portfile) configure.cflags configure.cppflags configure.cxxflags configure.objcflags configure.ldflags configure.universal_cflags configure.universal_cppflags configure.universal_cxxflags configure.universal_ldflags configure.cc_archflags configure.cxx_archflags configure.ld_archflags configure.dir ${worksrcpath}/mythtv configure.args --compile-type=release \ --qmake=${qt_qmake_cmd} \ --cc=${configure.cc} \ --cxx=${configure.cxx} \ --python=${pythonbin} \ --disable-mythlogserver \ --disable-ceton \ --disable-firewire \ --disable-audio-jack --disable-indev=jack \ --disable-libvpx --disable-libxvid \ --disable-qtdbus \ --disable-sdl \ --disable-xrandr \ --enable-libmp3lame \ --enable-libass \ --enable-libx264 --enable-libfaac --enable-nonfree if {${configure.ccache} != "yes"} { configure.args-append --disable-ccache } if {${configure.distcc} != "yes"} { configure.args-append --disable-distcc } build.dir ${worksrcpath}/mythtv pre-build { # workaround broken linker flags, see # https://trac.macports.org/ticket/40136 reinplace -locale C "s|LDFLAGS= |LDFLAGS= -headerpad_max_install_names |" ${worksrcpath}/mythtv/external/FFmpeg/config.mak ui_info "Build Myth AppleScript helper apps" # Compile applescrips foreach {applescript} ${applescripts} { system "osacompile -x -o ${worksrcpath}/macports/${applescript}.app ${worksrcpath}/macports/${applescript}.applescript" } # Myth custom icon for a couple of the applets copy -force ${configure.dir}/programs/mythfrontend/mythfrontend.icns ${worksrcpath}/macports/Myth_Frontend.app/Contents/Resources/applet.icns copy -force ${configure.dir}/programs/mythfrontend/mythfrontend.icns ${worksrcpath}/macports/Myth_Stop_Start.app/Contents/Resources/applet.icns } # All tests fail with messages like: # dyld: Library not loaded: @rpath//opt/local/lib/libmythbase-0.27.0.dylib # Referenced from: /opt/local/var/macports/build/_Users_craigtreleaven_MacPortsTemp_mythtv-core-devel/mythtv-core.27/work/mythtv-8b542e20/mythtv/libs/././libmyth/test/test_audioconvert/test_audioconvert # Reason: image not found # ../programs/scripts/unittests.sh: line 15: 41587 Trace/BPT trap ./$RUNNABLE # Need to investigate why rpath not working under MacPorts... # test.run yes destroot.destdir INSTALL_ROOT=${destroot} post-destroot { # make some directories myth will need xinstall -d -m 755 ${destroot}${mythtvhomedir} xinstall -d -m 777 ${destroot}${mythtvlogdir} xinstall -d -m 777 ${destroot}${mythtvlogdir}/old xinstall -d -m 755 ${destroot}${prefix}/etc/logrotate.d xinstall -d -m 744 ${destroot}${mythtvrundir} destroot.keepdirs \ ${destroot}${mythtvhomedir} \ ${destroot}${mythtvlogdir} \ ${destroot}${mythtvlogdir}/old \ ${destroot}${mythtvrundir} # install logrotate.mythtv xinstall -m 400 ${worksrcpath}/macports/logrotate.mythtv ${destroot}${prefix}/etc/logrotate.d # install the launchd plist for the backend ui_info "Installing startupitem/launchd plist..." xinstall -d -m 0755 ${destroot}${plistdir} xinstall ${worksrcpath}/macports/${plistfile} ${destroot}${plistdir} # install scripts we want in share/contrib ui_info "Installing share/$name/contrib scripts..." xinstall -d -m 755 ${destroot}${prefix}/share/${nick}/database xinstall -d -m 755 ${destroot}${prefix}/share/${nick}/contrib xinstall -m 755 \ ${configure.dir}/database/mc.sql \ ${destroot}${prefix}/share/${nick}/database xinstall -m 755 \ ${configure.dir}/contrib/maintenance/optimize_mythdb.pl \ ${configure.dir}/contrib/user_jobs/mythlink.pl \ ${destroot}${prefix}/share/${nick}/contrib # install some simple Applescripts to launch common myth apps ui_info "Installing Applescript helpers..." # compile the Applescripts xinstall -m 755 -d ${destroot}${applications_dir}/MythTV foreach {applescript} ${applescripts} { copy ${worksrcpath}/macports/${applescript}.app ${destroot}${applications_dir}/MythTV/${applescript}.app } # Myth custom icon for a couple of the applets copy -force ${configure.dir}/programs/mythfrontend/mythfrontend.icns ${destroot}${applications_dir}/MythTV/Myth_Frontend.app/Contents/Resources/applet.icns copy -force ${configure.dir}/programs/mythfrontend/mythfrontend.icns ${destroot}${applications_dir}/MythTV/Myth_Stop_Start.app/Contents/Resources/applet.icns # Fix up library entries in dylibs and executables ... # need to loop on arch's if/when build universal ?!? set libdir ${prefix}/lib ui_info "Correcting library entries in dylibs..." foreach {dylib} [glob -types f -tails -directory ${destroot}${libdir} *.dylib] { # glob gives us both files and links to files if { [file type ${destroot}${libdir}/${dylib}] == "file" } { ui_debug "... for ${dylib}" system "install_name_tool -id ${libdir}/${dylib} ${destroot}${libdir}/${dylib}" set otool [lrange [split [exec otool -L ${destroot}${libdir}/${dylib}] \n] 1 end] foreach {otoolentry} ${otool} { # fix entries like "libmythswscale.dylib" to "${prefix}/lib/libmythswscale.dylib" # assume anything without a leading slash needs fixing set firstchar [string range [string trimleft ${otoolentry}] 0 0] if { ${firstchar} != "/" } { set lib [lindex ${otoolentry} 0] ui_debug " Change ${lib} to ${libdir}/[file tail ${lib}]" system "install_name_tool -change \ ${lib} \ ${libdir}/[file tail ${lib}] \ ${destroot}${libdir}/${dylib}" } } } } set bindir ${prefix}/bin ui_info "Correcting library entries in executables..." foreach {prog} [glob -types f -tails -directory ${destroot}${bindir} *] { # glob gives us files and links to files but should be no links in bin dir ui_debug "... for ${prog}" set otool [lrange [split [exec otool -L ${destroot}${bindir}/${prog}] \n] 1 end] foreach {otoolentry} ${otool} { # fix entries like "libmythswscale.dylib" to "${prefix}/lib/libmythswscale.dylib" # assume anything without a leading slash needs fixing set firstchar [string range [string trimleft ${otoolentry}] 0 0] if { ${firstchar} != "/" } { set lib [lindex ${otoolentry} 0] ui_debug " Change ${lib} to ${libdir}/[file tail ${lib}]" system "install_name_tool -change \ ${lib} \ ${libdir}/[file tail ${lib}] \ ${destroot}${bindir}/${prog}" } } } # fix lib entries in filters set fltdir ${prefix}/lib/mythtv/filters set liblist [glob -types f -tails -directory ${destroot}${libdir} -- *.dylib] ui_info "Correcting library entries in plugins..." foreach {flt} [glob -types f -tails -directory ${destroot}${fltdir} *] { # glob gives us files and links to files but should be no links in filters dir ui_debug "... for ${flt}" set otool [lrange [split [exec otool -L ${destroot}${fltdir}/${flt}] \n] 1 end] foreach {otoolentry} ${otool} { # fix entries like "libmythswscale.dylib" to "${prefix}/lib/libmythswscale.dylib" # assume anything without a leading slash needs fixing set firstchar [string range [string trimleft ${otoolentry}] 0 0] if { ${firstchar} != "/" } { set lib [lindex ${otoolentry} 0] if { [ lsearch $liblist ${lib} ] > 0 } { set goodprefix ${libdir} } else { set goodprefix ${fltdir} } ui_debug " Change ${lib} to ${goodprefix}/[file tail ${lib}]" system "install_name_tool -change \ ${lib} \ ${goodprefix}/[file tail ${lib}] \ ${destroot}${fltdir}/${flt}" } } } } universal_variant no post-activate { # make logrotate ready to go if {![file exists ${prefix}/etc/logrotate.conf]} { file copy ${destroot}logrotate.conf ${prefix}/etc/logrotate.conf } # delete leftover file, if any if [file exists /Library/LaunchDaemons/${plistfile}] { file delete -force /Library/LaunchDaemons/${plistfile} } # The startupitem.install keyword does not exist in MacPorts < 2.1. if {![info exists startupitem.install]} { set startupitem.install yes } # If "startupitem.install" is set to "no" in macports.conf then do not link. if {${startupitem.install} != "no"} { ln -s ${plistdir}/${plistfile} /Library/LaunchDaemons } } pre-deactivate { file delete -force ${plistdir}/${plistfile} } notes "############################################################################ # # See http://www.mythtv.org/wiki/Myth_for_Mac_with_MacPorts for information # essential to finishing the initial installation of MythTV! # # NB - # For troubleshooting, all Myth-related logs are stored in # ${mythtvlogdir} # ############################################################################" livecheck.version ${majorversion}${minorversion} livecheck.regex "archive/v(0.27\[\\.\\d\]?)${extract.suffix}"