From f5bf900d641b2b37a29a9100dc4a3c3b88805d3e Mon Sep 17 00:00:00 2001
From: david-sarah <david-sarah@jacaranda.org>
Date: Sun, 8 Aug 2010 10:12:35 -0700
Subject: [PATCH] src/allmydata/__init__.py: make the package paths more
 accurate when we fail to get them from setuptools.

---
 src/allmydata/__init__.py | 27 +++++++++++++++------------
 1 file changed, 15 insertions(+), 12 deletions(-)

diff --git a/src/allmydata/__init__.py b/src/allmydata/__init__.py
index 97fa15c6..14110062 100644
--- a/src/allmydata/__init__.py
+++ b/src/allmydata/__init__.py
@@ -169,6 +169,9 @@ def get_package_versions_from_setuptools():
     import pkg_resources
     return dict([(p.project_name, (p.version, p.location)) for p in pkg_resources.require(__appname__)])
 
+def package_dir(srcfile):
+    return os.path.dirname(os.path.dirname(os.path.realpath(srcfile)))
+
 def get_package_versions_and_locations():
     # because there are a few dependencies that are outside setuptools's ken
     # (Python and platform, and sqlite3 if you are on Python >= 2.5), and
@@ -187,26 +190,26 @@ def get_package_versions_and_locations():
             pass
         else:
             pysqlitever = dbapi2.version
-            pysqlitefile = os.path.dirname(dbapi2.__file__)
+            pysqlitefile = package_dir(dbapi2.__file__)
             sqlitever = dbapi2.sqlite_version
     else:
         pysqlitever = sqlite3.version
-        pysqlitefile = os.path.dirname(sqlite3.__file__)
+        pysqlitefile = package_dir(sqlite3.__file__)
         sqlitever = sqlite3.sqlite_version
 
     d1 = {
-        'pyOpenSSL': (OpenSSL.__version__, os.path.dirname(OpenSSL.__file__)),
-        __appname__: (allmydata.__version__, os.path.dirname(allmydata.__file__)),
-        'foolscap': (foolscap.api.__version__, os.path.dirname(foolscap.__file__)),
-        'Nevow': (nevow.__version__, os.path.dirname(nevow.__file__)),
-        'pycryptopp': (pycryptopp.__version__, os.path.dirname(pycryptopp.__file__)),
-        'setuptools': (setuptools.__version__, os.path.dirname(setuptools.__file__)),
-        'simplejson': (simplejson.__version__, os.path.dirname(simplejson.__file__)),
+        'pyOpenSSL': (OpenSSL.__version__, package_dir(OpenSSL.__file__)),
+        __appname__: (allmydata.__version__, package_dir(allmydata.__file__)),
+        'foolscap': (foolscap.api.__version__, package_dir(foolscap.__file__)),
+        'Nevow': (nevow.__version__, package_dir(nevow.__file__)),
+        'pycryptopp': (pycryptopp.__version__, package_dir(pycryptopp.__file__)),
+        'setuptools': (setuptools.__version__, package_dir(setuptools.__file__)),
+        'simplejson': (simplejson.__version__, package_dir(simplejson.__file__)),
         'pysqlite': (pysqlitever, pysqlitefile),
         'sqlite': (sqlitever, 'unknown'),
-        'zope.interface': ('unknown', os.path.dirname(zope.interface.__file__)),
-        'Twisted': (twisted.__version__, os.path.dirname(twisted.__file__)),
-        'zfec': (zfec.__version__, os.path.dirname(zfec.__file__)),
+        'zope.interface': ('unknown', package_dir(zope.interface.__file__)),
+        'Twisted': (twisted.__version__, package_dir(twisted.__file__)),
+        'zfec': (zfec.__version__, package_dir(zfec.__file__)),
         'python': (platform.python_version(), sys.executable),
         'platform': (get_platform(), None),
         }
-- 
2.45.2