-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup.py
145 lines (123 loc) · 4.52 KB
/
setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#$Id$
from distutils.core import setup, Extension
import os
FD = 0
srcp = 'cassowary'
include_path= [ '.', ]
#wraps = [ 'csw.cpp' ]
wraps = [ 'csw.i' ]
pys = [ 'csw', ]
src = [
'AbstractVariable.cc',
'Constraint.cc',
'DummyVariable.cc',
'FloatVariable.cc',
'LinearExpression.cc',
'SimplexSolver.cc',
'SlackVariable.cc',
'Solver.cc',
'Strength.cc',
'SymbolicWeight.cc',
'Tableau.cc',
'Variable.cc',
'Errors.cc',
]
defs = [ 'HAVE_CONFIG_H',
# 'TRACE_NEWDEL', #put this to trace memallocs
# 'TRACE_REFCOUNT_DIE', #put this to trace refcounting
]
if 'TRACE_NEWDEL' in defs: src+= [ 'my/new_del.cpp' ]
#defs += [ 'CL_NO_IO' ]
#+ CL_NO_DEPRECATED
libs = [ 'stdc++' ]
if (FD):
src += [ 'FDBinaryOneWayConstraint.cc',
'FDConnectorVariable.cc', 'FDSolver.cc', 'FDVariable.cc',
]
libs += [ 'GTL' ]
defs += [ 'CL_HAVE_GTL', 'CL_BUILD_FD_SOLVER' ]
sources = map( lambda s: os.path.join( srcp,s),src) + wraps
#how else to control sdist...?
this = 'setup.py'
manf = 'MANIFEST.in'
manifest = [
srcp+'/*.h'
,'test.py'
,'explan.cpp'
]
def manifest_template( setupf,manf,manifest):
from distutils.dep_util import newer
if (newer(setupf,manf)):
print '..creating', manf
f = open( manf, "w")
for name in [ setupf, manf ] + manifest :
f.write( 'include '+name + '\n')
f.close()
manifest_template( this,manf,manifest)
csw = Extension( name = '_csw'
,sources = sources
,include_dirs = include_path
,define_macros = map( lambda s: (s,None), defs )
,libraries = libs
,extra_compile_args = []#'-pedantic-errors' ] #'-O5',
,swig_opts = [ '-c++', ] + [ '-D'+s for s in defs ]
)
#csw.swig_cpp = [ '-c++', '-keyword', '-ignoremissing' ] + map(...)
#csw.swig_opts = [ '-c++', ] + [ '-D'+s for s in defs ]
#############
## XXX distutils is still stupid and broken;
## only the old --swig-cpp works for build_ext, the new --swig-opts=-c++ does not!
swigcpp = '--swig-cpp'
import sys
argv = sys.argv
if swigcpp not in argv:
#forced to run with setup.py build --swig-cpp
#dont use swig-opts - disables extention.swig_opts above
if 'install' in argv and 'build_ext' not in argv:
argv.insert( argv.index( 'install' ), 'build_ext')
if 'build' in argv and 'build_ext' not in argv:
argv.insert( argv.index( 'build' ), 'build_ext')
if 'build_ext' in argv:
argv.insert( 1+argv.index( 'build_ext' ), swigcpp)
print ' warn: re-building this works on gcc 3.3* and gcc-4.1; strip the result lib when ready'
setup( name = 'cassowarypy',
description = 'cassowarypy: python-wrap of Cassowary linear constraint solver',
version = '0.27',
py_modules = pys,
ext_modules = [ csw ],
author = 'svilen dobrev',
author_email= 'svilen_dobrev at users point sourceforge point net',
url= 'http://dbcook.sourceforge.net/readme-cassowarypy',
license = 'MIT',
classifiers='''
Development Status :: 5 - Production/Stable
Intended Audience :: Developers
License :: OSI Approved :: MIT License
Programming Language :: Python
Topic :: Scientific/Engineering :: Mathematics
Topic :: Software Development :: Libraries :: Python Modules
'''.strip().split('\n'),
long_description= '''\
This is a python wrapper over the (famous) Cassowary incremental constraint solver.
It uses the c++ implementation (0.6) as backend.
The original c++ code is somewhat refactored to remove memory leaks
by using reference counting, and is usable alone.
The refactoring was done somewhen in 2002, and the code is not touched much since then.
Last changes are workarounding recent template-things in new (gcc-4.x) c++ compilers.
The Finite-domain part (using GTL graph library) is not tried/tested; it might or might not work.
repository: svn co https://dbcook.svn.sf.net/svnroot/dbcook/cassowarypy
how to compile/install for python:
* the c++ code now compiles on both g++ 3.3.3 and g++ 4.1.3.
it also compiles on some MSVC.
* 'swig' is also needed
* if the default C++ compiler is one of those, just 'python setup.py install' would do.
Then run python test.py to see if all works.
* else, u have to install one of these compilers and fight with distutils to make it use that one.
e.g. "CC=g++-3.3 python setup.py install" might work; also check the link'ing part
My code is under MIT-license.
Original Cassowary code is licensed under LGPL.
Original cassowary Web Page: (last update about year 2000)
http://www.cs.washington.edu/research/constraints/cassowary
''',
)
# vim:ts=4:sw=4:expandtab