Your message dated Sat, 22 Jul 2017 13:17:18 +0100
with message-id <1500725838.14212.3.ca...@adam-barratt.org.uk>
and subject line Closing bugs for 9.1 p-u fixes
has caused the Debian Bug report #867624,
regarding stretch-pu: package avogadro/1.2.0-2+deb9u1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
867624: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=867624
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: stretch
User: release.debian....@packages.debian.org
Usertags: pu

Version 1.2.0-2 (now in testing) fixes an RC bug in stretch where atoms
are not displayed at all, rendering avogadro useless.

The debdiff is attached, it replaces the old eigen3.patch with the
upstream versions here:

https://github.com/cryos/avogadro/commit/2d4be7ede177a8df7340fe3b209698d591ee8a04
https://github.com/cryos/avogadro/commit/43af3c117b0b3220b15c2fe2895b94bbd83d3a60

Changelog entry:

|avogadro (1.2.0-2+deb9u1) stretch; urgency=medium
|
|  [ Anton Gladky ]
|  * Update eigen3 patches, pull them from upstream. (Closes: #865085)
|
| -- Michael Banck <mba...@debian.org>  Thu, 13 Jul 2017 10:15:00 +0200

Thanks for considering.                                                         
                                                                                
                                                   

Michael

-- System Information:
Debian Release: 8.7
  APT prefers oldstable
  APT policy: (500, 'oldstable')
Architecture: i386 (i686)

Kernel: Linux 3.16.0-4-686-pae (SMP w/1 CPU core)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
diff -Nru avogadro-1.2.0/debian/changelog avogadro-1.2.0/debian/changelog
--- avogadro-1.2.0/debian/changelog     2016-10-02 10:13:51.000000000 +0200
+++ avogadro-1.2.0/debian/changelog     2017-07-13 10:15:00.000000000 +0200
@@ -1,3 +1,10 @@
+avogadro (1.2.0-2+deb9u1) stretch; urgency=medium
+
+  [ Anton Gladky ]
+  * Update eigen3 patches, pull them from upstream. (Closes: #865085)
+
+ -- Michael Banck <mba...@debian.org>  Thu, 13 Jul 2017 10:15:00 +0200
+
 avogadro (1.2.0-1) unstable; urgency=medium
 
   * New upstream release.
diff -Nru avogadro-1.2.0/debian/control avogadro-1.2.0/debian/control
--- avogadro-1.2.0/debian/control       2015-09-26 21:19:33.000000000 +0200
+++ avogadro-1.2.0/debian/control       2017-07-13 10:15:00.000000000 +0200
@@ -7,7 +7,7 @@
 Build-Depends: cmake (>> 2.6.0),
                debhelper (>> 7.0.50~),
                libboost-python-dev,
-               libeigen3-dev,
+               libeigen3-dev (>> 3.3),
                libgl2ps-dev,
                libglew-dev,
                libopenbabel-dev (>> 2.2.0),
diff -Nru avogadro-1.2.0/debian/patches/eigen3_lib.patch 
avogadro-1.2.0/debian/patches/eigen3_lib.patch
--- avogadro-1.2.0/debian/patches/eigen3_lib.patch      1970-01-01 
01:00:00.000000000 +0100
+++ avogadro-1.2.0/debian/patches/eigen3_lib.patch      2016-10-02 
10:13:37.000000000 +0200
@@ -0,0 +1,162 @@
+From 2d4be7ede177a8df7340fe3b209698d591ee8a04 Mon Sep 17 00:00:00 2001
+From: Claudio Fernandes <claudiosf.clau...@gmail.com>
+Date: Mon, 16 Jan 2017 19:48:23 -0200
+Subject: [PATCH] Adapt libavogadro/python to Eigen 3.3
+
+---
+ libavogadro/src/python/camera.cpp |  2 +-
+ libavogadro/src/python/eigen.cpp  | 60 +++++++++++++++++++--------------------
+ 2 files changed, 31 insertions(+), 31 deletions(-)
+
+diff --git a/libavogadro/src/python/camera.cpp 
b/libavogadro/src/python/camera.cpp
+index 69ca87bf8..30b32af7d 100644
+--- a/libavogadro/src/python/camera.cpp
++++ b/libavogadro/src/python/camera.cpp
+@@ -10,7 +10,7 @@ using namespace Avogadro;
+ void export_Camera()
+ {
+ 
+-  const Eigen::Transform3d& (Camera::*modelview_ptr)() const = 
&Camera::modelview;
++  const Eigen::Projective3d& (Camera::*modelview_ptr)() const = 
&Camera::modelview;
+   Eigen::Vector3d (Camera::*unProject_ptr1)(const Eigen::Vector3d&) const = 
&Camera::unProject;
+   Eigen::Vector3d (Camera::*unProject_ptr2)(const QPoint&, const 
Eigen::Vector3d&) const = &Camera::unProject;
+   Eigen::Vector3d (Camera::*unProject_ptr3)(const QPoint&) const = 
&Camera::unProject;
+diff --git a/libavogadro/src/python/eigen.cpp 
b/libavogadro/src/python/eigen.cpp
+index c1faedbcc..20b4e719d 100644
+--- a/libavogadro/src/python/eigen.cpp
++++ b/libavogadro/src/python/eigen.cpp
+@@ -305,9 +305,9 @@ template <> struct ScalarTraits<double>
+     struct innerclass
+     {
+       //
+-      //  Eigen::Transform3d --> python array (4x4)
++      //  Eigen::Projective3d --> python array (4x4)
+       //
+-      static PyObject* convert(Eigen::Transform3d const &trans)
++      static PyObject* convert(Eigen::Projective3d const &trans)
+       {
+         npy_intp dims[2] = { 4, 4 };
+         PyObject *result = PyArray_SimpleNew(2, dims, PyArray_DOUBLE);
+@@ -321,9 +321,9 @@ template <> struct ScalarTraits<double>
+         return incref(result);
+       }
+       //
+-      //  Eigen::Transform3d* --> python array (4x4)
++      //  Eigen::Projective3d* --> python array (4x4)
+       //
+-      static PyObject* convert(Eigen::Transform3d *trans)
++      static PyObject* convert(Eigen::Projective3d *trans)
+       {
+         npy_intp dims[2] = { 4, 4 };
+         PyObject *result = PyArray_SimpleNew(2, dims, PyArray_DOUBLE);
+@@ -337,9 +337,9 @@ template <> struct ScalarTraits<double>
+         return incref(result);
+       }
+       //
+-      //  const Eigen::Transform3d* --> python array (4x4)
++      //  const Eigen::Projective3d* --> python array (4x4)
+       //
+-      static PyObject* convert(const Eigen::Transform3d *trans)
++      static PyObject* convert(const Eigen::Projective3d *trans)
+       {
+         npy_intp dims[2] = { 4, 4 };
+         PyObject *result = PyArray_SimpleNew(2, dims, PyArray_DOUBLE);
+@@ -358,10 +358,10 @@ template <> struct ScalarTraits<double>
+     Transform3d_to_python_array()
+     {
+       #ifndef WIN32
+-      to_python_converter<Eigen::Transform3d, innerclass>();
++      to_python_converter<Eigen::Projective3d, innerclass>();
+       #endif
+-      to_python_converter<Eigen::Transform3d*, innerclass>();
+-      to_python_converter<const Eigen::Transform3d*, innerclass>();
++      to_python_converter<Eigen::Projective3d*, innerclass>();
++      to_python_converter<const Eigen::Projective3d*, innerclass>();
+     }
+ 
+   };
+@@ -373,17 +373,17 @@ template <> struct ScalarTraits<double>
+       // Insert an rvalue from_python converter at the tail of the
+       // chain. Used for implicit conversions
+       //
+-      //  python array --> Eigen::Transform3d
++      //  python array --> Eigen::Projective3d
+       //
+       // used for:
+       //
+-      //  void function(Eigen::Transform3d vec)
+-      //  void function(Eigen::Transform3d & vec)
+-      //  void function(const Eigen::Transform3d & vec)
++      //  void function(Eigen::Projective3d vec)
++      //  void function(Eigen::Projective3d & vec)
++      //  void function(const Eigen::Projective3d & vec)
+       //
+-      converter::registry::push_back( &convertible, &construct, 
type_id<Eigen::Transform3d>() );
++      converter::registry::push_back( &convertible, &construct, 
type_id<Eigen::Projective3d>() );
+       
+-      converter::registry::insert( &convert, type_id<Eigen::Transform3d>() );
++      converter::registry::insert( &convert, type_id<Eigen::Projective3d>() );
+     }
+ 
+     static void* convert(PyObject *obj_ptr)
+@@ -401,7 +401,7 @@ template <> struct ScalarTraits<double>
+         throw_error_already_set(); // the 1D array does not have exactly 3 
elements
+ 
+       double *values = reinterpret_cast<double*>(array->data);
+-      Eigen::Transform3d *c_obj = new Eigen::Transform3d();
++      Eigen::Projective3d *c_obj = new Eigen::Projective3d();
+       double *dataPtr = c_obj->data();
+ 
+       for (int i = 0; i < 16; ++i)
+@@ -432,7 +432,7 @@ template <> struct ScalarTraits<double>
+       // I think this is a better way to get at the double array, where is 
this
+       // deleted though? Does Boost::Python do it?
+       double *values = reinterpret_cast<double*>(array->data);
+-      Eigen::Transform3d *storage = new Eigen::Transform3d();
++      Eigen::Projective3d *storage = new Eigen::Projective3d();
+       double *dataPtr = storage->data();
+ 
+       for (int i = 0; i < 16; ++i)
+@@ -467,21 +467,21 @@ class EigenUnitTestHelper
+     void set_vector3d_ptr(Eigen::Vector3d* vec)                 { m_vector3d 
= *vec; }
+     void set_const_vector3d_ptr(const Eigen::Vector3d* const vec) { 
m_vector3d = *vec; }
+ 
+-    //Eigen::Transform3d             transform3d()              { return 
m_transform3d; }
+-    //Eigen::Transform3d&            transform3d_ref()          { return 
m_transform3d; }
+-    const Eigen::Transform3d&      const_transform3d_ref()    { return 
m_transform3d; }
+-    Eigen::Transform3d*            transform3d_ptr()          { return 
&m_transform3d; }
+-    const Eigen::Transform3d*      const_transform3d_ptr()    { return 
&m_transform3d; }
+-
+-    //void set_transform3d(Eigen::Transform3d vec)                      { 
m_transform3d = vec; }
+-    //void set_transform3d_ref(Eigen::Transform3d& vec)                 { 
m_transform3d = vec; }
+-    void set_const_transform3d_ref(const Eigen::Transform3d& vec)     { 
m_transform3d = vec; }
+-    void set_transform3d_ptr(Eigen::Transform3d* vec)                 { 
m_transform3d = *vec; }
+-    void set_const_transform3d_ptr(const Eigen::Transform3d* const vec) { 
m_transform3d = *vec; }
++    //Eigen::Projective3d             transform3d()              { return 
m_transform3d; }
++    //Eigen::Projective3d&            transform3d_ref()          { return 
m_transform3d; }
++    const Eigen::Projective3d&      const_transform3d_ref()    { return 
m_transform3d; }
++    Eigen::Projective3d*            transform3d_ptr()          { return 
&m_transform3d; }
++    const Eigen::Projective3d*      const_transform3d_ptr()    { return 
&m_transform3d; }
++
++    //void set_transform3d(Eigen::Projective3d vec)                      { 
m_transform3d = vec; }
++    //void set_transform3d_ref(Eigen::Projective3d& vec)                 { 
m_transform3d = vec; }
++    void set_const_transform3d_ref(const Eigen::Projective3d& vec)     { 
m_transform3d = vec; }
++    void set_transform3d_ptr(Eigen::Projective3d* vec)                 { 
m_transform3d = *vec; }
++    void set_const_transform3d_ptr(const Eigen::Projective3d* const vec) { 
m_transform3d = *vec; }
+  
+   private:
+     Eigen::Vector3d m_vector3d;
+-    Eigen::Transform3d m_transform3d;
++    Eigen::Projective3d m_transform3d;
+ 
+ };
+ #endif
+@@ -529,7 +529,7 @@ void export_Eigen()
+   Vector3x_to_python_array<Eigen::Vector3i>();
+   Vector3x_from_python_array<Eigen::Vector3i>();
+ 
+-  // Eigen::Transform3d
++  // Eigen::Projective3d
+   Transform3d_to_python_array();
+   Transform3d_from_python_array();
+ 
diff -Nru avogadro-1.2.0/debian/patches/eigen3.patch 
avogadro-1.2.0/debian/patches/eigen3.patch
--- avogadro-1.2.0/debian/patches/eigen3.patch  2016-10-02 10:03:38.000000000 
+0200
+++ avogadro-1.2.0/debian/patches/eigen3.patch  2016-10-02 10:13:37.000000000 
+0200
@@ -1,53 +1,38 @@
-From 4ee869dddc6d8e45aa85595117a0e5732cb17818 Mon Sep 17 00:00:00 2001
-From: Geoff Hutchison <geoff.hutchi...@gmail.com>
-Date: Fri, 8 Jan 2016 23:19:33 -0500
-Subject: [PATCH] Adapt Eigen3 compatibility patch from Anton Gladky
- <gl...@debian.org>
+From 43af3c117b0b3220b15c2fe2895b94bbd83d3a60 Mon Sep 17 00:00:00 2001
+From: Claudio Fernandes <claudiosf.clau...@gmail.com>
+Date: Sun, 15 Jan 2017 21:23:39 -0200
+Subject: [PATCH] Adapt Avogadro to Eigen 3.3
 
-Patch was developed for v1.1.x, requiring some modifications.
-Currently does not apply to QTAIM - needs further const work.
-
-Change-Id: I98943d4bc67c2325e73285718c4ab7b45559673e
 ---
- CMakeLists.txt                                     | 10 +---
- avogadro/src/CMakeLists.txt                        | 11 +---
- avogadro/src/mainwindow.cpp                        |  5 +-
- avogadro/src/mainwindow.h                          |  1 -
- libavogadro/src/CMakeLists.txt                     | 11 +---
- libavogadro/src/camera.cpp                         | 10 ++--
- libavogadro/src/camera.h                           |  8 +--
- libavogadro/src/engines/wireengine.cpp             |  4 +-
- libavogadro/src/extensions/CMakeLists.txt          |  4 +-
- .../crystallography/crystallographyextension.cpp   |  3 +-
+ CMakeLists.txt                                     |  9 +------
+ avogadro/src/mainwindow.cpp                        |  5 ++--
+ libavogadro/src/camera.cpp                         | 10 ++++----
+ libavogadro/src/camera.h                           | 14 +++++------
+ libavogadro/src/engines/wireengine.cpp             |  4 ++--
+ .../crystallography/crystallographyextension.cpp   |  2 +-
  .../crystallography/ui/ceviewoptionswidget.cpp     |  2 +-
- .../src/extensions/orca/orcaanalysedialog.cpp      |  2 -
- .../src/extensions/orca/orcainputdialog.cpp        |  3 +-
+ .../src/extensions/orca/orcaanalysedialog.cpp      |  1 -
+ .../src/extensions/orca/orcainputdialog.cpp        |  1 -
  .../src/extensions/qtaim/qtaimmathutilities.cpp    |  1 +
- .../src/extensions/qtaim/qtaimwavefunction.h       |  6 +--
- .../extensions/surfaces/openqube/CMakeLists.txt    | 12 ++---
+ .../qtaim/qtaimwavefunctionevaluator.cpp           | 28 +++++++++++-----------
  .../extensions/surfaces/openqube/gamessukout.cpp   |  1 +
- .../extensions/surfaces/openqube/gaussianset.cpp   |  1 +
- .../src/extensions/surfaces/openqube/slaterset.cpp |  6 ++-
- libavogadro/src/glpainter_p.cpp                    | 14 +++---
- libavogadro/src/glwidget.cpp                       |  4 +-
- libavogadro/src/molecule.cpp                       | 26 +++++++++-
+ .../src/extensions/surfaces/openqube/slaterset.cpp |  6 +++--
+ libavogadro/src/glpainter_p.cpp                    | 14 +++++------
+ libavogadro/src/glwidget.cpp                       |  4 ++--
+ libavogadro/src/molecule.cpp                       | 26 ++++++++++++++++++--
  libavogadro/src/navigate.cpp                       |  2 +-
- libavogadro/src/primitive.h                        |  1 +
- libavogadro/src/python/camera.cpp                  |  2 +-
- libavogadro/src/python/eigen.cpp                   | 58 +++++++++++-----------
- libavogadro/src/tools/bondcentrictool.cpp          | 28 +++++------
- libavogadro/src/tools/manipulatetool.cpp           | 18 +++----
- libavogadro/src/tools/navigatetool.cpp             |  2 +-
- libavogadro/src/tools/skeletontree.cpp             | 11 ++--
+ libavogadro/src/tools/bondcentrictool.cpp          | 28 +++++++++++-----------
+ libavogadro/src/tools/manipulatetool.cpp           | 17 +++++++------
+ libavogadro/src/tools/navigatetool.cpp             |  3 ++-
+ libavogadro/src/tools/skeletontree.cpp             |  7 +++---
  libavogadro/src/tools/skeletontree.h               |  2 +-
- libavogadro/tests/CMakeLists.txt                   |  2 +-
- 32 files changed, 132 insertions(+), 139 deletions(-)
+ 22 files changed, 102 insertions(+), 85 deletions(-)
 
-Index: avogadro-1.2.0/CMakeLists.txt
-===================================================================
---- avogadro-1.2.0.orig/CMakeLists.txt
-+++ avogadro-1.2.0/CMakeLists.txt
-@@ -231,15 +231,7 @@ if(NOT Linguist_FOUND)
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 8d2958739..2cabf8d52 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -231,14 +231,7 @@ if(NOT Linguist_FOUND)
    message(WARNING " Qt4 Linguist not found, please install it if you want 
Avogadro translations")
  endif()
  
@@ -59,40 +44,14 @@
 -# Use Stage10 Eigen3 support
 -   set (EIGEN2_SUPPORT_STAGE10_FULL_EIGEN2_API TRUE)
 -endif()
--
 +find_package(Eigen3 REQUIRED) # find and setup Eigen3 if available
+ 
  find_package(ZLIB REQUIRED)
  find_package(OpenBabel2 REQUIRED) # find and setup OpenBabel
- 
-Index: avogadro-1.2.0/avogadro/src/CMakeLists.txt
-===================================================================
---- avogadro-1.2.0.orig/avogadro/src/CMakeLists.txt
-+++ avogadro-1.2.0/avogadro/src/CMakeLists.txt
-@@ -19,19 +19,10 @@ set_directory_properties(PROPERTIES INCL
- include_directories(
-   ${CMAKE_CURRENT_SOURCE_DIR}
-   ${OPENBABEL2_INCLUDE_DIR}
-+      ${EIGEN3_INCLUDE_DIR}
-   ${CMAKE_CURRENT_BINARY_DIR}
- )
- 
--if(EIGEN3_FOUND)
--      include_directories(
--              ${EIGEN3_INCLUDE_DIR}
--      )
--elseif(EIGEN2_FOUND)
--      include_directories(
--              ${EIGEN2_INCLUDE_DIR}
--      )
--endif(EIGEN3_FOUND)
--
- if(GLEW_FOUND)
-   include_directories(${GLEW_INCLUDE_DIR})
- endif()
-Index: avogadro-1.2.0/avogadro/src/mainwindow.cpp
-===================================================================
---- avogadro-1.2.0.orig/avogadro/src/mainwindow.cpp
-+++ avogadro-1.2.0/avogadro/src/mainwindow.cpp
+diff --git a/avogadro/src/mainwindow.cpp b/avogadro/src/mainwindow.cpp
+index 2a5fd0ff5..f34a563a9 100644
+--- a/avogadro/src/mainwindow.cpp
++++ b/avogadro/src/mainwindow.cpp
 @@ -115,7 +115,6 @@
  #include <QDebug>
  
@@ -101,7 +60,7 @@
  #define USEQUAT
  // This is a "hidden" exported Qt function on the Mac for Qt-4.x.
  #ifdef Q_WS_MAC
-@@ -2775,7 +2774,7 @@ protected:
+@@ -2775,7 +2774,7 @@ class XMLEventSource : public pqEventSource
      linearGoal.row(1) = linearGoal.row(2).cross(linearGoal.row(0));
  
      // calculate the translation matrix
@@ -110,7 +69,7 @@
  
      goal.pretranslate(- 3.0 * (d->glWidget->radius() + CAMERA_NEAR_DISTANCE) 
* Vector3d::UnitZ());
  
-@@ -2840,7 +2839,7 @@ protected:
+@@ -2840,7 +2839,7 @@ class XMLEventSource : public pqEventSource
      Matrix3d linearGoal = Matrix3d::Identity();
  
      // calculate the translation matrix
@@ -119,46 +78,10 @@
  
      goal.pretranslate(- 3.0 * (d->glWidget->radius() + CAMERA_NEAR_DISTANCE) 
* Vector3d::UnitZ());
  
-Index: avogadro-1.2.0/avogadro/src/mainwindow.h
-===================================================================
---- avogadro-1.2.0.orig/avogadro/src/mainwindow.h
-+++ avogadro-1.2.0/avogadro/src/mainwindow.h
-@@ -26,7 +26,6 @@
- 
- #include "config.h"
- 
--#include <Eigen/Geometry>
- #include "ui_mainwindow.h"
- #include "flattabwidget.h"
- 
-Index: avogadro-1.2.0/libavogadro/src/CMakeLists.txt
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/CMakeLists.txt
-+++ avogadro-1.2.0/libavogadro/src/CMakeLists.txt
-@@ -12,18 +12,9 @@ set_directory_properties(PROPERTIES INCL
- include_directories(
-   ${CMAKE_CURRENT_BINARY_DIR}
-   ${OPENBABEL2_INCLUDE_DIR}
-+      ${EIGEN3_INCLUDE_DIR}
- )
- 
--if(EIGEN3_FOUND)
--      include_directories(
--              ${EIGEN3_INCLUDE_DIR}
--      )
--elseif(EIGEN2_FOUND)
--      include_directories(
--              ${EIGEN2_INCLUDE_DIR}
--      )
--endif(EIGEN3_FOUND)
--
- # I think this is necessary now in order to tell the linker where openbabel is
- link_directories(${OPENBABEL2_LIBRARY_DIRS})
- 
-Index: avogadro-1.2.0/libavogadro/src/camera.cpp
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/camera.cpp
-+++ avogadro-1.2.0/libavogadro/src/camera.cpp
+diff --git a/libavogadro/src/camera.cpp b/libavogadro/src/camera.cpp
+index 24128455b..fe9a07bd4 100644
+--- a/libavogadro/src/camera.cpp
++++ b/libavogadro/src/camera.cpp
 @@ -47,7 +47,7 @@ namespace Avogadro
  
        CameraPrivate() {};
@@ -173,7 +96,7 @@
    double Camera::distance(const Eigen::Vector3d & point) const
    {
 -    return ( d->modelview * point ).norm();
-+    return ( (d->modelview).linear() * point ).norm();
++    return ( d->modelview * point.homogeneous() ).head<3>().norm();
    }
  
 -  void Camera::setModelview(const Eigen::Transform3d &matrix)
@@ -193,25 +116,29 @@
    {
      return d->modelview;
    }
-Index: avogadro-1.2.0/libavogadro/src/camera.h
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/camera.h
-+++ avogadro-1.2.0/libavogadro/src/camera.h
-@@ -102,15 +102,15 @@ namespace Avogadro {
+diff --git a/libavogadro/src/camera.h b/libavogadro/src/camera.h
+index 89b4496ab..6b9abe00e 100644
+--- a/libavogadro/src/camera.h
++++ b/libavogadro/src/camera.h
+@@ -101,16 +101,16 @@ namespace Avogadro {
+       double angleOfViewY() const;
        /** Sets 4x4 "modelview" matrix representing the camera orientation and 
position.
          * @param matrix the matrix to copy from
-         * @sa Eigen::Transform3d & modelview(), applyModelview() */
+-        * @sa Eigen::Transform3d & modelview(), applyModelview() */
 -      void setModelview(const Eigen::Transform3d &matrix);
++        * @sa Eigen::Projective3d & modelview(), applyModelview() */
 +      void setModelview(const Eigen::Projective3d &matrix);
        /** @return a constant reference to the 4x4 "modelview" matrix 
representing
          *         the camera orientation and position
-         * @sa setModelview(), Eigen::Transform3d & modelview() */
+-        * @sa setModelview(), Eigen::Transform3d & modelview() */
 -      const Eigen::Transform3d & modelview() const;
++        * @sa setModelview(), Eigen::Projective3d & modelview() */
 +      const Eigen::Projective3d & modelview() const;
        /** @return a non-constant reference to the 4x4 "modelview" matrix 
representing
          *         the camera orientation and position
-         * @sa setModelview(), const Eigen::Transform3d & modelview() const */
+-        * @sa setModelview(), const Eigen::Transform3d & modelview() const */
 -      Eigen::Transform3d & modelview();
++        * @sa setModelview(), const Eigen::Projective3d & modelview() const */
 +      Eigen::Projective3d & modelview();
        /** Calls gluPerspective() or glOrtho() with parameters automatically 
chosen
          * for rendering the GLWidget's molecule with this camera. Should be 
called
@@ -225,16 +152,16 @@
        }
    };
  
-Index: avogadro-1.2.0/libavogadro/src/engines/wireengine.cpp
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/engines/wireengine.cpp
-+++ avogadro-1.2.0/libavogadro/src/engines/wireengine.cpp
+diff --git a/libavogadro/src/engines/wireengine.cpp 
b/libavogadro/src/engines/wireengine.cpp
+index c823d4ed7..1f39701d8 100644
+--- a/libavogadro/src/engines/wireengine.cpp
++++ b/libavogadro/src/engines/wireengine.cpp
 @@ -109,7 +109,7 @@ namespace Avogadro {
      const Camera *camera = pd->camera();
  
      // perform a rough form of frustum culling
 -    Eigen::Vector3d transformedPos = pd->camera()->modelview() * v;
-+    Eigen::Vector3d transformedPos = (pd->camera()->modelview()).linear() * v;
++    Eigen::Vector3d transformedPos = (pd->camera()->modelview() * 
v.homogeneous()).head<3>();
      double dot = transformedPos.z() / transformedPos.norm();
      if(dot > -0.8)
        return true;
@@ -243,28 +170,27 @@
  
      // perform a rough form of frustum culling
 -    Eigen::Vector3d transformedEnd1 = pd->camera()->modelview() * v1;
-+    Eigen::Vector3d transformedEnd1 = (pd->camera()->modelview()).linear() * 
v1;
++    Eigen::Vector3d transformedEnd1 = (pd->camera()->modelview() * 
v1.homogeneous()).head<3>();
      double dot = transformedEnd1.z() / transformedEnd1.norm();
      if(dot > -0.8)
        return true; // i.e., don't bother rendering
-Index: 
avogadro-1.2.0/libavogadro/src/extensions/crystallography/crystallographyextension.cpp
-===================================================================
---- 
avogadro-1.2.0.orig/libavogadro/src/extensions/crystallography/crystallographyextension.cpp
-+++ 
avogadro-1.2.0/libavogadro/src/extensions/crystallography/crystallographyextension.cpp
-@@ -1989,7 +1989,8 @@ namespace Avogadro
+diff --git 
a/libavogadro/src/extensions/crystallography/crystallographyextension.cpp 
b/libavogadro/src/extensions/crystallography/crystallographyextension.cpp
+index fb871f976..1fef13417 100644
+--- a/libavogadro/src/extensions/crystallography/crystallographyextension.cpp
++++ b/libavogadro/src/extensions/crystallography/crystallographyextension.cpp
+@@ -1989,7 +1989,7 @@ namespace Avogadro
      // fix coordinates
      // Apply COB matrix:
      Eigen::Matrix3d invCob;
 -    cob.computeInverse(&invCob);
-+    bool tInvert;
-+    cob.computeInverseWithCheck(invCob,tInvert);
++    invCob = cob.inverse();
      for (QList<Eigen::Vector3d>::iterator
             it = fcoords.begin(),
             it_end = fcoords.end();
-Index: 
avogadro-1.2.0/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.cpp
-===================================================================
---- 
avogadro-1.2.0.orig/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.cpp
-+++ 
avogadro-1.2.0/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.cpp
+diff --git 
a/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.cpp 
b/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.cpp
+index 3f3cf4436..fe56919fc 100644
+--- a/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.cpp
++++ b/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.cpp
 @@ -139,7 +139,7 @@ namespace Avogadro
    {
      // View into a Miller plane
@@ -274,10 +200,10 @@
      modelView.setIdentity();
  
      // OK, so we want to rotate to look along the normal at the plane
-Index: avogadro-1.2.0/libavogadro/src/extensions/orca/orcaanalysedialog.cpp
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/extensions/orca/orcaanalysedialog.cpp
-+++ avogadro-1.2.0/libavogadro/src/extensions/orca/orcaanalysedialog.cpp
+diff --git a/libavogadro/src/extensions/orca/orcaanalysedialog.cpp 
b/libavogadro/src/extensions/orca/orcaanalysedialog.cpp
+index 8a0657872..ceee90805 100644
+--- a/libavogadro/src/extensions/orca/orcaanalysedialog.cpp
++++ b/libavogadro/src/extensions/orca/orcaanalysedialog.cpp
 @@ -41,7 +41,6 @@
  #include <openbabel/mol.h>
  
@@ -286,15 +212,10 @@
  
  #include <vector>
  
-@@ -1272,4 +1271,3 @@ void OrcaAnalyseDialog::writeSettings(QS
- // missing vtables with gcc, check that you haven't forgotten one of
- // these:
- //#include "orcaanalysedialog.moc"
--
-Index: avogadro-1.2.0/libavogadro/src/extensions/orca/orcainputdialog.cpp
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/extensions/orca/orcainputdialog.cpp
-+++ avogadro-1.2.0/libavogadro/src/extensions/orca/orcainputdialog.cpp
+diff --git a/libavogadro/src/extensions/orca/orcainputdialog.cpp 
b/libavogadro/src/extensions/orca/orcainputdialog.cpp
+index 9ed1bde24..3f8c8bb03 100644
+--- a/libavogadro/src/extensions/orca/orcainputdialog.cpp
++++ b/libavogadro/src/extensions/orca/orcainputdialog.cpp
 @@ -33,7 +33,6 @@
  #include <openbabel/mol.h>
  
@@ -303,19 +224,10 @@
  
  #include <vector>
  
-@@ -123,7 +122,7 @@ OrcaInputDialog::OrcaInputDialog(QWidget
-   OrcaInputDialog::~OrcaInputDialog()
-   {
-       QSettings settings;
--      writeSettings(settings);   
-+      writeSettings(settings);
-       delete basicData;
-       delete basisData;
-       delete controlData;
-Index: avogadro-1.2.0/libavogadro/src/extensions/qtaim/qtaimmathutilities.cpp
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/extensions/qtaim/qtaimmathutilities.cpp
-+++ avogadro-1.2.0/libavogadro/src/extensions/qtaim/qtaimmathutilities.cpp
+diff --git a/libavogadro/src/extensions/qtaim/qtaimmathutilities.cpp 
b/libavogadro/src/extensions/qtaim/qtaimmathutilities.cpp
+index 93e7270d1..743462c02 100644
+--- a/libavogadro/src/extensions/qtaim/qtaimmathutilities.cpp
++++ b/libavogadro/src/extensions/qtaim/qtaimmathutilities.cpp
 @@ -28,6 +28,7 @@
  
  #include <cmath>
@@ -324,71 +236,62 @@
  
  namespace Avogadro {
    namespace QTAIMMathUtilities {
-Index: avogadro-1.2.0/libavogadro/src/extensions/qtaim/qtaimwavefunction.h
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/extensions/qtaim/qtaimwavefunction.h
-+++ avogadro-1.2.0/libavogadro/src/extensions/qtaim/qtaimwavefunction.h
-@@ -115,9 +115,9 @@ namespace Avogadro
-     qint64 numberOfGaussianPrimitives() const { return 
m_numberOfGaussianPrimitives; }
-     qint64 numberOfNuclei() const { return m_numberOfNuclei; }
- 
--    const qreal* xNuclearCoordinates() const { return 
m_xNuclearCoordinates.constData(); }
--    const qreal* yNuclearCoordinates() const { return 
m_yNuclearCoordinates.constData(); }
--    const qreal* zNuclearCoordinates() const { return 
m_zNuclearCoordinates.constData(); }
-+    qreal* xNuclearCoordinates()  { return m_xNuclearCoordinates.data(); }
-+    qreal* yNuclearCoordinates()  { return m_yNuclearCoordinates.data(); }
-+    qreal* zNuclearCoordinates()  { return m_zNuclearCoordinates.data(); }
-     qreal xNuclearCoordinate( qint64 i ) const { return 
m_xNuclearCoordinates.at(i); }
-     qreal yNuclearCoordinate( qint64 i ) const { return 
m_yNuclearCoordinates.at(i); }
-     qreal zNuclearCoordinate( qint64 i ) const { return 
m_zNuclearCoordinates.at(i); }
-Index: 
avogadro-1.2.0/libavogadro/src/extensions/surfaces/openqube/CMakeLists.txt
-===================================================================
---- 
avogadro-1.2.0.orig/libavogadro/src/extensions/surfaces/openqube/CMakeLists.txt
-+++ avogadro-1.2.0/libavogadro/src/extensions/surfaces/openqube/CMakeLists.txt
-@@ -1,13 +1,7 @@
- find_package(Qt4 4.6 REQUIRED)
--find_package(Eigen3)
--if(NOT EIGEN3_FOUND)
--  message(STATUS "Cannot find Eigen3, trying Eigen2")
--  find_package(Eigen2 REQUIRED)
--else()
--  set (EIGEN2_SUPPORT_STAGE10_FULL_EIGEN2_API TRUE)
--endif()
-+find_package(Eigen3 REQUIRED)
- 
--include_directories(${QT_INCLUDE_DIR} ${EIGEN2_INCLUDE_DIR})
-+include_directories(${QT_INCLUDE_DIR} ${EIGEN3_INCLUDE_DIR})
- 
- # Headers for our public API
- set(openqube_HDRS
-Index: 
avogadro-1.2.0/libavogadro/src/extensions/surfaces/openqube/gamessukout.cpp
-===================================================================
---- 
avogadro-1.2.0.orig/libavogadro/src/extensions/surfaces/openqube/gamessukout.cpp
-+++ avogadro-1.2.0/libavogadro/src/extensions/surfaces/openqube/gamessukout.cpp
-@@ -15,6 +15,7 @@
- 
******************************************************************************/
- 
- #include "gamessukout.h"
-+#include <iostream>
- 
+diff --git a/libavogadro/src/extensions/qtaim/qtaimwavefunctionevaluator.cpp 
b/libavogadro/src/extensions/qtaim/qtaimwavefunctionevaluator.cpp
+index d60a4d5d4..711468400 100644
+--- a/libavogadro/src/extensions/qtaim/qtaimwavefunctionevaluator.cpp
++++ b/libavogadro/src/extensions/qtaim/qtaimwavefunctionevaluator.cpp
+@@ -35,21 +35,21 @@ namespace Avogadro
+     m_nprim=wfn.numberOfGaussianPrimitives();
+     m_nnuc=wfn.numberOfNuclei();
+ 
+-    m_nucxcoord=Map<Matrix<qreal,Dynamic,1> 
>(wfn.xNuclearCoordinates(),m_nnuc);
+-    m_nucycoord=Map<Matrix<qreal,Dynamic,1> 
>(wfn.yNuclearCoordinates(),m_nnuc);
+-    m_nuczcoord=Map<Matrix<qreal,Dynamic,1> 
>(wfn.zNuclearCoordinates(),m_nnuc);
+-    m_nucz=Map<Matrix<qint64,Dynamic,1> >(wfn.nuclearCharges(),m_nnuc);
+-    m_X0=Map<Matrix<qreal,Dynamic,1> 
>(wfn.xGaussianPrimitiveCenterCoordinates(),m_nprim,1);
+-    m_Y0=Map<Matrix<qreal,Dynamic,1> 
>(wfn.yGaussianPrimitiveCenterCoordinates(),m_nprim,1);
+-    m_Z0=Map<Matrix<qreal,Dynamic,1> 
>(wfn.zGaussianPrimitiveCenterCoordinates(),m_nprim,1);
+-    m_xamom=Map<Matrix<qint64,Dynamic,1> 
>(wfn.xGaussianPrimitiveAngularMomenta(),m_nprim,1);
+-    m_yamom=Map<Matrix<qint64,Dynamic,1> 
>(wfn.yGaussianPrimitiveAngularMomenta(),m_nprim,1);
+-    m_zamom=Map<Matrix<qint64,Dynamic,1> 
>(wfn.zGaussianPrimitiveAngularMomenta(),m_nprim,1);
+-    m_alpha=Map<Matrix<qreal,Dynamic,1> 
>(wfn.gaussianPrimitiveExponentCoefficients(),m_nprim,1);
++    m_nucxcoord=Map<Matrix<qreal,Dynamic,1> 
>(const_cast<qreal*>(wfn.xNuclearCoordinates()),m_nnuc);
++    m_nucycoord=Map<Matrix<qreal,Dynamic,1> 
>(const_cast<qreal*>(wfn.yNuclearCoordinates()),m_nnuc);
++    m_nuczcoord=Map<Matrix<qreal,Dynamic,1> 
>(const_cast<qreal*>(wfn.zNuclearCoordinates()),m_nnuc);
++    m_nucz=Map<Matrix<qint64,Dynamic,1> 
>(const_cast<qint64*>(wfn.nuclearCharges()),m_nnuc);
++    m_X0=Map<Matrix<qreal,Dynamic,1> 
>(const_cast<qreal*>(wfn.xGaussianPrimitiveCenterCoordinates()),m_nprim,1);
++    m_Y0=Map<Matrix<qreal,Dynamic,1> 
>(const_cast<qreal*>(wfn.yGaussianPrimitiveCenterCoordinates()),m_nprim,1);
++    m_Z0=Map<Matrix<qreal,Dynamic,1> 
>(const_cast<qreal*>(wfn.zGaussianPrimitiveCenterCoordinates()),m_nprim,1);
++    m_xamom=Map<Matrix<qint64,Dynamic,1> 
>(const_cast<qint64*>(wfn.xGaussianPrimitiveAngularMomenta()),m_nprim,1);
++    m_yamom=Map<Matrix<qint64,Dynamic,1> 
>(const_cast<qint64*>(wfn.yGaussianPrimitiveAngularMomenta()),m_nprim,1);
++    m_zamom=Map<Matrix<qint64,Dynamic,1> 
>(const_cast<qint64*>(wfn.zGaussianPrimitiveAngularMomenta()),m_nprim,1);
++    m_alpha=Map<Matrix<qreal,Dynamic,1> 
>(const_cast<qreal*>(wfn.gaussianPrimitiveExponentCoefficients()),m_nprim,1);
+     // TODO Implement screening for unoccupied molecular orbitals.
+-    m_occno=Map<Matrix<qreal,Dynamic,1> 
>(wfn.molecularOrbitalOccupationNumbers(),m_nmo,1);
+-    m_orbe=Map<Matrix<qreal,Dynamic,1> 
>(wfn.molecularOrbitalEigenvalues(),m_nmo,1);
+-    m_coef=Map<Matrix<qreal,Dynamic,Dynamic,RowMajor> 
>(wfn.molecularOrbitalCoefficients(),m_nmo,m_nprim);
++    m_occno=Map<Matrix<qreal,Dynamic,1> 
>(const_cast<qreal*>(wfn.molecularOrbitalOccupationNumbers()),m_nmo,1);
++    m_orbe=Map<Matrix<qreal,Dynamic,1> 
>(const_cast<qreal*>(wfn.molecularOrbitalEigenvalues()),m_nmo,1);
++    m_coef=Map<Matrix<qreal,Dynamic,Dynamic,RowMajor> 
>(const_cast<qreal*>(wfn.molecularOrbitalCoefficients()),m_nmo,m_nprim);
+     m_totalEnergy=wfn.totalEnergy();
+     m_virialRatio=wfn.virialRatio();
+ 
+diff --git a/libavogadro/src/extensions/surfaces/openqube/gamessukout.cpp 
b/libavogadro/src/extensions/surfaces/openqube/gamessukout.cpp
+index 7316c2e1c..d88ffdfc5 100644
+--- a/libavogadro/src/extensions/surfaces/openqube/gamessukout.cpp
++++ b/libavogadro/src/extensions/surfaces/openqube/gamessukout.cpp
+@@ -19,6 +19,7 @@
  using Eigen::Vector3d;
  using std::vector;
-Index: 
avogadro-1.2.0/libavogadro/src/extensions/surfaces/openqube/gaussianset.cpp
-===================================================================
---- 
avogadro-1.2.0.orig/libavogadro/src/extensions/surfaces/openqube/gaussianset.cpp
-+++ avogadro-1.2.0/libavogadro/src/extensions/surfaces/openqube/gaussianset.cpp
-@@ -17,6 +17,7 @@
  
- 
******************************************************************************/
- #include "gaussianset.h"
 +#include <iostream>
+ #include <fstream>
  
- #ifdef WIN32
- #define _USE_MATH_DEFINES
-Index: 
avogadro-1.2.0/libavogadro/src/extensions/surfaces/openqube/slaterset.cpp
-===================================================================
---- 
avogadro-1.2.0.orig/libavogadro/src/extensions/surfaces/openqube/slaterset.cpp
-+++ avogadro-1.2.0/libavogadro/src/extensions/surfaces/openqube/slaterset.cpp
+ namespace OpenQube
+diff --git a/libavogadro/src/extensions/surfaces/openqube/slaterset.cpp 
b/libavogadro/src/extensions/surfaces/openqube/slaterset.cpp
+index b0502dd25..4a27733c9 100644
+--- a/libavogadro/src/extensions/surfaces/openqube/slaterset.cpp
++++ b/libavogadro/src/extensions/surfaces/openqube/slaterset.cpp
 @@ -25,9 +25,9 @@
  
  #include "cube.h"
@@ -405,31 +308,31 @@
    SelfAdjointEigenSolver<MatrixXd> s(m_overlap);
    MatrixXd p = s.eigenvectors();
 -  MatrixXd m = p * 
s.eigenvalues().cwise().inverse().cwise().sqrt().asDiagonal() * p.inverse();
-+  //MatrixXd m = p * 
s.eigenvalues().cwise().inverse().cwise().sqrt().asDiagonal() * p.inverse();
++  // TODO check if this is correct
 +  MatrixXd m1 = (s.eigenvalues().array().inverse().sqrt());
 +  MatrixXd m = p.array()*(m1.diagonal().array())*p.inverse().array();
    m_normalized = m * m_eigenVectors;
  
    if (!(m_overlap*m*m).isIdentity())
-Index: avogadro-1.2.0/libavogadro/src/glpainter_p.cpp
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/glpainter_p.cpp
-+++ avogadro-1.2.0/libavogadro/src/glpainter_p.cpp
+diff --git a/libavogadro/src/glpainter_p.cpp b/libavogadro/src/glpainter_p.cpp
+index b301d4f84..9c0b00ab7 100644
+--- a/libavogadro/src/glpainter_p.cpp
++++ b/libavogadro/src/glpainter_p.cpp
 @@ -789,13 +789,13 @@ namespace Avogadro
          } else {
            points[theta-1] = Eigen::AngleAxisd(theta * (M_PI / 180.0) / 2, n) 
* u;
          }
 -        points[theta-1] = d->widget->camera()->modelview() * (origin + 
points[theta-1]);
-+        points[theta-1] = (d->widget->camera()->modelview()).linear() * 
(origin + points[theta-1]);
++        points[theta-1] = (d->widget->camera()->modelview() * (origin + 
points[theta-1]).homogeneous()).head<3>();
        }
  
      // Get vectors representing the points' positions in terms of the model 
view.
 -    Eigen::Vector3d _origin = d->widget->camera()->modelview() * origin;
 -    Eigen::Vector3d _direction1 = d->widget->camera()->modelview() * 
(origin+u);
 -    Eigen::Vector3d _direction2 = d->widget->camera()->modelview() * 
(origin+v);
-+    Eigen::Vector3d _origin = (d->widget->camera()->modelview()).linear() * 
origin;
-+    Eigen::Vector3d _direction1 = (d->widget->camera()->modelview()).linear() 
* (origin+u);
-+    Eigen::Vector3d _direction2 = (d->widget->camera()->modelview()).linear() 
* (origin+v);
++    Eigen::Vector3d _origin = (d->widget->camera()->modelview() * 
origin.homogeneous()).head<3>();
++    Eigen::Vector3d _direction1 = (d->widget->camera()->modelview() * 
(origin+u).homogeneous()).head<3>();
++    Eigen::Vector3d _direction2 = (d->widget->camera()->modelview() * 
(origin+v).homogeneous()).head<3>();
  
      glPushAttrib(GL_ALL_ATTRIB_BITS);
      glPushMatrix();
@@ -438,27 +341,27 @@
            points[theta-1] = Eigen::AngleAxisd(theta * (M_PI / 180.0) / 2, n) 
* u;
          }
 -        points[theta-1] = d->widget->camera()->modelview() * (origin + 
points[theta-1]);
-+        points[theta-1] = (d->widget->camera()->modelview()).linear() * 
(origin + points[theta-1]);
++        points[theta-1] = (d->widget->camera()->modelview() * (origin + 
points[theta-1]).homogeneous()).head<3>();
        }
  
      // Get vectors representing the points' positions in terms of the model 
view.
 -    Eigen::Vector3d _direction1 = d->widget->camera()->modelview() * (origin 
+ u);
 -    Eigen::Vector3d _direction2 = d->widget->camera()->modelview() * (origin 
+ v);
-+    Eigen::Vector3d _direction1 = (d->widget->camera()->modelview()).linear() 
* (origin + u);
-+    Eigen::Vector3d _direction2 = (d->widget->camera()->modelview()).linear() 
* (origin + v);
++    Eigen::Vector3d _direction1 = (d->widget->camera()->modelview() * (origin 
+ u).homogeneous()).head<3>();
++    Eigen::Vector3d _direction2 = (d->widget->camera()->modelview() * (origin 
+ v).homogeneous()).head<3>();
  
      glPushAttrib(GL_ALL_ATTRIB_BITS);
      glPushMatrix();
-Index: avogadro-1.2.0/libavogadro/src/glwidget.cpp
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/glwidget.cpp
-+++ avogadro-1.2.0/libavogadro/src/glwidget.cpp
+diff --git a/libavogadro/src/glwidget.cpp b/libavogadro/src/glwidget.cpp
+index 7a0a029d6..3cbe31f8b 100644
+--- a/libavogadro/src/glwidget.cpp
++++ b/libavogadro/src/glwidget.cpp
 @@ -765,7 +765,7 @@ namespace Avogadro {
        GLfloat fogColor[4]= {static_cast<GLfloat>(d->background.redF()), 
static_cast<GLfloat>(d->background.greenF()),
                              static_cast<GLfloat>(d->background.blueF()), 
static_cast<GLfloat>(d->background.alphaF())};
        glFogfv(GL_FOG_COLOR, fogColor);
 -      Vector3d distance = camera()->modelview() * d->center;
-+      Vector3d distance = (camera()->modelview()).linear() * d->center;
++      Vector3d distance = (camera()->modelview() * 
d->center.homogeneous()).head<3>();
        double distanceToCenter = distance.norm();
        glFogf(GL_FOG_DENSITY, 1.0);
        glHint(GL_FOG_HINT, GL_NICEST);
@@ -471,28 +374,27 @@
          y += d->pd->painter()->drawText
              (x, y, tr("ModelView row 1: %L1 %L2 %L3 %L4")
               .arg(modelview(0, 0), 6, 'f', 2, ' ')
-Index: avogadro-1.2.0/libavogadro/src/molecule.cpp
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/molecule.cpp
-+++ avogadro-1.2.0/libavogadro/src/molecule.cpp
+diff --git a/libavogadro/src/molecule.cpp b/libavogadro/src/molecule.cpp
+index c544185e2..0bad6f9e6 100644
+--- a/libavogadro/src/molecule.cpp
++++ b/libavogadro/src/molecule.cpp
 @@ -38,7 +38,7 @@
  #include "zmatrix.h"
  
  #include <Eigen/Geometry>
 -#include <Eigen/LeastSquares>
-+#include <Eigen/Eigenvalues> 
++#include <Eigen/Eigenvalues>
  
  #include <vector>
  
-@@ -1907,7 +1907,29 @@ namespace Avogadro{
+@@ -1908,7 +1908,29 @@ namespace Avogadro{
          }
          d->center /= static_cast<double>(nAtoms);
          Eigen::Hyperplane<double, 3> planeCoeffs;
 -        Eigen::fitHyperplane(numAtoms(), atomPositions, &planeCoeffs);
-+        
-+        
 +        //Eigen::fitHyperplane(numAtoms(), atomPositions, &planeCoeffs);
-+        
++
++        // TODO check if this is OK
 +        /************************/
 +        typedef Eigen::Matrix<double,3,3> CovMatrixType;
 +        typedef Eigen::Vector3d VectorType;
@@ -511,194 +413,36 @@
 +        Eigen::SelfAdjointEigenSolver<CovMatrixType> eig(covMat);
 +        planeCoeffs.normal() = eig.eigenvectors().col(0);
 +        /************************/
-+        
++
++
          delete[] atomPositions;
          d->normalVector = planeCoeffs.normal();
        }
-Index: avogadro-1.2.0/libavogadro/src/navigate.cpp
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/navigate.cpp
-+++ avogadro-1.2.0/libavogadro/src/navigate.cpp
+diff --git a/libavogadro/src/navigate.cpp b/libavogadro/src/navigate.cpp
+index f31d4cddb..ccb17081d 100644
+--- a/libavogadro/src/navigate.cpp
++++ b/libavogadro/src/navigate.cpp
 @@ -40,7 +40,7 @@ namespace Avogadro {
    void Navigate::zoom(GLWidget *widget, const Eigen::Vector3d &goal,
                        double delta)
    {
 -    Vector3d transformedGoal = widget->camera()->modelview() * goal;
-+    Vector3d transformedGoal = (widget->camera()->modelview()).linear() * 
goal;
++    Vector3d transformedGoal = (widget->camera()->modelview() * 
goal.homogeneous()).head<3>();
      double distanceToGoal = transformedGoal.norm();
  
      double t = ZOOM_SPEED * delta;
-Index: avogadro-1.2.0/libavogadro/src/primitive.h
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/primitive.h
-+++ avogadro-1.2.0/libavogadro/src/primitive.h
-@@ -29,6 +29,7 @@
- #include "config.h"
- 
- #include "global.h"
-+#include "Eigen/Core"
- 
- #include <QObject>
- #include <QMetaType>
-Index: avogadro-1.2.0/libavogadro/src/python/camera.cpp
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/python/camera.cpp
-+++ avogadro-1.2.0/libavogadro/src/python/camera.cpp
-@@ -10,7 +10,7 @@ using namespace Avogadro;
- void export_Camera()
- {
- 
--  const Eigen::Transform3d& (Camera::*modelview_ptr)() const = 
&Camera::modelview;
-+  const Eigen::Projective3d& (Camera::*modelview_ptr)() const = 
&Camera::modelview;
-   Eigen::Vector3d (Camera::*unProject_ptr1)(const Eigen::Vector3d&) const = 
&Camera::unProject;
-   Eigen::Vector3d (Camera::*unProject_ptr2)(const QPoint&, const 
Eigen::Vector3d&) const = &Camera::unProject;
-   Eigen::Vector3d (Camera::*unProject_ptr3)(const QPoint&) const = 
&Camera::unProject;
-Index: avogadro-1.2.0/libavogadro/src/python/eigen.cpp
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/python/eigen.cpp
-+++ avogadro-1.2.0/libavogadro/src/python/eigen.cpp
-@@ -305,9 +305,9 @@ template <> struct ScalarTraits<double>
-     struct innerclass
-     {
-       //
--      //  Eigen::Transform3d --> python array (4x4)
-+      //  Eigen::Projective3d --> python array (4x4)
-       //
--      static PyObject* convert(Eigen::Transform3d const &trans)
-+      static PyObject* convert(Eigen::Projective3d const &trans)
-       {
-         npy_intp dims[2] = { 4, 4 };
-         PyObject *result = PyArray_SimpleNew(2, dims, PyArray_DOUBLE);
-@@ -321,9 +321,9 @@ template <> struct ScalarTraits<double>
-         return incref(result);
-       }
-       //
--      //  Eigen::Transform3d* --> python array (4x4)
-+      //  Eigen::Projective3d* --> python array (4x4)
-       //
--      static PyObject* convert(Eigen::Transform3d *trans)
-+      static PyObject* convert(Eigen::Projective3d *trans)
-       {
-         npy_intp dims[2] = { 4, 4 };
-         PyObject *result = PyArray_SimpleNew(2, dims, PyArray_DOUBLE);
-@@ -337,9 +337,9 @@ template <> struct ScalarTraits<double>
-         return incref(result);
-       }
-       //
--      //  const Eigen::Transform3d* --> python array (4x4)
-+      //  const Eigen::Projective3d* --> python array (4x4)
-       //
--      static PyObject* convert(const Eigen::Transform3d *trans)
-+      static PyObject* convert(const Eigen::Projective3d *trans)
-       {
-         npy_intp dims[2] = { 4, 4 };
-         PyObject *result = PyArray_SimpleNew(2, dims, PyArray_DOUBLE);
-@@ -358,10 +358,10 @@ template <> struct ScalarTraits<double>
-     Transform3d_to_python_array()
-     {
-       #ifndef WIN32
--      to_python_converter<Eigen::Transform3d, innerclass>();
-+      to_python_converter<Eigen::Projective3d, innerclass>();
-       #endif
--      to_python_converter<Eigen::Transform3d*, innerclass>();
--      to_python_converter<const Eigen::Transform3d*, innerclass>();
-+      to_python_converter<Eigen::Projective3d*, innerclass>();
-+      to_python_converter<const Eigen::Projective3d*, innerclass>();
-     }
- 
-   };
-@@ -377,13 +377,13 @@ template <> struct ScalarTraits<double>
-       //
-       // used for:
-       //
--      //  void function(Eigen::Transform3d vec)
--      //  void function(Eigen::Transform3d & vec)
--      //  void function(const Eigen::Transform3d & vec)
-+      //  void function(Eigen::Projective3d vec)
-+      //  void function(Eigen::Projective3d & vec)
-+      //  void function(const Eigen::Projective3d & vec)
-       //
--      converter::registry::push_back( &convertible, &construct, 
type_id<Eigen::Transform3d>() );
-+      converter::registry::push_back( &convertible, &construct, 
type_id<Eigen::Projective3d>() );
-       
--      converter::registry::insert( &convert, type_id<Eigen::Transform3d>() );
-+      converter::registry::insert( &convert, type_id<Eigen::Projective3d>() );
-     }
- 
-     static void* convert(PyObject *obj_ptr)
-@@ -401,7 +401,7 @@ template <> struct ScalarTraits<double>
-         throw_error_already_set(); // the 1D array does not have exactly 3 
elements
- 
-       double *values = reinterpret_cast<double*>(array->data);
--      Eigen::Transform3d *c_obj = new Eigen::Transform3d();
-+      Eigen::Projective3d *c_obj = new Eigen::Projective3d();
-       double *dataPtr = c_obj->data();
- 
-       for (int i = 0; i < 16; ++i)
-@@ -432,7 +432,7 @@ template <> struct ScalarTraits<double>
-       // I think this is a better way to get at the double array, where is 
this
-       // deleted though? Does Boost::Python do it?
-       double *values = reinterpret_cast<double*>(array->data);
--      Eigen::Transform3d *storage = new Eigen::Transform3d();
-+      Eigen::Projective3d *storage = new Eigen::Projective3d();
-       double *dataPtr = storage->data();
- 
-       for (int i = 0; i < 16; ++i)
-@@ -467,21 +467,21 @@ class EigenUnitTestHelper
-     void set_vector3d_ptr(Eigen::Vector3d* vec)                 { m_vector3d 
= *vec; }
-     void set_const_vector3d_ptr(const Eigen::Vector3d* const vec) { 
m_vector3d = *vec; }
- 
--    //Eigen::Transform3d             transform3d()              { return 
m_transform3d; }
--    //Eigen::Transform3d&            transform3d_ref()          { return 
m_transform3d; }
--    const Eigen::Transform3d&      const_transform3d_ref()    { return 
m_transform3d; }
--    Eigen::Transform3d*            transform3d_ptr()          { return 
&m_transform3d; }
--    const Eigen::Transform3d*      const_transform3d_ptr()    { return 
&m_transform3d; }
--
--    //void set_transform3d(Eigen::Transform3d vec)                      { 
m_transform3d = vec; }
--    //void set_transform3d_ref(Eigen::Transform3d& vec)                 { 
m_transform3d = vec; }
--    void set_const_transform3d_ref(const Eigen::Transform3d& vec)     { 
m_transform3d = vec; }
--    void set_transform3d_ptr(Eigen::Transform3d* vec)                 { 
m_transform3d = *vec; }
--    void set_const_transform3d_ptr(const Eigen::Transform3d* const vec) { 
m_transform3d = *vec; }
-+    //Eigen::Projective3d             transform3d()              { return 
m_transform3d; }
-+    //Eigen::Projective3d&            transform3d_ref()          { return 
m_transform3d; }
-+    const Eigen::Projective3d&      const_transform3d_ref()    { return 
m_transform3d; }
-+    Eigen::Projective3d*            transform3d_ptr()          { return 
&m_transform3d; }
-+    const Eigen::Projective3d*      const_transform3d_ptr()    { return 
&m_transform3d; }
-+
-+    //void set_transform3d(Eigen::Projective3d vec)                      { 
m_transform3d = vec; }
-+    //void set_transform3d_ref(Eigen::Projective3d& vec)                 { 
m_transform3d = vec; }
-+    void set_const_transform3d_ref(const Eigen::Projective3d& vec)     { 
m_transform3d = vec; }
-+    void set_transform3d_ptr(Eigen::Projective3d* vec)                 { 
m_transform3d = *vec; }
-+    void set_const_transform3d_ptr(const Eigen::Projective3d* const vec) { 
m_transform3d = *vec; }
-  
-   private:
-     Eigen::Vector3d m_vector3d;
--    Eigen::Transform3d m_transform3d;
-+    Eigen::Projective3d m_transform3d;
- 
- };
- #endif
-@@ -529,7 +529,7 @@ void export_Eigen()
-   Vector3x_to_python_array<Eigen::Vector3i>();
-   Vector3x_from_python_array<Eigen::Vector3i>();
- 
--  // Eigen::Transform3d
-+  // Eigen::Projective3d
-   Transform3d_to_python_array();
-   Transform3d_from_python_array();
- 
-Index: avogadro-1.2.0/libavogadro/src/tools/bondcentrictool.cpp
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/tools/bondcentrictool.cpp
-+++ avogadro-1.2.0/libavogadro/src/tools/bondcentrictool.cpp
+diff --git a/libavogadro/src/tools/bondcentrictool.cpp 
b/libavogadro/src/tools/bondcentrictool.cpp
+index b373e0df8..a11604f27 100644
+--- a/libavogadro/src/tools/bondcentrictool.cpp
++++ b/libavogadro/src/tools/bondcentrictool.cpp
 @@ -578,8 +578,8 @@ namespace Avogadro {
  
            Vector3d clicked = *m_clickedAtom->pos();
  
 -          Vector3d axis = Vector3d(0, 0, ((widget->camera()->modelview() * 
other).z() >=
 -                (widget->camera()->modelview() * center).z() ? -1 : 1));
-+          Vector3d axis = Vector3d(0, 0, 
(((widget->camera()->modelview()).linear() * other).z() >=
-+                ((widget->camera()->modelview()).linear() * center).z() ? -1 
: 1));
++          Vector3d axis = Vector3d(0, 0, ((widget->camera()->modelview() * 
other.homogeneous()).z() >=
++                (widget->camera()->modelview() * center.homogeneous()).z() ? 
-1 : 1));
  
            Vector3d centerProj = widget->camera()->project(center);
            centerProj -= Vector3d(0,0,centerProj.z());
@@ -708,8 +452,8 @@
  
 -          Vector3d axis = Vector3d(0, 0, ((widget->camera()->modelview() * 
other).z() >=
 -                (widget->camera()->modelview() * center).z() ? -1 : 1));
-+          Vector3d axis = Vector3d(0, 0, 
((widget->camera()->modelview().linear() * other).z() >=
-+                (widget->camera()->modelview().linear() * center).z() ? -1 : 
1));
++          Vector3d axis = Vector3d(0, 0, ((widget->camera()->modelview() * 
other.homogeneous()).z() >=
++                (widget->camera()->modelview() * center.homogeneous()).z() ? 
-1 : 1));
  
            Vector3d centerProj = widget->camera()->project(center);
            centerProj -= Vector3d(0,0,centerProj.z());
@@ -721,10 +465,10 @@
 -    Vector3d topRight = widget->camera()->modelview() * (right + planeVec);
 -    Vector3d botRight = widget->camera()->modelview() * (right - planeVec);
 -    Vector3d botLeft = widget->camera()->modelview() * (left - planeVec);
-+    Vector3d topLeft = (widget->camera()->modelview()).linear() * (left + 
planeVec);
-+    Vector3d topRight = (widget->camera()->modelview()).linear() * (right + 
planeVec);
-+    Vector3d botRight = (widget->camera()->modelview()).linear() * (right - 
planeVec);
-+    Vector3d botLeft = (widget->camera()->modelview()).linear() * (left - 
planeVec);
++    Vector3d topLeft = (widget->camera()->modelview() * (left + 
planeVec).homogeneous()).head<3>();
++    Vector3d topRight = (widget->camera()->modelview() * (right + 
planeVec).homogeneous()).head<3>();
++    Vector3d botRight = (widget->camera()->modelview() * (right - 
planeVec).homogeneous()).head<3>();
++    Vector3d botLeft = (widget->camera()->modelview() * (left - 
planeVec).homogeneous()).head<3>();
  
      float alpha = 0.4;
      double lineWidth = 1.5;
@@ -736,10 +480,10 @@
 -    Vector3d topRight = widget->camera()->modelview() * C;
 -    Vector3d botRight = widget->camera()->modelview() * B;
 -    Vector3d botLeft = widget->camera()->modelview() * A;
-+    Vector3d topLeft = widget->camera()->modelview().linear() * D;
-+    Vector3d topRight = widget->camera()->modelview().linear() * C;
-+    Vector3d botRight = widget->camera()->modelview().linear() * B;
-+    Vector3d botLeft = widget->camera()->modelview().linear() * A;
++    Vector3d topLeft = (widget->camera()->modelview() * 
D.homogeneous()).head<3>();
++    Vector3d topRight = (widget->camera()->modelview() * 
C.homogeneous()).head<3>();
++    Vector3d botRight = (widget->camera()->modelview() * 
B.homogeneous()).head<3>();
++    Vector3d botLeft = (widget->camera()->modelview() * 
A.homogeneous()).head<3>();
  
      float alpha = 0.4;
      double lineWidth = 1.5;
@@ -754,24 +498,23 @@
      rotation.translate(-centerVector);
  
 -    return rotation*positionVector;
-+    return rotation.linear()*positionVector;
++    return (rotation*positionVector.homogeneous()).head<3>();
    }
  
    // ##########  showAnglesChanged  ##########
-Index: avogadro-1.2.0/libavogadro/src/tools/manipulatetool.cpp
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/tools/manipulatetool.cpp
-+++ avogadro-1.2.0/libavogadro/src/tools/manipulatetool.cpp
-@@ -40,7 +40,7 @@
+diff --git a/libavogadro/src/tools/manipulatetool.cpp 
b/libavogadro/src/tools/manipulatetool.cpp
+index 05cc257af..b01a66817 100644
+--- a/libavogadro/src/tools/manipulatetool.cpp
++++ b/libavogadro/src/tools/manipulatetool.cpp
+@@ -40,7 +40,6 @@
  #include <QAbstractButton>
  
  using Eigen::Vector3d;
 -using Eigen::Transform3d;
-+using Eigen::Projective3d;
  using Eigen::AngleAxisd;
  
  namespace Avogadro {
-@@ -138,7 +138,7 @@ namespace Avogadro {
+@@ -138,7 +137,7 @@ namespace Avogadro {
      double yRotate = m_settingsWidget->yRotateSpinBox->value() * DEG_TO_RAD;
      double zRotate = m_settingsWidget->zRotateSpinBox->value() * DEG_TO_RAD;
  
@@ -780,31 +523,31 @@
      rotation.matrix().setIdentity();
      rotation.translation() = center;
      rotation.rotate(AngleAxisd(xRotate, Vector3d::UnitX())
-@@ -152,12 +152,12 @@ namespace Avogadro {
+@@ -152,12 +151,12 @@ namespace Avogadro {
          if (p->type() == Primitive::AtomType) {
            Atom *atom = static_cast<Atom*>(p);
            tempPos = translate + *(atom->pos());
 -          atom->setPos(rotation * tempPos);
-+          atom->setPos(rotation.linear() * tempPos);
++          atom->setPos((rotation * tempPos.homogeneous()).head<3>());
          }
      } else {
        foreach(Atom *atom, widget->molecule()->atoms()) {
          tempPos = translate + *(atom->pos());
 -        atom->setPos(rotation * tempPos);
-+        atom->setPos(rotation.linear() * tempPos);
++        atom->setPos((rotation * tempPos.homogeneous()).head<3>());
        }
      }
  
-@@ -199,7 +199,7 @@ namespace Avogadro {
+@@ -199,7 +198,7 @@ namespace Avogadro {
      widget->setCursor(Qt::SizeVerCursor);
  
      // Move the selected atom(s) in to or out of the screen
 -    Vector3d transformedGoal = widget->camera()->modelview() * *goal;
-+    Vector3d transformedGoal = widget->camera()->modelview().linear() * *goal;
++    Vector3d transformedGoal = (widget->camera()->modelview() * 
goal->homogeneous()).head<3>();
      double distanceToGoal = transformedGoal.norm();
  
      double t = ZOOM_SPEED * delta;
-@@ -255,7 +255,7 @@ namespace Avogadro {
+@@ -255,7 +254,7 @@ namespace Avogadro {
  
      // Rotate the selected atoms about the center
      // rotate only selected primitives
@@ -813,16 +556,16 @@
      fragmentRotation.matrix().setIdentity();
      fragmentRotation.translation() = *center;
      fragmentRotation.rotate(
-@@ -266,7 +266,7 @@ namespace Avogadro {
+@@ -266,7 +265,7 @@ namespace Avogadro {
  
      foreach(Primitive *p, widget->selectedPrimitives())
        if (p->type() == Primitive::AtomType)
 -        static_cast<Atom *>(p)->setPos(fragmentRotation * *static_cast<Atom 
*>(p)->pos());
-+        static_cast<Atom *>(p)->setPos(fragmentRotation.linear() * 
*static_cast<Atom *>(p)->pos());
++        static_cast<Atom *>(p)->setPos((fragmentRotation * static_cast<Atom 
*>(p)->pos()->homogeneous()).head<3>());
      widget->molecule()->update();
    }
  
-@@ -274,7 +274,7 @@ namespace Avogadro {
+@@ -274,7 +273,7 @@ namespace Avogadro {
                              double delta) const
    {
      // Tilt the selected atoms about the center
@@ -831,40 +574,41 @@
      fragmentRotation.matrix().setIdentity();
      fragmentRotation.translation() = *center;
      fragmentRotation.rotate(AngleAxisd(delta * ROTATION_SPEED, 
widget->camera()->backTransformedZAxis()));
-@@ -282,7 +282,7 @@ namespace Avogadro {
+@@ -282,7 +281,7 @@ namespace Avogadro {
  
      foreach(Primitive *p, widget->selectedPrimitives())
        if (p->type() == Primitive::AtomType)
 -        static_cast<Atom *>(p)->setPos(fragmentRotation * *static_cast<Atom 
*>(p)->pos());
-+        static_cast<Atom *>(p)->setPos(fragmentRotation.linear() * 
*static_cast<Atom *>(p)->pos());
++        static_cast<Atom *>(p)->setPos((fragmentRotation * static_cast<Atom 
*>(p)->pos()->homogeneous()).head<3>());
      widget->molecule()->update();
    }
  
-Index: avogadro-1.2.0/libavogadro/src/tools/navigatetool.cpp
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/tools/navigatetool.cpp
-+++ avogadro-1.2.0/libavogadro/src/tools/navigatetool.cpp
-@@ -92,7 +92,7 @@ namespace Avogadro {
+diff --git a/libavogadro/src/tools/navigatetool.cpp 
b/libavogadro/src/tools/navigatetool.cpp
+index 115bb3245..643ce4ddd 100644
+--- a/libavogadro/src/tools/navigatetool.cpp
++++ b/libavogadro/src/tools/navigatetool.cpp
+@@ -92,7 +92,8 @@ namespace Avogadro {
        double sumOfWeights = 0.;
        QList<Atom*> atoms = widget->molecule()->atoms();
        foreach (Atom *atom, atoms) {
 -        Vector3d transformedAtomPos = widget->camera()->modelview() * 
*atom->pos();
-+        Vector3d transformedAtomPos = 
(widget->camera()->modelview()).linear() * (*atom->pos());
++        Vector3d transformedAtomPos = (widget->camera()->modelview() *
++                                       atom->pos()->homogeneous()).head<3>();
          double atomDistance = transformedAtomPos.norm();
          double dot = transformedAtomPos.z() / atomDistance;
          double weight = exp(-30. * (1. + dot));
-Index: avogadro-1.2.0/libavogadro/src/tools/skeletontree.cpp
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/tools/skeletontree.cpp
-+++ avogadro-1.2.0/libavogadro/src/tools/skeletontree.cpp
-@@ -25,6 +25,7 @@
-  **********************************************************************/
- 
- #include "skeletontree.h"
-+#include <iostream>
- 
+diff --git a/libavogadro/src/tools/skeletontree.cpp 
b/libavogadro/src/tools/skeletontree.cpp
+index 03390e9a1..269439855 100644
+--- a/libavogadro/src/tools/skeletontree.cpp
++++ b/libavogadro/src/tools/skeletontree.cpp
+@@ -29,6 +29,7 @@
  #include <avogadro/atom.h>
  #include <avogadro/bond.h>
+ #include <avogadro/molecule.h>
++#include <iostream>
+ 
+ using namespace Eigen;
+ using namespace std;
 @@ -221,7 +222,7 @@ namespace Avogadro {
    {
      if (m_rootNode) {
@@ -884,27 +628,14 @@
      // Update the root node with the new position
      Atom* a = n->atom();
 -    a->setPos(rotationMatrix * (*a->pos()));
-+    a->setPos(rotationMatrix.linear() * (*a->pos()));
++    a->setPos((rotationMatrix * (*a->pos()).homogeneous()).head<3>());
      a->update();
  
      // Now update the children
-@@ -270,10 +271,10 @@ namespace Avogadro {
-       printSkeleton(node);
- 
-     Atom* a = n->atom();
--    cout << a->pos()->x() << "," << a->pos()->y()<< ","<<a->pos()->z() << 
endl;
-+    std::cout << a->pos()->x() << "," << a->pos()->y()<< ","<<a->pos()->z() 
<< endl;
- 
-     if (!n->isLeaf()) {
--      cout << "-------------" << endl;
-+      std::cout << "-------------" << endl;
-     }
-   }
- 
-Index: avogadro-1.2.0/libavogadro/src/tools/skeletontree.h
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/tools/skeletontree.h
-+++ avogadro-1.2.0/libavogadro/src/tools/skeletontree.h
+diff --git a/libavogadro/src/tools/skeletontree.h 
b/libavogadro/src/tools/skeletontree.h
+index e2010feb4..0f51c4f31 100644
+--- a/libavogadro/src/tools/skeletontree.h
++++ b/libavogadro/src/tools/skeletontree.h
 @@ -230,7 +230,7 @@ namespace Avogadro {
         * @param centerVector Center location to rotate around.
         */
@@ -914,28 +645,3 @@
  
    };
  } // End namespace Avogadro
-Index: avogadro-1.2.0/libavogadro/tests/CMakeLists.txt
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/tests/CMakeLists.txt
-+++ avogadro-1.2.0/libavogadro/tests/CMakeLists.txt
-@@ -13,7 +13,7 @@ set_directory_properties(PROPERTIES INCL
- include_directories(
-   ${CMAKE_SOURCE_DIR}
-   ${CMAKE_CURRENT_BINARY_DIR}
--  ${EIGEN2_INCLUDE_DIR}
-+  ${EIGEN3_INCLUDE_DIR}
-   ${OPENBABEL2_INCLUDE_DIR}
-   ${BOOST_PYTHON_INCLUDES}
-   ${PYTHON_INCLUDE_PATH}
-Index: avogadro-1.2.0/libavogadro/src/extensions/CMakeLists.txt
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/extensions/CMakeLists.txt
-+++ avogadro-1.2.0/libavogadro/src/extensions/CMakeLists.txt
-@@ -144,6 +144,6 @@ add_subdirectory(crystallography)
- add_subdirectory(spectra)
- add_subdirectory(surfaces)
- add_subdirectory(swcntbuilder)
--add_subdirectory(qtaim)
-+#add_subdirectory(qtaim)
- add_subdirectory(quantuminput)
- add_subdirectory(orca)
diff -Nru avogadro-1.2.0/debian/patches/series 
avogadro-1.2.0/debian/patches/series
--- avogadro-1.2.0/debian/patches/series        2016-10-02 10:06:16.000000000 
+0200
+++ avogadro-1.2.0/debian/patches/series        2017-07-06 18:18:38.000000000 
+0200
@@ -3,3 +3,5 @@
 eigen3.patch
 gcc-version.diff
 libmsymfloat.patch
+eigen3_lib.patch
+

--- End Message ---
--- Begin Message ---
Version: 9.1

Hi,

These bugs all relate to updates which were included in today's stretch
point release.

Regards,

Adam

--- End Message ---

Reply via email to