Update setup.py to use distutils

(use new default directory, install the plugins as a separate
python module…)
This commit is contained in:
mathieui 2013-05-26 20:07:12 +02:00
parent 1b9dc72d14
commit 2b42c6a3ea
9 changed files with 82 additions and 40 deletions

3
MANIFEST.in Normal file
View file

@ -0,0 +1,3 @@
include data/default_config.cfg
include data/poezio.1
recursive-include data/ *

View file

@ -7,7 +7,7 @@ LOCALEDIR=$(DATADIR)/locale
MANDIR=$(DATADIR)/man
all: Makefile
cd src/ && python3 ../setup.py build_ext --inplace
python3 setup.py build_ext --inplace
clean:
find ./ -name \*.pyc -delete
@ -17,26 +17,12 @@ clean:
rm -r doc/build/
install: all
mkdir -p $(DESTDIR)$(prefix)
install -d $(DESTDIR)$(LOCALEDIR) $(DESTDIR)$(BINDIR) $(DESTDIR)$(DATADIR)/poezio $(DESTDIR)$(DATADIR)/poezio/data $(DESTDIR)$(DATADIR)/poezio/src/ $(DESTDIR)$(DATADIR)/poezio/src $(DESTDIR)$(DATADIR)/poezio/data/themes $(DESTDIR)$(MANDIR)/man1 $(DESTDIR)$(DOCDIR)/poezio $(DESTDIR)$(DATADIR)/poezio/plugins
cp -R data/* $(DESTDIR)$(DATADIR)/poezio/data/
rm $(DESTDIR)$(DATADIR)/poezio/data/poezio.1
cp -R plugins/* $(DESTDIR)$(DATADIR)/poezio/plugins
mkdir -p $(DESTDIR)$(prefix) $(DESTDIR)$(DOCDIR)/poezio/ $(DESTDIR)$(LOCALEDIR) $(DESTDIR)$(BINDIR)
cp -R doc/* $(DESTDIR)$(DOCDIR)/poezio/
cp README CHANGELOG COPYING $(DESTDIR)$(DOCDIR)/poezio/
install -m644 data/poezio.1 $(DESTDIR)$(MANDIR)/man1/
for sourcefile in `ls -1 src/*.py src/*.so` ; do \
install -m644 $$sourcefile $(DESTDIR)$(DATADIR)/poezio/src; \
done
echo "#!/usr/bin/env sh" > $(DESTDIR)$(BINDIR)/poezio
echo "python3 $(DATADIR)/poezio/src/poezio.py \$$@" >> $(DESTDIR)$(BINDIR)/poezio
chmod 755 $(DESTDIR)$(BINDIR)/poezio
uninstall:
rm -f $(DESTDIR)$(BINDIR)/poezio
rm -rf $(DESTDIR)$(DATADIR)/poezio

0
plugins/__init__.py Normal file
View file

4
scripts/poezio Executable file
View file

@ -0,0 +1,4 @@
#!/usr/bin/python3
from poezio import main
main()

View file

@ -1,16 +1,40 @@
from distutils.core import setup, Extension
module_poopt = Extension('poopt',
sources = ['pooptmodule.c'])
module_poopt = Extension('poezio.poopt',
sources = ['src/pooptmodule.c'])
setup (name = 'BuildLines',
version = '0.0.1',
description = 'Poezio Optimizations',
setup(name="poezio",
version="0.8-dev",
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.
""",
ext_modules = [module_poopt],
url = 'http://poezio.eu/',
license = 'zlib',
author = 'Florent Le Coz',
author_email = 'louiz@louiz.org',
long_description = """
a python3 module for poezio, used to replace some time-critical
python functions that are too slow. If compiled, poezio will use this module,
otherwise it will just use the equivalent python functions.
""")
maintainer = 'Mathieu Pasquet',
maintainer_email = 'mathieui@mathieui.net',
classifiers = ['Development Status :: 4 - Beta',
'Environment :: Console :: Curses',
'Intended Audience :: End Users/Desktop',
'License :: OSI Approved :: zlib/libpng License',
'Natural Language :: English',
'Operating System :: Unix',
'Topic :: Communications :: Chat',
'Programming Language :: Python :: 3',
],
keywords = ['xmpp', 'chat', 'im', 'console'],
packages = ['poezio', 'poezio_plugins'],
package_dir = {'poezio': 'src', 'poezio_plugins': 'plugins'},
scripts = ['scripts/poezio'],
data_files = [('/etc/poezio/', ['data/default_config.cfg']),
('share/poezio/themes/', ['data/themes/dark.py']),
('share/man/man1/', ['data/poezio.1'])],
)

1
src/__init__.py Normal file
View file

@ -0,0 +1 @@
from poezio.poezio import main

View file

@ -251,7 +251,12 @@ options = parse_args(CONFIG_PATH)
# Copy a default file if none exists
if not path.isfile(options.filename):
copy2(path.join(path.dirname(__file__), '../data/default_config.cfg'), options.filename)
default = path.join(path.dirname(__file__), '../data/default_config.cfg')
other = '/etc/poezio/default_config.cfg'
if path.isfile(default):
copy2(default, options.filename)
elif path.isfile(other):
copy2(other, options.filename)
firstrun = True
config = Config(options.filename)

View file

@ -20,6 +20,8 @@ from config import config
log = logging.getLogger(__name__)
load_path = []
plugins_dir = config.get('plugins_dir', '')
plugins_dir = plugins_dir or\
os.path.join(os.environ.get('XDG_DATA_HOME') or\
@ -39,6 +41,8 @@ try:
os.makedirs(plugins_dir)
except OSError:
pass
else:
load_path.append(plugins_dir)
try:
os.makedirs(plugins_conf_dir)
@ -47,14 +51,23 @@ except OSError:
default_plugin_path = path.join(path.dirname(path.dirname(__file__)), 'plugins')
sys.path.append(plugins_dir)
sys.path.append(default_plugin_path)
if os.path.exists(default_plugin_path):
load_path.append(default_plugin_path)
try:
import poezio_plugins
except:
pass
else:
if poezio_plugins.__path__:
load_path.append(poezio_plugins.__path__[0])
sys.path.extend(load_path)
if version_info[1] >= 3: # 3.3 & >
from importlib import machinery
finder = machinery.PathFinder()
class PluginManager(object):
"""
Plugin Manager
@ -94,7 +107,7 @@ class PluginManager(object):
imp.acquire_lock()
module = imp.reload(self.modules[name])
else:
file, filename, info = imp.find_module(name, [plugins_dir, default_plugin_path])
file, filename, info = imp.find_module(name, load_path)
imp.acquire_lock()
module = imp.load_module(name, file, filename, info)
else: # 3.3 & >
@ -288,15 +301,19 @@ class PluginManager(object):
all .py files in plugins_dir
"""
try:
try:
names = set(os.listdir(default_plugin_path))
except:
names = set()
names |= set(os.listdir(plugins_dir))
names = set()
for path in load_path:
try:
add = set(os.listdir(path))
names |= add
except:
pass
except OSError as e:
self.core.information(_('Completion failed: %s' % e), 'Error')
return
plugins_files = [name[:-3] for name in names if name.endswith('.py')]
plugins_files = [name[:-3] for name in names if name.endswith('.py')
and name != '__init__.py' and not name.startswith('.')]
plugins_files.sort()
return the_input.auto_completion(plugins_files, '', quotify=False)
def completion_unload(self, the_input):

View file

@ -12,11 +12,13 @@ Starting point of poezio. Launches both the Connection and Gui
import sys
import os
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
import signal
import logging
from logger import logger
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from logger import logger
from config import options
import singleton
import core