aboutsummaryrefslogblamecommitdiff
path: root/www/mozilla/Makefile.common
blob: 59daf02f0b38d4575e0991060eb3c49f83d9c85e (plain) (tree)
1
2
3
4
5
6
7
8





                                                                          
                                                                                   
 





                                                                           
 
                              
 


                                                                       








                                                                          
 











                                                                         



                                                                     






                                                                     







                                                  



                                 
                               



                                             
                   
 
                    


                                 
                                            











                                                                               
                                                                                                                          

                                       
                                       

                                                         



                                                                 

                                                                 







                                                                           
                                                              

                                                          
                                                                                 
                                         
                                                                                    

                                                                  













                                                                          
                       


       
                              
                    

                                         
                                                         










































                                                         

                                  
                                                                  

                   

                                         



                         
                                 











                                                         
                                             






                                        





                                 


















                                                                 
                                                         
                                                         


                                                            
                                                                              




                       


                                                

                                                             
      

                                                                 




























                                                                               
                                                              
                                                                     

                                                        




                                                                     

                                                           
                                          






                                                                      
                                                        


                                                                      










                                                                                                               




                                                                      





                                                                                                
                                                                                            
 



                             
 
                  



                                                                       
                                                                            


                                                                                                   
                                                     

                                                                                                                          





                                                                                 



                                                         



                           
                  





                                             










                                                                                                   
                                     






                                                                                                         
                                                                                      













                                                                       
                                     

















                                                                     
                              




                                                                                             
# Makefile.common handles common tasks and dependencies for mozilla ports.
#
# Date created:		12 Nov 2005
# Whom:			Michael Johnson <ahze@FreeBSD.org>
#
# $FreeBSD$
#    $MCom: ports/www/mozilla/Makefile.common,v 1.45 2007/02/06 00:05:55 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
GECKO_PTHREAD_LIBS!=${CC} -dumpspecs | ${GREP} -m 1 pthread | ${SED} -e 's|^.*%{\!pg: %{pthread:|| ; s|}.*$$||' || ${TRUE}
PKGINSTALL?=	${WRKDIR}/pkg-install
PKGDEINSTALL?=	${WRKDIR}/pkg-deinstall
MASTER_MOZDIR?=	${PORTSDIR}/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 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

MOZ_PKGCONFIG_FILES?=	${MOZILLA}-gtkmozembed ${MOZILLA}-js \
			${MOZILLA}-xpcom ${MOZILLA}-plugin

CPPFLAGS+=		-I${LOCALBASE}/include/nss -I${LOCALBASE}/include/nss/nss
CFLAGS+=		${PTHREAD_CFLAGS}
LDFLAGS+=		-L${LOCALBASE}/lib/nss -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_TOOLKIT?=	gtk2
MOZ_OPTIONS+=	--enable-crypto 	\
		--disable-tests 	\
		--enable-default-toolkit=${MOZ_TOOLKIT} \
		--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

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}

.if ${ARCH}=="i386" && (${OSVERSION} >= 700000 || exists(/usr/lib/libbz2_p.a))
LIB_BZ2=	-lbz2_p
.else
LIB_BZ2=	-lbz2
.endif

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 ; \
		s|echo aout|echo elf|g ; s|/usr/X11R6|${X11BASE}|g' \
		${WRKSRC}/security/coreconf/FreeBSD.mk \
		${WRKSRC}/js/src/Makefile.in
	@if [ -d ${WRKSRC}/directory/c-sdk ]; then \
		${REINPLACE_CMD} -e 's|echo aout|echo elf|g' \
			${WRKSRC}/directory/c-sdk/config/FreeBSD.mk \
			${WRKSRC}/directory/c-sdk/configure ; \
	fi
	@${REINPLACE_CMD} -e 's|-lc_r|${PTHREAD_LIBS}|g ; \
		s|-lpthread|${PTHREAD_LIBS}|g ; \
		s|echo aout|echo elf|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 ${MOZ_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 ${MOZ_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 ${MOZ_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