aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Marturana <lucamarturana@me.com>2013-05-04 23:23:23 +0200
committerLuca Marturana <lucamarturana@me.com>2013-05-04 23:23:23 +0200
commitb0aede5ce0c1d303d4488bc4d7e60411c34b7049 (patch)
treeb64ea15a1fc99a13376e4cb49f3b981b13450724 /setup.py
downloadelogv-b0aede5ce0c1d303d4488bc4d7e60411c34b7049.tar.gz
elogv-b0aede5ce0c1d303d4488bc4d7e60411c34b7049.tar.bz2
elogv-b0aede5ce0c1d303d4488bc4d7e60411c34b7049.zip
Import of elogv version 0.7.50.7.5
Diffstat (limited to 'setup.py')
-rw-r--r--setup.py264
1 files changed, 264 insertions, 0 deletions
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..4a9fc5c
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,264 @@
+from distutils.core import setup
+from distutils import log
+from distutils.cmd import Command
+from distutils.file_util import copy_file
+from distutils.dir_util import remove_tree
+from distutils.command.build import build as _build
+from distutils.command.install import install as _install
+from distutils.command.clean import clean as _clean
+
+
+import os
+import sys
+import shutil
+from glob import glob
+
+## Snippet of code found on
+## http://developer.berlios.de/snippet/detail.php?type=snippet&id=100019
+## Useful to handle *.po files under distutils
+
+class messages(Command):
+
+ description = 'Extract messages from source files'
+
+ user_options = [('merge', 'm', 'Merge message catalogs after '
+ 'extracting template')]
+
+ boolean_options = ['merge']
+
+ def initialize_options(self):
+ self.merge = False
+
+ def finalize_options(self):
+ pass
+
+ def run(self):
+ wd = os.getcwd()
+ name = self.distribution.get_name()
+ log.info('Extracting messages from %s' % name)
+ os.chdir('po')
+ os.system('pygettext -k i18n -o %s.pot ../%s' % (name, name))
+ os.chdir(wd)
+ if self.merge:
+ self.run_command('merge')
+
+class merge(Command):
+ description = 'Merge message catalogs with template'
+
+ user_options = [('lang=', 'l', 'Only merge specified language')]
+
+ def initialize_options(self):
+ self.lang = None
+
+ def finalize_options(self):
+ pass
+
+ def run(self):
+ wd = os.getcwd()
+ os.chdir('po')
+ if self.lang is not None:
+ filename = '%s.po' % self.lang
+ if os.path.exists(filename):
+ self.merge(filename)
+ else:
+ print log.error('No catalog found for language %s' % self.lang)
+ else:
+ files = glob('*.po')
+ for f in files:
+ self.merge(f)
+ os.chdir(wd)
+
+ def merge(self, f):
+ name = self.distribution.get_name()
+ log.info('Merging catalog %s' % f)
+ os.system('msgmerge %s %s.pot -o %s' % (f, name, f))
+
+
+class build_messages(Command):
+
+ description = 'Compile message catalogs'
+ user_options = [('build-dir=', 'd', 'directory to build message catalogs in')]
+
+ def initialize_options(self):
+ self.build_dir = None
+
+ def finalize_options(self):
+ self.set_undefined_options('build',
+ ('build_messages', 'build_dir'))
+
+ def run(self):
+ self.mkpath(self.build_dir)
+ po_files = os.path.join('po', '*.po')
+ po_files = glob(po_files)
+ for f in po_files:
+ base = os.path.basename(f)
+ base = os.path.splitext(base)[0]
+ out_file = os.path.join(self.build_dir, '%s.gmo' % base)
+ log.info('Building catalog %s > %s' % (f, out_file))
+ cmd = 'msgfmt -o "%s" %s' % (out_file, f)
+ os.system(cmd)
+
+class build(_build):
+ # integrate build_message
+ def has_messages(self):
+ return True
+
+ def initialize_options(self):
+ _build.initialize_options(self)
+ self.build_messages = None
+
+ def finalize_options(self):
+ _build.finalize_options(self)
+ if self.build_messages is None:
+ self.build_messages = os.path.join(self.build_base,
+ 'po')
+
+ _build.user_options.append(('build-messages=', None,
+ "build directory for messages"))
+ _build.sub_commands.append(('build_messages', has_messages))
+
+class install_messages(Command):
+
+ description = 'Installs message catalogs'
+
+ user_options = [
+ ('install-dir=', 'd', "directory to install scripts to"),
+ ('build-dir=','b', "build directory (where to install from)"),
+ ('skip-build', None, "skip the build steps"),
+ ]
+
+ boolean_options = ['skip-build']
+
+ def initialize_options(self):
+ self.install_dir = None
+ self.build_dir = None
+ self.skip_build = None
+
+ def finalize_options(self):
+ self.set_undefined_options('build', ('build_messages', 'build_dir'))
+ self.set_undefined_options('install',
+ ('install_data', 'install_dir'),
+ ('force', 'force'),
+ ('skip_build', 'skip_build'),
+ )
+ self.install_dir = os.path.join(self.install_dir, 'share', 'locale')
+
+ def run(self):
+ if not self.skip_build:
+ self.run_command('build_messages')
+ catalogs = glob(os.path.join(self.build_dir, '*.gmo'))
+ for c in catalogs:
+ base = os.path.basename(c)
+ base = os.path.splitext(base)[0]
+ out_dir = os.path.join(self.install_dir, base, 'LC_MESSAGES')
+ self.mkpath(out_dir)
+ out_file = os.path.join(out_dir, '%s.mo' % self.distribution.get_name())
+ copy_file(c, out_file)
+
+class clean(_clean):
+ _clean.user_options.append(('build-messages=', None,
+ "build directory for messages (default: 'build.build-messages')"))
+
+ def initialize_options(self):
+ _clean.initialize_options(self)
+ self.build_messages = None
+
+ def finalize_options(self):
+ self.set_undefined_options('build',
+ ('build_base', 'build_base'),
+ ('build_lib', 'build_lib'),
+ ('build_scripts', 'build_scripts'),
+ ('build_temp', 'build_temp'),
+ ('build_messages', 'build_messages'))
+ self.set_undefined_options('bdist',
+ ('bdist_base', 'bdist_base'))
+ def run(self):
+ # remove the build/temp.<plat> directory (unless it's already
+ # gone)
+ if os.path.exists(self.build_temp):
+ remove_tree(self.build_temp, dry_run=self.dry_run)
+ else:
+ log.debug("'%s' does not exist -- can't clean it",
+ self.build_temp)
+
+ if self.all:
+ # remove build directories
+ for directory in (self.build_lib,
+ self.bdist_base,
+ self.build_scripts,
+ self.build_messages):
+ if os.path.exists(directory):
+ remove_tree(directory, dry_run=self.dry_run)
+ else:
+ log.warn("'%s' does not exist -- can't clean it",
+ directory)
+
+ # just for the heck of it, try to remove the base build directory:
+ # we might have emptied it right now, but if not we don't care
+ if not self.dry_run:
+ try:
+ os.rmdir(self.build_base)
+ log.info("removing '%s'", self.build_base)
+ except OSError:
+ pass
+
+## Class modified to add manpages command
+class install(_install):
+ def has_messages(self):
+ return True
+
+ def has_manpages(self):
+ return True
+
+ _install.sub_commands.append(('install_messages', has_messages))
+ _install.sub_commands.append(('install_manpages', has_manpages))
+
+### End of snippet ###
+
+class install_manpages(Command):
+
+ description = "Install man pages"
+
+ user_options = []
+
+ def initialize_options(self):
+ self.man_pages = man_pages
+ self.install_dir = None
+ self.root = None
+
+ def finalize_options(self):
+ self.set_undefined_options('install',
+ ('install_data', 'install_dir'),
+ ('root', 'root'),
+ )
+ def run(self):
+ for f in self.man_pages:
+ attrs = f.split(".")
+ dest = os.path.join(self.install_dir,"share","man")
+ try:
+ dest = os.path.join(dest,attrs[2])
+ except IndexError:
+ pass
+ dest = os.path.join(dest,"man" + attrs[1])
+ self.mkpath(dest)
+ self.copy_file(f, dest)
+
+man_pages=glob("man/*")
+
+setup(name="elogv",
+ version="0.7.5",
+ author="Luca Marturana",
+ author_email="lucamarturana@gmail.com",
+ license="GPL-2",
+ description="Curses based utility to view elogs created by Portage",
+ url="http://gechi-overlay.sourceforge.net/?page=elogv",
+ scripts=['elogv'],
+ cmdclass={'extract_messages': messages,
+ 'merge': merge,
+ 'build_messages': build_messages,
+ 'build': build,
+ 'install_messages': install_messages,
+ 'install_manpages': install_manpages,
+ 'install': install,
+ 'clean': clean}
+)