# -*- 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

name            xulrunner-devel
set component	xulrunner
categories      devel
version		2.0
revision        3
#set ff_version  4.0
platforms       darwin
maintainers     nomaintainer
description     Mozilla.org's runtime package that can be used to bootstrap XUL+XPCOM applications

long_description ${description}

universal_variant no

homepage        http://developer.mozilla.org/en/docs/XULRunner

master_sites    http://releases.mozilla.org/pub/mozilla.org/${component}/releases/${version}/source/
distname        ${component}-${version}.source
dist_subdir     ${component}

#master_sites    http://releases.mozilla.org/pub/mozilla.org/firefox/releases/${ff_version}/source
#distname        firefox-${ff_version}.source
#dist_subdir     firefox

use_bzip2       yes

checksums           md5     a3b387489ba1738ea504e83cb811c82a \
                    sha1    45ce820989e0bb7b5758f94c087f21d4190c2441 \
                    rmd160  7179df8c2af30015413db403884a729cde4a650b

worksrcdir      mozilla-2.0

depends_build \
	port:findutils \
	port:pkgconfig \
	port:autoconf213 \
	port:yasm

depends_lib \
        port:heimdal \
        port:lcms \
        port:gconf \
        port:esound \
        port:libcanberra \
        port:findutils \
        port:mesa \
        port:nss \
        port:nspr \
        port:gtk2 \
        port:xorg-libXt

use_autoconf yes
autoconf.cmd autoconf213

#if {[variant_isset internal_dependencies]} {
#        set pkg_name ${name}-standalone
#} else {
#        set pkg_name ${component}-x11
#}

set pkg_name ${name}

configure.args \
	--with-xulrunner-stub-name=xulrunner-stub \
	--disable-static \
	--enable-shared \
	--with-distribution-id=org.macports \
	--enable-default-toolkit=cairo-gtk2 \
	--x-includes=${prefix}/include \
	--x-libraries=${prefix}/lib \
	--with-system-nspr \
	--with-nspr-prefix=${prefix} \
	--with-system-nss \
	--with-nss-prefix=${prefix} \
	--with-system-bzip2=${prefix} \
	--with-system-jpeg=${prefix} \
	--with-system-zlib=${prefix} \
	--enable-system-lcms \
	--enable-system-cairo \
	--enable-system-sqlite \
	--with-default-mozilla-five-home=${prefix}/lib/${pkg_name} \
	--enable-oji \
	--enable-plugins \
	--enable-mathml \
	--enable-extensions="default,spellcheck" \
	--enable-permissions \
	--enable-cookie \
	--enable-image-decoders=all \
	--enable-image-encoder=all \
	--enable-canvas \
	--enable-jsd \
	--disable-xpctools \
	--enable-crypto \
	--enable-pango \
	--enable-svg \
	--enable-svg-renderer=cairo \
	--enable-xinerama \
	--with-pthreads \
	--disable-gnomevfs \
	--disable-gnomeui \
    --disable-libnotify \
	--enable-postscript \
	--enable-safe-browsing \
	--disable-crashreporter \
	--enable-optimize='-O2' \
	--disable-prebinding \
	--enable-strip \
	--enable-install-strip \
	--disable-debug \
	--disable-installer \
	--disable-updater \
	--disable-pedantic \
	--disable-tests \
	--disable-mochitest \
	--disable-necko-wifi \
	--enable-libxul

# xpctools and necko-wifi broke in 3.6b1

# gcc-4.0 has issues, so force gcc-4.2 on Leopard
compiler.blacklist gcc-4.0

platform darwin 8 {
    depends_build
    depends_lib
    pre-fetch {
        error "$name requires Core Text which is only available on OS X 10.5+"
    }
}

# Yes, this is ugly... but the real fix is in the works
# https://bugzilla.mozilla.org/show_bug.cgi?id=529878
configure.cc ${configure.cc} -arch ${configure.build_arch}
configure.cxx ${configure.cxx} -arch ${configure.build_arch}

variant debug description {build with debugging symbols} {
    configure.args-delete   --disable-debug \
                            --disable-mochitest \
                            --enable-optimize='-O2' \
                            --enable-strip \
                            --enable-install-strip

    configure.args-append   --enable-debug='-ggdb3' \
                            --enable-mochitest \
                            --disable-optimize \
                            --disable-strip \
                            --disable-install-strip
}

variant gnome description {use gnome libraries where appropriate} {
    depends_lib-append \
	port:gnome-vfs \
	port:libgnomeui \
	port:libgnome \
	port:gnome-icon-theme

    configure.args-delete --disable-gnomevfs \
                          --disable-gnomeui

    configure.args-append --enable-gnomevfs \
                          --enable-gnomeui
}

variant internal_dependencies description {Use internal versions of nspr and nss} {
    configure.args-delete \
        --with-system-nspr \
        --with-nspr-prefix=${prefix} \
        --with-system-nss \
        --with-nss-prefix=${prefix} \
        --with-system-bzip2=${prefix} \
        --with-system-jpeg=${prefix} \
        --with-system-zlib=${prefix} \
        --enable-system-lcms \
        --enable-system-cairo \
        --enable-system-sqlite

    configure.args-append \
        --disable-system-lcms \
        --disable-system-cairo \
        --disable-system-sqlite       
        
    depends_lib-delete \
        port:lcms \
        port:nss \
        port:nspr
}

# plugin-instance-nococoa.patch : https://bugzilla.mozilla.org/show_bug.cgi?id=587370
patchfiles patch-dylib_file.diff plugin-instance-nococoa.patch

post-patch {
    # https://bugzilla.mozilla.org/show_bug.cgi?id=485857
    reinplace "s:XP_MACOSX:__APPLE__:g" ${worksrcpath}/xpcom/base/nsStackWalk.cpp 

    # https://bugzilla.mozilla.org/show_bug.cgi?id=641755
    reinplace "s:XP_MACOSX:__APPLE__:g" ${worksrcpath}/gfx/ycbcr/update.sh
    reinplace "s:XP_MACOSX:__APPLE__:g" ${worksrcpath}/gfx/ycbcr/yuv_row_posix.cpp

    # https://bugzilla.mozilla.org/show_bug.cgi?id=486034
    # find -xtype -> gfind -xtype
    reinplace "s:find:gfind:g" ${worksrcpath}/toolkit/mozapps/installer/packager.mk

    # Don't use the system X11
    reinplace "s:/usr/X11R6:${prefix}:" ${worksrcpath}/modules/plugin/base/src/nsPluginsDirUnix.cpp

    # Set the right install_name on the libs
    reinplace "s:@executable_path:${prefix}/lib/${pkg_name}:g" ${worksrcpath}/config/config.mk
    reinplace "s:@executable_path:${prefix}/lib/${pkg_name}:g" ${worksrcpath}/config/rules.mk
    reinplace "s:@executable_path:${prefix}/lib/${pkg_name}:g" ${worksrcpath}/js/src/config/config.mk
    reinplace "s:@executable_path:${prefix}/lib/${pkg_name}:g" ${worksrcpath}/js/src/config/rules.mk
    reinplace "s:@executable_path:${prefix}/lib/${pkg_name}:g" ${worksrcpath}/nsprpub/configure.in
    reinplace "s:@executable_path:${prefix}/lib/${pkg_name}:g" ${worksrcpath}/nsprpub/configure
    reinplace "s:@executable_path:${prefix}/lib/${pkg_name}:g" ${worksrcpath}/security/coreconf/Darwin.mk
    reinplace "s:@executable_path:${prefix}/lib/${pkg_name}:g" ${worksrcpath}/security/nss/lib/freebl/config.mk

    # Fix the correct library filenames for loading at runtime
    reinplace "s:libatk-1.0.so.0:${prefix}/lib/libatk-1.0.dylib:" ${worksrcpath}/accessible/src/atk/nsApplicationAccessibleWrap.cpp

    reinplace "s:libgssapi_krb5.so.2:${prefix}/libexec/heimdal/lib/libgssapi.2.dylib:" ${worksrcpath}/extensions/auth/nsAuthGSSAPI.cpp

    reinplace "s:libgnomeui-2.so.0:${prefix}/lib/libgnomeui-2.dylib:" ${worksrcpath}/modules/libpr0n/decoders/icon/gtk/nsIconChannel.cpp
    reinplace "s:libgnome-2.so.0:${prefix}/lib/libgnome-2.dylib:" ${worksrcpath}/modules/libpr0n/decoders/icon/gtk/nsIconChannel.cpp
    reinplace "s:libgnomevfs-2.so.0:${prefix}/lib/libgnomevfs-2.dylib:" ${worksrcpath}/modules/libpr0n/decoders/icon/gtk/nsIconChannel.cpp

    reinplace "s:libgconf-2.so.4:${prefix}/lib/libgconf-2.dylib:" ${worksrcpath}/extensions/pref/system-pref/src/gconf/nsSystemPrefService.cpp

    reinplace "s:libcups.so.2:/usr/lib/libcups.2.dylib:" ${worksrcpath}/widget/src/gtk2/nsCUPSShim.cpp

    reinplace "s:libgnomeui-2.so.0:${prefix}/lib/libgnomeui-2.dylib:" ${worksrcpath}/toolkit/xre/nsNativeAppSupportUnix.cpp
    reinplace "s:libgnome-2.so.0:${prefix}/lib/libgnome-2.dylib:" ${worksrcpath}/toolkit/xre/nsNativeAppSupportUnix.cpp

    reinplace "s:libgnomeui-2.so.0:${prefix}/lib/libgnomeui-2.dylib:" ${worksrcpath}/toolkit/crashreporter/client/crashreporter_linux.cpp
    reinplace "s:libgnome-2.so.0:${prefix}/lib/libgnome-2.dylib:" ${worksrcpath}/toolkit/crashreporter/client/crashreporter_linux.cpp

    reinplace "s:libgconf-2.so.4:${prefix}/lib/libgconf-2.dylib:" ${worksrcpath}/toolkit/crashreporter/client/crashreporter_gtk_common.cpp

    reinplace "s:libgtk-x11-2.0.so.0:${prefix}/lib/libgtk-x11-2.0.dylib:" ${worksrcpath}/widget/src/gtk2/nsBidiKeyboard.cpp
    reinplace "s:libXss.so.1:${prefix}/lib/libXss.1.0.0.dylib:" ${worksrcpath}/widget/src/gtk2/nsIdleServiceGTK.cpp
    reinplace "s:libXinerama.so.1:${prefix}/lib/libXinerama.1.dylib:" ${worksrcpath}/widget/src/gtk2/nsScreenManagerGtk.cpp
    reinplace "s:libesd.so.0:${prefix}/lib/libesd.0.dylib:" ${worksrcpath}/widget/src/gtk2/nsSound.cpp
    reinplace "s:libcanberra.so.0:${prefix}/lib/libcanberra.0.dylib:" ${worksrcpath}/widget/src/gtk2/nsSound.cpp

    reinplace "s:libgtk-x11-2.0.dylib:${prefix}/lib/libgtk-x11-2.0.dylib:" ${worksrcpath}/dom/plugins/PluginModuleChild.cpp

    reinplace "s:libXss.so.1:${prefix}/lib/libXss.1.0.0.dylib:" ${worksrcpath}/widget/src/qt/nsIdleServiceQt.cpp
    reinplace "s:libesd.so.0:${prefix}/lib/libesd.0.dylib:" ${worksrcpath}/widget/src/qt/nsSound.cpp

    # Set our system plugins path
    reinplace "s:/usr/lib/mozilla/plugins:${prefix}/lib/nsplugins:" ${worksrcpath}/xpcom/io/nsAppFileLocationProvider.cpp

    reinplace "s:/etc/gre\.:${prefix}/etc/gre.:g" \
	${worksrcpath}/xpcom/build/nsXPCOMPrivate.h \
	${worksrcpath}/xulrunner/app/nsRegisterGREUnix.cpp \
	${worksrcpath}/xulrunner/installer/Makefile.in
}

configure.env \
	MOZCONFIG="${worksrcpath}/xulrunner/config/mozconfig" \
	MOZILLA_FIVE_HOME="${prefix}/lib/${pkg_name}"

build.args-append \
	includedir="${prefix}/include/${pkg_name}" \
	idldir="${prefix}/share/idl/${pkg_name}" \
	installdir="${prefix}/lib/${pkg_name}" \
	sdkdir="${prefix}/lib/${pkg_name}"

destroot.args-append \
	includedir="${prefix}/include/${pkg_name}" \
	idldir="${prefix}/share/idl/${pkg_name}" \
	installdir="${prefix}/lib/${pkg_name}" \
	sdkdir="${prefix}/lib/${pkg_name}"

post-destroot   {
    move ${destroot}${prefix}/bin/${component} ${destroot}${prefix}/bin/${pkg_name}
    if {![variant_isset internal_dependencies]} {
	ln -s ${pkg_name} ${destroot}${prefix}/bin/${component}

	# Workaround to get root certs loaded, so https:// works
    	ln -s ${prefix}/lib/nss/libnssckbi.dylib ${destroot}${prefix}/lib/${pkg_name}/libnssckbi.dylib
    }
}

livecheck.type  regex
livecheck.url   http://releases.mozilla.org/pub/mozilla.org/${component}/releases
livecheck.regex ">(\\d+(?:\\.\\d+)*).<"