Hi there (again):

We're discovering a few things as we get our build system up and running
(to build the compiler docs along with our 64-bit compiler (optimized
for an Opteron system). The goal is to build LyX 1.3.6 with the change
bar patch on a 64-bit Opteron system for a number of LyX distributions.

Are you using LyX on a 64-bit system (specifically Opteron)? Can we
expect it to "just work"? Any hints you might pass along?

Thanks!

--jane


Here's the note from Jeremy, the engineer who's created the change
tracking patch and is now sorting out the build:

-----

The change tracking patch added a boolean argument to many of the
editing functions that specified if the change was to be tracked. In
about every case, this has the default value of true. I have
discovered a possible ambiguity that needs to be resolved. In
paragraph.C, erase() was originally defined as:

    void erase(lyx::pos_type pos);

The change tracking patch modified this and added another erase() call
that allowed the caller to specify a range:

    void erase(lyx::pos_type pos, bool flag=true);
    bool erase(lyx::pos_type start, lyx::pos_type end, bool flag=true);

lyx::pos_type is defined in src/support/types.h as
std::vector<char>::difference_type. On a system on which this type
matches the bool type, erase (11, 1) can appear to be either a call to
erase the character range from 11 to 1, or to erase the character at
11, with change tracking on.

I'm not certain I like this design choice, but it can be worked around
with this patch:

--- 1.3/src/CutAndPaste.C       2005-07-18 17:17:30 -07:00
+++ 1.4/src/CutAndPaste.C       2005-09-08 13:58:47 -07:00
@@ -92,7 +92,7 @@
        }
 
        if (!endpar || startpar == *endpar) {
-               if (startpar->erase(start, end)) {
+               if (startpar->erase(start, end, true)) {
                        // Some chars were erased, go to start to be
safe
                        end = start;
                }
@@ -103,7 +103,7 @@
  
        // clear end/begin fragments of the first/last par in selection
        actually_erased |= (startpar)->erase(start, startpar->size());
-       if ((*endpar)->erase(0, end)) {
+       if ((*endpar)->erase(0, end, true)) {
                actually_erased = true; 
                end = 0;
        }
@@ -121,7 +121,7 @@
  
                // "erase" the contents of the par
                if (pit != *endpar) {
-                       actually_erased |= pit->erase(0, pit->size());
+                       actually_erased |= pit->erase(0, pit->size(),
true);
 
                        // remove the par if it's now empty
                        if (actually_erased) {


-- 
Jane McKean
Technical Documentation
PathScale, Inc.
[EMAIL PROTECTED]

Reply via email to