| #!/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 |