>>>> "David" == David Byers
<davby(a)ida.liu.se> writes:
David> All it takes is a macro definition in the base set of
David> packages that changes in an incompatible way between XEmacs
David> versions since macro definitions get expanded at compile
David> time.
"Packages" change incompatibly all the time. There's not much we can
do about that, and support packages too. However, I assume you mean
what we now call "core Lisp" (the libraries distributed with the
XEmacs source code and compiled binaries)?
In general, this is not as big a problem as it appears. As long as
the APIs called from a macro don't change, calls to the macro in
compiled code should continue behaving the same (since it is
pre-expanded code). This means that "incompatible" changes should be
fairly rare, and not due to changes in the macro itself (unless your
code is depending on an unspecified side effect, which is pretty
undesirable in itself), but rather in the functions it uses. And we
are supposed to be careful about making such changes in C code or core
Lisp.
David> The point is that in my case (and potentially others), the
David> output of the 21.1.8 byte compiler might not run properly
David> in 21.2 and vice versa.
With a few exceptions (somewhat more aggressive optimization in the
most recent devel versions is one), this is considered a bug in
XEmacs. The byte codes themselves and their specified semantics have
not changed. That doesn't help you in practice, I know, except that
you can tell users to avoid the "buggy" versions.
David> I was simply wondering how to deal with this sort of
David> problem in packages for XEmacs. Can I have uncompiled
David> package and have the Emacs getting the package
David> automatically build it?
Not yet.
This has been considered low priority so far, since one of the
original goals of the package system was making it possible for there
to be many more "official" packages and to be able to distribute them
in binary form.
One problem is specifying how to do this, since for historical reasons
the installed tree is {etc,info,lib,lisp}/$PACKAGE, while the source
tree is $PACKAGE/{etc,info,lib,lisp}. This means that you effectively
need two different makefiles, one for building in the source tree and
one for building in the installed tree.
If you have thoughts about how to deal with this, let us know.
--
University of Tsukuba Tennodai 1-1-1 Tsukuba 305-8573 JAPAN
Institute of Policy and Planning Sciences Tel/fax: +81 (298) 53-5091
_________________ _________________ _________________ _________________
What are those straight lines for? "XEmacs rules."