import os, string, re, sys # Check to see if the Egg system is installed (ie, setuptools) # See http://peak.telecommunity.com/DevCenter/PythonEggs USE_EGGS=1 try: from setuptools import setup except ImportError: from distutils.core import setup USE_EGGS=0 from distutils.core import Extension from distutils import sysconfig VERSION = "0.10.5" INC_DIRS = ["../"] LIBRARIES = ["neo_cgi", "neo_cs", "neo_utl"] LIB_DIRS = ["../libs"] CC = "gcc" LDSHARED = "gcc -shared" ## ARGGH!! It looks like you can only specify a single item on the ## command-line or in the setup.cfg file for options which take multiple ## lists... and it overrides what is defined here. So I have to do all ## the work of the configure file AGAIN here. At least its in python, ## which is easier... ## Actually, forget that, I'm just going to load and parse the rules.mk ## file and build what I need if not os.path.exists("../rules.mk"): raise "You need to run configure first to generate the rules.mk file!" make_vars = { 'NEOTONIC_ROOT' : '..' } rules = open("../rules.mk").read() for line in string.split(rules, "\n"): parts = string.split(line, '=', 1) if len(parts) != 2: continue var, val = parts var = string.strip(var) make_vars[var] = val if var == "CFLAGS": matches = re.findall("-I(\S+)", val) inserted = [] for inc_path in matches: # inc_path = match.group(1) if inc_path not in INC_DIRS: inserted.append(inc_path) sys.stderr.write("adding inc_path %s\n" % inc_path) INC_DIRS = inserted + INC_DIRS elif var == "LIBS": matches = re.findall("-l(\S+)", val) inserted = [] for lib in matches: # lib = match.group(1) if lib not in LIBRARIES: inserted.append(lib) sys.stderr.write("adding lib %s\n" % lib) LIBRARIES = inserted + LIBRARIES elif var == "LDFLAGS": matches = re.findall("-L(\S+)", val) inserted = [] for lib_path in matches: # lib_path = match.group(1) if lib_path not in LIB_DIRS: inserted.append(lib_path) sys.stderr.write("adding lib_path %s\n" % lib_path) LIB_DIRS = inserted + LIB_DIRS elif var == "CC": CC = val elif var == "LDSHARED": LDSHARED = val def expand_var(var, vars): def replace_var(m, variables=vars): var = m.group(1) if var[:2] == "$(" and var[-1] == ")": var = variables.get(var[2:-1], "") return var while 1: new_var = re.sub('(\$\([^\)]*\))', replace_var, var) if new_var == var: break var = new_var return var.strip() def expand_vars(vlist, vars): nlist = [] for val in vlist: val = expand_var(val, vars) if val: nlist.append(val) return nlist INC_DIRS = expand_vars(INC_DIRS, make_vars) LIB_DIRS = expand_vars(LIB_DIRS, make_vars) LIBRARIES = expand_vars(LIBRARIES, make_vars) CC = os.environ.get('CC', expand_var(CC, make_vars)) LDSHARED = os.environ.get('LDSHARED', expand_var(CC, make_vars)) # HACK! The setup/Makefile may not have the hermetic/cross-compiler entries # for the compiler that we need, so override them here! given_cc = sysconfig.get_config_var('CC') if given_cc != CC and given_cc[0] != '/': sys.stderr.write("Overriding setup's CC from %s to %s\n" % (given_cc, CC)) try: sysconfig._config_vars['CC'] = CC sysconfig._config_vars['LDSHARED'] = LDSHARED except AttributeError: pass setup_args = { 'name': "clearsilver", 'version': VERSION, 'description': "Python ClearSilver Wrapper", 'author': "Brandon Long", 'author_email': "blong@fiction.net", 'url': "http://www.clearsilver.net/", 'ext_modules': [Extension( name="neo_cgi", sources=["neo_cgi.c", "neo_cs.c", "neo_util.c"], include_dirs=INC_DIRS, library_dirs=LIB_DIRS, libraries=LIBRARIES, )] } if USE_EGGS: setup_args['zip_safe'] = 0 apply(setup, [], setup_args)