Hi, Now that we have cairo-1.10.2, that has fixed many annoying bugs present in version 1.10.0, we can safely re-enable system-cairo for mozilla-firefox and mozilla-thunderbird. The only remaining problem was with animated gifs, but this[1] patch, backported from the firefox-4 branch, fixes it:
[1] http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/net-libs/xulrunner/files/fix-animated-gifs.patch Unfortunately, the above trick cannot be applied to firefox35, seamonkey and sunbird, which will remain with their in-tree cairo. What about the following diff? CIAO David Index: devel/xulrunner/1.9/Makefile =================================================================== RCS file: /cvs/ports/devel/xulrunner/1.9/Makefile,v retrieving revision 1.36 diff -u -p -r1.36 Makefile --- devel/xulrunner/1.9/Makefile 18 Jan 2011 12:37:44 -0000 1.36 +++ devel/xulrunner/1.9/Makefile 19 Jan 2011 14:01:13 -0000 @@ -5,7 +5,7 @@ FFX_VERSION = 3.6.13 MOZILLA_BRANCH = 1.9.2 MOZILLA_PROJECT = xulrunner1.9 DISTNAME = firefox-${FFX_VERSION}.source -REVISION-main = 2 +REVISION-main = 3 REVISION-devel = 1 MASTER_SITES = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/${FFX_VERSION}/source/ @@ -26,6 +26,8 @@ PKG_ARGS+= -Djit=0 -Damd64=0 # use files and patches from www/mozilla-firefox PATCHDIR = ${PORTSDIR}/www/mozilla-firefox/patches FILESDIR = ${PORTSDIR}/www/mozilla-firefox/files + +CONFIGURE_ARGS += --enable-system-cairo MOZILLA_DATADIRS = chrome components defaults dictionaries greprefs \ icons modules plugins res Index: mail/mozilla-thunderbird/Makefile =================================================================== RCS file: /cvs/ports/mail/mozilla-thunderbird/Makefile,v retrieving revision 1.116 diff -u -p -r1.116 Makefile --- mail/mozilla-thunderbird/Makefile 18 Jan 2011 12:37:44 -0000 1.116 +++ mail/mozilla-thunderbird/Makefile 19 Jan 2011 13:57:47 -0000 @@ -12,7 +12,7 @@ MOZILLA_CODENAME = mail MULTI_PACKAGES = -main -lightning PKGNAME-main = ${PKGNAME} -REVISION-main = 2 +REVISION-main = 3 PKGNAME-lightning = lightning-1.0beta2 EPOCH-lightning = 0 REVISION-lightning = 13 @@ -69,6 +69,8 @@ BUILD_DEPENDS += archivers/unzip #to unz # build lightning xpi CONFIGURE_ARGS += --enable-calendar \ --enable-official-branding + +CONFIGURE_ARGS += --enable-system-cairo ALL_TARGET = default Index: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp =================================================================== RCS file: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp diff -N mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp 19 Jan 2011 13:57:47 -0000 @@ -0,0 +1,20 @@ +$OpenBSD$ +--- mozilla/modules/libpr0n/decoders/gif/nsGIFDecoder2.cpp.orig Tue Dec 7 17:35:50 2010 ++++ mozilla/modules/libpr0n/decoders/gif/nsGIFDecoder2.cpp Wed Jan 19 11:28:20 2011 +@@ -202,7 +202,7 @@ static NS_METHOD ReadDataOut(nsIInputStream* in, + nsresult + nsGIFDecoder2::FlushImageData(PRUint32 fromRow, PRUint32 rows) + { +- nsIntRect r(0, fromRow, mGIFStruct.width, rows); ++ nsIntRect r(mGIFStruct.x_offset, mGIFStruct.y_offset + fromRow, mGIFStruct.width, rows); + + // Update image + nsresult rv = mImageContainer->FrameUpdated(mGIFStruct.images_decoded, r); +@@ -215,7 +215,6 @@ nsGIFDecoder2::FlushImageData(PRUint32 fromRow, PRUint + if (!mGIFStruct.images_decoded && mObserver) { + PRUint32 imgCurFrame; + mImageContainer->GetCurrentFrameIndex(&imgCurFrame); +- r.y += mGIFStruct.y_offset; + mObserver->OnDataAvailable(nsnull, imgCurFrame == PRUint32(mGIFStruct.images_decoded), &r); + } + return NS_OK; Index: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgContainer_cpp =================================================================== RCS file: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgContainer_cpp diff -N mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgContainer_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgContainer_cpp 19 Jan 2011 13:57:47 -0000 @@ -0,0 +1,24 @@ +$OpenBSD$ +--- mozilla/modules/libpr0n/src/imgContainer.cpp.orig Tue Dec 7 17:35:50 2010 ++++ mozilla/modules/libpr0n/src/imgContainer.cpp Wed Jan 19 11:28:20 2011 +@@ -420,6 +420,8 @@ nsresult imgContainer::InternalAddFrameHelper(PRUint32 + + frame->GetImageData(imageData, imageLength); + ++ frame->LockImageData(); ++ + mFrames.InsertElementAt(framenum, frame.forget()); + mNumFrames++; + +@@ -444,6 +446,11 @@ nsresult imgContainer::InternalAddFrame(PRUint32 frame + + nsresult rv = frame->Init(aX, aY, aWidth, aHeight, aFormat, aPaletteDepth); + NS_ENSURE_SUCCESS(rv, rv); ++ ++ if (mFrames.Length() > 0) { ++ imgFrame *prevframe = mFrames.ElementAt(mFrames.Length() - 1); ++ prevframe->UnlockImageData(); ++ } + + if (mFrames.Length() == 0) { + return InternalAddFrameHelper(framenum, frame.forget(), imageData, imageLength, Index: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_cpp =================================================================== RCS file: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_cpp diff -N mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_cpp 19 Jan 2011 13:57:47 -0000 @@ -0,0 +1,83 @@ +$OpenBSD$ +--- mozilla/modules/libpr0n/src/imgFrame.cpp.orig Tue Dec 7 17:35:50 2010 ++++ mozilla/modules/libpr0n/src/imgFrame.cpp Wed Jan 19 11:28:20 2011 +@@ -157,6 +157,7 @@ imgFrame::imgFrame() : + #ifdef USE_WIN_SURFACE + , mIsDDBSurface(PR_FALSE) + #endif ++ , mLocked(PR_FALSE) + { + static PRBool hasCheckedOptimize = PR_FALSE; + if (!hasCheckedOptimize) { +@@ -418,8 +419,7 @@ void imgFrame::Draw(gfxContext *aContext, gfxPattern:: + + PRBool doTile = !imageRect.Contains(sourceRect); + if (doPadding || doPartialDecode) { +- gfxRect available = gfxRect(mDecoded.x, mDecoded.y, mDecoded.width, mDecoded.height) + +- gfxPoint(aPadding.left, aPadding.top); ++ gfxRect available = gfxRect(mDecoded.x, mDecoded.y, mDecoded.width, mDecoded.height); + + if (!doTile && !mSinglePixel) { + // Not tiling, and we have a surface, so we can account for +@@ -713,7 +713,7 @@ nsresult imgFrame::ImageUpdated(const nsIntRect &aUpda + + // clamp to bounds, in case someone sends a bogus updateRect (I'm looking at + // you, gif decoder) +- nsIntRect boundsRect(0, 0, mSize.width, mSize.height); ++ nsIntRect boundsRect(mOffset, mSize); + mDecoded.IntersectRect(mDecoded, boundsRect); + + #ifdef XP_MACOSX +@@ -811,8 +811,14 @@ void imgFrame::GetPaletteData(PRUint32 **aPalette, PRU + nsresult imgFrame::LockImageData() + { + if (mPalettedImageData) +- return NS_OK; ++ return NS_ERROR_NOT_AVAILABLE; + ++ NS_ABORT_IF_FALSE(!mLocked, "Trying to lock already locked image data."); ++ if (mLocked) { ++ return NS_ERROR_FAILURE; ++ } ++ mLocked = PR_TRUE; ++ + if ((mOptSurface || mSinglePixel) && !mImageSurface) { + // Recover the pixels + mImageSurface = new gfxImageSurface(gfxIntSize(mSize.width, mSize.height), +@@ -837,14 +843,26 @@ nsresult imgFrame::LockImageData() + #endif + } + ++ if (mImageSurface) ++ mImageSurface->Flush(); ++ + return NS_OK; + } + + nsresult imgFrame::UnlockImageData() + { + if (mPalettedImageData) +- return NS_OK; ++ return NS_ERROR_NOT_AVAILABLE; + ++ NS_ABORT_IF_FALSE(mLocked, "Unlocking an unlocked image!"); ++ if (!mLocked) { ++ return NS_ERROR_FAILURE; ++ } ++ mLocked = PR_FALSE; ++ ++ if (mImageSurface) ++ mImageSurface->MarkDirty(); ++ + #ifdef XP_MACOSX + if (mQuartzSurface) + mQuartzSurface->Flush(); +@@ -900,7 +918,7 @@ void imgFrame::SetBlendMethod(PRInt32 aBlendMethod) + + PRBool imgFrame::ImageComplete() const + { +- return mDecoded == nsIntRect(0, 0, mSize.width, mSize.height); ++ return mDecoded == nsIntRect(mOffset, mSize); + } + + // A hint from the image decoders that this image has no alpha, even Index: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_h =================================================================== RCS file: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_h diff -N mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_h 19 Jan 2011 13:57:47 -0000 @@ -0,0 +1,11 @@ +$OpenBSD$ +--- mozilla/modules/libpr0n/src/imgFrame.h.orig Tue Dec 7 17:35:50 2010 ++++ mozilla/modules/libpr0n/src/imgFrame.h Wed Jan 19 11:28:20 2011 +@@ -172,6 +172,7 @@ class imgFrame (private) + PRPackedBool mNeverUseDeviceSurface; + PRPackedBool mFormatChanged; + PRPackedBool mCompositingFailed; ++ PRPackedBool mLocked; + + #ifdef XP_WIN + PRPackedBool mIsDDBSurface; Index: www/mozilla-firefox/Makefile =================================================================== RCS file: /cvs/ports/www/mozilla-firefox/Makefile,v retrieving revision 1.165 diff -u -p -r1.165 Makefile --- www/mozilla-firefox/Makefile 18 Jan 2011 12:33:38 -0000 1.165 +++ www/mozilla-firefox/Makefile 19 Jan 2011 13:57:48 -0000 @@ -7,7 +7,7 @@ MOZILLA_VERSION = 3.6.13 MOZILLA_BRANCH = 1.9.2 MOZILLA_PROJECT = mozilla-firefox MOZILLA_CODENAME = browser -REVISION = 2 +REVISION = 3 SO_VERSION = 22.2 # NOTE: Must bump minor version if any shlib's are removed from the @@ -39,6 +39,8 @@ CONFIGURE_STYLE = autoconf no-autoheader CONFIGURE_ARGS += --enable-official-branding # --with-system-png=${LOCALBASE} # no system png : apng support not bundled in + +CONFIGURE_ARGS += --enable-system-cairo MOZILLA_DATADIRS = chrome components defaults dictionaries extensions \ greprefs icons modules plugins res searchplugins Index: www/mozilla-firefox/patches/patch-modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp =================================================================== RCS file: www/mozilla-firefox/patches/patch-modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp diff -N www/mozilla-firefox/patches/patch-modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ www/mozilla-firefox/patches/patch-modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp 19 Jan 2011 13:57:48 -0000 @@ -0,0 +1,20 @@ +$OpenBSD$ +--- modules/libpr0n/decoders/gif/nsGIFDecoder2.cpp.orig Fri Dec 3 16:48:47 2010 ++++ modules/libpr0n/decoders/gif/nsGIFDecoder2.cpp Wed Jan 19 11:07:31 2011 +@@ -202,7 +202,7 @@ static NS_METHOD ReadDataOut(nsIInputStream* in, + nsresult + nsGIFDecoder2::FlushImageData(PRUint32 fromRow, PRUint32 rows) + { +- nsIntRect r(0, fromRow, mGIFStruct.width, rows); ++ nsIntRect r(mGIFStruct.x_offset, mGIFStruct.y_offset + fromRow, mGIFStruct.width, rows); + + // Update image + nsresult rv = mImageContainer->FrameUpdated(mGIFStruct.images_decoded, r); +@@ -215,7 +215,6 @@ nsGIFDecoder2::FlushImageData(PRUint32 fromRow, PRUint + if (!mGIFStruct.images_decoded && mObserver) { + PRUint32 imgCurFrame; + mImageContainer->GetCurrentFrameIndex(&imgCurFrame); +- r.y += mGIFStruct.y_offset; + mObserver->OnDataAvailable(nsnull, imgCurFrame == PRUint32(mGIFStruct.images_decoded), &r); + } + return NS_OK; Index: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgContainer_cpp =================================================================== RCS file: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgContainer_cpp diff -N www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgContainer_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgContainer_cpp 19 Jan 2011 13:57:48 -0000 @@ -0,0 +1,24 @@ +$OpenBSD$ +--- modules/libpr0n/src/imgContainer.cpp.orig Fri Dec 3 16:48:47 2010 ++++ modules/libpr0n/src/imgContainer.cpp Wed Jan 19 11:07:31 2011 +@@ -420,6 +420,8 @@ nsresult imgContainer::InternalAddFrameHelper(PRUint32 + + frame->GetImageData(imageData, imageLength); + ++ frame->LockImageData(); ++ + mFrames.InsertElementAt(framenum, frame.forget()); + mNumFrames++; + +@@ -444,6 +446,11 @@ nsresult imgContainer::InternalAddFrame(PRUint32 frame + + nsresult rv = frame->Init(aX, aY, aWidth, aHeight, aFormat, aPaletteDepth); + NS_ENSURE_SUCCESS(rv, rv); ++ ++ if (mFrames.Length() > 0) { ++ imgFrame *prevframe = mFrames.ElementAt(mFrames.Length() - 1); ++ prevframe->UnlockImageData(); ++ } + + if (mFrames.Length() == 0) { + return InternalAddFrameHelper(framenum, frame.forget(), imageData, imageLength, Index: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_cpp =================================================================== RCS file: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_cpp diff -N www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_cpp 19 Jan 2011 13:57:48 -0000 @@ -0,0 +1,83 @@ +$OpenBSD$ +--- modules/libpr0n/src/imgFrame.cpp.orig Fri Dec 3 16:48:47 2010 ++++ modules/libpr0n/src/imgFrame.cpp Wed Jan 19 11:07:31 2011 +@@ -157,6 +157,7 @@ imgFrame::imgFrame() : + #ifdef USE_WIN_SURFACE + , mIsDDBSurface(PR_FALSE) + #endif ++ , mLocked(PR_FALSE) + { + static PRBool hasCheckedOptimize = PR_FALSE; + if (!hasCheckedOptimize) { +@@ -418,8 +419,7 @@ void imgFrame::Draw(gfxContext *aContext, gfxPattern:: + + PRBool doTile = !imageRect.Contains(sourceRect); + if (doPadding || doPartialDecode) { +- gfxRect available = gfxRect(mDecoded.x, mDecoded.y, mDecoded.width, mDecoded.height) + +- gfxPoint(aPadding.left, aPadding.top); ++ gfxRect available = gfxRect(mDecoded.x, mDecoded.y, mDecoded.width, mDecoded.height); + + if (!doTile && !mSinglePixel) { + // Not tiling, and we have a surface, so we can account for +@@ -713,7 +713,7 @@ nsresult imgFrame::ImageUpdated(const nsIntRect &aUpda + + // clamp to bounds, in case someone sends a bogus updateRect (I'm looking at + // you, gif decoder) +- nsIntRect boundsRect(0, 0, mSize.width, mSize.height); ++ nsIntRect boundsRect(mOffset, mSize); + mDecoded.IntersectRect(mDecoded, boundsRect); + + #ifdef XP_MACOSX +@@ -811,8 +811,14 @@ void imgFrame::GetPaletteData(PRUint32 **aPalette, PRU + nsresult imgFrame::LockImageData() + { + if (mPalettedImageData) +- return NS_OK; ++ return NS_ERROR_NOT_AVAILABLE; + ++ NS_ABORT_IF_FALSE(!mLocked, "Trying to lock already locked image data."); ++ if (mLocked) { ++ return NS_ERROR_FAILURE; ++ } ++ mLocked = PR_TRUE; ++ + if ((mOptSurface || mSinglePixel) && !mImageSurface) { + // Recover the pixels + mImageSurface = new gfxImageSurface(gfxIntSize(mSize.width, mSize.height), +@@ -837,14 +843,26 @@ nsresult imgFrame::LockImageData() + #endif + } + ++ if (mImageSurface) ++ mImageSurface->Flush(); ++ + return NS_OK; + } + + nsresult imgFrame::UnlockImageData() + { + if (mPalettedImageData) +- return NS_OK; ++ return NS_ERROR_NOT_AVAILABLE; + ++ NS_ABORT_IF_FALSE(mLocked, "Unlocking an unlocked image!"); ++ if (!mLocked) { ++ return NS_ERROR_FAILURE; ++ } ++ mLocked = PR_FALSE; ++ ++ if (mImageSurface) ++ mImageSurface->MarkDirty(); ++ + #ifdef XP_MACOSX + if (mQuartzSurface) + mQuartzSurface->Flush(); +@@ -900,7 +918,7 @@ void imgFrame::SetBlendMethod(PRInt32 aBlendMethod) + + PRBool imgFrame::ImageComplete() const + { +- return mDecoded == nsIntRect(0, 0, mSize.width, mSize.height); ++ return mDecoded == nsIntRect(mOffset, mSize); + } + + // A hint from the image decoders that this image has no alpha, even Index: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_h =================================================================== RCS file: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_h diff -N www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_h 19 Jan 2011 13:57:48 -0000 @@ -0,0 +1,11 @@ +$OpenBSD$ +--- modules/libpr0n/src/imgFrame.h.orig Fri Dec 3 16:48:47 2010 ++++ modules/libpr0n/src/imgFrame.h Wed Jan 19 11:07:31 2011 +@@ -172,6 +172,7 @@ class imgFrame (private) + PRPackedBool mNeverUseDeviceSurface; + PRPackedBool mFormatChanged; + PRPackedBool mCompositingFailed; ++ PRPackedBool mLocked; + + #ifdef XP_WIN + PRPackedBool mIsDDBSurface;
moz_sys_cairo.patch
Description: Binary data