# -*- coding: utf-8; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:et:sw=4:ts=4:sts=4
# $Id: Portfile 117995 2014-03-18 18:28:39Z jeremyhu@macports.org $

PortSystem          1.0
PortGroup           compiler_blacklist_versions 1.0

name                VLC
version             2.1.3
categories          multimedia

maintainers         nomaintainer
description         VLC is a cross-platform media player and streaming server
long_description    VLC media player is a highly portable multimedia player for \
                    various audio and video formats (MPEG-1, MPEG-2, MPEG-4, DivX, \
                    mp3, ogg, ...) as well as DVDs, VCDs, and various streaming protocols. \
                    It can also be used as a server to stream in unicast or multicast \
                    in IPv4 or IPv6 on a high-bandwidth network.
license             GPL

platforms           darwin
conflicts           VLC-devel

homepage            http://www.videolan.org

# http://git.videolan.org/?p=vlc.git
# http://git.videolan.org/?p=vlc.git;a=forks
#fetch.type      git
#git.url         git://git.videolan.org/vlc/vlc-2.1.git
#git.url         git://git.videolan.org/vlc.git
#git.branch      edd88358218f273fddde646a172a2104796d46c2

master_sites        http://download.videolan.org/pub/videolan/vlc/${version}/
distname            vlc-${version}
use_xz              yes

checksums           md5     56a489d093ffef9aa29809116985adba \
                    sha1    de3e0b027bbb2dc2451992c428f2bed824128039 \
                    rmd160  187337e0149cf9d86b6a4266128cbf0bc5bcf777

depends_build   port:pkgconfig

depends_lib     port:lame port:a52dec port:libogg port:flac \
                port:libdca port:libcddb port:libcdio port:libgcrypt port:libmad \
                port:libopus port:libvorbis port:libmatroska port:libid3tag \
                port:ncurses port:lua port:libpng port:jpeg port:tiff port:libebml \
                port:gnutls port:taglib port:libxml2 port:faad2 \
                port:x264 port:libtheora port:twolame port:libssh2 \
                port:libdvdnav port:libdvdread port:libproxy \
                port:fluidsynth port:libsamplerate port:libupnp \
                port:avahi path:lib/libavcodec.dylib:ffmpeg port:pulseaudio \
                port:openjpeg15 port:libbluray \
                port:libdc1394 port:libmpeg2

# TODO: live555 opencv FreeRDP

# VLC-2.1 and later are x86_64-only: https://trac.videolan.org/vlc/ticket/8161
universal_variant   no
supported_archs x86_64

compiler.blacklist gcc-4.2 llvm-gcc-4.2 {clang < 300}

pre-fetch {
    if {${os.platform} eq "darwin" && ${os.major} < 10} {
        ui_error "${name} ${version} requires Mac OS X 10.6 or greater."
        return -code error "incompatible Mac OS X version"
    }
}

patchfiles \
    buildfix-package.mak.patch \
    configure.ac-no-arch.patch \
    PR-34741-no__clang_version__.patch \
    class_struct.patch \
    qtkit.patch \
    static_assert.patch \
    no-sparkle.patch

post-patch {
    reinplace "s:librsvg-2/librsvg:librsvg:" \
        ${worksrcpath}/modules/text_renderer/svg.c

    set cxxstdlib {}

    if {[info exists configure.cxx_stdlib] &&
        ${configure.cxx_stdlib} ne {} &&
        [string match *clang* ${configure.cxx}]} {
        set cxxstdlib ${configure.cxx_stdlib}
    } elseif {[string match *clang* ${configure.cxx}] &&
              ${os.major} >= 13} {
        set cxxstdlib libc++
    } else {
        set cxxstdlib libstdc++
    }

    if {${cxxstdlib} == "libc++"} {
        reinplace "s:-lstdc\+\+:-lc++:" \
            ${worksrcpath}/configure.ac \
            ${worksrcpath}/modules/access/Makefile.am
    }
}

use_autoreconf      yes
autoreconf.cmd      ./bootstrap
autoreconf.pre_args
autoreconf.args
depends_build-append port:libtool port:autoconf port:automake

configure.env-append CXXCPP="${configure.cxx} -E"
build.args-append    DESTDIR=${worksrcpath}/dest_ignore V=1

# gl.c:121:3: error: Platform not recognized.
configure.cppflags-append -D__unix__=1

build.target    all
destroot.target install

livecheck.url   http://download.videolan.org/pub/videolan/vlc/
livecheck.regex <a href=\"(\\d\[\\d|\.|\\w\]+).*/\">

# Other
configure.args-append \
    --with-contrib=${worksrcpath}/contrib \
    --disable-debug --disable-update-check --enable-gnutls \
    --disable-notify --disable-telepathy --disable-dbus \
    --disable-gnomevfs --disable-growl --disable-macosx-vlc-app \
    --enable-libproxy --enable-lua

# Input Plugins
# build fails when FreeRDP is installed
# build fails when opencv is installed
configure.args-append \
    --enable-dvdnav --enable-dvdread --disable-smb --disable-vcdx \
    --disable-macosx-qtkit --disable-macosx-eyetv --disable-realrtsp \
    --disable-libfreerdp --disable-opencv \
    --enable-sftp

# Mux/Demux Plugins
configure.args-append \
    --disable-dvbpsi --enable-ogg --enable-mux_ogg \
    --enable-mkv --disable-mod --disable-mpc --disable-shout

# Codec Plugins
configure.args-append \
    --enable-a52 --enable-faad --enable-flac --disable-live555 \
    --enable-opus --enable-vorbis --enable-ogg --enable-mad --disable-libass \
    --enable-dca --enable-png --disable-quicktime --enable-twolame \
    --disable-speex --enable-theora --enable-x264 --enable-postproc \
    --enable-avcodec --enable-avformat --enable-swscale \
    --enable-fluidsynth

# Video Plugins
configure.args-append \
    --disable-caca --disable-sdl --disable-macosx-vout \
    --without-x --disable-xcb --disable-xvideo --disable-glx \
    --disable-fontconfig --disable-freetype --disable-fribidi \
    --disable-svg

# Audio Plugins
configure.args-append \
    --disable-macosx-audio --disable-jack --enable-samplerate

# Interface Plugins
configure.args-append \
    --disable-macosx --disable-macosx-dialog-provider \
    --disable-qt4 --enable-ncurses --disable-skins2

# Visualisations and Video Filter Plugins
configure.args-append \
    --disable-goom

# Service Discovery Plugins
configure.args-append \
    --enable-bonjour --enable-upnp

variant jack description {Enable jack plugin for audio output} {
    depends_lib-append      port:jack
    configure.args-delete   --disable-jack
    configure.args-append   --enable-jack
}

variant qtkit description {Enable qtcapture and qtaudio} {
    configure.args-delete   --disable-macosx-qtkit
    configure.args-append   --enable-macosx-qtkit
}

variant eyetv description {Enable eyetv plugin} {
    configure.args-delete --disable-macosx-eyetv
    configure.args-append --enable-macosx-eyetv
}

variant speex description {Enable Speex decoder support} {
    depends_lib-append      path:lib/libspeex.dylib:speex
    configure.args-delete   --disable-speex
    configure.args-append   --enable-speex
}

variant svg description {Enable SVG support} {
    depends_lib-append      port:librsvg
    configure.args-delete   --disable-svg
    configure.args-append   --enable-svg
}

variant shout description {Enable Shoutcast support} {
    depends_lib-append      port:libshout2
    configure.args-delete   --disable-shout
    configure.args-append   --enable-shout
}

variant vcd description {Enable VCD support} {
    depends_lib-append      port:vcdimager
    configure.args-delete   --disable-vcdx
    configure.args-append   --enable-vcdx
}

variant mod description {Enable MOD demuxer support} {
    depends_lib-append      port:libmodplug
    configure.args-delete   --disable-mod
    configure.args-append   --enable-mod
}

variant mpc description {enable Musepack Decoder library support} {
    depends_lib-append      port:libmpcdec
    configure.args-delete   --disable-mpc
    configure.args-append   --enable-mpc
}

variant dvb description {enable DVB Program Specific Information support} {
    depends_lib-append      port:libdvbpsi
    configure.args-delete   --disable-dvbpsi
    configure.args-append   --enable-dvbpsi
}

variant osd description {Enable onscreen display and TrueType font support} {
    depends_lib-append      port:fontconfig port:freetype
    configure.args-delete   --disable-freetype --disable-fontconfig
    configure.args-append   --enable-freetype --enable-fontconfig
}

variant fribidi requires osd description {Enable FriBidi Unicode support} {
    depends_lib-append      port:fribidi
    configure.args-delete   --disable-fribidi
    configure.args-append   --enable-fribidi
}

variant sdl description {Enable SDL/SDL-Image support} {
    depends_lib-append      port:libsdl port:libsdl_image
    configure.args-delete   --disable-sdl
    configure.args-append   --enable-sdl
}

variant smb description {Enable Samba 3 support} {
    depends_lib-append      port:samba3
    configure.args-delete   --disable-smb
    configure.args-append   --enable-smb
    configure.ldflags-append    -L${prefix}/lib/samba3
}

variant x11 {
    depends_lib-append \
        port:mesa \
        port:xorg-libXinerama \
        port:xorg-libXv \
        port:xorg-libXxf86vm \
        port:xorg-xcb-util \
        port:xorg-xcb-util-keysyms

    configure.args-delete   --without-x --disable-xvideo --disable-glx --disable-xcb
    configure.args-append   --with-x --x-include=${prefix}/include --x-lib=${prefix}/lib \
                            --enable-xvideo --enable-glx --enable-xcb
}

variant qt4 description {Build using QT4 UI.  This will use qt4-mac} {
    configure.args-delete   --disable-qt4
    configure.args-append   --enable-qt4

    PortGroup qt4 1.0

    post-activate {
        if {![variant_isset quartz]} {
            ui_info "The qt4 interface module for VLC is not very stable.  If you encounter bugs with it, please file them with VLC and not MacPorts."
        }
    }
}

variant quartz {
    depends_lib-append      port:BGHUDAppKit
    configure.args-delete   --disable-macosx --disable-macosx-dialog-provider
    configure.args-append   --enable-macosx --enable-macosx-dialog-provider
}

default_variants +mod +mpc +osd +quartz

variant huge \
    requires dvb eyetv fribidi jack mod mpc osd sdl shout speex svg vcd \
    description {Enable all variants except quartz, qt4, smb, and x11} {}

variant full \
    requires huge qt4 quartz smb x11 \
    description {Enable all variants} {}

platform macosx {
    default_variants-append +qtkit

    configure.args-delete \
        --disable-macosx-vout --disable-macosx-audio \

    configure.args-append \
        --enable-macosx-vout --enable-macosx-audio \
        --with-macosx-sdk=/

    if {[variant_isset qt4] || [variant_isset quartz]} {
        configure.args-delete --disable-macosx-vlc-app
        configure.args-append --enable-macosx-vlc-app
    }

    post-patch {
        reinplace "s/Appkit/AppKit/" ${worksrcpath}/configure.ac
        reinplace "/Sparkle.framework/d" \
            ${worksrcpath}/extras/package/macosx/vlc.xcodeproj/project.pbxproj 
        reinplace "/SDKROOT/d" \
            ${worksrcpath}/extras/package/macosx/vlc.xcodeproj/project.pbxproj 
        reinplace "/Growl.framework/d" \
            ${worksrcpath}/extras/package/macosx/package.mak

        reinplace "s:LD_LIBRARY_PATH:DYLD_LIBRARY_PATH:g" \
            ${worksrcpath}/Makefile.am 

        reinplace "/argv/s/environ/*_NSGetEnviron()/" \
            ${worksrcpath}/modules/misc/inhibit/xdg.c \
            ${worksrcpath}/modules/stream_filter/decomp.c

        reinplace "s/extern char \\*\\*environ;/#include <crt_externs.h>/" \
            ${worksrcpath}/modules/misc/inhibit/xdg.c \
            ${worksrcpath}/modules/stream_filter/decomp.c

        ln -s ${frameworks_dir}/BGHUDAppKit.framework ${worksrcpath}/contrib/BGHUDAppKit.framework

        # To trick configure
        file mkdir "${worksrcpath}/contrib/lib"
    }

    post-destroot {
        eval file delete [glob ${destroot}${prefix}/lib/vlc/plugins/*/*.la]

        if {[variant_isset qt4] || [variant_isset quartz]} {
            file rename ${worksrcpath}/VLC.app ${destroot}${applications_dir}/VLC.app

            # These are already in ${prefix}, so we don't need to bundle them as well
            file delete -force ${destroot}${applications_dir}/VLC.app/Contents/Frameworks
            file delete -force ${destroot}${applications_dir}/VLC.app/Contents/lib

            # There's no need to install these into the bundle and the prefix
            file delete -force ${destroot}${applications_dir}/VLC.app/Contents/MacOS/include
            file delete -force ${destroot}${applications_dir}/VLC.app/Contents/MacOS/lib
            file delete -force ${destroot}${applications_dir}/VLC.app/Contents/MacOS/plugins

            # http://trac.macports.org/ticket/35131
            ln -s ${prefix}/lib ${destroot}${applications_dir}/VLC.app/Contents/MacOS/lib
            ln -s ${prefix}/lib/vlc/plugins ${destroot}${applications_dir}/VLC.app/Contents/MacOS/plugins
        }
    }
}
