diff options
author | Martin Schlemmer <azarah@gentoo.org> | 2003-03-22 06:15:13 +0000 |
---|---|---|
committer | Martin Schlemmer <azarah@gentoo.org> | 2003-03-22 06:15:13 +0000 |
commit | 912a46b7ee055d3b7c84a2dc5b6193c39eab930c (patch) | |
tree | 3b54bb48543bc96531de761cf6185c0a8a87ef83 /net-www | |
parent | fix pkg_mv_plugins to only try and move things if is not a symlink (diff) | |
download | historical-912a46b7ee055d3b7c84a2dc5b6193c39eab930c.tar.gz historical-912a46b7ee055d3b7c84a2dc5b6193c39eab930c.tar.bz2 historical-912a46b7ee055d3b7c84a2dc5b6193c39eab930c.zip |
gtk2 patch; cleanups
Diffstat (limited to 'net-www')
-rw-r--r-- | net-www/mozilla/ChangeLog | 8 | ||||
-rw-r--r-- | net-www/mozilla/files/1.3/mozilla-1.3-gtk2.patch | 588 | ||||
-rw-r--r-- | net-www/mozilla/files/digest-mozilla-1.3-r1 | 3 | ||||
-rw-r--r-- | net-www/mozilla/files/xft.js | 3 | ||||
-rw-r--r-- | net-www/mozilla/mozilla-1.3-r1.ebuild | 598 |
5 files changed, 1199 insertions, 1 deletions
diff --git a/net-www/mozilla/ChangeLog b/net-www/mozilla/ChangeLog index 1faacdad9106..70d8a6f2c896 100644 --- a/net-www/mozilla/ChangeLog +++ b/net-www/mozilla/ChangeLog @@ -1,6 +1,12 @@ # ChangeLog for net-www/mozilla # Copyright 2002-2003 Gentoo Technologies, Inc.; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/net-www/mozilla/ChangeLog,v 1.88 2003/03/22 00:03:00 jayskwak Exp $ +# $Header: /var/cvsroot/gentoo-x86/net-www/mozilla/ChangeLog,v 1.89 2003/03/22 06:15:13 azarah Exp $ + +*mozilla-1.3-r1 (22 Mar 2003) + + 22 Mar 2003; Martin Schlemmer <azarah@gentoo.org> mozilla-1.3-r1.ebuild : + Add Gtk2 patch. Add default/prefs/xft.js when Xft is enabled. Some other + long overdue cleanups. *mozilla-1.3 (18 Mar 2003) diff --git a/net-www/mozilla/files/1.3/mozilla-1.3-gtk2.patch b/net-www/mozilla/files/1.3/mozilla-1.3-gtk2.patch new file mode 100644 index 000000000000..9026767d0a9e --- /dev/null +++ b/net-www/mozilla/files/1.3/mozilla-1.3-gtk2.patch @@ -0,0 +1,588 @@ +--- mozilla/widget/src/gtk2/Makefile.in.gtk2 2002-12-28 02:14:45.000000000 +0100 ++++ mozilla/widget/src/gtk2/Makefile.in 2003-03-11 14:05:45.000000000 +0100 +@@ -90,7 +90,7 @@ + CFLAGS += $(MOZ_GTK2_CFLAGS) + CXXFLAGS += $(MOZ_GTK2_CFLAGS) + +-#DEFINES += -DUSE_XIM ++DEFINES += -DUSE_XIM + + INCLUDES += \ + -I$(srcdir)/../xpwidgets \ +--- mozilla/widget/src/gtk2/nsWindow.h.gtk2 2003-02-17 19:50:01.000000000 +0100 ++++ mozilla/widget/src/gtk2/nsWindow.h 2003-03-13 10:14:36.000000000 +0100 +@@ -139,9 +139,11 @@ + PRBool aDoCapture, + PRBool aConsumeRollupEvent); + NS_IMETHOD GetAttention(); ++ NS_IMETHOD HideWindowChrome(PRBool aShouldHide); + + // utility methods + void LoseFocus(); ++ gint ConvertBorderStyles(nsBorderStyle bs); + + // event callbacks + gboolean OnExposeEvent(GtkWidget *aWidget, +@@ -239,6 +241,9 @@ + static guint32 mLastButtonPressTime; + + #ifdef USE_XIM ++ void IMEDestroyContext(void); ++ void IMESetFocus(void); ++ void IMELoseFocus(void); + void IMEComposeStart(void); + void IMEComposeText(const PRUnichar *aText, + const PRInt32 aLen, +@@ -249,9 +254,14 @@ + void IMEGetShellWindow(void); + GtkIMContext* IMEGetContext(void); + void IMECreateContext(GdkWindow* aGdkWindow); ++ PRBool IMFilterKeypress (GtkIMContext *context, ++ GdkEventKey *aEvent); ++ + + nsWindow* mIMEShellWindow; + static PLDHashTable gXICLookupTable; ++ static GdkEventKey* gIMEKeyEvent; ++ static PRBool gIMEStringCommited; + #endif + + private: +--- mozilla/widget/src/gtk2/nsWindow.cpp.gtk2 2003-02-21 02:09:17.000000000 +0100 ++++ mozilla/widget/src/gtk2/nsWindow.cpp 2003-03-13 10:13:17.000000000 +0100 +@@ -179,6 +179,7 @@ + nsWeakPtr gRollupWindow; + + #ifdef USE_XIM ++static nsWindow *gIMEFocusWindow = NULL; + + struct nsXICLookupEntry { + PLDHashEntryHdr mKeyHash; +@@ -186,7 +187,9 @@ + GtkIMContext* mXIC; + }; + +-PLDHashTable nsWindow::gXICLookupTable; ++PLDHashTable nsWindow::gXICLookupTable; ++GdkEventKey* nsWindow::gIMEKeyEvent = NULL; ++PRBool nsWindow::gIMEStringCommited = PR_TRUE; + + static void IM_commit_cb (GtkIMContext *context, + const gchar *str, +@@ -257,61 +260,6 @@ + #endif + } + +-#ifdef USE_XIM +-void +-nsWindow::IMEGetShellWindow(void) +-{ +- GtkWidget* top_window = nsnull; +- GetToplevelWidget(&top_window); +- if (top_window) { +- mIMEShellWindow = get_window_for_gtk_widget(top_window); +- } +-} +- +-GtkIMContext* +-nsWindow::IMEGetContext() +-{ +- if (!mIMEShellWindow) { +- return NULL; +- } +- PLDHashEntryHdr* hash_entry; +- nsXICLookupEntry* entry; +- +- hash_entry = PL_DHashTableOperate(&gXICLookupTable, +- mIMEShellWindow, PL_DHASH_LOOKUP); +- +- if (hash_entry) { +- entry = NS_REINTERPRET_CAST(nsXICLookupEntry *, hash_entry); +- if (entry->mXIC) { +- return entry->mXIC; +- } +- } +- return NULL; +-} +- +-void +-nsWindow::IMECreateContext(GdkWindow* aGdkWindow) +-{ +- PLDHashEntryHdr* hash_entry; +- nsXICLookupEntry* entry; +- GtkIMContext *im = gtk_im_multicontext_new(); +- if (im) { +- hash_entry = PL_DHashTableOperate(&gXICLookupTable, this, PL_DHASH_ADD); +- if (hash_entry) { +- entry = NS_REINTERPRET_CAST(nsXICLookupEntry *, hash_entry); +- entry->mShellWindow = this; +- entry->mXIC = im; +- } +- gtk_im_context_set_client_window(im, aGdkWindow); +- g_signal_connect(G_OBJECT(im), "commit", +- G_CALLBACK(IM_commit_cb), this); +- g_signal_connect(G_OBJECT(im), "preedit_changed", +- G_CALLBACK(IM_preedit_changed_cb), this); +- this->mIMEShellWindow = this; +- } +-} +-#endif +- + nsWindow::~nsWindow() + { + LOG(("nsWindow::~nsWindow() [%p]\n", (void *)this)); +@@ -397,22 +345,7 @@ + } + + #ifdef USE_XIM +- GtkIMContext *im = IMEGetContext(); +- // If this is the focus window and we have an IM context we need +- // to unset the focus on this window before we destroy the window. +- if (im && gFocusWindow == this) { +- LOGFOCUS((" gtk_im_context_focus_out() from Destroy()\n")); +- gtk_im_context_focus_out(im); +- } +- +- // if shell, delete GtkIMContext +- if (im && mShell) { +- gtk_im_context_reset(im); +- PL_DHashTableOperate(&gXICLookupTable, this, PL_DHASH_REMOVE); +- g_object_unref(G_OBJECT(im)); +- } +- +- mIMEShellWindow = nsnull; ++ IMEDestroyContext(); + #endif + + // make sure that we remove ourself as the focus window +@@ -666,11 +599,7 @@ + gFocusWindow = this; + + #ifdef USE_XIM +- GtkIMContext *im = IMEGetContext(); +- if (im && !mIsTopLevel) { +- LOGFOCUS((" gtk_im_context_focus_in()\n")); +- gtk_im_context_focus_in(im); +- } ++ IMESetFocus(); + #endif + + LOGFOCUS((" widget now has focus - dispatching events [%p]\n", +@@ -735,7 +664,11 @@ + GtkWidget *widget = + get_gtk_widget_for_gdk_window(mDrawingarea->inner_window); + nsWindow *window = get_window_for_gtk_widget(widget); +- return window->SetCursor(aCursor); ++ if (window) { ++ return window->SetCursor(aCursor); ++ } ++ else ++ return NS_OK; + } + + // Only change cursor if it's actually been changed +@@ -746,7 +679,12 @@ + + if (nsnull != newCursor) { + mCursor = aCursor; ++ ++ if (!mContainer) ++ return NS_OK; ++ + gdk_window_set_cursor(GTK_WIDGET(mContainer)->window, newCursor); ++ + XFlush(GDK_DISPLAY()); + } + } +@@ -1161,17 +1099,8 @@ + nsWindow::LoseFocus(void) + { + #ifdef USE_XIM +- GtkIMContext *im = IMEGetContext(); +- if (im && !mIsTopLevel) { +- LOGFOCUS((" gtk_im_context_focus_out()\n")); +- gtk_im_context_focus_out(im); +- IMEComposeStart(); +- IMEComposeText(NULL, 0, NULL, NULL); +- IMEComposeEnd(); +- LOG(("gtk_im_context_focus_out\n")); +- } ++ IMELoseFocus(); + #endif +- + // make sure that we reset our repeat counter so the next keypress + // for this widget will get the down event + mInKeyRepeat = PR_FALSE; +@@ -1382,7 +1311,7 @@ + nsWindow *containerWindow; + GetContainerWindow(&containerWindow); + +- if (!gFocusWindow) { ++ if (!gFocusWindow && !containerWindow) { + containerWindow->mActivatePending = PR_FALSE; + DispatchActivateEvent(); + } +@@ -1532,7 +1461,7 @@ + #ifdef USE_XIM + GtkIMContext *im = IMEGetContext(); + if (im) { +- if (gtk_im_context_filter_keypress(im, aEvent)) { ++ if (IMFilterKeypress(im, aEvent)) { + LOGFOCUS((" keypress filtered by XIM\n")); + return TRUE; + } +@@ -1616,7 +1545,7 @@ + #ifdef USE_XIM + GtkIMContext *im = IMEGetContext(); + if (im) { +- if (gtk_im_context_filter_keypress(im, aEvent)) { ++ if (IMFilterKeypress(im, aEvent)) { + LOGFOCUS((" keypress filtered by XIM\n")); + return TRUE; + } +@@ -2150,6 +2079,13 @@ + + // and the drawing area + mDrawingarea = moz_drawingarea_new(nsnull, mContainer); ++ ++#if defined(USE_XIM) && !defined(XIM_CREATE_IC_AT_FOCUS) ++ if (mWindowType != eWindowType_popup) { ++ // create im context for shell ++ IMECreateContext(mShell->window); ++ } ++#endif /* XIM_CREATE_IC_AT_FOCUS && !XIM_CREATE_IC_AT_FOCUS*/ + } + break; + case eWindowType_child: { +@@ -2162,11 +2098,11 @@ + gtk_widget_realize(GTK_WIDGET(mContainer)); + + mDrawingarea = moz_drawingarea_new(nsnull, mContainer); ++#if defined(USE_XIM) && !defined(XIM_CREATE_IC_AT_FOCUS) ++ // create im context for gtk container ++ IMECreateContext(GTK_WIDGET(mContainer)->window); ++#endif /* XIM_CREATE_IC_AT_FOCUS && !XIM_CREATE_IC_AT_FOCUS*/ + } +-#ifdef USE_XIM +- // get mIMEShellWindow and keep it +- IMEGetShellWindow(); +-#endif + } + break; + default: +@@ -2211,13 +2147,6 @@ + G_CALLBACK(property_notify_event_cb), NULL); + } + +-#ifdef USE_XIM +- if (mShell) { +- // init GtkIMContext for shell +- IMECreateContext(mShell->window); +- } +-#endif +- + if (mContainer) { + g_signal_connect_after(G_OBJECT(mContainer), "size_allocate", + G_CALLBACK(size_allocate_cb), NULL); +@@ -2694,6 +2623,83 @@ + } + + ++gint ++nsWindow::ConvertBorderStyles(nsBorderStyle bs) ++{ ++ gint w = 0; ++ ++ if (bs == eBorderStyle_default) ++ return -1; ++ ++ if (bs & eBorderStyle_all) ++ w |= GDK_DECOR_ALL; ++ if (bs & eBorderStyle_border) ++ w |= GDK_DECOR_BORDER; ++ if (bs & eBorderStyle_resizeh) ++ w |= GDK_DECOR_RESIZEH; ++ if (bs & eBorderStyle_title) ++ w |= GDK_DECOR_TITLE; ++ if (bs & eBorderStyle_menu) ++ w |= GDK_DECOR_MENU; ++ if (bs & eBorderStyle_minimize) ++ w |= GDK_DECOR_MINIMIZE; ++ if (bs & eBorderStyle_maximize) ++ w |= GDK_DECOR_MAXIMIZE; ++ if (bs & eBorderStyle_close) { ++#ifdef DEBUG ++ printf("we don't handle eBorderStyle_close yet... please fix me\n"); ++#endif /* DEBUG */ ++ } ++ ++ return w; ++} ++ ++NS_IMETHODIMP ++nsWindow::HideWindowChrome(PRBool aShouldHide) ++{ ++ if (!mShell) { ++ // Pass the request to the toplevel window ++ GtkWidget *topWidget = nsnull; ++ GetToplevelWidget(&topWidget); ++ nsWindow *topWindow = get_window_for_gtk_widget(topWidget); ++ if (topWindow) ++ return topWindow->HideWindowChrome(aShouldHide); ++ else ++ return NS_OK; ++ } ++ ++ // Sawfish, metacity, and presumably other window managers get ++ // confused if we change the window decorations while the window ++ // is visible. ++#if GTK_CHECK_VERSION(2,2,0) ++ if (aShouldHide) ++ gdk_window_fullscreen (mShell->window); ++ else ++ gdk_window_unfullscreen (mShell->window); ++#else ++ gdk_window_hide(mShell->window); ++ ++ gint wmd; ++ if (aShouldHide) ++ wmd = 0; ++ else ++ wmd = ConvertBorderStyles(mBorderStyle); ++ ++ gdk_window_set_decorations(mShell->window, (GdkWMDecoration) wmd); ++ ++ gdk_window_show(mShell->window); ++#endif ++ ++ // For some window managers, adding or removing window decorations ++ // requires unmapping and remapping our toplevel window. Go ahead ++ // and flush the queue here so that we don't end up with a BadWindow ++ // error later when this happens (when the persistence timer fires ++ // and GetWindowPos is called) ++ XSync(GDK_DISPLAY(), False); ++ ++ return NS_OK; ++} ++ + PRBool + check_for_rollup(GdkWindow *aWindow, gdouble aMouseX, gdouble aMouseY, + PRBool aIsWheel) +@@ -3662,6 +3668,77 @@ + } + + #ifdef USE_XIM ++void ++nsWindow::IMEGetShellWindow(void) ++{ ++ GtkWidget* top_window = nsnull; ++ GetToplevelWidget(&top_window); ++ if (top_window) { ++ mIMEShellWindow = get_window_for_gtk_widget(top_window); ++ if (mIMEShellWindow) { ++ return; ++ } ++ } ++ ++ // find deepest nsWindow ++ if (!mDrawingarea) { ++ return; ++ } ++ GdkWindow *parent = gdk_window_get_parent(mDrawingarea->inner_window); ++ while (parent) { ++ nsWindow *window = get_window_for_gdk_window(parent); ++ if (window == nsnull) { ++ break; ++ } ++ if (window->mContainer) { ++ mIMEShellWindow = window; ++ } ++ parent = gdk_window_get_parent (parent); ++ } ++} ++ ++GtkIMContext* ++nsWindow::IMEGetContext() ++{ ++ if (!mIMEShellWindow) { ++ return NULL; ++ } ++ PLDHashEntryHdr* hash_entry; ++ nsXICLookupEntry* entry; ++ ++ hash_entry = PL_DHashTableOperate(&gXICLookupTable, ++ mIMEShellWindow, PL_DHASH_LOOKUP); ++ ++ if (hash_entry) { ++ entry = NS_REINTERPRET_CAST(nsXICLookupEntry *, hash_entry); ++ if (entry->mXIC) { ++ return entry->mXIC; ++ } ++ } ++ return NULL; ++} ++ ++void ++nsWindow::IMECreateContext(GdkWindow* aGdkWindow) ++{ ++ PLDHashEntryHdr* hash_entry; ++ nsXICLookupEntry* entry; ++ GtkIMContext *im = gtk_im_multicontext_new(); ++ if (im) { ++ hash_entry = PL_DHashTableOperate(&gXICLookupTable, this, PL_DHASH_ADD); ++ if (hash_entry) { ++ entry = NS_REINTERPRET_CAST(nsXICLookupEntry *, hash_entry); ++ entry->mShellWindow = this; ++ entry->mXIC = im; ++ } ++ gtk_im_context_set_client_window(im, aGdkWindow); ++ g_signal_connect(G_OBJECT(im), "commit", ++ G_CALLBACK(IM_commit_cb), this); ++ g_signal_connect(G_OBJECT(im), "preedit_changed", ++ G_CALLBACK(IM_preedit_changed_cb), this); ++ this->mIMEShellWindow = this; ++ } ++} + + void + nsWindow::IMEComposeStart(void) +@@ -3732,6 +3809,26 @@ + DispatchEvent(&compEvent, status); + } + ++PRBool ++nsWindow::IMFilterKeypress (GtkIMContext *context, ++ GdkEventKey *aEvent) ++{ ++ gIMEKeyEvent = aEvent; ++ if (gtk_im_context_filter_keypress(context, aEvent)) { ++ /* return true if the keyevent is commited as string and ++ ** has been dispatched as TextEvent. ++ */ ++ if( gIMEStringCommited ) { ++ return TRUE; ++ } ++ gIMEStringCommited = PR_TRUE; ++ } ++ gIMEKeyEvent = NULL; ++ ++ /* the Keyevent is not filtered by IME */ ++ return FALSE; ++} ++ + /* static */ + void + IM_preedit_changed_cb(GtkIMContext *context, +@@ -3742,7 +3839,8 @@ + PangoAttrList *feedback_list; + + // call for focused window +- nsWindow *window = gFocusWindow; ++ // if gFocusWindow is null, use the last focused gIMEFocusWindow ++ nsWindow *window = gFocusWindow ? gFocusWindow : gIMEFocusWindow; + if (!window) return; + + // Should use cursor_pos ? +@@ -3755,6 +3853,7 @@ + if (!preedit_string || !*preedit_string) { + window->IMEComposeStart(); + window->IMEComposeText(NULL, 0, NULL, NULL); ++ window->IMEComposeEnd(); + return; + } + +@@ -3795,9 +3894,31 @@ + glong uniStrLen; + + // call for focused window +- nsWindow *window = gFocusWindow; ++ // if gFocusWindow is null, use the last focused gIMEFocusWindow ++ nsWindow *window = gFocusWindow ? gFocusWindow : gIMEFocusWindow; + if (!window) return; + ++ /* if the IME does not change the keystrock, we won't send it ++ * through the TextEvent. ++ */ ++ nsWindow::gIMEStringCommited = PR_TRUE; ++ if ( nsWindow::gIMEKeyEvent ) ++ { ++ char keyval_utf8[8]; /* should have at least 6 bytes of space */ ++ gint keyval_utf8_len; ++ keyval_utf8_len = g_unichar_to_utf8( ++ gdk_keyval_to_unicode(nsWindow::gIMEKeyEvent->keyval), ++ keyval_utf8); ++ ++ keyval_utf8[keyval_utf8_len] = '\0'; ++ if ( strcmp(utf8_str, keyval_utf8) == 0) ++ { ++ nsWindow::gIMEStringCommited = PR_FALSE; ++ return; ++ } ++ nsWindow::gIMEKeyEvent = NULL; ++ } ++ + uniStr = NULL; + uniStrLen = 0; + uniStr = g_utf8_to_utf16(utf8_str, -1, NULL, &uniStrLen, NULL); +@@ -3941,4 +4062,61 @@ + pango_attr_iterator_destroy(aFeedbackIterator); + } + ++void ++nsWindow::IMELoseFocus(void) ++{ ++ GtkIMContext *im = IMEGetContext(); ++ if (!im) { ++ return; ++ } ++ gtk_im_context_focus_out(im); ++} ++ ++void ++nsWindow::IMESetFocus(void) ++{ ++ if (mWindowType == eWindowType_child && !mIMEShellWindow) { ++ IMEGetShellWindow(); ++ } ++ GtkIMContext *im = IMEGetContext(); ++#ifdef XIM_CREATE_IC_AT_FOCUS ++ if (!im && mIMEShellWindow) { ++ if (mIMEShellWindow->mShell) { ++ // init GtkIMContext for shell ++ mIMEShellWindow->IMECreateContext(mIMEShellWindow->mShell->window); ++ } else if (mIMEShellWindow->mContainer) { ++ // init GtkIMContext for mContainer ++ mIMEShellWindow->IMECreateContext(GTK_WIDGET(mIMEShellWindow->mContainer)->window); ++ } ++ } ++ im = IMEGetContext(); ++#endif /* XIM_CREATE_IC_AT_FOCUS */ ++ if (!im) { ++ return; ++ } ++ gtk_im_context_focus_in(im); ++ gIMEFocusWindow = this; ++} ++ ++void ++nsWindow::IMEDestroyContext(void) ++{ ++ GtkIMContext *im = IMEGetContext(); ++ if (im) { ++ // If this is the focus window and we have an IM context we need ++ // to unset the focus on this window before we destroy the window. ++ if (gIMEFocusWindow == this) { ++ gIMEFocusWindow->IMELoseFocus(); ++ gIMEFocusWindow = nsnull; ++ } ++ // if shell, delete GtkIMContext ++ if (mIMEShellWindow == this) { ++ gtk_im_context_set_client_window(im, NULL); ++ PL_DHashTableOperate(&gXICLookupTable, this, PL_DHASH_REMOVE); ++ g_object_unref(G_OBJECT(im)); ++ } ++ } ++ mIMEShellWindow = nsnull; ++} ++ + #endif diff --git a/net-www/mozilla/files/digest-mozilla-1.3-r1 b/net-www/mozilla/files/digest-mozilla-1.3-r1 new file mode 100644 index 000000000000..c9fdd7fb0fca --- /dev/null +++ b/net-www/mozilla/files/digest-mozilla-1.3-r1 @@ -0,0 +1,3 @@ +MD5 4c5a27b5ba39f16d83159d0256ad9147 mozilla-source-1.3.tar.bz2 31128975 +MD5 56d3fdd602a068674465a7387fff7043 enigmail-0.73.1.tar.gz 180838 +MD5 e30be9ef9623bd74c55c71251ed7c1af ipc-1.0.2.tar.gz 234871 diff --git a/net-www/mozilla/files/xft.js b/net-www/mozilla/files/xft.js new file mode 100644 index 000000000000..ac10eea8d401 --- /dev/null +++ b/net-www/mozilla/files/xft.js @@ -0,0 +1,3 @@ +// pref to override the default UI font because we're using xft +pref("font.uifont.name", "sans"); +pref("font.uifont.pointheight", 10); diff --git a/net-www/mozilla/mozilla-1.3-r1.ebuild b/net-www/mozilla/mozilla-1.3-r1.ebuild new file mode 100644 index 000000000000..c432a7e787f0 --- /dev/null +++ b/net-www/mozilla/mozilla-1.3-r1.ebuild @@ -0,0 +1,598 @@ +# Copyright 1999-2003 Gentoo Technologies, Inc. +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/net-www/mozilla/mozilla-1.3-r1.ebuild,v 1.1 2003/03/22 06:15:13 azarah Exp $ + +IUSE="java crypt ipv6 gtk2 ssl ldap gnome" +# Internal USE flags that I do not really want to advertise ... +IUSE="${IUSE} mozsvg mozcalendar mozaccess mozinterfaceinfo mozp3p mozxmlterm" +IUSE="${IUSE} moznoirc moznomail moznocompose moznoxft" + +inherit flag-o-matic gcc eutils nsplugins + +# Crashes on start when compiled with -fomit-frame-pointer +filter-flags "-fomit-frame-pointer" + +# Sparc support ... +replace-flags "-mcpu=ultrasparc" "-mcpu=v8" +replace-flags "-mcpu=v9" "-mcpu=v8" + +# Recently there has been a lot of stability problem in Gentoo-land. Many +# things can be the cause to this, but I believe that it is due to gcc3 +# still having issues with optimizations, or with it not filtering bad +# combinations (protecting the user maybe from himeself) yet. +# +# This can clearly be seen in large builds like glibc, where too aggressive +# CFLAGS cause the tests to fail miserbly. +# +# Quote from Nick Jones <carpaski@gentoo.org>, who in my opinion +# knows what he is talking about: +# +# People really shouldn't force code-specific options on... It's a +# bad idea. The -march options aren't just to look pretty. They enable +# options that are sensible (and include sse,mmx,3dnow when apropriate). +# +# The next command strips CFLAGS and CXXFLAGS from nearly all flags. If +# you do not like it, comment it, but do not bugreport if you run into +# problems. +# +# <azarah@gentoo.org> (13 Oct 2002) +strip-flags + +# We set -O in ./configure to -O1, as -O2 cause crashes on startup ... +# (bug #13287) +export CFLAGS="${CFLAGS//-O?}" +export CXXFLAGS="${CFLAGS//-O?}" + +EMVER="0.73.1" +IPCVER="1.0.2" + +PATCH_VER="1.0" + +# handle _rc versions +MY_PV1="${PV/_}" +MY_PV2="${MY_PV1/eta}" +S="${WORKDIR}/mozilla" +DESCRIPTION="The Mozilla Web Browser" +SRC_URI="ftp://ftp.mozilla.org/pub/mozilla/releases/${PN}${MY_PV2}/src/${PN}-source-${MY_PV2}.tar.bz2 + crypt? ( http://downloads.mozdev.org/enigmail/enigmail-${EMVER}.tar.gz + http://downloads.mozdev.org/enigmail/ipc-${IPCVER}.tar.gz )" +# mirror://gentoo/${P}-patches-${PATCH_VER}.tar.bz2" +HOMEPAGE="http://www.mozilla.org" + +KEYWORDS="~x86 ~ppc ~sparc ~alpha" +SLOT="0" +LICENSE="MPL-1.1 NPL-1.1" + +RDEPEND=">=x11-base/xfree-4.2.0-r11 + >=gnome-base/ORBit-0.5.10-r1 + >=dev-libs/libIDL-0.8.0 + >=sys-libs/zlib-1.1.4 + >=media-libs/fontconfig-2.1 + >=x11-libs/xft-2.0.1 + >=media-libs/jpeg-6b + >=media-libs/libpng-1.2.1 + >=sys-apps/portage-2.0.14 + dev-libs/expat + app-arch/zip + app-arch/unzip + ( gtk2? >=x11-libs/gtk+-2.2.0 : + =x11-libs/gtk+-1.2* ) + ( gtk2? >=dev-libs/glib-2.2.0 : + =dev-libs/glib-1.2* ) + gtk2? ( >=x11-libs/pango-1.2.1 ) + java? ( virtual/jre ) + crypt? ( >=app-crypt/gnupg-1.2.1 )" + +DEPEND="${RDEPEND} + virtual/x11 + dev-util/pkgconfig + dev-lang/perl + java? ( >=dev-java/java-config-0.2.0 )" + + +moz_setup() { + + # Setup CC and CXX + if [ -z "${CC}" ] + then + export CC="gcc" + fi + if [ -z "${CXX}" ] + then + export CXX="g++" + fi + + #This should enable parallel builds, I hope + if [ -f /proc/cpuinfo ] + then + # Set MAKEOPTS to have proper -j? option .. + get_number_of_jobs + export MAKE="emake" + fi + + # needed by src_compile() and src_install() + export MOZILLA_OFFICIAL=1 + export BUILD_OFFICIAL=1 + + # make sure the nss module gets build (for NSS support) + if [ -n "`use ssl`" ] + then + export MOZ_PSM="1" + fi + + # do we build java support for the NSS stuff ? + # NOTE: this is broken for the moment +# if [ "`use java`" ] +# then +# export NS_USE_JDK="1" +# fi +} + +src_unpack() { + + moz_setup + + unpack ${A} + + cd ${S} + + if [ "$(gcc-major-version)" -eq "3" ] + then + # ABI Patch for alpha/xpcom for gcc-3.x + if [ "${ARCH}" = "alpha" ] + then + cd ${S}; epatch ${FILESDIR}/${PN}-alpha-xpcom-subs-fix.patch + fi + fi + + epatch ${FILESDIR}/1.2/${PN}-1.2b-default-plugin-less-annoying.patch.bz2 + epatch ${FILESDIR}/1.2/${PN}-1.2b-over-the-spot.patch.bz2 + epatch ${FILESDIR}/1.2/${PN}-1.2b-wallet.patch.bz2 + + # Fix logic error when using RAW target + # <azarah@gentoo.org> (23 Feb 2003) + epatch ${FILESDIR}/1.3/${PN}-1.3-fix-RAW-target.patch + + if [ -n "`use gtk2`" ] + then + epatch ${FILESDIR}/1.3/${PN}-1.3-gtk2.patch + else + epatch ${FILESDIR}/1.3/${PN}-1.3-fix-gtkim.patch + fi + + export WANT_AUTOCONF_2_1=1 + autoconf &> /dev/null + unset WANT_AUTOCONF_2_1 + + # Unpack the enigmail plugin + if [ -n "`use crypt`" -a -z "`use moznomail`" ] + then + mv -f ${WORKDIR}/ipc ${S}/extensions/ + mv -f ${WORKDIR}/enigmail ${S}/extensions/ + fi +} + +src_compile() { + + moz_setup + + local myconf="" + # NOTE: QT and XLIB toolkit seems very unstable, leave disabled until + # tested ok -- azarah + if [ -n "`use gtk2`" ] + then + myconf="${myconf} --enable-toolkit-gtk2 \ + --enable-default-toolkit=gtk2 \ + --disable-toolkit-qt \ + --disable-toolkit-xlib \ + --disable-toolkit-gtk" + else + myconf="${myconf} --enable-toolkit-gtk \ + --enable-default-toolkit=gtk \ + --disable-toolkit-qt \ + --disable-toolkit-xlib \ + --disable-toolkit-gtk2" + fi + + if [ -z "`use ldap`" ] + then + myconf="${myconf} --disable-ldap" + fi + + if [ "${DEBUGBUILD}" != "yes" ] + then + myconf="${myconf} --enable-strip-libs \ + --disable-debug \ + --disable-tests \ + --enable-reorder \ + --enable-strip" +# --enable-cpp-rtti" + + # Currently --enable-elf-dynstr-gc only works for x86 and ppc, + # thanks to Jason Wever <weeve@gentoo.org> for the fix. + if [ -n "`use x86`" -o -n "`use ppc`" ] + then + myconf="${myconf} --enable-elf-dynstr-gc" + fi + fi + + # Check if we should enable Xft support ... + if [ -z "`use moznoxft`" ] + then + if [ -n "`use gtk2`" ] + then + local pango_version="" + + # We need Xft2.0 localy installed + if (test -x /usr/bin/pkg-config) && (pkg-config xft) + then + pango_version="`pkg-config --modversion pango | cut -d. -f1,2`" + pango_version="`echo ${pango_version} | sed -e 's:\.::g'`" + + # We also need pango-1.1, else Mozilla links to both + # Xft1.1 *and* Xft2.0, and segfault... + if [ "${pango_version}" -gt "10" ] + then + einfo "Building with Xft2.0 (Gtk+-2.0) support!" + myconf="${myconf} --enable-xft --disable-freetype2" + touch ${WORKDIR}/.xft + else + ewarn "Building without Xft2.0 support!" + myconf="${myconf} --disable-xft `use_enable truetype freetype2`" + fi + else + ewarn "Building without Xft2.0 support!" + myconf="${myconf} --disable-xft `use_enable truetype freetype2`" + fi + else + einfo "Building with Xft2.0 (Gtk+-1.0) support!" + myconf="${myconf} --enable-xft --disable-freetype2" + touch ${WORKDIR}/.xft + fi + else + myconf="${myconf} --disable-xft `use_enable truetype freetype2`" + fi + + if [ -n "`use ipv6`" ] + then + myconf="${myconf} --enable-ipv6" + fi + + + # NB!!: Due to the fact that the non default extensions do not always + # compile properly, using them is considered unsupported, and + # is just here for completeness. Please do not use if you + # do not know what you are doing! + # + # The defaults are (as of 1.2, according to configure (line ~11445)): + # cookie, wallet, content-packs, xml-rpc, xmlextras, help, pref, transformiix, + # venkman, inspector, irc, universalchardet, typeaheadfind + # Non-defaults are: + # xmlterm access-builtin p3p interfaceinfo datetime finger cview + local myext="default" + if [ -n "`use mozxmlterm`" ] + then + myext="${myext},xmlterm" + fi + if [ -n "`use mozaccess-builtin`" ] + then + myext="${myext},access-builtin" + fi + if [ -n "`use mozp3p`" ] + then + myext="${myext},p3p" + fi + if [ -n "`use mozinterfaceinfo`" ] + then + myext="${myext},interfaceinfo" + fi + if [ -n "`use moznoirc`" ] + then + myext="${myext},-irc" + fi + + if [ -n "`use mozsvg`" ] + then + export MOZ_INTERNAL_LIBART_LGPL="1" + myconf="${myconf} --enable-svg" + else + myconf="${myconf} --disable-svg" + fi +# This puppy needs libical, which is not in portage yet. Also make mozilla +# depend on swig, so not sure if its the best idea around to enable ... +# if [ -n "`use mozcalendar`" ] +# then +# myconf="${myconf} --enable-calendar" +# fi + + if [ -n "`use moznomail`" ] + then + myconf="${myconf} --disable-mailnews" + fi + if [ -n "`use moznocompose`" ] + then + myconf="${myconf} --disable-composer" + fi + + if [ "$(gcc-major-version)" -eq "3" ] + then + # Currently gcc-3.2 or older do not work well if we specify "-march" + # and other optimizations for pentium4. + export CFLAGS="${CFLAGS/-march=pentium4/-march=pentium3}" + export CXXFLAGS="${CXXFLAGS/-march=pentium4/-march=pentium3}" + + # Enable us to use flash, etc plugins compiled with gcc-2.95.3 + if [ "${ARCH}" = "x86" ] + then + myconf="${myconf} --enable-old-abi-compat-wrappers" + fi + fi + + # ********************************************************************* + # + # Configure and build Mozilla + # + # ********************************************************************* + + export BUILD_MODULES=all + export BUILD_OPT=1 + + # Get it to work without warnings on gcc3 + export CXXFLAGS="${CXXFLAGS} -Wno-deprecated" + + cd ${S} + einfo "Configuring Mozilla..." + ./configure --prefix=/usr/lib/mozilla \ + --disable-pedantic \ + --disable-short-wchar \ + --disable-xprint \ + --enable-mathml \ + --without-system-nspr \ + --enable-nspr-autoconf \ + --with-system-zlib \ + --enable-xsl \ + --enable-crypto \ + --enable-extensions="${myext}" \ + --enable-optimize="-O2" \ + --with-default-mozilla-five-home=/usr/lib/mozilla \ + ${myconf} || die + + einfo "Building Mozilla..." + make WORKDIR="${WORKDIR}" || die + + # ********************************************************************* + # + # Build Mozilla NSS + # + # ********************************************************************* + + # Build the NSS/SSL support + if [ "`use ssl`" ] + then + einfo "Building Mozilla NSS..." + cd ${S}/security/coreconf + + # Fix #include problem + cp headers.mk headers.mk.orig + echo 'INCLUDES += -I$(DIST)/include/nspr -I$(DIST)/include/dbm'\ + >>headers.mk + + # Disable jobserver here ... + make MAKE="make" || die + + cd ${S}/security/nss + + # Disable jobserver here ... + make MAKE="make" moz_import || die + make MAKE="make" || die + cd ${S} + fi + + # ********************************************************************* + # + # Build Enigmail plugin + # + # ********************************************************************* + + # Build the enigmail plugin + if [ -n "`use crypt`" -a -z "`use moznomail`" ] + then + einfo "Building Enigmail plugin..." + cd ${S}/extensions/ipc + make || die + + cd ${S}/extensions/enigmail + make || die + fi +} + +src_install() { + + moz_setup + + # Install, don't create tarball + dodir /usr/lib + cd ${S}/xpinstall/packager + einfo "Installing mozilla into build root..." + make MOZ_PKG_FORMAT="RAW" TAR_CREATE_FLAGS="-chf" > /dev/null || die + mv -f ${S}/dist/mozilla ${D}/usr/lib/mozilla + + einfo "Installing includes and idl files..." + # Copy the include and idl files + dodir /usr/lib/mozilla/include/idl /usr/include + cd ${S}/dist + cp -LfR include/* ${D}/usr/lib/mozilla/include + cp -LfR idl/* ${D}/usr/lib/mozilla/include/idl + dosym /usr/lib/mozilla/include /usr/include/mozilla + + # Install the development tools in /usr + dodir /usr/bin + mv ${D}/usr/lib/mozilla/{xpcshell,xpidl,xpt_dump,xpt_link} ${D}/usr/bin + + # Install the NSS/SSL libs, headers and tools + if [ "`use ssl`" ] + then + einfo "Installing Mozilla NSS..." + # Install the headers ('make install' do not work for headers ...) + insinto /usr/lib/mozilla/include/nss + [ -d ${S}/dist/public/nss ] && doins ${S}/dist/public/nss/*.h + [ -d ${S}/dist/public/seccmd ] && doins ${S}/dist/public/seccmd/*.h + [ -d ${S}/dist/public/security ] && doins ${S}/dist/public/security/*.h + # These come with zlib ... + rm -f ${D}/usr/lib/mozilla/include/nss/{zconf.h,zlib.h} + + cd ${S}/security/nss + + mkdir -p ${WORKDIR}/nss/{bin,lib} + export BUILD_OPT=1 + export SOURCE_BIN_DIR=${WORKDIR}/nss/bin + export SOURCE_LIB_DIR=${WORKDIR}/nss/lib + + make install || die + # Gets installed as symbolic links ... + cp -Lf ${WORKDIR}/nss/bin/* ${D}/usr/bin + cp -Lf ${WORKDIR}/nss/lib/* ${D}/usr/lib/mozilla + + # Need to unset these incase we want to rebuild, else the build + # gets newked. + unset SOURCE_LIB_DIR + unset SOURCE_BIN_DIR + fi + + cd ${S}/build/unix + # Fix mozilla-config and install it + perl -pi -e "s:/lib/mozilla-${MY_PV2}::g" mozilla-config + perl -pi -e "s:/mozilla-${MY_PV2}::g" mozilla-config + exeinto /usr/lib/mozilla + doexe mozilla-config + # Fix pkgconfig files and install them + insinto /usr/lib/pkgconfig + for x in *.pc + do + if [ -f ${x} ] + then + perl -pi -e "s:/lib/mozilla-${MY_PV2}::g" ${x} + perl -pi -e "s:/mozilla-${MY_PV2}::g" ${x} + doins ${x} + fi + done + + cd ${S} + exeinto /usr/bin + newexe ${FILESDIR}/mozilla.sh mozilla + insinto /etc/env.d + doins ${FILESDIR}/10mozilla + dodoc LEGAL LICENSE README/mozilla/README* + + # Install rebuild script + exeinto /usr/lib/mozilla/ + newexe ${S}/build/package/rpm/SOURCES/mozilla-rebuild-databases.pl.in \ + mozilla-rebuild-databases.pl + dosed 's|LIBDIR|/usr/lib|g' /usr/lib/mozilla/mozilla-rebuild-databases.pl + dosed 's|-MOZILLA_VERSION||g' /usr/lib/mozilla/mozilla-rebuild-databases.pl + + # Move plugins dir + src_mv_plugins /usr/lib/mozilla/plugins + + # Update Google search plugin to use UTF8 charset ... + insinto /usr/lib/mozilla/searchplugins + doins ${FILESDIR}/google.src + + if [ -f "${WORKDIR}/.xft" ] + then + # We are using Xft, so change the default font + insinto /usr/lib/mozilla/defaults/pref + doins ${FILESDIR}/xft.js + fi + + # Fix icons to look the same everywhere + insinto /usr/lib/mozilla/icons + doins ${S}/build/package/rpm/SOURCES/mozicon16.xpm + doins ${S}/build/package/rpm/SOURCES/mozicon50.xpm + + # Install icon and .desktop for menu entry + if [ "`use gnome`" ] + then + insinto /usr/share/pixmaps + doins ${S}/build/package/rpm/SOURCES/mozilla-icon.png + + # Fix comment of menu entry + cd ${S}/build/package/rpm/SOURCES + perl -pi -e 's:Comment=Mozilla:Comment=Mozilla Web Browser:' mozilla.desktop + cd ${S} + insinto /usr/share/gnome/apps/Internet + doins ${S}/build/package/rpm/SOURCES/mozilla.desktop + fi + + # Take care of non root execution + # (seems the problem is that not all files are readible by the user) + einfo "Fixing Permissions..." + chmod -R g+r,o+r ${D}/usr/lib/mozilla + find ${D}/usr/lib/mozilla/ -type d -exec chmod 0755 {} \; || : +} + +pkg_preinst() { + # Stale components and chrome files break when unmerging old + if [ -d ${ROOT}/usr/lib/mozilla/components ] + then + rm -rf ${ROOT}/usr/lib/mozilla/components + fi + if [ -d ${ROOT}/usr/lib/mozilla/chrome ] + then + rm -rf ${ROOT}/usr/lib/mozilla/chrome + fi + + # Remove stale component registry. + if [ -e ${ROOT}/usr/lib/component.reg ] + then + rm -f ${ROOT}/usr/lib/component.reg + fi + + # Make sure these are removed. + rm -f ${ROOT}/usr/lib/mozilla/lib{Xft,Xrender}.so* + + # Move old plugins dir + pkg_mv_plugins /usr/lib/mozilla/plugins +} + +pkg_postinst() { + + export MOZILLA_FIVE_HOME="${ROOT}/usr/lib/mozilla" + + # Needed to update the run time bindings for REGXPCOM + # (do not remove next line!) + env-update + # Register Components and Chrome + einfo "Registering Components and Chrome..." + ${MOZILLA_FIVE_HOME}/mozilla-rebuild-databases.pl + # Fix directory permissions + find ${MOZILLA_FIVE_HOME}/ -type d -perm 0700 -exec chmod 755 {} \; || : + # Fix permissions on chrome files + find ${MOZILLA_FIVE_HOME}/chrome/ -name '*.rdf' -exec chmod 0644 {} \; || : + + + echo + ewarn "Please unmerge old versions of mozilla, as the header" + ewarn "layout in /usr/lib/mozilla/include have changed and will" + ewarn "result in compile errors when compiling programs that need" + ewarn "mozilla headers and libs (galeon, nautilus, ...)" +} + +pkg_postrm() { + + # Regenerate component.reg in case some things changed + if [ -e ${ROOT}/usr/lib/mozilla/regxpcom ] + then + export MOZILLA_FIVE_HOME="${ROOT}/usr/lib/mozilla" + + if [ -x "${MOZILLA_FIVE_HOME}/mozilla-rebuild-databases.pl" ] + then + ${MOZILLA_FIVE_HOME}/mozilla-rebuild-databases.pl + # Fix directory permissions + find ${MOZILLA_FIVE_HOME}/ -type d -perm 0700 -exec chmod 755 {} \; || : + # Fix permissions on chrome files + find ${MOZILLA_FIVE_HOME}/chrome/ -name '*.rdf' -exec chmod 0644 {} \; || : + fi + fi +} + |