# Setup for Enamel from distutils.core import setup import sys, os, glob inst_modules = ['enamel'] #Always have enamel optionals = { 'axiom':[ 'axiom', 'axiom.benchmarks', 'axiom.examples', 'axiom.plugins', 'axiom.scripts', 'axiom.test' ], 'epsilon':[ 'epsilon', 'epsilon.test', 'epsilon.scripts', 'epsilon.hotfixes' ], 'formal':[ 'formal', 'formal.widgets', 'formal.examples', 'formal.test' ], 'formless':['formless', 'formless.test'], 'nevow':[ 'nevow', 'nevow.flat','nevow.scripts', 'nevow.test', 'nevow.taglibrary','nevow.plugins', 'nevow.livetrial' ], 'sasync':['sasync', 'sasync.datacator'], 'sqlalchemy':[ 'sqlalchemy', 'sqlalchemy.databases', 'sqlalchemy.engine', 'sqlalchemy.ext', 'sqlalchemy.mapping', 'sqlalchemy.mods', 'sqlalchemy.orm' ] } package_data = { 'formal':[ '*.css', 'html/*.html', 'js/*.js' ], 'formal.examples':[ '*.css' ], 'enamel':[ 'docs/*.txt', 'bin/*' ], 'formless': [ 'freeform-default.css' ], 'nevow': [ 'Canvas.swf', '*.css', 'js/Divmod/*.js', 'js/Nevow/*.js', 'js/Nevow/Athena/Tests/*.js', 'js/Divmod/Runtime/*.js', 'js/Nevow/Athena/*.js', 'js/Nevow/TagLibrary/*.js', ], 'nevow.athena_private': [ '*.png' ], 'nevow.taglibrary': [ '*.css', '*.js' ], 'nevow.livetrial': [ '*.css', '*.js' ], 'nevow.test': [ '*.js' ], 'nevow.test.test_package.Foo': [ '*.js' ], 'nevow.test.test_package.Foo.Baz': [ '*.js' ], } # Locate site-packages sitePackRoot = "" for path in sys.path: if 'site-packages' in path and not 'site-packages/' in path: sitePackRoot = path sitePackList = os.listdir(sitePackRoot) # Check for various bits. If they aren't there then we provide. for package, modules in optionals.items(): if package in sitePackList: print "%s is already installed at another version - It will not be installed!" % package else: inst_modules.extend(modules) print inst_modules # Stolen from Nevow... sorry :) data_files = [] for pkg, patterns in package_data.items(): if pkg in inst_modules: pkgdir = os.path.join(*pkg.split('.')) for pattern in patterns: globdir = os.path.dirname(pattern) files = glob.glob(os.path.join(pkgdir, pattern)) data_files.append((os.path.join(sitePackRoot,pkgdir,globdir),files)) # Some tests first required = ['pysqlite2', 'twisted', 'zope.interface'] failed = [] for requisit in required: try: __import__(requisit) except: failed.append(requisit) if not failed: setup(name='enamel', version='0.1', packages=inst_modules, data_files=data_files ) else: print "The following required modules were not found: ", ", ".join(failed) try: os.system('chmod a+x %s' % os.path.join(sitePackRoot,'enamel','bin','enamel')) os.system('ln -s %s /usr/bin/enamel' % os.path.join(sitePackRoot,'enamel','bin','enamel')) except: print "Unable to link enamel binary"