#! /usr/bin/env python
"""Straw: A feed aggregator for open source desktops.
Straw is a feed aggregator for open source desktops. Its goal is to be a
faster, easier, and more accessible way to read news and blogs than the
web browser. It uses the Python bindings to the GTK+ toolkit and supports RSS
and ATOM feeds.
"""
classifiers = """\
Development Status :: 4 - Beta
Environment :: X11 Applications :: GTK
Environment :: X11 Applications :: Gnome
Intended Audience :: End Users/Desktop
License :: OSI Approved :: GNU General Public License (GPL)
Operating System :: POSIX
Operating System :: POSIX :: Linux
Programming Language :: Python
Topic :: Desktop Environment
Topic :: Desktop Environment :: Gnome
Topic :: Internet :: WWW/HTTP
"""
import sys
import glob
import os.path
strawenv = {'APPNAME': 'Straw',
'VERSION': '0.27',
'PYTHON': '2.4',
'PYGTK': (2,8,0)}
if sys.version < strawenv['PYTHON']:
sys.exit('Error: %s or newer is required. Current version:\n %s'
% (strawenv['PYTHON'],sys.version))
doclines = __doc__.split("\n")
def modules_check():
'''Check if necessary modules is installed.
The function is executed by distutils (by the install command).'''
# Set This For Machines with No DISPLAY
nogtk = 0
import imp
# Check for PyGTK version
try:
import pygtk
pygtk.require('2.0')
imp.find_module('gtk')
import gtk
if gtk.pygtk_version < strawenv['PYGTK']:
raise
except AssertionError:
pass # We ignore this because gtk must be present to build"
except RuntimeError, msg:
if os.environ.get ('DISPLAY', '') != '':
etype, value, tb = sys.exc_info ()
traceback.print_exception (etype, value, tb)
sys.exit('Error: unexpected runtime error checking for gtk module')
nogtk = 1
pass # No DISPLAY set, pass
except:
sys.exit('Error: PyGTK-%d.%d.%d or newer is required.' % strawenv['PYGTK'])
# Check other module requirements.
# In pygtk versions prior to 2.10, gtkhtml2 is included in
# the 'gnome' module. But as of 2.10, the gtkhtml2 module was
# removed in 'gnome' and added in 'gnome-extras' module.
# The egg.trayicon module is also included in g-p-e, so no need to check here.
mod_list = [
('gnome', 'python-gnome2', 0),
('gtkhtml2', "python-gnome2-extras", 0),
('gconf', "python-gnome2", 1),
('bsddb.db', 'python-bsddb', 0),
('dbus', 'python-dbus', 0)]
for m, w, x in mod_list:
if nogtk == 1 and m == 'gtkhtml2':
pass;
else:
try:
if not x: exec('import %s' % m)
else: imp.find_module(m)
except ImportError, msg:
sys.exit("Error: '%s' module in package '%s' is required to install %s" \
% (m,w,strawenv['APPNAME']))
# Check for dbus version
if getattr(dbus, 'version', None) is None:
print "Warning: Recent versions of DBus is needed to run Straw"
# gtk.glade needs special care (ugly...)
path = imp.find_module('gtk')
if not os.path.exists(path[1] + '/glade.so'):
sys.exit('Error: %s module is required to install %s' \
% ("PyGTK's glade", strawenv['APPNAME']))
# Check for ADNS
try:
import adns, ADNS
except ImportError:
print 'Warning: ADNS Python module not found, will continue without.'
def translations():
'''Build mo-po mapping from po directory'''
trans = []
dest = 'share/locale/%s/LC_MESSAGES/%s.mo'
for po in glob.glob('po/*.po'):
lang = os.path.splitext(os.path.basename(po))[0]
trans.append((dest % (lang , strawenv['APPNAME'].lower()), po))
return trans
def translation_files():
'''Files for translation...'''
potfile = './po/POTFILES.in'
if not os.path.exists(potfile):
sys.exit("No such file, '%s'. This file should've been built \
automatically. You can run \"intltool-update --pot\" to create it manually.\
We also encourage you to file a bug report against Straw." % potfile)
try:
f = open(potfile)
files = []
for line in f:
# ignore comments and newline
if not line.startswith('#') or not line.startswith('\n'):
files.append(line.strip())
finally:
f.close()
return files
def data_files():
'''Build list of data files to be installed'''
images = glob.glob('images/*.png')
misc = [
'data/default_subscriptions.opml',
'data/straw.css',
'glade/straw.glade'
]
files = [
('share/pixmaps', ['images/straw.png']),
('share/straw', images + misc)]
return files
# Let distutils do the work
from tools.straw_distutils import setup
setup(name = strawenv['APPNAME'],
version = strawenv['VERSION'],
description = doclines[0],
long_description = "\n".join(doclines[2:]),
author = 'Juri Pakaste',
author_email = 'juri@iki.fi',
maintainer = 'Jan Alonzo',
maintainer_email = 'jmalonzo@unpluggable.com',
url = 'http://www.gnome.org/projects/straw/',
license = 'GPL',
data_files = data_files(),
pot_file = 'po/straw.pot',
translations = translations(),
modules_check = modules_check,
msg_sources = ['glade/strings.c'] + glob.glob('src/lib/*.py'),
desktop_file = ['straw.desktop.in'],
constants = [('constants.py.in', strawenv)],
scripts = ['src/straw'],
packages = ['straw'],
package_dir = {'straw' : 'src/lib'},
config_files = [('gconf/schemas',['data/straw.schemas'],
'with-gconf-schema-file-dir')],
classifiers = filter(None, classifiers.split("\n")))
syntax highlighted by Code2HTML, v. 0.9.1