# -*- 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
set component	xulrunner
categories      devel
license		{MPL-1.1 LGPL-2.1+}
version		1.9.2.16
revision        3
#set ff_version  3.6
platforms       darwin
maintainers     nomaintainer
description	Mozilla 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

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

use_bzip2       yes
dist_subdir     ${component}

checksums           md5     229fc3f629200561ad725fcddd435bf6 \
                    sha1    57d417b19f11c7a1c067c4a63b4292dbca1d5669 \
                    rmd160  21e4c1d9e5d1571e43d3dd11fe9085875e7691ce

worksrcdir      mozilla-1.9.2

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

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

use_autoconf yes
autoconf.cmd autoconf213

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/${component} \
	--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

# Force 32-bit, inline-asm
supported_archs i386 ppc

# 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}
        
    depends_lib-delete \
        port:nss \
        port:nspr
}

patchfiles patch-dylib_file.diff

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=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/${component}:g" ${worksrcpath}/config/config.mk
    reinplace "s:@executable_path:${prefix}/lib/${component}:g" ${worksrcpath}/config/rules.mk
    reinplace "s:@executable_path:${prefix}/lib/${component}:g" ${worksrcpath}/js/src/config/config.mk
    reinplace "s:@executable_path:${prefix}/lib/${component}:g" ${worksrcpath}/js/src/config/rules.mk
    reinplace "s:@executable_path:${prefix}/lib/${component}:g" ${worksrcpath}/nsprpub/configure.in
    reinplace "s:@executable_path:${prefix}/lib/${component}:g" ${worksrcpath}/nsprpub/configure
    reinplace "s:@executable_path:${prefix}/lib/${component}:g" ${worksrcpath}/security/coreconf/Darwin.mk
    reinplace "s:@executable_path:${prefix}/lib/${component}: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/nsAppRootAccessible.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}/gfx/src/psshared/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: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}/widget/src/gtk2/nsFilePicker.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/${component}"

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

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

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