freebsd-ports/www/mozilla/Makefile.common
Joe Marcus Clarke 3af2b32e09 Allow nsprpub to be extracted from the distfile. This directory is needed
for a script that wraps system headers for building with GCC 4.x.  This
does not mean the embedded nspr will be used in favor of the system nspr,
but it should fix the build with GCC 4.x.
2007-01-14 07:05:18 +00:00

429 lines
14 KiB
Text

# Makefile.common handles common tasks and dependencies for mozilla ports.
#
# Date created: 12 Nov 2005
# Whom: Michael Johnson <ahze@FreeBSD.org>
#
# $FreeBSD$
# $MCom: ports-stable/www/mozilla/Makefile.common,v 1.1 2006/10/18 17:29:07 ahze Exp $
# This file contains some reusable components for mozilla ports. It's of
# use primarily to apps from the mozilla project itself (such as Firefox,
# Thunderbird, etc.), and probably won't be of use for gecko-based ports
# like epiphany, galeon, etc. The reusable components for gecko-based ports
# lives in www/mozilla/bsd.gecko.mk.
#
#
# Ports can use the following:
#
# GECKO_PLIST_PRE_FILES List of files to add to the beginning of plist
# GECKO_PLIST_PRE_DIRS
#
# MOZILLA_PLIST_DIRS List of directories to descend into when
# installing and creating the plist
# MOZ_PIS_SCRIPTS List of scripts residing in ${FILESDIR} to
# be filtered through MOZCONFIG_SED and installed
# along with our Pluggable Init Scripts (PIS)
# MOZ_SED_ARGS sed(1) commands through which MOZ_PIS_SCRIPTS
# are filtered. There is a default set defined here,
# so you probably want to add to MOZ_SED_ARGS rather
# than clobber it
#
# MOZ_OPTIONS configure arguments (added to .mozconfig). If
# NOMOZCONFIG is defined, you probably want to set
# CONFIGURE_ARGS+=${MOZ_OPTIONS}
# MOZ_MK_OPTIONS make(1) arguments (added to .mozconfig). If
# NOMOZCONFIG is defined, you probably want to set
# MAKE_ARGS+=${MOZ_MK_OPTIONS}
# MOZ_EXPORT environment variables for the build process
# (added to .mozconfig). If NOMOZCONFIG is defined,
# you probably want to set MAKE_ENV+=${MOZ_EXPORT}
# MOZ_EXTENSIONS A list of extensions to build
# MOZ_GRAPHICS A list of image decoders to build
# MOZ_PROTOCOLS A list of protocols to build (http, ftp, etc.)
#
# PORT_MOZCONFIG Defaults to ${FILESDIR}/mozconfig.in, but can
# be set to a generic mozconfig included with
# the port
#
# NOGECKO_INSTALL Don't install the built gecko (most likely
# for testing)
# NOGECKO_PLIST Don't create a dynamically-generated playlist
# NOMOZCONFIG Don't drop a customized .mozconfig into the
# build directory. Options will have to be
# specified in CONFIGURE_ARGS instead
BUILD_DEPENDS+= zip:${PORTSDIR}/archivers/zip
LIB_DEPENDS+= jpeg.9:${PORTSDIR}/graphics/jpeg \
png.5:${PORTSDIR}/graphics/png \
nspr4:${PORTSDIR}/devel/nspr \
nss3:${PORTSDIR}/security/nss \
Xft.2:${PORTSDIR}/x11-fonts/libXft
MAINTAINER?= gnome@FreeBSD.org
MOZILLA?= ${PORTNAME}
MOZILLA_VER?= ${PORTVERSION}
MOZILLA_BIN?= ${PORTNAME}-bin
MOZ_RPATH?= ${MOZILLA}
USE_GNOME+= gtk20 libidl desktopfileutils
USE_ICONV= yes
USE_PERL5_BUILD=yes
USE_XLIB= yes
MOZILLA_SUFX?= none
WRKSRC?= ${WRKDIR}/mozilla
FAKEDIR?= ${WRKDIR}/fake
PLIST?= ${WRKDIR}/plist
MASTER_DIR?= ${.CURDIR}/../../www/mozilla
KRB5_HOME?= /usr
BROWSER_PLUGINS_DIR?= lib/browser_plugins
MOZ_PIS_DIR?= lib/${MOZILLA}/init.d
ESD_LIB?= libesd.so.2
FREETYPE_LIB?= libfreetype.so.9
GENERIC_MOZCONFIG?= ${.CURDIR}/../../www/mozilla/files/mozconfig-generic.in
PORT_MOZCONFIG?= ${FILESDIR}/mozconfig.in
MOZCONFIG?= ${WRKSRC}/.mozconfig
MOZILLA_PLIST_DIRS?= bin include lib share/idl
PKGINSTALL?= ${WRKDIR}/pkg-install
PKGDEINSTALL?= ${WRKDIR}/pkg-deinstall
MASTER_MOZDIR?= ${.CURDIR}/../../www/mozilla
PKGINSTALL_INC?= ${MASTER_MOZDIR}/pkg-install.in
PKGDEINSTALL_INC?= ${MASTER_MOZDIR}/pkg-deinstall.in
EXTRACT_AFTER_ARGS?= | ${TAR} -xf - --exclude */CVS/* \
--exclude */macbuild/* \
--exclude */package/* \
--exclude .cvsignore \
--exclude makefile.win \
--exclude MANIFEST \
--exclude mozilla/modules/libimg/png \
--exclude mozilla/jpeg \
--exclude mozilla/dbm \
--exclude mozilla/security/nss \
--exclude mozilla/gc/boehm \
--exclude mozilla/gfx/cairo
JPI_LIST?=\
${LOCALBASE}/jdk1.5.0/jre/plugin/${ARCH}/ns7/libjavaplugin_oji.so \
${LOCALBASE}/jdk1.4.2/jre/plugin/${ARCH}/ns610/libjavaplugin_oji.so
PKGCONFIG_FILES?= ${MOZILLA}-gtkmozembed ${MOZILLA}-js \
${MOZILLA}-xpcom ${MOZILLA}-plugin
CPPFLAGS+= -I${X11BASE}/include
CFLAGS+= ${PTHREAD_CFLAGS}
LDFLAGS+= -L${X11BASE}/lib -Wl,-rpath,${PREFIX}/lib/${MOZ_RPATH}
LIBS+= ${PTHREAD_LIBS} -L${LOCALBASE}/lib -liconv
_USE_GECKO_OPTIONS_ALL= java debug logging optimized_cflags
.if !defined(USE_GECKO_OPTIONS)
USE_GECKO_OPTIONS= debug logging optimized_cflags
.endif
debug_OPTION= "Build a debugging image" off
java_OPTION= "Enable JAVA xpcom" off
logging_OPTION= "Enable additional log messages" off
optimized_cflags_OPTION= "Enable some additional optimizations" off
.for option in ${USE_GECKO_OPTIONS:L}
.if ${_USE_GECKO_OPTIONS_ALL:M${option}}!=""
OPTIONS+= ${option:U} ${${option}_OPTION}
_${option}= ${TRUE}
.endif
.endfor
# Standard options from README
MOZ_OPTIONS+= --enable-crypto \
--disable-tests \
--enable-default-toolkit=gtk2 \
--enable-xft \
--with-pthreads
# Configure options for install
MOZ_OPTIONS+= --x-includes=${X11BASE}/include \
--x-libraries=${X11BASE}/lib
.if !defined(MOZ_EXTENSIONS)
MOZ_OPTIONS+= --enable-extensions=default
.else
MOZ_OPTIONS+= --enable-extensions=${MOZ_EXTENSIONS}
.endif
.if !defined(MOZ_GRAPHICS)
MOZ_OPTIONS+= --enable-image-decoders=default
.else
MOZ_OPTIONS+= --enable-image-decoders=${MOZ_GRAPHICS}
.endif
.if !defined(MOZ_PROTOCOLS)
MOZ_OPTIONS+= --enable-necko-protocols=default
.else
MOZ_OPTIONS+= --enable-necko-protocols=${MOZ_PROTOCOLS}
.endif
# others
MOZ_OPTIONS+= --with-system-jpeg=${LOCALBASE} \
--with-system-zlib=/usr \
--with-system-png=${LOCALBASE} \
--with-gssapi=${KRB5_HOME} \
--with-system-nspr \
--disable-auto-deps \
--enable-chrome-format=jar \
--disable-cpp-exceptions \
--disable-cpp-rtti \
--disable-glibtest \
--disable-gtktest \
--disable-freetypetest \
--enable-double-buffer \
--enable-mathml \
--disable-installer \
--disable-md \
--disable-pedantic \
--disable-bidi \
--disable-xterm-updates \
--enable-xinerama
MOZ_MK_OPTIONS+= XP_UNIX=1 \
PERL=${PERL}
.if defined(WITH_OPTIMIZED_CFLAGS)
CFLAGS:= ${CFLAGS} -O2 -fno-strict-aliasing ${EXTRA_CFLAGS}
WITH_OPTIMIZE?= -O2
.else
CFLAGS:= ${CFLAGS} ${EXTRA_CFLAGS}
WITH_OPTIMIZE?=
.endif
.if defined(WITH_SMB)
USE_GNOME+= gnomevfs2
MOZ_OPTIONS+= --enable-gnomevfs
.endif
.if defined(WITH_DEBUG)
MOZ_OPTIONS+= --enable-debug \
--disable-strip
WITH_LOGGING= yes
.else
MOZ_OPTIONS+= --disable-debug \
--enable-optimize=${WITH_OPTIMIZE} \
--enable-strip
.endif
.if defined(WITH_JAVA) && defined(_WITH_JAVA)
USE_JAVA= yes
JAVA_VERSION+= 1.4+
JAVA_OS+= native
CONFIGURE_ENV+= JAVA_HOME="${JAVA_HOME}"
MOZ_OPTIONS+= --enable-javaxpcom
.endif
.if defined(WITH_LOGGING)
MOZ_OPTIONS+= --enable-logging
.else
MOZ_OPTIONS+= --disable-logging
.endif
.if exists(${LOCALBASE}/include/freetype/freetype.h)
BROKEN= "You must upgrade your freetype port to 1.3.1_2 or higher before \
installing ${PORTNAME}. If you have 1.3.1_2 installed, please remove \
${LOCALBASE}/include/freetype, then build ${PORTNAME}"
.endif
# Makefile.common defines
MOZ_SED_ARGS+= -e's|@CPPFLAGS@|${CPPFLAGS}|g' \
-e 's|@CFLAGS@|${CFLAGS}|g' \
-e 's|@LDFLAGS@|${LDFLAGS}|g' \
-e 's|@LIBS@|${LIBS}|g' \
-e 's|@X11BASE@|${X11BASE}|g' \
-e 's|@LOCALBASE@|${LOCALBASE}|g' \
-e 's|@FAKEDIR@|${FAKEDIR}|g' \
-e 's|@PERL@|${PERL5}|g' \
-e 's|@KRB5_HOME@|${KRB5_HOME}|g' \
-e 's|@MOZDIR@|${PREFIX}/lib/${MOZILLA}|g' \
-e 's|%%PREFIX%%|${PREFIX}|g' \
-e 's|%%CFLAGS%%|${CFLAGS}|g' \
-e 's|%%LDFLAGS%%|${LDFLAGS}|g' \
-e 's|%%LIBS%%|${LIBS}|g' \
-e 's|%%X11BASE%%|${X11BASE}|g' \
-e 's|%%LOCALBASE%%|${LOCALBASE}|g' \
-e 's|%%FAKEDIR%%|${FAKEDIR}|g' \
-e 's|%%PERL%%|${PERL5}|g' \
-e 's|%%KRB5_HOME%%|${KRB5_HOME}|g' \
-e 's|%%MOZILLA%%|${MOZILLA}|g' \
-e 's|%%MOZILLA_BIN%%|${MOZILLA_BIN}|g' \
-e 's|%%MOZDIR%%|${PREFIX}/lib/${MOZILLA}|g'
MOZCONFIG_SED?= ${SED} ${MOZ_SED_ARGS}
post-patch: gecko-post-patch gecko-moz-pis-patch
gecko-post-patch:
.if exists(${PKGINSTALL_INC})
@${MOZCONFIG_SED} < ${PKGINSTALL_INC} > ${PKGINSTALL}
.endif
.if exists(${PKGDEINSTALL_INC})
@${MOZCONFIG_SED} < ${PKGDEINSTALL_INC} > ${PKGDEINSTALL}
.endif
@${RM} -f ${MOZCONFIG}
.if !defined(NOMOZCONFIG)
.if exists(${GENERIC_MOZCONFIG})
@${MOZCONFIG_SED} < ${GENERIC_MOZCONFIG} >> ${MOZCONFIG}
.endif
@if [ -e ${PORT_MOZCONFIG} ] ; then \
${MOZCONFIG_SED} < ${PORT_MOZCONFIG} >> ${MOZCONFIG} ; \
fi
.for arg in ${MOZ_OPTIONS}
@${ECHO_CMD} ac_add_options ${arg} >> ${MOZCONFIG}
.endfor
.for arg in ${MOZ_MK_OPTIONS}
@${ECHO_CMD} mk_add_options ${arg} >> ${MOZCONFIG}
.endfor
.for var in ${MOZ_EXPORT}
@${ECHO_CMD} "export ${var}" >> ${MOZCONFIG}
.endfor
.endif # .if !defined(NOMOZCONFIG)
@${REINPLACE_CMD} -e 's/%{idldir}/%idldir%/g ; \
s|"%FULL_NSPR_CFLAGS%"|`nspr-config --cflags`|g ; \
s|"%FULL_NSPR_LIBS%"|`nspr-config --libs`|g' \
${WRKSRC}/build/unix/mozilla-config.in
@${REINPLACE_CMD} -e 's|<iconv.h>|\"${LOCALBASE}/include/iconv.h\"|g' \
${WRKSRC}/configure \
${WRKSRC}/intl/uconv/native/nsNativeUConvService.cpp \
${WRKSRC}/xpcom/io/nsNativeCharsetUtils.cpp
@${REINPLACE_CMD} -e 's|%%MOZILLA%%|${MOZILLA}|g' \
${WRKSRC}/config/autoconf.mk.in
@${REINPLACE_CMD} -e 's|-pthread|${PTHREAD_LIBS}|g' \
${WRKSRC}/security/coreconf/FreeBSD.mk \
${WRKSRC}/js/src/Makefile.in
@${REINPLACE_CMD} -e 's|-lc_r|${PTHREAD_LIBS}|g ; \
s|-lpthread|${PTHREAD_LIBS}|g ; \
s|/usr/X11R6|${X11BASE}|g' \
${WRKSRC}/configure
@${REINPLACE_CMD} -e 's|%%PREFIX%%|${PREFIX}|g' \
${WRKSRC}/build/unix/run-mozilla.sh
@${REINPLACE_CMD} -E -e 's|libesd\.so\.[0-9]+|libesd.so|g' \
${WRKSRC}/widget/src/gtk2/nsSound.cpp
@${REINPLACE_CMD} -E -e 's|libcups\.so\.[0-9]+|libcups.so|g' \
${WRKSRC}/*/*/*/nsDeviceContextSpecG.cpp
@${REINPLACE_CMD} -e 's|/usr/local/netscape|${LOCALBASE}|g ; \
s|/usr/local/lib/netscape|${LOCALBASE}/lib|g' \
${WRKSRC}/xpcom/*/SpecialSystemDirectory.cpp
@if [ -n "`${PKG_INFO} -xI '^bind[0-9]*-base-[0-9]'`" ]; then \
${ECHO_CMD} "${PKGNAME}: bind installed with PORT_REPLACES_BASE_BIND causes build problems."; \
${FALSE}; \
fi
# handles mozilla pis scripts.
gecko-moz-pis-patch:
.for moz in ${MOZ_PIS_SCRIPTS}
@${MOZCONFIG_SED} < ${FILESDIR}/${moz} > ${WRKDIR}/${moz}
.endfor
post-configure: gecko-post-configure
gecko-post-configure:
@${ECHO_CMD} "#define JNIIMPORT" >> ${WRKSRC}/mozilla-config.h
post-build: gecko-post-build
gecko-post-build:
@${REINPLACE_CMD} -e "s|\(Libs:.*\)\($$\)|\1 -Wl,-rpath,${PREFIX}/lib/${MOZ_RPATH}\2|" \
${WRKSRC}/build/unix/*.pc
pre-install: gecko-moz-pis-pre-install gecko-pre-install port-pre-install gecko-create-plist
.if !target(port-pre-install)
port-pre-install:
@${DO_NADA}
.endif
gecko-pre-install:
.if !defined(NOGECKO_PLIST)
@${RM} -rf ${FAKEDIR} ${PLIST}
@${TOUCH} -f ${PLIST}
@cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} \
${MAKEFILE} ${MAKE_ARGS} prefix=${FAKEDIR} ${INSTALL_TARGET}
.if defined(MOZILLA_SUFX) && ${MOZILLA_SUFX}!="none"
${MV} ${FAKEDIR}/bin/${MOZILLA:S/${MOZILLA_SUFX}//} ${FAKEDIR}/bin/${MOZILLA}
${MV} ${FAKEDIR}/bin/${MOZILLA:S/${MOZILLA_SUFX}//}-config ${FAKEDIR}/bin/${MOZILLA}-config
.for pc in ${PKGCONFIG_FILES:S|${MOZILLA_SUFX}||}
${SED} -e 's|Requires: ${MOZILLA:S/${MOZILLA_SUFX}//}|Requires: ${MOZILLA}|' \
${FAKEDIR}/lib/pkgconfig/${pc}.pc > ${FAKEDIR}/lib/pkgconfig/${pc:S/${MOZILLA:S,${MOZILLA_SUFX},,}/${MOZILLA}/}.pc
.endfor
@${REINPLACE_CMD} -e 's|${MOZILLA}-bin|${MOZILLA:S/${MOZILLA_SUFX}//}|; \
s|$${progbase}-bin|${MOZILLA:S/${MOZILLA_SUFX}//}-bin|' \
${FAKEDIR}/bin/${MOZILLA} \
${FAKEDIR}/bin/${MOZILLA}-config
.endif
@${REINPLACE_CMD} -e 's|${FAKEDIR}|${PREFIX}|g' \
${FAKEDIR}/bin/${MOZILLA} \
${FAKEDIR}/bin/${MOZILLA}-config
${RM} -f ${FAKEDIR}/bin/*.bak
.endif
gecko-create-plist:
.if !defined(NOGECKO_PLIST)
# Create the plist
.for f in ${GECKO_PLIST_PRE_FILES}
${ECHO_CMD} ${f} >> ${PLIST}
.endfor
.for f in ${GECKO_PLIST_PRE_DIRS}
${ECHO_CMD} "@dirrm ${f}" >> ${PLIST}
.endfor
${ECHO_CMD} "${BROWSER_PLUGINS_DIR}/.${MOZILLA}.keep" >> ${PLIST}
${ECHO_CMD} "@unexec ${RMDIR} %D/${BROWSER_PLUGINS_DIR} 2>/dev/null || ${TRUE}" >> ${PLIST}
${MKDIR} ${FAKEDIR}/libdata
${MV} -f ${FAKEDIR}/lib/pkgconfig ${FAKEDIR}/libdata/
${RM} -f ${FAKEDIR}/lib/pkgconfig
.for dir in ${MOZILLA_PLIST_DIRS}
@cd ${FAKEDIR}/${dir} && ${FIND} -s * -type f -o -type l | \
${SED} -e 's|^|${dir}/|' >> ${PLIST} && \
${FIND} -d * -type d | \
${SED} -e 's|^|@dirrm ${dir}/|' >> ${PLIST}
.endfor
.for pcfile in ${PKGCONFIG_FILES}
${ECHO_CMD} "libdata/pkgconfig/${pcfile}.pc" >> ${PLIST}
@${REINPLACE_CMD} -e 's|${FAKEDIR}|${PREFIX}|g' \
-e 's|${MOZILLA}-nspr = ${PORTVERSION}|nspr|' \
${FAKEDIR}/libdata/pkgconfig/${pcfile}.pc
.endfor
${ECHO_CMD} "@exec ${LOCALBASE}/bin/update-desktop-database > /dev/null || ${TRUE}" >> ${PLIST}
${ECHO_CMD} "@unexec ${LOCALBASE}/bin/update-desktop-database > /dev/null || ${TRUE}" >> ${PLIST}
${ECHO_CMD} "@unexec ${RMDIR} %D/share/idl 2>/dev/null || ${TRUE}" >> ${PLIST}
.endif # !defined(NOGECKO_PLIST)
do-install: gecko-do-install
gecko-do-install:
.if !defined(NOGECKO_INSTALL)
.for dir in ${MOZILLA_PLIST_DIRS}
.if !exists(${PREFIX}/${dir})
${MKDIR} ${PREFIX}/${dir}
${CHMOD} 755 ${PREFIX}/${dir}
.endif
cd ${FAKEDIR}/${dir} && ${FIND} . | \
${CPIO} -pdm -L -R ${LIBOWN}:${LIBGRP} ${PREFIX}/${dir}
.endfor
.for pcfile in ${PKGCONFIG_FILES}
${INSTALL_DATA} ${FAKEDIR}/libdata/pkgconfig/${pcfile}.pc \
${PREFIX}/libdata/pkgconfig/${pcfile}.pc
.endfor
${MKDIR} ${PREFIX}/${BROWSER_PLUGINS_DIR}
${TOUCH} -f ${PREFIX}/${BROWSER_PLUGINS_DIR}/.${MOZILLA}.keep
.endif # !defined(NOGECKO_INSTALL)
gecko-moz-pis-pre-install:
.if defined(MOZ_PIS_SCRIPTS)
${MKDIR} ${FAKEDIR}/${MOZ_PIS_DIR}
.for moz in ${MOZ_PIS_SCRIPTS}
${INSTALL_SCRIPT} ${WRKDIR}/${moz} ${FAKEDIR}/${MOZ_PIS_DIR}
.endfor
.endif
post-install: gecko-post-install
gecko-post-install:
.if !defined(PACKAGE_BUILDING)
@if [ -e ${PKGINSTALL} ] ; then \
${SETENV} PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL; \
fi
.endif
@-update-desktop-database