From 14b58c528e630ad8528099525f59e896a1cdaec2 Mon Sep 17 00:00:00 2001
From: mathieui <mathieui@mathieui.net>
Date: Tue, 10 Feb 2015 17:40:53 +0100
Subject: Update setup files
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

- remove “make uninstall” target which was broken a long time ago
- move very install action to the setup.py (alias “make install” to
  “python setup.py install”
- add some stuff to “make clean”
- update the config.py to search the default config file using
  pkg_resources (more reliable than dirname(__file__))
- install the html doc only if available
- use README.rst for the setup.py long_description

- also, update the copyright notice to 2015
---
 COPYING       |   2 +-
 MANIFEST.in   |   4 --
 Makefile      |  11 ++---
 setup.py      | 126 ++++++++++++++++++++++++++++++++++------------------------
 src/config.py |   6 +--
 5 files changed, 82 insertions(+), 67 deletions(-)
 delete mode 100644 MANIFEST.in

diff --git a/COPYING b/COPYING
index 21ac6185..820f7fba 100644
--- a/COPYING
+++ b/COPYING
@@ -1,4 +1,4 @@
-Copyright (c) 2010-2014 Florent Le Coz and Mathieu Pasquet
+Copyright (c) 2010-2015 Florent Le Coz and Mathieu Pasquet
 
 This software is provided 'as-is', without any express or implied
 warranty. In no event will the authors be held liable for any damages
diff --git a/MANIFEST.in b/MANIFEST.in
deleted file mode 100644
index c52d5166..00000000
--- a/MANIFEST.in
+++ /dev/null
@@ -1,4 +0,0 @@
-include src/default_config.cfg
-include data/default_config.cfg
-include data/poezio.1
-recursive-include data/ *
diff --git a/Makefile b/Makefile
index d9f4df85..a9f8dd62 100644
--- a/Makefile
+++ b/Makefile
@@ -14,21 +14,16 @@ clean:
 	find ./ -name \*.pyc -delete
 	find ./ -name \*.pyo -delete
 	find ./ -name \*~ -delete
+	find ./ -type d -name __pycache__ -delete
 	find ./ -name "#*#" -delete
 	rm -rf doc/build/
+	rm -rf poezio.egg-info
+	rm -rf dist
 	rm -rf build
 	rm -f src/*.so
 
 install: all
 	python3 setup.py install --root=$(DESTDIR) --optimize=1
-	mkdir -p $(DESTDIR)$(prefix)  $(DESTDIR)$(DOCDIR)/poezio/ $(DESTDIR)$(LOCALEDIR) $(DESTDIR)$(BINDIR)
-	cp -R doc/* $(DESTDIR)$(DOCDIR)/poezio/
-	cp README.rst CHANGELOG COPYING $(DESTDIR)$(DOCDIR)/poezio/
-
-uninstall:
-	rm -f $(DESTDIR)$(BINDIR)/poezio
-	rm -rf $(DESTDIR)$(DOCDIR)/poezio/
-	rm -rf $(DESTDIR)$(MANDIR)/man1/poezio.1
 
 doc:
 	make -C doc/ html
diff --git a/setup.py b/setup.py
index 97ae2a53..bc9c218b 100755
--- a/setup.py
+++ b/setup.py
@@ -7,23 +7,47 @@ except ImportError:
     import sys
     sys.exit(1)
 
-import os
+from os.path import basename, dirname, exists, join
+from os import link, walk, unlink
 
-module_poopt = Extension('poezio.poopt',
-                    extra_compile_args=['-Wno-declaration-after-statement'],
-                    sources = ['src/pooptmodule.c'])
+current_dir = dirname(__file__)
 
+def get_relative_dir(folder, stopper):
+    """
+    Find the path from a directory to a pseudo-root in order to recreate
+    the filetree.
+    """
+    acc = []
+    last = basename(folder)
+    while last != stopper:
+        acc.append(last)
+        folder = dirname(folder)
+        last = basename(folder)
+    return join(*acc[::-1]) if acc else ''
 
-current_dir = os.path.dirname(__file__)
+def find_doc(before, path):
+    _files = []
+    stop = basename(path)
+    for root, dirs, files in walk(join(current_dir, 'doc', path)):
+        files_path = []
+        relative_root = get_relative_dir(root, stop)
+        for name in files:
+            files_path.append(join(root, name))
+        _files.append((join(before, relative_root), files_path))
+    return _files
+
+module_poopt = Extension('poezio.poopt',
+                    extra_compile_args=['-Wno-declaration-after-statement'],
+                    sources=['src/pooptmodule.c'])
 
 # Create a link to the config file (for packaging purposes)
-if not os.path.exists(os.path.join(current_dir, 'src', 'default_config.cfg')):
-    os.link(os.path.join(current_dir, 'data', 'default_config.cfg'),
-            os.path.join(current_dir, 'src',  'default_config.cfg'))
+if not exists(join(current_dir, 'src', 'default_config.cfg')):
+    link(join(current_dir, 'data', 'default_config.cfg'),
+         join(current_dir, 'src', 'default_config.cfg'))
 
 # identify the git version
-git_dir = os.path.join(current_dir, '.git')
-if os.path.exists(git_dir):
+git_dir = join(current_dir, '.git')
+if exists(git_dir):
     try:
         import subprocess
         result = subprocess.Popen(['git', '--git-dir', git_dir, 'describe'],
@@ -37,51 +61,51 @@ if os.path.exists(git_dir):
 else:
     version = '.dev1'
 
-setup(name="poezio",
-       version="0.9" + version,
-       description="A console XMPP client",
-       long_description=
-       "Poezio is a Free chat client aiming to reproduce the ease of use of most "
-       "IRC clients (e.g. weechat, irssi) while using the XMPP network."
-       "\n"
-       "Documentation is available at http://doc.poez.io/.",
-
-       ext_modules = [module_poopt],
-       url = 'http://poez.io/',
-       license = 'zlib',
-       download_url = 'https://dev.louiz.org/projects/poezio/files',
+with open('README.rst', encoding='utf-8') as readme_fd:
+    LONG_DESCRIPTION = readme_fd.read()
 
-       author = 'Florent Le Coz',
-       author_email = 'louiz@louiz.org',
+setup(name="poezio",
+      version="0.9" + version,
+      description="A console XMPP client",
+      long_description=LONG_DESCRIPTION,
+      ext_modules=[module_poopt],
+      url='http://poez.io/',
+      license='zlib',
+      download_url='https://dev.louiz.org/projects/poezio/files',
 
-       maintainer = 'Mathieu Pasquet',
-       maintainer_email = 'mathieui@mathieui.net',
+      author='Florent Le Coz',
+      author_email='louiz@louiz.org',
 
-       classifiers = ['Development Status :: 2 - Pre-Alpha',
-                       'Topic :: Communications :: Chat',
-                       'Environment :: Console :: Curses',
-                       'Intended Audience :: End Users/Desktop',
-                       'License :: OSI Approved :: zlib/libpng License',
-                       'Natural Language :: English',
-                       'Operating System :: Unix',
-                       'Programming Language :: Python :: 3'
-                    ],
-       keywords = ['jabber', 'xmpp', 'client', 'chat', 'im', 'console'],
-       packages = ['poezio', 'poezio.core', 'poezio.tabs', 'poezio.windows',
-                   'poezio_plugins', 'poezio_plugins.gpg', 'poezio_themes'],
-       package_dir = {'poezio': 'src', 'poezio_plugins': 'plugins', 'poezio_themes': 'data/themes'},
-       package_data = {'poezio': ['default_config.cfg']},
-       scripts = ['scripts/poezio_gpg_export'],
-       entry_points={ 'console_scripts': [ 'poezio = poezio:main' ] },
-       data_files = [('share/man/man1/', ['data/poezio.1'])],
+      maintainer='Mathieu Pasquet',
+      maintainer_email='mathieui@mathieui.net',
 
-       install_requires = ['slixmpp',
-                           'aiodns'],
-       extras_require = {'OTR plugin': 'python-potr>=1.0',
-                         'Screen autoaway plugin': 'pyinotify==0.9.4'}
-)
+      classifiers=['Development Status :: 2 - Pre-Alpha',
+                   'Topic :: Communications :: Chat',
+                   'Environment :: Console :: Curses',
+                   'Intended Audience :: End Users/Desktop',
+                   'License :: OSI Approved :: zlib/libpng License',
+                   'Natural Language :: English',
+                   'Operating System :: Unix',
+                   'Programming Language :: Python :: 3.4',
+                   'Programming Language :: Python :: 3 :: Only'],
+      keywords=['jabber', 'xmpp', 'client', 'chat', 'im', 'console'],
+      packages=['poezio', 'poezio.core', 'poezio.tabs', 'poezio.windows',
+                'poezio_plugins', 'poezio_plugins.gpg', 'poezio_themes'],
+      package_dir={'poezio': 'src',
+                   'poezio_plugins': 'plugins',
+                   'poezio_themes': 'data/themes'},
+      package_data={'poezio': ['default_config.cfg']},
+      scripts=['scripts/poezio_gpg_export'],
+      entry_points={'console_scripts': ['poezio = poezio:main']},
+      data_files=([('share/man/man1/', ['data/poezio.1']),
+                   ('share/poezio/', ['README.rst', 'COPYING', 'CHANGELOG'])]
+                  + find_doc('share/doc/poezio/html', 'source')
+                  + find_doc('share/doc/poezio/source', 'build/html')),
+      install_requires=['slixmpp', 'aiodns'],
+      extras_require={'OTR plugin': 'python-potr>=1.0',
+                      'Screen autoaway plugin': 'pyinotify==0.9.4'})
 
 # Remove the link afterwards
-if os.path.exists(os.path.join(current_dir, 'src', 'default_config.cfg')):
-    os.unlink(os.path.join(current_dir, 'src', 'default_config.cfg'))
+if exists(join(current_dir, 'src', 'default_config.cfg')):
+    unlink(join(current_dir, 'src', 'default_config.cfg'))
 
diff --git a/src/config.py b/src/config.py
index 43b88c98..2980e50b 100644
--- a/src/config.py
+++ b/src/config.py
@@ -15,6 +15,7 @@ DEFSECTION = "Poezio"
 import logging.config
 import os
 import sys
+import pkg_resources
 from gettext import gettext as _
 
 from configparser import RawConfigParser, NoOptionError, NoSectionError
@@ -527,9 +528,8 @@ def run_cmdline_args(CONFIG_PATH):
 
     # Copy a default file if none exists
     if not path.isfile(options.filename):
-        default = path.join(path.dirname(__file__),
-                            '../data/default_config.cfg')
-        other = path.join(path.dirname(__file__), 'default_config.cfg')
+        default = path.join(path.dirname(__file__), '../data/default_config.cfg')
+        other = pkg_resources.resource_filename('poezio', 'default_config.cfg')
         if path.isfile(default):
             copy2(default, options.filename)
         elif path.isfile(other):
-- 
cgit v1.2.3