blob: 39466809ceb471238f02b6a15445f6c0a726ca31 [file] [log] [blame]
#!/bin/sh
# Patch directly in the source tree. Ignore if the patch has already been
# applied. (Probably there are situations where CMake isn't smart enough to
# prevent that.)
# generated by "diff -Naur old/setup.py new/setup.py"
patch -N -p1 <<'EOF'
--- old/setup.py 2014-11-07 16:20:27.000000000 -0800
+++ new/setup.py 2014-11-07 16:21:54.000000000 -0800
@@ -21,152 +21,6 @@
from distutils.core import setup, Command
-# Stupid little command to automatically update the version number
-# where it needs to be updated.
-class update_version (Command):
- # Brief (40-50 characters) description of the command
- description = "Substitute @VERSION@ in relevant files"
-
- # List of option tuples: long name, short name (None if no short
- # name), and help string.
- user_options = [ ]
- boolean_options = [ ]
-
- # Files in the distribution that need to be rewritten when the
- # version number changes
- files = ( 'README.txt', 'pyxb/__init__.py', 'doc/conf.py' )
-
- # The substitutions (key braced by @ signs)
- substitutions = { 'VERSION' : version,
- 'THIS_YEAR' : datetime.date.today().strftime('%Y'),
- 'SHORTVERSION' : '.'.join(version.split('.')[:2]) }
-
- def initialize_options (self):
- pass
-
- def finalize_options (self):
- pass
-
- def run (self):
- for f in self.files:
- text = open('%s.in' % (f,)).read()
- for (k, v) in self.substitutions.items():
- text = text.replace('@%s@' % (k,), v)
- os.chmod(f, os.stat(f)[stat.ST_MODE] | stat.S_IWUSR | stat.S_IWGRP | stat.S_IWOTH)
- open(f,'w').write(text)
- os.chmod(f, os.stat(f)[stat.ST_MODE] & ~(stat.S_IWUSR | stat.S_IWGRP | stat.S_IWOTH))
-
-class test (Command):
-
- # Brief (40-50 characters) description of the command
- description = "Run all unit tests found in testdirs"
-
- # List of option tuples: long name, short name (None if no short
- # name), and help string.
- user_options = [ ( 'testdirs=', None, 'colon separated list of directories to search for tests' ),
- ( 'trace-tests', 'v', 'trace search for tests' ),
- ( 'inhibit-output', 'q', 'inhibit test output' ),
- ]
- boolean_options = [ 'trace-tests', 'inhibit-output' ]
-
- def initialize_options (self):
- self.trace_tests = None
- self.inhibit_output = None
- self.testdirs = 'tests'
-
- def finalize_options (self):
- pass
-
- # Regular expression that matches unittest sources
- __TestFile_re = re.compile('^test.*\.py$')
-
- def run (self):
- # Make sure log messages are supported
- logging.basicConfig()
-
- # Walk the tests hierarchy looking for tests
- dirs = self.testdirs.split(':')
- tests = [ ]
- while dirs:
- dir = dirs.pop(0)
- if self.trace_tests:
- print('Searching for tests in %s' % (dir,))
- for f in os.listdir(dir):
- fn = os.path.join(dir, f)
- statb = os.stat(fn)
- if stat.S_ISDIR(statb[0]):
- dirs.append(fn)
- elif self.__TestFile_re.match(f):
- tests.append(fn)
-
- number = 0
- import sys
- import traceback
- import unittest
- import types
-
- # Import each test into its own module, then add the test
- # cases in it to a complete suite.
- loader = unittest.defaultTestLoader
- suite = unittest.TestSuite()
- used_names = set()
- for fn in tests:
- stage = 'compile'
- try:
- # Assign a unique name for this test
- test_name = os.path.basename(fn).split('.')[0]
- test_name = test_name.replace('-', '_')
- number = 2
- base_name = test_name
- while test_name in used_names:
- test_name = '%s%d' % (base_name, number)
- number += 1
-
- # Read the test source in and compile it
- rv = compile(open(fn).read(), test_name, 'exec')
- state = 'evaluate'
-
- # Make a copy of the globals array so we don't
- # contaminate this environment.
- g = globals().copy()
-
- # The test cases use __file__ to determine the path to
- # the schemas
- g['__file__'] = fn
-
- # Create a module into which the test will be evaluated.
- module = types.ModuleType(test_name)
-
- # The generated code uses __name__ to look up the
- # containing module in sys.modules.
- g['__name__'] = test_name
- sys.modules[test_name] = module
-
- # Import the test into the module, making sure the created globals look like they're in the module.
- eval(rv, g)
- module.__dict__.update(g)
-
- # Find all subclasses of unittest.TestCase that were
- # in the test source and add them to the suite.
- for (nm, obj) in g.items():
- if (type == type(obj)) and issubclass(obj, unittest.TestCase):
- suite.addTest(loader.loadTestsFromTestCase(obj))
- if self.trace_tests:
- print('%s imported' % (fn,))
- except Exception as e:
- print('%s failed in %s: %s' % (fn, stage, e))
- raise
-
- # Run everything
- verbosity = 1
- if self.trace_tests:
- verbosity = 2
- elif self.inhibit_output:
- # Don't know how to do this for real
- verbosity = 0
- runner = unittest.TextTestRunner(verbosity=verbosity)
- runner.run(suite)
-
import glob
import sys
import pyxb.utils.utility
@@ -177,44 +31,6 @@
]
package_data = {}
-init_re = re.compile('^__init__\.py$')
-wxs_re = re.compile('^.*\.wxs$')
-
-setup_path = os.path.dirname(__file__)
-bundle_base = os.path.join(setup_path, 'pyxb', 'bundles')
-possible_bundles = []
-try:
- possible_bundles.extend(os.listdir(bundle_base))
-except OSError as e:
- print("Directory %s bundle search failed: %s" % (bundle_base, e))
-for possible_bundle in possible_bundles:
- bundle_root = os.path.join(bundle_base, possible_bundle)
- if not os.path.isdir(bundle_root):
- continue
- b_packages = []
- b_data = { }
- for fp in pyxb.utils.utility.GetMatchingFiles('%s//' % (bundle_root,), init_re):
- bundle_path = os.path.dirname(os.path.normpath(fp))
- try:
- package_relpath = os.path.relpath(bundle_path, setup_path)
- except AttributeError as e:
- package_relpath = bundle_path
- if setup_path and '.' != setup_path:
- prefix_path = setup_path + os.path.sep
- if not package_relpath.startswith(prefix_path):
- print("Unable to determine relative path from %s to %s installation" % (setup_path, bundle_path))
- sys.exit(1)
- package_relpath = package_relpath[len(prefix_path):]
- package = package_relpath.replace(os.path.sep, '.')
- b_packages.append(package)
- wxs_files = [os.path.basename(_f) for _f in pyxb.utils.utility.GetMatchingFiles(bundle_path, wxs_re) ]
- if wxs_files:
- b_data[package] = wxs_files
- if 0 < len(b_data):
- print('Found bundle in %s' % (bundle_root,))
- packages.extend(b_packages)
- package_data.update(b_data)
-
setup(name='PyXB',
description = 'PyXB ("pixbee") is a pure Python package that generates Python source code for classes that correspond to data structures defined by XMLSchema.',
author='Peter A. Bigot',
@@ -254,13 +70,9 @@
''',
provides=[ 'PyXB' ],
packages=packages,
- package_data=package_data,
# I normally keep these in $purelib, but distutils won't tell me where that is.
# We don't need them in the installation anyway.
#data_files= [ ('pyxb/standard/schemas', glob.glob(os.path.join(*'pyxb/standard/schemas/*.xsd'.split('/'))) ) ],
- scripts=[ 'scripts/pyxbgen', 'scripts/pyxbwsdl', 'scripts/pyxbdump' ],
- cmdclass = { 'test' : test,
- 'update_version' : update_version },
classifiers = [ 'Development Status :: 5 - Production/Stable'
, 'Intended Audience :: Developers'
, 'License :: OSI Approved :: Apache Software License'
EOF