summaryrefslogtreecommitdiff
path: root/setup.py
diff options
context:
space:
mode:
Diffstat (limited to 'setup.py')
-rw-r--r--setup.py178
1 files changed, 151 insertions, 27 deletions
diff --git a/setup.py b/setup.py
index e861f392..60926779 100644
--- a/setup.py
+++ b/setup.py
@@ -1,46 +1,170 @@
-#!/usr/bin/python
+# Copyright (C) 2011 - 2014 Codethink Limited
#
-# Copyright (C) 2012 Codethink Limited
-#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
-#
+#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-#
+#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+'''Setup.py for morph.'''
+
+
from distutils.core import setup
+from distutils.cmd import Command
+from distutils.command.build import build
+from distutils.command.clean import clean
+import glob
+import os
+import os.path
+import shutil
+import stat
+import subprocess
+
+import cliapp
+
+import morphlib
+
+
+class GenerateResources(build):
+
+ def run(self):
+ if not self.dry_run:
+ self.generate_manpages()
+ self.generate_version()
+ build.run(self)
+
+ # Set exec permissions on deployment extensions.
+ for dirname, subdirs, basenames in os.walk('morphlib/exts'):
+ for basename in basenames:
+ orig = os.path.join(dirname, basename)
+ built = os.path.join('build/lib', dirname, basename)
+ st = os.lstat(orig)
+ bits = (st.st_mode &
+ (stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH))
+ if bits != 0:
+ st2 = os.lstat(built)
+ os.chmod(built, st2.st_mode | bits)
+
+ def generate_manpages(self):
+ self.announce('building manpages')
+ for x in ['morph']:
+ with open('%s.1' % x, 'w') as f:
+ subprocess.check_call(['python', x,
+ '--generate-manpage=%s.1.in' % x,
+ '--output=%s.1' % x], stdout=f)
+
+ def generate_version(self):
+ target_dir = os.path.join(self.build_lib, 'morphlib')
+
+ self.mkpath(target_dir)
+
+ def save_git_info(filename, *args):
+ path = os.path.join(target_dir, filename)
+ command = ['git'] + list(args)
+
+ self.announce('generating %s with %s' %
+ (path, ' '.join(command)))
+
+ with open(os.path.join(target_dir, filename), 'w') as f:
+ cwd = os.path.dirname(__file__) or '.'
+ p = subprocess.Popen(command,
+ cwd=cwd,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT)
+ o = p.communicate()
+ if p.returncode:
+ raise subprocess.CalledProcessError(p.returncode, command)
+ f.write(o[0].strip())
+
+ save_git_info('version', 'describe', '--abbrev=40', '--always',
+ '--dirty=-unreproducible',
+ '--match=DO-NOT-MATCH-ANY-TAGS')
+ save_git_info('commit', 'rev-parse', 'HEAD^{commit}')
+ save_git_info('tree', 'rev-parse', 'HEAD^{tree}')
+ save_git_info('ref', 'rev-parse', '--symbolic-full-name', 'HEAD')
+
+class Clean(clean):
+
+ clean_files = [
+ '.coverage',
+ 'build',
+ 'unittest-tempdir',
+ ]
+ clean_globs = [
+ '*/*.py[co]',
+ ]
+
+ def run(self):
+ clean.run(self)
+ itemses = ([self.clean_files] +
+ [glob.glob(x) for x in self.clean_globs])
+ for items in itemses:
+ for filename in items:
+ if os.path.isdir(filename):
+ shutil.rmtree(filename)
+ elif os.path.exists(filename):
+ os.remove(filename)
+
+
+class Check(Command):
+
+ user_options = [
+ ]
+
+ def initialize_options(self):
+ pass
+
+ def finalize_options(self):
+ pass
+
+ def run(self):
+ subprocess.check_call(['python', '-m', 'CoverageTestRunner',
+ '--ignore-missing-from=without-test-modules',
+ 'morphlib', 'distbuild'])
+ os.remove('.coverage')
-setup(name='morph-cache-server',
- description='FIXME',
- long_description='''\
-FIXME
-''',
+setup(name='morph',
classifiers=[
- 'Development Status :: 2 - Pre-Alpha',
- 'Environment :: Console',
- 'Environment :: Web Environment',
- 'Intended Audience :: Developers',
- 'Intended Audience :: System Administrators',
- 'License :: OSI Approved :: GNU General Public License (GPL)',
- 'Operating System :: POSIX :: Linux',
- 'Programming Language :: Python',
- 'Topic :: Software Development :: Build Tools',
- 'Topic :: Software Development :: Embedded Systems',
- 'Topic :: System :: Archiving :: Packaging',
- 'Topic :: System :: Software Distribution',
+ 'Development Status :: 2 - Pre-Alpha',
+ 'Environment :: Console',
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: GNU General Public License (GPL)',
+ 'Operating System :: POSIX :: Linux',
+ 'Programming Language :: Python',
+ 'Topic :: Software Development :: Build Tools',
+ 'Topic :: Software Development :: Embedded Systems',
+ 'Topic :: System :: Archiving :: Packaging',
+ 'Topic :: System :: Software Distribution',
],
- author='Jannis Pohlmann',
- author_email='jannis.pohlmann@codethink.co.uk',
+ author='Codethink Limited',
+ author_email='baserock-dev@baserock.org',
url='http://www.baserock.org/',
- scripts=['morph-cache-server'],
- packages=['morphcacheserver'],
- )
+ scripts=['morph', 'distbuild-helper', 'morph-cache-server'],
+ packages=['morphlib', 'morphlib.plugins', 'distbuild',
+ 'morphcacheserver'],
+ package_data={
+ 'morphlib': [
+ 'xfer-hole',
+ 'recv-hole',
+ 'exts/*',
+ 'version',
+ 'commit',
+ 'tree',
+ 'ref',
+ ]
+ },
+ data_files=[('share/man/man1', glob.glob('*.[1-8]'))],
+ cmdclass={
+ 'build': GenerateResources,
+ 'check': Check,
+ 'clean': Clean,
+ })