Index: /cvsroot/mozilla/content/smil/Makefile.in
===================================================================
RCS file: /cvsroot/mozilla/content/smil/Makefile.in
diff -N content/smil/Makefile.in
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/Makefile.in	29 Aug 2005 09:47:07 -0000
@@ -0,0 +1,48 @@
+# 
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is mozilla.org code.
+#
+# The Initial Developer of the Original Code is
+# Netscape Communications Corporation.
+# Portions created by the Initial Developer are Copyright (C) 1999
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either of the GNU General Public License Version 2 or later (the "GPL"),
+# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK *****
+
+DEPTH		= ../..
+topsrcdir	= @top_srcdir@
+srcdir		= @srcdir@
+VPATH		= @srcdir@
+
+include $(DEPTH)/config/autoconf.mk
+
+DIRS		= public src
+
+include $(topsrcdir)/config/rules.mk
+
Index: /cvsroot/mozilla/content/smil/public/Makefile.in
===================================================================
RCS file: /cvsroot/mozilla/content/smil/public/Makefile.in
diff -N content/smil/public/Makefile.in
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/public/Makefile.in	29 Aug 2005 09:47:08 -0000
@@ -0,0 +1,60 @@
+#
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is mozilla.org code.
+#
+# The Initial Developer of the Original Code is
+# Netscape Communications Corporation.
+# Portions created by the Initial Developer are Copyright (C) 1998
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either of the GNU General Public License Version 2 or later (the "GPL"),
+# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK *****
+
+DEPTH           = ../../..
+topsrcdir	= @top_srcdir@
+srcdir		= @srcdir@
+VPATH		= @srcdir@
+
+include $(DEPTH)/config/autoconf.mk
+
+MODULE		= content
+
+EXPORTS		= \
+    nsISMILAnimatableAttribute.h \
+	nsISMILAnimatableElement.h \
+	nsISMILAnimatableValue.h \
+	nsISMILAnimatableValueFactory.h \
+	nsISMILAnimationController.h \
+	nsISMILAnimationElement.h \
+	nsISMILTimeClient.h \
+	nsISMILTimeContainer.h \
+	nsISMILTimedElement.h \
+	$(NULL)
+
+include $(topsrcdir)/config/rules.mk
+
Index: /cvsroot/mozilla/content/smil/public/nsISMILAnimatableAttribute.h
===================================================================
RCS file: /cvsroot/mozilla/content/smil/public/nsISMILAnimatableAttribute.h
diff -N content/smil/public/nsISMILAnimatableAttribute.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/public/nsISMILAnimatableAttribute.h	29 Aug 2005 09:47:08 -0000
@@ -0,0 +1,60 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef __NS_ISMILANIMATABLEATTRIBUTE_H__
+#define __NS_ISMILANIMATABLEATTRIBUTE_H__
+
+#include "nsISupports.h"
+
+class nsISMILAnimatableValue;
+
+////////////////////////////////////////////////////////////////////////
+// nsISMILAnimatableAttribute
+
+// {c487920a-7d12-40ff-bf3b-c39dd4797cff}
+#define NS_ISMILANIMATABLEATTRIBUTE_IID \
+{ 0xc487920a, 0x7d12, 0x40ff, { 0xbf, 0x3b, 0xc3, 0x9d, 0xd4, 0x79, 0x7c, 0xff } }
+
+class nsISMILAnimatableAttribute : public nsISupports
+{
+public:
+  NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISMILANIMATABLEATTRIBUTE_IID)
+
+  // TODO[2]: Try to remove this interface altogether
+  virtual nsISMILAnimatableValue* GetBaseValue()=0;
+  virtual nsISMILAnimatableValue* GetAnimValue()=0;
+  virtual nsresult SetAnimValue(nsISMILAnimatableValue& aValue)=0;
+};
+
+#endif // __NS_ISMILANIMATABLEATTRIBUTE_H__
+
Index: /cvsroot/mozilla/content/smil/public/nsISMILAnimatableElement.h
===================================================================
RCS file: /cvsroot/mozilla/content/smil/public/nsISMILAnimatableElement.h
diff -N content/smil/public/nsISMILAnimatableElement.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/public/nsISMILAnimatableElement.h	29 Aug 2005 09:47:08 -0000
@@ -0,0 +1,59 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef __NS_ISMILANIMATABLEELEMENT__
+#define __NS_ISMILANIMATABLEELEMENT__
+
+#include "nsISupports.h"
+#include "nsISMILAnimatableAttribute.h"
+
+////////////////////////////////////////////////////////////////////////
+// nsISMILAnimatableElement: interface of elements that have attributes
+// that can be animated.
+
+// {5DD94E10-FD8D-42FB-B054-8D29F771033A}
+#define NS_ISMILANIMATABLEELEMENT_IID \
+{ 0x5dd94e10, 0xfd8d, 0x42fb, { 0xb0, 0x54, 0x8d, 0x29, 0xf7, 0x71, 0x03, 0x3a } }
+
+class nsISMILAnimatableElement : public nsISupports
+{
+public:
+  NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISMILANIMATABLEELEMENT_IID)
+
+  virtual nsISMILAnimatableAttribute*
+  GetAnimatableAttribute(PRInt32 aNamespaceID,
+                         nsIAtom* aName)=0;
+};
+
+#endif // __NS_ISMILANIMATABLEELEMENT__
+
Index: /cvsroot/mozilla/content/smil/public/nsISMILAnimatableValue.h
===================================================================
RCS file: /cvsroot/mozilla/content/smil/public/nsISMILAnimatableValue.h
diff -N content/smil/public/nsISMILAnimatableValue.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/public/nsISMILAnimatableValue.h	29 Aug 2005 09:47:08 -0000
@@ -0,0 +1,64 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef __NS_ISMILANIMATABLEVALUE_H__
+#define __NS_ISMILANIMATABLEVALUE_H__
+
+#include "nsISupports.h"
+
+////////////////////////////////////////////////////////////////////////
+// nsISMILAnimatableValue
+
+// {01d2aae5-9de4-4e8f-a1e9-ae660ad27925}
+#define NS_ISMILANIMATABLEVALUE_IID \
+{ 0x01d2aae5, 0x9de4, 0x4e8f, { 0xa1, 0xe9, 0xae, 0x66, 0x0a, 0xd2, 0x79, 0x25 } }
+
+class nsISMILAnimatableValue : public nsISupports
+{
+public:
+  NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISMILANIMATABLEVALUE_IID)
+
+  virtual void      ComputeDistance(const nsISMILAnimatableValue& aFrom,
+                                    const nsISMILAnimatableValue& aTo,
+                                    PRFloat64& aDistance) const = 0;
+
+  virtual nsresult  Interpolate(nsISMILAnimatableValue& aEndValue,
+                                float aUnitDistance,
+                                nsISMILAnimatableValue* aResult) = 0;
+
+  virtual void      Accumulate(const nsISMILAnimatableValue& aAddedValue) = 0;
+  virtual void      Set(const nsISMILAnimatableValue& aNewValue) = 0;
+};
+
+#endif // __NS_ISMILANIMATABLEVALUE_H__
+
Index: /cvsroot/mozilla/content/smil/public/nsISMILAnimatableValueFactory.h
===================================================================
RCS file: /cvsroot/mozilla/content/smil/public/nsISMILAnimatableValueFactory.h
diff -N content/smil/public/nsISMILAnimatableValueFactory.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/public/nsISMILAnimatableValueFactory.h	29 Aug 2005 09:47:08 -0000
@@ -0,0 +1,59 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef __NS_ISMILANIMATABLEVALUEFACTORY_H__
+#define __NS_ISMILANIMATABLEVALUEFACTORY_H__
+
+#include "nsISupports.h"
+
+////////////////////////////////////////////////////////////////////////
+// nsISMILAnimatableValueFactory
+
+// {819c6fae-1574-49fb-b593-b5b3f941d095}
+#define NS_ISMILANIMATABLEVALUEFACTORY_IID \
+{ 0x819c6fae, 0x1574, 0x49fb, { 0xb5, 0x93, 0xb5, 0xb3, 0xf9, 0x41, 0xd0, 0x95 } }
+
+class nsISMILAnimatableValueFactory : public nsISupports
+{
+public:
+  NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISMILANIMATABLEVALUEFACTORY_IID)
+
+  virtual nsresult  Create(nsISMILAnimatableValue** aResult) const = 0;
+
+  virtual nsresult  CreateFromSpec(const nsAString& aSpec,
+                                   nsISMILAnimatableValue** aResult,
+                                   PRBool& aIsAddable) const = 0;
+};
+
+#endif // __NS_ISMILANIMATABLEVALUEFACTORY_H__
+
Index: /cvsroot/mozilla/content/smil/public/nsISMILAnimationController.h
===================================================================
RCS file: /cvsroot/mozilla/content/smil/public/nsISMILAnimationController.h
diff -N content/smil/public/nsISMILAnimationController.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/public/nsISMILAnimationController.h	29 Aug 2005 09:47:08 -0000
@@ -0,0 +1,67 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef __NS_ISMILANIMATIONCONTROLLER_H__
+#define __NS_ISMILANIMATIONCONTROLLER_H__
+
+#include "nsIAnimationController.h"
+
+////////////////////////////////////////////////////////////////////////
+// nsISMILAnimationController: Animation controller
+
+#define NS_ISMILANIMATIONCONTROLLER_IID \
+{ 0xd2c81398, 0x1f30, 0x4303, { 0xbe, 0xbe, 0xc5, 0x0c, 0x01, 0xfd, 0xd8, 0x85 } }
+
+class nsISMILTimeContainer;
+
+class nsISMILAnimationController : public nsIAnimationController
+{
+public:
+  NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISMILANIMATIONCONTROLLER_IID)
+
+  // nsIAnimationController methods
+  virtual nsresult  Pause()=0;
+  virtual nsresult  Resume()=0;
+
+  // Eventually, this will probably be all nsISMILTimedElements so that it is
+  // possible to have hierarchies of containers (which will implement
+  // nsISMILTimedElement), and then these methods will be replaced with
+  // SetRootElement.
+  virtual nsresult  AddTimeContainer(nsISMILTimeContainer* aContainer)=0;
+  virtual nsresult  RemoveTimeContainer(nsISMILTimeContainer* aContainer)=0;
+};
+
+nsISMILAnimationController* NS_NewSMILAnimationController();
+
+#endif // __NS_ISMILANIMATIONCONTROLLER_H__
+
Index: /cvsroot/mozilla/content/smil/public/nsISMILAnimationElement.h
===================================================================
RCS file: /cvsroot/mozilla/content/smil/public/nsISMILAnimationElement.h
diff -N content/smil/public/nsISMILAnimationElement.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/public/nsISMILAnimationElement.h	29 Aug 2005 09:47:08 -0000
@@ -0,0 +1,83 @@
+
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef __NS_ISMILANIMATIONELEMENT_H__
+#define __NS_ISMILANIMATIONELEMENT_H__
+
+#include "nsISupports.h"
+
+class nsISMILAnimatableAttribute;
+
+enum nsSMILCalcMode
+{
+  NS_SMIL_CALCMODE_LINEAR,
+  NS_SMIL_CALCMODE_DISCRETE,
+  NS_SMIL_CALCMODE_PACED,
+  NS_SMIL_CALCMODE_SPLINE
+};
+
+// {14eb1aab-e4ba-4c77-be89-195ef975c90d}
+#define NS_ISMILANIMATIONELEMENT_IID \
+{ 0x14eb1aab, 0xe4ba, 0x4c77, { 0xbe, 0x89, 0x19, 0x5e, 0xf9, 0x75, 0xc9, 0x0d } }
+
+class nsISMILAnimationElement : public nsISupports
+{
+public:
+  NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISMILANIMATIONELEMENT_IID)
+
+  virtual nsresult        Init(nsISMILAnimatableAttribute& aAttribute)=0;
+  virtual PRBool          IsInitialised()=0;
+
+  // TODO[2]: Unsetters or some method for handling un-setting attributes
+  virtual nsresult        SetFrom(const nsAString& aFrom)=0;
+  virtual nsresult        SetTo(const nsAString& aTo)=0;
+  virtual nsresult        SetBy(const nsAString& aBy)=0;
+  virtual nsresult        SetValues(const nsAString& aValues)=0;
+  virtual nsresult        SetKeyTimes(const nsAString& aKeyTimes)=0;
+  virtual nsresult        SetKeySplines(const nsAString& aKeySplines)=0;
+
+  virtual PRBool          IsAdditive() const=0;
+  virtual void            SetAdditive(PRBool aAdditive)=0;
+
+  virtual PRBool          IsCumulative() const=0;
+  virtual void            SetCumulative(PRBool aCumulative)=0;
+
+  virtual nsSMILCalcMode  GetCalcMode() const=0;
+  virtual void            SetCalcMode(nsSMILCalcMode aCalcMode)=0;
+};
+
+nsISMILAnimationElement* NS_NewSMILAnimationElement();
+
+#endif //__NS_ISMILANIMATIONELEMENT_H__
+
Index: /cvsroot/mozilla/content/smil/public/nsISMILTimeClient.h
===================================================================
RCS file: /cvsroot/mozilla/content/smil/public/nsISMILTimeClient.h
diff -N content/smil/public/nsISMILTimeClient.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/public/nsISMILTimeClient.h	29 Aug 2005 09:47:09 -0000
@@ -0,0 +1,57 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef __NS_ISMILTIMECLIENT_H__
+#define __NS_ISMILTIMECLIENT_H__
+
+#include "nsISupports.h"
+
+class nsSMILTimeValue;
+
+////////////////////////////////////////////////////////////////////////
+// nsISMILTimeClient
+
+// {196f66f4-e6f6-420b-a337-da42a2efccde}
+#define NS_ISMILTIMECLIENT_IID \
+{ 0x196f66f4, 0xe6f6, 0x420b, { 0xa3, 0x37, 0xda, 0x42, 0xa2, 0xef, 0xcc, 0xde } }
+
+class nsISMILTimeClient : public nsISupports
+{
+public:
+  NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISMILTIMECLIENT_IID)
+
+  virtual void      SampleAt(const PRInt64& simpleTime,
+                             const nsSMILTimeValue& simpleDuration)=0;
+};
+
+#endif // __NS_ISMILTIMECLIENT_H__
Index: /cvsroot/mozilla/content/smil/public/nsISMILTimeContainer.h
===================================================================
RCS file: /cvsroot/mozilla/content/smil/public/nsISMILTimeContainer.h
diff -N content/smil/public/nsISMILTimeContainer.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/public/nsISMILTimeContainer.h	29 Aug 2005 09:47:09 -0000
@@ -0,0 +1,67 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef __NS_ISMILTIMECONTAINER_H__
+#define __NS_ISMILTIMECONTAINER_H__
+
+#include "nsISupports.h"
+#include "nsISMILTimedElement.h"
+
+////////////////////////////////////////////////////////////////////////
+// nsISMILTimeContainer: Time container
+
+// {46b51a7b-d857-45f1-9c7d-4d0d12719238}
+#define NS_ISMILTIMECONTAINER_IID \
+{ 0x46b51a7b, 0xd857, 0x45f1, { 0x9c, 0x7d, 0x4d, 0x0d, 0x12, 0x71, 0x92, 0x38 } }
+
+// When implementing SMIL 2.0 time containers, this would inherit from
+// nsISMILTimedElement, amongst other changes
+class nsISMILTimeContainer : public nsISupports
+{
+public:
+  NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISMILTIMECONTAINER_IID)
+
+  virtual nsresult  Pause()=0;
+  virtual nsresult  Resume()=0;
+
+  // We may later change this to SampleAt and maintain separate host document
+  // and document fragment times. This would allow more advanced time
+  // manipulations for documents with several animated SVG document fragments.
+  virtual void      Sample()=0;
+
+  virtual nsresult  AddTimedElement(nsISMILTimedElement* aElement)=0;
+  virtual nsresult  RemoveTimedElement(nsISMILTimedElement* aElement)=0;
+};
+
+#endif // __NS_ISMILTIMECONTAINER_H__
+
Index: /cvsroot/mozilla/content/smil/public/nsISMILTimedElement.h
===================================================================
RCS file: /cvsroot/mozilla/content/smil/public/nsISMILTimedElement.h
diff -N content/smil/public/nsISMILTimedElement.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/public/nsISMILTimedElement.h	29 Aug 2005 09:47:09 -0000
@@ -0,0 +1,68 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef __NS_ISMILTIMEDELEMENT_H__
+#define __NS_ISMILTIMEDELEMENT_H__
+
+#include "nsWeakReference.h"
+
+class nsISMILTimeClient;
+class nsSMILTimeValue;
+class nsSMILInstanceTime;
+
+////////////////////////////////////////////////////////////////////////
+// nsISMILTimedElement
+
+// {c5f60446-5c1a-4f3b-8ce3-646199ac97f2}
+#define NS_ISMILTIMEDELEMENT_IID \
+{ 0xc5f60446, 0x5c1a, 0x4f3b, { 0x8c, 0xe3, 0x64, 0x61, 0x99, 0xac, 0x97, 0xf2 } }
+
+class nsISMILTimedElement : public nsSupportsWeakReference
+{
+public:
+  NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISMILTIMEDELEMENT_IID)
+
+  virtual void      AddInstanceTime(nsSMILInstanceTime* aInstanceTime,
+                                    PRBool aIsBegin)=0;
+  virtual nsresult  SetBeginSpec(const nsAString& aBeginSpec)=0;
+  virtual nsresult  SetEndSpec(const nsAString& aBeginSpec)=0;
+  virtual nsresult  SetSimpleDuration(const nsAString& aDurSpec)=0;
+  virtual void      AddTimeClient(nsISMILTimeClient* aClient)=0;
+  // TODO[1]: RemoveClient
+  virtual void      SampleAt(const PRInt64& aDocumentTime)=0;
+};
+
+nsISMILTimedElement* NS_NewSMILTimedElement();
+
+#endif // __NS_ISMILTIMEDELEMENT_H__
+
Index: /cvsroot/mozilla/content/smil/src/Makefile.in
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/Makefile.in
diff -N content/smil/src/Makefile.in
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/Makefile.in	29 Aug 2005 09:47:09 -0000
@@ -0,0 +1,85 @@
+#
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is mozilla.org code.
+#
+# The Initial Developer of the Original Code is
+# Netscape Communications Corporation.
+# Portions created by the Initial Developer are Copyright (C) 1998
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either of the GNU General Public License Version 2 or later (the "GPL"),
+# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK *****
+
+DEPTH		= ../../..
+topsrcdir	= @top_srcdir@
+srcdir		= @srcdir@
+VPATH		= @srcdir@
+
+include $(DEPTH)/config/autoconf.mk
+
+MODULE		= content
+LIBRARY_NAME	= gkconsmil_s
+LIBXUL_LIBRARY	= 1
+
+REQUIRES	= xpcom \
+		  string \
+		  js \
+		  layout \
+		  content \
+		  necko \
+		  xpconnect \
+		  docshell \
+		  webshell \
+		  imglib2 \
+		  unicharutil \
+		  locale \
+		  $(NULL)
+
+EXPORTS		= \
+	    nsSMILTimedDocumentRoot.h \
+		$(NULL)
+
+CPPSRCS		= \
+	nsSMILAnimationController.cpp \
+	nsSMILAnimationElement.cpp \
+	nsSMILInstanceTime.cpp \
+	nsSMILInterval.cpp \
+	nsSMILTimedDocumentRoot.cpp \
+	nsSMILTimedElement.cpp \
+	nsSMILTimeValue.cpp \
+	nsSMILTimeValueSpec.cpp \
+		$(NULL)
+
+include $(topsrcdir)/config/config.mk
+
+# we don't want the shared lib, but we want to force the creation of a static lib.
+FORCE_STATIC_LIB = 1
+
+include $(topsrcdir)/config/rules.mk
+
+DEFINES += -D_IMPL_NS_LAYOUT
Index: /cvsroot/mozilla/content/smil/src/nsISMILComposable.h
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/nsISMILComposable.h
diff -N content/smil/src/nsISMILComposable.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/nsISMILComposable.h	29 Aug 2005 09:47:09 -0000
@@ -0,0 +1,55 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef __NS_ISMILCOMPOSABLE_H__
+#define __NS_ISMILCOMPOSABLE_H__
+
+#include "nsISupports.h"
+
+////////////////////////////////////////////////////////////////////////
+// nsISMILComposable
+
+// {4b05aa22-712e-4a9e-8452-f7c4b2e507e7}
+#define NS_ISMILCOMPOSABLE_IID \
+{ 0x4b05aa22, 0x712e, 0x4a9e, { 0x84, 0x52, 0xf7, 0xc4, 0xb2, 0xe5, 0x07, 0xe7 } }
+
+class nsISMILComposable : public nsISupports
+{
+public:
+  NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISMILCOMPOSABLE_IID)
+
+  virtual void      CalcResult()=0;
+};
+
+#endif // __NS_ISMILCOMPOSABLE_H__
+
Index: /cvsroot/mozilla/content/smil/src/nsSMILAnimationController.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/nsSMILAnimationController.cpp
diff -N content/smil/src/nsSMILAnimationController.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/nsSMILAnimationController.cpp	29 Aug 2005 09:47:10 -0000
@@ -0,0 +1,253 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "nsISMILAnimationController.h"
+#include "nsComponentManagerUtils.h"
+#include "nsWeakReference.h"
+#include "nsITimer.h"
+#include "nsISMILTimeContainer.h"
+#include "nsCOMArray.h"
+#include "nsISimpleEnumerator.h"
+#include "nsArrayEnumerator.h"
+
+class nsSMILAnimationController : public nsISMILAnimationController,
+                                  public nsSupportsWeakReference,
+                                  public nsITimerCallback
+{
+public:
+  virtual ~nsSMILAnimationController();
+
+  NS_DECL_ISUPPORTS
+  NS_DECL_NSITIMERCALLBACK
+
+  // nsISMILAnimationController
+  virtual nsresult  Pause();
+  virtual nsresult  Resume();
+  virtual nsresult  AddTimeContainer(nsISMILTimeContainer* aContainer);
+  virtual nsresult  RemoveTimeContainer(nsISMILTimeContainer* aContainer);
+
+protected:
+  friend nsISMILAnimationController* NS_NewSMILAnimationController();
+
+  nsresult          Init();
+  nsresult          StartTimer();
+  nsresult          StopTimer();
+  void              SampleChildren();
+
+  nsCOMPtr<nsITimer>            mTimer;
+  nsCOMArray<nsIWeakReference>  mTimeContainers;
+};
+
+////////////////////////////////////////////////////////////////////////
+// nsSMILAnimationController implementation
+
+//----------------------------------------------------------------------
+// ctors, dtors, factory methods
+
+nsSMILAnimationController::~nsSMILAnimationController()
+{
+  if (mTimer)
+    mTimer->Cancel();
+}
+
+nsISMILAnimationController* NS_NewSMILAnimationController()
+{
+  nsSMILAnimationController* animationController = 
+    new nsSMILAnimationController();
+
+  if (animationController)
+  {
+    nsresult rv = animationController->Init();
+    if (NS_FAILED(rv))
+    {
+      delete animationController;
+      animationController = nsnull;
+    }
+  }
+
+  return animationController;
+}
+
+
+//----------------------------------------------------------------------
+// nsISupports methods:
+
+NS_IMPL_ISUPPORTS3(nsSMILAnimationController,
+                   nsISMILAnimationController,
+                   nsIAnimationController,
+                   nsISupportsWeakReference);
+
+//----------------------------------------------------------------------
+// nsITimerCallback methods
+
+NS_IMETHODIMP
+nsSMILAnimationController::Notify(nsITimer *timer)
+{
+  NS_ASSERTION(mTimer == timer,
+               "nsSMILAnimationController::Notify called with incorrect timer");
+
+  SampleChildren();
+
+  return NS_OK;
+}
+
+
+//----------------------------------------------------------------------
+// nsISMILAnimationController methods:
+
+nsresult
+nsSMILAnimationController::Pause()
+{
+  // TODO[2]: (for now this just involves calling pause on all the children)
+  NS_NOTYETIMPLEMENTED("nsSMILAnimationController::Pause");
+  return NS_ERROR_NOT_IMPLEMENTED;
+}
+
+nsresult
+nsSMILAnimationController::Resume()
+{
+  // TODO[2]: (for now this just involves calling resume on all the children)
+  NS_NOTYETIMPLEMENTED("nsSMILAnimationController::Resume");
+  return NS_ERROR_NOT_IMPLEMENTED;
+}
+
+nsresult
+nsSMILAnimationController::AddTimeContainer(nsISMILTimeContainer* aContainer)
+{
+  if (!aContainer)
+    return NS_ERROR_NULL_POINTER;
+
+  nsresult rv;
+  nsCOMPtr<nsIWeakReference> weakRef(
+      getter_AddRefs(do_GetWeakReference(aContainer, &rv)) );
+
+  if (NS_SUCCEEDED(rv))
+    rv = (mTimeContainers.AppendObject(weakRef)) ? NS_OK : NS_ERROR_FAILURE;
+
+  if (NS_SUCCEEDED(rv) && mTimeContainers.Count() == 1)
+    rv = StartTimer();
+
+  return rv;
+}
+
+nsresult
+nsSMILAnimationController::RemoveTimeContainer(nsISMILTimeContainer* aContainer)
+{
+  if (!aContainer)
+    return NS_ERROR_NULL_POINTER;
+
+  nsresult rv;
+  nsCOMPtr<nsIWeakReference> weakRef(
+      getter_AddRefs(do_GetWeakReference(aContainer, &rv)) );
+
+  if (NS_SUCCEEDED(rv))
+    rv = (mTimeContainers.RemoveObject(weakRef)) ? NS_OK : NS_ERROR_FAILURE;
+
+  if (NS_SUCCEEDED(rv) && mTimeContainers.Count() == 0)
+    rv = StopTimer();
+
+  return rv;
+}
+
+//----------------------------------------------------------------------
+// Implementation helpers:
+
+nsresult
+nsSMILAnimationController::Init()
+{
+  mTimer = do_CreateInstance("@mozilla.org/timer;1");
+  return (mTimer) ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
+}
+
+nsresult
+nsSMILAnimationController::StartTimer()
+{
+  NS_ASSERTION(mTimer, "NULL timer!");
+
+  // TODO[2]: Remove magic number and make timer self-tuning
+  return mTimer->InitWithCallback(NS_STATIC_CAST(nsITimerCallback*, this),
+                                  25, nsITimer::TYPE_REPEATING_SLACK);
+}
+
+nsresult
+nsSMILAnimationController::StopTimer()
+{
+  NS_ASSERTION(mTimer, "NULL timer!");
+
+  return mTimer->Cancel();
+}
+
+void
+nsSMILAnimationController::SampleChildren()
+{
+  // Creating a new enumerator each sample provides thread-safety but I'm not
+  // sure what the cost is
+
+  nsCOMPtr<nsISimpleEnumerator> enumerator;
+  nsresult rv = 
+    NS_NewArrayEnumerator(getter_AddRefs(enumerator), mTimeContainers);
+  NS_ENSURE_SUCCESS(rv,);
+
+  PRBool more = PR_FALSE;
+  nsCOMPtr<nsISMILTimeContainer> container;
+  nsCOMPtr<nsIWeakReference> weakRef;
+
+  while (NS_SUCCEEDED(enumerator->HasMoreElements(&more)) && more)
+  {
+    if (NS_FAILED(enumerator->GetNext(getter_AddRefs(weakRef))) || !weakRef)
+      break;
+
+    container = do_QueryReferent(weakRef);
+
+    if (container)
+      container->Sample();
+  }
+  
+  /* Non-thread safe version
+  PRUint32 i = mTimeContainers.Count();
+  while (i > 0)
+  {
+    --i;
+    nsCOMPtr<nsISMILTimeContainer> 
+      container( do_QueryReferent(mTimeContainers[i]) );
+    // The above could be replaced with mTimeContainers.SafeObjectAt(i) to
+    // provide a little more safety
+
+    if (container)
+      container->Sample();
+    else
+      mTimeContainers.RemoveObjectAt(i);
+  }
+  */
+}
+
Index: /cvsroot/mozilla/content/smil/src/nsSMILAnimationElement.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/nsSMILAnimationElement.cpp
diff -N content/smil/src/nsSMILAnimationElement.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/nsSMILAnimationElement.cpp	29 Aug 2005 09:47:10 -0000
@@ -0,0 +1,353 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "nsISMILAnimationElement.h"
+#include "nsISMILComposable.h"
+#include "nsISMILTimeClient.h"
+#include "nsSMILTimeValue.h"
+#include "nsISMILAnimatableValue.h"
+#include "nsISMILAnimatableAttribute.h"
+#include "nsISMILAnimatableValueFactory.h"
+#include "nsCOMPtr.h"
+
+//----------------------------------------------------------------------
+// nsSMILAnimationElement
+
+class nsSMILAnimationElement : public nsISMILAnimationElement,
+                               public nsISMILComposable,
+                               public nsISMILTimeClient
+{
+public:
+  nsSMILAnimationElement();
+
+  NS_DECL_ISUPPORTS
+
+  // nsISMILAnimationElement
+  virtual nsresult        Init(nsISMILAnimatableAttribute& aAttribute);
+  virtual PRBool          IsInitialised();
+
+  virtual nsresult        SetFrom(const nsAString& aFrom);
+  virtual nsresult        SetTo(const nsAString& aTo);
+  virtual nsresult        SetBy(const nsAString& aBy);
+  virtual nsresult        SetValues(const nsAString& aValues);
+  virtual nsresult        SetKeyTimes(const nsAString& aKeyTimes);
+  virtual nsresult        SetKeySplines(const nsAString& aKeySplines);
+
+  virtual PRBool          IsAdditive() const;
+  virtual void            SetAdditive(PRBool aAdditive);
+
+  virtual PRBool          IsCumulative() const;
+  virtual void            SetCumulative(PRBool aCumulative);
+
+  virtual nsSMILCalcMode  GetCalcMode() const;
+  virtual void            SetCalcMode(nsSMILCalcMode aCalcMode);
+
+  // nsISMILTimeClient methods
+  virtual void    SampleAt(const PRInt64& simpleTime,
+                           const nsSMILTimeValue& simpleDuration);
+
+  // nsISMILComposable methods
+  virtual void    CalcResult();
+
+protected:
+  nsISMILAnimationElement* NS_NewSMILAnimationElement();
+
+  PRBool                                mIsAdditive;
+  PRBool                                mIsCumulative;
+  nsSMILCalcMode                        mCalcMode;
+  PRBool                                mIsInitialised;
+
+  // TODO[1]: Remove this--it belongs in the compositor I think
+  nsCOMPtr<nsISMILAnimatableAttribute>  mAttribute;
+
+  // TODO[1]: Replace with an array
+  nsCOMPtr<nsISMILAnimatableValue>      mFrom;
+  nsCOMPtr<nsISMILAnimatableValue>      mTo;
+
+  nsCOMPtr<nsISMILAnimatableValue>      mAnimValue;
+
+  // TODO[2]: Key times, key splines
+};
+
+//----------------------------------------------------------------------
+// Constructors etc.
+
+nsSMILAnimationElement::nsSMILAnimationElement()
+  : mIsAdditive(PR_TRUE),
+    mIsCumulative(PR_FALSE),
+    mCalcMode(NS_SMIL_CALCMODE_LINEAR),
+    mIsInitialised(PR_FALSE)
+{
+}
+
+nsISMILAnimationElement*
+NS_NewSMILAnimationElement()
+{
+  return new nsSMILAnimationElement();
+}
+
+//----------------------------------------------------------------------
+// nsISupports methods:
+
+NS_IMPL_ISUPPORTS3(nsSMILAnimationElement,
+                   nsISMILAnimationElement,
+                   nsISMILComposable,
+                   nsISMILTimeClient);
+
+//----------------------------------------------------------------------
+// nsISMILAnimationElement methods:
+
+nsresult
+nsSMILAnimationElement::Init(nsISMILAnimatableAttribute& aAttribute)
+{
+  mAttribute = &aAttribute;
+  mIsInitialised = PR_TRUE;
+  return NS_OK;
+}
+
+PRBool
+nsSMILAnimationElement::IsInitialised()
+{
+  return mIsInitialised;
+}
+
+PRBool
+nsSMILAnimationElement::IsAdditive() const
+{
+  return mIsAdditive;
+}
+
+void
+nsSMILAnimationElement::SetAdditive(PRBool aAdditive)
+{
+  // TODO[2]
+  mIsAdditive = aAdditive;
+}
+
+PRBool
+nsSMILAnimationElement::IsCumulative() const
+{
+  return mIsCumulative;
+}
+
+void
+nsSMILAnimationElement::SetCumulative(PRBool aCumulative)
+{
+  // TODO[2]
+  mIsCumulative = aCumulative;
+}
+
+nsSMILCalcMode
+nsSMILAnimationElement::GetCalcMode() const
+{
+  return mCalcMode;
+}
+
+void
+nsSMILAnimationElement::SetCalcMode(nsSMILCalcMode aCalcMode)
+{
+  // TODO[2]
+  mCalcMode = aCalcMode;
+}
+
+nsresult
+nsSMILAnimationElement::SetFrom(const nsAString& aFrom)
+{
+  NS_ASSERTION(mAttribute, "Animation element not initialised.");
+
+  if (!mAttribute || !mIsInitialised)
+    return NS_ERROR_FAILURE;
+
+  PRBool isAdditive;
+  nsresult rv;
+  nsCOMPtr<nsISMILAnimatableValueFactory> factory(
+      do_QueryInterface(mAttribute) );
+
+  if (!factory)
+    return NS_ERROR_FAILURE;
+
+  rv = factory->CreateFromSpec(aFrom, getter_AddRefs(mFrom), isAdditive);
+
+  if (NS_SUCCEEDED(rv))
+    mIsAdditive &= isAdditive;
+
+  return rv;
+}
+
+nsresult
+nsSMILAnimationElement::SetTo(const nsAString& aTo)
+{
+  NS_ASSERTION(mAttribute, "Animation element not initialised.");
+
+  if (!mAttribute || !mIsInitialised)
+    return NS_ERROR_FAILURE;
+
+  PRBool isAdditive;
+  nsresult rv;
+  nsCOMPtr<nsISMILAnimatableValueFactory> factory(
+      do_QueryInterface(mAttribute) );
+
+  if (!factory)
+    return NS_ERROR_FAILURE;
+
+  rv = factory->CreateFromSpec(aTo, getter_AddRefs(mTo), isAdditive);
+
+  if (NS_SUCCEEDED(rv))
+    mIsAdditive &= isAdditive;
+
+  return NS_OK;
+}
+
+nsresult
+nsSMILAnimationElement::SetBy(const nsAString& aBy)
+{
+  // TODO[1]
+  return NS_ERROR_NOT_IMPLEMENTED;
+}
+
+nsresult
+nsSMILAnimationElement::SetValues(const nsAString& aValues)
+{
+  // TODO[1]
+  return NS_ERROR_NOT_IMPLEMENTED;
+}
+
+nsresult
+nsSMILAnimationElement::SetKeyTimes(const nsAString& aKeyTimes)
+{
+  // TODO[2]
+  return NS_ERROR_NOT_IMPLEMENTED;
+}
+
+nsresult
+nsSMILAnimationElement::SetKeySplines(const nsAString& aKeySplines)
+{
+  // TODO[2]
+  return NS_ERROR_NOT_IMPLEMENTED;
+}
+
+
+//----------------------------------------------------------------------
+// nsISMILTimeClient methods
+
+void
+nsSMILAnimationElement::SampleAt(const PRInt64& simpleTime,
+                                 const nsSMILTimeValue& simpleDuration)
+{
+  // TODO[1]: Remove once we implement more advanced from/to/by syntax but make
+  // sure we check these things before using them.
+  NS_ASSERTION(mFrom, "From not set");
+  NS_ASSERTION(mTo, "To not set");
+
+  // TODO[1]: Remove this check once we no longer set the attribute here
+  NS_ASSERTION(mAttribute, "Attribute not set");
+  NS_ASSERTION(mIsInitialised, "Trying to sample un-initialised animation");
+
+  // TODO[3]: All this checking might need to be removed (except in the debug
+  // build) to improve performance as this method will be called very frequently
+  if (!mAttribute || !mIsInitialised)
+    return;
+
+  nsresult rv;
+
+  // Create anim value if it doesn't already exist
+  if (!mAnimValue)
+  {
+    nsCOMPtr<nsISMILAnimatableValueFactory> factory(
+        do_QueryInterface(mAttribute) );
+    if (factory)
+      factory->Create(getter_AddRefs(mAnimValue));
+    if (!factory || !mAnimValue)
+      return;
+  }
+
+  if (!simpleDuration.IsResolved() && !simpleDuration.IsIndefinite())
+  {
+    // TODO[3]: Generate an error!
+    return;
+  }
+
+  // TODO[1]: This is not right (except from from-to animation) but we need test
+  // cases to cover this behaviour
+  if (simpleDuration.IsIndefinite())
+  {
+    mFrom->Interpolate(*mFrom, 0.0f, mAnimValue);
+  }
+  else
+  {
+    const PRInt64 &dur = simpleDuration.GetMilliseconds();
+    double unitDistance;
+    
+    if (LL_CMP(simpleTime, >, dur))
+    {
+      // TODO[1]: Remove this one! (Replace with proper filling + repeating)
+      unitDistance = 1.0;
+    }
+    else if (!LL_GE_ZERO(simpleTime))
+    {
+      NS_ASSERTION(PR_TRUE, "Animation sampled with negative simple time");
+      unitDistance = 0.0;
+    }
+    else
+    {
+      double fTime;
+      double fDur;
+
+      LL_L2D(fTime, simpleTime);
+      LL_L2D(fDur, dur);
+
+      unitDistance = fTime / fDur;
+    }
+
+    rv = mFrom->Interpolate(*mTo,
+                            NS_STATIC_CAST(float, unitDistance),
+                            mAnimValue);
+    NS_ENSURE_SUCCESS(rv,);
+  }
+
+  // We can't just call Set on the animated value itself, because the observers
+  // of the animated object as a whole need to be updated too.
+  rv = mAttribute->SetAnimValue(*mAnimValue);
+
+  NS_ENSURE_SUCCESS(rv,);
+}
+
+//----------------------------------------------------------------------
+// nsISMILComposable methods
+
+void
+nsSMILAnimationElement::CalcResult()
+{
+  // TODO[1]
+}
+
Index: /cvsroot/mozilla/content/smil/src/nsSMILInstanceTime.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/nsSMILInstanceTime.cpp
diff -N content/smil/src/nsSMILInstanceTime.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/nsSMILInstanceTime.cpp	29 Aug 2005 09:47:11 -0000
@@ -0,0 +1,69 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "nsSMILInstanceTime.h"
+#include "nsSMILTimeValueSpec.h"
+#include "nsSMILTimeValue.h"
+
+//----------------------------------------------------------------------
+// Implementation
+
+// This factory method really isn't needed
+nsSMILInstanceTime* NS_NewSMILInstanceTime(const nsSMILTimeValue &aTime,
+      nsSMILTimeValueSpec *aCreator)
+{
+  nsSMILInstanceTime* result
+    = new nsSMILInstanceTime(aTime, aCreator);
+
+  if (!result)
+    return nsnull;
+
+  return result;
+}
+
+nsSMILInstanceTime::nsSMILInstanceTime (const nsSMILTimeValue &aTime,
+      nsSMILTimeValueSpec *aCreator)
+  : mTime(aTime) // Copy the time
+{
+  if (aCreator)
+    mCreator = do_GetWeakReference(aCreator);
+}
+
+//----------------------------------------------------------------------
+// nsISupports
+
+NS_IMPL_ISUPPORTS1(nsSMILInstanceTime, nsSMILInstanceTime)
+
+//----------------------------------------------------------------------
+// nsSMILInstanceTime
+
Index: /cvsroot/mozilla/content/smil/src/nsSMILInstanceTime.h
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/nsSMILInstanceTime.h
diff -N content/smil/src/nsSMILInstanceTime.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/nsSMILInstanceTime.h	29 Aug 2005 09:47:11 -0000
@@ -0,0 +1,83 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef __NS_SMILINSTANCETIME_H__
+#define __NS_SMILINSTANCETIME_H__
+
+#include "nsISupports.h"
+#include "nsSMILTimeValue.h"
+#include "nsWeakReference.h"
+
+class nsSMILTimeValueSpec;
+
+////////////////////////////////////////////////////////////////////////
+// nsSMILInstanceTime
+
+// {57dd41a4-717d-4922-8708-813a598b6443}
+#define NS_SMILINSTANCETIME_IID \
+{ 0x57dd41a4, 0x717d, 0x4922, { 0x87, 0x08, 0x81, 0x3a, 0x59, 0x8b, 0x64, 0x43 } }
+
+// TODO[1]: Consider making the constructor public, removing the factory method
+// and storing instances of this object on the heap?
+// TODO[1]: Don't bother making this XPCOM-able--is it really going to be
+// reference counted?
+
+class nsSMILInstanceTime : public nsISupports
+{
+public:
+  NS_DEFINE_STATIC_IID_ACCESSOR(NS_SMILINSTANCETIME_IID)
+  NS_DECL_ISUPPORTS
+
+  const nsSMILTimeValue &GetTime() const { return mTime; }
+  // dependent update
+
+protected:
+  nsSMILInstanceTime (const nsSMILTimeValue &aTime,
+                      nsSMILTimeValueSpec *aCreator);
+
+  friend nsSMILInstanceTime* NS_NewSMILInstanceTime(
+      const nsSMILTimeValue &aTime,
+      nsSMILTimeValueSpec *aCreator);
+
+  nsSMILTimeValue     mTime;
+  nsWeakPtr           mCreator;
+};
+
+////////////////////////////////////////////////////////////////////////
+// Factory methods
+
+nsSMILInstanceTime* NS_NewSMILInstanceTime(const nsSMILTimeValue &aTime,
+      nsSMILTimeValueSpec *aCreator);
+
+#endif // __NS_SMILINSTANCETIME_H__
+
Index: /cvsroot/mozilla/content/smil/src/nsSMILInterval.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/nsSMILInterval.cpp
diff -N content/smil/src/nsSMILInterval.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/nsSMILInterval.cpp	29 Aug 2005 09:47:11 -0000
@@ -0,0 +1,38 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "nsSMILInterval.h"
+
+
+//----------------------------------------------------------------------
+// Implementation
Index: /cvsroot/mozilla/content/smil/src/nsSMILInterval.h
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/nsSMILInterval.h
diff -N content/smil/src/nsSMILInterval.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/nsSMILInterval.h	29 Aug 2005 09:47:11 -0000
@@ -0,0 +1,50 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef __NS_SMILINTERVAL_H__
+#define __NS_SMILINTERVAL_H__
+
+#include "nsISupports.h"
+
+////////////////////////////////////////////////////////////////////////
+// nsSMILInterval class
+
+class nsSMILInterval
+{
+public:
+  nsSMILInterval() {}
+
+private:
+};
+
+#endif // __NS_SMILINTERVAL_H__
Index: /cvsroot/mozilla/content/smil/src/nsSMILTimeValue.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/nsSMILTimeValue.cpp
diff -N content/smil/src/nsSMILTimeValue.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/nsSMILTimeValue.cpp	29 Aug 2005 09:47:11 -0000
@@ -0,0 +1,139 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "nsSMILTimeValue.h"
+#include "prlong.h"
+#include "nsDebug.h"
+
+PRInt64 nsSMILTimeValue::mUnresolvedSeconds = LL_MaxInt();
+
+//----------------------------------------------------------------------
+// Implementation
+
+// Default constructor creates an unresolved time
+nsSMILTimeValue::nsSMILTimeValue()
+  : mMilliseconds(LL_MaxInt()),
+    mIndefinite(PR_FALSE),
+    mResolved(PR_FALSE)
+{}
+
+//----------------------------------------------------------------------
+// nsSMILTimeValue methods:
+
+// TODO[3]: Profile and move the most accessed methods inline
+
+PRBool
+nsSMILTimeValue::IsIndefinite() const
+{
+  return mIndefinite;
+}
+
+void
+nsSMILTimeValue::SetIndefinite()
+{
+  mResolved = PR_FALSE;
+  mIndefinite = PR_TRUE;
+  mMilliseconds = LL_MaxInt();
+}
+
+PRBool
+nsSMILTimeValue::IsResolved() const
+{
+  return mResolved;
+}
+
+void
+nsSMILTimeValue::SetUnresolved()
+{
+  mResolved = PR_FALSE;
+  mIndefinite = PR_FALSE;
+  mMilliseconds = LL_MaxInt();
+}
+
+const PRInt64&
+nsSMILTimeValue::GetMilliseconds() const
+{
+  NS_ASSERTION(mResolved, "GetMilliseconds() called for unresolved time.");
+
+  if (!mResolved)
+      return mUnresolvedSeconds;
+
+  return mMilliseconds;
+}
+
+void
+nsSMILTimeValue::SetMilliseconds(const PRInt64& aMillis)
+{
+  mResolved = PR_TRUE;
+  mIndefinite = PR_FALSE;
+  mMilliseconds = aMillis;
+}
+
+PRInt8
+nsSMILTimeValue::CompareTo(const nsSMILTimeValue& aCompare) const
+{
+  PRInt8 result;
+
+  if (mResolved)
+  {
+    result = (aCompare.mResolved)
+           ? CmpLL(mMilliseconds, aCompare.mMilliseconds)
+           : -1;
+  }
+  else if (mIndefinite)
+  {
+    if (aCompare.mResolved)
+      result = 1;
+    else if (aCompare.mIndefinite)
+      result = 0;
+    else
+      result = -1;
+  }
+  else
+  {
+    result = (aCompare.mResolved || aCompare.mIndefinite) ? 1 : 0;
+  }
+
+  return result;
+}
+
+// A signed comparison of two signed 64-bit integers
+PRInt8
+nsSMILTimeValue::CmpLL(const PRInt64& a, const PRInt64& b) const
+{
+  if (LL_EQ(a, b))
+    return 0;
+  else
+    return (LL_CMP(a, >, b)) ? 1 : -1;
+}
+
Index: /cvsroot/mozilla/content/smil/src/nsSMILTimeValue.h
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/nsSMILTimeValue.h
diff -N content/smil/src/nsSMILTimeValue.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/nsSMILTimeValue.h	29 Aug 2005 09:47:12 -0000
@@ -0,0 +1,101 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef __NS_SMILTIMEVALUE_H__
+#define __NS_SMILTIMEVALUE_H__
+
+#include "prtypes.h"
+
+////////////////////////////////////////////////////////////////////////
+// nsSMILTimeValue class
+//
+// This class considers three orthogonal cases:
+//
+// 1) The time is resolved and has a millisecond value
+// 2) The time is indefinite
+// 3) The time in unresolved
+//
+// There is considerable chance for confusion with regards to the indefinite
+// state. Is it resolved? We adopt the convention that it is NOT resolved (but
+// nor is it unresolved). This simplifies implementation as you can then write:
+//
+// if (time.IsResolved())
+//    x = time.GetMilliseconds()
+//
+// instead of:
+//
+// if (time.IsResolved() && !time.IsIndefinite())
+//    x = time.GetMilliseconds()
+//
+// Testing if a time is unresolved becomes more complicated but this is tested
+// much less often.
+//
+// In summary:
+//
+// State         |  GetMilliseconds   |   IsResolved       |  IsIndefinite
+// --------------+--------------------+--------------------+-------------------
+// Resolved      |  The millisecond   |  PR_TRUE           |  PR_FALSE
+//               |  time              |                    |
+// --------------+--------------------+--------------------+-------------------
+// Indefinite    |  LL_MaxInt         |  PR_FALSE          |  PR_TRUE
+// --------------+--------------------+--------------------+-------------------
+// Unresolved    |  LL_MaxInt         |  PR_FALSE          |  PR_FALSE
+
+class nsSMILTimeValue
+{
+public:
+  // Creates an unresolved time value
+  nsSMILTimeValue();
+
+  PRBool            IsIndefinite() const;
+  void              SetIndefinite();
+
+  PRBool            IsResolved() const;
+  void              SetUnresolved();
+
+  const PRInt64&    GetMilliseconds() const;
+  void              SetMilliseconds(const PRInt64& aMillis);
+
+  PRInt8            CompareTo(const nsSMILTimeValue& aCompare) const;
+
+private:
+  PRInt8            CmpLL(const PRInt64& a, const PRInt64& b) const;
+
+  static PRInt64    mUnresolvedSeconds;
+
+  PRInt64           mMilliseconds;
+  PRBool            mIndefinite;
+  PRBool            mResolved;
+};
+
+#endif // __NS_SMILTIMEVALUE_H__
Index: /cvsroot/mozilla/content/smil/src/nsSMILTimeValueSpec.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/nsSMILTimeValueSpec.cpp
diff -N content/smil/src/nsSMILTimeValueSpec.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/nsSMILTimeValueSpec.cpp	29 Aug 2005 09:47:12 -0000
@@ -0,0 +1,439 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "nsSMILTimeValueSpec.h"
+#include "nsSMILTimeValue.h"
+#include "nsSMILInstanceTime.h"
+#include "nsCRT.h"
+#include "prdtoa.h"
+
+const PRUint32 nsSMILTimeValueSpec::MSEC_PER_SEC   = 1000;
+const PRUint32 nsSMILTimeValueSpec::MSEC_PER_MIN   = 1000 * 60;
+const PRUint32 nsSMILTimeValueSpec::MSEC_PER_HOUR  = 1000 * 60 * 60;
+
+//----------------------------------------------------------------------
+// Implementation
+
+// We can't return a raw pointer here because we call SetSpec, which calls
+// getWeakReference on the newly created value spec which will cause it to be
+// destroyed unless it is addref'ed first.
+
+nsresult NS_NewSMILTimeValueSpec(nsISMILTimedElement* aOwner,
+                                 PRBool aIsBegin,
+                                 const nsAString& aStringSpec,
+                                 nsSMILTimeValueSpec** aResult)
+{
+  if (nsnull == aResult) return NS_ERROR_NULL_POINTER;
+
+  *aResult = nsnull;
+
+  nsSMILTimeValueSpec* valueSpec = new nsSMILTimeValueSpec(aOwner, aIsBegin);
+
+  if (!valueSpec) return NS_ERROR_OUT_OF_MEMORY;
+  NS_ADDREF(valueSpec);
+
+  nsresult rv = valueSpec->SetSpec(aStringSpec);
+
+  if (NS_FAILED(rv))
+  {
+    NS_RELEASE(valueSpec);
+    return rv;
+  }
+
+  *aResult = valueSpec;
+
+  return NS_OK;
+}
+
+nsSMILTimeValueSpec::nsSMILTimeValueSpec(nsISMILTimedElement* aOwner,
+                                         PRBool aIsBegin)
+  : mIsBegin(aIsBegin),
+    mOffset() // initalises to zero
+{
+  if (aOwner)
+    mOwner = do_GetWeakReference(aOwner);
+}
+
+//----------------------------------------------------------------------
+// nsISupports
+
+NS_IMPL_ISUPPORTS2(nsSMILTimeValueSpec,
+                   nsSMILTimeValueSpec,
+                   nsISupportsWeakReference)
+
+//----------------------------------------------------------------------
+// nsSMILTimeValueSpec
+
+nsresult
+nsSMILTimeValueSpec::SetSpec(const nsAString& aStringSpec)
+{
+  // TODO[2]: Parse other specifiers
+  nsSMILTimeValue clockTime;
+  nsresult rv = ParseClockValue(aStringSpec,
+                                &clockTime,
+                                true); // allow + or -
+
+  if (NS_FAILED(rv) || !clockTime.IsResolved())
+    return NS_ERROR_FAILURE;
+  
+  mOffset = clockTime.GetMilliseconds();
+  
+  if (mOwner)
+  {
+    nsSMILTimeValue time;
+    time.SetMilliseconds(mOffset);
+    nsCOMPtr<nsSMILInstanceTime> instance = NS_NewSMILInstanceTime(time, this);
+
+    nsCOMPtr<nsISMILTimedElement> owner = do_QueryReferent(mOwner);
+    if (owner)
+      owner->AddInstanceTime(instance, mIsBegin);
+    else
+      rv = NS_ERROR_FAILURE;
+  }
+
+  return rv;
+}
+
+// This method can actually parse more than a clock value as defined in the
+// SMIL Animation specification. It can also parse:
+//  - the + or - before an offset
+//  - the special value "indefinite"
+//  - the special value "media"
+//
+// Because the value "media" cannot be represented as part of an nsSMILTimeValue
+// and has different meanings depending on where it is used, it is passed out as
+// a separate parameter (which can be set to null if the media attribute is not
+// allowed).
+//
+// aResult may be NULL, e.g. to check if the string is a valid clock value
+nsresult
+nsSMILTimeValueSpec::ParseClockValue(const nsAString& aStringSpec,
+                                     nsSMILTimeValue* aResult, 
+                                     PRBool aAllowSign, // = false
+                                     PRBool aAllowIndefinite, // = false
+                                     PRBool aAllowMedia, // = false
+                                     PRBool* aIsMedia) // = nsnull
+{
+  PRInt64 offset = LL_Zero();
+  PRFloat64 component = 0.0l;
+
+  PRInt8 sign = 0;
+  PRUint8 colonCount = 0;
+
+  PRBool started = PR_FALSE;
+  PRBool isValid = PR_TRUE;
+
+  PRInt32 metricMultiplicand = MSEC_PER_SEC;
+
+  PRBool numIsReal = PR_FALSE;
+  PRBool prevNumCouldBeMin = PR_FALSE;
+  PRBool numCouldBeMin = PR_FALSE;
+  PRBool numCouldBeSec = PR_FALSE;
+  PRBool isIndefinite = PR_FALSE;
+
+  char* spec; 
+  char* str = spec = ToNewCString(aStringSpec);
+
+  if (aIsMedia)
+    *aIsMedia = PR_FALSE;
+
+  while (*str)
+  {
+    if (IsSpace(*str))
+    {
+      if (started)
+      {
+        ++str;
+        break;
+      }
+      // else, we haven't started yet, ignore initial whitespace
+    }
+    else if (aAllowSign && (*str == '+' || *str == '-'))
+    {
+      if (sign != 0)
+      {
+        // sign has already been set
+        isValid = PR_FALSE;
+        break;
+      }
+
+      if (started)
+      {
+        // sign appears in the middle of the string
+        isValid = PR_FALSE;
+        break;
+      }
+
+      sign = (*str == '+') ? 1 : -1;
+    }
+    // The NS_IS_DIGIT etc. macros are not locale-specific
+    else if (NS_IS_DIGIT(*str))
+    {
+      char *end;
+
+      prevNumCouldBeMin = numCouldBeMin;
+
+      if (!GetClockComponent(str, &end, component, numIsReal, numCouldBeMin,
+                             numCouldBeSec))
+      {
+        isValid = PR_FALSE;
+        break;
+      }
+
+      started = PR_TRUE;
+      str = end - 1;
+    }
+    else if (*str == ':')
+    {
+      ++colonCount;
+
+      // Neither minutes nor hours can be reals
+      if (numIsReal)
+      {
+        isValid = PR_FALSE;
+        break;
+      }
+
+      // Clock value can't start with a ':'
+      if (!started)
+      {
+        isValid = PR_FALSE;
+        break;
+      }
+
+      // Can't have more than two colons
+      if (colonCount > 2)
+      {
+        isValid = PR_FALSE;
+        break;
+      }
+
+      // Multiply the offset by 60 and add the last accumulated component
+      PRInt64 component64;
+      LL_D2L(component64, component);
+      LL_MUL(offset, offset, LL_INIT(0,60));
+      LL_ADD(offset, offset, component64);
+
+      component = 0.0l;
+    }
+    else if (NS_IS_ALPHA(*str))
+    {
+      if (colonCount > 0)
+      {
+        isValid = PR_FALSE;
+        break;
+      }
+
+      char* end;
+      if (strstr(str, "indefinite") == str && aAllowIndefinite)
+      {
+        // We set a separate flag because we don't know what the state of the
+        // passed in time value is and we shouldn't change it in the case of a
+        // bad input string (so we can't initialise it to 0ms for example).
+        isIndefinite = PR_TRUE;
+        if (aResult)
+          aResult->SetIndefinite();
+      }
+      else if (strstr(str, "media") == str && aAllowMedia)
+      {
+        if (aIsMedia)
+          *aIsMedia = PR_TRUE;
+      }
+      else if (!GetMetricMultiplicand(str, &end, metricMultiplicand))
+      {
+        isValid = PR_FALSE;
+        break;
+      }
+
+      str = end;
+
+      // Nothing must come after the string except whitespace
+      break;
+    }
+    else
+    {
+      isValid = PR_FALSE;
+      break;
+    }
+
+    ++str;
+  }
+
+  if (!started) isValid = PR_FALSE;
+
+  // Process remainder of string (if any) to ensure it is only trailing
+  // whitespace (embedded whitespace is not allowed)
+  while (*str && isValid)
+  {
+    if (!IsSpace(*str)) isValid = PR_FALSE;
+    ++str;
+  }
+
+  nsMemory::Free(spec);
+
+  // No more processing required if the value was "indefinite" or "media".
+  if (isIndefinite || (aIsMedia && *aIsMedia))
+    return NS_OK;
+
+  // If there is more than one colon then the previous component must be a
+  // correctly formatted minute (i.e. two digits between 00 and 59) and the
+  // latest component must be a correctly formatted second (i.e. two digits
+  // before the .)
+  if (colonCount > 0 && (!prevNumCouldBeMin || !numCouldBeSec))
+    isValid = PR_FALSE;
+
+  if (isValid)
+  {
+    // Tack on the last component
+    if (colonCount > 0)
+    {
+      LL_MUL(offset, offset, LL_INIT(0,60));
+      LL_MUL(offset, offset, LL_INIT(0,1000));
+      component *= 1000;
+      // rounding
+      component = (component >= 0) ? component + 0.5l : component - 0.5l;
+      PRInt64 component64;
+      LL_D2L(component64, component);
+      LL_ADD(offset, offset, component64);
+    }
+    else
+    {
+      component *= metricMultiplicand;
+      // rounding
+      component = (component >= 0) ? component + 0.5l : component - 0.5l;
+      LL_D2L(offset, component);
+    }
+
+    if (aResult)
+    {
+      PRInt64 millis = offset;
+
+      if (sign == -1)
+        LL_NEG(millis, offset);
+
+      aResult->SetMilliseconds(millis);
+    }
+  }
+
+  return (isValid) ? NS_OK : NS_ERROR_FAILURE;
+}
+
+// NS_IS_SPACE relies on isspace which may return true for \xB and \xC but
+// SMILANIM does not consider these characters to be whitespace.
+inline PRBool
+nsSMILTimeValueSpec::IsSpace(const char c)
+{
+  return (c == 0x9 || c == 0xA || c == 0xD || c == 0x20);
+}
+
+inline PRBool
+nsSMILTimeValueSpec::GetClockComponent(const char* aSrc,
+                                       char** aEnd,
+                                       PRFloat64& aResult,
+                                       PRBool& aIsReal,
+                                       PRBool& aCouldBeMin,
+                                       PRBool& aCouldBeSec)
+{
+  char *rest;
+  PRFloat64 value = PR_strtod(aSrc, &rest);
+
+  // Check a number was found
+  if (rest == aSrc)
+    return PR_FALSE;
+
+  // Check it's not expressed in exponential form
+  PRBool isExp = (PL_strnpbrk(aSrc, "eE", rest - aSrc) != nsnull);
+  if (isExp)
+    return PR_FALSE;
+
+  // Don't allow real numbers of the form "23."
+  if (*(rest - 1) == '.')
+    return PR_FALSE;
+
+  // Number looks good
+  aResult = value;
+  *aEnd = rest;
+
+  // Set some flags so we can check this number is valid once we know
+  // whether it's an hour, minute string etc.
+  aIsReal = (PL_strnchr(aSrc, '.', rest - aSrc) != nsnull);
+  aCouldBeMin = (value < 60.0l && ((rest - aSrc) == 2));
+  aCouldBeSec = (value < 60.0l ||
+      (value == 60.0l && aSrc[0] == '5')); // Take care of rounding error
+  aCouldBeSec &= (PL_strlen(aSrc) >= 2 &&
+      (aSrc[2] == '\0' || aSrc[2] == '.' || IsSpace(aSrc[2])));
+
+  return PR_TRUE;
+}
+
+inline PRBool
+nsSMILTimeValueSpec::GetMetricMultiplicand(char* aSrc,
+                                           char** aEnd,
+                                           PRInt32& multiplicand)
+{
+  nsresult result = PR_TRUE;
+  
+  switch (*aSrc)
+  {
+    case 'h':
+      *aEnd = aSrc + 1;
+      multiplicand = MSEC_PER_HOUR;
+      break;
+    case 'm':
+      if (aSrc[1] == 'i' && aSrc[2] == 'n')
+      {
+        *aEnd = aSrc + 3;
+        multiplicand = MSEC_PER_MIN;
+      }
+      else if (aSrc[1] == 's')
+      {
+        *aEnd = aSrc + 2;
+        multiplicand = 1;
+      }
+      else
+      {
+        result = PR_FALSE;
+      }
+      break;
+    case 's':
+      *aEnd = aSrc + 1;
+      multiplicand = MSEC_PER_SEC;
+      break;
+    default:
+      result = PR_FALSE;
+      break;
+  }
+
+  return result;
+}
+
Index: /cvsroot/mozilla/content/smil/src/nsSMILTimeValueSpec.h
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/nsSMILTimeValueSpec.h
diff -N content/smil/src/nsSMILTimeValueSpec.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/nsSMILTimeValueSpec.h	29 Aug 2005 09:47:13 -0000
@@ -0,0 +1,104 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef __NS_SMILTIMEVALUESPEC_H__
+#define __NS_SMILTIMEVALUESPEC_H__
+
+#include "nsISupports.h"
+#include "nsString.h"
+#include "nsWeakReference.h"
+#include "nsISMILTimedElement.h"
+
+class nsSMILTimeValue;
+
+////////////////////////////////////////////////////////////////////////
+// nsSMILTimeValueSpec class
+
+// {39d2f376-6bda-42c0-8510-a93b24828a80}
+#define NS_SMILTIMEVALUESPEC_IID \
+{ 0x39d2f376, 0x6bda, 0x42c0, { 0x85, 0x10, 0xa9, 0x3b, 0x24, 0x82, 0x8a, 0x80 } }
+
+class nsSMILTimeValueSpec : public nsSupportsWeakReference
+{
+public:
+  NS_DEFINE_STATIC_IID_ACCESSOR(NS_SMILTIMEVALUESPEC_IID)
+  NS_DECL_ISUPPORTS
+
+  // Common parsing methods
+  static nsresult   ParseClockValue(const nsAString& aStringSpec,
+                                    nsSMILTimeValue* aResult, 
+                                    PRBool aAllowSign = false,
+                                    PRBool aAllowIndefinite = false,
+                                    PRBool aAllowMedia = false,
+                                    PRBool* aIsMedia = nsnull);
+
+protected:
+  nsSMILTimeValueSpec(nsISMILTimedElement* aOwner, PRBool aIsBegin);
+
+  friend nsresult NS_NewSMILTimeValueSpec(nsISMILTimedElement* aOwner,
+                                          PRBool aIsBegin,
+                                          const nsAString& aStringSpec,
+                                          nsSMILTimeValueSpec** aResult);
+
+  nsresult        SetSpec(const nsAString& aStringSpec);
+
+  static inline PRBool  IsSpace(const char c);
+  static inline PRBool  GetClockComponent(const char* aSrc,
+                                          char** aEnd,
+                                          PRFloat64& aResult,
+                                          PRBool& aIsReal,
+                                          PRBool& aCouldBeMin,
+                                          PRBool& aCouldBeSec);
+  static inline PRBool  GetMetricMultiplicand(char* aSrc,
+                                              char** aEnd,
+                                              PRInt32& multiplicand);
+
+
+  static const PRUint32 MSEC_PER_SEC;
+  static const PRUint32 MSEC_PER_MIN;
+  static const PRUint32 MSEC_PER_HOUR;
+
+  nsWeakPtr mOwner;
+  PRBool    mIsBegin;
+  PRInt64   mOffset;
+};
+
+////////////////////////////////////////////////////////////////////////
+// Factory methods
+
+nsresult NS_NewSMILTimeValueSpec(nsISMILTimedElement* aOwner,
+                                PRBool aIsBegin,
+                                const nsAString& aStringSpec,
+                                nsSMILTimeValueSpec** aResult);
+
+#endif // __NS_SMILTIMEVALUESPEC_H__
Index: /cvsroot/mozilla/content/smil/src/nsSMILTimedDocumentRoot.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/nsSMILTimedDocumentRoot.cpp
diff -N content/smil/src/nsSMILTimedDocumentRoot.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/nsSMILTimedDocumentRoot.cpp	29 Aug 2005 09:47:13 -0000
@@ -0,0 +1,155 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "nsSMILTimedDocumentRoot.h"
+#include "nsSMILTimeValue.h"
+
+////////////////////////////////////////////////////////////////////////
+// nsSMILTimedDocumentRoot implementation
+
+nsSMILTimedDocumentRoot::nsSMILTimedDocumentRoot()
+:
+  mStartTime(),
+  mAccumulatedOffset()
+{
+}
+
+//----------------------------------------------------------------------
+// nsISupports methods:
+
+NS_IMPL_ISUPPORTS2(nsSMILTimedDocumentRoot,
+                   nsISMILTimeContainer,
+                   nsISupportsWeakReference);
+
+//----------------------------------------------------------------------
+// nsSMILTimedDocumentRoot methods
+
+nsSMILTimeValue
+nsSMILTimedDocumentRoot::WallclockToDocumentTime(nsISMILTimeValueSpec*
+                                                   aWallclockSpec)
+{
+  // TODO[2]
+  return nsSMILTimeValue();
+}
+
+nsresult
+nsSMILTimedDocumentRoot::SeekToTime(PRInt64 aSeekTo)
+{
+  // TODO[3]
+  return NS_ERROR_NOT_IMPLEMENTED;
+}
+
+//----------------------------------------------------------------------
+// nsISMILTimeContainer methods
+
+nsresult
+nsSMILTimedDocumentRoot::Pause()
+{
+  // TODO[2]
+  return NS_ERROR_NOT_IMPLEMENTED;
+}
+
+nsresult
+nsSMILTimedDocumentRoot::Resume()
+{
+  // TODO[2]
+  return NS_ERROR_NOT_IMPLEMENTED;
+}
+
+void
+nsSMILTimedDocumentRoot::Sample()
+{
+  // It's probably more correct to use PRIntervalNow but I'm not sure if it
+  // will have sufficient range and is it's unsigned.
+  PRInt64 now;
+  LL_DIV(now, PR_Now(), PR_USEC_PER_MSEC);
+
+  // If this is the first time, record the document begin time
+  if (LL_IS_ZERO(mStartTime))
+    mStartTime = now;
+  
+  PRInt64 instant;
+  LL_SUB(instant, now, mStartTime);
+
+  SampleChildren(instant);
+}
+
+nsresult
+nsSMILTimedDocumentRoot::AddTimedElement(nsISMILTimedElement* aElement)
+{
+  if (!aElement)
+    return NS_ERROR_NULL_POINTER;
+
+  nsresult rv;
+  nsCOMPtr<nsIWeakReference> weakRef(
+      getter_AddRefs(do_GetWeakReference(aElement, &rv)) );
+
+  if (NS_SUCCEEDED(rv))
+    rv = (mTimedElements.AppendObject(weakRef)) ? NS_OK : NS_ERROR_FAILURE;
+
+  // TODO[1]: If the object already exists, don't freak out, it may have been
+  // removed from the tree and re-added between samples (objects are removed
+  // during each sample)
+
+  return rv;
+}
+
+nsresult
+nsSMILTimedDocumentRoot::RemoveTimedElement(nsISMILTimedElement* aElement)
+{
+  // TODO[2]
+  return NS_ERROR_NOT_IMPLEMENTED;
+}
+
+//----------------------------------------------------------------------
+// Implementation helpers:
+
+void
+nsSMILTimedDocumentRoot::SampleChildren(PRInt64 aDocumentTime)
+{
+  // TODO[f]: Replace with something thread-safe--probably a subclassed
+  // enumerator
+  PRUint32 i = mTimedElements.Count();
+  while (i > 0)
+  {
+    --i;
+    nsCOMPtr<nsISMILTimedElement> 
+      element( do_QueryReferent(mTimedElements[i]) );
+
+    if (element)
+      element->SampleAt(aDocumentTime);
+    else
+      mTimedElements.RemoveObjectAt(i);
+  }
+}
+
Index: /cvsroot/mozilla/content/smil/src/nsSMILTimedDocumentRoot.h
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/nsSMILTimedDocumentRoot.h
diff -N content/smil/src/nsSMILTimedDocumentRoot.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/nsSMILTimedDocumentRoot.h	29 Aug 2005 09:47:13 -0000
@@ -0,0 +1,77 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com> (original author)
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef __NS_ISMILTIMEDDOCUMENTROOT_H__
+#define __NS_ISMILTIMEDDOCUMENTROOT_H__
+
+#include "nsISupports.h"
+#include "nsISMILTimeContainer.h"
+#include "nsWeakReference.h"
+#include "nsCOMArray.h"
+
+class nsISMILTimeValueSpec;
+class nsISMILTimedElement;
+class nsSMILTimeValue;
+
+////////////////////////////////////////////////////////////////////////
+// nsSMILTimedDocumentRoot: Timed document root
+
+class nsSMILTimedDocumentRoot : public nsISMILTimeContainer,
+                                public nsSupportsWeakReference
+{
+public:
+  nsSMILTimedDocumentRoot();
+
+  NS_DECL_ISUPPORTS
+
+  nsSMILTimeValue   WallclockToDocumentTime(nsISMILTimeValueSpec*
+                                              aWallclockSpec);
+  nsresult          SeekToTime(PRInt64 aSeekTo);
+
+  // nsISMILTimeContainer
+  virtual nsresult  Pause();
+  virtual nsresult  Resume();
+  virtual void      Sample();
+  virtual nsresult  AddTimedElement(nsISMILTimedElement* aElement);
+  virtual nsresult  RemoveTimedElement(nsISMILTimedElement* aElement);
+
+protected:
+  void              SampleChildren(PRInt64 aDocumentTime);
+
+  PRInt64                       mStartTime;
+  PRInt64                       mAccumulatedOffset;
+  nsCOMArray<nsIWeakReference>  mTimedElements;
+};
+
+#endif // __NS_ISMILTIMEDDOCUMENTROOT_H__
+
Index: /cvsroot/mozilla/content/smil/src/nsSMILTimedElement.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/nsSMILTimedElement.cpp
diff -N content/smil/src/nsSMILTimedElement.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/nsSMILTimedElement.cpp	29 Aug 2005 09:47:14 -0000
@@ -0,0 +1,229 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "nsISMILTimedElement.h"
+#include "nsSMILTimeValue.h"
+#include "nsSMILTimeValueSpec.h"
+#include "nsSMILInstanceTime.h"
+#include "nsISMILTimeClient.h"
+#include "nsCOMArray.h"
+#include "nsReadableUtils.h"
+
+//----------------------------------------------------------------------
+// Class declaration
+
+class nsSMILTimedElement : public nsISMILTimedElement
+{
+public:
+  NS_DECL_ISUPPORTS
+
+  // nsISMILTimedElement
+  virtual void      AddInstanceTime(nsSMILInstanceTime* aInstanceTime,
+                                    PRBool aIsBegin);
+  virtual nsresult  SetBeginSpec(const nsAString& aBeginSpec);
+  virtual nsresult  SetEndSpec(const nsAString& aBeginSpec);
+  virtual nsresult  SetSimpleDuration(const nsAString& aDurSpec);
+  virtual void      AddTimeClient(nsISMILTimeClient* aClient);
+  virtual void      SampleAt(const PRInt64& aDocumentTime);
+
+protected:
+  nsSMILTimedElement();
+
+  friend nsISMILTimedElement* NS_NewSMILTimedElement();
+
+  //nsCOMPtr<nsSMILTimeValueSpec>   mBeginSpec;
+  nsCOMArray<nsSMILTimeValueSpec> mBeginSpecs;
+  nsCOMPtr<nsSMILTimeValueSpec>   mEndSpec;
+  nsSMILTimeValue                 mSimpleDuration;
+
+  // TODO[3]: Either change this into an array, or rename the method from
+  // AddClient to SetClient. I suspect the latter will be sufficient but it
+  // might depend on how we support animateMotion and perhaps even on if we want
+  // to provide advanced debugging facilities or more complicated frame rate
+  // tuning.
+  nsCOMPtr<nsISMILTimeClient>     mClient;
+
+  // TODO[1]: Replace with a collection
+  //nsCOMPtr<nsISupportsArray>      mBeginInstanceTimes;
+  nsCOMPtr<nsSMILInstanceTime>    mBeginInstance;
+  nsCOMPtr<nsSMILInstanceTime>    mEndInstance;
+};
+
+//----------------------------------------------------------------------
+// Implementation
+
+nsISMILTimedElement* NS_NewSMILTimedElement()
+{
+  return new nsSMILTimedElement();
+}
+
+nsSMILTimedElement::nsSMILTimedElement () : //mBeginSpec(NULL),
+                                            mBeginSpecs(),
+                                            mEndSpec(NULL),
+                                            mClient(NULL),
+                                            mBeginInstance(NULL),
+                                            //mBeginInstanceTimes(),
+                                            mEndInstance(NULL)
+{
+  mSimpleDuration.SetIndefinite();
+
+  // The ctor to instance time copies the time so we can just re-use the simple
+  // duration as a generic indefinite time
+  mEndInstance = NS_NewSMILInstanceTime(mSimpleDuration, nsnull);
+
+  // TODO[1]: Ensure the begin defaults to 0 if not set
+}
+
+//----------------------------------------------------------------------
+// nsISupports
+
+NS_IMPL_ISUPPORTS2(nsSMILTimedElement,
+                   nsISMILTimedElement,
+                   nsISupportsWeakReference)
+
+//----------------------------------------------------------------------
+// nsISMILTimedElement
+
+void
+nsSMILTimedElement::AddInstanceTime(nsSMILInstanceTime* aInstanceTime,
+                                    PRBool aIsBegin)
+{
+  if (aIsBegin)
+    mBeginInstance = aInstanceTime; //mBeginInstance->AppendElement(aInstanceTime);
+  else
+    mEndInstance = aInstanceTime;
+}
+
+nsresult
+nsSMILTimedElement::SetBeginSpec(const nsAString& aBeginSpec)
+{
+  // TODO[1]: Check if mBeginSpec is already set and clear if necessary
+  // TODO[2]: Reset timing if necessary
+  nsCOMPtr<nsSMILTimeValueSpec> spec;
+  PRInt32 start = 0;
+  PRInt32 end = aBeginSpec.FindChar(';');
+
+  while (end != -1)
+  {
+      nsresult rv;
+
+      rv = NS_NewSMILTimeValueSpec(this, true,
+        Substring(aBeginSpec, start, end - 1), getter_AddRefs(spec));
+      if (NS_FAILED(rv))
+      {
+        // TODO[3]: Appropriate error handling
+      }
+      else
+      {
+        // TODO[1]: Add to the list
+      }
+
+      start = end + 1;
+      end = aBeginSpec.FindChar(';', start);
+  }
+
+  // Last spec (not terminated by a ;)
+  nsresult rv = NS_NewSMILTimeValueSpec(this, true,
+       Substring(aBeginSpec, start, aBeginSpec.Length()), getter_AddRefs(spec));
+
+  return rv;
+}
+
+nsresult
+nsSMILTimedElement::SetEndSpec(const nsAString& aEndSpec)
+{
+  // TODO[1]: Tokenise by ; and build up a collection
+  // TODO[1]: Check if mEndSpec is already set and clear if necessary
+  // TODO[2]: Reset timing if necessary
+  return NS_NewSMILTimeValueSpec(this, false, aEndSpec,
+                                 getter_AddRefs(mEndSpec));
+}
+
+nsresult
+nsSMILTimedElement::SetSimpleDuration(const nsAString& aDurSpec)
+{
+  nsSMILTimeValue duration;
+  PRBool isMedia;
+  nsresult rv;
+  
+  rv = nsSMILTimeValueSpec::ParseClockValue(aDurSpec,
+                                            &duration,
+                                            false, // don't allow + or -
+                                            true, // allow indefinite
+                                            true, // allow media
+                                            &isMedia);
+
+  if (NS_FAILED(rv) || (!duration.IsResolved() && !duration.IsIndefinite()))
+      return NS_ERROR_FAILURE;
+  
+  // Check the value isn't 0
+  if (duration.IsResolved() && LL_EQ(duration.GetMilliseconds(), LL_Zero()))
+    return NS_ERROR_FAILURE;
+
+  // SVG-specific: "For SVG's animation elements, if "media" is specified, the
+  // attribute will be ignored." (SVG 1.1, section 19.2.6)
+  if (isMedia)
+    duration.SetIndefinite();
+
+  mSimpleDuration = duration;
+
+  return NS_OK;
+}
+
+void
+nsSMILTimedElement::AddTimeClient(nsISMILTimeClient* aClient)
+{
+  if (aClient)
+    mClient = aClient;
+}
+
+void
+nsSMILTimedElement::SampleAt(const PRInt64& aDocumentTime)
+{
+  if (!mBeginInstance) return;
+
+  if (!mBeginInstance->GetTime().IsResolved())
+    return;
+  
+  PRInt64 beginTime = mBeginInstance->GetTime().GetMilliseconds();
+
+  if (LL_CMP(aDocumentTime, <, beginTime))
+    return;
+
+  PRInt64 simpleTime;
+  LL_SUB(simpleTime, aDocumentTime, beginTime);
+
+  if (mClient)
+    mClient->SampleAt(simpleTime, mSimpleDuration);
+}
+
Index: /cvsroot/mozilla/content/smil/src/tests/Makefile.in
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/tests/Makefile.in
diff -N content/smil/src/tests/Makefile.in
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/tests/Makefile.in	29 Aug 2005 09:47:14 -0000
@@ -0,0 +1,87 @@
+#
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is mozilla.org code.
+#
+# The Initial Developer of the Original Code is
+# Netscape Communications Corporation.
+# Portions created by the Initial Developer are Copyright (C) 1998
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+# 	Brian Birtles <birtles@gmail.com>
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either of the GNU General Public License Version 2 or later (the "GPL"),
+# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK *****
+
+DEPTH		= ../../../..
+topsrcdir	= @top_srcdir@
+srcdir		= @srcdir@
+VPATH		= @srcdir@
+
+include $(DEPTH)/config/autoconf.mk
+
+MOZILLA_INTERNAL_API = 1
+
+MODULE = content
+
+REQUIRES	= xpcom \
+			  string \
+			  layout \
+			  content \
+			  dom \
+			  $(NULL)
+
+CPPSRCS		= \
+		TestTimeVal.cpp \
+		TestTimeValueSpec.cpp \
+		TestTimedElement.cpp \
+		$(NULL)
+
+include $(topsrcdir)/config/config.mk
+
+SIMPLE_PROGRAMS	= $(CPPSRCS:.cpp=$(BIN_SUFFIX))
+
+EXTRA_DSO_LIBS	= gkconsmil_s \
+					$(NULL)
+
+LIBS		= \
+		$(EXTRA_DSO_LIBS) \
+		$(XPCOM_LIBS) \
+		$(MOZ_JS_LIBS) \
+		$(TK_LIBS) \
+		$(NSPR_LIBS) \
+		$(NULL)
+
+INCLUDES += 	\
+		-I$(srcdir)/.. \
+		-I../../../../../dist/include/dom \
+		-I../../../../../dist/include/js \
+		-I../../../../../dist/include/xpconnect \
+		-I../../../../../dist/include/pref \
+		$(NULL)
+
+include $(topsrcdir)/config/rules.mk
+
Index: /cvsroot/mozilla/content/smil/src/tests/TestAnimationElement.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/tests/TestAnimationElement.cpp
diff -N content/smil/src/tests/TestAnimationElement.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/tests/TestAnimationElement.cpp	29 Aug 2005 09:47:15 -0000
@@ -0,0 +1,297 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *  Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "nsISMILAnimationElement.h"
+#include "nsISMILAnimatableValue.h"
+#include "nsISMILAnimatableAttribute.h"
+#include "nsISMILAnimatableValueFactory.h"
+#include "nsISMILTimeClient.h"
+#include "nsSMILTimeValue.h"
+#include "nsCOMPtr.h"
+#include "nsAutoPtr.h"
+#include "prdtoa.h"
+#include "nsReadableUtils.h"
+#include "nsCRT.h"
+#include "nsString.h"
+#include <stdio.h>
+
+//------------------------------------------------------------------------------
+// Mock objects
+
+class mock_nsSMILAnimatableValue : public nsISMILAnimatableValue
+{
+public:
+  mock_nsSMILAnimatableValue() : mLastUnitDistance(-1.0f),
+                                 mValue(0.0f)
+  {}
+
+  NS_DECL_ISUPPORTS
+
+  virtual void      ComputeDistance(const nsISMILAnimatableValue& aFrom,
+                                    const nsISMILAnimatableValue& aTo,
+                                    PRFloat64& aDistance) const
+  {
+  }
+
+  virtual nsresult  Interpolate(nsISMILAnimatableValue& aEndValue,
+                                float aUnitDistance,
+                                nsISMILAnimatableValue* aResult)
+  {
+    NS_ASSERTION(aResult, "Null result passed to Interpolate.");
+    if (!aResult) return NS_ERROR_NULL_POINTER;
+
+    mLastUnitDistance = aUnitDistance;
+
+    mock_nsSMILAnimatableValue *end = 
+      NS_REINTERPRET_CAST(mock_nsSMILAnimatableValue*, &aEndValue);
+
+    float newValue = mValue + (end->mValue - mValue) * aUnitDistance;
+
+    nsCOMPtr<mock_nsSMILAnimatableValue> value( do_QueryInterface(aResult) );
+    if (!value)
+      return NS_ERROR_FAILURE;
+
+    value->mValue = newValue;
+
+    return NS_OK;
+  }
+
+  virtual void      Accumulate(const nsISMILAnimatableValue& aAddedValue)
+  {
+  }
+
+  virtual void      Set(const nsISMILAnimatableValue& aNewValue)
+  {
+    nsISMILAnimatableValue *nonConstValue = 
+        NS_CONST_CAST(nsISMILAnimatableValue*, &aNewValue);
+    nsCOMPtr<mock_nsSMILAnimatableValue> 
+        value( do_QueryInterface(nonConstValue) );
+    NS_ASSERTION(value, "Value is null");
+
+    mValue = value->mValue;
+  }
+
+  float mLastUnitDistance;
+  float mValue;
+};
+
+NS_IMPL_ISUPPORTS1(mock_nsSMILAnimatableValue,
+                   nsISMILAnimatableValue)
+
+class mock_nsSMILAnimatableAttribute : public nsISMILAnimatableAttribute,
+                                       public nsISMILAnimatableValueFactory
+{
+public:
+  mock_nsSMILAnimatableAttribute()
+  {
+    mBaseValue = new mock_nsSMILAnimatableValue();
+    mAnimValue = new mock_nsSMILAnimatableValue();
+  }
+  
+  NS_DECL_ISUPPORTS
+  
+  virtual nsresult SetAnimValue(nsISMILAnimatableValue& aValue)
+  {
+    mAnimValue = &aValue;
+    return NS_OK;
+  }
+
+  virtual nsISMILAnimatableValue* GetAnimValue()
+  {
+    return mAnimValue;
+  }
+
+  virtual nsISMILAnimatableValue* GetBaseValue()
+  {
+    return mBaseValue;
+  }
+
+  virtual nsresult Create(nsISMILAnimatableValue** aResult) const
+  {
+    *aResult = new mock_nsSMILAnimatableValue();
+    NS_ADDREF(*aResult);
+
+    return NS_OK;
+  }
+
+  virtual nsresult  CreateFromSpec(const nsAString& aSpec,
+                                   nsISMILAnimatableValue** aResult,
+                                   PRBool& aIsAddable) const
+  {
+    NS_ASSERTION(aResult, "Null result passed to GetNewValue.");
+    if (!aResult) return NS_ERROR_NULL_POINTER;
+
+    char *str = ToNewCString(aSpec);
+    PRFloat64 val = PR_strtod(str, NULL);
+    nsMemory::Free(str);
+
+    mock_nsSMILAnimatableValue* result = new mock_nsSMILAnimatableValue();
+    NS_ASSERTION(result, "Couldn't allocate new value.\n");
+    if (result == nsnull)
+      return NS_ERROR_OUT_OF_MEMORY;
+
+    result->mValue = NS_STATIC_CAST(float, val);
+    NS_ADDREF(*aResult = result);
+    aIsAddable = true;
+
+    return NS_OK;
+  }
+
+  nsRefPtr<nsISMILAnimatableValue> mBaseValue;
+  nsRefPtr<nsISMILAnimatableValue> mAnimValue;
+};
+
+NS_IMPL_ISUPPORTS2(mock_nsSMILAnimatableAttribute,
+                   nsISMILAnimatableAttribute,
+                   nsISMILAnimatableValueFactory)
+
+//------------------------------------------------------------------------------
+// Test cases
+
+static PRBool
+TestInitialisation()
+{
+  nsAutoPtr<nsISMILAnimationElement> elem = NS_NewSMILAnimationElement();
+  nsRefPtr<mock_nsSMILAnimatableAttribute> attr = 
+    new mock_nsSMILAnimatableAttribute;
+
+  if (elem->IsInitialised())
+  {
+    printf("  Element is initialised before calling Init.\n");
+    return PR_FALSE;
+  }
+
+  if (elem->Init(*attr) != NS_OK)
+  {
+    printf("  Initialisating returned an error.\n");
+    return PR_FALSE;
+  }
+
+  if (!elem->IsInitialised())
+  {
+    printf("  Element is not initialised after calling Init.\n");
+    return PR_FALSE;
+  }
+
+  attr = new mock_nsSMILAnimatableAttribute;
+
+  if (elem->Init(*attr) != NS_OK)
+  {
+    printf("  Re-initialisating returned an error.\n");
+    return PR_FALSE;
+  }
+
+  if (!elem->IsInitialised())
+  {
+    printf("  Element is not initialised after re-initialisation.\n");
+    return PR_FALSE;
+  }
+
+  return PR_TRUE;
+}
+
+static PRBool
+TestSampleAt()
+{
+  nsCOMPtr<nsISMILAnimationElement> elem = NS_NewSMILAnimationElement();
+  nsRefPtr<mock_nsSMILAnimatableAttribute> attr = 
+    new mock_nsSMILAnimatableAttribute;
+
+  elem->Init(*attr);
+  elem->SetFrom(NS_LITERAL_STRING("5"));
+  elem->SetTo(NS_LITERAL_STRING("9"));
+
+  PRInt64 timeStart = LL_INIT(0,0);
+  PRInt64 timeQuarter = LL_INIT(0,500);
+  PRInt64 timeNearlyEnd = LL_INIT(0,1999);
+  PRInt64 timeEnd = LL_INIT(0,2000);
+
+  nsSMILTimeValue dur;
+  dur.SetMilliseconds(timeEnd);
+
+  nsCOMPtr<nsISMILTimeClient> tc (do_QueryInterface(elem));
+  tc->SampleAt(timeStart, dur);
+
+  mock_nsSMILAnimatableValue* animVal = 
+    NS_REINTERPRET_CAST(mock_nsSMILAnimatableValue*, attr->mAnimValue.get());
+
+  if (animVal->mValue != 5.0f)
+  {
+    printf("  Got unexpected animation value, %.3f instead of %.3f.\n",
+        animVal->mValue, 5.0f);
+    return PR_FALSE;
+  }
+
+  tc->SampleAt(timeQuarter, dur);
+
+  if (animVal->mValue != 6.0f)
+  {
+    printf("  Got unexpected animation value, %.3f instead of %.3f.\n",
+        animVal->mValue, 6.0f);
+    return PR_FALSE;
+  }
+
+  tc->SampleAt(timeNearlyEnd, dur);
+
+  if (animVal->mValue <= 8.5f || animVal->mValue >= 9.0f)
+  {
+    printf("  Got out of range value, %.3f (expected: %.3f to %.3f).\n",
+        animVal->mValue, 8.5f, 9.0f);
+    return PR_FALSE;
+  }
+
+  return PR_TRUE;
+}
+
+//------------------------------------------------------------------------------
+// Main
+
+int main(int argc, char** argv)
+{
+  PRBool result = PR_TRUE;
+
+  printf("TestAnimationElement:\n");
+
+  result &= TestInitialisation();
+  result &= TestSampleAt();
+
+  if (result) printf("  All tests passed.\n");
+
+  return 0;
+}
+
Index: /cvsroot/mozilla/content/smil/src/tests/TestTimeVal.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/tests/TestTimeVal.cpp
diff -N content/smil/src/tests/TestTimeVal.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/tests/TestTimeVal.cpp	29 Aug 2005 09:47:15 -0000
@@ -0,0 +1,154 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *  Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "nsSMILTimeValue.h"
+#include "prlong.h"
+#include <stdio.h>
+
+static PRBool
+TestConstructor()
+{
+  nsSMILTimeValue value;
+
+  if (value.IsResolved() || value.IsIndefinite())
+  {
+    printf("  Time value wasn't initialised as expected.\n");
+    return PR_FALSE;
+  }
+
+  return PR_TRUE;
+}
+
+static PRBool
+TestComparison()
+{
+  nsSMILTimeValue a;
+  nsSMILTimeValue b;
+
+  if (a.CompareTo(b) != 0)
+  {
+    printf("  Unaltered time values are not equal.\n");
+    return PR_FALSE;
+  }
+
+  b.SetIndefinite();
+  if (a.CompareTo(b) != 1)
+  {
+    printf("  Unresolved time is not more than indefinite time.\n");
+    return PR_FALSE;
+  }
+
+  a.SetIndefinite();
+  if (a.CompareTo(b) != 0)
+  {
+    printf("  Indefinite times are not equal.\n");
+    return PR_FALSE;
+  }
+
+  b.SetMilliseconds(LL_INIT(0,5));
+  if (a.CompareTo(b) != 1)
+  {
+    printf("  Indefinite time is not greater than millisecond time.\n");
+    return PR_FALSE;
+  }
+
+  a.SetMilliseconds(LL_INIT(0,5));
+  if (a.CompareTo(b) != 0)
+  {
+    printf("  Millisecond times are not equal.\n");
+    return PR_FALSE;
+  }
+
+  a.SetMilliseconds(LL_INIT(0,6));
+  if (a.CompareTo(b) != 1)
+  {
+    printf("  6 milliseconds is not greater than 5.\n");
+    return PR_FALSE;
+  }
+
+  a.SetMilliseconds(LL_INIT(0,0));
+  if (a.CompareTo(b) != -1)
+  {
+    printf("  0 milliseconds is not less than 5.\n");
+    return PR_FALSE;
+  }
+
+  a.SetMilliseconds(LL_INIT(0,-5));
+  if (a.CompareTo(b) != -1)
+  {
+    printf("  -5 milliseconds is not less than 5.\n");
+    return PR_FALSE;
+  }
+
+  b.SetIndefinite();
+  if (a.CompareTo(b) != -1)
+  {
+    printf("  Millisecond time is not less than indefinite time.\n");
+    return PR_FALSE;
+  }
+
+  b.SetUnresolved();
+  if (a.CompareTo(b) != -1)
+  {
+    printf("  Millisecond time is not less than unresolved time.\n");
+    return PR_FALSE;
+  }
+
+  a.SetIndefinite();
+  if (a.CompareTo(b) != -1)
+  {
+    printf("  Indefinite time is not less than unresolved time.\n");
+    return PR_FALSE;
+  }
+
+  return PR_TRUE;
+}
+
+int main(int argc, char** argv)
+{
+  PRBool result = PR_TRUE;
+
+  printf("TestTimeVal:\n");
+
+  result &= TestConstructor();
+  result &= TestComparison();
+
+  if (result) printf("  All tests passed.\n");
+
+  return 0;
+}
Index: /cvsroot/mozilla/content/smil/src/tests/TestTimeValueSpec.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/tests/TestTimeValueSpec.cpp
diff -N content/smil/src/tests/TestTimeValueSpec.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/tests/TestTimeValueSpec.cpp	29 Aug 2005 09:47:16 -0000
@@ -0,0 +1,497 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *  Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "nsSMILTimeValueSpec.h"
+#include "nsSMILTimeValue.h"
+#include "nsISMILTimedElement.h"
+#include "nsSMILInstanceTime.h"
+#include <stdio.h>
+#include "prdtoa.h"
+
+static const PRInt32 MSEC_PER_SEC     = 1000L;
+static const PRInt32 MSEC_PER_MINUTE  = 60L * 1000L;
+static const PRInt32 MSEC_PER_HOUR    = 60L * 60L * 1000L;
+
+////////////////////////////////////////////////////////////////////////////////
+// Mock Timed Element
+
+class mock_nsSMILTimedElement : public nsISMILTimedElement
+{
+public:
+  mock_nsSMILTimedElement() : mInstances(0) { }
+
+  NS_DECL_ISUPPORTS
+
+  virtual void      AddInstanceTime(nsSMILInstanceTime* instanceTime,
+                                    PRBool isBegin)
+  {
+    ++mInstances;
+    mIsBegin = isBegin;
+    mLastTime = instanceTime->GetTime().GetMilliseconds();
+  }
+
+  virtual nsresult  SetBeginSpec(const nsAString& aBeginSpec) { return NS_OK; }
+  virtual nsresult  SetEndSpec(const nsAString& aBeginSpec) { return NS_OK; }
+  virtual nsresult  SetSimpleDuration(const nsAString& aDurSpec)
+                      { return NS_OK; }
+  virtual void      AddTimeClient(nsISMILTimeClient* client) {}
+  virtual void      SampleAt(const PRInt64& documentTime) {}
+
+  int               mInstances;
+  PRBool            mIsBegin;
+  PRInt64           mLastTime;
+};
+
+NS_IMPL_ISUPPORTS2(mock_nsSMILTimedElement,
+                   nsISMILTimedElement,
+                   nsISupportsWeakReference)
+
+////////////////////////////////////////////////////////////////////////////////
+// Test methods
+
+static PRBool
+CompareOffset(const nsAString& offsetSpec, PRInt64 milliseconds)
+{
+  PRBool result = PR_TRUE;
+  nsCOMPtr<mock_nsSMILTimedElement> elem = new mock_nsSMILTimedElement();
+  nsCOMPtr<nsSMILTimeValueSpec> spec;
+  nsresult rv =
+    NS_NewSMILTimeValueSpec(elem, true, offsetSpec,
+        getter_AddRefs(spec));
+
+  if (NS_FAILED(rv) || !spec)
+  {
+    char* str = ToNewCString(offsetSpec);
+    printf("  Couldn't create new time value specification for \"%s\".\n",
+        str);
+    nsMemory::Free(str);
+    return PR_FALSE;
+  }
+
+  if (LL_NE(elem->mLastTime, milliseconds))
+  {
+    char* str = ToNewCString(offsetSpec);
+
+    printf("  Incorrect offset, expected %I64d, got %I64d, for: \"%s\".\n",
+        milliseconds, elem->mLastTime, str);
+
+    nsMemory::Free(str);
+    result = PR_FALSE;
+  }
+
+  return result;
+}
+
+static PRBool
+CompareOffsetForError(const nsAString& offsetSpec)
+{
+  PRBool result = PR_TRUE;
+  nsCOMPtr<mock_nsSMILTimedElement> elem = new mock_nsSMILTimedElement();
+  nsCOMPtr<nsSMILTimeValueSpec> spec;
+  nsresult rv =
+    NS_NewSMILTimeValueSpec(elem, true, offsetSpec, getter_AddRefs(spec));
+
+  if (!NS_FAILED(rv) || spec)
+  {
+    char* str = ToNewCString(offsetSpec);
+
+    printf("  No error thrown for \"%s\".\n", str);
+
+    nsMemory::Free(str);
+
+    return PR_FALSE;
+  }
+
+  return PR_TRUE;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Test cases
+
+static PRBool
+TestFactoryMethod()
+{
+  nsCOMPtr<mock_nsSMILTimedElement> elem = new mock_nsSMILTimedElement();
+
+  nsCOMPtr<nsSMILTimeValueSpec> spec;
+  nsresult rv =
+    NS_NewSMILTimeValueSpec(elem, true, NS_LITERAL_STRING("5s"),
+        getter_AddRefs(spec));
+
+  if (NS_FAILED(rv) || !spec)
+  {
+    printf("  Couldn't create new time value specification.\n");
+    return PR_FALSE;
+  }
+
+  return PR_TRUE;
+}
+
+#define COMPARE_OFFSET(a,b) \
+  LL_I2L(expected, (b)); \
+  result &= CompareOffset(NS_LITERAL_STRING(a), expected);
+#define COMPARE_ERROR(a) \
+  result &= CompareOffsetForError(NS_LITERAL_STRING(a));
+        
+static PRBool
+TestOffset()
+{
+  PRBool result = PR_TRUE;
+  PRInt64 expected;
+
+  // Basic tests, sign and whitespace
+  COMPARE_OFFSET("3s", 3000)
+  COMPARE_OFFSET("0s", 0)
+  COMPARE_OFFSET("+2s", 2000)
+  COMPARE_OFFSET("-1s\t\r", -1000)
+  COMPARE_OFFSET("- 1s", -1000)
+  COMPARE_OFFSET("  -1s", -1000)
+  COMPARE_OFFSET(" - 1s", -1000)
+  COMPARE_OFFSET(" \t\n\r-1s", -1000)
+  COMPARE_OFFSET("+\n5s", 5000)
+  COMPARE_OFFSET("\t 5s", 5000)
+
+  // These tests from SMILANIM 3.6.7
+  COMPARE_OFFSET("02:30:03",
+      2 * MSEC_PER_HOUR + 30 * MSEC_PER_MINUTE + 3 * MSEC_PER_SEC)
+  COMPARE_OFFSET("50:00:10.25",
+      50 * MSEC_PER_HOUR + 10 * MSEC_PER_SEC + 250)
+  COMPARE_OFFSET("02:33", 2 * MSEC_PER_MINUTE + 33 * MSEC_PER_SEC)
+  COMPARE_OFFSET("00:10.5", 10 * MSEC_PER_SEC + 500)
+  COMPARE_OFFSET("3.2h", 3 * MSEC_PER_HOUR + 12 * MSEC_PER_MINUTE)
+  COMPARE_OFFSET("45min", 45 * MSEC_PER_MINUTE)
+  COMPARE_OFFSET("30s", 30 * MSEC_PER_SEC)
+  COMPARE_OFFSET("5ms", 5)
+  COMPARE_OFFSET("12.467", 12 * MSEC_PER_SEC + 467)
+  COMPARE_OFFSET("00.5s", 500)
+  COMPARE_OFFSET("00:00.005", 5)
+
+  // Additional tests
+  COMPARE_OFFSET("61:59:59",
+      61 * MSEC_PER_HOUR + 59 * MSEC_PER_MINUTE + 59 * MSEC_PER_SEC)
+  COMPARE_OFFSET("02:59.999999999999999999999",
+      2 * MSEC_PER_MINUTE + 60 * MSEC_PER_SEC)
+
+  PRInt64 hour64;
+  LL_I2L(hour64, MSEC_PER_HOUR);
+  PRInt64 min64;
+  LL_I2L(min64, MSEC_PER_MINUTE);
+  LL_MUL(min64, min64, LL_INIT(0, 23));
+  PRInt64 sec64;
+  LL_I2L(sec64, MSEC_PER_SEC);
+  LL_MUL(sec64, sec64, LL_INIT(0, 45));
+
+  LL_MUL(expected, LL_INIT(0,1234), hour64);
+  LL_ADD(expected, expected, min64);
+  LL_ADD(expected, expected, sec64);
+  result &= CompareOffset(NS_LITERAL_STRING("1234:23:45"), expected);
+
+  COMPARE_OFFSET("61min", 61 * MSEC_PER_MINUTE)
+  COMPARE_OFFSET("0:30:03", 30 * MSEC_PER_MINUTE + 3 * MSEC_PER_SEC)
+
+  // Fractional precision
+  COMPARE_OFFSET("25.4567", 25 * MSEC_PER_SEC + 457)
+  COMPARE_OFFSET("0.123456789", 123)
+  COMPARE_OFFSET("0.00000000000000000000001", 0)
+  COMPARE_OFFSET("-0.00000000000000000000001", 0)
+  COMPARE_OFFSET("0.0009", 1)
+  COMPARE_OFFSET("0.99999999999999999999999999999999999999999999999999999999999999999999999999999999", 1000)
+  COMPARE_OFFSET("23.4567ms", 23)
+  COMPARE_OFFSET("23.7ms", 24)
+
+  // Test errors
+  COMPARE_ERROR(" + +3s")
+  COMPARE_ERROR(" +-3s")
+  COMPARE_ERROR("1:12:12:12")
+  COMPARE_ERROR("4:50:60")
+  COMPARE_ERROR("4:60:0")
+  COMPARE_ERROR("4:60")
+  COMPARE_ERROR("4:-1:00")
+  COMPARE_ERROR("4 5m")
+  COMPARE_ERROR("4 5ms")
+  COMPARE_ERROR("02:3:03")
+  COMPARE_ERROR("45.7 s")
+  COMPARE_ERROR(" 3 h ")
+  COMPARE_ERROR("2:33 ")
+  COMPARE_ERROR("02:33 2")
+  COMPARE_ERROR("\xB 02:33")
+  COMPARE_ERROR("h")
+  COMPARE_ERROR("23.s")
+  COMPARE_ERROR("23.")
+  COMPARE_ERROR("23.54.2s")
+  COMPARE_ERROR("23sec")
+  COMPARE_ERROR("five")
+  COMPARE_ERROR("")
+  COMPARE_ERROR("02:33s")
+  COMPARE_ERROR("02:33 s")
+  COMPARE_ERROR("2.54e6")
+  COMPARE_ERROR("02.5:33")
+  COMPARE_ERROR("2:-45:33")
+  COMPARE_ERROR("2:4.5:33")
+  COMPARE_ERROR("45m")
+  COMPARE_ERROR(":20:30")
+  COMPARE_ERROR("1.5:30")
+  COMPARE_ERROR("15:-30")
+  COMPARE_ERROR("::30")
+  COMPARE_ERROR("15:30s")
+  COMPARE_ERROR("2:1.:30")
+  COMPARE_ERROR("2:.1:30")
+  COMPARE_ERROR("2.0:15:30")
+  COMPARE_ERROR("2.:15:30")
+  COMPARE_ERROR(".2:15:30")
+  COMPARE_ERROR("70:15")
+  COMPARE_ERROR("media")
+  COMPARE_ERROR("5mi")
+  COMPARE_ERROR("5hours")
+  COMPARE_ERROR("h05:30")
+  COMPARE_ERROR("05:40\x9A");
+  COMPARE_ERROR("05:40\u30D5");
+  COMPARE_ERROR("05:40β");
+
+  return result;
+}
+
+#undef COMPARE_OFFSET
+#undef COMPARE_ERROR
+
+static PRBool
+TestAddInstance()
+{
+  nsCOMPtr<mock_nsSMILTimedElement> elem = new mock_nsSMILTimedElement();
+
+  nsCOMPtr<nsSMILTimeValueSpec> spec;
+  nsresult rv =
+    NS_NewSMILTimeValueSpec(elem, true, NS_LITERAL_STRING("5s"),
+        getter_AddRefs(spec));
+
+  if (elem->mInstances != 1)
+  {
+    printf("  Add instance was not called as expected.\n");
+    return PR_FALSE;
+  }
+
+  return PR_TRUE;
+}
+
+static PRBool
+TimeValuesEqual(const nsSMILTimeValue& a, const nsSMILTimeValue &b)
+{
+  return (
+      (a.IsIndefinite() && b.IsIndefinite())
+      ||
+      (!a.IsResolved() && !a.IsIndefinite()
+        &&
+       !b.IsResolved() && !b.IsIndefinite())
+      ||
+      (a.IsResolved() && b.IsResolved()
+        &&
+       LL_EQ(a.GetMilliseconds(), b.GetMilliseconds())));
+}
+
+static PRBool
+TestIndefinite()
+{
+  nsSMILTimeValue expected;
+  nsSMILTimeValue actual;
+  PRBool          isMedia;
+  nsresult        rv;
+  PRBool          result = PR_TRUE;
+
+  rv = nsSMILTimeValueSpec::ParseClockValue(
+      NS_LITERAL_STRING("indefinite"), &actual, false, false);
+  if (rv != NS_ERROR_FAILURE)
+  {
+    printf("  Error not thrown as expected for indefinite value.\n");
+    result = PR_FALSE;
+  }
+
+  expected.SetIndefinite();
+  rv = nsSMILTimeValueSpec::ParseClockValue(
+      NS_LITERAL_STRING(" indefinite "), &actual, false, true);
+  if (!TimeValuesEqual(actual, expected))
+  {
+    printf("  Indefinite value not returned as expected.\n");
+    result = PR_FALSE;
+  }
+
+  actual.SetIndefinite();
+  rv = nsSMILTimeValueSpec::ParseClockValue(
+      NS_LITERAL_STRING(" indfinite "), &actual, false, true);
+  if (rv != NS_ERROR_FAILURE)
+  {
+    printf("  Error not thrown as expected for mis-spelt indefinite value.\n");
+    result = PR_FALSE;
+  }
+
+  rv = nsSMILTimeValueSpec::ParseClockValue(
+      NS_LITERAL_STRING("indefinite"), &actual, false, true, false, &isMedia);
+  if (isMedia)
+  {
+    printf("  isMedia True when false expected for indefinite value.\n");
+    result = PR_FALSE;
+  }
+
+  return result;
+}
+
+static PRBool
+TestMedia()
+{
+  nsSMILTimeValue expected;
+  nsSMILTimeValue actual;
+  PRBool          isMedia;
+  nsresult        rv;
+  PRBool          result = PR_TRUE;
+
+  rv = nsSMILTimeValueSpec::ParseClockValue(
+      NS_LITERAL_STRING("media"), &actual);
+  if (rv != NS_ERROR_FAILURE)
+  {
+    printf("  Error not thrown as expected for media value.\n");
+    result = PR_FALSE;
+  }
+  if (isMedia)
+  {
+    printf("  isMedia True when false expected.\n");
+    result = PR_FALSE;
+  }
+
+  rv = nsSMILTimeValueSpec::ParseClockValue(
+      NS_LITERAL_STRING(" media "), &actual, false, false, true, &isMedia);
+  if (!isMedia)
+  {
+    printf("  Media value not returned as expected.\n");
+    result = PR_FALSE;
+  }
+  if (rv != NS_OK)
+  {
+    printf("  Error return code for media value.\n");
+    result = PR_FALSE;
+  }
+
+  isMedia = PR_TRUE;
+  rv = nsSMILTimeValueSpec::ParseClockValue(
+      NS_LITERAL_STRING("not media"), &actual, false, false, true, &isMedia);
+  if (isMedia)
+  {
+    printf("  isMedia True when false expected for not media string.\n");
+    result = PR_FALSE;
+  }
+  if (rv != NS_ERROR_FAILURE)
+  {
+    printf("  Error not thrown for bad media string.\n");
+    result = PR_FALSE;
+  }
+
+  return result;
+}
+
+static PRBool
+TestSign()
+{
+  nsSMILTimeValue expected;
+  nsSMILTimeValue actual;
+  nsresult        rv;
+  PRBool          result = PR_TRUE;
+
+  rv = nsSMILTimeValueSpec::ParseClockValue(
+      NS_LITERAL_STRING("-3s"), &actual, false);
+  if (rv != NS_ERROR_FAILURE)
+  {
+    printf("  Error not thrown as expected for negative value.\n");
+    result = PR_FALSE;
+  }
+
+  rv = nsSMILTimeValueSpec::ParseClockValue(
+      NS_LITERAL_STRING("+3s"), &actual);
+  if (rv != NS_ERROR_FAILURE)
+  {
+    printf("  Error not thrown as expected for positive value.\n");
+    result = PR_FALSE;
+  }
+
+  expected.SetMilliseconds(-3000);
+  rv = nsSMILTimeValueSpec::ParseClockValue(
+      NS_LITERAL_STRING("-3s"), &actual, true);
+  if (!TimeValuesEqual(actual, expected))
+  {
+    printf("  Signed value not returned as expected.\n");
+    result = PR_FALSE;
+  }
+  if (rv != NS_OK)
+  {
+    printf("  Error return code for valid signed value.\n");
+    result = PR_FALSE;
+  }
+
+  expected.SetMilliseconds(3000);
+  rv = nsSMILTimeValueSpec::ParseClockValue(
+      NS_LITERAL_STRING(" 3s"), &actual, false);
+  if (!TimeValuesEqual(actual, expected))
+  {
+    printf("  Unsigned value not returned as expected.\n");
+    result = PR_FALSE;
+  }
+  if (rv != NS_OK)
+  {
+    printf("  Error return code for valid unsigned value.\n");
+    result = PR_FALSE;
+  }
+
+  return result;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Main
+
+int main(int argc, char** argv)
+{
+  PRBool result = PR_TRUE;
+
+  printf("TestTimeValueSpec:\n");
+
+  result &= TestFactoryMethod();
+  result &= TestAddInstance();
+  result &= TestOffset();
+  result &= TestIndefinite();
+  result &= TestMedia();
+  result &= TestSign();
+
+  if (result) printf("  All tests passed.\n");
+  return 0;
+}
Index: /cvsroot/mozilla/content/smil/src/tests/TestTimedElement.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/smil/src/tests/TestTimedElement.cpp
diff -N content/smil/src/tests/TestTimedElement.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/smil/src/tests/TestTimedElement.cpp	29 Aug 2005 09:47:16 -0000
@@ -0,0 +1,175 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *  Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "nsISMILTimedElement.h"
+#include "nsSMILTimeValue.h"
+#include "nsISMILTimeClient.h"
+#include "nsCOMPtr.h"
+#include "nsString.h"
+#include <stdio.h>
+
+class mock_nsSMILTimeClient : public nsISMILTimeClient
+{
+public:
+  mock_nsSMILTimeClient() : mLastSample(), mSampleCount(0) {}
+
+  NS_DECL_ISUPPORTS
+
+  virtual void      SampleAt(const PRInt64& simpleTime,
+                             const nsSMILTimeValue& simpleDuration)
+  {
+    mLastSample = simpleTime;
+    mSampleCount++;
+    mLastDuration = simpleDuration;
+  }
+
+  PRInt64         mLastSample;
+  PRInt8          mSampleCount;
+  nsSMILTimeValue mLastDuration;
+};
+
+NS_IMPL_ISUPPORTS1(mock_nsSMILTimeClient,
+                   nsISMILTimeClient)
+
+static PRBool
+TestFactoryMethod()
+{
+  nsISMILTimedElement* elem;
+
+  elem = NS_NewSMILTimedElement();
+
+  if (!elem)
+  {
+    printf("  Couldn't create new timed element.\n");
+    return PR_FALSE;
+  }
+
+  delete elem;
+
+  return PR_TRUE;
+}
+
+static PRBool
+CheckSample(nsISMILTimedElement* elem,
+            mock_nsSMILTimeClient* client,
+            PRInt32 documentTime,
+            PRInt32 expectedSimpleTime,
+            PRInt8 expectedSampleCount)
+{
+  PRInt64 documentTime64;
+  PRInt64 expected64;
+
+  LL_I2L(documentTime64, documentTime);
+  LL_I2L(expected64, expectedSimpleTime);
+
+  elem->SampleAt(documentTime64);
+  if (LL_NE(client->mLastSample, expected64))
+  {
+    printf("  Got unexpected sample time, expected %I64d, got %I64d.\n",
+        expected64, client->mLastSample);
+    return PR_FALSE;
+  }
+
+  if (client->mSampleCount != expectedSampleCount)
+  {
+    printf("  Got unexpected sample count, expected %d, got %d.\n",
+        expectedSampleCount, client->mSampleCount);
+  }
+
+  return PR_TRUE;
+}
+
+static PRBool
+TestOffsetStartup()
+{
+  PRBool result = PR_TRUE;
+
+  nsCOMPtr<nsISMILTimedElement> elem;
+  nsCOMPtr<mock_nsSMILTimeClient> client = new mock_nsSMILTimeClient();
+
+  elem = NS_NewSMILTimedElement();
+  elem->AddTimeClient(client);
+  elem->SetBeginSpec(NS_LITERAL_STRING("3s"));
+
+  result &= CheckSample(elem, client, 0, 0, 0);
+  result &= CheckSample(elem, client, 4000, 1000, 1);
+  result &= CheckSample(elem, client, 0, 1000, 1);
+
+  return result;
+}
+
+static PRBool
+TestMultipleBegins()
+{
+  PRBool result = PR_TRUE;
+
+  nsCOMPtr<nsISMILTimedElement> elem;
+  nsCOMPtr<mock_nsSMILTimeClient> client = new mock_nsSMILTimeClient();
+
+  elem = NS_NewSMILTimedElement();
+  elem->AddTimeClient(client);
+  elem->SetBeginSpec(NS_LITERAL_STRING("2s; 6s"));
+  elem->SetSimpleDuration(NS_LITERAL_STRING(" 1s"));
+
+  result &= CheckSample(elem, client, 0, 0, 0);
+  result &= CheckSample(elem, client, 2999, 999, 1);
+  result &= CheckSample(elem, client, 3000, 0, 1);
+  result &= CheckSample(elem, client, 6100, 100, 2);
+
+  return result;
+}
+
+int main(int argc, char** argv)
+{
+  PRBool result = PR_TRUE;
+
+  printf("TestTimedElement:\n");
+
+  // TODO: Must test that if the begin spec isn't specified that begin defaults
+  // to 0!!
+  // TODO: Test with blank strings
+  // TODO: Test with unicode
+  // TODO: Test with negative times etc.
+  result &= TestFactoryMethod();
+  result &= TestOffsetStartup();
+  result &= TestMultipleBegins();
+
+  if (result) printf("  All tests passed.\n");
+
+  return 0;
+}
Index: /cvsroot/mozilla/content/svg/content/src/Makefile.in
===================================================================
RCS file: /cvsroot/mozilla/content/svg/content/src/Makefile.in,v
retrieving revision 1.38
diff -u -r1.38 Makefile.in
--- /cvsroot/mozilla/content/svg/content/src/Makefile.in	26 Aug 2005 02:49:49 -0000	1.38
+++ /cvsroot/mozilla/content/svg/content/src/Makefile.in	29 Aug 2005 09:47:28 -0000
@@ -136,6 +136,10 @@
 CPPSRCS += nsSVGForeignObjectElement.cpp
 endif
 
+ifdef MOZ_SMIL
+CPPSRCS += nsSVGAnimateElement.cpp
+endif
+
 include $(topsrcdir)/config/config.mk
 
 # we don't want the shared lib, but we want to force the creation of a static lib.
@@ -178,3 +182,6 @@
 		$(NULL)
 
 DEFINES += -D_IMPL_NS_LAYOUT
+
+#CXXFLAGS	+= -P
+
Index: /cvsroot/mozilla/content/svg/content/src/nsISVGLength.h
===================================================================
RCS file: /cvsroot/mozilla/content/svg/content/src/nsISVGLength.h,v
retrieving revision 1.4
diff -u -r1.4 nsISVGLength.h
--- /cvsroot/mozilla/content/svg/content/src/nsISVGLength.h	5 Aug 2004 09:01:09 -0000	1.4
+++ /cvsroot/mozilla/content/svg/content/src/nsISVGLength.h	29 Aug 2005 09:47:29 -0000
@@ -42,6 +42,9 @@
 #include "nsIDOMSVGLength.h"
 
 class nsSVGCoordCtx;
+#ifdef MOZ_SMIL
+class nsISMILAnimatableValue;
+#endif // MOZ_SMIL
 
 ////////////////////////////////////////////////////////////////////////
 // nsISVGLength: private interface for svg lengths
@@ -55,7 +58,11 @@
 public:
   NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISVGLENGTH_IID)
 
-  NS_IMETHOD SetContext(nsSVGCoordCtx* ctx)=0;
+  NS_IMETHOD          SetContext(nsSVGCoordCtx* ctx)=0;
+#ifdef MOZ_SMIL
+  virtual nsresult    GetAnimValue(nsIDOMSVGLength** aResult)=0;
+  virtual nsresult    GetAnimatableValue(nsISMILAnimatableValue** aResult)=0;
+#endif // MOZ_SMIL
 };
 
 
Index: /cvsroot/mozilla/content/svg/content/src/nsISVGSVGElement.h
===================================================================
RCS file: /cvsroot/mozilla/content/svg/content/src/nsISVGSVGElement.h,v
retrieving revision 1.6
diff -u -r1.6 nsISVGSVGElement.h
--- /cvsroot/mozilla/content/svg/content/src/nsISVGSVGElement.h	25 Aug 2005 21:31:07 -0000	1.6
+++ /cvsroot/mozilla/content/svg/content/src/nsISVGSVGElement.h	29 Aug 2005 09:47:29 -0000
@@ -46,6 +46,9 @@
 class nsSVGCoordCtxProvider;
 class nsIDOMSVGNumber;
 class nsISVGEnum;
+#ifdef MOZ_SMIL
+class nsSMILTimedDocumentRoot;
+#endif
 
 ////////////////////////////////////////////////////////////////////////
 // nsISVGSVGElement: private interface implemented by <svg>-elements
@@ -89,6 +92,10 @@
   NS_IMETHOD_(float) GetPreviousScale()=0;
   NS_IMETHOD_(float) GetPreviousTranslate_x()=0;
   NS_IMETHOD_(float) GetPreviousTranslate_y()=0;
+  
+#ifdef MOZ_SMIL
+  virtual nsSMILTimedDocumentRoot* GetTimedDocumentRoot()=0;
+#endif
 };
 
 #endif // __NS_ISVGSVGELEMENT__
Index: /cvsroot/mozilla/content/svg/content/src/nsSVGAnimateElement.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/svg/content/src/nsSVGAnimateElement.cpp
diff -N content/svg/content/src/nsSVGAnimateElement.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/content/svg/content/src/nsSVGAnimateElement.cpp	29 Aug 2005 09:47:30 -0000
@@ -0,0 +1,455 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "nsSVGElement.h"
+#include "nsIDOMSVGAnimateElement.h"
+#include "nsSVGAtoms.h"
+#include "nsISVGSVGElement.h"
+#include "nsIBindingManager.h"
+#include "nsIDocument.h"
+#include "nsISMILTimedElement.h"
+#include "nsISMILAnimationElement.h"
+#include "nsISMILAnimatableElement.h"
+#include "nsSMILTimedDocumentRoot.h"
+#include "nsISMILTimeClient.h"
+
+typedef nsSVGElement nsSVGAnimateElementBase;
+
+class nsSVGAnimateElement : public nsSVGAnimateElementBase,
+                            public nsIDOMSVGAnimateElement
+                              // : nsIDOMSVGAnimationElement
+{
+protected:
+  friend nsresult NS_NewSVGAnimateElement(nsIContent **aResult,
+                                          nsINodeInfo *aNodeInfo);
+  nsSVGAnimateElement(nsINodeInfo* aNodeInfo);
+  nsresult Init();
+
+public:
+  // interfaces:
+  NS_DECL_ISUPPORTS_INHERITED
+  NS_DECL_NSIDOMSVGANIMATEELEMENT
+  NS_DECL_NSIDOMSVGANIMATIONELEMENT
+
+  NS_FORWARD_NSIDOMNODE_NO_CLONENODE(nsSVGAnimateElementBase::)
+  NS_FORWARD_NSIDOMELEMENT(nsSVGAnimateElementBase::)
+  NS_FORWARD_NSIDOMSVGELEMENT(nsSVGAnimateElementBase::)
+
+  // nsISVGContent specializations
+  virtual nsresult BindToTree(nsIDocument* aDocument, nsIContent* aParent,
+                              nsIContent* aBindingParent,
+                              PRBool aCompileEventHandlers);
+  virtual void UnbindFromTree(PRBool aDeep = PR_TRUE,
+                              PRBool aNullParent = PR_TRUE);
+
+  // nsIContent specializations
+  virtual nsresult SetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
+                           nsIAtom* aPrefix, const nsAString& aValue,
+                           PRBool aNotify);
+  virtual nsresult UnsetAttr(PRInt32 aNameSpaceID, nsIAtom* aAttribute,
+                             PRBool aNotify);
+
+protected:
+  // Implementation helpers
+  nsSMILTimedDocumentRoot*          GetDocumentRoot();
+  nsIContent*                       GetParentElement();
+  void                              UpdateTargetElement();
+  nsISMILAnimatableAttribute*       GetTargetAttribute();
+  void                              UpdateTargetAttribute();
+  void                              SetAnimationProperties();
+
+  nsWeakPtr                         mTargetElement;
+  nsRefPtr<nsISMILAnimationElement> mAnimation;
+  nsCOMPtr<nsISMILTimedElement>     mTimedElement;
+};
+
+NS_IMPL_NS_NEW_SVG_ELEMENT(Animate)
+
+
+//----------------------------------------------------------------------
+// nsISupports methods
+
+NS_IMPL_ADDREF_INHERITED(nsSVGAnimateElement,nsSVGAnimateElementBase)
+NS_IMPL_RELEASE_INHERITED(nsSVGAnimateElement,nsSVGAnimateElementBase)
+
+NS_INTERFACE_MAP_BEGIN(nsSVGAnimateElement)
+  NS_INTERFACE_MAP_ENTRY(nsIDOMNode)
+  NS_INTERFACE_MAP_ENTRY(nsIDOMElement)
+  NS_INTERFACE_MAP_ENTRY(nsIDOMSVGElement)
+  NS_INTERFACE_MAP_ENTRY(nsIDOMSVGAnimationElement)
+  NS_INTERFACE_MAP_ENTRY(nsIDOMSVGAnimateElement)
+  NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(SVGAnimateElement)
+NS_INTERFACE_MAP_END_INHERITING(nsSVGAnimateElementBase)
+
+//----------------------------------------------------------------------
+// Implementation
+
+nsSVGAnimateElement::nsSVGAnimateElement(nsINodeInfo *aNodeInfo)
+  : nsSVGAnimateElementBase(aNodeInfo)
+{
+}
+
+nsresult
+nsSVGAnimateElement::Init()
+{
+  mTimedElement = NS_NewSMILTimedElement();
+  mAnimation =    NS_NewSMILAnimationElement();
+
+  return (mTimedElement) ? NS_OK : NS_ERROR_FAILURE;
+}
+
+//----------------------------------------------------------------------
+// nsIDOMSVGAnimationElement methods
+
+/* readonly attribute SVGElement targetElement; */
+NS_IMETHODIMP nsSVGAnimateElement::GetTargetElement(nsIDOMSVGElement * *aTarget)
+{
+  if (mTargetElement)
+  {
+    nsCOMPtr<nsIDOMSVGElement> weakref = do_QueryReferent(mTargetElement);
+    if (*aTarget)
+      NS_RELEASE(*aTarget);
+    NS_IF_ADDREF(*aTarget = weakref);
+  }
+  return NS_OK;
+}
+
+NS_IMETHODIMP nsSVGAnimateElement::GetStartTime(float* retval)
+{
+  nsresult rv = NS_ERROR_FAILURE;
+
+  if (mTimedElement)
+  {
+    // TODO[3]: Fill this in
+    rv = NS_ERROR_NOT_IMPLEMENTED;
+  }
+
+  return rv;
+}
+
+NS_IMETHODIMP nsSVGAnimateElement::GetCurrentTime(float* retval)
+{
+  // TODO[3]: Query the time container
+  return NS_OK;
+}
+
+NS_IMETHODIMP nsSVGAnimateElement::GetSimpleDuration(float* retval)
+{
+  // TODO[3]: Query the timed element
+  return NS_OK;
+}
+
+
+//----------------------------------------------------------------------
+// nsIDOMNode methods
+
+NS_IMPL_DOM_CLONENODE_WITH_INIT(nsSVGAnimateElement)
+
+
+//----------------------------------------------------------------------
+// nsISVGContent methods
+
+nsresult nsSVGAnimateElement::BindToTree(nsIDocument* aDocument,
+                                         nsIContent* aParent,
+                                         nsIContent* aBindingParent,
+                                         PRBool aCompileEventHandlers)
+{
+  nsresult rv = nsSVGAnimateElementBase::BindToTree(aDocument, aParent,
+                                                    aBindingParent,
+                                                    aCompileEventHandlers);
+
+  if (NS_SUCCEEDED(rv))
+  {
+    UpdateTargetElement();
+
+    if (mTimedElement)
+    {
+
+      nsRefPtr<nsSMILTimedDocumentRoot> root = GetDocumentRoot();
+      if (root)
+        rv = root->AddTimedElement(mTimedElement);
+    }
+  }
+
+  return rv;
+}
+
+void nsSVGAnimateElement::UnbindFromTree(PRBool aDeep, PRBool aNullParent)
+{
+  if (mTimedElement)
+  {
+    nsRefPtr<nsSMILTimedDocumentRoot> root = GetDocumentRoot();
+    if (root)
+      root->RemoveTimedElement(mTimedElement);
+  }
+
+  nsSVGAnimateElementBase::UnbindFromTree(aDeep, aNullParent);
+
+  UpdateTargetElement();
+}
+
+//----------------------------------------------------------------------
+// nsIContent methods
+
+nsresult nsSVGAnimateElement::SetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
+                                      nsIAtom* aPrefix, const nsAString& aValue,
+                                      PRBool aNotify)
+{
+  nsresult rv = nsSVGAnimateElementBase::SetAttr(aNameSpaceID, aName, aPrefix,
+                                                 aValue, aNotify);
+  
+  // TODO[2]: Check namespaces
+
+  NS_ASSERTION(mTimedElement, "Unexpected NULL timed element.");
+
+  if (aName == nsSVGAtoms::attributeName)
+  {
+    UpdateTargetAttribute();
+    return rv;
+  }
+
+  if (mTimedElement)
+  {
+    if (aName == nsSVGAtoms::begin)
+    {
+      // TODO[3]: Error handling
+      rv = mTimedElement->SetBeginSpec(aValue);
+      NS_ENSURE_SUCCESS(rv,rv);
+    }
+    else if (aName == nsSVGAtoms::dur)
+    {
+      rv = mTimedElement->SetSimpleDuration(aValue);
+      NS_ENSURE_SUCCESS(rv,rv);
+    }
+    else if (aName == nsSVGAtoms::end)
+    {
+      rv = mTimedElement->SetEndSpec(aValue);
+      NS_ENSURE_SUCCESS(rv,rv);
+    }
+    return rv;
+  }
+
+  if (mAnimation && mAnimation->IsInitialised())
+  {
+    if (aName == nsSVGAtoms::from)
+    {
+      rv = mAnimation->SetFrom(aValue);
+      NS_ENSURE_SUCCESS(rv,rv);
+    }
+    else if (aName == nsSVGAtoms::to)
+    {
+      rv = mAnimation->SetTo(aValue);
+      NS_ENSURE_SUCCESS(rv,rv);
+    }
+    return rv;
+  }
+
+  return rv;
+}
+
+nsresult nsSVGAnimateElement::UnsetAttr(PRInt32 aNameSpaceID,
+                                        nsIAtom* aAttribute, PRBool aNotify)
+{
+  nsresult rv = nsSVGAnimateElementBase::UnsetAttr(aNameSpaceID, aAttribute,
+                                                   aNotify);
+  if (aAttribute == nsSVGAtoms::attributeName)
+    UpdateTargetAttribute();
+    // XXX Is unsetting the attribute name ever not an error?
+
+  // XXX have to deal with unsetting other stuff
+
+  return rv;
+}
+
+//----------------------------------------------------------------------
+// Implementation helpers
+
+nsSMILTimedDocumentRoot*
+nsSVGAnimateElement::GetDocumentRoot()
+{
+  nsSMILTimedDocumentRoot*      result = nsnull;
+  nsCOMPtr<nsIDOMSVGSVGElement> ownerDOMSVG;
+
+  nsresult rv = GetOwnerSVGElement(getter_AddRefs(ownerDOMSVG));
+
+  if (NS_SUCCEEDED(rv) && ownerDOMSVG)
+  {
+    nsCOMPtr<nsISVGSVGElement> ownerSVG( do_QueryInterface(ownerDOMSVG, &rv) );
+
+    if (ownerSVG)
+      result = ownerSVG->GetTimedDocumentRoot();
+  }
+
+  return result;
+}
+
+nsIContent*
+nsSVGAnimateElement::GetParentElement()
+{
+  nsIContent*         result = nsnull;
+  nsIBindingManager*  bindingManager = nsnull;
+  nsIDocument*        ownerDoc = GetOwnerDoc();
+
+  if (ownerDoc)
+    bindingManager = ownerDoc->BindingManager();
+
+  if (bindingManager)
+    // we have a binding manager -- do we have an anonymous parent?
+    bindingManager->GetInsertionParent(this, &result);
+
+  if (!result)
+    // if we didn't find an anonymous parent, use the explicit one,
+    // whether it's null or not...
+    result = GetParent();
+
+  return result;
+}
+
+void
+nsSVGAnimateElement::UpdateTargetElement()
+{
+  // TODO[2]: Follow xlink:href attributes when provided
+  
+  nsCOMPtr<nsIContent> target = GetParentElement();
+
+  if (target)
+  {
+    nsWeakPtr targetElement = do_GetWeakReference(target);
+    if (targetElement && mTargetElement != targetElement)
+    {
+      mTargetElement = targetElement;
+      UpdateTargetAttribute();
+    }
+  }
+  else
+  {
+    mTargetElement = nsnull;
+    mAnimation = nsnull;
+  }
+}
+
+nsISMILAnimatableAttribute*
+nsSVGAnimateElement::GetTargetAttribute()
+{
+  nsISMILAnimatableAttribute* result = nsnull;
+
+  if (mTargetElement)
+  {
+    nsAutoString attributeName;
+
+    GetAttr(kNameSpaceID_None, nsSVGAtoms::attributeName, attributeName);
+
+    nsCOMPtr<nsIAtom> attributeAtom( do_GetAtom(attributeName) );
+    nsCOMPtr<nsISMILAnimatableElement> 
+      targetElement(do_QueryReferent(mTargetElement));
+
+    if (targetElement && attributeAtom)
+    {
+      result = 
+        targetElement->GetAnimatableAttribute(kNameSpaceID_None, attributeAtom);
+    }
+  }
+
+  return result;
+}
+
+void
+nsSVGAnimateElement::UpdateTargetAttribute()
+{
+  // TODO[2]: Implement XML vs CSS vs auto attribute types
+  
+  if (mTargetElement)
+  {
+    nsCOMPtr<nsISMILAnimatableAttribute> targetAttribute = GetTargetAttribute();
+
+    if (targetAttribute)
+    {
+      if (!mAnimation)
+        mAnimation = NS_NewSMILAnimationElement();
+
+      mAnimation->Init(*targetAttribute);
+
+      SetAnimationProperties();
+
+      nsCOMPtr<nsISMILTimeClient> timeClient( do_QueryInterface(mAnimation) );
+      if (timeClient && mTimedElement)
+        mTimedElement->AddTimeClient(timeClient);
+
+      // TODO[1]: Register with the compositor
+    }
+    else
+    {
+      // TODO[3]: Attribute doesn't exist or it isn't animatable, mark document
+      // in error
+      // (if necessary, we might re-arrange the GetTargetAttribute method so we
+      // can produce separate errors for when the element is not animatable and
+      // when the attribute can't be found or isn't animatable)
+    }
+  }
+  /* else: We may still be loading, ignore for now. This will be called again
+   * when our parent changes. */
+}
+
+/*
+ * After re-initialising an animation element with a new target attribute, it is
+ * necessary to reset all the properties for that element. That is because the
+ * animation element needs to know the type of the target attribute so it knows
+ * how to interpret the value specifications it is given as "from", "to" etc.
+ * parameters.
+ */
+void
+nsSVGAnimateElement::SetAnimationProperties()
+{
+  nsAutoString result;
+
+  NS_ASSERTION(mAnimation, "Animation not created");
+  NS_ASSERTION(mAnimation->IsInitialised(), "Animation not initialised");
+
+  if (mAnimation && mAnimation->IsInitialised())
+  {
+    if (HasAttr(kNameSpaceID_None, nsSVGAtoms::from))
+    {
+      if (NS_SUCCEEDED(GetAttr(kNameSpaceID_None, nsSVGAtoms::from,
+                               result)))
+        mAnimation->SetFrom(result);
+    }
+
+    if (HasAttr(kNameSpaceID_None, nsSVGAtoms::to))
+    {
+      if (NS_SUCCEEDED(GetAttr(kNameSpaceID_None, nsSVGAtoms::to,
+                               result)))
+        mAnimation->SetTo(result);
+    }
+  }
+}
+
Index: /cvsroot/mozilla/content/svg/content/src/nsSVGAnimatedLength.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/svg/content/src/nsSVGAnimatedLength.cpp,v
retrieving revision 1.8
diff -u -r1.8 nsSVGAnimatedLength.cpp
--- /cvsroot/mozilla/content/svg/content/src/nsSVGAnimatedLength.cpp	31 Jan 2005 19:45:10 -0000	1.8
+++ /cvsroot/mozilla/content/svg/content/src/nsSVGAnimatedLength.cpp	29 Aug 2005 09:47:30 -0000
@@ -41,6 +41,11 @@
 #include "nsSVGAnimatedLength.h"
 #include "nsSVGLength.h"
 #include "nsContentUtils.h"
+#ifdef MOZ_SMIL
+#include "nsISMILAnimatableValue.h"
+#include "nsISMILAnimatableAttribute.h"
+#include "nsISMILAnimatableValueFactory.h"
+#endif // MOZ_SMIL
 
 
 ////////////////////////////////////////////////////////////////////////
@@ -49,6 +54,10 @@
 class nsSVGAnimatedLength : public nsIDOMSVGAnimatedLength,
                             public nsSVGValue,
                             public nsISVGValueObserver,
+#ifdef MOZ_SMIL
+                            public nsISMILAnimatableAttribute,
+                            public nsISMILAnimatableValueFactory,
+#endif // MOZ_SMIL
                             public nsSupportsWeakReference
 {
 protected:
@@ -74,12 +83,28 @@
                                      modificationType aModType);
   NS_IMETHOD DidModifySVGObservable (nsISVGValue* observable,
                                      modificationType aModType);
+
+#ifdef MOZ_SMIL
+  // nsISMILAnimatableAttribute
+  virtual nsISMILAnimatableValue* GetBaseValue();
+  virtual nsISMILAnimatableValue* GetAnimValue();
+  virtual nsresult SetAnimValue(nsISMILAnimatableValue& aValue);
+
+  // nsISMILAnimatableValueFactory
+  virtual nsresult  Create(nsISMILAnimatableValue** aResult) const;
+  virtual nsresult  CreateFromSpec(const nsAString& aSpec,
+                                   nsISMILAnimatableValue** aResult,
+                                   PRBool& aIsAddable) const;
+#endif // MOZ_SMIL
   
   // nsISupportsWeakReference
   // implementation inherited from nsSupportsWeakReference
   
 protected:
   nsCOMPtr<nsIDOMSVGLength> mBaseVal;
+#ifdef MOZ_SMIL
+  nsCOMPtr<nsIDOMSVGLength> mAnimVal;
+#endif // MOZ_SMIL
 };
 
 
@@ -102,8 +127,8 @@
 void
 nsSVGAnimatedLength::Init(nsIDOMSVGLength* baseVal)
 {
+  if (!baseVal) return;
   mBaseVal = baseVal;
-  if (!mBaseVal) return;
   nsCOMPtr<nsISVGValue> val = do_QueryInterface(mBaseVal);
   NS_ASSERTION(val, "baseval needs to implement nsISVGValue interface");
   if (!val) return;
@@ -122,6 +147,10 @@
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGAnimatedLength)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
+#ifdef MOZ_SMIL
+  NS_INTERFACE_MAP_ENTRY(nsISMILAnimatableAttribute)
+  NS_INTERFACE_MAP_ENTRY(nsISMILAnimatableValueFactory)
+#endif // MOZ_SMIL
   NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(SVGAnimatedLength)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISVGValue)
 NS_INTERFACE_MAP_END
@@ -159,8 +188,22 @@
 NS_IMETHODIMP
 nsSVGAnimatedLength::GetAnimVal(nsIDOMSVGLength * *aAnimVal)
 {
+#ifndef MOZ_SMIL
   *aAnimVal = mBaseVal;
   NS_ADDREF(*aAnimVal);
+#else
+  nsresult rv = NS_OK;
+
+  if (!mAnimVal && mBaseVal)
+  {
+    nsCOMPtr<nsISVGLength> length( do_QueryInterface(mBaseVal) );
+    if (length)
+      rv = length->GetAnimValue(getter_AddRefs(mAnimVal));
+  }
+
+  NS_IF_ADDREF(*aAnimVal = mAnimVal);
+#endif // MOZ_SMIL
+
   return NS_OK;
 }
 
@@ -183,6 +226,108 @@
   return NS_OK;
 }
 
+#ifdef MOZ_SMIL
+//----------------------------------------------------------------------
+// nsISMILAnimatableAttribute methods
+
+// TODO[1]: Remove if we don't need it
+nsISMILAnimatableValue*
+nsSVGAnimatedLength::GetBaseValue()
+{
+  nsISMILAnimatableValue *result;
+  nsresult rv = mBaseVal->QueryInterface(NS_GET_IID(nsISMILAnimatableValue),
+                                         (void**)&result);
+  return result;
+}
+
+nsISMILAnimatableValue*
+nsSVGAnimatedLength::GetAnimValue()
+{
+  if (!mAnimVal)
+  {
+    nsCOMPtr<nsISVGLength> length( do_QueryInterface(mBaseVal) );
+    if (length)
+      length->GetAnimValue(getter_AddRefs(mAnimVal));
+  }
+
+  nsISMILAnimatableValue* result = nsnull;
+
+  if (mAnimVal)
+    nsresult rv = mAnimVal->QueryInterface(NS_GET_IID(nsISMILAnimatableValue),
+                                           (void**)&result);
+  return result;
+}
+
+nsresult
+nsSVGAnimatedLength::SetAnimValue(nsISMILAnimatableValue& aValue)
+{
+  // TODO[1]: Check for equality before assigning
+  WillModify(mod_other);
+  nsCOMPtr<nsISMILAnimatableValue> animLength( do_QueryInterface(mAnimVal) );
+  animLength->Set(aValue);
+  DidModify(mod_other);
+
+  return NS_OK;
+}
+
+//----------------------------------------------------------------------
+// nsISMILAnimatableValueFactory methods
+
+nsresult
+nsSVGAnimatedLength::Create(nsISMILAnimatableValue** aResult) const
+{
+  nsISVGLength* length = nsnull;
+  nsISMILAnimatableValue* result = nsnull;
+
+  nsresult rv = NS_NewSVGLength(&length);
+
+  if (NS_SUCCEEDED(rv) && length)
+    rv = length->GetAnimatableValue(&result);
+  else
+    result = nsnull;
+
+  NS_IF_RELEASE(length);
+
+  // GetAnimatableValue will add ref
+  *aResult = result;
+
+  return rv;
+}
+
+nsresult
+nsSVGAnimatedLength::CreateFromSpec(const nsAString& aSpec,
+                                    nsISMILAnimatableValue** aResult,
+                                    PRBool& aIsAddable) const
+{
+  NS_ASSERTION(aResult, "NULL pointer provided for storing new value.");
+
+  if (!aResult)
+    return NS_ERROR_NULL_POINTER;
+  
+  // All length syntaxes are additive
+  aIsAddable = true;
+  *aResult = nsnull;
+  
+  // TODO[2] The syntax for numbers differs between XML attributes and CSS
+  // properties. Does the "attributeType" property affect this?
+
+  nsCOMPtr<nsISVGLength> length;
+
+  nsresult rv = NS_NewSVGLength(getter_AddRefs(length), aSpec);
+  NS_ENSURE_SUCCESS(rv,rv);
+
+  rv = length->ConvertToSpecifiedUnits(nsIDOMSVGLength::SVG_LENGTHTYPE_NUMBER);
+  NS_ENSURE_SUCCESS(rv,rv);
+
+  rv = length->GetAnimatableValue(aResult);
+  NS_ENSURE_SUCCESS(rv,rv);
+
+  // GetAnimatableValue will add ref
+
+  return rv;
+}
+#endif // MOZ_SMIL
+
 ////////////////////////////////////////////////////////////////////////
 // Exported creation functions
 
Index: /cvsroot/mozilla/content/svg/content/src/nsSVGAtomList.h
===================================================================
RCS file: /cvsroot/mozilla/content/svg/content/src/nsSVGAtomList.h,v
retrieving revision 1.24
diff -u -r1.24 nsSVGAtomList.h
--- /cvsroot/mozilla/content/svg/content/src/nsSVGAtomList.h	26 Aug 2005 02:49:49 -0000	1.24
+++ /cvsroot/mozilla/content/svg/content/src/nsSVGAtomList.h	29 Aug 2005 09:47:31 -0000
@@ -55,6 +55,9 @@
  ******/
 
 // tags
+#ifdef MOZ_SMIL
+SVG_ATOM(animate, "animate")
+#endif
 SVG_ATOM(circle, "circle")
 SVG_ATOM(clipPath, "clipPath")
 SVG_ATOM(defs, "defs")
@@ -207,6 +210,29 @@
 SVG_ATOM(y1, "y1")
 SVG_ATOM(y2, "y2")
 SVG_ATOM(zoomAndPan, "zoomAndPan")
+
+// SMIL properties (to be integrated with the others later)
+#ifdef MOZ_SMIL
+SVG_ATOM(accumulate, "accumulate")
+SVG_ATOM(additive, "additive")
+SVG_ATOM(attributeName, "attributeName")
+SVG_ATOM(attributeType, "attributeType")
+SVG_ATOM(begin, "begin")
+SVG_ATOM(by, "by")
+SVG_ATOM(calcMode, "calcMode")
+SVG_ATOM(dur, "dur")
+SVG_ATOM(end, "end")
+SVG_ATOM(from, "from")
+SVG_ATOM(keySplines, "keySplines")
+SVG_ATOM(keyTimes, "keyTimes")
+SVG_ATOM(max, "max")
+SVG_ATOM(min, "min")
+SVG_ATOM(repeatCount, "repeatCount")
+SVG_ATOM(repeatDur, "repeatDur")
+SVG_ATOM(restart, "restart")
+SVG_ATOM(to, "to")
+SVG_ATOM(values, "values")
+#endif
   
 // transformation keywords
 SVG_ATOM(matrix, "matrix")
Index: /cvsroot/mozilla/content/svg/content/src/nsSVGElement.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/svg/content/src/nsSVGElement.cpp,v
retrieving revision 1.80
diff -u -r1.80 nsSVGElement.cpp
--- /cvsroot/mozilla/content/svg/content/src/nsSVGElement.cpp	25 Aug 2005 21:31:07 -0000	1.80
+++ /cvsroot/mozilla/content/svg/content/src/nsSVGElement.cpp	29 Aug 2005 09:47:33 -0000
@@ -92,6 +92,9 @@
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
   NS_INTERFACE_MAP_ENTRY(nsISVGContent)
+#ifdef MOZ_SMIL
+  NS_INTERFACE_MAP_ENTRY(nsISMILAnimatableElement)
+#endif // MOZ_SMIL
 // provided by nsGenericElement:
 //  NS_INTERFACE_MAP_ENTRY(nsIStyledContent)
 //  NS_INTERFACE_MAP_ENTRY(nsIContent)
@@ -213,7 +216,10 @@
       attrValue.SetTo(proxy);
     }
     else {
-      attrValue.SetTo(svg_value);
+      // We don't want to continue on and call SetAttrAndNotify, as
+      // the SVGValue has already done that for us.  Returning early
+      // is safe as no event attributes are also SVGValues.
+      return NS_OK;
     }
   }
   else if (aName == nsSVGAtoms::style && aNamespaceID == kNameSpaceID_None) {
@@ -872,3 +878,24 @@
 
   return aAttr;
 }
+
+#ifdef MOZ_SMIL
+//----------------------------------------------------------------------
+// nsISVGAnimationTarget methods
+
+// This should be overridden as necessary, e.g. to ensure some attributes are
+// not animatable
+
+nsISMILAnimatableAttribute*
+nsSVGElement::GetAnimatableAttribute(PRInt32 aNamespaceID,
+                                         nsIAtom* aName)
+{
+  nsCOMPtr<nsISMILAnimatableAttribute> result;
+  nsCOMPtr<nsISVGValue> attr = GetMappedAttribute(aNamespaceID, aName);
+
+  if (attr != nsnull)
+    result = do_QueryInterface(attr);
+
+  return result;
+}
+#endif // MOZ_SMIL
\ No newline at end of file
Index: /cvsroot/mozilla/content/svg/content/src/nsSVGElement.h
===================================================================
RCS file: /cvsroot/mozilla/content/svg/content/src/nsSVGElement.h,v
retrieving revision 1.47
diff -u -r1.47 nsSVGElement.h
--- /cvsroot/mozilla/content/svg/content/src/nsSVGElement.h	25 Aug 2005 21:57:31 -0000	1.47
+++ /cvsroot/mozilla/content/svg/content/src/nsSVGElement.h	29 Aug 2005 09:47:34 -0000
@@ -53,10 +53,16 @@
 #include "nsWeakReference.h"
 #include "nsISVGContent.h"
 #include "nsICSSStyleRule.h"
+#ifdef MOZ_SMIL
+#include "nsISMILAnimatableElement.h"
+#endif // MOZ_SMIL
 
 class nsSVGElement : public nsGenericElement,    // :nsIXMLContent:nsIStyledContent:nsIContent
                      public nsISVGValueObserver, 
                      public nsSupportsWeakReference, // :nsISupportsWeakReference
+#ifdef MOZ_SMIL
+                     public nsISMILAnimatableElement,
+#endif // MOZ_SMIL
                      public nsISVGContent
 {
 protected:
@@ -122,6 +128,12 @@
 
   // nsISVGContent
   virtual void ParentChainChanged(); 
+
+#ifdef MOZ_SMIL
+  // nsISVGAnimationTarget
+  virtual nsISMILAnimatableAttribute*
+  GetAnimatableAttribute(PRInt32 aNamespaceID, nsIAtom* aName);
+#endif // MOZ_SMIL
   
 protected:
   // Hooks for subclasses
Index: /cvsroot/mozilla/content/svg/content/src/nsSVGElementFactory.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/svg/content/src/nsSVGElementFactory.cpp,v
retrieving revision 1.26
diff -u -r1.26 nsSVGElementFactory.cpp
--- /cvsroot/mozilla/content/svg/content/src/nsSVGElementFactory.cpp	26 Aug 2005 02:49:49 -0000	1.26
+++ /cvsroot/mozilla/content/svg/content/src/nsSVGElementFactory.cpp	29 Aug 2005 09:47:34 -0000
@@ -100,6 +100,10 @@
 NS_NewSVGClipPathElement(nsIContent **aResult, nsINodeInfo *aNodeInfo);
 nsresult
 NS_NewSVGTextPathElement(nsIContent **aResult, nsINodeInfo *aNodeInfo);
+#ifdef MOZ_SMIL
+nsresult
+NS_NewSVGAnimateElement(nsIContent **aResult, nsINodeInfo *aNodeInfo);
+#endif // MOZ_SMIL
 
 static PRBool gSVGEnabled;
 static const char SVG_PREF_STR[] = "svg.enabled";
@@ -205,6 +209,10 @@
     return NS_NewSVGClipPathElement(aResult, aNodeInfo);
   if (name == nsSVGAtoms::textPath)
     return NS_NewSVGTextPathElement(aResult, aNodeInfo);
+#ifdef MOZ_SMIL
+  if (name == nsSVGAtoms::animate)
+    return NS_NewSVGAnimateElement(aResult, aNodeInfo);
+#endif // MOZ_SMIL
 
   // if we don't know what to create, just create a standard xml element:
   return NS_NewXMLElement(aResult, aNodeInfo);
Index: /cvsroot/mozilla/content/svg/content/src/nsSVGLength.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/svg/content/src/nsSVGLength.cpp,v
retrieving revision 1.21
diff -u -r1.21 nsSVGLength.cpp
--- /cvsroot/mozilla/content/svg/content/src/nsSVGLength.cpp	9 Aug 2005 13:53:00 -0000	1.21
+++ /cvsroot/mozilla/content/svg/content/src/nsSVGLength.cpp	29 Aug 2005 09:47:36 -0000
@@ -49,10 +49,18 @@
 #include "nsISVGValueUtils.h"
 #include "nsWeakReference.h"
 #include "nsContentUtils.h"
+#ifdef MOZ_SMIL
+#include "nsISMILAnimatableValue.h"
+#include "nsDOMError.h"
+#endif // MOZ_SMIL
 
 ////////////////////////////////////////////////////////////////////////
 // nsSVGLength class
 
+#ifdef MOZ_SMIL
+class nsSVGLength__Anim__;
+#endif // MOZ_SMIL
+
 class nsSVGLength : public nsISVGLength,
                     public nsSVGValue,
                     public nsISVGValueObserver,
@@ -79,6 +87,10 @@
 
   // nsISVGLength interface:
   NS_IMETHOD SetContext(nsSVGCoordCtx* context);
+#ifdef MOZ_SMIL
+  virtual nsresult      GetAnimValue(nsIDOMSVGLength** aResult);
+  virtual nsresult      GetAnimatableValue(nsISMILAnimatableValue** aResult);
+#endif // MOZ_SMIL
   
   // nsISVGValue interface:
   NS_IMETHOD SetValueString(const nsAString& aValue);
@@ -104,8 +116,60 @@
   float mValueInSpecifiedUnits;
   PRUint16 mSpecifiedUnitType;
   nsRefPtr<nsSVGCoordCtx> mContext;
+#ifdef MOZ_SMIL
+  nsWeakPtr               mAnimValue;
+#endif // MOZ_SMIL
 };
 
+#ifdef MOZ_SMIL
+class nsSVGLength__Anim__ : public nsISVGLength,
+                            public nsSVGValue,
+                            public nsISVGValueObserver,
+                            public nsISMILAnimatableValue,
+                            public nsSupportsWeakReference
+{
+public:
+  nsSVGLength__Anim__(nsSVGLength& aSource);
+
+  // nsISupports interface:
+  NS_DECL_ISUPPORTS
+
+  // nsIDOMSVGLength interface:
+  NS_DECL_NSIDOMSVGLENGTH
+  
+  // nsISMILAnimatableValue interface:
+  virtual void      ComputeDistance(const nsISMILAnimatableValue& aFrom,
+                                    const nsISMILAnimatableValue& aTo,
+                                    PRFloat64& aDistance) const;
+
+  virtual nsresult  Interpolate(nsISMILAnimatableValue& aEndValue,
+                                float aUnitDistance,
+                                nsISMILAnimatableValue* aResult);
+
+  virtual void      Accumulate(const nsISMILAnimatableValue& aAddedValue);
+  virtual void      Set(const nsISMILAnimatableValue& aNewValue);
+
+  // nsISVGLength interface:
+  NS_IMETHOD SetContext(nsSVGCoordCtx* context);
+  virtual nsresult      GetAnimValue(nsIDOMSVGLength** aResult);
+  virtual nsresult      GetAnimatableValue(nsISMILAnimatableValue** aResult);
+
+  // nsISVGValue interface:
+  NS_IMETHOD SetValueString(const nsAString& aValue);
+  NS_IMETHOD GetValueString(nsAString& aValue);
+
+  // nsISVGValueObserver interface:
+  NS_IMETHOD WillModifySVGObservable(nsISVGValue* observable,
+                                     modificationType aModType);
+  NS_IMETHOD DidModifySVGObservable (nsISVGValue* observable,
+                                     modificationType aModType);
+
+protected:
+  float                 mCanonicalValue;
+  nsRefPtr<nsSVGLength> mBase;
+  PRPackedBool          mIsAnimated:1;
+};
+#endif // MOZ_SMIL
 
 //----------------------------------------------------------------------
 // Implementation
@@ -529,6 +593,64 @@
   return NS_OK;
 }
 
+#ifdef MOZ_SMIL
+nsresult
+nsSVGLength::GetAnimValue(nsIDOMSVGLength** aResult)
+{
+  nsIDOMSVGLength* result = nsnull;
+  nsresult rv;
+
+  NS_ASSERTION(aResult, "Pointer for storing result is NULL.");
+
+  if (!aResult)
+    return NS_ERROR_NULL_POINTER;
+
+  if (!mAnimValue)
+  {
+    nsSVGLength__Anim__* animValue = new nsSVGLength__Anim__(*this);
+    if (!animValue)
+    {
+      rv = NS_ERROR_OUT_OF_MEMORY;
+    }
+    else
+    {
+      result = NS_STATIC_CAST(nsIDOMSVGLength*, animValue);
+      result->AddRef();
+      mAnimValue = 
+        do_GetWeakReference(NS_STATIC_CAST(nsIDOMSVGLength*, animValue));
+    }
+  }
+  else
+  {
+    CallQueryReferent(mAnimValue.get(), &result);
+  }
+
+  *aResult = result;
+
+  return rv;
+}
+
+nsresult
+nsSVGLength::GetAnimatableValue(nsISMILAnimatableValue** aResult)
+{
+  NS_ASSERTION(aResult, "NULL parameter passed for storing result");
+
+  if (!aResult)
+    return NS_ERROR_NULL_POINTER;
+
+  *aResult = nsnull;
+
+  nsIDOMSVGLength* length;
+  nsresult rv = GetAnimValue(&length);
+
+  if (NS_SUCCEEDED(rv) && length)
+    CallQueryInterface(length, aResult);
+
+  // GetAnimValue() will addref
+
+  return rv;
+}
+#endif // MOZ_SMIL
 
 //----------------------------------------------------------------------
 // Implementation helpers:
@@ -596,3 +718,314 @@
   }
 }
 
+#ifdef MOZ_SMIL
+//----------------------------------------------------------------------
+// nsSVGLength__Anim__
+
+nsSVGLength__Anim__::nsSVGLength__Anim__(nsSVGLength& aSource)
+  : mCanonicalValue(0.0f),
+    mBase(&aSource),
+    mIsAnimated(PR_FALSE)
+{
+}
+
+//----------------------------------------------------------------------
+// nsSVGLength__Anim__::nsISupports
+
+NS_IMPL_ADDREF(nsSVGLength__Anim__)
+NS_IMPL_RELEASE(nsSVGLength__Anim__)
+
+NS_INTERFACE_MAP_BEGIN(nsSVGLength__Anim__)
+  NS_INTERFACE_MAP_ENTRY(nsISVGValue)
+  NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
+  NS_INTERFACE_MAP_ENTRY(nsISVGLength)
+  NS_INTERFACE_MAP_ENTRY(nsIDOMSVGLength)
+  NS_INTERFACE_MAP_ENTRY(nsISMILAnimatableValue)
+  NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
+  NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(SVGLength)
+  NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISVGValue)
+NS_INTERFACE_MAP_END
+
+//----------------------------------------------------------------------
+// nsSVGLength__Anim__::nsIDOMSVGLength
+
+NS_IMETHODIMP
+nsSVGLength__Anim__::GetUnitType(PRUint16 *aUnitType)
+{
+  return mBase->GetUnitType(aUnitType);
+}
+
+NS_IMETHODIMP
+nsSVGLength__Anim__::GetValue(float *aValue)
+{
+  if (mIsAnimated)
+  {
+    *aValue = mCanonicalValue;
+    return NS_OK;
+  }
+  else
+  {
+    return mBase->GetValue(aValue);
+  }
+}
+
+NS_IMETHODIMP
+nsSVGLength__Anim__::SetValue(float aValue)
+{
+  if (mIsAnimated)
+  {
+    return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR;
+  }
+  else
+  {
+    WillModify();
+    return mBase->SetValue(aValue);
+    DidModify();
+  }
+}
+
+NS_IMETHODIMP
+nsSVGLength__Anim__::GetValueInSpecifiedUnits(float *aValueInSpecifiedUnits)
+{
+  if (mIsAnimated)
+    return NS_ERROR_NOT_IMPLEMENTED; // TODO
+  else
+    return mBase->GetValueInSpecifiedUnits(aValueInSpecifiedUnits);
+}
+
+NS_IMETHODIMP
+nsSVGLength__Anim__::SetValueInSpecifiedUnits(float aValueInSpecifiedUnits)
+{
+  if (mIsAnimated)
+  {
+    return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR;
+  }
+  else
+  {
+    WillModify();
+    return mBase->SetValueInSpecifiedUnits(aValueInSpecifiedUnits);
+    DidModify();
+  }
+}
+
+NS_IMETHODIMP
+nsSVGLength__Anim__::GetValueAsString(nsAString & aValueAsString)
+{
+  if (mIsAnimated)
+    return NS_ERROR_NOT_IMPLEMENTED; // TODO
+  else
+    return mBase->GetValueAsString(aValueAsString);
+}
+
+NS_IMETHODIMP
+nsSVGLength__Anim__::SetValueAsString(const nsAString & aValueAsString)
+{
+  if (mIsAnimated)
+  {
+    return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR;
+  }
+  else
+  {
+    WillModify();
+    return mBase->SetValueAsString(aValueAsString);
+    DidModify();
+  }
+}
+
+NS_IMETHODIMP
+nsSVGLength__Anim__::NewValueSpecifiedUnits(PRUint16 unitType, float valueInSpecifiedUnits)
+{
+  if (mIsAnimated)
+  {
+    return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR;
+  }
+  else
+  {
+    WillModify();
+    return mBase->NewValueSpecifiedUnits(unitType, valueInSpecifiedUnits);
+    DidModify();
+  }
+}
+
+NS_IMETHODIMP
+nsSVGLength__Anim__::ConvertToSpecifiedUnits(PRUint16 unitType)
+{
+  if (mIsAnimated)
+  {
+    return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR;
+  }
+  else
+  {
+    WillModify();
+    return mBase->ConvertToSpecifiedUnits(unitType);
+    DidModify();
+  }
+}
+
+NS_IMETHODIMP
+nsSVGLength__Anim__::GetTransformedValue(nsIDOMSVGMatrix *matrix,
+                                 float *_retval)
+{
+  if (mIsAnimated)
+    return NS_ERROR_NOT_IMPLEMENTED; // TODO
+  else
+    return mBase->GetTransformedValue(matrix, _retval);
+}
+
+//----------------------------------------------------------------------
+// nsSVGLength__Anim__::nsISMILAnimatableValue
+  
+void
+nsSVGLength__Anim__::ComputeDistance(const nsISMILAnimatableValue& aFrom,
+                                     const nsISMILAnimatableValue& aTo,
+                                     PRFloat64& aDistance) const
+{
+  // TODO[3]
+}
+
+nsresult
+nsSVGLength__Anim__::Interpolate(nsISMILAnimatableValue& aEndValue,
+                                 float aUnitDistance,
+                                 nsISMILAnimatableValue* aResult)
+{
+  NS_ASSERTION(aResult, "NULL result parameter passed to Interpolate");
+
+  if (!aResult)
+    return NS_ERROR_NULL_POINTER;
+
+  nsSVGLength__Anim__* end = 
+    NS_STATIC_CAST(nsSVGLength__Anim__*, &aEndValue);
+  if (!end)
+    return NS_ERROR_FAILURE;
+
+  nsSVGLength__Anim__* length =
+    NS_STATIC_CAST(nsSVGLength__Anim__*, aResult);
+  if (!length)
+    return NS_ERROR_FAILURE;
+
+  nsresult rv = NS_OK;
+
+  float startVal;
+  rv = GetValue(&startVal);
+  NS_ENSURE_SUCCESS(rv,rv);
+
+  float endVal;
+  rv = end->GetValue(&endVal);
+  NS_ENSURE_SUCCESS(rv,rv);
+
+  length->mCanonicalValue =
+    (startVal + (endVal - startVal) * aUnitDistance);
+  length->mIsAnimated = PR_TRUE;
+
+  return NS_OK;
+}
+
+void
+nsSVGLength__Anim__::Accumulate(const nsISMILAnimatableValue& aAddedValue)
+{
+  // TODO[2]
+}
+
+void
+nsSVGLength__Anim__::Set(const nsISMILAnimatableValue& aNewValue)
+{
+  const nsSVGLength__Anim__* length = 
+    NS_STATIC_CAST(const nsSVGLength__Anim__*, &aNewValue);
+
+  if (length)
+  {
+    WillModify();
+    mCanonicalValue = length->mCanonicalValue;
+    mIsAnimated = PR_TRUE;
+    DidModify();
+  }
+}
+
+//----------------------------------------------------------------------
+// nsSVGLength__Anim__::nsISVGLength
+
+NS_IMETHODIMP
+nsSVGLength__Anim__::SetContext(nsSVGCoordCtx* context)
+{
+  WillModify();
+  nsresult rv = mBase->SetContext(context);
+  DidModify();
+  return rv;
+  // TODO[2]: Update stuff
+}
+
+nsresult
+nsSVGLength__Anim__::GetAnimValue(nsIDOMSVGLength** aResult)
+{
+  if (aResult)
+  {
+    NS_ADDREF(*aResult = this);
+    return NS_OK;
+  }
+  else
+  {
+    return NS_ERROR_NULL_POINTER;
+  }
+}
+
+nsresult
+nsSVGLength__Anim__::GetAnimatableValue(nsISMILAnimatableValue** aResult)
+{
+  if (aResult)
+  {
+    NS_ADDREF(*aResult = this);
+    return NS_OK;
+  }
+  else
+  {
+    return NS_ERROR_NULL_POINTER;
+  }
+}
+
+//----------------------------------------------------------------------
+// nsSVGLength__Anim__::nsISVGValue
+
+NS_IMETHODIMP
+nsSVGLength__Anim__::SetValueString(const nsAString& aValue)
+{
+  if (mIsAnimated)
+  {
+    return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR;
+  }
+  else
+  {
+    WillModify();
+    return mBase->SetValueString(aValue);
+    DidModify();
+  }
+}
+
+NS_IMETHODIMP
+nsSVGLength__Anim__::GetValueString(nsAString& aValue)
+{
+  if (mIsAnimated)
+    return NS_ERROR_NOT_IMPLEMENTED; // TODO
+  else
+    return mBase->GetValueString(aValue);
+}
+
+//----------------------------------------------------------------------
+// nsSVGLength__Anim__::nsISVGValueObserver
+
+NS_IMETHODIMP
+nsSVGLength__Anim__::WillModifySVGObservable(nsISVGValue* observable,
+                                     modificationType aModType)
+{
+  WillModify(aModType);
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsSVGLength__Anim__::DidModifySVGObservable(nsISVGValue* observable,
+                                    modificationType aModType)
+{
+  DidModify(aModType);
+  return NS_OK;
+}
+#endif // MOZ_SMIL
+
Index: /cvsroot/mozilla/content/svg/content/src/nsSVGSVGElement.cpp
===================================================================
RCS file: /cvsroot/mozilla/content/svg/content/src/nsSVGSVGElement.cpp,v
retrieving revision 1.53
diff -u -r1.53 nsSVGSVGElement.cpp
--- /cvsroot/mozilla/content/svg/content/src/nsSVGSVGElement.cpp	25 Aug 2005 21:31:07 -0000	1.53
+++ /cvsroot/mozilla/content/svg/content/src/nsSVGSVGElement.cpp	29 Aug 2005 09:47:40 -0000
@@ -69,6 +69,11 @@
 #include "nsSVGEnum.h"
 #include "nsISVGChildFrame.h"
 #include "nsGUIEvent.h"
+#ifdef MOZ_SMIL
+#include "nsIAnimationController.h"
+#include "nsISMILAnimationController.h"
+#include "nsSMILTimedDocumentRoot.h"
+#endif // MOZ_SMIL
 
 typedef nsSVGStylableElement nsSVGSVGElementBase;
 
@@ -110,6 +115,9 @@
   NS_IMETHOD_(float) GetPreviousTranslate_x();
   NS_IMETHOD_(float) GetPreviousTranslate_y();
   NS_IMETHOD_(float) GetPreviousScale();
+#ifdef MOZ_SMIL
+  virtual nsSMILTimedDocumentRoot* GetTimedDocumentRoot();
+#endif // MOZ_SMIL
 
   // nsIStyledContent interface
   NS_IMETHOD_(PRBool) IsAttributeMapped(const nsIAtom* aAttribute) const;
@@ -123,9 +131,20 @@
 protected:
   // nsSVGElement overrides
   PRBool IsEventName(nsIAtom* aName);
+#ifdef MOZ_SMIL
+  virtual nsresult BindToTree(nsIDocument* aDocument, nsIContent* aParent,
+                              nsIContent* aBindingParent,
+                              PRBool aCompileEventHandlers);
+  virtual void UnbindFromTree(PRBool aDeep = PR_TRUE,
+                              PRBool aNullParent = PR_TRUE);
+#endif // MOZ_SMIL
 
   // implementation helpers:
   void GetScreenPosition(PRInt32 &x, PRInt32 &y);
+#ifdef MOZ_SMIL
+  nsISMILAnimationController* GetAnimationController(nsIDocument* aDocument,
+                                                     PRBool aCreate = PR_FALSE);
+#endif // MOZ_SMIL
   
   nsCOMPtr<nsIDOMSVGAnimatedLength> mWidth;
   nsCOMPtr<nsIDOMSVGAnimatedLength> mHeight;
@@ -146,6 +165,11 @@
   float                             mPreviousScale;
   PRBool                            mZooming;
 
+#ifdef MOZ_SMIL
+  // animation
+  nsRefPtr<nsSMILTimedDocumentRoot>    mTimedDocumentRoot;
+#endif // MOZ_SMIL
+  
   PRInt32 mRedrawSuspendCount;
 };
 
@@ -1344,6 +1368,34 @@
   return mPreviousScale;
 }
 
+#ifdef MOZ_SMIL
+nsSMILTimedDocumentRoot*
+nsSVGSVGElement::GetTimedDocumentRoot()
+{
+  nsSMILTimedDocumentRoot* result = nsnull;
+
+  if (mTimedDocumentRoot)
+  {
+    result = mTimedDocumentRoot;
+  }
+  else
+  {
+    // We must not be the outermost SVG element, try to find it
+    nsCOMPtr<nsIDOMSVGSVGElement> outerSVGDOM;
+
+    nsresult rv = GetOwnerSVGElement(getter_AddRefs(outerSVGDOM));
+
+    if (NS_SUCCEEDED(rv) && outerSVGDOM)
+    {
+      nsCOMPtr<nsISVGSVGElement> outerSVG( do_QueryInterface(outerSVGDOM) );
+      result = outerSVG->GetTimedDocumentRoot();
+    }
+  }
+
+  return result;
+}
+#endif // MOZ_SMIL
+
 //----------------------------------------------------------------------
 // nsIStyledContent methods
 
@@ -1480,6 +1532,76 @@
          aName == nsSVGAtoms::onzoom;
 }
 
+#ifdef MOZ_SMIL
+nsresult
+nsSVGSVGElement::BindToTree(nsIDocument* aDocument,
+                            nsIContent* aParent,
+                            nsIContent* aBindingParent,
+                            PRBool aCompileEventHandlers)
+{
+  nsCOMPtr<nsIDOMSVGSVGElement> outerSVG;
+
+  GetOwnerSVGElement(getter_AddRefs(outerSVG));
+
+  PRBool outermost = (outerSVG == nsnull);
+
+  nsCOMPtr<nsISMILAnimationController> smilController = 
+    GetAnimationController(aDocument, PR_TRUE);
+  NS_ASSERTION(smilController, "Couldn't get animation controller");
+
+  if (!mTimedDocumentRoot && outermost)
+  {
+    // We are now the outermost SVG element
+    mTimedDocumentRoot = new nsSMILTimedDocumentRoot();
+    NS_ENSURE_TRUE(mTimedDocumentRoot, NS_ERROR_FAILURE);
+  }
+  else if (mTimedDocumentRoot && !outermost)
+  {
+    // We are no longer the outermost SVG element
+    if (smilController)
+    {
+      smilController->RemoveTimeContainer(mTimedDocumentRoot);
+    }
+    mTimedDocumentRoot = nsnull;
+  }
+
+  nsresult rv = nsSVGSVGElementBase::BindToTree(aDocument, aParent,
+                                                aBindingParent,
+                                                aCompileEventHandlers);
+
+  if (NS_SUCCEEDED(rv) && mTimedDocumentRoot)
+  {
+    if (smilController)
+      // Eventually this will be done at the same time as the SVGLoad event but
+      // given that we don't currently support externalResourcesRequired,
+      // starting up the animation at this time is roughly the same
+      rv = smilController->AddTimeContainer(mTimedDocumentRoot);
+  }
+
+  return rv;
+}
+
+void
+nsSVGSVGElement::UnbindFromTree(PRBool aDeep, PRBool aNullParent)
+{
+  if (mTimedDocumentRoot)
+  {
+    nsIDocument* doc = GetCurrentDoc();
+
+    if (doc)
+    {
+      nsCOMPtr<nsISMILAnimationController> smilController = 
+        GetAnimationController(doc, PR_FALSE);
+
+      if (smilController)
+        smilController->RemoveTimeContainer(mTimedDocumentRoot);
+    }
+  }
+
+  nsSVGSVGElementBase::UnbindFromTree(aDeep, aNullParent);
+}
+#endif // MOZ_SMIL
+
 //----------------------------------------------------------------------
 // implementation helpers
 void nsSVGSVGElement::GetScreenPosition(PRInt32 &x, PRInt32 &y)
@@ -1508,3 +1630,38 @@
     y = rect.y;
   }
 }
+
+#ifdef MOZ_SMIL
+nsISMILAnimationController*
+nsSVGSVGElement::GetAnimationController(nsIDocument* aDocument,
+                                        PRBool aCreate /* = PR_FALSE */)
+{
+  nsISMILAnimationController* result = nsnull;
+
+  nsIPresShell* presShell;
+  nsPresContext* context;
+
+  if ((aDocument)
+      &&
+      (presShell = aDocument->GetShellAt(0))
+      &&
+      (context = presShell->GetPresContext()))
+  {
+    nsIAnimationController* controller = context->GetAnimationController();
+    if (controller)
+    {
+      nsresult rv = CallQueryInterface(controller, &result);
+
+      if (NS_FAILED(rv))
+        result = nsnull;
+    }
+    else if (aCreate)
+    {
+      result = NS_NewSMILAnimationController();
+      context->SetAnimationController(result);
+    }
+  }
+
+  return result;
+}
+#endif // MOZ_SMIL
Index: /cvsroot/mozilla/content/Makefile.in
===================================================================
RCS file: /cvsroot/mozilla/content/Makefile.in,v
retrieving revision 1.10
diff -u -r1.10 Makefile.in
--- /cvsroot/mozilla/content/Makefile.in	18 Apr 2005 06:33:19 -0000	1.10
+++ /cvsroot/mozilla/content/Makefile.in	29 Aug 2005 09:47:49 -0000
@@ -53,6 +53,10 @@
 DIRS            += xtf
 endif
 
+ifdef MOZ_SMIL
+DIRS			+= smil
+endif
+
 DIRS           += events
 
 include $(topsrcdir)/config/rules.mk
Index: /cvsroot/mozilla/dom/public/nsIDOMClassInfo.h
===================================================================
RCS file: /cvsroot/mozilla/dom/public/nsIDOMClassInfo.h,v
retrieving revision 1.69
diff -u -r1.69 nsIDOMClassInfo.h
--- /cvsroot/mozilla/dom/public/nsIDOMClassInfo.h	26 Aug 2005 02:49:49 -0000	1.69
+++ /cvsroot/mozilla/dom/public/nsIDOMClassInfo.h	29 Aug 2005 09:47:59 -0000
@@ -248,6 +248,10 @@
   eDOMClassInfo_SVGDocument_id,
 
   // SVG element classes
+#ifdef MOZ_SMIL
+  eDOMClassInfo_SVGAnimateElement_id,
+  eDOMClassInfo_SVGAnimationElement_id,
+#endif // MOZ_SMIL
   eDOMClassInfo_SVGCircleElement_id,
   eDOMClassInfo_SVGClipPathElement_id,
   eDOMClassInfo_SVGDefsElement_id,
Index: /cvsroot/mozilla/dom/public/idl/svg/Makefile.in
===================================================================
RCS file: /cvsroot/mozilla/dom/public/idl/svg/Makefile.in,v
retrieving revision 1.20
diff -u -r1.20 Makefile.in
--- /cvsroot/mozilla/dom/public/idl/svg/Makefile.in	26 Aug 2005 02:49:50 -0000	1.20
+++ /cvsroot/mozilla/dom/public/idl/svg/Makefile.in	29 Aug 2005 09:48:01 -0000
@@ -117,4 +117,10 @@
 		nsIDOMSVGZoomEvent.idl \
 		$(NULL)
 
+ifdef MOZ_SMIL
+XPIDLSRCS += nsIDOMSVGAnimateElement.idl \
+			 nsIDOMSVGAnimationElement.idl \
+			 $(NULL)
+endif
+
 include $(topsrcdir)/config/rules.mk
Index: /cvsroot/mozilla/dom/public/idl/svg/nsIDOMSVGAnimateElement.idl
===================================================================
RCS file: /cvsroot/mozilla/dom/public/idl/svg/nsIDOMSVGAnimateElement.idl
diff -N dom/public/idl/svg/nsIDOMSVGAnimateElement.idl
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/dom/public/idl/svg/nsIDOMSVGAnimateElement.idl	29 Aug 2005 09:48:01 -0000
@@ -0,0 +1,43 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * The Initial Developer of the Original Code is
+ * Crocodile Clips Ltd..
+ * Portions created by the Initial Developer are Copyright (C) 2001
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "nsIDOMSVGAnimationElement.idl"
+
+[scriptable, uuid(0c4297e8-68d0-471d-a933-64132ccc5b97)]
+interface nsIDOMSVGAnimateElement : nsIDOMSVGAnimationElement {};
+
Index: /cvsroot/mozilla/dom/public/idl/svg/nsIDOMSVGAnimationElement.idl
===================================================================
RCS file: /cvsroot/mozilla/dom/public/idl/svg/nsIDOMSVGAnimationElement.idl
diff -N dom/public/idl/svg/nsIDOMSVGAnimationElement.idl
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/dom/public/idl/svg/nsIDOMSVGAnimationElement.idl	29 Aug 2005 09:48:01 -0000
@@ -0,0 +1,63 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * The Initial Developer of the Original Code is
+ * Crocodile Clips Ltd..
+ * Portions created by the Initial Developer are Copyright (C) 2001
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "nsIDOMSVGElement.idl"
+
+[scriptable, uuid(8f2ccf31-5544-4a9d-8927-ef35d242039e)]
+interface nsIDOMSVGAnimationElement
+  : nsIDOMSVGElement
+/*
+        The SVG DOM makes use of multiple interface inheritance.
+        Since XPCOM only supports single interface inheritance,
+        the best thing that we can do is to promise that whenever
+        an object implements _this_ interface it will also
+        implement the following interfaces. (We then have to QI to
+        hop between them.)
+        
+    nsIDOMSVGTests,
+    nsIDOMSVGExternalResourcesRequired,
+    smil::ElementTimeControl,
+    events::nsIDOMEventTarget
+*/
+{ 
+  readonly attribute nsIDOMSVGElement targetElement;
+  float getStartTime ( );
+  float getCurrentTime ( );
+  float getSimpleDuration ( );
+          // raises (nsIDOMDOMException)
+};
Index: /cvsroot/mozilla/dom/src/base/nsDOMClassInfo.cpp
===================================================================
RCS file: /cvsroot/mozilla/dom/src/base/nsDOMClassInfo.cpp,v
retrieving revision 1.304
diff -u -r1.304 nsDOMClassInfo.cpp
--- /cvsroot/mozilla/dom/src/base/nsDOMClassInfo.cpp	26 Aug 2005 02:49:50 -0000	1.304
+++ /cvsroot/mozilla/dom/src/base/nsDOMClassInfo.cpp	29 Aug 2005 09:48:23 -0000
@@ -328,6 +328,10 @@
 #include "nsIDOMSVGAnimPresAspRatio.h"
 #include "nsIDOMSVGAnimatedRect.h"
 #include "nsIDOMSVGAnimatedString.h"
+#ifdef MOZ_SMIL
+#include "nsIDOMSVGAnimateElement.h"
+#include "nsIDOMSVGAnimationElement.h"
+#endif // MOZ_SMIL
 #include "nsIDOMSVGAnimTransformList.h"
 #include "nsIDOMSVGCircleElement.h"
 #include "nsIDOMSVGClipPathElement.h"
@@ -854,6 +858,12 @@
                            DOCUMENT_SCRIPTABLE_FLAGS)
 
   // SVG element classes
+#ifdef MOZ_SMIL
+  NS_DEFINE_CLASSINFO_DATA(SVGAnimateElement, nsElementSH,
+                           ELEMENT_SCRIPTABLE_FLAGS)
+  NS_DEFINE_CLASSINFO_DATA(SVGAnimationElement, nsElementSH,
+                           ELEMENT_SCRIPTABLE_FLAGS)
+#endif // MOZ_SMIL
   NS_DEFINE_CLASSINFO_DATA(SVGCircleElement, nsElementSH,
                            ELEMENT_SCRIPTABLE_FLAGS)
   NS_DEFINE_CLASSINFO_DATA(SVGClipPathElement, nsElementSH,
@@ -2393,6 +2403,19 @@
 
   // SVG element classes
 
+#ifdef MOZ_SMIL
+  DOM_CLASSINFO_MAP_BEGIN(SVGAnimateElement, nsIDOMSVGAnimateElement)
+    DOM_CLASSINFO_MAP_ENTRY(nsIDOMSVGAnimationElement)
+    DOM_CLASSINFO_MAP_ENTRY(nsIDOMSVGAnimateElement)
+    DOM_CLASSINFO_SVG_ELEMENT_MAP_ENTRIES
+  DOM_CLASSINFO_MAP_END
+
+  DOM_CLASSINFO_MAP_BEGIN(SVGAnimationElement, nsIDOMSVGAnimationElement)
+    DOM_CLASSINFO_MAP_ENTRY(nsIDOMSVGAnimationElement)
+    DOM_CLASSINFO_SVG_ELEMENT_MAP_ENTRIES
+  DOM_CLASSINFO_MAP_END
+#endif // MOZ_SMIL
+
   DOM_CLASSINFO_MAP_BEGIN(SVGCircleElement, nsIDOMSVGCircleElement)
     DOM_CLASSINFO_MAP_ENTRY(nsIDOMSVGCircleElement)
     DOM_CLASSINFO_SVG_GRAPHIC_ELEMENT_MAP_ENTRIES
Index: /cvsroot/mozilla/layout/base/Makefile.in
===================================================================
RCS file: /cvsroot/mozilla/layout/base/Makefile.in,v
retrieving revision 1.21
diff -u -r1.21 Makefile.in
--- /cvsroot/mozilla/layout/base/Makefile.in	4 May 2005 20:22:28 -0000	1.21
+++ /cvsroot/mozilla/layout/base/Makefile.in	29 Aug 2005 09:48:24 -0000
@@ -112,6 +112,10 @@
 		nsStyleConsts.h \
 		$(NULL)
 
+ifdef MOZ_SMIL
+EXPORTS		+= nsIAnimationController.h
+endif
+
 CPPSRCS		= \
 		nsBidiUtils.cpp \
 		nsCSSColorUtils.cpp \
Index: /cvsroot/mozilla/layout/base/nsIAnimationController.h
===================================================================
RCS file: /cvsroot/mozilla/layout/base/nsIAnimationController.h
diff -N layout/base/nsIAnimationController.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ /cvsroot/mozilla/layout/base/nsIAnimationController.h	29 Aug 2005 09:48:25 -0000
@@ -0,0 +1,56 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Mozilla SVG project.
+ *
+ * Contributor(s):
+ *   Brian Birtles <birtles@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef __NS_IANIMATIONCONTROLLER_H__
+#define __NS_IANIMATIONCONTROLLER_H__
+
+#include "nsISupports.h"
+
+////////////////////////////////////////////////////////////////////////
+// nsIAnimationController: Animation controller
+
+// {7aa203ea-e6e1-4cca-84af-a29f0eaedef5}
+#define NS_IANIMATIONCONTROLLER_IID \
+{ 0x7aa203ea, 0xe6e1, 0x4cca, { 0x84, 0xaf, 0xa2, 0x9f, 0x0e, 0xae, 0xde, 0xf5 } }
+
+class nsIAnimationController : public nsISupports
+{
+public:
+  NS_DEFINE_STATIC_IID_ACCESSOR(NS_IANIMATIONCONTROLLER_IID)
+
+  virtual nsresult  Pause()=0;
+  virtual nsresult  Resume()=0;
+};
+
+#endif // __NS_IANIMATIONCONTROLLER_H__
+
Index: /cvsroot/mozilla/layout/base/nsPresContext.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/base/nsPresContext.cpp,v
retrieving revision 3.290
diff -u -r3.290 nsPresContext.cpp
--- /cvsroot/mozilla/layout/base/nsPresContext.cpp	23 Aug 2005 23:52:16 -0000	3.290
+++ /cvsroot/mozilla/layout/base/nsPresContext.cpp	29 Aug 2005 09:48:28 -0000
@@ -267,6 +267,10 @@
   NS_IF_RELEASE(mDeviceContext);
   NS_IF_RELEASE(mLookAndFeel);
   NS_IF_RELEASE(mLangGroup);
+
+#ifdef MOZ_SMIL
+  NS_IF_RELEASE(mAnimationController);
+#endif
 }
 
 NS_IMPL_ISUPPORTS2(nsPresContext, nsPresContext, nsIObserver)
Index: /cvsroot/mozilla/layout/base/nsPresContext.h
===================================================================
RCS file: /cvsroot/mozilla/layout/base/nsPresContext.h,v
retrieving revision 3.152
diff -u -r3.152 nsPresContext.h
--- /cvsroot/mozilla/layout/base/nsPresContext.h	23 Aug 2005 23:52:16 -0000	3.152
+++ /cvsroot/mozilla/layout/base/nsPresContext.h	29 Aug 2005 09:48:29 -0000
@@ -56,6 +56,10 @@
 #include "nsCRT.h"
 #include "nsIPrintSettings.h"
 #include "nsPropertyTable.h"
+#ifdef MOZ_SMIL
+#include "nsIAnimationController.h"
+#endif
+
 #ifdef IBMBIDI
 class nsBidiPresUtils;
 #endif // IBMBIDI
@@ -626,6 +630,18 @@
    */
   const nscoord* GetBorderWidthTable() { return mBorderWidthTable; }
 
+#ifdef MOZ_SMIL
+  nsIAnimationController* GetAnimationController()
+  { return mAnimationController; }
+  void SetAnimationController(nsIAnimationController* aController)
+  {
+      NS_IF_ADDREF(aController);
+      nsIAnimationController* temp = mAnimationController;
+      mAnimationController = aController;
+      NS_IF_RELEASE(temp);
+  }
+#endif
+
 protected:
   NS_HIDDEN_(void) SetImgAnimations(nsIContent *aParent, PRUint16 aMode);
   NS_HIDDEN_(void) GetDocumentColorPreferences();
@@ -669,6 +685,10 @@
   nsBidiPresUtils*      mBidiUtils;
 #endif
 
+#ifdef MOZ_SMIL
+  nsIAnimationController* mAnimationController; // [STRONG]
+#endif
+
   nsCOMPtr<nsITheme> mTheme;
   nsCOMPtr<nsILanguageAtomService> mLangService;
   nsCOMPtr<nsIPrintSettings> mPrintSettings;
Index: /cvsroot/mozilla/layout/build/Makefile.in
===================================================================
RCS file: /cvsroot/mozilla/layout/build/Makefile.in,v
retrieving revision 1.128
diff -u -r1.128 Makefile.in
--- /cvsroot/mozilla/layout/build/Makefile.in	18 Aug 2005 12:31:30 -0000	1.128
+++ /cvsroot/mozilla/layout/build/Makefile.in	29 Aug 2005 09:48:31 -0000
@@ -188,6 +188,12 @@
 endif
 endif
 
+ifdef MOZ_SMIL
+SHARED_LIBRARY_LIBS += \
+				$(DIST)/lib/$(LIB_PREFIX)gkconsmil_s.$(LIB_SUFFIX) \
+				$(NULL)
+endif
+
 EXTRA_DSO_LDOPTS = \
 		$(LIBS_DIR) \
 		$(EXTRA_DSO_LIBS) \
Index: /cvsroot/mozilla/config/autoconf.mk.in
===================================================================
RCS file: /cvsroot/mozilla/config/autoconf.mk.in,v
retrieving revision 3.365
diff -u -r3.365 autoconf.mk.in
--- /cvsroot/mozilla/config/autoconf.mk.in	20 Aug 2005 06:21:16 -0000	3.365
+++ /cvsroot/mozilla/config/autoconf.mk.in	29 Aug 2005 09:48:34 -0000
@@ -196,6 +196,7 @@
 MOZ_LIBART_CFLAGS = @MOZ_LIBART_CFLAGS@
 MOZ_ENABLE_CANVAS = @MOZ_ENABLE_CANVAS@
 MOZ_CAIRO_CFLAGS = @MOZ_CAIRO_CFLAGS@
+MOZ_SMIL = @MOZ_SMIL@
 TX_EXE = @TX_EXE@
 
 # Mac's don't like / in a #include, so we include the libart
Index: /cvsroot/mozilla/allmakefiles.sh
===================================================================
RCS file: /cvsroot/mozilla/allmakefiles.sh,v
retrieving revision 1.584
diff -u -r1.584 allmakefiles.sh
--- /cvsroot/mozilla/allmakefiles.sh	24 Aug 2005 13:24:34 -0000	1.584
+++ /cvsroot/mozilla/allmakefiles.sh	29 Aug 2005 09:49:16 -0000
@@ -1338,6 +1338,15 @@
 "
 fi
 
+# smil
+if [ "$MOZ_SMIL" ]; then
+    MAKEFILES_content="$MAKEFILES_content
+	content/smil/Makefile
+	content/smil/public/Makefile
+	content/smil/src/Makefile
+"
+fi
+
 # xtf
 if [ "$MOZ_XTF" ]; then
     MAKEFILES_content="$MAKEFILES_content
Index: /cvsroot/mozilla/configure.in
===================================================================
RCS file: /cvsroot/mozilla/configure.in,v
retrieving revision 1.1518
diff -u -r1.1518 configure.in
--- /cvsroot/mozilla/configure.in	26 Aug 2005 17:27:07 -0000	1.1518
+++ /cvsroot/mozilla/configure.in	29 Aug 2005 09:49:37 -0000
@@ -4964,6 +4964,17 @@
 dnl fi
 
 dnl ========================================================
+dnl SMIL
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(smil,
+[  --enable-smil            Enable SMIL animation support],
+    MOZ_SMIL=1,
+    MOZ_SMIL= )
+if test -n "$MOZ_SMIL"; then
+  AC_DEFINE(MOZ_SMIL)
+fi
+
+dnl ========================================================
 dnl Transformiix
 dnl ========================================================
 
@@ -6586,6 +6597,7 @@
 AC_SUBST(MOZ_SVG_RENDERER_GDIPLUS)
 AC_SUBST(MOZ_SVG_RENDERER_LIBART)
 AC_SUBST(MOZ_SVG_RENDERER_CAIRO)
+AC_SUBST(MOZ_SMIL)
 AC_SUBST(TX_EXE)
 AC_SUBST(MOZ_JS_LIBS)
 AC_SUBST(MOZ_PSM)
Index: /cvsroot/mozilla/configure
===================================================================
RCS file: /cvsroot/mozilla/configure,v
retrieving revision 1.1507
diff -u -r1.1507 configure
--- /cvsroot/mozilla/configure	26 Aug 2005 17:31:57 -0000	1.1507
+++ /cvsroot/mozilla/configure	29 Aug 2005 09:50:20 -0000
@@ -179,6 +179,8 @@
 ac_help="$ac_help
   --enable-svg-renderer={gdiplus,libart,cairo}"
 ac_help="$ac_help
+  --enable-smil            Enable SMIL animation support"
+ac_help="$ac_help
   --disable-installer     Disable building of installer"
 ac_help="$ac_help
   --disable-updater       Disable building of updater"
@@ -933,7 +935,7 @@
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:937: checking host system type" >&5
+echo "configure:939: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -954,7 +956,7 @@
 echo "$ac_t""$host" 1>&6
 
 echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:958: checking target system type" >&5
+echo "configure:960: checking target system type" >&5
 
 target_alias=$target
 case "$target_alias" in
@@ -972,7 +974,7 @@
 echo "$ac_t""$target" 1>&6
 
 echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:976: checking build system type" >&5
+echo "configure:978: checking build system type" >&5
 
 build_alias=$build
 case "$build_alias" in
@@ -1042,12 +1044,12 @@
 LIBGNOME_VERSION=2.0
 
 MISSING_X=
-for ac_prog in gawk mawk nawk awk
+for ac_prog in mawk gawk nawk awk
 do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1051: checking for $ac_word" >&5
+echo "configure:1053: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1145,7 +1147,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1149: checking for $ac_word" >&5
+echo "configure:1151: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_NSINSTALL_BIN'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1218,13 +1220,13 @@
     _SAVE_LDFLAGS="$LDFLAGS"
 
     echo $ac_n "checking for host c compiler""... $ac_c" 1>&6
-echo "configure:1222: checking for host c compiler" >&5
+echo "configure:1224: checking for host c compiler" >&5
     for ac_prog in $HOST_CC gcc cc /usr/ucb/cc cl icc
 do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1228: checking for $ac_word" >&5
+echo "configure:1230: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_HOST_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1259,13 +1261,13 @@
     fi
     echo "$ac_t""$HOST_CC" 1>&6
     echo $ac_n "checking for host c++ compiler""... $ac_c" 1>&6
-echo "configure:1263: checking for host c++ compiler" >&5
+echo "configure:1265: checking for host c++ compiler" >&5
     for ac_prog in $HOST_CXX $CCC c++ g++ gcc CC cxx cc++ cl icc
 do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1269: checking for $ac_word" >&5
+echo "configure:1271: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_HOST_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1314,7 +1316,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1318: checking for $ac_word" >&5
+echo "configure:1320: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_HOST_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1349,7 +1351,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1353: checking for $ac_word" >&5
+echo "configure:1355: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_HOST_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1384,16 +1386,16 @@
     LDFLAGS="$HOST_LDFLAGS"
 
     echo $ac_n "checking whether the host c compiler ($HOST_CC $HOST_CFLAGS $HOST_LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1388: checking whether the host c compiler ($HOST_CC $HOST_CFLAGS $HOST_LDFLAGS) works" >&5
+echo "configure:1390: checking whether the host c compiler ($HOST_CC $HOST_CFLAGS $HOST_LDFLAGS) works" >&5
     cat > conftest.$ac_ext <<EOF
-#line 1390 "configure"
+#line 1392 "configure"
 #include "confdefs.h"
 
 int main() {
 return(0);
 ; return 0; }
 EOF
-if { (eval echo configure:1397: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1399: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_prog_hostcc_works=1 echo "$ac_t""yes" 1>&6
 else
@@ -1408,16 +1410,16 @@
     CFLAGS="$HOST_CXXFLAGS"
 
     echo $ac_n "checking whether the host c++ compiler ($HOST_CXX $HOST_CXXFLAGS $HOST_LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1412: checking whether the host c++ compiler ($HOST_CXX $HOST_CXXFLAGS $HOST_LDFLAGS) works" >&5
+echo "configure:1414: checking whether the host c++ compiler ($HOST_CXX $HOST_CXXFLAGS $HOST_LDFLAGS) works" >&5
     cat > conftest.$ac_ext <<EOF
-#line 1414 "configure"
+#line 1416 "configure"
 #include "confdefs.h"
 
 int main() {
 return(0);
 ; return 0; }
 EOF
-if { (eval echo configure:1421: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1423: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_prog_hostcxx_works=1 echo "$ac_t""yes" 1>&6
 else
@@ -1437,7 +1439,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1441: checking for $ac_word" >&5
+echo "configure:1443: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1471,7 +1473,7 @@
     # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1475: checking for $ac_word" >&5
+echo "configure:1477: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1501,7 +1503,7 @@
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1505: checking for $ac_word" >&5
+echo "configure:1507: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1552,7 +1554,7 @@
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1556: checking for $ac_word" >&5
+echo "configure:1558: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1584,7 +1586,7 @@
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1588: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1590: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1595,12 +1597,12 @@
 
 cat > conftest.$ac_ext << EOF
 
-#line 1599 "configure"
+#line 1601 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:1604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1606: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1626,12 +1628,12 @@
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1630: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1632: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1635: checking whether we are using GNU C" >&5
+echo "configure:1637: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1640,7 +1642,7 @@
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1644: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1646: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -1659,7 +1661,7 @@
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1663: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1665: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1695,7 +1697,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1699: checking for $ac_word" >&5
+echo "configure:1701: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1731,7 +1733,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1735: checking for $ac_word" >&5
+echo "configure:1737: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1763,7 +1765,7 @@
 
 
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1767: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1769: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
 
 ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1774,12 +1776,12 @@
 
 cat > conftest.$ac_ext << EOF
 
-#line 1778 "configure"
+#line 1780 "configure"
 #include "confdefs.h"
 
 int main(){return(0);}
 EOF
-if { (eval echo configure:1783: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1785: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cxx_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1805,12 +1807,12 @@
   { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1809: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1811: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
 cross_compiling=$ac_cv_prog_cxx_cross
 
 echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:1814: checking whether we are using GNU C++" >&5
+echo "configure:1816: checking whether we are using GNU C++" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1819,7 +1821,7 @@
   yes;
 #endif
 EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1823: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1825: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gxx=yes
 else
   ac_cv_prog_gxx=no
@@ -1838,7 +1840,7 @@
 ac_save_CXXFLAGS="$CXXFLAGS"
 CXXFLAGS=
 echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1842: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:1844: checking whether ${CXX-g++} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1869,63 +1871,12 @@
   fi
 fi
 
-for ac_declaration in \
-   ''\
-   '#include <stdlib.h>' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat > conftest.$ac_ext <<EOF
-#line 1883 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-$ac_declaration
-int main() {
-exit (42);
-; return 0; }
-EOF
-if { (eval echo configure:1891: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  :
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  continue
-fi
-rm -f conftest*
-  cat > conftest.$ac_ext <<EOF
-#line 1901 "configure"
-#include "confdefs.h"
-$ac_declaration
-int main() {
-exit (42);
-; return 0; }
-EOF
-if { (eval echo configure:1908: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
-  break
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-fi
-rm -f conftest*
-done
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-
     for ac_prog in $RANLIB "${target_alias}-ranlib" "${target}-ranlib"
 do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1929: checking for $ac_word" >&5
+echo "configure:1880: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1960,7 +1911,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1964: checking for $ac_word" >&5
+echo "configure:1915: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1995,7 +1946,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1999: checking for $ac_word" >&5
+echo "configure:1950: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_AS'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2036,7 +1987,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2040: checking for $ac_word" >&5
+echo "configure:1991: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2071,7 +2022,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2075: checking for $ac_word" >&5
+echo "configure:2026: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2106,7 +2057,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2110: checking for $ac_word" >&5
+echo "configure:2061: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2144,7 +2095,7 @@
     # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2148: checking for $ac_word" >&5
+echo "configure:2099: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2174,7 +2125,7 @@
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2178: checking for $ac_word" >&5
+echo "configure:2129: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2225,7 +2176,7 @@
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2229: checking for $ac_word" >&5
+echo "configure:2180: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2257,7 +2208,7 @@
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:2261: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:2212: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -2268,12 +2219,12 @@
 
 cat > conftest.$ac_ext << EOF
 
-#line 2272 "configure"
+#line 2223 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:2277: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -2299,12 +2250,12 @@
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:2303: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:2254: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:2308: checking whether we are using GNU C" >&5
+echo "configure:2259: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2313,7 +2264,7 @@
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2317: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2268: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -2332,7 +2283,7 @@
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:2336: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:2287: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2368,7 +2319,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2372: checking for $ac_word" >&5
+echo "configure:2323: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2400,7 +2351,7 @@
 
 
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:2404: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:2355: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
 
 ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -2411,12 +2362,12 @@
 
 cat > conftest.$ac_ext << EOF
 
-#line 2415 "configure"
+#line 2366 "configure"
 #include "confdefs.h"
 
 int main(){return(0);}
 EOF
-if { (eval echo configure:2420: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cxx_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -2442,12 +2393,12 @@
   { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:2446: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:2397: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
 cross_compiling=$ac_cv_prog_cxx_cross
 
 echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:2451: checking whether we are using GNU C++" >&5
+echo "configure:2402: checking whether we are using GNU C++" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2456,7 +2407,7 @@
   yes;
 #endif
 EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:2460: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:2411: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gxx=yes
 else
   ac_cv_prog_gxx=no
@@ -2475,7 +2426,7 @@
 ac_save_CXXFLAGS="$CXXFLAGS"
 CXXFLAGS=
 echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:2479: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:2430: checking whether ${CXX-g++} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2506,61 +2457,10 @@
   fi
 fi
 
-for ac_declaration in \
-   ''\
-   '#include <stdlib.h>' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat > conftest.$ac_ext <<EOF
-#line 2520 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-$ac_declaration
-int main() {
-exit (42);
-; return 0; }
-EOF
-if { (eval echo configure:2528: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  :
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  continue
-fi
-rm -f conftest*
-  cat > conftest.$ac_ext <<EOF
-#line 2538 "configure"
-#include "confdefs.h"
-$ac_declaration
-int main() {
-exit (42);
-; return 0; }
-EOF
-if { (eval echo configure:2545: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
-  break
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-fi
-rm -f conftest*
-done
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-
     # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2564: checking for $ac_word" >&5
+echo "configure:2464: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2592,7 +2492,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2596: checking for $ac_word" >&5
+echo "configure:2496: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_AS'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2633,7 +2533,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2637: checking for $ac_word" >&5
+echo "configure:2537: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2668,7 +2568,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2672: checking for $ac_word" >&5
+echo "configure:2572: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2703,7 +2603,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2707: checking for $ac_word" >&5
+echo "configure:2607: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2738,7 +2638,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2742: checking for $ac_word" >&5
+echo "configure:2642: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2827,7 +2727,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2831: checking for $ac_word" >&5
+echo "configure:2731: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MIDL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2869,14 +2769,14 @@
 cross_compiling=$ac_cv_prog_cc_cross
 
         cat > conftest.$ac_ext <<EOF
-#line 2873 "configure"
+#line 2773 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main() {
  printf("Hello World\n"); 
 ; return 0; }
 EOF
-if { (eval echo configure:2880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2780: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -2894,14 +2794,14 @@
 cross_compiling=$ac_cv_prog_cxx_cross
 
         cat > conftest.$ac_ext <<EOF
-#line 2898 "configure"
+#line 2798 "configure"
 #include "confdefs.h"
 #include <new.h>
 int main() {
  unsigned *test = new unsigned(42); 
 ; return 0; }
 EOF
-if { (eval echo configure:2905: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2805: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -2957,7 +2857,7 @@
         _MIDL_REV_VERSION=`echo ${_MIDL_FULL_VERSION} | $AWK -F\. '{ print $3 }'`
          # Add flags if necessary
          echo $ac_n "checking for midl flags""... $ac_c" 1>&6
-echo "configure:2961: checking for midl flags" >&5
+echo "configure:2861: checking for midl flags" >&5
          if test \( "$_MIDL_MAJOR_VERSION" -gt "6" \) -o \( "$_MIDL_MAJOR_VERSION" = "6" -a "$_MIDL_MINOR_VERSION" -gt "0" \) -o \( "$_MIDL_MAJOR_VERSION" = "6" -a "$_MIDL_MINOR_VERSION" = "00" -a "$_MIDL_REV_VERSION" -gt "359" \); then
              # Starting with MIDL version 6.0.359, the MIDL compiler
              # generates /Oicf /robust stubs by default, which is not
@@ -2979,9 +2879,9 @@
         _W32API_MAJOR_VERSION=`echo $W32API_VERSION | $AWK -F\. '{ print $1 }'`
         _W32API_MINOR_VERSION=`echo $W32API_VERSION | $AWK -F\. '{ print $2 }'`
         echo $ac_n "checking for w32api version >= $W32API_VERSION""... $ac_c" 1>&6
-echo "configure:2983: checking for w32api version >= $W32API_VERSION" >&5
+echo "configure:2883: checking for w32api version >= $W32API_VERSION" >&5
         cat > conftest.$ac_ext <<EOF
-#line 2985 "configure"
+#line 2885 "configure"
 #include "confdefs.h"
 #include <w32api.h>
 int main() {
@@ -2993,7 +2893,7 @@
             
 ; return 0; }
 EOF
-if { (eval echo configure:2997: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2897: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
    res=yes 
 else
@@ -3009,7 +2909,7 @@
         fi
         # Check windres version
         echo $ac_n "checking for windres version >= $WINDRES_VERSION""... $ac_c" 1>&6
-echo "configure:3013: checking for windres version >= $WINDRES_VERSION" >&5
+echo "configure:2913: checking for windres version >= $WINDRES_VERSION" >&5
         _WINDRES_VERSION=`${WINDRES} --version 2>&1 | grep -i windres 2>/dev/null | $AWK '{ print $3 }'`
         echo "$ac_t""$_WINDRES_VERSION" 1>&6
         _WINDRES_MAJOR_VERSION=`echo $_WINDRES_VERSION | $AWK -F\. '{ print $1 }'`
@@ -3036,7 +2936,7 @@
     SKIP_COMPILER_CHECKS=1
     SKIP_LIBRARY_CHECKS=1
     echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:3040: checking how to run the C preprocessor" >&5
+echo "configure:2940: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -3051,13 +2951,13 @@
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 3055 "configure"
+#line 2955 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3061: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2961: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -3068,13 +2968,13 @@
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 3072 "configure"
+#line 2972 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3078: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2978: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -3085,13 +2985,13 @@
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 3089 "configure"
+#line 2989 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3095: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2995: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -3119,17 +3019,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3123: checking for $ac_hdr" >&5
+echo "configure:3023: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3128 "configure"
+#line 3028 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3133: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3033: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3160,10 +3060,10 @@
 if test "$CC" != "icc" -a -z "$_WIN32_MSVC"; then
     if test "x$CC" != xcc; then
   echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6
-echo "configure:3164: checking whether $CC and cc understand -c and -o together" >&5
+echo "configure:3064: checking whether $CC and cc understand -c and -o together" >&5
 else
   echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6
-echo "configure:3167: checking whether cc understands -c and -o together" >&5
+echo "configure:3067: checking whether cc understands -c and -o together" >&5
 fi
 set dummy $CC; ac_cc="`echo $2 |
 		       sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`"
@@ -3175,16 +3075,16 @@
 # We do the test twice because some compilers refuse to overwrite an
 # existing .o file with -o, though they will create one.
 ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5'
-if { (eval echo configure:3179: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
-   test -f conftest.o && { (eval echo configure:3180: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
+if { (eval echo configure:3079: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
+   test -f conftest.o && { (eval echo configure:3080: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
 then
   eval ac_cv_prog_cc_${ac_cc}_c_o=yes
   if test "x$CC" != xcc; then
     # Test first that cc exists at all.
-    if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:3185: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+    if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:3085: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
       ac_try='cc -c conftest.c -o conftest.o 1>&5'
-      if { (eval echo configure:3187: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
-	 test -f conftest.o && { (eval echo configure:3188: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
+      if { (eval echo configure:3087: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
+	 test -f conftest.o && { (eval echo configure:3088: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
       then
         # cc works too.
         :
@@ -3220,7 +3120,7 @@
 fi
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:3224: checking how to run the C preprocessor" >&5
+echo "configure:3124: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -3235,13 +3135,13 @@
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 3239 "configure"
+#line 3139 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3245: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3145: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -3252,13 +3152,13 @@
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 3256 "configure"
+#line 3156 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3262: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3162: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -3269,13 +3169,13 @@
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 3273 "configure"
+#line 3173 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3279: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3179: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -3300,7 +3200,7 @@
 echo "$ac_t""$CPP" 1>&6
 
 echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
-echo "configure:3304: checking how to run the C++ preprocessor" >&5
+echo "configure:3204: checking how to run the C++ preprocessor" >&5
 if test -z "$CXXCPP"; then
 if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3313,12 +3213,12 @@
 cross_compiling=$ac_cv_prog_cxx_cross
   CXXCPP="${CXX-g++} -E"
   cat > conftest.$ac_ext <<EOF
-#line 3317 "configure"
+#line 3217 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3322: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3222: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -3365,7 +3265,7 @@
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:3369: checking for a BSD compatible install" >&5
+echo "configure:3269: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3418,7 +3318,7 @@
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:3422: checking whether ln -s works" >&5
+echo "configure:3322: checking whether ln -s works" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3443,7 +3343,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3447: checking for $ac_word" >&5
+echo "configure:3347: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3483,7 +3383,7 @@
 fi
 
 echo $ac_n "checking for minimum required perl version >= $PERL_VERSION""... $ac_c" 1>&6
-echo "configure:3487: checking for minimum required perl version >= $PERL_VERSION" >&5
+echo "configure:3387: checking for minimum required perl version >= $PERL_VERSION" >&5
 _perl_version=`PERL_VERSION=$PERL_VERSION $PERL -e 'print "$]"; if ($] >= $ENV{PERL_VERSION}) { exit(0); } else { exit(1); }' 2>&5`
 _perl_res=$?
 echo "$ac_t""$_perl_version" 1>&6
@@ -3493,7 +3393,7 @@
 fi
 
 echo $ac_n "checking for full perl installation""... $ac_c" 1>&6
-echo "configure:3497: checking for full perl installation" >&5
+echo "configure:3397: checking for full perl installation" >&5
 _perl_archlib=`$PERL -e 'use Config; if ( -d $Config{archlib} ) { exit(0); } else { exit(1); }' 2>&5`
 _perl_res=$?
 if test "$_perl_res" != 0; then
@@ -3506,7 +3406,7 @@
 # Extract the first word of "doxygen", so it can be a program name with args.
 set dummy doxygen; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3510: checking for $ac_word" >&5
+echo "configure:3410: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_DOXYGEN'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3542,7 +3442,7 @@
 # Extract the first word of "whoami", so it can be a program name with args.
 set dummy whoami; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3546: checking for $ac_word" >&5
+echo "configure:3446: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_WHOAMI'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3578,7 +3478,7 @@
 # Extract the first word of "autoconf", so it can be a program name with args.
 set dummy autoconf; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3582: checking for $ac_word" >&5
+echo "configure:3482: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_AUTOCONF'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3614,7 +3514,7 @@
 # Extract the first word of "unzip", so it can be a program name with args.
 set dummy unzip; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3618: checking for $ac_word" >&5
+echo "configure:3518: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_UNZIP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3652,7 +3552,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3656: checking for $ac_word" >&5
+echo "configure:3556: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_ZIP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3693,7 +3593,7 @@
 # Extract the first word of "makedepend", so it can be a program name with args.
 set dummy makedepend; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3697: checking for $ac_word" >&5
+echo "configure:3597: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_SYSTEM_MAKEDEPEND'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3728,7 +3628,7 @@
 # Extract the first word of "xargs", so it can be a program name with args.
 set dummy xargs; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3732: checking for $ac_word" >&5
+echo "configure:3632: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_XARGS'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3791,7 +3691,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3795: checking for $ac_word" >&5
+echo "configure:3695: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PBBUILD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3841,7 +3741,7 @@
             # Extract the first word of "sdp", so it can be a program name with args.
 set dummy sdp; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3845: checking for $ac_word" >&5
+echo "configure:3745: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_SDP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3947,7 +3847,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3951: checking for $ac_word" >&5
+echo "configure:3851: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_MAKE'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3990,7 +3890,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3994: checking for $ac_word" >&5
+echo "configure:3894: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_MAKE'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4058,7 +3958,7 @@
 # Uses ac_ vars as temps to allow command line to override cache and checks.
 # --without-x overrides everything else, but does not touch the cache.
 echo $ac_n "checking for X""... $ac_c" 1>&6
-echo "configure:4062: checking for X" >&5
+echo "configure:3962: checking for X" >&5
 
 # Check whether --with-x or --without-x was given.
 if test "${with_x+set}" = set; then
@@ -4120,12 +4020,12 @@
 
   # First, try using that file with no special directory specified.
 cat > conftest.$ac_ext <<EOF
-#line 4124 "configure"
+#line 4024 "configure"
 #include "confdefs.h"
 #include <$x_direct_test_include>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4129: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4029: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4194,14 +4094,14 @@
   ac_save_LIBS="$LIBS"
   LIBS="-l$x_direct_test_library $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4198 "configure"
+#line 4098 "configure"
 #include "confdefs.h"
 
 int main() {
 ${x_direct_test_function}()
 ; return 0; }
 EOF
-if { (eval echo configure:4205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4105: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   LIBS="$ac_save_LIBS"
 # We can link X programs with no special library path.
@@ -4307,17 +4207,17 @@
     case "`(uname -sr) 2>/dev/null`" in
     "SunOS 5"*)
       echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
-echo "configure:4311: checking whether -R must be followed by a space" >&5
+echo "configure:4211: checking whether -R must be followed by a space" >&5
       ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
       cat > conftest.$ac_ext <<EOF
-#line 4314 "configure"
+#line 4214 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_nospace=yes
 else
@@ -4333,14 +4233,14 @@
       else
 	LIBS="$ac_xsave_LIBS -R $x_libraries"
 	cat > conftest.$ac_ext <<EOF
-#line 4337 "configure"
+#line 4237 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4344: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4244: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_space=yes
 else
@@ -4372,7 +4272,7 @@
     # libraries were built with DECnet support.  And karl@cs.umb.edu says
     # the Alpha needs dnet_stub (dnet does not exist).
     echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
-echo "configure:4376: checking for dnet_ntoa in -ldnet" >&5
+echo "configure:4276: checking for dnet_ntoa in -ldnet" >&5
 ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4380,7 +4280,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4384 "configure"
+#line 4284 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4391,7 +4291,7 @@
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:4395: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4295: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4413,7 +4313,7 @@
 
     if test $ac_cv_lib_dnet_dnet_ntoa = no; then
       echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
-echo "configure:4417: checking for dnet_ntoa in -ldnet_stub" >&5
+echo "configure:4317: checking for dnet_ntoa in -ldnet_stub" >&5
 ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4421,7 +4321,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet_stub  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4425 "configure"
+#line 4325 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4432,7 +4332,7 @@
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:4436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4461,12 +4361,12 @@
     # The nsl library prevents programs from opening the X display
     # on Irix 5.2, according to dickey@clark.net.
     echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
-echo "configure:4465: checking for gethostbyname" >&5
+echo "configure:4365: checking for gethostbyname" >&5
 if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4470 "configure"
+#line 4370 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname(); below.  */
@@ -4489,7 +4389,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:4493: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_gethostbyname=yes"
 else
@@ -4510,7 +4410,7 @@
 
     if test $ac_cv_func_gethostbyname = no; then
       echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:4514: checking for gethostbyname in -lnsl" >&5
+echo "configure:4414: checking for gethostbyname in -lnsl" >&5
 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4518,7 +4418,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4522 "configure"
+#line 4422 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4529,7 +4429,7 @@
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:4533: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4559,12 +4459,12 @@
     # -lsocket must be given before -lnsl if both are needed.
     # We assume that if connect needs -lnsl, so does gethostbyname.
     echo $ac_n "checking for connect""... $ac_c" 1>&6
-echo "configure:4563: checking for connect" >&5
+echo "configure:4463: checking for connect" >&5
 if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4568 "configure"
+#line 4468 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
@@ -4587,7 +4487,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:4591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4491: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_connect=yes"
 else
@@ -4608,7 +4508,7 @@
 
     if test $ac_cv_func_connect = no; then
       echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
-echo "configure:4612: checking for connect in -lsocket" >&5
+echo "configure:4512: checking for connect in -lsocket" >&5
 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4616,7 +4516,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4620 "configure"
+#line 4520 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4627,7 +4527,7 @@
 connect()
 ; return 0; }
 EOF
-if { (eval echo configure:4631: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4531: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4651,12 +4551,12 @@
 
     # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
     echo $ac_n "checking for remove""... $ac_c" 1>&6
-echo "configure:4655: checking for remove" >&5
+echo "configure:4555: checking for remove" >&5
 if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4660 "configure"
+#line 4560 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char remove(); below.  */
@@ -4679,7 +4579,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:4683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4583: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_remove=yes"
 else
@@ -4700,7 +4600,7 @@
 
     if test $ac_cv_func_remove = no; then
       echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
-echo "configure:4704: checking for remove in -lposix" >&5
+echo "configure:4604: checking for remove in -lposix" >&5
 ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4708,7 +4608,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lposix  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4712 "configure"
+#line 4612 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4719,7 +4619,7 @@
 remove()
 ; return 0; }
 EOF
-if { (eval echo configure:4723: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4623: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4743,12 +4643,12 @@
 
     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
     echo $ac_n "checking for shmat""... $ac_c" 1>&6
-echo "configure:4747: checking for shmat" >&5
+echo "configure:4647: checking for shmat" >&5
 if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4752 "configure"
+#line 4652 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shmat(); below.  */
@@ -4771,7 +4671,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:4775: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_shmat=yes"
 else
@@ -4792,7 +4692,7 @@
 
     if test $ac_cv_func_shmat = no; then
       echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
-echo "configure:4796: checking for shmat in -lipc" >&5
+echo "configure:4696: checking for shmat in -lipc" >&5
 ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4800,7 +4700,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lipc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4804 "configure"
+#line 4704 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4811,7 +4711,7 @@
 shmat()
 ; return 0; }
 EOF
-if { (eval echo configure:4815: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4844,7 +4744,7 @@
   # libraries we check for below, so use a different variable.
   #  --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
   echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
-echo "configure:4848: checking for IceConnectionNumber in -lICE" >&5
+echo "configure:4748: checking for IceConnectionNumber in -lICE" >&5
 ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4852,7 +4752,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lICE $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4856 "configure"
+#line 4756 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4863,7 +4763,7 @@
 IceConnectionNumber()
 ; return 0; }
 EOF
-if { (eval echo configure:4867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5273,7 +5173,7 @@
 if test "$COMPILE_ENVIRONMENT"; then
 if test "$GNU_CC"; then
   echo $ac_n "checking whether ld has archive extraction flags""... $ac_c" 1>&6
-echo "configure:5277: checking whether ld has archive extraction flags" >&5
+echo "configure:5177: checking whether ld has archive extraction flags" >&5
   if eval "test \"`echo '$''{'ac_cv_mkshlib_force_and_unforce'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5290,14 +5190,14 @@
       LDFLAGS=$force
       LIBS=$unforce
       cat > conftest.$ac_ext <<EOF
-#line 5294 "configure"
+#line 5194 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_mkshlib_force_and_unforce=$line; break
 else
@@ -5332,17 +5232,17 @@
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking for 64-bit OS""... $ac_c" 1>&6
-echo "configure:5336: checking for 64-bit OS" >&5
+echo "configure:5236: checking for 64-bit OS" >&5
 if test "$cross_compiling" = yes; then
   result="maybe" 
 else
   cat > conftest.$ac_ext <<EOF
-#line 5341 "configure"
+#line 5241 "configure"
 #include "confdefs.h"
  int main () {
     if (sizeof(long) == 8) { return 0; } return 1; } 
 EOF
-if { (eval echo configure:5346: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5246: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   result="yes"
 else
@@ -5501,9 +5401,9 @@
 cross_compiling=$ac_cv_prog_cxx_cross
 
             echo $ac_n "checking for VisualAge C++ compiler version >= 5.0.2.0""... $ac_c" 1>&6
-echo "configure:5505: checking for VisualAge C++ compiler version >= 5.0.2.0" >&5
+echo "configure:5405: checking for VisualAge C++ compiler version >= 5.0.2.0" >&5
             cat > conftest.$ac_ext <<EOF
-#line 5507 "configure"
+#line 5407 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -5512,7 +5412,7 @@
                  #endif
 ; return 0; }
 EOF
-if { (eval echo configure:5516: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5416: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   _BAD_COMPILER=
 else
@@ -5549,17 +5449,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5553: checking for $ac_hdr" >&5
+echo "configure:5453: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5558 "configure"
+#line 5458 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5563: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5463: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5601,7 +5501,7 @@
     LIBS="$LIBS -lbe"
     if test "$COMPILE_ENVIRONMENT"; then
         echo $ac_n "checking for main in -lbind""... $ac_c" 1>&6
-echo "configure:5605: checking for main in -lbind" >&5
+echo "configure:5505: checking for main in -lbind" >&5
 ac_lib_var=`echo bind'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5609,14 +5509,14 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lbind  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5613 "configure"
+#line 5513 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:5620: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5637,7 +5537,7 @@
 fi
 
         echo $ac_n "checking for main in -lzeta""... $ac_c" 1>&6
-echo "configure:5641: checking for main in -lzeta" >&5
+echo "configure:5541: checking for main in -lzeta" >&5
 ac_lib_var=`echo zeta'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5645,14 +5545,14 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lzeta  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5649 "configure"
+#line 5549 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:5656: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5556: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6545,9 +6445,9 @@
         CC_VERSION=`$CC -V 2>&1 | grep '^cc:' 2>/dev/null | $AWK -F\: '{ print $2 }'`
         CXX_VERSION=`$CXX -V 2>&1 | grep '^CC:' 2>/dev/null | $AWK -F\: '{ print $2 }'`
        echo $ac_n "checking for Forte compiler version >= WS6U2""... $ac_c" 1>&6
-echo "configure:6549: checking for Forte compiler version >= WS6U2" >&5
+echo "configure:6449: checking for Forte compiler version >= WS6U2" >&5
        cat > conftest.$ac_ext <<EOF
-#line 6551 "configure"
+#line 6451 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -6556,7 +6456,7 @@
            #endif
 ; return 0; }
 EOF
-if { (eval echo configure:6560: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6460: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   _BAD_COMPILER=
 else
@@ -6678,7 +6578,7 @@
         ;;
     *-darwin*)
         echo $ac_n "checking for -exported_symbols_list option to ld""... $ac_c" 1>&6
-echo "configure:6682: checking for -exported_symbols_list option to ld" >&5
+echo "configure:6582: checking for -exported_symbols_list option to ld" >&5
         if eval "test \"`echo '$''{'ac_cv_exported_symbols_list'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6718,12 +6618,12 @@
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:6722: checking for ANSI C header files" >&5
+echo "configure:6622: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6727 "configure"
+#line 6627 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -6731,7 +6631,7 @@
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6735: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6635: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6748,7 +6648,7 @@
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 6752 "configure"
+#line 6652 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -6766,7 +6666,7 @@
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 6770 "configure"
+#line 6670 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -6787,7 +6687,7 @@
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 6791 "configure"
+#line 6691 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -6798,7 +6698,7 @@
 exit (0); }
 
 EOF
-if { (eval echo configure:6802: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6702: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -6822,12 +6722,12 @@
 fi
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:6826: checking for working const" >&5
+echo "configure:6726: checking for working const" >&5
 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6831 "configure"
+#line 6731 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -6876,7 +6776,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:6880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6780: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -6897,12 +6797,12 @@
 fi
 
 echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:6901: checking for mode_t" >&5
+echo "configure:6801: checking for mode_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6906 "configure"
+#line 6806 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -6930,12 +6830,12 @@
 fi
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:6934: checking for off_t" >&5
+echo "configure:6834: checking for off_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6939 "configure"
+#line 6839 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -6963,12 +6863,12 @@
 fi
 
 echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:6967: checking for pid_t" >&5
+echo "configure:6867: checking for pid_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6972 "configure"
+#line 6872 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -6996,12 +6896,12 @@
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:7000: checking for size_t" >&5
+echo "configure:6900: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7005 "configure"
+#line 6905 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -7029,12 +6929,12 @@
 fi
 
 echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:7033: checking for uid_t in sys/types.h" >&5
+echo "configure:6933: checking for uid_t in sys/types.h" >&5
 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7038 "configure"
+#line 6938 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 EOF
@@ -7063,12 +6963,12 @@
 fi
 
 echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6
-echo "configure:7067: checking for st_blksize in struct stat" >&5
+echo "configure:6967: checking for st_blksize in struct stat" >&5
 if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7072 "configure"
+#line 6972 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -7076,7 +6976,7 @@
 struct stat s; s.st_blksize;
 ; return 0; }
 EOF
-if { (eval echo configure:7080: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6980: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_st_blksize=yes
 else
@@ -7097,12 +6997,12 @@
 fi
 
 echo $ac_n "checking for siginfo_t""... $ac_c" 1>&6
-echo "configure:7101: checking for siginfo_t" >&5
+echo "configure:7001: checking for siginfo_t" >&5
 if eval "test \"`echo '$''{'ac_cv_siginfo_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7106 "configure"
+#line 7006 "configure"
 #include "confdefs.h"
 #define _POSIX_C_SOURCE 199506L
                   #include <signal.h>
@@ -7110,7 +7010,7 @@
 siginfo_t* info;
 ; return 0; }
 EOF
-if { (eval echo configure:7114: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7014: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_siginfo_t=true
 else
@@ -7144,12 +7044,12 @@
 fi
 
 echo $ac_n "checking for int16_t""... $ac_c" 1>&6
-echo "configure:7148: checking for int16_t" >&5
+echo "configure:7048: checking for int16_t" >&5
 if eval "test \"`echo '$''{'ac_cv_int16_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7153 "configure"
+#line 7053 "configure"
 #include "confdefs.h"
 #include <stdio.h>
                   #include <sys/types.h>
@@ -7157,7 +7057,7 @@
 int16_t foo = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:7161: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7061: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_int16_t=true
 else
@@ -7179,12 +7079,12 @@
   echo "$ac_t""no" 1>&6
 fi
 echo $ac_n "checking for int32_t""... $ac_c" 1>&6
-echo "configure:7183: checking for int32_t" >&5
+echo "configure:7083: checking for int32_t" >&5
 if eval "test \"`echo '$''{'ac_cv_int32_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7188 "configure"
+#line 7088 "configure"
 #include "confdefs.h"
 #include <stdio.h>
                   #include <sys/types.h>
@@ -7192,7 +7092,7 @@
 int32_t foo = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:7196: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7096: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_int32_t=true
 else
@@ -7214,12 +7114,12 @@
   echo "$ac_t""no" 1>&6
 fi
 echo $ac_n "checking for int64_t""... $ac_c" 1>&6
-echo "configure:7218: checking for int64_t" >&5
+echo "configure:7118: checking for int64_t" >&5
 if eval "test \"`echo '$''{'ac_cv_int64_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7223 "configure"
+#line 7123 "configure"
 #include "confdefs.h"
 #include <stdio.h>
                   #include <sys/types.h>
@@ -7227,7 +7127,7 @@
 int64_t foo = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:7231: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7131: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_int64_t=true
 else
@@ -7249,12 +7149,12 @@
   echo "$ac_t""no" 1>&6
 fi
 echo $ac_n "checking for int64""... $ac_c" 1>&6
-echo "configure:7253: checking for int64" >&5
+echo "configure:7153: checking for int64" >&5
 if eval "test \"`echo '$''{'ac_cv_int64'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7258 "configure"
+#line 7158 "configure"
 #include "confdefs.h"
 #include <stdio.h>
                   #include <sys/types.h>
@@ -7262,7 +7162,7 @@
 int64 foo = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:7266: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7166: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_int64=true
 else
@@ -7284,12 +7184,12 @@
   echo "$ac_t""no" 1>&6
 fi
 echo $ac_n "checking for uint""... $ac_c" 1>&6
-echo "configure:7288: checking for uint" >&5
+echo "configure:7188: checking for uint" >&5
 if eval "test \"`echo '$''{'ac_cv_uint'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7293 "configure"
+#line 7193 "configure"
 #include "confdefs.h"
 #include <stdio.h>
                   #include <sys/types.h>
@@ -7297,7 +7197,7 @@
 uint foo = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:7301: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7201: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_uint=true
 else
@@ -7319,12 +7219,12 @@
   echo "$ac_t""no" 1>&6
 fi
 echo $ac_n "checking for uint_t""... $ac_c" 1>&6
-echo "configure:7323: checking for uint_t" >&5
+echo "configure:7223: checking for uint_t" >&5
 if eval "test \"`echo '$''{'ac_cv_uint_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7328 "configure"
+#line 7228 "configure"
 #include "confdefs.h"
 #include <stdio.h>
                   #include <sys/types.h>
@@ -7332,7 +7232,7 @@
 uint_t foo = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:7336: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7236: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_uint_t=true
 else
@@ -7354,12 +7254,12 @@
   echo "$ac_t""no" 1>&6
 fi
 echo $ac_n "checking for uint16_t""... $ac_c" 1>&6
-echo "configure:7358: checking for uint16_t" >&5
+echo "configure:7258: checking for uint16_t" >&5
 if eval "test \"`echo '$''{'ac_cv_uint16_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7363 "configure"
+#line 7263 "configure"
 #include "confdefs.h"
 #include <stdio.h>
                   #include <sys/types.h>
@@ -7367,7 +7267,7 @@
 uint16_t foo = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:7371: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7271: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_uint16_t=true
 else
@@ -7398,12 +7298,12 @@
 
 
 echo $ac_n "checking for uname.domainname""... $ac_c" 1>&6
-echo "configure:7402: checking for uname.domainname" >&5
+echo "configure:7302: checking for uname.domainname" >&5
 if eval "test \"`echo '$''{'ac_cv_have_uname_domainname_field'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7407 "configure"
+#line 7307 "configure"
 #include "confdefs.h"
 #include <sys/utsname.h>
 int main() {
@@ -7411,7 +7311,7 @@
             (void)uname(res);  if (res != 0) { domain = res->domainname; } 
 ; return 0; }
 EOF
-if { (eval echo configure:7415: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7315: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_uname_domainname_field=true
 else
@@ -7435,12 +7335,12 @@
 fi
 
 echo $ac_n "checking for uname.__domainname""... $ac_c" 1>&6
-echo "configure:7439: checking for uname.__domainname" >&5
+echo "configure:7339: checking for uname.__domainname" >&5
 if eval "test \"`echo '$''{'ac_cv_have_uname_us_domainname_field'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7444 "configure"
+#line 7344 "configure"
 #include "confdefs.h"
 #include <sys/utsname.h>
 int main() {
@@ -7448,7 +7348,7 @@
             (void)uname(res);  if (res != 0) { domain = res->__domainname; } 
 ; return 0; }
 EOF
-if { (eval echo configure:7452: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7352: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_uname_us_domainname_field=true
 else
@@ -7481,7 +7381,7 @@
 
 
 echo $ac_n "checking for usable wchar_t (2 bytes, unsigned)""... $ac_c" 1>&6
-echo "configure:7485: checking for usable wchar_t (2 bytes, unsigned)" >&5
+echo "configure:7385: checking for usable wchar_t (2 bytes, unsigned)" >&5
 if eval "test \"`echo '$''{'ac_cv_have_usable_wchar'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7489,14 +7389,14 @@
   ac_cv_have_usable_wchar="maybe"
 else
   cat > conftest.$ac_ext <<EOF
-#line 7493 "configure"
+#line 7393 "configure"
 #include "confdefs.h"
 #include <stddef.h>
                  int main () {
                    return (sizeof(wchar_t) != 2) ||
                           (wchar_t)-1 < (wchar_t) 0 ; } 
 EOF
-if { (eval echo configure:7500: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7400: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_have_usable_wchar="yes"
 else
@@ -7531,7 +7431,7 @@
     CXXFLAGS="$CXXFLAGS -fshort-wchar"
 
     echo $ac_n "checking for compiler -fshort-wchar option""... $ac_c" 1>&6
-echo "configure:7535: checking for compiler -fshort-wchar option" >&5
+echo "configure:7435: checking for compiler -fshort-wchar option" >&5
 if eval "test \"`echo '$''{'ac_cv_have_usable_wchar_option'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7539,14 +7439,17 @@
   ac_cv_have_usable_wchar_option="maybe"
 else
   cat > conftest.$ac_ext <<EOF
-#line 7543 "configure"
+#line 7443 "configure"
 #include "confdefs.h"
+#ifdef __cplusplus
+extern "C" void exit(int);
+#endif
 #include <stddef.h>
                      int main () {
                        return (sizeof(wchar_t) != 2) ||
                               (wchar_t)-1 < (wchar_t) 0 ; } 
 EOF
-if { (eval echo configure:7550: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7453: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_have_usable_wchar_option="yes"
 else
@@ -7582,7 +7485,7 @@
 
 if test "$GNU_CC"; then
   echo $ac_n "checking for visibility(hidden) attribute""... $ac_c" 1>&6
-echo "configure:7586: checking for visibility(hidden) attribute" >&5
+echo "configure:7489: checking for visibility(hidden) attribute" >&5
 if eval "test \"`echo '$''{'ac_cv_visibility_hidden'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7606,7 +7509,7 @@
 EOF
 
       echo $ac_n "checking for visibility pragma support""... $ac_c" 1>&6
-echo "configure:7610: checking for visibility pragma support" >&5
+echo "configure:7513: checking for visibility pragma support" >&5
 if eval "test \"`echo '$''{'ac_cv_visibility_pragma'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7648,12 +7551,12 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:7652: checking for $ac_hdr that defines DIR" >&5
+echo "configure:7555: checking for $ac_hdr that defines DIR" >&5
 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7657 "configure"
+#line 7560 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_hdr>
@@ -7661,7 +7564,7 @@
 DIR *dirp = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:7665: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7568: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_header_dirent_$ac_safe=yes"
 else
@@ -7686,7 +7589,7 @@
 # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
 if test $ac_header_dirent = dirent.h; then
 echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:7690: checking for opendir in -ldir" >&5
+echo "configure:7593: checking for opendir in -ldir" >&5
 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7694,7 +7597,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldir  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7698 "configure"
+#line 7601 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7705,7 +7608,7 @@
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:7709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7612: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7727,7 +7630,7 @@
 
 else
 echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:7731: checking for opendir in -lx" >&5
+echo "configure:7634: checking for opendir in -lx" >&5
 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7735,7 +7638,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lx  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7739 "configure"
+#line 7642 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7746,7 +7649,7 @@
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:7750: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7778,17 +7681,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7782: checking for $ac_hdr" >&5
+echo "configure:7685: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7787 "configure"
+#line 7690 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7792: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7695: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7818,17 +7721,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7822: checking for $ac_hdr" >&5
+echo "configure:7725: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7827 "configure"
+#line 7730 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7735: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7858,17 +7761,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7862: checking for $ac_hdr" >&5
+echo "configure:7765: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7867 "configure"
+#line 7770 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7872: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7775: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7898,17 +7801,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7902: checking for $ac_hdr" >&5
+echo "configure:7805: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7907 "configure"
+#line 7810 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7912: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7815: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7938,17 +7841,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7942: checking for $ac_hdr" >&5
+echo "configure:7845: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7947 "configure"
+#line 7850 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7952: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7855: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7979,17 +7882,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7983: checking for $ac_hdr" >&5
+echo "configure:7886: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7988 "configure"
+#line 7891 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7993: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7896: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8020,17 +7923,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8024: checking for $ac_hdr" >&5
+echo "configure:7927: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8029 "configure"
+#line 7932 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8034: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7937: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8067,17 +7970,17 @@
 NEW_H=new.h
 ac_safe=`echo "new" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for new""... $ac_c" 1>&6
-echo "configure:8071: checking for new" >&5
+echo "configure:7974: checking for new" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8076 "configure"
+#line 7979 "configure"
 #include "confdefs.h"
 #include <new>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8081: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7984: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8118,17 +8021,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8122: checking for $ac_hdr" >&5
+echo "configure:8025: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8127 "configure"
+#line 8030 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8132: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8035: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8162,7 +8065,7 @@
 	;;
 *)
 	echo $ac_n "checking for gethostbyname_r in -lc_r""... $ac_c" 1>&6
-echo "configure:8166: checking for gethostbyname_r in -lc_r" >&5
+echo "configure:8069: checking for gethostbyname_r in -lc_r" >&5
 ac_lib_var=`echo c_r'_'gethostbyname_r | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8170,7 +8073,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lc_r  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8174 "configure"
+#line 8077 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8181,7 +8084,7 @@
 gethostbyname_r()
 ; return 0; }
 EOF
-if { (eval echo configure:8185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8088: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8211,7 +8114,7 @@
 	;;
 esac
 echo $ac_n "checking for atan in -lm""... $ac_c" 1>&6
-echo "configure:8215: checking for atan in -lm" >&5
+echo "configure:8118: checking for atan in -lm" >&5
 ac_lib_var=`echo m'_'atan | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8219,7 +8122,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8223 "configure"
+#line 8126 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8230,7 +8133,7 @@
 atan()
 ; return 0; }
 EOF
-if { (eval echo configure:8234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8264,7 +8167,7 @@
 	;;
 *)
 	echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:8268: checking for dlopen in -ldl" >&5
+echo "configure:8171: checking for dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8272,7 +8175,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8276 "configure"
+#line 8179 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8283,7 +8186,7 @@
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:8287: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8300,17 +8203,17 @@
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6
-echo "configure:8304: checking for dlfcn.h" >&5
+echo "configure:8207: checking for dlfcn.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8309 "configure"
+#line 8212 "configure"
 #include "confdefs.h"
 #include <dlfcn.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8314: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8217: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8346,7 +8249,7 @@
     case $target in
     *-aix*)
 	echo $ac_n "checking for demangle in -lC_r""... $ac_c" 1>&6
-echo "configure:8350: checking for demangle in -lC_r" >&5
+echo "configure:8253: checking for demangle in -lC_r" >&5
 ac_lib_var=`echo C_r'_'demangle | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8354,7 +8257,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lC_r  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8358 "configure"
+#line 8261 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8365,7 +8268,7 @@
 demangle()
 ; return 0; }
 EOF
-if { (eval echo configure:8369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8395,7 +8298,7 @@
 	;;
      *)
 	echo $ac_n "checking for demangle in -lC""... $ac_c" 1>&6
-echo "configure:8399: checking for demangle in -lC" >&5
+echo "configure:8302: checking for demangle in -lC" >&5
 ac_lib_var=`echo C'_'demangle | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8403,7 +8306,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lC  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8407 "configure"
+#line 8310 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8414,7 +8317,7 @@
 demangle()
 ; return 0; }
 EOF
-if { (eval echo configure:8418: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8445,7 +8348,7 @@
      esac
 fi
 echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
-echo "configure:8449: checking for socket in -lsocket" >&5
+echo "configure:8352: checking for socket in -lsocket" >&5
 ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8453,7 +8356,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8457 "configure"
+#line 8360 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8464,7 +8367,7 @@
 socket()
 ; return 0; }
 EOF
-if { (eval echo configure:8468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8509,7 +8412,7 @@
 	_SAVE_LDFLAGS="$LDFLAGS"
 	LDFLAGS="$XLDFLAGS $LDFLAGS"
 	echo $ac_n "checking for XDrawLines in -lX11""... $ac_c" 1>&6
-echo "configure:8513: checking for XDrawLines in -lX11" >&5
+echo "configure:8416: checking for XDrawLines in -lX11" >&5
 ac_lib_var=`echo X11'_'XDrawLines | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8517,7 +8420,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lX11 $XLIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8521 "configure"
+#line 8424 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8528,7 +8431,7 @@
 XDrawLines()
 ; return 0; }
 EOF
-if { (eval echo configure:8532: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8550,7 +8453,7 @@
 fi
 
 	echo $ac_n "checking for XextAddDisplay in -lXext""... $ac_c" 1>&6
-echo "configure:8554: checking for XextAddDisplay in -lXext" >&5
+echo "configure:8457: checking for XextAddDisplay in -lXext" >&5
 ac_lib_var=`echo Xext'_'XextAddDisplay | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8558,7 +8461,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lXext $XLIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8562 "configure"
+#line 8465 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8569,7 +8472,7 @@
 XextAddDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:8573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8476: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8593,7 +8496,7 @@
    
      
 	echo $ac_n "checking for XtFree in -lXt""... $ac_c" 1>&6
-echo "configure:8597: checking for XtFree in -lXt" >&5
+echo "configure:8500: checking for XtFree in -lXt" >&5
 ac_lib_var=`echo Xt'_'XtFree | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8601,7 +8504,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lXt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8605 "configure"
+#line 8508 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8612,7 +8515,7 @@
 XtFree()
 ; return 0; }
 EOF
-if { (eval echo configure:8616: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8519: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8633,7 +8536,7 @@
 
         unset ac_cv_lib_Xt_XtFree
 	    echo $ac_n "checking for IceFlush in -lICE""... $ac_c" 1>&6
-echo "configure:8637: checking for IceFlush in -lICE" >&5
+echo "configure:8540: checking for IceFlush in -lICE" >&5
 ac_lib_var=`echo ICE'_'IceFlush | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8641,7 +8544,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lICE $XT_LIBS $XLIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8645 "configure"
+#line 8548 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8652,7 +8555,7 @@
 IceFlush()
 ; return 0; }
 EOF
-if { (eval echo configure:8656: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8673,7 +8576,7 @@
 fi
 
 	    echo $ac_n "checking for SmcCloseConnection in -lSM""... $ac_c" 1>&6
-echo "configure:8677: checking for SmcCloseConnection in -lSM" >&5
+echo "configure:8580: checking for SmcCloseConnection in -lSM" >&5
 ac_lib_var=`echo SM'_'SmcCloseConnection | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8681,7 +8584,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lSM $XT_LIBS $XLIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8685 "configure"
+#line 8588 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8692,7 +8595,7 @@
 SmcCloseConnection()
 ; return 0; }
 EOF
-if { (eval echo configure:8696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8599: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8713,7 +8616,7 @@
 fi
  
         echo $ac_n "checking for XtFree in -lXt""... $ac_c" 1>&6
-echo "configure:8717: checking for XtFree in -lXt" >&5
+echo "configure:8620: checking for XtFree in -lXt" >&5
 ac_lib_var=`echo Xt'_'XtFree | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8721,7 +8624,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lXt $X_PRE_LIBS $XT_LIBS $XLIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8725 "configure"
+#line 8628 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8732,7 +8635,7 @@
 XtFree()
 ; return 0; }
 EOF
-if { (eval echo configure:8736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8766,7 +8669,7 @@
     esac
 
                 echo $ac_n "checking for XineramaIsActive in -lXinerama""... $ac_c" 1>&6
-echo "configure:8770: checking for XineramaIsActive in -lXinerama" >&5
+echo "configure:8673: checking for XineramaIsActive in -lXinerama" >&5
 ac_lib_var=`echo Xinerama'_'XineramaIsActive | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8774,7 +8677,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lXinerama $XLIBS $XEXT_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8778 "configure"
+#line 8681 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8785,7 +8688,7 @@
 XineramaIsActive()
 ; return 0; }
 EOF
-if { (eval echo configure:8789: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8692: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8807,17 +8710,17 @@
 
     ac_safe=`echo "X11/extensions/Xinerama.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/Xinerama.h""... $ac_c" 1>&6
-echo "configure:8811: checking for X11/extensions/Xinerama.h" >&5
+echo "configure:8714: checking for X11/extensions/Xinerama.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8816 "configure"
+#line 8719 "configure"
 #include "confdefs.h"
 #include <X11/extensions/Xinerama.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8821: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8724: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8840,7 +8743,7 @@
 
 
                 echo $ac_n "checking for XShmCreateImage in -lXext""... $ac_c" 1>&6
-echo "configure:8844: checking for XShmCreateImage in -lXext" >&5
+echo "configure:8747: checking for XShmCreateImage in -lXext" >&5
 ac_lib_var=`echo Xext'_'XShmCreateImage | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8848,7 +8751,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lXext $XLIBS $XEXT_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8852 "configure"
+#line 8755 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8859,7 +8762,7 @@
 XShmCreateImage()
 ; return 0; }
 EOF
-if { (eval echo configure:8863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8881,17 +8784,17 @@
 
     ac_safe=`echo "X11/extensions/XShm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/XShm.h""... $ac_c" 1>&6
-echo "configure:8885: checking for X11/extensions/XShm.h" >&5
+echo "configure:8788: checking for X11/extensions/XShm.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8890 "configure"
+#line 8793 "configure"
 #include "confdefs.h"
 #include <X11/extensions/XShm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8895: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8798: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8921,7 +8824,7 @@
     fi
 
                 echo $ac_n "checking for XieFloGeometry in -lXIE""... $ac_c" 1>&6
-echo "configure:8925: checking for XieFloGeometry in -lXIE" >&5
+echo "configure:8828: checking for XieFloGeometry in -lXIE" >&5
 ac_lib_var=`echo XIE'_'XieFloGeometry | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8929,7 +8832,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lXIE $XLIBS $XEXT_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8933 "configure"
+#line 8836 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8940,7 +8843,7 @@
 XieFloGeometry()
 ; return 0; }
 EOF
-if { (eval echo configure:8944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8962,17 +8865,17 @@
 
     ac_safe=`echo "X11/extensions/XIElib.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/XIElib.h""... $ac_c" 1>&6
-echo "configure:8966: checking for X11/extensions/XIElib.h" >&5
+echo "configure:8869: checking for X11/extensions/XIElib.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8971 "configure"
+#line 8874 "configure"
 #include "confdefs.h"
 #include <X11/extensions/XIElib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8976: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8879: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9046,7 +8949,7 @@
 # Extract the first word of "freetype-config", so it can be a program name with args.
 set dummy freetype-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:9050: checking for $ac_word" >&5
+echo "configure:8953: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_FT2_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -9082,7 +8985,7 @@
 
 min_ft_version=6.1.0
 echo $ac_n "checking for FreeType - version >= $min_ft_version""... $ac_c" 1>&6
-echo "configure:9086: checking for FreeType - version >= $min_ft_version" >&5
+echo "configure:8989: checking for FreeType - version >= $min_ft_version" >&5
 no_ft=""
 if test "$FT2_CONFIG" = "no" ; then
   no_ft=yes
@@ -9130,7 +9033,7 @@
   echo $ac_n "cross compiling; assumed OK... $ac_c"
 else
   cat > conftest.$ac_ext <<EOF
-#line 9134 "configure"
+#line 9037 "configure"
 #include "confdefs.h"
 
 #include <ft2build.h>
@@ -9156,7 +9059,7 @@
 }
 
 EOF
-if { (eval echo configure:9160: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9063: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -9208,7 +9111,7 @@
 
 
 echo $ac_n "checking for pthread_create in -lpthreads""... $ac_c" 1>&6
-echo "configure:9212: checking for pthread_create in -lpthreads" >&5
+echo "configure:9115: checking for pthread_create in -lpthreads" >&5
 echo "
     #include <pthread.h> 
     void *foo(void *v) { int a = 1;  } 
@@ -9230,7 +9133,7 @@
         echo "$ac_t""no" 1>&6
         
 echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6
-echo "configure:9234: checking for pthread_create in -lpthread" >&5
+echo "configure:9137: checking for pthread_create in -lpthread" >&5
 echo "
     #include <pthread.h> 
     void *foo(void *v) { int a = 1;  } 
@@ -9252,7 +9155,7 @@
         echo "$ac_t""no" 1>&6
         
 echo $ac_n "checking for pthread_create in -lc_r""... $ac_c" 1>&6
-echo "configure:9256: checking for pthread_create in -lc_r" >&5
+echo "configure:9159: checking for pthread_create in -lc_r" >&5
 echo "
     #include <pthread.h> 
     void *foo(void *v) { int a = 1;  } 
@@ -9274,7 +9177,7 @@
         echo "$ac_t""no" 1>&6
         
 echo $ac_n "checking for pthread_create in -lc""... $ac_c" 1>&6
-echo "configure:9278: checking for pthread_create in -lc" >&5
+echo "configure:9181: checking for pthread_create in -lc" >&5
 echo "
     #include <pthread.h> 
     void *foo(void *v) { int a = 1;  } 
@@ -9330,7 +9233,7 @@
 				rm -f conftest*
 	ac_cv_have_dash_pthread=no
 	echo $ac_n "checking whether ${CC-cc} accepts -pthread""... $ac_c" 1>&6
-echo "configure:9334: checking whether ${CC-cc} accepts -pthread" >&5
+echo "configure:9237: checking whether ${CC-cc} accepts -pthread" >&5
 	echo 'int main() { return 0; }' | cat > conftest.c
 	${CC-cc} -pthread -o conftest conftest.c > conftest.out 2>&1
 	if test $? -eq 0; then
@@ -9353,7 +9256,7 @@
 			    ac_cv_have_dash_pthreads=no
     if test "$ac_cv_have_dash_pthread" = "no"; then
 	    echo $ac_n "checking whether ${CC-cc} accepts -pthreads""... $ac_c" 1>&6
-echo "configure:9357: checking whether ${CC-cc} accepts -pthreads" >&5
+echo "configure:9260: checking whether ${CC-cc} accepts -pthreads" >&5
     	echo 'int main() { return 0; }' | cat > conftest.c
 	    ${CC-cc} -pthreads -o conftest conftest.c > conftest.out 2>&1
     	if test $? -eq 0; then
@@ -9475,7 +9378,7 @@
 
 
 echo $ac_n "checking whether mmap() sees write()s""... $ac_c" 1>&6
-echo "configure:9479: checking whether mmap() sees write()s" >&5
+echo "configure:9382: checking whether mmap() sees write()s" >&5
 
 
 mmap_test_prog='
@@ -9514,11 +9417,11 @@
   result="yes"
 else
   cat > conftest.$ac_ext <<EOF
-#line 9518 "configure"
+#line 9421 "configure"
 #include "confdefs.h"
 $mmap_test_prog 
 EOF
-if { (eval echo configure:9522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9425: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   result="yes"
 else
@@ -9543,13 +9446,13 @@
 
 if test $ac_cv_prog_gcc = yes; then
     echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6
-echo "configure:9547: checking whether ${CC-cc} needs -traditional" >&5
+echo "configure:9450: checking whether ${CC-cc} needs -traditional" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
     ac_pattern="Autoconf.*'x'"
   cat > conftest.$ac_ext <<EOF
-#line 9553 "configure"
+#line 9456 "configure"
 #include "confdefs.h"
 #include <sgtty.h>
 Autoconf TIOCGETP
@@ -9567,7 +9470,7 @@
 
   if test $ac_cv_prog_gcc_traditional = no; then
     cat > conftest.$ac_ext <<EOF
-#line 9571 "configure"
+#line 9474 "configure"
 #include "confdefs.h"
 #include <termio.h>
 Autoconf TCGETA
@@ -9589,7 +9492,7 @@
 fi
 
 echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
-echo "configure:9593: checking for 8-bit clean memcmp" >&5
+echo "configure:9496: checking for 8-bit clean memcmp" >&5
 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -9597,7 +9500,7 @@
   ac_cv_func_memcmp_clean=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 9601 "configure"
+#line 9504 "configure"
 #include "confdefs.h"
 
 main()
@@ -9607,7 +9510,7 @@
 }
 
 EOF
-if { (eval echo configure:9611: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_memcmp_clean=yes
 else
@@ -9627,12 +9530,12 @@
 for ac_func in random strerror lchown fchmod snprintf statvfs memmove rint stat64 lstat64
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9631: checking for $ac_func" >&5
+echo "configure:9534: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9636 "configure"
+#line 9539 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9655,7 +9558,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:9659: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9562: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -9682,12 +9585,12 @@
 for ac_func in flockfile getpagesize
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9686: checking for $ac_func" >&5
+echo "configure:9589: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9691 "configure"
+#line 9594 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9710,7 +9613,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:9714: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -9739,12 +9642,12 @@
   for ac_func in localtime_r strtok_r
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9743: checking for $ac_func" >&5
+echo "configure:9646: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9748 "configure"
+#line 9651 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9767,7 +9670,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:9771: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9674: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -9803,19 +9706,19 @@
 cross_compiling=$ac_cv_prog_cxx_cross
 
 echo $ac_n "checking for wcrtomb""... $ac_c" 1>&6
-echo "configure:9807: checking for wcrtomb" >&5
+echo "configure:9710: checking for wcrtomb" >&5
 if eval "test \"`echo '$''{'ac_cv_have_wcrtomb'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9812 "configure"
+#line 9715 "configure"
 #include "confdefs.h"
 #include <wchar.h>
 int main() {
 mbstate_t ps={0};wcrtomb(0,'f',&ps);
 ; return 0; }
 EOF
-if { (eval echo configure:9819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_have_wcrtomb="yes"
 else
@@ -9835,19 +9738,19 @@
 
 fi
 echo $ac_n "checking for mbrtowc""... $ac_c" 1>&6
-echo "configure:9839: checking for mbrtowc" >&5
+echo "configure:9742: checking for mbrtowc" >&5
 if eval "test \"`echo '$''{'ac_cv_have_mbrtowc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9844 "configure"
+#line 9747 "configure"
 #include "confdefs.h"
 #include <wchar.h>
 int main() {
 mbstate_t ps={0};mbrtowc(0,0,0,&ps);
 ; return 0; }
 EOF
-if { (eval echo configure:9851: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9754: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_have_mbrtowc="yes"
 else
@@ -9876,12 +9779,12 @@
 fi
 
 echo $ac_n "checking for res_ninit()""... $ac_c" 1>&6
-echo "configure:9880: checking for res_ninit()" >&5
+echo "configure:9783: checking for res_ninit()" >&5
 if eval "test \"`echo '$''{'ac_cv_func_res_ninit'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9885 "configure"
+#line 9788 "configure"
 #include "confdefs.h"
 
         #ifdef linux
@@ -9893,7 +9796,7 @@
 int foo = res_ninit(&_res);
 ; return 0; }
 EOF
-if { (eval echo configure:9897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_res_ninit=yes
 else
@@ -9923,12 +9826,12 @@
 cross_compiling=$ac_cv_prog_cxx_cross
 
 echo $ac_n "checking for gnu_get_libc_version()""... $ac_c" 1>&6
-echo "configure:9927: checking for gnu_get_libc_version()" >&5
+echo "configure:9830: checking for gnu_get_libc_version()" >&5
 if eval "test \"`echo '$''{'ac_cv_func_gnu_get_libc_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9932 "configure"
+#line 9835 "configure"
 #include "confdefs.h"
 
         #ifdef HAVE_GNU_LIBC_VERSION_H
@@ -9939,7 +9842,7 @@
 const char *glibc_version = gnu_get_libc_version();
 ; return 0; }
 EOF
-if { (eval echo configure:9943: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9846: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_gnu_get_libc_version=yes
 else
@@ -9968,7 +9871,7 @@
     *)
     
 echo $ac_n "checking for iconv in -lc""... $ac_c" 1>&6
-echo "configure:9972: checking for iconv in -lc" >&5
+echo "configure:9875: checking for iconv in -lc" >&5
 ac_lib_var=`echo c'_'iconv | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -9976,7 +9879,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 9980 "configure"
+#line 9883 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -9990,7 +9893,7 @@
 iconv()
 ; return 0; }
 EOF
-if { (eval echo configure:9994: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10009,7 +9912,7 @@
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
-echo "configure:10013: checking for iconv in -liconv" >&5
+echo "configure:9916: checking for iconv in -liconv" >&5
 ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -10017,7 +9920,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-liconv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10021 "configure"
+#line 9924 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -10031,7 +9934,7 @@
 iconv()
 ; return 0; }
 EOF
-if { (eval echo configure:10035: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9938: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10050,7 +9953,7 @@
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for libiconv in -liconv""... $ac_c" 1>&6
-echo "configure:10054: checking for libiconv in -liconv" >&5
+echo "configure:9957: checking for libiconv in -liconv" >&5
 ac_lib_var=`echo iconv'_'libiconv | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -10058,7 +9961,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-liconv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10062 "configure"
+#line 9965 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -10072,7 +9975,7 @@
 libiconv()
 ; return 0; }
 EOF
-if { (eval echo configure:10076: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10099,12 +10002,12 @@
 _SAVE_LIBS=$LIBS
 LIBS="$LIBS $_ICONV_LIBS"
 echo $ac_n "checking for iconv()""... $ac_c" 1>&6
-echo "configure:10103: checking for iconv()" >&5
+echo "configure:10006: checking for iconv()" >&5
 if eval "test \"`echo '$''{'ac_cv_func_iconv'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10108 "configure"
+#line 10011 "configure"
 #include "confdefs.h"
 
         #include <stdlib.h>
@@ -10118,7 +10021,7 @@
         
 ; return 0; }
 EOF
-if { (eval echo configure:10122: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10025: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_iconv=yes
 else
@@ -10142,12 +10045,12 @@
     LIBXUL_LIBS="$LIBXUL_LIBS $_ICONV_LIBS"
     LIBICONV="$_ICONV_LIBS"
     echo $ac_n "checking for iconv() with const input""... $ac_c" 1>&6
-echo "configure:10146: checking for iconv() with const input" >&5
+echo "configure:10049: checking for iconv() with const input" >&5
 if eval "test \"`echo '$''{'ac_cv_func_const_iconv'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10151 "configure"
+#line 10054 "configure"
 #include "confdefs.h"
 
             #include <stdlib.h>
@@ -10162,7 +10065,7 @@
             
 ; return 0; }
 EOF
-if { (eval echo configure:10166: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10069: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_func_const_iconv=yes
 else
@@ -10191,19 +10094,19 @@
 
 
   echo $ac_n "checking for nl_langinfo and CODESET""... $ac_c" 1>&6
-echo "configure:10195: checking for nl_langinfo and CODESET" >&5
+echo "configure:10098: checking for nl_langinfo and CODESET" >&5
 if eval "test \"`echo '$''{'am_cv_langinfo_codeset'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10200 "configure"
+#line 10103 "configure"
 #include "confdefs.h"
 #include <langinfo.h>
 int main() {
 char* cs = nl_langinfo(CODESET);
 ; return 0; }
 EOF
-if { (eval echo configure:10207: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   am_cv_langinfo_codeset=yes
 else
@@ -10235,7 +10138,7 @@
 
 
 echo $ac_n "checking for an implementation of va_copy()""... $ac_c" 1>&6
-echo "configure:10239: checking for an implementation of va_copy()" >&5
+echo "configure:10142: checking for an implementation of va_copy()" >&5
 if eval "test \"`echo '$''{'ac_cv_va_copy'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -10245,7 +10148,7 @@
     
 else
   cat > conftest.$ac_ext <<EOF
-#line 10249 "configure"
+#line 10152 "configure"
 #include "confdefs.h"
 
         #include <stdarg.h>
@@ -10259,7 +10162,7 @@
         }
         int main() { f (0, 42); return 0; }
 EOF
-if { (eval echo configure:10263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_va_copy=yes
 else
@@ -10276,7 +10179,7 @@
 
 echo "$ac_t""$ac_cv_va_copy" 1>&6
 echo $ac_n "checking for an implementation of __va_copy()""... $ac_c" 1>&6
-echo "configure:10280: checking for an implementation of __va_copy()" >&5
+echo "configure:10183: checking for an implementation of __va_copy()" >&5
 if eval "test \"`echo '$''{'ac_cv___va_copy'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -10286,7 +10189,7 @@
     
 else
   cat > conftest.$ac_ext <<EOF
-#line 10290 "configure"
+#line 10193 "configure"
 #include "confdefs.h"
 
         #include <stdarg.h>
@@ -10300,7 +10203,7 @@
         }
         int main() { f (0, 42); return 0; }
 EOF
-if { (eval echo configure:10304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10207: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv___va_copy=yes
 else
@@ -10317,7 +10220,7 @@
 
 echo "$ac_t""$ac_cv___va_copy" 1>&6
 echo $ac_n "checking whether va_lists can be copied by value""... $ac_c" 1>&6
-echo "configure:10321: checking whether va_lists can be copied by value" >&5
+echo "configure:10224: checking whether va_lists can be copied by value" >&5
 if eval "test \"`echo '$''{'ac_cv_va_val_copy'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -10327,7 +10230,7 @@
     
 else
   cat > conftest.$ac_ext <<EOF
-#line 10331 "configure"
+#line 10234 "configure"
 #include "confdefs.h"
 
         #include <stdarg.h>
@@ -10341,7 +10244,7 @@
         }
         int main() { f (0, 42); return 0; }
 EOF
-if { (eval echo configure:10345: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10248: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_va_val_copy=yes
 else
@@ -10440,7 +10343,7 @@
 if test "$GNU_CXX"; then
 
   echo $ac_n "checking for C++ exceptions flag""... $ac_c" 1>&6
-echo "configure:10444: checking for C++ exceptions flag" >&5
+echo "configure:10347: checking for C++ exceptions flag" >&5
 
     if eval "test \"`echo '$''{'ac_cv_cxx_exceptions_flags'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -10475,12 +10378,12 @@
 HAVE_GCC3_ABI=
 if test "$GNU_CC"; then
   echo $ac_n "checking for gcc 3.0 ABI""... $ac_c" 1>&6
-echo "configure:10479: checking for gcc 3.0 ABI" >&5
+echo "configure:10382: checking for gcc 3.0 ABI" >&5
 if eval "test \"`echo '$''{'ac_cv_gcc_three_abi'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10484 "configure"
+#line 10387 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -10493,7 +10396,7 @@
                       
 ; return 0; }
 EOF
-if { (eval echo configure:10497: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10400: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_gcc_three_abi="yes"
 else
@@ -10517,12 +10420,12 @@
 
 
 echo $ac_n "checking for C++ \"explicit\" keyword""... $ac_c" 1>&6
-echo "configure:10521: checking for C++ \"explicit\" keyword" >&5
+echo "configure:10424: checking for C++ \"explicit\" keyword" >&5
 if eval "test \"`echo '$''{'ac_cv_cpp_explicit'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10526 "configure"
+#line 10429 "configure"
 #include "confdefs.h"
 class X {
                                public: explicit X(int i) : i_(i) {}
@@ -10532,7 +10435,7 @@
 X x(3);
 ; return 0; }
 EOF
-if { (eval echo configure:10536: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10439: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cpp_explicit=yes
 else
@@ -10553,12 +10456,12 @@
 fi
 
 echo $ac_n "checking for C++ \"typename\" keyword""... $ac_c" 1>&6
-echo "configure:10557: checking for C++ \"typename\" keyword" >&5
+echo "configure:10460: checking for C++ \"typename\" keyword" >&5
 if eval "test \"`echo '$''{'ac_cv_cpp_typename'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10562 "configure"
+#line 10465 "configure"
 #include "confdefs.h"
 class param {
                                public:
@@ -10577,7 +10480,7 @@
                                A.foo(0);
 ; return 0; }
 EOF
-if { (eval echo configure:10581: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10484: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cpp_typename=yes
 else
@@ -10598,12 +10501,12 @@
 fi
 
 echo $ac_n "checking for modern C++ template specialization syntax support""... $ac_c" 1>&6
-echo "configure:10602: checking for modern C++ template specialization syntax support" >&5
+echo "configure:10505: checking for modern C++ template specialization syntax support" >&5
 if eval "test \"`echo '$''{'ac_cv_cpp_modern_specialize_template_syntax'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10607 "configure"
+#line 10510 "configure"
 #include "confdefs.h"
 template <class T> struct X { int a; };
                                class Y {};
@@ -10613,7 +10516,7 @@
                                X<Y> y_x;
 ; return 0; }
 EOF
-if { (eval echo configure:10617: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10520: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cpp_modern_specialize_template_syntax=yes
 else
@@ -10635,12 +10538,12 @@
 
 
 echo $ac_n "checking whether partial template specialization works""... $ac_c" 1>&6
-echo "configure:10639: checking whether partial template specialization works" >&5
+echo "configure:10542: checking whether partial template specialization works" >&5
 if eval "test \"`echo '$''{'ac_cv_cpp_partial_specialization'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10644 "configure"
+#line 10547 "configure"
 #include "confdefs.h"
 template <class T> class Foo {};
                                template <class T> class Foo<T*> {};
@@ -10648,7 +10551,7 @@
 return 0;
 ; return 0; }
 EOF
-if { (eval echo configure:10652: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10555: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cpp_partial_specialization=yes
 else
@@ -10669,12 +10572,12 @@
 fi
 
 echo $ac_n "checking whether operators must be re-defined for templates derived from templates""... $ac_c" 1>&6
-echo "configure:10673: checking whether operators must be re-defined for templates derived from templates" >&5
+echo "configure:10576: checking whether operators must be re-defined for templates derived from templates" >&5
 if eval "test \"`echo '$''{'ac_cv_need_derived_template_operators'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10678 "configure"
+#line 10581 "configure"
 #include "confdefs.h"
 template <class T> class Base { };
                                 template <class T>
@@ -10686,7 +10589,7 @@
                                 return 0;
 ; return 0; }
 EOF
-if { (eval echo configure:10690: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10593: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_need_derived_template_operators=no
 else
@@ -10708,12 +10611,12 @@
 
 
 echo $ac_n "checking whether we need to cast a derived template to pass as its base class""... $ac_c" 1>&6
-echo "configure:10712: checking whether we need to cast a derived template to pass as its base class" >&5
+echo "configure:10615: checking whether we need to cast a derived template to pass as its base class" >&5
 if eval "test \"`echo '$''{'ac_cv_need_cpp_template_cast_to_base'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10717 "configure"
+#line 10620 "configure"
 #include "confdefs.h"
 template <class T> class Base { };
                                 template <class T> class Derived : public Base<T> { };
@@ -10722,7 +10625,7 @@
 Derived<char> bar; return foo(bar);
 ; return 0; }
 EOF
-if { (eval echo configure:10726: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10629: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_need_cpp_template_cast_to_base=no
 else
@@ -10743,12 +10646,12 @@
 fi
 
 echo $ac_n "checking whether the compiler can resolve const ambiguities for templates""... $ac_c" 1>&6
-echo "configure:10747: checking whether the compiler can resolve const ambiguities for templates" >&5
+echo "configure:10650: checking whether the compiler can resolve const ambiguities for templates" >&5
 if eval "test \"`echo '$''{'ac_cv_can_resolve_const_ambiguity'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10752 "configure"
+#line 10655 "configure"
 #include "confdefs.h"
 
                                 template <class T> class ptrClass {
@@ -10769,7 +10672,7 @@
                                  a(&i); 
 ; return 0; }
 EOF
-if { (eval echo configure:10773: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10676: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_can_resolve_const_ambiguity=yes
 else
@@ -10791,12 +10694,12 @@
 
 
 echo $ac_n "checking whether the C++ \"using\" keyword can change access""... $ac_c" 1>&6
-echo "configure:10795: checking whether the C++ \"using\" keyword can change access" >&5
+echo "configure:10698: checking whether the C++ \"using\" keyword can change access" >&5
 if eval "test \"`echo '$''{'ac_cv_cpp_access_changing_using2'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10800 "configure"
+#line 10703 "configure"
 #include "confdefs.h"
 class A { protected: int foo() { return 0; } };
                    class B : public A { public: using A::foo; };
@@ -10804,10 +10707,10 @@
 B b; return b.foo();
 ; return 0; }
 EOF
-if { (eval echo configure:10808: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10711: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 10811 "configure"
+#line 10714 "configure"
 #include "confdefs.h"
 class A { public: int foo() { return 1; } };
                        class B : public A { private: using A::foo; };
@@ -10815,7 +10718,7 @@
 B b; return b.foo();
 ; return 0; }
 EOF
-if { (eval echo configure:10819: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10722: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cpp_access_changing_using2=no
 else
@@ -10843,12 +10746,12 @@
 fi
 
 echo $ac_n "checking whether the C++ \"using\" keyword resolves ambiguity""... $ac_c" 1>&6
-echo "configure:10847: checking whether the C++ \"using\" keyword resolves ambiguity" >&5
+echo "configure:10750: checking whether the C++ \"using\" keyword resolves ambiguity" >&5
 if eval "test \"`echo '$''{'ac_cv_cpp_ambiguity_resolving_using'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10852 "configure"
+#line 10755 "configure"
 #include "confdefs.h"
 class X { 
                                  public: int go(const X&) {return 3;}
@@ -10864,7 +10767,7 @@
 X x; Y y; y.jo(x);
 ; return 0; }
 EOF
-if { (eval echo configure:10868: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10771: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cpp_ambiguity_resolving_using=yes
 else
@@ -10885,19 +10788,19 @@
 fi
 
 echo $ac_n "checking for \"std::\" namespace""... $ac_c" 1>&6
-echo "configure:10889: checking for \"std::\" namespace" >&5
+echo "configure:10792: checking for \"std::\" namespace" >&5
 if eval "test \"`echo '$''{'ac_cv_cpp_namespace_std'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10894 "configure"
+#line 10797 "configure"
 #include "confdefs.h"
 #include <algorithm>
 int main() {
 return std::min(0, 1);
 ; return 0; }
 EOF
-if { (eval echo configure:10901: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10804: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cpp_namespace_std=yes
 else
@@ -10918,12 +10821,12 @@
 fi
 
 echo $ac_n "checking whether standard template operator!=() is ambiguous""... $ac_c" 1>&6
-echo "configure:10922: checking whether standard template operator!=() is ambiguous" >&5
+echo "configure:10825: checking whether standard template operator!=() is ambiguous" >&5
 if eval "test \"`echo '$''{'ac_cv_cpp_unambiguous_std_notequal'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10927 "configure"
+#line 10830 "configure"
 #include "confdefs.h"
 #include <algorithm>
                                 struct T1 {};
@@ -10933,7 +10836,7 @@
 T1 a,b; return a != b;
 ; return 0; }
 EOF
-if { (eval echo configure:10937: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10840: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cpp_unambiguous_std_notequal=unambiguous
 else
@@ -10955,12 +10858,12 @@
 
 
 echo $ac_n "checking for C++ reinterpret_cast""... $ac_c" 1>&6
-echo "configure:10959: checking for C++ reinterpret_cast" >&5
+echo "configure:10862: checking for C++ reinterpret_cast" >&5
 if eval "test \"`echo '$''{'ac_cv_cpp_reinterpret_cast'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10964 "configure"
+#line 10867 "configure"
 #include "confdefs.h"
 struct X { int i; };
                                struct Y { int i; };
@@ -10968,7 +10871,7 @@
 X x; X*const z = &x;Y*y = reinterpret_cast<Y*>(z);
 ; return 0; }
 EOF
-if { (eval echo configure:10972: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10875: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cpp_reinterpret_cast=yes
 else
@@ -10989,7 +10892,7 @@
 fi
 
 echo $ac_n "checking for C++ dynamic_cast to void*""... $ac_c" 1>&6
-echo "configure:10993: checking for C++ dynamic_cast to void*" >&5
+echo "configure:10896: checking for C++ dynamic_cast to void*" >&5
 if eval "test \"`echo '$''{'ac_cv_cpp_dynamic_cast_void_ptr'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -10997,8 +10900,11 @@
   ac_cv_cpp_dynamic_cast_void_ptr=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 11001 "configure"
+#line 10904 "configure"
 #include "confdefs.h"
+#ifdef __cplusplus
+extern "C" void exit(int);
+#endif
 class X { int i; public: virtual ~X() { } };
                             class Y { int j; public: virtual ~Y() { } };
                             class Z : public X, public Y { int k; };
@@ -11013,7 +10919,7 @@
                                            ((void*)&mdo == dynamic_cast<void*>(suby))));
                             }
 EOF
-if { (eval echo configure:11017: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_cpp_dynamic_cast_void_ptr=yes
 else
@@ -11037,19 +10943,19 @@
 
 
 echo $ac_n "checking whether C++ requires implementation of unused virtual methods""... $ac_c" 1>&6
-echo "configure:11041: checking whether C++ requires implementation of unused virtual methods" >&5
+echo "configure:10947: checking whether C++ requires implementation of unused virtual methods" >&5
 if eval "test \"`echo '$''{'ac_cv_cpp_unused_required'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 11046 "configure"
+#line 10952 "configure"
 #include "confdefs.h"
 class X {private: virtual void never_called();};
 int main() {
 X x;
 ; return 0; }
 EOF
-if { (eval echo configure:11053: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_cpp_unused_required=no
 else
@@ -11072,12 +10978,12 @@
 
 
 echo $ac_n "checking for trouble comparing to zero near std::operator!=()""... $ac_c" 1>&6
-echo "configure:11076: checking for trouble comparing to zero near std::operator!=()" >&5
+echo "configure:10982: checking for trouble comparing to zero near std::operator!=()" >&5
 if eval "test \"`echo '$''{'ac_cv_trouble_comparing_to_zero'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 11081 "configure"
+#line 10987 "configure"
 #include "confdefs.h"
 #include <algorithm>
                                 template <class T> class Foo {};
@@ -11088,7 +10994,7 @@
 Foo<int> f; return (0 != f);
 ; return 0; }
 EOF
-if { (eval echo configure:11092: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10998: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_trouble_comparing_to_zero=no
 else
@@ -11120,19 +11026,19 @@
 
 
 echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:11124: checking for LC_MESSAGES" >&5
+echo "configure:11030: checking for LC_MESSAGES" >&5
 if eval "test \"`echo '$''{'ac_cv_i18n_lc_messages'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 11129 "configure"
+#line 11035 "configure"
 #include "confdefs.h"
 #include <locale.h>
 int main() {
 int category = LC_MESSAGES;
 ; return 0; }
 EOF
-if { (eval echo configure:11136: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11042: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_i18n_lc_messages=yes
 else
@@ -11213,7 +11119,7 @@
 	# Extract the first word of "nspr-config", so it can be a program name with args.
 set dummy nspr-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:11217: checking for $ac_word" >&5
+echo "configure:11123: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_NSPR_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -11248,7 +11154,7 @@
 
 	min_nspr_version=4.0.0
 	echo $ac_n "checking for NSPR - version >= $min_nspr_version (skipping)""... $ac_c" 1>&6
-echo "configure:11252: checking for NSPR - version >= $min_nspr_version (skipping)" >&5
+echo "configure:11158: checking for NSPR - version >= $min_nspr_version (skipping)" >&5
 
 	no_nspr=""
 	if test "$NSPR_CONFIG" = "no"; then
@@ -11318,7 +11224,7 @@
     SYSTEM_JPEG=
 else
     echo $ac_n "checking for jpeg_destroy_compress in -ljpeg""... $ac_c" 1>&6
-echo "configure:11322: checking for jpeg_destroy_compress in -ljpeg" >&5
+echo "configure:11228: checking for jpeg_destroy_compress in -ljpeg" >&5
 ac_lib_var=`echo jpeg'_'jpeg_destroy_compress | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -11326,7 +11232,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ljpeg $JPEG_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 11330 "configure"
+#line 11236 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11337,7 +11243,7 @@
 jpeg_destroy_compress()
 ; return 0; }
 EOF
-if { (eval echo configure:11341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11247: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11366,7 +11272,7 @@
   SYSTEM_JPEG= 
 else
   cat > conftest.$ac_ext <<EOF
-#line 11370 "configure"
+#line 11276 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 	#include <sys/types.h>
@@ -11380,7 +11286,7 @@
 	}
 	
 EOF
-if { (eval echo configure:11384: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:11290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   SYSTEM_JPEG=1
 else
@@ -11421,7 +11327,7 @@
     SYSTEM_ZLIB=
 else
     echo $ac_n "checking for gzread in -lz""... $ac_c" 1>&6
-echo "configure:11425: checking for gzread in -lz" >&5
+echo "configure:11331: checking for gzread in -lz" >&5
 ac_lib_var=`echo z'_'gzread | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -11429,7 +11335,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lz $ZLIB_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 11433 "configure"
+#line 11339 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11440,7 +11346,7 @@
 gzread()
 ; return 0; }
 EOF
-if { (eval echo configure:11444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11468,7 +11374,7 @@
   SYSTEM_ZLIB= 
 else
   cat > conftest.$ac_ext <<EOF
-#line 11472 "configure"
+#line 11378 "configure"
 #include "confdefs.h"
 
     #include <stdio.h>
@@ -11489,7 +11395,7 @@
     }
     
 EOF
-if { (eval echo configure:11493: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:11399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   SYSTEM_ZLIB=1
 else
@@ -11532,7 +11438,7 @@
     SYSTEM_PNG=
 else
     echo $ac_n "checking for png_get_valid in -lpng""... $ac_c" 1>&6
-echo "configure:11536: checking for png_get_valid in -lpng" >&5
+echo "configure:11442: checking for png_get_valid in -lpng" >&5
 ac_lib_var=`echo png'_'png_get_valid | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -11540,7 +11446,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lpng $PNG_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 11544 "configure"
+#line 11450 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11551,7 +11457,7 @@
 png_get_valid()
 ; return 0; }
 EOF
-if { (eval echo configure:11555: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11461: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11579,7 +11485,7 @@
   SYSTEM_PNG= 
 else
   cat > conftest.$ac_ext <<EOF
-#line 11583 "configure"
+#line 11489 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 	#include <sys/types.h>
@@ -11593,7 +11499,7 @@
 	}
 	
 EOF
-if { (eval echo configure:11597: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:11503: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   SYSTEM_PNG=1
 else
@@ -11888,7 +11794,7 @@
   # Extract the first word of "gtk-config", so it can be a program name with args.
 set dummy gtk-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:11892: checking for $ac_word" >&5
+echo "configure:11798: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GTK_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -11923,7 +11829,7 @@
 
   min_gtk_version=$GTK_VERSION
   echo $ac_n "checking for GTK - version >= $min_gtk_version""... $ac_c" 1>&6
-echo "configure:11927: checking for GTK - version >= $min_gtk_version" >&5
+echo "configure:11833: checking for GTK - version >= $min_gtk_version" >&5
   no_gtk=""
   if test "$GTK_CONFIG" = "no" ; then
     no_gtk=yes
@@ -11946,7 +11852,7 @@
   echo $ac_n "cross compiling; assumed OK... $ac_c"
 else
   cat > conftest.$ac_ext <<EOF
-#line 11950 "configure"
+#line 11856 "configure"
 #include "confdefs.h"
 
 #include <gtk/gtk.h>
@@ -12024,7 +11930,7 @@
 }
 
 EOF
-if { (eval echo configure:12028: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:11934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -12059,7 +11965,7 @@
           CFLAGS="$CFLAGS $GTK_CFLAGS"
           LIBS="$LIBS $GTK_LIBS"
           cat > conftest.$ac_ext <<EOF
-#line 12063 "configure"
+#line 11969 "configure"
 #include "confdefs.h"
 
 #include <gtk/gtk.h>
@@ -12069,7 +11975,7 @@
  return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); 
 ; return 0; }
 EOF
-if { (eval echo configure:12073: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
    echo "*** The test program compiled, but did not run. This usually means"
           echo "*** that the run-time linker is not finding GTK or finding the wrong"
@@ -12121,7 +12027,7 @@
     # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:12125: checking for $ac_word" >&5
+echo "configure:12031: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -12165,19 +12071,19 @@
      PKG_CONFIG_MIN_VERSION=0.9.0
      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
         echo $ac_n "checking for gtk+-2.0 >= 1.3.7""... $ac_c" 1>&6
-echo "configure:12169: checking for gtk+-2.0 >= 1.3.7" >&5
+echo "configure:12075: checking for gtk+-2.0 >= 1.3.7" >&5
 
         if $PKG_CONFIG --exists "gtk+-2.0 >= 1.3.7" ; then
             echo "$ac_t""yes" 1>&6
             succeeded=yes
 
             echo $ac_n "checking MOZ_GTK2_CFLAGS""... $ac_c" 1>&6
-echo "configure:12176: checking MOZ_GTK2_CFLAGS" >&5
+echo "configure:12082: checking MOZ_GTK2_CFLAGS" >&5
             MOZ_GTK2_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 1.3.7"`
             echo "$ac_t""$MOZ_GTK2_CFLAGS" 1>&6
 
             echo $ac_n "checking MOZ_GTK2_LIBS""... $ac_c" 1>&6
-echo "configure:12181: checking MOZ_GTK2_LIBS" >&5
+echo "configure:12087: checking MOZ_GTK2_LIBS" >&5
             ## don't use --libs since that can do evil things like add
             ## -Wl,--export-dynamic
             MOZ_GTK2_LIBS="`$PKG_CONFIG --libs-only-L \"gtk+-2.0 >= 1.3.7\"` `$PKG_CONFIG --libs-only-l \"gtk+-2.0 >= 1.3.7\"`"
@@ -12242,7 +12148,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:12246: checking for $ac_word" >&5
+echo "configure:12152: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_HOST_MOC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -12294,7 +12200,7 @@
 cross_compiling=$ac_cv_prog_cxx_cross
 
     echo $ac_n "checking for main in -lqt""... $ac_c" 1>&6
-echo "configure:12298: checking for main in -lqt" >&5
+echo "configure:12204: checking for main in -lqt" >&5
 ac_lib_var=`echo qt'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -12302,14 +12208,14 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lqt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 12306 "configure"
+#line 12212 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:12313: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12219: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -12328,7 +12234,7 @@
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for main in -lqt-mt""... $ac_c" 1>&6
-echo "configure:12332: checking for main in -lqt-mt" >&5
+echo "configure:12238: checking for main in -lqt-mt" >&5
 ac_lib_var=`echo qt-mt'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -12336,14 +12242,14 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lqt-mt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 12340 "configure"
+#line 12246 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:12347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12253: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -12379,9 +12285,9 @@
     LIBS="$LIBS $QT_LIBS"
     
     echo $ac_n "checking Qt - version >= $QT_VERSION""... $ac_c" 1>&6
-echo "configure:12383: checking Qt - version >= $QT_VERSION" >&5
+echo "configure:12289: checking Qt - version >= $QT_VERSION" >&5
     cat > conftest.$ac_ext <<EOF
-#line 12385 "configure"
+#line 12291 "configure"
 #include "confdefs.h"
 #include <qglobal.h>
 int main() {
@@ -12392,7 +12298,7 @@
     
 ; return 0; }
 EOF
-if { (eval echo configure:12396: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12302: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   result="yes"
 else
@@ -12901,7 +12807,7 @@
     # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:12905: checking for $ac_word" >&5
+echo "configure:12811: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -12945,19 +12851,19 @@
      PKG_CONFIG_MIN_VERSION=0.9.0
      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
         echo $ac_n "checking for xft""... $ac_c" 1>&6
-echo "configure:12949: checking for xft" >&5
+echo "configure:12855: checking for xft" >&5
 
         if $PKG_CONFIG --exists "xft" ; then
             echo "$ac_t""yes" 1>&6
             succeeded=yes
 
             echo $ac_n "checking MOZ_XFT_CFLAGS""... $ac_c" 1>&6
-echo "configure:12956: checking MOZ_XFT_CFLAGS" >&5
+echo "configure:12862: checking MOZ_XFT_CFLAGS" >&5
             MOZ_XFT_CFLAGS=`$PKG_CONFIG --cflags "xft"`
             echo "$ac_t""$MOZ_XFT_CFLAGS" 1>&6
 
             echo $ac_n "checking MOZ_XFT_LIBS""... $ac_c" 1>&6
-echo "configure:12961: checking MOZ_XFT_LIBS" >&5
+echo "configure:12867: checking MOZ_XFT_LIBS" >&5
             ## don't use --libs since that can do evil things like add
             ## -Wl,--export-dynamic
             MOZ_XFT_LIBS="`$PKG_CONFIG --libs-only-L \"xft\"` `$PKG_CONFIG --libs-only-l \"xft\"`"
@@ -12992,7 +12898,7 @@
     # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:12996: checking for $ac_word" >&5
+echo "configure:12902: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -13036,19 +12942,19 @@
      PKG_CONFIG_MIN_VERSION=0.9.0
      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
         echo $ac_n "checking for pango >= 1.1.0""... $ac_c" 1>&6
-echo "configure:13040: checking for pango >= 1.1.0" >&5
+echo "configure:12946: checking for pango >= 1.1.0" >&5
 
         if $PKG_CONFIG --exists "pango >= 1.1.0" ; then
             echo "$ac_t""yes" 1>&6
             succeeded=yes
 
             echo $ac_n "checking _PANGOCHK_CFLAGS""... $ac_c" 1>&6
-echo "configure:13047: checking _PANGOCHK_CFLAGS" >&5
+echo "configure:12953: checking _PANGOCHK_CFLAGS" >&5
             _PANGOCHK_CFLAGS=`$PKG_CONFIG --cflags "pango >= 1.1.0"`
             echo "$ac_t""$_PANGOCHK_CFLAGS" 1>&6
 
             echo $ac_n "checking _PANGOCHK_LIBS""... $ac_c" 1>&6
-echo "configure:13052: checking _PANGOCHK_LIBS" >&5
+echo "configure:12958: checking _PANGOCHK_LIBS" >&5
             ## don't use --libs since that can do evil things like add
             ## -Wl,--export-dynamic
             _PANGOCHK_LIBS="`$PKG_CONFIG --libs-only-L \"pango >= 1.1.0\"` `$PKG_CONFIG --libs-only-l \"pango >= 1.1.0\"`"
@@ -13108,7 +13014,7 @@
     # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:13112: checking for $ac_word" >&5
+echo "configure:13018: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -13152,19 +13058,19 @@
      PKG_CONFIG_MIN_VERSION=0.9.0
      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
         echo $ac_n "checking for pango >= 1.6.0 pangoft2 >= 1.6.0""... $ac_c" 1>&6
-echo "configure:13156: checking for pango >= 1.6.0 pangoft2 >= 1.6.0" >&5
+echo "configure:13062: checking for pango >= 1.6.0 pangoft2 >= 1.6.0" >&5
 
         if $PKG_CONFIG --exists "pango >= 1.6.0 pangoft2 >= 1.6.0" ; then
             echo "$ac_t""yes" 1>&6
             succeeded=yes
 
             echo $ac_n "checking MOZ_PANGO_CFLAGS""... $ac_c" 1>&6
-echo "configure:13163: checking MOZ_PANGO_CFLAGS" >&5
+echo "configure:13069: checking MOZ_PANGO_CFLAGS" >&5
             MOZ_PANGO_CFLAGS=`$PKG_CONFIG --cflags "pango >= 1.6.0 pangoft2 >= 1.6.0"`
             echo "$ac_t""$MOZ_PANGO_CFLAGS" 1>&6
 
             echo $ac_n "checking MOZ_PANGO_LIBS""... $ac_c" 1>&6
-echo "configure:13168: checking MOZ_PANGO_LIBS" >&5
+echo "configure:13074: checking MOZ_PANGO_LIBS" >&5
             ## don't use --libs since that can do evil things like add
             ## -Wl,--export-dynamic
             MOZ_PANGO_LIBS="`$PKG_CONFIG --libs-only-L \"pango >= 1.6.0 pangoft2 >= 1.6.0\"` `$PKG_CONFIG --libs-only-l \"pango >= 1.6.0 pangoft2 >= 1.6.0\"`"
@@ -13232,7 +13138,7 @@
     _SAVE_LDFLAGS="$LDFLAGS"
     LDFLAGS="$XLDFLAGS $LDFLAGS"
     echo $ac_n "checking for XpGetPrinterList in -lXp""... $ac_c" 1>&6
-echo "configure:13236: checking for XpGetPrinterList in -lXp" >&5
+echo "configure:13142: checking for XpGetPrinterList in -lXp" >&5
 ac_lib_var=`echo Xp'_'XpGetPrinterList | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -13240,7 +13146,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lXp $XEXT_LIBS $XLIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 13244 "configure"
+#line 13150 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13251,7 +13157,7 @@
 XpGetPrinterList()
 ; return 0; }
 EOF
-if { (eval echo configure:13255: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13161: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13324,7 +13230,7 @@
     # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:13328: checking for $ac_word" >&5
+echo "configure:13234: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -13368,19 +13274,19 @@
      PKG_CONFIG_MIN_VERSION=0.9.0
      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
         echo $ac_n "checking for gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION""... $ac_c" 1>&6
-echo "configure:13372: checking for gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION" >&5
+echo "configure:13278: checking for gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION" >&5
 
         if $PKG_CONFIG --exists "gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION" ; then
             echo "$ac_t""yes" 1>&6
             succeeded=yes
 
             echo $ac_n "checking MOZ_GNOMEVFS_CFLAGS""... $ac_c" 1>&6
-echo "configure:13379: checking MOZ_GNOMEVFS_CFLAGS" >&5
+echo "configure:13285: checking MOZ_GNOMEVFS_CFLAGS" >&5
             MOZ_GNOMEVFS_CFLAGS=`$PKG_CONFIG --cflags "gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION"`
             echo "$ac_t""$MOZ_GNOMEVFS_CFLAGS" 1>&6
 
             echo $ac_n "checking MOZ_GNOMEVFS_LIBS""... $ac_c" 1>&6
-echo "configure:13384: checking MOZ_GNOMEVFS_LIBS" >&5
+echo "configure:13290: checking MOZ_GNOMEVFS_LIBS" >&5
             ## don't use --libs since that can do evil things like add
             ## -Wl,--export-dynamic
             MOZ_GNOMEVFS_LIBS="`$PKG_CONFIG --libs-only-L \"gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION\"` `$PKG_CONFIG --libs-only-l \"gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION\"`"
@@ -13430,7 +13336,7 @@
     # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:13434: checking for $ac_word" >&5
+echo "configure:13340: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -13474,19 +13380,19 @@
      PKG_CONFIG_MIN_VERSION=0.9.0
      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
         echo $ac_n "checking for gconf-2.0 >= $GCONF_VERSION""... $ac_c" 1>&6
-echo "configure:13478: checking for gconf-2.0 >= $GCONF_VERSION" >&5
+echo "configure:13384: checking for gconf-2.0 >= $GCONF_VERSION" >&5
 
         if $PKG_CONFIG --exists "gconf-2.0 >= $GCONF_VERSION" ; then
             echo "$ac_t""yes" 1>&6
             succeeded=yes
 
             echo $ac_n "checking MOZ_GCONF_CFLAGS""... $ac_c" 1>&6
-echo "configure:13485: checking MOZ_GCONF_CFLAGS" >&5
+echo "configure:13391: checking MOZ_GCONF_CFLAGS" >&5
             MOZ_GCONF_CFLAGS=`$PKG_CONFIG --cflags "gconf-2.0 >= $GCONF_VERSION"`
             echo "$ac_t""$MOZ_GCONF_CFLAGS" 1>&6
 
             echo $ac_n "checking MOZ_GCONF_LIBS""... $ac_c" 1>&6
-echo "configure:13490: checking MOZ_GCONF_LIBS" >&5
+echo "configure:13396: checking MOZ_GCONF_LIBS" >&5
             ## don't use --libs since that can do evil things like add
             ## -Wl,--export-dynamic
             MOZ_GCONF_LIBS="`$PKG_CONFIG --libs-only-L \"gconf-2.0 >= $GCONF_VERSION\"` `$PKG_CONFIG --libs-only-l \"gconf-2.0 >= $GCONF_VERSION\"`"
@@ -13532,7 +13438,7 @@
     # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:13536: checking for $ac_word" >&5
+echo "configure:13442: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -13576,19 +13482,19 @@
      PKG_CONFIG_MIN_VERSION=0.9.0
      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
         echo $ac_n "checking for libgnome-2.0 >= $LIBGNOME_VERSION""... $ac_c" 1>&6
-echo "configure:13580: checking for libgnome-2.0 >= $LIBGNOME_VERSION" >&5
+echo "configure:13486: checking for libgnome-2.0 >= $LIBGNOME_VERSION" >&5
 
         if $PKG_CONFIG --exists "libgnome-2.0 >= $LIBGNOME_VERSION" ; then
             echo "$ac_t""yes" 1>&6
             succeeded=yes
 
             echo $ac_n "checking MOZ_LIBGNOME_CFLAGS""... $ac_c" 1>&6
-echo "configure:13587: checking MOZ_LIBGNOME_CFLAGS" >&5
+echo "configure:13493: checking MOZ_LIBGNOME_CFLAGS" >&5
             MOZ_LIBGNOME_CFLAGS=`$PKG_CONFIG --cflags "libgnome-2.0 >= $LIBGNOME_VERSION"`
             echo "$ac_t""$MOZ_LIBGNOME_CFLAGS" 1>&6
 
             echo $ac_n "checking MOZ_LIBGNOME_LIBS""... $ac_c" 1>&6
-echo "configure:13592: checking MOZ_LIBGNOME_LIBS" >&5
+echo "configure:13498: checking MOZ_LIBGNOME_LIBS" >&5
             ## don't use --libs since that can do evil things like add
             ## -Wl,--export-dynamic
             MOZ_LIBGNOME_LIBS="`$PKG_CONFIG --libs-only-L \"libgnome-2.0 >= $LIBGNOME_VERSION\"` `$PKG_CONFIG --libs-only-l \"libgnome-2.0 >= $LIBGNOME_VERSION\"`"
@@ -13665,7 +13571,7 @@
     # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:13669: checking for $ac_word" >&5
+echo "configure:13575: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -13709,19 +13615,19 @@
      PKG_CONFIG_MIN_VERSION=0.9.0
      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
         echo $ac_n "checking for libgnomeui-2.0 >= $GNOMEUI_VERSION""... $ac_c" 1>&6
-echo "configure:13713: checking for libgnomeui-2.0 >= $GNOMEUI_VERSION" >&5
+echo "configure:13619: checking for libgnomeui-2.0 >= $GNOMEUI_VERSION" >&5
 
         if $PKG_CONFIG --exists "libgnomeui-2.0 >= $GNOMEUI_VERSION" ; then
             echo "$ac_t""yes" 1>&6
             succeeded=yes
 
             echo $ac_n "checking MOZ_GNOMEUI_CFLAGS""... $ac_c" 1>&6
-echo "configure:13720: checking MOZ_GNOMEUI_CFLAGS" >&5
+echo "configure:13626: checking MOZ_GNOMEUI_CFLAGS" >&5
             MOZ_GNOMEUI_CFLAGS=`$PKG_CONFIG --cflags "libgnomeui-2.0 >= $GNOMEUI_VERSION"`
             echo "$ac_t""$MOZ_GNOMEUI_CFLAGS" 1>&6
 
             echo $ac_n "checking MOZ_GNOMEUI_LIBS""... $ac_c" 1>&6
-echo "configure:13725: checking MOZ_GNOMEUI_LIBS" >&5
+echo "configure:13631: checking MOZ_GNOMEUI_LIBS" >&5
             ## don't use --libs since that can do evil things like add
             ## -Wl,--export-dynamic
             MOZ_GNOMEUI_LIBS="`$PKG_CONFIG --libs-only-L \"libgnomeui-2.0 >= $GNOMEUI_VERSION\"` `$PKG_CONFIG --libs-only-l \"libgnomeui-2.0 >= $GNOMEUI_VERSION\"`"
@@ -14201,7 +14107,7 @@
   # Extract the first word of "javac", so it can be a program name with args.
 set dummy javac; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:14205: checking for $ac_word" >&5
+echo "configure:14111: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_JAVAC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -14237,7 +14143,7 @@
   # Extract the first word of "jar", so it can be a program name with args.
 set dummy jar; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:14241: checking for $ac_word" >&5
+echo "configure:14147: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_JAR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -14390,7 +14296,7 @@
   gdiplus)
     MOZ_SVG_RENDERER_GDIPLUS=1
                         echo $ac_n "checking for Gdiplus.h""... $ac_c" 1>&6
-echo "configure:14394: checking for Gdiplus.h" >&5
+echo "configure:14300: checking for Gdiplus.h" >&5
     
     ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -14400,7 +14306,7 @@
 cross_compiling=$ac_cv_prog_cxx_cross
 
     cat > conftest.$ac_ext <<EOF
-#line 14404 "configure"
+#line 14310 "configure"
 #include "confdefs.h"
 #include <windows.h>
                     #include <unknwn.h>
@@ -14409,7 +14315,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:14413: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14319: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 else
@@ -14455,6 +14361,25 @@
 fi
 
 
+# Check whether --enable-smil or --disable-smil was given.
+if test "${enable_smil+set}" = set; then
+  enableval="$enable_smil"
+  if test "$enableval" = "yes"; then
+    MOZ_SMIL=1
+  elif test "$enableval" = "no"; then
+    MOZ_SMIL= 
+  else
+    { echo "configure: error: Option, smil, does not take an argument ($enableval)." 1>&2; exit 1; }
+  fi
+fi
+
+if test -n "$MOZ_SMIL"; then
+  cat >> confdefs.h <<\EOF
+#define MOZ_SMIL 1
+EOF
+
+fi
+
 
 if test "$TX_EXE"; then
   cat >> confdefs.h <<\EOF
@@ -14509,13 +14434,13 @@
     msvc*|mks*|cygwin*|mingw*|wince*)
         if test -n "$MOZ_UPDATER"; then
             echo $ac_n "checking for iconv""... $ac_c" 1>&6
-echo "configure:14513: checking for iconv" >&5
+echo "configure:14438: checking for iconv" >&5
             for ac_prog in $HOST_ICONV "iconv"
 do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:14519: checking for $ac_word" >&5
+echo "configure:14444: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_HOST_ICONV'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -14790,18 +14715,18 @@
 
 if test -n "$MOZ_DEBUG"; then
     echo $ac_n "checking for valid debug flags""... $ac_c" 1>&6
-echo "configure:14794: checking for valid debug flags" >&5
+echo "configure:14719: checking for valid debug flags" >&5
     _SAVE_CFLAGS=$CFLAGS
     CFLAGS="$CFLAGS $MOZ_DEBUG_FLAGS"
     cat > conftest.$ac_ext <<EOF
-#line 14798 "configure"
+#line 14723 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main() {
 printf("Hello World\n");
 ; return 0; }
 EOF
-if { (eval echo configure:14805: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14730: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   _results=yes
 else
@@ -14842,18 +14767,18 @@
 if test "$COMPILE_ENVIRONMENT"; then
 if test -n "$MOZ_OPTIMIZE"; then
     echo $ac_n "checking for valid optimization flags""... $ac_c" 1>&6
-echo "configure:14846: checking for valid optimization flags" >&5
+echo "configure:14771: checking for valid optimization flags" >&5
     _SAVE_CFLAGS=$CFLAGS
     CFLAGS="$CFLAGS $MOZ_OPTIMIZE_FLAGS"
     cat > conftest.$ac_ext <<EOF
-#line 14850 "configure"
+#line 14775 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main() {
 printf("Hello World\n");
 ; return 0; }
 EOF
-if { (eval echo configure:14857: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14782: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   _results=yes
 else
@@ -15070,7 +14995,7 @@
 
 if test -n "$_ENABLE_EFENCE"; then
     echo $ac_n "checking for malloc in -lefence""... $ac_c" 1>&6
-echo "configure:15074: checking for malloc in -lefence" >&5
+echo "configure:14999: checking for malloc in -lefence" >&5
 ac_lib_var=`echo efence'_'malloc | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -15078,7 +15003,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lefence  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 15082 "configure"
+#line 15007 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -15089,7 +15014,7 @@
 malloc()
 ; return 0; }
 EOF
-if { (eval echo configure:15093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15018: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -15190,12 +15115,12 @@
     for ac_func in __builtin_vec_new __builtin_vec_delete __builtin_new __builtin_delete __pure_virtual
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15194: checking for $ac_func" >&5
+echo "configure:15119: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 15199 "configure"
+#line 15124 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -15221,7 +15146,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:15225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15150: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -15464,12 +15389,12 @@
     for ac_func in __cxa_demangle
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15468: checking for $ac_func" >&5
+echo "configure:15393: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 15473 "configure"
+#line 15398 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -15495,7 +15420,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:15499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15424: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -15633,7 +15558,7 @@
 # Compiler Options
 
 echo $ac_n "checking for gcc -pipe support""... $ac_c" 1>&6
-echo "configure:15637: checking for gcc -pipe support" >&5
+echo "configure:15562: checking for gcc -pipe support" >&5
 if test -n "$GNU_CC" && test -n "$GNU_CXX" && test -n "$GNU_AS"; then
     echo '#include <stdio.h>' > dummy-hello.c
     echo 'int main() { printf("Hello World\n"); exit(0); }' >> dummy-hello.c
@@ -15648,14 +15573,14 @@
         _SAVE_CFLAGS=$CFLAGS
         CFLAGS="$CFLAGS -pipe"
         cat > conftest.$ac_ext <<EOF
-#line 15652 "configure"
+#line 15577 "configure"
 #include "confdefs.h"
  #include <stdio.h> 
 int main() {
 printf("Hello World\n");
 ; return 0; }
 EOF
-if { (eval echo configure:15659: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15584: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   _res_gcc_pipe="yes"
 else
@@ -15697,16 +15622,16 @@
      _SAVE_CFLAGS="$CFLAGS"
      CFLAGS="$CFLAGS ${_COMPILER_PREFIX}-Wno-long-long"
      echo $ac_n "checking whether compiler supports -Wno-long-long""... $ac_c" 1>&6
-echo "configure:15701: checking whether compiler supports -Wno-long-long" >&5
+echo "configure:15626: checking whether compiler supports -Wno-long-long" >&5
      cat > conftest.$ac_ext <<EOF
-#line 15703 "configure"
+#line 15628 "configure"
 #include "confdefs.h"
 
 int main() {
 return(0);
 ; return 0; }
 EOF
-if { (eval echo configure:15710: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15635: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
    _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} ${_COMPILER_PREFIX}-Wno-long-long"
 	  _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} ${_COMPILER_PREFIX}-Wno-long-long"
@@ -15727,16 +15652,16 @@
 CFLAGS="$CFLAGS -fprofile-generate"
 
 echo $ac_n "checking whether C compiler supports -fprofile-generate""... $ac_c" 1>&6
-echo "configure:15731: checking whether C compiler supports -fprofile-generate" >&5
+echo "configure:15656: checking whether C compiler supports -fprofile-generate" >&5
 cat > conftest.$ac_ext <<EOF
-#line 15733 "configure"
+#line 15658 "configure"
 #include "confdefs.h"
 
 int main() {
 return 0;
 ; return 0; }
 EOF
-if { (eval echo configure:15740: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15665: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
    PROFILE_GEN_CFLAGS="-fprofile-generate"
                  result="yes" 
@@ -15754,16 +15679,16 @@
 else
   CFLAGS="$_SAVE_CFLAGS -fprofile-arcs"
   echo $ac_n "checking whether C compiler supports -fprofile-arcs""... $ac_c" 1>&6
-echo "configure:15758: checking whether C compiler supports -fprofile-arcs" >&5
+echo "configure:15683: checking whether C compiler supports -fprofile-arcs" >&5
   cat > conftest.$ac_ext <<EOF
-#line 15760 "configure"
+#line 15685 "configure"
 #include "confdefs.h"
 
 int main() {
 return 0;
 ; return 0; }
 EOF
-if { (eval echo configure:15767: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15692: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
    PROFILE_GEN_CFLAGS="-fprofile-arcs"
                    result="yes" 
@@ -15809,18 +15734,21 @@
     _SAVE_CXXFLAGS=$CXXFLAGS
     CXXFLAGS="$CXXFLAGS ${_WARNINGS_CXXFLAGS} ${_COMPILER_PREFIX}-pedantic"
     echo $ac_n "checking whether C++ compiler has -pedantic long long bug""... $ac_c" 1>&6
-echo "configure:15813: checking whether C++ compiler has -pedantic long long bug" >&5
+echo "configure:15738: checking whether C++ compiler has -pedantic long long bug" >&5
     if test "$cross_compiling" = yes; then
   result="maybe" 
 else
   cat > conftest.$ac_ext <<EOF
-#line 15818 "configure"
+#line 15743 "configure"
 #include "confdefs.h"
+#ifdef __cplusplus
+extern "C" void exit(int);
+#endif
  int main () {
                 if (sizeof(long long) != 8) { return 1; } 
                     return 0; } 
 EOF
-if { (eval echo configure:15824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:15752: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   result="no"
 else
@@ -15850,13 +15778,16 @@
 fi
 
 echo $ac_n "checking for correct temporary object destruction order""... $ac_c" 1>&6
-echo "configure:15854: checking for correct temporary object destruction order" >&5
+echo "configure:15782: checking for correct temporary object destruction order" >&5
 if test "$cross_compiling" = yes; then
   result="maybe"
 else
   cat > conftest.$ac_ext <<EOF
-#line 15859 "configure"
+#line 15787 "configure"
 #include "confdefs.h"
+#ifdef __cplusplus
+extern "C" void exit(int);
+#endif
  class A {
              public:  A(int& x) : mValue(x) {}
                       ~A() { mValue--; }
@@ -15875,7 +15806,7 @@
              }
              
 EOF
-if { (eval echo configure:15879: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:15810: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   result="yes"
 else
@@ -15896,12 +15827,12 @@
 _SAVE_CXXFLAGS=$CXXFLAGS
 CXXFLAGS="$CXXFLAGS ${_WARNINGS_CXXFLAGS}"
 echo $ac_n "checking for correct overload resolution with const and templates""... $ac_c" 1>&6
-echo "configure:15900: checking for correct overload resolution with const and templates" >&5
+echo "configure:15831: checking for correct overload resolution with const and templates" >&5
 if eval "test \"`echo '$''{'ac_nscap_nonconst_opeq_bug'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 15905 "configure"
+#line 15836 "configure"
 #include "confdefs.h"
 
                       template <class T>
@@ -15931,7 +15862,7 @@
                     
 ; return 0; }
 EOF
-if { (eval echo configure:15935: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15866: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_nscap_nonconst_opeq_bug="no"
 else
@@ -16194,7 +16125,7 @@
     # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:16198: checking for $ac_word" >&5
+echo "configure:16129: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -16238,19 +16169,19 @@
      PKG_CONFIG_MIN_VERSION=0.9.0
      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
         echo $ac_n "checking for libIDL-2.0 >= 0.8.0""... $ac_c" 1>&6
-echo "configure:16242: checking for libIDL-2.0 >= 0.8.0" >&5
+echo "configure:16173: checking for libIDL-2.0 >= 0.8.0" >&5
 
         if $PKG_CONFIG --exists "libIDL-2.0 >= 0.8.0" ; then
             echo "$ac_t""yes" 1>&6
             succeeded=yes
 
             echo $ac_n "checking LIBIDL_CFLAGS""... $ac_c" 1>&6
-echo "configure:16249: checking LIBIDL_CFLAGS" >&5
+echo "configure:16180: checking LIBIDL_CFLAGS" >&5
             LIBIDL_CFLAGS=`$PKG_CONFIG --cflags "libIDL-2.0 >= 0.8.0"`
             echo "$ac_t""$LIBIDL_CFLAGS" 1>&6
 
             echo $ac_n "checking LIBIDL_LIBS""... $ac_c" 1>&6
-echo "configure:16254: checking LIBIDL_LIBS" >&5
+echo "configure:16185: checking LIBIDL_LIBS" >&5
             ## don't use --libs since that can do evil things like add
             ## -Wl,--export-dynamic
             LIBIDL_LIBS="`$PKG_CONFIG --libs-only-L \"libIDL-2.0 >= 0.8.0\"` `$PKG_CONFIG --libs-only-l \"libIDL-2.0 >= 0.8.0\"`"
@@ -16373,7 +16304,7 @@
   # Extract the first word of "glib-config", so it can be a program name with args.
 set dummy glib-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:16377: checking for $ac_word" >&5
+echo "configure:16308: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GLIB_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -16408,7 +16339,7 @@
 
   min_glib_version=1.2.0
   echo $ac_n "checking for GLIB - version >= $min_glib_version""... $ac_c" 1>&6
-echo "configure:16412: checking for GLIB - version >= $min_glib_version" >&5
+echo "configure:16343: checking for GLIB - version >= $min_glib_version" >&5
   no_glib=""
   if test "$GLIB_CONFIG" = "no" ; then
     no_glib=yes
@@ -16431,7 +16362,7 @@
   echo $ac_n "cross compiling; assumed OK... $ac_c"
 else
   cat > conftest.$ac_ext <<EOF
-#line 16435 "configure"
+#line 16366 "configure"
 #include "confdefs.h"
 
 #include <glib.h>
@@ -16507,7 +16438,7 @@
 }
 
 EOF
-if { (eval echo configure:16511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:16442: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -16541,7 +16472,7 @@
           CFLAGS="$CFLAGS $GLIB_CFLAGS"
           LIBS="$LIBS $GLIB_LIBS"
           cat > conftest.$ac_ext <<EOF
-#line 16545 "configure"
+#line 16476 "configure"
 #include "confdefs.h"
 
 #include <glib.h>
@@ -16551,7 +16482,7 @@
  return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); 
 ; return 0; }
 EOF
-if { (eval echo configure:16555: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
    echo "*** The test program compiled, but did not run. This usually means"
           echo "*** that the run-time linker is not finding GLIB or finding the wrong"
@@ -16595,7 +16526,7 @@
   # Extract the first word of "libIDL-config", so it can be a program name with args.
 set dummy libIDL-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:16599: checking for $ac_word" >&5
+echo "configure:16530: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_LIBIDL_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -16630,7 +16561,7 @@
 
   min_libIDL_version=$LIBIDL_VERSION
   echo $ac_n "checking for libIDL - version >= $min_libIDL_version""... $ac_c" 1>&6
-echo "configure:16634: checking for libIDL - version >= $min_libIDL_version" >&5
+echo "configure:16565: checking for libIDL - version >= $min_libIDL_version" >&5
   no_libIDL=""
   if test "$LIBIDL_CONFIG" = "no" ; then
     no_libIDL=yes
@@ -16657,7 +16588,7 @@
   echo $ac_n "cross compiling; assumed OK... $ac_c"
 else
   cat > conftest.$ac_ext <<EOF
-#line 16661 "configure"
+#line 16592 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -16743,7 +16674,7 @@
 }
 
 EOF
-if { (eval echo configure:16747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:16678: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -16777,7 +16708,7 @@
           CFLAGS="$CFLAGS $LIBIDL_CFLAGS"
           LIBS="$LIBS $LIBIDL_LIBS"
           cat > conftest.$ac_ext <<EOF
-#line 16781 "configure"
+#line 16712 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -16788,7 +16719,7 @@
  return IDL_get_libver_string ? 1 : 0; 
 ; return 0; }
 EOF
-if { (eval echo configure:16792: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16723: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
    echo "*** The test program compiled, but did not run. This usually means"
           echo "*** that the run-time linker is not finding libIDL or finding the wrong"
@@ -16916,7 +16847,7 @@
   # Extract the first word of "glib-config", so it can be a program name with args.
 set dummy glib-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:16920: checking for $ac_word" >&5
+echo "configure:16851: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GLIB_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -16951,7 +16882,7 @@
 
   min_glib_version=1.2.0
   echo $ac_n "checking for GLIB - version >= $min_glib_version""... $ac_c" 1>&6
-echo "configure:16955: checking for GLIB - version >= $min_glib_version" >&5
+echo "configure:16886: checking for GLIB - version >= $min_glib_version" >&5
   no_glib=""
   if test "$GLIB_CONFIG" = "no" ; then
     no_glib=yes
@@ -16974,7 +16905,7 @@
   echo $ac_n "cross compiling; assumed OK... $ac_c"
 else
   cat > conftest.$ac_ext <<EOF
-#line 16978 "configure"
+#line 16909 "configure"
 #include "confdefs.h"
 
 #include <glib.h>
@@ -17050,7 +16981,7 @@
 }
 
 EOF
-if { (eval echo configure:17054: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:16985: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -17084,7 +17015,7 @@
           CFLAGS="$CFLAGS $GLIB_CFLAGS"
           LIBS="$LIBS $GLIB_LIBS"
           cat > conftest.$ac_ext <<EOF
-#line 17088 "configure"
+#line 17019 "configure"
 #include "confdefs.h"
 
 #include <glib.h>
@@ -17094,7 +17025,7 @@
  return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); 
 ; return 0; }
 EOF
-if { (eval echo configure:17098: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
    echo "*** The test program compiled, but did not run. This usually means"
           echo "*** that the run-time linker is not finding GLIB or finding the wrong"
@@ -17138,7 +17069,7 @@
   # Extract the first word of "libIDL-config", so it can be a program name with args.
 set dummy libIDL-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:17142: checking for $ac_word" >&5
+echo "configure:17073: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_LIBIDL_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -17173,7 +17104,7 @@
 
   min_libIDL_version=$LIBIDL_VERSION
   echo $ac_n "checking for libIDL - version >= $min_libIDL_version""... $ac_c" 1>&6
-echo "configure:17177: checking for libIDL - version >= $min_libIDL_version" >&5
+echo "configure:17108: checking for libIDL - version >= $min_libIDL_version" >&5
   no_libIDL=""
   if test "$LIBIDL_CONFIG" = "no" ; then
     no_libIDL=yes
@@ -17200,7 +17131,7 @@
   echo $ac_n "cross compiling; assumed OK... $ac_c"
 else
   cat > conftest.$ac_ext <<EOF
-#line 17204 "configure"
+#line 17135 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -17286,7 +17217,7 @@
 }
 
 EOF
-if { (eval echo configure:17290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:17221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -17320,7 +17251,7 @@
           CFLAGS="$CFLAGS $LIBIDL_CFLAGS"
           LIBS="$LIBS $LIBIDL_LIBS"
           cat > conftest.$ac_ext <<EOF
-#line 17324 "configure"
+#line 17255 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -17331,7 +17262,7 @@
  return IDL_get_libver_string ? 1 : 0; 
 ; return 0; }
 EOF
-if { (eval echo configure:17335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
    echo "*** The test program compiled, but did not run. This usually means"
           echo "*** that the run-time linker is not finding libIDL or finding the wrong"
@@ -17372,7 +17303,7 @@
     # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:17376: checking for $ac_word" >&5
+echo "configure:17307: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -17416,19 +17347,19 @@
      PKG_CONFIG_MIN_VERSION=0.9.0
      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
         echo $ac_n "checking for libIDL-2.0 >= 0.8.0""... $ac_c" 1>&6
-echo "configure:17420: checking for libIDL-2.0 >= 0.8.0" >&5
+echo "configure:17351: checking for libIDL-2.0 >= 0.8.0" >&5
 
         if $PKG_CONFIG --exists "libIDL-2.0 >= 0.8.0" ; then
             echo "$ac_t""yes" 1>&6
             succeeded=yes
 
             echo $ac_n "checking LIBIDL_CFLAGS""... $ac_c" 1>&6
-echo "configure:17427: checking LIBIDL_CFLAGS" >&5
+echo "configure:17358: checking LIBIDL_CFLAGS" >&5
             LIBIDL_CFLAGS=`$PKG_CONFIG --cflags "libIDL-2.0 >= 0.8.0"`
             echo "$ac_t""$LIBIDL_CFLAGS" 1>&6
 
             echo $ac_n "checking LIBIDL_LIBS""... $ac_c" 1>&6
-echo "configure:17432: checking LIBIDL_LIBS" >&5
+echo "configure:17363: checking LIBIDL_LIBS" >&5
             ## don't use --libs since that can do evil things like add
             ## -Wl,--export-dynamic
             LIBIDL_LIBS="`$PKG_CONFIG --libs-only-L \"libIDL-2.0 >= 0.8.0\"` `$PKG_CONFIG --libs-only-l \"libIDL-2.0 >= 0.8.0\"`"
@@ -17464,7 +17395,7 @@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:17468: checking for $ac_word" >&5
+echo "configure:17399: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_ORBIT_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -17501,7 +17432,7 @@
 
         if test -n "$ORBIT_CONFIG"; then
             echo $ac_n "checking for ORBit libIDL usability""... $ac_c" 1>&6
-echo "configure:17505: checking for ORBit libIDL usability" >&5
+echo "configure:17436: checking for ORBit libIDL usability" >&5
         	_ORBIT_CFLAGS=`${ORBIT_CONFIG} client --cflags`
     	    _ORBIT_LIBS=`${ORBIT_CONFIG} client --libs`
             _ORBIT_INC_PATH=`${PERL} -e '{ for $f (@ARGV) { print "$f " if ($f =~ m/^-I/); } }' -- ${_ORBIT_CFLAGS}`
@@ -17518,7 +17449,7 @@
                 result="maybe" 
 else
   cat > conftest.$ac_ext <<EOF
-#line 17522 "configure"
+#line 17453 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -17533,7 +17464,7 @@
 }
             
 EOF
-if { (eval echo configure:17537: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:17468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   _LIBIDL_FOUND=1
                 result="yes"
@@ -17587,7 +17518,7 @@
     # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:17591: checking for $ac_word" >&5
+echo "configure:17522: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -17631,19 +17562,19 @@
      PKG_CONFIG_MIN_VERSION=0.9.0
      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
         echo $ac_n "checking for glib-2.0 >= 1.3.7""... $ac_c" 1>&6
-echo "configure:17635: checking for glib-2.0 >= 1.3.7" >&5
+echo "configure:17566: checking for glib-2.0 >= 1.3.7" >&5
 
         if $PKG_CONFIG --exists "glib-2.0 >= 1.3.7" ; then
             echo "$ac_t""yes" 1>&6
             succeeded=yes
 
             echo $ac_n "checking GLIB_CFLAGS""... $ac_c" 1>&6
-echo "configure:17642: checking GLIB_CFLAGS" >&5
+echo "configure:17573: checking GLIB_CFLAGS" >&5
             GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 1.3.7"`
             echo "$ac_t""$GLIB_CFLAGS" 1>&6
 
             echo $ac_n "checking GLIB_LIBS""... $ac_c" 1>&6
-echo "configure:17647: checking GLIB_LIBS" >&5
+echo "configure:17578: checking GLIB_LIBS" >&5
             ## don't use --libs since that can do evil things like add
             ## -Wl,--export-dynamic
             GLIB_LIBS="`$PKG_CONFIG --libs-only-L \"glib-2.0 >= 1.3.7\"` `$PKG_CONFIG --libs-only-l \"glib-2.0 >= 1.3.7\"`"
@@ -17727,7 +17658,7 @@
   # Extract the first word of "glib-config", so it can be a program name with args.
 set dummy glib-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:17731: checking for $ac_word" >&5
+echo "configure:17662: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GLIB_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -17762,7 +17693,7 @@
 
   min_glib_version=${GLIB_VERSION}
   echo $ac_n "checking for GLIB - version >= $min_glib_version""... $ac_c" 1>&6
-echo "configure:17766: checking for GLIB - version >= $min_glib_version" >&5
+echo "configure:17697: checking for GLIB - version >= $min_glib_version" >&5
   no_glib=""
   if test "$GLIB_CONFIG" = "no" ; then
     no_glib=yes
@@ -17785,7 +17716,7 @@
   echo $ac_n "cross compiling; assumed OK... $ac_c"
 else
   cat > conftest.$ac_ext <<EOF
-#line 17789 "configure"
+#line 17720 "configure"
 #include "confdefs.h"
 
 #include <glib.h>
@@ -17861,7 +17792,7 @@
 }
 
 EOF
-if { (eval echo configure:17865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:17796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -17895,7 +17826,7 @@
           CFLAGS="$CFLAGS $GLIB_CFLAGS"
           LIBS="$LIBS $GLIB_LIBS"
           cat > conftest.$ac_ext <<EOF
-#line 17899 "configure"
+#line 17830 "configure"
 #include "confdefs.h"
 
 #include <glib.h>
@@ -17905,7 +17836,7 @@
  return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); 
 ; return 0; }
 EOF
-if { (eval echo configure:17909: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17840: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
    echo "*** The test program compiled, but did not run. This usually means"
           echo "*** that the run-time linker is not finding GLIB or finding the wrong"
@@ -17984,19 +17915,19 @@
   # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:17988: checking for working alloca.h" >&5
+echo "configure:17919: checking for working alloca.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17993 "configure"
+#line 17924 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:18000: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -18017,12 +17948,12 @@
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:18021: checking for alloca" >&5
+echo "configure:17952: checking for alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 18026 "configure"
+#line 17957 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -18050,7 +17981,7 @@
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:18054: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17985: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -18082,12 +18013,12 @@
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:18086: checking whether alloca needs Cray hooks" >&5
+echo "configure:18017: checking whether alloca needs Cray hooks" >&5
 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 18091 "configure"
+#line 18022 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -18112,12 +18043,12 @@
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18116: checking for $ac_func" >&5
+echo "configure:18047: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 18121 "configure"
+#line 18052 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -18140,7 +18071,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:18144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18075: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -18167,7 +18098,7 @@
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:18171: checking stack direction for C alloca" >&5
+echo "configure:18102: checking stack direction for C alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -18175,7 +18106,7 @@
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 18179 "configure"
+#line 18110 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -18194,7 +18125,7 @@
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:18198: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:18129: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_stack_direction=1
 else
@@ -18243,17 +18174,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:18247: checking for $ac_hdr" >&5
+echo "configure:18178: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 18252 "configure"
+#line 18183 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:18257: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:18188: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -18358,7 +18289,7 @@
     # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:18362: checking for $ac_word" >&5
+echo "configure:18293: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PKG_CONFIG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -18402,19 +18333,19 @@
      PKG_CONFIG_MIN_VERSION=0.9.0
      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
         echo $ac_n "checking for cairo >= $CAIRO_VERSION""... $ac_c" 1>&6
-echo "configure:18406: checking for cairo >= $CAIRO_VERSION" >&5
+echo "configure:18337: checking for cairo >= $CAIRO_VERSION" >&5
 
         if $PKG_CONFIG --exists "cairo >= $CAIRO_VERSION" ; then
             echo "$ac_t""yes" 1>&6
             succeeded=yes
 
             echo $ac_n "checking CAIRO_CFLAGS""... $ac_c" 1>&6
-echo "configure:18413: checking CAIRO_CFLAGS" >&5
+echo "configure:18344: checking CAIRO_CFLAGS" >&5
             CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo >= $CAIRO_VERSION"`
             echo "$ac_t""$CAIRO_CFLAGS" 1>&6
 
             echo $ac_n "checking CAIRO_LIBS""... $ac_c" 1>&6
-echo "configure:18418: checking CAIRO_LIBS" >&5
+echo "configure:18349: checking CAIRO_LIBS" >&5
             ## don't use --libs since that can do evil things like add
             ## -Wl,--export-dynamic
             CAIRO_LIBS="`$PKG_CONFIG --libs-only-L \"cairo >= $CAIRO_VERSION\"` `$PKG_CONFIG --libs-only-l \"cairo >= $CAIRO_VERSION\"`"
@@ -18479,7 +18410,7 @@
         # Extract the first word of "python", so it can be a program name with args.
 set dummy python; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:18483: checking for $ac_word" >&5
+echo "configure:18414: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PYTHON'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -18740,14 +18671,14 @@
 cross_compiling=$ac_cv_prog_cc_cross
 
     cat > conftest.$ac_ext <<EOF
-#line 18744 "configure"
+#line 18675 "configure"
 #include "confdefs.h"
 #include <gmodule.h>
 int main() {
  int x = 1; x++; 
 ; return 0; }
 EOF
-if { (eval echo configure:18751: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18682: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -18922,6 +18853,7 @@
 
 
 
+
 CFLAGS=`echo \
 	$_WARNINGS_CFLAGS \
 	$CFLAGS`
@@ -19040,7 +18972,7 @@
                 _SAVE_CFLAGS=$CFLAGS
     CFLAGS="$CFLAGS $XCFLAGS"
     cat > conftest.$ac_ext <<EOF
-#line 19044 "configure"
+#line 18976 "configure"
 #include "confdefs.h"
 
         #include <stdio.h>
@@ -19056,7 +18988,7 @@
     
 ; return 0; }
 EOF
-if { (eval echo configure:19060: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18992: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -19273,34 +19205,15 @@
 # Transform confdefs.h into DEFS.
 # Protect against shell expansion while executing Makefile rules.
 # Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then we branch to the quote section.  Otherwise,
-# look for a macro that doesn't take arguments.
-cat >confdef2opt.sed <<\_ACEOF
-t clear
-: clear
-s,^[ 	]*#[ 	]*define[ 	][ 	]*\([^ 	(][^ 	(]*([^)]*)\)[ 	]*\(.*\),-D\1=\2,g
-t quote
-s,^[ 	]*#[ 	]*define[ 	][ 	]*\([^ 	][^ 	]*\)[ 	]*\(.*\),-D\1=\2,g
-t quote
-d
-: quote
-s,[ 	`~#$^&*(){}\\|;'"<>?],\\&,g
-s,\[,\\&,g
-s,\],\\&,g
-s,\$,$$,g
-p
-_ACEOF
-# We use echo to avoid assuming a particular line-breaking character.
-# The extra dot is to prevent the shell from consuming trailing
-# line-breaks from the sub-command output.  A line-break within
-# single-quotes doesn't work because, if this script is created in a
-# platform that uses two characters for line-breaks (e.g., DOS), tr
-# would break.
-ac_LF_and_DOT=`echo; echo .`
-DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
-rm -f confdef2opt.sed
+cat > conftest.defs <<\EOF
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
+s%[ 	`~#$^&*(){}\\|;'"<>?]%\\&%g
+s%\[%\\&%g
+s%\]%\\&%g
+s%\$%$$%g
+EOF
+DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+rm -f conftest.defs
 
 MOZ_DEFINES=$DEFS
 
@@ -19698,6 +19611,7 @@
 s%@MOZ_SVG_RENDERER_GDIPLUS@%$MOZ_SVG_RENDERER_GDIPLUS%g
 s%@MOZ_SVG_RENDERER_LIBART@%$MOZ_SVG_RENDERER_LIBART%g
 s%@MOZ_SVG_RENDERER_CAIRO@%$MOZ_SVG_RENDERER_CAIRO%g
+s%@MOZ_SMIL@%$MOZ_SMIL%g
 s%@TX_EXE@%$TX_EXE%g
 s%@MOZ_JS_LIBS@%$MOZ_JS_LIBS%g
 s%@MOZ_PSM@%$MOZ_PSM%g
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGCircleFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGCircleFrame.cpp,v
retrieving revision 1.8
diff -u -r1.8 nsSVGCircleFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGCircleFrame.cpp	19 Apr 2005 03:48:09 -0000	1.8
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGCircleFrame.cpp	29 Aug 2005 09:50:27 -0000
@@ -43,9 +43,10 @@
 #include "nsIDOMSVGCircleElement.h"
 #include "nsIDOMSVGElement.h"
 #include "nsIDOMSVGSVGElement.h"
-//#include "nsASVGPathBuilder.h"
 #include "nsISVGRendererPathBuilder.h"
 #include "nsLayoutAtoms.h"
+#include "nsINameSpaceManager.h"
+#include "nsSVGAtoms.h"
 
 class nsSVGCircleFrame : public nsSVGPathGeometryFrame
 {
@@ -53,7 +54,6 @@
   friend nsresult
   NS_NewSVGCircleFrame(nsIPresShell* aPresShell, nsIContent* aContent, nsIFrame** aNewFrame);
 
-  virtual ~nsSVGCircleFrame();
   NS_IMETHOD InitSVG();
 
 public:
@@ -71,9 +71,11 @@
   }
 #endif
 
-  // nsISVGValueObserver interface:
-  NS_IMETHOD DidModifySVGObservable(nsISVGValue* observable,
-                                    nsISVGValue::modificationType aModType);
+  // nsIFrame interface:
+  NS_IMETHOD  AttributeChanged(nsIContent*     aChild,
+                               PRInt32         aNameSpaceID,
+                               nsIAtom*        aAttribute,
+                               PRInt32         aModType);
 
   // nsISVGPathGeometrySource interface:
   NS_IMETHOD ConstructPath(nsISVGRendererPathBuilder *pathBuilder);
@@ -108,17 +110,6 @@
   return NS_OK;
 }
 
-nsSVGCircleFrame::~nsSVGCircleFrame()
-{
-  nsCOMPtr<nsISVGValue> value;
-  if (mCx && (value = do_QueryInterface(mCx)))
-      value->RemoveObserver(this);
-  if (mCy && (value = do_QueryInterface(mCy)))
-      value->RemoveObserver(this);
-  if (mR && (value = do_QueryInterface(mR)))
-      value->RemoveObserver(this);
-}
-
 NS_IMETHODIMP
 nsSVGCircleFrame::InitSVG()
 {
@@ -135,9 +126,6 @@
     length->GetAnimVal(getter_AddRefs(mCx));
     NS_ASSERTION(mCx, "no cx");
     if (!mCx) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mCx);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -146,9 +134,6 @@
     length->GetAnimVal(getter_AddRefs(mCy));
     NS_ASSERTION(mCx, "no cy");
     if (!mCx) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mCy);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -157,9 +142,6 @@
     length->GetAnimVal(getter_AddRefs(mR));
     NS_ASSERTION(mCx, "no r");
     if (!mCx) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mR);
-    if (value)
-      value->AddObserver(this);
   }
   
   return NS_OK;
@@ -172,21 +154,25 @@
 }
 
 //----------------------------------------------------------------------
-// nsISVGValueObserver methods:
+// nsIFrame methods:
 
 NS_IMETHODIMP
-nsSVGCircleFrame::DidModifySVGObservable(nsISVGValue* observable,
-                                         nsISVGValue::modificationType aModType)
-{
-  nsCOMPtr<nsIDOMSVGLength> l = do_QueryInterface(observable);
-  if (l && (mCx==l || mCy==l || mR==l)) {
+nsSVGCircleFrame::AttributeChanged(nsIContent*     aChild,
+                                   PRInt32         aNameSpaceID,
+                                   nsIAtom*        aAttribute,
+                                   PRInt32         aModType)
+{
+  if (aNameSpaceID == kNameSpaceID_None &&
+      (aAttribute == nsSVGAtoms::cx ||
+       aAttribute == nsSVGAtoms::cy ||
+       aAttribute == nsSVGAtoms::r)) {
     UpdateGraphic(nsISVGPathGeometrySource::UPDATEMASK_PATH);
     return NS_OK;
   }
-  // else
-  return nsSVGPathGeometryFrame::DidModifySVGObservable(observable, aModType);
-}
 
+  return nsSVGPathGeometryFrame::AttributeChanged(aChild, aNameSpaceID,
+                                                  aAttribute, aModType);
+}
 
 //----------------------------------------------------------------------
 // nsISVGPathGeometrySource methods:
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGDefsFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGDefsFrame.cpp,v
retrieving revision 1.13
diff -u -r1.13 nsSVGDefsFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGDefsFrame.cpp	9 Aug 2005 13:53:01 -0000	1.13
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGDefsFrame.cpp	29 Aug 2005 09:50:28 -0000
@@ -46,6 +46,8 @@
 #include "nsIDOMSVGAnimTransformList.h"
 #include "nsIDOMSVGTransformList.h"
 #include "nsSVGDefsFrame.h"
+#include "nsINameSpaceManager.h"
+#include "nsSVGAtoms.h"
 
 //----------------------------------------------------------------------
 // Implementation
@@ -64,37 +66,11 @@
   return NS_OK;
 }
 
-nsSVGDefsFrame::nsSVGDefsFrame()
-{
-}
-
-nsSVGDefsFrame::~nsSVGDefsFrame()
-{
-  nsCOMPtr<nsIDOMSVGTransformable> transformable = do_QueryInterface(mContent);
-  if (!transformable)
-    return;
-
-  nsCOMPtr<nsIDOMSVGAnimatedTransformList> transforms;
-  transformable->GetTransform(getter_AddRefs(transforms));
-  nsCOMPtr<nsISVGValue> value = do_QueryInterface(transforms);
-  NS_ASSERTION(value, "interface not found");
-  if (value)
-    value->RemoveObserver(this);
-}
-
+// Stub method specialized by subclasses.  Not called by said
+// specializations.
 NS_IMETHODIMP
 nsSVGDefsFrame::InitSVG()
 {
-  nsCOMPtr<nsIDOMSVGTransformable> transformable = do_QueryInterface(mContent);
-  if (!transformable)
-    return NS_OK;
-
-  nsCOMPtr<nsIDOMSVGAnimatedTransformList> transforms;
-  transformable->GetTransform(getter_AddRefs(transforms));
-  nsCOMPtr<nsISVGValue> value = do_QueryInterface(transforms);
-  NS_ASSERTION(value, "interface not found");
-  if (value)
-    value->AddObserver(this);
   return NS_OK;
 }
 
@@ -104,8 +80,6 @@
 NS_INTERFACE_MAP_BEGIN(nsSVGDefsFrame)
   NS_INTERFACE_MAP_ENTRY(nsISVGChildFrame)
   NS_INTERFACE_MAP_ENTRY(nsISVGContainerFrame)
-  NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
-  NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGDefsFrameBase)
 
 
@@ -205,35 +179,29 @@
   return nsLayoutAtoms::svgDefsFrame;
 }
 
-//----------------------------------------------------------------------
-// nsISVGValueObserver methods:
-
 NS_IMETHODIMP
-nsSVGDefsFrame::WillModifySVGObservable(nsISVGValue* observable,
-                                        nsISVGValue::modificationType aModType)
-{
-  return NS_OK;
-}
-
+nsSVGDefsFrame::AttributeChanged(nsIContent*     aChild,
+                                 PRInt32         aNameSpaceID,
+                                 nsIAtom*        aAttribute,
+                                 PRInt32         aModType)
+{
+  if (aNameSpaceID == kNameSpaceID_None &&
+      aAttribute == nsSVGAtoms::transform) {
+    // make sure our cached transform matrix gets (lazily) updated
+    mCanvasTM = nsnull;
+    
+    for (nsIFrame* kid = mFrames.FirstChild(); kid;
+         kid = kid->GetNextSibling()) {
+      nsISVGChildFrame* SVGFrame=nsnull;
+      kid->QueryInterface(NS_GET_IID(nsISVGChildFrame),(void**)&SVGFrame);
+      if (SVGFrame)
+        SVGFrame->NotifyCanvasTMChanged();
+    }  
+  }
 
-NS_IMETHODIMP
-nsSVGDefsFrame::DidModifySVGObservable (nsISVGValue* observable,
-                                        nsISVGValue::modificationType aModType)
-{
-  // make sure our cached transform matrix gets (lazily) updated
-  mCanvasTM = nsnull;
-  
-  for (nsIFrame* kid = mFrames.FirstChild(); kid;
-       kid = kid->GetNextSibling()) {
-    nsISVGChildFrame* SVGFrame=nsnull;
-    kid->QueryInterface(NS_GET_IID(nsISVGChildFrame),(void**)&SVGFrame);
-    if (SVGFrame)
-      SVGFrame->NotifyCanvasTMChanged();
-  }  
   return NS_OK;
 }
 
-
 //----------------------------------------------------------------------
 // nsISVGChildFrame methods
 
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGDefsFrame.h
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGDefsFrame.h,v
retrieving revision 1.11
diff -u -r1.11 nsSVGDefsFrame.h
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGDefsFrame.h	19 Apr 2005 03:48:09 -0000	1.11
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGDefsFrame.h	29 Aug 2005 09:50:28 -0000
@@ -42,23 +42,17 @@
 #include "nsContainerFrame.h"
 #include "nsISVGChildFrame.h"
 #include "nsISVGContainerFrame.h"
-#include "nsISVGValueObserver.h"
-#include "nsWeakReference.h"
 #include "nsLayoutAtoms.h"
 
 typedef nsContainerFrame nsSVGDefsFrameBase;
 
 class nsSVGDefsFrame : public nsSVGDefsFrameBase,
                        public nsISVGChildFrame,
-                       public nsISVGContainerFrame,
-                       public nsISVGValueObserver,
-                       public nsSupportsWeakReference
+                       public nsISVGContainerFrame
 {
   friend nsresult
   NS_NewSVGDefsFrame(nsIPresShell* aPresShell, nsIContent* aContent, nsIFrame** aNewFrame);
 protected:
-  nsSVGDefsFrame();
-  virtual ~nsSVGDefsFrame();
   NS_IMETHOD InitSVG();
   
    // nsISupports interface:
@@ -69,21 +63,26 @@
 public:
   // nsIFrame:
 
-  NS_IMETHOD  AppendFrames(nsIAtom*        aListName,
-                           nsIFrame*       aFrameList);
-  NS_IMETHOD  InsertFrames(nsIAtom*        aListName,
-                           nsIFrame*       aPrevFrame,
-                           nsIFrame*       aFrameList);
-  NS_IMETHOD  RemoveFrame(nsIAtom*        aListName,
-                          nsIFrame*       aOldFrame);
-  NS_IMETHOD  ReplaceFrame(nsIAtom*        aListName,
-                           nsIFrame*       aOldFrame,
-                           nsIFrame*       aNewFrame);
+  NS_IMETHOD AppendFrames(nsIAtom*        aListName,
+                          nsIFrame*       aFrameList);
+  NS_IMETHOD InsertFrames(nsIAtom*        aListName,
+                          nsIFrame*       aPrevFrame,
+                          nsIFrame*       aFrameList);
+  NS_IMETHOD RemoveFrame(nsIAtom*        aListName,
+                         nsIFrame*       aOldFrame);
+  NS_IMETHOD ReplaceFrame(nsIAtom*        aListName,
+                          nsIFrame*       aOldFrame,
+                          nsIFrame*       aNewFrame);
   NS_IMETHOD Init(nsPresContext*  aPresContext,
                   nsIContent*      aContent,
                   nsIFrame*        aParent,
                   nsStyleContext*  aContext,
                   nsIFrame*        aPrevInFlow);
+  NS_IMETHOD AttributeChanged(nsIContent*     aChild,
+                              PRInt32         aNameSpaceID,
+                              nsIAtom*        aAttribute,
+                              PRInt32         aModType);
+
   /**
    * Get the "type" of the frame
    *
@@ -98,15 +97,6 @@
   }
 #endif
 
-  // nsISVGValueObserver
-  NS_IMETHOD WillModifySVGObservable(nsISVGValue* observable,
-                                     nsISVGValue::modificationType aModType);
-  NS_IMETHOD DidModifySVGObservable (nsISVGValue* observable,
-                                     nsISVGValue::modificationType aModType);
-
-  // nsISupportsWeakReference
-  // implementation inherited from nsSupportsWeakReference
-  
   // nsISVGChildFrame interface:
   NS_IMETHOD PaintSVG(nsISVGRendererCanvas* canvas, const nsRect& dirtyRectTwips);
   NS_IMETHOD GetFrameForPointSVG(float x, float y, nsIFrame** hit);  
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGEllipseFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGEllipseFrame.cpp,v
retrieving revision 1.8
diff -u -r1.8 nsSVGEllipseFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGEllipseFrame.cpp	19 Apr 2005 03:48:09 -0000	1.8
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGEllipseFrame.cpp	29 Aug 2005 09:50:29 -0000
@@ -46,14 +46,14 @@
 #include "nsIDOMSVGSVGElement.h"
 #include "nsISVGRendererPathBuilder.h"
 #include "nsLayoutAtoms.h"
+#include "nsINameSpaceManager.h"
+#include "nsSVGAtoms.h"
 
 class nsSVGEllipseFrame : public nsSVGPathGeometryFrame
 {
   friend nsresult
   NS_NewSVGEllipseFrame(nsIPresShell* aPresShell, nsIContent* aContent, nsIFrame** aNewFrame);
 
-  virtual ~nsSVGEllipseFrame();
-
   NS_IMETHOD InitSVG();
 
   /**
@@ -70,9 +70,11 @@
   }
 #endif
 
-  // nsISVGValueObserver interface:
-  NS_IMETHOD DidModifySVGObservable(nsISVGValue* observable,
-                                    nsISVGValue::modificationType aModType);
+  // nsIFrame interface:
+  NS_IMETHOD  AttributeChanged(nsIContent*     aChild,
+                               PRInt32         aNameSpaceID,
+                               nsIAtom*        aAttribute,
+                               PRInt32         aModType);
 
   // nsISVGPathGeometrySource interface:
   NS_IMETHOD ConstructPath(nsISVGRendererPathBuilder *pathBuilder);
@@ -107,19 +109,6 @@
   return NS_OK;
 }
 
-nsSVGEllipseFrame::~nsSVGEllipseFrame()
-{
-  nsCOMPtr<nsISVGValue> value;
-  if (mCx && (value = do_QueryInterface(mCx)))
-      value->RemoveObserver(this);
-  if (mCy && (value = do_QueryInterface(mCy)))
-      value->RemoveObserver(this);
-  if (mRx && (value = do_QueryInterface(mRx)))
-      value->RemoveObserver(this);
-  if (mRy && (value = do_QueryInterface(mRy)))
-      value->RemoveObserver(this);
-}
-
 NS_IMETHODIMP
 nsSVGEllipseFrame::InitSVG()
 {
@@ -135,9 +124,6 @@
     length->GetAnimVal(getter_AddRefs(mCx));
     NS_ASSERTION(mCx, "no cx");
     if (!mCx) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mCx);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -146,9 +132,6 @@
     length->GetAnimVal(getter_AddRefs(mCy));
     NS_ASSERTION(mCy, "no cy");
     if (!mCy) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mCy);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -157,9 +140,6 @@
     length->GetAnimVal(getter_AddRefs(mRx));
     NS_ASSERTION(mRx, "no rx");
     if (!mRx) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mRx);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -168,9 +148,6 @@
     length->GetAnimVal(getter_AddRefs(mRy));
     NS_ASSERTION(mRy, "no ry");
     if (!mRy) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mRy);
-    if (value)
-      value->AddObserver(this);
   }
 
   return NS_OK; 
@@ -183,19 +160,25 @@
 }
 
 //----------------------------------------------------------------------
-// nsISVGValueObserver methods:
+// nsIFrame methods:
 
 NS_IMETHODIMP
-nsSVGEllipseFrame::DidModifySVGObservable(nsISVGValue* observable,
-                                          nsISVGValue::modificationType aModType)
-{
-  nsCOMPtr<nsIDOMSVGLength> l = do_QueryInterface(observable);
-  if (l && (mCx==l || mCy==l || mRx==l || mRy==l)) {
+nsSVGEllipseFrame::AttributeChanged(nsIContent*     aChild,
+                                    PRInt32         aNameSpaceID,
+                                    nsIAtom*        aAttribute,
+                                    PRInt32         aModType)
+{
+  if (aNameSpaceID == kNameSpaceID_None &&
+      (aAttribute == nsSVGAtoms::cx ||
+       aAttribute == nsSVGAtoms::cy ||
+       aAttribute == nsSVGAtoms::rx ||
+       aAttribute == nsSVGAtoms::ry)) {
     UpdateGraphic(nsISVGPathGeometrySource::UPDATEMASK_PATH);
     return NS_OK;
   }
-  // else
-  return nsSVGPathGeometryFrame::DidModifySVGObservable(observable, aModType);
+
+  return nsSVGPathGeometryFrame::AttributeChanged(aChild, aNameSpaceID,
+                                                  aAttribute, aModType);
 }
 
 //----------------------------------------------------------------------
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGForeignObjectFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGForeignObjectFrame.cpp,v
retrieving revision 1.21
diff -u -r1.21 nsSVGForeignObjectFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGForeignObjectFrame.cpp	16 Aug 2005 22:06:17 -0000	1.21
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGForeignObjectFrame.cpp	29 Aug 2005 09:50:30 -0000
@@ -42,9 +42,7 @@
 #include "nsISVGChildFrame.h"
 #include "nsISVGContainerFrame.h"
 #include "nsISVGRendererCanvas.h"
-#include "nsWeakReference.h"
 #include "nsISVGValue.h"
-#include "nsISVGValueObserver.h"
 #include "nsIDOMSVGTransformable.h"
 #include "nsIDOMSVGAnimTransformList.h"
 #include "nsIDOMSVGTransformList.h"
@@ -63,20 +61,19 @@
 #include "nsSVGRect.h"
 #include "nsSVGMatrix.h"
 #include "nsLayoutAtoms.h"
+#include "nsINameSpaceManager.h"
+#include "nsSVGAtoms.h"
 
 typedef nsBlockFrame nsSVGForeignObjectFrameBase;
 
 class nsSVGForeignObjectFrame : public nsSVGForeignObjectFrameBase,
                                 public nsISVGContainerFrame,
-                                public nsISVGChildFrame,
-                                public nsISVGValueObserver,
-                                public nsSupportsWeakReference
+                                public nsISVGChildFrame
 {
   friend nsresult
   NS_NewSVGForeignObjectFrame(nsIPresShell* aPresShell, nsIContent* aContent, nsIFrame** aNewFrame);
 protected:
   nsSVGForeignObjectFrame();
-  virtual ~nsSVGForeignObjectFrame();
   nsresult Init();
   
   // nsISupports interface:
@@ -110,6 +107,10 @@
   NS_IMETHOD  ReplaceFrame(nsIAtom*        aListName,
                            nsIFrame*       aOldFrame,
                            nsIFrame*       aNewFrame);
+  NS_IMETHOD  AttributeChanged(nsIContent*     aChild,
+                               PRInt32         aNameSpaceID,
+                               nsIAtom*        aAttribute,
+                               PRInt32         aModType);
 
   /**
    * Get the "type" of the frame
@@ -128,12 +129,6 @@
   }
 #endif
 
-  // nsISVGValueObserver
-  NS_IMETHOD WillModifySVGObservable(nsISVGValue* observable,
-                                     nsISVGValue::modificationType aModType);
-  NS_IMETHOD DidModifySVGObservable (nsISVGValue* observable,
-                                     nsISVGValue::modificationType aModType);
-
   // nsISupportsWeakReference
   // implementation inherited from nsSupportsWeakReference
   
@@ -201,27 +196,6 @@
 {
 }
 
-nsSVGForeignObjectFrame::~nsSVGForeignObjectFrame()
-{
-//   nsCOMPtr<nsIDOMSVGTransformable> transformable = do_QueryInterface(mContent);
-//   NS_ASSERTION(transformable, "wrong content element");
-//   nsCOMPtr<nsIDOMSVGAnimatedTransformList> transforms;
-//   transformable->GetTransform(getter_AddRefs(transforms));
-//   nsCOMPtr<nsISVGValue> value = do_QueryInterface(transforms);
-//   NS_ASSERTION(value, "interface not found");
-//   if (value)
-//     value->RemoveObserver(this);
-  nsCOMPtr<nsISVGValue> value;
-  if (mX && (value = do_QueryInterface(mX)))
-      value->RemoveObserver(this);
-  if (mY && (value = do_QueryInterface(mY)))
-      value->RemoveObserver(this);
-  if (mWidth && (value = do_QueryInterface(mWidth)))
-      value->RemoveObserver(this);
-  if (mHeight && (value = do_QueryInterface(mHeight)))
-      value->RemoveObserver(this);
-}
-
 nsresult nsSVGForeignObjectFrame::Init()
 {
   nsCOMPtr<nsIDOMSVGForeignObjectElement> foreignObject = do_QueryInterface(mContent);
@@ -233,9 +207,6 @@
     length->GetAnimVal(getter_AddRefs(mX));
     NS_ASSERTION(mX, "no x");
     if (!mX) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mX);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -244,9 +215,6 @@
     length->GetAnimVal(getter_AddRefs(mY));
     NS_ASSERTION(mY, "no y");
     if (!mY) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mY);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -255,9 +223,6 @@
     length->GetAnimVal(getter_AddRefs(mWidth));
     NS_ASSERTION(mWidth, "no width");
     if (!mWidth) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mWidth);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -266,21 +231,8 @@
     length->GetAnimVal(getter_AddRefs(mHeight));
     NS_ASSERTION(mHeight, "no height");
     if (!mHeight) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mHeight);
-    if (value)
-      value->AddObserver(this);
   }
   
-// XXX 
-//   nsCOMPtr<nsIDOMSVGTransformable> transformable = do_QueryInterface(mContent);
-//   NS_ASSERTION(transformable, "wrong content element");
-//   nsCOMPtr<nsIDOMSVGAnimatedTransformList> transforms;
-//   transformable->GetTransform(getter_AddRefs(transforms));
-//   nsCOMPtr<nsISVGValue> value = do_QueryInterface(transforms);
-//   NS_ASSERTION(value, "interface not found");
-//   if (value)
-//     value->AddObserver(this);
-
   // XXX for some reason updating fails when done here. Why is this too early?
   // anyway - we use a less desirable mechanism now of updating in paint().
 //  Update(); 
@@ -294,8 +246,6 @@
 NS_INTERFACE_MAP_BEGIN(nsSVGForeignObjectFrame)
   NS_INTERFACE_MAP_ENTRY(nsISVGChildFrame)
   NS_INTERFACE_MAP_ENTRY(nsISVGContainerFrame)
-  NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
-  NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGForeignObjectFrameBase)
 
 
@@ -442,27 +392,23 @@
 //   return nsLayoutAtoms::svgForeignObjectFrame;
 // }
 
-//----------------------------------------------------------------------
-// nsISVGValueObserver methods:
-
 NS_IMETHODIMP
-nsSVGForeignObjectFrame::WillModifySVGObservable(nsISVGValue* observable,
-                                                 nsISVGValue::modificationType aModType)
-{
-  return NS_OK;
-}
+nsSVGForeignObjectFrame::AttributeChanged(nsIContent*     aChild,
+                                          PRInt32         aNameSpaceID,
+                                          nsIAtom*        aAttribute,
+                                          PRInt32         aModType)
+{
+  if (aNameSpaceID == kNameSpaceID_None &&
+      (aAttribute == nsSVGAtoms::x ||
+       aAttribute == nsSVGAtoms::y ||
+       aAttribute == nsSVGAtoms::width ||
+       aAttribute == nsSVGAtoms::height ||
+       aAttribute == nsSVGAtoms::transform))
+    Update();
 
-
-NS_IMETHODIMP
-nsSVGForeignObjectFrame::DidModifySVGObservable (nsISVGValue* observable,
-                                                 nsISVGValue::modificationType aModType)
-{
-  Update();
-  
   return NS_OK;
 }
 
-
 //----------------------------------------------------------------------
 // nsISVGChildFrame methods
 
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGGlyphFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGGlyphFrame.cpp,v
retrieving revision 1.33
diff -u -r1.33 nsSVGGlyphFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGGlyphFrame.cpp	26 Aug 2005 21:13:48 -0000	1.33
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGGlyphFrame.cpp	29 Aug 2005 09:50:33 -0000
@@ -233,10 +233,10 @@
 nsSVGGlyphFrame::~nsSVGGlyphFrame()
 {
   if (mFillGradient) {
-    NS_ADD_SVGVALUE_OBSERVER(mFillGradient);
+    NS_REMOVE_SVGVALUE_OBSERVER(mFillGradient);
   }
   if (mStrokeGradient) {
-    NS_ADD_SVGVALUE_OBSERVER(mStrokeGradient);
+    NS_REMOVE_SVGVALUE_OBSERVER(mStrokeGradient);
   }
 }
 
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGImageFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGImageFrame.cpp,v
retrieving revision 1.11
diff -u -r1.11 nsSVGImageFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGImageFrame.cpp	2 Jul 2005 23:45:33 -0000	1.11
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGImageFrame.cpp	29 Aug 2005 09:50:35 -0000
@@ -55,6 +55,8 @@
 #include "imgIRequest.h"
 #include "nsSVGClipPathFrame.h"
 #include "nsLayoutAtoms.h"
+#include "nsINameSpaceManager.h"
+#include "nsSVGAtoms.h"
 
 #define NS_GET_BIT(rowptr, x) (rowptr[(x)>>3] &  (1<<(7-(x)&0x7)))
 
@@ -87,9 +89,11 @@
   NS_IMETHOD InitSVG();
 
 public:
-  // nsISVGValueObserver interface:
-  NS_IMETHOD DidModifySVGObservable(nsISVGValue* observable,
-                                    nsISVGValue::modificationType aModType);
+  // nsIFrame interface:
+  NS_IMETHOD  AttributeChanged(nsIContent*     aChild,
+                               PRInt32         aNameSpaceID,
+                               nsIAtom*        aAttribute,
+                               PRInt32         aModType);
 
   // nsISVGPathGeometrySource interface:
   NS_IMETHOD ConstructPath(nsISVGRendererPathBuilder *pathBuilder);
@@ -158,18 +162,6 @@
 
 nsSVGImageFrame::~nsSVGImageFrame()
 {
-  nsCOMPtr<nsISVGValue> value;
-  if (mX && (value = do_QueryInterface(mX)))
-      value->RemoveObserver(this);
-  if (mY && (value = do_QueryInterface(mY)))
-      value->RemoveObserver(this);
-  if (mWidth && (value = do_QueryInterface(mWidth)))
-      value->RemoveObserver(this);
-  if (mHeight && (value = do_QueryInterface(mHeight)))
-      value->RemoveObserver(this);
-  if (mPreserveAspectRatio && (value = do_QueryInterface(mPreserveAspectRatio)))
-      value->RemoveObserver(this);
-
   // set the frame to null so we don't send messages to a dead object.
   if (mListener) {
     nsCOMPtr<nsIImageLoadingContent> imageLoader = do_QueryInterface(mContent);
@@ -196,9 +188,6 @@
     length->GetAnimVal(getter_AddRefs(mX));
     NS_ASSERTION(mX, "no x");
     if (!mX) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mX);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -207,9 +196,6 @@
     length->GetAnimVal(getter_AddRefs(mY));
     NS_ASSERTION(mY, "no y");
     if (!mY) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mY);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -218,9 +204,6 @@
     length->GetAnimVal(getter_AddRefs(mWidth));
     NS_ASSERTION(mWidth, "no width");
     if (!mWidth) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mWidth);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -229,9 +212,6 @@
     length->GetAnimVal(getter_AddRefs(mHeight));
     NS_ASSERTION(mHeight, "no height");
     if (!mHeight) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mHeight);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -240,9 +220,6 @@
     ratio->GetAnimVal(getter_AddRefs(mPreserveAspectRatio));
     NS_ASSERTION(mHeight, "no preserveAspectRatio");
     if (!mPreserveAspectRatio) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mPreserveAspectRatio);
-    if (value)
-      value->AddObserver(this);
   }
 
   mSurface = nsnull;
@@ -258,19 +235,26 @@
 }
 
 //----------------------------------------------------------------------
-// nsISVGValueObserver methods:
+// nsIFrame methods:
 
 NS_IMETHODIMP
-nsSVGImageFrame::DidModifySVGObservable(nsISVGValue* observable,
-                                        nsISVGValue::modificationType aModType)
-{
-  nsCOMPtr<nsIDOMSVGLength> l = do_QueryInterface(observable);
-  if (l && (mX==l || mY==l || mWidth==l || mHeight==l)) {
-    UpdateGraphic(nsISVGPathGeometrySource::UPDATEMASK_PATH);
-    return NS_OK;
-  }
-  // else
-  return nsSVGPathGeometryFrame::DidModifySVGObservable(observable, aModType);
+nsSVGImageFrame::AttributeChanged(nsIContent*     aChild,
+                                  PRInt32         aNameSpaceID,
+                                  nsIAtom*        aAttribute,
+                                  PRInt32         aModType)
+{
+   if (aNameSpaceID == kNameSpaceID_None &&
+       (aAttribute == nsSVGAtoms::x ||
+        aAttribute == nsSVGAtoms::y ||
+        aAttribute == nsSVGAtoms::width ||
+        aAttribute == nsSVGAtoms::height ||
+        aAttribute == nsSVGAtoms::preserveAspectRatio)) {
+     UpdateGraphic(nsISVGPathGeometrySource::UPDATEMASK_PATH);
+     return NS_OK;
+   }
+
+   return nsSVGPathGeometryFrame::AttributeChanged(aChild, aNameSpaceID,
+                                                   aAttribute, aModType);
 }
 
 //----------------------------------------------------------------------
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGInnerSVGFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGInnerSVGFrame.cpp,v
retrieving revision 1.13
diff -u -r1.13 nsSVGInnerSVGFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGInnerSVGFrame.cpp	9 Aug 2005 13:53:02 -0000	1.13
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGInnerSVGFrame.cpp	29 Aug 2005 09:50:36 -0000
@@ -50,18 +50,15 @@
 #include "nsIDOMSVGFitToViewBox.h"
 #include "nsSVGLength.h"
 #include "nsISVGValue.h"
-#include "nsISVGValueObserver.h"
-#include "nsWeakReference.h"
 #include "nsSVGMatrix.h"
 #include "nsLayoutAtoms.h"
+#include "nsSVGAtoms.h"
 
 typedef nsContainerFrame nsSVGInnerSVGFrameBase;
 
 class nsSVGInnerSVGFrame : public nsSVGInnerSVGFrameBase,
                            public nsISVGChildFrame,
                            public nsISVGContainerFrame,
-                           public nsISVGValueObserver,
-                           public nsSupportsWeakReference,
                            public nsISVGSVGFrame
 {
   friend nsresult
@@ -95,10 +92,6 @@
                   nsStyleContext* aContext,
                   nsIFrame*       aPrevInFlow);
 
-  NS_IMETHOD  AttributeChanged(nsIContent*    aChild,
-                               PRInt32        aNameSpaceID,
-                               nsIAtom*       aAttribute,
-                               PRInt32        aModType);
   /**
    * Get the "type" of the frame
    *
@@ -129,12 +122,6 @@
   already_AddRefed<nsIDOMSVGMatrix> GetCanvasTM();
   already_AddRefed<nsSVGCoordCtxProvider> GetCoordContextProvider();
 
-  // nsISVGValueObserver
-  NS_IMETHOD WillModifySVGObservable(nsISVGValue* observable,
-                                     nsISVGValue::modificationType aModType);
-  NS_IMETHOD DidModifySVGObservable (nsISVGValue* observable,
-                                     nsISVGValue::modificationType aModType);
-
   // nsISupportsWeakReference
   // implementation inherited from nsSupportsWeakReference
 
@@ -204,9 +191,6 @@
     length->GetAnimVal(getter_AddRefs(mX));
     NS_ASSERTION(mX, "no x");
     if (!mX) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mX);
-    if (value)
-      value->AddObserver(this);  // nsISVGValueObserver
   }
 
   {
@@ -215,9 +199,6 @@
     length->GetAnimVal(getter_AddRefs(mY));
     NS_ASSERTION(mY, "no y");
     if (!mY) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mY);
-    if (value)
-      value->AddObserver(this);
   }
 
   return NS_OK;
@@ -229,8 +210,6 @@
 NS_INTERFACE_MAP_BEGIN(nsSVGInnerSVGFrame)
   NS_INTERFACE_MAP_ENTRY(nsISVGChildFrame)
   NS_INTERFACE_MAP_ENTRY(nsISVGContainerFrame)
-  NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
-  NS_INTERFACE_MAP_ENTRY(nsSupportsWeakReference)
   NS_INTERFACE_MAP_ENTRY(nsISVGSVGFrame)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGInnerSVGFrameBase)
 
@@ -325,22 +304,6 @@
   return NS_ERROR_NOT_IMPLEMENTED;
 }
 
-NS_IMETHODIMP
-nsSVGInnerSVGFrame::AttributeChanged(nsIContent*    aChild,
-                                     PRInt32        aNameSpaceID,
-                                     nsIAtom*       aAttribute,
-                                     PRInt32        aModType)
-{
-#ifdef DEBUG
-    nsAutoString str;
-    aAttribute->ToString(str);
-    printf("** nsSVGInnerSVGFrame::AttributeChanged(%s)\n",
-           NS_LossyConvertUCS2toASCII(str).get());
-#endif
-
-  return NS_OK;
-}
-
 nsIAtom *
 nsSVGInnerSVGFrame::GetType() const
 {
@@ -691,21 +654,3 @@
   return provider;
 }
 
-//----------------------------------------------------------------------
-// nsISVGValueObserver methods:
-
-NS_IMETHODIMP
-nsSVGInnerSVGFrame::WillModifySVGObservable(nsISVGValue* observable,
-                                            nsISVGValue::modificationType aModType)
-{
-  return NS_OK;
-}
-	
-NS_IMETHODIMP
-nsSVGInnerSVGFrame::DidModifySVGObservable (nsISVGValue* observable,
-                                            nsISVGValue::modificationType aModType)
-{
-  NotifyViewportChange();
-  
-  return NS_OK;
-}
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGLineFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGLineFrame.cpp,v
retrieving revision 1.10
diff -u -r1.10 nsSVGLineFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGLineFrame.cpp	19 Apr 2005 03:48:09 -0000	1.10
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGLineFrame.cpp	29 Aug 2005 09:50:37 -0000
@@ -47,6 +47,8 @@
 #include "nsISVGRendererPathBuilder.h"
 #include "nsISVGMarkable.h"
 #include "nsLayoutAtoms.h"
+#include "nsINameSpaceManager.h"
+#include "nsSVGAtoms.h"
 
 class nsSVGLineFrame : public nsSVGPathGeometryFrame,
                        public nsISVGMarkable
@@ -55,7 +57,6 @@
   friend nsresult
   NS_NewSVGLineFrame(nsIPresShell* aPresShell, nsIContent* aContent, nsIFrame** aNewFrame);
 
-  virtual ~nsSVGLineFrame();
   NS_IMETHOD InitSVG();
 
   /**
@@ -73,9 +74,11 @@
 #endif
 
 public:
-  // nsISVGValueObserver interface:
-  NS_IMETHOD DidModifySVGObservable(nsISVGValue* observable,
-                                    nsISVGValue::modificationType aModType);
+  // nsIFrame interface:
+  NS_IMETHOD  AttributeChanged(nsIContent*     aChild,
+                               PRInt32         aNameSpaceID,
+                               nsIAtom*        aAttribute,
+                               PRInt32         aModType);
 
   // nsISVGPathGeometrySource interface:
   NS_IMETHOD ConstructPath(nsISVGRendererPathBuilder *pathBuilder);
@@ -124,19 +127,6 @@
   return NS_OK;
 }
 
-nsSVGLineFrame::~nsSVGLineFrame()
-{
-  nsCOMPtr<nsISVGValue> value;
-  if (mX1 && (value = do_QueryInterface(mX1)))
-      value->RemoveObserver(this);
-  if (mY1 && (value = do_QueryInterface(mY1)))
-      value->RemoveObserver(this);
-  if (mX2 && (value = do_QueryInterface(mX2)))
-      value->RemoveObserver(this);
-  if (mY2 && (value = do_QueryInterface(mY2)))
-      value->RemoveObserver(this);
-}
-
 NS_IMETHODIMP
 nsSVGLineFrame::InitSVG()
 {
@@ -152,9 +142,6 @@
     length->GetAnimVal(getter_AddRefs(mX1));
     NS_ASSERTION(mX1, "no x1");
     if (!mX1) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mX1);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -163,9 +150,6 @@
     length->GetAnimVal(getter_AddRefs(mY1));
     NS_ASSERTION(mY1, "no y1");
     if (!mY1) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mY1);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -174,9 +158,6 @@
     length->GetAnimVal(getter_AddRefs(mX2));
     NS_ASSERTION(mX2, "no x2");
     if (!mX2) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mX2);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -185,34 +166,37 @@
     length->GetAnimVal(getter_AddRefs(mY2));
     NS_ASSERTION(mY2, "no y2");
     if (!mY2) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mY2);
-    if (value)
-      value->AddObserver(this);
   }
 
   return NS_OK; 
 }
 
+//----------------------------------------------------------------------
+// nsIFrame methods:
+
 nsIAtom *
 nsSVGLineFrame::GetType() const
 {
   return nsLayoutAtoms::svgLineFrame;
 }
 
-//----------------------------------------------------------------------
-// nsISVGValueObserver methods:
-
 NS_IMETHODIMP
-nsSVGLineFrame::DidModifySVGObservable(nsISVGValue* observable,
-                                       nsISVGValue::modificationType aModType)
-{
-  nsCOMPtr<nsIDOMSVGLength> l = do_QueryInterface(observable);
-  if (l && (mX1==l || mY1==l || mX2==l || mY2==l)) {
+nsSVGLineFrame::AttributeChanged(nsIContent*     aChild,
+                                 PRInt32         aNameSpaceID,
+                                 nsIAtom*        aAttribute,
+                                 PRInt32         aModType)
+{
+  if (aNameSpaceID == kNameSpaceID_None &&
+      (aAttribute == nsSVGAtoms::x1 ||
+       aAttribute == nsSVGAtoms::y1 ||
+       aAttribute == nsSVGAtoms::x2 ||
+       aAttribute == nsSVGAtoms::y2)) {
     UpdateGraphic(nsISVGPathGeometrySource::UPDATEMASK_PATH);
     return NS_OK;
   }
-  // else
-  return nsSVGPathGeometryFrame::DidModifySVGObservable(observable, aModType);
+
+  return nsSVGPathGeometryFrame::AttributeChanged(aChild, aNameSpaceID,
+                                                  aAttribute, aModType);
 }
 
 //----------------------------------------------------------------------
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGMarkerFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGMarkerFrame.cpp,v
retrieving revision 1.11
diff -u -r1.11 nsSVGMarkerFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGMarkerFrame.cpp	4 Aug 2005 20:32:00 -0000	1.11
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGMarkerFrame.cpp	29 Aug 2005 09:50:37 -0000
@@ -56,6 +56,8 @@
 #include "nsSVGPathGeometryFrame.h"
 #include "nsISVGRendererCanvas.h"
 #include "nsSVGUtils.h"
+#include "nsINameSpaceManager.h"
+#include "nsSVGAtoms.h"
 
 NS_IMETHODIMP_(nsrefcnt)
   nsSVGMarkerFrame::AddRef()
@@ -130,30 +132,10 @@
   return NS_OK;
 }
 
-nsSVGMarkerFrame::~nsSVGMarkerFrame()
-{
-  nsCOMPtr<nsISVGValue> value;
-  if (mRefX && (value = do_QueryInterface(mRefX)))
-    value->RemoveObserver(this);
-  if (mRefY && (value = do_QueryInterface(mRefY)))
-    value->RemoveObserver(this);
-  if (mMarkerWidth && (value = do_QueryInterface(mMarkerWidth)))
-    value->RemoveObserver(this);
-  if (mMarkerHeight && (value = do_QueryInterface(mMarkerHeight)))
-    value->RemoveObserver(this);
-  if (mOrientAngle && (value = do_QueryInterface(mOrientAngle)))
-    value->RemoveObserver(this);
-  if (mViewBox && (value = do_QueryInterface(mViewBox)))
-    value->RemoveObserver(this);
-}
 
 NS_IMETHODIMP
 nsSVGMarkerFrame::InitSVG()
 {
-  nsresult rv = nsSVGDefsFrame::InitSVG();
-  if (NS_FAILED(rv))
-    return rv;
-
   nsCOMPtr<nsIDOMSVGMarkerElement> marker = do_QueryInterface(mContent);
   NS_ASSERTION(marker, "wrong content element");
 
@@ -163,9 +145,6 @@
     length->GetAnimVal(getter_AddRefs(mRefX));
     NS_ASSERTION(mRefX, "no RefX");
     if (!mRefX) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mRefX);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -174,9 +153,6 @@
     length->GetAnimVal(getter_AddRefs(mRefY));
     NS_ASSERTION(mRefY, "no RefY");
     if (!mRefY) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mRefY);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -185,9 +161,6 @@
     length->GetAnimVal(getter_AddRefs(mMarkerWidth));
     NS_ASSERTION(mMarkerWidth, "no markerWidth");
     if (!mMarkerWidth) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mMarkerWidth);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -196,9 +169,6 @@
     length->GetAnimVal(getter_AddRefs(mMarkerHeight));
     NS_ASSERTION(mMarkerHeight, "no markerHeight");
     if (!mMarkerHeight) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mMarkerHeight);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -207,9 +177,6 @@
     angle->GetAnimVal(getter_AddRefs(mOrientAngle));
     NS_ASSERTION(mOrientAngle, "no orientAngle");
     if (!mOrientAngle) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mOrientAngle);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -219,11 +186,8 @@
 
     if (rect) {
       rect->GetAnimVal(getter_AddRefs(mViewBox));
-      NS_ASSERTION(mRefY, "no viewBox");
-      if (!mRefY) return NS_ERROR_FAILURE;
-      nsCOMPtr<nsISVGValue> value = do_QueryInterface(mRefY);
-      if (value)
-        value->AddObserver(this);
+      NS_ASSERTION(mViewBox, "no viewBox");
+      if (!mViewBox) return NS_ERROR_FAILURE;
     }
   }
 
@@ -237,15 +201,30 @@
 }
 
 //----------------------------------------------------------------------
-// nsISVGValueObserver methods:
+// nsIFrame methods:
 
 NS_IMETHODIMP
-nsSVGMarkerFrame::DidModifySVGObservable(nsISVGValue* observable,
-                                         nsISVGValue::modificationType aModType)
-{
-  return nsSVGDefsFrame::DidModifySVGObservable(observable, aModType);
+nsSVGMarkerFrame::AttributeChanged(nsIContent*     aChild,
+                                   PRInt32         aNameSpaceID,
+                                   nsIAtom*        aAttribute,
+                                   PRInt32         aModType)
+{
+  if (aNameSpaceID == kNameSpaceID_None &&
+      (aAttribute == nsSVGAtoms::refX ||
+       aAttribute == nsSVGAtoms::refY ||
+       aAttribute == nsSVGAtoms::markerWidth ||
+       aAttribute == nsSVGAtoms::markerHeight ||
+       aAttribute == nsSVGAtoms::orient ||
+       aAttribute == nsSVGAtoms::viewBox)) {
+    // XXX: marker frame should be a nsSVGValue and call DidModify() here
+    return NS_OK;
+  }
+
+  return nsSVGDefsFrame::AttributeChanged(aChild, aNameSpaceID,
+                                          aAttribute, aModType);
 }
 
+
 //----------------------------------------------------------------------
 // nsISVGContainerFrame methods:
 already_AddRefed<nsIDOMSVGMatrix>
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGMarkerFrame.h
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGMarkerFrame.h,v
retrieving revision 1.6
diff -u -r1.6 nsSVGMarkerFrame.h
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGMarkerFrame.h	1 Jul 2005 01:34:34 -0000	1.6
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGMarkerFrame.h	29 Aug 2005 09:50:38 -0000
@@ -62,7 +62,6 @@
                        nsIContent* aContent,
                        nsIFrame** aNewFrame);
 
-  virtual ~nsSVGMarkerFrame();
   NS_IMETHOD InitSVG();
 
 public:
@@ -71,9 +70,11 @@
   NS_DEFINE_STATIC_CID_ACCESSOR(NS_SVGMARKERFRAME_CID)
   NS_DEFINE_STATIC_IID_ACCESSOR(NS_SVGMARKERFRAME_CID)
 
-  // nsISVGValueObserver interface:
-  NS_IMETHOD DidModifySVGObservable(nsISVGValue* observable,
-                                    nsISVGValue::modificationType aModType);
+  // nsIFrame interface:
+  NS_IMETHOD  AttributeChanged(nsIContent*     aChild,
+                               PRInt32         aNameSpaceID,
+                               nsIAtom*        aAttribute,
+                               PRInt32         aModType);
 
   /**
    * Get the "type" of the frame
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGOuterSVGFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGOuterSVGFrame.cpp,v
retrieving revision 1.48
diff -u -r1.48 nsSVGOuterSVGFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGOuterSVGFrame.cpp	25 Aug 2005 21:31:09 -0000	1.48
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGOuterSVGFrame.cpp	29 Aug 2005 09:50:40 -0000
@@ -49,9 +49,7 @@
 #include "nsISVGRendererCanvas.h"
 #include "nsIView.h"
 #include "nsIViewManager.h"
-#include "nsWeakReference.h"
 #include "nsISVGValue.h"
-#include "nsISVGValueObserver.h"
 #include "nsHTMLParts.h"
 #include "nsReflowPath.h"
 #include "nsISVGRenderer.h"
@@ -159,15 +157,12 @@
 class nsSVGOuterSVGFrame : public nsSVGOuterSVGFrameBase,
                            public nsISVGOuterSVGFrame,
                            public nsISVGContainerFrame,
-                           public nsISVGValueObserver,
-                           public nsSupportsWeakReference,
                            public nsSVGCoordCtxProvider
 {
   friend nsresult
   NS_NewSVGOuterSVGFrame(nsIPresShell* aPresShell, nsIContent* aContent, nsIFrame** aNewFrame);
 protected:
   nsSVGOuterSVGFrame();
-  virtual ~nsSVGOuterSVGFrame();
   nsresult Init();
   
    // nsISupports interface:
@@ -236,15 +231,6 @@
   }
 #endif
 
-  // nsISVGValueObserver
-  NS_IMETHOD WillModifySVGObservable(nsISVGValue* observable,
-                                     nsISVGValue::modificationType aModType);
-  NS_IMETHOD DidModifySVGObservable (nsISVGValue* observable,
-                                     nsISVGValue::modificationType aModType);
-
-  // nsISupportsWeakReference
-  // implementation inherited from nsSupportsWeakReference
-  
   // nsISVGOuterSVGFrame interface:
   NS_IMETHOD InvalidateRegion(nsISVGRendererRegion* region, PRBool bRedraw);
   NS_IMETHOD IsRedrawSuspended(PRBool* isSuspended);
@@ -267,9 +253,6 @@
   float GetPxPerTwips();
   float GetTwipsPerPx();
 
-  void AddAsWidthHeightObserver();
-  void RemoveAsWidthHeightObserver();
-
   void CalculateAvailableSpace(nsRect *maxRect, nsRect *preferredRect,
                                nsPresContext* aPresContext,
                                const nsHTMLReflowState& aReflowState);
@@ -319,18 +302,6 @@
 {
 }
 
-nsSVGOuterSVGFrame::~nsSVGOuterSVGFrame()
-{
-#ifdef DEBUG
-//  printf("~nsSVGOuterSVGFrame %p\n", this);
-#endif
-
-  if (mZoomAndPan)
-    NS_REMOVE_SVGVALUE_OBSERVER(mZoomAndPan);
-
-  RemoveAsWidthHeightObserver();
-}
-
 #ifdef MOZ_SVG_RENDERER_GDIPLUS
 // alert the user if GDI+ is not installed.
 // it is non-modal (i.e., it doesn't wait for input from the user)
@@ -421,12 +392,10 @@
   nsIDocument* doc = mContent->GetCurrentDoc();
   if (doc && doc->GetRootContent() == mContent) {
     SVGElement->GetZoomAndPanEnum(getter_AddRefs(mZoomAndPan));
-    NS_ADD_SVGVALUE_OBSERVER(mZoomAndPan);
     SVGElement->GetCurrentTranslate(getter_AddRefs(mCurrentTranslate));
     SVGElement->GetCurrentScaleNumber(getter_AddRefs(mCurrentScale));
   }
 
-  AddAsWidthHeightObserver();
   SuspendRedraw();
   return NS_OK;
 }
@@ -438,8 +407,6 @@
   NS_INTERFACE_MAP_ENTRY(nsISVGContainerFrame)
   NS_INTERFACE_MAP_ENTRY(nsISVGOuterSVGFrame)
   NS_INTERFACE_MAP_ENTRY(nsISVGSVGFrame)
-  NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
-  NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
   NS_INTERFACE_MAP_ENTRY(nsSVGCoordCtxProvider)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGOuterSVGFrameBase)
 
@@ -558,11 +525,6 @@
 
   SuspendRedraw(); 
   
-  // As soon as we set the coordinate context, the width/height
-  // attributes might emit change-notifications. We don't want those
-  // right now:
-  RemoveAsWidthHeightObserver();
-
   nsCOMPtr<nsIDOMSVGRect> r;
   NS_NewSVGRect(getter_AddRefs(r), 0, 0, preferredWidth, preferredHeight);
   SetCoordCtxRect(r);
@@ -635,8 +597,6 @@
   aStatus = NS_FRAME_COMPLETE;
   NS_FRAME_SET_TRUNCATION(aStatus, aReflowState, aDesiredSize);
 
-  AddAsWidthHeightObserver();
-  
   UnsuspendRedraw();
   
   return NS_OK;
@@ -936,30 +896,6 @@
 }
 
 //----------------------------------------------------------------------
-// nsISVGValueObserver methods:
-
-NS_IMETHODIMP
-nsSVGOuterSVGFrame::WillModifySVGObservable(nsISVGValue* observable,
-                                            nsISVGValue::modificationType aModType)
-{
-  return NS_OK;
-}
-
-
-NS_IMETHODIMP
-nsSVGOuterSVGFrame::DidModifySVGObservable(nsISVGValue* observable,
-                                           nsISVGValue::modificationType aModType)
-{
-  mNeedsReflow = PR_TRUE;
-  if (mRedrawSuspendCount==0) {
-    InitiateReflow();
-  }
-  
-  return NS_OK;
-}
-
-
-//----------------------------------------------------------------------
 // nsISVGOuterSVGFrame methods:
 
 NS_IMETHODIMP
@@ -1178,58 +1114,6 @@
 }
 
 
-void nsSVGOuterSVGFrame::AddAsWidthHeightObserver()
-{
-  nsCOMPtr<nsIDOMSVGSVGElement> svgElement = do_QueryInterface(mContent);
-  NS_ASSERTION(svgElement, "wrong content element");  
- 
-  {
-    nsCOMPtr<nsIDOMSVGAnimatedLength> animLength;
-    svgElement->GetWidth(getter_AddRefs(animLength));
-    NS_ASSERTION(animLength, "could not get <svg>:width");
-    nsCOMPtr<nsIDOMSVGLength> length;
-    animLength->GetAnimVal(getter_AddRefs(length));
-    NS_ASSERTION(length, "could not get <svg>:width:animval");
-    NS_ADD_SVGVALUE_OBSERVER(length);
-  }
-
-  {
-    nsCOMPtr<nsIDOMSVGAnimatedLength> animLength;
-    svgElement->GetHeight(getter_AddRefs(animLength));
-    NS_ASSERTION(animLength, "could not get <svg>:height");
-    nsCOMPtr<nsIDOMSVGLength> length;
-    animLength->GetAnimVal(getter_AddRefs(length));
-    NS_ASSERTION(length, "could not get <svg>:height:animval");
-    NS_ADD_SVGVALUE_OBSERVER(length);
-  }  
-}
-
-void nsSVGOuterSVGFrame::RemoveAsWidthHeightObserver()
-{
-  nsCOMPtr<nsIDOMSVGSVGElement> svgElement = do_QueryInterface(mContent);
-  NS_ASSERTION(svgElement, "wrong content element");  
-
-  {
-    nsCOMPtr<nsIDOMSVGAnimatedLength> animLength;
-    svgElement->GetWidth(getter_AddRefs(animLength));
-    NS_ASSERTION(animLength, "could not get <svg>:width");
-    nsCOMPtr<nsIDOMSVGLength> length;
-    animLength->GetAnimVal(getter_AddRefs(length));
-    NS_ASSERTION(length, "could not get <svg>:width:animval");
-    NS_REMOVE_SVGVALUE_OBSERVER(length);
-  }
-
-  {
-    nsCOMPtr<nsIDOMSVGAnimatedLength> animLength;
-    svgElement->GetHeight(getter_AddRefs(animLength));
-    NS_ASSERTION(animLength, "could not get <svg>:height");
-    nsCOMPtr<nsIDOMSVGLength> length;
-    animLength->GetAnimVal(getter_AddRefs(length));
-    NS_ASSERTION(length, "could not get <svg>:height:animval");
-    NS_REMOVE_SVGVALUE_OBSERVER(length);
-  }  
-}
-
 void
 nsSVGOuterSVGFrame::CalculateAvailableSpace(nsRect *maxRect,
                                             nsRect *preferredRect,
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGPathFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGPathFrame.cpp,v
retrieving revision 1.27
diff -u -r1.27 nsSVGPathFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGPathFrame.cpp	26 Aug 2005 02:49:51 -0000	1.27
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGPathFrame.cpp	29 Aug 2005 09:50:43 -0000
@@ -50,6 +50,8 @@
 #include "nsISupports.h"
 #include "nsLayoutAtoms.h"
 #include "nsISVGPathFlatten.h"
+#include "nsINameSpaceManager.h"
+#include "nsSVGAtoms.h"
 
 class nsSVGPathFrame : public nsSVGPathGeometryFrame,
                        public nsISVGMarkable,
@@ -59,13 +61,14 @@
   friend nsresult
   NS_NewSVGPathFrame(nsIPresShell* aPresShell, nsIContent* aContent, nsIFrame** aNewFrame);
 
-  ~nsSVGPathFrame();
   NS_IMETHOD InitSVG();
   
 public:
-  // nsISVGValueObserver interface:
-  NS_IMETHOD DidModifySVGObservable(nsISVGValue* observable,
-                                    nsISVGValue::modificationType aModType);
+  // nsIFrame interface:
+  NS_IMETHOD  AttributeChanged(nsIContent*     aChild,
+                               PRInt32         aNameSpaceID,
+                               nsIAtom*        aAttribute,
+                               PRInt32         aModType);
 
   // nsISVGPathGeometrySource interface:
   NS_IMETHOD ConstructPath(nsISVGRendererPathBuilder *pathBuilder);
@@ -129,12 +132,6 @@
   return NS_OK;
 }
 
-nsSVGPathFrame::~nsSVGPathFrame()
-{
-  nsCOMPtr<nsISVGValue> value;
-  if (mSegments && (value = do_QueryInterface(mSegments)))
-      value->RemoveObserver(this);
-}
 
 NS_IMETHODIMP
 nsSVGPathFrame::InitSVG()
@@ -147,27 +144,27 @@
   anim_data->GetAnimatedPathSegList(getter_AddRefs(mSegments));
   NS_ASSERTION(mSegments, "no pathseglist");
   if (!mSegments) return NS_ERROR_FAILURE;
-  nsCOMPtr<nsISVGValue> value = do_QueryInterface(mSegments);
-  if (value)
-    value->AddObserver(this);
   
   return NS_OK;
 }  
 
 //----------------------------------------------------------------------
-// nsISVGValueObserver methods:
+// nsISVGFrame methods:
 
 NS_IMETHODIMP
-nsSVGPathFrame::DidModifySVGObservable(nsISVGValue* observable,
-                                       nsISVGValue::modificationType aModType)
+nsSVGPathFrame::AttributeChanged(nsIContent*     aChild,
+                                 PRInt32         aNameSpaceID,
+                                 nsIAtom*        aAttribute,
+                                 PRInt32         aModType)
 {
-  nsCOMPtr<nsIDOMSVGPathSegList> l = do_QueryInterface(observable);
-  if (l && mSegments==l) {
+  if (aNameSpaceID == kNameSpaceID_None &&
+      aAttribute == nsSVGAtoms::d) {
     UpdateGraphic(nsISVGPathGeometrySource::UPDATEMASK_PATH);
     return NS_OK;
   }
-  // else
-  return nsSVGPathGeometryFrame::DidModifySVGObservable(observable, aModType);
+
+  return nsSVGPathGeometryFrame::AttributeChanged(aChild, aNameSpaceID,
+                                                  aAttribute, aModType);
 }
 
 //----------------------------------------------------------------------
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGPathGeometryFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGPathGeometryFrame.cpp,v
retrieving revision 1.27
diff -u -r1.27 nsSVGPathGeometryFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGPathGeometryFrame.cpp	4 Aug 2005 20:32:00 -0000	1.27
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGPathGeometryFrame.cpp	29 Aug 2005 09:50:44 -0000
@@ -61,6 +61,7 @@
 #include "nsISVGRendererCanvas.h"
 #include "nsIViewManager.h"
 #include "nsSVGUtils.h"
+#include "nsINameSpaceManager.h"
 
 ////////////////////////////////////////////////////////////////////////
 // nsSVGPathGeometryFrame
@@ -80,11 +81,6 @@
 //  printf("~nsSVGPathGeometryFrame %p\n", this);
 #endif
   
-  nsCOMPtr<nsIDOMSVGTransformable> transformable = do_QueryInterface(mContent);
-  NS_ASSERTION(transformable, "wrong content element");
-  nsCOMPtr<nsIDOMSVGAnimatedTransformList> transforms;
-  transformable->GetTransform(getter_AddRefs(transforms));
-  NS_REMOVE_SVGVALUE_OBSERVER(transforms);
   if (mFillGradient) {
     NS_REMOVE_SVGVALUE_OBSERVER(mFillGradient);
   }
@@ -135,17 +131,9 @@
                                          nsIAtom*        aAttribute,
                                          PRInt32         aModType)
 {
-  // we don't use this notification mechanism
-  
-#ifdef DEBUG
-//  printf("** nsSVGPathGeometryFrame::AttributeChanged(");
-//  nsAutoString str;
-//  aAttribute->ToString(str);
-//  nsCAutoString cstr;
-//  cstr.AssignWithConversion(str);
-//  printf(cstr.get());
-//  printf(")\n");
-#endif
+  if (aNameSpaceID == kNameSpaceID_None &&
+      aAttribute == nsSVGAtoms::transform)
+    UpdateGraphic(nsISVGGeometrySource::UPDATEMASK_CANVAS_TM);
   
   return NS_OK;
 }
@@ -449,10 +437,8 @@
       }
       UpdateGraphic(nsISVGGeometrySource::UPDATEMASK_STROKE_PAINT);
     }
-  } else {
-    // No, all of our other observables update the canvastm by default
-    UpdateGraphic(nsISVGGeometrySource::UPDATEMASK_CANVAS_TM);
   }
+
   return NS_OK;
 }
 
@@ -788,14 +774,6 @@
 NS_IMETHODIMP
 nsSVGPathGeometryFrame::InitSVG()
 {
-  // all path geometry frames listen in on changes to their
-  // corresponding content element's transform attribute:
-  nsCOMPtr<nsIDOMSVGTransformable> transformable = do_QueryInterface(mContent);
-  NS_ASSERTION(transformable, "wrong content element");
-  nsCOMPtr<nsIDOMSVGAnimatedTransformList> transforms;
-  transformable->GetTransform(getter_AddRefs(transforms));
-  NS_ADD_SVGVALUE_OBSERVER(transforms);
-  
   // construct a pathgeometry object:
   nsISVGOuterSVGFrame* outerSVGFrame = GetOuterSVGFrame();
   if (!outerSVGFrame) {
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGPathGeometryFrame.h
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGPathGeometryFrame.h,v
retrieving revision 1.13
diff -u -r1.13 nsSVGPathGeometryFrame.h
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGPathGeometryFrame.h	19 Apr 2005 03:48:09 -0000	1.13
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGPathGeometryFrame.h	29 Aug 2005 09:50:45 -0000
@@ -103,7 +103,6 @@
 #endif
 
 protected:
-  
   // nsISVGValueObserver
   NS_IMETHOD WillModifySVGObservable(nsISVGValue* observable,
                                      nsISVGValue::modificationType aModType);
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGPolygonFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGPolygonFrame.cpp,v
retrieving revision 1.9
diff -u -r1.9 nsSVGPolygonFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGPolygonFrame.cpp	19 Apr 2005 03:48:09 -0000	1.9
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGPolygonFrame.cpp	29 Aug 2005 09:50:45 -0000
@@ -40,11 +40,12 @@
 #include "nsIDOMSVGAnimatedPoints.h"
 #include "nsIDOMSVGPointList.h"
 #include "nsIDOMSVGPoint.h"
-//#include "nsASVGPathBuilder.h"
 #include "nsISVGRendererPathBuilder.h"
 #include "nsISVGMarkable.h"
 #include "nsSVGMarkerFrame.h"
 #include "nsLayoutAtoms.h"
+#include "nsINameSpaceManager.h"
+#include "nsSVGAtoms.h"
 
 class nsSVGPolygonFrame : public nsSVGPathGeometryFrame,
                           public nsISVGMarkable
@@ -53,14 +54,14 @@
   friend nsresult
   NS_NewSVGPolygonFrame(nsIPresShell* aPresShell, nsIContent* aContent, nsIFrame** aNewFrame);
 
-  ~nsSVGPolygonFrame();
-
   NS_IMETHOD InitSVG();
   
 public:
-  // nsISVGValueObserver interface:
-  NS_IMETHOD DidModifySVGObservable(nsISVGValue* observable,
-                                    nsISVGValue::modificationType aModType);
+  // nsIFrame interface:
+  NS_IMETHOD  AttributeChanged(nsIContent*     aChild,
+                               PRInt32         aNameSpaceID,
+                               nsIAtom*        aAttribute,
+                               PRInt32         aModType);
 
   // nsISVGPathGeometrySource interface:
   NS_IMETHOD ConstructPath(nsISVGRendererPathBuilder *pathBuilder);
@@ -119,13 +120,6 @@
   return NS_OK;
 }
 
-nsSVGPolygonFrame::~nsSVGPolygonFrame()
-{
-  nsCOMPtr<nsISVGValue> value;
-  if (mPoints && (value = do_QueryInterface(mPoints)))
-      value->RemoveObserver(this);
-}
-
 NS_IMETHODIMP
 nsSVGPolygonFrame::InitSVG()
 {
@@ -137,26 +131,27 @@
   anim_points->GetPoints(getter_AddRefs(mPoints));
   NS_ASSERTION(mPoints, "no points");
   if (!mPoints) return NS_ERROR_FAILURE;
-  nsCOMPtr<nsISVGValue> value = do_QueryInterface(mPoints);
-  if (value)
-    value->AddObserver(this);
+
   return NS_OK; 
 }  
 
 //----------------------------------------------------------------------
-// nsISVGValueObserver methods:
+// nsIFrame methods:
 
 NS_IMETHODIMP
-nsSVGPolygonFrame::DidModifySVGObservable(nsISVGValue* observable,
-                                          nsISVGValue::modificationType aModType)
+nsSVGPolygonFrame::AttributeChanged(nsIContent*     aChild,
+                                    PRInt32         aNameSpaceID,
+                                    nsIAtom*        aAttribute,
+                                    PRInt32         aModType)
 {
-  nsCOMPtr<nsIDOMSVGPointList> l = do_QueryInterface(observable);
-  if (l && mPoints==l) {
+  if (aNameSpaceID == kNameSpaceID_None &&
+      aAttribute == nsSVGAtoms::points) {
     UpdateGraphic(nsISVGPathGeometrySource::UPDATEMASK_PATH);
     return NS_OK;
   }
-  // else
-  return nsSVGPathGeometryFrame::DidModifySVGObservable(observable, aModType);
+
+  return nsSVGPathGeometryFrame::AttributeChanged(aChild, aNameSpaceID,
+                                                  aAttribute, aModType);
 }
 
 //----------------------------------------------------------------------
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGPolylineFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGPolylineFrame.cpp,v
retrieving revision 1.9
diff -u -r1.9 nsSVGPolylineFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGPolylineFrame.cpp	19 Apr 2005 03:48:09 -0000	1.9
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGPolylineFrame.cpp	29 Aug 2005 09:50:46 -0000
@@ -40,11 +40,12 @@
 #include "nsIDOMSVGAnimatedPoints.h"
 #include "nsIDOMSVGPointList.h"
 #include "nsIDOMSVGPoint.h"
-//#include "nsASVGPathBuilder.h"
 #include "nsISVGRendererPathBuilder.h"
 #include "nsISVGMarkable.h"
 #include "nsSVGMarkerFrame.h"
 #include "nsLayoutAtoms.h"
+#include "nsINameSpaceManager.h"
+#include "nsSVGAtoms.h"
 
 class nsSVGPolylineFrame : public nsSVGPathGeometryFrame,
                            public nsISVGMarkable
@@ -53,7 +54,6 @@
   friend nsresult
   NS_NewSVGPolylineFrame(nsIPresShell* aPresShell, nsIContent* aContent, nsIFrame** aNewFrame);
 
-  virtual ~nsSVGPolylineFrame();
   NS_IMETHOD InitSVG();
 
 public:
@@ -64,6 +64,7 @@
    */
   virtual nsIAtom* GetType() const;
 
+  // nsIFrame interface:
 #ifdef DEBUG
   NS_IMETHOD GetFrameName(nsAString& aResult) const
   {
@@ -71,9 +72,10 @@
   }
 #endif
 
-  // nsISVGValueObserver interface:
-  NS_IMETHOD DidModifySVGObservable(nsISVGValue* observable,
-                                    nsISVGValue::modificationType aModType);
+  NS_IMETHOD  AttributeChanged(nsIContent*     aChild,
+                               PRInt32         aNameSpaceID,
+                               nsIAtom*        aAttribute,
+                               PRInt32         aModType);
 
   // nsISVGPathGeometrySource interface:
   NS_IMETHOD ConstructPath(nsISVGRendererPathBuilder *pathBuilder);
@@ -119,13 +121,6 @@
   return NS_OK;
 }
 
-nsSVGPolylineFrame::~nsSVGPolylineFrame()
-{
-  nsCOMPtr<nsISVGValue> value;
-  if (mPoints && (value = do_QueryInterface(mPoints)))
-      value->RemoveObserver(this);
-}
-
 NS_IMETHODIMP
 nsSVGPolylineFrame::InitSVG()
 {
@@ -137,32 +132,33 @@
   anim_points->GetPoints(getter_AddRefs(mPoints));
   NS_ASSERTION(mPoints, "no points");
   if (!mPoints) return NS_ERROR_FAILURE;
-  nsCOMPtr<nsISVGValue> value = do_QueryInterface(mPoints);
-  if (value)
-    value->AddObserver(this);
+
   return NS_OK; 
 }  
 
+//----------------------------------------------------------------------
+// nsIFrame methods:
+
 nsIAtom *
 nsSVGPolylineFrame::GetType() const
 {
   return nsLayoutAtoms::svgPolylineFrame;
 }
 
-//----------------------------------------------------------------------
-// nsISVGValueObserver methods:
-
 NS_IMETHODIMP
-nsSVGPolylineFrame::DidModifySVGObservable(nsISVGValue* observable,
-                                           nsISVGValue::modificationType aModType)
+nsSVGPolylineFrame::AttributeChanged(nsIContent*     aChild,
+                                     PRInt32         aNameSpaceID,
+                                     nsIAtom*        aAttribute,
+                                     PRInt32         aModType)
 {
-  nsCOMPtr<nsIDOMSVGPointList> l = do_QueryInterface(observable);
-  if (l && mPoints==l) {
+  if (aNameSpaceID == kNameSpaceID_None &&
+      aAttribute == nsSVGAtoms::points) {
     UpdateGraphic(nsISVGPathGeometrySource::UPDATEMASK_PATH);
     return NS_OK;
   }
-  // else
-  return nsSVGPathGeometryFrame::DidModifySVGObservable(observable, aModType);
+
+  return nsSVGPathGeometryFrame::AttributeChanged(aChild, aNameSpaceID,
+                                                  aAttribute, aModType);
 }
 
 //----------------------------------------------------------------------
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGRectFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGRectFrame.cpp,v
retrieving revision 1.9
diff -u -r1.9 nsSVGRectFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGRectFrame.cpp	19 Apr 2005 03:48:09 -0000	1.9
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGRectFrame.cpp	29 Aug 2005 09:50:46 -0000
@@ -55,13 +55,13 @@
   NS_NewSVGRectFrame(nsIPresShell* aPresShell, nsIContent* aContent,
                      nsIFrame** aNewFrame);
 
-  virtual ~nsSVGRectFrame();
   NS_IMETHOD InitSVG();
 
-public:
-  // nsISVGValueObserver interface:
-  NS_IMETHOD DidModifySVGObservable(nsISVGValue* observable,
-                                    nsISVGValue::modificationType aModType);
+  // nsIFrame interface:
+  NS_IMETHOD  AttributeChanged(nsIContent*     aChild,
+                               PRInt32         aNameSpaceID,
+                               nsIAtom*        aAttribute,
+                               PRInt32         aModType);
 
   // nsISVGPathGeometrySource interface:
   NS_IMETHOD ConstructPath(nsISVGRendererPathBuilder *pathBuilder);
@@ -112,23 +112,6 @@
   return NS_OK;
 }
 
-nsSVGRectFrame::~nsSVGRectFrame()
-{
-  nsCOMPtr<nsISVGValue> value;
-  if (mX && (value = do_QueryInterface(mX)))
-      value->RemoveObserver(this);
-  if (mY && (value = do_QueryInterface(mY)))
-      value->RemoveObserver(this);
-  if (mWidth && (value = do_QueryInterface(mWidth)))
-      value->RemoveObserver(this);
-  if (mHeight && (value = do_QueryInterface(mHeight)))
-      value->RemoveObserver(this);
-  if (mRx && (value = do_QueryInterface(mRx)))
-      value->RemoveObserver(this);
-  if (mRy && (value = do_QueryInterface(mRy)))
-      value->RemoveObserver(this);
-}
-
 NS_IMETHODIMP
 nsSVGRectFrame::InitSVG()
 {
@@ -145,9 +128,6 @@
     NS_ASSERTION(mX, "no x");
     if (!mX)
       return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mX);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -157,9 +137,6 @@
     NS_ASSERTION(mY, "no y");
     if (!mY)
       return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mY);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -169,10 +146,8 @@
     NS_ASSERTION(mWidth, "no width");
     if (!mWidth)
       return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mWidth);
-    if (value)
-      value->AddObserver(this);
   }
+
   {
     nsCOMPtr<nsIDOMSVGAnimatedLength> length;
     Rect->GetHeight(getter_AddRefs(length));
@@ -180,9 +155,6 @@
     NS_ASSERTION(mHeight, "no height");
     if (!mHeight)
       return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mHeight);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -192,9 +164,6 @@
     NS_ASSERTION(mRx, "no rx");
     if (!mRx)
       return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mRx);
-    if (value)
-      value->AddObserver(this);
   }
 
   {
@@ -204,28 +173,33 @@
     NS_ASSERTION(mRy, "no ry");
     if (!mRy)
       return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mRy);
-    if (value)
-      value->AddObserver(this);
   }
 
   return NS_OK; 
 }
 
 //----------------------------------------------------------------------
-// nsISVGValueObserver methods:
+// nsIFrame methods:
 
 NS_IMETHODIMP
-nsSVGRectFrame::DidModifySVGObservable(nsISVGValue* observable,
-                                       nsISVGValue::modificationType aModType)
-{
-  nsCOMPtr<nsIDOMSVGLength> l = do_QueryInterface(observable);
-  if (l && (mX==l || mY==l || mWidth==l || mHeight==l || mRx==l || mRy==l)) {
+nsSVGRectFrame::AttributeChanged(nsIContent*     aChild,
+                                 PRInt32         aNameSpaceID,
+                                 nsIAtom*        aAttribute,
+                                 PRInt32         aModType)
+{
+  if (aNameSpaceID == kNameSpaceID_None &&
+      (aAttribute == nsSVGAtoms::x ||
+       aAttribute == nsSVGAtoms::y ||
+       aAttribute == nsSVGAtoms::width ||
+       aAttribute == nsSVGAtoms::height ||
+       aAttribute == nsSVGAtoms::rx ||
+       aAttribute == nsSVGAtoms::ry)) {
     UpdateGraphic(nsISVGPathGeometrySource::UPDATEMASK_PATH);
     return NS_OK;
   }
 
-  return nsSVGPathGeometryFrame::DidModifySVGObservable(observable, aModType);
+  return nsSVGPathGeometryFrame::AttributeChanged(aChild, aNameSpaceID,
+                                                  aAttribute, aModType);
 }
 
 //----------------------------------------------------------------------
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGTSpanFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGTSpanFrame.cpp,v
retrieving revision 1.17
diff -u -r1.17 nsSVGTSpanFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGTSpanFrame.cpp	26 Aug 2005 02:49:51 -0000	1.17
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGTSpanFrame.cpp	29 Aug 2005 09:50:48 -0000
@@ -78,61 +78,8 @@
 {
 }
 
-nsSVGTSpanFrame::~nsSVGTSpanFrame()
-{
-  // clean up our listener refs:
-  {
-    nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetX();
-    if (lengthList)
-      NS_REMOVE_SVGVALUE_OBSERVER(lengthList);
-  }
-
-  {
-    nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetY();
-    if (lengthList)
-      NS_REMOVE_SVGVALUE_OBSERVER(lengthList);
-  }
-
-  {
-    nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetDx();
-    if (lengthList)
-      NS_REMOVE_SVGVALUE_OBSERVER(lengthList);
-  }
-
-  {
-    nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetDy();
-    if (lengthList)
-      NS_REMOVE_SVGVALUE_OBSERVER(lengthList);
-  }
-}
-
 nsresult nsSVGTSpanFrame::InitSVG()
 {
-  // set us up as a listener for various <tspan>-properties: 
-  {
-    nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetX();
-    if (lengthList)
-      NS_ADD_SVGVALUE_OBSERVER(lengthList);
-  }
-
-  {
-    nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetY();
-    if (lengthList)
-      NS_ADD_SVGVALUE_OBSERVER(lengthList);
-  }
-
-  {
-    nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetDx();
-    if (lengthList)
-      NS_ADD_SVGVALUE_OBSERVER(lengthList);
-  }
-
-  {
-    nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetDy();
-    if (lengthList)
-      NS_ADD_SVGVALUE_OBSERVER(lengthList);
-  }
-
   return NS_OK;
 }
 
@@ -150,8 +97,6 @@
   NS_INTERFACE_MAP_ENTRY(nsISVGGlyphFragmentNode)
   NS_INTERFACE_MAP_ENTRY(nsISVGContainerFrame)
   NS_INTERFACE_MAP_ENTRY(nsISVGChildFrame)
-  NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
-  NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGTSpanFrameBase)
 
 
@@ -257,30 +202,27 @@
   return NS_ERROR_NOT_IMPLEMENTED;
 }
 
-//----------------------------------------------------------------------
-// nsISVGValueObserver methods:
-
 NS_IMETHODIMP
-nsSVGTSpanFrame::WillModifySVGObservable(nsISVGValue* observable,
-                                         nsISVGValue::modificationType aModType)
-{
-  return NS_OK;
-}
-
+nsSVGTSpanFrame::AttributeChanged(nsIContent*     aChild,
+                                  PRInt32         aNameSpaceID,
+                                  nsIAtom*        aAttribute,
+                                  PRInt32         aModType)
+{
+  if (aNameSpaceID == kNameSpaceID_None &&
+      (aAttribute == nsSVGAtoms::x ||
+       aAttribute == nsSVGAtoms::y ||
+       aAttribute == nsSVGAtoms::dx ||
+       aAttribute == nsSVGAtoms::dy)) {
+    nsIFrame* kid = mFrames.FirstChild();
+    while (kid) {
+      nsISVGChildFrame* SVGFrame=0;
+      kid->QueryInterface(NS_GET_IID(nsISVGChildFrame),(void**)&SVGFrame);
+      if (SVGFrame)
+        SVGFrame->NotifyCanvasTMChanged(); // XXX
+      kid = kid->GetNextSibling();
+    }  
+  }
 
-NS_IMETHODIMP
-nsSVGTSpanFrame::DidModifySVGObservable (nsISVGValue* observable,
-                                         nsISVGValue::modificationType aModType)
-{
-  
-  nsIFrame* kid = mFrames.FirstChild();
-  while (kid) {
-    nsISVGChildFrame* SVGFrame=0;
-    kid->QueryInterface(NS_GET_IID(nsISVGChildFrame),(void**)&SVGFrame);
-    if (SVGFrame)
-      SVGFrame->NotifyCanvasTMChanged(); // XXX
-    kid = kid->GetNextSibling();
-  }  
   return NS_OK;
 }
 
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGTSpanFrame.h
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGTSpanFrame.h,v
retrieving revision 1.1
diff -u -r1.1 nsSVGTSpanFrame.h
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGTSpanFrame.h	26 Aug 2005 02:49:51 -0000	1.1
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGTSpanFrame.h	29 Aug 2005 09:50:48 -0000
@@ -71,16 +71,13 @@
                         public nsISVGTextContainerFrame,
                         public nsISVGGlyphFragmentNode,
                         public nsISVGChildFrame,
-                        public nsISVGContainerFrame,
-                        public nsISVGValueObserver,
-                        public nsSupportsWeakReference
+                        public nsISVGContainerFrame
 {
   friend nsresult
   NS_NewSVGTSpanFrame(nsIPresShell* aPresShell, nsIContent* aContent,
                       nsIFrame* parentFrame, nsIFrame** aNewFrame);
 protected:
   nsSVGTSpanFrame();
-  virtual ~nsSVGTSpanFrame();
   virtual nsresult InitSVG();
   
    // nsISupports interface:
@@ -106,6 +103,10 @@
                   nsIFrame*        aParent,
                   nsStyleContext*  aContext,
                   nsIFrame*        aPrevInFlow);
+  NS_IMETHOD  AttributeChanged(nsIContent*     aChild,
+                               PRInt32         aNameSpaceID,
+                               nsIAtom*        aAttribute,
+                               PRInt32         aModType);
 
   /**
    * Get the "type" of the frame
@@ -121,12 +122,6 @@
   }
 #endif
 
-  // nsISVGValueObserver
-  NS_IMETHOD WillModifySVGObservable(nsISVGValue* observable,
-                                     nsISVGValue::modificationType aModType);
-  NS_IMETHOD DidModifySVGObservable (nsISVGValue* observable,
-                                     nsISVGValue::modificationType aModType);
-
   // nsISupportsWeakReference
   // implementation inherited from nsSupportsWeakReference
   
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGTextFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGTextFrame.cpp,v
retrieving revision 1.20
diff -u -r1.20 nsSVGTextFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGTextFrame.cpp	26 Aug 2005 02:49:51 -0000	1.20
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGTextFrame.cpp	29 Aug 2005 09:50:51 -0000
@@ -41,9 +41,7 @@
 #include "nsPresContext.h"
 #include "nsISVGTextFrame.h"
 #include "nsISVGRendererCanvas.h"
-#include "nsWeakReference.h"
 #include "nsISVGValue.h"
-#include "nsISVGValueObserver.h"
 #include "nsIDOMSVGTransformable.h"
 #include "nsIDOMSVGAnimTransformList.h"
 #include "nsIDOMSVGSVGElement.h"
@@ -66,6 +64,8 @@
 #include "nsLayoutAtoms.h"
 #include "nsISVGPathFlatten.h"
 #include "nsSVGUtils.h"
+#include "nsINameSpaceManager.h"
+#include "nsSVGAtoms.h"
 
 typedef nsContainerFrame nsSVGTextFrameBase;
 
@@ -73,17 +73,13 @@
                        public nsISVGTextFrame, // : nsISVGTextContainerFrame
                        public nsISVGChildFrame,
                        public nsISVGContainerFrame,
-                       public nsISVGValueObserver,
-                       public nsISVGTextContentMetrics,
-                       public nsSupportsWeakReference
+                       public nsISVGTextContentMetrics
 {
   friend nsresult
   NS_NewSVGTextFrame(nsIPresShell* aPresShell, nsIContent* aContent,
                      nsIFrame** aNewFrame);
 protected:
   nsSVGTextFrame();
-  virtual ~nsSVGTextFrame();
-  nsresult Init();
   
    // nsISupports interface:
   NS_IMETHOD QueryInterface(const nsIID& aIID, void** aInstancePtr);
@@ -104,12 +100,6 @@
                            nsIFrame*       aOldFrame,
                            nsIFrame*       aNewFrame);
   
-  NS_IMETHOD Init(nsPresContext*  aPresContext,
-                  nsIContent*      aContent,
-                  nsIFrame*        aParent,
-                  nsStyleContext*  aContext,
-                  nsIFrame*        aPrevInFlow);
-
   NS_IMETHOD  AttributeChanged(nsIContent*     aChild,
                                PRInt32         aNameSpaceID,
                                nsIAtom*        aAttribute,
@@ -131,12 +121,6 @@
   }
 #endif
 
-  // nsISVGValueObserver
-  NS_IMETHOD WillModifySVGObservable(nsISVGValue* observable,
-                                     nsISVGValue::modificationType aModType);
-  NS_IMETHOD DidModifySVGObservable (nsISVGValue* observable,
-                                     nsISVGValue::modificationType aModType);
-
   // nsISVGTextContentMetrics
   NS_IMETHOD GetExtentOfChar(PRUint32 charnum, nsIDOMSVGRect **_retval);
   
@@ -232,68 +216,6 @@
 {
 }
 
-nsSVGTextFrame::~nsSVGTextFrame()
-{
-  // clean up our listener refs:
-  {
-    nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetX();
-    NS_REMOVE_SVGVALUE_OBSERVER(lengthList);
-  }
-
-  {
-    nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetY();
-    NS_REMOVE_SVGVALUE_OBSERVER(lengthList);
-  }
-
-  {
-    nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetDx();
-    NS_REMOVE_SVGVALUE_OBSERVER(lengthList);
-  }
-
-  {
-    nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetDy();
-    NS_REMOVE_SVGVALUE_OBSERVER(lengthList);
-  }
-
-  {
-    nsCOMPtr<nsIDOMSVGTransformable> transformable = do_QueryInterface(mContent);
-    NS_ASSERTION(transformable, "wrong content element");
-    nsCOMPtr<nsIDOMSVGAnimatedTransformList> transforms;
-    transformable->GetTransform(getter_AddRefs(transforms));
-    NS_REMOVE_SVGVALUE_OBSERVER(transforms);
-  }
-}
-
-nsresult nsSVGTextFrame::Init()
-{
-  // set us up as a listener for various <text>-properties: 
-  {
-    nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetX();
-    NS_ADD_SVGVALUE_OBSERVER(lengthList);
-  }
-
-  {
-    nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetY();
-    NS_ADD_SVGVALUE_OBSERVER(lengthList);
-  }
-
-  {
-    nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetDx();
-    NS_ADD_SVGVALUE_OBSERVER(lengthList);
-  }
-
-  {
-    nsCOMPtr<nsIDOMSVGLengthList> lengthList = GetDy();
-    NS_ADD_SVGVALUE_OBSERVER(lengthList);
-  }
-
-  {
-    nsCOMPtr<nsIDOMSVGAnimatedTransformList> transforms = GetTransform();
-    NS_ADD_SVGVALUE_OBSERVER(transforms);
-  }
-  
-  return NS_OK;
-}
 
 //----------------------------------------------------------------------
 // nsISupports methods
@@ -303,29 +225,12 @@
   NS_INTERFACE_MAP_ENTRY(nsISVGTextContainerFrame)
   NS_INTERFACE_MAP_ENTRY(nsISVGContainerFrame)
   NS_INTERFACE_MAP_ENTRY(nsISVGChildFrame)
-  NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
-  NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
   NS_INTERFACE_MAP_ENTRY(nsISVGTextContentMetrics)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGTextFrameBase)
 
 
 //----------------------------------------------------------------------
 // nsIFrame methods
-NS_IMETHODIMP
-nsSVGTextFrame::Init(nsPresContext*   aPresContext,
-                     nsIContent*      aContent,
-                     nsIFrame*        aParent,
-                     nsStyleContext*  aContext,
-                     nsIFrame*        aPrevInFlow)
-{
-  nsresult rv;
-  rv = nsSVGTextFrameBase::Init(aPresContext, aContent, aParent,
-                                aContext, aPrevInFlow);
-
-  Init();
-  
-  return rv;
-}
 
 NS_IMETHODIMP
 nsSVGTextFrame::AttributeChanged(nsIContent*     aChild,
@@ -333,15 +238,32 @@
                                  nsIAtom*        aAttribute,
                                  PRInt32         aModType)
 {
-  // we don't use this notification mechanism
-  
-#ifdef DEBUG
-  printf("** nsSVGTextFrame::AttributeChanged(");
-  nsAutoString str;
-  aAttribute->ToString(str);
-  printf(NS_ConvertUTF16toUTF8(str).get());
-  printf(")\n");
-#endif
+  if (aNameSpaceID != kNameSpaceID_None)
+    return NS_OK;
+
+  if (aAttribute == nsSVGAtoms::transform) {
+    // transform has changed
+
+    // make sure our cached transform matrix gets (lazily) updated
+    mCanvasTM = nsnull;
+    
+    nsIFrame* kid = mFrames.FirstChild();
+    while (kid) {
+      nsISVGChildFrame* SVGFrame=0;
+      kid->QueryInterface(NS_GET_IID(nsISVGChildFrame),(void**)&SVGFrame);
+      if (SVGFrame)
+        SVGFrame->NotifyCanvasTMChanged();
+      kid = kid->GetNextSibling();
+    }
+  } else if (aAttribute == nsSVGAtoms::x ||
+             aAttribute == nsSVGAtoms::y ||
+             aAttribute == nsSVGAtoms::dx ||
+             aAttribute == nsSVGAtoms::dy) {
+    mPositioningDirty = PR_TRUE;
+    if (mMetricsState == unsuspended) {
+      UpdateGlyphPositioning();
+    }
+  }
   
   return NS_OK;
 }
@@ -447,47 +369,6 @@
 }
 
 //----------------------------------------------------------------------
-// nsISVGValueObserver methods:
-
-NS_IMETHODIMP
-nsSVGTextFrame::WillModifySVGObservable(nsISVGValue* observable,
-                                        nsISVGValue::modificationType aModType)
-{
-  return NS_OK;
-}
-
-
-NS_IMETHODIMP
-nsSVGTextFrame::DidModifySVGObservable (nsISVGValue* observable,
-                                        nsISVGValue::modificationType aModType)
-{  
-  nsCOMPtr<nsIDOMSVGAnimatedTransformList> transforms = GetTransform();
-  if (SameCOMIdentity(observable, transforms)) {
-    // transform has changed
-
-    // make sure our cached transform matrix gets (lazily) updated
-    mCanvasTM = nsnull;
-    
-    nsIFrame* kid = mFrames.FirstChild();
-    while (kid) {
-      nsISVGChildFrame* SVGFrame=0;
-      kid->QueryInterface(NS_GET_IID(nsISVGChildFrame),(void**)&SVGFrame);
-      if (SVGFrame)
-        SVGFrame->NotifyCanvasTMChanged();
-      kid = kid->GetNextSibling();
-    }
-  }
-  else {
-    // x, y have changed
-    mPositioningDirty = PR_TRUE;
-    if (mMetricsState == unsuspended) {
-      UpdateGlyphPositioning();
-    }
-  }
-  return NS_OK;
-}
-
-//----------------------------------------------------------------------
 // nsISVGTextContentMetrics
 NS_IMETHODIMP
 nsSVGTextFrame::GetExtentOfChar(PRUint32 charnum, nsIDOMSVGRect **_retval)
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGTextPathFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGTextPathFrame.cpp,v
retrieving revision 1.1
diff -u -r1.1 nsSVGTextPathFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGTextPathFrame.cpp	26 Aug 2005 02:49:51 -0000	1.1
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGTextPathFrame.cpp	29 Aug 2005 09:50:51 -0000
@@ -79,7 +79,6 @@
   NS_IMETHOD_(nsrefcnt) Release() { return NS_OK; }  
 
 protected:
-  virtual ~nsSVGTextPathFrame();
   virtual nsresult InitSVG();
 
   NS_IMETHOD_(already_AddRefed<nsIDOMSVGLengthList>) GetX();
@@ -130,11 +129,6 @@
   return NS_OK;
 }
 
-nsSVGTextPathFrame::~nsSVGTextPathFrame()
-{
-  NS_REMOVE_SVGVALUE_OBSERVER(mStartOffset);
-}
-
 nsresult
 nsSVGTextPathFrame::InitSVG()
 {
@@ -147,7 +141,6 @@
     NS_ASSERTION(mStartOffset, "no startOffset");
     if (!mStartOffset)
       return NS_ERROR_FAILURE;
-    NS_ADD_SVGVALUE_OBSERVER(mStartOffset);
   }
 
   nsresult rv = nsSVGTextPathFrameBase::InitSVG();
Index: /cvsroot/mozilla/layout/svg/base/src/nsSVGUseFrame.cpp
===================================================================
RCS file: /cvsroot/mozilla/layout/svg/base/src/nsSVGUseFrame.cpp,v
retrieving revision 1.5
diff -u -r1.5 nsSVGUseFrame.cpp
--- /cvsroot/mozilla/layout/svg/base/src/nsSVGUseFrame.cpp	27 Apr 2005 16:54:12 -0000	1.5
+++ /cvsroot/mozilla/layout/svg/base/src/nsSVGUseFrame.cpp	29 Aug 2005 09:50:53 -0000
@@ -44,6 +44,8 @@
 #include "nsIAnonymousContentCreator.h"
 #include "nsSVGMatrix.h"
 #include "nsLayoutAtoms.h"
+#include "nsINameSpaceManager.h"
+#include "nsSVGAtoms.h"
 
 typedef nsSVGGFrame nsSVGUseFrameBase;
 
@@ -64,6 +66,11 @@
   NS_IMETHOD_(nsrefcnt) Release() { return NS_OK; }  
 
 public:
+  // nsIFrame interface:
+  NS_IMETHOD  AttributeChanged(nsIContent*     aChild,
+                               PRInt32         aNameSpaceID,
+                               nsIAtom*        aAttribute,
+                               PRInt32         aModType);
 
   // nsISVGContainerFrame interface:
   already_AddRefed<nsIDOMSVGMatrix> GetCanvasTM();
@@ -134,9 +141,6 @@
     length->GetAnimVal(getter_AddRefs(mX));
     NS_ASSERTION(mX, "no x");
     if (!mX) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mX);
-    if (value)
-      value->AddObserver(this);  // nsISVGValueObserver
   }
 
   {
@@ -145,9 +149,6 @@
     length->GetAnimVal(getter_AddRefs(mY));
     NS_ASSERTION(mY, "no y");
     if (!mY) return NS_ERROR_FAILURE;
-    nsCOMPtr<nsISVGValue> value = do_QueryInterface(mY);
-    if (value)
-      value->AddObserver(this);
   }
 
   return NS_OK;
@@ -167,6 +168,36 @@
 NS_INTERFACE_MAP_END_INHERITING(nsSVGUseFrameBase)
 
 //----------------------------------------------------------------------
+// nsIFrame methods:
+
+NS_IMETHODIMP
+nsSVGUseFrame::AttributeChanged(nsIContent*     aChild,
+                                PRInt32         aNameSpaceID,
+                                nsIAtom*        aAttribute,
+                                PRInt32         aModType)
+{
+  if (aNameSpaceID == kNameSpaceID_None &&
+      (aAttribute == nsSVGAtoms::x ||
+       aAttribute == nsSVGAtoms::y)) {
+    // make sure our cached transform matrix gets (lazily) updated
+    mCanvasTM = nsnull;
+    
+    for (nsIFrame* kid = mFrames.FirstChild(); kid;
+         kid = kid->GetNextSibling()) {
+      nsISVGChildFrame* SVGFrame=nsnull;
+      kid->QueryInterface(NS_GET_IID(nsISVGChildFrame),(void**)&SVGFrame);
+      if (SVGFrame)
+        SVGFrame->NotifyCanvasTMChanged();
+    }
+    return NS_OK;
+  }
+
+  return nsSVGGFrame::AttributeChanged(aChild, aNameSpaceID,
+                                       aAttribute, aModType);
+}
+
+
+//----------------------------------------------------------------------
 // nsISVGContainerFrame methods:
 
 already_AddRefed<nsIDOMSVGMatrix>
