This is a follow-up to my previous report concerning the
build failure of Uzbeck White (b47) on LinuxPPC kernel
2.1.24.
I am using gcc-2.7.2-2O, have been seeing gcc -o temacs dies
with very useless status message with b47 Uzbeck White.
I never saw this error with b46 Toggenburg. After some
looking into, I notice that apparently this version (2.7.2-2O)
of gcc on linuxppc emits some garbage when a symbol name exceeds
31 (or so) characters.
As people moved from b46 to b47, some patches were applied to
winslots.h. In one place a symbol that was previously called
vertical-divider-draggable-p was replaced by
vertical-divider-always-visible-p. Reflecting this,
there is a variable called Vvertical-divider-always-visible-p
(34 char long) introduced in window.c. Apparently this
screws up the gcc behavior and it pukes on me when it tries
to link temacs.
K&R says that a C-compiler is supposed to differentiate symbol
names up to 31 chars, and beyond that is up to each
implementation. I don't know if the behavior above of gcc-2.7.2-2O
is legal or not strictly speaking, but it sounds to me like a bug
rather than an allowed feature.
A quick work-around is to shorten the symbol name
as I indicated in the attached patch file. But the XEmacs
maintainers may as well *not* implement this patch and add
an INSTALL/README warning against the use of gcc-2.7.2-2O
on linuxppc. Then Uzbek White does build and run fine,
including mule/canna support, if I this patch, though.
Fukui san reported that egcs 1.0.3a built Uzbek White OK.
I haven't tried that out myself. If I find time during this
week end, I will give a try. I also recognize that there is
gcc 2.8.something RPM floating around for linuxppc/mklinux,
but I don't know how that one fares.
Best,
- Nobu Toge (toge(a)accad1.kek.jp)
Index: xemacs-20.0/src/winslots.h
diff -u winslots.h winslots.h
--- winslots.h Sun Jul 12 12:16:50 1998
+++ winslots.h Sun Jul 12 12:19:38 1998
@@ -60,7 +60,7 @@
/* Spacing between outer egde of divider border and window edge */
WINDOW_SLOT (vertical_divider_spacing, EQ);
/* Whether vertical dividers are always displayed */
- WINDOW_SLOT (vertical_divider_always_visible_p, EQ);
+ WINDOW_SLOT (vertical_divider_always_visi_p, EQ);
#ifdef HAVE_SCROLLBARS
/* Width of vertical scrollbars. */
Index: xemacs-20.0/src/scrollbar.c
diff -u scrollbar.c scrollbar.c
--- scrollbar.c Tue Jun 30 15:36:01 1998
+++ scrollbar.c Sun Jul 12 12:23:21 1998
@@ -603,7 +603,7 @@
completely at either window edge, we do this always, as users
usually do not reposition scrollbars 200 times a second or so. Do
you? */
- if (NILP (w->vertical_divider_always_visible_p))
+ if (NILP (w->vertical_divider_always_visi_p))
MARK_FRAME_WINDOWS_STRUCTURE_CHANGED (XFRAME (WINDOW_FRAME (w)));
else
MARK_WINDOWS_CHANGED (w);
Index: xemacs-20.0/src/window.c
diff -u window.c window.c
--- window.c Sun Jul 12 12:39:46 1998
+++ window.c Sun Jul 12 12:41:22 1998
@@ -69,7 +69,7 @@
Lisp_Object Vmodeline_shadow_thickness;
/* Whether vertical dividers are draggable and displayed */
-Lisp_Object Vvertical_divider_always_visible_p;
+Lisp_Object Vvertical_divider_always_visi_p;
/* Whether a modeline should be displayed. */
Lisp_Object Vhas_modeline_p;
@@ -742,7 +742,7 @@
return 0;
/* Always if draggable */
- if (!NILP (w->vertical_divider_always_visible_p))
+ if (!NILP (w->vertical_divider_always_visi_p))
return 1;
#ifdef HAVE_SCROLLBARS
@@ -5618,8 +5618,8 @@
some_window_value_changed,
0, 0);
- DEFVAR_SPECIFIER ("vertical-divider-always-visible-p",
- &Vvertical_divider_always_visible_p /*
+ DEFVAR_SPECIFIER ("vertical-divider-always-visi-p",
+ &Vvertical_divider_always_visi_p /*
*Should XEmacs always display vertical dividers between windows.
When this is non-nil, vertical dividers are always shown, and are
@@ -5628,12 +5628,12 @@
This is a specifier; use `set-specifier' to change it.
*/ );
- Vvertical_divider_always_visible_p = Fmake_specifier (Qboolean);
- set_specifier_fallback (Vvertical_divider_always_visible_p,
+ Vvertical_divider_always_visi_p = Fmake_specifier (Qboolean);
+ set_specifier_fallback (Vvertical_divider_always_visi_p,
list1 (Fcons (Qnil, Qt)));
- set_specifier_caching (Vvertical_divider_always_visible_p,
+ set_specifier_caching (Vvertical_divider_always_visi_p,
slot_offset (struct window,
- vertical_divider_always_visible_p),
+ vertical_divider_always_visi_p),
vertical_divider_changed_in_window,
0, 0);
uname -a: Linux ptaro.kek.jp 2.1.24 #122 Thu Apr 9 10:27:39 EST 1998 ppc unknown
./configure '--cflags=-g -O2 -fsigned-char' '--dynamic=yes' '--error-checking=none' '--debug=no' '--with-dialogs=athena' '--with-site-lisp' '--prefix=/usr' '--with-xfs' '--with-canna' '--with-mule' '--package-path=/usr/lib/xemacspack' '--with-x'
XEmacs 21.0 "Uzbek Black" configured for `powerpc-unknown-linux'.
Where should the build process find the source code? /home/toge/XEmacs/xemacs-21.0-b47
What installation prefix should install use? /usr
What operating system and machine description files should XEmacs use?
`s/linux.h' and `m/powerpc.h'
What compiler should XEmacs be built with? gcc -g -O2 -fsigned-char
Should XEmacs use the GNU version of malloc? yes
Should XEmacs use the relocating allocator for buffers? yes
What window system should XEmacs use? x11
Where do we find X Windows header files? /usr/X11/include
Where do we find X Windows libraries? /usr/X11/lib
Compiling in support for XAUTH.
Compiling in support for XPM images.
Compiling in support for X-Face message headers.
Compiling in support for JPEG image conversion.
Compiling in support for PNG image conversion.
Compiling in support for TIFF image conversion.
Compiling in native sound support.
Compiling in support for Berkeley DB.
Compiling in support for GNU DBM.
Compiling in support for ncurses.
Compiling in support for GPM (General Purpose Mouse).
Compiling in Mule (multi-lingual) support.
Compiling in XIM (X11R5+ I18N input method) support.
Using raw Xlib to provide XIM support.
Using XFontSet to provide bilingual menubar.
Compiling in support for Canna on Mule.
Compiling in support for OffiX.
Compiling in EXPERIMENTAL support for Drag'n'Drop ( OffiX ).
Compiling in support for proper session-management.
Using Lucid menubars.
Using Lucid scrollbars.
Using Athena dialog boxes.
Compiling in DLL support.
movemail will use "dot-locking" for locking mail spool files.