#!/usr/bin/env python
"""Installs SimpleParse using distutils
Run:
python setup.py install
to install the packages from the source archive.
"""
from distutils.command.install_data import install_data
from distutils.core import Extension
from distutils.sysconfig import *
from distutils.core import setup
import os, sys, string
def isPackage( filename ):
return os.path.isdir(filename) and os.path.isfile( os.path.join(filename,'__init__.py'))
def packagesFor( filename, basePackage="" ):
"""Find all packages in filename"""
set = {}
for item in os.listdir(filename):
dir = os.path.join(filename, item)
if string.lower(item) != 'cvs' and isPackage( dir ):
if basePackage:
moduleName = basePackage+'.'+item
else:
moduleName = item
set[ moduleName] = dir
set.update( packagesFor( dir, moduleName))
return set
def npFilesFor( dirname, baseDirectory=None ):
"""Return all non-python-file filenames in dir"""
result = []
allResults = []
badExtensions = (
'.py','.pyc','.pyo', '.scc','.exe','.zip','.gz', '.def','.so',
'.c','.h','.pkg','.in',
)
for name in os.listdir(dirname):
path = os.path.join( dirname, name )
if os.path.isfile( path) and string.lower(os.path.splitext( name )[1]) not in badExtensions:
result.append( path )
elif os.path.isdir( path ) and name.lower() !='cvs':
allResults.extend( npFilesFor(path,baseDirectory))
if result:
if baseDirectory is not None:
dirname = os.path.join( baseDirectory, dirname )
allResults.append( (dirname, result))
return allResults
##############
## Following is from Pete Shinners,
## apparently it will work around the reported bug on
## some unix machines where the data files are copied
## to weird locations if the user's configuration options
## were entered during the wrong phase of the moon :) .
from distutils.command.install_data import install_data
class smart_install_data(install_data):
def run(self):
#need to change self.install_dir to the library dir
install_cmd = self.get_finalized_command('install')
self.install_dir = getattr(install_cmd, 'install_lib')
return install_data.run(self)
##############
packages = packagesFor( ".", 'simpleparse' )
packages.update( {'simpleparse':'.'} )
dataFiles = (
# XXX ick this is messy!
npFilesFor( 'doc','simpleparse' ) +
npFilesFor( 'stt','simpleparse' )
)
if __name__ == "__main__":
from sys import hexversion
if hexversion >= 0x2030000:
# work around distutils complaints under Python 2.2.x
extraArguments = {
'classifiers': [
"""Programming Language :: Python""",
"""Topic :: Software Development :: Libraries :: Python Modules""",
"""Intended Audience :: Developers""",
],
'keywords': 'parse,parser,parsing,text,ebnf,grammar,generator',
'long_description' : """A Parser Generator for Python (w/mxTextTools derivative)
Provides a moderately fast parser generator for use with Python,
includes a forked version of the mxTextTools text-processing library
modified to eliminate recursive operation and fix a number of
undesirable behaviours.
Converts EBNF grammars directly to single-pass parsers for many
largely deterministic grammars.
""",
'platforms': ['Any'],
}
else:
extraArguments = {
}
setup (
name = "SimpleParse",
version = "2.1.0a1",
description = "A Parser Generator for Python (w/mxTextTools derivative)",
author = "Mike C. Fletcher",
author_email = "mcfletch@users.sourceforge.net",
url = "http://simpleparse.sourceforge.net/",
package_dir = packages,
packages = packages.keys(),
data_files = dataFiles,
cmdclass = {'install_data':smart_install_data},
ext_modules=[
Extension(
"simpleparse.stt.TextTools.mxTextTools.mxTextTools",
[
'stt/TextTools/mxTextTools/mxTextTools.c',
'stt/TextTools/mxTextTools/mxte.c',
'stt/TextTools/mxTextTools/mxbmse.c',
],
include_dirs=['stt/TextTools/mxTextTools']
),
],
**extraArguments
)
syntax highlighted by Code2HTML, v. 0.9.1