d09f6b3016
git-svn-id: svn://localhost/trunk/ardour2@4 d708f5d6-7413-0410-9779-e7cbd77b26cf
242 lines
8.4 KiB
Plaintext
242 lines
8.4 KiB
Plaintext
Cassowary Constraint Solving Toolkit for C++, Java, and Smalltalk
|
||
Version 0.60
|
||
|
||
Web Page: http://www.cs.washington.edu/research/constraints/cassowary
|
||
Contact: cassowary@cs.washington.edu
|
||
|
||
Greg J. Badros <gjb@cs.washington.edu> and
|
||
Alan Borning <borning@cs.washington.edu>
|
||
University of Washington
|
||
Computer Science and Engineering
|
||
Seattle, WA 98195-2350
|
||
12-March-2000
|
||
|
||
with Constraint Drawing Applet (CDA) by Michael Noth <noth@cs.washington.edu>
|
||
|
||
See ANNOUNCE for a brief description and announcement of this distribution.
|
||
See NEWS for a history of user-visible changes.
|
||
See ChangeLog for a detailed listing of the changes to each source file.
|
||
See LICENSE for legalese regarding use of this distribution.
|
||
|
||
The Smalltalk implementation is in the public domain -- see smalltalk/README.
|
||
|
||
Please send bug reports to cassowary@cs.washington.edu
|
||
|
||
Also, send mail to cassowary@cs.washington.edu if you would like to be
|
||
informed about bug fixes, feature enhancements, etc. Let us know what
|
||
implementation(s) you are using, too.
|
||
|
||
------------------------------------------------------------------
|
||
|
||
HOW TO GET STARTED
|
||
|
||
The Cassowary library uses GNU autoconf to permit easy building on
|
||
various platforms. You should be able to do:
|
||
|
||
./configure
|
||
make
|
||
|
||
and everything will work. A more complex, but realistic example is:
|
||
|
||
./configure --with-prefix=/usr/contrib \
|
||
--with-guile-prefix=/usr/contrib \
|
||
--with-python-headers=/usr/include/python1.5 \
|
||
--enable-java-build \
|
||
--with-gtl=/usr/contrib \
|
||
--with-java-class-path=/usr/contrib/share/java/site \
|
||
--enable-warnings
|
||
make -k
|
||
|
||
Be sure to give the extra --enable-permissive flag to configure if
|
||
you are building with gcc-2.95 or more recent.
|
||
|
||
As yet another data point, I build Cassowary with:
|
||
|
||
./configure --with-guile-exec-prefix=/uns/bin \
|
||
--with-guile-prefix=/uns/share --prefix=/uns/share \
|
||
--exec-prefix=/uns --enable-maintainer-mode
|
||
|
||
See the file "INSTALL" for more details about
|
||
autoconf support and the options that the "configure" takes. You can
|
||
also do "./configure --help" for the list of the options that configure
|
||
accepts.
|
||
|
||
If the make in any of the subdirectories fails, you can turn on the "-k"
|
||
option to make, or just do make in the subdirectories that you want
|
||
build. E.g., if you do not have the JDK installed, the Java version of
|
||
Cassowary might not compile; if you still want the guile version, just
|
||
"cd guile; make -k".
|
||
|
||
Be sure that configure detects the validity of using the "-fpermissive"
|
||
flag of more recent g++/egcs compilers to work around some
|
||
const-discrepancies between the const-challenged guile header files and
|
||
Cassowary's more const-correct usage. You should get a message like:
|
||
|
||
checking whether gcc understands -fpermissive option... yes
|
||
|
||
when running configure if you're using, e.g., gcc-2.95 or later.
|
||
|
||
You need to apply GTL.h.patch to the installed GTL.h header file for
|
||
Cassowary to compile with recent versions of egcs/gcc (e.g., gcc-2.95).
|
||
|
||
Also, you may need to change libguile/gsubr.h from:
|
||
|
||
extern SCM scm_make_gsubr SCM_P ((char *name, int req, int opt,
|
||
int rst, SCM (*fcn)()));
|
||
to
|
||
|
||
extern SCM scm_make_gsubr SCM_P ((char *name, int req, int opt,
|
||
int rst, void*));
|
||
|
||
or patch guile's snarf.h to insert the appropriate case at each call to
|
||
SCM_PROC and SCM_PROC1. (Thanks to Alexandre Duret-Lutz for the above
|
||
information about more recent g++/egcs compilers).
|
||
|
||
Note that the generated Makefiles depend upon features of GNU Make. See:
|
||
|
||
ftp://ftp.gnu.org/pub/gnu/
|
||
|
||
for a version of make that you can build first to then build Cassowary.
|
||
|
||
Example applications exist in subdirectories of the top-level
|
||
implementation subdirectories (e.g., c++/qdemos contains demos for C++
|
||
that use the Qt Widget toolkit).
|
||
|
||
Please send mail to cassowary@cs.washington.edu if you are using this
|
||
toolkit so we know how to reach you for bug fixes, updates, etc.
|
||
|
||
------------------------------------------------------------------
|
||
|
||
WHAT THE DISTRIBUTION CONTAINS
|
||
|
||
This distribution contains 3 implementations of the Cassowary constraint
|
||
solving toolkit:
|
||
|
||
o C++
|
||
o Java
|
||
o Smalltalk
|
||
|
||
For each implementation language, there is at least one example program;
|
||
for some there are many.
|
||
|
||
There is a wrapping of the C++ solver in Guile-Scheme -- see the guile/
|
||
subdirectory. Also, Anthony Beuriv<69> has wrapped Cassowary for
|
||
STk/Scheme. His code is available at:
|
||
|
||
http://dept-info.labri.u-bordeaux.fr/~beurive/Code
|
||
|
||
and the STk Scheme system is available at:
|
||
|
||
http://kaolin.unice.fr/STk/
|
||
|
||
There is also a SWIG-generated wrapper of the C++ library making the
|
||
solver available from the Python language.
|
||
|
||
A technical report describing the solver, its interface, and its
|
||
implementation is in cassowary-tr.ps (pdf version in cassowary-tr.pdf).
|
||
This paper is required reading if you intend to use the solver in your
|
||
own project(s).
|
||
|
||
See also the Scwm (Scheme Constraints Window Manager) web page:
|
||
|
||
http://scwm.mit.edu/scwm/
|
||
|
||
Scwm, also by Greg Badros (and Maciej Stachowiak), is the most
|
||
substantial application using this toolkit that we are aware of.
|
||
|
||
------------------------------------------------------------------
|
||
|
||
VARIOUS IMPLEMENTATION NOTES
|
||
|
||
Cassowary/C++ needs to be compiled using a modern C++ compiler.
|
||
At one time or another, it has compiled using:
|
||
o egcs-1.0.1
|
||
o egcs-1.0.3a
|
||
o egcs-1.1b
|
||
o egcs-1.1.1
|
||
o gcc-2.8.1 (needs libstdc++-2.8.x, too)
|
||
o Visual C++ 5.0 (not tried recently)
|
||
|
||
In particular, Cassowary will *not* build with gcc-2.7.x.x!
|
||
|
||
See c++/README for more details about building the C++ version.
|
||
|
||
The C++ implementation of the toolkit also has an optional finite domain
|
||
subsolver. You need to build and install the GTL -- the Graph Template
|
||
Library -- and use the "--with-gtl=DIR" configure option for the finite
|
||
domain subsolver to be built. GTL is available from:
|
||
|
||
http://www.fmi.uni-passau.de/Graphlet/GTL/
|
||
|
||
Cassowary was tested against GTL-0.3.1; it may work with later
|
||
versions, but I have not tried it. You need to apply GTL.h.patch to
|
||
the installed GTL.h header file for Cassowary to compile with recent
|
||
versions of egcs/gcc (e.g., gcc-2.95).
|
||
|
||
Cassowary/Java was developed using Sun's JDK-1.1.x, ported to Linux
|
||
More recent versions should work fine.
|
||
|
||
See java/README for more details about building the Java version.
|
||
|
||
|
||
Cassowary/Smalltalk was written under OTI Smalltalk-- other versions of
|
||
smalltalk will likely require (possibly significant) changes.
|
||
|
||
See smalltalk/README for more details about the Smalltalk version.
|
||
|
||
See guile/README for details about the Guile Scheme wrapper of the C++
|
||
implementation, and for a pointer to SCWM, the Scheme Constraints Window
|
||
Manager which uses Cassowary.
|
||
|
||
The Python bindings (by Tessa Lau) bindings for the Cassowary library
|
||
are in the wrappers/ subdirectory. SWIG was used in wrapping the
|
||
library. These bindings may no longer work, and are provided only for
|
||
your hacking pleasure (please send back useful patches if you do get the
|
||
code working).
|
||
|
||
For more information about SWIG, see:
|
||
|
||
http://www.swig.org/
|
||
|
||
|
||
For more information about the Python language, see:
|
||
|
||
http://www.python.org/
|
||
|
||
|
||
For more information about the Guile-Scheme language, see:
|
||
|
||
http://www.red-bean.com/guile/
|
||
http://www.fsf.org/software/guile/guile.html
|
||
|
||
|
||
------------------------------------------------------------------
|
||
|
||
DEMONSTRATION APPLICATION
|
||
|
||
A standard demonstration application is included for each implementation
|
||
of the Cassowary solver. The application builds a quadrilateral and
|
||
connects the neighboring midpoints of each of the outer edges to form an
|
||
interior quadrilateral which is provably a parallelogram. The
|
||
constraint solver manages the constraints to keep the outer
|
||
quadrilateral inside the window, keep the midpoints properly positioned,
|
||
and keep the outer quadrilateral from turning "inside out."
|
||
|
||
The user is able to select points (draggable boxes) and move them around
|
||
within the window (both midpoints and endpoints can be selected, of
|
||
course). The solver updates the figure, and redraws.
|
||
|
||
|
||
------------------------------------------------------------------
|
||
|
||
FUNDING ACKNOWLEDGEMENTS
|
||
|
||
This work has been funded in part by the National Science Foundation under
|
||
Grants IRI-9302249 and CCR-9402551, by Object Technology International, and
|
||
by a Fulbright Award from the Australian-American Educational
|
||
Foundation.
|
||
|
||
Additionally, Greg Badros is supported by a National Science Foundation
|
||
Graduate Research Fellowship. Parts of this material are based upon
|
||
work supported under that fellowship.
|