| |
| 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) |